From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id D60051FF179 for ; Wed, 7 Jan 2026 10:14:58 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2FEA06FF4; Wed, 7 Jan 2026 10:16:05 +0100 (CET) From: Kefu Chai To: pve-devel@lists.proxmox.com Date: Tue, 6 Jan 2026 22:24:28 +0800 Message-ID: <20260106142440.2368585-5-k.chai@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260106142440.2368585-1-k.chai@proxmox.com> References: <20260106142440.2368585-1-k.chai@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1767709471188 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.051 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment PROLO_LEO1 0.1 Meta Catches all Leo drug variations so far SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_SBL_A 0.1 Contains URL's A record listed in the Spamhaus SBL blocklist [188.114.96.3, 188.114.97.3] X-Mailman-Approved-At: Wed, 07 Jan 2026 10:16:04 +0100 Subject: [pve-devel] [PATCH pve-cluster 04/15] pmxcfs-rs: add pmxcfs-rrd crate X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" QWRkIFJSRCAoUm91bmQtUm9iaW4gRGF0YWJhc2UpIGZpbGUgcGVyc2lzdGVuY2Ugc3lzdGVtOgot IFJyZFdyaXRlcjogTWFpbiBBUEkgZm9yIFJSRCBvcGVyYXRpb25zCi0gU2NoZW1hIGRlZmluaXRp b25zIGZvciBDUFUsIG1lbW9yeSwgbmV0d29yayBtZXRyaWNzCi0gRm9ybWF0IG1pZ3JhdGlvbiBz dXBwb3J0ICh2MS92Mi92MykKLSBycmRjYWNoZWQgaW50ZWdyYXRpb24gZm9yIGJhdGNoZWQgd3Jp dGVzCi0gRGF0YSB0cmFuc2Zvcm1hdGlvbiBmb3IgbGVnYWN5IGZvcm1hdHMKClRoaXMgaXMgYW4g aW5kZXBlbmRlbnQgY3JhdGUgd2l0aCBubyBpbnRlcm5hbCBkZXBlbmRlbmNpZXMsCm9ubHkgcmVx dWlyaW5nIGV4dGVybmFsIFJSRCBsaWJyYXJpZXMgKHJyZCwgcnJkY2FjaGVkLWNsaWVudCkKYW5k IHRva2lvIGZvciBhc3luYyBvcGVyYXRpb25zLiBJdCBoYW5kbGVzIHRpbWUtc2VyaWVzIGRhdGEK c3RvcmFnZSBjb21wYXRpYmxlIHdpdGggdGhlIEMgaW1wbGVtZW50YXRpb24uCgpJbmNsdWRlcyBj b21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIGRhdGEgdHJhbnNmb3JtYXRpb24sCnNjaGVtYSBn ZW5lcmF0aW9uLCBhbmQgbXVsdGktc291cmNlIGRhdGEgcHJvY2Vzc2luZy4KClNpZ25lZC1vZmYt Ynk6IEtlZnUgQ2hhaSA8ay5jaGFpQHByb3htb3guY29tPgotLS0KIHNyYy9wbXhjZnMtcnMvQ2Fy Z28udG9tbCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvcG14Y2ZzLXJzL3BteGNm cy1ycmQvQ2FyZ28udG9tbCAgICAgICAgICAgfCAgMTggKwogc3JjL3BteGNmcy1ycy9wbXhjZnMt cnJkL1JFQURNRS5tZCAgICAgICAgICAgIHwgIDUxICsrCiBzcmMvcG14Y2ZzLXJzL3BteGNmcy1y cmQvc3JjL2JhY2tlbmQucnMgICAgICAgfCAgNjcgKysKIC4uLi9wbXhjZnMtcnJkL3NyYy9iYWNr ZW5kL2JhY2tlbmRfZGFlbW9uLnJzICB8IDIxNCArKysrKysrCiAuLi4vcG14Y2ZzLXJyZC9zcmMv YmFja2VuZC9iYWNrZW5kX2RpcmVjdC5ycyAgfCA2MDYgKysrKysrKysrKysrKysrKysrCiAuLi4v c3JjL2JhY2tlbmQvYmFja2VuZF9mYWxsYmFjay5ycyAgICAgICAgICAgfCAyMjkgKysrKysrKwog c3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9kYWVtb24ucnMgICAgICAgIHwgMTQwICsrKysK IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMva2V5X3R5cGUucnMgICAgICB8IDMxMyArKysr KysrKysKIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvbGliLnJzICAgICAgICAgICB8ICAy MSArCiBzcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL3NjaGVtYS5ycyAgICAgICAgfCA1Nzcg KysrKysrKysrKysrKysrKysKIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvd3JpdGVyLnJz ICAgICAgICB8IDM5NyArKysrKysrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDI2MzQgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9DYXJn by50b21sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL1JFQURN RS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvYmFj a2VuZC5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMv YmFja2VuZC9iYWNrZW5kX2RhZW1vbi5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMt cnMvcG14Y2ZzLXJyZC9zcmMvYmFja2VuZC9iYWNrZW5kX2RpcmVjdC5ycwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvYmFja2VuZC9iYWNrZW5kX2ZhbGxi YWNrLnJzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9k YWVtb24ucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3Jj L2tleV90eXBlLnJzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJk L3NyYy9saWIucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQv c3JjL3NjaGVtYS5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLXJy ZC9zcmMvd3JpdGVyLnJzCgpkaWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9DYXJnby50b21sIGIv c3JjL3BteGNmcy1ycy9DYXJnby50b21sCmluZGV4IDRkMTdlODdlLi5kZDM2YzgxZiAxMDA2NDQK LS0tIGEvc3JjL3BteGNmcy1ycy9DYXJnby50b21sCisrKyBiL3NyYy9wbXhjZnMtcnMvQ2FyZ28u dG9tbApAQCAtNCw2ICs0LDcgQEAgbWVtYmVycyA9IFsKICAgICAicG14Y2ZzLWFwaS10eXBlcyIs ICAjIFNoYXJlZCB0eXBlcyBhbmQgZXJyb3IgZGVmaW5pdGlvbnMKICAgICAicG14Y2ZzLWNvbmZp ZyIsICAgICAjIENvbmZpZ3VyYXRpb24gbWFuYWdlbWVudAogICAgICJwbXhjZnMtbG9nZ2VyIiwg ICAgICMgQ2x1c3RlciBsb2cgd2l0aCByaW5nIGJ1ZmZlciBhbmQgZGVkdXBsaWNhdGlvbgorICAg ICJwbXhjZnMtcnJkIiwgICAgICAgICMgUlJEIChSb3VuZC1Sb2JpbiBEYXRhYmFzZSkgcGVyc2lz dGVuY2UKIF0KIHJlc29sdmVyID0gIjIiCiAKZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14 Y2ZzLXJyZC9DYXJnby50b21sIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL0NhcmdvLnRvbWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmJhYjcxNDIzCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwx OCBAQAorW3BhY2thZ2VdCituYW1lID0gInBteGNmcy1ycmQiCit2ZXJzaW9uLndvcmtzcGFjZSA9 IHRydWUKK2VkaXRpb24ud29ya3NwYWNlID0gdHJ1ZQorYXV0aG9ycy53b3Jrc3BhY2UgPSB0cnVl CitsaWNlbnNlLndvcmtzcGFjZSA9IHRydWUKKworW2RlcGVuZGVuY2llc10KK2FueWhvdy53b3Jr c3BhY2UgPSB0cnVlCithc3luYy10cmFpdCA9ICIwLjEiCitjaHJvbm8gPSB7IHZlcnNpb24gPSAi MC40IiwgZGVmYXVsdC1mZWF0dXJlcyA9IGZhbHNlLCBmZWF0dXJlcyA9IFsiY2xvY2siXSB9City cmQgPSAiMC4yIgorcnJkY2FjaGVkLWNsaWVudCA9ICIwLjEuNSIKK3Rva2lvLndvcmtzcGFjZSA9 IHRydWUKK3RyYWNpbmcud29ya3NwYWNlID0gdHJ1ZQorCitbZGV2LWRlcGVuZGVuY2llc10KK3Rl bXBmaWxlLndvcmtzcGFjZSA9IHRydWUKZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2Zz LXJyZC9SRUFETUUubWQgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvUkVBRE1FLm1kCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi44MDBkNzhjZgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9SRUFETUUubWQKQEAgLTAsMCArMSw1MSBAQAor IyBwbXhjZnMtcnJkCisKK1JSRCAoUm91bmQtUm9iaW4gRGF0YWJhc2UpIHBlcnNpc3RlbmNlIGZv ciBwbXhjZnMgcGVyZm9ybWFuY2UgbWV0cmljcy4KKworIyMgT3ZlcnZpZXcKKworVGhpcyBjcmF0 ZSBwcm92aWRlcyBSUkQgZmlsZSBtYW5hZ2VtZW50IGZvciBzdG9yaW5nIHRpbWUtc2VyaWVzIHBl cmZvcm1hbmNlIGRhdGEgZnJvbSBQcm94bW94IG5vZGVzIGFuZCBWTXMuIEl0IGhhbmRsZXMgZmls ZSBjcmVhdGlvbiwgdXBkYXRlcywgYW5kIGludGVncmF0aW9uIHdpdGggcnJkY2FjaGVkIGRhZW1v biBmb3IgZWZmaWNpZW50IHdyaXRlcy4KKworIyMjIEtleSBGZWF0dXJlcworCistIFJSRCBmaWxl IGNyZWF0aW9uIHdpdGggc2NoZW1hLWJhc2VkIGluaXRpYWxpemF0aW9uCistIFJSRCB1cGRhdGVz ICh3cml0ZSBtZXRyaWNzIHRvIGRpc2spCistIHJyZGNhY2hlZCBpbnRlZ3JhdGlvbiBmb3IgYmF0 Y2hlZCB3cml0ZXMKKy0gU3VwcG9ydCBmb3IgYm90aCBsZWdhY3kgYW5kIGN1cnJlbnQgc2NoZW1h IHZlcnNpb25zCistIFR5cGUtc2FmZSBrZXkgcGFyc2luZyBhbmQgdmFsaWRhdGlvbgorLSBDb21w YXRpYmxlIHdpdGggZXhpc3RpbmcgQy1jcmVhdGVkIFJSRCBmaWxlcworCisjIyBNb2R1bGUgU3Ry dWN0dXJlCisKK3wgTW9kdWxlIHwgUHVycG9zZSB8Cit8LS0tLS0tLS18LS0tLS0tLS0tfAorfCBg d3JpdGVyLnJzYCB8IE1haW4gUnJkV3JpdGVyIEFQSSB8Cit8IGBzY2hlbWEucnNgIHwgUlJEIHNj aGVtYSBkZWZpbml0aW9ucyAoRFMsIFJSQSkgfAorfCBga2V5X3R5cGUucnNgIHwgUlJEIGtleSBw YXJzaW5nIGFuZCB2YWxpZGF0aW9uIHwKK3wgYGRhZW1vbi5yc2AgfCBycmRjYWNoZWQgZGFlbW9u IGNsaWVudCB8CisKKyMjIEV4dGVybmFsIERlcGVuZGVuY2llcworCistICoqbGlicnJkKio6IFJS RHRvb2wgbGlicmFyeSAodmlhIEZGSSBiaW5kaW5ncykKKy0gKipycmRjYWNoZWQqKjogT3B0aW9u YWwgZGFlbW9uIGZvciBiYXRjaGVkIHdyaXRlcyBhbmQgaW1wcm92ZWQgcGVyZm9ybWFuY2UKKwor IyMgVGVzdGluZworCitVbml0IHRlc3RzIHZlcmlmeToKKy0gU2NoZW1hIGdlbmVyYXRpb24gYW5k IHZhbGlkYXRpb24KKy0gS2V5IHBhcnNpbmcgZm9yIGRpZmZlcmVudCBSUkQgdHlwZXMgKG5vZGUs IFZNLCBzdG9yYWdlKQorLSBSUkQgZmlsZSBjcmVhdGlvbiBhbmQgdXBkYXRlIG9wZXJhdGlvbnMK Ky0gcnJkY2FjaGVkIGNsaWVudCBjb25uZWN0aW9uIGFuZCBmYWxsYmFjayBiZWhhdmlvcgorCitS dW4gdGVzdHMgd2l0aDoKK2BgYGJhc2gKK2NhcmdvIHRlc3QgLXAgcG14Y2ZzLXJyZAorYGBgCisK KyMjIFJlZmVyZW5jZXMKKworLSAqKkMgSW1wbGVtZW50YXRpb24qKjogYHNyYy9wbXhjZnMvc3Rh dHVzLmNgIChSUkQgY29kZSBlbWJlZGRlZCkKKy0gKipSZWxhdGVkIENyYXRlcyoqOgorICAtIGBw bXhjZnMtc3RhdHVzYCAtIFVzZXMgUnJkV3JpdGVyIGZvciBtZXRyaWNzIHBlcnNpc3RlbmNlCisg IC0gYHBteGNmc2AgLSBGVVNFIGAucnJkYCBwbHVnaW4gcmVhZHMgUlJEIGZpbGVzCistICoqUlJE dG9vbCBEb2N1bWVudGF0aW9uKio6IGh0dHBzOi8vb3NzLm9ldGlrZXIuY2gvcnJkdG9vbC8KZGlm ZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvYmFja2VuZC5ycyBiL3NyYy9w bXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvYmFja2VuZC5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMC4uNTg2NTI4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG14Y2ZzLXJz L3BteGNmcy1ycmQvc3JjL2JhY2tlbmQucnMKQEAgLTAsMCArMSw2NyBAQAorLy8vIFJSRCBCYWNr ZW5kIFRyYWl0IGFuZCBJbXBsZW1lbnRhdGlvbnMKKy8vLworLy8vIFRoaXMgbW9kdWxlIHByb3Zp ZGVzIGFuIGFic3RyYWN0aW9uIG92ZXIgZGlmZmVyZW50IFJSRCB3cml0aW5nIG1lY2hhbmlzbXM6 CisvLy8gLSBEYWVtb24tYmFzZWQgKHZpYSBycmRjYWNoZWQpIGZvciBwZXJmb3JtYW5jZSBhbmQg YmF0Y2hpbmcKKy8vLyAtIERpcmVjdCBmaWxlIHdyaXRpbmcgZm9yIHJlbGlhYmlsaXR5IGFuZCBm YWxsYmFjayBzY2VuYXJpb3MKKy8vLyAtIEZhbGxiYWNrIGNvbXBvc2l0ZSB0aGF0IHRyaWVzIGRh ZW1vbiBmaXJzdCwgdGhlbiBmYWxscyBiYWNrIHRvIGRpcmVjdAorLy8vCisvLy8gVGhpcyBkZXNp Z24gbWF0Y2hlcyB0aGUgQyBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yIGluIHN0YXR1cy5jIHdo ZXJlCisvLy8gaXQgYXR0ZW1wdHMgZGFlbW9uIHVwZGF0ZSBmaXJzdCwgdGhlbiBmYWxscyBiYWNr IHRvIGRpcmVjdCBmaWxlIHdyaXRlcy4KK3VzZSBzdXBlcjo6c2NoZW1hOjpScmRTY2hlbWE7Cit1 c2UgYW55aG93OjpSZXN1bHQ7Cit1c2UgYXN5bmNfdHJhaXQ6OmFzeW5jX3RyYWl0OwordXNlIHN0 ZDo6cGF0aDo6UGF0aDsKKworLy8vIFRyYWl0IGZvciBSUkQgYmFja2VuZCBpbXBsZW1lbnRhdGlv bnMKKy8vLworLy8vIFByb3ZpZGVzIGFic3RyYWN0aW9uIG92ZXIgZGlmZmVyZW50IFJSRCB3cml0 aW5nIG1lY2hhbmlzbXMuCisvLy8gQWxsIG1ldGhvZHMgYXJlIGFzeW5jIHRvIHN1cHBvcnQgYm90 aCBhc3luYyAoZGFlbW9uKSBhbmQgc3luYyAoZGlyZWN0IGZpbGUpIG9wZXJhdGlvbnMuCisjW2Fz eW5jX3RyYWl0XQorcHViIHRyYWl0IFJyZEJhY2tlbmQ6IFNlbmQgKyBTeW5jIHsKKyAgICAvLy8g VXBkYXRlIFJSRCBmaWxlIHdpdGggbmV3IGRhdGEKKyAgICAvLy8KKyAgICAvLy8gIyBBcmd1bWVu dHMKKyAgICAvLy8gKiBgZmlsZV9wYXRoYCAtIEZ1bGwgcGF0aCB0byB0aGUgUlJEIGZpbGUKKyAg ICAvLy8gKiBgZGF0YWAgLSBVcGRhdGUgZGF0YSBpbiBmb3JtYXQgInRpbWVzdGFtcDp2YWx1ZTE6 dmFsdWUyOi4uLiIKKyAgICBhc3luYyBmbiB1cGRhdGUoJm11dCBzZWxmLCBmaWxlX3BhdGg6ICZQ YXRoLCBkYXRhOiAmc3RyKSAtPiBSZXN1bHQ8KCk+OworCisgICAgLy8vIENyZWF0ZSBuZXcgUlJE IGZpbGUgd2l0aCBzY2hlbWEKKyAgICAvLy8KKyAgICAvLy8gIyBBcmd1bWVudHMKKyAgICAvLy8g KiBgZmlsZV9wYXRoYCAtIEZ1bGwgcGF0aCB3aGVyZSBSUkQgZmlsZSBzaG91bGQgYmUgY3JlYXRl ZAorICAgIC8vLyAqIGBzY2hlbWFgIC0gUlJEIHNjaGVtYSBkZWZpbmluZyBkYXRhIHNvdXJjZXMg YW5kIGFyY2hpdmVzCisgICAgLy8vICogYHN0YXJ0X3RpbWVzdGFtcGAgLSBTdGFydCB0aW1lIGZv ciB0aGUgUlJEIGZpbGUgKFVuaXggdGltZXN0YW1wKQorICAgIGFzeW5jIGZuIGNyZWF0ZSgKKyAg ICAgICAgJm11dCBzZWxmLAorICAgICAgICBmaWxlX3BhdGg6ICZQYXRoLAorICAgICAgICBzY2hl bWE6ICZScmRTY2hlbWEsCisgICAgICAgIHN0YXJ0X3RpbWVzdGFtcDogaTY0LAorICAgICkgLT4g UmVzdWx0PCgpPjsKKworICAgIC8vLyBGbHVzaCBwZW5kaW5nIHVwZGF0ZXMgdG8gZGlzaworICAg IC8vLworICAgIC8vLyBGb3IgZGFlbW9uIGJhY2tlbmRzLCB0aGlzIHNlbmRzIGEgRkxVU0ggY29t bWFuZC4KKyAgICAvLy8gRm9yIGRpcmVjdCBiYWNrZW5kcywgdGhpcyBpcyBhIG5vLW9wICh3cml0 ZXMgYXJlIGltbWVkaWF0ZSkuCisgICAgI1thbGxvdyhkZWFkX2NvZGUpXSAvLyBVc2VkIGluIGJh Y2tlbmQgaW1wbGVtZW50YXRpb25zIHZpYSB0cmFpdCBkaXNwYXRjaAorICAgIGFzeW5jIGZuIGZs dXNoKCZtdXQgc2VsZikgLT4gUmVzdWx0PCgpPjsKKworICAgIC8vLyBDaGVjayBpZiBiYWNrZW5k IGlzIGF2YWlsYWJsZSBhbmQgaGVhbHRoeQorICAgIC8vLworICAgIC8vLyBSZXR1cm5zIHRydWUg aWYgdGhlIGJhY2tlbmQgY2FuIGJlIHVzZWQgZm9yIG9wZXJhdGlvbnMuCisgICAgLy8vIEZvciBk YWVtb24gYmFja2VuZHMsIHRoaXMgY2hlY2tzIGlmIHRoZSBjb25uZWN0aW9uIGlzIGFsaXZlLgor ICAgIC8vLyBGb3IgZGlyZWN0IGJhY2tlbmRzLCB0aGlzIGFsd2F5cyByZXR1cm5zIHRydWUuCisg ICAgI1thbGxvdyhkZWFkX2NvZGUpXSAvLyBVc2VkIGluIGZhbGxiYWNrIGJhY2tlbmQgdmlhIHRy YWl0IGRpc3BhdGNoCisgICAgYXN5bmMgZm4gaXNfYXZhaWxhYmxlKCZzZWxmKSAtPiBib29sOwor CisgICAgLy8vIEdldCBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgYmFja2VuZAorICAg IGZuIG5hbWUoJnNlbGYpIC0+ICZzdHI7Cit9CisKKy8vIEJhY2tlbmQgaW1wbGVtZW50YXRpb25z Cittb2QgYmFja2VuZF9kYWVtb247Cittb2QgYmFja2VuZF9kaXJlY3Q7Cittb2QgYmFja2VuZF9m YWxsYmFjazsKKworcHViIHVzZSBiYWNrZW5kX2RhZW1vbjo6UnJkQ2FjaGVkQmFja2VuZDsKK3B1 YiB1c2UgYmFja2VuZF9kaXJlY3Q6OlJyZERpcmVjdEJhY2tlbmQ7CitwdWIgdXNlIGJhY2tlbmRf ZmFsbGJhY2s6OlJyZEZhbGxiYWNrQmFja2VuZDsKZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMv cG14Y2ZzLXJyZC9zcmMvYmFja2VuZC9iYWNrZW5kX2RhZW1vbi5ycyBiL3NyYy9wbXhjZnMtcnMv cG14Y2ZzLXJyZC9zcmMvYmFja2VuZC9iYWNrZW5kX2RhZW1vbi5ycwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMC4uMjhjMWE5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG14 Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL2JhY2tlbmQvYmFja2VuZF9kYWVtb24ucnMKQEAgLTAsMCAr MSwyMTQgQEAKKy8vLyBSUkQgQmFja2VuZDogcnJkY2FjaGVkIGRhZW1vbgorLy8vCisvLy8gVXNl cyBycmRjYWNoZWQgZm9yIGJhdGNoZWQsIGhpZ2gtcGVyZm9ybWFuY2UgUlJEIHVwZGF0ZXMuCisv Ly8gVGhpcyBpcyB0aGUgcHJlZmVycmVkIGJhY2tlbmQgd2hlbiB0aGUgZGFlbW9uIGlzIGF2YWls YWJsZS4KK3VzZSBzdXBlcjo6c3VwZXI6OnNjaGVtYTo6UnJkU2NoZW1hOwordXNlIGFueWhvdzo6 e0NvbnRleHQsIFJlc3VsdH07Cit1c2UgYXN5bmNfdHJhaXQ6OmFzeW5jX3RyYWl0OwordXNlIHJy ZGNhY2hlZF9jbGllbnQ6OlJSRENhY2hlZENsaWVudDsKK3VzZSBycmRjYWNoZWRfY2xpZW50Ojpj b25zb2xpZGF0aW9uX2Z1bmN0aW9uOjpDb25zb2xpZGF0aW9uRnVuY3Rpb247Cit1c2UgcnJkY2Fj aGVkX2NsaWVudDo6Y3JlYXRlOjp7CisgICAgQ3JlYXRlQXJndW1lbnRzLCBDcmVhdGVEYXRhU291 cmNlLCBDcmVhdGVEYXRhU291cmNlVHlwZSwgQ3JlYXRlUm91bmRSb2JpbkFyY2hpdmUsCit9Owor dXNlIHN0ZDo6cGF0aDo6UGF0aDsKKworLy8vIFJSRCBiYWNrZW5kIHVzaW5nIHJyZGNhY2hlZCBk YWVtb24KK3B1YiBzdHJ1Y3QgUnJkQ2FjaGVkQmFja2VuZCB7CisgICAgY2xpZW50OiBSUkRDYWNo ZWRDbGllbnQ8dG9raW86Om5ldDo6VW5peFN0cmVhbT4sCit9CisKK2ltcGwgUnJkQ2FjaGVkQmFj a2VuZCB7CisgICAgLy8vIENvbm5lY3QgdG8gcnJkY2FjaGVkIGRhZW1vbgorICAgIC8vLworICAg IC8vLyAjIEFyZ3VtZW50cworICAgIC8vLyAqIGBzb2NrZXRfcGF0aGAgLSBQYXRoIHRvIHJyZGNh Y2hlZCBVbml4IHNvY2tldCAoZGVmYXVsdDogL3Zhci9ydW4vcnJkY2FjaGVkLnNvY2spCisgICAg cHViIGFzeW5jIGZuIGNvbm5lY3Qoc29ja2V0X3BhdGg6ICZzdHIpIC0+IFJlc3VsdDxTZWxmPiB7 CisgICAgICAgIGxldCBjbGllbnQgPSBSUkRDYWNoZWRDbGllbnQ6OmNvbm5lY3RfdW5peChzb2Nr ZXRfcGF0aCkKKyAgICAgICAgICAgIC5hd2FpdAorICAgICAgICAgICAgLndpdGhfY29udGV4dCh8 fCBmb3JtYXQhKCJGYWlsZWQgdG8gY29ubmVjdCB0byBycmRjYWNoZWQgYXQge3NvY2tldF9wYXRo fSIpKT87CisKKyAgICAgICAgdHJhY2luZzo6aW5mbyEoIkNvbm5lY3RlZCB0byBycmRjYWNoZWQg YXQge30iLCBzb2NrZXRfcGF0aCk7CisKKyAgICAgICAgT2soU2VsZiB7IGNsaWVudCB9KQorICAg IH0KK30KKworI1thc3luY190cmFpdF0KK2ltcGwgc3VwZXI6OnN1cGVyOjpiYWNrZW5kOjpScmRC YWNrZW5kIGZvciBScmRDYWNoZWRCYWNrZW5kIHsKKyAgICBhc3luYyBmbiB1cGRhdGUoJm11dCBz ZWxmLCBmaWxlX3BhdGg6ICZQYXRoLCBkYXRhOiAmc3RyKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAg ICAgLy8gUGFyc2UgdGhlIHVwZGF0ZSBkYXRhCisgICAgICAgIGxldCBwYXJ0czogVmVjPCZzdHI+ ID0gZGF0YS5zcGxpdCgnOicpLmNvbGxlY3QoKTsKKyAgICAgICAgaWYgcGFydHMubGVuKCkgPCAy IHsKKyAgICAgICAgICAgIGFueWhvdzo6YmFpbCEoIkludmFsaWQgdXBkYXRlIGRhdGEgZm9ybWF0 OiB7ZGF0YX0iKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCB0aW1lc3RhbXAgPSBpZiBwYXJ0 c1swXSA9PSAiTiIgeworICAgICAgICAgICAgTm9uZQorICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgU29tZSgKKyAgICAgICAgICAgICAgICBwYXJ0c1swXQorICAgICAgICAgICAgICAgICAg ICAucGFyc2U6Ojx1c2l6ZT4oKQorICAgICAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8 IGZvcm1hdCEoIkludmFsaWQgdGltZXN0YW1wOiB7fSIsIHBhcnRzWzBdKSk/LAorICAgICAgICAg ICAgKQorICAgICAgICB9OworCisgICAgICAgIGxldCB2YWx1ZXM6IFZlYzxmNjQ+ID0gcGFydHNb MS4uXQorICAgICAgICAgICAgLml0ZXIoKQorICAgICAgICAgICAgLm1hcCh8dnwgeworICAgICAg ICAgICAgICAgIGlmICp2ID09ICJVIiB7CisgICAgICAgICAgICAgICAgICAgIE9rKGY2NDo6TkFO KQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHYucGFyc2U6 OjxmNjQ+KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0 ISgiSW52YWxpZCB2YWx1ZToge3Z9IikpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSkKKyAgICAgICAgICAgIC5jb2xsZWN0Ojo8UmVzdWx0PFZlYzxfPj4+KCk/OworCisgICAgICAg IC8vIEdldCBmaWxlIHBhdGggd2l0aG91dCAucnJkIGV4dGVuc2lvbiAocnJkY2FjaGVkLWNsaWVu dCBhZGRzIGl0KQorICAgICAgICBsZXQgcGF0aF9zdHIgPSBmaWxlX3BhdGgudG9fc3RyaW5nX2xv c3N5KCk7CisgICAgICAgIGxldCBwYXRoX3dpdGhvdXRfZXh0ID0gcGF0aF9zdHIuc3RyaXBfc3Vm Zml4KCIucnJkIikudW53cmFwX29yKCZwYXRoX3N0cik7CisKKyAgICAgICAgLy8gU2VuZCB1cGRh dGUgdmlhIHJyZGNhY2hlZAorICAgICAgICBzZWxmLmNsaWVudAorICAgICAgICAgICAgLnVwZGF0 ZShwYXRoX3dpdGhvdXRfZXh0LCB0aW1lc3RhbXAsIHZhbHVlcykKKyAgICAgICAgICAgIC5hd2Fp dAorICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJycmRjYWNoZWQgdXBkYXRl IGZhaWxlZCBmb3Igezo/fSIsIGZpbGVfcGF0aCkpPzsKKworICAgICAgICB0cmFjaW5nOjp0cmFj ZSEoIlVwZGF0ZWQgUlJEIHZpYSBkYWVtb246IHs6P30gLT4ge30iLCBmaWxlX3BhdGgsIGRhdGEp OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGFzeW5jIGZuIGNyZWF0ZSgKKyAgICAg ICAgJm11dCBzZWxmLAorICAgICAgICBmaWxlX3BhdGg6ICZQYXRoLAorICAgICAgICBzY2hlbWE6 ICZScmRTY2hlbWEsCisgICAgICAgIHN0YXJ0X3RpbWVzdGFtcDogaTY0LAorICAgICkgLT4gUmVz dWx0PCgpPiB7CisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgKKyAgICAgICAgICAgICJDcmVhdGlu ZyBSUkQgZmlsZSB2aWEgZGFlbW9uOiB7Oj99IHdpdGgge30gZGF0YSBzb3VyY2VzIiwKKyAgICAg ICAgICAgIGZpbGVfcGF0aCwKKyAgICAgICAgICAgIHNjaGVtYS5jb2x1bW5fY291bnQoKQorICAg ICAgICApOworCisgICAgICAgIC8vIENvbnZlcnQgb3VyIGRhdGEgc291cmNlcyB0byBycmRjYWNo ZWQtY2xpZW50IENyZWF0ZURhdGFTb3VyY2Ugb2JqZWN0cworICAgICAgICBsZXQgbXV0IGRhdGFf c291cmNlcyA9IFZlYzo6bmV3KCk7CisgICAgICAgIGZvciBkcyBpbiAmc2NoZW1hLmRhdGFfc291 cmNlcyB7CisgICAgICAgICAgICBsZXQgc2VyaWVfdHlwZSA9IG1hdGNoIGRzLmRzX3R5cGUgewor ICAgICAgICAgICAgICAgICJHQVVHRSIgPT4gQ3JlYXRlRGF0YVNvdXJjZVR5cGU6OkdhdWdlLAor ICAgICAgICAgICAgICAgICJERVJJVkUiID0+IENyZWF0ZURhdGFTb3VyY2VUeXBlOjpEZXJpdmUs CisgICAgICAgICAgICAgICAgIkNPVU5URVIiID0+IENyZWF0ZURhdGFTb3VyY2VUeXBlOjpDb3Vu dGVyLAorICAgICAgICAgICAgICAgICJBQlNPTFVURSIgPT4gQ3JlYXRlRGF0YVNvdXJjZVR5cGU6 OkFic29sdXRlLAorICAgICAgICAgICAgICAgIF8gPT4gYW55aG93OjpiYWlsISgiVW5zdXBwb3J0 ZWQgZGF0YSBzb3VyY2UgdHlwZToge30iLCBkcy5kc190eXBlKSwKKyAgICAgICAgICAgIH07CisK KyAgICAgICAgICAgIC8vIFBhcnNlIG1pbi9tYXggdmFsdWVzCisgICAgICAgICAgICBsZXQgbWlu aW11bSA9IGlmIGRzLm1pbiA9PSAiVSIgeworICAgICAgICAgICAgICAgIE5vbmUKKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZHMubWluLnBhcnNlKCkub2soKQorICAgICAg ICAgICAgfTsKKyAgICAgICAgICAgIGxldCBtYXhpbXVtID0gaWYgZHMubWF4ID09ICJVIiB7Cisg ICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBkcy5tYXgucGFyc2UoKS5vaygpCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBsZXQg ZGF0YV9zb3VyY2UgPSBDcmVhdGVEYXRhU291cmNlIHsKKyAgICAgICAgICAgICAgICBuYW1lOiBk cy5uYW1lLnRvX3N0cmluZygpLAorICAgICAgICAgICAgICAgIG1pbmltdW0sCisgICAgICAgICAg ICAgICAgbWF4aW11bSwKKyAgICAgICAgICAgICAgICBoZWFydGJlYXQ6IGRzLmhlYXJ0YmVhdCBh cyBpNjQsCisgICAgICAgICAgICAgICAgc2VyaWVfdHlwZSwKKyAgICAgICAgICAgIH07CisKKyAg ICAgICAgICAgIGRhdGFfc291cmNlcy5wdXNoKGRhdGFfc291cmNlKTsKKyAgICAgICAgfQorCisg ICAgICAgIC8vIENvbnZlcnQgb3VyIFJSQSBkZWZpbml0aW9ucyB0byBycmRjYWNoZWQtY2xpZW50 IENyZWF0ZVJvdW5kUm9iaW5BcmNoaXZlIG9iamVjdHMKKyAgICAgICAgbGV0IG11dCBhcmNoaXZl cyA9IFZlYzo6bmV3KCk7CisgICAgICAgIGZvciBycmEgaW4gJnNjaGVtYS5hcmNoaXZlcyB7Cisg ICAgICAgICAgICAvLyBQYXJzZSBSUkEgc3RyaW5nOiAiUlJBOkFWRVJBR0U6MC41OjE6NzAiCisg ICAgICAgICAgICBsZXQgcGFydHM6IFZlYzwmc3RyPiA9IHJyYS5zcGxpdCgnOicpLmNvbGxlY3Qo KTsKKyAgICAgICAgICAgIGlmIHBhcnRzLmxlbigpICE9IDUgfHwgcGFydHNbMF0gIT0gIlJSQSIg eworICAgICAgICAgICAgICAgIGFueWhvdzo6YmFpbCEoIkludmFsaWQgUlJBIGZvcm1hdDoge3Jy YX0iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IGNvbnNvbGlkYXRpb25fZnVu Y3Rpb24gPSBtYXRjaCBwYXJ0c1sxXSB7CisgICAgICAgICAgICAgICAgIkFWRVJBR0UiID0+IENv bnNvbGlkYXRpb25GdW5jdGlvbjo6QXZlcmFnZSwKKyAgICAgICAgICAgICAgICAiTUlOIiA9PiBD b25zb2xpZGF0aW9uRnVuY3Rpb246Ok1pbiwKKyAgICAgICAgICAgICAgICAiTUFYIiA9PiBDb25z b2xpZGF0aW9uRnVuY3Rpb246Ok1heCwKKyAgICAgICAgICAgICAgICAiTEFTVCIgPT4gQ29uc29s aWRhdGlvbkZ1bmN0aW9uOjpMYXN0LAorICAgICAgICAgICAgICAgIF8gPT4gYW55aG93OjpiYWls ISgiVW5zdXBwb3J0ZWQgY29uc29saWRhdGlvbiBmdW5jdGlvbjoge30iLCBwYXJ0c1sxXSksCisg ICAgICAgICAgICB9OworCisgICAgICAgICAgICBsZXQgeGZpbGVzX2ZhY3RvcjogZjY0ID0gcGFy dHNbMl0KKyAgICAgICAgICAgICAgICAucGFyc2UoKQorICAgICAgICAgICAgICAgIC53aXRoX2Nv bnRleHQofHwgZm9ybWF0ISgiSW52YWxpZCB4ZmYgaW4gUlJBOiB7cnJhfSIpKT87CisgICAgICAg ICAgICBsZXQgc3RlcHM6IGk2NCA9IHBhcnRzWzNdCisgICAgICAgICAgICAgICAgLnBhcnNlKCkK KyAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIkludmFsaWQgc3RlcHMg aW4gUlJBOiB7cnJhfSIpKT87CisgICAgICAgICAgICBsZXQgcm93czogaTY0ID0gcGFydHNbNF0K KyAgICAgICAgICAgICAgICAucGFyc2UoKQorICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQo fHwgZm9ybWF0ISgiSW52YWxpZCByb3dzIGluIFJSQToge3JyYX0iKSk/OworCisgICAgICAgICAg ICBsZXQgYXJjaGl2ZSA9IENyZWF0ZVJvdW5kUm9iaW5BcmNoaXZlIHsKKyAgICAgICAgICAgICAg ICBjb25zb2xpZGF0aW9uX2Z1bmN0aW9uLAorICAgICAgICAgICAgICAgIHhmaWxlc19mYWN0b3Is CisgICAgICAgICAgICAgICAgc3RlcHMsCisgICAgICAgICAgICAgICAgcm93cywKKyAgICAgICAg ICAgIH07CisgICAgICAgICAgICBhcmNoaXZlcy5wdXNoKGFyY2hpdmUpOworICAgICAgICB9CisK KyAgICAgICAgLy8gR2V0IHBhdGggd2l0aG91dCAucnJkIGV4dGVuc2lvbiAocnJkY2FjaGVkLWNs aWVudCBhZGRzIGl0KQorICAgICAgICBsZXQgcGF0aF9zdHIgPSBmaWxlX3BhdGgudG9fc3RyaW5n X2xvc3N5KCk7CisgICAgICAgIGxldCBwYXRoX3dpdGhvdXRfZXh0ID0gcGF0aF9zdHIKKyAgICAg ICAgICAgIC5zdHJpcF9zdWZmaXgoIi5ycmQiKQorICAgICAgICAgICAgLnVud3JhcF9vcigmcGF0 aF9zdHIpCisgICAgICAgICAgICAudG9fc3RyaW5nKCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIENy ZWF0ZUFyZ3VtZW50cworICAgICAgICBsZXQgY3JlYXRlX2FyZ3MgPSBDcmVhdGVBcmd1bWVudHMg eworICAgICAgICAgICAgcGF0aDogcGF0aF93aXRob3V0X2V4dCwKKyAgICAgICAgICAgIGRhdGFf c291cmNlcywKKyAgICAgICAgICAgIHJvdW5kX3JvYmluX2FyY2hpdmVzOiBhcmNoaXZlcywKKyAg ICAgICAgICAgIHN0YXJ0X3RpbWVzdGFtcDogc3RhcnRfdGltZXN0YW1wIGFzIHU2NCwKKyAgICAg ICAgICAgIHN0ZXBfc2Vjb25kczogNjAsIC8vIDYwLXNlY29uZCBzdGVwICgxIG1pbnV0ZSByZXNv bHV0aW9uKQorICAgICAgICB9OworCisgICAgICAgIC8vIFZhbGlkYXRlIGJlZm9yZSBzZW5kaW5n CisgICAgICAgIGNyZWF0ZV9hcmdzLnZhbGlkYXRlKCkuY29udGV4dCgiSW52YWxpZCBDUkVBVEUg YXJndW1lbnRzIik/OworCisgICAgICAgIC8vIFNlbmQgQ1JFQVRFIGNvbW1hbmQgdmlhIHJyZGNh Y2hlZAorICAgICAgICBzZWxmLmNsaWVudAorICAgICAgICAgICAgLmNyZWF0ZShjcmVhdGVfYXJn cykKKyAgICAgICAgICAgIC5hd2FpdAorICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCBmb3Jt YXQhKCJGYWlsZWQgdG8gY3JlYXRlIFJSRCBmaWxlIHZpYSBkYWVtb246IHtmaWxlX3BhdGg6P30i KSk/OworCisgICAgICAgIHRyYWNpbmc6OmluZm8hKCJDcmVhdGVkIFJSRCBmaWxlIHZpYSBkYWVt b246IHs6P30gKHt9KSIsIGZpbGVfcGF0aCwgc2NoZW1hKTsKKworICAgICAgICBPaygoKSkKKyAg ICB9CisKKyAgICBhc3luYyBmbiBmbHVzaCgmbXV0IHNlbGYpIC0+IFJlc3VsdDwoKT4geworICAg ICAgICBzZWxmLmNsaWVudAorICAgICAgICAgICAgLmZsdXNoX2FsbCgpCisgICAgICAgICAgICAu YXdhaXQKKyAgICAgICAgICAgIC5jb250ZXh0KCJGYWlsZWQgdG8gZmx1c2ggcnJkY2FjaGVkIik/ OworCisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiRmx1c2hlZCBhbGwgcGVuZGluZyBSUkQgdXBk YXRlcyIpOworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGFzeW5jIGZuIGlzX2F2YWls YWJsZSgmc2VsZikgLT4gYm9vbCB7CisgICAgICAgIC8vIEZvciBub3csIGFzc3VtZSB3ZSdyZSBh dmFpbGFibGUgaWYgd2UgaGF2ZSBhIGNsaWVudAorICAgICAgICAvLyBDb3VsZCBhZGQgYSBQSU5H IGNvbW1hbmQgaW4gdGhlIGZ1dHVyZQorICAgICAgICB0cnVlCisgICAgfQorCisgICAgZm4gbmFt ZSgmc2VsZikgLT4gJnN0ciB7CisgICAgICAgICJycmRjYWNoZWQiCisgICAgfQorfQpkaWZmIC0t Z2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9iYWNrZW5kL2JhY2tlbmRfZGlyZWN0 LnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9iYWNrZW5kL2JhY2tlbmRfZGlyZWN0 LnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42YmUzZWI1ZAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvYmFja2VuZC9iYWNrZW5k X2RpcmVjdC5ycwpAQCAtMCwwICsxLDYwNiBAQAorLy8vIFJSRCBCYWNrZW5kOiBEaXJlY3QgZmls ZSB3cml0aW5nCisvLy8KKy8vLyBVc2VzIHRoZSBgcnJkYCBjcmF0ZSAobGlicnJkIGJpbmRpbmdz KSBmb3IgZGlyZWN0IFJSRCBmaWxlIG9wZXJhdGlvbnMuCisvLy8gVGhpcyBiYWNrZW5kIGlzIHVz ZWQgYXMgYSBmYWxsYmFjayB3aGVuIHJyZGNhY2hlZCBpcyB1bmF2YWlsYWJsZS4KKy8vLworLy8v IFRoaXMgbWF0Y2hlcyB0aGUgQyBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yIGluIHN0YXR1cy5j OjE0MTYtMTQyMCB3aGVyZQorLy8vIGl0IGZhbGxzIGJhY2sgdG8gcnJkX3VwZGF0ZV9yKCkgYW5k IHJyZF9jcmVhdGVfcigpIGZvciBkaXJlY3QgZmlsZSBhY2Nlc3MuCit1c2Ugc3VwZXI6OnN1cGVy OjpzY2hlbWE6OlJyZFNjaGVtYTsKK3VzZSBhbnlob3c6OntDb250ZXh0LCBSZXN1bHR9OwordXNl IGFzeW5jX3RyYWl0Ojphc3luY190cmFpdDsKK3VzZSBzdGQ6OnBhdGg6OlBhdGg7Cit1c2Ugc3Rk Ojp0aW1lOjpEdXJhdGlvbjsKKworLy8vIFJSRCBiYWNrZW5kIHVzaW5nIGRpcmVjdCBmaWxlIG9w ZXJhdGlvbnMgdmlhIGxpYnJyZAorcHViIHN0cnVjdCBScmREaXJlY3RCYWNrZW5kIHsKKyAgICAv LyBDdXJyZW50bHkgc3RhdGVsZXNzLCBidXQga2VwdCBhcyBzdHJ1Y3QgZm9yIGZ1dHVyZSBlbmhh bmNlbWVudHMKK30KKworaW1wbCBScmREaXJlY3RCYWNrZW5kIHsKKyAgICAvLy8gQ3JlYXRlIGEg bmV3IGRpcmVjdCBmaWxlIGJhY2tlbmQKKyAgICBwdWIgZm4gbmV3KCkgLT4gU2VsZiB7CisgICAg ICAgIHRyYWNpbmc6OmluZm8hKCJVc2luZyBkaXJlY3QgUlJEIGZpbGUgYmFja2VuZCAodmlhIGxp YnJyZCkiKTsKKyAgICAgICAgU2VsZiB7fQorICAgIH0KK30KKworaW1wbCBEZWZhdWx0IGZvciBS cmREaXJlY3RCYWNrZW5kIHsKKyAgICBmbiBkZWZhdWx0KCkgLT4gU2VsZiB7CisgICAgICAgIFNl bGY6Om5ldygpCisgICAgfQorfQorCisjW2FzeW5jX3RyYWl0XQoraW1wbCBzdXBlcjo6c3VwZXI6 OmJhY2tlbmQ6OlJyZEJhY2tlbmQgZm9yIFJyZERpcmVjdEJhY2tlbmQgeworICAgIGFzeW5jIGZu IHVwZGF0ZSgmbXV0IHNlbGYsIGZpbGVfcGF0aDogJlBhdGgsIGRhdGE6ICZzdHIpIC0+IFJlc3Vs dDwoKT4geworICAgICAgICBsZXQgcGF0aCA9IGZpbGVfcGF0aC50b19wYXRoX2J1ZigpOworICAg ICAgICBsZXQgZGF0YV9zdHIgPSBkYXRhLnRvX3N0cmluZygpOworCisgICAgICAgIC8vIFVzZSB0 b2tpbzo6dGFzazo6c3Bhd25fYmxvY2tpbmcgZm9yIHN5bmMgcnJkIG9wZXJhdGlvbnMKKyAgICAg ICAgLy8gVGhpcyBwcmV2ZW50cyBibG9ja2luZyB0aGUgYXN5bmMgcnVudGltZQorICAgICAgICB0 b2tpbzo6dGFzazo6c3Bhd25fYmxvY2tpbmcobW92ZSB8fCB7CisgICAgICAgICAgICAvLyBQYXJz ZSB0aGUgdXBkYXRlIGRhdGEgdG8gZXh0cmFjdCB0aW1lc3RhbXAgYW5kIHZhbHVlcworICAgICAg ICAgICAgLy8gRm9ybWF0OiAidGltZXN0YW1wOnZhbHVlMTp2YWx1ZTI6Li4uIgorICAgICAgICAg ICAgbGV0IHBhcnRzOiBWZWM8JnN0cj4gPSBkYXRhX3N0ci5zcGxpdCgnOicpLmNvbGxlY3QoKTsK KyAgICAgICAgICAgIGlmIHBhcnRzLmlzX2VtcHR5KCkgeworICAgICAgICAgICAgICAgIGFueWhv dzo6YmFpbCEoIkVtcHR5IHVwZGF0ZSBkYXRhIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIC8vIFVzZSBycmQ6Om9wczo6dXBkYXRlOjp1cGRhdGVfYWxsX3dpdGhfdGltZXN0YW1wCisg ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdXBkYXRlIFJSRCBm aWxlcworICAgICAgICAgICAgbGV0IHRpbWVzdGFtcF9zdHIgPSBwYXJ0c1swXTsKKyAgICAgICAg ICAgIGxldCB0aW1lc3RhbXA6IGk2NCA9IGlmIHRpbWVzdGFtcF9zdHIgPT0gIk4iIHsKKyAgICAg ICAgICAgICAgICAvLyAiTiIgbWVhbnMgIm5vdyIgaW4gUlJEIHRlcm1pbm9sb2d5CisgICAgICAg ICAgICAgICAgY2hyb25vOjpVdGM6Om5vdygpLnRpbWVzdGFtcCgpCisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9zdHIKKyAgICAgICAgICAgICAgICAgICAg LnBhcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJJ bnZhbGlkIHRpbWVzdGFtcDoge30iLCB0aW1lc3RhbXBfc3RyKSk/CisgICAgICAgICAgICB9Owor CisgICAgICAgICAgICBsZXQgdGltZXN0YW1wID0gY2hyb25vOjpEYXRlVGltZTo6ZnJvbV90aW1l c3RhbXAodGltZXN0YW1wLCAwKQorICAgICAgICAgICAgICAgIC5va19vcl9lbHNlKHx8IGFueWhv dzo6YW55aG93ISgiSW52YWxpZCB0aW1lc3RhbXAgdmFsdWU6IHt9IiwgdGltZXN0YW1wKSk/Owor CisgICAgICAgICAgICAvLyBDb252ZXJ0IHZhbHVlcyB0byBEYXR1bQorICAgICAgICAgICAgbGV0 IHZhbHVlczogVmVjPHJyZDo6b3BzOjp1cGRhdGU6OkRhdHVtPiA9IHBhcnRzWzEuLl0KKyAgICAg ICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAgICAgLm1hcCh8dnwgeworICAgICAgICAg ICAgICAgICAgICBpZiAqdiA9PSAiVSIgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5r bm93bi91bnNwZWNpZmllZCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnJkOjpvcHM6 OnVwZGF0ZTo6RGF0dW06OlVuc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiBsZXQgT2soaW50X3ZhbCkgPSB2LnBhcnNlOjo8dTY0PigpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJyZDo6b3BzOjp1cGRhdGU6OkRhdHVtOjpJbnQoaW50X3ZhbCkKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmIGxldCBPayhmbG9hdF92YWwpID0gdi5wYXJzZTo6PGY2ND4oKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBycmQ6Om9wczo6dXBkYXRlOjpEYXR1bTo6RmxvYXQo ZmxvYXRfdmFsKQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgcnJkOjpvcHM6OnVwZGF0ZTo6RGF0dW06OlVuc3BlY2lmaWVkCisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5jb2xsZWN0 KCk7CisKKyAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIHVwZGF0ZQorICAgICAgICAgICAgcnJk OjpvcHM6OnVwZGF0ZTo6dXBkYXRlX2FsbCgKKyAgICAgICAgICAgICAgICAmcGF0aCwKKyAgICAg ICAgICAgICAgICBycmQ6Om9wczo6dXBkYXRlOjpFeHRyYUZsYWdzOjplbXB0eSgpLAorICAgICAg ICAgICAgICAgICZbKAorICAgICAgICAgICAgICAgICAgICBycmQ6Om9wczo6dXBkYXRlOjpCYXRj aFRpbWU6OlRpbWVzdGFtcCh0aW1lc3RhbXApLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMu YXNfc2xpY2UoKSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICkKKyAgICAgICAg ICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiRGlyZWN0IFJSRCB1cGRhdGUgZmFpbGVkIGZv ciB7Oj99IiwgcGF0aCkpPzsKKworICAgICAgICAgICAgdHJhY2luZzo6dHJhY2UhKCJVcGRhdGVk IFJSRCB2aWEgZGlyZWN0IGZpbGU6IHs6P30gLT4ge30iLCBwYXRoLCBkYXRhX3N0cik7CisKKyAg ICAgICAgICAgIE9rOjo8KCksIGFueWhvdzo6RXJyb3I+KCgpKQorICAgICAgICB9KQorICAgICAg ICAuYXdhaXQKKyAgICAgICAgLmNvbnRleHQoIkZhaWxlZCB0byBzcGF3biBibG9ja2luZyB0YXNr IGZvciBSUkQgdXBkYXRlIik/PzsKKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBhc3lu YyBmbiBjcmVhdGUoCisgICAgICAgICZtdXQgc2VsZiwKKyAgICAgICAgZmlsZV9wYXRoOiAmUGF0 aCwKKyAgICAgICAgc2NoZW1hOiAmUnJkU2NoZW1hLAorICAgICAgICBzdGFydF90aW1lc3RhbXA6 IGk2NCwKKyAgICApIC0+IFJlc3VsdDwoKT4geworICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoCisg ICAgICAgICAgICAiQ3JlYXRpbmcgUlJEIGZpbGUgdmlhIGRpcmVjdDogezo/fSB3aXRoIHt9IGRh dGEgc291cmNlcyIsCisgICAgICAgICAgICBmaWxlX3BhdGgsCisgICAgICAgICAgICBzY2hlbWEu Y29sdW1uX2NvdW50KCkKKyAgICAgICAgKTsKKworICAgICAgICBsZXQgcGF0aCA9IGZpbGVfcGF0 aC50b19wYXRoX2J1ZigpOworICAgICAgICBsZXQgc2NoZW1hID0gc2NoZW1hLmNsb25lKCk7CisK KyAgICAgICAgLy8gRW5zdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzCisgICAgICAgIGlmIGxl dCBTb21lKHBhcmVudCkgPSBwYXRoLnBhcmVudCgpIHsKKyAgICAgICAgICAgIHN0ZDo6ZnM6OmNy ZWF0ZV9kaXJfYWxsKHBhcmVudCkKKyAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZv cm1hdCEoIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5OiB7cGFyZW50Oj99IikpPzsKKyAgICAg ICAgfQorCisgICAgICAgIC8vIFVzZSB0b2tpbzo6dGFzazo6c3Bhd25fYmxvY2tpbmcgZm9yIHN5 bmMgcnJkIG9wZXJhdGlvbnMKKyAgICAgICAgdG9raW86OnRhc2s6OnNwYXduX2Jsb2NraW5nKG1v dmUgfHwgeworICAgICAgICAgICAgLy8gQ29udmVydCB0aW1lc3RhbXAKKyAgICAgICAgICAgIGxl dCBzdGFydCA9IGNocm9ubzo6RGF0ZVRpbWU6OmZyb21fdGltZXN0YW1wKHN0YXJ0X3RpbWVzdGFt cCwgMCkKKyAgICAgICAgICAgICAgICAub2tfb3JfZWxzZSh8fCBhbnlob3c6OmFueWhvdyEoIklu dmFsaWQgc3RhcnQgdGltZXN0YW1wOiB7fSIsIHN0YXJ0X3RpbWVzdGFtcCkpPzsKKworICAgICAg ICAgICAgLy8gQ29udmVydCBkYXRhIHNvdXJjZXMKKyAgICAgICAgICAgIGxldCBkYXRhX3NvdXJj ZXM6IFZlYzxycmQ6Om9wczo6Y3JlYXRlOjpEYXRhU291cmNlPiA9IHNjaGVtYQorICAgICAgICAg ICAgICAgIC5kYXRhX3NvdXJjZXMKKyAgICAgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAg ICAgICAgLm1hcCh8ZHN8IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBycmQ6Om9w czo6Y3JlYXRlOjpEYXRhU291cmNlTmFtZTo6bmV3KGRzLm5hbWUpOworCisgICAgICAgICAgICAg ICAgICAgIG1hdGNoIGRzLmRzX3R5cGUgeworICAgICAgICAgICAgICAgICAgICAgICAgIkdBVUdF IiA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pbiA9IGlmIGRzLm1pbiA9 PSAiVSIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU29tZShkcy5taW4ucGFyc2UoKS5jb250ZXh0KCJJbnZhbGlkIG1pbiB2YWx1ZSIpPykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxldCBtYXggPSBpZiBkcy5tYXggPT0gIlUiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUoZHMubWF4LnBhcnNlKCkuY29udGV4dCgiSW52 YWxpZCBtYXggdmFsdWUiKT8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPayhycmQ6Om9wczo6Y3JlYXRlOjpEYXRhU291cmNlOjpn YXVnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHMuaGVhcnRiZWF0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgIkRFUklWRSIgPT4geworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxldCBtaW4gPSBpZiBkcy5taW4gPT0gIlUiIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUoZHMubWluLnBhcnNlKCkuY29u dGV4dCgiSW52YWxpZCBtaW4gdmFsdWUiKT8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF4ID0gaWYgZHMubWF4ID09ICJV IiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT b21lKGRzLm1heC5wYXJzZSgpLmNvbnRleHQoIkludmFsaWQgbWF4IHZhbHVlIik/KQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2so cnJkOjpvcHM6OmNyZWF0ZTo6RGF0YVNvdXJjZTo6ZGVyaXZlKAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcy5o ZWFydGJlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAi Q09VTlRFUiIgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaW4gPSBpZiBk cy5taW4gPT0gIlUiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvbWUoZHMubWluLnBhcnNlKCkuY29udGV4dCgiSW52YWxpZCBtaW4gdmFsdWUi KT8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsZXQgbWF4ID0gaWYgZHMubWF4ID09ICJVIiB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lKGRzLm1heC5wYXJzZSgpLmNvbnRl eHQoIkludmFsaWQgbWF4IHZhbHVlIik/KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2socnJkOjpvcHM6OmNyZWF0ZTo6RGF0YVNv dXJjZTo6Y291bnRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHMuaGVhcnRiZWF0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIkFCU09MVVRFIiA9PiB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGV0IG1pbiA9IGlmIGRzLm1pbiA9PSAiVSIgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShkcy5taW4u cGFyc2UoKS5jb250ZXh0KCJJbnZhbGlkIG1pbiB2YWx1ZSIpPykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXggPSBpZiBk cy5tYXggPT0gIlUiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvbWUoZHMubWF4LnBhcnNlKCkuY29udGV4dCgiSW52YWxpZCBtYXggdmFsdWUi KT8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPayhycmQ6Om9wczo6Y3JlYXRlOjpEYXRhU291cmNlOjphYnNvbHV0ZSgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHMuaGVhcnRiZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgXyA9PiBhbnlob3c6OmJhaWwhKCJVbnN1cHBvcnRlZCBkYXRhIHNvdXJjZSB0 eXBlOiB7fSIsIGRzLmRzX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfSkKKyAgICAgICAgICAgICAgICAuY29sbGVjdDo6PFJlc3VsdDxWZWM8Xz4+PigpPzsK KworICAgICAgICAgICAgLy8gQ29udmVydCBSUkFzCisgICAgICAgICAgICBsZXQgYXJjaGl2ZXM6 IFJlc3VsdDxWZWM8cnJkOjpvcHM6OmNyZWF0ZTo6QXJjaGl2ZT4+ID0gc2NoZW1hCisgICAgICAg ICAgICAgICAgLmFyY2hpdmVzCisgICAgICAgICAgICAgICAgLml0ZXIoKQorICAgICAgICAgICAg ICAgIC5tYXAofHJyYXwgeworICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSBSUkEgc3RyaW5n OiAiUlJBOkFWRVJBR0U6MC41OjE6MTQ0MCIKKyAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnRz OiBWZWM8JnN0cj4gPSBycmEuc3BsaXQoJzonKS5jb2xsZWN0KCk7CisgICAgICAgICAgICAgICAg ICAgIGlmIHBhcnRzLmxlbigpICE9IDUgfHwgcGFydHNbMF0gIT0gIlJSQSIgeworICAgICAgICAg ICAgICAgICAgICAgICAgYW55aG93OjpiYWlsISgiSW52YWxpZCBSUkEgZm9ybWF0OiB7fSIsIHJy YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBsZXQgY2Yg PSBtYXRjaCBwYXJ0c1sxXSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQVZFUkFHRSIgPT4g cnJkOjpDb25zb2xpZGF0aW9uRm46OkF2ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICJNSU4i ID0+IHJyZDo6Q29uc29saWRhdGlvbkZuOjpNaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAi TUFYIiA9PiBycmQ6OkNvbnNvbGlkYXRpb25Gbjo6TWF4LAorICAgICAgICAgICAgICAgICAgICAg ICAgIkxBU1QiID0+IHJyZDo6Q29uc29saWRhdGlvbkZuOjpMYXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgXyA9PiBhbnlob3c6OmJhaWwhKCJVbnN1cHBvcnRlZCBjb25zb2xpZGF0aW9uIGZ1 bmN0aW9uOiB7fSIsIHBhcnRzWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAg ICAgICAgICAgICAgICBsZXQgeGZmOiBmNjQgPSBwYXJ0c1syXQorICAgICAgICAgICAgICAgICAg ICAgICAgLnBhcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwg Zm9ybWF0ISgiSW52YWxpZCB4ZmYgaW4gUlJBOiB7fSIsIHJyYSkpPzsKKyAgICAgICAgICAgICAg ICAgICAgbGV0IHN0ZXBzOiB1MzIgPSBwYXJ0c1szXQorICAgICAgICAgICAgICAgICAgICAgICAg LnBhcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0 ISgiSW52YWxpZCBzdGVwcyBpbiBSUkE6IHt9IiwgcnJhKSk/OworICAgICAgICAgICAgICAgICAg ICBsZXQgcm93czogdTMyID0gcGFydHNbNF0KKyAgICAgICAgICAgICAgICAgICAgICAgIC5wYXJz ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIklu dmFsaWQgcm93cyBpbiBSUkE6IHt9IiwgcnJhKSk/OworCisgICAgICAgICAgICAgICAgICAgIHJy ZDo6b3BzOjpjcmVhdGU6OkFyY2hpdmU6Om5ldyhjZiwgeGZmLCBzdGVwcywgcm93cykKKyAgICAg ICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlfCBhbnlob3c6OmFueWhvdyEoIkZhaWxlZCB0 byBjcmVhdGUgYXJjaGl2ZToge30iLCBlKSkKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAg ICAgICAgIC5jb2xsZWN0KCk7CisKKyAgICAgICAgICAgIGxldCBhcmNoaXZlcyA9IGFyY2hpdmVz PzsKKworICAgICAgICAgICAgLy8gQ2FsbCBycmQ6Om9wczo6Y3JlYXRlOjpjcmVhdGUKKyAgICAg ICAgICAgIHJyZDo6b3BzOjpjcmVhdGU6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAmcGF0aCwK KyAgICAgICAgICAgICAgICBzdGFydCwKKyAgICAgICAgICAgICAgICBEdXJhdGlvbjo6ZnJvbV9z ZWNzKDYwKSwgLy8gNjAtc2Vjb25kIHN0ZXAKKyAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg ICAgICAgICAgICAgLy8gbm9fb3ZlcndyaXRlID0gZmFsc2UKKyAgICAgICAgICAgICAgICBOb25l LCAgICAgICAgICAgICAgICAgICAgLy8gdGVtcGxhdGUKKyAgICAgICAgICAgICAgICAmW10sICAg ICAgICAgICAgICAgICAgICAgLy8gc291cmNlcworICAgICAgICAgICAgICAgIGRhdGFfc291cmNl cy5pdGVyKCksCisgICAgICAgICAgICAgICAgYXJjaGl2ZXMuaXRlcigpLAorICAgICAgICAgICAg KQorICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJEaXJlY3QgUlJEIGNyZWF0 ZSBmYWlsZWQgZm9yIHs6P30iLCBwYXRoKSk/OworCisgICAgICAgICAgICB0cmFjaW5nOjppbmZv ISgiQ3JlYXRlZCBSUkQgZmlsZSB2aWEgZGlyZWN0OiB7Oj99ICh7fSkiLCBwYXRoLCBzY2hlbWEp OworCisgICAgICAgICAgICBPazo6PCgpLCBhbnlob3c6OkVycm9yPigoKSkKKyAgICAgICAgfSkK KyAgICAgICAgLmF3YWl0CisgICAgICAgIC5jb250ZXh0KCJGYWlsZWQgdG8gc3Bhd24gYmxvY2tp bmcgdGFzayBmb3IgUlJEIGNyZWF0ZSIpPz87CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisg ICAgYXN5bmMgZm4gZmx1c2goJm11dCBzZWxmKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgLy8g Tm8tb3AgZm9yIGRpcmVjdCBiYWNrZW5kIC0gd3JpdGVzIGFyZSBpbW1lZGlhdGUKKyAgICAgICAg dHJhY2luZzo6dHJhY2UhKCJGbHVzaCBjYWxsZWQgb24gZGlyZWN0IGJhY2tlbmQgKG5vLW9wKSIp OworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBhc3luYyBmbiBpc19hdmFpbGFibGUoJnNl bGYpIC0+IGJvb2wgeworICAgICAgICAvLyBEaXJlY3QgYmFja2VuZCBpcyBhbHdheXMgYXZhaWxh YmxlIChubyBleHRlcm5hbCBkZXBlbmRlbmNpZXMpCisgICAgICAgIHRydWUKKyAgICB9CisKKyAg ICBmbiBuYW1lKCZzZWxmKSAtPiAmc3RyIHsKKyAgICAgICAgImRpcmVjdCIKKyAgICB9Cit9CisK KyNbY2ZnKHRlc3QpXQorbW9kIHRlc3RzIHsKKyAgICB1c2Ugc3VwZXI6Oio7CisgICAgdXNlIGNy YXRlOjpiYWNrZW5kOjpScmRCYWNrZW5kOworICAgIHVzZSBjcmF0ZTo6c2NoZW1hOjp7UnJkRm9y bWF0LCBScmRTY2hlbWF9OworICAgIHVzZSBzdGQ6OnBhdGg6OlBhdGhCdWY7CisgICAgdXNlIHRl bXBmaWxlOjpUZW1wRGlyOworCisgICAgLy8gPT09PT0gVGVzdCBIZWxwZXJzID09PT09CisKKyAg ICAvLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgUlJEIGZpbGVzCisgICAgZm4g c2V0dXBfdGVtcF9kaXIoKSAtPiBUZW1wRGlyIHsKKyAgICAgICAgVGVtcERpcjo6bmV3KCkuZXhw ZWN0KCJGYWlsZWQgdG8gY3JlYXRlIHRlbXAgZGlyZWN0b3J5IikKKyAgICB9CisKKyAgICAvLy8g Q3JlYXRlIGEgdGVzdCBSUkQgZmlsZSBwYXRoCisgICAgZm4gdGVzdF9ycmRfcGF0aChkaXI6ICZU ZW1wRGlyLCBuYW1lOiAmc3RyKSAtPiBQYXRoQnVmIHsKKyAgICAgICAgZGlyLnBhdGgoKS5qb2lu KGZvcm1hdCEoInt9LnJyZCIsIG5hbWUpKQorICAgIH0KKworICAgIC8vID09PT09IFJyZERpcmVj dEJhY2tlbmQgVGVzdHMgPT09PT0KKworICAgICNbdG9raW86OnRlc3RdCisgICAgYXN5bmMgZm4g dGVzdF9kaXJlY3RfYmFja2VuZF9jcmVhdGVfbm9kZV9ycmQoKSB7CisgICAgICAgIGxldCB0ZW1w X2RpciA9IHNldHVwX3RlbXBfZGlyKCk7CisgICAgICAgIGxldCBycmRfcGF0aCA9IHRlc3RfcnJk X3BhdGgoJnRlbXBfZGlyLCAibm9kZV90ZXN0Iik7CisKKyAgICAgICAgbGV0IG11dCBiYWNrZW5k ID0gUnJkRGlyZWN0QmFja2VuZDo6bmV3KCk7CisgICAgICAgIGxldCBzY2hlbWEgPSBScmRTY2hl bWE6Om5vZGUoUnJkRm9ybWF0OjpQdmU5XzApOworICAgICAgICBsZXQgc3RhcnRfdGltZSA9IDE3 MDQwNjcyMDA7IC8vIDIwMjQtMDEtMDEgMDA6MDA6MDAKKworICAgICAgICAvLyBDcmVhdGUgUlJE IGZpbGUKKyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQuY3JlYXRlKCZycmRfcGF0aCwgJnNj aGVtYSwgc3RhcnRfdGltZSkuYXdhaXQ7CisgICAgICAgIGFzc2VydCEoCisgICAgICAgICAgICBy ZXN1bHQuaXNfb2soKSwKKyAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIG5vZGUgUlJEOiB7 Oj99IiwKKyAgICAgICAgICAgIHJlc3VsdC5lcnIoKQorICAgICAgICApOworCisgICAgICAgIC8v IFZlcmlmeSBmaWxlIHdhcyBjcmVhdGVkCisgICAgICAgIGFzc2VydCEocnJkX3BhdGguZXhpc3Rz KCksICJSUkQgZmlsZSBzaG91bGQgZXhpc3QgYWZ0ZXIgY3JlYXRlIik7CisKKyAgICAgICAgLy8g VmVyaWZ5IGJhY2tlbmQgbmFtZQorICAgICAgICBhc3NlcnRfZXEhKGJhY2tlbmQubmFtZSgpLCAi ZGlyZWN0Iik7CisgICAgfQorCisgICAgI1t0b2tpbzo6dGVzdF0KKyAgICBhc3luYyBmbiB0ZXN0 X2RpcmVjdF9iYWNrZW5kX2NyZWF0ZV92bV9ycmQoKSB7CisgICAgICAgIGxldCB0ZW1wX2RpciA9 IHNldHVwX3RlbXBfZGlyKCk7CisgICAgICAgIGxldCBycmRfcGF0aCA9IHRlc3RfcnJkX3BhdGgo JnRlbXBfZGlyLCAidm1fdGVzdCIpOworCisgICAgICAgIGxldCBtdXQgYmFja2VuZCA9IFJyZERp cmVjdEJhY2tlbmQ6Om5ldygpOworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjp2bShS cmRGb3JtYXQ6OlB2ZTlfMCk7CisgICAgICAgIGxldCBzdGFydF90aW1lID0gMTcwNDA2NzIwMDsK KworICAgICAgICBsZXQgcmVzdWx0ID0gYmFja2VuZC5jcmVhdGUoJnJyZF9wYXRoLCAmc2NoZW1h LCBzdGFydF90aW1lKS5hd2FpdDsKKyAgICAgICAgYXNzZXJ0ISgKKyAgICAgICAgICAgIHJlc3Vs dC5pc19vaygpLAorICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgVk0gUlJEOiB7Oj99IiwK KyAgICAgICAgICAgIHJlc3VsdC5lcnIoKQorICAgICAgICApOworICAgICAgICBhc3NlcnQhKHJy ZF9wYXRoLmV4aXN0cygpKTsKKyAgICB9CisKKyAgICAjW3Rva2lvOjp0ZXN0XQorICAgIGFzeW5j IGZuIHRlc3RfZGlyZWN0X2JhY2tlbmRfY3JlYXRlX3N0b3JhZ2VfcnJkKCkgeworICAgICAgICBs ZXQgdGVtcF9kaXIgPSBzZXR1cF90ZW1wX2RpcigpOworICAgICAgICBsZXQgcnJkX3BhdGggPSB0 ZXN0X3JyZF9wYXRoKCZ0ZW1wX2RpciwgInN0b3JhZ2VfdGVzdCIpOworCisgICAgICAgIGxldCBt dXQgYmFja2VuZCA9IFJyZERpcmVjdEJhY2tlbmQ6Om5ldygpOworICAgICAgICBsZXQgc2NoZW1h ID0gUnJkU2NoZW1hOjpzdG9yYWdlKFJyZEZvcm1hdDo6UHZlMik7CisgICAgICAgIGxldCBzdGFy dF90aW1lID0gMTcwNDA2NzIwMDsKKworICAgICAgICBsZXQgcmVzdWx0ID0gYmFja2VuZC5jcmVh dGUoJnJyZF9wYXRoLCAmc2NoZW1hLCBzdGFydF90aW1lKS5hd2FpdDsKKyAgICAgICAgYXNzZXJ0 ISgKKyAgICAgICAgICAgIHJlc3VsdC5pc19vaygpLAorICAgICAgICAgICAgIkZhaWxlZCB0byBj cmVhdGUgc3RvcmFnZSBSUkQ6IHs6P30iLAorICAgICAgICAgICAgcmVzdWx0LmVycigpCisgICAg ICAgICk7CisgICAgICAgIGFzc2VydCEocnJkX3BhdGguZXhpc3RzKCkpOworICAgIH0KKworICAg ICNbdG9raW86OnRlc3RdCisgICAgYXN5bmMgZm4gdGVzdF9kaXJlY3RfYmFja2VuZF91cGRhdGVf d2l0aF90aW1lc3RhbXAoKSB7CisgICAgICAgIGxldCB0ZW1wX2RpciA9IHNldHVwX3RlbXBfZGly KCk7CisgICAgICAgIGxldCBycmRfcGF0aCA9IHRlc3RfcnJkX3BhdGgoJnRlbXBfZGlyLCAidXBk YXRlX3Rlc3QiKTsKKworICAgICAgICBsZXQgbXV0IGJhY2tlbmQgPSBScmREaXJlY3RCYWNrZW5k OjpuZXcoKTsKKyAgICAgICAgbGV0IHNjaGVtYSA9IFJyZFNjaGVtYTo6c3RvcmFnZShScmRGb3Jt YXQ6OlB2ZTIpOworICAgICAgICBsZXQgc3RhcnRfdGltZSA9IDE3MDQwNjcyMDA7CisKKyAgICAg ICAgLy8gQ3JlYXRlIFJSRCBmaWxlCisgICAgICAgIGJhY2tlbmQKKyAgICAgICAgICAgIC5jcmVh dGUoJnJyZF9wYXRoLCAmc2NoZW1hLCBzdGFydF90aW1lKQorICAgICAgICAgICAgLmF3YWl0Cisg ICAgICAgICAgICAuZXhwZWN0KCJGYWlsZWQgdG8gY3JlYXRlIFJSRCIpOworCisgICAgICAgIC8v IFVwZGF0ZSB3aXRoIGV4cGxpY2l0IHRpbWVzdGFtcCBhbmQgdmFsdWVzCisgICAgICAgIC8vIEZv cm1hdDogInRpbWVzdGFtcDp2YWx1ZTE6dmFsdWUyIgorICAgICAgICBsZXQgdXBkYXRlX2RhdGEg PSAiMTcwNDA2NzI2MDoxMDAwMDAwOjUwMDAwMCI7IC8vIHRvdGFsPTFNQiwgdXNlZD01MDBLQgor ICAgICAgICBsZXQgcmVzdWx0ID0gYmFja2VuZC51cGRhdGUoJnJyZF9wYXRoLCB1cGRhdGVfZGF0 YSkuYXdhaXQ7CisKKyAgICAgICAgYXNzZXJ0IShyZXN1bHQuaXNfb2soKSwgIkZhaWxlZCB0byB1 cGRhdGUgUlJEOiB7Oj99IiwgcmVzdWx0LmVycigpKTsKKyAgICB9CisKKyAgICAjW3Rva2lvOjp0 ZXN0XQorICAgIGFzeW5jIGZuIHRlc3RfZGlyZWN0X2JhY2tlbmRfdXBkYXRlX3dpdGhfbl90aW1l c3RhbXAoKSB7CisgICAgICAgIGxldCB0ZW1wX2RpciA9IHNldHVwX3RlbXBfZGlyKCk7CisgICAg ICAgIGxldCBycmRfcGF0aCA9IHRlc3RfcnJkX3BhdGgoJnRlbXBfZGlyLCAidXBkYXRlX25fdGVz dCIpOworCisgICAgICAgIGxldCBtdXQgYmFja2VuZCA9IFJyZERpcmVjdEJhY2tlbmQ6Om5ldygp OworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjpzdG9yYWdlKFJyZEZvcm1hdDo6UHZl Mik7CisgICAgICAgIGxldCBzdGFydF90aW1lID0gMTcwNDA2NzIwMDsKKworICAgICAgICBiYWNr ZW5kCisgICAgICAgICAgICAuY3JlYXRlKCZycmRfcGF0aCwgJnNjaGVtYSwgc3RhcnRfdGltZSkK KyAgICAgICAgICAgIC5hd2FpdAorICAgICAgICAgICAgLmV4cGVjdCgiRmFpbGVkIHRvIGNyZWF0 ZSBSUkQiKTsKKworICAgICAgICAvLyBVcGRhdGUgd2l0aCAiTiIgKGN1cnJlbnQgdGltZSkgdGlt ZXN0YW1wCisgICAgICAgIGxldCB1cGRhdGVfZGF0YSA9ICJOOjIwMDAwMDA6NzUwMDAwIjsKKyAg ICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQudXBkYXRlKCZycmRfcGF0aCwgdXBkYXRlX2RhdGEp LmF3YWl0OworCisgICAgICAgIGFzc2VydCEoCisgICAgICAgICAgICByZXN1bHQuaXNfb2soKSwK KyAgICAgICAgICAgICJGYWlsZWQgdG8gdXBkYXRlIFJSRCB3aXRoIE4gdGltZXN0YW1wOiB7Oj99 IiwKKyAgICAgICAgICAgIHJlc3VsdC5lcnIoKQorICAgICAgICApOworICAgIH0KKworICAgICNb dG9raW86OnRlc3RdCisgICAgYXN5bmMgZm4gdGVzdF9kaXJlY3RfYmFja2VuZF91cGRhdGVfd2l0 aF91bmtub3duX3ZhbHVlcygpIHsKKyAgICAgICAgbGV0IHRlbXBfZGlyID0gc2V0dXBfdGVtcF9k aXIoKTsKKyAgICAgICAgbGV0IHJyZF9wYXRoID0gdGVzdF9ycmRfcGF0aCgmdGVtcF9kaXIsICJ1 cGRhdGVfdV90ZXN0Iik7CisKKyAgICAgICAgbGV0IG11dCBiYWNrZW5kID0gUnJkRGlyZWN0QmFj a2VuZDo6bmV3KCk7CisgICAgICAgIGxldCBzY2hlbWEgPSBScmRTY2hlbWE6OnN0b3JhZ2UoUnJk Rm9ybWF0OjpQdmUyKTsKKyAgICAgICAgbGV0IHN0YXJ0X3RpbWUgPSAxNzA0MDY3MjAwOworCisg ICAgICAgIGJhY2tlbmQKKyAgICAgICAgICAgIC5jcmVhdGUoJnJyZF9wYXRoLCAmc2NoZW1hLCBz dGFydF90aW1lKQorICAgICAgICAgICAgLmF3YWl0CisgICAgICAgICAgICAuZXhwZWN0KCJGYWls ZWQgdG8gY3JlYXRlIFJSRCIpOworCisgICAgICAgIC8vIFVwZGF0ZSB3aXRoICJVIiAodW5rbm93 bikgdmFsdWVzCisgICAgICAgIGxldCB1cGRhdGVfZGF0YSA9ICJOOlU6MTAwMDAwMCI7IC8vIHRv dGFsIHVua25vd24sIHVzZWQga25vd24KKyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQudXBk YXRlKCZycmRfcGF0aCwgdXBkYXRlX2RhdGEpLmF3YWl0OworCisgICAgICAgIGFzc2VydCEoCisg ICAgICAgICAgICByZXN1bHQuaXNfb2soKSwKKyAgICAgICAgICAgICJGYWlsZWQgdG8gdXBkYXRl IFJSRCB3aXRoIFUgdmFsdWVzOiB7Oj99IiwKKyAgICAgICAgICAgIHJlc3VsdC5lcnIoKQorICAg ICAgICApOworICAgIH0KKworICAgICNbdG9raW86OnRlc3RdCisgICAgYXN5bmMgZm4gdGVzdF9k aXJlY3RfYmFja2VuZF91cGRhdGVfaW52YWxpZF9kYXRhKCkgeworICAgICAgICBsZXQgdGVtcF9k aXIgPSBzZXR1cF90ZW1wX2RpcigpOworICAgICAgICBsZXQgcnJkX3BhdGggPSB0ZXN0X3JyZF9w YXRoKCZ0ZW1wX2RpciwgImludmFsaWRfdGVzdCIpOworCisgICAgICAgIGxldCBtdXQgYmFja2Vu ZCA9IFJyZERpcmVjdEJhY2tlbmQ6Om5ldygpOworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2No ZW1hOjpzdG9yYWdlKFJyZEZvcm1hdDo6UHZlMik7CisgICAgICAgIGxldCBzdGFydF90aW1lID0g MTcwNDA2NzIwMDsKKworICAgICAgICBiYWNrZW5kCisgICAgICAgICAgICAuY3JlYXRlKCZycmRf cGF0aCwgJnNjaGVtYSwgc3RhcnRfdGltZSkKKyAgICAgICAgICAgIC5hd2FpdAorICAgICAgICAg ICAgLmV4cGVjdCgiRmFpbGVkIHRvIGNyZWF0ZSBSUkQiKTsKKworICAgICAgICAvLyBUZXN0IHRy dWx5IGludmFsaWQgZGF0YSBmb3JtYXRzIHRoYXQgTVVTVCBmYWlsCisgICAgICAgIC8vIE5vdGU6 IEludmFsaWQgdmFsdWVzIGxpa2UgImFiYyIgYXJlIGNvbnZlcnRlZCB0byBVbnNwZWNpZmllZCAo VSksIHdoaWNoIGlzIHZhbGlkIFJSRCBiZWhhdmlvcgorICAgICAgICBsZXQgaW52YWxpZF9jYXNl cyA9IHZlYyFbCisgICAgICAgICAgICAiIiwgICAgICAgICAgICAvLyBFbXB0eSBzdHJpbmcKKyAg ICAgICAgICAgICI6IiwgICAgICAgICAgIC8vIE9ubHkgc2VwYXJhdG9yCisgICAgICAgICAgICAi dGltZXN0YW1wIiwgICAvLyBNaXNzaW5nIHZhbHVlcworICAgICAgICAgICAgIk4iLCAgICAgICAg ICAgLy8gTm8gY29sb24gc2VwYXJhdG9yCisgICAgICAgICAgICAiYWJjOjEyMzo0NTYiLCAvLyBJ bnZhbGlkIHRpbWVzdGFtcCAobm90IE4gb3IgaW50ZWdlcikKKyAgICAgICAgXTsKKworICAgICAg ICBmb3IgaW52YWxpZF9kYXRhIGluIGludmFsaWRfY2FzZXMgeworICAgICAgICAgICAgbGV0IHJl c3VsdCA9IGJhY2tlbmQudXBkYXRlKCZycmRfcGF0aCwgaW52YWxpZF9kYXRhKS5hd2FpdDsKKyAg ICAgICAgICAgIGFzc2VydCEoCisgICAgICAgICAgICAgICAgcmVzdWx0LmlzX2VycigpLAorICAg ICAgICAgICAgICAgICJVcGRhdGUgc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgZGF0YTogJ3t9Jywg YnV0IGdvdCBPayIsCisgICAgICAgICAgICAgICAgaW52YWxpZF9kYXRhCisgICAgICAgICAgICAp OworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCBsZW5pZW50IGRhdGEgZm9ybWF0cyB0aGF0 IHN1Y2NlZWQgKGludmFsaWQgdmFsdWVzIGJlY29tZSBVbnNwZWNpZmllZCkKKyAgICAgICAgLy8g VXNlIGV4cGxpY2l0IHRpbWVzdGFtcHMgdG8gYXZvaWQgInNhbWUgdGltZXN0YW1wIiBlcnJvcnMK KyAgICAgICAgbGV0IG11dCB0aW1lc3RhbXAgPSBzdGFydF90aW1lICsgNjA7CisgICAgICAgIGxl dCBsZW5pZW50X2Nhc2VzID0gdmVjIVsKKyAgICAgICAgICAgICJhYmM6NDU2IiwgLy8gSW52YWxp ZCBmaXJzdCB2YWx1ZSAtPiBiZWNvbWVzIFUKKyAgICAgICAgICAgICIxMjM6ZGVmIiwgLy8gSW52 YWxpZCBzZWNvbmQgdmFsdWUgLT4gYmVjb21lcyBVCisgICAgICAgICAgICAiVTpVIiwgICAgIC8v IEFsbCB1bmtub3duCisgICAgICAgIF07CisKKyAgICAgICAgZm9yIHZhbGlkX2RhdGEgaW4gbGVu aWVudF9jYXNlcyB7CisgICAgICAgICAgICBsZXQgdXBkYXRlX2RhdGEgPSBmb3JtYXQhKCJ7fTp7 fSIsIHRpbWVzdGFtcCwgdmFsaWRfZGF0YSk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYmFj a2VuZC51cGRhdGUoJnJyZF9wYXRoLCAmdXBkYXRlX2RhdGEpLmF3YWl0OworICAgICAgICAgICAg YXNzZXJ0ISgKKyAgICAgICAgICAgICAgICByZXN1bHQuaXNfb2soKSwKKyAgICAgICAgICAgICAg ICAiVXBkYXRlIHNob3VsZCBzdWNjZWVkIGZvciBsZW5pZW50IGRhdGE6ICd7fScsIGJ1dCBnb3Qg RXJyOiB7Oj99IiwKKyAgICAgICAgICAgICAgICB1cGRhdGVfZGF0YSwKKyAgICAgICAgICAgICAg ICByZXN1bHQuZXJyKCkKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICB0aW1lc3RhbXAgKz0g NjA7IC8vIEluY3JlbWVudCB0aW1lc3RhbXAgZm9yIG5leHQgdXBkYXRlCisgICAgICAgIH0KKyAg ICB9CisKKyAgICAjW3Rva2lvOjp0ZXN0XQorICAgIGFzeW5jIGZuIHRlc3RfZGlyZWN0X2JhY2tl bmRfdXBkYXRlX25vbmV4aXN0ZW50X2ZpbGUoKSB7CisgICAgICAgIGxldCB0ZW1wX2RpciA9IHNl dHVwX3RlbXBfZGlyKCk7CisgICAgICAgIGxldCBycmRfcGF0aCA9IHRlc3RfcnJkX3BhdGgoJnRl bXBfZGlyLCAibm9uZXhpc3RlbnQiKTsKKworICAgICAgICBsZXQgbXV0IGJhY2tlbmQgPSBScmRE aXJlY3RCYWNrZW5kOjpuZXcoKTsKKworICAgICAgICAvLyBUcnkgdG8gdXBkYXRlIGEgZmlsZSB0 aGF0IGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQudXBkYXRlKCZy cmRfcGF0aCwgIk46MTAwOjIwMCIpLmF3YWl0OworCisgICAgICAgIGFzc2VydCEocmVzdWx0Lmlz X2VycigpLCAiVXBkYXRlIHNob3VsZCBmYWlsIGZvciBub25leGlzdGVudCBmaWxlIik7CisgICAg fQorCisgICAgI1t0b2tpbzo6dGVzdF0KKyAgICBhc3luYyBmbiB0ZXN0X2RpcmVjdF9iYWNrZW5k X2ZsdXNoKCkgeworICAgICAgICBsZXQgbXV0IGJhY2tlbmQgPSBScmREaXJlY3RCYWNrZW5kOjpu ZXcoKTsKKworICAgICAgICAvLyBGbHVzaCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgZm9yIGRpcmVj dCBiYWNrZW5kIChuby1vcCkKKyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQuZmx1c2goKS5h d2FpdDsKKyAgICAgICAgYXNzZXJ0ISgKKyAgICAgICAgICAgIHJlc3VsdC5pc19vaygpLAorICAg ICAgICAgICAgIkZsdXNoIHNob3VsZCBhbHdheXMgc3VjY2VlZCBmb3IgZGlyZWN0IGJhY2tlbmQi CisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0b2tpbzo6dGVzdF0KKyAgICBhc3luYyBmbiB0 ZXN0X2RpcmVjdF9iYWNrZW5kX2lzX2F2YWlsYWJsZSgpIHsKKyAgICAgICAgbGV0IGJhY2tlbmQg PSBScmREaXJlY3RCYWNrZW5kOjpuZXcoKTsKKworICAgICAgICAvLyBEaXJlY3QgYmFja2VuZCBz aG91bGQgYWx3YXlzIGJlIGF2YWlsYWJsZQorICAgICAgICBhc3NlcnQhKAorICAgICAgICAgICAg YmFja2VuZC5pc19hdmFpbGFibGUoKS5hd2FpdCwKKyAgICAgICAgICAgICJEaXJlY3QgYmFja2Vu ZCBzaG91bGQgYWx3YXlzIGJlIGF2YWlsYWJsZSIKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAj W3Rva2lvOjp0ZXN0XQorICAgIGFzeW5jIGZuIHRlc3RfZGlyZWN0X2JhY2tlbmRfbXVsdGlwbGVf dXBkYXRlcygpIHsKKyAgICAgICAgbGV0IHRlbXBfZGlyID0gc2V0dXBfdGVtcF9kaXIoKTsKKyAg ICAgICAgbGV0IHJyZF9wYXRoID0gdGVzdF9ycmRfcGF0aCgmdGVtcF9kaXIsICJtdWx0aV91cGRh dGVfdGVzdCIpOworCisgICAgICAgIGxldCBtdXQgYmFja2VuZCA9IFJyZERpcmVjdEJhY2tlbmQ6 Om5ldygpOworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjpzdG9yYWdlKFJyZEZvcm1h dDo6UHZlMik7CisgICAgICAgIGxldCBzdGFydF90aW1lID0gMTcwNDA2NzIwMDsKKworICAgICAg ICBiYWNrZW5kCisgICAgICAgICAgICAuY3JlYXRlKCZycmRfcGF0aCwgJnNjaGVtYSwgc3RhcnRf dGltZSkKKyAgICAgICAgICAgIC5hd2FpdAorICAgICAgICAgICAgLmV4cGVjdCgiRmFpbGVkIHRv IGNyZWF0ZSBSUkQiKTsKKworICAgICAgICAvLyBQZXJmb3JtIG11bHRpcGxlIHVwZGF0ZXMKKyAg ICAgICAgZm9yIGkgaW4gMC4uMTAgeworICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHN0YXJ0 X3RpbWUgKyA2MCAqIChpICsgMSk7IC8vIDEgbWludXRlIGludGVydmFscworICAgICAgICAgICAg bGV0IHRvdGFsID0gMTAwMDAwMCArIChpICogMTAwMDAwKTsKKyAgICAgICAgICAgIGxldCB1c2Vk ID0gNTAwMDAwICsgKGkgKiA1MDAwMCk7CisgICAgICAgICAgICBsZXQgdXBkYXRlX2RhdGEgPSBm b3JtYXQhKCJ7fTp7fTp7fSIsIHRpbWVzdGFtcCwgdG90YWwsIHVzZWQpOworCisgICAgICAgICAg ICBsZXQgcmVzdWx0ID0gYmFja2VuZC51cGRhdGUoJnJyZF9wYXRoLCAmdXBkYXRlX2RhdGEpLmF3 YWl0OworICAgICAgICAgICAgYXNzZXJ0IShyZXN1bHQuaXNfb2soKSwgIlVwZGF0ZSB7fSBmYWls ZWQ6IHs6P30iLCBpLCByZXN1bHQuZXJyKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgI1t0 b2tpbzo6dGVzdF0KKyAgICBhc3luYyBmbiB0ZXN0X2RpcmVjdF9iYWNrZW5kX292ZXJ3cml0ZV9m aWxlKCkgeworICAgICAgICBsZXQgdGVtcF9kaXIgPSBzZXR1cF90ZW1wX2RpcigpOworICAgICAg ICBsZXQgcnJkX3BhdGggPSB0ZXN0X3JyZF9wYXRoKCZ0ZW1wX2RpciwgIm92ZXJ3cml0ZV90ZXN0 Iik7CisKKyAgICAgICAgbGV0IG11dCBiYWNrZW5kID0gUnJkRGlyZWN0QmFja2VuZDo6bmV3KCk7 CisgICAgICAgIGxldCBzY2hlbWEgPSBScmRTY2hlbWE6OnN0b3JhZ2UoUnJkRm9ybWF0OjpQdmUy KTsKKyAgICAgICAgbGV0IHN0YXJ0X3RpbWUgPSAxNzA0MDY3MjAwOworCisgICAgICAgIC8vIENy ZWF0ZSBmaWxlIGZpcnN0IHRpbWUKKyAgICAgICAgYmFja2VuZAorICAgICAgICAgICAgLmNyZWF0 ZSgmcnJkX3BhdGgsICZzY2hlbWEsIHN0YXJ0X3RpbWUpCisgICAgICAgICAgICAuYXdhaXQKKyAg ICAgICAgICAgIC5leHBlY3QoIkZpcnN0IGNyZWF0ZSBmYWlsZWQiKTsKKworICAgICAgICAvLyBD cmVhdGUgc2FtZSBmaWxlIGFnYWluIC0gc2hvdWxkIHN1Y2NlZWQgKG92ZXJ3cml0ZXMpCisgICAg ICAgIC8vIE5vdGU6IGxpYnJyZCBjcmVhdGUoKSB3aXRoIG5vX292ZXJ3cml0ZT1mYWxzZSBhbGxv d3Mgb3ZlcndyaXRpbmcKKyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQuY3JlYXRlKCZycmRf cGF0aCwgJnNjaGVtYSwgc3RhcnRfdGltZSkuYXdhaXQ7CisgICAgICAgIGFzc2VydCEoCisgICAg ICAgICAgICByZXN1bHQuaXNfb2soKSwKKyAgICAgICAgICAgICJDcmVhdGluZyBmaWxlIGFnYWlu IHNob3VsZCBzdWNjZWVkIChvdmVyd3JpdGUgbW9kZSk6IHs6P30iLAorICAgICAgICAgICAgcmVz dWx0LmVycigpCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0b2tpbzo6dGVzdF0KKyAgICBh c3luYyBmbiB0ZXN0X2RpcmVjdF9iYWNrZW5kX2xhcmdlX3NjaGVtYSgpIHsKKyAgICAgICAgbGV0 IHRlbXBfZGlyID0gc2V0dXBfdGVtcF9kaXIoKTsKKyAgICAgICAgbGV0IHJyZF9wYXRoID0gdGVz dF9ycmRfcGF0aCgmdGVtcF9kaXIsICJsYXJnZV9zY2hlbWFfdGVzdCIpOworCisgICAgICAgIGxl dCBtdXQgYmFja2VuZCA9IFJyZERpcmVjdEJhY2tlbmQ6Om5ldygpOworICAgICAgICBsZXQgc2No ZW1hID0gUnJkU2NoZW1hOjpub2RlKFJyZEZvcm1hdDo6UHZlOV8wKTsgLy8gMTkgZGF0YSBzb3Vy Y2VzCisgICAgICAgIGxldCBzdGFydF90aW1lID0gMTcwNDA2NzIwMDsKKworICAgICAgICAvLyBD cmVhdGUgUlJEIHdpdGggbGFyZ2Ugc2NoZW1hCisgICAgICAgIGxldCByZXN1bHQgPSBiYWNrZW5k LmNyZWF0ZSgmcnJkX3BhdGgsICZzY2hlbWEsIHN0YXJ0X3RpbWUpLmF3YWl0OworICAgICAgICBh c3NlcnQhKHJlc3VsdC5pc19vaygpLCAiRmFpbGVkIHRvIGNyZWF0ZSBSUkQgd2l0aCBsYXJnZSBz Y2hlbWEiKTsKKworICAgICAgICAvLyBVcGRhdGUgd2l0aCBhbGwgdmFsdWVzCisgICAgICAgIGxl dCB2YWx1ZXMgPSAiMTAwOjIwMDo1MC41OjEwLjI6ODAwMDAwMDo0MDAwMDAwOjIwMDAwMDA6NTAw MDAwOjUwMDAwMDAwOjI1MDAwMDAwOjEwMDAwMDA6MjAwMDAwMDo2MDAwMDAwOjEwMDAwMDA6MC41 OjEuMjowLjg6MC4zOjAuMSI7CisgICAgICAgIGxldCB1cGRhdGVfZGF0YSA9IGZvcm1hdCEoIk46 e30iLCB2YWx1ZXMpOworCisgICAgICAgIGxldCByZXN1bHQgPSBiYWNrZW5kLnVwZGF0ZSgmcnJk X3BhdGgsICZ1cGRhdGVfZGF0YSkuYXdhaXQ7CisgICAgICAgIGFzc2VydCEocmVzdWx0LmlzX29r KCksICJGYWlsZWQgdG8gdXBkYXRlIFJSRCB3aXRoIGxhcmdlIHNjaGVtYSIpOworICAgIH0KK30K ZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvYmFja2VuZC9iYWNrZW5k X2ZhbGxiYWNrLnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9iYWNrZW5kL2JhY2tl bmRfZmFsbGJhY2sucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjdkNTc0 ZTViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9iYWNr ZW5kL2JhY2tlbmRfZmFsbGJhY2sucnMKQEAgLTAsMCArMSwyMjkgQEAKKy8vLyBSUkQgQmFja2Vu ZDogRmFsbGJhY2sgKERhZW1vbiArIERpcmVjdCkKKy8vLworLy8vIENvbXBvc2l0ZSBiYWNrZW5k IHRoYXQgdHJpZXMgZGFlbW9uIGZpcnN0LCBmYWxscyBiYWNrIHRvIGRpcmVjdCBmaWxlIHdyaXRp bmcuCisvLy8gVGhpcyBtYXRjaGVzIHRoZSBDIGltcGxlbWVudGF0aW9uJ3MgYmVoYXZpb3IgaW4g c3RhdHVzLmM6MTQwNS0xNDIwIHdoZXJlCisvLy8gaXQgYXR0ZW1wdHMgcnJkY191cGRhdGUoKSBm aXJzdCwgdGhlbiBmYWxscyBiYWNrIHRvIHJyZF91cGRhdGVfcigpLgordXNlIHN1cGVyOjpzdXBl cjo6c2NoZW1hOjpScmRTY2hlbWE7Cit1c2Ugc3VwZXI6OntScmRDYWNoZWRCYWNrZW5kLCBScmRE aXJlY3RCYWNrZW5kfTsKK3VzZSBhbnlob3c6OntDb250ZXh0LCBSZXN1bHR9OwordXNlIGFzeW5j X3RyYWl0Ojphc3luY190cmFpdDsKK3VzZSBzdGQ6OnBhdGg6OlBhdGg7CisKKy8vLyBDb21wb3Np dGUgYmFja2VuZCB0aGF0IHRyaWVzIGRhZW1vbiBmaXJzdCwgZmFsbHMgYmFjayB0byBkaXJlY3QK Ky8vLworLy8vIFRoaXMgcHJvdmlkZXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgdGhlIEMgaW1wbGVt ZW50YXRpb246CisvLy8gMS4gVHJ5IHRvIHVzZSBycmRjYWNoZWQgZGFlbW9uIGZvciBwZXJmb3Jt YW5jZQorLy8vIDIuIElmIGRhZW1vbiBmYWlscyBvciBpcyB1bmF2YWlsYWJsZSwgZmFsbCBiYWNr IHRvIGRpcmVjdCBmaWxlIHdyaXRlcworcHViIHN0cnVjdCBScmRGYWxsYmFja0JhY2tlbmQgewor ICAgIC8vLyBPcHRpb25hbCBkYWVtb24gYmFja2VuZCAoTm9uZSBpZiBkYWVtb24gaXMgdW5hdmFp bGFibGUvZmFpbGVkKQorICAgIGRhZW1vbjogT3B0aW9uPFJyZENhY2hlZEJhY2tlbmQ+LAorICAg IC8vLyBEaXJlY3QgYmFja2VuZCAoYWx3YXlzIGF2YWlsYWJsZSkKKyAgICBkaXJlY3Q6IFJyZERp cmVjdEJhY2tlbmQsCit9CisKK2ltcGwgUnJkRmFsbGJhY2tCYWNrZW5kIHsKKyAgICAvLy8gQ3Jl YXRlIGEgbmV3IGZhbGxiYWNrIGJhY2tlbmQKKyAgICAvLy8KKyAgICAvLy8gQXR0ZW1wdHMgdG8g Y29ubmVjdCB0byBycmRjYWNoZWQgZGFlbW9uLiBJZiBzdWNjZXNzZnVsLCB3aWxsIHByZWZlciBk YWVtb24uCisgICAgLy8vIElmIGRhZW1vbiBpcyB1bmF2YWlsYWJsZSwgd2lsbCB1c2UgZGlyZWN0 IG1vZGUgb25seS4KKyAgICAvLy8KKyAgICAvLy8gIyBBcmd1bWVudHMKKyAgICAvLy8gKiBgZGFl bW9uX3NvY2tldGAgLSBQYXRoIHRvIHJyZGNhY2hlZCBVbml4IHNvY2tldAorICAgIHB1YiBhc3lu YyBmbiBuZXcoZGFlbW9uX3NvY2tldDogJnN0cikgLT4gU2VsZiB7CisgICAgICAgIGxldCBkYWVt b24gPSBtYXRjaCBScmRDYWNoZWRCYWNrZW5kOjpjb25uZWN0KGRhZW1vbl9zb2NrZXQpLmF3YWl0 IHsKKyAgICAgICAgICAgIE9rKGJhY2tlbmQpID0+IHsKKyAgICAgICAgICAgICAgICB0cmFjaW5n OjppbmZvISgiUlJEIGZhbGxiYWNrIGJhY2tlbmQ6IGRhZW1vbiBhdmFpbGFibGUsIHdpbGwgcHJl ZmVyIGRhZW1vbiBtb2RlIik7CisgICAgICAgICAgICAgICAgU29tZShiYWNrZW5kKQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgRXJyKGUpID0+IHsKKyAgICAgICAgICAgICAgICB0cmFjaW5n Ojp3YXJuISgKKyAgICAgICAgICAgICAgICAgICAgIlJSRCBmYWxsYmFjayBiYWNrZW5kOiBkYWVt b24gdW5hdmFpbGFibGUgKHt9KSwgdXNpbmcgZGlyZWN0IG1vZGUgb25seSIsCisgICAgICAgICAg ICAgICAgICAgIGUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIE5vbmUKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBsZXQgZGlyZWN0ID0gUnJkRGlyZWN0 QmFja2VuZDo6bmV3KCk7CisKKyAgICAgICAgU2VsZiB7IGRhZW1vbiwgZGlyZWN0IH0KKyAgICB9 CisKKyAgICAvLy8gQ3JlYXRlIGEgZmFsbGJhY2sgYmFja2VuZCB3aXRoIGV4cGxpY2l0IGRhZW1v biBhbmQgZGlyZWN0IGJhY2tlbmRzCisgICAgLy8vCisgICAgLy8vIFVzZWZ1bCBmb3IgdGVzdGlu ZyBvciBjdXN0b20gY29uZmlndXJhdGlvbnMKKyAgICAjW2FsbG93KGRlYWRfY29kZSldIC8vIFVz ZWQgaW4gdGVzdHMgZm9yIGN1c3RvbSBiYWNrZW5kIGNvbmZpZ3VyYXRpb25zCisgICAgcHViIGZu IHdpdGhfYmFja2VuZHMoZGFlbW9uOiBPcHRpb248UnJkQ2FjaGVkQmFja2VuZD4sIGRpcmVjdDog UnJkRGlyZWN0QmFja2VuZCkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeyBkYWVtb24sIGRpcmVj dCB9CisgICAgfQorCisgICAgLy8vIENoZWNrIGlmIGRhZW1vbiBpcyBjdXJyZW50bHkgYmVpbmcg dXNlZAorICAgICNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVXNlZCBmb3IgZGVidWdnaW5nL21vbml0 b3JpbmcgZGFlbW9uIHN0YXR1cworICAgIHB1YiBmbiBpc191c2luZ19kYWVtb24oJnNlbGYpIC0+ IGJvb2wgeworICAgICAgICBzZWxmLmRhZW1vbi5pc19zb21lKCkKKyAgICB9CisKKyAgICAvLy8g RGlzYWJsZSBkYWVtb24gbW9kZSBhbmQgc3dpdGNoIHRvIGRpcmVjdCBtb2RlIG9ubHkKKyAgICAv Ly8KKyAgICAvLy8gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBkYWVtb24gb3BlcmF0aW9ucyBm YWlsCisgICAgZm4gZGlzYWJsZV9kYWVtb24oJm11dCBzZWxmKSB7CisgICAgICAgIGlmIHNlbGYu ZGFlbW9uLmlzX3NvbWUoKSB7CisgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgiRGlzYWJsaW5n IGRhZW1vbiBtb2RlLCBzd2l0Y2hpbmcgdG8gZGlyZWN0IGZpbGUgd3JpdGVzIik7CisgICAgICAg ICAgICBzZWxmLmRhZW1vbiA9IE5vbmU7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNbYXN5bmNf dHJhaXRdCitpbXBsIHN1cGVyOjpzdXBlcjo6YmFja2VuZDo6UnJkQmFja2VuZCBmb3IgUnJkRmFs bGJhY2tCYWNrZW5kIHsKKyAgICBhc3luYyBmbiB1cGRhdGUoJm11dCBzZWxmLCBmaWxlX3BhdGg6 ICZQYXRoLCBkYXRhOiAmc3RyKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgLy8gVHJ5IGRhZW1v biBmaXJzdCBpZiBhdmFpbGFibGUKKyAgICAgICAgaWYgbGV0IFNvbWUoZGFlbW9uKSA9ICZtdXQg c2VsZi5kYWVtb24geworICAgICAgICAgICAgbWF0Y2ggZGFlbW9uLnVwZGF0ZShmaWxlX3BhdGgs IGRhdGEpLmF3YWl0IHsKKyAgICAgICAgICAgICAgICBPaygoKSkgPT4geworICAgICAgICAgICAg ICAgICAgICB0cmFjaW5nOjp0cmFjZSEoIlVwZGF0ZWQgUlJEIHZpYSBkYWVtb24gKGZhbGxiYWNr IGJhY2tlbmQpIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBPaygoKSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIEVycihlKSA9PiB7CisgICAgICAgICAgICAgICAg ICAgIHRyYWNpbmc6Ondhcm4hKCJEYWVtb24gdXBkYXRlIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRv IGRpcmVjdDoge30iLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlX2RhZW1v bigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg ICAgIC8vIEZhbGxiYWNrIHRvIGRpcmVjdAorICAgICAgICBzZWxmLmRpcmVjdAorICAgICAgICAg ICAgLnVwZGF0ZShmaWxlX3BhdGgsIGRhdGEpCisgICAgICAgICAgICAuYXdhaXQKKyAgICAgICAg ICAgIC5jb250ZXh0KCJCb3RoIGRhZW1vbiBhbmQgZGlyZWN0IHVwZGF0ZSBmYWlsZWQiKQorICAg IH0KKworICAgIGFzeW5jIGZuIGNyZWF0ZSgKKyAgICAgICAgJm11dCBzZWxmLAorICAgICAgICBm aWxlX3BhdGg6ICZQYXRoLAorICAgICAgICBzY2hlbWE6ICZScmRTY2hlbWEsCisgICAgICAgIHN0 YXJ0X3RpbWVzdGFtcDogaTY0LAorICAgICkgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIC8vIFRy eSBkYWVtb24gZmlyc3QgaWYgYXZhaWxhYmxlCisgICAgICAgIGlmIGxldCBTb21lKGRhZW1vbikg PSAmbXV0IHNlbGYuZGFlbW9uIHsKKyAgICAgICAgICAgIG1hdGNoIGRhZW1vbi5jcmVhdGUoZmls ZV9wYXRoLCBzY2hlbWEsIHN0YXJ0X3RpbWVzdGFtcCkuYXdhaXQgeworICAgICAgICAgICAgICAg IE9rKCgpKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRyYWNpbmc6OnRyYWNlISgiQ3JlYXRl ZCBSUkQgdmlhIGRhZW1vbiAoZmFsbGJhY2sgYmFja2VuZCkiKTsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE9rKCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRXJy KGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgdHJhY2luZzo6d2FybiEoIkRhZW1vbiBjcmVh dGUgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZGlyZWN0OiB7fSIsIGUpOworICAgICAgICAgICAg ICAgICAgICBzZWxmLmRpc2FibGVfZGFlbW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gZGlyZWN0CisgICAg ICAgIHNlbGYuZGlyZWN0CisgICAgICAgICAgICAuY3JlYXRlKGZpbGVfcGF0aCwgc2NoZW1hLCBz dGFydF90aW1lc3RhbXApCisgICAgICAgICAgICAuYXdhaXQKKyAgICAgICAgICAgIC5jb250ZXh0 KCJCb3RoIGRhZW1vbiBhbmQgZGlyZWN0IGNyZWF0ZSBmYWlsZWQiKQorICAgIH0KKworICAgIGFz eW5jIGZuIGZsdXNoKCZtdXQgc2VsZikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIC8vIE9ubHkg Zmx1c2ggaWYgdXNpbmcgZGFlbW9uCisgICAgICAgIGlmIGxldCBTb21lKGRhZW1vbikgPSAmbXV0 IHNlbGYuZGFlbW9uIHsKKyAgICAgICAgICAgIG1hdGNoIGRhZW1vbi5mbHVzaCgpLmF3YWl0IHsK KyAgICAgICAgICAgICAgICBPaygoKSkgPT4gcmV0dXJuIE9rKCgpKSwKKyAgICAgICAgICAgICAg ICBFcnIoZSkgPT4geworICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgiRGFlbW9u IGZsdXNoIGZhaWxlZDoge30iLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxl X2RhZW1vbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor CisgICAgICAgIC8vIERpcmVjdCBiYWNrZW5kIGZsdXNoIGlzIGEgbm8tb3AKKyAgICAgICAgc2Vs Zi5kaXJlY3QuZmx1c2goKS5hd2FpdAorICAgIH0KKworICAgIGFzeW5jIGZuIGlzX2F2YWlsYWJs ZSgmc2VsZikgLT4gYm9vbCB7CisgICAgICAgIC8vIEFsd2F5cyBhdmFpbGFibGUgLSBlaXRoZXIg ZGFlbW9uIG9yIGRpcmVjdCB3aWxsIHdvcmsKKyAgICAgICAgdHJ1ZQorICAgIH0KKworICAgIGZu IG5hbWUoJnNlbGYpIC0+ICZzdHIgeworICAgICAgICBpZiBzZWxmLmRhZW1vbi5pc19zb21lKCkg eworICAgICAgICAgICAgImZhbGxiYWNrKGRhZW1vbitkaXJlY3QpIgorICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgImZhbGxiYWNrKGRpcmVjdC1vbmx5KSIKKyAgICAgICAgfQorICAgIH0K K30KKworI1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVzZSBzdXBlcjo6KjsKKyAgICB1 c2UgY3JhdGU6OmJhY2tlbmQ6OlJyZEJhY2tlbmQ7CisgICAgdXNlIGNyYXRlOjpzY2hlbWE6OntS cmRGb3JtYXQsIFJyZFNjaGVtYX07CisgICAgdXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKKyAgICB1 c2UgdGVtcGZpbGU6OlRlbXBEaXI7CisKKyAgICAvLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVj dG9yeSBmb3IgUlJEIGZpbGVzCisgICAgZm4gc2V0dXBfdGVtcF9kaXIoKSAtPiBUZW1wRGlyIHsK KyAgICAgICAgVGVtcERpcjo6bmV3KCkuZXhwZWN0KCJGYWlsZWQgdG8gY3JlYXRlIHRlbXAgZGly ZWN0b3J5IikKKyAgICB9CisKKyAgICAvLy8gQ3JlYXRlIGEgdGVzdCBSUkQgZmlsZSBwYXRoCisg ICAgZm4gdGVzdF9ycmRfcGF0aChkaXI6ICZUZW1wRGlyLCBuYW1lOiAmc3RyKSAtPiBQYXRoQnVm IHsKKyAgICAgICAgZGlyLnBhdGgoKS5qb2luKGZvcm1hdCEoInt9LnJyZCIsIG5hbWUpKQorICAg IH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2ZhbGxiYWNrX2JhY2tlbmRfd2l0aG91dF9k YWVtb24oKSB7CisgICAgICAgIGxldCBkaXJlY3QgPSBScmREaXJlY3RCYWNrZW5kOjpuZXcoKTsK KyAgICAgICAgbGV0IGJhY2tlbmQgPSBScmRGYWxsYmFja0JhY2tlbmQ6OndpdGhfYmFja2VuZHMo Tm9uZSwgZGlyZWN0KTsKKworICAgICAgICBhc3NlcnQhKCFiYWNrZW5kLmlzX3VzaW5nX2RhZW1v bigpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShiYWNrZW5kLm5hbWUoKSwgImZhbGxiYWNrKGRpcmVj dC1vbmx5KSIpOworICAgIH0KKworICAgICNbdG9raW86OnRlc3RdCisgICAgYXN5bmMgZm4gdGVz dF9mYWxsYmFja19iYWNrZW5kX2RpcmVjdF9tb2RlX29wZXJhdGlvbnMoKSB7CisgICAgICAgIGxl dCB0ZW1wX2RpciA9IHNldHVwX3RlbXBfZGlyKCk7CisgICAgICAgIGxldCBycmRfcGF0aCA9IHRl c3RfcnJkX3BhdGgoJnRlbXBfZGlyLCAiZmFsbGJhY2tfdGVzdCIpOworCisgICAgICAgIC8vIENy ZWF0ZSBmYWxsYmFjayBiYWNrZW5kIHdpdGhvdXQgZGFlbW9uIChkaXJlY3QgbW9kZSBvbmx5KQor ICAgICAgICBsZXQgZGlyZWN0ID0gUnJkRGlyZWN0QmFja2VuZDo6bmV3KCk7CisgICAgICAgIGxl dCBtdXQgYmFja2VuZCA9IFJyZEZhbGxiYWNrQmFja2VuZDo6d2l0aF9iYWNrZW5kcyhOb25lLCBk aXJlY3QpOworCisgICAgICAgIGFzc2VydCEoIWJhY2tlbmQuaXNfdXNpbmdfZGFlbW9uKCksICJT aG91bGQgbm90IGJlIHVzaW5nIGRhZW1vbiIpOworICAgICAgICBhc3NlcnRfZXEhKGJhY2tlbmQu bmFtZSgpLCAiZmFsbGJhY2soZGlyZWN0LW9ubHkpIik7CisKKyAgICAgICAgLy8gVGVzdCBjcmVh dGUgYW5kIHVwZGF0ZSBvcGVyYXRpb25zIHdvcmsgaW4gZGlyZWN0IG1vZGUKKyAgICAgICAgbGV0 IHNjaGVtYSA9IFJyZFNjaGVtYTo6c3RvcmFnZShScmRGb3JtYXQ6OlB2ZTIpOworICAgICAgICBs ZXQgc3RhcnRfdGltZSA9IDE3MDQwNjcyMDA7CisKKyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tl bmQuY3JlYXRlKCZycmRfcGF0aCwgJnNjaGVtYSwgc3RhcnRfdGltZSkuYXdhaXQ7CisgICAgICAg IGFzc2VydCEocmVzdWx0LmlzX29rKCksICJDcmVhdGUgc2hvdWxkIHdvcmsgaW4gZGlyZWN0IG1v ZGUiKTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gYmFja2VuZC51cGRhdGUoJnJyZF9wYXRoLCAi TjoxMDAwOjUwMCIpLmF3YWl0OworICAgICAgICBhc3NlcnQhKHJlc3VsdC5pc19vaygpLCAiVXBk YXRlIHNob3VsZCB3b3JrIGluIGRpcmVjdCBtb2RlIik7CisgICAgfQorCisgICAgI1t0b2tpbzo6 dGVzdF0KKyAgICBhc3luYyBmbiB0ZXN0X2ZhbGxiYWNrX2JhY2tlbmRfaXNfYWx3YXlzX2F2YWls YWJsZSgpIHsKKyAgICAgICAgbGV0IGRpcmVjdCA9IFJyZERpcmVjdEJhY2tlbmQ6Om5ldygpOwor ICAgICAgICBsZXQgYmFja2VuZCA9IFJyZEZhbGxiYWNrQmFja2VuZDo6d2l0aF9iYWNrZW5kcyhO b25lLCBkaXJlY3QpOworCisgICAgICAgIC8vIEZhbGxiYWNrIGJhY2tlbmQgc2hvdWxkIGFsd2F5 cyBiZSBhdmFpbGFibGUgKGV2ZW4gd2l0aG91dCBkYWVtb24pCisgICAgICAgIGFzc2VydCEoCisg ICAgICAgICAgICBiYWNrZW5kLmlzX2F2YWlsYWJsZSgpLmF3YWl0LAorICAgICAgICAgICAgIkZh bGxiYWNrIGJhY2tlbmQgc2hvdWxkIGFsd2F5cyBiZSBhdmFpbGFibGUiCisgICAgICAgICk7Cisg ICAgfQorCisgICAgI1t0b2tpbzo6dGVzdF0KKyAgICBhc3luYyBmbiB0ZXN0X2ZhbGxiYWNrX2Jh Y2tlbmRfZmx1c2hfd2l0aG91dF9kYWVtb24oKSB7CisgICAgICAgIGxldCBkaXJlY3QgPSBScmRE aXJlY3RCYWNrZW5kOjpuZXcoKTsKKyAgICAgICAgbGV0IG11dCBiYWNrZW5kID0gUnJkRmFsbGJh Y2tCYWNrZW5kOjp3aXRoX2JhY2tlbmRzKE5vbmUsIGRpcmVjdCk7CisKKyAgICAgICAgLy8gRmx1 c2ggc2hvdWxkIHN1Y2NlZWQgZXZlbiB3aXRob3V0IGRhZW1vbiAobm8tb3AgZm9yIGRpcmVjdCkK KyAgICAgICAgbGV0IHJlc3VsdCA9IGJhY2tlbmQuZmx1c2goKS5hd2FpdDsKKyAgICAgICAgYXNz ZXJ0IShyZXN1bHQuaXNfb2soKSwgIkZsdXNoIHNob3VsZCBzdWNjZWVkIHdpdGhvdXQgZGFlbW9u Iik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9k YWVtb24ucnMgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL2RhZW1vbi5ycwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTUzYjZkYWQKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL2RhZW1vbi5ycwpAQCAtMCwwICsxLDE0MCBA QAorLy8vIFJSRENhY2hlZCBEYWVtb24gQ2xpZW50ICh3cmFwcGVyIGFyb3VuZCBycmRjYWNoZWQt Y2xpZW50IGNyYXRlKQorLy8vCisvLy8gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB0aGluIHdyYXBw ZXIgYXJvdW5kIHRoZSBycmRjYWNoZWQtY2xpZW50IGNyYXRlLgordXNlIGFueWhvdzo6e0NvbnRl eHQsIFJlc3VsdH07Cit1c2Ugc3RkOjpwYXRoOjpQYXRoOworCisvLy8gV3JhcHBlciBhcm91bmQg cnJkY2FjaGVkLWNsaWVudAorI1thbGxvdyhkZWFkX2NvZGUpXSAvLyBVc2VkIGluIGJhY2tlbmRf ZGFlbW9uLnJzIHZpYSBtb2R1bGUtbGV2ZWwgYWNjZXNzCitwdWIgc3RydWN0IFJyZENhY2hlZENs aWVudCB7CisgICAgcHViKGNyYXRlKSBjbGllbnQ6CisgICAgICAgIHRva2lvOjpzeW5jOjpNdXRl eDxycmRjYWNoZWRfY2xpZW50OjpSUkRDYWNoZWRDbGllbnQ8dG9raW86Om5ldDo6VW5peFN0cmVh bT4+LAorfQorCitpbXBsIFJyZENhY2hlZENsaWVudCB7CisgICAgLy8vIENvbm5lY3QgdG8gcnJk Y2FjaGVkIGRhZW1vbiB2aWEgVW5peCBzb2NrZXQKKyAgICAvLy8KKyAgICAvLy8gIyBBcmd1bWVu dHMKKyAgICAvLy8gKiBgc29ja2V0X3BhdGhgIC0gUGF0aCB0byBycmRjYWNoZWQgVW5peCBzb2Nr ZXQgKGRlZmF1bHQ6IC92YXIvcnVuL3JyZGNhY2hlZC5zb2NrKQorICAgICNbYWxsb3coZGVhZF9j b2RlKV0gLy8gVXNlZCB2aWEgYmFja2VuZCBtb2R1bGVzCisgICAgcHViIGFzeW5jIGZuIGNvbm5l Y3Q8UDogQXNSZWY8UGF0aD4+KHNvY2tldF9wYXRoOiBQKSAtPiBSZXN1bHQ8U2VsZj4geworICAg ICAgICBsZXQgc29ja2V0X3BhdGggPSBzb2NrZXRfcGF0aC5hc19yZWYoKS50b19zdHJpbmdfbG9z c3koKS50b19zdHJpbmcoKTsKKworICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoIkNvbm5lY3Rpbmcg dG8gcnJkY2FjaGVkIGF0IHt9Iiwgc29ja2V0X3BhdGgpOworCisgICAgICAgIC8vIENvbm5lY3Qg dG8gZGFlbW9uIChhc3luYyBvcGVyYXRpb24pCisgICAgICAgIGxldCBjbGllbnQgPSBycmRjYWNo ZWRfY2xpZW50OjpSUkRDYWNoZWRDbGllbnQ6OmNvbm5lY3RfdW5peCgmc29ja2V0X3BhdGgpCisg ICAgICAgICAgICAuYXdhaXQKKyAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgi RmFpbGVkIHRvIGNvbm5lY3QgdG8gcnJkY2FjaGVkOiB7c29ja2V0X3BhdGh9IikpPzsKKworICAg ICAgICB0cmFjaW5nOjppbmZvISgiQ29ubmVjdGVkIHRvIHJyZGNhY2hlZCBhdCB7fSIsIHNvY2tl dF9wYXRoKTsKKworICAgICAgICBPayhTZWxmIHsKKyAgICAgICAgICAgIGNsaWVudDogdG9raW86 OnN5bmM6Ok11dGV4OjpuZXcoY2xpZW50KSwKKyAgICAgICAgfSkKKyAgICB9CisKKyAgICAvLy8g VXBkYXRlIFJSRCBmaWxlIHZpYSBycmRjYWNoZWQKKyAgICAvLy8KKyAgICAvLy8gIyBBcmd1bWVu dHMKKyAgICAvLy8gKiBgZmlsZV9wYXRoYCAtIEZ1bGwgcGF0aCB0byBSUkQgZmlsZQorICAgIC8v LyAqIGBkYXRhYCAtIFVwZGF0ZSBkYXRhIGluIGZvcm1hdCAidGltZXN0YW1wOnZhbHVlMTp2YWx1 ZTI6Li4uIgorICAgICNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVXNlZCB2aWEgYmFja2VuZCBtb2R1 bGVzCisgICAgcHViIGFzeW5jIGZuIHVwZGF0ZTxQOiBBc1JlZjxQYXRoPj4oJnNlbGYsIGZpbGVf cGF0aDogUCwgZGF0YTogJnN0cikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIGxldCBmaWxlX3Bh dGggPSBmaWxlX3BhdGguYXNfcmVmKCk7CisKKyAgICAgICAgLy8gUGFyc2UgdGhlIHVwZGF0ZSBk YXRhCisgICAgICAgIGxldCBwYXJ0czogVmVjPCZzdHI+ID0gZGF0YS5zcGxpdCgnOicpLmNvbGxl Y3QoKTsKKyAgICAgICAgaWYgcGFydHMubGVuKCkgPCAyIHsKKyAgICAgICAgICAgIGFueWhvdzo6 YmFpbCEoIkludmFsaWQgdXBkYXRlIGRhdGEgZm9ybWF0OiB7ZGF0YX0iKTsKKyAgICAgICAgfQor CisgICAgICAgIGxldCB0aW1lc3RhbXAgPSBpZiBwYXJ0c1swXSA9PSAiTiIgeworICAgICAgICAg ICAgTm9uZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU29tZSgKKyAgICAgICAgICAg ICAgICBwYXJ0c1swXQorICAgICAgICAgICAgICAgICAgICAucGFyc2U6Ojx1c2l6ZT4oKQorICAg ICAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIkludmFsaWQgdGltZXN0 YW1wOiB7fSIsIHBhcnRzWzBdKSk/LAorICAgICAgICAgICAgKQorICAgICAgICB9OworCisgICAg ICAgIGxldCB2YWx1ZXM6IFZlYzxmNjQ+ID0gcGFydHNbMS4uXQorICAgICAgICAgICAgLml0ZXIo KQorICAgICAgICAgICAgLm1hcCh8dnwgeworICAgICAgICAgICAgICAgIGlmICp2ID09ICJVIiB7 CisgICAgICAgICAgICAgICAgICAgIE9rKGY2NDo6TkFOKQorICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgIHYucGFyc2U6OjxmNjQ+KCkKKyAgICAgICAgICAgICAg ICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiSW52YWxpZCB2YWx1ZToge3Z9Iikp CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC5jb2xsZWN0 Ojo8UmVzdWx0PFZlYzxfPj4+KCk/OworCisgICAgICAgIC8vIEdldCBmaWxlIHBhdGggd2l0aG91 dCAucnJkIGV4dGVuc2lvbiAocnJkY2FjaGVkLWNsaWVudCBhZGRzIGl0KQorICAgICAgICBsZXQg cGF0aF9zdHIgPSBmaWxlX3BhdGgudG9fc3RyaW5nX2xvc3N5KCk7CisgICAgICAgIGxldCBwYXRo X3dpdGhvdXRfZXh0ID0gcGF0aF9zdHIuc3RyaXBfc3VmZml4KCIucnJkIikudW53cmFwX29yKCZw YXRoX3N0cik7CisKKyAgICAgICAgLy8gU2VuZCB1cGRhdGUgdmlhIHJyZGNhY2hlZAorICAgICAg ICBsZXQgbXV0IGNsaWVudCA9IHNlbGYuY2xpZW50LmxvY2soKS5hd2FpdDsKKyAgICAgICAgY2xp ZW50CisgICAgICAgICAgICAudXBkYXRlKHBhdGhfd2l0aG91dF9leHQsIHRpbWVzdGFtcCwgdmFs dWVzKQorICAgICAgICAgICAgLmF3YWl0CisgICAgICAgICAgICAuY29udGV4dCgiRmFpbGVkIHRv IHNlbmQgdXBkYXRlIHRvIHJyZGNhY2hlZCIpPzsKKworICAgICAgICB0cmFjaW5nOjp0cmFjZSEo IlVwZGF0ZWQgUlJEIHZpYSBkYWVtb246IHs6P30gLT4ge30iLCBmaWxlX3BhdGgsIGRhdGEpOwor CisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBDcmVhdGUgUlJEIGZpbGUgdmlhIHJy ZGNhY2hlZAorICAgICNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVXNlZCB2aWEgYmFja2VuZCBtb2R1 bGVzCisgICAgcHViIGFzeW5jIGZuIGNyZWF0ZSgmc2VsZiwgYXJnczogcnJkY2FjaGVkX2NsaWVu dDo6Y3JlYXRlOjpDcmVhdGVBcmd1bWVudHMpIC0+IFJlc3VsdDwoKT4geworICAgICAgICBsZXQg bXV0IGNsaWVudCA9IHNlbGYuY2xpZW50LmxvY2soKS5hd2FpdDsKKyAgICAgICAgY2xpZW50Cisg ICAgICAgICAgICAuY3JlYXRlKGFyZ3MpCisgICAgICAgICAgICAuYXdhaXQKKyAgICAgICAgICAg IC5jb250ZXh0KCJGYWlsZWQgdG8gY3JlYXRlIFJSRCB2aWEgcnJkY2FjaGVkIik/OworICAgICAg ICBPaygoKSkKKyAgICB9CisKKyAgICAvLy8gRmx1c2ggYWxsIHBlbmRpbmcgdXBkYXRlcworICAg ICNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVXNlZCB2aWEgYmFja2VuZCBtb2R1bGVzCisgICAgcHVi IGFzeW5jIGZuIGZsdXNoKCZzZWxmKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgbGV0IG11dCBj bGllbnQgPSBzZWxmLmNsaWVudC5sb2NrKCkuYXdhaXQ7CisgICAgICAgIGNsaWVudAorICAgICAg ICAgICAgLmZsdXNoX2FsbCgpCisgICAgICAgICAgICAuYXdhaXQKKyAgICAgICAgICAgIC5jb250 ZXh0KCJGYWlsZWQgdG8gZmx1c2ggcnJkY2FjaGVkIik/OworCisgICAgICAgIHRyYWNpbmc6OmRl YnVnISgiRmx1c2hlZCBhbGwgUlJEIGZpbGVzIik7CisKKyAgICAgICAgT2soKCkpCisgICAgfQor fQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworCisgICAg I1t0b2tpbzo6dGVzdF0KKyAgICAjW2lnbm9yZV0gLy8gT25seSBydW5zIGlmIHJyZGNhY2hlZCBk YWVtb24gaXMgYWN0dWFsbHkgcnVubmluZworICAgIGFzeW5jIGZuIHRlc3RfY29ubmVjdF90b19k YWVtb24oKSB7CisgICAgICAgIC8vIFRoaXMgdGVzdCByZXF1aXJlcyBhIHJ1bm5pbmcgcnJkY2Fj aGVkIGRhZW1vbgorICAgICAgICBsZXQgcmVzdWx0ID0gUnJkQ2FjaGVkQ2xpZW50Ojpjb25uZWN0 KCIvdmFyL3J1bi9ycmRjYWNoZWQuc29jayIpLmF3YWl0OworCisgICAgICAgIG1hdGNoIHJlc3Vs dCB7CisgICAgICAgICAgICBPayhjbGllbnQpID0+IHsKKyAgICAgICAgICAgICAgICAvLyBUcnkg dG8gZmx1c2ggKGJhc2ljIGNvbm5lY3Rpdml0eSB0ZXN0KQorICAgICAgICAgICAgICAgIGxldCBy ZXN1bHQgPSBjbGllbnQuZmx1c2goKS5hd2FpdDsKKyAgICAgICAgICAgICAgICBwcmludGxuISgi UlJEQ2FjaGVkIGZsdXNoIHJlc3VsdDogezo/fSIsIHJlc3VsdCk7CisKKyAgICAgICAgICAgICAg ICAvLyBDb25uZWN0aW9uIHN1Y2Nlc3NmdWwgKGZsdXNoIG1heSBmYWlsIGlmIG5vIGZpbGVzLCB0 aGF0J3MgT0spCisgICAgICAgICAgICAgICAgYXNzZXJ0IShyZXN1bHQuaXNfb2soKSB8fCByZXN1 bHQuaXNfZXJyKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRXJyKGUpID0+IHsKKyAg ICAgICAgICAgICAgICBwcmludGxuISgiTm90ZTogcnJkY2FjaGVkIG5vdCBydW5uaW5nIChleHBl Y3RlZCBpbiB0ZXN0IGVudik6IHt9IiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL2tleV90eXBl LnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9rZXlfdHlwZS5ycwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTQwMjFjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL2tleV90eXBlLnJzCkBAIC0wLDAgKzEsMzEzIEBA CisvLy8gUlJEIEtleSBUeXBlIFBhcnNpbmcgYW5kIFBhdGggUmVzb2x1dGlvbgorLy8vCisvLy8g VGhpcyBtb2R1bGUgaGFuZGxlcyBwYXJzaW5nIFJSRCBzdGF0dXMgdXBkYXRlIGtleXMgYW5kIG1h cHBpbmcgdGhlbQorLy8vIHRvIHRoZSBhcHByb3ByaWF0ZSBmaWxlIHBhdGhzIGFuZCBzY2hlbWFz LgordXNlIGFueWhvdzo6e0NvbnRleHQsIFJlc3VsdH07Cit1c2Ugc3RkOjpwYXRoOjp7UGF0aCwg UGF0aEJ1Zn07CisKK3VzZSBzdXBlcjo6c2NoZW1hOjp7UnJkRm9ybWF0LCBScmRTY2hlbWF9Owor CisvLy8gUlJEIGtleSB0eXBlcyBmb3Igcm91dGluZyB0byBjb3JyZWN0IHNjaGVtYSBhbmQgcGF0 aAorLy8vCisvLy8gVGhpcyBlbnVtIHJlcHJlc2VudHMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBS UkQgbWV0cmljcyB0aGF0IHBteGNmcyB0cmFja3M6CisvLy8gLSBOb2RlIG1ldHJpY3MgKENQVSwg bWVtb3J5LCBuZXR3b3JrIGZvciBhIG5vZGUpCisvLy8gLSBWTSBtZXRyaWNzIChDUFUsIG1lbW9y eSwgZGlzaywgbmV0d29yayBmb3IgYSBWTS9DVCkKKy8vLyAtIFN0b3JhZ2UgbWV0cmljcyAodG90 YWwvdXNlZCBzcGFjZSBmb3IgYSBzdG9yYWdlKQorI1tkZXJpdmUoRGVidWcsIENsb25lLCBQYXJ0 aWFsRXEsIEVxKV0KK3B1YihjcmF0ZSkgZW51bSBScmRLZXlUeXBlIHsKKyAgICAvLy8gTm9kZSBt ZXRyaWNzOiBwdmUyLW5vZGUve25vZGVuYW1lfSBvciBwdmUtbm9kZS05LjAve25vZGVuYW1lfQor ICAgIE5vZGUgeyBub2RlbmFtZTogU3RyaW5nLCBmb3JtYXQ6IFJyZEZvcm1hdCB9LAorICAgIC8v LyBWTSBtZXRyaWNzOiBwdmUyLjMtdm0ve3ZtaWR9IG9yIHB2ZS12bS05LjAve3ZtaWR9CisgICAg Vm0geyB2bWlkOiBTdHJpbmcsIGZvcm1hdDogUnJkRm9ybWF0IH0sCisgICAgLy8vIFN0b3JhZ2Ug bWV0cmljczogcHZlMi1zdG9yYWdlL3tub2RlfS97c3RvcmFnZX0gb3IgcHZlLXN0b3JhZ2UtOS4w L3tub2RlfS97c3RvcmFnZX0KKyAgICBTdG9yYWdlIHsKKyAgICAgICAgbm9kZW5hbWU6IFN0cmlu ZywKKyAgICAgICAgc3RvcmFnZTogU3RyaW5nLAorICAgICAgICBmb3JtYXQ6IFJyZEZvcm1hdCwK KyAgICB9LAorfQorCitpbXBsIFJyZEtleVR5cGUgeworICAgIC8vLyBQYXJzZSBSUkQga2V5IGZy b20gc3RhdHVzIHVwZGF0ZSBrZXkKKyAgICAvLy8KKyAgICAvLy8gU3VwcG9ydGVkIGZvcm1hdHM6 CisgICAgLy8vIC0gInB2ZTItbm9kZS9ub2RlMSIg4oaSIE5vZGUgeyBub2RlbmFtZTogIm5vZGUx IiwgZm9ybWF0OiBQdmUyIH0KKyAgICAvLy8gLSAicHZlLW5vZGUtOS4wL25vZGUxIiDihpIgTm9k ZSB7IG5vZGVuYW1lOiAibm9kZTEiLCBmb3JtYXQ6IFB2ZTlfMCB9CisgICAgLy8vIC0gInB2ZTIu My12bS8xMDAiIOKGkiBWbSB7IHZtaWQ6ICIxMDAiLCBmb3JtYXQ6IFB2ZTIgfQorICAgIC8vLyAt ICJwdmUtc3RvcmFnZS05LjAvbm9kZTEvbG9jYWwiIOKGkiBTdG9yYWdlIHsgbm9kZW5hbWU6ICJu b2RlMSIsIHN0b3JhZ2U6ICJsb2NhbCIsIGZvcm1hdDogUHZlOV8wIH0KKyAgICBwdWIoY3JhdGUp IGZuIHBhcnNlKGtleTogJnN0cikgLT4gUmVzdWx0PFNlbGY+IHsKKyAgICAgICAgbGV0IHBhcnRz OiBWZWM8JnN0cj4gPSBrZXkuc3BsaXQoJy8nKS5jb2xsZWN0KCk7CisKKyAgICAgICAgaWYgcGFy dHMuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICBhbnlob3c6OmJhaWwhKCJFbXB0eSBSUkQga2V5 Iik7CisgICAgICAgIH0KKworICAgICAgICBtYXRjaCBwYXJ0c1swXSB7CisgICAgICAgICAgICAi cHZlMi1ub2RlIiA9PiB7CisgICAgICAgICAgICAgICAgbGV0IG5vZGVuYW1lID0gcGFydHMuZ2V0 KDEpLmNvbnRleHQoIk1pc3Npbmcgbm9kZW5hbWUiKT8udG9fc3RyaW5nKCk7CisgICAgICAgICAg ICAgICAgT2soUnJkS2V5VHlwZTo6Tm9kZSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVuYW1l LAorICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFJyZEZvcm1hdDo6UHZlMiwKKyAgICAgICAg ICAgICAgICB9KQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJlZml4IGlmIHByZWZpeC5z dGFydHNfd2l0aCgicHZlLW5vZGUtIikgPT4geworICAgICAgICAgICAgICAgIGxldCBub2RlbmFt ZSA9IHBhcnRzLmdldCgxKS5jb250ZXh0KCJNaXNzaW5nIG5vZGVuYW1lIik/LnRvX3N0cmluZygp OworICAgICAgICAgICAgICAgIE9rKFJyZEtleVR5cGU6Ok5vZGUgeworICAgICAgICAgICAgICAg ICAgICBub2RlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBScmRGb3JtYXQ6OlB2 ZTlfMCwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfQorICAgICAgICAgICAgInB2 ZTIuMy12bSIgPT4geworICAgICAgICAgICAgICAgIGxldCB2bWlkID0gcGFydHMuZ2V0KDEpLmNv bnRleHQoIk1pc3Npbmcgdm1pZCIpPy50b19zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBPayhS cmRLZXlUeXBlOjpWbSB7CisgICAgICAgICAgICAgICAgICAgIHZtaWQsCisgICAgICAgICAgICAg ICAgICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmUyLAorICAgICAgICAgICAgICAgIH0pCisgICAg ICAgICAgICB9CisgICAgICAgICAgICBwcmVmaXggaWYgcHJlZml4LnN0YXJ0c193aXRoKCJwdmUt dm0tIikgPT4geworICAgICAgICAgICAgICAgIGxldCB2bWlkID0gcGFydHMuZ2V0KDEpLmNvbnRl eHQoIk1pc3Npbmcgdm1pZCIpPy50b19zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBPayhScmRL ZXlUeXBlOjpWbSB7CisgICAgICAgICAgICAgICAgICAgIHZtaWQsCisgICAgICAgICAgICAgICAg ICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmU5XzAsCisgICAgICAgICAgICAgICAgfSkKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICJwdmUyLXN0b3JhZ2UiID0+IHsKKyAgICAgICAgICAgICAg ICBsZXQgbm9kZW5hbWUgPSBwYXJ0cy5nZXQoMSkuY29udGV4dCgiTWlzc2luZyBub2RlbmFtZSIp Py50b19zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBsZXQgc3RvcmFnZSA9IHBhcnRzLmdldCgy KS5jb250ZXh0KCJNaXNzaW5nIHN0b3JhZ2UiKT8udG9fc3RyaW5nKCk7CisgICAgICAgICAgICAg ICAgT2soUnJkS2V5VHlwZTo6U3RvcmFnZSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVuYW1l LAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBmb3Jt YXQ6IFJyZEZvcm1hdDo6UHZlMiwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgcHJlZml4IGlmIHByZWZpeC5zdGFydHNfd2l0aCgicHZlLXN0b3JhZ2UtIikg PT4geworICAgICAgICAgICAgICAgIGxldCBub2RlbmFtZSA9IHBhcnRzLmdldCgxKS5jb250ZXh0 KCJNaXNzaW5nIG5vZGVuYW1lIik/LnRvX3N0cmluZygpOworICAgICAgICAgICAgICAgIGxldCBz dG9yYWdlID0gcGFydHMuZ2V0KDIpLmNvbnRleHQoIk1pc3Npbmcgc3RvcmFnZSIpPy50b19zdHJp bmcoKTsKKyAgICAgICAgICAgICAgICBPayhScmRLZXlUeXBlOjpTdG9yYWdlIHsKKyAgICAgICAg ICAgICAgICAgICAgbm9kZW5hbWUsCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsCisgICAg ICAgICAgICAgICAgICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmU5XzAsCisgICAgICAgICAgICAg ICAgfSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF8gPT4gYW55aG93OjpiYWlsISgiVW5r bm93biBSUkQga2V5IGZvcm1hdDoge2tleX0iKSwKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v LyBHZXQgdGhlIFJSRCBmaWxlIHBhdGggZm9yIHRoaXMga2V5IHR5cGUKKyAgICAvLy8KKyAgICAv Ly8gQWx3YXlzIHJldHVybnMgcGF0aHMgdXNpbmcgdGhlIGN1cnJlbnQgZm9ybWF0ICg5LjApLCBy ZWdhcmRsZXNzIG9mIHRoZSBpbnB1dCBmb3JtYXQuCisgICAgLy8vIFRoaXMgZW5hYmxlcyB0cmFu c3BhcmVudCBmb3JtYXQgbWlncmF0aW9uOiBvbGQgUFZFOCBub2RlcyBjYW4gc2VuZCBgcHZlMi1u b2RlL2Aga2V5cywKKyAgICAvLy8gYW5kIHRoZXknbGwgYmUgd3JpdHRlbiB0byBgcHZlLW5vZGUt OS4wL2AgZmlsZXMgYXV0b21hdGljYWxseS4KKyAgICAvLy8KKyAgICAvLy8gIyBGb3JtYXQgTWln cmF0aW9uIFN0cmF0ZWd5CisgICAgLy8vCisgICAgLy8vIFRoZSBDIGltcGxlbWVudGF0aW9uIGFs d2F5cyBjcmVhdGVzIGZpbGVzIGluIHRoZSBjdXJyZW50IGZvcm1hdCBkaXJlY3RvcnkKKyAgICAv Ly8gKHNlZSBzdGF0dXMuYzoxMjg3KS4gVGhpcyBSdXN0IGltcGxlbWVudGF0aW9uIGZvbGxvd3Mg dGhlIHNhbWUgYXBwcm9hY2g6CisgICAgLy8vIC0gSW5wdXQ6IGBwdmUyLW5vZGUvbm9kZTFgIOKG kiBPdXRwdXQ6IGAvdmFyL2xpYi9ycmRjYWNoZWQvZGIvcHZlLW5vZGUtOS4wL25vZGUxYAorICAg IC8vLyAtIElucHV0OiBgcHZlLW5vZGUtOS4wL25vZGUxYCDihpIgT3V0cHV0OiBgL3Zhci9saWIv cnJkY2FjaGVkL2RiL3B2ZS1ub2RlLTkuMC9ub2RlMWAKKyAgICAvLy8KKyAgICAvLy8gVGhpcyBh bGxvd3Mgcm9sbGluZyB1cGdyYWRlcyB3aGVyZSBvbGQgYW5kIG5ldyBub2RlcyBjb2V4aXN0IGlu IHRoZSBzYW1lIGNsdXN0ZXIuCisgICAgcHViKGNyYXRlKSBmbiBmaWxlX3BhdGgoJnNlbGYsIGJh c2VfZGlyOiAmUGF0aCkgLT4gUGF0aEJ1ZiB7CisgICAgICAgIG1hdGNoIHNlbGYgeworICAgICAg ICAgICAgUnJkS2V5VHlwZTo6Tm9kZSB7IG5vZGVuYW1lLCAuLiB9ID0+IHsKKyAgICAgICAgICAg ICAgICAvLyBBbHdheXMgdXNlIGN1cnJlbnQgZm9ybWF0IHBhdGgKKyAgICAgICAgICAgICAgICBi YXNlX2Rpci5qb2luKCJwdmUtbm9kZS05LjAiKS5qb2luKG5vZGVuYW1lKQorICAgICAgICAgICAg fQorICAgICAgICAgICAgUnJkS2V5VHlwZTo6Vm0geyB2bWlkLCAuLiB9ID0+IHsKKyAgICAgICAg ICAgICAgICAvLyBBbHdheXMgdXNlIGN1cnJlbnQgZm9ybWF0IHBhdGgKKyAgICAgICAgICAgICAg ICBiYXNlX2Rpci5qb2luKCJwdmUtdm0tOS4wIikuam9pbih2bWlkKQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgUnJkS2V5VHlwZTo6U3RvcmFnZSB7CisgICAgICAgICAgICAgICAgbm9kZW5h bWUsIHN0b3JhZ2UsIC4uCisgICAgICAgICAgICB9ID0+IHsKKyAgICAgICAgICAgICAgICAvLyBB bHdheXMgdXNlIGN1cnJlbnQgZm9ybWF0IHBhdGgKKyAgICAgICAgICAgICAgICBiYXNlX2Rpcgor ICAgICAgICAgICAgICAgICAgICAuam9pbigicHZlLXN0b3JhZ2UtOS4wIikKKyAgICAgICAgICAg ICAgICAgICAgLmpvaW4obm9kZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIC5qb2luKHN0b3Jh Z2UpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gR2V0IHRoZSBz b3VyY2UgZm9ybWF0IGZyb20gdGhlIGlucHV0IGtleQorICAgIC8vLworICAgIC8vLyBUaGlzIGlz IHVzZWQgZm9yIGRhdGEgdHJhbnNmb3JtYXRpb24gKHBhZGRpbmcvdHJ1bmNhdGlvbikuCisgICAg cHViKGNyYXRlKSBmbiBzb3VyY2VfZm9ybWF0KCZzZWxmKSAtPiBScmRGb3JtYXQgeworICAgICAg ICBtYXRjaCBzZWxmIHsKKyAgICAgICAgICAgIFJyZEtleVR5cGU6Ok5vZGUgeyBmb3JtYXQsIC4u IH0KKyAgICAgICAgICAgIHwgUnJkS2V5VHlwZTo6Vm0geyBmb3JtYXQsIC4uIH0KKyAgICAgICAg ICAgIHwgUnJkS2V5VHlwZTo6U3RvcmFnZSB7IGZvcm1hdCwgLi4gfSA9PiAqZm9ybWF0LAorICAg ICAgICB9CisgICAgfQorCisgICAgLy8vIEdldCB0aGUgdGFyZ2V0IFJSRCBzY2hlbWEgKGFsd2F5 cyBjdXJyZW50IGZvcm1hdCkKKyAgICAvLy8KKyAgICAvLy8gRmlsZXMgYXJlIGFsd2F5cyBjcmVh dGVkIHVzaW5nIHRoZSBjdXJyZW50IGZvcm1hdCAoUHZlOV8wKSwKKyAgICAvLy8gcmVnYXJkbGVz cyBvZiB0aGUgc291cmNlIGZvcm1hdCBpbiB0aGUga2V5LgorICAgIHB1YihjcmF0ZSkgZm4gc2No ZW1hKCZzZWxmKSAtPiBScmRTY2hlbWEgeworICAgICAgICBtYXRjaCBzZWxmIHsKKyAgICAgICAg ICAgIFJyZEtleVR5cGU6Ok5vZGUgeyAuLiB9ID0+IFJyZFNjaGVtYTo6bm9kZShScmRGb3JtYXQ6 OlB2ZTlfMCksCisgICAgICAgICAgICBScmRLZXlUeXBlOjpWbSB7IC4uIH0gPT4gUnJkU2NoZW1h Ojp2bShScmRGb3JtYXQ6OlB2ZTlfMCksCisgICAgICAgICAgICBScmRLZXlUeXBlOjpTdG9yYWdl IHsgLi4gfSA9PiBScmRTY2hlbWE6OnN0b3JhZ2UoUnJkRm9ybWF0OjpQdmU5XzApLAorICAgICAg ICB9CisgICAgfQorfQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVy OjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2Vfbm9kZV9rZXlzKCkgeworICAg ICAgICBsZXQga2V5ID0gUnJkS2V5VHlwZTo6cGFyc2UoInB2ZTItbm9kZS90ZXN0bm9kZSIpLnVu d3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAga2V5LAorICAgICAgICAg ICAgUnJkS2V5VHlwZTo6Tm9kZSB7CisgICAgICAgICAgICAgICAgbm9kZW5hbWU6ICJ0ZXN0bm9k ZSIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAgICAgZm9ybWF0OiBScmRGb3JtYXQ6OlB2ZTIK KyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKworICAgICAgICBsZXQga2V5ID0gUnJkS2V5VHlw ZTo6cGFyc2UoInB2ZS1ub2RlLTkuMC90ZXN0bm9kZSIpLnVud3JhcCgpOworICAgICAgICBhc3Nl cnRfZXEhKAorICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgUnJkS2V5VHlwZTo6Tm9kZSB7 CisgICAgICAgICAgICAgICAgbm9kZW5hbWU6ICJ0ZXN0bm9kZSIudG9fc3RyaW5nKCksCisgICAg ICAgICAgICAgICAgZm9ybWF0OiBScmRGb3JtYXQ6OlB2ZTlfMAorICAgICAgICAgICAgfQorICAg ICAgICApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3BhcnNlX3ZtX2tleXMo KSB7CisgICAgICAgIGxldCBrZXkgPSBScmRLZXlUeXBlOjpwYXJzZSgicHZlMi4zLXZtLzEwMCIp LnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAga2V5LAorICAgICAg ICAgICAgUnJkS2V5VHlwZTo6Vm0geworICAgICAgICAgICAgICAgIHZtaWQ6ICIxMDAiLnRvX3N0 cmluZygpLAorICAgICAgICAgICAgICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmUyCisgICAgICAg ICAgICB9CisgICAgICAgICk7CisKKyAgICAgICAgbGV0IGtleSA9IFJyZEtleVR5cGU6OnBhcnNl KCJwdmUtdm0tOS4wLzEwMCIpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAg ICAgICAga2V5LAorICAgICAgICAgICAgUnJkS2V5VHlwZTo6Vm0geworICAgICAgICAgICAgICAg IHZtaWQ6ICIxMDAiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgICAgIGZvcm1hdDogUnJkRm9y bWF0OjpQdmU5XzAKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAjW3Rl c3RdCisgICAgZm4gdGVzdF9wYXJzZV9zdG9yYWdlX2tleXMoKSB7CisgICAgICAgIGxldCBrZXkg PSBScmRLZXlUeXBlOjpwYXJzZSgicHZlMi1zdG9yYWdlL25vZGUxL2xvY2FsIikudW53cmFwKCk7 CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBrZXksCisgICAgICAgICAgICBScmRL ZXlUeXBlOjpTdG9yYWdlIHsKKyAgICAgICAgICAgICAgICBub2RlbmFtZTogIm5vZGUxIi50b19z dHJpbmcoKSwKKyAgICAgICAgICAgICAgICBzdG9yYWdlOiAibG9jYWwiLnRvX3N0cmluZygpLAor ICAgICAgICAgICAgICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmUyCisgICAgICAgICAgICB9Cisg ICAgICAgICk7CisKKyAgICAgICAgbGV0IGtleSA9IFJyZEtleVR5cGU6OnBhcnNlKCJwdmUtc3Rv cmFnZS05LjAvbm9kZTEvbG9jYWwiKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAg ICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIFJyZEtleVR5cGU6OlN0b3JhZ2UgeworICAgICAg ICAgICAgICAgIG5vZGVuYW1lOiAibm9kZTEiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgICAg IHN0b3JhZ2U6ICJsb2NhbCIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAgICAgZm9ybWF0OiBS cmRGb3JtYXQ6OlB2ZTlfMAorICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0KKworICAg ICNbdGVzdF0KKyAgICBmbiB0ZXN0X2ZpbGVfcGF0aHMoKSB7CisgICAgICAgIGxldCBiYXNlID0g UGF0aDo6bmV3KCIvdmFyL2xpYi9ycmRjYWNoZWQvZGIiKTsKKworICAgICAgICAvLyBOZXcgZm9y bWF0IGtleSDihpIgbmV3IGZvcm1hdCBwYXRoCisgICAgICAgIGxldCBrZXkgPSBScmRLZXlUeXBl OjpOb2RlIHsKKyAgICAgICAgICAgIG5vZGVuYW1lOiAibm9kZTEiLnRvX3N0cmluZygpLAorICAg ICAgICAgICAgZm9ybWF0OiBScmRGb3JtYXQ6OlB2ZTlfMCwKKyAgICAgICAgfTsKKyAgICAgICAg YXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGtleS5maWxlX3BhdGgoYmFzZSksCisgICAgICAgICAg ICBQYXRoQnVmOjpmcm9tKCIvdmFyL2xpYi9ycmRjYWNoZWQvZGIvcHZlLW5vZGUtOS4wL25vZGUx IikKKyAgICAgICAgKTsKKworICAgICAgICAvLyBPbGQgZm9ybWF0IGtleSDihpIgbmV3IGZvcm1h dCBwYXRoIChhdXRvLXVwZ3JhZGUhKQorICAgICAgICBsZXQga2V5ID0gUnJkS2V5VHlwZTo6Tm9k ZSB7CisgICAgICAgICAgICBub2RlbmFtZTogIm5vZGUxIi50b19zdHJpbmcoKSwKKyAgICAgICAg ICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmUyLAorICAgICAgICB9OworICAgICAgICBhc3NlcnRf ZXEhKAorICAgICAgICAgICAga2V5LmZpbGVfcGF0aChiYXNlKSwKKyAgICAgICAgICAgIFBhdGhC dWY6OmZyb20oIi92YXIvbGliL3JyZGNhY2hlZC9kYi9wdmUtbm9kZS05LjAvbm9kZTEiKSwKKyAg ICAgICAgICAgICJPbGQgZm9ybWF0IGtleXMgc2hvdWxkIGNyZWF0ZSBuZXcgZm9ybWF0IGZpbGVz IgorICAgICAgICApOworCisgICAgICAgIC8vIFZNOiBPbGQgZm9ybWF0IOKGkiBuZXcgZm9ybWF0 CisgICAgICAgIGxldCBrZXkgPSBScmRLZXlUeXBlOjpWbSB7CisgICAgICAgICAgICB2bWlkOiAi MTAwIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmUyLAor ICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAga2V5LmZpbGVfcGF0 aChiYXNlKSwKKyAgICAgICAgICAgIFBhdGhCdWY6OmZyb20oIi92YXIvbGliL3JyZGNhY2hlZC9k Yi9wdmUtdm0tOS4wLzEwMCIpLAorICAgICAgICAgICAgIk9sZCBWTSBmb3JtYXQgc2hvdWxkIHVw Z3JhZGUgdG8gbmV3IGZvcm1hdCIKKyAgICAgICAgKTsKKworICAgICAgICAvLyBTdG9yYWdlOiBB bHdheXMgdXNlcyBjdXJyZW50IGZvcm1hdAorICAgICAgICBsZXQga2V5ID0gUnJkS2V5VHlwZTo6 U3RvcmFnZSB7CisgICAgICAgICAgICBub2RlbmFtZTogIm5vZGUxIi50b19zdHJpbmcoKSwKKyAg ICAgICAgICAgIHN0b3JhZ2U6ICJsb2NhbCIudG9fc3RyaW5nKCksCisgICAgICAgICAgICBmb3Jt YXQ6IFJyZEZvcm1hdDo6UHZlMiwKKyAgICAgICAgfTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAg ICAgICAgICAgIGtleS5maWxlX3BhdGgoYmFzZSksCisgICAgICAgICAgICBQYXRoQnVmOjpmcm9t KCIvdmFyL2xpYi9ycmRjYWNoZWQvZGIvcHZlLXN0b3JhZ2UtOS4wL25vZGUxL2xvY2FsIiksCisg ICAgICAgICAgICAiT2xkIHN0b3JhZ2UgZm9ybWF0IHNob3VsZCB1cGdyYWRlIHRvIG5ldyBmb3Jt YXQiCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc291cmNl X2Zvcm1hdCgpIHsKKyAgICAgICAgbGV0IGtleSA9IFJyZEtleVR5cGU6Ok5vZGUgeworICAgICAg ICAgICAgbm9kZW5hbWU6ICJub2RlMSIudG9fc3RyaW5nKCksCisgICAgICAgICAgICBmb3JtYXQ6 IFJyZEZvcm1hdDo6UHZlMiwKKyAgICAgICAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShrZXkuc291 cmNlX2Zvcm1hdCgpLCBScmRGb3JtYXQ6OlB2ZTIpOworCisgICAgICAgIGxldCBrZXkgPSBScmRL ZXlUeXBlOjpWbSB7CisgICAgICAgICAgICB2bWlkOiAiMTAwIi50b19zdHJpbmcoKSwKKyAgICAg ICAgICAgIGZvcm1hdDogUnJkRm9ybWF0OjpQdmU5XzAsCisgICAgICAgIH07CisgICAgICAgIGFz c2VydF9lcSEoa2V5LnNvdXJjZV9mb3JtYXQoKSwgUnJkRm9ybWF0OjpQdmU5XzApOworICAgIH0K KworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NjaGVtYV9hbHdheXNfY3VycmVudF9mb3JtYXQo KSB7CisgICAgICAgIC8vIEV2ZW4gd2l0aCBQdmUyIHNvdXJjZSBmb3JtYXQsIHNjaGVtYSBzaG91 bGQgcmV0dXJuIFB2ZTlfMAorICAgICAgICBsZXQga2V5ID0gUnJkS2V5VHlwZTo6Tm9kZSB7Cisg ICAgICAgICAgICBub2RlbmFtZTogIm5vZGUxIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIGZv cm1hdDogUnJkRm9ybWF0OjpQdmUyLAorICAgICAgICB9OworICAgICAgICBsZXQgc2NoZW1hID0g a2V5LnNjaGVtYSgpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgc2NoZW1hLmZv cm1hdCwKKyAgICAgICAgICAgIFJyZEZvcm1hdDo6UHZlOV8wLAorICAgICAgICAgICAgIlNjaGVt YSBzaG91bGQgYWx3YXlzIHVzZSBjdXJyZW50IGZvcm1hdCIKKyAgICAgICAgKTsKKyAgICAgICAg YXNzZXJ0X2VxIShzY2hlbWEuY29sdW1uX2NvdW50KCksIDE5LCAiU2hvdWxkIGhhdmUgUHZlOV8w IGNvbHVtbiBjb3VudCIpOworCisgICAgICAgIC8vIFB2ZTlfMCBzb3VyY2UgYWxzbyBnZXRzIFB2 ZTlfMCBzY2hlbWEKKyAgICAgICAgbGV0IGtleSA9IFJyZEtleVR5cGU6Ok5vZGUgeworICAgICAg ICAgICAgbm9kZW5hbWU6ICJub2RlMSIudG9fc3RyaW5nKCksCisgICAgICAgICAgICBmb3JtYXQ6 IFJyZEZvcm1hdDo6UHZlOV8wLAorICAgICAgICB9OworICAgICAgICBsZXQgc2NoZW1hID0ga2V5 LnNjaGVtYSgpOworICAgICAgICBhc3NlcnRfZXEhKHNjaGVtYS5mb3JtYXQsIFJyZEZvcm1hdDo6 UHZlOV8wKTsKKyAgICAgICAgYXNzZXJ0X2VxIShzY2hlbWEuY29sdW1uX2NvdW50KCksIDE5KTsK KyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL2xpYi5y cyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvbGliLnJzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwLi43YTQzOTY3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wbXhj ZnMtcnMvcG14Y2ZzLXJyZC9zcmMvbGliLnJzCkBAIC0wLDAgKzEsMjEgQEAKKy8vLyBSUkQgKFJv dW5kLVJvYmluIERhdGFiYXNlKSBQZXJzaXN0ZW5jZSBNb2R1bGUKKy8vLworLy8vIFRoaXMgbW9k dWxlIHByb3ZpZGVzIFJSRCBmaWxlIHBlcnNpc3RlbmNlIGNvbXBhdGlibGUgd2l0aCB0aGUgQyBw bXhjZnMgaW1wbGVtZW50YXRpb24uCisvLy8gSXQgaGFuZGxlczoKKy8vLyAtIFJSRCBmaWxlIGNy ZWF0aW9uIHdpdGggcHJvcGVyIHNjaGVtYXMgKG5vZGUsIFZNLCBzdG9yYWdlKQorLy8vIC0gUlJE IGZpbGUgdXBkYXRlcyAod3JpdGluZyBtZXRyaWNzIHRvIGRpc2spCisvLy8gLSBNdWx0aXBsZSBi YWNrZW5kIHN0cmF0ZWdpZXM6CisvLy8gICAtIERhZW1vbiBtb2RlOiBIaWdoLXBlcmZvcm1hbmNl IGJhdGNoZWQgdXBkYXRlcyB2aWEgcnJkY2FjaGVkCisvLy8gICAtIERpcmVjdCBtb2RlOiBSZWxp YWJsZSBmYWxsYmFjayB1c2luZyBkaXJlY3QgZmlsZSB3cml0ZXMKKy8vLyAgIC0gRmFsbGJhY2sg bW9kZTogVHJpZXMgZGFlbW9uIGZpcnN0LCBmYWxscyBiYWNrIHRvIGRpcmVjdCAobWF0Y2hlcyBD IGJlaGF2aW9yKQorLy8vIC0gVmVyc2lvbiBtYW5hZ2VtZW50IChwdmUyIHZzIHB2ZS05LjAgZm9y bWF0cykKKy8vLworLy8vIFRoZSBpbXBsZW1lbnRhdGlvbiBtYXRjaGVzIHRoZSBDIGJlaGF2aW9y IGluIHN0YXR1cy5jIHdoZXJlIGl0IGF0dGVtcHRzCisvLy8gZGFlbW9uIHVwZGF0ZXMgZmlyc3Qs IHRoZW4gZmFsbHMgYmFjayB0byBkaXJlY3QgZmlsZSBvcGVyYXRpb25zLgorbW9kIGJhY2tlbmQ7 Cittb2QgZGFlbW9uOworbW9kIGtleV90eXBlOworcHViKGNyYXRlKSBtb2Qgc2NoZW1hOworbW9k IHdyaXRlcjsKKworcHViIHVzZSB3cml0ZXI6OlJyZFdyaXRlcjsKZGlmZiAtLWdpdCBhL3NyYy9w bXhjZnMtcnMvcG14Y2ZzLXJyZC9zcmMvc2NoZW1hLnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMt cnJkL3NyYy9zY2hlbWEucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmQ0 NDliZDZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJkL3NyYy9z Y2hlbWEucnMKQEAgLTAsMCArMSw1NzcgQEAKKy8vLyBSUkQgU2NoZW1hIERlZmluaXRpb25zCisv Ly8KKy8vLyBEZWZpbmVzIFJSRCBkYXRhYmFzZSBzY2hlbWFzIG1hdGNoaW5nIHRoZSBDIHBteGNm cyBpbXBsZW1lbnRhdGlvbi4KKy8vLyBFYWNoIHNjaGVtYSBzcGVjaWZpZXMgZGF0YSBzb3VyY2Vz IChEUykgYW5kIHJvdW5kLXJvYmluIGFyY2hpdmVzIChSUkEpLgordXNlIHN0ZDo6Zm10OworCisv Ly8gUlJEIGZvcm1hdCB2ZXJzaW9uCisjW2Rlcml2ZShEZWJ1ZywgQ2xvbmUsIENvcHksIFBhcnRp YWxFcSwgRXEpXQorcHViIGVudW0gUnJkRm9ybWF0IHsKKyAgICAvLy8gTGVnYWN5IHB2ZTIgZm9y bWF0ICgxMiBjb2x1bW5zIGZvciBub2RlLCAxMCBmb3IgVk0sIDIgZm9yIHN0b3JhZ2UpCisgICAg UHZlMiwKKyAgICAvLy8gTmV3IHB2ZS05LjAgZm9ybWF0ICgxOSBjb2x1bW5zIGZvciBub2RlLCAx NyBmb3IgVk0sIDIgZm9yIHN0b3JhZ2UpCisgICAgUHZlOV8wLAorfQorCisvLy8gUlJEIGRhdGEg c291cmNlIGRlZmluaXRpb24KKyNbZGVyaXZlKERlYnVnLCBDbG9uZSldCitwdWIgc3RydWN0IFJy ZERhdGFTb3VyY2UgeworICAgIC8vLyBEYXRhIHNvdXJjZSBuYW1lCisgICAgcHViIG5hbWU6ICYn c3RhdGljIHN0ciwKKyAgICAvLy8gRGF0YSBzb3VyY2UgdHlwZSAoR0FVR0UsIENPVU5URVIsIERF UklWRSwgQUJTT0xVVEUpCisgICAgcHViIGRzX3R5cGU6ICYnc3RhdGljIHN0ciwKKyAgICAvLy8g SGVhcnRiZWF0IChzZWNvbmRzIGJlZm9yZSBtYXJraW5nIGFzIHVua25vd24pCisgICAgcHViIGhl YXJ0YmVhdDogdTMyLAorICAgIC8vLyBNaW5pbXVtIHZhbHVlIChVIGZvciB1bmtub3duKQorICAg IHB1YiBtaW46ICYnc3RhdGljIHN0ciwKKyAgICAvLy8gTWF4aW11bSB2YWx1ZSAoVSBmb3IgdW5r bm93bikKKyAgICBwdWIgbWF4OiAmJ3N0YXRpYyBzdHIsCit9CisKK2ltcGwgUnJkRGF0YVNvdXJj ZSB7CisgICAgLy8vIENyZWF0ZSBHQVVHRSBkYXRhIHNvdXJjZSB3aXRoIG5vIG1pbi9tYXggbGlt aXRzCisgICAgcHViKHN1cGVyKSBjb25zdCBmbiBnYXVnZShuYW1lOiAmJ3N0YXRpYyBzdHIpIC0+ IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICBk c190eXBlOiAiR0FVR0UiLAorICAgICAgICAgICAgaGVhcnRiZWF0OiAxMjAsCisgICAgICAgICAg ICBtaW46ICIwIiwKKyAgICAgICAgICAgIG1heDogIlUiLAorICAgICAgICB9CisgICAgfQorCisg ICAgLy8vIENyZWF0ZSBERVJJVkUgZGF0YSBzb3VyY2UgKGZvciBjb3VudGVycyB0aGF0IGNhbiB3 cmFwKQorICAgIHB1YihzdXBlcikgY29uc3QgZm4gZGVyaXZlKG5hbWU6ICYnc3RhdGljIHN0cikg LT4gU2VsZiB7CisgICAgICAgIFNlbGYgeworICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAg IGRzX3R5cGU6ICJERVJJVkUiLAorICAgICAgICAgICAgaGVhcnRiZWF0OiAxMjAsCisgICAgICAg ICAgICBtaW46ICIwIiwKKyAgICAgICAgICAgIG1heDogIlUiLAorICAgICAgICB9CisgICAgfQor CisgICAgLy8vIEZvcm1hdCBhcyBSUkQgY29tbWFuZCBsaW5lIGFyZ3VtZW50CisgICAgLy8vCisg ICAgLy8vIE1hdGNoZXMgQyBpbXBsZW1lbnRhdGlvbiBmb3JtYXQ6ICJEUzpuYW1lOlRZUEU6aGVh cnRiZWF0Om1pbjptYXgiCisgICAgLy8vIChzZWUgcnJkX2RlZl9ub2RlIGluIHNyYy9wbXhjZnMv c3RhdHVzLmM6MTEwMCkKKyAgICAvLy8KKyAgICAvLy8gQ3VycmVudGx5IHVudXNlZCBidXQga2Vw dCBmb3IgZGVidWdnaW5nL3Rlc3RpbmcgYW5kIEMgZm9ybWF0IGNvbXBhdGliaWxpdHkuCisgICAg I1thbGxvdyhkZWFkX2NvZGUpXQorICAgIHB1YihzdXBlcikgZm4gdG9fYXJnKCZzZWxmKSAtPiBT dHJpbmcgeworICAgICAgICBmb3JtYXQhKAorICAgICAgICAgICAgIkRTOnt9Ont9Ont9Ont9Ont9 IiwKKyAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5kc190eXBlLCBzZWxmLmhlYXJ0YmVhdCwg c2VsZi5taW4sIHNlbGYubWF4CisgICAgICAgICkKKyAgICB9Cit9CisKKy8vLyBSUkQgc2NoZW1h IHdpdGggZGF0YSBzb3VyY2VzIGFuZCBhcmNoaXZlcworI1tkZXJpdmUoRGVidWcsIENsb25lKV0K K3B1YiBzdHJ1Y3QgUnJkU2NoZW1hIHsKKyAgICAvLy8gUlJEIGZvcm1hdCB2ZXJzaW9uCisgICAg cHViIGZvcm1hdDogUnJkRm9ybWF0LAorICAgIC8vLyBEYXRhIHNvdXJjZXMKKyAgICBwdWIgZGF0 YV9zb3VyY2VzOiBWZWM8UnJkRGF0YVNvdXJjZT4sCisgICAgLy8vIFJvdW5kLXJvYmluIGFyY2hp dmVzIChSUkEgZGVmaW5pdGlvbnMpCisgICAgcHViIGFyY2hpdmVzOiBWZWM8U3RyaW5nPiwKK30K KworaW1wbCBScmRTY2hlbWEgeworICAgIC8vLyBDcmVhdGUgbm9kZSBSUkQgc2NoZW1hCisgICAg cHViIGZuIG5vZGUoZm9ybWF0OiBScmRGb3JtYXQpIC0+IFNlbGYgeworICAgICAgICBsZXQgZGF0 YV9zb3VyY2VzID0gbWF0Y2ggZm9ybWF0IHsKKyAgICAgICAgICAgIFJyZEZvcm1hdDo6UHZlMiA9 PiB2ZWMhWworICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJsb2FkYXZnIiks CisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoIm1heGNwdSIpLAorICAgICAg ICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJjcHUiKSwKKyAgICAgICAgICAgICAgICBS cmREYXRhU291cmNlOjpnYXVnZSgiaW93YWl0IiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNv dXJjZTo6Z2F1Z2UoIm1lbXRvdGFsIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6 Z2F1Z2UoIm1lbXVzZWQiKSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgi c3dhcHRvdGFsIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoInN3YXB1 c2VkIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoInJvb3R0b3RhbCIp LAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJyb290dXNlZCIpLAorICAg ICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmRlcml2ZSgibmV0aW4iKSwKKyAgICAgICAgICAg ICAgICBScmREYXRhU291cmNlOjpkZXJpdmUoIm5ldG91dCIpLAorICAgICAgICAgICAgXSwKKyAg ICAgICAgICAgIFJyZEZvcm1hdDo6UHZlOV8wID0+IHZlYyFbCisgICAgICAgICAgICAgICAgUnJk RGF0YVNvdXJjZTo6Z2F1Z2UoImxvYWRhdmciKSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291 cmNlOjpnYXVnZSgibWF4Y3B1IiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1 Z2UoImNwdSIpLAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJpb3dhaXQi KSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgibWVtdG90YWwiKSwKKyAg ICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgibWVtdXNlZCIpLAorICAgICAgICAg ICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJzd2FwdG90YWwiKSwKKyAgICAgICAgICAgICAg ICBScmREYXRhU291cmNlOjpnYXVnZSgic3dhcHVzZWQiKSwKKyAgICAgICAgICAgICAgICBScmRE YXRhU291cmNlOjpnYXVnZSgicm9vdHRvdGFsIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNv dXJjZTo6Z2F1Z2UoInJvb3R1c2VkIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6 ZGVyaXZlKCJuZXRpbiIpLAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmRlcml2ZSgi bmV0b3V0IiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoIm1lbWF2YWls YWJsZSIpLAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJhcmNzaXplIiks CisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoInByZXNzdXJlY3B1c29tZSIp LAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJwcmVzc3VyZWlvc29tZSIp LAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJwcmVzc3VyZWlvZnVsbCIp LAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJwcmVzc3VyZW1lbW9yeXNv bWUiKSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgicHJlc3N1cmVtZW1v cnlmdWxsIiksCisgICAgICAgICAgICBdLAorICAgICAgICB9OworCisgICAgICAgIFNlbGYgewor ICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgZGF0YV9zb3VyY2VzLAorICAgICAgICAg ICAgYXJjaGl2ZXM6IFNlbGY6OmRlZmF1bHRfYXJjaGl2ZXMoKSwKKyAgICAgICAgfQorICAgIH0K KworICAgIC8vLyBDcmVhdGUgVk0gUlJEIHNjaGVtYQorICAgIHB1YiBmbiB2bShmb3JtYXQ6IFJy ZEZvcm1hdCkgLT4gU2VsZiB7CisgICAgICAgIGxldCBkYXRhX3NvdXJjZXMgPSBtYXRjaCBmb3Jt YXQgeworICAgICAgICAgICAgUnJkRm9ybWF0OjpQdmUyID0+IHZlYyFbCisgICAgICAgICAgICAg ICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoIm1heGNwdSIpLAorICAgICAgICAgICAgICAgIFJyZERh dGFTb3VyY2U6OmdhdWdlKCJjcHUiKSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpn YXVnZSgibWF4bWVtIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoIm1l bSIpLAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJtYXhkaXNrIiksCisg ICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoImRpc2siKSwKKyAgICAgICAgICAg ICAgICBScmREYXRhU291cmNlOjpkZXJpdmUoIm5ldGluIiksCisgICAgICAgICAgICAgICAgUnJk RGF0YVNvdXJjZTo6ZGVyaXZlKCJuZXRvdXQiKSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291 cmNlOjpkZXJpdmUoImRpc2tyZWFkIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6 ZGVyaXZlKCJkaXNrd3JpdGUiKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBScmRGb3Jt YXQ6OlB2ZTlfMCA9PiB2ZWMhWworICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdl KCJtYXhjcHUiKSwKKyAgICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgiY3B1Iiks CisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoIm1heG1lbSIpLAorICAgICAg ICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJtZW0iKSwKKyAgICAgICAgICAgICAgICBS cmREYXRhU291cmNlOjpnYXVnZSgibWF4ZGlzayIpLAorICAgICAgICAgICAgICAgIFJyZERhdGFT b3VyY2U6OmdhdWdlKCJkaXNrIiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6ZGVy aXZlKCJuZXRpbiIpLAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmRlcml2ZSgibmV0 b3V0IiksCisgICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6ZGVyaXZlKCJkaXNrcmVhZCIp LAorICAgICAgICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmRlcml2ZSgiZGlza3dyaXRlIiksCisg ICAgICAgICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoIm1lbWhvc3QiKSwKKyAgICAgICAg ICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgicHJlc3N1cmVjcHVzb21lIiksCisgICAgICAg ICAgICAgICAgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoInByZXNzdXJlY3B1ZnVsbCIpLAorICAgICAg ICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJwcmVzc3VyZWlvc29tZSIpLAorICAgICAg ICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJwcmVzc3VyZWlvZnVsbCIpLAorICAgICAg ICAgICAgICAgIFJyZERhdGFTb3VyY2U6OmdhdWdlKCJwcmVzc3VyZW1lbW9yeXNvbWUiKSwKKyAg ICAgICAgICAgICAgICBScmREYXRhU291cmNlOjpnYXVnZSgicHJlc3N1cmVtZW1vcnlmdWxsIiks CisgICAgICAgICAgICBdLAorICAgICAgICB9OworCisgICAgICAgIFNlbGYgeworICAgICAgICAg ICAgZm9ybWF0LAorICAgICAgICAgICAgZGF0YV9zb3VyY2VzLAorICAgICAgICAgICAgYXJjaGl2 ZXM6IFNlbGY6OmRlZmF1bHRfYXJjaGl2ZXMoKSwKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v LyBDcmVhdGUgc3RvcmFnZSBSUkQgc2NoZW1hCisgICAgcHViIGZuIHN0b3JhZ2UoZm9ybWF0OiBS cmRGb3JtYXQpIC0+IFNlbGYgeworICAgICAgICBsZXQgZGF0YV9zb3VyY2VzID0gdmVjIVtScmRE YXRhU291cmNlOjpnYXVnZSgidG90YWwiKSwgUnJkRGF0YVNvdXJjZTo6Z2F1Z2UoInVzZWQiKV07 CisKKyAgICAgICAgU2VsZiB7CisgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICBkYXRh X3NvdXJjZXMsCisgICAgICAgICAgICBhcmNoaXZlczogU2VsZjo6ZGVmYXVsdF9hcmNoaXZlcygp LAorICAgICAgICB9CisgICAgfQorCisgICAgLy8vIERlZmF1bHQgUlJBIChSb3VuZC1Sb2JpbiBB cmNoaXZlKSBkZWZpbml0aW9ucworICAgIC8vLworICAgIC8vLyBUaGVzZSBtYXRjaCB0aGUgQyBp bXBsZW1lbnRhdGlvbidzIGFyY2hpdmVzIGZvciA2MC1zZWNvbmQgc3RlcCBzaXplOgorICAgIC8v LyAtIFJSQTpBVkVSQUdFOjAuNToxOjE0NDAgICAgICAtPiAxIG1pbiAqIDE0NDAgPT4gMSBkYXkK KyAgICAvLy8gLSBSUkE6QVZFUkFHRTowLjU6MzA6MTQ0MCAgICAgLT4gMzAgbWluICogMTQ0MCA9 PiAzMCBkYXlzCisgICAgLy8vIC0gUlJBOkFWRVJBR0U6MC41OjM2MDoxNDQwICAgIC0+IDYgaG91 cnMgKiAxNDQwID0+IDM2MCBkYXlzICh+MSB5ZWFyKQorICAgIC8vLyAtIFJSQTpBVkVSQUdFOjAu NToxMDA4MDo1NzAgICAtPiAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCisgICAgLy8vIC0gUlJB Ok1BWDowLjU6MToxNDQwICAgICAgICAgIC0+IDEgbWluICogMTQ0MCA9PiAxIGRheQorICAgIC8v LyAtIFJSQTpNQVg6MC41OjMwOjE0NDAgICAgICAgICAtPiAzMCBtaW4gKiAxNDQwID0+IDMwIGRh eXMKKyAgICAvLy8gLSBSUkE6TUFYOjAuNTozNjA6MTQ0MCAgICAgICAgLT4gNiBob3VycyAqIDE0 NDAgPT4gMzYwIGRheXMgKH4xIHllYXIpCisgICAgLy8vIC0gUlJBOk1BWDowLjU6MTAwODA6NTcw ICAgICAgIC0+IDEgd2VlayAqIDU3MCA9PiB+MTAgeWVhcnMKKyAgICBwdWIoc3VwZXIpIGZuIGRl ZmF1bHRfYXJjaGl2ZXMoKSAtPiBWZWM8U3RyaW5nPiB7CisgICAgICAgIHZlYyFbCisgICAgICAg ICAgICAiUlJBOkFWRVJBR0U6MC41OjE6MTQ0MCIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAi UlJBOkFWRVJBR0U6MC41OjMwOjE0NDAiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgIlJSQTpB VkVSQUdFOjAuNTozNjA6MTQ0MCIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAiUlJBOkFWRVJB R0U6MC41OjEwMDgwOjU3MCIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAiUlJBOk1BWDowLjU6 MToxNDQwIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICJSUkE6TUFYOjAuNTozMDoxNDQwIi50 b19zdHJpbmcoKSwKKyAgICAgICAgICAgICJSUkE6TUFYOjAuNTozNjA6MTQ0MCIudG9fc3RyaW5n KCksCisgICAgICAgICAgICAiUlJBOk1BWDowLjU6MTAwODA6NTcwIi50b19zdHJpbmcoKSwKKyAg ICAgICAgXQorICAgIH0KKworICAgIC8vLyBHZXQgbnVtYmVyIG9mIGRhdGEgc291cmNlcworICAg IHB1YiBmbiBjb2x1bW5fY291bnQoJnNlbGYpIC0+IHVzaXplIHsKKyAgICAgICAgc2VsZi5kYXRh X3NvdXJjZXMubGVuKCkKKyAgICB9Cit9CisKK2ltcGwgZm10OjpEaXNwbGF5IGZvciBScmRTY2hl bWEgeworICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBmbXQ6OkZvcm1hdHRlcjwnXz4pIC0+IGZt dDo6UmVzdWx0IHsKKyAgICAgICAgd3JpdGUhKAorICAgICAgICAgICAgZiwKKyAgICAgICAgICAg ICJ7Oj99IHNjaGVtYSB3aXRoIHt9IGRhdGEgc291cmNlcyIsCisgICAgICAgICAgICBzZWxmLmZv cm1hdCwKKyAgICAgICAgICAgIHNlbGYuY29sdW1uX2NvdW50KCkKKyAgICAgICAgKQorICAgIH0K K30KKworI1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVzZSBzdXBlcjo6KjsKKworICAg IGZuIGFzc2VydF9kc19wcm9wZXJ0aWVzKAorICAgICAgICBkczogJlJyZERhdGFTb3VyY2UsCisg ICAgICAgIGV4cGVjdGVkX25hbWU6ICZzdHIsCisgICAgICAgIGV4cGVjdGVkX3R5cGU6ICZzdHIs CisgICAgICAgIGluZGV4OiB1c2l6ZSwKKyAgICApIHsKKyAgICAgICAgYXNzZXJ0X2VxIShkcy5u YW1lLCBleHBlY3RlZF9uYW1lLCAiRFNbe31dIG5hbWUgbWlzbWF0Y2giLCBpbmRleCk7CisgICAg ICAgIGFzc2VydF9lcSEoZHMuZHNfdHlwZSwgZXhwZWN0ZWRfdHlwZSwgIkRTW3t9XSB0eXBlIG1p c21hdGNoIiwgaW5kZXgpOworICAgICAgICBhc3NlcnRfZXEhKGRzLmhlYXJ0YmVhdCwgMTIwLCAi RFNbe31dIGhlYXJ0YmVhdCBzaG91bGQgYmUgMTIwIiwgaW5kZXgpOworICAgICAgICBhc3NlcnRf ZXEhKGRzLm1pbiwgIjAiLCAiRFNbe31dIG1pbiBzaG91bGQgYmUgMCIsIGluZGV4KTsKKyAgICAg ICAgYXNzZXJ0X2VxIShkcy5tYXgsICJVIiwgIkRTW3t9XSBtYXggc2hvdWxkIGJlIFUiLCBpbmRl eCk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfZGF0YXNvdXJjZV9jb25zdHJ1 Y3Rpb24oKSB7CisgICAgICAgIGxldCBnYXVnZV9kcyA9IFJyZERhdGFTb3VyY2U6OmdhdWdlKCJj cHUiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnYXVnZV9kcy5uYW1lLCAiY3B1Iik7CisgICAgICAg IGFzc2VydF9lcSEoZ2F1Z2VfZHMuZHNfdHlwZSwgIkdBVUdFIik7CisgICAgICAgIGFzc2VydF9l cSEoZ2F1Z2VfZHMuaGVhcnRiZWF0LCAxMjApOworICAgICAgICBhc3NlcnRfZXEhKGdhdWdlX2Rz Lm1pbiwgIjAiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnYXVnZV9kcy5tYXgsICJVIik7CisgICAg ICAgIGFzc2VydF9lcSEoZ2F1Z2VfZHMudG9fYXJnKCksICJEUzpjcHU6R0FVR0U6MTIwOjA6VSIp OworCisgICAgICAgIGxldCBkZXJpdmVfZHMgPSBScmREYXRhU291cmNlOjpkZXJpdmUoIm5ldGlu Iik7CisgICAgICAgIGFzc2VydF9lcSEoZGVyaXZlX2RzLm5hbWUsICJuZXRpbiIpOworICAgICAg ICBhc3NlcnRfZXEhKGRlcml2ZV9kcy5kc190eXBlLCAiREVSSVZFIik7CisgICAgICAgIGFzc2Vy dF9lcSEoZGVyaXZlX2RzLmhlYXJ0YmVhdCwgMTIwKTsKKyAgICAgICAgYXNzZXJ0X2VxIShkZXJp dmVfZHMubWluLCAiMCIpOworICAgICAgICBhc3NlcnRfZXEhKGRlcml2ZV9kcy5tYXgsICJVIik7 CisgICAgICAgIGFzc2VydF9lcSEoZGVyaXZlX2RzLnRvX2FyZygpLCAiRFM6bmV0aW46REVSSVZF OjEyMDowOlUiKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9ub2RlX3NjaGVt YV9wdmUyKCkgeworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjpub2RlKFJyZEZvcm1h dDo6UHZlMik7CisKKyAgICAgICAgYXNzZXJ0X2VxIShzY2hlbWEuY29sdW1uX2NvdW50KCksIDEy KTsKKyAgICAgICAgYXNzZXJ0X2VxIShzY2hlbWEuZm9ybWF0LCBScmRGb3JtYXQ6OlB2ZTIpOwor CisgICAgICAgIGxldCBleHBlY3RlZF9kcyA9IHZlYyFbCisgICAgICAgICAgICAoImxvYWRhdmci LCAiR0FVR0UiKSwKKyAgICAgICAgICAgICgibWF4Y3B1IiwgIkdBVUdFIiksCisgICAgICAgICAg ICAoImNwdSIsICJHQVVHRSIpLAorICAgICAgICAgICAgKCJpb3dhaXQiLCAiR0FVR0UiKSwKKyAg ICAgICAgICAgICgibWVtdG90YWwiLCAiR0FVR0UiKSwKKyAgICAgICAgICAgICgibWVtdXNlZCIs ICJHQVVHRSIpLAorICAgICAgICAgICAgKCJzd2FwdG90YWwiLCAiR0FVR0UiKSwKKyAgICAgICAg ICAgICgic3dhcHVzZWQiLCAiR0FVR0UiKSwKKyAgICAgICAgICAgICgicm9vdHRvdGFsIiwgIkdB VUdFIiksCisgICAgICAgICAgICAoInJvb3R1c2VkIiwgIkdBVUdFIiksCisgICAgICAgICAgICAo Im5ldGluIiwgIkRFUklWRSIpLAorICAgICAgICAgICAgKCJuZXRvdXQiLCAiREVSSVZFIiksCisg ICAgICAgIF07CisKKyAgICAgICAgZm9yIChpLCAobmFtZSwgZHNfdHlwZSkpIGluIGV4cGVjdGVk X2RzLml0ZXIoKS5lbnVtZXJhdGUoKSB7CisgICAgICAgICAgICBhc3NlcnRfZHNfcHJvcGVydGll cygmc2NoZW1hLmRhdGFfc291cmNlc1tpXSwgbmFtZSwgZHNfdHlwZSwgaSk7CisgICAgICAgIH0K KyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9ub2RlX3NjaGVtYV9wdmU5KCkgewor ICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjpub2RlKFJyZEZvcm1hdDo6UHZlOV8wKTsK KworICAgICAgICBhc3NlcnRfZXEhKHNjaGVtYS5jb2x1bW5fY291bnQoKSwgMTkpOworICAgICAg ICBhc3NlcnRfZXEhKHNjaGVtYS5mb3JtYXQsIFJyZEZvcm1hdDo6UHZlOV8wKTsKKworICAgICAg ICBsZXQgcHZlMl9zY2hlbWEgPSBScmRTY2hlbWE6Om5vZGUoUnJkRm9ybWF0OjpQdmUyKTsKKyAg ICAgICAgZm9yIGkgaW4gMC4uMTIgeworICAgICAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAg ICAgICAgICBzY2hlbWEuZGF0YV9zb3VyY2VzW2ldLm5hbWUsIHB2ZTJfc2NoZW1hLmRhdGFfc291 cmNlc1tpXS5uYW1lLAorICAgICAgICAgICAgICAgICJGaXJzdCAxMiBEUyBzaG91bGQgbWF0Y2gg cHZlMiIKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAg ICAgICAgIHNjaGVtYS5kYXRhX3NvdXJjZXNbaV0uZHNfdHlwZSwgcHZlMl9zY2hlbWEuZGF0YV9z b3VyY2VzW2ldLmRzX3R5cGUsCisgICAgICAgICAgICAgICAgIkZpcnN0IDEyIERTIHR5cGVzIHNo b3VsZCBtYXRjaCBwdmUyIgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGxl dCBwdmU5X2FkZGl0aW9ucyA9IHZlYyFbCisgICAgICAgICAgICAoIm1lbWF2YWlsYWJsZSIsICJH QVVHRSIpLAorICAgICAgICAgICAgKCJhcmNzaXplIiwgIkdBVUdFIiksCisgICAgICAgICAgICAo InByZXNzdXJlY3B1c29tZSIsICJHQVVHRSIpLAorICAgICAgICAgICAgKCJwcmVzc3VyZWlvc29t ZSIsICJHQVVHRSIpLAorICAgICAgICAgICAgKCJwcmVzc3VyZWlvZnVsbCIsICJHQVVHRSIpLAor ICAgICAgICAgICAgKCJwcmVzc3VyZW1lbW9yeXNvbWUiLCAiR0FVR0UiKSwKKyAgICAgICAgICAg ICgicHJlc3N1cmVtZW1vcnlmdWxsIiwgIkdBVUdFIiksCisgICAgICAgIF07CisKKyAgICAgICAg Zm9yIChpLCAobmFtZSwgZHNfdHlwZSkpIGluIHB2ZTlfYWRkaXRpb25zLml0ZXIoKS5lbnVtZXJh dGUoKSB7CisgICAgICAgICAgICBhc3NlcnRfZHNfcHJvcGVydGllcygmc2NoZW1hLmRhdGFfc291 cmNlc1sxMiArIGldLCBuYW1lLCBkc190eXBlLCAxMiArIGkpOworICAgICAgICB9CisgICAgfQor CisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfdm1fc2NoZW1hX3B2ZTIoKSB7CisgICAgICAgIGxl dCBzY2hlbWEgPSBScmRTY2hlbWE6OnZtKFJyZEZvcm1hdDo6UHZlMik7CisKKyAgICAgICAgYXNz ZXJ0X2VxIShzY2hlbWEuY29sdW1uX2NvdW50KCksIDEwKTsKKyAgICAgICAgYXNzZXJ0X2VxIShz Y2hlbWEuZm9ybWF0LCBScmRGb3JtYXQ6OlB2ZTIpOworCisgICAgICAgIGxldCBleHBlY3RlZF9k cyA9IHZlYyFbCisgICAgICAgICAgICAoIm1heGNwdSIsICJHQVVHRSIpLAorICAgICAgICAgICAg KCJjcHUiLCAiR0FVR0UiKSwKKyAgICAgICAgICAgICgibWF4bWVtIiwgIkdBVUdFIiksCisgICAg ICAgICAgICAoIm1lbSIsICJHQVVHRSIpLAorICAgICAgICAgICAgKCJtYXhkaXNrIiwgIkdBVUdF IiksCisgICAgICAgICAgICAoImRpc2siLCAiR0FVR0UiKSwKKyAgICAgICAgICAgICgibmV0aW4i LCAiREVSSVZFIiksCisgICAgICAgICAgICAoIm5ldG91dCIsICJERVJJVkUiKSwKKyAgICAgICAg ICAgICgiZGlza3JlYWQiLCAiREVSSVZFIiksCisgICAgICAgICAgICAoImRpc2t3cml0ZSIsICJE RVJJVkUiKSwKKyAgICAgICAgXTsKKworICAgICAgICBmb3IgKGksIChuYW1lLCBkc190eXBlKSkg aW4gZXhwZWN0ZWRfZHMuaXRlcigpLmVudW1lcmF0ZSgpIHsKKyAgICAgICAgICAgIGFzc2VydF9k c19wcm9wZXJ0aWVzKCZzY2hlbWEuZGF0YV9zb3VyY2VzW2ldLCBuYW1lLCBkc190eXBlLCBpKTsK KyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3ZtX3NjaGVtYV9w dmU5KCkgeworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjp2bShScmRGb3JtYXQ6OlB2 ZTlfMCk7CisKKyAgICAgICAgYXNzZXJ0X2VxIShzY2hlbWEuY29sdW1uX2NvdW50KCksIDE3KTsK KyAgICAgICAgYXNzZXJ0X2VxIShzY2hlbWEuZm9ybWF0LCBScmRGb3JtYXQ6OlB2ZTlfMCk7CisK KyAgICAgICAgbGV0IHB2ZTJfc2NoZW1hID0gUnJkU2NoZW1hOjp2bShScmRGb3JtYXQ6OlB2ZTIp OworICAgICAgICBmb3IgaSBpbiAwLi4xMCB7CisgICAgICAgICAgICBhc3NlcnRfZXEhKAorICAg ICAgICAgICAgICAgIHNjaGVtYS5kYXRhX3NvdXJjZXNbaV0ubmFtZSwgcHZlMl9zY2hlbWEuZGF0 YV9zb3VyY2VzW2ldLm5hbWUsCisgICAgICAgICAgICAgICAgIkZpcnN0IDEwIERTIHNob3VsZCBt YXRjaCBwdmUyIgorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEoCisgICAg ICAgICAgICAgICAgc2NoZW1hLmRhdGFfc291cmNlc1tpXS5kc190eXBlLCBwdmUyX3NjaGVtYS5k YXRhX3NvdXJjZXNbaV0uZHNfdHlwZSwKKyAgICAgICAgICAgICAgICAiRmlyc3QgMTAgRFMgdHlw ZXMgc2hvdWxkIG1hdGNoIHB2ZTIiCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAg ICAgbGV0IHB2ZTlfYWRkaXRpb25zID0gdmVjIVsKKyAgICAgICAgICAgICgibWVtaG9zdCIsICJH QVVHRSIpLAorICAgICAgICAgICAgKCJwcmVzc3VyZWNwdXNvbWUiLCAiR0FVR0UiKSwKKyAgICAg ICAgICAgICgicHJlc3N1cmVjcHVmdWxsIiwgIkdBVUdFIiksCisgICAgICAgICAgICAoInByZXNz dXJlaW9zb21lIiwgIkdBVUdFIiksCisgICAgICAgICAgICAoInByZXNzdXJlaW9mdWxsIiwgIkdB VUdFIiksCisgICAgICAgICAgICAoInByZXNzdXJlbWVtb3J5c29tZSIsICJHQVVHRSIpLAorICAg ICAgICAgICAgKCJwcmVzc3VyZW1lbW9yeWZ1bGwiLCAiR0FVR0UiKSwKKyAgICAgICAgXTsKKwor ICAgICAgICBmb3IgKGksIChuYW1lLCBkc190eXBlKSkgaW4gcHZlOV9hZGRpdGlvbnMuaXRlcigp LmVudW1lcmF0ZSgpIHsKKyAgICAgICAgICAgIGFzc2VydF9kc19wcm9wZXJ0aWVzKCZzY2hlbWEu ZGF0YV9zb3VyY2VzWzEwICsgaV0sIG5hbWUsIGRzX3R5cGUsIDEwICsgaSk7CisgICAgICAgIH0K KyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zdG9yYWdlX3NjaGVtYSgpIHsKKyAg ICAgICAgZm9yIGZvcm1hdCBpbiBbUnJkRm9ybWF0OjpQdmUyLCBScmRGb3JtYXQ6OlB2ZTlfMF0g eworICAgICAgICAgICAgbGV0IHNjaGVtYSA9IFJyZFNjaGVtYTo6c3RvcmFnZShmb3JtYXQpOwor CisgICAgICAgICAgICBhc3NlcnRfZXEhKHNjaGVtYS5jb2x1bW5fY291bnQoKSwgMik7CisgICAg ICAgICAgICBhc3NlcnRfZXEhKHNjaGVtYS5mb3JtYXQsIGZvcm1hdCk7CisKKyAgICAgICAgICAg IGFzc2VydF9kc19wcm9wZXJ0aWVzKCZzY2hlbWEuZGF0YV9zb3VyY2VzWzBdLCAidG90YWwiLCAi R0FVR0UiLCAwKTsKKyAgICAgICAgICAgIGFzc2VydF9kc19wcm9wZXJ0aWVzKCZzY2hlbWEuZGF0 YV9zb3VyY2VzWzFdLCAidXNlZCIsICJHQVVHRSIsIDEpOworICAgICAgICB9CisgICAgfQorCisg ICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcnJhX2FyY2hpdmVzKCkgeworICAgICAgICBsZXQgZXhw ZWN0ZWRfcnJhcyA9IFsKKyAgICAgICAgICAgICJSUkE6QVZFUkFHRTowLjU6MToxNDQwIiwKKyAg ICAgICAgICAgICJSUkE6QVZFUkFHRTowLjU6MzA6MTQ0MCIsCisgICAgICAgICAgICAiUlJBOkFW RVJBR0U6MC41OjM2MDoxNDQwIiwKKyAgICAgICAgICAgICJSUkE6QVZFUkFHRTowLjU6MTAwODA6 NTcwIiwKKyAgICAgICAgICAgICJSUkE6TUFYOjAuNToxOjE0NDAiLAorICAgICAgICAgICAgIlJS QTpNQVg6MC41OjMwOjE0NDAiLAorICAgICAgICAgICAgIlJSQTpNQVg6MC41OjM2MDoxNDQwIiwK KyAgICAgICAgICAgICJSUkE6TUFYOjAuNToxMDA4MDo1NzAiLAorICAgICAgICBdOworCisgICAg ICAgIGxldCBzY2hlbWFzID0gdmVjIVsKKyAgICAgICAgICAgIFJyZFNjaGVtYTo6bm9kZShScmRG b3JtYXQ6OlB2ZTIpLAorICAgICAgICAgICAgUnJkU2NoZW1hOjpub2RlKFJyZEZvcm1hdDo6UHZl OV8wKSwKKyAgICAgICAgICAgIFJyZFNjaGVtYTo6dm0oUnJkRm9ybWF0OjpQdmUyKSwKKyAgICAg ICAgICAgIFJyZFNjaGVtYTo6dm0oUnJkRm9ybWF0OjpQdmU5XzApLAorICAgICAgICAgICAgUnJk U2NoZW1hOjpzdG9yYWdlKFJyZEZvcm1hdDo6UHZlMiksCisgICAgICAgICAgICBScmRTY2hlbWE6 OnN0b3JhZ2UoUnJkRm9ybWF0OjpQdmU5XzApLAorICAgICAgICBdOworCisgICAgICAgIGZvciBz Y2hlbWEgaW4gc2NoZW1hcyB7CisgICAgICAgICAgICBhc3NlcnRfZXEhKHNjaGVtYS5hcmNoaXZl cy5sZW4oKSwgOCk7CisKKyAgICAgICAgICAgIGZvciAoaSwgZXhwZWN0ZWQpIGluIGV4cGVjdGVk X3JyYXMuaXRlcigpLmVudW1lcmF0ZSgpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKAor ICAgICAgICAgICAgICAgICAgICAmc2NoZW1hLmFyY2hpdmVzW2ldLCBleHBlY3RlZCwKKyAgICAg ICAgICAgICAgICAgICAgIlJSQVt7fV0gbWlzbWF0Y2ggaW4gezo/fSIsCisgICAgICAgICAgICAg ICAgICAgIGksIHNjaGVtYS5mb3JtYXQKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfaGVhcnRiZWF0 X2NvbnNpc3RlbmN5KCkgeworICAgICAgICBsZXQgc2NoZW1hcyA9IHZlYyFbCisgICAgICAgICAg ICBScmRTY2hlbWE6Om5vZGUoUnJkRm9ybWF0OjpQdmUyKSwKKyAgICAgICAgICAgIFJyZFNjaGVt YTo6bm9kZShScmRGb3JtYXQ6OlB2ZTlfMCksCisgICAgICAgICAgICBScmRTY2hlbWE6OnZtKFJy ZEZvcm1hdDo6UHZlMiksCisgICAgICAgICAgICBScmRTY2hlbWE6OnZtKFJyZEZvcm1hdDo6UHZl OV8wKSwKKyAgICAgICAgICAgIFJyZFNjaGVtYTo6c3RvcmFnZShScmRGb3JtYXQ6OlB2ZTIpLAor ICAgICAgICAgICAgUnJkU2NoZW1hOjpzdG9yYWdlKFJyZEZvcm1hdDo6UHZlOV8wKSwKKyAgICAg ICAgXTsKKworICAgICAgICBmb3Igc2NoZW1hIGluIHNjaGVtYXMgeworICAgICAgICAgICAgZm9y IGRzIGluICZzY2hlbWEuZGF0YV9zb3VyY2VzIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEh KGRzLmhlYXJ0YmVhdCwgMTIwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGRzLm1pbiwg IjAiKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGRzLm1heCwgIlUiKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2dhdWdl X3ZzX2Rlcml2ZV9jb3JyZWN0bmVzcygpIHsKKyAgICAgICAgLy8gR0FVR0U6IGluc3RhbnRhbmVv dXMgdmFsdWVzIChDUFUlLCBtZW1vcnkgYnl0ZXMpCisgICAgICAgIC8vIERFUklWRTogY3VtdWxh dGl2ZSBjb3VudGVycyB0aGF0IGNhbiB3cmFwIChuZXR3b3JrL2Rpc2sgYnl0ZXMpCisKKyAgICAg ICAgbGV0IG5vZGUgPSBScmRTY2hlbWE6Om5vZGUoUnJkRm9ybWF0OjpQdmUyKTsKKyAgICAgICAg bGV0IG5vZGVfZGVyaXZlX2luZGljZXMgPSBbMTAsIDExXTsgLy8gbmV0aW4sIG5ldG91dAorICAg ICAgICBmb3IgKGksIGRzKSBpbiBub2RlLmRhdGFfc291cmNlcy5pdGVyKCkuZW51bWVyYXRlKCkg eworICAgICAgICAgICAgaWYgbm9kZV9kZXJpdmVfaW5kaWNlcy5jb250YWlucygmaSkgeworICAg ICAgICAgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICAgICAgICAgIGRzLmRzX3R5cGUs ICJERVJJVkUiLAorICAgICAgICAgICAgICAgICAgICAiTm9kZSBEU1t7fV0gKHt9KSBzaG91bGQg YmUgREVSSVZFIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgZHMubmFtZQorICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEo CisgICAgICAgICAgICAgICAgICAgIGRzLmRzX3R5cGUsICJHQVVHRSIsCisgICAgICAgICAgICAg ICAgICAgICJOb2RlIERTW3t9XSAoe30pIHNob3VsZCBiZSBHQVVHRSIsCisgICAgICAgICAgICAg ICAgICAgIGksIGRzLm5hbWUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAg ICAgICB9CisKKyAgICAgICAgbGV0IHZtID0gUnJkU2NoZW1hOjp2bShScmRGb3JtYXQ6OlB2ZTIp OworICAgICAgICBsZXQgdm1fZGVyaXZlX2luZGljZXMgPSBbNiwgNywgOCwgOV07IC8vIG5ldGlu LCBuZXRvdXQsIGRpc2tyZWFkLCBkaXNrd3JpdGUKKyAgICAgICAgZm9yIChpLCBkcykgaW4gdm0u ZGF0YV9zb3VyY2VzLml0ZXIoKS5lbnVtZXJhdGUoKSB7CisgICAgICAgICAgICBpZiB2bV9kZXJp dmVfaW5kaWNlcy5jb250YWlucygmaSkgeworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEoCisg ICAgICAgICAgICAgICAgICAgIGRzLmRzX3R5cGUsICJERVJJVkUiLAorICAgICAgICAgICAgICAg ICAgICAiVk0gRFNbe31dICh7fSkgc2hvdWxkIGJlIERFUklWRSIsCisgICAgICAgICAgICAgICAg ICAgIGksIGRzLm5hbWUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgICAgICAgICBkcy5kc190 eXBlLCAiR0FVR0UiLAorICAgICAgICAgICAgICAgICAgICAiVk0gRFNbe31dICh7fSkgc2hvdWxk IGJlIEdBVUdFIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgZHMubmFtZQorICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsZXQgc3RvcmFnZSA9 IFJyZFNjaGVtYTo6c3RvcmFnZShScmRGb3JtYXQ6OlB2ZTIpOworICAgICAgICBmb3IgZHMgaW4g JnN0b3JhZ2UuZGF0YV9zb3VyY2VzIHsKKyAgICAgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAg ICAgICAgICAgZHMuZHNfdHlwZSwgIkdBVUdFIiwKKyAgICAgICAgICAgICAgICAiU3RvcmFnZSBE UyAoe30pIHNob3VsZCBiZSBHQVVHRSIsCisgICAgICAgICAgICAgICAgZHMubmFtZQorICAgICAg ICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3B2 ZTlfYmFja3dhcmRfY29tcGF0aWJpbGl0eSgpIHsKKyAgICAgICAgbGV0IG5vZGVfcHZlMiA9IFJy ZFNjaGVtYTo6bm9kZShScmRGb3JtYXQ6OlB2ZTIpOworICAgICAgICBsZXQgbm9kZV9wdmU5ID0g UnJkU2NoZW1hOjpub2RlKFJyZEZvcm1hdDo6UHZlOV8wKTsKKworICAgICAgICBhc3NlcnQhKG5v ZGVfcHZlOS5jb2x1bW5fY291bnQoKSA+IG5vZGVfcHZlMi5jb2x1bW5fY291bnQoKSk7CisKKyAg ICAgICAgZm9yIGkgaW4gMC4ubm9kZV9wdmUyLmNvbHVtbl9jb3VudCgpIHsKKyAgICAgICAgICAg IGFzc2VydF9lcSEoCisgICAgICAgICAgICAgICAgbm9kZV9wdmUyLmRhdGFfc291cmNlc1tpXS5u YW1lLCBub2RlX3B2ZTkuZGF0YV9zb3VyY2VzW2ldLm5hbWUsCisgICAgICAgICAgICAgICAgIk5v ZGUgRFNbe31dIG5hbWUgbXVzdCBtYXRjaCBiZXR3ZWVuIHB2ZTIgYW5kIHB2ZTkuMCIsCisgICAg ICAgICAgICAgICAgaQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEoCisg ICAgICAgICAgICAgICAgbm9kZV9wdmUyLmRhdGFfc291cmNlc1tpXS5kc190eXBlLCBub2RlX3B2 ZTkuZGF0YV9zb3VyY2VzW2ldLmRzX3R5cGUsCisgICAgICAgICAgICAgICAgIk5vZGUgRFNbe31d IHR5cGUgbXVzdCBtYXRjaCBiZXR3ZWVuIHB2ZTIgYW5kIHB2ZTkuMCIsCisgICAgICAgICAgICAg ICAgaQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCB2bV9wdmUyID0g UnJkU2NoZW1hOjp2bShScmRGb3JtYXQ6OlB2ZTIpOworICAgICAgICBsZXQgdm1fcHZlOSA9IFJy ZFNjaGVtYTo6dm0oUnJkRm9ybWF0OjpQdmU5XzApOworCisgICAgICAgIGFzc2VydCEodm1fcHZl OS5jb2x1bW5fY291bnQoKSA+IHZtX3B2ZTIuY29sdW1uX2NvdW50KCkpOworCisgICAgICAgIGZv ciBpIGluIDAuLnZtX3B2ZTIuY29sdW1uX2NvdW50KCkgeworICAgICAgICAgICAgYXNzZXJ0X2Vx ISgKKyAgICAgICAgICAgICAgICB2bV9wdmUyLmRhdGFfc291cmNlc1tpXS5uYW1lLCB2bV9wdmU5 LmRhdGFfc291cmNlc1tpXS5uYW1lLAorICAgICAgICAgICAgICAgICJWTSBEU1t7fV0gbmFtZSBt dXN0IG1hdGNoIGJldHdlZW4gcHZlMiBhbmQgcHZlOS4wIiwKKyAgICAgICAgICAgICAgICBpCisg ICAgICAgICAgICApOworICAgICAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgICAgICB2 bV9wdmUyLmRhdGFfc291cmNlc1tpXS5kc190eXBlLCB2bV9wdmU5LmRhdGFfc291cmNlc1tpXS5k c190eXBlLAorICAgICAgICAgICAgICAgICJWTSBEU1t7fV0gdHlwZSBtdXN0IG1hdGNoIGJldHdl ZW4gcHZlMiBhbmQgcHZlOS4wIiwKKyAgICAgICAgICAgICAgICBpCisgICAgICAgICAgICApOwor ICAgICAgICB9CisKKyAgICAgICAgbGV0IHN0b3JhZ2VfcHZlMiA9IFJyZFNjaGVtYTo6c3RvcmFn ZShScmRGb3JtYXQ6OlB2ZTIpOworICAgICAgICBsZXQgc3RvcmFnZV9wdmU5ID0gUnJkU2NoZW1h OjpzdG9yYWdlKFJyZEZvcm1hdDo6UHZlOV8wKTsKKyAgICAgICAgYXNzZXJ0X2VxIShzdG9yYWdl X3B2ZTIuY29sdW1uX2NvdW50KCksIHN0b3JhZ2VfcHZlOS5jb2x1bW5fY291bnQoKSk7CisgICAg fQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc2NoZW1hX2Rpc3BsYXkoKSB7CisgICAgICAg IGxldCB0ZXN0X2Nhc2VzID0gdmVjIVsKKyAgICAgICAgICAgIChScmRTY2hlbWE6Om5vZGUoUnJk Rm9ybWF0OjpQdmUyKSwgIlB2ZTIiLCAiMTIgZGF0YSBzb3VyY2VzIiksCisgICAgICAgICAgICAo CisgICAgICAgICAgICAgICAgUnJkU2NoZW1hOjpub2RlKFJyZEZvcm1hdDo6UHZlOV8wKSwKKyAg ICAgICAgICAgICAgICAiUHZlOV8wIiwKKyAgICAgICAgICAgICAgICAiMTkgZGF0YSBzb3VyY2Vz IiwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAoUnJkU2NoZW1hOjp2bShScmRGb3JtYXQ6 OlB2ZTIpLCAiUHZlMiIsICIxMCBkYXRhIHNvdXJjZXMiKSwKKyAgICAgICAgICAgICgKKyAgICAg ICAgICAgICAgICBScmRTY2hlbWE6OnZtKFJyZEZvcm1hdDo6UHZlOV8wKSwKKyAgICAgICAgICAg ICAgICAiUHZlOV8wIiwKKyAgICAgICAgICAgICAgICAiMTcgZGF0YSBzb3VyY2VzIiwKKyAgICAg ICAgICAgICksCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgUnJkU2NoZW1hOjpzdG9y YWdlKFJyZEZvcm1hdDo6UHZlMiksCisgICAgICAgICAgICAgICAgIlB2ZTIiLAorICAgICAgICAg ICAgICAgICIyIGRhdGEgc291cmNlcyIsCisgICAgICAgICAgICApLAorICAgICAgICBdOworCisg ICAgICAgIGZvciAoc2NoZW1hLCBleHBlY3RlZF9mb3JtYXQsIGV4cGVjdGVkX2NvdW50KSBpbiB0 ZXN0X2Nhc2VzIHsKKyAgICAgICAgICAgIGxldCBkaXNwbGF5ID0gZm9ybWF0ISgie30iLCBzY2hl bWEpOworICAgICAgICAgICAgYXNzZXJ0ISgKKyAgICAgICAgICAgICAgICBkaXNwbGF5LmNvbnRh aW5zKGV4cGVjdGVkX2Zvcm1hdCksCisgICAgICAgICAgICAgICAgIkRpc3BsYXkgc2hvdWxkIGNv bnRhaW4gZm9ybWF0OiB7fSIsCisgICAgICAgICAgICAgICAgZGlzcGxheQorICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIGFzc2VydCEoCisgICAgICAgICAgICAgICAgZGlzcGxheS5jb250YWlu cyhleHBlY3RlZF9jb3VudCksCisgICAgICAgICAgICAgICAgIkRpc3BsYXkgc2hvdWxkIGNvbnRh aW4gY291bnQ6IHt9IiwKKyAgICAgICAgICAgICAgICBkaXNwbGF5CisgICAgICAgICAgICApOwor ICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtcnJk L3NyYy93cml0ZXIucnMgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL3dyaXRlci5ycwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNzllZDIwMmEKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1ycmQvc3JjL3dyaXRlci5ycwpAQCAtMCwwICsx LDM5NyBAQAorLy8vIFJSRCBGaWxlIFdyaXRlcgorLy8vCisvLy8gSGFuZGxlcyBjcmVhdGluZyBh bmQgdXBkYXRpbmcgUlJEIGZpbGVzIHZpYSBwbHVnZ2FibGUgYmFja2VuZHMuCisvLy8gU3VwcG9y dHMgZGFlbW9uLWJhc2VkIChycmRjYWNoZWQpIGFuZCBkaXJlY3QgZmlsZSB3cml0aW5nIG1vZGVz LgordXNlIHN1cGVyOjprZXlfdHlwZTo6UnJkS2V5VHlwZTsKK3VzZSBzdXBlcjo6c2NoZW1hOjp7 UnJkRm9ybWF0LCBScmRTY2hlbWF9OwordXNlIGFueWhvdzo6e0NvbnRleHQsIFJlc3VsdH07Cit1 c2UgY2hyb25vOjpVdGM7Cit1c2Ugc3RkOjpjb2xsZWN0aW9uczo6SGFzaE1hcDsKK3VzZSBzdGQ6 OmZzOwordXNlIHN0ZDo6cGF0aDo6e1BhdGgsIFBhdGhCdWZ9OworCisvLy8gTWV0cmljIHR5cGUg Zm9yIGRldGVybWluaW5nIGNvbHVtbiBza2lwcGluZyBydWxlcworI1tkZXJpdmUoRGVidWcsIENs b25lLCBDb3B5LCBQYXJ0aWFsRXEsIEVxKV0KK2VudW0gTWV0cmljVHlwZSB7CisgICAgTm9kZSwK KyAgICBWbSwKKyAgICBTdG9yYWdlLAorfQorCitpbXBsIE1ldHJpY1R5cGUgeworICAgIC8vLyBO dW1iZXIgb2Ygbm9uLWFyY2hpdmFibGUgY29sdW1ucyB0byBza2lwCisgICAgLy8vCisgICAgLy8v IEMgaW1wbGVtZW50YXRpb24gKHN0YXR1cy5jOjEzMDAsIDEzMzUpOgorICAgIC8vLyAtIE5vZGU6 IHNraXAgMiAodXB0aW1lLCBzdGF0dXMpCisgICAgLy8vIC0gVk06IHNraXAgNCAodXB0aW1lLCBz dGF0dXMsIHRlbXBsYXRlLCBwaWQpCisgICAgLy8vIC0gU3RvcmFnZTogc2tpcCAwCisgICAgZm4g c2tpcF9jb2x1bW5zKHNlbGYpIC0+IHVzaXplIHsKKyAgICAgICAgbWF0Y2ggc2VsZiB7CisgICAg ICAgICAgICBNZXRyaWNUeXBlOjpOb2RlID0+IDIsCisgICAgICAgICAgICBNZXRyaWNUeXBlOjpW bSA9PiA0LAorICAgICAgICAgICAgTWV0cmljVHlwZTo6U3RvcmFnZSA9PiAwLAorICAgICAgICB9 CisgICAgfQorfQorCitpbXBsIFJyZEZvcm1hdCB7CisgICAgLy8vIEdldCBjb2x1bW4gY291bnQg Zm9yIGEgc3BlY2lmaWMgbWV0cmljIHR5cGUKKyAgICAjW2FsbG93KGRlYWRfY29kZSldCisgICAg Zm4gY29sdW1uX2NvdW50KHNlbGYsIG1ldHJpY190eXBlOiAmTWV0cmljVHlwZSkgLT4gdXNpemUg eworICAgICAgICBtYXRjaCAoc2VsZiwgbWV0cmljX3R5cGUpIHsKKyAgICAgICAgICAgIChScmRG b3JtYXQ6OlB2ZTIsIE1ldHJpY1R5cGU6Ok5vZGUpID0+IDEyLAorICAgICAgICAgICAgKFJyZEZv cm1hdDo6UHZlOV8wLCBNZXRyaWNUeXBlOjpOb2RlKSA9PiAxOSwKKyAgICAgICAgICAgIChScmRG b3JtYXQ6OlB2ZTIsIE1ldHJpY1R5cGU6OlZtKSA9PiAxMCwKKyAgICAgICAgICAgIChScmRGb3Jt YXQ6OlB2ZTlfMCwgTWV0cmljVHlwZTo6Vm0pID0+IDE3LAorICAgICAgICAgICAgKF8sIE1ldHJp Y1R5cGU6OlN0b3JhZ2UpID0+IDIsIC8vIFNhbWUgZm9yIGJvdGggZm9ybWF0cworICAgICAgICB9 CisgICAgfQorfQorCitpbXBsIFJyZEtleVR5cGUgeworICAgIC8vLyBHZXQgdGhlIG1ldHJpYyB0 eXBlIGZvciB0aGlzIGtleQorICAgIGZuIG1ldHJpY190eXBlKCZzZWxmKSAtPiBNZXRyaWNUeXBl IHsKKyAgICAgICAgbWF0Y2ggc2VsZiB7CisgICAgICAgICAgICBScmRLZXlUeXBlOjpOb2RlIHsg Li4gfSA9PiBNZXRyaWNUeXBlOjpOb2RlLAorICAgICAgICAgICAgUnJkS2V5VHlwZTo6Vm0geyAu LiB9ID0+IE1ldHJpY1R5cGU6OlZtLAorICAgICAgICAgICAgUnJkS2V5VHlwZTo6U3RvcmFnZSB7 IC4uIH0gPT4gTWV0cmljVHlwZTo6U3RvcmFnZSwKKyAgICAgICAgfQorICAgIH0KK30KKworLy8v IFJSRCB3cml0ZXIgZm9yIHBlcnNpc3RlbnQgbWV0cmljIHN0b3JhZ2UKKy8vLworLy8vIFVzZXMg cGx1Z2dhYmxlIGJhY2tlbmRzIChkYWVtb24sIGRpcmVjdCwgb3IgZmFsbGJhY2spIGZvciBSUkQg b3BlcmF0aW9ucy4KK3B1YiBzdHJ1Y3QgUnJkV3JpdGVyIHsKKyAgICAvLy8gQmFzZSBkaXJlY3Rv cnkgZm9yIFJSRCBmaWxlcyAoZGVmYXVsdDogL3Zhci9saWIvcnJkY2FjaGVkL2RiKQorICAgIGJh c2VfZGlyOiBQYXRoQnVmLAorICAgIC8vLyBCYWNrZW5kIGZvciBSUkQgb3BlcmF0aW9ucyAoZGFl bW9uLCBkaXJlY3QsIG9yIGZhbGxiYWNrKQorICAgIGJhY2tlbmQ6IEJveDxkeW4gc3VwZXI6OmJh Y2tlbmQ6OlJyZEJhY2tlbmQ+LAorICAgIC8vLyBUcmFjayB3aGljaCBSUkQgZmlsZXMgd2UndmUg YWxyZWFkeSBjcmVhdGVkCisgICAgY3JlYXRlZF9maWxlczogSGFzaE1hcDxTdHJpbmcsICgpPiwK K30KKworaW1wbCBScmRXcml0ZXIgeworICAgIC8vLyBDcmVhdGUgbmV3IFJSRCB3cml0ZXIgd2l0 aCBkZWZhdWx0IGZhbGxiYWNrIGJhY2tlbmQKKyAgICAvLy8KKyAgICAvLy8gVXNlcyB0aGUgZmFs bGJhY2sgYmFja2VuZCB0aGF0IHRyaWVzIGRhZW1vbiBmaXJzdCwgdGhlbiBmYWxscyBiYWNrIHRv IGRpcmVjdCBmaWxlIHdyaXRlcy4KKyAgICAvLy8gVGhpcyBtYXRjaGVzIHRoZSBDIGltcGxlbWVu dGF0aW9uJ3MgYmVoYXZpb3IuCisgICAgLy8vCisgICAgLy8vICMgQXJndW1lbnRzCisgICAgLy8v ICogYGJhc2VfZGlyYCAtIEJhc2UgZGlyZWN0b3J5IGZvciBSUkQgZmlsZXMKKyAgICBwdWIgYXN5 bmMgZm4gbmV3PFA6IEFzUmVmPFBhdGg+PihiYXNlX2RpcjogUCkgLT4gUmVzdWx0PFNlbGY+IHsK KyAgICAgICAgbGV0IGJhY2tlbmQgPSBTZWxmOjpkZWZhdWx0X2JhY2tlbmQoKS5hd2FpdD87Cisg ICAgICAgIFNlbGY6OndpdGhfYmFja2VuZChiYXNlX2RpciwgYmFja2VuZCkuYXdhaXQKKyAgICB9 CisKKyAgICAvLy8gQ3JlYXRlIG5ldyBSUkQgd3JpdGVyIHdpdGggc3BlY2lmaWMgYmFja2VuZAor ICAgIC8vLworICAgIC8vLyAjIEFyZ3VtZW50cworICAgIC8vLyAqIGBiYXNlX2RpcmAgLSBCYXNl IGRpcmVjdG9yeSBmb3IgUlJEIGZpbGVzCisgICAgLy8vICogYGJhY2tlbmRgIC0gUlJEIGJhY2tl bmQgdG8gdXNlIChkYWVtb24sIGRpcmVjdCwgb3IgZmFsbGJhY2spCisgICAgcHViKGNyYXRlKSBh c3luYyBmbiB3aXRoX2JhY2tlbmQ8UDogQXNSZWY8UGF0aD4+KAorICAgICAgICBiYXNlX2Rpcjog UCwKKyAgICAgICAgYmFja2VuZDogQm94PGR5biBzdXBlcjo6YmFja2VuZDo6UnJkQmFja2VuZD4s CisgICAgKSAtPiBSZXN1bHQ8U2VsZj4geworICAgICAgICBsZXQgYmFzZV9kaXIgPSBiYXNlX2Rp ci5hc19yZWYoKS50b19wYXRoX2J1ZigpOworCisgICAgICAgIC8vIENyZWF0ZSBiYXNlIGRpcmVj dG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAgICAgIGZzOjpjcmVhdGVfZGlyX2FsbCgmYmFz ZV9kaXIpCisgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIkZhaWxlZCB0byBj cmVhdGUgUlJEIGJhc2UgZGlyZWN0b3J5OiB7YmFzZV9kaXI6P30iKSk/OworCisgICAgICAgIHRy YWNpbmc6OmluZm8hKCJSUkQgd3JpdGVyIHVzaW5nIGJhY2tlbmQ6IHt9IiwgYmFja2VuZC5uYW1l KCkpOworCisgICAgICAgIE9rKFNlbGYgeworICAgICAgICAgICAgYmFzZV9kaXIsCisgICAgICAg ICAgICBiYWNrZW5kLAorICAgICAgICAgICAgY3JlYXRlZF9maWxlczogSGFzaE1hcDo6bmV3KCks CisgICAgICAgIH0pCisgICAgfQorCisgICAgLy8vIENyZWF0ZSBkZWZhdWx0IGJhY2tlbmQgKGZh bGxiYWNrOiBkYWVtb24gKyBkaXJlY3QpCisgICAgLy8vCisgICAgLy8vIFRoaXMgbWF0Y2hlcyB0 aGUgQyBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yOgorICAgIC8vLyAtIFRyaWVzIHJyZGNhY2hl ZCBkYWVtb24gZmlyc3QgZm9yIHBlcmZvcm1hbmNlCisgICAgLy8vIC0gRmFsbHMgYmFjayB0byBk aXJlY3QgZmlsZSB3cml0ZXMgaWYgZGFlbW9uIGZhaWxzCisgICAgYXN5bmMgZm4gZGVmYXVsdF9i YWNrZW5kKCkgLT4gUmVzdWx0PEJveDxkeW4gc3VwZXI6OmJhY2tlbmQ6OlJyZEJhY2tlbmQ+PiB7 CisgICAgICAgIGxldCBiYWNrZW5kID0gc3VwZXI6OmJhY2tlbmQ6OlJyZEZhbGxiYWNrQmFja2Vu ZDo6bmV3KCIvdmFyL3J1bi9ycmRjYWNoZWQuc29jayIpLmF3YWl0OworICAgICAgICBPayhCb3g6 Om5ldyhiYWNrZW5kKSkKKyAgICB9CisKKyAgICAvLy8gVXBkYXRlIFJSRCBmaWxlIHdpdGggbWV0 cmljIGRhdGEKKyAgICAvLy8KKyAgICAvLy8gVGhpcyB3aWxsOgorICAgIC8vLyAxLiBUcmFuc2Zv cm0gZGF0YSBmcm9tIHNvdXJjZSBmb3JtYXQgdG8gdGFyZ2V0IGZvcm1hdCAocGFkZGluZy90cnVu Y2F0aW9uL2NvbHVtbiBza2lwcGluZykKKyAgICAvLy8gMi4gQ3JlYXRlIHRoZSBSUkQgZmlsZSBp ZiBpdCBkb2Vzbid0IGV4aXN0CisgICAgLy8vIDMuIFVwZGF0ZSB2aWEgcnJkY2FjaGVkIGRhZW1v bgorICAgIC8vLworICAgIC8vLyAjIEFyZ3VtZW50cworICAgIC8vLyAqIGBrZXlgIC0gUlJEIGtl eSAoZS5nLiwgInB2ZTItbm9kZS9ub2RlMSIsICJwdmUtdm0tOS4wLzEwMCIpCisgICAgLy8vICog YGRhdGFgIC0gTWV0cmljIGRhdGEgc3RyaW5nIChmb3JtYXQ6ICJ0aW1lc3RhbXA6dmFsdWUxOnZh bHVlMjouLi4iKQorICAgIHB1YiBhc3luYyBmbiB1cGRhdGUoJm11dCBzZWxmLCBrZXk6ICZzdHIs IGRhdGE6ICZzdHIpIC0+IFJlc3VsdDwoKT4geworICAgICAgICAvLyBQYXJzZSB0aGUga2V5IHRv IGRldGVybWluZSBmaWxlIHBhdGggYW5kIHNjaGVtYQorICAgICAgICBsZXQga2V5X3R5cGUgPSBS cmRLZXlUeXBlOjpwYXJzZShrZXkpLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJJbnZhbGlkIFJS RCBrZXk6IHtrZXl9IikpPzsKKworICAgICAgICAvLyBHZXQgc291cmNlIGZvcm1hdCBhbmQgdGFy Z2V0IHNjaGVtYQorICAgICAgICBsZXQgc291cmNlX2Zvcm1hdCA9IGtleV90eXBlLnNvdXJjZV9m b3JtYXQoKTsKKyAgICAgICAgbGV0IHRhcmdldF9zY2hlbWEgPSBrZXlfdHlwZS5zY2hlbWEoKTsK KyAgICAgICAgbGV0IG1ldHJpY190eXBlID0ga2V5X3R5cGUubWV0cmljX3R5cGUoKTsKKworICAg ICAgICAvLyBUcmFuc2Zvcm0gZGF0YSBmcm9tIHNvdXJjZSB0byB0YXJnZXQgZm9ybWF0CisgICAg ICAgIGxldCB0cmFuc2Zvcm1lZF9kYXRhID0KKyAgICAgICAgICAgIFNlbGY6OnRyYW5zZm9ybV9k YXRhKGRhdGEsIHNvdXJjZV9mb3JtYXQsICZ0YXJnZXRfc2NoZW1hLCBtZXRyaWNfdHlwZSkKKyAg ICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIkZhaWxlZCB0byB0cmFuc2Zv cm0gUlJEIGRhdGEgZm9yIGtleToge2tleX0iKSk/OworCisgICAgICAgIC8vIEdldCB0aGUgZmls ZSBwYXRoIChhbHdheXMgdXNlcyBjdXJyZW50IGZvcm1hdCkKKyAgICAgICAgbGV0IGZpbGVfcGF0 aCA9IGtleV90eXBlLmZpbGVfcGF0aCgmc2VsZi5iYXNlX2Rpcik7CisKKyAgICAgICAgLy8gRW5z dXJlIHRoZSBSUkQgZmlsZSBleGlzdHMKKyAgICAgICAgaWYgIXNlbGYuY3JlYXRlZF9maWxlcy5j b250YWluc19rZXkoa2V5KSAmJiAhZmlsZV9wYXRoLmV4aXN0cygpIHsKKyAgICAgICAgICAgIHNl bGYuY3JlYXRlX3JyZF9maWxlKCZrZXlfdHlwZSwgJmZpbGVfcGF0aCkuYXdhaXQ/OworICAgICAg ICAgICAgc2VsZi5jcmVhdGVkX2ZpbGVzLmluc2VydChrZXkudG9fc3RyaW5nKCksICgpKTsKKyAg ICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgUlJEIGZpbGUgdmlhIGJhY2tlbmQKKyAg ICAgICAgc2VsZi5iYWNrZW5kLnVwZGF0ZSgmZmlsZV9wYXRoLCAmdHJhbnNmb3JtZWRfZGF0YSku YXdhaXQ/OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBDcmVhdGUgUlJEIGZp bGUgd2l0aCBhcHByb3ByaWF0ZSBzY2hlbWEgdmlhIGJhY2tlbmQKKyAgICBhc3luYyBmbiBjcmVh dGVfcnJkX2ZpbGUoJm11dCBzZWxmLCBrZXlfdHlwZTogJlJyZEtleVR5cGUsIGZpbGVfcGF0aDog JlBhdGgpIC0+IFJlc3VsdDwoKT4geworICAgICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9y eSBleGlzdHMKKyAgICAgICAgaWYgbGV0IFNvbWUocGFyZW50KSA9IGZpbGVfcGF0aC5wYXJlbnQo KSB7CisgICAgICAgICAgICBmczo6Y3JlYXRlX2Rpcl9hbGwocGFyZW50KQorICAgICAgICAgICAg ICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rvcnk6 IHtwYXJlbnQ6P30iKSk/OworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHNjaGVtYSBmb3Ig dGhpcyBSUkQgdHlwZQorICAgICAgICBsZXQgc2NoZW1hID0ga2V5X3R5cGUuc2NoZW1hKCk7CisK KyAgICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IHRpbWUgKGF0IGRheSBib3VuZGFyeSwgbWF0Y2hp bmcgQyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgbGV0IG5vdyA9IFV0Yzo6bm93KCk7CisgICAg ICAgIGxldCBzdGFydCA9IG5vdworICAgICAgICAgICAgLmRhdGVfbmFpdmUoKQorICAgICAgICAg ICAgLmFuZF9obXNfb3B0KDAsIDAsIDApCisgICAgICAgICAgICAuZXhwZWN0KCIwMDowMDowMCBp cyBhbHdheXMgYSB2YWxpZCB0aW1lIikKKyAgICAgICAgICAgIC5hbmRfdXRjKCk7CisgICAgICAg IGxldCBzdGFydF90aW1lc3RhbXAgPSBzdGFydC50aW1lc3RhbXAoKTsKKworICAgICAgICB0cmFj aW5nOjpkZWJ1ZyEoCisgICAgICAgICAgICAiQ3JlYXRpbmcgUlJEIGZpbGU6IHs6P30gd2l0aCB7 fSBkYXRhIHNvdXJjZXMgdmlhIHt9IiwKKyAgICAgICAgICAgIGZpbGVfcGF0aCwKKyAgICAgICAg ICAgIHNjaGVtYS5jb2x1bW5fY291bnQoKSwKKyAgICAgICAgICAgIHNlbGYuYmFja2VuZC5uYW1l KCkKKyAgICAgICAgKTsKKworICAgICAgICAvLyBEZWxlZ2F0ZSB0byBiYWNrZW5kIGZvciBjcmVh dGlvbgorICAgICAgICBzZWxmLmJhY2tlbmQKKyAgICAgICAgICAgIC5jcmVhdGUoZmlsZV9wYXRo LCAmc2NoZW1hLCBzdGFydF90aW1lc3RhbXApCisgICAgICAgICAgICAuYXdhaXQ/OworCisgICAg ICAgIHRyYWNpbmc6OmluZm8hKCJDcmVhdGVkIFJSRCBmaWxlOiB7Oj99ICh7fSkiLCBmaWxlX3Bh dGgsIHNjaGVtYSk7CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgLy8vIFRyYW5zZm9y bSBkYXRhIGZyb20gc291cmNlIGZvcm1hdCB0byB0YXJnZXQgZm9ybWF0CisgICAgLy8vCisgICAg Ly8vIFRoaXMgaW1wbGVtZW50cyB0aGUgQyBiZWhhdmlvciBmcm9tIHN0YXR1cy5jOgorICAgIC8v LyAxLiBTa2lwIG5vbi1hcmNoaXZhYmxlIGNvbHVtbnMgb25seSBmb3Igb2xkIGZvcm1hdHMgKHVw dGltZSwgc3RhdHVzIGZvciBub2RlcykKKyAgICAvLy8gMi4gUGFkIG9sZCBmb3JtYXQgZGF0YSB3 aXRoIGA6VWAgZm9yIG1pc3NpbmcgY29sdW1ucworICAgIC8vLyAzLiBUcnVuY2F0ZSBmdXR1cmUg Zm9ybWF0IGRhdGEgdG8ga25vd24gY29sdW1ucworICAgIC8vLworICAgIC8vLyAjIEFyZ3VtZW50 cworICAgIC8vLyAqIGBkYXRhYCAtIFJhdyBkYXRhIHN0cmluZyBmcm9tIHN0YXR1cyB1cGRhdGUg KGZvcm1hdDogInRpbWVzdGFtcDp2MTp2MjouLi4iKQorICAgIC8vLyAqIGBzb3VyY2VfZm9ybWF0 YCAtIEZvcm1hdCBpbmRpY2F0ZWQgYnkgdGhlIGlucHV0IGtleQorICAgIC8vLyAqIGB0YXJnZXRf c2NoZW1hYCAtIFRhcmdldCBSUkQgc2NoZW1hIChhbHdheXMgUHZlOV8wIGN1cnJlbnRseSkKKyAg ICAvLy8gKiBgbWV0cmljX3R5cGVgIC0gVHlwZSBvZiBtZXRyaWMgKE5vZGUsIFZNLCBTdG9yYWdl KSBmb3IgY29sdW1uIHNraXBwaW5nCisgICAgLy8vCisgICAgLy8vICMgUmV0dXJucworICAgIC8v LyBUcmFuc2Zvcm1lZCBkYXRhIHN0cmluZyByZWFkeSBmb3IgUlJEIHVwZGF0ZQorICAgIGZuIHRy YW5zZm9ybV9kYXRhKAorICAgICAgICBkYXRhOiAmc3RyLAorICAgICAgICBzb3VyY2VfZm9ybWF0 OiBScmRGb3JtYXQsCisgICAgICAgIHRhcmdldF9zY2hlbWE6ICZScmRTY2hlbWEsCisgICAgICAg IG1ldHJpY190eXBlOiBNZXRyaWNUeXBlLAorICAgICkgLT4gUmVzdWx0PFN0cmluZz4geworICAg ICAgICBsZXQgbXV0IHBhcnRzID0gZGF0YS5zcGxpdCgnOicpOworCisgICAgICAgIGxldCB0aW1l c3RhbXAgPSBwYXJ0cworICAgICAgICAgICAgLm5leHQoKQorICAgICAgICAgICAgLm9rX29yX2Vs c2UofHwgYW55aG93Ojphbnlob3chKCJFbXB0eSBkYXRhIHN0cmluZyIpKT87CisKKyAgICAgICAg Ly8gU2tpcCBub24tYXJjaGl2YWJsZSBjb2x1bW5zIGZvciBvbGQgZm9ybWF0IG9ubHkgKEM6IHN0 YXR1cy5jOjEzMDAsIDEzMzUsIDEzODUpCisgICAgICAgIGxldCBza2lwX2NvdW50ID0gaWYgc291 cmNlX2Zvcm1hdCA9PSBScmRGb3JtYXQ6OlB2ZTIgeworICAgICAgICAgICAgbWV0cmljX3R5cGUu c2tpcF9jb2x1bW5zKCkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIDAKKyAgICAgICAg fTsKKworICAgICAgICAvLyBCdWlsZCB0cmFuc2Zvcm1lZCBkYXRhOiB0aW1lc3RhbXAgKyB2YWx1 ZXMgKHNraXBwZWQsIHBhZGRlZC90cnVuY2F0ZWQgdG8gdGFyZ2V0X2NvbHMpCisgICAgICAgIGxl dCB0YXJnZXRfY29scyA9IHRhcmdldF9zY2hlbWEuY29sdW1uX2NvdW50KCk7CisKKyAgICAgICAg Ly8gSm9pbiB2YWx1ZXMgd2l0aCAnOicgc2VwYXJhdG9yLCBlZmZpY2llbnRseSBidWlsZGluZyB0 aGUgc3RyaW5nIHdpdGhvdXQgVmVjIGFsbG9jYXRpb24KKyAgICAgICAgbGV0IG11dCBpdGVyID0g cGFydHMKKyAgICAgICAgICAgIC5za2lwKHNraXBfY291bnQpCisgICAgICAgICAgICAuY2hhaW4o c3RkOjppdGVyOjpyZXBlYXQoIlUiKSkKKyAgICAgICAgICAgIC50YWtlKHRhcmdldF9jb2xzKTsK KyAgICAgICAgbGV0IHZhbHVlcyA9IG1hdGNoIGl0ZXIubmV4dCgpIHsKKyAgICAgICAgICAgIFNv bWUoZmlyc3QpID0+IHsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB3aXRoIGZpcnN0IHZhbHVl LCBmb2xkIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICBp dGVyLmZvbGQoZmlyc3QudG9fc3RyaW5nKCksIHxtdXQgYWNjLCB2YWx1ZXwgeworICAgICAgICAg ICAgICAgICAgICBhY2MucHVzaCgnOicpOworICAgICAgICAgICAgICAgICAgICBhY2MucHVzaF9z dHIodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBhY2MKKyAgICAgICAgICAgICAgICB9KQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgTm9uZSA9PiBTdHJpbmc6Om5ldygpLAorICAgICAg ICB9OworCisgICAgICAgIE9rKGZvcm1hdCEoInt0aW1lc3RhbXB9Ont2YWx1ZXN9IikpCisgICAg fQorCisgICAgLy8vIEZsdXNoIGFsbCBwZW5kaW5nIHVwZGF0ZXMKKyAgICAjW2FsbG93KGRlYWRf Y29kZSldIC8vIFVzZWQgdmlhIFJSRCB1cGRhdGUgY3ljbGUKKyAgICBwdWIoY3JhdGUpIGFzeW5j IGZuIGZsdXNoKCZtdXQgc2VsZikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIHNlbGYuYmFja2Vu ZC5mbHVzaCgpLmF3YWl0CisgICAgfQorCisgICAgLy8vIEdldCBiYXNlIGRpcmVjdG9yeQorICAg ICNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVXNlZCBmb3IgcGF0aCByZXNvbHV0aW9uIGluIHVwZGF0 ZXMKKyAgICBwdWIoY3JhdGUpIGZuIGJhc2VfZGlyKCZzZWxmKSAtPiAmUGF0aCB7CisgICAgICAg ICZzZWxmLmJhc2VfZGlyCisgICAgfQorfQorCitpbXBsIERyb3AgZm9yIFJyZFdyaXRlciB7Cisg ICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKKyAgICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZmx1c2gg aW4gRHJvcCBzaW5jZSBpdCdzIGFzeW5jCisgICAgICAgIC8vIFVzZXJzIHNob3VsZCBjYWxsIGZs dXNoKCkgZXhwbGljaXRseSBiZWZvcmUgZHJvcHBpbmcgaWYgbmVlZGVkCisgICAgICAgIHRyYWNp bmc6OmRlYnVnISgiUnJkV3JpdGVyIGRyb3BwZWQiKTsKKyAgICB9Cit9CisKKyNbY2ZnKHRlc3Qp XQorbW9kIHRlc3RzIHsKKyAgICB1c2Ugc3VwZXI6OnN1cGVyOjpzY2hlbWE6OntScmRGb3JtYXQs IFJyZFNjaGVtYX07CisgICAgdXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRl c3RfcnJkX2ZpbGVfcGF0aF9nZW5lcmF0aW9uKCkgeworICAgICAgICBsZXQgdGVtcF9kaXIgPSBz dGQ6OnBhdGg6OlBhdGhCdWY6OmZyb20oIi90bXAvdGVzdCIpOworCisgICAgICAgIGxldCBrZXlf bm9kZSA9IFJyZEtleVR5cGU6Ok5vZGUgeworICAgICAgICAgICAgbm9kZW5hbWU6ICJ0ZXN0bm9k ZSIudG9fc3RyaW5nKCksCisgICAgICAgICAgICBmb3JtYXQ6IFJyZEZvcm1hdDo6UHZlOV8wLAor ICAgICAgICB9OworICAgICAgICBsZXQgcGF0aCA9IGtleV9ub2RlLmZpbGVfcGF0aCgmdGVtcF9k aXIpOworICAgICAgICBhc3NlcnRfZXEhKHBhdGgsIHRlbXBfZGlyLmpvaW4oInB2ZS1ub2RlLTku MCIpLmpvaW4oInRlc3Rub2RlIikpOworICAgIH0KKworICAgIC8vID09PT09IEZvcm1hdCBBZGFw dGF0aW9uIFRlc3RzID09PT09CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF90cmFuc2Zvcm1f ZGF0YV9ub2RlX3B2ZTJfdG9fcHZlOSgpIHsKKyAgICAgICAgLy8gVGVzdCBwYWRkaW5nIG9sZCBm b3JtYXQgKDEyIGNvbHMpIHRvIG5ldyBmb3JtYXQgKDE5IGNvbHMpCisgICAgICAgIC8vIElucHV0 OiB0aW1lc3RhbXA6dXB0aW1lOnN0YXR1czpsb2FkOm1heGNwdTpjcHU6aW93YWl0Om1lbXRvdGFs Om1lbXVzZWQ6c3dhcF90OnN3YXBfdTpuZXRpbjpuZXRvdXQKKyAgICAgICAgbGV0IGRhdGEgPSAi MTIzNDU2Nzg5MDoxMDAwOjA6MS41OjQ6Mi4wOjAuNTo4MDAwMDAwMDAwOjYwMDAwMDAwMDA6MDow OjEwMDAwMDA6NTAwMDAwIjsKKworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2NoZW1hOjpub2Rl KFJyZEZvcm1hdDo6UHZlOV8wKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9CisgICAgICAgICAgICBS cmRXcml0ZXI6OnRyYW5zZm9ybV9kYXRhKGRhdGEsIFJyZEZvcm1hdDo6UHZlMiwgJnNjaGVtYSwg TWV0cmljVHlwZTo6Tm9kZSkudW53cmFwKCk7CisKKyAgICAgICAgLy8gQWZ0ZXIgc2tpcHBpbmcg MiBjb2xzICh1cHRpbWUsIHN0YXR1cykgYW5kIHBhZGRpbmcgd2l0aCA3IFUnczoKKyAgICAgICAg Ly8gdGltZXN0YW1wOmxvYWQ6bWF4Y3B1OmNwdTppb3dhaXQ6bWVtdG90YWw6bWVtdXNlZDpzd2Fw X3Q6c3dhcF91Om5ldGluOm5ldG91dDpVOlU6VTpVOlU6VTpVCisgICAgICAgIGxldCBwYXJ0czog VmVjPCZzdHI+ID0gcmVzdWx0LnNwbGl0KCc6JykuY29sbGVjdCgpOworICAgICAgICBhc3NlcnRf ZXEhKHBhcnRzWzBdLCAiMTIzNDU2Nzg5MCIsICJUaW1lc3RhbXAgc2hvdWxkIGJlIHByZXNlcnZl ZCIpOworICAgICAgICBhc3NlcnRfZXEhKHBhcnRzLmxlbigpLCAyMCwgIlNob3VsZCBoYXZlIHRp bWVzdGFtcCArIDE5IHZhbHVlcyIpOyAvLyAxICsgMTkKKyAgICAgICAgYXNzZXJ0X2VxIShwYXJ0 c1sxXSwgIjEuNSIsICJGaXJzdCB2YWx1ZSBhZnRlciBza2lwIHNob3VsZCBiZSBsb2FkIik7Cisg ICAgICAgIGFzc2VydF9lcSEocGFydHNbMl0sICI0IiwgIlNlY29uZCB2YWx1ZSBzaG91bGQgYmUg bWF4Y3B1Iik7CisKKyAgICAgICAgLy8gQ2hlY2sgcGFkZGluZworICAgICAgICBmb3IgKGksIGl0 ZW0pIGluIHBhcnRzLml0ZXIoKS5lbnVtZXJhdGUoKS50YWtlKDIwKS5za2lwKDEyKSB7CisgICAg ICAgICAgICBhc3NlcnRfZXEhKGl0ZW0sICYiVSIsICJDb2x1bW4ge30gc2hvdWxkIGJlIHBhZGRl ZCB3aXRoIFUiLCBpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0 ZXN0X3RyYW5zZm9ybV9kYXRhX3ZtX3B2ZTJfdG9fcHZlOSgpIHsKKyAgICAgICAgLy8gVGVzdCBW TSB0cmFuc2Zvcm1hdGlvbiB3aXRoIDQgY29sdW1ucyBza2lwcGVkCisgICAgICAgIC8vIElucHV0 OiB0aW1lc3RhbXA6dXB0aW1lOnN0YXR1czp0ZW1wbGF0ZTpwaWQ6bWF4Y3B1OmNwdTptYXhtZW06 bWVtOm1heGRpc2s6ZGlzazpuZXRpbjpuZXRvdXQ6ZGlza3JlYWQ6ZGlza3dyaXRlCisgICAgICAg IGxldCBkYXRhID0gIjEyMzQ1Njc4OTA6MTAwMDoxOjA6MTIzNDU6NDoyOjQwOTY6MjA0ODoxMDAw MDA6NTAwMDA6MTAwMDo1MDA6MTAwOjUwIjsKKworICAgICAgICBsZXQgc2NoZW1hID0gUnJkU2No ZW1hOjp2bShScmRGb3JtYXQ6OlB2ZTlfMCk7CisgICAgICAgIGxldCByZXN1bHQgPQorICAgICAg ICAgICAgUnJkV3JpdGVyOjp0cmFuc2Zvcm1fZGF0YShkYXRhLCBScmRGb3JtYXQ6OlB2ZTIsICZz Y2hlbWEsIE1ldHJpY1R5cGU6OlZtKS51bndyYXAoKTsKKworICAgICAgICBsZXQgcGFydHM6IFZl Yzwmc3RyPiA9IHJlc3VsdC5zcGxpdCgnOicpLmNvbGxlY3QoKTsKKyAgICAgICAgYXNzZXJ0X2Vx IShwYXJ0c1swXSwgIjEyMzQ1Njc4OTAiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYXJ0cy5sZW4o KSwgMTgsICJTaG91bGQgaGF2ZSB0aW1lc3RhbXAgKyAxNyB2YWx1ZXMiKTsKKyAgICAgICAgYXNz ZXJ0X2VxIShwYXJ0c1sxXSwgIjQiLCAiRmlyc3QgdmFsdWUgYWZ0ZXIgc2tpcCBzaG91bGQgYmUg bWF4Y3B1Iik7CisKKyAgICAgICAgLy8gQ2hlY2sgcGFkZGluZyAobGFzdCA3IGNvbHVtbnMpCisg ICAgICAgIGZvciAoaSwgaXRlbSkgaW4gcGFydHMuaXRlcigpLmVudW1lcmF0ZSgpLnRha2UoMTgp LnNraXAoMTEpIHsKKyAgICAgICAgICAgIGFzc2VydF9lcSEoaXRlbSwgJiJVIiwgIkNvbHVtbiB7 fSBzaG91bGQgYmUgcGFkZGVkIiwgaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjW3Rlc3Rd CisgICAgZm4gdGVzdF90cmFuc2Zvcm1fZGF0YV9ub19wYWRkaW5nX25lZWRlZCgpIHsKKyAgICAg ICAgLy8gVGVzdCB3aGVuIHNvdXJjZSBhbmQgdGFyZ2V0IGhhdmUgc2FtZSBjb2x1bW4gY291bnQK KyAgICAgICAgbGV0IGRhdGEgPSAiMTIzNDU2Nzg5MDoxLjU6NDoyLjA6MC41OjgwMDAwMDAwMDA6 NjAwMDAwMDAwMDowOjA6MDowOjEwMDAwMDA6NTAwMDAwOjcwMDAwMDAwMDA6MDowOjA6MDowOjAi OworCisgICAgICAgIGxldCBzY2hlbWEgPSBScmRTY2hlbWE6Om5vZGUoUnJkRm9ybWF0OjpQdmU5 XzApOworICAgICAgICBsZXQgcmVzdWx0ID0KKyAgICAgICAgICAgIFJyZFdyaXRlcjo6dHJhbnNm b3JtX2RhdGEoZGF0YSwgUnJkRm9ybWF0OjpQdmU5XzAsICZzY2hlbWEsIE1ldHJpY1R5cGU6Ok5v ZGUpLnVud3JhcCgpOworCisgICAgICAgIC8vIE5vIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBvY2N1 ciAoc2FtZSBmb3JtYXQpCisgICAgICAgIGxldCBwYXJ0czogVmVjPCZzdHI+ID0gcmVzdWx0LnNw bGl0KCc6JykuY29sbGVjdCgpOworICAgICAgICBhc3NlcnRfZXEhKHBhcnRzLmxlbigpLCAyMCk7 IC8vIHRpbWVzdGFtcCArIDE5IHZhbHVlcworICAgICAgICBhc3NlcnRfZXEhKHBhcnRzWzFdLCAi MS41Iik7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdHJhbnNmb3JtX2RhdGFf ZnV0dXJlX2Zvcm1hdF90cnVuY2F0aW9uKCkgeworICAgICAgICAvLyBUZXN0IHRydW5jYXRpb24g b2YgZnV0dXJlIGZvcm1hdCB3aXRoIGV4dHJhIGNvbHVtbnMKKyAgICAgICAgbGV0IGRhdGEgPSAi MTIzNDU2Nzg5MDoxOjI6Mzo0OjU6Njo3Ojg6OToxMDoxMToxMjoxMzoxNDoxNToxNjoxNzoxODox OToyMDoyMToyMjoyMzoyNDoyNSI7CisKKyAgICAgICAgbGV0IHNjaGVtYSA9IFJyZFNjaGVtYTo6 bm9kZShScmRGb3JtYXQ6OlB2ZTlfMCk7CisgICAgICAgIC8vIFNpbXVsYXRpbmcgZnV0dXJlIGZv cm1hdCB0aGF0IGhhcyAyNSBjb2x1bW5zCisgICAgICAgIGxldCByZXN1bHQgPQorICAgICAgICAg ICAgUnJkV3JpdGVyOjp0cmFuc2Zvcm1fZGF0YShkYXRhLCBScmRGb3JtYXQ6OlB2ZTlfMCwgJnNj aGVtYSwgTWV0cmljVHlwZTo6Tm9kZSkudW53cmFwKCk7CisKKyAgICAgICAgbGV0IHBhcnRzOiBW ZWM8JnN0cj4gPSByZXN1bHQuc3BsaXQoJzonKS5jb2xsZWN0KCk7CisgICAgICAgIGFzc2VydF9l cSEocGFydHMubGVuKCksIDIwLCAiU2hvdWxkIHRydW5jYXRlIHRvIHRpbWVzdGFtcCArIDE5IHZh bHVlcyIpOworICAgICAgICBhc3NlcnRfZXEhKHBhcnRzWzE5XSwgIjE5IiwgIkxhc3QgdmFsdWUg c2hvdWxkIGJlIGNvbHVtbiAxOSIpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0 X3RyYW5zZm9ybV9kYXRhX3N0b3JhZ2Vfbm9fY2hhbmdlKCkgeworICAgICAgICAvLyBTdG9yYWdl IGZvcm1hdCBpcyBzYW1lIGZvciBQdmUyIGFuZCBQdmU5XzAgKDIgY29sdW1ucywgbm8gc2tpcHBp bmcpCisgICAgICAgIGxldCBkYXRhID0gIjEyMzQ1Njc4OTA6MTAwMDAwMDAwMDAwMDo1MDAwMDAw MDAwMDAiOworCisgICAgICAgIGxldCBzY2hlbWEgPSBScmRTY2hlbWE6OnN0b3JhZ2UoUnJkRm9y bWF0OjpQdmU5XzApOworICAgICAgICBsZXQgcmVzdWx0ID0KKyAgICAgICAgICAgIFJyZFdyaXRl cjo6dHJhbnNmb3JtX2RhdGEoZGF0YSwgUnJkRm9ybWF0OjpQdmUyLCAmc2NoZW1hLCBNZXRyaWNU eXBlOjpTdG9yYWdlKS51bndyYXAoKTsKKworICAgICAgICBhc3NlcnRfZXEhKHJlc3VsdCwgZGF0 YSwgIlN0b3JhZ2UgZGF0YSBzaG91bGQgbm90IGJlIHRyYW5zZm9ybWVkIik7CisgICAgfQorCisg ICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfbWV0cmljX3R5cGVfbWV0aG9kcygpIHsKKyAgICAgICAg YXNzZXJ0X2VxIShNZXRyaWNUeXBlOjpOb2RlLnNraXBfY29sdW1ucygpLCAyKTsKKyAgICAgICAg YXNzZXJ0X2VxIShNZXRyaWNUeXBlOjpWbS5za2lwX2NvbHVtbnMoKSwgNCk7CisgICAgICAgIGFz c2VydF9lcSEoTWV0cmljVHlwZTo6U3RvcmFnZS5za2lwX2NvbHVtbnMoKSwgMCk7CisgICAgfQor CisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfZm9ybWF0X2NvbHVtbl9jb3VudHMoKSB7CisgICAg ICAgIGFzc2VydF9lcSEoUnJkRm9ybWF0OjpQdmUyLmNvbHVtbl9jb3VudCgmTWV0cmljVHlwZTo6 Tm9kZSksIDEyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShScmRGb3JtYXQ6OlB2ZTlfMC5jb2x1bW5f Y291bnQoJk1ldHJpY1R5cGU6Ok5vZGUpLCAxOSk7CisgICAgICAgIGFzc2VydF9lcSEoUnJkRm9y bWF0OjpQdmUyLmNvbHVtbl9jb3VudCgmTWV0cmljVHlwZTo6Vm0pLCAxMCk7CisgICAgICAgIGFz c2VydF9lcSEoUnJkRm9ybWF0OjpQdmU5XzAuY29sdW1uX2NvdW50KCZNZXRyaWNUeXBlOjpWbSks IDE3KTsKKyAgICAgICAgYXNzZXJ0X2VxIShScmRGb3JtYXQ6OlB2ZTIuY29sdW1uX2NvdW50KCZN ZXRyaWNUeXBlOjpTdG9yYWdlKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoUnJkRm9ybWF0OjpQ dmU5XzAuY29sdW1uX2NvdW50KCZNZXRyaWNUeXBlOjpTdG9yYWdlKSwgMik7CisgICAgfQorfQot LSAKMi40Ny4zCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0 dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZl bAo=