From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 37EA91FF2A8 for ; Tue, 2 Jul 2024 16:13:45 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D6EBF1FA8A; Tue, 2 Jul 2024 16:14:01 +0200 (CEST) From: Max Carrara To: pve-devel@lists.proxmox.com Date: Tue, 2 Jul 2024 16:13:11 +0200 Message-Id: <20240702141314.445130-2-m.carrara@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240702141314.445130-1-m.carrara@proxmox.com> References: <20240702141314.445130-1-m.carrara@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.020 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment PROLO_LEO2 0.1 Meta Catches all Leo drug variations so far SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [github.io, sectionconfig.pm, proxmox.com] Subject: [pve-devel] [PATCH v2 pve-common 1/4] section config: document package and its methods with POD X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" QXBhcnQgZnJvbSB0aGUgb2J2aW91cyBiZW5lZml0cyB0aGF0IGRvY3VtZW50YXRpb24gaGFzLCB0 aGlzIGFsc28KYWxsb3dzIExTUHMgdG8gcHJvdmlkZSBkb2NzdHJpbmdzIGUuZy4gdmlhICd0ZXh0 RG9jdW1lbnQvaG92ZXInIFswXS4KClRlc3RlZCB3aXRoIFBlcmwgTmF2aWdhdG9yIFsxXS4KClsw XTogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9z cGVjaWZpY2F0aW9ucy9sc3AvMy4xNy9zcGVjaWZpY2F0aW9uLyN0ZXh0RG9jdW1lbnRfaG92ZXIK WzFdOiBodHRwczovL2dpdGh1Yi5jb20vYnNjYW4vUGVybE5hdmlnYXRvcgoKU2lnbmVkLW9mZi1i eTogTWF4IENhcnJhcmEgPG0uY2FycmFyYUBwcm94bW94LmNvbT4KLS0tCkNoYW5nZXMgdjEgLS0+ IHYyOgogICogYmFzaWNhbGx5IGFsbCBvZiBARmFiaWFuJ3MgZmVlZGJhY2sgWzBdIHdhcyB0YWtl biBpbnRvIGFjY291bnQsCiAgICB3aGljaCBpcyB3YXkgdG9vIG11Y2ggdG8gbGlzdCBoZXJlLCBz byBwbGVhc2Ugc2VlIHRoZSBmZWVkYmFjawogICAgaXRzZWxmCiAgKiB1c2UgbW9yZSBsaW5rcyB3 aGVyZSBhcHByb3ByaWF0ZSwgZS5nLiB0byByZWZlciB0byBtZXRob2RzCiAgICBhc3NvY2lhdGVk IHdpdGggYSB0ZXJtCiAgKiBwcm92aWRlIG1vcmUgZXhhbXBsZSBjb2RlIChzdWJyb3V0aW5lcyBg cHJpdmF0ZWAgYW5kIGBkZWNvZGVfdmFsdWVgKQoKWzBdOiBodHRwczovL2xpc3RzLnByb3htb3gu Y29tL3BpcGVybWFpbC9wdmUtZGV2ZWwvMjAyNC1KdW5lLzA2NDE2NS5odG1sCgogc3JjL1BWRS9T ZWN0aW9uQ29uZmlnLnBtIHwgOTUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLQogMSBmaWxlIGNoYW5nZWQsIDg4OCBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvUFZFL1NlY3Rpb25Db25maWcucG0gYi9zcmMvUFZFL1NlY3Rpb25D b25maWcucG0KaW5kZXggYTE4ZTlkOC4uZjc2OGViMiAxMDA2NDQKLS0tIGEvc3JjL1BWRS9TZWN0 aW9uQ29uZmlnLnBtCisrKyBiL3NyYy9QVkUvU2VjdGlvbkNvbmZpZy5wbQpAQCAtMTAsNjUgKzEw LDEwMyBAQCB1c2UgUFZFOjpFeGNlcHRpb24gcXcocmFpc2VfcGFyYW1fZXhjKTsKIHVzZSBQVkU6 OkpTT05TY2hlbWEgcXcoZ2V0X3N0YW5kYXJkX29wdGlvbik7CiB1c2UgUFZFOjpUb29sczsKIAot IyBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSB3YXkgdG8gaGF2ZSBtdWx0aXBsZSAob2Z0ZW4gc2lt aWxhcikgdHlwZXMgb2YgZW50cmllcwotIyBpbiB0aGUgc2FtZSBjb25maWcgZmlsZSwgZWFjaCBp biBpdHMgb3duIHNlY3Rpb24sIHRodXMgIlNlY3Rpb24gQ29uZmlnIi4KLSMKLSMgVGhlIGludGVu ZGVkIHN0cnVjdHVyZSBpcyB0byBoYXZlIGEgc2luZ2xlICdiYXNlJyBwbHVnaW4gdGhhdCBpbmhl cml0cyBmcm9tCi0jIHRoaXMgY2xhc3MgYW5kIHByb3ZpZGVzIG1lYW5pbmdmdWwgZGVmYXVsdHMg aW4gaXRzICckZGVmYXVsdERhdGEnLCBlLmcuIGEKLSMgZGVmYXVsdCBsaXN0IG9mIHRoZSBjb3Jl IHByb3BlcnRpZXMgaW4gaXRzIHByb3BlcnR5TGlzdCAobW9zdCBvZnRlbiBvbmx5ICdpZCcKLSMg YW5kICd0eXBlJykKLSMKLSMgRWFjaCAncmVhbCcgcGx1Z2luIHRoZW4gaGFzIGl0J3Mgb3duIHBh Y2thZ2UgdGhhdCBzaG91bGQgaW5oZXJpdCBmcm9tIHRoZQotIyAnYmFzZScgcGx1Z2luIGFuZCBy ZXR1cm5zIGl0J3Mgc3BlY2lmaWMgcHJvcGVydGllcyBpbiB0aGUgJ3Byb3BlcnRpZXMnIG1ldGhv ZCwKLSMgaXRzIHR5cGUgaW4gdGhlICd0eXBlJyBtZXRob2QgYW5kIGFsbCB0aGUga25vd24gb3B0 aW9ucywgZnJvbSBib3RoIHBhcmVudCBhbmQKLSMgaXRzZWxmLCBpbiB0aGUgJ29wdGlvbnMnIG1l dGhvZC4KLSMgVGhlIG9wdGlvbnMgbWV0aG9kIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGVmaW5lIGlm IGEgcHJvcGVydHkgaXMgJ29wdGlvbmFsJyBvcgotIyAnZml4ZWQnIChvbmx5IHNldHRhYmxlIG9u IGNvbmZpZyBlbnRpdHktY3JlYXRpb24pLCBmb3IgZXhhbXBsZToKLSMKLSMgYGBgYAotIyBzdWIg b3B0aW9ucyB7Ci0jICAgICByZXR1cm4gewotIyAgICAgICAgICdzb21lLW9wdGlvbmFsLXByb3Bl cnR5JyA9PiB7IG9wdGlvbmFsID0+IDEgfSwKLSMgICAgICAgICAnYS1maXhlZC1wcm9wZXJ0eScg PT4geyBmaXhlZCA9PiAxIH0sCi0jICAgICAgICAgJ2EtcmVxdWlyZWQtYnV0LW5vdC1maXhlZC1w cm9wZXJ0eScgPT4ge30sCi0jICAgICB9OwotIyB9Ci0jIGBgYAotIwotIyAnZml4ZWQnIG9wdGlv bnMgY2FuIGJlIHNldCBvbiBjcmVhdGUsIGJ1dCBub3QgY2hhbmdlZCBhZnRlcndhcmRzLgotIwot IyBUbyBhY3R1YWxseSB1c2UgaXQsIHlvdSBoYXZlIHRvIGZpcnN0IHJlZ2lzdGVyIGFsbCB0aGUg cGx1Z2lucyBhbmQgdGhlbiBpbml0Ci0jIHRoZSAnYmFzZScgcGx1Z2luLCBsaWtlIHNvOgotIwot IyBgYGAKLSMgdXNlIFBWRTo6RHVtbXk6OlBsdWdpbjE7Ci0jIHVzZSBQVkU6OkR1bW15OjpQbHVn aW4yOwotIyB1c2UgUFZFOjpEdW1teTo6QmFzZVBsdWdpbjsKLSMKLSMgUFZFOjpEdW1teTo6UGx1 Z2luMS0+cmVnaXN0ZXIoKTsKLSMgUFZFOjpEdW1teTo6UGx1Z2luMi0+cmVnaXN0ZXIoKTsKLSMg UFZFOjpEdW1teTo6QmFzZVBsdWdpbi0+aW5pdCgpOwotIyBgYGAKLSMKLSMgVGhlcmUgYXJlIHR3 byBtb2RlcyBmb3IgaG93IHByb3BlcnRpZXMgYXJlIGV4cG9zZWQsIHRoZSBkZWZhdWx0ICd1bmlm aWVkJwotIyBtb2RlIGFuZCB0aGUgJ2lzb2xhdGVkJyBtb2RlLgotIyBJbiB0aGUgZGVmYXVsdCB1 bmlmaWVkIG1vZGUsIHRoZXJlIGlzIG9ubHkgYSBnbG9iYWwgbGlzdCBvZiBwcm9wZXJ0aWVzCi0j IHdoaWNoIHRoZSBwbHVnaW5zIGNhbiB1c2UsIHNvIHlvdSBjYW5ub3QgZGVmaW5lIHRoZSBzYW1l IHByb3BlcnR5IG5hbWUgdHdpY2UKLSMgaW4gZGlmZmVyZW50IHBsdWdpbnMuIFRoZSByZWFzb24g Zm9yIHRoaXMgaXMgdG8gZm9yY2UgdGhlIHVzZSBvZiBpZGVudGljYWwKLSMgcHJvcGVydGllcyBm b3IgbXVsdGlwbGUgcGx1Z2lucy4KLSMKLSMgVGhlIHNlY29uZCB3YXkgaXMgdG8gdXNlIHRoZSAn aXNvbGF0ZWQnIG1vZGUsIHdoaWNoIGNhbiBiZSBhY2hpZXZlZCBieQotIyBjYWxsaW5nIGluaXQg d2l0aCBgMWAgYXMgaXRzIHBhcmFtZXRlciBsaWtlIHRoaXM6Ci0jCi0jIGBgYAotIyBQVkU6OkR1 bW15OjpCYXNlUGx1Z2luLT5pbml0KHByb3BlcnR5X2lzb2xhdGlvbiA9PiAxKTsKLSMgYGBgCi0j Ci0jIFdpdGggdGhpcywgZWFjaCBwbHVnaW4gZ2V0J3MgdGhlaXIgb3duIGlzb2xhdGVkIGxpc3Qg b2YgcHJvcGVydGllcyB3aGljaCBpdAotIyBjYW4gdXNlLiBOb3RlIHRoYXQgaW4gdGhpcyBtb2Rl LCB5b3Ugb25seSBoYXZlIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IGluIHRoZQotIyBvcHRpb25z IG1ldGhvZCB3aGVuIGl0IGlzIGVpdGhlciAnZml4ZWQnIG9yIGNvbWVzIGZyb20gdGhlIGdsb2Jh bCBsaXN0IG9mCi0jIHByb3BlcnRpZXMuIEFsbCBsb2NhbGx5IGRlZmluZWQgb25lcyBnZXQgYXV0 b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2NoZW1hCi0jIGZvciB0aGF0IHBsdWdpbi4KKz1wb2QK KworPWhlYWQxIE5BTUUKKworU2VjdGlvbkNvbmZpZworCis9aGVhZDEgREVTQ1JJUFRJT04KKwor VGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgd2F5IHRvIGhhdmUgbXVsdGlwbGUgKG9mdGVuIHNpbWls YXIpIHR5cGVzIG9mIGVudHJpZXMKK2luIHRoZSBzYW1lIGNvbmZpZyBmaWxlLCBlYWNoIGluIGl0 cyBvd24gc2VjdGlvbiwgdGh1cyBJPFNlY3Rpb24gQ29uZmlnPi4KKworRm9yIGVhY2ggQzxTZWN0 aW9uQ29uZmlnPi1iYXNlZCBjb25maWcgZmlsZSwgYSBDPFBWRTo6SlNPTlNjaGVtYT4gaXMgZGVy aXZlZAorYXV0b21hdGljYWxseS4gVGhpcyBzY2hlbWEgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50 IENSVUQgb3BlcmF0aW9ucyBmb3IKK3RoZSBjb25maWcgZGF0YS4KKworVGhlIGxvY2F0aW9uIG9m IGEgY29uZmlnIGZpbGUgaXMgY2hvc2VuIGJ5IHRoZSBhdXRob3Igb2YgdGhlIGNvZGUgdGhhdCB1 c2VzCitDPFNlY3Rpb25Db25maWc+IGFuZCBpcyBub3Qgc29tZXRoaW5nIHRoaXMgbW9kdWxlIGlz IGNvbmNlcm5lZCB3aXRoLgorCis9aGVhZDEgVVNBR0UKKworVGhlIGludGVuZGVkIHN0cnVjdHVy ZSBpcyB0byBoYXZlIGEgc2luZ2xlIEk8YmFzZSBwbHVnaW4+IHRoYXQgdXNlcyB0aGUKK0M8U2Vj dGlvbkNvbmZpZz4gbW9kdWxlIGFzIGEgYmFzZSBtb2R1bGUuIEZ1cnRoZXJtb3JlLCBpdCBzaG91 bGQgcHJvdmlkZQorbWVhbmluZ2Z1bCBkZWZhdWx0cyBpbiBpdHMgQzwkZGVmYXVsdERhdGE+LCBz dWNoIGFzIGEgZGVmYXVsdCBsaXN0IG9mIGNvcmUKK0M8UFZFOjpKU09OU2NoZW1hPiBJPHByb3Bl cnRpZXM+LiBUaGUgSTxiYXNlIHBsdWdpbj4gaXMgdGh1cyB2ZXJ5IHNpbWlsYXIgdG8gYW4KK0k8 YWJzdHJhY3QgY2xhc3M+LgorCitFYWNoIEk8Y2hpbGQgcGx1Z2luPiBpcyB0aGVuIGRlZmluZWQg aW4gaXRzIG93biBwYWNrYWdlIHRoYXQgc2hvdWxkIGluaGVyaXQKK2Zyb20gdGhlIEk8YmFzZSBw bHVnaW4+IGFuZCBkZWZpbmVzIHdoaWNoIEk8cHJvcGVydGllcz4gaXQgaXRzZWxmIHByb3ZpZGVz IGFuZAordXNlcywgYXMgd2VsbCBhcyB3aGljaCBJPHByb3BlcnRpZXM+IGl0IHVzZXMgZnJvbSB0 aGUgSTxiYXNlIHBsdWdpbj4uCisKK1RoZSBtZXRob2RzIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1l bnRlZCBhcmUgYW5ub3RhdGVkIGluIHRoZSBMPC9NRVRIT0RTPiBzZWN0aW9uCitiZWxvdy4KKwor ICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilJAKKyAgICAgICAgICAgICAg4pSCICBTZWN0aW9uQ29uZmlnICDilIIKKyAg ICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSYCisgICAgICAgICAgICAgICAgICAgICAgIOKUggorICAgICAgICAgICAgICAg ICAgICAgICDilIIKKyAgICAgICAgICAgICAgICAgICAgICAg4pSCCisgICAgICAgICAgICAgIOKU jOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAor ICAgICAgICAgICAgICDilIIgICAgQmFzZVBsdWdpbiAgIOKUggorICAgICAgICAgICAgICDilJTi lIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJgKKyAg ICAgICAgICAgICAgICAgICAgICAg4pSCCisgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCisgICAgICAgICAg ICAg4pSCICAgICAgICAgICAgICAgICAgIOKUggorICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilIzilIDilIDilIDilIDilIDilIDi lIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilJAKKyAgICDilIJDb25jcmV0ZVBsdWdp bkZvb+KUgiDilIJDb25jcmV0ZVBsdWdpbkJhcuKUggorICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilJTilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKKworPWhlYWQyIFJFR0lTVEVS SU5HIFBMVUdJTlMKKworSW4gb3JkZXIgdG8gYWN0dWFsbHkgYmUgYWJsZSB0byB1c2UgcGx1Z2lu cywgdGhleSBtdXN0IGZpcnN0IGJlCitJPEw8cmVnaXN0ZXJlZHwvcmVnaXN0ZXI+PiBhbmQgdGhl biBJPEw8aW5pdGlhbGl6ZWR8L2luaXQ+PiB2aWEgdGhlCitJPCJiYXNlIiBwbHVnaW4+OgorCisg ICAgdXNlIFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbjsKKyAgICB1c2UgUFZFOjpFeGFtcGxlOjpQ bHVnaW5BOworICAgIHVzZSBQVkU6OkV4YW1wbGU6OlBsdWdpbkI7CisKKyAgICBQVkU6OkV4YW1w bGU6OlBsdWdpbkEtPnJlZ2lzdGVyKCk7CisgICAgUFZFOjpFeGFtcGxlOjpQbHVnaW5CLT5yZWdp c3RlcigpOworICAgIFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+aW5pdCgpOworCis9aGVhZDIg TU9ERVMKKworVGhlcmUgYXJlIHR3byBtb2RlcyBmb3IgaG93IEk8cHJvcGVydGllcz4gYXJlIGV4 cG9zZWQuCisKKz1oZWFkMyB1bmlmaWVkIG1vZGUgKGRlZmF1bHQpCisKK0luIHRoaXMgbW9kZSB0 aGVyZSBpcyBvbmx5IGEgZ2xvYmFsIGxpc3Qgb2YgSTxwcm9wZXJ0aWVzPiB3aGljaCB0aGUgY2hp bGQKK3BsdWdpbnMgY2FuIHVzZS4gVGhpcyBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgaXQncyBu b3QgcG9zc2libGUgdG8gZGVmaW5lIHRoZQorc2FtZSBwcm9wZXJ0eSBuYW1lIG1vcmUgdGhhbiBv bmNlIGluIGRpZmZlcmVudCBwbHVnaW5zLgorCitUaGUgcmVhc29uIGJlaGluZCB0aGlzIGJlaGF2 aW91ciBpcyB0byBlbnN1cmUgdGhhdCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUKK25hbWUgZG9u J3QgYmVoYXZlIGluIGRpZmZlcmVudCB3YXlzLCBvciBpbiBvdGhlciB3b3JkcywgdG8gZW5mb3Jj ZSB0aGUgdXNlIG9mCitpZGVudGljYWwgcHJvcGVydGllcyBmb3IgbXVsdGlwbGUgcGx1Z2lucy4K KworPWhlYWQzIGlzb2xhdGVkIG1vZGUKKworVGhpcyBtb2RlIGNhbiBiZSB1c2VkIGJ5IGNhbGxp bmcgQzxMPC9pbml0Pj4gd2l0aCBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlcjoKKworICAgIFBWRTo6 RXhhbXBsZTo6QmFzZVBsdWdpbi0+aW5pdChwcm9wZXJ0eV9pc29sYXRpb24gPT4gMSk7CisKK1dp dGggdGhpcyBtb2RlIGVhY2ggSTxjaGlsZCBwbHVnaW4+IGdldHMgaXRzIG93biBpc29sYXRlZCBs aXN0IG9mIEk8cHJvcGVydGllcz4sCitvciBpbiBvdGhlciB3b3JkcywgYSBmdWxseSBpc29sYXRl ZCBzY2hlbWEgbmFtZXNwYWNlLiBOb3JtYWxseSBvbmUgd2FudHMgdG8gdXNlCitDPG9uZU9mPiBz Y2hlbWFzIHdoZW4gZW5hYmxpbmcgaXNvbGF0aW9uLgorCitOb3RlIHRoYXQgaW4gdGhpcyBtb2Rl IGl0J3Mgb25seSBuZWNlc3NhcnkgdG8gc3BlY2lmeSBhIEk8cHJvcGVydHk+IGluIHRoZQorcmV0 dXJuIHZhbHVlIG9mIHRoZSBDPG9wdGlvbnM+IG1ldGhvZCB3aGVuIGl0J3MgZWl0aGVyIEM8Zml4 ZWQ+IG9yIHN0ZW1zIGZyb20KK3RoZSBnbG9iYWwgbGlzdCBvZiBJPHByb3BlcnRpZXM+LgorCitB bGwgbG9jYWxseSBkZWZpbmVkIEk8cHJvcGVydGllcz4gb2YgYSBJPGNoaWxkIHBsdWdpbj4gYXJl IGF1dG9tYXRpY2FsbHkgYWRkZWQKK3RvIGl0cyBzY2hlbWEuCisKKz1oZWFkMiBNRVRIT0RTCisK Kz1jdXQKIAogbXkgJGRlZmF1bHREYXRhID0gewogICAgIG9wdGlvbnMgPT4ge30sCkBAIC03Nywx MSArMTE1LDEyNyBAQCBteSAkZGVmYXVsdERhdGEgPSB7CiAgICAgcHJvcGVydHlMaXN0ID0+IHt9 LAogfTsKIAorPXBvZAorCis9aGVhZDMgcHJpdmF0ZQorCitCPFJFUVVJUkVEOj4gTXVzdCBiZSBp bXBsZW1lbnRlZCBpbiB0aGUgSTxiYXNlIHBsdWdpbj4uCisKKyAgICAkZGF0YSA9IFBWRTo6RXhh bXBsZTo6UGx1Z2luLT5wcml2YXRlKCkKKyAgICAkZGF0YSA9ICRjbGFzcy0+cHJpdmF0ZSgpCisK K1JldHVybnMgdGhlIGVudGlyZSBpbnRlcm5hbCBzdGF0ZSBvZiBDPFNlY3Rpb25Db25maWc+LCB3 aGVyZSBhbGwgcGx1Z2lucyBhcyB3ZWxsCithcyB0aGVpciBDPEw8L29wdGlvbnM+PiBhbmQgbW9y ZSBhcmUgYmVpbmcgdHJhY2tlZC4KKworTW9yZSBwcmVjaXNlbHksIHRoaXMgbWV0aG9kIHJldHVy bnMgYSBoYXNoIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKKyAgICB7CisJcHJvcGVy dHlMaXN0ID0+IHsKKwkgICAgJ3NvbWUtb3B0aW9uYWwtcHJvcGVydHknID0+IHsKKwkJdHlwZSA9 PiAnc3RyaW5nJywKKwkJb3B0aW9uYWwgPT4gMSwKKwkJZGVzY3JpcHRpb24gPT4gJ2V4YW1wbGUg cHJvcGVydHknLAorCSAgICB9LAorCSAgICBzb21lLXByb3BlcnR5ID0+IHsKKwkJZGVzY3JpcHRp b24gPT4gJ2Fub3RoZXIgZXhhbXBsZSBwcm9wZXJ0eScsCisJCXR5cGUgPT4gJ2Jvb2xlYW4nCisJ ICAgIH0sCisJfSwKKwlvcHRpb25zID0+IHsKKwkgICAgZm9vID0+IHsKKwkJJ3NvbWUtb3B0aW9u YWwtcHJvcGVydHknID0+IHsgb3B0aW9uYWwgPT4gMSB9LAorCQkuLi4KKwkgICAgfSwKKwkgICAg Li4uCisJfSwKKwlwbHVnaW5zID0+IHsKKwkgICAgZm9vID0+ICdQVkU6OkV4YW1wbGU6OkZvb1Bs dWdpbicsICAjIHJlZmVyZW5jZSB0byBwYWNrYWdlIG9mIGNoaWxkIHBsdWdpbgorCSAgICAuLi4K Kwl9LAorCXBsdWdpbmRhdGEgPT4geworCSAgICBmb28gPT4geyAuLi4gfSwgICMgZGVwZW5kcyBv biB0aGUgc3BlY2lmaWMgcGx1Z2luIGFyY2hpdGVjdHVyZQorCX0sCisgICAgfQorCitXaGVyZSBD PGZvbz4gaXMgdGhlIEM8TDwvdHlwZT4+IG9mIHRoZSBwbHVnaW4uIFNlZSBDPEw8L29wdGlvbnM+ PiBhbmQKK0M8TDwvcGx1Z2luZGF0YT4+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZWlyIGNv cnJlc3BvbmRpbmcga2V5cyBhYm92ZS4KKworTW9zdCBjb21tb25seSB0aGlzIGlzIHVzZWQgdG8g ZGVmaW5lIHRoZSBkZWZhdWx0IEk8cHJvcGVydHkgbGlzdD4gb2Ygb25lJ3MKK3BsdWdpbiBhcmNo aXRlY3R1cmUgdXBmcm9udCwgZm9yIGV4YW1wbGU6CisKKyAgICB1c2UgUFZFOjpKU09OU2NoZW1h IHF3KGdldF9zdGFuZGFyZF9vcHRpb24pOworCisgICAgdXNlIGJhc2UgcXcoUFZFOjpTZWN0aW9u Q29uZmlnKTsKKworICAgICMgWy4uLl0KKworICAgIG15ICRkZWZhdWx0RGF0YSA9IHsKKwlwcm9w ZXJ0eUxpc3QgPT4geworCSAgICB0eXBlID0+IHsKKwkJZGVzY3JpcHRpb24gPT4gIlR5cGUgb2Yg cGx1Z2luLiIKKwkgICAgfSwKKwkgICAgbm9kZXMgPT4gZ2V0X3N0YW5kYXJkX29wdGlvbigncHZl LW5vZGUtbGlzdCcsIHsKKwkJZGVzY3JpcHRpb24gPT4gIkxpc3Qgb2Ygbm9kZXMgZm9yIHdoaWNo IHRoZSBwbHVnaW4gYXBwbGllcy4iLAorCQlvcHRpb25hbCA9PiAxLAorCSAgICB9KSwKKwkgICAg ZGlzYWJsZSA9PiB7CisJCWRlc2NyaXB0aW9uID0+ICJGbGFnIHRvIGRpc2FibGUgdGhlIHBsdWdp bi4iLAorCQl0eXBlID0+ICdib29sZWFuJywKKwkJb3B0aW9uYWwgPT4gMSwKKwkgICAgfSwKKwkg ICAgJ21heC1mb28tcmF0ZScgPT4geworCQlkZXNjcmlwdGlvbiA9PiAiTWF4aW11bSAnZm9vJyBy YXRlIG9mIHRoZSBwbHVnaW4uIFVzZSAnLTEnIGZvciB1bmxpbWl0ZWQuIiwKKwkJdHlwZSA9PiAn aW50ZWdlcicsCisJCW1pbmltdW0gPT4gLTEsCisJCWRlZmF1bHQgPT4gNDIsCisJCW9wdGlvbmFs ID0+IDEsCisJICAgIH0sCisJICAgICMgWy4uLl0KKwl9LAorICAgIH07CisKKyAgICBzdWIgcHJp dmF0ZSB7CisJcmV0dXJuICRkZWZhdWx0RGF0YTsKKyAgICB9CisKK0FkZGl0aW9uYWwgSTxwcm9w ZXJ0aWVzPiBkZWZpbmVkIGluIEk8Y2hpbGQgcGx1Z2lucz4gYXJlIHN0b3JlZCBpbiB0aGUKK0M8 cHJvcGVydHlMaXN0PiBrZXkuIFNlZSBDPEw8L3Byb3BlcnRpZXM+Pi4KKworPWN1dAorCiBzdWIg cHJpdmF0ZSB7CiAgICAgZGllICJvdmVyd3JpdGUgbWUiOwogICAgIHJldHVybiAkZGVmYXVsdERh dGE7CiB9CiAKKz1wb2QKKworPWhlYWQzIHJlZ2lzdGVyCisKKyAgICBQVkU6OkV4YW1wbGU6OlBs dWdpbi0+cmVnaXN0ZXIoKQorCitVc2VkIHRvIHJlZ2lzdGVyIEk8Y2hpbGQgcGx1Z2lucz4uCisK K01vcmUgc3BlY2lmaWNhbGx5LCBJPHJlZ2lzdGVyaW5nPiBhIGNoaWxkIHBsdWdpbiBtZWFucyB0 aGF0IGl0IGlzIGFkZGVkIHRvIHRoZQorbGlzdCBvZiBrbm93biBjaGlsZCBwbHVnaW5zIHRoYXQg aXMga2VwdCBpbiB0aGUgaGFzaCByZXR1cm5lZCBieSBDPEw8L3ByaXZhdGU+Pi4KK0Z1cnRoZXJt b3JlLCB0aGUgZGF0YSByZXR1cm5lZCBieSBDPEw8L3BsdWdpbmRhdGE+PiBpcyBhbHNvIHN0b3Jl ZCB1cG9uCityZWdpc3RyYXRpb24uCisKK1RoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIG9uIGVh Y2ggY2hpbGQgcGx1Z2luIGJlZm9yZSBJPEw8aW5pdGlhbGl6aW5nfC9pbml0Pj4KK3RoZSBiYXNl IHBsdWdpbi4KKworRm9yIGV4YW1wbGU6CisKKyAgICB1c2UgUFZFOjpFeGFtcGxlOjpCYXNlUGx1 Z2luOworICAgIHVzZSBQVkU6OkV4YW1wbGU6OlBsdWdpbkE7CisgICAgdXNlIFBWRTo6RXhhbXBs ZTo6UGx1Z2luQjsKKworICAgIFBWRTo6RXhhbXBsZTo6UGx1Z2luQS0+cmVnaXN0ZXIoKTsKKyAg ICBQVkU6OkV4YW1wbGU6OlBsdWdpbkItPnJlZ2lzdGVyKCk7CisgICAgUFZFOjpFeGFtcGxlOjpC YXNlUGx1Z2luLT5pbml0KCk7CisKKz1jdXQKKwogc3ViIHJlZ2lzdGVyIHsKICAgICBteSAoJGNs YXNzKSA9IEBfOwogCkBAIC05NiwyMiArMjUwLDE1MyBAQCBzdWIgcmVnaXN0ZXIgewogICAgICRw ZGF0YS0+e3BsdWdpbnN9LT57JHR5cGV9ID0gJGNsYXNzOwogfQogCis9cG9kCisKKz1oZWFkMyB0 eXBlCisKK0I8UkVRVUlSRUQ6PiBNdXN0IGJlIGltcGxlbWVudGVkIGluIEk8QjxlYWNoPj4gSTxj aGlsZCBwbHVnaW4+LgorCisgICAgJHR5cGUgPSBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+dHlwZSgp CisgICAgJHR5cGUgPSAkY2xhc3MtPnR5cGUoKQorCitSZXR1cm5zIHRoZSBJPHR5cGU+IG9mIGEg STxjaGlsZCBwbHVnaW4+LCB3aGljaCBpcyBhIEk8dW5pcXVlPiBzdHJpbmcuIFRoaXMgaXMKK3Vz ZWQgdG8gaWRlbnRpZnkgdGhlIEk8Y2hpbGQgcGx1Z2luPi4KKworTXVzdCBiZSBvdmVycmlkZGVu IG9uIEk8QjxlYWNoPj4gSTxjaGlsZCBwbHVnaW4+LCBmb3IgZXhhbXBsZToKKworICAgIHN1YiB0 eXBlIHsKKwlyZXR1cm4gImZvbyI7CisgICAgfQorCis9Y3V0CisKIHN1YiB0eXBlIHsKICAgICBk aWUgIm92ZXJ3cml0ZSBtZSI7CiB9CiAKKz1wb2QKKworPWhlYWQzIHByb3BlcnRpZXMKKworQjxP UFRJT05BTDo+IENhbiBiZSBvdmVycmlkZGVuIGluIEk8Y2hpbGQgcGx1Z2lucz4uCisKKyAgICAk cHJvcHMgPSBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+cHJvcGVydGllcygpCisgICAgJHByb3BzID0g JGNsYXNzLT5wcm9wZXJ0aWVzKCkKKworVXNlZCB0byByZWdpc3RlciBhZGRpdGlvbmFsIEk8cHJv cGVydGllcz4gdGhhdCBiZWxvbmcgdG8gYSBJPGNoaWxkIHBsdWdpbj4uCitTZWUgYmVsb3cgZm9y IGRldGFpbHMgb24gTDx0aGUgZGlmZmVyZW50IG1vZGVzfC9NT0RFUz4uCisKK1RoaXMgbWV0aG9k IGRvZXNuJ3QgbmVlZCB0byBiZSBvdmVycmlkZGVuIGlmIG5vIG5ldyBwcm9wZXJ0aWVzIGFyZSBu ZWNlc3NhcnkuCisKKyAgICBzdWIgcHJvcGVydGllcygpIHsKKwlyZXR1cm4geworCSAgICBwYXRo ID0+IHsKKwkJZGVzY3JpcHRpb24gPT4gIlBhdGggdXNlZCB0byByZXRyaWV2ZSBhICdmb28nLiIs CisJCXR5cGUgPT4gJ3N0cmluZycsCisJCWZvcm1hdCA9PiAnc29tZS1jdXN0b20tZm9ybWF0LWhh bmRsZXItZm9yLXBhdGhzJywKKwkgICAgfSwKKwkgICAgaXNfYmFyID0geworCQlkZXNjcmlwdGlv biA9PiAiV2hldGhlciB0aGUgJ2ZvbycgaXMgJ2Jhcicgb3Igbm90LiIsCisJCXR5cGUgPT4gJ2Jv b2xlYW4nLAorCSAgICB9LAorCSAgICBid2xpbWl0ID0+IGdldF9zdGFuZGFyZF9vcHRpb24oJ2J3 bGltaXQnKSwKKwl9OworICAgIH0KKworSW4gdGhlIGRlZmF1bHQgSTxMPHVuaWZpZWQgbW9kZXwv TU9ERVM+PiwgdGhlc2UgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gdGhlCitnbG9iYWwgbGlzdCBv ZiBwcm9wZXJ0aWVzLiBUaGlzIG1lYW5zIHRoZXkgbWF5IGFsc28gYmUgdXNlZCBieSBvdGhlciBw bHVnaW5zLAorcmF0aGVyIHRoYW4ganVzdCBieSBpdHNlbGYuIFRoZSBzYW1lIHByb3BlcnR5IG11 c3Qgbm90IGJlIGRlZmluZWQgYnkgb3RoZXIKK3BsdWdpbnMuCisKK0luIEk8TDxpc29sYXRlZCBt b2RlfC9NT0RFUz4+LCB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBzcGVjaWZpYyB0byB0aGUgcGx1Z2lu CitpdHNlbGYgYW5kIGNhbm5vdCBiZSB1c2VkIGJ5IG90aGVycy4gVGhleSBhcmUgaG93ZXZlciBh dXRvbWF0aWNhbGx5IGFkZGVkIHRvCit0aGUgcGx1Z2luJ3Mgc2NoZW1hIGFuZCBtYWRlIEM8b3B0 aW9uYWw+IGJ5IGRlZmF1bHQuCisKK1NlZSB0aGUgQzxMPC9vcHRpb25zPj4gbWV0aG9kIGZvciBt b3JlIGluZm9ybWF0aW9uLgorCis9Y3V0CisKIHN1YiBwcm9wZXJ0aWVzIHsKICAgICByZXR1cm4g e307CiB9CiAKKz1wb2QKKworPWhlYWQzIG9wdGlvbnMKKworQjxPUFRJT05BTDo+IENhbiBiZSBv dmVycmlkZGVuIGluIEk8Y2hpbGQgcGx1Z2lucz4uCisKKyAgICAkb3B0cyA9IFBWRTo6RXhhbXBs ZTo6UGx1Z2luLT5vcHRpb25zKCkKKyAgICAkb3B0cyA9ICRjbGFzcy0+b3B0aW9ucygpCisKK1Ro aXMgbWV0aG9kIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBJPHByb3BlcnRpZXM+IGFyZSBhY3R1 YWxseSBhbGxvd2VkIGZvcgorYSBnaXZlbiBJPGNoaWxkIHBsdWdpbj4uIFNlZSBiZWxvdyBmb3Ig ZGV0YWlscyBvbiBMPHRoZSBkaWZmZXJlbnQgbW9kZXN8L01PREVTPi4KKworQWRkaXRpb25hbGx5 LCB0aGlzIG1ldGhvZCBhbHNvIGFsbG93cyB0byBkZWNsYXJlIHdoZXRoZXIgYSBwcm9wZXJ0eSBp cworQzxvcHRpb25hbD4gb3IgQzxmaXhlZD4uCisKKyAgICBzdWIgb3B0aW9ucyB7CisJcmV0dXJu IHsKKwkgICAgJ3NvbWUtb3B0aW9uYWwtcHJvcGVydHknID0+IHsgb3B0aW9uYWwgPT4gMSB9LAor CSAgICAnYS1maXhlZC1wcm9wZXJ0eScgPT4geyBmaXhlZCA9PiAxIH0sCisJICAgICdhLXJlcXVp cmVkLWJ1dC1ub3QtZml4ZWQtcHJvcGVydHknID0+IHt9LAorCX07CisgICAgfQorCitDPG9wdGlv bmFsPiBJPHByb3BlcnRpZXM+IGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgc2V0LgorCitDPGZpeGVk PiBJPHByb3BlcnRpZXM+IG1heSBvbmx5IGJlIHNldCBvbiBjcmVhdGlvbiBvZiB0aGUgY29uZmln IGVudGl0eS4KKworSW4gSTxMPHVuaWZpZWQgbW9kZXwvTU9ERVM+PiAoZGVmYXVsdCksIGl0IGlz IG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IHNwZWNpZnkKK3doaWNoIEk8cHJvcGVydGllcz4gYXJl IHVzZWQgaW4gdGhlIG1ldGhvZCdzIHJldHVybiB2YWx1ZS4gQmVjYXVzZSBwcm9wZXJ0aWVzCith cmUgcmVnaXN0ZXJlZCBnbG9iYWxseSBpbiB0aGlzIG1vZGUsIGFueSBwcm9wZXJ0aWVzIG1heSBi ZSBzcGVjaWZpZWQsCityZWdhcmRsZXNzIG9mIHdoaWNoIHBsdWdpbiBpbnRyb2R1Y2VkIHRoZW0u CisKK0luIEk8TDxpc29sYXRlZCBtb2RlfC9NT0RFUz4+LCB0aGUgbG9jYWxseSBkZWZpbmVkIHBy b3BlcnRpZXMgKHRob3NlIHJlZ2lzdGVyZWQKK2J5IG92ZXJyaWRpbmcgQzxMPC9wcm9wZXJ0aWVz Pj4pIGFyZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBwbHVnaW4ncyBzY2hlbWEKK2FuZCBt YWRlIEM8b3B0aW9uYWw+IGJ5IGRlZmF1bHQuIFNob3VsZCB0aGlzIG5vdCBiZSBkZXNpcmVkLCBh IHByb3BlcnR5IG1heQorc3RpbGwgYmUgZXhwbGljaXRseSBkZWZpbmVkLCBpbiBvcmRlciB0byBt YWtlIGl0IHJlcXVpcmVkIG9yIEM8Zml4ZWQ+IGluc3RlYWQuCisKK1Byb3BlcnRpZXMgaW4gdGhl IGdsb2JhbCBsaXN0IG9mIHByb3BlcnRpZXMgKHNlZSBDPEw8L3ByaXZhdGU+PikgYXJlIG5vdAor YXV0b21hdGljYWxseSBhZGRlZCBhbmQgbXVzdCBiZSBleHBsaWNpdGx5IGRlZmluZWQgaW5zdGVh ZC4KKworPWN1dAorCiBzdWIgb3B0aW9ucyB7CiAgICAgcmV0dXJuIHt9OwogfQogCis9cG9kCisK Kz1oZWFkMyBwbHVnaW5kYXRhCisKK0I8T1BUSU9OQUw6PiBDYW4gYmUgaW1wbGVtZW50ZWQgaW4g STxjaGlsZCBwbHVnaW5zPi4KKworICAgICRwbHVnaW5kYXRhID0gUFZFOjpFeGFtcGxlOjpQbHVn aW4tPnBsdWdpbmRhdGEoKQorICAgICRwbHVnaW5kYXRhID0gJGNsYXNzLT5wbHVnaW5kYXRhKCkK KworVGhpcyBtZXRob2QgaXMgdXNlZCBieSBwbHVnaW4gYXV0aG9ycyB0byBwcm92aWRlIGFueSBr aW5kIG9mIGRhdGEgc3BlY2lmaWMgdG8KK3RoZWlyIHBsdWdpbiBpbXBsZW1lbnRhdGlvbiBhbmQg aXMgb3RoZXJ3aXNlIG5vdCB0b3VjaGVkIGJ5IEM8U2VjdGlvbkNvbmZpZz4uCisKK1RoaXMgbW9z dGx5IGV4aXN0cyBmb3IgY29udmVuaWVuY2UgYW5kIGRvZXNuJ3QgbmVlZCB0byBiZSBpbXBsZW1l bnRlZC4KKworPWN1dAorCiBzdWIgcGx1Z2luZGF0YSB7CiAgICAgcmV0dXJuIHt9OwogfQogCis9 cG9kCisKKz1oZWFkMyBoYXNfaXNvbGF0ZWRfcHJvcGVydGllcworCisgICAgJGlzX2lzb2xhdGVk ID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4tPmhhc19pc29sYXRlZF9wcm9wZXJ0aWVzKCkKKyAgICAk aXNfaXNvbGF0ZWQgPSAkY2xhc3MtPmhhc19pc29sYXRlZF9wcm9wZXJ0aWVzKCkKKworQ2hlY2tz IHdoZXRoZXIgdGhlIHBsdWdpbiBoYXMgaXNvbGF0ZWQgSTxwcm9wZXJ0aWVzPiAocnVucyBpbiBp c29sYXRlZCBtb2RlKS4KKworPWN1dAorCiBzdWIgaGFzX2lzb2xhdGVkX3Byb3BlcnRpZXMgewog ICAgIG15ICgkY2xhc3MpID0gQF87CiAKQEAgLTE2OCw2ICs0NTMsMzMgQEAgbXkgc3ViIGFkZF9w cm9wZXJ0eSB7CiAgICAgfQogfTsKIAorPXBvZAorCis9aGVhZDMgY3JlYXRlU2NoZW1hCisKKyAg ICAkc2NoZW1hID0gUFZFOjpFeGFtcGxlOjpQbHVnaW4tPigkc2tpcF90eXBlLCAkYmFzZSkKKyAg ICAkc2NoZW1hID0gJGNsYXNzLT4oJHNraXBfdHlwZSwgJGJhc2UpCisKK1JldHVybnMgdGhlIEM8 UFZFOjpKU09OU2NoZW1hPiB1c2VkIGZvciBJPGNyZWF0aW5nPiBjb25maWcgZW50cmllcyBvZiBh CitJPGNoaWxkIHBsdWdpbj4uCisKK1RoaXMgc2NoZW1hIG1heSB0aGVuIGJlIHVzZWQgYXMgZGVz aXJlZCwgZm9yIGV4YW1wbGUgYXMgdGhlIGRlZmluaXRpb24gb2YKK3BhcmFtZXRlcnMgb2YgYW4g QVBJIGhhbmRsZXIgKEM8UE9TVD4pLgorCis9b3ZlcgorCis9aXRlbSBDPCRza2lwX3R5cGU+IChv cHRpb25hbCkKKworQ2FuIGJlIHNldCB0byBDPDE+IHRvIG5vdCBhZGQgdGhlIEM8dHlwZT4gcHJv cGVydHkgdG8gdGhlIHNjaGVtYS4KKworPWl0ZW0gQzwkYmFzZT4gKG9wdGlvbmFsKQorCitUaGUg c2NoZW1hIG9mIGFkZGl0aW9uYWwgcHJvcGVydGllcyBub3QgZGVyaXZlZCBmcm9tIHRoZSBwbHVn aW4gZGVmaW5pdGlvbi4KKworPWJhY2sKKworPWN1dAorCiBzdWIgY3JlYXRlU2NoZW1hIHsKICAg ICBteSAoJGNsYXNzLCAkc2tpcF90eXBlLCAkYmFzZSkgPSBAXzsKIApAQCAtMjQyLDYgKzU1NCwz NiBAQCBzdWIgY3JlYXRlU2NoZW1hIHsKICAgICB9OwogfQogCis9cG9kCisKKz1oZWFkMyB1cGRh dGVTY2hlbWEKKworICAgICR1cGRhdGVkX3NjaGVtYSA9IFBWRTo6RXhhbXBsZTo6UGx1Z2luLT4o JHNpbmdsZV9jbGFzcywgJGJhc2UpCisgICAgJHVwZGF0ZWRfc2NoZW1hID0gJGNsYXNzLT51cGRh dGVTY2hlbWEoJHNpbmdsZV9jbGFzcywgJGJhc2UpCisKK1JldHVybnMgdGhlIEM8UFZFOjpKU09O U2NoZW1hPiB1c2VkIGZvciBJPHVwZGF0aW5nPiBjb25maWcgZW50cmllcyBvZiBhCitJPGNoaWxk IHBsdWdpbj4uCisKK1RoaXMgc2NoZW1hIG1heSB0aGVuIGJlIHVzZWQgYXMgZGVzaXJlZCwgZm9y IGV4YW1wbGUgYXMgdGhlIGRlZmluaXRpb24gb2YKK3BhcmFtZXRlcnMgb2YgYW4gQVBJIGhhbmRs ZXIgKEM8UFVUPikuCisKKz1vdmVyCisKKz1pdGVtIEM8JHNpbmdsZV9jbGFzcz4gKG9wdGlvbmFs KQorCitDYW4gYmUgc2V0IHRvIEM8MT4gdG8gb25seSBpbmNsdWRlIHByb3BlcnRpZXMgd2hpY2gg YXJlIGRlZmluZWQgaW4gdGhlIHJldHVybmVkCitoYXNoIG9mIEk8TDwvb3B0aW9ucz4+IG9mIHRo ZSBwbHVnaW4gQzwkY2xhc3M+LgorCitUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIGZvciBj aGlsZCBwbHVnaW5zLCBub3QgdGhlIGJhc2UgcGx1Z2luLgorCis9aXRlbSBDPCRiYXNlPiAob3B0 aW9uYWwpCisKK1RoZSBzY2hlbWEgb2YgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIG5vdCBkZXJpdmVk IGZyb20gdGhlIHBsdWdpbiBkZWZpbml0aW9uLgorCis9YmFjaworCis9Y3V0CisKIHN1YiB1cGRh dGVTY2hlbWEgewogICAgIG15ICgkY2xhc3MsICRzaW5nbGVfY2xhc3MsICRiYXNlKSA9IEBfOwog CkBAIC0zMjYsMTIgKzY2OCwyMiBAQCBzdWIgdXBkYXRlU2NoZW1hIHsKICAgICB9OwogfQogCi0j IHRoZSAlcGFyYW0gaGFzaCBjb250cm9scyBzb21lIGJlaGF2aW9yIG9mIHRoZSBzZWN0aW9uIGNv bmZpZywgY3VycmVudGx5IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUKLSMgdW5kZXJzdG9vZDoK LSMKLSMgLSBwcm9wZXJ0eV9pc29sYXRpb246IGlmIHNldCwgZWFjaCBjaGlsZC1wbHVnaW4gaGFz IGEgZnVsbHkgaXNvbGF0ZWQgcHJvcGVydHkgKHNjaGVtYSkgbmFtZXNwYWNlLgotIyAgIEJ5IGRl ZmF1bHQgdGhpcyBpcyBvZmYsIG1lYW5pbmcgYWxsIGNoaWxkLXBsdWdpbnMgc2hhcmUgdGhlIHNj aGVtYSBvZiBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUKLSMgICBuYW1lLiBOb3JtYWxseSBvbmUg d2FudHMgdG8gdXNlIG9uZU9mIHNjaGVtYSdzIHdoZW4gZW5hYmxpbmcgaXNvbGF0aW9uLgorPXBv ZAorCis9aGVhZDMgaW5pdAorCisgICAgJGJhc2VfcGx1Z2luLT5pbml0KCk7CisgICAgJGJhc2Vf cGx1Z2luLT5pbml0KHByb3BlcnR5X2lzb2xhdGlvbiA9PiAxKTsKKworVGhpcyBtZXRob2QgaXMg dXNlZCB0byBpbml0aWFsaXplIEM8U2VjdGlvbkNvbmZpZz4gdXNpbmcgYWxsIG9mIHRoZQorSTxj aGlsZCBwbHVnaW5zPiB0aGF0IHdlcmUgSTxMPHJlZ2lzdGVyZWR8L3JlZ2lzdGVyPj4gYmVmb3Jl aGFuZC4KKworT3B0aW9uYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwYXNzIEM8cHJvcGVy dHlfaXNvbGF0aW9uID1FPGd0PiAxPiBhcwordG8gQzwlcGFyYW0+IGluIG9yZGVyIHRvIGFjdGl2 YXRlIEk8aXNvbGF0ZWQgbW9kZT4uIFNlZSBMPC9NT0RFUz4gaW4gdGhlCitwYWNrYWdlLWxldmVs IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKz1jdXQKKwogc3ViIGluaXQg ewogICAgIG15ICgkY2xhc3MsICVwYXJhbSkgPSBAXzsKIApAQCAtMzkyLDYgKzc0NCwxOCBAQCBz dWIgaW5pdCB7CiAgICAgJHByb3BlcnR5TGlzdC0+e3R5cGV9LT57ZW51bX0gPSBbc29ydCBrZXlz ICUkcGx1Z2luc107CiB9CiAKKz1wb2QKKworPWhlYWQzIGxvb2t1cAorCisgICAgJHBsdWdpbiA9 IFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+bG9va3VwKCR0eXBlKQorICAgICRwbHVnaW4gPSAk Y2xhc3MtPmxvb2t1cCgkdHlwZSkKKworUmV0dXJucyB0aGUgSTxjaGlsZCBwbHVnaW4+IGNvcnJl c3BvbmRpbmcgdG8gdGhlIGdpdmVuIEk8TDwvdHlwZT4+IG9yIGRpZXMgaWYgaXQKK2Nhbm5vdCBi ZSBmb3VuZC4KKworPWN1dAorCiBzdWIgbG9va3VwIHsKICAgICBteSAoJGNsYXNzLCAkdHlwZSkg PSBAXzsKIApAQCAtNDA1LDYgKzc2OSwxNyBAQCBzdWIgbG9va3VwIHsKICAgICByZXR1cm4gJHBs dWdpbjsKIH0KIAorPXBvZAorCis9aGVhZDMgbG9va3VwX3R5cGVzCisKKyAgICAkdHlwZXMgPSBQ VkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmxvb2t1cF90eXBlcygpCisgICAgJHR5cGVzID0gJGNs YXNzLT5sb29rdXBfdHlwZXMoKQorCitSZXR1cm5zIGEgbGlzdCBvZiBhbGwgSTxjaGlsZCBwbHVn aW4+IEM8dHlwZT5zLgorCis9Y3V0CisKIHN1YiBsb29rdXBfdHlwZXMgewogICAgIG15ICgkY2xh c3MpID0gQF87CiAKQEAgLTQxMywxOCArNzg4LDE1OSBAQCBzdWIgbG9va3VwX3R5cGVzIHsKICAg ICByZXR1cm4gWyBzb3J0IGtleXMgJXskcGRhdGEtPntwbHVnaW5zfX0gXTsKIH0KIAorPXBvZAor Cis9aGVhZDMgZGVjb2RlX3ZhbHVlCisKK0I8T1BUSU9OQUw6PiBDYW4gYmUgaW1wbGVtZW50ZWQg aW4gdGhlIEk8YmFzZSBwbHVnaW4+LgorCisgICAgJGRlY29kZWRfdmFsdWUgPSBQVkU6OkV4YW1w bGU6OkJhc2VQbHVnaW4tPmRlY29kZV92YWx1ZSgkdHlwZSwgJGtleSwgJHZhbHVlKQorICAgICRk ZWNvZGVkX3ZhbHVlID0gJGNsYXNzLT4oJHR5cGUsICRrZXksICR2YWx1ZSkKKworQ2FsbGVkIGR1 cmluZyBDPGNoZWNrX2NvbmZpZz4gaW4gb3JkZXIgdG8gY29udmVydCB2YWx1ZXMgdGhhdCBoYXZl IGJlZW4gcmVhZAorZnJvbSBhIEM8U2VjdGlvbkNvbmZpZz4gZmlsZSB3aGljaCBoYXZlIGJlZW4g STxlbmNvZGVkPiBiZWZvcmVoYW5kIGJ5CitDPGVuY29kZV92YWx1ZT4uCisKK0RvZXMgbm90aGlu ZyB0byBDPCR2YWx1ZT4gYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBJ PGJhc2UgcGx1Z2luPgoraW4gb3JkZXIgdG8gaW1wbGVtZW50IGN1c3RvbSBjb252ZXJzaW9uIGJl aGF2aW9yLgorCisgICAgc3ViIGRlY29kZV92YWx1ZSB7CisJbXkgKCRjbGFzcywgJHR5cGUsICRr ZXksICR2YWx1ZSkgPSBAXzsKKworCWlmICgka2V5IGVxICdub2RlcycpIHsKKwkgICAgbXkgJHJl cyA9IHt9OworCisJICAgIGZvciBteSAkbm9kZSAoUFZFOjpUb29sczo6c3BsaXRfbGlzdCgkdmFs dWUpKSB7CisJCWlmIChQVkU6OkpTT05TY2hlbWE6OnB2ZV92ZXJpZnlfbm9kZV9uYW1lKCRub2Rl KSkgeworCQkgICAgJHJlcy0+eyRub2RlfSA9IDE7CisJCX0KKwkgICAgfQorCisJICAgIHJldHVy biAkcmVzOworCX0KKworCXJldHVybiAkdmFsdWU7CisgICAgfQorCis9b3ZlcgorCis9aXRlbSBD PCR0eXBlPgorCitUaGUgQzxMPC90eXBlPj4gb2YgcGx1Z2luIHRoZSBDPCRrZXk+IGFuZCBDPCR2 YWx1ZT4gYmVsb25nIHRvLgorCis9aXRlbSBDPCRrZXk+CisKK1RoZSBuYW1lIG9mIGEgSTxMPHBy b3BlcnR5fC9wcm9wZXJ0aWVzPj4gdGhhdCBoYXMgYmVlbiBzZXQgb24gYSBDPCR0eXBlPiBvZgor Y29uZmlnIHNlY3Rpb24uCisKKz1pdGVtIEM8JHZhbHVlPgorCitUaGUgcmF3IHZhbHVlIG9mIHRo ZSBJPEw8cHJvcGVydHl8L3Byb3BlcnRpZXM+PiBkZW5vdGVkIGJ5IEM8JGtleT4gdGhhdCB3YXMg cmVhZAorZnJvbSBhIHNlY3Rpb24gY29uZmlnIGZpbGUuCisKKz1iYWNrCisKKz1jdXQKKwogc3Vi IGRlY29kZV92YWx1ZSB7CiAgICAgbXkgKCRjbGFzcywgJHR5cGUsICRrZXksICR2YWx1ZSkgPSBA XzsKIAogICAgIHJldHVybiAkdmFsdWU7CiB9CiAKKz1wb2QKKworPWhlYWQzIGVuY29kZV92YWx1 ZQorCitCPE9QVElPTkFMOj4gQ2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSBJPGJhc2UgcGx1Z2lu Pi4KKworICAgICRlbmNvZGVkX3ZhbHVlID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5lbmNv ZGVfdmFsdWUoJHR5cGUsICRrZXksICR2YWx1ZSkKKyAgICAkZW5jb2RlZF92YWx1ZSA9ICRjbGFz cy0+KCR0eXBlLCAka2V5LCAkdmFsdWUpCisKK0NhbGxlZCBkdXJpbmcgQzx3cml0ZV9jb25maWc+ IGluIG9yZGVyIHRvIGNvbnZlcnQgdmFsdWVzIGludG8gYSBzZXJpYWxpemFibGUKK2Zvcm1hdC4K KworRG9lcyBub3RoaW5nIHRvIEM8JHZhbHVlPiBieSBkZWZhdWx0LCBidXQgY2FuIGJlIG92ZXJy aWRkZW4gaW4gdGhlIEk8YmFzZSBwbHVnaW4+CitpbiBvcmRlciB0byBpbXBsZW1lbnQgY3VzdG9t IGNvbnZlcnNpb24gYmVoYXZpb3IuIFVzdWFsbHkgb25lIHNob3VsZCBhbHNvCitvdmVycmlkZSBD PGRlY29kZV92YWx1ZT4gaW4gYSBtYXRjaGluZyBtYW5uZXIuCisKKyAgICBzdWIgZW5jb2RlX3Zh bHVlIHsKKwlteSAoJGNsYXNzLCAkdHlwZSwgJGtleSwgJHZhbHVlKSA9IEBfOworCisJaWYgKCRr ZXkgZXEgJ25vZGVzJykgeworCSAgICByZXR1cm4gam9pbignLCcsIGtleXMoJSR2YWx1ZSkpOwor CX0KKworCXJldHVybiAkdmFsdWU7CisgICAgfQorCis9b3ZlcgorCis9aXRlbSBDPCR0eXBlPgor CitUaGUgQzxMPC90eXBlPj4gb2YgcGx1Z2luIHRoZSBDPCRrZXk+IGFuZCBDPCR2YWx1ZT4gYmVs b25nIHRvLgorCis9aXRlbSBDPCRrZXk+CisKK1RoZSBuYW1lIG9mIGEgSTxMPHByb3BlcnR5fC9w cm9wZXJ0aWVzPj4gdGhhdCBoYXMgYmVlbiBzZXQgb24gYSBDPCR0eXBlPiBvZgorY29uZmlnIHNl Y3Rpb24uCisKKz1pdGVtIEM8JHZhbHVlPgorCitUaGUgdmFsdWUgb2YgdGhlIEk8TDxwcm9wZXJ0 eXwvcHJvcGVydGllcz4+IGRlbm90ZWQgYnkgQzwka2V5PiB0byBiZSBlbmNvZGVkIHNvCit0aGF0 IGl0IGNhbiBiZSB3cml0dGVuIHRvIGEgc2VjdGlvbiBjb25maWcgZmlsZS4KKworPWJhY2sKKwor PWN1dAorCiBzdWIgZW5jb2RlX3ZhbHVlIHsKICAgICBteSAoJGNsYXNzLCAkdHlwZSwgJGtleSwg JHZhbHVlKSA9IEBfOwogCiAgICAgcmV0dXJuICR2YWx1ZTsKIH0KIAorPXBvZAorCis9aGVhZDMg Y2hlY2tfdmFsdWUKKworICAgICRjaGVja2VkX3ZhbHVlID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1 Z2luLT5jaGVja192YWx1ZSgkdHlwZSwgJGtleSwgJHZhbHVlLCAkc3RvcmVpZCwgJHNraXBTY2hl bWFDaGVjaykKKyAgICAkY2hlY2tlZF92YWx1ZSA9ICRjbGFzcy0+Y2hlY2tfdmFsdWUoJHR5cGUs ICRrZXksICR2YWx1ZSwgJHN0b3JlaWQsICRza2lwU2NoZW1hQ2hlY2spCisKK1VzZWQgaW50ZXJu YWxseSB0byBjaGVjayBpZiB2YXJpb3VzIGludmFyaWFudHMgYXJlIHVwaGVsZCB3aGVuIHBhcnNp bmcgYSBzZWN0aW9uCitjb25maWcgZmlsZS4gQWxzbyBwZXJmb3JtcyBhIEM8UFZFOjpKU09OU2No ZW1hPiBjaGVjayBvbiB0aGUgQzwkdmFsdWU+IG9mIHRoZQorSTxwcm9wZXJ0eT4gZ2l2ZW4gYnkg Qzwka2V5PiBvZiB0aGUgcGx1Z2luIEM8JHR5cGU+LCB1bmxlc3MgQzwkc2tpcFNjaGVtYUNoZWNr PgoraXMgdHJ1dGh5LgorCis9b3ZlcgorCis9aXRlbSBDPCR0eXBlPgorCitUaGUgQzxMPC90eXBl Pj4gb2YgcGx1Z2luIHRoZSBDPCRrZXk+IGFuZCBDPCR2YWx1ZT4gYmVsb25nIHRvLgorCis9aXRl bSBDPCRrZXk+CisKK1RoZSBuYW1lIG9mIGEgSTxMPHByb3BlcnR5fC9wcm9wZXJ0aWVzPj4gdGhh dCBoYXMgYmVlbiBzZXQgb24gYSBDPCR0eXBlPiBvZgorY29uZmlnIHNlY3Rpb24uCisKKz1pdGVt IEM8JHZhbHVlPgorCitUaGUgdmFsdWUgb2YgdGhlIEk8TDxwcm9wZXJ0eXwvcHJvcGVydGllcz4+ IGRlbm90ZWQgYnkgQzwka2V5PiB0aGF0IHdhcyByZWFkCitmcm9tIGEgc2VjdGlvbiBjb25maWcg ZmlsZS4KKworPWl0ZW0gQzwkc3RvcmVpZD4KKworVGhlIGlkZW50aWZpZXIgb2YgYSBzZWN0aW9u LCBhcyByZXR1cm5lZCBieSBDPEw8L3BhcnNlX3NlY3Rpb25faGVhZGVyPj4uCisKKz1pdGVtIEM8 JHNraXBTY2hlbWFDaGVjaz4KKworV2hldGhlciB0byBza2lwIHBlcmZvcm1pbmcgYSBDPFBWRTo6 SlNPTlNjaGVtYT4gcHJvcGVydHkgY2hlY2sgb24gdGhlIGdpdmVuCitDPCR2YWx1ZT4uCisKKz1i YWNrCisKKz1jdXQKKwogc3ViIGNoZWNrX3ZhbHVlIHsKICAgICBteSAoJGNsYXNzLCAkdHlwZSwg JGtleSwgJHZhbHVlLCAkc3RvcmVpZCwgJHNraXBTY2hlbWFDaGVjaykgPSBAXzsKIApAQCAtNDcz LDYgKzk4OSw0NCBAQCBzdWIgY2hlY2tfdmFsdWUgewogICAgIHJldHVybiAkdmFsdWU7CiB9CiAK Kz1wb2QKKworPWhlYWQzIHBhcnNlX3NlY3Rpb25faGVhZGVyCisKK0I8T1BUSU9OQUw6PiBDYW4g YmUgb3ZlcnJpZGRlbiBpbiB0aGUgSTxiYXNlIHBsdWdpbj4uCisKKyAgICAoJHR5cGUsICRzZWN0 aW9uSWQsICRlcnJtc2csICRjb25maWcpID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5wYXJz ZV9zZWN0aW9uX2hlYWRlcigkbGluZSkKKyAgICAoJHR5cGUsICRzZWN0aW9uSWQsICRlcnJtc2cs ICRjb25maWcpID0gJGNsYXNzLT5wYXJzZV9zZWN0aW9uX2hlYWRlcigkbGluZSkKKworUGFyc2Vz IHRoZSBoZWFkZXIgb2YgYSBzZWN0aW9uIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcg dGhlIHNlY3Rpb24ncworQzx0eXBlPiwgSUQgYW5kIG9wdGlvbmFsbHkgYW4gZXJyb3IgbWVzc2Fn ZSBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgY29uZmlnCithdHRyaWJ1dGVzLgorCitDYW4gYmUgb3Zl cnJpZGVuIG9uIHRoZSBJPGJhc2UgcGx1Z2luPiBpbiBvcmRlciB0byBwcm92aWRlIGN1c3RvbSBs b2dpYyBmb3IKK2hhbmRsaW5nIHRoZSBoZWFkZXIsIGUuZy4gaWYgdGhlIHNlY3Rpb24gSURzIG5l ZWQgdG8gYmUgcGFyc2VkIG9yIHZhbGlkYXRlZCBpbgorYSBjZXJ0YWluIHdheS4KKworRm9yIGV4 YW1wbGU6CisKKyAgICBzdWIgcGFyc2Vfc2VjdGlvbl9oZWFkZXIgeworCW15ICgkY2xhc3MsICRs aW5lKSA9IEBfOworCisJaWYgKCRsaW5lID1+IG0vXihcUyk6XHMqKFxTKylccyokLykgeworCSAg ICBteSAoJHR5cGUsICRzZWN0aW9uSWQpID0gKCQxLCAkMik7CisKKwkgICAgbXkgJGVycm1zZyA9 IHVuZGVmOworCSAgICBldmFsIHsgY2hlY2tfc2VjdGlvbl9pZF9pc192YWxpZCgkc2VjdGlvbklk KTsgfTsKKwkgICAgJGVycm1zZyA9ICRAIGlmICRAOworCisJICAgIG15ICRjb25maWcgPSBwYXJz ZV9leHRyYV9zdHVmZl9mcm9tX3NlY3Rpb25faWQoJHNlY3Rpb25JZCk7CisKKwkgICAgcmV0dXJu ICgkdHlwZSwgJHNlY3Rpb25JZCwgJGVycm1zZywgJGNvbmZpZyk7CisJfQorCXJldHVybiB1bmRl ZjsKKyAgICB9CisKKz1jdXQKKwogc3ViIHBhcnNlX3NlY3Rpb25faGVhZGVyIHsKICAgICBteSAo JGNsYXNzLCAkbGluZSkgPSBAXzsKIApAQCAtNDg1LDEyICsxMDM5LDM5IEBAIHN1YiBwYXJzZV9z ZWN0aW9uX2hlYWRlciB7CiAgICAgcmV0dXJuIHVuZGVmOwogfQogCis9cG9kCisKKz1oZWFkMyBm b3JtYXRfc2VjdGlvbl9oZWFkZXIKKworQjxPUFRJT05BTDo+IENhbiBiZSBvdmVycmlkZGVuIGlu IHRoZSBJPGJhc2UgcGx1Z2luPi4KKworICAgICRoZWFkZXIgPSBQVkU6OkV4YW1wbGU6OkJhc2VQ bHVnaW4tPmZvcm1hdF9zZWN0aW9uX2hlYWRlcigkdHlwZSwgJHNlY3Rpb25JZCwgJHNjZmcsICRk b25lX2hhc2gpCisgICAgJGhlYWRlciA9ICRjbGFzcy0+Zm9ybWF0X3NlY3Rpb25faGVhZGVyKCR0 eXBlLCAkc2VjdGlvbklkLCAkc2NmZywgJGRvbmVfaGFzaCkKKworRm9ybWF0cyB0aGUgaGVhZGVy IG9mIGEgc2VjdGlvbi4gU2ltcGx5IEM8IiR0eXBlOiAkc2VjdGlvbklkXG4iPiBieSBkZWZhdWx0 LgorCitOb3RlIHRoYXQgd2hlbiBvdmVycmlkaW5nIHRoaXMsIHRoZSBoZWFkZXIgQjxNVVNUPiBl bmQgd2l0aCBhIG5ld2xpbmUgKEM8XG4+KS4KK09uZSBhbHNvIG1pZ2h0IHdhbnQgdG8gYWRkIGEg bWF0Y2hpbmcgb3ZlcnJpZGUgZm9yIEM8cGFyc2Vfc2VjdGlvbl9oZWFkZXI+LgorCis9Y3V0CisK IHN1YiBmb3JtYXRfc2VjdGlvbl9oZWFkZXIgewogICAgIG15ICgkY2xhc3MsICR0eXBlLCAkc2Vj dGlvbklkLCAkc2NmZywgJGRvbmVfaGFzaCkgPSBAXzsKIAogICAgIHJldHVybiAiJHR5cGU6ICRz ZWN0aW9uSWRcbiI7CiB9CiAKKz1wb2QKKworPWhlYWQzIGdldF9wcm9wZXJ0eV9zY2hlbWEKKwor ICAgICRzY2hlbWEgPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmdldF9wcm9wZXJ0eV9zY2hl bWEoJHR5cGUsICRrZXkpCisgICAgJHNjaGVtYSA9ICRjbGFzcy0+Z2V0X3Byb3BlcnR5X3NjaGVt YSgkdHlwZSwgJGtleSkKKworUmV0dXJucyB0aGUgc2NoZW1hIG9mIHRoZSBMPHByb3BlcnR5fC9w cm9wZXJ0aWVzPiBDPCRrZXk+IG9mIHRoZSBwbHVnaW4gZm9yIEM8JHR5cGU+LgorCis9Y3V0CisK IHN1YiBnZXRfcHJvcGVydHlfc2NoZW1hIHsKICAgICBteSAoJGNsYXNzLCAkdHlwZSwgJGtleSkg PSBAXzsKIApAQCAtNTA2LDYgKzEwODcsMTA2IEBAIHN1YiBnZXRfcHJvcGVydHlfc2NoZW1hIHsK ICAgICByZXR1cm4gJHNjaGVtYTsKIH0KIAorPXBvZAorCis9aGVhZDMgcGFyc2VfY29uZmlnCisK KyAgICAkY29uZmlnID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5wYXJzZV9jb25maWcoJGZp bGVuYW1lLCAkcmF3LCAkYWxsb3dfdW5rbm93bikKKyAgICAkY29uZmlnID0gJGNsYXNzLT5wYXJz ZV9jb25maWcoJGZpbGVuYW1lLCAkcmF3LCAkYWxsb3dfdW5rbm93bikKKworUGFyc2VzIHRoZSBj b250ZW50cyBvZiBhIGZpbGUgYXMgQzxTZWN0aW9uQ29uZmlnPiwgcmV0dXJuaW5nIHRoZSBwYXJz ZWQgZGF0YQorYW5ub3RlZCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gKHNlZSBiZWxvdyku CisKKz1vdmVyCisKKz1pdGVtIEM8JGZpbGVuYW1lPgorCitUaGUgbmFtZSBvZiB0aGUgZmlsZSB3 aG9zZSBjb250ZW50IGlzIHN0b3JlZCBpbiBDPCRyYXc+LgorCitPbmx5IHVzZWQgZm9yIGVycm9y IG1lc3NhZ2VzIGFuZCB3YXJuaW5ncywgc28gaXQgbWF5IGFsc28gYmUgc29tZXRoaW5nIGVsc2Uu CisKKz1pdGVtIEM8JHJhdz4KKworVGhlIHJhdyBjb250ZW50IG9mIEM8JGZpbGVuYW1lPi4KKwor PWl0ZW0gQzwkYWxsb3dfdW5rbm93bj4KKworV2hldGhlciB0byBhbGxvdyBwYXJzaW5nIHVua25v d24gSTx0eXBlcz4uCisKKz1iYWNrCisKK1RoZSByZXR1cm5lZCBoYXNoIGlzIHN0cnVjdHVyZWQg YXMgZm9sbG93czoKKworICAgIHsKKwlpZHMgPT4geworCSAgICBmb28gPT4geworCQlrZXkgPT4g dmFsdWUsCisJCS4uLgorCSAgICB9LAorCSAgICBiYXIgPT4geworCQlrZXkgPT4gdmFsdWUsCisJ CS4uLgorCSAgICB9LAorCX0sCisJb3JkZXIgPT4geworCSAgICBmb28gPT4gMSwKKwkgICAgYmFy ID0+IDIsCisJfSwKKwlkaWdlc3QgPT4gIjVmNTUxM2Y4ODIyZmRiZTUxNDVhZjMzYjY0ZDhkOTcw ZGNmOTVjNmUiLAorCWVycm9ycyA9PiAoCisJICAgIHsKKwkJY29udGV4dCA9PiAuLi4sCisJCXNl Y3Rpb24gPT4gInNlY3Rpb24gSUQiLAorCQlrZXkgPT4gInNvbWVfa2V5IiwKKwkJZXJyID0+ICJl cnJvciBtZXNzYWdlIiwKKwkgICAgfSwKKwkgICAgLi4uCisJKSwKKyAgICB9CisKKz1vdmVyCisK Kz1pdGVtIEM8aWRzPgorCitFYWNoIHNlY3Rpb24ncyBwYXJzZWQgZGF0YSAodmlhIEM8TDwvY2hl Y2tfY29uZmlnPj4pLCBpbmRleGVkIGJ5IHRoZSBzZWN0aW9uIElELgorCis9aXRlbSBDPG9yZGVy PgorCitUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIHNlY3Rpb25zIGluIEM8aWRzPiB3ZXJlIGZvdW5k IGluIHRoZSBjb25maWcgZmlsZS4KKworPWl0ZW0gQzxkaWdlc3Q+CisKK0EgU0hBMSBoZXggZGln ZXN0IG9mIHRoZSBjb250ZW50cyBpbiBDPCRyYXc+LiBNYXkgZm9yIGV4YW1wbGUgYmUgdXNlZCB0 byBjaGVjaword2hldGhlciB0aGUgY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZCBiZXR3ZWVuIHBh cnNlcy4KKworPWl0ZW0gQzxlcnJvcnM+IChvcHRpb25hbCkKKworQW4gb3B0aW9uYWwgbGlzdCBv ZiBlcnJvciBoYXNoZXMsIHdoZXJlIGVhY2ggaGFzaCBjb250YWlucyB0aGUgZm9sbG93aW5nIGtl eXM6CisKKz1vdmVyIDIKKworPWl0ZW0gQzxjb250ZXh0PgorCitJbiB3aGljaCBmaWxlIGFuZCBp biB3aGljaCBsaW5lIHRoZSBlcnJvciB3YXMgZW5jb3VudGVyZWQuCisKKz1pdGVtIEM8c2VjdGlv bj4KKworSW4gd2hpY2ggc2VjdGlvbiB0aGUgZXJyb3Igd2FzIGVuY291bnRlcmVkLgorCis9aXRl bSBDPGtleT4KKworV2hpY2ggSTxwcm9wZXJ0eT4gdGhlIGVycm9yIGNvcnJlc3BvbmRzIHRvLgor Cis9aXRlbSBDPGVycj4KKworVGhlIGVycm9yLgorCis9YmFjaworCis9YmFjaworCis9Y3V0CisK IHN1YiBwYXJzZV9jb25maWcgewogICAgIG15ICgkY2xhc3MsICRmaWxlbmFtZSwgJHJhdywgJGFs bG93X3Vua25vd24pID0gQF87CiAKQEAgLTY0Miw2ICsxMzIzLDU4IEBAIHN1YiBwYXJzZV9jb25m aWcgewogICAgIHJldHVybiAkY2ZnOwogfQogCis9cG9kCisKKz1oZWFkMyBjaGVja19jb25maWcK KworICAgICRzZXR0aW5ncyA9IFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+Y2hlY2tfY29uZmln KCRzZWN0aW9uSWQsICRjb25maWcsICRjcmVhdGUsICRza2lwU2NoZW1hQ2hlY2spCisgICAgJHNl dHRpbmdzID0gJGNsYXNzLT5jaGVja19jb25maWcoJHNlY3Rpb25JZCwgJGNvbmZpZywgJGNyZWF0 ZSwgJHNraXBTY2hlbWFDaGVjaykKKworRG9lcyBub3QganVzdCBjaGVjayB3aGV0aGVyIGEgc2Vj dGlvbidzIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQsIGRlc3BpdGUgaXRzCituYW1lLCBidXQgYWxz byBjYWxscyBjaGVja3MgdmFsdWVzIG9mIEk8TDwvcHJvcGVydGllcz4+IHdpdGggQzxMPC9jaGVj a192YWx1ZT4+CitiZWZvcmUgZGVjb2RpbmcgdGhlbSB1c2luZyBDPEw8L2RlY29kZV92YWx1ZT4+ LgorCitSZXR1cm5zIGEgaGFzaCB3aGljaCBjb250YWlucyBhbGwgSTxMPC9wcm9wZXJ0aWVzPj4g Zm9yIHRoZSBnaXZlbiBDPCRzZWN0aW9uSWQ+LgorSW4gb3RoZXIgd29yZHMsIGFsbCBjb25maWd1 cmVkIGtleS12YWx1ZSBwYWlycyBmb3IgdGhlIHByb3ZpZGVkIHNlY3Rpb24uCisKKz1vdmVyCisK Kz1pdGVtIEM8JHNlY3Rpb25JZD4KKworVGhlIGlkZW50aWZpZXIgb2YgYSBzZWN0aW9uLCBhcyBy ZXR1cm5lZCBieSBDPEw8L3BhcnNlX3NlY3Rpb25faGVhZGVyPj4uCisKKz1pdGVtIEM8JGNvbmZp Zz4KKworVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlY3Rpb24gY29ycmVzcG9uZGluZyB0byBD PCRzZWN0aW9uSWQ+LgorCis9aXRlbSBDPCRjcmVhdGU+CisKK0lmIHNldCB0byBDPDE+LCBjaGVj a3Mgd2hldGhlciBhIHZhbHVlIGhhcyBiZWVuIHNldCBmb3IgYWxsIHJlcXVpcmVkCitJPEw8L3By b3BlcnRpZXM+PiBvZiBDPCRjb25maWc+CisKKz1pdGVtIEM8JHNraXBTY2hlbWFDaGVjaz4KKwor V2hldGhlciB0byBza2lwIHBlcmZvcm1pbmcgYW55IEM8UFZFOjpKU09OU2NoZW1hPiBwcm9wZXJ0 eSBjaGVja3MuCisKKz1iYWNrCisKKz1oZWFkNCBBIE5vdGUgb24gRXh0ZW5kaW5nIGFuZCBPdmVy cmlkaW5nCisKK0lmIGFkZGl0aW9uYWwgY2hlY2tzIGFyZSBuZWVkZWQgdGhhdCBjYW5ub3QgYmUg ZXhwcmVzc2VkIGluIHRoZSBzY2hlbWEsIHRoaXMKK21ldGhvZCBtYXkgYmUgZXh0ZW5kZWQgb3Ig b3ZlcnJpZGRlbiBJPHdpdGggY2FyZT4uCisKK1doZW4gdGhpcyBtZXRob2QgaXMgSTxvdmVycmlk ZGVuPiwgYXMgaW4gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGlzIHJlcGxhY2VkCitjb21w bGV0ZWx5LCBhbGwgdmFsdWVzIG11c3Qgc3RpbGwgYmUgY2hlY2tlZCB2aWEgQzxMPC9jaGVja192 YWx1ZT4+IGFuZCBkZWNvZGVkCit3aXRoIEM8TDwvZGVjb2RlX3ZhbHVlPj4uCisKK1doZW4gZXh0 ZW5kaW5nIHRoZSBtZXRob2QsIGFzIGluIGNhbGxpbmcgQzwkY2xhc3MtRTxndD5TVVBFUjo6Y2hl Y2tfY29uZmlnPgoraW5zaWRlIHRoZSByZWRlZmluZWQgbWV0aG9kLCBpdCBpcyBpbXBvcnRhbnQg dG8gbm90ZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUKK2hhc2ggcmV0dXJuZWQgYnkgdGhlIEM8 U1VQRVI+IGNhbGwgZGlmZmVyIGZyb20gdGhlIGNvbnRlbnRzIG9mIEM8JGNvbmZpZz4uIFRoaXMK K21lYW5zIHRoYXQgYSBjdXN0b20gY2hlY2sgcGVyZm9ybWVkIEk8YmVmb3JlPiB0aGUgQzxTVVBF Uj4gY2FsbCBjYW5ub3QKK25lY2Vzc2FyaWx5IGJlIHBlcmZvcm1lZCBpbiB0aGUgc2FtZSB3YXkg STxhZnRlcj4gdGhlIEM8U1VQRVI+IGNhbGwuCisKKz1jdXQKKwogc3ViIGNoZWNrX2NvbmZpZyB7 CiAgICAgbXkgKCRjbGFzcywgJHNlY3Rpb25JZCwgJGNvbmZpZywgJGNyZWF0ZSwgJHNraXBTY2hl bWFDaGVjaykgPSBAXzsKIApAQCAtNzAwLDYgKzE0MzMsNTUgQEAgbXkgJGZvcm1hdF9jb25maWdf bGluZSA9IHN1YiB7CiAgICAgfQogfTsKIAorPXBvZAorCis9aGVhZDMgd3JpdGVfY29uZmlnCisK KyAgICAkb3V0cHV0ID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT53cml0ZV9jb25maWcoJGZp bGVuYW1lLCAkY2ZnLCAkYWxsb3dfdW5rbm93bikKKyAgICAkb3V0cHV0ID0gJGNsYXNzLT53cml0 ZV9jb25maWcoJGZpbGVuYW1lLCAkY2ZnLCAkYWxsb3dfdW5rbm93bikKKworR2VuZXJhdGVzIHRo ZSBvdXRwdXQgdGhhdCBzaG91bGQgYmUgd3JpdHRlbiB0byB0aGUgQzxTZWN0aW9uQ29uZmlnPiBm aWxlLgorCis9b3ZlcgorCis9aXRlbSBDPCRmaWxlbmFtZT4gKHVudXNlZCkKKworVGhlIG5hbWUg b2YgdGhlIGZpbGUgdG8gd2hpY2ggdGhlIGdlbmVyYXRlZCBvdXRwdXQgd2lsbCBiZSB3cml0dGVu IHRvLgorVGhpcyBwYXJhbWV0ZXIgaXMgY3VycmVudGx5IHVudXNlZCBhbmQgaGFzIG5vIGVmZmVj dC4KKworPWl0ZW0gQzwkY2ZnPgorCitUaGUgaGFzaCB0aGF0IHJlcHJlc2VudHMgdGhlIGVudGly ZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4uCitUaGlzIGhhc2ggaXMgZXhw ZWN0ZWQgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICAgIHsKKwlpZHMgPT4gewor CSAgICBmb28gPT4geworCQlrZXkgPT4gdmFsdWUsCisJCS4uLgorCSAgICB9LAorCSAgICBiYXIg PT4geworCQlrZXkgPT4gdmFsdWUsCisJCS4uLgorCSAgICB9LAorCX0sCisJb3JkZXIgPT4gewor CSAgICBmb28gPT4gMSwKKwkgICAgYmFyID0+IDIsCisJfSwKKyAgICB9CisKK0FueSBvdGhlciB0 b3AtbGV2ZWwga2V5cyB3aWxsIGJlIGlnbm9yZWQsIHNvIGl0J3Mgb2theSB0byBwYXNzIGFsb25n IHRoZQorQzxkaWdlc3Q+IGtleSBmcm9tIEM8TDwvcGFyc2VfY29uZmlnPj4sIGZvciBleGFtcGxl LgorCis9aXRlbSBDPCRhbGxvd191bmtub3duPgorCitXaGV0aGVyIHRvIGFsbG93IHdyaXRpbmcg c2VjdGlvbnMgd2l0aCBhbiB1bmtub3duIEk8TDwvdHlwZT4+LgorCis9YmFjaworCis9Y3V0CisK IHN1YiB3cml0ZV9jb25maWcgewogICAgIG15ICgkY2xhc3MsICRmaWxlbmFtZSwgJGNmZywgJGFs bG93X3Vua25vd24pID0gQF87CiAKQEAgLTc5OCw2ICsxNTgwLDQ3IEBAIHN1YiBhc3NlcnRfaWZf bW9kaWZpZWQgewogICAgIFBWRTo6VG9vbHM6OmFzc2VydF9pZl9tb2RpZmllZCgkY2ZnLT57ZGln ZXN0fSwgJGRpZ2VzdCk7CiB9CiAKKz1wb2QKKworPWhlYWQzIGRlbGV0ZV9mcm9tX2NvbmZpZwor CisgICAgJGNvbmZpZyA9IGRlbGV0ZV9mcm9tX2NvbmZpZygkY29uZmlnLCAkb3B0aW9uX3NjaGVt YSwgJG5ld19vcHRpb25zLCAkdG9fZGVsZXRlKQorCitDb252ZW5pZW5jZSBoZWxwZXIgbWV0aG9k IHVzZWQgaW50ZXJuYWxseSB0byBkZWxldGUga2V5cyBmcm9tIHRoZSBzaW5nbGUgc2VjdGlvbgor Y29uZmlnIEM8JGNvbmZpZz4uCisKK1NwZWNpZmljYWxseSwgdGhlIGtleXMgZ2l2ZW4gYnkgQzwk dG9fZGVsZXRlPiBhcmUgZGVsZXRlZCBmcm9tIEM8JGNvbmZpZz4gaWYKK3RoZXkncmUgbm90IHJl cXVpcmVkIG9yIGZpeGVkLCBvciBzZXQgaW4gdGhlIHNhbWUgZ28uCisKK05vdGU6IFRoZSBwYXNz ZWQgQzwkY29uZmlnPiBpcyBtb2RpZmllZCBpbiBwbGFjZSBhbmQgYWxzbyByZXR1cm5lZC4KKwor PW92ZXIKKworPWl0ZW0gQzwkY29uZmlnPgorCitUaGUgc2VjdGlvbidzIGNvbmZpZ3VyYXRpb24g dGhhdCB0aGUgZ2l2ZW4gSTxMPC9wcm9wZXJ0aWVzPj4gaW4gQzwkdG9fZGVsZXRlPgorc2hvdWxk IGJlIGRlbGV0ZWQgZnJvbS4KKworPWl0ZW0gQzwkb3B0aW9uX3NjaGVtYT4KKworVGhlIHNjaGVt YSBvZiB0aGUgSTxMPC9wcm9wZXJ0aWVzPj4gYXNzb2NpYXRlZCB3aXRoIEM8JGNvbmZpZz4uIFNl ZSB0aGUKK0M8TDwvb3B0aW9ucz4+IG1ldGhvZC4KKworPWl0ZW0gQzwkbmV3X29wdGlvbnM+CisK K1RoZSBJPEw8L3Byb3BlcnRpZXM+PiB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIEM8JGNvbmZpZz4u IE5vdGUgdGhhdCB0aGlzIG1ldGhvZAorZG9lc24ndCBhZGQgYW55IEk8TDwvcHJvcGVydGllcz4+ IGl0c2VsZjsgdGhpcyBpcyB0byBwcm9oaWJpdCBzaW11bHRhbmVvdXNseQorc2V0dGluZyBhbmQg ZGVsZXRpbmcgdGhlIHNhbWUgSTxwcm9wZXJ0eT4uCisKKz1pdGVtIEM8JHRvX2RlbGV0ZT4KKwor QSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIEk8cHJv cGVydGllcz4gdG8gZGVsZXRlCitmcm9tIEM8JGNvbmZpZz4uCisKKz1iYWNrCisKKz1jdXQKKwog c3ViIGRlbGV0ZV9mcm9tX2NvbmZpZyB7CiAgICAgbXkgKCRjb25maWcsICRvcHRpb25fc2NoZW1h LCAkbmV3X29wdGlvbnMsICR0b19kZWxldGUpID0gQF87CiAKLS0gCjIuMzkuMgoKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGlu ZyBsaXN0CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3gu Y29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK