Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wpMY2-001bYG-0S for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jul 2026 08:55:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wpMY1-00B0uc-0V for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jul 2026 08:55:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wpMY0-00B0uB-2N for pgsql-hackers@lists.postgresql.org; Thu, 30 Jul 2026 08:55:24 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wpMXx-000000014dH-2xXk for pgsql-hackers@lists.postgresql.org; Thu, 30 Jul 2026 08:55:24 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-47f502ff678so261810f8f.0 for ; Thu, 30 Jul 2026 01:55:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785401719; x=1786006519; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=ydALD1xhv6YevHde8DlPAnbeGPQnTOM+zatcFVrjvsM=; b=RJY8JGcOeYlT5BAiK4OHyjLrDgoShbqpwLEiA8RIOnFGtHA4yArr0V4JEIuKbsSvTs dLifixvnVBcyoXr/6ENEgmAX5yQoRUP0+SBDV25AXxGTr1xtqY8LS88z5x40KIQ/k1cQ /Zsn+Qa5JavYGs5zpXkP2CZ1n8QKLQIzWIwcSZbBqeNfzAcqJpBDQ8ZH1HDPGGouyQdO aiOYVo4mTMNb4Emjwf6m20JJ2+5WtfUMDzGV2xFD5vGL4pUIex1pEaMG0c/3gI/RPoHW YbGZNabmBtA4ZVin3Kkb3mkb/0F5qS4g/orOJqPZUpJW9yn2dXzvi761fzCLSYzqVl6j 9Yig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785401719; x=1786006519; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ydALD1xhv6YevHde8DlPAnbeGPQnTOM+zatcFVrjvsM=; b=VV6teec+SdZzPwETza4H1SfMO0lGNdVRnS35P1U8QRIauaju/raIaZF8AlEPhCbsRz 7btVMj8dXLbGMqBz3yhm/CGHXALHd4DnWAUyZKHZG7J5i5pSlk5OokUaJ/10soeU5t1V 1Fkz1nNohVJp5WvTRwtbBh8BtjaBTyFk5K5znGwfwwip5rG0WBIKN4RA5l2XSzoYec6u omNQ9YSoC2LZggMTZ/3LFrqX+5mUrD1xRNVez/0lV+XptkZTwysXoR0XysFn87dri4wk VuY8SE5qawJLS1yG/8UEER/s7++My7jRdlcSReSpqlrtD7akmgWABPguoOExSh+1ESnP Bn5A== X-Forwarded-Encrypted: i=1; AHgh+Rris53NbTLgyRIb9N9UgbBfKX6jvTRE+EguKJVNA8dOhSIy6KVochicO8MVznjDfBCi+7BOI6rmPCxxMtNH@lists.postgresql.org X-Gm-Message-State: AOJu0YzGc7ba70tYd5k7CSLKxUuLPMa7Rq76jgoLxtktEjKVARZWX5+R 8VnCStP48PSFRMjbS9qFten5Ty9kt8kt0KXasWeABB7WVPE6rZf8aFY0 X-Gm-Gg: AR+sD11NP7Xl8S4L2VZReWBE9b0PFRM2oGGMNad4GbG0S7UPfr0vVWCpNwKGpTiS/AC Uo+FeK0vPmNmRPAWoVlTRmQXOqb5Wz9Hw5TPFgbISNGIU1zYcxwcLDxua6Dqc9UGDkNk4aLN7wD w351zYjf1LMuUy7+yhxLSXTfzEZ3mq+cp8IEb96Sq327JeC9r/SZzfHfgYF1sji2PUIJJkLsJb3 Kchh/v+CxydNcbE6VQB6fEpS4ro2//KpNpa0jBTWfwfLBMD6bUUKg53wKMWdRv4ZjU5Qg1BOsh5 UYAOeQP0epnChHOPkJAq6aFtY9oSo3y3vsNFU47TCcbFkwy7j6uXI/BwMkDvdVLmuFmZctKhtk4 dekUk8NwkCRzaupW6mJP06BDgUzJ5ug2IfQc11MIUto8SwYG2aYLzy/Ie0hOCT3THXQthkIC+QW yZ7RHTM5AIob+RlQ/JDp7oFDBhgpVMc1zbWREyGVtd7lKqqvDFvEn/6yqZe3GUXyp1uJEsZ3fBx 4dJGw7sj2FXe1fc2eN54Vu568yv7hOaf5op4oGqWO1cNmkAmVRGu6ka X-Received: by 2002:a05:600c:1992:b0:492:4a7a:e415 with SMTP id 5b1f17b1804b1-49800ea1ed9mr23358175e9.2.1785401718812; Thu, 30 Jul 2026 01:55:18 -0700 (PDT) Received: from [192.168.178.101] ([163.116.172.146]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4980120ba7fsm45545565e9.11.2026.07.30.01.55.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 30 Jul 2026 01:55:18 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------6MY5lIN6W0ey6bAAAc0A25NA" Message-ID: <29e0b01e-d028-48bc-ae4d-e86f9d700cc5@gmail.com> Date: Thu, 30 Jul 2026 10:55:17 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pg_plan_advice: add NO_ scan and join method tags To: Neil Chen Cc: song yanli , "Jonathan Gonzalez V." , "pgsql-hackers@lists.postgresql.org" , "robertmhaas@gmail.com" References: <123bbb65-ae76-4112-b33d-864aca745b7b@gmail.com> <87qzl5pxuz.fsf@gmail.com> <9ba4c7da-06ee-4a5a-9479-9b1076cfc675@gmail.com> <9804d83b-b371-48ed-874e-e506466e0db9@gmail.com> Content-Language: en-US From: Florin Irion In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------6MY5lIN6W0ey6bAAAc0A25NA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 29/07/2026 09:12, Neil Chen wrote: > > Hi Florin, > > While testing v3, I found two behaviors that look unintended. > > > 1. False conflict between BITMAP_HEAP_SCAN and NO_INDEX_ONLY_SCAN > > This is separate from the earlier discussion about whether > NO_INDEX_ONLY_SCAN should clear PGS_CONSIDER_INDEXONLY. I agree that it > needs to do so for enforcement. The problem is that the same bit is also > used for conflict detection. > > BITMAP_HEAP_SCAN uses: > > |PGS_BITMAPSCAN | PGS_CONSIDER_INDEXONLY| > > while NO_INDEX_ONLY_SCAN forbids: > > |PGS_INDEXONLYSCAN | PGS_CONSIDER_INDEXONLY| > > Therefore this check reports a conflict due only to the shared > PGS_CONSIDER_INDEXONLY bit: > > |if (scan_type != all_scan_mask && (scan_type & no_scan_mask) != 0) > scan_pos_neg_conflict = true;| > > For example: > > |SET LOCAL pg_plan_advice.advice = 'BITMAP_HEAP_SCAN(no_scan_table) > NO_INDEX_ONLY_SCAN(no_scan_table)'; EXPLAIN (COSTS OFF, PLAN_ADVICE) > SELECT * FROM no_scan_table WHERE a = 1;| > > reports: > > |BITMAP_HEAP_SCAN(no_scan_table) /* matched, conflicting, failed */ > NO_INDEX_ONLY_SCAN(no_scan_table) /* matched, conflicting */| > > These tags are semantically compatible: a Bitmap Heap Scan is not an Index > Only Scan. It seems that PGS_CONSIDER_INDEXONLY is an enforcement detail, > not a scan method for conflict purposes. > > Would it make sense to use separate semantic and enforcement masks, with > only the former used for conflict detection? > > > 2. A conflict cancels unrelated negative tags > > A single scan_pos_neg_conflict or jm_pos_neg_conflict boolean is used for > all negative tags on the target. Once set, every negative tag is marked > conflicting and the entire no_scan_mask or no_join_mask is not applied. > > For example: > > |SET LOCAL pg_plan_advice.advice = 'SEQ_SCAN(no_scan_table) > NO_SEQ_SCAN(no_scan_table) NO_BITMAP_HEAP_SCAN(no_scan_table)'; > > produces: > > |Bitmap Heap Scan on no_scan_table Recheck Cond: (b > 'some text > 8'::text) -> Bitmap Index Scan on no_scan_table_b Index Cond: (b > > 'some text 8'::text) Supplied Plan Advice: SEQ_SCAN(no_scan_table) /* > matched, conflicting, failed */ NO_SEQ_SCAN(no_scan_table) /* matched, > conflicting */ NO_BITMAP_HEAP_SCAN(no_scan_table) /* matched, > conflicting, failed */|| > > The SEQ_SCAN/NO_SEQ_SCAN pair conflicts, but NO_BITMAP_HEAP_SCAN does not. > Nevertheless, it is also marked conflicting and is not enforced, allowing > the final plan to use a Bitmap Heap Scan. > > The join case behaves the same way: > > |SET LOCAL pg_plan_advice.advice = 'MERGE_JOIN_PLAIN(d) > NO_MERGE_JOIN(d) NO_HASH_JOIN(d)'; > > produces: > > |Hash Join Hash Cond: (f.dim_id = d.id ) -> Seq Scan on > no_join_fact f -> Hash -> Seq Scan on no_join_dim d Supplied Plan > Advice: MERGE_JOIN_PLAIN(d) /* matched, conflicting, failed */ > NO_MERGE_JOIN(d) /* matched, conflicting */ NO_HASH_JOIN(d) /* > matched, conflicting, failed */|| > > NO_HASH_JOIN(d) is marked conflicting and left unenforced even though it > does not conflict with MERGE_JOIN_PLAIN(d), so the final plan can > still use > a Hash Join. > > Would it be better to detect conflicts per method, mark only the involved > tags as conflicting, and continue applying the enforcement masks of > unrelated negative tags? > > Regression tests for both combinations would be useful. > Hi, Thank you for reviewing,all confirmed, and fixed in v4. 1. False conflict via PGS_CONSIDER_INDEXONLY: that's an enforcement detail, not a scan method. Added pgpa_scan_semantic_mask(), which strips PGS_CONSIDER_INDEXONLY before comparing tags for conflict purposes. BITMAP_HEAP_SCAN(t) NO_INDEX_ONLY_SCAN(t) now comes back clean, no conflict. 2. Conflict cancelling unrelated NO_ tags: Replaced the single all-or-nothing scan_pos_neg_conflict/jm_pos_neg_conflict gate with per-tag conflict tracking. Each NO_ tag is now checked independently; only the ones that actually clash get marked conflicting and skipped, everything else still gets enforced. Verified with your examples — NO_BITMAP_HEAP_SCAN and NO_HASH_JOIN(d) now apply despite an unrelated conflict on a different method. 3. Also caught while testing: index-selection side effect on conflict. Separately, found that the "enforce choice of index" block only checked !scan_pos_conflict, not !scan_pos_neg_conflict. So INDEX_SCAN(t idx) NO_INDEX_SCAN(t) — a genuine conflict, correctly left unenforced at the mask level — was still silently disabling every other index on t, steering the plan toward idx anyway. Fixed by adding the missing check. --------------6MY5lIN6W0ey6bAAAc0A25NA Content-Type: text/plain; charset=UTF-8; name="v4-0001-pg_plan_advice-Add-NO_SCAN-and-NO_JOIN_METHOD-tag.patch" Content-Disposition: attachment; filename*0="v4-0001-pg_plan_advice-Add-NO_SCAN-and-NO_JOIN_METHOD-tag.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5NGZhN2Q2ZDc0MjI5OGNkYTM2YTRjOTFiODYxNjdhZjc2ZmIzNmFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaW4gSXJpb24gPGZsb3Jpbi5pcmlvbkBlbnRl cnByaXNlZGIuY29tPgpEYXRlOiBUaHUsIDE4IEp1biAyMDI2IDE0OjI4OjUwICswMjAwClN1 YmplY3Q6IFtQQVRDSCB2NF0gcGdfcGxhbl9hZHZpY2U6IEFkZCBOT19TQ0FOIGFuZCBOT19K T0lOX01FVEhPRCB0YWdzCgpBZGQgTk9fU0VRX1NDQU4sIE5PX0lOREVYX1NDQU4sIE5PX0lO REVYX09OTFlfU0NBTiwKTk9fQklUTUFQX0hFQVBfU0NBTiwgYW5kIE5PX1RJRF9TQ0FOIGFz IG5lZ2F0aXZlIHNjYW4tbWV0aG9kCmRpcmVjdGl2ZXMsIGFuZCBOT19IQVNIX0pPSU4sIE5P X05FU1RFRF9MT09QIChwbHVzIF9QTEFJTiwKX01FTU9JWkUsIF9NQVRFUklBTElaRSB2YXJp YW50cyksIGFuZCBOT19NRVJHRV9KT0lOIChwbHVzIF9QTEFJTiwKX01BVEVSSUFMSVpFIHZh cmlhbnRzKSBhcyBuZWdhdGl2ZSBqb2luLW1ldGhvZCBkaXJlY3RpdmVzLiBFYWNoCk5PXyB0 YWcgaXMgdGhlIGxvZ2ljYWwgY29tcGxlbWVudCBvZiBpdHMgcG9zaXRpdmUgY291bnRlcnBh cnQsCmluY2x1ZGluZyB0aGUgam9pbi1vcmRlciBjb25zdHJhaW50OiBOT19IQVNIX0pPSU4o eCkgbWVhbnMgeCBtYXkKbm90IGFwcGVhciBvbiB0aGUgb3V0ZXIgKGRyaXZpbmcpIHNpZGUs IGV4YWN0bHkgYXMgSEFTSF9KT0lOKHgpCndvdWxkLgoKU2NhbiBOT18gdGFncyB1c2Ugc2lt cGxlX3RhcmdldF9saXN0IChzdWJsaXN0cyBpbnZhbGlkKTsgam9pbiBOT18KdGFncyB1c2Ug Z2VuZXJpY190YXJnZXRfbGlzdCAoc3VibGlzdHMgYWxsb3dlZCkuIE9ubHkgdGhlIE5PXyBz Y2FuCnRhZ3MgbmVlZCBzY2FubmVyIGFuZCBwYXJzZXIgY2hhbmdlcyBhcyBhIHJlc3VsdDsg dGhlIE5PXyBqb2luCnRhZ3MgZmFsbCB0aHJvdWdoIHRvIHRoZSBleGlzdGluZyBnZW5lcmlj IHRhZyByZXNvbHV0aW9uLgoKQ29uZmxpY3QgZGV0ZWN0aW9uIGNvbXBhcmVzIGVhY2ggdGFn J3Mgc2VtYW50aWMgc2Nhbi9qb2luIG1ldGhvZApyYXRoZXIgdGhhbiBpdHMgZW5mb3JjZW1l bnQgbWFzaywgc2luY2Ugc29tZSBlbmZvcmNlbWVudCBiaXRzIChlLmcuClBHU19DT05TSURF Ul9JTkRFWE9OTFkpIGFyZSBzaGFyZWQgZm9yIHVucmVsYXRlZCByZWFzb25zIGFuZCB3b3Vs ZApvdGhlcndpc2UgY2F1c2UgdW5yZWxhdGVkIHRhZ3MgdG8gbG9vayBsaWtlIHRoZXkgY29u ZmxpY3QuIEVhY2ggTk9fCnRhZyBpcyBjaGVja2VkIGFnYWluc3QgdGhlIHBvc2l0aXZlIHRh ZyBpbmRlcGVuZGVudGx5LCBzbyBhCmNvbmZsaWN0IG9uIG9uZSBtZXRob2QgbmV2ZXIgc3Vw cHJlc3NlcyBlbmZvcmNlbWVudCBvZiBhbiB1bnJlbGF0ZWQKTk9fIHRhZyBvbiB0aGUgc2Ft ZSByZWxhdGlvbiBvciBqb2luLCBpbmNsdWRpbmcgdGhlIGluZGV4LXNlbGVjdGlvbgpzaWRl IGVmZmVjdCBvZiBJTkRFWF9TQ0FOL0lOREVYX09OTFlfU0NBTiBhZHZpY2UuCi0tLQogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgNCArLQogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9ub19qb2luLm91dCB8IDMxNyArKysrKysr KysrKysrKysrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9ub19zY2Fu Lm91dCB8IDI4MyArKysrKysrKysrKysrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9t ZXNvbi5idWlsZCAgICAgICAgICB8ICAgMiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfYXN0LmMgICAgICAgICAgIHwgIDUyICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9hc3QuaCAgICAgICAgICAgfCAgMTMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BhcnNlci55ICAgICAgICB8ICAxMCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGxhbm5lci5jICAgICAgIHwgMjY2ICsrKysrKysrKysrKysrLS0KIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwgICAgICAgfCAgIDcgKy0KIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jICAgICAgICAgfCAgMTMgKwogY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jICAgICAgICB8ICA3MSArKysrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9zcWwvbm9fam9pbi5zcWwgICAgICB8IDEwMSArKysrKysrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9ub19zY2FuLnNxbCAgICAgIHwgMTMyICsrKysrKysr CiBkb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgICAgICAgICAgICAgIHwgMTI5ICsr KysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMzc3IGluc2VydGlvbnMoKyksIDIzIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvbm9fam9pbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL25vX3NjYW4ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvbm9fam9pbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9ub19zY2FuLnNxbAoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L01ha2VmaWxlCmluZGV4IGM4NDQ4NDZkZDU0Li45ZGI1MzU3MzlkMCAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL01ha2VmaWxlCkBAIC0xOSw4ICsxOSw4IEBAIEhFQURFUlNfcGdfcGxhbl9hZHZp Y2UgPSBwZ19wbGFuX2FkdmljZS5oCiAKIFBHRklMRURFU0MgPSAicGdfcGxhbl9hZHZpY2Ug LSBoZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbiIKIAotUkVHUkVTUyA9IGFs dGVybmF0aXZlcyBnYXRoZXIgam9pbl9vcmRlciBqb2luX3N0cmF0ZWd5IHBhcnRpdGlvbndp c2UgXAotCXByZXBhcmVkIHNjYW4gc2VtaWpvaW4gc3ludGF4CitSRUdSRVNTID0gYWx0ZXJu YXRpdmVzIGdhdGhlciBqb2luX29yZGVyIGpvaW5fc3RyYXRlZ3kgbm9fam9pbiBub19zY2Fu IFwKKwlwYXJ0aXRpb253aXNlIHByZXBhcmVkIHNjYW4gc2VtaWpvaW4gc3ludGF4CiAKIFRB UF9URVNUUyA9IDEKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9ub19qb2luLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbm9f am9pbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0NmIx YWM1NGU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9ub19qb2luLm91dApAQCAtMCwwICsxLDMxNyBAQAorTE9BRCAncGdfcGxhbl9hZHZp Y2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRF IFRBQkxFIG5vX2pvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIG5vX2pv aW5fZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIG5vX2pvaW5fZGltOworQ1JFQVRFIFRBQkxF IG5vX2pvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2Vy IG5vdCBudWxsIHJlZmVyZW5jZXMgbm9fam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBub19qb2luX2ZhY3QKKwlTRUxF Q1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFU RSBJTkRFWCBub19qb2luX2ZhY3RfZGltX2lkIE9OIG5vX2pvaW5fZmFjdCAoZGltX2lkKTsK K1ZBQ1VVTSBBTkFMWVpFIG5vX2pvaW5fZmFjdDsKKy0tIEJhc2VsaW5lOiBoYXNoIGpvaW4g d2l0aCBkIG9uIHRoZSBpbm5lciBzaWRlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBT Y2FuIG9uIG5vX2pvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIG5vX2pvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMCByb3dzKQorCistLSBOT19IQVNIX0pPSU4oZCk6IGQgc3RheXMg aW5uZXIsIHBsYW5uZXIgZmFsbHMgYmFjayB0byBhbm90aGVyIG1ldGhvZC4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19IQVNIX0pPSU4oZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pv aW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBu b19qb2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZi5k aW1faWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIG5vX2pvaW5fZGltX3BrZXkgb24gbm9fam9pbl9kaW0gZAorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBOT19IQVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUVNT0la RShkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMubm9fam9pbl9k aW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworQ09NTUlUOworLS0g Tk9fSEFTSF9KT0lOKGYpOiB0aGUgam9pbi1vcmRlciBjb25zdHJhaW50IGZvcmNlcyBmIHRv IHRoZSBpbm5lciBzaWRlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05PX0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgbm9fam9pbl9kaW1fcGtleSBvbiBub19qb2luX2RpbSBk CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBub19qb2luX2ZhY3RfZGltX2lkIG9uIG5vX2pv aW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19IQVNIX0pPSU4oZikg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5u b19qb2luX2RpbV9wa2V5IGYgcHVibGljLm5vX2pvaW5fZmFjdF9kaW1faWQpCisgICBOT19H QVRIRVIoZiBkKQorKDExIHJvd3MpCisKK0NPTU1JVDsKKy0tIE5PX05FU1RFRF9MT09QKGYp OiBmIGZvcmNlZCBpbm5lciwgYWxsIE5MIHZhcmlhbnRzIGZvcmJpZGRlbiAtPiBtZXJnZSBq b2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX05F U1RFRF9MT09QKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdl IEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBub19qb2luX2RpbV9wa2V5IG9uIG5vX2pvaW5fZGltIGQKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIG5vX2pvaW5fZmFjdF9kaW1faWQgb24gbm9fam9pbl9mYWN0IGYK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX05FU1RFRF9MT09QKGYpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMubm9fam9pbl9k aW1fcGtleSBmIHB1YmxpYy5ub19qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMSByb3dzKQorCitDT01NSVQ7CistLSBOT19NRVJHRV9KT0lOKGQpOiBkIGFscmVh ZHkgaW5uZXIsIGhhc2ggam9pbiBzdGlsbCBhbGxvd2VkIC0+IHBsYW4gdW5jaGFuZ2VkLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX01FUkdFX0pP SU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBD b25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZmFj dCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX01FUkdFX0pPSU4oZCkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQor KDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIFN0YWNraW5nOiBOT19IQVNIX0pPSU4oZikgKyBO T19ORVNURURfTE9PUChmKSBsZWF2ZXMgb25seSBtZXJnZSBqb2luLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0hBU0hfSk9JTihmKSBOT19ORVNU RURfTE9PUChmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBK b2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgbm9fam9pbl9kaW1fcGtleSBvbiBub19qb2luX2RpbSBkCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBub19qb2luX2ZhY3RfZGltX2lkIG9uIG5vX2pvaW5fZmFjdCBmCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19IQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAq LworICAgTk9fTkVTVEVEX0xPT1AoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQor ICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ub19qb2luX2RpbV9wa2V5IGYgcHVibGljLm5vX2pv aW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1J VDsKKy0tIFNwZWNpZmljIE5PXyB2YXJpYW50cyB0YXJnZXRpbmcgZCwgYWxyZWFkeSB0aGUg aW5uZXIgc2lkZTogZm9yYmlkZGluZyBhbnkgb25lCistLSBOTCBvciBtZXJnZSB2YXJpYW50 IGxlYXZlcyBoYXNoIGpvaW4gYXZhaWxhYmxlLCBzbyB0aGUgcGxhbiBpcyB1bmNoYW5nZWQu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fTkVTVEVE X0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBv biBub19qb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBub19qb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19ORVNURURf TE9PUF9QTEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkK KyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdOT19ORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBK T0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1f aWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZmFjdCBmCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZGltIGQKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIE5PX05FU1RFRF9MT09QX01FTU9JWkUoZCkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg SEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEy IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkK KyAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBOT19ORVNURURfTE9PUF9NQVRFUklBTElaRShkKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pP SU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19NRVJHRV9KT0lOX1BM QUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFz aCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5f ZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5f ZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX01FUkdFX0pPSU5fUExBSU4o ZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRI RVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19q b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lk ID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2ZhY3QgZgorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub19qb2luX2RpbSBkCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBOT19NRVJHRV9KT0lOX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAg IEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygx MiByb3dzKQorCitDT01NSVQ7CistLSBDb25mbGljdDogc2FtZSBtZXRob2QgcmVxdWlyZWQg YW5kIGZvcmJpZGRlbjsgYm90aCBtYXJrZWQgY29uZmxpY3RpbmcuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGYpIE5PX0hBU0hfSk9J TihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisg ICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgbm9fam9pbl9kaW1fcGtleSBvbiBub19qb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBub19qb2luX2ZhY3RfZGltX2lkIG9uIG5vX2pvaW5fZmFjdCBmCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCwgY29uZmxpY3Rp bmcsIGZhaWxlZCAqLworICAgTk9fSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQsIGNvbmZsaWN0 aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisg ICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLm5vX2pvaW5f ZGltX3BrZXkgZiBwdWJsaWMubm9fam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm8gY29uZmxpY3Q6IE5PX0hBU0hfSk9J TihmKSBhbmQgYSBwb3NpdGl2ZSB0YWcgZm9yIGEgZGlmZmVyZW50IG1ldGhvZC4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19IQVNIX0pPSU4oZikg TkVTVEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgLT4gIFNlcSBTY2FuIG9uIG5vX2pvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIG5vX2pvaW5fZmFjdF9kaW1faWQgb24gbm9fam9pbl9mYWN0IGYKKyAgICAgICAgIElu ZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Tk9fSEFTSF9KT0lOKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGQgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5E RVhfU0NBTihmIHB1YmxpYy5ub19qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMyByb3dzKQorCitDT01NSVQ7CistLSBBIGNvbmZsaWN0IG9uIG9uZSBtZXRob2Qg bXVzdCBub3QgY2FuY2VsIGVuZm9yY2VtZW50IG9mIGFuIHVucmVsYXRlZCBOT18KKy0tIHRh ZzogTUVSR0VfSk9JTl9QTEFJTihkKSBjb25mbGljdHMgd2l0aCBOT19NRVJHRV9KT0lOKGQp IGhlcmUsIGJ1dAorLS0gTk9fSEFTSF9KT0lOKGQpIGRvZXMgbm90LCBzbyBpdCBzdGlsbCBh cHBsaWVzLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01F UkdFX0pPSU5fUExBSU4oZCkgTk9fTUVSR0VfSk9JTihkKSBOT19IQVNIX0pPSU4oZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pv aW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBu b19qb2luX2ZhY3QgZgorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZi5k aW1faWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIG5vX2pvaW5fZGltX3BrZXkgb24gbm9fam9pbl9kaW0gZAorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGQpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5n LCBmYWlsZWQgKi8KKyAgIE5PX01FUkdFX0pPSU4oZCkgLyogbWF0Y2hlZCwgY29uZmxpY3Rp bmcgKi8KKyAgIE5PX0hBU0hfSk9JTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9NRU1PSVpF KGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ub19qb2luX2Rp bV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNyByb3dzKQorCitDT01NSVQ7CitEUk9Q IFRBQkxFIG5vX2pvaW5fZmFjdDsKK0RST1AgVEFCTEUgbm9fam9pbl9kaW07CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL25vX3NjYW4ub3V0IGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9ub19zY2FuLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODQ0MzZmY2Q2YjIKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL25vX3NjYW4ub3V0CkBAIC0w LDAgKzEsMjgzIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NF VCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NF VCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CitDUkVBVEUgVEFCTEUgbm9fc2Nhbl90YWJs ZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBub19zY2FuX3RhYmxlCisJU0VMRUNUIGcsICdz b21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIG5vX3NjYW5fdGFibGU7CistLSBCYXNlbGluZXMgd2l0aG91dCBhZHZp Y2U6IHNlcSBzY2FuIGZvciBhIGZ1bGwgcmVhZCwgaW5kZXggc2NhbiBmb3IgYSBsb29rdXAu CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9f c2Nhbl90YWJsZTsKKyAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub19zY2FuX3RhYmxlCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihub19zY2FuX3RhYmxlKQorKDQgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBub19zY2FuX3RhYmxlX3BrZXkgb24gbm9fc2Nh bl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4obm9fc2Nhbl90YWJsZSBwdWJsaWMubm9fc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKG5vX3NjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBOT19T RVFfU0NBTiB3aXRoIG5vIGluZGV4YWJsZSBxdWFsOiBubyBhbHRlcm5hdGl2ZSwgc28gdGhl IGFkdmljZSBmYWlscy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZTsKKyAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBub19zY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgTk9fU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm9fc2Nhbl90 YWJsZSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlU OworLS0gTk9fU0VRX1NDQU4gd2l0aCBhbiBpbmRleGFibGUgcXVhbDogZmFsbHMgYmFjayB0 byBpbmRleCBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgbm9fc2Nhbl90YWJsZV9wa2V5IG9uIG5vX3Nj YW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKG5vX3NjYW5fdGFibGUgcHVibGlj Lm5vX3NjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3RhYmxlKQorKDcg cm93cykKKworQ09NTUlUOworLS0gTk9fSU5ERVhfU0NBTjogZmFsbHMgYmFjayB0byBiaXRt YXAgaGVhcCBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05PX0lOREVYX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRt YXAgSGVhcCBTY2FuIG9uIG5vX3NjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGEgPSAx KQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG5vX3NjYW5fdGFibGVfcGtleQorICAg ICAgICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Tk9fSU5ERVhfU0NBTihub19zY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxlKQorICAg Tk9fR0FUSEVSKG5vX3NjYW5fdGFibGUpCisoOSByb3dzKQorCitDT01NSVQ7CistLSBOT19J TkRFWF9PTkxZX1NDQU46IGZhbGxzIGJhY2sgdG8gYSBwbGFpbiBpbmRleCBzY2FuLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0lOREVYX09OTFlf U0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCBhIEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIG5vX3NjYW5fdGFibGVfcGtleSBvbiBub19zY2FuX3RhYmxlCisg ICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19J TkRFWF9PTkxZX1NDQU4obm9fc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4obm9fc2Nhbl90YWJsZSBwdWJsaWMubm9f c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKG5vX3NjYW5fdGFibGUpCisoNyByb3dz KQorCitDT01NSVQ7CistLSBOT19CSVRNQVBfSEVBUF9TQ0FOOiB3aXRoIG9ubHkgYSBCUklO IGluZGV4IGF2YWlsYWJsZSwgZmFsbHMgYmFjayB0byBzZXEgc2Nhbi4KK0NSRUFURSBJTkRF WCBub19zY2FuX3RhYmxlX2IgT04gbm9fc2Nhbl90YWJsZSBVU0lORyBicmluIChiKTsKK1ZB Q1VVTSBBTkFMWVpFIG5vX3NjYW5fdGFibGU7CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnTk9fQklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxlKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9f c2Nhbl90YWJsZSBXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub19z Y2FuX3RhYmxlCisgICBGaWx0ZXI6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIE5PX0JJVE1BUF9IRUFQX1NDQU4obm9fc2Nhbl90YWJs ZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FO KG5vX3NjYW5fdGFibGUpCisgICBOT19HQVRIRVIobm9fc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKK0NPTU1JVDsKKy0tIE5PX1RJRF9TQ0FOOiBmYWxscyBiYWNrIHRvIHNlcSBzY2FuLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1RJRF9TQ0FO KG5vX3NjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbm9fc2Nh bl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIE5PX1RJRF9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihub19zY2FuX3RhYmxl KQorICAgTk9fR0FUSEVSKG5vX3NjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7Cist LSBNdWx0aXBsZSBOT18gc2NhbiB0YWdzIHN0YWNrIHdpdGhvdXQgY29uZmxpY3QuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fU0VRX1NDQU4obm9f c2Nhbl90YWJsZSkgTk9fQklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIG5vX3NjYW5fdGFi bGVfcGtleSBvbiBub19zY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSAvKiBt YXRjaGVkICovCisgICBOT19CSVRNQVBfSEVBUF9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKG5vX3Nj YW5fdGFibGUgcHVibGljLm5vX3NjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihub19z Y2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gQ29uZmxpY3Q6IHNhbWUgbWV0 aG9kIHJlcXVpcmVkIGFuZCBmb3JiaWRkZW47IGJvdGggY29uZmxpY3RpbmcsIG5laXRoZXIg YXBwbGllZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihub19zY2FuX3RhYmxlKSBOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nh bl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vX3Nj YW5fdGFibGUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKG5vX3NjYW5f dGFibGUpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgICBOT19TRVFfU0NBTihub19z Y2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihub19zY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gTm8gY29uZmxp Y3Q6IE5PX1NFUV9TQ0FOIGFuZCBhIHBvc2l0aXZlIElOREVYX1NDQU4gYXJlIGNvbXBhdGli bGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fU0VR X1NDQU4obm9fc2Nhbl90YWJsZSkgSU5ERVhfU0NBTihub19zY2FuX3RhYmxlIG5vX3NjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIG5vX3NjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIG5vX3NjYW5fdGFibGVfcGtleSBvbiBub19zY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgICBJTkRFWF9T Q0FOKG5vX3NjYW5fdGFibGUgbm9fc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub19zY2FuX3RhYmxlIHB1 YmxpYy5ub19zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIobm9fc2Nhbl90YWJsZSkK Kyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIE5vIGNvbmZsaWN0OiBCSVRNQVBfSEVBUF9TQ0FO IGFuZCBOT19JTkRFWF9PTkxZX1NDQU4gb25seSBzaGFyZSB0aGUKKy0tIFBHU19DT05TSURF Ul9JTkRFWE9OTFkgZW5mb3JjZW1lbnQgYml0LCBub3QgYW4gYWN0dWFsIHNjYW4gbWV0aG9k LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9I RUFQX1NDQU4obm9fc2Nhbl90YWJsZSkgTk9fSU5ERVhfT05MWV9TQ0FOKG5vX3NjYW5fdGFi bGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBub19zY2FuX3RhYmxlIFdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBT Y2FuIG9uIG5vX3NjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0 IDgnOjp0ZXh0KQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIG5vX3NjYW5fdGFibGVf YgorICAgICAgICAgSW5kZXggQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihub19zY2FuX3RhYmxl KSAvKiBtYXRjaGVkICovCisgICBOT19JTkRFWF9PTkxZX1NDQU4obm9fc2Nhbl90YWJsZSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQ X1NDQU4obm9fc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihub19zY2FuX3RhYmxlKQorKDEw IHJvd3MpCisKK0NPTU1JVDsKKy0tIEEgY29uZmxpY3Qgb24gb25lIG1ldGhvZCBtdXN0IG5v dCBjYW5jZWwgZW5mb3JjZW1lbnQgb2YgYW4gdW5yZWxhdGVkIE5PXworLS0gdGFnOiBOT19T RVFfU0NBTiBjb25mbGljdHMgd2l0aCBTRVFfU0NBTiBoZXJlLCBidXQgTk9fQklUTUFQX0hF QVBfU0NBTgorLS0gZG9lcyBub3QsIHNvIGl0IHN0aWxsIGFwcGxpZXMuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm9fc2Nhbl90YWJs ZSkgTk9fU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkgTk9fQklUTUFQX0hFQVBfU0NBTihub19z Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vX3NjYW5fdGFibGUKKyAgIEZp bHRlcjogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4obm9fc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgY29uZmxpY3Rpbmcg Ki8KKyAgIE5PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGNvbmZsaWN0 aW5nLCBmYWlsZWQgKi8KKyAgIE5PX0JJVE1BUF9IRUFQX1NDQU4obm9fc2Nhbl90YWJsZSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKG5v X3NjYW5fdGFibGUpCisgICBOT19HQVRIRVIobm9fc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisK K0NPTU1JVDsKKy0tIEEgY29uZmxpY3RpbmcgSU5ERVhfU0NBTiByZXF1ZXN0IG11c3Qgbm90 IGhhdmUgdGhlIHNpZGUgZWZmZWN0IG9mCistLSBkaXNhYmxpbmcgZXZlcnkgb3RoZXIgaW5k ZXg6IHdpdGggdHdvIGVxdWl2YWxlbnQgaW5kZXhlcywgYW4KKy0tIElOREVYX1NDQU4vTk9f SU5ERVhfU0NBTiBjb25mbGljdCBvbiB0aGUgcmVsYXRpb24gbXVzdCBsZWF2ZSB0aGUKKy0t IHBsYW5uZXIncyBuYXR1cmFsIGluZGV4IGNob2ljZSBhbG9uZS4KK0NSRUFURSBUQUJMRSBu b19zY2FuX2lkeF9jb25mbGljdCAoYSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworSU5TRVJUIElOVE8gbm9fc2Nhbl9pZHhfY29uZmxpY3QgU0VMRUNUIGcg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIG5vX3Nj YW5faWR4X2NvbmZsaWN0X2ExIE9OIG5vX3NjYW5faWR4X2NvbmZsaWN0IChhKTsKK0NSRUFU RSBJTkRFWCBub19zY2FuX2lkeF9jb25mbGljdF9hMiBPTiBub19zY2FuX2lkeF9jb25mbGlj dCAoYSk7CitWQUNVVU0gQU5BTFlaRSBub19zY2FuX2lkeF9jb25mbGljdDsKKy0tIEJhc2Vs aW5lOiB3aGljaCBpbmRleCBkb2VzIHRoZSBwbGFubmVyIG5hdHVyYWxseSBwaWNrPworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5f aWR4X2NvbmZsaWN0IE9SREVSIEJZIGEgTElNSVQgNTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIG5vX3NjYW5faWR4X2NvbmZsaWN0X2EyIG9uIG5vX3NjYW5faWR4X2Nv bmZsaWN0CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKG5v X3NjYW5faWR4X2NvbmZsaWN0IHB1YmxpYy5ub19zY2FuX2lkeF9jb25mbGljdF9hMikKKyAg IE5PX0dBVEhFUihub19zY2FuX2lkeF9jb25mbGljdCkKKyg1IHJvd3MpCisKKy0tIElOREVY X1NDQU4gbmFtZXMgdGhlIG90aGVyIGluZGV4LCBhbmQgTk9fSU5ERVhfU0NBTiBmb3JiaWRz IGluZGV4IHNjYW5zCistLSBlbnRpcmVseSBvbiB0aGUgc2FtZSByZWxhdGlvbiwgc28gdGhl IHR3byBjb25mbGljdDsgbmVpdGhlciBzaG91bGQgaGF2ZQorLS0gYW55IGVmZmVjdCwgYW5k IGluIHBhcnRpY3VsYXIgdGhlIHVuLW5hbWVkIGluZGV4IG11c3Qgbm90IGJlIGRpc2FibGVk LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0KKwknSU5ERVhf U0NBTihub19zY2FuX2lkeF9jb25mbGljdCBub19zY2FuX2lkeF9jb25mbGljdF9hMSkgTk9f SU5ERVhfU0NBTihub19zY2FuX2lkeF9jb25mbGljdCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5faWR4X2NvbmZsaWN0IE9S REVSIEJZIGEgTElNSVQgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExp bWl0CisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIG5vX3NjYW5faWR4X2NvbmZsaWN0 X2EyIG9uIG5vX3NjYW5faWR4X2NvbmZsaWN0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKG5vX3NjYW5faWR4X2NvbmZsaWN0IG5vX3NjYW5faWR4X2NvbmZsaWN0 X2ExKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgICBOT19JTkRFWF9T Q0FOKG5vX3NjYW5faWR4X2NvbmZsaWN0KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihub19zY2FuX2lk eF9jb25mbGljdCBwdWJsaWMubm9fc2Nhbl9pZHhfY29uZmxpY3RfYTIpCisgICBOT19HQVRI RVIobm9fc2Nhbl9pZHhfY29uZmxpY3QpCisoOCByb3dzKQorCitDT01NSVQ7CitEUk9QIFRB QkxFIG5vX3NjYW5faWR4X2NvbmZsaWN0OworLS0gU2NhbiB0YWdzIGZvcmJpZCBzdWJsaXN0 cyAoc2ltcGxlX3RhcmdldF9saXN0KTogdGhpcyBpcyBhIHN5bnRheCBlcnJvci4KK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fU0VRX1NDQU4oKG5vX3NjYW5fdGFibGUgbm9f c2Nhbl90YWJsZSkpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiTk9fU0VRX1NDQU4oKG5vX3NjYW5fdGFibGUgbm9f c2Nhbl90YWJsZSkpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4 IGVycm9yIGF0IG9yIG5lYXIgIigiCitEUk9QIFRBQkxFIG5vX3NjYW5fdGFibGU7CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9tZXNvbi5idWlsZAppbmRleCBiYmFiNjc2YmUzMS4uY2U3ZWFmNjMx ZjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZApAQCAtNTcsNiArNTcsOCBA QCB0ZXN0cyArPSB7CiAgICAgICAnZ2F0aGVyJywKICAgICAgICdqb2luX29yZGVyJywKICAg ICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdub19qb2luJywKKyAgICAgICdub19zY2Fu JywKICAgICAgICdwYXJ0aXRpb253aXNlJywKICAgICAgICdwcmVwYXJlZCcsCiAgICAgICAn c2NhbicsCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKaW5kZXggMDFkYjhkMjRjZDAu LjAyMDI1YjYxZGQzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf YXN0LmMKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCkBAIC01OCw4 ICs1OCwzNCBAQCBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlw ZSBhZHZpY2VfdGFnKQogCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKIAkJY2Fz ZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKIAkJCXJldHVybiAiTkVTVEVEX0xPT1Bf UExBSU4iOworCQljYXNlIFBHUEFfVEFHX05PX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1 cm4gIk5PX0JJVE1BUF9IRUFQX1NDQU4iOwogCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoK IAkJCXJldHVybiAiTk9fR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19OT19IQVNIX0pPSU46 CisJCQlyZXR1cm4gIk5PX0hBU0hfSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfTk9fSU5ERVhf T05MWV9TQ0FOOgorCQkJcmV0dXJuICJOT19JTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBH UEFfVEFHX05PX0lOREVYX1NDQU46CisJCQlyZXR1cm4gIk5PX0lOREVYX1NDQU4iOworCQlj YXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU46CisJCQlyZXR1cm4gIk5PX01FUkdFX0pPSU4i OworCQljYXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1 cm4gIk5PX01FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX05PX01F UkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk5PX01FUkdFX0pPSU5fUExBSU4iOworCQlj YXNlIFBHUEFfVEFHX05PX05FU1RFRF9MT09QOgorCQkJcmV0dXJuICJOT19ORVNURURfTE9P UCI7CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQly ZXR1cm4gIk5PX05FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19O T19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJOT19ORVNURURfTE9PUF9NRU1P SVpFIjsKKwkJY2FzZSBQR1BBX1RBR19OT19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVy biAiTk9fTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIFBHUEFfVEFHX05PX1NFUV9TQ0FO OgorCQkJcmV0dXJuICJOT19TRVFfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfTk9fVElEX1ND QU46CisJCQlyZXR1cm4gIk5PX1RJRF9TQ0FOIjsKIAkJY2FzZSBQR1BBX1RBR19QQVJUSVRJ T05XSVNFOgogCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKIAkJY2FzZSBQR1BBX1RBR19T RU1JSk9JTl9OT05fVU5JUVVFOgpAQCAtMTM1LDggKzE2MSwzNCBAQCBwZ3BhX3BhcnNlX2Fk dmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQogCQkJCXJldHVybiBQR1BB X1RBR19ORVNURURfTE9PUF9NRU1PSVpFOwogCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRf bG9vcF9wbGFpbiIpID09IDApCiAJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX1BM QUlOOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19iaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fQklUTUFQX0hFQVBfU0NBTjsKIAkJCWlmIChzdHJj bXAodGFnLCAibm9fZ2F0aGVyIikgPT0gMCkKIAkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FU SEVSOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19oYXNoX2pvaW4iKSA9PSAwKQorCQkJCXJl dHVybiBQR1BBX1RBR19OT19IQVNIX0pPSU47CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX2lu ZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05PX0lOREVYX09O TFlfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9faW5kZXhfc2NhbiIpID09IDApCisJ CQkJcmV0dXJuIFBHUEFfVEFHX05PX0lOREVYX1NDQU47CisJCQlpZiAoc3RyY21wKHRhZywg Im5vX21lcmdlX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19NRVJHRV9K T0lOOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19tZXJnZV9qb2luX21hdGVyaWFsaXplIikg PT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRTsK KwkJCWlmIChzdHJjbXAodGFnLCAibm9fbWVyZ2Vfam9pbl9wbGFpbiIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX05PX01FUkdFX0pPSU5fUExBSU47CisJCQlpZiAoc3RyY21wKHRh ZywgIm5vX25lc3RlZF9sb29wIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fTkVT VEVEX0xPT1A7CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX25lc3RlZF9sb29wX21hdGVyaWFs aXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX25lc3RlZF9sb29wX21lbW9pemUiKSA9 PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19ORVNURURfTE9PUF9NRU1PSVpFOworCQkJ aWYgKHN0cmNtcCh0YWcsICJub19uZXN0ZWRfbG9vcF9wbGFpbiIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX05PX05FU1RFRF9MT09QX1BMQUlOOworCQkJaWYgKHN0cmNtcCh0YWcs ICJub19zZXFfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05PX1NFUV9TQ0FO OworCQkJaWYgKHN0cmNtcCh0YWcsICJub190aWRfc2NhbiIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX05PX1RJRF9TQ0FOOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3AnOgogCQkJaWYg KHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9hc3QuaAppbmRleCA0YmQ2ZmZhNWUzYS4uYzE4ZmMxNjRhYmMgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTkzLDcgKzkzLDIwIEBAIHR5cGVkZWYgZW51bSBw Z3BhX2FkdmljZV90YWdfdHlwZQogCVBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpF LAogCVBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkUsCiAJUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU4sCisJUEdQQV9UQUdfTk9fQklUTUFQX0hFQVBfU0NBTiwKIAlQR1BBX1RBR19O T19HQVRIRVIsCisJUEdQQV9UQUdfTk9fSEFTSF9KT0lOLAorCVBHUEFfVEFHX05PX0lOREVY X09OTFlfU0NBTiwKKwlQR1BBX1RBR19OT19JTkRFWF9TQ0FOLAorCVBHUEFfVEFHX05PX01F UkdFX0pPSU4sCisJUEdQQV9UQUdfTk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlQR1BB X1RBR19OT19NRVJHRV9KT0lOX1BMQUlOLAorCVBHUEFfVEFHX05PX05FU1RFRF9MT09QLAor CVBHUEFfVEFHX05PX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX05PX05F U1RFRF9MT09QX01FTU9JWkUsCisJUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfUExBSU4sCisJ UEdQQV9UQUdfTk9fU0VRX1NDQU4sCisJUEdQQV9UQUdfTk9fVElEX1NDQU4sCiAJUEdQQV9U QUdfUEFSVElUSU9OV0lTRSwKIAlQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFLAogCVBH UEFfVEFHX1NFTUlKT0lOX1VOSVFVRSwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9wYXJzZXIueSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJz ZXIueQppbmRleCA1ODExYTZlNWU1Ni4uMzg2ODRiZWY3MjcgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTEwOCw4ICsxMDgsMTggQEAgYWR2aWNlX2l0ZW06 IFRPS19UQUdfSk9JTl9PUkRFUiAnKCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKIAkJ CQkkJC0+dGFnID0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKIAkJCWVsc2UgaWYgKHN0 cmNtcCgkMSwgImRvX25vdF9zY2FuIikgPT0gMCkKIAkJCQkkJC0+dGFnID0gUEdQQV9UQUdf RE9fTk9UX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJub19iaXRtYXBfaGVhcF9z Y2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfTk9fQklUTUFQX0hFQVBfU0NB TjsKIAkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIm5vX2dhdGhlciIpID09IDApCiAJCQkJJCQt PnRhZyA9IFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIm5v X2luZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05PX0lO REVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIm5vX2luZGV4X3NjYW4i KSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19JTkRFWF9TQ0FOOworCQkJZWxz ZSBpZiAoc3RyY21wKCQxLCAibm9fc2VxX3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQ R1BBX1RBR19OT19TRVFfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIm5vX3RpZF9z Y2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQQV9UQUdfTk9fVElEX1NDQU47CiAJCQll bHNlIGlmIChzdHJjbXAoJDEsICJzZXFfc2NhbiIpID09IDApCiAJCQkJJCQtPnRhZyA9IFBH UEFfVEFHX1NFUV9TQ0FOOwogCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAidGlkX3NjYW4iKSA9 PSAwKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKaW5kZXggYjMzMjli NzkzYWEuLjYxY2MyZmI5YTQ1IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGxhbm5lci5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFu bmVyLmMKQEAgLTE1NSw2ICsxNTUsOSBAQCBzdGF0aWMgYm9vbCBwZ3BhX3NlbWlqb2luX3Bl cm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKIAkJCQkJCQkJ CSAgIGJvb2wgb3V0ZXJfaXNfbnVsbGFibGUsCiAJCQkJCQkJCQkgICBib29sICpyZXN0cmlj dF9tZXRob2QpOwogCitzdGF0aWMgdWludDY0IHBncGFfbm9fam9pbl9tYXNrX2Zyb21fYWR2 aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpOworc3RhdGljIHVpbnQ2NCBwZ3Bh X25vX3NjYW5fbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFn KTsKKwogc3RhdGljIExpc3QgKnBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAq bGlzdCwgcGdwYV90cm92ZSAqdHJvdmUsCiAJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlIHR5cGUsCiAJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZp ZXJzLApAQCAtOTQ3LDggKzk1MCwxMiBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRo X2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAogCUJpdG1h cHNldCAgKmpvX2RlbnlfaW5kZXhlcyA9IE5VTEw7CiAJQml0bWFwc2V0ICAqam9fZGVueV9y ZWxfaW5kZXhlcyA9IE5VTEw7CiAJQml0bWFwc2V0ICAqam1faW5kZXhlcyA9IE5VTEw7Ci0J Ym9vbAkJam1fY29uZmxpY3QgPSBmYWxzZTsKKwlib29sCQlqbV9wb3NfY29uZmxpY3QgPSBm YWxzZTsJLyogcG9zaXRpdmUgdGFncyBkaXNhZ3JlZSAqLworCWJvb2wJCWptX3Bvc19uZWdf Y29uZmxpY3QgPSBmYWxzZTsJLyogYSBwb3NpdGl2ZSBtZXRob2QgaXMKKwkJCQkJCQkJCQkJ CSAqIGZvcmJpZGRlbiAqLwogCXVpbnQ2NAkJam9pbl9tYXNrID0gMDsKKwlCaXRtYXBzZXQg ICpub19qbV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpub19qbV9jb25mbGljdF9p bmRleGVzID0gTlVMTDsKIAlCaXRtYXBzZXQgICpzal9wZXJtaXRfaW5kZXhlcyA9IE5VTEw7 CiAJQml0bWFwc2V0ICAqc2pfZGVueV9pbmRleGVzID0gTlVMTDsKIApAQCAtMTA0MywxMiAr MTA1MCw0MCBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlw ZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAogCQkJewogCQkJCWptX2luZGV4ZXMg PSBibXNfYWRkX21lbWJlcihqbV9pbmRleGVzLCBpKTsKIAkJCQlpZiAoam9pbl9tYXNrICE9 IDAgJiYgam9pbl9tYXNrICE9IG15X2pvaW5fbWFzaykKLQkJCQkJam1fY29uZmxpY3QgPSB0 cnVlOworCQkJCQlqbV9wb3NfY29uZmxpY3QgPSB0cnVlOwogCQkJCWpvaW5fbWFzayA9IG15 X2pvaW5fbWFzazsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyogSGFuZGxlIE5P XyBqb2luIG1ldGhvZCBhZHZpY2UuICovCisJCXsKKwkJCXVpbnQ2NAkJbXlfbm9fam9pbl9t YXNrOworCisJCQlteV9ub19qb2luX21hc2sgPSBwZ3BhX25vX2pvaW5fbWFza19mcm9tX2Fk dmljZV90YWcoZW50cnktPnRhZyk7CisJCQlpZiAobXlfbm9fam9pbl9tYXNrICE9IDApCisJ CQl7CisJCQkJYm9vbAkJcGVybWl0OworCQkJCWJvb2wJCXJlc3RyaWN0X21ldGhvZDsKKwor CQkJCS8qCisJCQkJICogTk9fIGpvaW4gdGFncyBpbXBvc2UgdGhlIHNhbWUgam9pbi1vcmRl ciBjb25zdHJhaW50IGFzCisJCQkJICogcG9zaXRpdmUgb25lczogdGhlIHRhcmdldCBtdXN0 IGJlIHRoZSBpbm5lciByZWwuICBSZXVzZQorCQkJCSAqIHBncGFfam9pbl9tZXRob2RfcGVy bWl0c19qb2luIHRvIGVuZm9yY2UgaXQuCisJCQkJICovCisJCQkJcGVybWl0ID0gcGdwYV9q b2luX21ldGhvZF9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ CQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJ CQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9k KTsKKwkJCQlpZiAoIXBlcm1pdCkKKwkJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9t ZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCQllbHNlIGlmIChyZXN0cmljdF9tZXRo b2QpCisJCQkJCW5vX2ptX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihub19qbV9pbmRleGVz LCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCiAJCS8qIEhhbmRsZSBzZW1pam9p biB1bmlxdWVuZXNzIGFkdmljZS4gKi8KIAkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdf U0VNSUpPSU5fVU5JUVVFIHx8CiAJCQllbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lO X05PTl9VTklRVUUpCkBAIC0xMTE4LDEzICsxMTUzLDQ3IEBAIHBncGFfcGxhbm5lcl9hcHBs eV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19tYXNr X3AsCiAJfQogCiAJLyoKLQkgKiBJZiBtb3JlIHRoYW4gb25lIGpvaW4gbWV0aG9kIHNwZWNp ZmljYXRpb24gaXMgcmVsZXZhbnQgaGVyZSBhbmQgdGhleQotCSAqIGRpZmZlciwgbWFyayB0 aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKiBJZiBtb3JlIHRoYW4gb25lIHBvc2l0aXZl IGpvaW4gbWV0aG9kIHNwZWNpZmljYXRpb24gaXMgcmVsZXZhbnQgaGVyZQorCSAqIGFuZCB0 aGV5IGRpZmZlciwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KIAkgKi8KLQlpZiAo am1fY29uZmxpY3QpCisJaWYgKGptX3Bvc19jb25mbGljdCkKIAkJcGdwYV90cm92ZV9zZXRf ZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCiAJCQkJCQkJIFBHUEFfRkJf Q09ORkxJQ1RJTkcpOwogCisJLyoKKwkgKiBEZXRlY3QgcG9zaXRpdmUtdnMtbmVnYXRpdmUg am9pbiBtZXRob2QgY29uZmxpY3Q6IGEgbWV0aG9kIGJvdGgKKwkgKiByZXF1aXJlZCBieSBh IHBvc2l0aXZlIHRhZyBhbmQgZm9yYmlkZGVuIGJ5IGEgTk9fIHRhZy4gIENoZWNrIGVhY2gg Tk9fCisJICogdGFnIGluZGVwZW5kZW50bHksIHNvIHRoYXQgYSBjbGFzaCBvbiBvbmUgbWV0 aG9kIGRvZXNuJ3QgY2F1c2UgYW4KKwkgKiB1bnJlbGF0ZWQgTk9fIHRhZyBmb3IgYSBkaWZm ZXJlbnQgbWV0aG9kIHRvIGJlIHRyZWF0ZWQgYXMgY29uZmxpY3RpbmcKKwkgKiBvciBsZWZ0 IHVuZW5mb3JjZWQuCisJICovCisJaWYgKGpvaW5fbWFzayAhPSAwKQorCXsKKwkJaW50CQkJ aiA9IC0xOworCisJCXdoaWxlICgoaiA9IGJtc19uZXh0X21lbWJlcihub19qbV9pbmRleGVz LCBqKSkgPj0gMCkKKwkJeworCQkJdWludDY0CQlteV9ub19qb2luX21hc2s7CisKKwkJCW15 X25vX2pvaW5fbWFzayA9CisJCQkJcGdwYV9ub19qb2luX21hc2tfZnJvbV9hZHZpY2VfdGFn KHBqcy0+am9pbl9lbnRyaWVzW2pdLnRhZyk7CisJCQlpZiAoKGpvaW5fbWFzayAmIG15X25v X2pvaW5fbWFzaykgIT0gMCkKKwkJCXsKKwkJCQlqbV9wb3NfbmVnX2NvbmZsaWN0ID0gdHJ1 ZTsKKwkJCQlub19qbV9jb25mbGljdF9pbmRleGVzID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIo bm9fam1fY29uZmxpY3RfaW5kZXhlcywgaik7CisJCQl9CisJCX0KKworCQlpZiAobm9fam1f Y29uZmxpY3RfaW5kZXhlcyAhPSBOVUxMKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhwanMtPmpvaW5fZW50cmllcywgam1faW5kZXhlcywKKwkJCQkJCQkJIFBHUEFfRkJfQ09O RkxJQ1RJTkcpOworCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMs IG5vX2ptX2NvbmZsaWN0X2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX0ZCX0NPTkZMSUNUSU5H KTsKKwkJfQorCX0KKwogCS8qIElmIHNlbWlqb2luIGFkdmljZSBzYXlzIGJvdGggeWVzIGFu ZCBubywgbWFyayBpdCBhbGwgYXMgY29uZmxpY3RpbmcuICovCiAJaWYgKHNqX3Blcm1pdF9p bmRleGVzICE9IE5VTEwgJiYgc2pfZGVueV9pbmRleGVzICE9IE5VTEwpCiAJewpAQCAtMTE0 MywxOCArMTIxMiwzMCBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShK b2luVHlwZSBqb2ludHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAogCWlmICgoam9fZGVueV9p bmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSAmJgogCQlq b19wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQogCQkqcGdzX21hc2tfcCAmPSB+UEdTX0pPSU5f QU5ZOwotCWlmIChqb2luX21hc2sgIT0gMCAmJiAham1fY29uZmxpY3QpCisJaWYgKGpvaW5f bWFzayAhPSAwICYmICFqbV9wb3NfY29uZmxpY3QgJiYgIWptX3Bvc19uZWdfY29uZmxpY3Qp CiAJCSpwZ3NfbWFza19wICY9IH4oUEdTX0pPSU5fQU5ZICYgfmpvaW5fbWFzayk7CisJaWYg KG5vX2ptX2luZGV4ZXMgIT0gTlVMTCkKKwl7CisJCXVpbnQ2NAkJZW5mb3JjZV9ub19qb2lu X21hc2sgPSAwOworCQlpbnQJCQlqID0gLTE7CisKKwkJd2hpbGUgKChqID0gYm1zX25leHRf bWVtYmVyKG5vX2ptX2luZGV4ZXMsIGopKSA+PSAwKQorCQl7CisJCQlpZiAoYm1zX2lzX21l bWJlcihqLCBub19qbV9jb25mbGljdF9pbmRleGVzKSkKKwkJCQljb250aW51ZTsKKwkJCWVu Zm9yY2Vfbm9fam9pbl9tYXNrIHw9CisJCQkJcGdwYV9ub19qb2luX21hc2tfZnJvbV9hZHZp Y2VfdGFnKHBqcy0+am9pbl9lbnRyaWVzW2pdLnRhZyk7CisJCX0KKwkJKnBnc19tYXNrX3Ag Jj0gfmVuZm9yY2Vfbm9fam9pbl9tYXNrOworCX0KIAlpZiAoc2pfZGVueV9pbmRleGVzICE9 IE5VTEwgJiYgc2pfcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKIAkJKnBnc19tYXNrX3AgJj0g flBHU19KT0lOX0FOWTsKIH0KIAogLyoKLSAqIFRyYW5zbGF0ZSBhbiBhZHZpY2UgdGFnIGlu dG8gYSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4KKyAqIFRyYW5zbGF0ZSBhIHBv c2l0aXZlIGpvaW4gYWR2aWNlIHRhZyBpbnRvIGEgc3RyYXRlZ3kgbWFzayB0byBlbmZvcmNl LgogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0eXBlcyB0 aGF0IGRvbid0IHJlcHJlc2VudCBqb2luCi0gKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNhc2Vz LCB3ZSBqdXN0IHJldHVybiAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCi0gKiBh IHZhbGlkIG1hc2suCisgKiBSZXR1cm5zIDAgZm9yIHRhZ3MgdGhhdCBkb24ndCByZXByZXNl bnQgKHBvc2l0aXZlKSBqb2luIHN0cmF0ZWdpZXMuCiAgKi8KIHN0YXRpYyB1aW50NjQKIHBn cGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdf dHlwZSB0YWcpCkBAIC0xMTgwLDYgKzEyNjEsMzcgQEAgcGdwYV9qb2luX3N0cmF0ZWd5X21h c2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZykKIAl9CiB9CiAK Ky8qCisgKiBUcmFuc2xhdGUgYSBOT18gam9pbiBhZHZpY2UgdGFnIGludG8gYSBzdHJhdGVn eSBtYXNrIHRvIGZvcmJpZC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHRhZ3MgdGhhdCBhcmVu J3QgTk9fIGpvaW4gdGFncy4KKyAqLworc3RhdGljIHVpbnQ2NAorcGdwYV9ub19qb2luX21h c2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZykKK3sKKwlzd2l0 Y2ggKHRhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfTk9fSEFTSF9KT0lOOgorCQkJcmV0dXJu IFBHU19IQVNISk9JTjsKKwkJY2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOOgorCQkJcmV0 dXJuIFBHU19NRVJHRUpPSU5fQU5ZOworCQljYXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU5f TUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJ Y2FzZSBQR1BBX1RBR19OT19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuIFBHU19NRVJH RUpPSU5fUExBSU47CisJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1A6CisJCQlyZXR1 cm4gUEdTX05FU1RMT09QX0FOWTsKKwkJY2FzZSBQR1BBX1RBR19OT19ORVNURURfTE9PUF9N QVRFUklBTElaRToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkU7CisJCWNh c2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBQR1NfTkVT VExPT1BfTUVNT0laRTsKKwkJY2FzZSBQR1BBX1RBR19OT19ORVNURURfTE9PUF9QTEFJTjoK KwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4g MDsKKwl9Cit9CisKIC8qCiAgKiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpvaW4gb3JkZXIg YWR2aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KICAqCkBAIC0xNjE5LDYgKzE3MzEsNTAg QEAgcGdwYV9zZW1pam9pbl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5u ZXJfY291bnQsCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogVHJhbnNsYXRlIGEgTk9f IHNjYW4gYWR2aWNlIHRhZyBpbnRvIGEgc3RyYXRlZ3kgbWFzayB0byBmb3JiaWQuCisgKgor ICogUmV0dXJucyAwIGZvciB0YWdzIHRoYXQgYXJlbid0IE5PXyBzY2FuIHRhZ3MuCisgKi8K K3N0YXRpYyB1aW50NjQKK3BncGFfbm9fc2Nhbl9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3Bh X2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBH UEFfVEFHX05PX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gUEdTX0JJVE1BUFNDQU47 CisJCWNhc2UgUEdQQV9UQUdfTk9fSU5ERVhfT05MWV9TQ0FOOgorCQkJcmV0dXJuIFBHU19J TkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJY2FzZSBQR1BBX1RB R19OT19JTkRFWF9TQ0FOOgorCQkJcmV0dXJuIFBHU19JTkRFWFNDQU47CisJCWNhc2UgUEdQ QV9UQUdfTk9fU0VRX1NDQU46CisJCQlyZXR1cm4gUEdTX1NFUVNDQU47CisJCWNhc2UgUEdQ QV9UQUdfTk9fVElEX1NDQU46CisJCQlyZXR1cm4gUEdTX1RJRFNDQU47CisJCWRlZmF1bHQ6 CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBTdHJpcCBlbmZvcmNlbWVudC1vbmx5 IGJpdHMgZnJvbSBhIHNjYW4tbWV0aG9kIG1hc2ssIGxlYXZpbmcgb25seSB0aGUKKyAqIGJp dChzKSB0aGF0IGFjdHVhbGx5IGlkZW50aWZ5IGEgc2NhbiBtZXRob2QuCisgKgorICogUEdT X0NPTlNJREVSX0lOREVYT05MWSBpcyBpbmNsdWRlZCBpbiB0aGUgZW5mb3JjZW1lbnQgbWFz ayBmb3IgYm90aAorICogQklUTUFQX0hFQVBfU0NBTiAodG8gd29yayBhcm91bmQgdGhlIGhp c3RvcmljYWwgcXVpcmsgZGVzY3JpYmVkIGluCisgKiBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nh bl9hZHZpY2UpIGFuZCBJTkRFWF9PTkxZX1NDQU4vTk9fSU5ERVhfT05MWV9TQ0FOICh0bwor ICogbWFrZSBhIHdvdWxkLWJlIEluZGV4IE9ubHkgU2NhbiBkZWdyYWRlIHRvLCBvciBiZSBl eGNsdWRlZCBpbiBmYXZvciBvZiwgYQorICogcGxhaW4gSW5kZXggU2NhbikuIEl0IGRvZXNu J3QsIGJ5IGl0c2VsZiwgaWRlbnRpZnkgYW55IHNjYW4gbWV0aG9kLCBzbyBpdAorICogbXVz dCBiZSBleGNsdWRlZCBiZWZvcmUgY29tcGFyaW5nIHR3byB0YWdzIHRvIHNlZSB3aGV0aGVy IHRoZXkgc3BlY2lmeSB0aGUKKyAqIHNhbWUgb3IgY29uZmxpY3Rpbmcgc2NhbiBtZXRob2Rz OyBvdGhlcndpc2UsIHRhZ3MgZm9yIGdlbnVpbmVseSB1bnJlbGF0ZWQKKyAqIG1ldGhvZHMg dGhhdCBtZXJlbHkgaGFwcGVuIHRvIHNoYXJlIHRoaXMgYml0IHdvdWxkIGxvb2sgbGlrZSB0 aGV5IGNvbmZsaWN0LgorICovCitzdGF0aWMgdWludDY0CitwZ3BhX3NjYW5fc2VtYW50aWNf bWFzayh1aW50NjQgbWFzaykKK3sKKwlyZXR1cm4gbWFzayAmIH5QR1NfQ09OU0lERVJfSU5E RVhPTkxZOworfQorCiAvKgogICogQXBwbHkgc2NhbiBhZHZpY2UgdG8gYSBSZWxPcHRJbmZv LgogICovCkBAIC0xNjM3LDkgKzE3OTMsMTMgQEAgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5f YWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKIAlpbnQJCQlpID0gLTE7CiAJcGdwYV90cm92ZV9l bnRyeSAqc2Nhbl9lbnRyeSA9IE5VTEw7CiAJaW50CQkJZmxhZ3M7Ci0JYm9vbAkJc2Nhbl90 eXBlX2NvbmZsaWN0ID0gZmFsc2U7CisJYm9vbAkJc2Nhbl9wb3NfY29uZmxpY3QgPSBmYWxz ZTsJLyogcG9zaXRpdmUgdGFncyBkaXNhZ3JlZSAqLworCWJvb2wJCXNjYW5fcG9zX25lZ19j b25mbGljdCA9IGZhbHNlOwkvKiBhIHBvc2l0aXZlIG1ldGhvZCBpcworCQkJCQkJCQkJCQkJ ICogZm9yYmlkZGVuICovCiAJQml0bWFwc2V0ICAqc2Nhbl90eXBlX2luZGV4ZXMgPSBOVUxM OwogCUJpdG1hcHNldCAgKnNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFw c2V0ICAqbm9fc2Nhbl9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpub19zY2FuX2Nv bmZsaWN0X2luZGV4ZXMgPSBOVUxMOwogCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOwogCXVp bnQ2NAkJc2Nhbl90eXBlID0gYWxsX3NjYW5fbWFzazsJLyogc2VudGluZWw6IG5vIGFkdmlj ZSB5ZXQgKi8KIApAQCAtMTY0OCw4ICsxODA4LDIwIEBAIHBncGFfcGxhbm5lcl9hcHBseV9z Y2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCiAJewogCQlwZ3BhX3Ryb3ZlX2VudHJ5ICpt eV9lbnRyeSA9ICZzY2FuX2VudHJpZXNbaV07CiAJCXVpbnQ2NAkJbXlfc2Nhbl90eXBlID0g YWxsX3NjYW5fbWFzazsKKwkJdWludDY0CQlteV9ub19zY2FuX21hc2s7CiAKLQkJLyogVHJh bnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNjYW4gc3RyYXRlZ3kgYWR2aWNlIHZhbHVl LiAqLworCQkvKgorCQkgKiBOT18gc2NhbiB0YWdzIGp1c3QgYWNjdW11bGF0ZSBhIHNldCBv ZiBmb3JiaWRkZW4gbWV0aG9kczsgaGFuZGxlCisJCSAqIHRoZW0gc2VwYXJhdGVseSBmcm9t IHRoZSBwb3NpdGl2ZSBzY2FuLXR5cGUgbG9naWMgYmVsb3cuCisJCSAqLworCQlteV9ub19z Y2FuX21hc2sgPSBwZ3BhX25vX3NjYW5fbWFza19mcm9tX2FkdmljZV90YWcobXlfZW50cnkt PnRhZyk7CisJCWlmIChteV9ub19zY2FuX21hc2sgIT0gMCkKKwkJeworCQkJbm9fc2Nhbl9p bmRleGVzID0gYm1zX2FkZF9tZW1iZXIobm9fc2Nhbl9pbmRleGVzLCBpKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyogVHJhbnNsYXRlIHBvc2l0aXZlIGFkdmljZSB0YWdzIHRvIGEg c2NhbiBzdHJhdGVneSB2YWx1ZS4gKi8KIAkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfRE9fTk9UX1NDQU4pCiAJCQlteV9zY2FuX3R5cGUgPSAwOwogCQllbHNlIGlmIChteV9l bnRyeS0+dGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4pCkBAIC0xNjkwLDE5ICsx ODYyLDQ3IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpy ZWwsCiAJCWlmIChteV9zY2FuX3R5cGUgIT0gYWxsX3NjYW5fbWFzaykKIAkJewogCQkJaWYg KHNjYW5fdHlwZSAhPSBhbGxfc2Nhbl9tYXNrICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5 cGUpCi0JCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKLQkJCWlmICghc2Nhbl90eXBl X2NvbmZsaWN0ICYmIHNjYW5fZW50cnkgIT0gTlVMTCAmJgorCQkJCXNjYW5fcG9zX2NvbmZs aWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl9wb3NfY29uZmxpY3QgJiYgc2Nhbl9lbnRyeSAh PSBOVUxMICYmCiAJCQkJbXlfZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCiAJ CQkJc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKIAkJCQkhcGdwYV9p bmRleF90YXJnZXRzX2VxdWFsKHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCwKIAkJCQkJ CQkJCQkgIG15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQpKQotCQkJCXNjYW5fdHlwZV9jb25m bGljdCA9IHRydWU7CisJCQkJc2Nhbl9wb3NfY29uZmxpY3QgPSB0cnVlOwogCQkJc2Nhbl9l bnRyeSA9IG15X2VudHJ5OwogCQkJc2Nhbl90eXBlID0gbXlfc2Nhbl90eXBlOwogCQkJc2Nh bl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfaW5kZXhlcywgaSk7 CiAJCX0KIAl9CiAKKwkvKgorCSAqIERldGVjdCBwb3NpdGl2ZS12cy1uZWdhdGl2ZSBzY2Fu IGNvbmZsaWN0OiBhIHBvc2l0aXZlIHNjYW4gdHlwZSB0aGF0IGlzCisJICogc2ltdWx0YW5l b3VzbHkgZm9yYmlkZGVuIGJ5IGEgTk9fIHRhZy4gIENvbXBhcmUgc2VtYW50aWMgbWFza3Mg KGkuZS4KKwkgKiBleGNsdWRpbmcgZW5mb3JjZW1lbnQtb25seSBiaXRzIHN1Y2ggYXMgUEdT X0NPTlNJREVSX0lOREVYT05MWSksIGFuZAorCSAqIGNoZWNrIGVhY2ggTk9fIHRhZyBpbmRl cGVuZGVudGx5LCBzbyB0aGF0IGEgY2xhc2ggb24gb25lIG1ldGhvZCBkb2Vzbid0CisJICog Y2F1c2UgYW4gdW5yZWxhdGVkIE5PXyB0YWcgZm9yIGEgZGlmZmVyZW50IG1ldGhvZCB0byBi ZSB0cmVhdGVkIGFzCisJICogY29uZmxpY3Rpbmcgb3IgbGVmdCB1bmVuZm9yY2VkLgorCSAq LworCWlmIChzY2FuX3R5cGUgIT0gYWxsX3NjYW5fbWFzaykKKwl7CisJCXVpbnQ2NAkJc2Nh bl90eXBlX3NlbWFudGljID0gcGdwYV9zY2FuX3NlbWFudGljX21hc2soc2Nhbl90eXBlKTsK KwkJaW50CQkJaiA9IC0xOworCisJCXdoaWxlICgoaiA9IGJtc19uZXh0X21lbWJlcihub19z Y2FuX2luZGV4ZXMsIGopKSA+PSAwKQorCQl7CisJCQl1aW50NjQJCW15X25vX3NjYW5fc2Vt YW50aWM7CisKKwkJCW15X25vX3NjYW5fc2VtYW50aWMgPQorCQkJCXBncGFfc2Nhbl9zZW1h bnRpY19tYXNrKHBncGFfbm9fc2Nhbl9tYXNrX2Zyb21fYWR2aWNlX3RhZyhzY2FuX2VudHJp ZXNbal0udGFnKSk7CisJCQlpZiAoKHNjYW5fdHlwZV9zZW1hbnRpYyAmIG15X25vX3NjYW5f c2VtYW50aWMpICE9IDApCisJCQl7CisJCQkJc2Nhbl9wb3NfbmVnX2NvbmZsaWN0ID0gdHJ1 ZTsKKwkJCQlub19zY2FuX2NvbmZsaWN0X2luZGV4ZXMgPQorCQkJCQlibXNfYWRkX21lbWJl cihub19zY2FuX2NvbmZsaWN0X2luZGV4ZXMsIGopOworCQkJfQorCQl9CisJfQorCiAJLyog U2NydXRpbml6ZSBhdmFpbGFibGUgZ2F0aGVyLXJlbGF0ZWQgYW5kIHBhcnRpdGlvbndpc2Ug YWR2aWNlLiAqLwogCWkgPSAtMTsKIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVs X2luZGV4ZXMsIGkpKSA+PSAwKQpAQCAtMTcyNSw3ICsxOTI1LDcgQEAgcGdwYV9wbGFubmVy X2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb25zdCB1aW50NjQg bXlfc2Nhbl90eXBlID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQ7CiAKIAkJCQlp ZiAoc2Nhbl90eXBlICE9IGFsbF9zY2FuX21hc2sgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5f dHlwZSkKLQkJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQkJc2Nhbl9wb3Nf Y29uZmxpY3QgPSB0cnVlOwogCQkJCXNjYW5fZW50cnkgPSBteV9lbnRyeTsKIAkJCQlzY2Fu X3R5cGUgPSBteV9zY2FuX3R5cGU7CiAJCQkJc2Nhbl90eXBlX3JlbF9pbmRleGVzID0KQEAg LTE3NzgsNyArMTk3OCw3IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxP cHRJbmZvICpyZWwsCiAJfQogCiAJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCi0J aWYgKHNjYW5fZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJaWYg KHNjYW5fZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl9wb3NfY29uZmxpY3QgJiYgIXNjYW5fcG9z X25lZ19jb25mbGljdCAmJgogCQkoc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVY X1NDQU4gfHwKIAkJIHNjYW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9PTkxZX1ND QU4pKQogCXsKQEAgLTE4MjIsMTQgKzIwMjIsMjYgQEAgcGdwYV9wbGFubmVyX2FwcGx5X3Nj YW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKIAogCS8qCiAJICogTWFyayBhbGwgdGhlIHNj YW4gbWV0aG9kIGVudHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lm eQotCSAqIGRpZmZlcmVudCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3Rpbmcu CisJICogZGlmZmVyZW50IHRoaW5ncywgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4g IEFsc28gbWFyayB0aGVtIGFzCisJICogY29uZmxpY3RpbmcgaWYgYW55IE5PXyB0YWcgZm9y YmlkcyB0aGUgcmVxdWVzdGVkIHNjYW4gbWV0aG9kLgogCSAqLwogCWZsYWdzID0gUEdQQV9G Ql9NQVRDSF9QQVJUSUFMIHwgUEdQQV9GQl9NQVRDSF9GVUxMOwotCWlmIChzY2FuX3R5cGVf Y29uZmxpY3QpCisJaWYgKHNjYW5fcG9zX2NvbmZsaWN0IHx8IHNjYW5fcG9zX25lZ19jb25m bGljdCkKIAkJZmxhZ3MgfD0gUEdQQV9GQl9DT05GTElDVElORzsKIAlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CiAJcGdw YV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywg ZmxhZ3MpOwogCisJLyoKKwkgKiBNYXJrIE5PXyBzY2FuIGVudHJpZXMgYXMgZnVsbHkgbWF0 Y2hlZC4gT25seSB0aGUgc3BlY2lmaWMgTk9fIHRhZ3MKKwkgKiB3aG9zZSBtZXRob2QgYWN0 dWFsbHkgY29uZmxpY3RzIHdpdGggdGhlIHJlcXVlc3RlZCBwb3NpdGl2ZSBzY2FuCisJICog bWV0aG9kIGFyZSBtYXJrZWQgY29uZmxpY3Rpbmc7IHVucmVsYXRlZCBOT18gdGFncyBmb3Ig dGhlIHNhbWUKKwkgKiByZWxhdGlvbiBhcmUgdW5hZmZlY3RlZC4KKwkgKi8KKwlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMsIG5vX3NjYW5faW5kZXhlcywKKwkJCQkJCSBQ R1BBX0ZCX01BVENIX1BBUlRJQUwgfCBQR1BBX0ZCX01BVENIX0ZVTEwpOworCXBncGFfdHJv dmVfc2V0X2ZsYWdzKHNjYW5fZW50cmllcywgbm9fc2Nhbl9jb25mbGljdF9pbmRleGVzLAor CQkJCQkJIFBHUEFfRkJfQ09ORkxJQ1RJTkcpOworCiAJLyoKIAkgKiBNYXJrIGV2ZXJ5IEdh dGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4gTWFy awogCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQgdGhpcyByZWxhdGlvbiBhcyBhIHRhcmdl dCBieSBpdHNlbGYgYXMgZnVsbHkKQEAgLTE4NDcsOCArMjA1OSwyMiBAQCBwZ3BhX3BsYW5u ZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAogCSAqIE9ubHkgY2xlYXIg Yml0cyBoZXJlLCBzbyB0aGF0IHdlIHN0aWxsIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3Mu IERvCiAJICogbm90aGluZyBpbiBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIG9uIGEgc2luZ2xl IHRvcGljIGNvbmZsaWN0cy4KIAkgKi8KLQlpZiAoc2Nhbl90eXBlICE9IGFsbF9zY2FuX21h c2sgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwlpZiAoc2Nhbl90eXBlICE9IGFsbF9zY2Fu X21hc2sgJiYgIXNjYW5fcG9zX2NvbmZsaWN0ICYmICFzY2FuX3Bvc19uZWdfY29uZmxpY3Qp CiAJCXJlbC0+cGdzX21hc2sgJj0gfihhbGxfc2Nhbl9tYXNrICYgfnNjYW5fdHlwZSk7CisJ aWYgKG5vX3NjYW5faW5kZXhlcyAhPSBOVUxMKQorCXsKKwkJdWludDY0CQllbmZvcmNlX25v X3NjYW5fbWFzayA9IDA7CisJCWludAkJCWogPSAtMTsKKworCQl3aGlsZSAoKGogPSBibXNf bmV4dF9tZW1iZXIobm9fc2Nhbl9pbmRleGVzLCBqKSkgPj0gMCkKKwkJeworCQkJaWYgKGJt c19pc19tZW1iZXIoaiwgbm9fc2Nhbl9jb25mbGljdF9pbmRleGVzKSkKKwkJCQljb250aW51 ZTsKKwkJCWVuZm9yY2Vfbm9fc2Nhbl9tYXNrIHw9CisJCQkJcGdwYV9ub19zY2FuX21hc2tf ZnJvbV9hZHZpY2VfdGFnKHNjYW5fZW50cmllc1tqXS50YWcpOworCQl9CisJCXJlbC0+cGdz X21hc2sgJj0gfihhbGxfc2Nhbl9tYXNrICYgZW5mb3JjZV9ub19zY2FuX21hc2spOworCX0K IAlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQogCXsKIAkJdWlu dDY0CQlhbGxfZ2F0aGVyX21hc2s7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5u ZXIubAppbmRleCAxNWQ2N2NkNDg5Ni4uYzEwZDVlZGY1MzcgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3NjYW5uZXIubApAQCAtMTMwLDcgKzEzMCwxMiBAQCB4Y2luc2lkZQkJ W14qL10rCiAJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19USURfU0NBTiB8fAogCQkJCQkJCSB0 YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTiB8fAogCQkJCQkJCSB0YWcgPT0gUEdQ QV9UQUdfTk9fR0FUSEVSIHx8Ci0JCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19ET19OT1RfU0NB TikKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX0RPX05PVF9TQ0FOIHx8CisJCQkJCQkJIHRh ZyA9PSBQR1BBX1RBR19OT19TRVFfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdf Tk9fVElEX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX05PX0JJVE1BUF9IRUFQ X1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX05PX0lOREVYX1NDQU4gfHwKKwkJ CQkJCQkgdGFnID09IFBHUEFfVEFHX05PX0lOREVYX09OTFlfU0NBTikKIAkJCQkJCXJldHVy biBUT0tfVEFHX1NJTVBMRTsKIAkJCQkJZWxzZQogCQkJCQkJcmV0dXJuIFRPS19UQUdfR0VO RVJJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5j IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKaW5kZXggY2E2OWYzYmQz ZGYuLmFiZTEwMzYzZDNlIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfdHJvdmUuYworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpA QCAtMTY2LDYgKzE2NiwxMSBAQCBwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVt cykKIAkJCWNhc2UgUEdQQV9UQUdfRE9fTk9UX1NDQU46CiAJCQljYXNlIFBHUEFfVEFHX0lO REVYX09OTFlfU0NBTjoKIAkJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCWNhc2Ug UEdQQV9UQUdfTk9fQklUTUFQX0hFQVBfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfTk9fSU5E RVhfT05MWV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19OT19JTkRFWF9TQ0FOOgorCQkJY2Fz ZSBQR1BBX1RBR19OT19TRVFfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfTk9fVElEX1NDQU46 CiAJCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgogCQkJY2FzZSBQR1BBX1RBR19USURfU0NB TjoKIApAQCAtMTkyLDYgKzE5NywxNCBAQCBwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmlj ZV9pdGVtcykKIAkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CiAJ CQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CiAJCQljYXNlIFBHUEFfVEFH X05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19OT19IQVNIX0pPSU46CisJ CQljYXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX05PX01F UkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU5f UExBSU46CisJCQljYXNlIFBHUEFfVEFHX05PX05FU1RFRF9MT09QOgorCQkJY2FzZSBQR1BB X1RBR19OT19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQQV9UQUdfTk9f TkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCWNhc2UgUEdQQV9UQUdfTk9fTkVTVEVEX0xPT1Bf UExBSU46CiAJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CiAJCQljYXNl IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3dhbGtlci5jCmluZGV4IDdiMjk5NDQwZDRkLi4wOGUwODgzZmFjMSAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtODk0LDYgKzg5NCw3NyBAQCBwZ3BhX3dh bGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCiAJ CQkJCQkJCQkJCSByZWxpZHMpOwogCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKIAkJCXJl dHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIod2Fsa2VyLCByZWxpZHMpOwor CisJCQkvKgorCQkJICogRm9yIE5PXyBzY2FuIHRhZ3MsIHRoZSBhZHZpY2UgaXMgc2F0aXNm aWVkIHdoZW4gdGhlIHBsYW4gZG9lcworCQkJICogTk9UIHVzZSB0aGUgZm9yYmlkZGVuIHNj YW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJY2FzZSBQR1BBX1RBR19OT19TRVFfU0NBTjoKKwkJ CXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BB X1NDQU5fU0VRLAorCQkJCQkJCQkJCSByZWxpZHMpID09IE5VTEw7CisJCWNhc2UgUEdQQV9U QUdfTk9fQklUTUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3Nj YW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fQklUTUFQX0hFQVAsCisJCQkJCQkJ CQkJIHJlbGlkcykgPT0gTlVMTDsKKwkJY2FzZSBQR1BBX1RBR19OT19JTkRFWF9TQ0FOOgor CQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBH UEFfU0NBTl9JTkRFWCwKKwkJCQkJCQkJCQkgcmVsaWRzKSA9PSBOVUxMOworCQljYXNlIFBH UEFfVEFHX05PX0lOREVYX09OTFlfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5k X3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVhfT05MWSwKKwkJCQkJ CQkJCQkgcmVsaWRzKSA9PSBOVUxMOworCQljYXNlIFBHUEFfVEFHX05PX1RJRF9TQ0FOOgor CQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBH UEFfU0NBTl9USUQsCisJCQkJCQkJCQkJIHJlbGlkcykgPT0gTlVMTDsKKworCQkJLyoKKwkJ CSAqIEZvciBOT18gam9pbiB0YWdzLCB0aGUgYWR2aWNlIGlzIHNhdGlzZmllZCB3aGVuIHRo ZSBwbGFuIGRvZXMKKwkJCSAqIE5PVCB1c2UgYW55IG9mIHRoZSBmb3JiaWRkZW4gam9pbiBz dHJhdGVnaWVzLgorCQkJICovCisJCWNhc2UgUEdQQV9UQUdfTk9fSEFTSF9KT0lOOgorCQkJ cmV0dXJuICFwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJ ICBKU1RSQVRfSEFTSF9KT0lOLAorCQkJCQkJCQkJCQkgIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfTk9fTUVSR0VfSk9JTjoKKwkJCXJldHVybiAhcGdwYV93YWxrZXJfY29udGFpbnNf am9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSAgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJ CQkJCQkJCQkJCSAgcmVsaWRzKSAmJgorCQkJCSFwZ3BhX3dhbGtlcl9jb250YWluc19qb2lu KHdhbGtlciwKKwkJCQkJCQkJCQkgICBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwK KwkJCQkJCQkJCQkgICByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05PX01FUkdFX0pPSU5f TUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIXBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fs a2VyLAorCQkJCQkJCQkJCQkgIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCQkJ CQkJCQkJCQkgIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fTUVSR0VfSk9JTl9QTEFJ TjoKKwkJCXJldHVybiAhcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJ CQkJCQkJCSAgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSAgcmVsaWRz KTsKKwkJY2FzZSBQR1BBX1RBR19OT19ORVNURURfTE9PUDoKKwkJCXJldHVybiAhcGdwYV93 YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSAgSlNUUkFUX05FU1RF RF9MT09QX1BMQUlOLAorCQkJCQkJCQkJCQkgIHJlbGlkcykgJiYKKwkJCQkhcGdwYV93YWxr ZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJICAgSlNUUkFUX05FU1RFRF9M T09QX01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCSAgIHJlbGlkcykgJiYKKwkJCQkhcGdwYV93 YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJICAgSlNUUkFUX05FU1RF RF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJICAgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RB R19OT19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAhcGdwYV93YWxrZXJf Y29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSAgSlNUUkFUX05FU1RFRF9MT09Q X01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf Tk9fTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiAhcGdwYV93YWxrZXJfY29udGFp bnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSAgSlNUUkFUX05FU1RFRF9MT09QX01FTU9J WkUsCisJCQkJCQkJCQkJCSAgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19OT19ORVNURURf TE9PUF9QTEFJTjoKKwkJCXJldHVybiAhcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxr ZXIsCisJCQkJCQkJCQkJCSAgSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOLAorCQkJCQkJCQkJ CQkgIHJlbGlkcyk7CiAJfQogCiAJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbm9fam9pbi5zcWwgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9ub19qb2luLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNTE4ODIwYjJkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9ub19qb2luLnNxbApAQCAtMCwwICsxLDEwMSBAQAor TE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgbm9fam9pbl9kaW0gKGlkIHNlcmlhbCBwcmlt YXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gbm9fam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgbm9fam9p bl9kaW07CisKK0NSRUFURSBUQUJMRSBub19qb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5 IGtleSwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIG5vX2pvaW5fZGlt IChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gbm9fam9pbl9mYWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggbm9fam9pbl9mYWN0X2RpbV9pZCBPTiBu b19qb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFlaRSBub19qb2luX2ZhY3Q7CisK Ky0tIEJhc2VsaW5lOiBoYXNoIGpvaW4gd2l0aCBkIG9uIHRoZSBpbm5lciBzaWRlLgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5f ZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisKKy0tIE5P X0hBU0hfSk9JTihkKTogZCBzdGF5cyBpbm5lciwgcGxhbm5lciBmYWxscyBiYWNrIHRvIGFu b3RoZXIgbWV0aG9kLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05PX0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gTk9fSEFTSF9KT0lOKGYpOiB0aGUg am9pbi1vcmRlciBjb25zdHJhaW50IGZvcmNlcyBmIHRvIHRoZSBpbm5lciBzaWRlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX0hBU0hfSk9JTihm KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g bm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK K0NPTU1JVDsKKworLS0gTk9fTkVTVEVEX0xPT1AoZik6IGYgZm9yY2VkIGlubmVyLCBhbGwg TkwgdmFyaWFudHMgZm9yYmlkZGVuIC0+IG1lcmdlIGpvaW4uCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fTkVTVEVEX0xPT1AoZiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFj dCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisK Ky0tIE5PX01FUkdFX0pPSU4oZCk6IGQgYWxyZWFkeSBpbm5lciwgaGFzaCBqb2luIHN0aWxs IGFsbG93ZWQgLT4gcGxhbiB1bmNoYW5nZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnTk9fTUVSR0VfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBu b19qb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gU3RhY2tp bmc6IE5PX0hBU0hfSk9JTihmKSArIE5PX05FU1RFRF9MT09QKGYpIGxlYXZlcyBvbmx5IG1l cmdlIGpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Tk9fSEFTSF9KT0lOKGYpIE5PX05FU1RFRF9MT09QKGYpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5v X2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBTcGVjaWZp YyBOT18gdmFyaWFudHMgdGFyZ2V0aW5nIGQsIGFscmVhZHkgdGhlIGlubmVyIHNpZGU6IGZv cmJpZGRpbmcgYW55IG9uZQorLS0gTkwgb3IgbWVyZ2UgdmFyaWFudCBsZWF2ZXMgaGFzaCBq b2luIGF2YWlsYWJsZSwgc28gdGhlIHBsYW4gaXMgdW5jaGFuZ2VkLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX05FU1RFRF9MT09QX1BMQUlOKGQp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBu b19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19ORVNURURfTE9PUF9NRU1P SVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19ORVNURURfTE9P UF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9f TUVSR0VfSk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Tk9fTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fam9pbl9mYWN0IGYgSk9JTiBub19qb2lu X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gQ29uZmxpY3Q6IHNh bWUgbWV0aG9kIHJlcXVpcmVkIGFuZCBmb3JiaWRkZW47IGJvdGggbWFya2VkIGNvbmZsaWN0 aW5nLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hf Sk9JTihmKSBOT19IQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisKKy0tIE5vIGNvbmZsaWN0OiBOT19I QVNIX0pPSU4oZikgYW5kIGEgcG9zaXRpdmUgdGFnIGZvciBhIGRpZmZlcmVudCBtZXRob2Qu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTk9fSEFTSF9K T0lOKGYpIE5FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19qb2luX2ZhY3QgZiBKT0lOIG5vX2pvaW5f ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBBIGNvbmZsaWN0IG9u IG9uZSBtZXRob2QgbXVzdCBub3QgY2FuY2VsIGVuZm9yY2VtZW50IG9mIGFuIHVucmVsYXRl ZCBOT18KKy0tIHRhZzogTUVSR0VfSk9JTl9QTEFJTihkKSBjb25mbGljdHMgd2l0aCBOT19N RVJHRV9KT0lOKGQpIGhlcmUsIGJ1dAorLS0gTk9fSEFTSF9KT0lOKGQpIGRvZXMgbm90LCBz byBpdCBzdGlsbCBhcHBsaWVzLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCkgTk9fTUVSR0VfSk9JTihkKSBOT19IQVNI X0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIG5vX2pvaW5fZmFjdCBmIEpPSU4gbm9fam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CitDT01NSVQ7CisKK0RST1AgVEFCTEUgbm9fam9pbl9mYWN0OworRFJPUCBUQUJM RSBub19qb2luX2RpbTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L25vX3NjYW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbm9fc2Nhbi5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEzODM3MjNhYzJjCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbm9fc2Nhbi5z cWwKQEAgLTAsMCArMSwxMzIgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0g MC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3Qg PSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKKworQ1JFQVRFIFRBQkxFIG5v X3NjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gbm9fc2Nhbl90YWJsZQorCVNF TEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBub19zY2FuX3RhYmxlOworCistLSBCYXNlbGluZXMg d2l0aG91dCBhZHZpY2U6IHNlcSBzY2FuIGZvciBhIGZ1bGwgcmVhZCwgaW5kZXggc2NhbiBm b3IgYSBsb29rdXAuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gbm9fc2Nhbl90YWJsZTsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBO T19TRVFfU0NBTiB3aXRoIG5vIGluZGV4YWJsZSBxdWFsOiBubyBhbHRlcm5hdGl2ZSwgc28g dGhlIGFkdmljZSBmYWlscy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdOT19TRVFfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZTsKK0NPTU1J VDsKKworLS0gTk9fU0VRX1NDQU4gd2l0aCBhbiBpbmRleGFibGUgcXVhbDogZmFsbHMgYmFj ayB0byBpbmRleCBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworQ09NTUlUOworCistLSBOT19JTkRFWF9TQ0FOOiBmYWxscyBiYWNrIHRvIGJpdG1h cCBoZWFwIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTk9fSU5ERVhfU0NBTihub19zY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKK0NPTU1JVDsKKworLS0gTk9fSU5ERVhfT05MWV9TQ0FOOiBmYWxscyBiYWNrIHRvIGEg cGxhaW4gaW5kZXggc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdOT19JTkRFWF9PTkxZX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgYSBGUk9NIG5vX3NjYW5fdGFibGUg V0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIE5PX0JJVE1BUF9IRUFQX1NDQU46IHdpdGgg b25seSBhIEJSSU4gaW5kZXggYXZhaWxhYmxlLCBmYWxscyBiYWNrIHRvIHNlcSBzY2FuLgor Q1JFQVRFIElOREVYIG5vX3NjYW5fdGFibGVfYiBPTiBub19zY2FuX3RhYmxlIFVTSU5HIGJy aW4gKGIpOworVkFDVVVNIEFOQUxZWkUgbm9fc2Nhbl90YWJsZTsKK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19CSVRNQVBfSEVBUF9TQ0FOKG5vX3Nj YW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBub19zY2FuX3RhYmxlIFdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworQ09NTUlU OworCistLSBOT19USURfU0NBTjogZmFsbHMgYmFjayB0byBzZXEgc2Nhbi4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19USURfU0NBTihub19zY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKK0NPTU1JVDsKKwor LS0gTXVsdGlwbGUgTk9fIHNjYW4gdGFncyBzdGFjayB3aXRob3V0IGNvbmZsaWN0LgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1NFUV9TQ0FOKG5v X3NjYW5fdGFibGUpIE5PX0JJVE1BUF9IRUFQX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5f dGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIENvbmZsaWN0OiBzYW1lIG1ldGhv ZCByZXF1aXJlZCBhbmQgZm9yYmlkZGVuOyBib3RoIGNvbmZsaWN0aW5nLCBuZWl0aGVyIGFw cGxpZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4obm9fc2Nhbl90YWJsZSkgTk9fU0VRX1NDQU4obm9fc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5f dGFibGU7CitDT01NSVQ7CisKKy0tIE5vIGNvbmZsaWN0OiBOT19TRVFfU0NBTiBhbmQgYSBw b3NpdGl2ZSBJTkRFWF9TQ0FOIGFyZSBjb21wYXRpYmxlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05PX1NFUV9TQ0FOKG5vX3NjYW5fdGFibGUpIElO REVYX1NDQU4obm9fc2Nhbl90YWJsZSBub19zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19zY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBObyBjb25mbGljdDogQklUTUFQX0hFQVBf U0NBTiBhbmQgTk9fSU5ERVhfT05MWV9TQ0FOIG9ubHkgc2hhcmUgdGhlCistLSBQR1NfQ09O U0lERVJfSU5ERVhPTkxZIGVuZm9yY2VtZW50IGJpdCwgbm90IGFuIGFjdHVhbCBzY2FuIG1l dGhvZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRN QVBfSEVBUF9TQ0FOKG5vX3NjYW5fdGFibGUpIE5PX0lOREVYX09OTFlfU0NBTihub19zY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gbm9fc2Nhbl90YWJsZSBXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK0NPTU1JVDsK KworLS0gQSBjb25mbGljdCBvbiBvbmUgbWV0aG9kIG11c3Qgbm90IGNhbmNlbCBlbmZvcmNl bWVudCBvZiBhbiB1bnJlbGF0ZWQgTk9fCistLSB0YWc6IE5PX1NFUV9TQ0FOIGNvbmZsaWN0 cyB3aXRoIFNFUV9TQ0FOIGhlcmUsIGJ1dCBOT19CSVRNQVBfSEVBUF9TQ0FOCistLSBkb2Vz IG5vdCwgc28gaXQgc3RpbGwgYXBwbGllcy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub19zY2FuX3RhYmxlKSBOT19TRVFfU0NBTihu b19zY2FuX3RhYmxlKSBOT19CSVRNQVBfSEVBUF9TQ0FOKG5vX3NjYW5fdGFibGUpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBub19zY2Fu X3RhYmxlIFdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworQ09NTUlUOworCistLSBBIGNvbmZs aWN0aW5nIElOREVYX1NDQU4gcmVxdWVzdCBtdXN0IG5vdCBoYXZlIHRoZSBzaWRlIGVmZmVj dCBvZgorLS0gZGlzYWJsaW5nIGV2ZXJ5IG90aGVyIGluZGV4OiB3aXRoIHR3byBlcXVpdmFs ZW50IGluZGV4ZXMsIGFuCistLSBJTkRFWF9TQ0FOL05PX0lOREVYX1NDQU4gY29uZmxpY3Qg b24gdGhlIHJlbGF0aW9uIG11c3QgbGVhdmUgdGhlCistLSBwbGFubmVyJ3MgbmF0dXJhbCBp bmRleCBjaG9pY2UgYWxvbmUuCitDUkVBVEUgVEFCTEUgbm9fc2Nhbl9pZHhfY29uZmxpY3Qg KGEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIG5vX3NjYW5faWR4X2NvbmZsaWN0IFNFTEVDVCBnIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBub19zY2FuX2lkeF9jb25mbGljdF9hMSBP TiBub19zY2FuX2lkeF9jb25mbGljdCAoYSk7CitDUkVBVEUgSU5ERVggbm9fc2Nhbl9pZHhf Y29uZmxpY3RfYTIgT04gbm9fc2Nhbl9pZHhfY29uZmxpY3QgKGEpOworVkFDVVVNIEFOQUxZ WkUgbm9fc2Nhbl9pZHhfY29uZmxpY3Q7CisKKy0tIEJhc2VsaW5lOiB3aGljaCBpbmRleCBk b2VzIHRoZSBwbGFubmVyIG5hdHVyYWxseSBwaWNrPworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIG5vX3NjYW5faWR4X2NvbmZsaWN0IE9SREVS IEJZIGEgTElNSVQgNTsKKworLS0gSU5ERVhfU0NBTiBuYW1lcyB0aGUgb3RoZXIgaW5kZXgs IGFuZCBOT19JTkRFWF9TQ0FOIGZvcmJpZHMgaW5kZXggc2NhbnMKKy0tIGVudGlyZWx5IG9u IHRoZSBzYW1lIHJlbGF0aW9uLCBzbyB0aGUgdHdvIGNvbmZsaWN0OyBuZWl0aGVyIHNob3Vs ZCBoYXZlCistLSBhbnkgZWZmZWN0LCBhbmQgaW4gcGFydGljdWxhciB0aGUgdW4tbmFtZWQg aW5kZXggbXVzdCBub3QgYmUgZGlzYWJsZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPQorCSdJTkRFWF9TQ0FOKG5vX3NjYW5faWR4X2NvbmZsaWN0IG5v X3NjYW5faWR4X2NvbmZsaWN0X2ExKSBOT19JTkRFWF9TQ0FOKG5vX3NjYW5faWR4X2NvbmZs aWN0KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gbm9fc2Nhbl9pZHhfY29uZmxpY3QgT1JERVIgQlkgYSBMSU1JVCA1OworQ09NTUlUOwor CitEUk9QIFRBQkxFIG5vX3NjYW5faWR4X2NvbmZsaWN0OworCistLSBTY2FuIHRhZ3MgZm9y YmlkIHN1Ymxpc3RzIChzaW1wbGVfdGFyZ2V0X2xpc3QpOiB0aGlzIGlzIGEgc3ludGF4IGVy cm9yLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdOT19TRVFfU0NBTigobm9fc2Nh bl90YWJsZSBub19zY2FuX3RhYmxlKSknOworCitEUk9QIFRBQkxFIG5vX3NjYW5fdGFibGU7 CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKaW5kZXggYjEzOTVlYzk1MWUuLmRmZjY1OTRhNTRi IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCkBAIC0zMjAsNiArMzIwLDU4IEBAIERPX05P VF9TQ0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKTwvc3lu b3BzaXM+CiAKICAgPC9zZWN0Mz4KIAorICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1uby1z Y2FuLW1ldGhvZCI+CisgIDx0aXRsZT5OZWdhdGl2ZSBTY2FuIE1ldGhvZCBBZHZpY2U8L3Rp dGxlPgorICAgPHN5bm9wc2lzPgorTk9fU0VRX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwv cmVwbGFjZWFibGU+IFsgLi4uIF0pCitOT19USURfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0 PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK05PX0lOREVYX1NDQU4oPHJlcGxhY2VhYmxlPnRh cmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitOT19JTkRFWF9PTkxZX1NDQU4oPHJlcGxh Y2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitOT19CSVRNQVBfSEVBUF9T Q0FOKDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdKTwvc3lub3Bz aXM+CisKKyAgIDxwYXJhPgorICAgIFRoZXNlIHRhZ3MgYXJlIHRoZSBuZWdhdGl2ZSBjb3Vu dGVycGFydHMgb2YgdGhlIHBvc2l0aXZlIHNjYW4gbWV0aG9kIHRhZ3MuCisgICAgRWFjaCA8 bGl0ZXJhbD5OT188L2xpdGVyYWw+IHRhZyBmb3JiaWRzIHRoZSBjb3JyZXNwb25kaW5nIHNj YW4gbWV0aG9kIGZvcgorICAgIHRoZSBzcGVjaWZpZWQgcmVsYXRpb24gb3IgcmVsYXRpb25z LiBUaGUgcGxhbm5lciB3aWxsIGNob29zZSBhbnkgb3RoZXIKKyAgICBlbGlnaWJsZSBzY2Fu IG1ldGhvZCBpbnN0ZWFkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBGb3IgZXhh bXBsZSwgPGxpdGVyYWw+Tk9fU0VRX1NDQU4odCk8L2xpdGVyYWw+IHRlbGxzIHRoZSBwbGFu bmVyIG5vdCB0bworICAgIHVzZSBhIDxsaXRlcmFsPlNlcSBTY2FuPC9saXRlcmFsPiBvbiA8 bGl0ZXJhbD50PC9saXRlcmFsPi4gSWYgdGhlIG9ubHkKKyAgICB2aWFibGUgYWx0ZXJuYXRp dmUgaXMgYW4gaW5kZXggc2NhbiwgdGhlIHBsYW5uZXIgd2lsbCB1c2UgdGhhdC4gSWYgbm8K KyAgICBhbHRlcm5hdGl2ZSBpcyBhdmFpbGFibGUsIHRoZSBwbGFuIHN0aWxsIHVzZXMgdGhl IGZvcmJpZGRlbiBtZXRob2QgYW5kIHRoZQorICAgIGFkdmljZSBpcyByZXBvcnRlZCBhcyA8 bGl0ZXJhbD5mYWlsZWQ8L2xpdGVyYWw+LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAg ICBVbmxpa2UgdGhlIHBvc2l0aXZlIHNjYW4gbWV0aG9kIHRhZ3MsIG11bHRpcGxlIG5lZ2F0 aXZlIHNjYW4gbWV0aG9kIHRhZ3MKKyAgICBmb3IgdGhlIHNhbWUgcmVsYXRpb24gY2FuIGJl IGNvbWJpbmVkIGZyZWVseSB3aXRob3V0IGNvbmZsaWN0LiBGb3IgZXhhbXBsZSwKKyAgICA8 bGl0ZXJhbD5OT19TRVFfU0NBTih0KSBOT19CSVRNQVBfSEVBUF9TQ0FOKHQpPC9saXRlcmFs PiBpcyB2YWxpZCBhbmQKKyAgICByZXN0cmljdHMgdGhlIHBsYW5uZXIgdG8gdXNlIGFuIGlu ZGV4IHNjYW4gb3IgVElEIHNjYW4gb24gPGxpdGVyYWw+dDwvbGl0ZXJhbD4uCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIEEgbmVnYXRpdmUgdGFnIGFuZCBhIHBvc2l0aXZlIHRh ZyBzcGVjaWZ5aW5nIHRoZSBzYW1lIG1ldGhvZCBhcmUgaW4KKyAgICBjb25mbGljdCB3aXRo IGVhY2ggb3RoZXIuIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5TRVFfU0NBTih0KQorICAgIE5P X1NFUV9TQ0FOKHQpPC9saXRlcmFsPiBpcyBhIGNvbnRyYWRpY3Rpb24sIGFuZCBib3RoIHBp ZWNlcyBvZiBhZHZpY2Ugd2lsbAorICAgIGJlIG1hcmtlZCA8bGl0ZXJhbD5jb25mbGljdGlu ZzwvbGl0ZXJhbD4uIEhvd2V2ZXIsIGEgbmVnYXRpdmUgdGFnIGZvciBvbmUKKyAgICBtZXRo b2QgZG9lcyBub3QgY29uZmxpY3Qgd2l0aCBhIHBvc2l0aXZlIHRhZyBmb3IgYSBkaWZmZXJl bnQgbWV0aG9kLiBGb3IKKyAgICBpbnN0YW5jZSwgPGxpdGVyYWw+Tk9fU0VRX1NDQU4odCkg SU5ERVhfU0NBTih0IG15X2luZGV4KTwvbGl0ZXJhbD4gaXMgbm90IGEKKyAgICBjb25mbGlj dDogdGhlIGluZGV4IHNjYW4gaXMgZW5mb3JjZWQgYW5kIHRoZSBwcm9oaWJpdGlvbiBvbiBz ZXF1ZW50aWFsIHNjYW5zCisgICAgaXMgYWxzbyBzYXRpc2ZpZWQuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIE5vdGUgdGhhdCA8bGl0ZXJhbD5OT19TRVFfU0NBTigoeCB5KSk8 L2xpdGVyYWw+IGFuZCBzaW1pbGFyIGZvcm1zIHdpdGggYQorICAgIHBhcmVudGhlc2l6ZWQg c3VibGlzdCBhcmUgbm90IHZhbGlkIHN5bnRheCBmb3IgbmVnYXRpdmUgc2NhbiB0YWdzLCBi ZWNhdXNlCisgICAgc2NhbiBtZXRob2RzIGFwcGx5IHRvIGluZGl2aWR1YWwgcmVsYXRpb25z LCBub3Qgam9pbiBwcm9kdWN0cy4gTmVnYXRpdmUgc2NhbgorICAgIHRhZ3MgdXNlIHRoZSBz YW1lIHRhcmdldCBzeW50YXggYXMgdGhlaXIgcG9zaXRpdmUgY291bnRlcnBhcnRzOiBhCisg ICAgZmxhdCBsaXN0IG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzLgorICAgPC9wYXJhPgorCisg IDwvc2VjdDM+CisKICAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2Utam9pbi1vcmRlciI+CiAg IDx0aXRsZT5Kb2luIE9yZGVyIEFkdmljZTwvdGl0bGU+CiAgICA8c3lub3BzaXM+CkBAIC00 MzMsNiArNDg1LDgzIEBAIGpvaW5fbWV0aG9kX25hbWUoPHJlcGxhY2VhYmxlPmpvaW5fbWV0 aG9kX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQogCiAgIDwvc2VjdDM+CiAKKyAgPHNl Y3QzIGlkPSJwZ3BsYW5hZHZpY2Utbm8tam9pbi1tZXRob2QiPgorICA8dGl0bGU+TmVnYXRp dmUgSm9pbiBNZXRob2QgQWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNpcz4KK25vX2pvaW5f bWV0aG9kX25hbWUoPHJlcGxhY2VhYmxlPmpvaW5fbWV0aG9kX2l0ZW08L3JlcGxhY2VhYmxl PiBbIC4uLiBdKQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5ub19qb2luX21ldGhv ZF9uYW1lPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgTk9fSEFTSF9KT0lOIHwK KyAgTk9fTkVTVEVEX0xPT1AgfCBOT19ORVNURURfTE9PUF9QTEFJTiB8IE5PX05FU1RFRF9M T09QX01BVEVSSUFMSVpFIHwgTk9fTkVTVEVEX0xPT1BfTUVNT0laRSB8CisgIE5PX01FUkdF X0pPSU4gfCBOT19NRVJHRV9KT0lOX1BMQUlOIHwgTk9fTUVSR0VfSk9JTl9NQVRFUklBTEla RSB9CisKKzxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZT5qb2luX21ldGhvZF9pdGVtPC9yZXBs YWNlYWJsZT4gaXM6PC9waHJhc2U+CisKK3sgPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8 L3JlcGxhY2VhYmxlPiB8CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNl YWJsZT4gWyAuLi4gXSApIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICBUaGVzZSB0 YWdzIGFyZSB0aGUgbmVnYXRpdmUgY291bnRlcnBhcnRzIG9mIHRoZSBwb3NpdGl2ZSBqb2lu IG1ldGhvZCB0YWdzLgorICAgIEEgbmVnYXRpdmUgam9pbiBtZXRob2QgdGFnIHNwZWNpZmll cyB0aGF0IHRoZSBuYW1lZCBqb2luIG1ldGhvZCAob3IgZmFtaWx5CisgICAgb2Ygam9pbiBt ZXRob2RzKSBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGJlIHVzZWQgd2hlbiB0 aGUgc3BlY2lmaWVkCisgICAgcmVsYXRpb24gb3Igc2V0IG9mIHJlbGF0aW9ucyBhcHBlYXJz IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgam9pbi4gVGhlCisgICAgcGxhbm5lciB3aWxsIGNo b29zZSBhbnkgb3RoZXIgZWxpZ2libGUgam9pbiBtZXRob2QgaW5zdGVhZC4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgQm90aCBhIGNvYXJzZXIgZ3JvdXAgZm9ybSBhbmQgYSBm aW5lciBzcGVjaWZpYyBmb3JtIGFyZSBhdmFpbGFibGUgZm9yCisgICAgbmVzdGVkLWxvb3Ag YW5kIG1lcmdlLWpvaW4uIDxsaXRlcmFsPk5PX05FU1RFRF9MT09QKHQpPC9saXRlcmFsPiBk aXNhYmxlcworICAgIGFsbCB0aHJlZSBuZXN0ZWQtbG9vcCB2YXJpYW50cyAoPGxpdGVyYWw+ TkVTVEVEX0xPT1BfUExBSU48L2xpdGVyYWw+LAorICAgIDxsaXRlcmFsPk5FU1RFRF9MT09Q X01BVEVSSUFMSVpFPC9saXRlcmFsPiwgYW5kCisgICAgPGxpdGVyYWw+TkVTVEVEX0xPT1Bf TUVNT0laRTwvbGl0ZXJhbD4pLCB3aGlsZQorICAgIDxsaXRlcmFsPk5PX05FU1RFRF9MT09Q X1BMQUlOKHQpPC9saXRlcmFsPiBkaXNhYmxlcyBvbmx5IHRoZSBwbGFpbiB2YXJpYW50LAor ICAgIGxlYXZpbmcgdGhlIG90aGVyIHR3byBhdmFpbGFibGUuIFNpbWlsYXJseSwKKyAgICA8 bGl0ZXJhbD5OT19NRVJHRV9KT0lOKHQpPC9saXRlcmFsPiBkaXNhYmxlcyBib3RoIG1lcmdl LWpvaW4gdmFyaWFudHMsIHdoaWxlCisgICAgPGxpdGVyYWw+Tk9fTUVSR0VfSk9JTl9QTEFJ Tih0KTwvbGl0ZXJhbD4gYW5kCisgICAgPGxpdGVyYWw+Tk9fTUVSR0VfSk9JTl9NQVRFUklB TElaRSh0KTwvbGl0ZXJhbD4gdGFyZ2V0IGluZGl2aWR1YWwgdmFyaWFudHMuCisgICAgPGxp dGVyYWw+Tk9fSEFTSF9KT0lOPC9saXRlcmFsPiBoYXMgb25seSBvbmUgZm9ybSBzaW5jZSB0 aGVyZSBpcyBvbmx5IG9uZQorICAgIGhhc2gtam9pbiB2YXJpYW50LgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBMaWtlIHBvc2l0aXZlIGpvaW4gbWV0aG9kIHRhZ3MsIG5lZ2F0 aXZlIGpvaW4gbWV0aG9kIHRhZ3MgYWNjZXB0CisgICAgcGFyZW50aGVzaXplZCBzdWJsaXN0 cyBzcGVjaWZ5aW5nIGEgc2V0IG9mIHJlbGF0aW9ucyB0aGF0IHNob3VsZCBhcHBlYXIKKyAg ICB0b2dldGhlciBvbiB0aGUgaW5uZXIgc2lkZS4gRm9yIGV4YW1wbGUsCisgICAgPGxpdGVy YWw+Tk9fSEFTSF9KT0lOKChhIGIpKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgam9pbiBw cm9kdWN0IG9mCisgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmI8L2xp dGVyYWw+IHNob3VsZCBub3QgYXBwZWFyIHRvZ2V0aGVyIG9uCisgICAgdGhlIGlubmVyIHNp ZGUgb2YgYSBoYXNoIGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE5lZ2F0 aXZlIGpvaW4gbWV0aG9kIHRhZ3MgaW1wb3NlIHRoZSBzYW1lIGpvaW4tb3JkZXIgY29uc3Ry YWludCBhcyB0aGVpcgorICAgIHBvc2l0aXZlIGNvdW50ZXJwYXJ0czogdGhlIHNwZWNpZmll ZCByZWxhdGlvbiAob3Igam9pbiBwcm9kdWN0KSBjYW5ub3QKKyAgICBiZWNvbWUgdGhlIGRy aXZpbmcgdGFibGUuIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5OT19IQVNIX0pPSU4odCk8L2xp dGVyYWw+CisgICAgaW1wbGllcyB0aGF0IDxsaXRlcmFsPnQ8L2xpdGVyYWw+IGNhbm5vdCBi ZSB0aGUgb3V0ZXJtb3N0IHJlbGF0aW9uIGluIHRoZQorICAgIGpvaW4sIGV4YWN0bHkgYXMg PGxpdGVyYWw+SEFTSF9KT0lOKHQpPC9saXRlcmFsPiB3b3VsZC4gVGhpbmsgb2YKKyAgICA8 bGl0ZXJhbD5OT19IQVNIX0pPSU4odCk8L2xpdGVyYWw+IGFzIHNheWluZworICAgIDxxdW90 ZT51c2UgYW55dGhpbmcgYnV0IGEgaGFzaCBqb2luLCBidXQga2VlcCA8bGl0ZXJhbD50PC9s aXRlcmFsPiBvbiB0aGUKKyAgICBpbm5lciBzaWRlLjwvcXVvdGU+CisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIE11bHRpcGxlIG5lZ2F0aXZlIGpvaW4gbWV0aG9kIHRhZ3MgZm9y IHRoZSBzYW1lIHJlbGF0aW9uIGNhbiBiZSBjb21iaW5lZAorICAgIGZyZWVseS4gRm9yIGV4 YW1wbGUsIDxsaXRlcmFsPk5PX0hBU0hfSk9JTih0KSBOT19ORVNURURfTE9PUCh0KTwvbGl0 ZXJhbD4KKyAgICByZXN0cmljdHMgdGhlIHBsYW5uZXIgdG8gbWVyZ2Utam9pbiB3aGVuIDxs aXRlcmFsPnQ8L2xpdGVyYWw+IGlzIG9uIHRoZQorICAgIGlubmVyIHNpZGUuIEEgbmVnYXRp dmUgdGFnIGZvciBvbmUgbWV0aG9kIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggYSBwb3NpdGl2 ZQorICAgIHRhZyBmb3IgYSBkaWZmZXJlbnQgbWV0aG9kOiA8bGl0ZXJhbD5OT19IQVNIX0pP SU4odCkKKyAgICBORVNURURfTE9PUF9QTEFJTih0KTwvbGl0ZXJhbD4gaXMgbm90IGEgY29u ZmxpY3QuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEEgbmVnYXRpdmUgdGFnIGFu ZCBhIHBvc2l0aXZlIHRhZyBzcGVjaWZ5aW5nIHRoZSBzYW1lIGpvaW4gbWV0aG9kIGFyZSBp bgorICAgIGNvbmZsaWN0LiBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+SEFTSF9KT0lOKHQpIE5P X0hBU0hfSk9JTih0KTwvbGl0ZXJhbD4KKyAgICBjb250cmFkaWN0cyBpdHNlbGYsIGFuZCBi b3RoIGVudHJpZXMgd2lsbCBiZSBtYXJrZWQKKyAgICA8bGl0ZXJhbD5jb25mbGljdGluZzwv bGl0ZXJhbD4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKwogICA8c2VjdDMgaWQ9InBn cGxhbmFkdmljZS1wYXJ0aXRpb253aXNlIj4KICAgPHRpdGxlPlBhcnRpdGlvbndpc2UgQWR2 aWNlPC90aXRsZT4KICAgIDxzeW5vcHNpcz4KLS0gCjIuNDUuMQoK --------------6MY5lIN6W0ey6bAAAc0A25NA--