Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f3jUA-0005Sl-Le for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Apr 2018 14:34:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3jU9-0004Li-HA for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Apr 2018 14:34:01 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f3jU8-0004LZ-QL for pgsql-hackers@lists.postgresql.org; Wed, 04 Apr 2018 14:34:01 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3jTz-0007kQ-1M for pgsql-hackers@lists.postgresql.org; Wed, 04 Apr 2018 14:33:59 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id F2A3021C1FA6; Wed, 4 Apr 2018 17:33:47 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 9BAE621C1FA5; Wed, 4 Apr 2018 17:33:47 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1522852427; bh=ARx2jZ5o48WeK+dvqAjgqFtv1VKjnTmzAy0PVbWJm4Y=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=a0PBJmtzofpmH2TA2yOrsS9+a1rVZiJaeiBNqybV8iFmJ6GNBispZAbpnmwJdpnl0 8deXBwvZN7uKUH/uNJnbRpnFNnAMlVtSqDZyJ5ot3h9MY5NUHp2LWUAkeBSnu2CGoc MoJ0QtAyeK+MVdZ2XUFMdsgLd96LkeXhI6mfKIgY= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_0a1b521d98379cf0e6cde9511420a390" Date: Wed, 04 Apr 2018 17:33:47 +0300 From: Dmitry Ivanov To: Aleksandr Parfenov Cc: Aleksander Alekseev , Thomas Munro , David Steele , PostgreSQL Hackers Subject: Re: new function for tsquery creartion Organization: Postgres Professional In-Reply-To: <20180403171320.400cd24a@asp437-24-g082ur> References: <20180302030605.5ur6ktkb2vyb46pb@alap3.anarazel.de> <152025433949.1548.16466871234054596674.pgcf@coridan.postgresql.org> <34280367-0dab-7f73-8d7c-d21c7276814b@pgmasters.net> <8df9de83119eb295f3424c573d64ff84@postgrespro.ru> <20180326092405.71820cf2@asp437-24-g082ur> <6754a224654a4f0339195b83b133d551@postgrespro.ru> <9153fb21831d0ba7c832960f37df2688@postgrespro.ru> <20180328092115.GA32581@e733.localdomain> <8829c490d0e17b6033b3fd622dfeed1e@postgrespro.ru> <1f33416d7173df5504e84e63680bd27e@postgrespro.ru> <94e41ae5e36b640d3172729c4c9b5b4c@postgrespro.ru> <20180403171320.400cd24a@asp437-24-g082ur> Message-ID: X-Sender: d.ivanov@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_0a1b521d98379cf0e6cde9511420a390 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed > I'm not sure about the different result for these queries: > SELECT websearch_to_tsquery('simple', 'cat or '); > websearch_to_tsquery > ---------------------- > 'cat' > (1 row) > SELECT websearch_to_tsquery('simple', 'cat or'); > websearch_to_tsquery > ---------------------- > 'cat' & 'or' > (1 row) I guess both queries should produce just 'cat'. I've changed the definition of parse_or_operator(). > I found an odd behavior of the query creation function in case: > SELECT websearch_to_tsquery('english', '"pg_class pg"'); > websearch_to_tsquery > ----------------------------- > ( 'pg' & 'class' ) <-> 'pg' > (1 row) > > This query means that lexemes 'pg' and 'class' should be at the same > distance from the last 'pg'. In other words, they should have the same > position. But default parser will interpret pg_class as two separate > words during text parsing/vector creation. > > The bug wasn't introduced in the patch and can be found in current > master. During the discussion of the patch with Dmitry, he noticed that > to_tsquery() function shares same odd behavior: > select to_tsquery('english', ' pg_class <-> pg'); > to_tsquery > ----------------------------- > ( 'pg' & 'class' ) <-> 'pg' > (1 row) I've been thinking about this for a while, and it seems that this should be fixed somewhere near parsetext(). Perhaps 'pg' and 'class' should share the same position. After all, somebody could implement a parser which would split some words using an arbitrary set of rules, for instance "split all words containing digits". I propose merging this patch provided that there are no objections. -- Dmitry Ivanov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_0a1b521d98379cf0e6cde9511420a390 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=websearch_to_tsquery_v8.patch Content-Disposition: attachment; filename=websearch_to_tsquery_v8.patch; size=44303 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDlhMWVmYzE0Y2YuLjEyMmYwMzRmMTcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtOTYzMCw2ICs5NjMw LDE4IEBAIENSRUFURSBUWVBFIHJhaW5ib3cgQVMgRU5VTSAoJ3JlZCcsICdvcmFuZ2UnLCAneWVs bG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxlCiAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD5w aHJhc2V0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ1RoZSBGYXQgUmF0cycpPC9saXRlcmFsPjwvZW50 cnk+CiAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD4nZmF0JyAmbHQ7LSZndDsgJ3JhdCc8L2xpdGVy YWw+PC9lbnRyeT4KICAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+ CisgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgIDxwcmltYXJ5PndlYnNlYXJjaF90b190 c3F1ZXJ5PC9wcmltYXJ5PgorICAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgICAgPGxpdGVy YWw+PGZ1bmN0aW9uPndlYnNlYXJjaF90b190c3F1ZXJ5KDxvcHRpb25hbD4gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmNvbmZpZzwvcmVwbGFjZWFibGU+IDx0eXBlPnJlZ2NvbmZpZzwv dHlwZT4gLCA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cXVlcnk8 L3JlcGxhY2VhYmxlPiA8dHlwZT50ZXh0PC90eXBlPik8L2Z1bmN0aW9uPjwvbGl0ZXJhbD4KKyAg ICAgICAgIDwvZW50cnk+CisgICAgICAgIDxlbnRyeT48dHlwZT50c3F1ZXJ5PC90eXBlPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeT5wcm9kdWNlIDx0eXBlPnRzcXVlcnk8L3R5cGU+IGZyb20gYSB3 ZWIgc2VhcmNoIHN0eWxlIHF1ZXJ5PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjxsaXRlcmFsPndl YnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJmYXQgcmF0IiBvciByYXQnKTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnk+PGxpdGVyYWw+J2ZhdCcgJmx0Oy0mZ3Q7ICdyYXQn IHwgJ3JhdCc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KICAgICAgICA8cm93Pgog ICAgICAgICA8ZW50cnk+CiAgICAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3RleHRzZWFyY2guc2dtbCBiL2RvYy9zcmMvc2dtbC90ZXh0c2VhcmNoLnNnbWwKaW5k ZXggNjEwYjdiZjAzMy4uMTlmNTg1MTFjOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3RleHRz ZWFyY2guc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvdGV4dHNlYXJjaC5zZ21sCkBAIC03OTcsMTMg Kzc5NywxNiBAQCBVUERBVEUgdHQgU0VUIHRpID0KICAgIDxwYXJhPgogICAgIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcHJvdmlkZXMgdGhlCiAgICAgZnVuY3Rpb25zIDxm dW5jdGlvbj50b190c3F1ZXJ5PC9mdW5jdGlvbj4sCi0gICAgPGZ1bmN0aW9uPnBsYWludG9fdHNx dWVyeTwvZnVuY3Rpb24+LCBhbmQKLSAgICA8ZnVuY3Rpb24+cGhyYXNldG9fdHNxdWVyeTwvZnVu Y3Rpb24+CisgICAgPGZ1bmN0aW9uPnBsYWludG9fdHNxdWVyeTwvZnVuY3Rpb24+LAorICAgIDxm dW5jdGlvbj5waHJhc2V0b190c3F1ZXJ5PC9mdW5jdGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPndl YnNlYXJjaF90b190c3F1ZXJ5PC9mdW5jdGlvbj4KICAgICBmb3IgY29udmVydGluZyBhIHF1ZXJ5 IHRvIHRoZSA8dHlwZT50c3F1ZXJ5PC90eXBlPiBkYXRhIHR5cGUuCiAgICAgPGZ1bmN0aW9uPnRv X3RzcXVlcnk8L2Z1bmN0aW9uPiBvZmZlcnMgYWNjZXNzIHRvIG1vcmUgZmVhdHVyZXMKICAgICB0 aGFuIGVpdGhlciA8ZnVuY3Rpb24+cGxhaW50b190c3F1ZXJ5PC9mdW5jdGlvbj4gb3IKLSAgICA8 ZnVuY3Rpb24+cGhyYXNldG9fdHNxdWVyeTwvZnVuY3Rpb24+LCBidXQgaXQgaXMgbGVzcyBmb3Jn aXZpbmcKLSAgICBhYm91dCBpdHMgaW5wdXQuCisgICAgPGZ1bmN0aW9uPnBocmFzZXRvX3RzcXVl cnk8L2Z1bmN0aW9uPiwgYnV0IGl0IGlzIGxlc3MgZm9yZ2l2aW5nIGFib3V0IGl0cworICAgIGlu cHV0LiA8ZnVuY3Rpb24+d2Vic2VhcmNoX3RvX3RzcXVlcnk8L2Z1bmN0aW9uPiBpcyBhIHNpbXBs aWZpZWQgdmVyc2lvbgorICAgIG9mIDxmdW5jdGlvbj50b190c3F1ZXJ5PC9mdW5jdGlvbj4gd2l0 aCBhbiBhbHRlcm5hdGl2ZSBzeW50YXgsIHNpbWlsYXIKKyAgICB0byB0aGUgb25lIHVzZWQgYnkg d2ViIHNlYXJjaCBlbmdpbmVzLgogICAgPC9wYXJhPgogCiAgICA8aW5kZXh0ZXJtPgpAQCAtOTYy LDYgKzk2NSw4NyBAQCBTRUxFQ1QgcGhyYXNldG9fdHNxdWVyeSgnZW5nbGlzaCcsICdUaGUgRmF0 ICZhbXA7IFJhdHM6QycpOwogPC9zY3JlZW4+CiAgICA8L3BhcmE+CiAKKzxzeW5vcHNpcz4KK3dl YnNlYXJjaF90b190c3F1ZXJ5KDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmNvbmZpZzwvcmVwbGFjZWFibGU+IDx0eXBlPnJlZ2NvbmZpZzwvdHlwZT4sIDwvb3B0aW9u YWw+IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdWVyeXRleHQ8L3JlcGxhY2VhYmxl PiA8dHlwZT50ZXh0PC90eXBlPikgcmV0dXJucyA8dHlwZT50c3F1ZXJ5PC90eXBlPgorPC9zeW5v cHNpcz4KKworICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPndlYnNlYXJjaF90b190c3F1ZXJ5PC9m dW5jdGlvbj4gY3JlYXRlcyBhIDx0eXBlPnRzcXVlcnk8L3R5cGU+CisgICAgdmFsdWUgZnJvbSA8 cmVwbGFjZWFibGU+cXVlcnl0ZXh0PC9yZXBsYWNlYWJsZT4gdXNpbmcgYW4gYWx0ZXJuYXRpdmUK KyAgICBzeW50YXggaW4gd2hpY2ggc2ltcGxlIHVuZm9ybWF0dGVkIHRleHQgaXMgYSB2YWxpZCBx dWVyeS4KKyAgICBVbmxpa2UgPGZ1bmN0aW9uPnBsYWludG9fdHNxdWVyeTwvZnVuY3Rpb24+Cisg ICAgYW5kIDxmdW5jdGlvbj5waHJhc2V0b190c3F1ZXJ5PC9mdW5jdGlvbj4sIGl0IGFsc28gcmVj b2duaXplcyBjZXJ0YWluCisgICAgb3BlcmF0b3JzLiBNb3Jlb3ZlciwgdGhpcyBmdW5jdGlvbiBz aG91bGQgbmV2ZXIgcmFpc2Ugc3ludGF4IGVycm9ycywKKyAgICB3aGljaCBtYWtlcyBpdCBwb3Nz aWJsZSB0byB1c2UgcmF3IHVzZXItc3VwcGxpZWQgaW5wdXQgZm9yIHNlYXJjaC4KKyAgICBUaGUg Zm9sbG93aW5nIHN5bnRheCBpcyBzdXBwb3J0ZWQ6CisgICAgPGl0ZW1pemVkbGlzdCAgc3BhY2lu Zz0iY29tcGFjdCIgbWFyaz0iYnVsbGV0Ij4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICA8bGl0ZXJhbD51bnF1b3RlZCB0ZXh0PC9saXRlcmFsPjogdGV4dCBub3QgaW5z aWRlIHF1b3RlIG1hcmtzIHdpbGwgYmUKKyAgICAgICAgY29udmVydGVkIHRvIHRlcm1zIHNlcGFy YXRlZCBieSA8bGl0ZXJhbD4mYW1wOzwvbGl0ZXJhbD4gb3BlcmF0b3JzLCBhcworICAgICAgICBp ZiBwcm9jZXNzZWQgYnkKKyAgICAgICAgPGZ1bmN0aW9uPnBsYWludG9fdHNxdWVyeTwvZnVuY3Rp b24+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPiJxdW90ZWQgdGV4dCI8L2xpdGVyYWw+OiB0 ZXh0IGluc2lkZSBxdW90ZSBtYXJrcyB3aWxsIGJlCisgICAgICAgIGNvbnZlcnRlZCB0byB0ZXJt cyBzZXBhcmF0ZWQgYnkgPGxpdGVyYWw+Jmx0Oy0mZ3Q7PC9saXRlcmFsPgorICAgICAgICBvcGVy YXRvcnMsIGFzIGlmIHByb2Nlc3NlZCBieSA8ZnVuY3Rpb24+cGhyYXNldG9fdHNxdWVyeTwvZnVu Y3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+ CisgICAgICA8cGFyYT4KKyAgICAgICA8bGl0ZXJhbD5PUjwvbGl0ZXJhbD46IGxvZ2ljYWwgb3Ig d2lsbCBiZSBjb252ZXJ0ZWQgdG8KKyAgICAgICB0aGUgPGxpdGVyYWw+fDwvbGl0ZXJhbD4gb3Bl cmF0b3IuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgIDxsaXN0aXRlbT4K KyAgICAgIDxwYXJhPgorICAgICAgIDxsaXRlcmFsPi08L2xpdGVyYWw+OiB0aGUgbG9naWNhbCBu b3Qgb3BlcmF0b3IsIGNvbnZlcnRlZCB0byB0aGUKKyAgICAgICB0aGUgPGxpdGVyYWw+ITwvbGl0 ZXJhbD4gb3BlcmF0b3IuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9p dGVtaXplZGxpc3Q+CisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBFeGFtcGxlczoKKyAgICA8 c2NyZWVuPgorICAgICAgc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ1Ro ZSBmYXQgcmF0cycpOworICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5CisgICAgICAtLS0tLS0t LS0tLS0tLS0tLQorICAgICAgICdmYXQnICZhbXA7ICdyYXQnCisgICAgICAoMSByb3cpCisgICAg PC9zY3JlZW4+CisgICAgPHNjcmVlbj4KKyAgICAgIHNlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVy eSgnZW5nbGlzaCcsICcic3VwZXJub3ZhZSBzdGFycyIgLWNyYWInKTsKKyAgICAgICAgICAgICB3 ZWJzZWFyY2hfdG9fdHNxdWVyeQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICdzdXBlcm5vdmEnICZsdDstJmd0OyAnc3RhcicgJmFtcDsgISdjcmFiJwor ICAgICAgKDEgcm93KQorICAgIDwvc2NyZWVuPgorICAgIDxzY3JlZW4+CisgICAgICBzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnInNhZCBjYXQiIG9yICJmYXQgcmF0Iicp OworICAgICAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5CisgICAgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICdzYWQnICZsdDstJmd0OyAnY2F0JyB8ICdm YXQnICZsdDstJmd0OyAncmF0JworICAgICAgKDEgcm93KQorICAgIDwvc2NyZWVuPgorICAgIDxz Y3JlZW4+CisgICAgICBzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnc2ln bmFsIC0ic2VnbWVudGF0aW9uIGZhdWx0IicpOworICAgICAgICAgICAgICAgd2Vic2VhcmNoX3Rv X3RzcXVlcnkKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAgICdzaWduYWwnICZhbXA7ICEoICdzZWdtZW50JyAmbHQ7LSZndDsgJ2ZhdWx0JyApCisg ICAgICAoMSByb3cpCisgICAgPC9zY3JlZW4+CisgICAgPHNjcmVlbj4KKyAgICAgIHNlbGVjdCB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICciIiIgKSggZHVtbXkgXFwgcXVlcnkgJmx0 Oy0mZ3Q7Jyk7CisgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkKKyAgICAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAnZHVtbWknICZhbXA7ICdxdWVyaScKKyAgICAgICgxIHJvdykK KyAgICA8L3NjcmVlbj4KKyAgICA8L3BhcmE+CiAgIDwvc2VjdDI+CiAKICAgPHNlY3QyIGlkPSJ0 ZXh0c2VhcmNoLXJhbmtpbmciPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdHNlYXJjaC90b190 c2FueS5jIGIvc3JjL2JhY2tlbmQvdHNlYXJjaC90b190c2FueS5jCmluZGV4IGVhNTk0N2EzYTgu LjYwNTVmYjZiNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3RzZWFyY2gvdG9fdHNhbnkuYwor KysgYi9zcmMvYmFja2VuZC90c2VhcmNoL3RvX3RzYW55LmMKQEAgLTQ5MCw3ICs0OTAsNyBAQCB0 b190c3F1ZXJ5X2J5aWQoUEdfRlVOQ1RJT05fQVJHUykKIAlxdWVyeSA9IHBhcnNlX3RzcXVlcnko dGV4dF90b19jc3RyaW5nKGluKSwKIAkJCQkJCSAgcHVzaHZhbF9tb3JwaCwKIAkJCQkJCSAgUG9p bnRlckdldERhdHVtKCZkYXRhKSwKLQkJCQkJCSAgZmFsc2UpOworCQkJCQkJICAwKTsKIAogCVBH X1JFVFVSTl9UU1FVRVJZKHF1ZXJ5KTsKIH0KQEAgLTUyMCw3ICs1MjAsNyBAQCBwbGFpbnRvX3Rz cXVlcnlfYnlpZChQR19GVU5DVElPTl9BUkdTKQogCXF1ZXJ5ID0gcGFyc2VfdHNxdWVyeSh0ZXh0 X3RvX2NzdHJpbmcoaW4pLAogCQkJCQkJICBwdXNodmFsX21vcnBoLAogCQkJCQkJICBQb2ludGVy R2V0RGF0dW0oJmRhdGEpLAotCQkJCQkJICB0cnVlKTsKKwkJCQkJCSAgUF9UU1FfUExBSU4pOwog CiAJUEdfUkVUVVJOX1BPSU5URVIocXVlcnkpOwogfQpAQCAtNTUxLDcgKzU1MSw3IEBAIHBocmFz ZXRvX3RzcXVlcnlfYnlpZChQR19GVU5DVElPTl9BUkdTKQogCXF1ZXJ5ID0gcGFyc2VfdHNxdWVy eSh0ZXh0X3RvX2NzdHJpbmcoaW4pLAogCQkJCQkJICBwdXNodmFsX21vcnBoLAogCQkJCQkJICBQ b2ludGVyR2V0RGF0dW0oJmRhdGEpLAotCQkJCQkJICB0cnVlKTsKKwkJCQkJCSAgUF9UU1FfUExB SU4pOwogCiAJUEdfUkVUVVJOX1RTUVVFUlkocXVlcnkpOwogfQpAQCAtNTY3LDMgKzU2NywzNSBA QCBwaHJhc2V0b190c3F1ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkJCQkJT2JqZWN0SWRH ZXREYXR1bShjZmdJZCksCiAJCQkJCQkJCQkJUG9pbnRlckdldERhdHVtKGluKSkpOwogfQorCitE YXR1bQord2Vic2VhcmNoX3RvX3RzcXVlcnlfYnlpZChQR19GVU5DVElPTl9BUkdTKQoreworCXRl eHQJICAgKmluID0gUEdfR0VUQVJHX1RFWFRfUFAoMSk7CisJTW9ycGhPcGFxdWUJZGF0YTsKKwlU U1F1ZXJ5CQlxdWVyeSA9IE5VTEw7CisKKwlkYXRhLmNmZ19pZCA9IFBHX0dFVEFSR19PSUQoMCk7 CisKKwlkYXRhLnFvcGVyYXRvciA9IE9QX0FORDsKKworCXF1ZXJ5ID0gcGFyc2VfdHNxdWVyeSh0 ZXh0X3RvX2NzdHJpbmcoaW4pLAorCQkJCQkJICBwdXNodmFsX21vcnBoLAorCQkJCQkJICBQb2lu dGVyR2V0RGF0dW0oJmRhdGEpLAorCQkJCQkJICBQX1RTUV9XRUIpOworCisJUEdfUkVUVVJOX1RT UVVFUlkocXVlcnkpOworfQorCitEYXR1bQord2Vic2VhcmNoX3RvX3RzcXVlcnkoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwl0ZXh0CSAgICppbiA9IFBHX0dFVEFSR19URVhUX1BQKDApOworCU9pZAkJ CWNmZ0lkOworCisJY2ZnSWQgPSBnZXRUU0N1cnJlbnRDb25maWcodHJ1ZSk7CisJUEdfUkVUVVJO X0RBVFVNKERpcmVjdEZ1bmN0aW9uQ2FsbDIod2Vic2VhcmNoX3RvX3RzcXVlcnlfYnlpZCwKKwkJ CQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGNmZ0lkKSwKKwkJCQkJCQkJCQlQb2ludGVyR2V0RGF0 dW0oaW4pKSk7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5 LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHNxdWVyeS5jCmluZGV4IDFjY2JmNzkwMzAuLmU5 MTM5YmVmOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3F1ZXJ5LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzcXVlcnkuYwpAQCAtMzIsMTQgKzMyLDUzIEBAIGNv bnN0IGludAl0c2VhcmNoX29wX3ByaW9yaXR5W09QX0NPVU5UXSA9CiAJMwkJCQkJCQkvKiBPUF9Q SFJBU0UgKi8KIH07CiAKKy8qCisgKiBwYXJzZXIncyBzdGF0ZXMKKyAqLwordHlwZWRlZiBlbnVt Cit7CisJV0FJVE9QRVJBTkQgPSAxLAorCVdBSVRPUEVSQVRPUiA9IDIsCisJV0FJVEZJUlNUT1BF UkFORCA9IDMKK30gdHNfcGFyc2Vyc3RhdGU7CisKKy8qCisgKiB0b2tlbiB0eXBlcyBmb3IgcGFy c2luZworICovCit0eXBlZGVmIGVudW0KK3sKKwlQVF9FTkQgPSAwLAorCVBUX0VSUiA9IDEsCisJ UFRfVkFMID0gMiwKKwlQVF9PUFIgPSAzLAorCVBUX09QRU4gPSA0LAorCVBUX0NMT1NFID0gNQor fSB0c190b2tlbnR5cGU7CisKKy8qCisgKiBnZXQgdG9rZW4gZnJvbSBxdWVyeSBzdHJpbmcKKyAq CisgKiAqb3BlcmF0b3IgaXMgZmlsbGVkIGluIHdpdGggT1BfKiB3aGVuIHJldHVybiB2YWx1ZXMg aXMgUFRfT1BSLAorICogYnV0ICp3ZWlnaHQgY291bGQgY29udGFpbiBhIGRpc3RhbmNlIHZhbHVl IGluIGNhc2Ugb2YgcGhyYXNlIG9wZXJhdG9yLgorICogKnN0cnZhbCwgKmxlbnZhbCBhbmQgKndl aWdodCBhcmUgZmlsbGVkIGluIHdoZW4gcmV0dXJuIHZhbHVlIGlzIFBUX1ZBTAorICoKKyAqLwor dHlwZWRlZiB0c190b2tlbnR5cGUgKCp0c190b2tlbml6ZXIpKFRTUXVlcnlQYXJzZXJTdGF0ZSBz dGF0ZSwgaW50OCAqb3BlcmF0b3IsCisJCQkJCQkJCQkgaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2 YWwsCisJCQkJCQkJCQkgaW50MTYgKndlaWdodCwgYm9vbCAqcHJlZml4KTsKKwogc3RydWN0IFRT UXVlcnlQYXJzZXJTdGF0ZURhdGEKIHsKLQkvKiBTdGF0ZSBmb3IgZ2V0dG9rZW5fcXVlcnkgKi8K KwkvKiBUb2tlbml6ZXIgdXNlZCBmb3IgcGFyc2luZyB0c3F1ZXJ5ICovCisJdHNfdG9rZW5pemVy IGdldHRva2VuOworCisJLyogU3RhdGUgb2YgdG9rZW5pemVyIGZ1bmN0aW9uICovCiAJY2hhcgkg ICAqYnVmZmVyOwkJCS8qIGVudGlyZSBzdHJpbmcgd2UgYXJlIHNjYW5uaW5nICovCiAJY2hhcgkg ICAqYnVmOwkJCS8qIGN1cnJlbnQgc2NhbiBwb2ludCAqLwotCWludAkJCXN0YXRlOwogCWludAkJ CWNvdW50OwkJCS8qIG5lc3RpbmcgY291bnQsIGluY3JlbWVudGVkIGJ5ICgsCiAJCQkJCQkJCSAq IGRlY3JlbWVudGVkIGJ5ICkgKi8KKwlib29sCQlpbl9xdW90ZXM7CQkvKiBwaHJhc2UgaW4gcXVv dGVzICIiICovCisJdHNfcGFyc2Vyc3RhdGUgc3RhdGU7CiAKIAkvKiBwb2xpc2ggKHByZWZpeCkg bm90YXRpb24gaW4gbGlzdCwgZmlsbGVkIGluIGJ5IHB1c2gqIGZ1bmN0aW9ucyAqLwogCUxpc3QJ ICAgKnBvbHN0cjsKQEAgLTU3LDEyICs5Niw2IEBAIHN0cnVjdCBUU1F1ZXJ5UGFyc2VyU3RhdGVE YXRhCiAJVFNWZWN0b3JQYXJzZVN0YXRlIHZhbHN0YXRlOwogfTsKIAotLyogcGFyc2VyJ3Mgc3Rh dGVzICovCi0jZGVmaW5lIFdBSVRPUEVSQU5EIDEKLSNkZWZpbmUgV0FJVE9QRVJBVE9SCTIKLSNk ZWZpbmUgV0FJVEZJUlNUT1BFUkFORCAzCi0jZGVmaW5lIFdBSVRTSU5HTEVPUEVSQU5EIDQKLQog LyoKICAqIHN1YnJvdXRpbmUgdG8gcGFyc2UgdGhlIG1vZGlmaWVycyAod2VpZ2h0IGFuZCBwcmVm aXggZmxhZyBjdXJyZW50bHkpCiAgKiBwYXJ0LCBsaWtlICc6QUIqJyBvZiBhIHF1ZXJ5LgpAQCAt MTE4LDE4ICsxNTEsMTcgQEAgZ2V0X21vZGlmaWVycyhjaGFyICpidWYsIGludDE2ICp3ZWlnaHQs IGJvb2wgKnByZWZpeCkKICAqCiAgKiBUaGUgYnVmZmVyIHNob3VsZCBiZWdpbiB3aXRoICc8JyBj aGFyCiAgKi8KLXN0YXRpYyBjaGFyICoKLXBhcnNlX3BocmFzZV9vcGVyYXRvcihjaGFyICpidWYs IGludDE2ICpkaXN0YW5jZSkKK3N0YXRpYyBib29sCitwYXJzZV9waHJhc2Vfb3BlcmF0b3IoVFNR dWVyeVBhcnNlclN0YXRlIHBzdGF0ZSwgaW50MTYgKmRpc3RhbmNlKQogewogCWVudW0KIAl7CiAJ CVBIUkFTRV9PUEVOID0gMCwKIAkJUEhSQVNFX0RJU1QsCiAJCVBIUkFTRV9DTE9TRSwKLQkJUEhS QVNFX0VSUiwKIAkJUEhSQVNFX0ZJTklTSAogCX0JCQlzdGF0ZSA9IFBIUkFTRV9PUEVOOwotCWNo YXIJICAgKnB0ciA9IGJ1ZjsKKwljaGFyCSAgICpwdHIgPSBwc3RhdGUtPmJ1ZjsKIAljaGFyCSAg ICplbmRwdHI7CiAJbG9uZwkJbCA9IDE7CQkJLyogZGVmYXVsdCBkaXN0YW5jZSAqLwogCkBAIC0x MzgsOSArMTcwLDEzIEBAIHBhcnNlX3BocmFzZV9vcGVyYXRvcihjaGFyICpidWYsIGludDE2ICpk aXN0YW5jZSkKIAkJc3dpdGNoIChzdGF0ZSkKIAkJewogCQkJY2FzZSBQSFJBU0VfT1BFTjoKLQkJ CQlBc3NlcnQodF9pc2VxKHB0ciwgJzwnKSk7Ci0JCQkJc3RhdGUgPSBQSFJBU0VfRElTVDsKLQkJ CQlwdHIrKzsKKwkJCQlpZiAodF9pc2VxKHB0ciwgJzwnKSkKKwkJCQl7CisJCQkJCXN0YXRlID0g UEhSQVNFX0RJU1Q7CisJCQkJCXB0cisrOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXJldHVybiBm YWxzZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQSFJBU0VfRElTVDoKQEAgLTE0OCwxOCArMTg0 LDE2IEBAIHBhcnNlX3BocmFzZV9vcGVyYXRvcihjaGFyICpidWYsIGludDE2ICpkaXN0YW5jZSkK IAkJCQl7CiAJCQkJCXN0YXRlID0gUEhSQVNFX0NMT1NFOwogCQkJCQlwdHIrKzsKLQkJCQkJYnJl YWs7CisJCQkJCWNvbnRpbnVlOwogCQkJCX0KKwogCQkJCWlmICghdF9pc2RpZ2l0KHB0cikpCi0J CQkJewotCQkJCQlzdGF0ZSA9IFBIUkFTRV9FUlI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCQkJ cmV0dXJuIGZhbHNlOwogCiAJCQkJZXJybm8gPSAwOwogCQkJCWwgPSBzdHJ0b2wocHRyLCAmZW5k cHRyLCAxMCk7CiAJCQkJaWYgKHB0ciA9PSBlbmRwdHIpCi0JCQkJCXN0YXRlID0gUEhSQVNFX0VS UjsKKwkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCWVsc2UgaWYgKGVycm5vID09IEVSQU5HRSB8fCBs IDwgMCB8fCBsID4gTUFYRU5UUllQT1MpCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC0xNzksNTQgKzIxMyw1 NiBAQCBwYXJzZV9waHJhc2Vfb3BlcmF0b3IoY2hhciAqYnVmLCBpbnQxNiAqZGlzdGFuY2UpCiAJ CQkJCXB0cisrOwogCQkJCX0KIAkJCQllbHNlCi0JCQkJCXN0YXRlID0gUEhSQVNFX0VSUjsKKwkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBIUkFTRV9GSU5JU0g6CiAJ CQkJKmRpc3RhbmNlID0gKGludDE2KSBsOwotCQkJCXJldHVybiBwdHI7Ci0KLQkJCWNhc2UgUEhS QVNFX0VSUjoKLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBlcnI7CisJCQkJcHN0YXRlLT5idWYgPSBw dHI7CisJCQkJcmV0dXJuIHRydWU7CiAJCX0KIAl9CiAKLWVycjoKLQkqZGlzdGFuY2UgPSAtMTsK LQlyZXR1cm4gYnVmOworCXJldHVybiBmYWxzZTsKIH0KIAogLyoKLSAqIHRva2VuIHR5cGVzIGZv ciBwYXJzaW5nCisgKiBQYXJzZSBPUiBvcGVyYXRvciB1c2VkIGluIHdlYnNlYXJjaF90b190c3F1 ZXJ5KCkuCiAgKi8KLXR5cGVkZWYgZW51bQorc3RhdGljIGJvb2wKK3BhcnNlX29yX29wZXJhdG9y KFRTUXVlcnlQYXJzZXJTdGF0ZSBwc3RhdGUpCiB7Ci0JUFRfRU5EID0gMCwKLQlQVF9FUlIgPSAx LAotCVBUX1ZBTCA9IDIsCi0JUFRfT1BSID0gMywKLQlQVF9PUEVOID0gNCwKLQlQVF9DTE9TRSA9 IDUKLX0gdHNfdG9rZW50eXBlOworCWNoYXIgKnB0ciA9IHBzdGF0ZS0+YnVmOworCisJaWYgKHBz dGF0ZS0+aW5fcXVvdGVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBpdCBzaG91bGQgYmVnaW4g d2l0aCAiT1IiIGxpdGVyYWwgKi8KKwlpZiAocGdfc3RybmNhc2VjbXAocHRyLCAib3IiLCAyKSAh PSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlwdHIgKz0gMjsKKworCS8qIGl0IHNob3VsZG4ndCBi ZSBhIHBhcnQgb2YgYW55IHdvcmQgKi8KKwlpZiAodF9pc2VxKHB0ciwgJy0nKSB8fAorCQl0X2lz ZXEocHRyLCAnXycpIHx8CisJCXRfaXNhbHBoYShwdHIpIHx8CisJCXRfaXNkaWdpdChwdHIpKQor CQlyZXR1cm4gZmFsc2U7CisKKwlwc3RhdGUtPmJ1ZiA9IHB0cjsKKwlyZXR1cm4gdHJ1ZTsKK30K IAotLyoKLSAqIGdldCB0b2tlbiBmcm9tIHF1ZXJ5IHN0cmluZwotICoKLSAqICpvcGVyYXRvciBp cyBmaWxsZWQgaW4gd2l0aCBPUF8qIHdoZW4gcmV0dXJuIHZhbHVlcyBpcyBQVF9PUFIsCi0gKiBi dXQgKndlaWdodCBjb3VsZCBjb250YWluIGEgZGlzdGFuY2UgdmFsdWUgaW4gY2FzZSBvZiBwaHJh c2Ugb3BlcmF0b3IuCi0gKiAqc3RydmFsLCAqbGVudmFsIGFuZCAqd2VpZ2h0IGFyZSBmaWxsZWQg aW4gd2hlbiByZXR1cm4gdmFsdWUgaXMgUFRfVkFMCi0gKgotICovCiBzdGF0aWMgdHNfdG9rZW50 eXBlCi1nZXR0b2tlbl9xdWVyeShUU1F1ZXJ5UGFyc2VyU3RhdGUgc3RhdGUsCi0JCQkgICBpbnQ4 ICpvcGVyYXRvciwKLQkJCSAgIGludCAqbGVudmFsLCBjaGFyICoqc3RydmFsLCBpbnQxNiAqd2Vp Z2h0LCBib29sICpwcmVmaXgpCitnZXR0b2tlbl9xdWVyeV9zdGFuZGFyZChUU1F1ZXJ5UGFyc2Vy U3RhdGUgc3RhdGUsIGludDggKm9wZXJhdG9yLAorCQkJCQkJaW50ICpsZW52YWwsIGNoYXIgKipz dHJ2YWwsCisJCQkJCQlpbnQxNiAqd2VpZ2h0LCBib29sICpwcmVmaXgpCiB7CiAJKndlaWdodCA9 IDA7CiAJKnByZWZpeCA9IGZhbHNlOwogCi0Jd2hpbGUgKDEpCisJd2hpbGUgKHRydWUpCiAJewog CQlzd2l0Y2ggKHN0YXRlLT5zdGF0ZSkKIAkJewpAQCAtMjM0LDE3ICsyNzAsMTYgQEAgZ2V0dG9r ZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJY2FzZSBXQUlUT1BFUkFORDoK IAkJCQlpZiAodF9pc2VxKHN0YXRlLT5idWYsICchJykpCiAJCQkJewotCQkJCQkoc3RhdGUtPmJ1 ZikrKzsgLyogY2FuIHNhZmVseSArKywgdF9pc2VxIGd1YXJhbnRlZSB0aGF0Ci0JCQkJCQkJCQkg KiBwZ19tYmxlbigpPT0xICovCi0JCQkJCSpvcGVyYXRvciA9IE9QX05PVDsKKwkJCQkJc3RhdGUt PmJ1ZisrOwogCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFORDsKKwkJCQkJKm9wZXJhdG9y ID0gT1BfTk9UOwogCQkJCQlyZXR1cm4gUFRfT1BSOwogCQkJCX0KIAkJCQllbHNlIGlmICh0X2lz ZXEoc3RhdGUtPmJ1ZiwgJygnKSkKIAkJCQl7Ci0JCQkJCXN0YXRlLT5jb3VudCsrOwotCQkJCQko c3RhdGUtPmJ1ZikrKzsKKwkJCQkJc3RhdGUtPmJ1ZisrOwogCQkJCQlzdGF0ZS0+c3RhdGUgPSBX QUlUT1BFUkFORDsKKwkJCQkJc3RhdGUtPmNvdW50Kys7CiAJCQkJCXJldHVybiBQVF9PUEVOOwog CQkJCX0KIAkJCQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJzonKSkKQEAgLTI1NiwxMCAr MjkxLDcgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJCX0K IAkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0YXRlLT5idWYpKQogCQkJCXsKLQkJCQkJLyoKLQkJ CQkJICogV2UgcmVseSBvbiB0aGUgdHN2ZWN0b3IgcGFyc2VyIHRvIHBhcnNlIHRoZSB2YWx1ZSBm b3IKLQkJCQkJICogdXMKLQkJCQkJICovCisJCQkJCS8qIFdlIHJlbHkgb24gdGhlIHRzdmVjdG9y IHBhcnNlciB0byBwYXJzZSB0aGUgdmFsdWUgZm9yIHVzICovCiAJCQkJCXJlc2V0X3RzdmVjdG9y X3BhcnNlcihzdGF0ZS0+dmFsc3RhdGUsIHN0YXRlLT5idWYpOwogCQkJCQlpZiAoZ2V0dG9rZW5f dHN2ZWN0b3Ioc3RhdGUtPnZhbHN0YXRlLCBzdHJ2YWwsIGxlbnZhbCwgTlVMTCwgTlVMTCwgJnN0 YXRlLT5idWYpKQogCQkJCQl7CkBAIC0yNjgsNyArMzAwLDkgQEAgZ2V0dG9rZW5fcXVlcnkoVFNR dWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJCQkJcmV0dXJuIFBUX1ZBTDsKIAkJCQkJfQogCQkJ CQllbHNlIGlmIChzdGF0ZS0+c3RhdGUgPT0gV0FJVEZJUlNUT1BFUkFORCkKKwkJCQkJewogCQkJ CQkJcmV0dXJuIFBUX0VORDsKKwkJCQkJfQogCQkJCQllbHNlCiAJCQkJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC0yNzYsNTggKzMx MCwyMDUgQEAgZ2V0dG9rZW5fcXVlcnkoVFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLAogCQkJCQkJ CQkJCXN0YXRlLT5idWZmZXIpKSk7CiAJCQkJfQogCQkJCWJyZWFrOworCiAJCQljYXNlIFdBSVRP UEVSQVRPUjoKIAkJCQlpZiAodF9pc2VxKHN0YXRlLT5idWYsICcmJykpCiAJCQkJeworCQkJCQlz dGF0ZS0+YnVmKys7CiAJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOwogCQkJCQkqb3Bl cmF0b3IgPSBPUF9BTkQ7Ci0JCQkJCShzdGF0ZS0+YnVmKSsrOwogCQkJCQlyZXR1cm4gUFRfT1BS OwogCQkJCX0KIAkJCQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJ3wnKSkKIAkJCQl7CisJ CQkJCXN0YXRlLT5idWYrKzsKIAkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CiAJCQkJ CSpvcGVyYXRvciA9IE9QX09SOwotCQkJCQkoc3RhdGUtPmJ1ZikrKzsKIAkJCQkJcmV0dXJuIFBU X09QUjsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAodF9pc2VxKHN0YXRlLT5idWYsICc8JykpCisJCQkJ ZWxzZSBpZiAocGFyc2VfcGhyYXNlX29wZXJhdG9yKHN0YXRlLCB3ZWlnaHQpKQogCQkJCXsKKwkJ CQkJLyogd2VpZ2h0IHZhciBpcyB1c2VkIGFzIHN0b3JhZ2UgZm9yIGRpc3RhbmNlICovCiAJCQkJ CXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVSQU5EOwogCQkJCQkqb3BlcmF0b3IgPSBPUF9QSFJBU0U7 Ci0JCQkJCS8qIHdlaWdodCB2YXIgaXMgdXNlZCBhcyBzdG9yYWdlIGZvciBkaXN0YW5jZSAqLwot CQkJCQlzdGF0ZS0+YnVmID0gcGFyc2VfcGhyYXNlX29wZXJhdG9yKHN0YXRlLT5idWYsIHdlaWdo dCk7Ci0JCQkJCWlmICgqd2VpZ2h0IDwgMCkKLQkJCQkJCXJldHVybiBQVF9FUlI7CiAJCQkJCXJl dHVybiBQVF9PUFI7CiAJCQkJfQogCQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnKScp KQogCQkJCXsKLQkJCQkJKHN0YXRlLT5idWYpKys7CisJCQkJCXN0YXRlLT5idWYrKzsKIAkJCQkJ c3RhdGUtPmNvdW50LS07CiAJCQkJCXJldHVybiAoc3RhdGUtPmNvdW50IDwgMCkgPyBQVF9FUlIg OiBQVF9DTE9TRTsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAoKihzdGF0ZS0+YnVmKSA9PSAnXDAnKQor CQkJCWVsc2UgaWYgKCpzdGF0ZS0+YnVmID09ICdcMCcpCisJCQkJewogCQkJCQlyZXR1cm4gKHN0 YXRlLT5jb3VudCkgPyBQVF9FUlIgOiBQVF9FTkQ7CisJCQkJfQogCQkJCWVsc2UgaWYgKCF0X2lz c3BhY2Uoc3RhdGUtPmJ1ZikpCisJCQkJewogCQkJCQlyZXR1cm4gUFRfRVJSOworCQkJCX0KIAkJ CQlicmVhazsKLQkJCWNhc2UgV0FJVFNJTkdMRU9QRVJBTkQ6Ci0JCQkJaWYgKCooc3RhdGUtPmJ1 ZikgPT0gJ1wwJykKKwkJfQorCisJCXN0YXRlLT5idWYgKz0gcGdfbWJsZW4oc3RhdGUtPmJ1Zik7 CisJfQorfQorCitzdGF0aWMgdHNfdG9rZW50eXBlCitnZXR0b2tlbl9xdWVyeV93ZWJzZWFyY2go VFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLCBpbnQ4ICpvcGVyYXRvciwKKwkJCQkJCSBpbnQgKmxl bnZhbCwgY2hhciAqKnN0cnZhbCwKKwkJCQkJCSBpbnQxNiAqd2VpZ2h0LCBib29sICpwcmVmaXgp Cit7CisJKndlaWdodCA9IDA7CisJKnByZWZpeCA9IGZhbHNlOworCisJd2hpbGUgKHRydWUpCisJ eworCQlzd2l0Y2ggKHN0YXRlLT5zdGF0ZSkKKwkJeworCQkJY2FzZSBXQUlURklSU1RPUEVSQU5E OgorCQkJY2FzZSBXQUlUT1BFUkFORDoKKwkJCQlpZiAodF9pc2VxKHN0YXRlLT5idWYsICctJykp CisJCQkJeworCQkJCQlzdGF0ZS0+YnVmKys7CisJCQkJCXN0YXRlLT5zdGF0ZSA9IFdBSVRPUEVS QU5EOworCisJCQkJCWlmIChzdGF0ZS0+aW5fcXVvdGVzKQorCQkJCQkJY29udGludWU7CisKKwkJ CQkJKm9wZXJhdG9yID0gT1BfTk9UOworCQkJCQlyZXR1cm4gUFRfT1BSOworCQkJCX0KKwkJCQll bHNlIGlmICh0X2lzZXEoc3RhdGUtPmJ1ZiwgJyInKSkKKwkJCQl7CisJCQkJCXN0YXRlLT5idWYr KzsKKworCQkJCQlpZiAoIXN0YXRlLT5pbl9xdW90ZXMpCisJCQkJCXsKKwkJCQkJCXN0YXRlLT5z dGF0ZSA9IFdBSVRPUEVSQU5EOworCisJCQkJCQlpZiAoc3RyY2hyKHN0YXRlLT5idWYsICciJykp CisJCQkJCQl7CisJCQkJCQkJLyogcXVvdGVkIHRleHQgc2hvdWxkIGJlIG9yZGVyZWQgPC0+ICov CisJCQkJCQkJc3RhdGUtPmluX3F1b3RlcyA9IHRydWU7CisJCQkJCQkJcmV0dXJuIFBUX09QRU47 CisJCQkJCQl9CisKKwkJCQkJCS8qIHdlYiBzZWFyY2ggdG9sZXJhdGVzIG1pc3NpbmcgcXVvdGVz ICovCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8q IHdlIGhhdmUgdG8gcHJvdmlkZSBhbiBvcGVyYW5kICovCisJCQkJCQlzdGF0ZS0+aW5fcXVvdGVz ID0gZmFsc2U7CisJCQkJCQlzdGF0ZS0+c3RhdGUgPSBXQUlUT1BFUkFUT1I7CisJCQkJCQlwdXNo U3RvcChzdGF0ZSk7CisJCQkJCQlyZXR1cm4gUFRfQ0xPU0U7CisJCQkJCX0KKwkJCQl9CisJCQkJ ZWxzZSBpZiAoSVNPUEVSQVRPUihzdGF0ZS0+YnVmKSkKKwkJCQl7CisJCQkJCS8qIG9yIGVsc2Ug Z2V0dG9rZW5fdHN2ZWN0b3IoKSB3aWxsIHJhaXNlIGFuIGVycm9yICovCisJCQkJCXN0YXRlLT5i dWYrKzsKKwkJCQkJc3RhdGUtPnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCWNvbnRpbnVlOwor CQkJCX0KKwkJCQllbHNlIGlmICghdF9pc3NwYWNlKHN0YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJ LyogV2UgcmVseSBvbiB0aGUgdHN2ZWN0b3IgcGFyc2VyIHRvIHBhcnNlIHRoZSB2YWx1ZSBmb3Ig dXMgKi8KKwkJCQkJcmVzZXRfdHN2ZWN0b3JfcGFyc2VyKHN0YXRlLT52YWxzdGF0ZSwgc3RhdGUt PmJ1Zik7CisJCQkJCWlmIChnZXR0b2tlbl90c3ZlY3RvcihzdGF0ZS0+dmFsc3RhdGUsIHN0cnZh bCwgbGVudmFsLCBOVUxMLCBOVUxMLCAmc3RhdGUtPmJ1ZikpCisJCQkJCXsKKwkJCQkJCXN0YXRl LT5zdGF0ZSA9IFdBSVRPUEVSQVRPUjsKKwkJCQkJCXJldHVybiBQVF9WQUw7CisJCQkJCX0KKwkJ CQkJZWxzZSBpZiAoc3RhdGUtPnN0YXRlID09IFdBSVRGSVJTVE9QRVJBTkQpCisJCQkJCXsKKwkJ CQkJCXJldHVybiBQVF9FTkQ7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvKiBm aW5hbGx5LCB3ZSBoYXZlIHRvIHByb3ZpZGUgYW4gb3BlcmFuZCAqLworCQkJCQkJcHVzaFN0b3Ao c3RhdGUpOworCQkJCQkJcmV0dXJuIFBUX0VORDsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBXQUlUT1BFUkFUT1I6CisJCQkJaWYgKHRfaXNlcShzdGF0ZS0+YnVmLCAnIicp KQorCQkJCXsKKwkJCQkJaWYgKCFzdGF0ZS0+aW5fcXVvdGVzKQorCQkJCQl7CisJCQkJCQkvKgor CQkJCQkJICogcHV0IGltcGxpY2l0IEFORCBhZnRlciBhbiBvcGVyYW5kCisJCQkJCQkgKiBhbmQg aGFuZGxlIHRoaXMgcXVvdGUgaW4gV0FJVE9QRVJBTkQKKwkJCQkJCSAqLworCQkJCQkJc3RhdGUt PnN0YXRlID0gV0FJVE9QRVJBTkQ7CisJCQkJCQkqb3BlcmF0b3IgPSBPUF9BTkQ7CisJCQkJCQly ZXR1cm4gUFRfT1BSOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJc3RhdGUtPmJ1 ZisrOworCisJCQkJCQkvKiBqdXN0IGNsb3NlIHF1b3RlcyAqLworCQkJCQkJc3RhdGUtPmluX3F1 b3RlcyA9IGZhbHNlOworCQkJCQkJcmV0dXJuIFBUX0NMT1NFOworCQkJCQl9CisJCQkJfQorCQkJ CWVsc2UgaWYgKHBhcnNlX29yX29wZXJhdG9yKHN0YXRlKSkKKwkJCQl7CisJCQkJCXN0YXRlLT5z dGF0ZSA9IFdBSVRPUEVSQU5EOworCQkJCQkqb3BlcmF0b3IgPSBPUF9PUjsKKwkJCQkJcmV0dXJu IFBUX09QUjsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKnN0YXRlLT5idWYgPT0gJ1wwJykKKwkJCQl7 CiAJCQkJCXJldHVybiBQVF9FTkQ7Ci0JCQkJKnN0cnZhbCA9IHN0YXRlLT5idWY7Ci0JCQkJKmxl bnZhbCA9IHN0cmxlbihzdGF0ZS0+YnVmKTsKLQkJCQlzdGF0ZS0+YnVmICs9IHN0cmxlbihzdGF0 ZS0+YnVmKTsKLQkJCQlzdGF0ZS0+Y291bnQrKzsKLQkJCQlyZXR1cm4gUFRfVkFMOwotCQkJZGVm YXVsdDoKLQkJCQlyZXR1cm4gUFRfRVJSOworCQkJCX0KKwkJCQllbHNlIGlmICghdF9pc3NwYWNl KHN0YXRlLT5idWYpKQorCQkJCXsKKwkJCQkJaWYgKHN0YXRlLT5pbl9xdW90ZXMpCisJCQkJCXsK KwkJCQkJCS8qIHB1dCBpbXBsaWNpdCA8LT4gYWZ0ZXIgYW4gb3BlcmFuZCAqLworCQkJCQkJKm9w ZXJhdG9yID0gT1BfUEhSQVNFOworCQkJCQkJKndlaWdodCA9IDE7CisJCQkJCX0KKwkJCQkJZWxz ZQorCQkJCQl7CisJCQkJCQkvKiBwdXQgaW1wbGljaXQgQU5EIGFmdGVyIGFuIG9wZXJhbmQgKi8K KwkJCQkJCSpvcGVyYXRvciA9IE9QX0FORDsKKwkJCQkJfQorCisJCQkJCXN0YXRlLT5zdGF0ZSA9 IFdBSVRPUEVSQU5EOworCQkJCQlyZXR1cm4gUFRfT1BSOworCQkJCX0KIAkJCQlicmVhazsKIAkJ fQorCiAJCXN0YXRlLT5idWYgKz0gcGdfbWJsZW4oc3RhdGUtPmJ1Zik7CiAJfQogfQogCitzdGF0 aWMgdHNfdG9rZW50eXBlCitnZXR0b2tlbl9xdWVyeV9wbGFpbihUU1F1ZXJ5UGFyc2VyU3RhdGUg c3RhdGUsIGludDggKm9wZXJhdG9yLAorCQkJCQkgaW50ICpsZW52YWwsIGNoYXIgKipzdHJ2YWws CisJCQkJCSBpbnQxNiAqd2VpZ2h0LCBib29sICpwcmVmaXgpCit7CisJKndlaWdodCA9IDA7CisJ KnByZWZpeCA9IGZhbHNlOworCisJaWYgKCpzdGF0ZS0+YnVmID09ICdcMCcpCisJCXJldHVybiBQ VF9FTkQ7CisKKwkqc3RydmFsID0gc3RhdGUtPmJ1ZjsKKwkqbGVudmFsID0gc3RybGVuKHN0YXRl LT5idWYpOworCXN0YXRlLT5idWYgKz0gKmxlbnZhbDsKKwlzdGF0ZS0+Y291bnQrKzsKKwlyZXR1 cm4gUFRfVkFMOworfQorCiAvKgogICogUHVzaCBhbiBvcGVyYXRvciB0byBzdGF0ZS0+cG9sc3Ry CiAgKi8KQEAgLTQ4OSw3ICs2NzAsOSBAQCBtYWtlcG9sKFRTUXVlcnlQYXJzZXJTdGF0ZSBzdGF0 ZSwKIAkvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2VzLCBpdCBjb3VsZCBiZSBkcml2ZW4g dG8gc3RhY2sgb3ZlcmZsb3cgKi8KIAljaGVja19zdGFja19kZXB0aCgpOwogCi0Jd2hpbGUgKCh0 eXBlID0gZ2V0dG9rZW5fcXVlcnkoc3RhdGUsICZvcGVyYXRvciwgJmxlbnZhbCwgJnN0cnZhbCwg JndlaWdodCwgJnByZWZpeCkpICE9IFBUX0VORCkKKwl3aGlsZSAoKHR5cGUgPSBzdGF0ZS0+Z2V0 dG9rZW4oc3RhdGUsICZvcGVyYXRvciwKKwkJCQkJCQkJICAgJmxlbnZhbCwgJnN0cnZhbCwKKwkJ CQkJCQkJICAgJndlaWdodCwgJnByZWZpeCkpICE9IFBUX0VORCkKIAl7CiAJCXN3aXRjaCAodHlw ZSkKIAkJewpAQCAtNjA1LDcgKzc4OCw3IEBAIFRTUXVlcnkKIHBhcnNlX3RzcXVlcnkoY2hhciAq YnVmLAogCQkJICBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKIAkJCSAgRGF0dW0gb3BhcXVlLAotCQkJ ICBib29sIGlzcGxhaW4pCisJCQkgIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgVFNRdWVyeVBhcnNl clN0YXRlRGF0YSBzdGF0ZTsKIAlpbnQJCQlpOwpAQCAtNjEzLDE3ICs3OTYsMzggQEAgcGFyc2Vf dHNxdWVyeShjaGFyICpidWYsCiAJaW50CQkJY29tbW9ubGVuOwogCVF1ZXJ5SXRlbSAgKnB0cjsK IAlMaXN0Q2VsbCAgICpjZWxsOwotCWJvb2wJCW5lZWRjbGVhbnVwOworCWJvb2wJCW5lZWRjbGVh bnVwLAorCQkJCWlzX3BsYWluLAorCQkJCWlzX3dlYjsKKwlpbnQJCQl0c3ZfZmxhZ3MgPSBQX1RT Vl9PUFJfSVNfREVMSU0gfCBQX1RTVl9JU19UU1FVRVJZOworCisJaXNfcGxhaW4gPSAoZmxhZ3Mg JiBQX1RTUV9QTEFJTikgIT0gMDsKKwlpc193ZWIgPSAoZmxhZ3MgJiBQX1RTUV9XRUIpICE9IDA7 CisKKwkvKiBwbGFpbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB3ZWIgKi8KKwlBc3NlcnQoIShp c19wbGFpbiAmJiBpc193ZWIpKTsKKworCWlmIChpc193ZWIpCisJCXRzdl9mbGFncyB8PSBQX1RT Vl9JU19XRUI7CisKKwkvKiBzZWxlY3Qgc3VpdGFibGUgdG9rZW5pemVyICovCisJaWYgKGlzX3Bs YWluKQorCQlzdGF0ZS5nZXR0b2tlbiA9IGdldHRva2VuX3F1ZXJ5X3BsYWluOworCWVsc2UgaWYg KGlzX3dlYikKKwkJc3RhdGUuZ2V0dG9rZW4gPSBnZXR0b2tlbl9xdWVyeV93ZWJzZWFyY2g7CisJ ZWxzZQorCQlzdGF0ZS5nZXR0b2tlbiA9IGdldHRva2VuX3F1ZXJ5X3N0YW5kYXJkOwogCiAJLyog aW5pdCBzdGF0ZSAqLwogCXN0YXRlLmJ1ZmZlciA9IGJ1ZjsKIAlzdGF0ZS5idWYgPSBidWY7Ci0J c3RhdGUuc3RhdGUgPSAoaXNwbGFpbikgPyBXQUlUU0lOR0xFT1BFUkFORCA6IFdBSVRGSVJTVE9Q RVJBTkQ7CiAJc3RhdGUuY291bnQgPSAwOworCXN0YXRlLmluX3F1b3RlcyA9IGZhbHNlOworCXN0 YXRlLnN0YXRlID0gV0FJVEZJUlNUT1BFUkFORDsKIAlzdGF0ZS5wb2xzdHIgPSBOSUw7CiAKIAkv KiBpbml0IHZhbHVlIHBhcnNlcidzIHN0YXRlICovCi0Jc3RhdGUudmFsc3RhdGUgPSBpbml0X3Rz dmVjdG9yX3BhcnNlcihzdGF0ZS5idWZmZXIsIHRydWUsIHRydWUpOworCXN0YXRlLnZhbHN0YXRl ID0gaW5pdF90c3ZlY3Rvcl9wYXJzZXIoc3RhdGUuYnVmZmVyLCB0c3ZfZmxhZ3MpOwogCiAJLyog aW5pdCBsaXN0IG9mIG9wZXJhbmQgKi8KIAlzdGF0ZS5zdW1sZW4gPSAwOwpAQCAtNzE2LDcgKzky MCw3IEBAIHRzcXVlcnlpbihQR19GVU5DVElPTl9BUkdTKQogewogCWNoYXIJICAgKmluID0gUEdf R0VUQVJHX0NTVFJJTkcoMCk7CiAKLQlQR19SRVRVUk5fVFNRVUVSWShwYXJzZV90c3F1ZXJ5KGlu LCBwdXNodmFsX2FzaXMsIFBvaW50ZXJHZXREYXR1bShOVUxMKSwgZmFsc2UpKTsKKwlQR19SRVRV Uk5fVFNRVUVSWShwYXJzZV90c3F1ZXJ5KGluLCBwdXNodmFsX2FzaXMsIFBvaW50ZXJHZXREYXR1 bShOVUxMKSwgMCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3RzdmVjdG9yLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwppbmRleCA2NGUw MmVmNDM0Li43YTI3YmQxMmEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2 ZWN0b3IuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3IuYwpAQCAtMjAwLDcg KzIwMCw3IEBAIHRzdmVjdG9yaW4oUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICpjdXI7CiAJ aW50CQkJYnVmbGVuID0gMjU2OwkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiB0bXBidWYgKi8KIAotCXN0 YXRlID0gaW5pdF90c3ZlY3Rvcl9wYXJzZXIoYnVmLCBmYWxzZSwgZmFsc2UpOworCXN0YXRlID0g aW5pdF90c3ZlY3Rvcl9wYXJzZXIoYnVmLCAwKTsKIAogCWFycmxlbiA9IDY0OwogCWFyciA9IChX b3JkRW50cnlJTiAqKSBwYWxsb2Moc2l6ZW9mKFdvcmRFbnRyeUlOKSAqIGFycmxlbik7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvdHN2ZWN0b3JfcGFyc2VyLmMKaW5kZXggNzM2N2JhNmE0MC4uZmVkNDEx YTg0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX3BhcnNlci5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9wYXJzZXIuYwpAQCAtMzMsNiAr MzMsNyBAQCBzdHJ1Y3QgVFNWZWN0b3JQYXJzZVN0YXRlRGF0YQogCWludAkJCWVtbDsJCQkvKiBt YXggYnl0ZXMgcGVyIGNoYXJhY3RlciAqLwogCWJvb2wJCW9wcmlzZGVsaW07CQkvKiB0cmVhdCAh IHwgKiAoICkgYXMgZGVsaW1pdGVycz8gKi8KIAlib29sCQlpc190c3F1ZXJ5OwkJLyogc2F5ICJ0 c3F1ZXJ5IiBub3QgInRzdmVjdG9yIiBpbiBlcnJvcnM/ICovCisJYm9vbAkJaXNfd2ViOwkJCS8q IHdlJ3JlIGluIHdlYnNlYXJjaF90b190c3F1ZXJ5KCkgKi8KIH07CiAKIApAQCAtNDIsNyArNDMs NyBAQCBzdHJ1Y3QgVFNWZWN0b3JQYXJzZVN0YXRlRGF0YQogICogISB8ICYgKCApCiAgKi8KIFRT VmVjdG9yUGFyc2VTdGF0ZQotaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsIGJvb2wg b3ByaXNkZWxpbSwgYm9vbCBpc190c3F1ZXJ5KQoraW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAq aW5wdXQsIGludCBmbGFncykKIHsKIAlUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGU7CiAKQEAgLTUy LDggKzUzLDkgQEAgaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsIGJvb2wgb3ByaXNk ZWxpbSwgYm9vbCBpc190c3F1ZXJ5KQogCXN0YXRlLT5sZW4gPSAzMjsKIAlzdGF0ZS0+d29yZCA9 IChjaGFyICopIHBhbGxvYyhzdGF0ZS0+bGVuKTsKIAlzdGF0ZS0+ZW1sID0gcGdfZGF0YWJhc2Vf ZW5jb2RpbmdfbWF4X2xlbmd0aCgpOwotCXN0YXRlLT5vcHJpc2RlbGltID0gb3ByaXNkZWxpbTsK LQlzdGF0ZS0+aXNfdHNxdWVyeSA9IGlzX3RzcXVlcnk7CisJc3RhdGUtPm9wcmlzZGVsaW0gPSAo ZmxhZ3MgJiBQX1RTVl9PUFJfSVNfREVMSU0pICE9IDA7CisJc3RhdGUtPmlzX3RzcXVlcnkgPSAo ZmxhZ3MgJiBQX1RTVl9JU19UU1FVRVJZKSAhPSAwOworCXN0YXRlLT5pc193ZWIgPSAoZmxhZ3Mg JiBQX1RTVl9JU19XRUIpICE9IDA7CiAKIAlyZXR1cm4gc3RhdGU7CiB9CkBAIC04OSwxNiArOTEs NiBAQCBkbyB7IFwKIAl9IFwKIH0gd2hpbGUgKDApCiAKLS8qIHBocmFzZSBvcGVyYXRvciBiZWdp bnMgd2l0aCAnPCcgKi8KLSNkZWZpbmUgSVNPUEVSQVRPUih4KSBcCi0JKCBwZ19tYmxlbih4KSA9 PSAxICYmICggKih4KSA9PSAnIScgfHwJXAotCQkJCQkJCSooeCkgPT0gJyYnIHx8CVwKLQkJCQkJ CQkqKHgpID09ICd8JyB8fAlcCi0JCQkJCQkJKih4KSA9PSAnKCcgfHwJXAotCQkJCQkJCSooeCkg PT0gJyknIHx8CVwKLQkJCQkJCQkqKHgpID09ICc8JwkJXAotCQkJCQkJICApICkKLQogLyogRmls bHMgZ2V0dG9rZW5fdHN2ZWN0b3IncyBvdXRwdXQgcGFyYW1ldGVycywgYW5kIHJldHVybnMgdHJ1 ZSAqLwogI2RlZmluZSBSRVRVUk5fVE9LRU4gXAogZG8geyBcCkBAIC0xODMsMTQgKzE3NSwxNSBA QCBnZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsCiAJCXsKIAkJCWlm ICgqKHN0YXRlLT5wcnNidWYpID09ICdcMCcpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJZWxzZSBp ZiAodF9pc2VxKHN0YXRlLT5wcnNidWYsICdcJycpKQorCQkJZWxzZSBpZiAoIXN0YXRlLT5pc193 ZWIgJiYgdF9pc2VxKHN0YXRlLT5wcnNidWYsICdcJycpKQogCQkJCXN0YXRlY29kZSA9IFdBSVRF TkRDTVBMWDsKLQkJCWVsc2UgaWYgKHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKKwkJCWVs c2UgaWYgKCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXFwnKSkKIAkJ CXsKIAkJCQlzdGF0ZWNvZGUgPSBXQUlUTkVYVENIQVI7CiAJCQkJb2xkc3RhdGUgPSBXQUlURU5E V09SRDsKIAkJCX0KLQkJCWVsc2UgaWYgKHN0YXRlLT5vcHJpc2RlbGltICYmIElTT1BFUkFUT1Io c3RhdGUtPnByc2J1ZikpCisJCQllbHNlIGlmICgoc3RhdGUtPm9wcmlzZGVsaW0gJiYgSVNPUEVS QVRPUihzdGF0ZS0+cHJzYnVmKSkgfHwKKwkJCQkJIChzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShz dGF0ZS0+cHJzYnVmLCAnIicpKSkKIAkJCQlQUlNTWU5UQVhFUlJPUjsKIAkJCWVsc2UgaWYgKCF0 X2lzc3BhY2Uoc3RhdGUtPnByc2J1ZikpCiAJCQl7CkBAIC0yMTcsMTMgKzIxMCwxNCBAQCBnZXR0 b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3RhdGUgc3RhdGUsCiAJCX0KIAkJZWxzZSBpZiAo c3RhdGVjb2RlID09IFdBSVRFTkRXT1JEKQogCQl7Ci0JCQlpZiAodF9pc2VxKHN0YXRlLT5wcnNi dWYsICdcXCcpKQorCQkJaWYgKCFzdGF0ZS0+aXNfd2ViICYmIHRfaXNlcShzdGF0ZS0+cHJzYnVm LCAnXFwnKSkKIAkJCXsKIAkJCQlzdGF0ZWNvZGUgPSBXQUlUTkVYVENIQVI7CiAJCQkJb2xkc3Rh dGUgPSBXQUlURU5EV09SRDsKIAkJCX0KIAkJCWVsc2UgaWYgKHRfaXNzcGFjZShzdGF0ZS0+cHJz YnVmKSB8fCAqKHN0YXRlLT5wcnNidWYpID09ICdcMCcgfHwKLQkJCQkJIChzdGF0ZS0+b3ByaXNk ZWxpbSAmJiBJU09QRVJBVE9SKHN0YXRlLT5wcnNidWYpKSkKKwkJCQkJIChzdGF0ZS0+b3ByaXNk ZWxpbSAmJiBJU09QRVJBVE9SKHN0YXRlLT5wcnNidWYpKSB8fAorCQkJCQkgKHN0YXRlLT5pc193 ZWIgJiYgdF9pc2VxKHN0YXRlLT5wcnNidWYsICciJykpKQogCQkJewogCQkJCVJFU0laRVBSU0JV RjsKIAkJCQlpZiAoY3VycG9zID09IHN0YXRlLT53b3JkKQpAQCAtMjUwLDExICsyNDQsMTEgQEAg Z2V0dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLAogCQl9CiAJCWVsc2Ug aWYgKHN0YXRlY29kZSA9PSBXQUlURU5EQ01QTFgpCiAJCXsKLQkJCWlmICh0X2lzZXEoc3RhdGUt PnByc2J1ZiwgJ1wnJykpCisJCQlpZiAoIXN0YXRlLT5pc193ZWIgJiYgdF9pc2VxKHN0YXRlLT5w cnNidWYsICdcJycpKQogCQkJewogCQkJCXN0YXRlY29kZSA9IFdBSVRDSEFSQ01QTFg7CiAJCQl9 Ci0JCQllbHNlIGlmICh0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCisJCQllbHNlIGlmICgh c3RhdGUtPmlzX3dlYiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1xcJykpCiAJCQl7CiAJCQkJ c3RhdGVjb2RlID0gV0FJVE5FWFRDSEFSOwogCQkJCW9sZHN0YXRlID0gV0FJVEVORENNUExYOwpA QCAtMjcwLDcgKzI2NCw3IEBAIGdldHRva2VuX3RzdmVjdG9yKFRTVmVjdG9yUGFyc2VTdGF0ZSBz dGF0ZSwKIAkJfQogCQllbHNlIGlmIChzdGF0ZWNvZGUgPT0gV0FJVENIQVJDTVBMWCkKIAkJewot CQkJaWYgKHRfaXNlcShzdGF0ZS0+cHJzYnVmLCAnXCcnKSkKKwkJCWlmICghc3RhdGUtPmlzX3dl YiAmJiB0X2lzZXEoc3RhdGUtPnByc2J1ZiwgJ1wnJykpCiAJCQl7CiAJCQkJUkVTSVpFUFJTQlVG OwogCQkJCUNPUFlDSEFSKGN1cnBvcywgc3RhdGUtPnByc2J1Zik7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5o CmluZGV4IDliZjIwYzA1OWIuLmVkZjIxMmZjZjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oCkBAIC00 OTcxLDYgKzQ5NzEsOCBAQCBEQVRBKGluc2VydCBPSUQgPSAzNzQ3ICggIHBsYWludG9fdHNxdWVy eQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBmIGYgdCBmIGkgcwogREVTQ1IoInRyYW5zZm9y bSB0byB0c3F1ZXJ5Iik7CiBEQVRBKGluc2VydCBPSUQgPSA1MDA2ICggIHBocmFzZXRvX3RzcXVl cnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBpIHMgMiAwIDM2MTUgIjM3MzQg MjUiIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGhyYXNldG9fdHNxdWVyeV9i eWlkIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5 Iik7CitEQVRBKGluc2VydCBPSUQgPSA4ODg5ICggIHdlYnNlYXJjaF90b190c3F1ZXJ5CVBHTlNQ IFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiAgdCBmIGkgcyAyIDAgMzYxNSAiMzczNCAyNSIgX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNxdWVyeV9ieWlk IF9udWxsXyBfbnVsbF8gX251bGxfICkpOworREVTQ1IoInRyYW5zZm9ybSB0byB0c3F1ZXJ5Iik7 CiBEQVRBKGluc2VydCBPSUQgPSAzNzQ5ICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJRCAxMiAx MDAgMCAwIDAgZiBmIGYgdCBmIHMgcyAxIDAgMzYxNCAiMjUiIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBfbnVsbF8gdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CiBERVND UigidHJhbnNmb3JtIHRvIHRzdmVjdG9yIik7CiBEQVRBKGluc2VydCBPSUQgPSAzNzUwICggIHRv X3RzcXVlcnkJCVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1 ICIyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyB0b190c3F1ZXJ5IF9udWxs XyBfbnVsbF8gX251bGxfICkpOwpAQCAtNDk3OSw2ICs0OTgxLDggQEAgREFUQShpbnNlcnQgT0lE ID0gMzc1MSAoICBwbGFpbnRvX3RzcXVlcnkJUEdOU1AgUEdVSUQgMTIgMTAwIDAgMCAwIGYgZiBm IHQgZiBzIHMKIERFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVyeSIpOwogREFUQShpbnNlcnQgT0lE ID0gNTAwMSAoICBwaHJhc2V0b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYg ZiB0IGYgcyBzIDEgMCAzNjE1ICIyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxs XyBwaHJhc2V0b190c3F1ZXJ5IF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInRyYW5z Zm9ybSB0byB0c3F1ZXJ5Iik7CitEQVRBKGluc2VydCBPSUQgPSA4ODkwICggIHdlYnNlYXJjaF90 b190c3F1ZXJ5CVBHTlNQIFBHVUlEIDEyIDEwMCAwIDAgMCBmIGYgZiB0IGYgcyBzIDEgMCAzNjE1 ICIyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyB3ZWJzZWFyY2hfdG9fdHNx dWVyeSBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NSKCJ0cmFuc2Zvcm0gdG8gdHNxdWVy eSIpOwogREFUQShpbnNlcnQgT0lEID0gNDIwOSAoICB0b190c3ZlY3RvcgkJUEdOU1AgUEdVSUQg MTIgMTAwIDAgMCAwIGYgZiBmIHQgZiBzIHMgMSAwIDM2MTQgIjM4MDIiIF9udWxsXyBfbnVsbF8g X251bGxfIF9udWxsXyBfbnVsbF8ganNvbmJfdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVs bF8gKSk7CiBERVNDUigidHJhbnNmb3JtIGpzb25iIHRvIHRzdmVjdG9yIik7CiBEQVRBKGluc2Vy dCBPSUQgPSA0MjEwICggIHRvX3RzdmVjdG9yCQlQR05TUCBQR1VJRCAxMiAxMDAgMCAwIDAgZiBm IGYgdCBmIHMgcyAxIDAgMzYxNCAiMTE0IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251 bGxfIGpzb25fdG9fdHN2ZWN0b3IgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90c2VhcmNoL3RzX3V0aWxzLmggYi9zcmMvaW5jbHVkZS90c2VhcmNoL3Rz X3V0aWxzLmgKaW5kZXggZjhkZGNlNWVjYi4uNzNlOTY5ZmU5YyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdHNlYXJjaC90c191dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3RzZWFyY2gvdHNfdXRp bHMuaApAQCAtMjUsOSArMjUsMTEgQEAKIHN0cnVjdCBUU1ZlY3RvclBhcnNlU3RhdGVEYXRhOwkv KiBvcGFxdWUgc3RydWN0IGluIHRzdmVjdG9yX3BhcnNlci5jICovCiB0eXBlZGVmIHN0cnVjdCBU U1ZlY3RvclBhcnNlU3RhdGVEYXRhICpUU1ZlY3RvclBhcnNlU3RhdGU7CiAKLWV4dGVybiBUU1Zl Y3RvclBhcnNlU3RhdGUgaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsCi0JCQkJCSBi b29sIG9wcmlzZGVsaW0sCi0JCQkJCSBib29sIGlzX3RzcXVlcnkpOworI2RlZmluZSBQX1RTVl9P UFJfSVNfREVMSU0JKDEgPDwgMCkKKyNkZWZpbmUgUF9UU1ZfSVNfVFNRVUVSWQkoMSA8PCAxKQor I2RlZmluZSBQX1RTVl9JU19XRUIJCSgxIDw8IDIpCisKK2V4dGVybiBUU1ZlY3RvclBhcnNlU3Rh dGUgaW5pdF90c3ZlY3Rvcl9wYXJzZXIoY2hhciAqaW5wdXQsIGludCBmbGFncyk7CiBleHRlcm4g dm9pZCByZXNldF90c3ZlY3Rvcl9wYXJzZXIoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlLCBjaGFy ICppbnB1dCk7CiBleHRlcm4gYm9vbCBnZXR0b2tlbl90c3ZlY3RvcihUU1ZlY3RvclBhcnNlU3Rh dGUgc3RhdGUsCiAJCQkJICBjaGFyICoqdG9rZW4sIGludCAqbGVuLApAQCAtMzUsNiArMzcsMTYg QEAgZXh0ZXJuIGJvb2wgZ2V0dG9rZW5fdHN2ZWN0b3IoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRl LAogCQkJCSAgY2hhciAqKmVuZHB0cik7CiBleHRlcm4gdm9pZCBjbG9zZV90c3ZlY3Rvcl9wYXJz ZXIoVFNWZWN0b3JQYXJzZVN0YXRlIHN0YXRlKTsKIAorLyogcGhyYXNlIG9wZXJhdG9yIGJlZ2lu cyB3aXRoICc8JyAqLworI2RlZmluZSBJU09QRVJBVE9SKHgpIFwKKwkoIHBnX21ibGVuKHgpID09 IDEgJiYgKCAqKHgpID09ICchJyB8fAlcCisJCQkJCQkJKih4KSA9PSAnJicgfHwJXAorCQkJCQkJ CSooeCkgPT0gJ3wnIHx8CVwKKwkJCQkJCQkqKHgpID09ICcoJyB8fAlcCisJCQkJCQkJKih4KSA9 PSAnKScgfHwJXAorCQkJCQkJCSooeCkgPT0gJzwnCQlcCisJCQkJCQkgICkgKQorCiAvKiBwYXJz ZV90c3F1ZXJ5ICovCiAKIHN0cnVjdCBUU1F1ZXJ5UGFyc2VyU3RhdGVEYXRhOwkvKiBwcml2YXRl IGluIGJhY2tlbmQvdXRpbHMvYWR0L3RzcXVlcnkuYyAqLwpAQCAtNDYsOSArNTgsMTMgQEAgdHlw ZWRlZiB2b2lkICgqUHVzaEZ1bmN0aW9uKSAoRGF0dW0gb3BhcXVlLCBUU1F1ZXJ5UGFyc2VyU3Rh dGUgc3RhdGUsCiAJCQkJCQkJCQkJCQkJICogUXVlcnlPcGVyYW5kIHN0cnVjdCAqLwogCQkJCQkJ CSAgYm9vbCBwcmVmaXgpOwogCisjZGVmaW5lIFBfVFNRX1BMQUlOCQkoMSA8PCAwKQorI2RlZmlu ZSBQX1RTUV9XRUIJCSgxIDw8IDEpCisKIGV4dGVybiBUU1F1ZXJ5IHBhcnNlX3RzcXVlcnkoY2hh ciAqYnVmLAotCQkJICBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKLQkJCSAgRGF0dW0gb3BhcXVlLCBi b29sIGlzcGxhaW4pOworCQkJCQkJCSBQdXNoRnVuY3Rpb24gcHVzaHZhbCwKKwkJCQkJCQkgRGF0 dW0gb3BhcXVlLAorCQkJCQkJCSBpbnQgZmxhZ3MpOwogCiAvKiBGdW5jdGlvbnMgZm9yIHVzZSBi eSBQdXNoRnVuY3Rpb24gaW1wbGVtZW50YXRpb25zICovCiBleHRlcm4gdm9pZCBwdXNoVmFsdWUo VFNRdWVyeVBhcnNlclN0YXRlIHN0YXRlLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC90c2VhcmNoLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHNlYXJjaC5v dXQKaW5kZXggZDYzZmIxMmYxZC4uM2Y2NzY5MTI3MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC90c2VhcmNoLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3RzZWFyY2gub3V0CkBAIC0xNjcyLDMgKzE2NzIsNDI2IEBAIHNlbGVjdCAqIGZyb20gcGhyYXNl X2luZGV4X3Rlc3Qgd2hlcmUgZnRzIEBAIHBocmFzZXRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnZmF0 IGNhCiAoMSByb3cpCiAKIHNldCBlbmFibGVfc2Vxc2NhbiA9IG9uOworLS0gdGVzdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSBmdW5jdGlvbgorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnSSBoYXZlIGEgZmF0OipBQkNEIGNhdCcpOworICAgICAgICAgICAgd2Vic2VhcmNoX3Rv X3RzcXVlcnkgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnaScgJiAnaGF2ZScgJiAnYScgJiAnZmF0JyAmICdhYmNkJyAmICdjYXQn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ29yYW5n ZToqKkFBQkJDQ0REJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAnb3JhbmdlJyAmICdhYWJiY2NkZCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNl YXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0OkEhY2F0OkJ8cmF0OkM8Jyk7CisgICAgICAg ICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdhJyAmICdjYXQnICYgJ2InICYgJ3JhdCcg JiAnYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAn ZmF0OkEgOiBjYXQ6QicpOworICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdhJyAmICdjYXQnICYgJ2InCisoMSByb3cpCisK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCpyYXQnKTsKKyB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdyYXQn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdC1y YXQnKTsKKyAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgJ2ZhdC1yYXQnICYgJ2ZhdCcgJiAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXRfcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3Rz cXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgJiAncmF0JworKDEgcm93KQor CistLSB3ZWlnaHRzIGFyZSBjb21wbGV0ZWx5IGlnbm9yZWQKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnc2ltcGxlJywgJ2FiYyA6IGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjOmRlZicpOworIHdlYnNlYXJjaF90 b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJv dykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYTo6OmInKTsKKyB3 ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYScgJiAnYicK KygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjOmQn KTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJj JyAmICdkJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICc6Jyk7CitOT1RJQ0U6ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29y ZHMgb3IgZG9lc24ndCBjb250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNx dWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gdGhlc2Ugb3Bl cmF0b3JzIGFyZSBpZ25vcmVkCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScs ICdhYmMgJiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnc2ltcGxlJywgJ2FiYyB8IGRlZicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIDwtPiBkZWYnKTsKKyB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyAocGcgb3Ig Y2xhc3MpJyk7CisgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICdhYmMnICYgJ3BnJyB8ICdjbGFzcycKKygxIHJvdykKKworLS0gTk9UIGlzIGlnbm9y ZWQgaW4gcXVvdGVzCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnTXkg YnJhbmQgbmV3IHNtYXJ0cGhvbmUnKTsKKyAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYnJhbmQnICYgJ25ldycgJiAnc21h cnRwaG9uJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gn LCAnTXkgYnJhbmQgIm5ldyBzbWFydHBob25lIicpOworICAgICAgd2Vic2VhcmNoX3RvX3RzcXVl cnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYnJhbmQnICYg J25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnZW5nbGlzaCcsICdNeSBicmFuZCAibmV3IC1zbWFydHBob25lIicpOworICAgICAgd2Vi c2VhcmNoX3RvX3RzcXVlcnkgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAnYnJhbmQnICYgJ25ldycgPC0+ICdzbWFydHBob24nCisoMSByb3cpCisKKy0tIHRlc3Qg T1Igb3BlcmF0b3IKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBv ciByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnY2F0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgn c2ltcGxlJywgJ2NhdCBPUiByYXQnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAnY2F0JyB8ICdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFy Y2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCAiT1IiIHJhdCcpOworIHdlYnNlYXJjaF90b190 c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQnICYgJ29yJyAmICdyYXQnCiso MSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2NhdCBPUicp OworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdjYXQn CisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ09SIHJh dCcpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdv cicgJiAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBs ZScsICciZmF0IGNhdCBPUiByYXQiJyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIDwtPiAn Y2F0JyA8LT4gJ29yJyA8LT4gJ3JhdCcKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IChjYXQgT1IgcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyAmICdjYXQnIHwgJ3JhdCcKKygx IHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnb3IgT1Igb3In KTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnb3In IHwgJ29yJworKDEgcm93KQorCistLSBPUiBpcyBhbiBvcGVyYXRvciBoZXJlIC4uLgorc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnImZhdCBjYXQib3IiZmF0IHJhdCInKTsK KyAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICdmYXQnIDwtPiAnY2F0JyB8ICdmYXQnIDwtPiAncmF0JworKDEg cm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3IocmF0 Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2Zh dCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBs ZScsICdmYXQgb3IpcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3ImcmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxl Y3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3J8cmF0Jyk7Cisgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0Jwor KDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3Ih cmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg J2ZhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3Np bXBsZScsICdmYXQgb3I8cmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNo X3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3I+cmF0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgfCAncmF0JworKDEgcm93KQorCitz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQgb3IgJyk7Cisgd2Vic2Vh cmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcKKygxIHJvdykK KworLS0gLi4uIGJ1dCBub3QgaGVyZQorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1w bGUnLCAnYWJjIG9yYW5nZScpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICdhYmMnICYgJ29yYW5nZScKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9y0YLQtdGB0YInKTsKKyB3ZWJzZWFyY2hfdG9f dHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdvctGC0LXRgdGCJwor KDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmMgT1Ix MjM0Jyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg J2FiYycgJiAnb3IxMjM0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdhYmMgb3ItYWJjJyk7CisgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ29yLWFiYycg JiAnb3InICYgJ2FiYycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdz aW1wbGUnLCAnYWJjIE9SX2FiYycpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ29yJyAmICdhYmMnCisoMSByb3cpCisKKy0tIHRlc3Qg cXVvdGVzCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnInBnX2NsYXNz IHBnJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAncGcnICYgJ2NsYXNzJyAmICdwZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdlbmdsaXNoJywgJ3BnX2NsYXNzIHBnIicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5 ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ3BnJyAmICdjbGFzcycgJiAncGcnCisoMSBy b3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcicGdfY2xhc3Mg cGciJyk7CisgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAoICdwZycgJiAnY2xhc3MnICkgPC0+ICdwZycKKygxIHJvdykKKworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2FiYyAicGdfY2xhc3MgcGciJyk7 CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2FiYycgJiAoICdwZycgJiAnY2xhc3MnICkgPC0+ICdw ZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJw Z19jbGFzcyBwZyIgZGVmJyk7CisgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKCAncGcnICYgJ2NsYXNz JyApIDwtPiAncGcnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdlbmdsaXNoJywgJ2FiYyAicGcgcGdfY2xhc3MgcGciIGRlZicpOworICAgICAgICAgICAg ICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnYWJjJyAmICdwZycg PC0+ICggJ3BnJyAmICdjbGFzcycgKSA8LT4gJ3BnJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICcgb3IgInBnIHBnX2NsYXNzIHBnIiBv ciAnKTsKKyAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdwZycgPC0+ICggJ3BnJyAmICdjbGFzcycg KSA8LT4gJ3BnJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xp c2gnLCAnIiJwZyBwZ19jbGFzcyBwZyIiJyk7CisgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICdwZycgJiAncGcnICYgJ2NsYXNz JyAmICdwZycKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNo JywgJ2FiYyAiIiIiIiBkZWYnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnYWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnZW5nbGlzaCcsICdjYXQgLSJmYXQgcmF0IicpOworICAgICB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnY2F0JyAm ICEoICdmYXQnIDwtPiAncmF0JyApCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnZW5nbGlzaCcsICdjYXQgLSJmYXQgcmF0IiBjaGVlc2UnKTsKKyAgICAgICAgICB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAnY2F0JyAmICEoICdmYXQnIDwtPiAncmF0JyApICYgJ2NoZWVzJworKDEg cm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJjICJkZWYg LSInKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAn YWJjJyAmICdkZWYnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5n bGlzaCcsICdhYmMgImRlZiA6IicpOworIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICdhYmMnICYgJ2RlZicKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJBIGZhdCBjYXQiIGhhcyBqdXN0IGVhdGVuIGEgLXJh dC4nKTsKKyAgICAgICAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJ2ZhdCcgPC0+ICdjYXQnICYgJ2VhdGVuJyAmICEn cmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAn IkEgZmF0IGNhdCIgaGFzIGp1c3QgZWF0ZW4gT1IgIXJhdC4nKTsKKyAgICAgICB3ZWJzZWFyY2hf dG9fdHNxdWVyeSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICdmYXQnIDwtPiAnY2F0JyAmICdlYXRlbicgfCAncmF0JworKDEgcm93KQorCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgZmF0IGNhdCIgaGFzIGp1c3QgKCtlYXRl biBPUiAtcmF0KScpOworICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAnZmF0JyA8LT4gJ2NhdCcgJiAnZWF0 ZW4nIHwgISdyYXQnCisoMSByb3cpCisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5n bGlzaCcsICd0aGlzIGlzIC0tLS1maW5lJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgISEhISdmaW5lJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnKCgpKSApKSkpIHRoaXMgfHx8IGlzICYmIC1maW5l LCAiZGVhciBmcmllbmQiIE9SIGdvb2QnKTsKKyAgICAgICAgICB3ZWJzZWFyY2hfdG9fdHNxdWVy eSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAh J2ZpbmUnICYgJ2RlYXInIDwtPiAnZnJpZW5kJyB8ICdnb29kJworKDEgcm93KQorCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYW4gb2xkIDwtPiBjYXQgIiBpcyBmaW5l ICYmJiB0b28nKTsKKyAgd2Vic2VhcmNoX3RvX3RzcXVlcnkgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgJ29sZCcgJiAnY2F0JyAmICdmaW5lJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2Vh cmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnIkEgdGhlIiBPUiBqdXN0IG9uJyk7CitOT1RJQ0U6 ICB0ZXh0LXNlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IHN0b3Agd29yZHMgb3IgZG9lc24ndCBj b250YWluIGxleGVtZXMsIGlnbm9yZWQKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC0LDRjyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC60YDR i9GB0YMnKTsKKyAgICAgICAgIHdlYnNlYXJjaF90b190c3F1ZXJ5ICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICfRgtC+0LvRgdGCJyA8LT4gJ9C60L7R iNC6JyAmICfRgdGK0LXQuycgJiAn0LrRgNGL0YEnCisoMSByb3cpCisKK3NlbGVjdCB0b190c3Zl Y3RvcigncnVzc2lhbicsICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAg0LrR gNGL0YHRgycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC70YHR gtCw0Y8g0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisgP2NvbHVtbj8gCist LS0tLS0tLS0tCisgdAorKDEgcm93KQorCitzZWxlY3QgdG9fdHN2ZWN0b3IoJ3J1c3NpYW4nLCAn 0YHRitC10LvQsCDRgtC+0LvRgdGC0LDRjyDRgdC10YDQsNGPINC60L7RiNC60LAg0LrRgNGL0YHR gycpIEBACit3ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC70YHRgtCw0Y8g 0LrQvtGI0LrQsCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisgP2NvbHVtbj8gCistLS0tLS0t LS0tCisgZgorKDEgcm93KQorCistLSBjYXNlcyBoYW5kbGVkIGJ5IGdldHRva2VuX3RzdmVjdG9y KCkKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnJycnKTsKK05PVElDRTogIHRleHQtc2Vh cmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vzbid0IGNvbnRhaW4gbGV4 ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJycnYWJjJycn J2RlZicnJyk7Cisgd2Vic2VhcmNoX3RvX3RzcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgJ2FiYycgJiAnZGVmJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J1xhYmMnKTsKKyB3ZWJzZWFyY2hfdG9fdHNxdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAnYWJjJworKDEgcm93KQorCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ1wnKTsKK05P VElDRTogIHRleHQtc2VhcmNoIHF1ZXJ5IGNvbnRhaW5zIG9ubHkgc3RvcCB3b3JkcyBvciBkb2Vz bid0IGNvbnRhaW4gbGV4ZW1lcywgaWdub3JlZAorIHdlYnNlYXJjaF90b190c3F1ZXJ5IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC90c2VhcmNoLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RzZWFyY2guc3Fs CmluZGV4IDFjODUyMGIzZTkuLjgyNmJkNThlNDUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3RzZWFyY2guc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RzZWFyY2guc3Fs CkBAIC01MzksMyArNTM5LDk3IEBAIGNyZWF0ZSBpbmRleCBwaHJhc2VfaW5kZXhfdGVzdF9pZHgg b24gcGhyYXNlX2luZGV4X3Rlc3QgdXNpbmcgZ2luKGZ0cyk7CiBzZXQgZW5hYmxlX3NlcXNjYW4g PSBvZmY7CiBzZWxlY3QgKiBmcm9tIHBocmFzZV9pbmRleF90ZXN0IHdoZXJlIGZ0cyBAQCBwaHJh c2V0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2ZhdCBjYXQnKTsKIHNldCBlbmFibGVfc2Vxc2NhbiA9 IG9uOworCistLSB0ZXN0IHdlYnNlYXJjaF90b190c3F1ZXJ5IGZ1bmN0aW9uCitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdJIGhhdmUgYSBmYXQ6KkFCQ0QgY2F0Jyk7Citz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdvcmFuZ2U6KipBQUJCQ0NERCcp Oworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0OkEhY2F0OkJ8cmF0 OkM8Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdmYXQ6QSA6IGNh dDpCJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCpyYXQn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdC1yYXQnKTsKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdF9yYXQnKTsKKworLS0gd2Vp Z2h0cyBhcmUgY29tcGxldGVseSBpZ25vcmVkCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko J3NpbXBsZScsICdhYmMgOiBkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2lt cGxlJywgJ2FiYzpkZWYnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywg J2E6OjpiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdhYmM6ZCcp Oworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnOicpOworCistLSB0aGVz ZSBvcGVyYXRvcnMgYXJlIGlnbm9yZWQKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2lt cGxlJywgJ2FiYyAmIGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUn LCAnYWJjIHwgZGVmJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdh YmMgPC0+IGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJj IChwZyBvciBjbGFzcyknKTsKKworLS0gTk9UIGlzIGlnbm9yZWQgaW4gcXVvdGVzCitzZWxlY3Qg d2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnTXkgYnJhbmQgbmV3IHNtYXJ0cGhvbmUn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdNeSBicmFuZCAibmV3 IHNtYXJ0cGhvbmUiJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAn TXkgYnJhbmQgIm5ldyAtc21hcnRwaG9uZSInKTsKKworLS0gdGVzdCBPUiBvcGVyYXRvcgorc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IG9yIHJhdCcpOworc2VsZWN0 IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0IE9SIHJhdCcpOworc2VsZWN0IHdl YnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnY2F0ICJPUiIgcmF0Jyk7CitzZWxlY3Qgd2Vi c2VhcmNoX3RvX3RzcXVlcnkoJ3NpbXBsZScsICdjYXQgT1InKTsKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnc2ltcGxlJywgJ09SIHJhdCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1 ZXJ5KCdzaW1wbGUnLCAnImZhdCBjYXQgT1IgcmF0IicpOworc2VsZWN0IHdlYnNlYXJjaF90b190 c3F1ZXJ5KCdzaW1wbGUnLCAnZmF0IChjYXQgT1IgcmF0Jyk7CitzZWxlY3Qgd2Vic2VhcmNoX3Rv X3RzcXVlcnkoJ3NpbXBsZScsICdvciBPUiBvcicpOworCistLSBPUiBpcyBhbiBvcGVyYXRvciBo ZXJlIC4uLgorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnImZhdCBjYXQi b3IiZmF0IHJhdCInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2Zh dCBvcihyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBv cilyYXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciZy YXQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcnxyYXQn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciFyYXQnKTsK K3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcjxyYXQnKTsKK3Nl bGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvcj5yYXQnKTsKK3NlbGVj dCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2ZhdCBvciAnKTsKKworLS0gLi4uIGJ1 dCBub3QgaGVyZQorc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9y YW5nZScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdzaW1wbGUnLCAnYWJjIG9y0YLQ tdGB0YInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUjEy MzQnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBvci1hYmMn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnc2ltcGxlJywgJ2FiYyBPUl9hYmMnKTsK KworLS0gdGVzdCBxdW90ZXMKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcs ICcicGdfY2xhc3MgcGcnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcs ICdwZ19jbGFzcyBwZyInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcs ICcicGdfY2xhc3MgcGciJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gn LCAnYWJjICJwZ19jbGFzcyBwZyInKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5n bGlzaCcsICcicGdfY2xhc3MgcGciIGRlZicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdlbmdsaXNoJywgJ2FiYyAicGcgcGdfY2xhc3MgcGciIGRlZicpOworc2VsZWN0IHdlYnNlYXJj aF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyBvciAicGcgcGdfY2xhc3MgcGciIG9yICcpOworc2Vs ZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyIicGcgcGdfY2xhc3MgcGciIicp Oworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2FiYyAiIiIiIiBkZWYn KTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICdjYXQgLSJmYXQgcmF0 IicpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2NhdCAtImZhdCBy YXQiIGNoZWVzZScpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJ2Fi YyAiZGVmIC0iJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAnYWJj ICJkZWYgOiInKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJB IGZhdCBjYXQiIGhhcyBqdXN0IGVhdGVuIGEgLXJhdC4nKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnZW5nbGlzaCcsICciQSBmYXQgY2F0IiBoYXMganVzdCBlYXRlbiBPUiAhcmF0Licp Oworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJyJBIGZhdCBjYXQiIGhh cyBqdXN0ICgrZWF0ZW4gT1IgLXJhdCknKTsKKworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5 KCdlbmdsaXNoJywgJ3RoaXMgaXMgLS0tLWZpbmUnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9fdHNx dWVyeSgnZW5nbGlzaCcsICcoKCkpICkpKSkgdGhpcyB8fHwgaXMgJiYgLWZpbmUsICJkZWFyIGZy aWVuZCIgT1IgZ29vZCcpOworc2VsZWN0IHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywg J2FuIG9sZCA8LT4gY2F0ICIgaXMgZmluZSAmJiYgdG9vJyk7CisKK3NlbGVjdCB3ZWJzZWFyY2hf dG9fdHNxdWVyeSgnZW5nbGlzaCcsICciQSB0aGUiIE9SIGp1c3Qgb24nKTsKK3NlbGVjdCB3ZWJz ZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC70YHRgtCw0Y8g0LrQvtGI0LrQsCIg 0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisKK3NlbGVjdCB0b190c3ZlY3RvcigncnVzc2lhbics ICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINC60L7RiNC60LAg0LrRgNGL0YHRgycpIEBACit3 ZWJzZWFyY2hfdG9fdHNxdWVyeSgncnVzc2lhbicsICci0YLQvtC70YHRgtCw0Y8g0LrQvtGI0LrQ sCIg0YHRitC10LvQsCDQutGA0YvRgdGDJyk7CisKK3NlbGVjdCB0b190c3ZlY3RvcigncnVzc2lh bicsICfRgdGK0LXQu9CwINGC0L7Qu9GB0YLQsNGPINGB0LXRgNCw0Y8g0LrQvtGI0LrQsCDQutGA 0YvRgdGDJykgQEAKK3dlYnNlYXJjaF90b190c3F1ZXJ5KCdydXNzaWFuJywgJyLRgtC+0LvRgdGC 0LDRjyDQutC+0YjQutCwIiDRgdGK0LXQu9CwINC60YDRi9GB0YMnKTsKKworLS0gY2FzZXMgaGFu ZGxlZCBieSBnZXR0b2tlbl90c3ZlY3RvcigpCitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnko JycnJyk7CitzZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJycnYWJjJycnJ2RlZicnJyk7Citz ZWxlY3Qgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ1xhYmMnKTsKK3NlbGVjdCB3ZWJzZWFyY2hfdG9f dHNxdWVyeSgnXCcpOwo= --=_0a1b521d98379cf0e6cde9511420a390--