From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3DA54C83F1A for ; Fri, 18 Jul 2025 11:28:49 +0000 (UTC) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 5D2723CA0C0 for ; Fri, 18 Jul 2025 13:28:47 +0200 (CEST) Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [217.194.8.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id 4BA7C3C2128 for ; Fri, 18 Jul 2025 13:28:35 +0200 (CEST) Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id 9608960085C for ; Fri, 18 Jul 2025 13:28:33 +0200 (CEST) Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 8DEA21F38A; Fri, 18 Jul 2025 11:28:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1752838112; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=qs8XFPXsGra8VxWRz+UDaUGMoG6mG0TkPFBtu3jzlFQ=; b=Vq++AOY56CkRruZibMUzfrae8d5VNcp8QlBoJV8Qawup3vjyg17U/Xt6UizRx2wCyTLrMo DTyHAaNZQlA/HDLzPO45trKAy2t4ivh1a1vdU7qj14Qrr3O5Vqy17hhyiJTm9oDJBHo35p fO7SFr9c2iZ4YH4AkzUOJB//doHuzmE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1752838112; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=qs8XFPXsGra8VxWRz+UDaUGMoG6mG0TkPFBtu3jzlFQ=; b=e3wE8cT6Cf8NSNDJWXZSI6enaLfz82jrBU7I6txigN+Z6AMwb35lzp7FTrMgQxrkys6Aes 4uOSDJUO+yktPeBw== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=Vq++AOY5; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=e3wE8cT6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1752838112; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=qs8XFPXsGra8VxWRz+UDaUGMoG6mG0TkPFBtu3jzlFQ=; b=Vq++AOY56CkRruZibMUzfrae8d5VNcp8QlBoJV8Qawup3vjyg17U/Xt6UizRx2wCyTLrMo DTyHAaNZQlA/HDLzPO45trKAy2t4ivh1a1vdU7qj14Qrr3O5Vqy17hhyiJTm9oDJBHo35p fO7SFr9c2iZ4YH4AkzUOJB//doHuzmE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1752838112; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=qs8XFPXsGra8VxWRz+UDaUGMoG6mG0TkPFBtu3jzlFQ=; b=e3wE8cT6Cf8NSNDJWXZSI6enaLfz82jrBU7I6txigN+Z6AMwb35lzp7FTrMgQxrkys6Aes 4uOSDJUO+yktPeBw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 541B4138D2; Fri, 18 Jul 2025 11:28:32 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id yu7QEuAvemjjfgAAD6G6ig (envelope-from ); Fri, 18 Jul 2025 11:28:32 +0000 From: Andrea Cervesato Date: Fri, 18 Jul 2025 13:27:46 +0200 MIME-Version: 1.0 Message-Id: <20250718-doc_kvm_tests-v1-1-47519ff26d62@suse.com> X-B4-Tracking: v=1; b=H4sIALEvemgC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDI1MDc0ML3ZT85Pjsstz4ktTikmLdZJNEQwPDZNOkNEsLJaCegqLUtMwKsHn RsbW1APvDjXJfAAAA X-Change-ID: 20250718-doc_kvm_tests-c4a101c5bf98 To: ltp@lists.linux.it X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1752838112; l=45218; i=andrea.cervesato@suse.com; s=20240812; h=from:subject:message-id; bh=HtckcWT+63ERy27oagU62NrwX7Y9Zwjk7UP3MWdNocs=; b=BlXZreisWhD7wdMerF4si80wMlWwS6vd77j5BwVOgjqn8EV2Kl+x2Bjwrebvg5RKDvoKKsggK SMFNHzTY/UBA6xMoevUMoMVfa6xdGXmsm2HV6AsryWx9Za7Y10paJip X-Developer-Key: i=andrea.cervesato@suse.com; a=ed25519; pk=RG/nLJ5snb1tLKGwSORQXBJ5XA4juT0WF2Pc/lq9meo= X-Spamd-Result: default: False [-4.51 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; TO_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received]; RCPT_COUNT_THREE(0.00)[3]; RCVD_VIA_SMTP_AUTH(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.com:mid,suse.com:email] X-Rspamd-Queue-Id: 8DEA21F38A X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Rspamd-Action: no action X-Virus-Scanned: clamav-milter 1.0.7 at in-5.smtp.seeweb.it X-Virus-Status: Clean Subject: [LTP] [PATCH] doc: add kvm tests documentation X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ltp-bounces+ltp=archiver.kernel.org@lists.linux.it Sender: "ltp" RnJvbTogQW5kcmVhIENlcnZlc2F0byA8YW5kcmVhLmNlcnZlc2F0b0BzdXNlLmNvbT4KCkNvbnZl cnRlZCBLVk0gVGVzdHMgQVBJIGRvY3VtZW50YXRpb24gaW50byBSU1QgZm9ybWF0IGFuZCBmaXhl ZApncmFtbWF0aWNhbCBlcnJvcnMgaW4gdGhlIHRleHQuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZWEg Q2VydmVzYXRvIDxhbmRyZWEuY2VydmVzYXRvQHN1c2UuY29tPgotLS0KIGRvYy9kZXZlbG9wZXJz L2FwaV9rdm1fdGVzdHMucnN0IHwgNDc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBkb2Mvb2xkL0tWTS1UZXN0LUFQSS5hc2NpaWRvYyAgICB8IDQ4NyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNDc4IGluc2Vy dGlvbnMoKyksIDQ4NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvZGV2ZWxvcGVycy9h cGlfa3ZtX3Rlc3RzLnJzdCBiL2RvYy9kZXZlbG9wZXJzL2FwaV9rdm1fdGVzdHMucnN0CmluZGV4 IDVlYzNmYzNhNGRiODIwMDBkNTUyMDNmYWM3OTQ1NTA4ZTQ4MmExMDguLjYyNjViN2VlZDAyNmNm NWJmNmQwMDEzNGI5NTBjM2M0OGFjNzczNDkgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZlbG9wZXJzL2Fw aV9rdm1fdGVzdHMucnN0CisrKyBiL2RvYy9kZXZlbG9wZXJzL2FwaV9rdm1fdGVzdHMucnN0CkBA IC01LDMgKzUsNDgxIEBACiAKIERldmVsb3BpbmcgdXNpbmcgS1ZNIEFQSQogPT09PT09PT09PT09 PT09PT09PT09PT09CisKK1Rlc3RpbmcgS1ZNIGlzIG1vcmUgY29tcGxleCB0aGFuIG90aGVyIExp bnV4IGZlYXR1cmVzLiBTb21lIEtWTSBidWdzIGFsbG93Cit1c2Vyc3BhY2UgY29kZSBydW5uaW5n IGluc2lkZSB0aGUgdmlydHVhbCBtYWNoaW5lIHRvIGJ5cGFzcyAoZW11bGF0ZWQpIGhhcmR3YXJl CithY2Nlc3MgcmVzdHJpY3Rpb25zIGFuZCBlbGV2YXRlIGl0cyBwcml2aWxlZ2VzIGluc2lkZSB0 aGUgZ3Vlc3Qgb3BlcmF0aW5nCitzeXN0ZW0uIFRoZSB3b3JzdCB0eXBlcyBvZiBLVk0gYnVncyBt YXkgZXZlbiBhbGxvdyB0aGUgZ3Vlc3QgY29kZSB0byBjcmFzaCBvcgorY29tcHJvbWlzZSB0aGUg cGh5c2ljYWwgaG9zdC4gS1ZNIHRlc3RzIHRoZXJlZm9yZSBuZWVkIHRvIGJlIHNwbGl0IGludG8g dHdvCitjb21wb25lbnRzIOKAkyBhIEtWTSBjb250cm9sbGVyIHByb2dyYW0gcnVubmluZyBvbiB0 aGUgcGh5c2ljYWwgaG9zdCBhbmQgYSBndWVzdAorcGF5bG9hZCBwcm9ncmFtIHJ1bm5pbmcgaW5z aWRlIHRoZSBWTS4gVGhlIGNvb3BlcmF0aW9uIG9mIHRoZXNlIHR3byBjb21wb25lbnRzCithbGxv d3MgdGVzdGluZyBldmVuIG9mIGJ1Z3MgdGhhdCBzb21laG93IGNyb3NzIHRoZSB2aXJ0dWFsaXph dGlvbiBib3VuZGFyeS4KKworQmFzaWMgS1ZNIFRlc3QgU3RydWN0dXJlCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworS1ZNIHRlc3RzIGFyZSBzaW1wbGUgQyBzb3VyY2UgZmlsZXMgY29udGFp bmluZyBib3RoIHRoZSBLVk0gY29udHJvbGxlciBjb2RlCithbmQgdGhlIGd1ZXN0IHBheWxvYWQg Y29kZSBzZXBhcmF0ZWQgYnkgYGAjaWZkZWYgQ09NUElMRV9QQVlMT0FEYGAgcHJlcHJvY2Vzc29y Citjb25kaXRpb24uIFRoZSBmaWxlIHdpbGwgYmUgY29tcGlsZWQgdHdpY2U6IG9uY2UgdG8gY29t cGlsZSB0aGUgcGF5bG9hZCBwYXJ0LAorYW5kIG9uY2UgdG8gY29tcGlsZSB0aGUgS1ZNIGNvbnRy b2xsZXIgcGFydCBhbmQgZW1iZWQgdGhlIHBheWxvYWQgYmluYXJ5IGluc2lkZS4KK1RoZSByZXN1 bHQgaXMgYSBzaW5nbGUgc2VsZi1jb250YWluZWQgYmluYXJ5IHRoYXQgd2lsbCBleGVjdXRlIHRo ZSBlbWJlZGRlZAorcGF5bG9hZCBpbnNpZGUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGFuZCBwcmlu dCByZXN1bHRzIGluIHRoZSBzYW1lIGZvcm1hdCBhcworYSBub3JtYWwgTFRQIHRlc3QuCisKK0Eg S1ZNIHRlc3Qgc291cmNlIHNob3VsZCBzdGFydCB3aXRoIGBgI2luY2x1ZGUgImt2bV90ZXN0Lmgi YGAgaW5zdGVhZCBvZiB0aGUKK3VzdWFsIGBgdHN0X3Rlc3QuaGBgLiBUaGUgYGBrdm1fdGVzdC5o YGAgaGVhZGVyIGZpbGUgd2lsbCBpbmNsdWRlIHRoZSBvdGhlciBiYXNpYworaGVhZGVycyBhcHBy b3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gcGFzcy4gRXZlcnl0aGluZyBlbHNl IGluIHRoZQorc291cmNlIGZpbGUgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGBgI2lmZGVmIENPTVBJ TEVfUEFZTE9BRCAuLi4gI2Vsc2UgLi4uICNlbmRpZmBgCitjb25kaXRpb24sIGluY2x1ZGluZyBh bnkgb3RoZXIgaGVhZGVyIGZpbGUgaW5jbHVkZXMuIE5vdGUgdGhhdCB0aGUgc3RhbmRhcmQKK0xU UCBoZWFkZXJzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBwYXlsb2FkIGNvbXBpbGF0aW9uIHBh c3M7IG9ubHkgdGhlIEtWTQorZ3Vlc3QgbGlicmFyeSBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZC4K KworLi4gX2V4YW1wbGUta3ZtLXRlc3Q6CisKKy4uIHJ1YnJpYzo6IEV4YW1wbGUgS1ZNIFRlc3QK KworLi4gY29kZS1ibG9jazo6IGMKKworICAgICNpbmNsdWRlICJrdm1fdGVzdC5oIgorCisgICAg I2lmZGVmIENPTVBJTEVfUEFZTE9BRAorCisgICAgLyogR3Vlc3QgcGF5bG9hZCBjb2RlICovCisK KyAgICB2b2lkIG1haW4odm9pZCkKKyAgICB7CisgICAgCXRzdF9yZXMoVFBBU1MsICJIZWxsbywg d29ybGQhIik7CisgICAgfQorCisgICAgI2Vsc2UgLyogQ09NUElMRV9QQVlMT0FEICovCisKKyAg ICAvKiBLVk0gY29udHJvbGxlciBjb2RlICovCisKKyAgICBzdGF0aWMgc3RydWN0IHRzdF90ZXN0 IHRlc3QgPSB7CisgICAgCS50ZXN0X2FsbCA9IHRzdF9rdm1fcnVuLAorICAgIAkuc2V0dXAgPSB0 c3Rfa3ZtX3NldHVwLAorICAgIAkuY2xlYW51cCA9IHRzdF9rdm1fY2xlYW51cCwKKyAgICB9Owor CisgICAgI2VuZGlmIC8qIENPTVBJTEVfUEFZTE9BRCAqLworCitUaGUgS1ZNIGNvbnRyb2xsZXIg Y29kZSBpcyBhIG5vcm1hbCBMVFAgdGVzdCBhbmQgbmVlZHMgdG8gZGVmaW5lIGFuIGluc3RhbmNl CitvZiBgYHN0cnVjdCB0c3RfdGVzdGBgIHdpdGggbWV0YWRhdGEgYW5kIHRoZSB1c3VhbCBzZXR1 cCwgY2xlYW51cCwgYW5kIHRlc3QKK2Z1bmN0aW9ucy4gQmFzaWMgaW1wbGVtZW50YXRpb24gb2Yg YWxsIHRocmVlIGZ1bmN0aW9ucyBpcyBwcm92aWRlZCBieSB0aGUgS1ZNCitob3N0IGxpYnJhcnku CisKK09uIHRoZSBvdGhlciBoYW5kLCB0aGUgcGF5bG9hZCBpcyBlc3NlbnRpYWxseSBhIHRpbnkg a2VybmVsIHRoYXQgd2lsbCBydW4KK29uIGJhcmUgdmlydHVhbCBoYXJkd2FyZS4gSXQgY2Fubm90 IGFjY2VzcyBhbnkgZmlsZXMsIExpbnV4IHN5c2NhbGxzLCBzdGFuZGFyZAorbGlicmFyeSBmdW5j dGlvbnMsIGV0Yy4sIGV4Y2VwdCBmb3IgdGhlIHNtYWxsIHN1YnNldCBwcm92aWRlZCBieSB0aGUg S1ZNIGd1ZXN0CitsaWJyYXJ5LiBUaGUgcGF5bG9hZCBjb2RlIG11c3QgZGVmaW5lIGEgYGB2b2lk IG1haW4odm9pZClgYCBmdW5jdGlvbiB3aGljaCB3aWxsCitiZSB0aGUgVk0gZW50cnkgcG9pbnQg b2YgdGhlIHRlc3QuCisKK0tWTSBIb3N0IExpYnJhcnkKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhl IEtWTSBob3N0IGxpYnJhcnkgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcg YW5kIHJ1bm5pbmcKK2EgbWluaW1hbCBLVk0gdmlydHVhbCBtYWNoaW5lLgorCitEYXRhIFN0cnVj dHVyZXMKK35+fn5+fn5+fn5+fn5+fgorCisuLiBjb2RlLWJsb2NrOjogYworCisgICAgc3RydWN0 IHRzdF9rdm1faW5zdGFuY2UgeworICAgIAlpbnQgdm1fZmQsIHZjcHVfZmQ7CisgICAgCXN0cnVj dCBrdm1fcnVuICp2Y3B1X2luZm87CisgICAgCXNpemVfdCB2Y3B1X2luZm9fc2l6ZTsKKyAgICAJ c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiByYW1bTUFYX0tWTV9NRU1TTE9UU107 CisgICAgCXN0cnVjdCB0c3Rfa3ZtX3Jlc3VsdCAqcmVzdWx0OworICAgIH07CisKK2Bgc3RydWN0 IHRzdF9rdm1faW5zdGFuY2VgYCBob2xkcyB0aGUgZmlsZSBkZXNjcmlwdG9ycyBhbmQgbWVtb3J5 IGJ1ZmZlcnMKK29mIGEgc2luZ2xlIEtWTSB2aXJ0dWFsIG1hY2hpbmU6CisKKyogYGBpbnQgdm1f ZmRgYCBpcyB0aGUgbWFpbiBWTSBmaWxlIGRlc2NyaXB0b3IgY3JlYXRlZCBieSBgYGlvY3RsKEtW TV9DUkVBVEVfVk0pYGAKKyogYGBpbnQgdmNwdV9mZGBgIGlzIHRoZSB2aXJ0dWFsIENQVSBmaWxl IGRlc2NyaXB0b3IgY3JlYXRlZCBieQorICBgYGlvY3RsKEtWTV9DUkVBVEVfVkNQVSlgYAorKiBg YHN0cnVjdCBrdm1fcnVuICp2Y3B1X2luZm9gYCBpcyB0aGUgVkNQVSBzdGF0ZSBzdHJ1Y3R1cmUg Y3JlYXRlZCBieQorICBgYG1tYXAodmNwdV9mZClgYAorKiBgYHNpemVfdCB2Y3B1X2luZm9fc2l6 ZWBgIGlzIHRoZSBzaXplIG9mIGBgdmNwdV9pbmZvYGAgYnVmZmVyCisqIGBgc3RydWN0IGt2bV91 c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiByYW1bTUFYX0tWTV9NRU1TTE9UU11gYCBpcyB0aGUgbGlz dAorICBvZiBtZW1vcnkgc2xvdHMgZGVmaW5lZCBpbiB0aGlzIFZNLiBVbnVzZWQgbWVtb3J5IHNs b3RzIGhhdmUgemVybworICBpbiB0aGUgYGB1c2Vyc3BhY2VfYWRkcmBgIGZpZWxkLgorKiBgYHN0 cnVjdCB0c3Rfa3ZtX3Jlc3VsdCAqcmVzdWx0YGAgaXMgYSBidWZmZXIgZm9yIHBhc3NpbmcgdGVz dCByZXN1bHQgZGF0YQorICBmcm9tIHRoZSBWTSB0byB0aGUgY29udHJvbGxlciBwcm9ncmFtLCBt YWlubHkgYGB0c3RfcmVzKClgYC9gYHRzdF9icmsoKWBgIGZsYWdzCisgIGFuZCBtZXNzYWdlcy4K KworLi4gY29kZS1ibG9jazo6IGMKKworICAgIHN0cnVjdCB0c3Rfa3ZtX3Jlc3VsdCB7CisgICAg CWludDMyX3QgcmVzdWx0OworICAgIAlpbnQzMl90IGxpbmVubzsKKyAgICAJdWludDY0X3QgZmls ZV9hZGRyOworICAgIAljaGFyIG1lc3NhZ2VbMF07CisgICAgfTsKKworYGBzdHJ1Y3QgdHN0X2t2 bV9yZXN1bHRgYCBpcyB1c2VkIHRvIHBhc3MgdGVzdCByZXN1bHRzIGFuZCBzeW5jaHJvbml6YXRp b24gZGF0YQorYmV0d2VlbiB0aGUgS1ZNIGd1ZXN0IGFuZCB0aGUgY29udHJvbGxlciBwcm9ncmFt LiBNb3N0IG9mdGVuLCBpdCBpcyB1c2VkCit0byBwYXNzIGBgdHN0X3JlcygpYGAgYW5kIGBgdHN0 X2JyaygpYGAgbWVzc2FnZXMgZnJvbSB0aGUgVk0sIGJ1dCBzcGVjaWFsIHZhbHVlcworY2FuIGFs c28gYmUgdXNlZCB0byBzZW5kIGNvbnRyb2wgZmxvdyByZXF1ZXN0cyBib3RoIHdheXMuCisKKyog YGBpbnQzMl90IHJlc3VsdGBgIGlzIHRoZSBtZXNzYWdlIHR5cGUsIGVpdGhlciBvbmUgb2YgdGhl IGBgVFBBU1NgYCwgYGBURkFJTGBgLAorICBgYFRXQVJOYGAsIGBgVEJST0tgYCwgYGBUSU5GT2Bg IGZsYWdzIG9yIGEgc3BlY2lhbCBjb250cm9sIGZsb3cgdmFsdWUuIEVycm5vIGZsYWdzCisgIGFy ZSBub3Qgc3VwcG9ydGVkLgorKiBgYGludDMyX3QgbGluZW5vYGAgaXMgdGhlIGxpbmUgbnVtYmVy IGZvciBgYHRzdF9yZXMoKWBgL2BgdHN0X2JyaygpYGAgbWVzc2FnZXMuCisqIGBgdWludDY0X3Qg ZmlsZV9hZGRyYGAgaXMgdGhlIFZNIGFkZHJlc3Mgb2YgdGhlIGZpbGVuYW1lIHN0cmluZyBmb3IK KyAgYGB0c3RfcmVzKClgYC9gYHRzdF9icmsoKWBgIG1lc3NhZ2VzLgorKiBgYGNoYXIgbWVzc2Fn ZVswXWBgIGlzIHRoZSBidWZmZXIgZm9yIGFyYml0cmFyeSBtZXNzYWdlIGRhdGEsIG1vc3Qgb2Z0 ZW4gdXNlZAorICB0byBwYXNzIGBgdHN0X3JlcygpYGAvYGB0c3RfYnJrKClgYCBtZXNzYWdlIHN0 cmluZ3MuCisKK1dvcmtpbmcgd2l0aCBWaXJ0dWFsIE1hY2hpbmVzCit+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fgorCitUaGUgS1ZNIGhvc3QgbGlicmFyeSBwcm92aWRlcyBkZWZhdWx0IGlt cGxlbWVudGF0aW9uIG9mIHRoZSBzZXR1cCwgY2xlYW51cAorYW5kIHRlc3QgZnVuY3Rpb25zIGZv ciBgYHN0cnVjdCB0c3RfdGVzdGBgIGluIGNhc2VzIHdoZXJlIHlvdSBkbyBub3QgbmVlZAordG8g Y3VzdG9taXplIHRoZSBWTSBjb25maWd1cmF0aW9uLiBZb3UgY2FuIGVpdGhlciBhc3NpZ24gdGhl c2UgZnVuY3Rpb25zCit0byB0aGUgYGBzdHJ1Y3QgdHN0X3Rlc3RgYCBpbnN0YW5jZSBkaXJlY3Rs eSBvciBjYWxsIHRoZW0gZnJvbSB5b3VyIG93biBmdW5jdGlvbgordGhhdCBkb2VzIHNvbWUgYWRk aXRpb25hbCBzdGVwcy4gQWxsIHRocmVlIGZ1bmN0aW9ucyBtdXN0IGJlIHVzZWQgdG9nZXRoZXIu CisKKyogYGB2b2lkIHRzdF9rdm1fc2V0dXAodm9pZClgYAorKiBgYHZvaWQgdHN0X2t2bV9ydW4o dm9pZClgYAorKiBgYHZvaWQgdHN0X2t2bV9jbGVhbnVwKHZvaWQpYGAKKworLi4gbm90ZTo6IGBg dHN0X2t2bV9ydW4oKWBgIGNhbGxzIGBgdHN0X2ZyZWVfYWxsKClgYC4gQ2FsbGluZyBpdCB3aWxs IGZyZWUgYWxsCisgICAgICAgICAgcHJldmlvdXNseSBhbGxvY2F0ZWQgZ3VhcmRlZCBidWZmZXJz LgorCisqIGBgdm9pZCB0c3Rfa3ZtX3ZhbGlkYXRlX3Jlc3VsdChpbnQgdmFsdWUpYGAg4oCTIFZh bGlkYXRlcyB3aGV0aGVyIHRoZSB2YWx1ZQorICByZXR1cm5lZCBpbiBgYHN0cnVjdCB0c3Rfa3Zt X3Jlc3VsdC5yZXN1bHRgYCBjYW4gYmUgc2FmZWx5IHBhc3NlZAorICB0byBgYHRzdF9yZXMoKWBg IG9yIGBgdHN0X2JyaygpYGAuIElmIHRoZSB2YWx1ZSBpcyBub3QgdmFsaWQsIHRoZSBjb250cm9s bGVyCisgIHByb2dyYW0gd2lsbCBiZSB0ZXJtaW5hdGVkIHdpdGggYW4gZXJyb3IuCisKKyogYGB1 aW50NjRfdCB0c3Rfa3ZtX2dldF9waHlzX2FkZHJlc3MoY29uc3Qgc3RydWN0IHRzdF9rdm1faW5z dGFuY2UgKmluc3QsIHVpbnQ2NF90IGFkZHIpYGAg4oCTCisgIENvbnZlcnRzIHBvaW50ZXIgdmFs dWUgKHZpcnR1YWwgYWRkcmVzcykgZnJvbSBLVk0gdmlydHVhbAorICBtYWNoaW5lIGBgaW5zdGBg IHRvIHRoZSBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIGFkZHJlc3MuIFJldHVybnMgMCBpZgorICB0 aGUgdmlydHVhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQgdG8gYW55IHBoeXNpY2FsIGFkZHJlc3Mu IElmIHZpcnR1YWwgbWVtb3J5CisgIG1hcHBpbmcgaXMgbm90IGVuYWJsZWQgaW4gdGhlIFZNIG9y IG5vdCBhdmFpbGFibGUgb24gdGhlIGFyY2hpdGVjdHVyZSBhdCBhbGwsIHRoaXMKKyAgZnVuY3Rp b24gc2ltcGx5IHJldHVybnMgYGBhZGRyYGAgYXMgaXMuCisKKyogYGBpbnQgdHN0X2t2bV9maW5k X3BoeXNfbWVtc2xvdChjb25zdCBzdHJ1Y3QgdHN0X2t2bV9pbnN0YW5jZSAqaW5zdCwgdWludDY0 X3QgcGFkZHIpYGAg4oCTCisgIFJldHVybnMgaW5kZXggb2YgdGhlIG1lbW9yeSBzbG90IGluIEtW TSB2aXJ0dWFsIG1hY2hpbmUKKyAgYGBpbnN0YGAgd2hpY2ggY29udGFpbnMgdGhlIHBoeXNpY2Fs IGFkZHJlc3MgYGBwYWRkcmBgLiBJZiB0aGUgYWRkcmVzcyBpcyBub3QKKyAgYmFja2VkIGJ5IGEg bWVtb3J5IGJ1ZmZlciwgcmV0dXJucyAtMS4KKworKiBgYGludCB0c3Rfa3ZtX2ZpbmRfbWVtc2xv dChjb25zdCBzdHJ1Y3QgdHN0X2t2bV9pbnN0YW5jZSAqaW5zdCwgdWludDY0X3QgYWRkcilgYCDi gJMKKyAgUmV0dXJucyBpbmRleCBvZiB0aGUgbWVtb3J5IHNsb3QgaW4gS1ZNIHZpcnR1YWwgbWFj aGluZQorICBgYGluc3RgYCB3aGljaCBjb250YWlucyB0aGUgdmlydHVhbCBhZGRyZXNzIGBgYWRk cmBgLiBJZiB0aGUgdmlydHVhbCBhZGRyZXNzCisgIGlzIG5vdCBtYXBwZWQgdG8gYSB2YWxpZCBw aHlzaWNhbCBhZGRyZXNzIGJhY2tlZCBieSBhIG1lbW9yeSBidWZmZXIsCisgIHJldHVybnMgLTEu CisKKyogYGB2b2lkICp0c3Rfa3ZtX2dldF9tZW1wdHIoY29uc3Qgc3RydWN0IHRzdF9rdm1faW5z dGFuY2UgKmluc3QsIHVpbnQ2NF90IGFkZHIpYGAg4oCTCisgIENvbnZlcnRzIHBvaW50ZXIgdmFs dWUgKHZpcnR1YWwgYWRkcmVzcykgZnJvbSBLVk0gdmlydHVhbAorICBtYWNoaW5lIGBgaW5zdGBg IHRvIGhvc3Qtc2lkZSBwb2ludGVyLgorCisqIGBgdm9pZCAqdHN0X2t2bV9hbGxvY19tZW1vcnko c3RydWN0IHRzdF9rdm1faW5zdGFuY2UgKmluc3QsIHVuc2lnbmVkIGludCBzbG90LCB1aW50NjRf dCBiYXNlYWRkciwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBmbGFncylgYCDigJMKKyAgQWxs b2NhdGVzIGEgZ3VhcmRlZCBidWZmZXIgb2YgZ2l2ZW4gYGBzaXplYGAgaW4gYnl0ZXMgYW5kIGlu c3RhbGxzIGl0IGludG8gc3BlY2lmaWVkIG1lbW9yeSBgYHNsb3RgYAorICBvZiB0aGUgS1ZNIHZp cnR1YWwgbWFjaGluZSBgYGluc3RgYCBhdCBiYXNlIGFkZHJlc3MgYGBiYXNlYWRkcmBgLiBUaGUg YnVmZmVyCisgIHdpbGwgYmUgYXV0b21hdGljYWxseSBwYWdlIGFsaWduZWQgYXQgYm90aCBlbmRz LiBTZWUgdGhlIGtlcm5lbAorICBkb2N1bWVudGF0aW9uIG9mIGBgS1ZNX1NFVF9VU0VSX01FTU9S WV9SRUdJT05gYCBpb2N0bCBmb3IgYSBsaXN0IG9mIHZhbGlkCisgIGBgZmxhZ3NgYC4gUmV0dXJu cyBwb2ludGVyIHRvIHBhZ2UtYWxpZ25lZCBiZWdpbm5pbmcgb2YgdGhlIGFsbG9jYXRlZCBidWZm ZXIuCisgIFRoZSBhY3R1YWwgcmVxdWVzdGVkIGBgYmFzZWFkZHJgYCB3aWxsIGJlIGxvY2F0ZWQg YXQKKyAgYGByZXQgKyBiYXNlYWRkciAlIHBhZ2VzaXplYGAuCisKKyogYGBzdHJ1Y3Qga3ZtX2Nw dWlkMiAqdHN0X2t2bV9nZXRfY3B1aWQoaW50IHN5c2ZkKWBgIOKAkyBHZXRzIGEgbGlzdCBvZiBz dXBwb3J0ZWQKKyAgdmlydHVhbCBDUFUgZmVhdHVyZXMgcmV0dXJuZWQgYnkgYGBpb2N0bChLVk1f R0VUX1NVUFBPUlRFRF9DUFVJRClgYC4KKyAgVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb3BlbiBm aWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYGBvcGVuKCIvZGV2L2t2bSIpYGAuCisKKyogYGB2 b2lkIHRzdF9rdm1fY3JlYXRlX2luc3RhbmNlKHN0cnVjdCB0c3Rfa3ZtX2luc3RhbmNlICppbnN0 LCBzaXplX3QgcmFtX3NpemUpYGAg4oCTCisgIENyZWF0ZXMgYW5kIGZ1bGx5IGluaXRpYWxpemVz IGEgbmV3IEtWTSB2aXJ0dWFsIG1hY2hpbmUKKyAgd2l0aCBhdCBsZWFzdCBgYHJhbV9zaXplYGAg Ynl0ZXMgb2YgbWVtb3J5LiBUaGUgVk0gaW5zdGFuY2UgaW5mbyB3aWxsIGJlCisgIHN0b3JlZCBp biBgYGluc3RgYC4KKworKiBgYGludCB0c3Rfa3ZtX3J1bl9pbnN0YW5jZShzdHJ1Y3QgdHN0X2t2 bV9pbnN0YW5jZSAqaW5zdCwgaW50IGV4cF9lcnJubylgYCDigJMKKyAgRXhlY3V0ZXMgdGhlIHBy b2dyYW0gaW5zdGFsbGVkIGluIEtWTSB2aXJ0dWFsIG1hY2hpbmUgYGBpbnN0YGAuIEFueSByZXN1 bHQKKyAgbWVzc2FnZXMgcmV0dXJuZWQgYnkgdGhlIFZNIHdpbGwgYmUgYXV0b21hdGljYWxseSBw cmludGVkIHRvIHRoZSBjb250cm9sbGVyCisgIHByb2dyYW0gb3V0cHV0LiBSZXR1cm5zIHplcm8u IElmIGBgZXhwX2Vycm5vYGAgaXMgbm9uLXplcm8sIHRoZSBWTSBleGVjdXRpb24KKyAgc3lzY2Fs bCBpcyBhbGxvd2VkIHRvIGZhaWwgd2l0aCB0aGUgYGBleHBfZXJybm9gYCBlcnJvciBjb2RlIGFu ZAorICBgYHRzdF9rdm1fcnVuX2luc3RhbmNlKClgYCB3aWxsIHJldHVybiAtMSBpbnN0ZWFkIG9m IHRlcm1pbmF0aW5nIHRoZSB0ZXN0LgorCisqIGBgdm9pZCB0c3Rfa3ZtX2Rlc3Ryb3lfaW5zdGFu Y2Uoc3RydWN0IHRzdF9rdm1faW5zdGFuY2UgKmluc3QpYGAg4oCTIERlbGV0ZXMKKyAgdGhlIEtW TSB2aXJ0dWFsIG1hY2hpbmUgYGBpbnN0YGAuIE5vdGUgdGhhdCB0aGUgZ3VhcmRlZCBidWZmZXJz IGFzc2lnbmVkCisgIHRvIHRoZSBWTSBieSBgYHRzdF9rdm1fY3JlYXRlX2luc3RhbmNlKClgYCBv ciBgYHRzdF9rdm1fYWxsb2NfbWVtb3J5KClgYCB3aWxsCisgIG5vdCBiZSBmcmVlZC4KKworVGhl IEtWTSBob3N0IGxpYnJhcnkgZG9lcyBub3QgcHJvdmlkZSBhbnkgd2F5IHRvIHJlc2V0IGEgVk0g aW5zdGFuY2UgYmFjawordG8gaXRzIGluaXRpYWwgc3RhdGUuIFJ1bm5pbmcgbXVsdGlwbGUgaXRl cmF0aW9ucyBvZiB0aGUgdGVzdCByZXF1aXJlcyBkZXN0cm95aW5nCit0aGUgb2xkIFZNIGluc3Rh bmNlIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUuIE90aGVyd2lzZSwgdGhlIFZNIHdpbGwgZXhpdAor d2l0aG91dCByZXBvcnRpbmcgYW55IHJlc3VsdHMgb24gdGhlIHNlY29uZCBpdGVyYXRpb24sIGFu ZCB0aGUgdGVzdCB3aWxsIGZhaWwuCitUaGUgYGB0c3Rfa3ZtX3J1bigpYGAgZnVuY3Rpb24gaGFu ZGxlcyB0aGlzIGlzc3VlIGNvcnJlY3RseS4KKworS1ZNIEd1ZXN0IExpYnJhcnkKKy0tLS0tLS0t LS0tLS0tLS0tCisKK1RoZSBLVk0gZ3Vlc3QgbGlicmFyeSBwcm92aWRlcyBhIG1pbmltYWwgaW1w bGVtZW50YXRpb24gb2YgYm90aCB0aGUgTFRQCit0ZXN0IGxpYnJhcnkgYW5kIHRoZSBzdGFuZGFy ZCBDIGxpYnJhcnkgZnVuY3Rpb25zLiBEbyBub3QgdHJ5IHRvIGluY2x1ZGUKK3RoZSB1c3VhbCBM VFAgb3IgQyBoZWFkZXJzIGluIGd1ZXN0IHBheWxvYWQgY29kZTsgaXQgd2lsbCBub3Qgd29yay4K KworU3RhbmRhcmQgQyBGdW5jdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BgI2luY2x1 ZGUgImt2bV90ZXN0LmgiYGAKKworVGhlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3cgYXJlIGltcGxl bWVudGVkIGFjY29yZGluZyB0byB0aGUgQyBzdGFuZGFyZDoKKworKiBgYHZvaWQgKm1lbXNldCh2 b2lkICpkZXN0LCBpbnQgdmFsLCBzaXplX3Qgc2l6ZSlgYAorKiBgYHZvaWQgKm1lbXplcm8odm9p ZCAqZGVzdCwgc2l6ZV90IHNpemUpYGAKKyogYGB2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29u c3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSlgYAorKiBgYGNoYXIgKnN0cmNweShjaGFyICpkZXN0 LCBjb25zdCBjaGFyICpzcmMpYGAKKyogYGBjaGFyICpzdHJjYXQoY2hhciAqZGVzdCwgY29uc3Qg Y2hhciAqc3JjKWBgCisqIGBgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzdHIpYGAKKworTFRQ IExpYnJhcnkgRnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGAjaW5jbHVkZSAi a3ZtX3Rlc3QuaCJgYAorCitUaGUgS1ZNIGd1ZXN0IGxpYnJhcnkgY3VycmVudGx5IHByb3ZpZGVz IHRoZSBMVFAgZnVuY3Rpb25zIGZvciByZXBvcnRpbmcgdGVzdAorcmVzdWx0cy4gQWxsIHN0YW5k YXJkIHJlc3VsdCBmbGFncyBleGNlcHQgZm9yIGBgVCpFUlJOT2BgIGFyZSBzdXBwb3J0ZWQKK3dp dGggdGhlIHNhbWUgcnVsZXMgYXMgdXN1YWwuIEhvd2V2ZXIsIHByaW50Zi1saWtlIGZvcm1hdHRp bmcgaXMgbm90CitpbXBsZW1lbnRlZCB5ZXQuCisKKyogYGB2b2lkIHRzdF9yZXMoaW50IHJlc3Vs dCwgY29uc3QgY2hhciAqbWVzc2FnZSlgYAorKiBgYHZvaWQgdHN0X2JyayhpbnQgcmVzdWx0LCBj b25zdCBjaGFyICptZXNzYWdlKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpYGAKKworQSBoYW5k ZnVsIG9mIHVzZWZ1bCBtYWNyb3MgaXMgYWxzbyBhdmFpbGFibGU6CisKKyogYGBUU1RfVEVTVF9U Q09ORihtZXNzYWdlKWBgIOKAkyBHZW5lcmF0ZXMgYSB0ZXN0IHByb2dyYW0gdGhhdCB3aWxsIHNp bXBseSBwcmludAorICBhIGBgVENPTkZgYCBtZXNzYWdlIGFuZCBleGl0LiBUaGlzIGlzIHVzZWZ1 bCB3aGVuIHRoZSByZWFsIHRlc3QgY2Fubm90IGJlCisgIGJ1aWx0IGR1ZSB0byBtaXNzaW5nIGRl cGVuZGVuY2llcyBvciBhcmNoaXRlY3R1cmUgbGltaXRhdGlvbnMuCisKKyogYGBBUlJBWV9TSVpF KGFycilgYCDigJMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHN0YXRpY2FsbHkgYWxs b2NhdGVkCisgIGFycmF5IGBgYXJyYGAuCisKKyogYGBMVFBfQUxJR04oeCwgYSlgYCDigJMgQWxp Z25zIGludGVnZXIgYGB4YGAgdG8gYmUgYSBtdWx0aXBsZSBvZiBgYGFgYCwgd2hpY2gKKyAgbXVz dCBiZSBhIHBvd2VyIG9mIDIuCisKK0FyY2hpdGVjdHVyZSBJbmRlcGVuZGVudCBGdW5jdGlvbnMK K35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGAjaW5jbHVkZSAia3ZtX3Rl c3QuaCJgYAorCitNZW1vcnkgbWFuYWdlbWVudCBpbiB0aGUgS1ZNIGd1ZXN0IGxpYnJhcnkgY3Vy cmVudGx5IHVzZXMgb25seSBhIHByaW1pdGl2ZSBsaW5lYXIKK2J1ZmZlciBmb3IgbWVtb3J5IGFs bG9jYXRpb24uIFRoZXJlIGFyZSBubyBjaGVja3Mgd2hldGhlciB0aGUgVk0gY2FuIGFsbG9jYXRl Cittb3JlIG1lbW9yeSwgYW5kIHRoZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgY2Fubm90IGJl IGZyZWVkLgorCisqIGBgdm9pZCAqdHN0X2hlYXBfYWxsb2Moc2l6ZV90IHNpemUpYGAg4oCTIEFs bG9jYXRlcyBhIGJsb2NrIG9mIG1lbW9yeSBvbiB0aGUgaGVhcC4KKworKiBgYHZvaWQgKnRzdF9o ZWFwX2FsbG9jX2FsaWduZWQoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbilgYCDigJMgQWxsb2Nh dGVzCisgIGEgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBoZWFwIHdpdGggdGhlIHN0YXJ0aW5nIGFk ZHJlc3MgYWxpZ25lZCB0byBhIGdpdmVuCisgIHZhbHVlLgorCit4ODYgU3BlY2lmaWMgRnVuY3Rp b25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BgI2luY2x1ZGUgImt2bV90ZXN0LmgiYGAK K2BgI2luY2x1ZGUgImt2bV94ODYuaCJgYAorCisqIGBgc3RydWN0IGt2bV9pbnRlcnJ1cHRfZnJh bWVgYCDigJMgT3BhcXVlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgc3RydWN0dXJlIHdoaWNoIGhv bGRzCisgIGludGVycnVwdCBmcmFtZSBpbmZvcm1hdGlvbi4gVXNlIHRoZSBmdW5jdGlvbnMgYmVs b3cgdG8gZ2V0IGluZGl2aWR1YWwgdmFsdWVzOgorCisqIGBgdWludHB0cl90IGt2bV9nZXRfaW50 ZXJydXB0X2lwKGNvbnN0IHN0cnVjdCBrdm1faW50ZXJydXB0X2ZyYW1lICppZnJtKWBgIOKAkwor ICBHZXRzIGluc3RydWN0aW9uIHBvaW50ZXIgdmFsdWUgZnJvbSB0aGUgaW50ZXJydXB0IGZyYW1l IHN0cnVjdHVyZS4gVGhpcyBtYXkgYmUKKyAgdGhlIGluc3RydWN0aW9uIHdoaWNoIGNhdXNlZCBh biBpbnRlcnJ1cHQgb3IgdGhlIG9uZSBpbW1lZGlhdGVseSBhZnRlciwKKyAgZGVwZW5kaW5nIG9u IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHNlbWFudGljcy4KKworKiBgYGludCAoKnRzdF9pbnRlcnJ1 cHRfY2FsbGJhY2spKHZvaWQgKnVzZXJkYXRhLCBzdHJ1Y3Qga3ZtX2ludGVycnVwdF9mcmFtZSAq aWZybSwgdW5zaWduZWQgbG9uZyBlcnJjb2RlKWBgIOKAkworICBJbnRlcnJ1cHQgaGFuZGxlciBj YWxsYmFjayBwcm90b3R5cGUuIFdoZW4gYW4gaW50ZXJydXB0IG9jY3VycywgdGhlIGFzc2lnbmVk IGNhbGxiYWNrIGZ1bmN0aW9uCisgIHdpbGwgYmUgcGFzc2VkIHRoZSBgYHVzZXJkYXRhYGAgcG9p bnRlciB0aGF0IHdhcyBnaXZlbgorICB0byBgYHRzdF9zZXRfaW50ZXJydXB0X2NhbGxiYWNrKClg YCwgaW50ZXJydXB0IGZyYW1lIGBgaWZybWBgIGFuZCB0aGUgZXJyb3IKKyAgY29kZSBgYGVycmNv ZGVgYCBkZWZpbmVkIGJ5IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHNlbWFudGljcy4gSWYgdGhlIGlu dGVycnVwdAorICB2ZWN0b3IgZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IgY29kZSwgYGBlcnJj b2RlYGAgd2lsbCBiZSBzZXQgdG8gemVyby4KKyAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3Qg cmV0dXJuIDAgaWYgdGhlIGludGVycnVwdCB3YXMgc3VjY2Vzc2Z1bGx5CisgIGhhbmRsZWQgYW5k IHRlc3QgZXhlY3V0aW9uIHNob3VsZCByZXN1bWUuIEEgbm9uLXplcm8gcmV0dXJuIHZhbHVlIG1l YW5zIHRoYXQKKyAgdGhlIGludGVycnVwdCBjb3VsZCBub3QgYmUgaGFuZGxlZCBhbmQgdGhlIHRl c3Qgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhbiBlcnJvci4KKworKiBgYHZvaWQgdHN0X3NldF9pbnRl cnJ1cHRfY2FsbGJhY2sodW5zaWduZWQgaW50IHZlY3RvciwgdHN0X2ludGVycnVwdF9jYWxsYmFj ayBmdW5jLCB2b2lkICp1c2VyZGF0YSlgYCDigJMKKyAgUmVnaXN0ZXJzIGEgbmV3IGludGVycnVw dCBoYW5kbGVyIGNhbGxiYWNrIGZ1bmN0aW9uIGBgZnVuY2BgIGZvciBpbnRlcnJ1cHQgYGB2ZWN0 b3JgYC4gVGhlIGBgdXNlcmRhdGFgYAorICBhcmd1bWVudCBpcyBhbiBhcmJpdHJhcnkgcG9pbnRl ciB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGBgZnVuYygpYGAgZXZlcnkgdGltZQorICBpdCBnZXRz IGNhbGxlZC4gVGhlIHByZXZpb3VzIGludGVycnVwdCBoYW5kbGVyIGNhbGxiYWNrIHdpbGwgYmUg cmVtb3ZlZC4KKyAgU2V0dGluZyBgYGZ1bmNgYCB0byBgYE5VTExgYCB3aWxsIHJlbW92ZSBhbnkg ZXhpc3RpbmcgaW50ZXJydXB0IGhhbmRsZXIKKyAgZnJvbSBgYHZlY3RvcmBgLCBhbmQgdGhlIGlu dGVycnVwdCB3aWxsIGJlY29tZSBhIGZhdGFsIGVycm9yLgorCisuLiBjb2RlLWJsb2NrOjogYwor CisgICAgc3RydWN0IHBhZ2VfdGFibGVfZW50cnlfcGFlIHsKKyAgICAJdW5zaWduZWQgaW50IHBy ZXNlbnQ6IDE7CisgICAgCXVuc2lnbmVkIGludCB3cml0YWJsZTogMTsKKyAgICAJdW5zaWduZWQg aW50IHVzZXJfYWNjZXNzOiAxOworICAgIAl1bnNpZ25lZCBpbnQgd3JpdGVfdGhyb3VnaDogMTsK KyAgICAJdW5zaWduZWQgaW50IGRpc2FibGVfY2FjaGU6IDE7CisgICAgCXVuc2lnbmVkIGludCBh Y2Nlc3NlZDogMTsKKyAgICAJdW5zaWduZWQgaW50IGRpcnR5OiAxOworICAgIAl1bnNpZ25lZCBp bnQgcGFnZV90eXBlOiAxOworICAgIAl1bnNpZ25lZCBpbnQgZ2xvYmFsOiAxOworICAgIAl1bnNp Z25lZCBpbnQgcGFkZGluZzogMzsKKyAgICAJdWludDY0X3QgYWRkcmVzczogNDA7CisgICAgCXVu c2lnbmVkIGludCBwYWRkaW5nMjogNzsKKyAgICAJdW5zaWduZWQgaW50IHByb3Rfa2V5OiA0Owor ICAgIAl1bnNpZ25lZCBpbnQgbm9leGVjOiAxOworICAgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNr ZWRfXykpOworCisgICAgc3RydWN0IGt2bV9jcHVpZCB7CisgICAgCXVuc2lnbmVkIGludCBlYXgs IGVieCwgZWN4LCBlZHg7CisgICAgfTsKKworICAgIHN0cnVjdCBrdm1fY3JlZ3MgeworICAgIAl1 bnNpZ25lZCBsb25nIGNyMCwgY3IyLCBjcjMsIGNyNDsKKyAgICB9OworCisgICAgc3RydWN0IGt2 bV9zcmVncyB7CisgICAgCXVpbnQxNl90IGNzLCBkcywgZXMsIGZzLCBncywgc3M7CisgICAgfTsK KworYGBzdHJ1Y3QgcGFnZV90YWJsZV9lbnRyeV9wYWVgYCBpcyB0aGUgcGFnZSB0YWJsZSBlbnRy eSBzdHJ1Y3R1cmUgZm9yIFBBRSBhbmQKKzY0LWJpdCBwYWdpbmcgbW9kZXMuIFNlZSBJbnRlbMKu IDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlCitEZXZlbG9wZXIncyBNYW51YWws IFZvbHVtZSAzLCBDaGFwdGVyIDQgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBmaWVsZHMuCisK KyogYGB1aW50cHRyX3Qga3ZtX2dldF9wYWdlX2FkZHJlc3NfcGFlKGNvbnN0IHN0cnVjdCBwYWdl X3RhYmxlX2VudHJ5X3BhZSAqZW50cnkpYGAKKyAg4oCTIFJldHVybnMgdGhlIHBoeXNpY2FsIGFk ZHJlc3Mgb2YgdGhlIG1lbW9yeSBwYWdlIHJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuCisgIHBhZ2Ug dGFibGUgYGBlbnRyeWBgLiBEZXBlbmRpbmcgb24gbWVtb3J5IG1hcHBpbmcgY2hhbmdlcyBkb25l IGJ5IHRoZSB0ZXN0LAorICB0aGUgcGh5c2ljYWwgYWRkcmVzcyBtYXkgbm90IGJlIGEgdmFsaWQg cG9pbnRlci4gVGhlIGNhbGxlciBtdXN0IGRldGVybWluZQorICB3aGV0aGVyIHRoZSBhZGRyZXNz IHBvaW50cyB0byBhbm90aGVyIHBhZ2UgdGFibGUgZW50cnkgb3IgYSBkYXRhIHBhZ2UsIHVzaW5n CisgIHRoZSBrbm93biBwb3NpdGlvbiBpbiBwYWdlIHRhYmxlIGhpZXJhcmNoeSBhbmQgYGBlbnRy eS0+cGFnZV90eXBlYGAuIFJldHVybnMKKyAgemVybyBpZiB0aGUgYGBlbnRyeWBgIGRvZXMgbm90 IHJlZmVyZW5jZSBhbnkgbWVtb3J5IHBhZ2UuCisKKyogYGB2b2lkIGt2bV9zZXRfc2VnbWVudF9k ZXNjcmlwdG9yKHN0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3IgKmRzdCwgdWludDY0X3QgYmFzZWFk ZHIsIHVpbnQzMl90IGxpbWl0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpYGAgLQorICBGaWxscyB0aGUg YGBkc3RgYCBzZWdtZW50IGRlc2NyaXB0b3Igd2l0aCBnaXZlbiB2YWx1ZXMuIFRoZSBtYXhpbXVt IHZhbHVlCisgIG9mIGBgbGltaXRgYCBpcyBgYDB4ZmZmZmZgYCAoaW5jbHVzaXZlKSByZWdhcmRs ZXNzIG9mIGBgZmxhZ3NgYC4KKworKiBgYHZvaWQga3ZtX3BhcnNlX3NlZ21lbnRfZGVzY3JpcHRv cihzdHJ1Y3Qgc2VnbWVudF9kZXNjcmlwdG9yICpzcmMsIHVpbnQ2NF90ICpiYXNlYWRkciwgdWlu dDMyX3QgKmxpbWl0LCB1bnNpZ25lZCBpbnQgKmZsYWdzKWBgIC0KKyAgUGFyc2VzIGRhdGEgaW4g dGhlIGBgc3JjYGAgc2VnbWVudCBkZXNjcmlwdG9yIGFuZCBjb3BpZXMgdGhlbSB0byB2YXJpYWJs ZXMKKyAgcG9pbnRlZCB0byBieSB0aGUgb3RoZXIgYXJndW1lbnRzLiBBbnkgcGFyYW1ldGVyIGV4 Y2VwdCB0aGUgZmlyc3Qgb25lIGNhbgorICBiZSBgYE5VTExgYC4KKworKiBgYGludCBrdm1fZmlu ZF9mcmVlX2Rlc2NyaXB0b3IoY29uc3Qgc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciAqdGFibGUs IHNpemVfdCBzaXplKWBgIC0KKyAgRmluZHMgdGhlIGZpcnN0IHNlZ21lbnQgZGVzY3JpcHRvciBp biBgYHRhYmxlYGAgd2hpY2ggZG9lcyBub3QgaGF2ZQorICB0aGUgYGBTRUdGTEFHX1BSRVNFTlRg YCBiaXQgc2V0LiBUaGUgZnVuY3Rpb24gaGFuZGxlcyBkb3VibGUtc2l6ZSBkZXNjcmlwdG9ycwor ICBjb3JyZWN0bHkuIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBhdmFpbGFibGUgZGVz Y3JpcHRvciBvciAtMSBpZiBhbGwKKyAgYGBzaXplYGAgZGVzY3JpcHRvcnMgYXJlIHRha2VuLgor CisqIGBgdW5zaWduZWQgaW50IGt2bV9jcmVhdGVfc3RhY2tfZGVzY3JpcHRvcihzdHJ1Y3Qgc2Vn bWVudF9kZXNjcmlwdG9yICp0YWJsZSwgc2l6ZV90IHRhYnNpemUsIHZvaWQgKnN0YWNrX2Jhc2Up YGAgLQorICBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWdpc3RlcmluZyBhIHN0YWNrIHNl Z21lbnQgZGVzY3JpcHRvci4gSXQgd2lsbAorICBhdXRvbWF0aWNhbGx5IGZpbmQgYSBmcmVlIHNs b3QgaW4gYGB0YWJsZWBgIGFuZCBmaWxsIHRoZSBuZWNlc3NhcnkgZmxhZ3MuCisgIFRoZSBgYHN0 YWNrX2Jhc2VgYCBwb2ludGVyIG11c3QgcG9pbnQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2su CisKKyogYGB2b2lkIGt2bV9nZXRfY3B1aWQodW5zaWduZWQgaW50IGVheCwgdW5zaWduZWQgaW50 IGVjeCwgc3RydWN0IGt2bV9jcHVpZCAqYnVmKWBgIOKAkworICBFeGVjdXRlcyB0aGUgQ1BVSUQg aW5zdHJ1Y3Rpb24gd2l0aCB0aGUgZ2l2ZW4KKyAgYGBlYXhgYCBhbmQgYGBlY3hgYCBhcmd1bWVu dHMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0cyBpbiBgYGJ1ZmBgLgorCisqIGBgdm9pZCBrdm1fcmVh ZF9jcmVncyhzdHJ1Y3Qga3ZtX2NyZWdzICpidWYpYGAg4oCTIENvcGllcyB0aGUgY3VycmVudCB2 YWx1ZXMKKyAgb2YgY29udHJvbCByZWdpc3RlcnMgdG8gYGBidWZgYC4KKworKiBgYHZvaWQga3Zt X3JlYWRfc3JlZ3Moc3RydWN0IGt2bV9zcmVncyAqYnVmKWBgIC0gQ29waWVzIHRoZSBjdXJyZW50 IHZhbHVlcworICBvZiBzZWdtZW50IHJlZ2lzdGVycyB0byBgYGJ1ZmBgLgorCisqIGBgdWludDY0 X3Qga3ZtX3JkbXNyKHVuc2lnbmVkIGludCBtc3IpYGAg4oCTIFJldHVybnMgdGhlIGN1cnJlbnQg dmFsdWUKKyAgb2YgbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXIgYGBtc3JgYC4KKworKiBgYHZvaWQg a3ZtX3dybXNyKHVuc2lnbmVkIGludCBtc3IsIHVpbnQ2NF90IHZhbHVlKWBgIOKAkyBTdG9yZXMg YGB2YWx1ZWBgCisgIGludG8gbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXIgYGBtc3JgYC4KKworKiBg YHZvaWQga3ZtX2V4aXQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKWBgIOKAkyBUZXJt aW5hdGVzIHRoZSB0ZXN0LgorICBTaW1pbGFyIHRvIGNhbGxpbmcgYGBleGl0KDApYGAgaW4gYSBy ZWd1bGFyIExUUCB0ZXN0LCBhbHRob3VnaCBgYGt2bV9leGl0KClgYAorICB3aWxsIHRlcm1pbmF0 ZSBvbmx5IG9uZSBpdGVyYXRpb24gb2YgdGhlIHRlc3QsIG5vdCB0aGUgd2hvbGUgaG9zdCBwcm9j ZXNzLgorCitTZWUgSW50ZWzCriA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBE ZXZlbG9wZXIncyBNYW51YWwKK2ZvciBkb2N1bWVudGF0aW9uIG9mIHN0YW5kYXJkIGFuZCBtb2Rl bC1zcGVjaWZpYyB4ODYgcmVnaXN0ZXJzLgorCitBTUQgU1ZNIEhlbHBlciBGdW5jdGlvbnMKK35+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgYCNpbmNsdWRlICJrdm1fdGVzdC5oImBgCitgYCNp bmNsdWRlICJrdm1feDg2LmgiYGAKK2BgI2luY2x1ZGUgImt2bV94ODZfc3ZtLmgiYGAKKworVGhl IEtWTSBndWVzdCBsaWJyYXJ5IHByb3ZpZGVzIGJhc2ljIGhlbHBlciBmdW5jdGlvbnMgZm9yIGNy ZWF0aW5nIGFuZCBydW5uaW5nCituZXN0ZWQgdmlydHVhbCBtYWNoaW5lcyB1c2luZyB0aGUgQU1E IFNWTSB0ZWNobm9sb2d5LgorCisuLiBfZXhhbXBsZS1jb2RlLXRvLWV4ZWN1dGUtbmVzdGVkLXZt OgorCisuLiBydWJyaWM6OiBFeGFtcGxlIENvZGUgdG8gRXhlY3V0ZSBOZXN0ZWQgVk0KKworLi4g Y29kZS1ibG9jazo6IGMKKworICAgIGludCBndWVzdF9tYWluKHZvaWQpCisgICAgeworICAgIAku Li4KKyAgICAJcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBtYWluKHZvaWQpCisgICAgewor ICAgIAlzdHJ1Y3Qga3ZtX3N2bV92Y3B1ICp2bTsKKworICAgIAlrdm1faW5pdF9zdm0oKTsKKyAg ICAJdm0gPSBrdm1fY3JlYXRlX3N2bV92Y3B1KGd1ZXN0X21haW4sIDEpOworICAgIAlrdm1fc3Zt X3ZtcnVuKHZtKTsKKyAgICB9CisKKyogYGBpbnQga3ZtX2lzX3N2bV9zdXBwb3J0ZWQodm9pZClg YCAtIFJldHVybnMgYSBub24temVybyB2YWx1ZSBpZiB0aGUgQ1BVCisgIHN1cHBvcnRzIEFNRCBT Vk07IG90aGVyd2lzZSwgcmV0dXJucyAwLgorCisqIGBgaW50IGt2bV9nZXRfc3ZtX3N0YXRlKHZv aWQpYGAgLSBSZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUgaWYgU1ZNIGlzIGN1cnJlbnRseQorICBl bmFibGVkOyBvdGhlcndpc2UsIHJldHVybnMgMC4KKworKiBgYHZvaWQga3ZtX3NldF9zdm1fc3Rh dGUoaW50IGVuYWJsZWQpYGAgLSBFbmFibGVzIG9yIGRpc2FibGVzIFNWTSBhY2NvcmRpbmcKKyAg dG8gdGhlIGFyZ3VtZW50LiBJZiBTVk0gaXMgZGlzYWJsZWQgYnkgdGhlIGhvc3Qgb3Igbm90IHN1 cHBvcnRlZCwgdGhlIHRlc3Qgd2lsbCBleGl0CisgIHdpdGggYGBUQ09ORmBgLgorCisqIGBgdm9p ZCBrdm1faW5pdF9zdm0odm9pZClgYCAtIEVuYWJsZXMgYW5kIGZ1bGx5IGluaXRpYWxpemVzIFNW TSwgaW5jbHVkaW5nCisgIGFsbG9jYXRpbmcgYW5kIHNldHRpbmcgdXAgdGhlIGhvc3Qgc2F2ZSBh cmVhIFZNQ0IuIElmIFNWTSBpcyBkaXNhYmxlZCBieSB0aGUgaG9zdCBvcgorICBub3Qgc3VwcG9y dGVkLCB0aGUgdGVzdCB3aWxsIGV4aXQgd2l0aCBgYFRDT05GYGAuCisKKyogYGBzdHJ1Y3Qga3Zt X3ZtY2IgKmt2bV9hbGxvY192bWNiKHZvaWQpYGAgLSBBbGxvY2F0ZXMgYSBuZXcgVk1DQiBzdHJ1 Y3R1cmUKKyAgd2l0aCBjb3JyZWN0IG1lbW9yeSBhbGlnbm1lbnQgYW5kIGZpbGxzIGl0IHdpdGgg emVyb2VzLgorCisqIGBgdm9pZCBrdm1fdm1jYl9zZXRfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdm1j YiAqdm1jYiwgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgc3RhdGUpYGAgLQorICBTZXRz IFNWTSBpbnRlcmNlcHQgYml0IGBgaWRgYCB0byB0aGUgZ2l2ZW4gYGBzdGF0ZWBgLgorCisqIGBg dm9pZCBrdm1faW5pdF9ndWVzdF92bWNiKHN0cnVjdCBrdm1fdm1jYiAqdm1jYiwgdWludDMyX3Qg YXNpZCwgdWludDE2X3Qgc3MsIHZvaWQgKnJzcCwgaW50ICgqZ3Vlc3RfbWFpbikodm9pZCkpYGAg LQorICBJbml0aWFsaXplcyBhIG5ldyBTVk0gdmlydHVhbCBtYWNoaW5lLiBUaGUgYGBhc2lkYGAg cGFyYW1ldGVyIGlzIHRoZSBuZXN0ZWQKKyAgcGFnZSB0YWJsZSBJRC4gVGhlIGBgc3NgYCBhbmQg YGByc3BgYCBwYXJhbWV0ZXJzIHNldCB0aGUgc3RhY2sgc2VnbWVudCBhbmQgc3RhY2sKKyAgcG9p bnRlciB2YWx1ZXMsIHJlc3BlY3RpdmVseS4gVGhlIGBgZ3Vlc3RfbWFpbmBgIHBhcmFtZXRlciBz ZXRzIHRoZSBjb2RlIGVudHJ5CisgIHBvaW50IG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEFsbCBj b250cm9sIHJlZ2lzdGVycywgc2VnbWVudCByZWdpc3RlcnMKKyAgKGV4Y2VwdCBzdGFjayBzZWdt ZW50IHJlZ2lzdGVyKSwgR0RUUiBhbmQgSURUUiB3aWxsIGJlIGNvcGllZAorICBmcm9tIHRoZSBj dXJyZW50IENQVSBzdGF0ZS4KKworKiBgYHN0cnVjdCBrdm1fc3ZtX3ZjcHUgKmt2bV9jcmVhdGVf c3ZtX3ZjcHUoaW50ICgqZ3Vlc3RfbWFpbikodm9pZCksIGludCBhbGxvY19zdGFjaylgYCAtCisg IEEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBh IG5ldyBTVk0gdmlydHVhbCBDUFUuCisgIFRoZSBgYGd1ZXN0X21haW5gYCBwYXJhbWV0ZXIgaXMg cGFzc2VkIHRvIGBga3ZtX2luaXRfZ3Vlc3Rfdm1jYigpYGA7CisgIHRoZSBgYGFsbG9jX3N0YWNr YGAgcGFyYW1ldGVyIGNvbnRyb2xzIHdoZXRoZXIgYSBuZXcgOEtCIHN0YWNrIHdpbGwgYmUKKyAg YWxsb2NhdGVkIGFuZCByZWdpc3RlcmVkIGluIEdEVC4gSW50ZXJjZXB0aW9uIHdpbGwgYmUgZW5h YmxlZCBmb3IgYGBWTVNBVkVgYAorICBhbmQgYGBITFRgYCBpbnN0cnVjdGlvbnMuIElmIHlvdSBz ZXQgYGBhbGxvY19zdGFja2BgIHRvIHplcm8sIHlvdSBtdXN0IGNvbmZpZ3VyZQorICB0aGUgc3Rh Y2sgc2VnbWVudCByZWdpc3RlciBhbmQgc3RhY2sgcG9pbnRlciBtYW51YWxseS4KKworKiBgYHZv aWQga3ZtX3N2bV92bXJ1bihzdHJ1Y3Qga3ZtX3N2bV92Y3B1ICpjcHUpYGAgLSBTdGFydHMgb3Ig Y29udGludWVzIGV4ZWN1dGlvbgorICBvZiBhIG5lc3RlZCB2aXJ0dWFsIG1hY2hpbmUuIEJlIGF3 YXJlIHRoYXQgRlBVIHN0YXRlIGlzIG5vdCBzYXZlZC4gRG8gbm90IHVzZQorICBmbG9hdGluZyBw b2ludCB0eXBlcyBvciB2YWx1ZXMgaW4gbmVzdGVkIGd1ZXN0IGNvZGUuIEFsc28sIGRvIG5vdCB1 c2UKKyAgYGB0c3RfcmVzKClgYCBvciBgYHRzdF9icmsoKWBgIGZ1bmN0aW9ucyBpbiBuZXN0ZWQg Z3Vlc3QgY29kZS4KKworU2VlIEFNRDY0IEFyY2hpdGVjdHVyZSBQcm9ncmFtbWVyJ3MgTWFudWFs IFZvbHVtZSAyIGZvciBkb2N1bWVudGF0aW9uCitvZiB0aGUgU2VjdXJlIFZpcnR1YWwgTWFjaGlu ZSAoU1ZNKSB0ZWNobm9sb2d5LgorCitLVk0gR3Vlc3QgRW52aXJvbm1lbnQKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCitLVk0gZ3Vlc3QgcGF5bG9hZCBleGVjdXRpb24gYmVnaW5zIHdpdGggYm9v dHN0cmFwIGNvZGUgd2hpY2ggd2lsbCBwZXJmb3JtCit0aGUgbWluaW1hbCBndWVzdCBlbnZpcm9u bWVudCBzZXR1cCByZXF1aXJlZCBmb3IgcnVubmluZyBDIGNvZGU6CisKKyogQWN0aXZhdGVzIHRo ZSBhcHByb3ByaWF0ZSBDUFUgZXhlY3V0aW9uIG1vZGUgKElBLTMyIHByb3RlY3RlZCBtb2RlCisg IG9uIDMyLWJpdCB4ODYgb3IgdGhlIDY0LWJpdCBtb2RlIG9uIHg4Nl82NCkuCisqIENyZWF0ZXMg YW4gaWRlbnRpdHkgbWFwcGluZyAodmlydHVhbCBhZGRyZXNzID0gcGh5c2ljYWwgYWRkcmVzcykg b2YgdGhlIGxvd2VyCisgIDJHQiBtZW1vcnkgcmVnaW9uLCBldmVuIGlmIHBhcnRzIG9mIHRoZSBy ZWdpb24gYXJlIG5vdCBiYWNrZWQgYnkgYW55IGhvc3QKKyAgbWVtb3J5IGJ1ZmZlcnMuIFRoZSBt ZW1vcnkgcmVnaW9uIGFib3ZlIHRoZSAyR0IgdGhyZXNob2xkIGlzIGxlZnQgdW5tYXBwZWQKKyAg ZXhjZXB0IGZvciBvbmUgbWVtb3J5IHBhZ2UgcmVzZXJ2ZWQgZm9yIHRoZSBgYHN0cnVjdCB0c3Rf a3ZtX3Jlc3VsdGBgIGJ1ZmZlci4KKyogSW5pdGlhbGl6ZXMgYW4gOEtCIHN0YWNrLgorKiBJbnN0 YWxscyBkZWZhdWx0IGludGVycnVwdCBoYW5kbGVycyBmb3Igc3RhbmRhcmQgQ1BVIGV4Y2VwdGlv biB2ZWN0b3JzLgorCitXaGVuIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBpcyBjb21wbGV0ZSwgYm9v dHN0cmFwIHdpbGwgY2FsbCB0aGUgYGB2b2lkIG1haW4odm9pZClgYAorZnVuY3Rpb24gaW1wbGVt ZW50ZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbS4gVG8gZmluaXNoIGV4ZWN1dGlvbiBvZiB0aGUgZ3Vl c3QgcGF5bG9hZCwKK3RoZSB0ZXN0IGNhbiBlaXRoZXIgcmV0dXJuIGZyb20gdGhlIGBgbWFpbigp YGAgZnVuY3Rpb24gb3IgY2FsbCBgYGt2bV9leGl0KClgYAorYXQgYW55IHBvaW50LgpkaWZmIC0t Z2l0IGEvZG9jL29sZC9LVk0tVGVzdC1BUEkuYXNjaWlkb2MgYi9kb2Mvb2xkL0tWTS1UZXN0LUFQ SS5hc2NpaWRvYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U1MzdhZmNiN2I0NGUz Njc0MmNmMzRiMWE1YThkZjcxNDk3ZDM3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMAotLS0gYS9kb2Mvb2xkL0tWTS1UZXN0LUFQSS5hc2NpaWRvYworKysgL2Rldi9u dWxsCkBAIC0xLDQ4NyArMCwwIEBACi1MVFAgS1ZNIFRlc3QgQVBJCi09PT09PT09PT09PT09PT09 Ci0KLVRlc3RpbmcgS1ZNIGlzIG1vcmUgY29tcGxleCB0aGFuIG90aGVyIExpbnV4IGZlYXR1cmVz LiBTb21lIEtWTSBidWdzIGFsbG93Ci11c2Vyc3BhY2UgY29kZSBydW5uaW5nIGluc2lkZSB0aGUg dmlydHVhbCBtYWNoaW5lIHRvIGJ5cGFzcyAoZW11bGF0ZWQpIGhhcmR3YXJlCi1hY2Nlc3MgcmVz dHJpY3Rpb25zIGFuZCBlbGV2YXRlIGl0cyBwcml2aWxlZ2VzIGluc2lkZSB0aGUgZ3Vlc3Qgb3Bl cmF0aW5nCi1zeXN0ZW0uIFRoZSB3b3JzdCB0eXBlcyBvZiBLVk0gYnVncyBtYXkgZXZlbiBhbGxv dyB0aGUgZ3Vlc3QgY29kZSB0byBjcmFzaCBvcgotY29tcHJvbWlzZSB0aGUgcGh5c2ljYWwgaG9z dC4gS1ZNIHRlc3RzIHRoZXJlZm9yZSBuZWVkIHRvIGJlIHNwbGl0IGludG8gdHdvCi1jb21wb25l bnRzIOKAkyBhIEtWTSBjb250cm9sbGVyIHByb2dyYW0gcnVubmluZyBvbiB0aGUgcGh5c2ljYWwg aG9zdCBhbmQgYSBndWVzdAotcGF5bG9hZCBwcm9ncmFtIHJ1bm5pbmcgaW5zaWRlIHRoZSBWTS4g VGhlIGNvb3BlcmF0aW9uIG9mIHRoZXNlIHR3byBjb21wb25lbnRzCi1hbGxvd3MgdGVzdGluZyBl dmVuIG9mIGJ1Z3MgdGhhdCBzb21laG93IGNyb3NzIHRoZSB2aXJ0dWFsaXphdGlvbiBib3VuZGFy eS4KLQotTk9URTogU2VlIGFsc28KLSAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC10ZXN0 LXByb2plY3QvbHRwL3dpa2kvVGVzdC1Xcml0aW5nLUd1aWRlbGluZXNbVGVzdCBXcml0aW5nIEd1 aWRlbGluZXNdLAotICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9s dHAvd2lraS9DLVRlc3QtQ2FzZS1UdXRvcmlhbFtDIFRlc3QgQ2FzZSBUdXRvcmlhbF0sCi0gICAg ICBodHRwczovL2dpdGh1Yi5jb20vbGludXgtdGVzdC1wcm9qZWN0L2x0cC93aWtpL0MtVGVzdC1B UElbQyBUZXN0IEFQSV0uCi0KLTEuIEJhc2ljIEtWTSB0ZXN0IHN0cnVjdHVyZQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0KLUtWTSB0ZXN0cyBhcmUgc2ltcGxlIEMgc291cmNlIGZpbGVz IGNvbnRhaW5pbmcgYm90aCB0aGUgS1ZNIGNvbnRyb2xsZXIgY29kZQotYW5kIHRoZSBndWVzdCBw YXlsb2FkIGNvZGUgc2VwYXJhdGVkIGJ5IGAjaWZkZWYgQ09NUElMRV9QQVlMT0FEYCBwcmVwcm9j ZXNzb3IKLWNvbmRpdGlvbi4gVGhlIGZpbGUgd2lsbCBiZSBjb21waWxlZCB0d2ljZS4gT25jZSB0 byBjb21waWxlIHRoZSBwYXlsb2FkIHBhcnQsCi1vbmNlIHRvIGNvbXBpbGUgdGhlIEtWTSBjb250 cm9sbGVyIHBhcnQgYW5kIGVtYmVkIHRoZSBwYXlsb2FkIGJpbmFyeSBpbnNpZGUuCi1UaGUgcmVz dWx0IGlzIGEgc2luZ2xlIHNlbGYtY29udGFpbmVkIGJpbmFyeSB0aGF0J2xsIGV4ZWN1dGUgdGhl IGVtYmVkZGVkCi1wYXlsb2FkIGluc2lkZSBhIEtWTSB2aXJ0dWFsIG1hY2hpbmUgYW5kIHByaW50 IHJlc3VsdHMgaW4gdGhlIHNhbWUgZm9ybWF0IGFzCi1hIG5vcm1hbCBMVFAgdGVzdC4KLQotQSBL Vk0gdGVzdCBzb3VyY2Ugc2hvdWxkIHN0YXJ0IHdpdGggYCNpbmNsdWRlICJrdm1fdGVzdC5oImAg aW5zdGVhZCBvZiB0aGUKLXVzdWFsIGB0c3RfdGVzdC5oYC4gVGhlIGBrdm1fdGVzdC5oYCBoZWFk ZXIgZmlsZSB3aWxsIGluY2x1ZGUgdGhlIG90aGVyIGJhc2ljCi1oZWFkZXJzIGFwcHJvcHJpYXRl IGZvciB0aGUgY3VycmVudCBjb21waWxhdGlvbiBwYXNzLiBFdmVyeXRoaW5nIGVsc2UgaW4gdGhl Ci1zb3VyY2UgZmlsZSBzaG91bGQgYmUgZW5jbG9zZWQgaW4gYCNpZmRlZiBDT01QSUxFX1BBWUxP QUQgLi4uICNlbHNlIC4uLiAjZW5kaWZgCi1jb25kaXRpb24sIGluY2x1ZGluZyBhbnkgb3RoZXIg aGVhZGVyIGZpbGUgaW5jbHVkZXMuIE5vdGUgdGhhdCB0aGUgc3RhbmRhcmQKLUxUUCBoZWFkZXJz IGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBwYXlsb2FkIGNvbXBpbGF0aW9uIHBhc3MsIG9ubHkg dGhlIEtWTQotZ3Vlc3QgbGlicmFyeSBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZC4KLQotLkV4YW1w bGUgS1ZNIHRlc3QKLVtzb3VyY2UsY10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpbmNsdWRl ICJrdm1fdGVzdC5oIgotCi0jaWZkZWYgQ09NUElMRV9QQVlMT0FECi0KLS8qIEd1ZXN0IHBheWxv YWQgY29kZSAqLwotCi12b2lkIG1haW4odm9pZCkKLXsKLQl0c3RfcmVzKFRQQVNTLCAiSGVsbG8s IHdvcmxkISIpOwotfQotCi0jZWxzZSAvKiBDT01QSUxFX1BBWUxPQUQgKi8KLQotLyogS1ZNIGNv bnRyb2xsZXIgY29kZSAqLwotCi1zdGF0aWMgc3RydWN0IHRzdF90ZXN0IHRlc3QgPSB7Ci0JLnRl c3RfYWxsID0gdHN0X2t2bV9ydW4sCi0JLnNldHVwID0gdHN0X2t2bV9zZXR1cCwKLQkuY2xlYW51 cCA9IHRzdF9rdm1fY2xlYW51cCwKLX07Ci0KLSNlbmRpZiAvKiBDT01QSUxFX1BBWUxPQUQgKi8K LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIEtWTSBjb250cm9sbGVyIGNvZGUgaXMgYSBu b3JtYWwgTFRQIHRlc3QgYW5kIG5lZWRzIHRvIGRlZmluZSBhbiBpbnN0YW5jZQotb2YgYHN0cnVj dCB0c3RfdGVzdGAgd2l0aCBtZXRhZGF0YSBhbmQgdGhlIHVzdWFsIHNldHVwLCBjbGVhbnVwLCBh bmQgdGVzdAotZnVuY3Rpb25zLiBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbGwgdGhyZWUgZnVu Y3Rpb25zIGlzIHByb3ZpZGVkIGJ5IHRoZSBLVk0KLWhvc3QgbGlicmFyeS4KLQotT24gdGhlIG90 aGVyIGhhbmQsIHRoZSBwYXlsb2FkIGlzIGVzc2VudGlhbGx5IGEgdGlueSBrZXJuZWwgdGhhdCds bCBydW4KLW9uIGJhcmUgdmlydHVhbCBoYXJkd2FyZS4gSXQgY2Fubm90IGFjY2VzcyBhbnkgZmls ZXMsIExpbnV4IHN5c2NhbGxzLCBzdGFuZGFyZAotbGlicmFyeSBmdW5jdGlvbnMsIGV0Yy4gZXhj ZXB0IGZvciB0aGUgc21hbGwgc3Vic2V0IHByb3ZpZGVkIGJ5IHRoZSBLVk0gZ3Vlc3QKLWxpYnJh cnkuIFRoZSBwYXlsb2FkIGNvZGUgbXVzdCBkZWZpbmUgYSBgdm9pZCBtYWluKHZvaWQpYCBmdW5j dGlvbiB3aGljaCB3aWxsCi1iZSB0aGUgVk0gZW50cnkgcG9pbnQgb2YgdGhlIHRlc3QuCi0KLTIu IEtWTSBob3N0IGxpYnJhcnkKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIEtWTSBob3N0IGxp YnJhcnkgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIHJ1bm5pbmcK LWEgbWluaW1hbCBLVk0gdmlydHVhbCBtYWNoaW5lLgotCi0yLjEgRGF0YSBzdHJ1Y3R1cmVzCi1+ fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVtzb3VyY2UsY10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LXN0cnVjdCB0c3Rfa3ZtX2luc3RhbmNlIHsKLQlpbnQgdm1fZmQsIHZjcHVfZmQ7Ci0Jc3RydWN0 IGt2bV9ydW4gKnZjcHVfaW5mbzsKLQlzaXplX3QgdmNwdV9pbmZvX3NpemU7Ci0Jc3RydWN0IGt2 bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiByYW1bTUFYX0tWTV9NRU1TTE9UU107Ci0Jc3RydWN0 IHRzdF9rdm1fcmVzdWx0ICpyZXN1bHQ7Ci19OwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1g c3RydWN0IHRzdF9rdm1faW5zdGFuY2VgIGhvbGRzIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBt ZW1vcnkgYnVmZmVycwotb2YgYSBzaW5nbGUgS1ZNIHZpcnR1YWwgbWFjaGluZToKLQotLSBgaW50 IHZtX2ZkYCBpcyB0aGUgbWFpbiBWTSBmaWxlIGRlc2NyaXB0b3IgY3JlYXRlZCBieSBgaW9jdGwo S1ZNX0NSRUFURV9WTSlgCi0tIGBpbnQgdmNwdV9mZGAgaXMgdGhlIHZpcnR1YWwgQ1BVIGZpbGVk ZXNjcmlwdG9yIGNyZWF0ZWQgYnkKLSAgYGlvY3RsKEtWTV9DUkVBVEVfVkNQVSlgCi0tIGBzdHJ1 Y3Qga3ZtX3J1biAqdmNwdV9pbmZvYCBpcyB0aGUgVkNQVSBzdGF0ZSBzdHJ1Y3R1cmUgY3JlYXRl ZCBieQotICBgbW1hcCh2Y3B1X2ZkKWAKLS0gYHNpemVfdCB2Y3B1X2luZm9fc2l6ZWAgaXMgdGhl IHNpemUgb2YgYHZjcHVfaW5mb2AgYnVmZmVyCi0tIGBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1v cnlfcmVnaW9uIHJhbVtNQVhfS1ZNX01FTVNMT1RTXWAgaXMgdGhlIGxpc3QKLSAgb2YgbWVtb3J5 IHNsb3RzIGRlZmluZWQgaW4gdGhpcyBWTS4gVW51c2VkIG1lbW9yeSBzbG90cyBoYXZlIHplcm8K LSAgaW4gdGhlIGB1c2Vyc3BhY2VfYWRkcmAgZmllbGQuCi0tIGBzdHJ1Y3QgdHN0X2t2bV9yZXN1 bHQgKnJlc3VsdGAgaXMgYSBidWZmZXIgZm9yIHBhc3NpbmcgdGVzdCByZXN1bHQgZGF0YQotICBm cm9tIHRoZSBWTSB0byB0aGUgY29udHJvbGxlciBwcm9ncmFtLCBtYWlubHkgYHRzdF9yZXMoKWAv YHRzdF9icmsoKWAgZmxhZ3MKLSAgYW5kIG1lc3NhZ2VzLgotCi1bc291cmNlLGNdCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi1zdHJ1Y3QgdHN0X2t2bV9yZXN1bHQgewotCWludDMyX3QgcmVzdWx0 OwotCWludDMyX3QgbGluZW5vOwotCXVpbnQ2NF90IGZpbGVfYWRkcjsKLQljaGFyIG1lc3NhZ2Vb MF07Ci19OwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gc3RydWN0IHRzdF9rdm1fcmVzdWx0 YCBpcyB1c2VkIHRvIHBhc3MgdGVzdCByZXN1bHRzIGFuZCBzeW5jaHJvbml6YXRpb24gZGF0YQot YmV0d2VlbiB0aGUgS1ZNIGd1ZXN0IGFuZCB0aGUgY29udHJvbGxlciBwcm9ncmFtLiBNb3N0IG9m dGVuLCBpdCBpcyB1c2VkCi10byBwYXNzIGB0c3RfcmVzKClgIGFuZCBgdHN0X2JyaygpYCBtZXNz YWdlcyBmcm9tIHRoZSBWTSwgYnV0IHNwZWNpYWwgdmFsdWVzCi1jYW4gYWxzbyBiZSB1c2VkIHRv IHNlbmQgY29udHJvbCBmbG93IHJlcXVlc3RzIGJvdGggd2F5cy4KLQotLSBgaW50MzJfdCByZXN1 bHRgIGlzIHRoZSBtZXNzYWdlIHR5cGUsIGVpdGhlciBvbmUgb2YgdGhlIGBUUEFTU2AsIGBURkFJ TGAsCi0gIGBUV0FSTmAsIGBUQlJPS2AsIGBUSU5GT2AgZmxhZ3Mgb3IgYSBzcGVjaWFsIGNvbnRy b2wgZmxvdyB2YWx1ZS4gRXJybm8gZmxhZ3MKLSAgYXJlIG5vdCBzdXBwb3J0ZWQuCi0tIGBpbnQz Ml90IGxpbmVub2AgaXMgdGhlIGxpbmUgbnVtYmVyIGZvciBgdHN0X3JlcygpYC9gdHN0X2Jyaygp YCBtZXNzYWdlcy4KLS0gYHVpbnQ2NF90IGZpbGVfYWRkcmAgaXMgdGhlIFZNIGFkZHJlc3Mgb2Yg dGhlIGZpbGVuYW1lIHN0cmluZyBmb3IKLSAgYHRzdF9yZXMoKWAvYHRzdF9icmsoKWAgbWVzc2Fn ZXMuCi0tIGBjaGFyIG1lc3NhZ2VbMF1gIGlzIHRoZSBidWZmZXIgZm9yIGFyYml0cmFyeSBtZXNz YWdlIGRhdGEsIG1vc3Qgb2Z0ZW4gdXNlZAotICB0byBwYXNzIGB0c3RfcmVzKClgL2B0c3RfYnJr KClgIG1lc3NhZ2Ugc3RyaW5ncy4KLQotMi4yIFdvcmtpbmcgd2l0aCB2aXJ0dWFsIG1hY2hpbmVz Ci1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIEtWTSBob3N0IGxpYnJh cnkgcHJvdmlkZXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2V0dXAsIGNsZWFudXAK LWFuZCB0ZXN0IGZ1bmN0aW9ucyBmb3IgYHN0cnVjdCB0c3RfdGVzdGAgaW4gY2FzZXMgd2hlcmUg eW91IGRvIG5vdCBuZWVkCi10byBjdXN0b21pemUgdGhlIFZNIGNvbmZpZ3VyYXRpb24uIFlvdSBj YW4gZWl0aGVyIGFzc2lnbiB0aGVzZSBmdW5jdGlvbnMKLXRvIHRoZSBgc3RydWN0IHRzdF90ZXN0 YCBpbnN0YW5jZSBkaXJlY3RseSBvciBjYWxsIHRoZW0gZnJvbSB5b3VyIG93biBmdW5jdGlvbgot dGhhdCBkb2VzIHNvbWUgYWRkaXRpb25hbCBzdGVwcy4gQWxsIHRocmVlIGZ1bmN0aW9uIG11c3Qg YmUgdXNlZCB0b2dldGhlci4KLQotLSBgdm9pZCB0c3Rfa3ZtX3NldHVwKHZvaWQpYAotLSBgdm9p ZCB0c3Rfa3ZtX3J1bih2b2lkKWAKLS0gYHZvaWQgdHN0X2t2bV9jbGVhbnVwKHZvaWQpYAotCi1O b3RlOiBgdHN0X2t2bV9ydW4oKWAgY2FsbHMgYHRzdF9mcmVlX2FsbCgpYC4gQ2FsbGluZyBpdCB3 aWxsIGZyZWUgYWxsCi1wcmV2aW91c2x5IGFsbG9jYXRlZCBndWFyZGVkIGJ1ZmZlcnMuCi0KLS0g YHZvaWQgdHN0X2t2bV92YWxpZGF0ZV9yZXN1bHQoaW50IHZhbHVlKWAg4oCTIFZhbGlkYXRlIHdo ZXRoZXIgdGhlIHZhbHVlCi0gIHJldHVybmVkIGluIGBzdHJ1Y3QgdHN0X2t2bV9yZXN1bHQucmVz dWx0YCBjYW4gYmUgc2FmZWx5IHBhc3NlZAotICB0byBgdHN0X3JlcygpYCBvciBgdHN0X2Jyaygp YC4gSWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZCwgdGhlIGNvbnRyb2xsZXIKLSAgcHJvZ3JhbSB3 aWxsIGJlIHRlcm1pbmF0ZWQgd2l0aCBlcnJvci4KLQotLSBgdWludDY0X3QgdHN0X2t2bV9nZXRf cGh5c19hZGRyZXNzKGNvbnN0IHN0cnVjdCB0c3Rfa3ZtX2luc3RhbmNlICppbnN0LAotICB1aW50 NjRfdCBhZGRyKWAg4oCTIENvbnZlcnRzIHBvaW50ZXIgdmFsdWUgKHZpcnR1YWwgYWRkcmVzcykg ZnJvbSBLVk0gdmlydHVhbAotICBtYWNoaW5lIGBpbnN0YCB0byB0aGUgY29ycmVzcG9uZGluZyBw aHlzaWNhbCBhZGRyZXNzLiBSZXR1cm5zIDAgaWYKLSAgdGhlIHZpcnR1YWwgYWRkcmVzcyBpcyBu b3QgbWFwcGVkIHRvIGFueSBwaHlzaWNhbCBhZGRyZXNzLiBJZiB2aXJ0dWFsIG1lbW9yeQotICBt YXBwaW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSBWTSBvciBub3QgYXZhaWxhYmxlIG9uIHRoZSBh cmNoIGF0IGFsbCwgdGhpcwotICBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucyBgYWRkcmAgYXMgaXMu Ci0KLS0gYGludCB0c3Rfa3ZtX2ZpbmRfcGh5c19tZW1zbG90KGNvbnN0IHN0cnVjdCB0c3Rfa3Zt X2luc3RhbmNlICppbnN0LAotICB1aW50NjRfdCBwYWRkcilgIOKAkyBSZXR1cm5zIGluZGV4IG9m IHRoZSBtZW1vcnkgc2xvdCBpbiBLVk0gdmlydHVhbCBtYWNoaW5lCi0gIGBpbnN0YCB3aGljaCBj b250YWlucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBgcGFkZHJgLiBJZiB0aGUgYWRkcmVzcyBpcyBu b3QKLSAgYmFja2VkIGJ5IGEgbWVtb3J5IGJ1ZmZlciwgcmV0dXJucyAtMS4KLQotLSBgaW50IHRz dF9rdm1fZmluZF9tZW1zbG90KGNvbnN0IHN0cnVjdCB0c3Rfa3ZtX2luc3RhbmNlICppbnN0LAot ICB1aW50NjRfdCBhZGRyKWAg4oCTIFJldHVybnMgaW5kZXggb2YgdGhlIG1lbW9yeSBzbG90IGlu IEtWTSB2aXJ0dWFsIG1hY2hpbmUKLSAgYGluc3RgIHdoaWNoIGNvbnRhaW5zIHRoZSB2aXJ0dWFs IGFkZHJlc3MgYGFkZHJgLiBJZiB0aGUgdmlydHVhbCBhZGRyZXNzCi0gIGlzIG5vdCBtYXBwZWQg dG8gYSB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzIGJhY2tlZCBieSBhIG1lbW9yeSBidWZmZXIsCi0g IHJldHVybnMgLTEuCi0KLS0gYHZvaWQgKnRzdF9rdm1fZ2V0X21lbXB0cihjb25zdCBzdHJ1Y3Qg dHN0X2t2bV9pbnN0YW5jZSAqaW5zdCwKLSAgdWludDY0X3QgYWRkcilgIOKAkyBDb252ZXJ0cyBw b2ludGVyIHZhbHVlICh2aXJ0dWFsIGFkZHJlc3MpIGZyb20gS1ZNIHZpcnR1YWwKLSAgbWFjaGlu ZSBgaW5zdGAgdG8gaG9zdC1zaWRlIHBvaW50ZXIuCi0KLS0gYHZvaWQgKnRzdF9rdm1fYWxsb2Nf bWVtb3J5KHN0cnVjdCB0c3Rfa3ZtX2luc3RhbmNlICppbnN0LCB1bnNpZ25lZCBpbnQgc2xvdCwK LSAgdWludDY0X3QgYmFzZWFkZHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpYCDi gJMgQWxsb2NhdGVzIGEgZ3VhcmRlZAotICBidWZmZXIgb2YgZ2l2ZW4gYHNpemVgIGluIGJ5dGVz IGFuZCBpbnN0YWxscyBpdCBpbnRvIHNwZWNpZmllZCBtZW1vcnkgYHNsb3RgCi0gIG9mIHRoZSBL Vk0gdmlydHVhbCBtYWNoaW5lIGBpbnN0YCBhdCBiYXNlIGFkZHJlc3MgYGJhc2VhZGRyYC4gVGhl IGJ1ZmZlcgotICB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcGFnZSBhbGlnbmVkIGF0IGJvdGggZW5k cy4gU2VlIHRoZSBrZXJuZWwKLSAgZG9jdW1lbnRhdGlvbiBvZiBgS1ZNX1NFVF9VU0VSX01FTU9S WV9SRUdJT05gIGlvY3RsIGZvciBsaXN0IG9mIHZhbGlkCi0gIGBmbGFnc2AuIFJldHVybnMgcG9p bnRlciB0byBwYWdlLWFsaWduZWQgYmVnaW5uaW5nIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLgot ICBUaGUgYWN0dWFsIHJlcXVlc3RlZCBgYmFzZWFkZHJgIHdpbGwgYmUgbG9jYXRlZCBhdAotICBg cmV0ICsgYmFzZWFkZHIgJSBwYWdlc2l6ZWAuCi0KLS0gYHN0cnVjdCBrdm1fY3B1aWQyICp0c3Rf a3ZtX2dldF9jcHVpZChpbnQgc3lzZmQpYCDigJMgR2V0IGEgbGlzdCBvZiBzdXBwb3J0ZWQKLSAg dmlydHVhbCBDUFUgZmVhdHVyZXMgcmV0dXJuZWQgYnkgYGlvY3RsKEtWTV9HRVRfU1VQUE9SVEVE X0NQVUlEKWAuCi0gIFRoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9y IHJldHVybmVkIGJ5IGBvcGVuKCIvZGV2L2t2bSIpYC4KLQotLSBgdm9pZCB0c3Rfa3ZtX2NyZWF0 ZV9pbnN0YW5jZShzdHJ1Y3QgdHN0X2t2bV9pbnN0YW5jZSAqaW5zdCwKLSAgc2l6ZV90IHJhbV9z aXplKWAg4oCTIENyZWF0ZXMgYW5kIGZ1bGx5IGluaXRpYWxpemVzIGEgbmV3IEtWTSB2aXJ0dWFs IG1hY2hpbmUKLSAgd2l0aCBhdCBsZWFzdCBgcmFtX3NpemVgIGJ5dGVzIG9mIG1lbW9yeS4gVGhl IFZNIGluc3RhbmNlIGluZm8gd2lsbCBiZQotICBzdG9yZWQgaW4gYGluc3RgLgotCi0tIGBpbnQg dHN0X2t2bV9ydW5faW5zdGFuY2Uoc3RydWN0IHRzdF9rdm1faW5zdGFuY2UgKmluc3QsIGludCBl eHBfZXJybm8pYCDigJMKLSAgRXhlY3V0ZXMgdGhlIHByb2dyYW0gaW5zdGFsbGVkIGluIEtWTSB2 aXJ0dWFsIG1hY2hpbmUgYGluc3RgLiBBbnkgcmVzdWx0Ci0gIG1lc3NhZ2VzIHJldHVybmVkIGJ5 IHRoZSBWTSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHJpbnRlZCB0byBjb250cm9sbGVyCi0gIHBy b2dyYW0gb3V0cHV0LiBSZXR1cm5zIHplcm8uIElmIGBleHBfZXJybm9gIGlzIG5vbi16ZXJvLCB0 aGUgVk0gZXhlY3V0aW9uCi0gIHN5c2NhbGwgaXMgYWxsb3dlZCB0byBmYWlsIHdpdGggdGhlIGBl eHBfZXJybm9gIGVycm9yIGNvZGUgYW5kCi0gIGB0c3Rfa3ZtX3J1bl9pbnN0YW5jZSgpYCB3aWxs IHJldHVybiAtMSBpbnN0ZWFkIG9mIHRlcm1pbmF0aW5nIHRoZSB0ZXN0LgotCi0tIGB2b2lkIHRz dF9rdm1fZGVzdHJveV9pbnN0YW5jZShzdHJ1Y3QgdHN0X2t2bV9pbnN0YW5jZSAqaW5zdClgIOKA kyBEZWxldGVzCi0gIHRoZSBLVk0gdmlydHVhbCBtYWNoaW5lIGBpbnN0YC4gTm90ZSB0aGF0IHRo ZSBndWFyZGVkIGJ1ZmZlcnMgYXNzaWduZWQKLSAgdG8gdGhlIFZNIGJ5IGB0c3Rfa3ZtX2NyZWF0 ZV9pbnN0YW5jZSgpYCBvciBgdHN0X2t2bV9hbGxvY19tZW1vcnkoKWAgd2lsbAotICBub3QgYmUg ZnJlZWQuCi0KLVRoZSBLVk0gaG9zdCBsaWJyYXJ5IGRvZXMgbm90IHByb3ZpZGUgYW55IHdheSB0 byByZXNldCBhIFZNIGluc3RhbmNlIGJhY2sKLXRvIGluaXRpYWwgc3RhdGUuIFJ1bm5pbmcgbXVs dGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgdGVzdCByZXF1aXJlcyBkZXN0cm95aW5nCi10aGUgb2xk IFZNIGluc3RhbmNlIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUuIE90aGVyd2lzZSB0aGUgVk0gd2ls bCBleGl0Ci13aXRob3V0IHJlcG9ydGluZyBhbnkgcmVzdWx0cyBvbiB0aGUgc2Vjb25kIGl0ZXJh dGlvbiBhbmQgdGhlIHRlc3Qgd2lsbCBmYWlsLgotVGhlIGB0c3Rfa3ZtX3J1bigpYCBmdW5jdGlv biBoYW5kbGVzIHRoaXMgaXNzdWUgY29ycmVjdGx5LgotCi0zLiBLVk0gZ3Vlc3QgbGlicmFyeQot LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIEtWTSBndWVzdCBsaWJyYXJ5IHByb3ZpZGVzIGEg bWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBib3RoIHRoZSBMVFAKLXRlc3QgbGlicmFyeSBhbmQg dGhlIHN0YW5kYXJkIEMgbGlicmFyeSBmdW5jdGlvbnMuIERvIG5vdCB0cnkgdG8gaW5jbHVkZQot dGhlIHVzdWFsIExUUCBvciBDIGhlYWRlcnMgaW4gZ3Vlc3QgcGF5bG9hZCBjb2RlLCBpdCB3aWxs IG5vdCB3b3JrLgotCi0zLjEgU3RhbmRhcmQgQyBmdW5jdGlvbnMKLX5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fgotCi1gI2luY2x1ZGUgImt2bV90ZXN0LmgiYAotCi1UaGUgZnVuY3Rpb25zIGxpc3Rl ZCBiZWxvdyBhcmUgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkOgotCi0t IGB2b2lkICptZW1zZXQodm9pZCAqZGVzdCwgaW50IHZhbCwgc2l6ZV90IHNpemUpYAotLSBgdm9p ZCAqbWVtemVybyh2b2lkICpkZXN0LCBzaXplX3Qgc2l6ZSlgCi0tIGB2b2lkICptZW1jcHkodm9p ZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSlgCi0tIGBjaGFyICpzdHJjcHko Y2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKWAKLS0gYGNoYXIgKnN0cmNhdChjaGFyICpkZXN0 LCBjb25zdCBjaGFyICpzcmMpYAotLSBgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzdHIpYAot Ci0zLjIgTFRQIGxpYnJhcnkgZnVuY3Rpb25zCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0K LWAjaW5jbHVkZSAia3ZtX3Rlc3QuaCJgCi0KLVRoZSBLVk0gZ3Vlc3QgbGlicmFyeSBjdXJyZW50 bHkgcHJvdmlkZXMgdGhlIExUUCBmdW5jdGlvbnMgZm9yIHJlcG9ydGluZyB0ZXN0Ci1yZXN1bHRz LiBBbGwgc3RhbmRhcmQgcmVzdWx0IGZsYWdzIGV4Y2VwdCBmb3IgYFQqRVJSTk9gIGFyZSBzdXBw b3J0ZWQKLXdpdGggdGhlIHNhbWUgcnVsZXMgYXMgdXN1YWwuIEhvd2V2ZXIsIHRoZSBwcmludGYt bGlrZSBmb3JtYXR0aW5nIGlzIG5vdAotaW1wbGVtZW50ZWQgeWV0LgotCi0tIGB2b2lkIHRzdF9y ZXMoaW50IHJlc3VsdCwgY29uc3QgY2hhciAqbWVzc2FnZSlgCi0tIGB2b2lkIHRzdF9icmsoaW50 IHJlc3VsdCwgY29uc3QgY2hhciAqbWVzc2FnZSkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKWAK LQotQSBoYW5kZnVsIG9mIHVzZWZ1bCBtYWNyb3MgaXMgYWxzbyBhdmFpbGFibGU6Ci0KLS0gYFRT VF9URVNUX1RDT05GKG1lc3NhZ2UpYCDigJMgR2VuZXJhdGVzIGEgdGVzdCBwcm9ncmFtIHRoYXQg d2lsbCBzaW1wbHkgcHJpbnQKLSAgYSBgVENPTkZgIG1lc3NhZ2UgYW5kIGV4aXQuIFRoaXMgaXMg dXNlZnVsIHdoZW4gdGhlIHJlYWwgdGVzdCBjYW5ub3QgYmUKLSAgYnVpbHQgZHVlIHRvIG1pc3Np bmcgZGVwZW5kZW5jaWVzIG9yIGFyY2ggbGltaXRhdGlvbnMuCi0KLS0gYEFSUkFZX1NJWkUoYXJy KWAg4oCTIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBzdGF0aWNhbGx5IGFsbG9jYXRl ZAotICBhcnJheSBgYXJyYC4KLQotLSBgTFRQX0FMSUdOKHgsIGEpYCDigJMgQWxpZ25zIGludGVn ZXIgYHhgIHRvIGJlIGEgbXVsdGlwbGUgb2YgYGFgLCB3aGljaAotICBtdXN0IGJlIGEgcG93ZXIg b2YgMi4KLQotMy4zIEFyY2ggaW5kZXBlbmRlbnQgZnVuY3Rpb25zCi1+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn4KLQotYCNpbmNsdWRlICJrdm1fdGVzdC5oImAKLQotTWVtb3J5IG1hbmFn ZW1lbnQgaW4gS1ZNIGd1ZXN0IGxpYnJhcnkgY3VycmVudGx5IHVzZXMgb25seSBwcmltaXRpdmUg bGluZWFyCi1idWZmZXIgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVyZSBhcmUgbm8gY2hlY2tz IHdoZXRoZXIgdGhlIFZNIGNhbiBhbGxvY2F0ZQotbW9yZSBtZW1vcnkgYW5kIHRoZSBhbHJlYWR5 IGFsbG9jYXRlZCBtZW1vcnkgY2Fubm90IGJlIGZyZWVkLgotCi0tIGB2b2lkICp0c3RfaGVhcF9h bGxvYyhzaXplX3Qgc2l6ZSlgIOKAkyBBbGxvY2F0ZXMgYSBibG9jayBvZiBtZW1vcnkgb24gdGhl IGhlYXAuCi0KLS0gYHZvaWQgKnRzdF9oZWFwX2FsbG9jX2FsaWduZWQoc2l6ZV90IHNpemUsIHNp emVfdCBhbGlnbilgIOKAkyBBbGxvY2F0ZXMKLSAgYSBibG9jayBvZiBtZW1vcnkgb24gdGhlIGhl YXAgd2l0aCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBhbGlnbmVkIHRvIGdpdmVuCi0gIHZhbHVlLgot Ci0zLjQgeDg2IHNwZWNpZmljIGZ1bmN0aW9ucwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4K LQotYCNpbmNsdWRlICJrdm1fdGVzdC5oImAgKwotYCNpbmNsdWRlICJrdm1feDg2LmgiYAotCi0t IGBzdHJ1Y3Qga3ZtX2ludGVycnVwdF9mcmFtZWAg4oCTIE9wYXF1ZSBhcmNoLWRlcGVuZGVudCBz dHJ1Y3R1cmUgd2hpY2ggaG9sZHMKLSAgaW50ZXJydXB0IGZyYW1lIGluZm9ybWF0aW9uLiBVc2Ug dGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBnZXQgaW5kaXZpZHVhbCB2YWx1ZXM6Ci0KLS0gYHVpbnRw dHJfdCBrdm1fZ2V0X2ludGVycnVwdF9pcChjb25zdCBzdHJ1Y3Qga3ZtX2ludGVycnVwdF9mcmFt ZSAqaWZybSlgIOKAkwotICBHZXQgaW5zdHJ1Y3Rpb24gcG9pbnRlciB2YWx1ZSBmcm9tIGludGVy cnVwdCBmcmFtZSBzdHJ1Y3R1cmUuIFRoaXMgbWF5IGJlCi0gIHRoZSBpbnN0cnVjdGlvbiB3aGlj aCBjYXVzZWQgYW4gaW50ZXJydXB0IG9yIHRoZSBvbmUgaW1tZWRpYXRlbHkgYWZ0ZXIsCi0gIGRl cGVuZGluZyBvbiB0aGUgaW50ZXJydXB0IHZlY3RvciBzZW1hbnRpY3MuCi0KLS0gYGludCAoKnRz dF9pbnRlcnJ1cHRfY2FsbGJhY2spKHZvaWQgKnVzZXJkYXRhLAotICBzdHJ1Y3Qga3ZtX2ludGVy cnVwdF9mcmFtZSAqaWZybSwgdW5zaWduZWQgbG9uZyBlcnJjb2RlKWAg4oCTIEludGVycnVwdCBo YW5kbGVyCi0gIGNhbGxiYWNrIHByb3RvdHlwZS4gV2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLCB0 aGUgYXNzaWduZWQgY2FsbGJhY2sgZnVuY3Rpb24KLSAgd2lsbCBiZSBwYXNzZWQgdGhlIGB1c2Vy ZGF0YWAgcG9pbnRlciB0aGF0IHdhcyBnaXZlbgotICB0byBgdHN0X3NldF9pbnRlcnJ1cHRfY2Fs bGJhY2soKWAsIGludGVycnVwdCBmcmFtZSBgaWZybWAgYW5kIHRoZSBlcnJvcgotICBjb2RlIGBl cnJjb2RlYCBkZWZpbmVkIGJ5IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHNlbWFudGljcy4gSWYgdGhl IGludGVycnVwdAotICB2ZWN0b3IgZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IgY29kZSwgYGVy cmNvZGVgIHdpbGwgYmUgc2V0IHRvIHplcm8uCi0gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdXN0 IHJldHVybiAwIGlmIHRoZSBpbnRlcnJ1cHQgd2FzIHN1Y2Nlc3NmdWxseQotICBoYW5kbGVkIGFu ZCB0ZXN0IGV4ZWN1dGlvbiBzaG91bGQgcmVzdW1lLiBOb24temVybyByZXR1cm4gdmFsdWUgbWVh bnMgdGhhdAotICB0aGUgaW50ZXJydXB0IGNvdWxkIG5vdCBiZSBoYW5kbGVkIGFuZCB0aGUgdGVz dCB3aWxsIHRlcm1pbmF0ZSB3aXRoIGVycm9yLgotCi0tIGB2b2lkIHRzdF9zZXRfaW50ZXJydXB0 X2NhbGxiYWNrKHVuc2lnbmVkIGludCB2ZWN0b3IsCi0gIHRzdF9pbnRlcnJ1cHRfY2FsbGJhY2sg ZnVuYywgdm9pZCAqdXNlcmRhdGEpYCDigJMgUmVnaXN0ZXIgbmV3IGludGVycnVwdAotICBoYW5k bGVyIGNhbGxiYWNrIGZ1bmN0aW9uIGBmdW5jYCBmb3IgaW50ZXJydXB0IGB2ZWN0b3JgLiBUaGUg YHVzZXJkYXRhYAotICBhcmd1bWVudCBpcyBhbiBhcmJpdHJhcnkgcG9pbnRlciB0aGF0IHdpbGwg YmUgcGFzc2VkIHRvIGBmdW5jKClgIGV2ZXJ5IHRpbWUKLSAgaXQgZ2V0cyBjYWxsZWQuIFRoZSBw cmV2aW91cyBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQuCi0gIFNl dHRpbmcgYGZ1bmNgIHRvIGBOVUxMYCB3aWxsIHJlbW92ZSBhbnkgZXhpc3RpbmcgaW50ZXJydXB0 IGhhbmRsZXIKLSAgZnJvbSBgdmVjdG9yYCBhbmQgdGhlIGludGVycnVwdCB3aWxsIGJlY29tZSBm YXRhbCBlcnJvci4KLQotW3NvdXJjZSxjXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RydWN0 IHBhZ2VfdGFibGVfZW50cnlfcGFlIHsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDogMTsKLQl1bnNp Z25lZCBpbnQgd3JpdGFibGU6IDE7Ci0JdW5zaWduZWQgaW50IHVzZXJfYWNjZXNzOiAxOwotCXVu c2lnbmVkIGludCB3cml0ZV90aHJvdWdoOiAxOwotCXVuc2lnbmVkIGludCBkaXNhYmxlX2NhY2hl OiAxOwotCXVuc2lnbmVkIGludCBhY2Nlc3NlZDogMTsKLQl1bnNpZ25lZCBpbnQgZGlydHk6IDE7 Ci0JdW5zaWduZWQgaW50IHBhZ2VfdHlwZTogMTsKLQl1bnNpZ25lZCBpbnQgZ2xvYmFsOiAxOwot CXVuc2lnbmVkIGludCBwYWRkaW5nOiAzOwotCXVpbnQ2NF90IGFkZHJlc3M6IDQwOwotCXVuc2ln bmVkIGludCBwYWRkaW5nMjogNzsKLQl1bnNpZ25lZCBpbnQgcHJvdF9rZXk6IDQ7Ci0JdW5zaWdu ZWQgaW50IG5vZXhlYzogMTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1zdHJ1 Y3Qga3ZtX2NwdWlkIHsKLQl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotfTsKLQot c3RydWN0IGt2bV9jcmVncyB7Ci0JdW5zaWduZWQgbG9uZyBjcjAsIGNyMiwgY3IzLCBjcjQ7Ci19 OwotCi1zdHJ1Y3Qga3ZtX3NyZWdzIHsKLQl1aW50MTZfdCBjcywgZHMsIGVzLCBmcywgZ3MsIHNz OwotfTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYHN0cnVjdCBwYWdlX3RhYmxlX2VudHJ5 X3BhZWAgaXMgdGhlIHBhZ2UgdGFibGUgZW50cnkgc3RydWN0dXJlIGZvciBQQUUgYW5kCi02NGJp dCBwYWdpbmcgbW9kZXMuIFNlZSBJbnRlbChSKSA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBT b2Z0d2FyZQotRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2x1bWUgMywgQ2hhcHRlciA0IGZvciBleHBs YW5hdGlvbiBvZiB0aGUgZmllbGRzLgotCi0tIGB1aW50cHRyX3Qga3ZtX2dldF9wYWdlX2FkZHJl c3NfcGFlKGNvbnN0IHN0cnVjdCBwYWdlX3RhYmxlX2VudHJ5X3BhZSAqZW50cnkpYAotICDigJMg UmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHBhZ2UgcmVmZXJlbmNl ZCBieSB0aGUgZ2l2ZW4KLSAgcGFnZSB0YWJsZSBgZW50cnlgLiBEZXBlbmRpbmcgb24gbWVtb3J5 IG1hcHBpbmcgY2hhbmdlcyBkb25lIGJ5IHRoZSB0ZXN0LAotICB0aGUgcGh5c2ljYWwgYWRkcmVz cyBtYXkgbm90IGJlIGEgdmFsaWQgcG9pbnRlci4gVGhlIGNhbGxlciBtdXN0IGRldGVybWluZQot ICB3aGV0aGVyIHRoZSBhZGRyZXNzIHBvaW50cyB0byBhbm90aGVyIHBhZ2UgdGFibGUgZW50cnkg b3IgYSBkYXRhIHBhZ2UsIHVzaW5nCi0gIHRoZSBrbm93biBwb3NpdGlvbiBpbiBwYWdlIHRhYmxl IGhpZXJhcmNoeSBhbmQgYGVudHJ5LT5wYWdlX3R5cGVgLiBSZXR1cm5zCi0gIHplcm8gaWYgdGhl IGBlbnRyeWAgZG9lcyBub3QgcmVmZXJlbmNlIGFueSBtZW1vcnkgcGFnZS4KLQotLSBgdm9pZCBr dm1fc2V0X3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qgc2VnbWVudF9kZXNjcmlwdG9yICpkc3Qs IHVpbnQ2NF90IGJhc2VhZGRyLCB1aW50MzJfdCBsaW1pdCwgdW5zaWduZWQgaW50IGZsYWdzKWAg LQotICBGaWxsIHRoZSBgZHN0YCBzZWdtZW50IGRlc2NyaXB0b3Igd2l0aCBnaXZlbiB2YWx1ZXMu IFRoZSBtYXhpbXVtIHZhbHVlCi0gIG9mIGBsaW1pdGAgaXMgYDB4ZmZmZmZgIChpbmNsdXNpdmUp IHJlZ2FyZGxlc3Mgb2YgYGZsYWdzYC4KLQotLSBgdm9pZCBrdm1fcGFyc2Vfc2VnbWVudF9kZXNj cmlwdG9yKHN0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3IgKnNyYywgdWludDY0X3QgKmJhc2VhZGRy LCB1aW50MzJfdCAqbGltaXQsIHVuc2lnbmVkIGludCAqZmxhZ3MpYCAtCi0gIFBhcnNlIGRhdGEg aW4gdGhlIGBzcmNgIHNlZ21lbnQgZGVzY3JpcHRvciBhbmQgY29weSB0aGVtIHRvIHZhcmlhYmxl cwotICBwb2ludGVkIHRvIGJ5IHRoZSBvdGhlciBhcmd1bWVudHMuIEFueSBwYXJhbWV0ZXIgZXhj ZXB0IHRoZSBmaXJzdCBvbmUgY2FuCi0gIGJlIGBOVUxMYC4KLQotLSBgaW50IGt2bV9maW5kX2Zy ZWVfZGVzY3JpcHRvcihjb25zdCBzdHJ1Y3Qgc2VnbWVudF9kZXNjcmlwdG9yICp0YWJsZSwgc2l6 ZV90IHNpemUpYCAtCi0gIEZpbmQgdGhlIGZpcnN0IHNlZ21lbnQgZGVzY3JpcHRvciBpbiBgdGFi bGVgIHdoaWNoIGRvZXMgbm90IGhhdmUKLSAgdGhlIGBTRUdGTEFHX1BSRVNFTlRgIGJpdCBzZXQu IFRoZSBmdW5jdGlvbiBoYW5kbGVzIGRvdWJsZS1zaXplIGRlc2NyaXB0b3JzCi0gIGNvcnJlY3Rs eS4gUmV0dXJucyBpbmRleCBvZiB0aGUgZmlyc3QgYXZhaWxhYmxlIGRlc2NyaXB0b3Igb3IgLTEg aWYgYWxsCi0gIGBzaXplYCBkZXNjcmlwdG9ycyBhcmUgdGFrZW4uCi0KLS0gYHVuc2lnbmVkIGlu dCBrdm1fY3JlYXRlX3N0YWNrX2Rlc2NyaXB0b3Ioc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciAq dGFibGUsIHNpemVfdCB0YWJzaXplLCB2b2lkICpzdGFja19iYXNlKWAgLQotICBDb252ZW5pZW5j ZSBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJpbmcgYSBzdGFjayBzZWdtZW50IGRlc2NyaXB0b3IuIEl0 J2xsCi0gIGF1dG9tYXRpY2FsbHkgZmluZCBhIGZyZWUgc2xvdCBpbiBgdGFibGVgIGFuZCBmaWxs IHRoZSBuZWNlc3NhcnkgZmxhZ3MuCi0gIFRoZSBgc3RhY2tfYmFzZWAgcG9pbnRlciBtdXN0IHBv aW50IHRvIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLgotCi0tIGB2b2lkIGt2bV9nZXRfY3B1aWQo dW5zaWduZWQgaW50IGVheCwgdW5zaWduZWQgaW50IGVjeCwKLSAgc3RydWN0IGt2bV9jcHVpZCAq YnVmKWAg4oCTIEV4ZWN1dGVzIHRoZSBDUFVJRCBpbnN0cnVjdGlvbiB3aXRoIHRoZSBnaXZlbgot ICBgZWF4YCBhbmQgYGVjeGAgYXJndW1lbnRzIGFuZCBzdG9yZXMgdGhlIHJlc3VsdHMgaW4gYGJ1 ZmAuCi0KLS0gYHZvaWQga3ZtX3JlYWRfY3JlZ3Moc3RydWN0IGt2bV9jcmVncyAqYnVmKWAg4oCT IENvcGllcyB0aGUgY3VycmVudCB2YWx1ZXMKLSAgb2YgY29udHJvbCByZWdpc3RlcnMgdG8gYGJ1 ZmAuCi0KLS0gYHZvaWQga3ZtX3JlYWRfc3JlZ3Moc3RydWN0IGt2bV9zcmVncyAqYnVmKWAgLSBD b3BpZXMgdGhlIGN1cnJlbnQgdmFsdWVzCi0gIG9mIHNlZ21lbnQgcmVnaXN0ZXJzIHRvIGBidWZg LgotCi0tIGB1aW50NjRfdCBrdm1fcmRtc3IodW5zaWduZWQgaW50IG1zcilgIOKAkyBSZXR1cm5z IHRoZSBjdXJyZW50IHZhbHVlCi0gIG9mIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyIGBtc3JgLgot Ci0tIGB2b2lkIGt2bV93cm1zcih1bnNpZ25lZCBpbnQgbXNyLCB1aW50NjRfdCB2YWx1ZSlgIOKA kyBTdG9yZXMgYHZhbHVlYAotICBpbnRvIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyIGBtc3JgLgot Ci0tIGB2b2lkIGt2bV9leGl0KHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSlgIOKAkyBU ZXJtaW5hdGUgdGhlIHRlc3QuCi0gIFNpbWlsYXIgdG8gY2FsbGluZyBgZXhpdCgwKWAgaW4gYSBy ZWd1bGFyIExUUCB0ZXN0LCBhbHRob3VnaCBga3ZtX2V4aXQoKWAKLSAgd2lsbCB0ZXJtaW5hdGUg b25seSBvbmUgaXRlcmF0aW9uIG9mIHRoZSB0ZXN0LCBub3QgdGhlIHdob2xlIGhvc3QgcHJvY2Vz cy4KLQotU2VlIEludGVsKFIpIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERl dmVsb3BlcidzIE1hbnVhbAotZm9yIGRvY3VtZW50YXRpb24gb2Ygc3RhbmRhcmQgYW5kIG1vZGVs LXNwZWNpZmljIHg4NiByZWdpc3RlcnMuCi0KLTMuNSBBTUQgU1ZNIGhlbHBlciBmdW5jdGlvbnMK LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotYCNpbmNsdWRlICJrdm1fdGVzdC5oImAg KwotYCNpbmNsdWRlICJrdm1feDg2LmgiYCArCi1gI2luY2x1ZGUgImt2bV94ODZfc3ZtLmgiYAot Ci1UaGUgS1ZNIGd1ZXN0IGxpYnJhcnkgcHJvdmlkZXMgYmFzaWMgaGVscGVyIGZ1bmN0aW9ucyBm b3IgY3JlYXRpbmcgYW5kIHJ1bm5pbmcKLW5lc3RlZCB2aXJ0dWFsIG1hY2hpbmVzIHVzaW5nIHRo ZSBBTUQgU1ZNIHRlY2hub2xvZ3kuCi0KLS5FeGFtcGxlIGNvZGUgdG8gZXhlY3V0ZSBuZXN0ZWQg Vk0KLVtzb3VyY2UsY10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCBndWVzdF9tYWluKHZv aWQpCi17Ci0JLi4uCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgbWFpbih2b2lkKQotewotCXN0cnVj dCBrdm1fc3ZtX3ZjcHUgKnZtOwotCi0Ja3ZtX2luaXRfc3ZtKCk7Ci0Jdm0gPSBrdm1fY3JlYXRl X3N2bV92Y3B1KGd1ZXN0X21haW4sIDEpOwotCWt2bV9zdm1fdm1ydW4odm0pOwotfQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotCi0tIGBpbnQga3ZtX2lzX3N2bV9zdXBwb3J0ZWQodm9pZClgIC0g UmV0dXJucyBub24temVybyB2YWx1ZSBpZiB0aGUgQ1BVCi0gIHN1cHBvcnRzIEFNRCBTVk0sIG90 aGVyd2lzZSByZXR1cm5zIDAuCi0KLS0gYGludCBrdm1fZ2V0X3N2bV9zdGF0ZSh2b2lkKWAgLSBS ZXR1cm5zIG5vbi16ZXJvIHZhbHVlIGlmIFNWTSBpcyBjdXJyZW50bHkKLSAgZW5hYmxlZCwgb3Ro ZXJ3aXNlIHJldHVybnMgMC4KLQotLSBgdm9pZCBrdm1fc2V0X3N2bV9zdGF0ZShpbnQgZW5hYmxl ZClgIC0gRW5hYmxlIG9yIGRpc2FibGUgU1ZNIGFjY29yZGluZwotICB0byBhcmd1bWVudC4gSWYg U1ZNIGlzIGRpc2FibGVkIGJ5IGhvc3Qgb3Igbm90IHN1cHBvcnRlZCwgdGhlIHRlc3Qgd2lsbCBl eGl0Ci0gIHdpdGggYFRDT05GYC4KLQotLSBgdm9pZCBrdm1faW5pdF9zdm0odm9pZClgIC0gRW5h YmxlIGFuZCBmdWxseSBpbml0aWFsaXplIFNWTSwgaW5jbHVkaW5nCi0gIGFsbG9jYXRpbmcgYW5k IHNldHRpbmcgdXAgaG9zdCBzYXZlIGFyZWEgVk1DQi4gSWYgU1ZNIGlzIGRpc2FibGVkIGJ5IGhv c3Qgb3IKLSAgbm90IHN1cHBvcnRlZCwgdGhlIHRlc3Qgd2lsbCBleGl0IHdpdGggYFRDT05GYC4K LQotLSBgc3RydWN0IGt2bV92bWNiICprdm1fYWxsb2Nfdm1jYih2b2lkKWAgLSBBbGxvY2F0ZSBu ZXcgVk1DQiBzdHJ1Y3R1cmUKLSAgd2l0aCBjb3JyZWN0IG1lbW9yeSBhbGlnbm1lbnQgYW5kIGZp bGwgaXQgd2l0aCB6ZXJvZXMuCi0KLS0gYHZvaWQga3ZtX3ZtY2Jfc2V0X2ludGVyY2VwdChzdHJ1 Y3Qga3ZtX3ZtY2IgKnZtY2IsIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHN0YXRlKWAg LQotICBTZXQgU1ZNIGludGVyY2VwdCBiaXQgYGlkYCB0byBnaXZlbiBgc3RhdGVgLgotCi0tIGB2 b2lkIGt2bV9pbml0X2d1ZXN0X3ZtY2Ioc3RydWN0IGt2bV92bWNiICp2bWNiLCB1aW50MzJfdCBh c2lkLCB1aW50MTZfdCBzcywgdm9pZCAqcnNwLCBpbnQgKCpndWVzdF9tYWluKSh2b2lkKSlgIC0K LSAgSW5pdGlhbGl6ZSBuZXcgU1ZNIHZpcnR1YWwgbWFjaGluZS4gVGhlIGBhc2lkYCBwYXJhbWV0 ZXIgaXMgdGhlIG5lc3RlZAotICBwYWdlIHRhYmxlIElELiBUaGUgYHNzYCBhbmQgYHJzcGAgcGFy YW1ldGVycyBzZXQgdGhlIHN0YWNrIHNlZ21lbnQgYW5kIHN0YWNrCi0gIHBvaW50ZXIgdmFsdWVz LCByZXNwZWN0aXZlbHkuIFRoZSBgZ3Vlc3RfbWFpbmAgcGFyYW1ldGVyIHNldHMgdGhlIGNvZGUg ZW50cnkKLSAgcG9pbnQgb2YgdGhlIHZpcnR1YWwgbWFjaGluZS4gQWxsIGNvbnRyb2wgcmVnaXN0 ZXJzLCBzZWdtZW50IHJlZ2lzdGVycwotICAoZXhjZXB0IHN0YWNrIHNlZ21lbnQgcmVnaXN0ZXIp LCBHRFRSIGFuZCBJRFRSIHdpbGwgYmUgY29waWVkCi0gIGZyb20gdGhlIGN1cnJlbnQgQ1BVIHN0 YXRlLgotCi0tIGBzdHJ1Y3Qga3ZtX3N2bV92Y3B1ICprdm1fY3JlYXRlX3N2bV92Y3B1KGludCAo Kmd1ZXN0X21haW4pKHZvaWQpLCBpbnQgYWxsb2Nfc3RhY2spYCAtCi0gIENvbnZlbmllbmNlIGZ1 bmN0aW9uIGZvciBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgbmV3IFNWTSB2aXJ0dWFsIENQ VS4KLSAgVGhlIGBndWVzdF9tYWluYCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGBrdm1faW5pdF9n dWVzdF92bWNiKClgLAotICB0aGUgYGFsbG9jX3N0YWNrYCBwYXJhbWV0ZXIgY29udHJvbHMgd2hl dGhlciBhIG5ldyA4S0Igc3RhY2sgd2lsbCBiZQotICBhbGxvY2F0ZWQgYW5kIHJlZ2lzdGVyZWQg aW4gR0RULiBJbnRlcmNlcHRpb24gd2lsbCBiZSBlbmFibGVkIGZvciBgVk1TQVZFYAotICBhbmQg YEhMVGAgaW5zdHJ1Y3Rpb25zLiBJZiB5b3Ugc2V0IGBhbGxvY19zdGFja2AgdG8gemVybywgeW91 IG11c3QgY29uZmlndXJlCi0gIHRoZSBzdGFjayBzZWdtZW50IHJlZ2lzdGVyIGFuZCBzdGFjayBw b2ludGVyIG1hbnVhbGx5LgotCi0tIGB2b2lkIGt2bV9zdm1fdm1ydW4oc3RydWN0IGt2bV9zdm1f dmNwdSAqY3B1KWAgLSBTdGFydCBvciBjb250aW51ZSBleGVjdXRpb24KLSAgb2YgYSBuZXN0ZWQg dmlydHVhbCBtYWNoaW5lLiBCZXdhcmUgdGhhdCBGUFUgc3RhdGUgaXMgbm90IHNhdmVkLiAgRG8g bm90IHVzZQotICBmbG9hdGluZyBwb2ludCB0eXBlcyBvciB2YWx1ZXMgaW4gbmVzdGVkIGd1ZXN0 IGNvZGUuIEFsc28gZG8gbm90IHVzZQotICBgdHN0X3JlcygpYCBvciBgdHN0X2JyaygpYCBmdW5j dGlvbnMgaW4gbmVzdGVkIGd1ZXN0IGNvZGUuCi0KLVNlZSBBTUQ2NCBBcmNoaXRlY3R1cmUgUHJv Z3JhbW1lcidzIE1hbnVhbCBWb2x1bWUgMiBmb3IgZG9jdW1lbnRhdGlvbgotb2YgdGhlIFNlY3Vy ZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgdGVjaG5vbG9neS4KLQotNC4gS1ZNIGd1ZXN0IGVudmly b25tZW50Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotS1ZNIGd1ZXN0IHBheWxvYWQgZXhl Y3V0aW9uIGJlZ2lucyB3aXRoIGJvb3RzdHJhcCBjb2RlIHdoaWNoIHdpbGwgcGVyZm9ybQotdGhl IG1pbmltYWwgZ3Vlc3QgZW52aXJvbm1lbnQgc2V0dXAgcmVxdWlyZWQgZm9yIHJ1bm5pbmcgQyBj b2RlOgotCi0tIEFjdGl2YXRlIHRoZSBhcHByb3ByaWF0ZSBDUFUgZXhlY3V0aW9uIG1vZGUgKElB LTMyIHByb3RlY3RlZCBtb2RlCi0gIG9uIDMyLWJpdCB4ODYgb3IgdGhlIDY0LWJpdCBtb2RlIG9u IHg4Nl82NCkuCi0tIENyZWF0ZSBpbmRlbnRpdHkgbWFwcGluZyAodmlydHVhbCBhZGRyZXNzID0g cGh5c2ljYWwgYWRkcmVzcykgb2YgdGhlIGxvd2VyCi0gIDJHQiBtZW1vcnkgcmVnaW9uLCBldmVu IGlmIHBhcnRzIG9mIHRoZSByZWdpb24gYXJlIG5vdCBiYWNrZWQgYnkgYW55IGhvc3QKLSAgbWVt b3J5IGJ1ZmZlcnMuIFRoZSBtZW1vcnkgcmVnaW9uIGFib3ZlIDJHQiB0aHJlc2hvbGQgaXMgbGVm dCB1bm1hcHBlZAotICBleGNlcHQgZm9yIG9uZSBtZW1vcnkgcGFnZSByZXNlcnZlZCBmb3IgdGhl IGBzdHJ1Y3QgdHN0X2t2bV9yZXN1bHRgIGJ1ZmZlci4KLS0gSW5pdGlhbGl6ZSA4S0Igc3RhY2su Ci0tIEluc3RhbGwgZGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIHN0YW5kYXJkIENQVSBl eGNlcHRpb24gdmVjdG9ycy4KLQotV2hlbiB0aGUgZW52aXJvbm1lbnQgc2V0dXAgaXMgY29tcGxl dGUsIGJvb3RzdHJhcCB3aWxsIGNhbGwgYHZvaWQgbWFpbih2b2lkKWAKLWZ1bmN0aW9uIGltcGxl bWVudGVkIGJ5IHRoZSB0ZXN0IHByb2dyYW0uIFRvIGZpbmlzaCBleGVjdXRpb24gb2YgZ3Vlc3Qg cGF5bG9hZCwKLXRoZSB0ZXN0IGNhbiBlaXRoZXIgcmV0dXJuIGZyb20gdGhlIGBtYWluKClgIGZ1 bmN0aW9uIG9yIGNhbGwgYGt2bV9leGl0KClgCi1hdCBhbnkgcG9pbnQuCgotLS0KYmFzZS1jb21t aXQ6IDM5MDcyNzk3ZmE2M2JlMmE1ZTg1YjFhNzkzNzliOThhOGJmYThkMjkKY2hhbmdlLWlkOiAy MDI1MDcxOC1kb2Nfa3ZtX3Rlc3RzLWM0YTEwMWM1YmY5OAoKQmVzdCByZWdhcmRzLAotLSAKQW5k cmVhIENlcnZlc2F0byA8YW5kcmVhLmNlcnZlc2F0b0BzdXNlLmNvbT4KCgotLSAKTWFpbGluZyBs aXN0IGluZm86IGh0dHBzOi8vbGlzdHMubGludXguaXQvbGlzdGluZm8vbHRwCg==