Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rSvkN-00GqLS-GF for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Jan 2024 09:10:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rSvkL-00EWO0-QK for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Jan 2024 09:10:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rSvkK-00EWNo-HL for pgsql-hackers@lists.postgresql.org; Thu, 25 Jan 2024 09:10:05 +0000 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rSvkH-003H0F-0X for pgsql-hackers@postgresql.org; Thu, 25 Jan 2024 09:10:03 +0000 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6e0ed26cc5eso2659969a34.3 for ; Thu, 25 Jan 2024 01:10:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706173800; x=1706778600; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=axKhoZ/A9jB1oAmT7RpSFgghir/sRM/fuyNvv7pCKtY=; b=Q/z81oTDLl0iSM9vJEh906E+CSwmJ3yA1NMMksNhv0UiWnoILWw19Q3PwhDOTb3N3S SO9qQuxmy1ZPuNRYH1nVjkyZkgzqYvMbq6/55AHWfjqdfsgLI9SuPA0hItDCzXwXYgYK njMoTIRg5LcM082cgjU99KEVOScfBfHrV1tCdb6LAg/pUlFDfGBnWcBnbqqUN+Y8WlU6 ZVGmEQfTDUzY8nUwARms0FAolYLbGACfPNz0reYOnuyoh3XN54WpaaF/hqiWmqr36QCh E7pT2Ktef3DIRTZ8avl45Do4B88CEJ1V0v59DMMg0qZ3T0WIlIEDPuqNT5xISElLcLUY /pQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706173800; x=1706778600; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=axKhoZ/A9jB1oAmT7RpSFgghir/sRM/fuyNvv7pCKtY=; b=QO1j9Zkhkq7833iCcHTQn2gwnTYLEMNEi+vgdh4o5Ny6+RucMjm0wJ2A4JzCTSLl6M 8TmGDLlu1b+bgHdVoN+62nUXzm3p4YtMsLqqmNJaMUPu12tpr9auE2kYagsVBN76CqSY 0d6nzXTG86v2glPFHMuMJZAFViQwbcnFmNLm1ehNaK1LPpTQ+ASMXeYB+cBlfI//lCK/ oN7a8ueJ4xoVtlg5+9Ddb29ax03OeT7O8Mcv6jialxtp7kcQkJArYPVHky0QqwS3FVO6 uGeUipsD9j3EUewoQGb+GBNCsbFMnvW5NY4b3/zQsKoYdPYRcwIzPrsqeujd22mIgjp0 0cmg== X-Gm-Message-State: AOJu0YzBtE16yIjKcwl5a1XFMr81R7558s/s7NsNTO9B/wnDNI7TOlnh DjMJ7FkQI8R2s14TvFBJWYOcgnHS416xjfbOWvpoVbt4EANvUsXyrpzH+gz9IkSBXD7jGFqOzcr jQEqt7sFDw6nTiIYTxJ+pGf33qEA= X-Google-Smtp-Source: AGHT+IH1unk3d51bIDWoAHpxTmE4dREOENEs2CB2E4RFD7cXpBB36/rEx/hntpLsuDlMHCG2GpkepL1NgoYQeLUh2fk= X-Received: by 2002:a05:6358:c97:b0:174:edd3:b3e9 with SMTP id o23-20020a0563580c9700b00174edd3b3e9mr849633rwj.38.1706173799795; Thu, 25 Jan 2024 01:09:59 -0800 (PST) MIME-Version: 1.0 References: <202401181711.qxjxpnl3ohnw@alvherre.pgsql> <202401221619.ragf2vnbyopl@alvherre.pgsql> In-Reply-To: From: Amit Langote Date: Thu, 25 Jan 2024 18:09:42 +0900 Message-ID: Subject: Re: remaining sql/json patches To: Alvaro Herrera Cc: Andres Freund , Erik Rijkers , jian he , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000004450f6060fc18be9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004450f6060fc18be9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 24, 2024 at 10:11=E2=80=AFPM Amit Langote wrote: > On Tue, Jan 23, 2024 at 12:46=E2=80=AFAM jian he wrote: > > On Mon, Jan 22, 2024 at 10:28=E2=80=AFPM Amit Langote wrote: > > > > > > > based on v35. > > > > Now I only applied from 0001 to 0007. > > > > For {DEFAULT expression ON EMPTY} | {DEFAULT expression ON ERROR} > > > > restrict DEFAULT expression be either Const node or FuncExpr node. > > > > so these 3 SQL/JSON functions can be used in the btree expression i= ndex. > > > > > > I'm not really excited about adding these restrictions into the > > > transformJsonFuncExpr() path. Index or any other code that wants to > > > put restrictions already have those in place, no need to add them > > > here. Moreover, by adding these restrictions, we might end up > > > preventing users from doing useful things with this like specify > > > column references. If there are semantic issues with allowing that, > > > we should discuss them. > > > > > > > after applying v36. > > The following index creation and query operation works. I am not 100% > > sure about these cases. > > just want confirmation, sorry for bothering you.... > > No worries; I really appreciate your testing and suggestions. > > > drop table t; > > create table t(a jsonb, b int); > > insert into t select '{"hello":11}',1; > > insert into t select '{"hello":12}',2; > > CREATE INDEX t_idx2 ON t (JSON_query(a, '$.hello1' RETURNING int > > default b + random() on error)); > > CREATE INDEX t_idx3 ON t (JSON_query(a, '$.hello1' RETURNING int > > default random()::int on error)); > > create or replace function ret_setint() returns setof integer as > > $$ > > begin > > -- perform pg_sleep(0.1); > > return query execute 'select 1 union all select 1'; > > end; > > $$ > > language plpgsql IMMUTABLE; > > SELECT JSON_query(a, '$.hello1' RETURNING int default ret_setint() on > > error) from t; > > SELECT JSON_query(a, '$.hello1' RETURNING int default sum(b) over() > > on error) from t; > > SELECT JSON_query(a, '$.hello1' RETURNING int default sum(b) on > > error) from t group by a; > > > > but the following cases will fail related to index and default expressi= on. > > create table zz(a int, b int); > > CREATE INDEX zz_idx1 ON zz ( (b + random()::int)); > > create table ssss(a int, b int default ret_setint()); > > create table ssss(a int, b int default sum(b) over()); > > I think your suggestion to add restrictions on what is allowed for > DEFAULT makes sense. Also, immutability shouldn't be checked in > transformJsonBehavior(), but in contain_mutable_functions() as done in > the attached. Added some tests too. > > I still need to take a look at your other report regarding typmod but > I'm out of energy today. The attached updated patch should address one of the concerns -- JSON_QUERY() should now work appropriately with RETURNING type with typmod whether or OMIT QUOTES is specified. But I wasn't able to address the problems with RETURNING record_type_with_typmod, that is, the following example you shared upthread: create domain char3_domain_not_null as char(3) NOT NULL; create domain hello as text not null check (value =3D 'hello'); create domain int42 as int check (value =3D 42); create type comp_domain_with_typmod AS (a char3_domain_not_null, b int42); select json_value(jsonb'{"rec": "(abcd,42)"}', '$.rec' returning comp_domain_with_typmod); json_value ------------ (1 row) select json_value(jsonb'{"rec": "(abcd,42)"}', '$.rec' returning comp_domain_with_typmod error on error); ERROR: value too long for type character(3) select json_value(jsonb'{"rec": "abcd"}', '$.rec' returning char3_domain_not_null error on error); json_value ------------ abc (1 row) The problem with returning comp_domain_with_typmod from json_value() seems to be that it's using a text-to-record CoerceViaIO expression picked from JsonExpr.item_coercions, which behaves differently than the expression tree that the following uses: select ('abcd', 42)::comp_domain_with_typmod; row ---------- (abc,42) (1 row) I don't see a good way to make RETURNING record_type_with_typmod to work cleanly, so I am inclined to either simply disallow the feature or live with the limitation. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --0000000000004450f6060fc18be9 Content-Type: application/octet-stream; name="v39-0002-Show-function-name-in-TableFuncScan.patch" Content-Disposition: attachment; filename="v39-0002-Show-function-name-in-TableFuncScan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrszs7121 RnJvbSAwOTY5NDM5NjZjMmI3MTZhZGJmMzUwNjZiNTYzNzI5MjNiMzQwYTdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAYWx2aC5uby1pcC5v cmc+CkRhdGU6IFR1ZSwgMjMgSmFuIDIwMjQgMTI6MTE6NDYgKzA5MDAKU3ViamVjdDogW1BBVENI IHYzOSAyLzNdIFNob3cgZnVuY3Rpb24gbmFtZSBpbiBUYWJsZUZ1bmNTY2FuCgpQcmV2aW91c2x5 IHdlIHdlcmUgb25seSBzaG93aW5nIHRoZSB1c2VyLXNwZWNpZmllZCBhbGlhcywgYnV0IHRoaXMg aXMKY2xlYXJseSBub3QgdGhlIGNvZGUncyBpbnRlbnQuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tLzIwMjQwMTE4MTcxMS5xeGp4cG5sM29obnclNDBhbHZoZXJyZS5wZ3NxbAotLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyB8 ICA0ICsrLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgIHwgIDEgKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwub3V0ICAgfCAxNiArKysrKysrKy0tLS0tLS0tCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbF8xLm91dCB8IDE2ICsrKysrKysrLS0tLS0tLS0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sXzIub3V0IHwgMTYgKysrKysrKystLS0tLS0t LQogOCBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKaW5kZXggODQzNDcyZTZkZC4uYjMyMzBmMjk3YiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYwpAQCAtMzg5Miw3ICszODkyLDcgQEAgRXhwbGFpblRhcmdldFJlbChQbGFu ICpwbGFuLCBJbmRleCBydGksIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlicmVhazsKIAkJY2FzZSBU X1RhYmxlRnVuY1NjYW46CiAJCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9UQUJMRUZVTkMp OwotCQkJb2JqZWN0bmFtZSA9ICJ4bWx0YWJsZSI7CisJCQlvYmplY3RuYW1lID0gcnRlLT50YWJs ZWZ1bmNfbmFtZTsKIAkJCW9iamVjdHRhZyA9ICJUYWJsZSBGdW5jdGlvbiBOYW1lIjsKIAkJCWJy ZWFrOwogCQljYXNlIFRfVmFsdWVzU2NhbjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IDAzZjY3YjY4 NTAuLmZmYTM0MDJjOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtNTMxLDYgKzUzMSw3IEBAIF9v dXRSYW5nZVRibEVudHJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5nZVRibEVudHJ5ICpub2Rl KQogCQkJYnJlYWs7CiAJCWNhc2UgUlRFX1RBQkxFRlVOQzoKIAkJCVdSSVRFX05PREVfRklFTEQo dGFibGVmdW5jKTsKKwkJCVdSSVRFX1NUUklOR19GSUVMRCh0YWJsZWZ1bmNfbmFtZSk7CiAJCQli cmVhazsKIAkJY2FzZSBSVEVfVkFMVUVTOgogCQkJV1JJVEVfTk9ERV9GSUVMRCh2YWx1ZXNfbGlz dHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgYi9zcmMvYmFj a2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRleCBjZmI1NTJmZGU3Li4yZDAwOTI1MWYzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9u b2Rlcy9yZWFkZnVuY3MuYwpAQCAtNTMwLDYgKzUzMCw3IEBAIF9yZWFkUmFuZ2VUYmxFbnRyeSh2 b2lkKQogCQkJYnJlYWs7CiAJCWNhc2UgUlRFX1RBQkxFRlVOQzoKIAkJCVJFQURfTk9ERV9GSUVM RCh0YWJsZWZ1bmMpOworCQkJUkVBRF9TVFJJTkdfRklFTEQodGFibGVmdW5jX25hbWUpOwogCQkJ LyogVGhlIFJURSBtdXN0IGhhdmUgYSBjb3B5IG9mIHRoZSBjb2x1bW4gdHlwZSBpbmZvLCBpZiBh bnkgKi8KIAkJCWlmIChsb2NhbF9ub2RlLT50YWJsZWZ1bmMpCiAJCQl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9yZWxhdGlvbi5jCmluZGV4IDM0YTBlYzU5MDEuLjY1ZTU0YWJkZDEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9yZWxhdGlvbi5jCkBAIC0yMDczLDE3ICsyMDczLDE3IEBAIGFkZFJhbmdlVGFi bGVFbnRyeUZvclRhYmxlRnVuYyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJQXNzZXJ0KGxpc3RfbGVu Z3RoKHRmLT5jb2x0eXBtb2RzKSA9PSBsaXN0X2xlbmd0aCh0Zi0+Y29sbmFtZXMpKTsKIAlBc3Nl cnQobGlzdF9sZW5ndGgodGYtPmNvbGNvbGxhdGlvbnMpID09IGxpc3RfbGVuZ3RoKHRmLT5jb2xu YW1lcykpOwogCi0JcmVmbmFtZSA9IGFsaWFzID8gYWxpYXMtPmFsaWFzbmFtZSA6IHBzdHJkdXAo InhtbHRhYmxlIik7Ci0KIAlydGUtPnJ0ZWtpbmQgPSBSVEVfVEFCTEVGVU5DOwogCXJ0ZS0+cmVs aWQgPSBJbnZhbGlkT2lkOwogCXJ0ZS0+c3VicXVlcnkgPSBOVUxMOwogCXJ0ZS0+dGFibGVmdW5j ID0gdGY7CisJcnRlLT50YWJsZWZ1bmNfbmFtZSA9IHBzdHJkdXAoIlhNTFRBQkxFIik7CiAJcnRl LT5jb2x0eXBlcyA9IHRmLT5jb2x0eXBlczsKIAlydGUtPmNvbHR5cG1vZHMgPSB0Zi0+Y29sdHlw bW9kczsKIAlydGUtPmNvbGNvbGxhdGlvbnMgPSB0Zi0+Y29sY29sbGF0aW9uczsKIAlydGUtPmFs aWFzID0gYWxpYXM7CiAKKwlyZWZuYW1lID0gYWxpYXMgPyBhbGlhcy0+YWxpYXNuYW1lIDogcHN0 cmR1cCgieG1sdGFibGUiKTsKIAllcmVmID0gYWxpYXMgPyBjb3B5T2JqZWN0KGFsaWFzKSA6IG1h a2VBbGlhcyhyZWZuYW1lLCBOSUwpOwogCW51bWFsaWFzZXMgPSBsaXN0X2xlbmd0aChlcmVmLT5j b2xuYW1lcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCA2MDBjZDg0MDhlLi5hYTM2YWFm NzY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xMTQ0LDYgKzExNDQsNyBAQCB0eXBlZGVm IHN0cnVjdCBSYW5nZVRibEVudHJ5CiAJICogRmllbGRzIHZhbGlkIGZvciBhIFRhYmxlRnVuYyBS VEUgKGVsc2UgTlVMTCk6CiAJICovCiAJVGFibGVGdW5jICAqdGFibGVmdW5jOworCWNoYXIJICAg KnRhYmxlZnVuY19uYW1lOwogCiAJLyoKIAkgKiBGaWVsZHMgdmFsaWQgZm9yIGEgdmFsdWVzIFJU RSAoZWxzZSBOSUwpOgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwub3V0CmluZGV4IDY1MDBjZmY4ODUu LjcwMzM1Yzc0ZGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbC5vdXQKQEAgLTEzNDMsMTEgKzEz NDMsMTEgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMueG1sdGFibGV2aWV3MSBBUwog ICAgICAgICAgICBGUk9NIHhtbGRhdGEpIHgsCiAgICAgTEFURVJBTCBYTUxUQUJMRSgoJy9ST1dT L1JPVyc6OnRleHQpIFBBU1NJTkcgKHguZGF0YSkgQ09MVU1OUyBpZCBpbnRlZ2VyIFBBVEggKCdA aWQnOjp0ZXh0KSwgX2lkIEZPUiBPUkRJTkFMSVRZLCBjb3VudHJ5X25hbWUgdGV4dCBQQVRIICgn Q09VTlRSWV9OQU1FL3RleHQoKSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFU SCAoJ0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9J RCc6OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5p dCB0ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFV TFQgKCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQog RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7Ci0gICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAogICAgLT4gIFNlcSBTY2FuIG9uIHhtbGRhdGEK LSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBG dW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogKDMgcm93cykKIAogRVhQTEFJ TiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7CkBAIC0x MzU3LDcgKzEzNTcsNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZS T00geG1sdGFibGV2aWV3MTsKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5f aWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0 YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRh YmxlIi5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAg ICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9u ICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInht bHRhYmxlIgogICAgICAgICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwg InhtbHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxl Ii5yZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUi LnByZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcv Uk9XUy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdl ciBQQVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRl eHQgUEFUSCAoJ0NPVU5UUllfTkFNRS90ZXh0KCknOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9p ZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEgg KCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6 dGV4dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUg dGV4dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUn Ojp0ZXh0KSkKICg3IHJvd3MpCkBAIC0xNTM2LDcgKzE1MzYsNyBAQCBTRUxFQ1QgIHhtbHRhYmxl LioKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIu Y291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lk LCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25h bWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4 bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAg IC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAg ICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3Vu dHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4 bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQog ICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0 KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6 dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5U UllfTkFNRSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllf SUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBz aXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEgg KCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3Bl Y2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogKDcgcm93cykKQEAg LTE1NTYsNyArMTU1Niw3IEBAIFNFTEVDVCBmLiogRlJPTSB4bWxkYXRhLCBMQVRFUkFMIHhtbHRh YmxlKCcvUk9XUy9ST1dbQ09VTlRSWV9OQU1FPSJKYXBhbiIgb3IgQ09VCiAgICBPdXRwdXQ6IGYu IkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu eG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIgZgorICAgLT4gIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24g IlhNTFRBQkxFIiBmCiAgICAgICAgICBPdXRwdXQ6IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lP Tl9JRCIKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9X W0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVU5UUllfTkFNRT0iSW5kaWEiXSc6OnRleHQpIFBB U1NJTkcgKHhtbGRhdGEuZGF0YSkgQ09MVU1OUyAiQ09VTlRSWV9OQU1FIiB0ZXh0LCAiUkVHSU9O X0lEIiBpbnRlZ2VyKQogICAgICAgICAgRmlsdGVyOiAoZi4iQ09VTlRSWV9OQU1FIiA9ICdKYXBh bic6OnRleHQpCkBAIC0xNTkxLDcgKzE1OTEsNyBAQCBTRUxFQ1QgZi4qIEZST00geG1sZGF0YSwg TEFURVJBTCB4bWx0YWJsZSgnL1JPV1MvUk9XW0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVQog ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxz ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAg ICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwotICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gTmFtZSI6ICJ4bWx0YWJs ZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAiVGFibGUg RnVuY3Rpb24gTmFtZSI6ICJYTUxUQUJMRSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwogICAgICAgICAgICAiQWxpYXMiOiAiZiIsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiT3V0cHV0IjogWyJmLlwi Q09VTlRSWV9OQU1FXCIiLCAiZi5cIlJFR0lPTl9JRFwiIl0sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAg ICAgICAgICAiVGFibGUgRnVuY3Rpb24gQ2FsbCI6ICJYTUxUQUJMRSgoJy9ST1dTL1JPV1tDT1VO VFJZX05BTUU9XCJKYXBhblwiIG9yIENPVU5UUllfTkFNRT1cIkluZGlhXCJdJzo6dGV4dCkgUEFT U0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIFwiQ09VTlRSWV9OQU1FXCIgdGV4dCwgXCJSRUdJ T05fSURcIiBpbnRlZ2VyKSIsKwpAQCAtMTcwMCw3ICsxNzAwLDcgQEAgU0VMRUNUICB4bWx0YWJs ZS4qCiAgICBPdXRwdXQ6ICJ4bWx0YWJsZSIuaWQsICJ4bWx0YWJsZSIuX2lkLCAieG1sdGFibGUi LmNvdW50cnlfbmFtZSwgInhtbHRhYmxlIi5jb3VudHJ5X2lkLCAieG1sdGFibGUiLnJlZ2lvbl9p ZCwgInhtbHRhYmxlIi5zaXplLCAieG1sdGFibGUiLnVuaXQsICJ4bWx0YWJsZSIucHJlbWllcl9u YW1lCiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnhtbGRhdGEKICAgICAgICAgIE91dHB1dDog eG1sZGF0YS5kYXRhCi0gICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAieG1sdGFibGUiCisg ICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAiWE1MVEFCTEUiICJ4bWx0YWJsZSIKICAgICAg ICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291 bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAi eG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUK ICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XJzo6dGV4 dCkgUEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIGlkIGludGVnZXIgUEFUSCAoJ0BpZCc6 OnRleHQpLCBfaWQgRk9SIE9SRElOQUxJVFksIGNvdW50cnlfbmFtZSB0ZXh0IFBBVEggKCdDT1VO VFJZX05BTUUnOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZ X0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwg c2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRI ICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNw ZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0ZXh0KSkKICAgICAgICAgIEZp bHRlcjogKCJ4bWx0YWJsZSIucmVnaW9uX2lkID0gMikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQveG1sXzEub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxf MS5vdXQKaW5kZXggOTMyM2I4NGFlMi4uMDgxMjdkYjcyMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC94bWxfMS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC94bWxfMS5vdXQKQEAgLTEwMDQsMTEgKzEwMDQsMTEgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklF VyBwdWJsaWMueG1sdGFibGV2aWV3MSBBUwogICAgICAgICAgICBGUk9NIHhtbGRhdGEpIHgsCiAg ICAgTEFURVJBTCBYTUxUQUJMRSgoJy9ST1dTL1JPVyc6OnRleHQpIFBBU1NJTkcgKHguZGF0YSkg Q09MVU1OUyBpZCBpbnRlZ2VyIFBBVEggKCdAaWQnOjp0ZXh0KSwgX2lkIEZPUiBPUkRJTkFMSVRZ LCBjb3VudHJ5X25hbWUgdGV4dCBQQVRIICgnQ09VTlRSWV9OQU1FL3RleHQoKSc6OnRleHQpIE5P VCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9u X2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNp b24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4 dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFU SCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIHhtbHRhYmxldmlldzE7Ci0gICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAog ICAgLT4gIFNlcSBTY2FuIG9uIHhtbGRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9u ICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInht bHRhYmxlIgogKDMgcm93cykKIAogRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1Qg KiBGUk9NIHhtbHRhYmxldmlldzE7CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBFWFBMQUlOIChDT1NU UyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00geG1sdGFibGV2aWV3MTsKICAgIE91dHB1dDog InhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAi eG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNp emUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAg IC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAgICAgT3V0cHV0OiAieG1s dGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0 YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwg InhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUg RnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxk YXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1Ig T1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5UUllfTkFNRS90ZXh0KCkn Ojp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4 dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3Vi bGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9A dW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6 OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0ZXh0KSkKICg3IHJvd3MpCkBAIC0xMTYyLDcg KzExNjIsNyBAQCBTRUxFQ1QgIHhtbHRhYmxlLioKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwg InhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50 cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIu dW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu eG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJY TUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAgICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1s dGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9p ZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0 LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDog WE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVN TlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291 bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5UUllfTkFNRSc6OnRleHQpIE5PVCBOVUxMLCBjb3Vu dHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIg UEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJ WkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJf bmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJf TkFNRSc6OnRleHQpKQogKDcgcm93cykKQEAgLTExODEsNyArMTE4MSw3IEBAIFNFTEVDVCBmLiog RlJPTSB4bWxkYXRhLCBMQVRFUkFMIHhtbHRhYmxlKCcvUk9XUy9ST1dbQ09VTlRSWV9OQU1FPSJK YXBhbiIgb3IgQ09VCiAgICBPdXRwdXQ6IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIK ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxk YXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIgZgorICAg LT4gIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24gIlhNTFRBQkxFIiBmCiAgICAgICAgICBPdXRwdXQ6 IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9u IENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XW0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVU5U UllfTkFNRT0iSW5kaWEiXSc6OnRleHQpIFBBU1NJTkcgKHhtbGRhdGEuZGF0YSkgQ09MVU1OUyAi Q09VTlRSWV9OQU1FIiB0ZXh0LCAiUkVHSU9OX0lEIiBpbnRlZ2VyKQogICAgICAgICAgRmlsdGVy OiAoZi4iQ09VTlRSWV9OQU1FIiA9ICdKYXBhbic6OnRleHQpCkBAIC0xMjE2LDcgKzEyMTYsNyBA QCBTRUxFQ1QgZi4qIEZST00geG1sZGF0YSwgTEFURVJBTCB4bWx0YWJsZSgnL1JPV1MvUk9XW0NP VU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVQogICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJJbm5lciIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAg ICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiQXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgICAgICAiVGFi bGUgRnVuY3Rpb24gTmFtZSI6ICJ4bWx0YWJsZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gTmFtZSI6ICJYTUxUQUJMRSIsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiQWxpYXMiOiAiZiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwog ICAgICAgICAgICAiT3V0cHV0IjogWyJmLlwiQ09VTlRSWV9OQU1FXCIiLCAiZi5cIlJFR0lPTl9J RFwiIl0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gQ2FsbCI6 ICJYTUxUQUJMRSgoJy9ST1dTL1JPV1tDT1VOVFJZX05BTUU9XCJKYXBhblwiIG9yIENPVU5UUllf TkFNRT1cIkluZGlhXCJdJzo6dGV4dCkgUEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIFwi Q09VTlRSWV9OQU1FXCIgdGV4dCwgXCJSRUdJT05fSURcIiBpbnRlZ2VyKSIsKwpAQCAtMTMxOSw3 ICsxMzE5LDcgQEAgU0VMRUNUICB4bWx0YWJsZS4qCiAgICBPdXRwdXQ6ICJ4bWx0YWJsZSIuaWQs ICJ4bWx0YWJsZSIuX2lkLCAieG1sdGFibGUiLmNvdW50cnlfbmFtZSwgInhtbHRhYmxlIi5jb3Vu dHJ5X2lkLCAieG1sdGFibGUiLnJlZ2lvbl9pZCwgInhtbHRhYmxlIi5zaXplLCAieG1sdGFibGUi LnVuaXQsICJ4bWx0YWJsZSIucHJlbWllcl9uYW1lCiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LnhtbGRhdGEKICAgICAgICAgIE91dHB1dDogeG1sZGF0YS5kYXRhCi0gICAtPiAgVGFibGUgRnVu Y3Rpb24gU2NhbiBvbiAieG1sdGFibGUiCisgICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAi WE1MVEFCTEUiICJ4bWx0YWJsZSIKICAgICAgICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInht bHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlf aWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5p dCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6 IFhNTFRBQkxFKCgnL1JPV1MvUk9XJzo6dGV4dCkgUEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xV TU5TIGlkIGludGVnZXIgUEFUSCAoJ0BpZCc6OnRleHQpLCBfaWQgRk9SIE9SRElOQUxJVFksIGNv dW50cnlfbmFtZSB0ZXh0IFBBVEggKCdDT1VOVFJZX05BTUUnOjp0ZXh0KSBOT1QgTlVMTCwgY291 bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2Vy IFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdT SVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVy X25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVS X05BTUUnOjp0ZXh0KSkKICAgICAgICAgIEZpbHRlcjogKCJ4bWx0YWJsZSIucmVnaW9uX2lkID0g MikKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sXzIub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxfMi5vdXQKaW5kZXggZTFkMTY1YzZjOS4uYzcyMGEw NWY1YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxfMi5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWxfMi5vdXQKQEAgLTEzMjMsMTEgKzEzMjMs MTEgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMueG1sdGFibGV2aWV3MSBBUwogICAg ICAgICAgICBGUk9NIHhtbGRhdGEpIHgsCiAgICAgTEFURVJBTCBYTUxUQUJMRSgoJy9ST1dTL1JP Vyc6OnRleHQpIFBBU1NJTkcgKHguZGF0YSkgQ09MVU1OUyBpZCBpbnRlZ2VyIFBBVEggKCdAaWQn Ojp0ZXh0KSwgX2lkIEZPUiBPUkRJTkFMSVRZLCBjb3VudHJ5X25hbWUgdGV4dCBQQVRIICgnQ09V TlRSWV9OQU1FL3RleHQoKSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAo J0NPVU5UUllfSUQnOjp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6 OnRleHQpLCBzaXplIGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0 ZXh0IFBBVEggKCdTSVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQg KCdub3Qgc3BlY2lmaWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7Ci0gICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAogICAgLT4gIFNlcSBTY2FuIG9uIHhtbGRhdGEKLSAg IC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5j dGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogKDMgcm93cykKIAogRVhQTEFJTiAo Q09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIHhtbHRhYmxldmlldzE7CkBAIC0xMzM3 LDcgKzEzMzcsNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00g eG1sdGFibGV2aWV3MTsKICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQs ICJ4bWx0YWJsZSIuY291bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJs ZSIucmVnaW9uX2lkLCAieG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxl Ii5wcmVtaWVyX25hbWUKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAg ICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4 bWx0YWJsZSIKKyAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRh YmxlIgogICAgICAgICAgT3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInht bHRhYmxlIi5jb3VudHJ5X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5y ZWdpb25faWQsICJ4bWx0YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnBy ZW1pZXJfbmFtZQogICAgICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9X Uy9ST1cnOjp0ZXh0KSBQQVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQ QVRIICgnQGlkJzo6dGV4dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQg UEFUSCAoJ0NPVU5UUllfTkFNRS90ZXh0KCknOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0 ZXh0IFBBVEggKCdDT1VOVFJZX0lEJzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdS RUdJT05fSUQnOjp0ZXh0KSwgc2l6ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4 dCksIHVuaXQgdGV4dCBQQVRIICgnU0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4 dCBERUZBVUxUICgnbm90IHNwZWNpZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0 ZXh0KSkKICg3IHJvd3MpCkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBTRUxFQ1QgIHhtbHRhYmxlLioK ICAgIE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291 bnRyeV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAi eG1sdGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUK ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1sZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxk YXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJ4bWx0YWJsZSIKKyAgIC0+ ICBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJYTUxUQUJMRSIgInhtbHRhYmxlIgogICAgICAgICAg T3V0cHV0OiAieG1sdGFibGUiLmlkLCAieG1sdGFibGUiLl9pZCwgInhtbHRhYmxlIi5jb3VudHJ5 X25hbWUsICJ4bWx0YWJsZSIuY291bnRyeV9pZCwgInhtbHRhYmxlIi5yZWdpb25faWQsICJ4bWx0 YWJsZSIuc2l6ZSwgInhtbHRhYmxlIi51bml0LCAieG1sdGFibGUiLnByZW1pZXJfbmFtZQogICAg ICAgICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogWE1MVEFCTEUoKCcvUk9XUy9ST1cnOjp0ZXh0KSBQ QVNTSU5HICh4bWxkYXRhLmRhdGEpIENPTFVNTlMgaWQgaW50ZWdlciBQQVRIICgnQGlkJzo6dGV4 dCksIF9pZCBGT1IgT1JESU5BTElUWSwgY291bnRyeV9uYW1lIHRleHQgUEFUSCAoJ0NPVU5UUllf TkFNRSc6OnRleHQpIE5PVCBOVUxMLCBjb3VudHJ5X2lkIHRleHQgUEFUSCAoJ0NPVU5UUllfSUQn Ojp0ZXh0KSwgcmVnaW9uX2lkIGludGVnZXIgUEFUSCAoJ1JFR0lPTl9JRCc6OnRleHQpLCBzaXpl IGRvdWJsZSBwcmVjaXNpb24gUEFUSCAoJ1NJWkUnOjp0ZXh0KSwgdW5pdCB0ZXh0IFBBVEggKCdT SVpFL0B1bml0Jzo6dGV4dCksIHByZW1pZXJfbmFtZSB0ZXh0IERFRkFVTFQgKCdub3Qgc3BlY2lm aWVkJzo6dGV4dCkgUEFUSCAoJ1BSRU1JRVJfTkFNRSc6OnRleHQpKQogKDcgcm93cykKQEAgLTE1 MzYsNyArMTUzNiw3IEBAIFNFTEVDVCBmLiogRlJPTSB4bWxkYXRhLCBMQVRFUkFMIHhtbHRhYmxl KCcvUk9XUy9ST1dbQ09VTlRSWV9OQU1FPSJKYXBhbiIgb3IgQ09VCiAgICBPdXRwdXQ6IGYuIkNP VU5UUllfTkFNRSIsIGYuIlJFR0lPTl9JRCIKICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMueG1s ZGF0YQogICAgICAgICAgT3V0cHV0OiB4bWxkYXRhLmRhdGEKLSAgIC0+ICBUYWJsZSBGdW5jdGlv biBTY2FuIG9uICJ4bWx0YWJsZSIgZgorICAgLT4gIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24gIlhN TFRBQkxFIiBmCiAgICAgICAgICBPdXRwdXQ6IGYuIkNPVU5UUllfTkFNRSIsIGYuIlJFR0lPTl9J RCIKICAgICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XW0NP VU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVU5UUllfTkFNRT0iSW5kaWEiXSc6OnRleHQpIFBBU1NJ TkcgKHhtbGRhdGEuZGF0YSkgQ09MVU1OUyAiQ09VTlRSWV9OQU1FIiB0ZXh0LCAiUkVHSU9OX0lE IiBpbnRlZ2VyKQogICAgICAgICAgRmlsdGVyOiAoZi4iQ09VTlRSWV9OQU1FIiA9ICdKYXBhbic6 OnRleHQpCkBAIC0xNTcxLDcgKzE1NzEsNyBAQCBTRUxFQ1QgZi4qIEZST00geG1sZGF0YSwgTEFU RVJBTCB4bWx0YWJsZSgnL1JPV1MvUk9XW0NPVU5UUllfTkFNRT0iSmFwYW4iIG9yIENPVQogICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiUGFyYWxsZWwgQXdhcmUiOiBmYWxzZSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAi QXN5bmMgQ2FwYWJsZSI6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKwotICAgICAgICAgICAiVGFibGUgRnVuY3Rpb24gTmFtZSI6ICJ4bWx0YWJsZSIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAiVGFibGUgRnVu Y3Rpb24gTmFtZSI6ICJYTUxUQUJMRSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwogICAgICAgICAgICAiQWxpYXMiOiAiZiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiT3V0cHV0IjogWyJmLlwiQ09V TlRSWV9OQU1FXCIiLCAiZi5cIlJFR0lPTl9JRFwiIl0sICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAg ICAgICAiVGFibGUgRnVuY3Rpb24gQ2FsbCI6ICJYTUxUQUJMRSgoJy9ST1dTL1JPV1tDT1VOVFJZ X05BTUU9XCJKYXBhblwiIG9yIENPVU5UUllfTkFNRT1cIkluZGlhXCJdJzo6dGV4dCkgUEFTU0lO RyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIFwiQ09VTlRSWV9OQU1FXCIgdGV4dCwgXCJSRUdJT05f SURcIiBpbnRlZ2VyKSIsKwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgU0VMRUNUICB4bWx0YWJsZS4q CiAgICBPdXRwdXQ6ICJ4bWx0YWJsZSIuaWQsICJ4bWx0YWJsZSIuX2lkLCAieG1sdGFibGUiLmNv dW50cnlfbmFtZSwgInhtbHRhYmxlIi5jb3VudHJ5X2lkLCAieG1sdGFibGUiLnJlZ2lvbl9pZCwg InhtbHRhYmxlIi5zaXplLCAieG1sdGFibGUiLnVuaXQsICJ4bWx0YWJsZSIucHJlbWllcl9uYW1l CiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnhtbGRhdGEKICAgICAgICAgIE91dHB1dDogeG1s ZGF0YS5kYXRhCi0gICAtPiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAieG1sdGFibGUiCisgICAt PiAgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAiWE1MVEFCTEUiICJ4bWx0YWJsZSIKICAgICAgICAg IE91dHB1dDogInhtbHRhYmxlIi5pZCwgInhtbHRhYmxlIi5faWQsICJ4bWx0YWJsZSIuY291bnRy eV9uYW1lLCAieG1sdGFibGUiLmNvdW50cnlfaWQsICJ4bWx0YWJsZSIucmVnaW9uX2lkLCAieG1s dGFibGUiLnNpemUsICJ4bWx0YWJsZSIudW5pdCwgInhtbHRhYmxlIi5wcmVtaWVyX25hbWUKICAg ICAgICAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IFhNTFRBQkxFKCgnL1JPV1MvUk9XJzo6dGV4dCkg UEFTU0lORyAoeG1sZGF0YS5kYXRhKSBDT0xVTU5TIGlkIGludGVnZXIgUEFUSCAoJ0BpZCc6OnRl eHQpLCBfaWQgRk9SIE9SRElOQUxJVFksIGNvdW50cnlfbmFtZSB0ZXh0IFBBVEggKCdDT1VOVFJZ X05BTUUnOjp0ZXh0KSBOT1QgTlVMTCwgY291bnRyeV9pZCB0ZXh0IFBBVEggKCdDT1VOVFJZX0lE Jzo6dGV4dCksIHJlZ2lvbl9pZCBpbnRlZ2VyIFBBVEggKCdSRUdJT05fSUQnOjp0ZXh0KSwgc2l6 ZSBkb3VibGUgcHJlY2lzaW9uIFBBVEggKCdTSVpFJzo6dGV4dCksIHVuaXQgdGV4dCBQQVRIICgn U0laRS9AdW5pdCc6OnRleHQpLCBwcmVtaWVyX25hbWUgdGV4dCBERUZBVUxUICgnbm90IHNwZWNp ZmllZCc6OnRleHQpIFBBVEggKCdQUkVNSUVSX05BTUUnOjp0ZXh0KSkKICAgICAgICAgIEZpbHRl cjogKCJ4bWx0YWJsZSIucmVnaW9uX2lkID0gMikKLS0gCjIuMzUuMwoK --0000000000004450f6060fc18be9 Content-Type: application/octet-stream; name="v39-0003-JSON_TABLE.patch" Content-Disposition: attachment; filename="v39-0003-JSON_TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrszs70x0 RnJvbSBiNzFiYWZiYjVkYjIzNzBmZTYwYWQzNGY3MTExNTVjMzVkNzE4YzA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTg6MDA6MDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz OSAzLzNdIEpTT05fVEFCTEUKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMg ZmVhdHVyZSBhbGxvd3MganNvbmIgZGF0YSB0byBiZSB0cmVhdGVkIGFzIGEgdGFibGUgYW5kIHRo dXMKdXNlZCBpbiBhIEZST00gY2xhdXNlIGxpa2Ugb3RoZXIgdGFidWxhciBkYXRhLiBEYXRhIGNh biBiZSBzZWxlY3RlZApmcm9tIHRoZSBqc29uYiB1c2luZyBqc29ucGF0aCBleHByZXNzaW9ucywg YW5kIGhvaXN0ZWQgb3V0IG9mIG5lc3RlZApzdHJ1Y3R1cmVzIGluIHRoZSBqc29uYiB0byBmb3Jt IG11bHRpcGxlIHJvd3MsIG1vcmUgb3IgbGVzcyBsaWtlIGFuCm91dGVyIGpvaW4uCgpUaGlzIGFs c28gYWRkcyB0aGUgUExBTiBjbGF1c2VzIGZvciBKU09OX1RBQkxFLCB3aGljaCBhbGxvdyB0aGUg dXNlcgp0byBzcGVjaWZ5IGhvdyBkYXRhIGZyb20gbmVzdGVkIHBhdGhzIGFyZSBqb2luZWQsIGFs bG93aW5nCmNvbnNpZGVyYWJsZSBmcmVlZG9tIGluIHNoYXBpbmcgdGhlIHRhYnVsYXIgb3V0cHV0 IG9mIEpTT05fVEFCTEUuClBMQU4gREVGQVVMVCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0 aGUgZ2xvYmFsIHN0cmF0ZWdpZXMgd2hlbgpkZWFsaW5nIHdpdGggc2libGluZyBvciBjaGlsZCBu ZXN0ZWQgcGF0aHMuIFRoZSBpcyBvZnRlbiBzdWZmaWNpZW50CnRvIGFjaGlldmUgdGhlIG5lY2Vz c2FyeSBnb2FsLCBhbmQgaXMgY29uc2lkZXJhYmx5IHNpbXBsZXIgdGhhbiB0aGUKZnVsbCBQTEFO IGNsYXVzZSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHN0cmF0ZWd5IHRv IGJlCnVzZWQgZm9yIGVhY2ggbmFtZWQgbmVzdGVkIHBhdGguCgpBdXRob3I6IE5pa2l0YSBHbHVr aG92IDxuLmdsdWhvdkBwb3N0Z3Jlc3Byby5ydT4KQXV0aG9yOiBUZW9kb3IgU2lnYWV2IDx0ZW9k b3JAc2lnYWV2LnJ1PgpBdXRob3I6IE9sZWcgQmFydHVub3YgPG9iYXJ0dW5vdkBnbWFpbC5jb20+ CkF1dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KQXV0aG9y OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KQXV0aG9yOiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpBdXRob3I6IEppYW4gSGUgPGppYW4udW5pdmVy c2FsaXR5QGdtYWlsLmNvbT4KClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChpbiBubyBwYXJ0aWN1 bGFyIG9yZGVyKSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3YsIFBhdmVsIFN0ZWh1 bGUsIEFuZHJldyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhpbWFuc2h1IFVwYWRo eWF5YSwgRGFuaWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnksIMOBbHZhcm8gSGVycmVyYSwK amlhbiBoZQoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBiYjkzNS0wMTU4LTc4 YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFsYXAzLmFuYXJhemVs LmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2ItYWE2Ni1mMjMwLTNk NmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdyZXNxbC5vcmcKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFO YmdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNTEwICsrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1 cmVzLnR4dCAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxl RnVuY3NjYW4uYyAgICAgIHwgICAyNyArLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgIDEwOCArKwogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgICAzOCArCiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICAgICAgICAgICB8ICAyOTkgKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxk ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNl LmMgICAgICAgICAgICAgfCAgIDE0ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5j ICAgICAgICAgICAgICAgfCAgIDUzICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRh YmxlLmMgICAgICAgICAgfCAgNzE4ICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9yZWxhdGlvbi5jICAgICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYyAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25wYXRoX2V4ZWMuYyAgICAgICAgIHwgIDU0NyArKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgIHwgIDI3OSArKystCiBzcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL25vZGVz L21ha2VmdW5jcy5oICAgICAgICAgICAgICAgICB8ICAgIDkgKwogc3JjL2luY2x1ZGUvbm9kZXMv cGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwgIDEwOSArKwogc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA2MCArLQogc3JjL2luY2x1ZGUvcGFyc2Vy L2t3bGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfY2xhdXNlLmggICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pz b25wYXRoLmggICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2ludGVyZmFjZXMvZWNwZy90 ZXN0L2VjcGdfc2NoZWR1bGUgICAgICAgIHwgICAgMSArCiAuLi4vdGVzdC9leHBlY3RlZC9zcWwt c3FsanNvbl9qc29udGFibGUuYyAgICAgfCAgMTMyICsrCiAuLi4vZXhwZWN0ZWQvc3FsLXNxbGpz b25fanNvbnRhYmxlLnN0ZGVyciAgICAgfCAgIDIwICsKIC4uLi9leHBlY3RlZC9zcWwtc3FsanNv bl9qc29udGFibGUuc3Rkb3V0ICAgICB8ICAgIDAKIHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9z cWwvTWFrZWZpbGUgICAgICAgICB8ICAgIDEgKwogc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3Nx bC9tZXNvbi5idWlsZCAgICAgIHwgICAgMSArCiAuLi4vZWNwZy90ZXN0L3NxbC9zcWxqc29uX2pz b250YWJsZS5wZ2MgICAgICAgfCAgIDMyICsKIC4uLi9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25f anNvbnRhYmxlLm91dCAgICB8IDEyMDggKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbCAgICB8ICA2ODYgKysrKysrKysrKwogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxNiArCiAzNCBmaWxl cyBjaGFuZ2VkLCA0ODYwIGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9q c29udGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9l eHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3RkZXJyCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5z dGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL3Nx bGpzb25fanNvbnRhYmxlLnBnYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3FsanNvbl9qc29udGFibGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbl9qc29udGFibGUuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggNjgwMWJjODA0 NS4uYmE0ODQ1ZTE5YyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xODM4OCw2ICsxODM4OCw1MTYgQEAgJC4qID8gKEAg bGlrZV9yZWdleCAiXlxcZCskIikKICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgogICA8L3NlY3Qy PgorCisgPHNlY3QyIGlkPSJmdW5jdGlvbnMtc3FsanNvbi10YWJsZSI+CisgIDx0aXRsZT5KU09O X1RBQkxFPC90aXRsZT4KKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5Pmpzb25fdGFibGU8L3By aW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgPGZ1bmN0aW9uPmpzb25fdGFi bGU8L2Z1bmN0aW9uPiBpcyBhbiBTUUwvSlNPTiBmdW5jdGlvbiB3aGljaAorICAgcXVlcmllcyA8 YWNyb255bT5KU09OPC9hY3JvbnltPiBkYXRhCisgICBhbmQgcHJlc2VudHMgdGhlIHJlc3VsdHMg YXMgYSByZWxhdGlvbmFsIHZpZXcsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBhcyBhCisgICByZWd1 bGFyIFNRTCB0YWJsZS4gWW91IGNhbiBvbmx5IHVzZSA8ZnVuY3Rpb24+anNvbl90YWJsZTwvZnVu Y3Rpb24+IGluc2lkZSB0aGUKKyAgIDxsaXRlcmFsPkZST008L2xpdGVyYWw+IGNsYXVzZSBvZiBh IDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gc3RhdGVtZW50LgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUYWtpbmcgSlNPTiBkYXRhIGFzIGlucHV0LCA8ZnVuY3Rpb24+anNvbl90YWJsZTwv ZnVuY3Rpb24+IHVzZXMKKyAgIGEgcGF0aCBleHByZXNzaW9uIHRvIGV4dHJhY3QgYSBwYXJ0IG9m IHRoZSBwcm92aWRlZCBkYXRhIHRoYXQKKyAgIHdpbGwgYmUgdXNlZCBhcyBhIDxmaXJzdHRlcm0+ cm93IHBhdHRlcm48L2ZpcnN0dGVybT4gZm9yIHRoZQorICAgY29uc3RydWN0ZWQgdmlldy4gRWFj aCBTUUwvSlNPTiBpdGVtIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHJvdyBwYXR0ZXJuIHNlcnZl cworICAgYXMgdGhlIHNvdXJjZSBmb3IgYSBzZXBhcmF0ZSByb3cgaW4gdGhlIGNvbnN0cnVjdGVk IHJlbGF0aW9uYWwgdmlldy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVG8gc3BsaXQgdGhl IHJvdyBwYXR0ZXJuIGludG8gY29sdW1ucywgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9u PgorICAgcHJvdmlkZXMgdGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSB0aGF0 IGRlZmluZXMgdGhlCisgICBzY2hlbWEgb2YgdGhlIGNyZWF0ZWQgdmlldy4gRm9yIGVhY2ggY29s dW1uIHRvIGJlIGNvbnN0cnVjdGVkLAorICAgdGhpcyBjbGF1c2UgcHJvdmlkZXMgYSBzZXBhcmF0 ZSBwYXRoIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKyAgIHRoZSByb3cgcGF0dGVybiwgZXh0 cmFjdHMgYSBKU09OIGl0ZW0sIGFuZCByZXR1cm5zIGl0IGFzIGEKKyAgIHNlcGFyYXRlIFNRTCB2 YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4uIElmIHRoZSByZXF1aXJlZCB2YWx1ZQorICAg aXMgc3RvcmVkIGluIGEgbmVzdGVkIGxldmVsIG9mIHRoZSByb3cgcGF0dGVybiwgaXQgY2FuIGJl IGV4dHJhY3RlZAorICAgdXNpbmcgdGhlIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBz dWJjbGF1c2UuIEpvaW5pbmcgdGhlCisgICBjb2x1bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5F U1RFRCBQQVRIPC9saXRlcmFsPiBjYW4gYWRkIG11bHRpcGxlCisgICBuZXcgcm93cyB0byB0aGUg Y29uc3RydWN0ZWQgdmlldy4gU3VjaCByb3dzIGFyZSBjYWxsZWQKKyAgIDxmaXJzdHRlcm0+Y2hp bGQgcm93czwvZmlyc3R0ZXJtPiwgYXMgb3Bwb3NlZCB0byB0aGUgPGZpcnN0dGVybT5wYXJlbnQg cm93PC9maXJzdHRlcm0+CisgICB0aGF0IGdlbmVyYXRlcyB0aGVtLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgcm93cyBwcm9kdWNlZCBieSA8ZnVuY3Rpb24+SlNPTl9UQUJMRTwvZnVu Y3Rpb24+IGFyZSBsYXRlcmFsbHkKKyAgIGpvaW5lZCB0byB0aGUgcm93IHRoYXQgZ2VuZXJhdGVk IHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBleHBsaWNpdGx5IGpvaW4KKyAgIHRoZSBjb25z dHJ1Y3RlZCB2aWV3IHdpdGggdGhlIG9yaWdpbmFsIHRhYmxlIGhvbGRpbmcgPGFjcm9ueW0+SlNP TjwvYWNyb255bT4KKyAgIGRhdGEuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBob3cgdG8g am9pbiB0aGUgY29sdW1ucyByZXR1cm5lZAorICAgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+IHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2UuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIEVhY2ggPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IGNs YXVzZSBjYW4gZ2VuZXJhdGUgb25lIG9yIG1vcmUKKyAgIGNvbHVtbnMuIENvbHVtbnMgcHJvZHVj ZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+cyBhdCB0aGUKKyAgIHNhbWUgbGV2 ZWwgYXJlIGNvbnNpZGVyZWQgdG8gYmUgPGZpcnN0dGVybT5zaWJsaW5nczwvZmlyc3R0ZXJtPiwK KyAgIHdoaWxlIGEgY29sdW1uIHByb2R1Y2VkIGJ5IGEgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+IGlzCisgICBjb25zaWRlcmVkIHRvIGJlIGEgY2hpbGQgb2YgdGhlIGNvbHVtbiBwcm9k dWNlZCBieSBhCisgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gb3Igcm93IGV4cHJl c3Npb24gYXQgYSBoaWdoZXIgbGV2ZWwuCisgICBTaWJsaW5nIGNvbHVtbnMgYXJlIGFsd2F5cyBq b2luZWQgZmlyc3QuIE9uY2UgdGhleSBhcmUgcHJvY2Vzc2VkLAorICAgdGhlIHJlc3VsdGluZyBy b3dzIGFyZSBqb2luZWQgdG8gdGhlIHBhcmVudCByb3cuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFRoZSBzeW50YXggaXM6CisgIDwvcGFyYT4KKworPHN5bm9wc2lzPgorSlNPTl9UQUJMRSAo CisgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxl PnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gQVMgPHJlcGxhY2VhYmxl Pmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlvbmFsPiBQQVNT SU5HIHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gQVMgPHJlcGxhY2VhYmxlPnZh cm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+IDwvb3B0aW9u YWw+CisgIENPTFVNTlMgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJs ZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiApCisgIDxv cHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwvbGl0 ZXJhbD4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgPG9wdGlv bmFsPgorICAgIFBMQU4gKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJs ZV9wbGFuPC9yZXBsYWNlYWJsZT4gKSB8CisgICAgUExBTiBERUZBVUxUICggeyBJTk5FUiB8IE9V VEVSIH0gPG9wdGlvbmFsPiAsIHsgQ1JPU1MgfCBVTklPTiB9IDwvb3B0aW9uYWw+CisgICAgICAg ICAgICAgICAgIHwgeyBDUk9TUyB8IFVOSU9OIH0gPG9wdGlvbmFsPiAsIHsgSU5ORVIgfCBPVVRF UiB9IDwvb3B0aW9uYWw+ICkKKyAgPC9vcHRpb25hbD4KKykKKworPHBocmFzZT4KK3doZXJlIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFi bGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8 cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gUEFUSCA8cmVwbGFjZWFi bGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAg ICAgICA8b3B0aW9uYWw+IHsgV0lUSE9VVCB8IFdJVEggeyBDT05ESVRJT05BTCB8IDxvcHRpb25h bD5VTkNPTkRJVElPTkFMPC9vcHRpb25hbD4gfSB9IDxvcHRpb25hbD4gQVJSQVkgPC9vcHRpb25h bD4gV1JBUFBFUiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgS0VFUCB8IE9NSVQg fSBRVU9URVMgPG9wdGlvbmFsPiBPTiBTQ0FMQVIgU1RSSU5HIDwvb3B0aW9uYWw+IDwvb3B0aW9u YWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwgfCBERUZBVUxUIDxyZXBsYWNl YWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFTVBUWSA8L29wdGlvbmFsPgorICAg ICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgREVGQVVMVCA8cmVwbGFjZWFibGU+ZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04gRVJST1IgPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFj ZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4g Rk9STUFUIEpTT04gPG9wdGlvbmFsPkVOQ09ESU5HIDxsaXRlcmFsPlVURjg8L2xpdGVyYWw+PC9v cHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhf c3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25h bD4geyBXSVRIT1VUIHwgV0lUSCB7IENPTkRJVElPTkFMIHwgPG9wdGlvbmFsPlVOQ09ORElUSU9O QUw8L29wdGlvbmFsPiB9IH0gPG9wdGlvbmFsPiBBUlJBWSA8L29wdGlvbmFsPiBXUkFQUEVSIDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBLRUVQIHwgT01JVCB9IFFVT1RFUyA8b3B0 aW9uYWw+IE9OIFNDQUxBUiBTVFJJTkcgPC9vcHRpb25hbD4gPC9vcHRpb25hbD4KKyAgICAgICAg PG9wdGlvbmFsPiB7IEVSUk9SIHwgTlVMTCB8IEVNUFRZIHsgQVJSQVkgfCBPQkpFQ1QgfSB8IERF RkFVTFQgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IE9OIEVNUFRZIDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwgfCBFTVBUWSB7IEFS UkFZIHwgT0JKRUNUIH0gfCBERUZBVUxUIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNl YWJsZT4gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBs YWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiBFWElTVFMgPG9wdGlvbmFs PiBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+ IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IFRSVUUgfCBGQUxTRSB8 IFVOS05PV04gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IE5FU1RFRCBQQVRIIDxyZXBsYWNl YWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gQVMg PHJlcGxhY2VhYmxlPnBhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAg IENPTFVNTlMgKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8 b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiApCisgIHwgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxh Y2VhYmxlPiBGT1IgT1JESU5BTElUWQorPHBocmFzZT4KKzxyZXBsYWNlYWJsZT5qc29uX3RhYmxl X3BsYW48L3JlcGxhY2VhYmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxyZXBsYWNlYWJsZT5qc29u X3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4geyBPVVRFUiB8IElOTkVSIH0gPHJl cGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4gPC9vcHRpb25h bD4KKyAgfCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxl PiB7IFVOSU9OIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFjZWFi bGU+IH0gPG9wdGlvbmFsPi4uLjwvb3B0aW9uYWw+CisgIHwgPHJlcGxhY2VhYmxlPmpzb25fdGFi bGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4geyBDUk9TUyA8cmVwbGFjZWFibGU+anNvbl90 YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4uLi48L29wdGlvbmFs PgorPHBocmFzZT4KKzxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFj ZWFibGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9y ZXBsYWNlYWJsZT4gfCAoIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW48L3JlcGxhY2VhYmxl PiApCis8L3N5bm9wc2lzPgorCisgIDxwYXJhPgorICAgRWFjaCBzeW50YXggZWxlbWVudCBpcyBk ZXNjcmliZWQgYmVsb3cgaW4gbW9yZSBkZXRhaWwuCisgIDwvcGFyYT4KKworICA8dmFyaWFibGVs aXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+PHJlcGxh Y2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHBy ZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJl cGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9wdGlv bmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVw bGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwvcmVw bGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPjwvbGl0ZXJh bD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBUaGUgaW5w dXQgZGF0YSB0byBxdWVyeSwgdGhlIEpTT04gcGF0aCBleHByZXNzaW9uIGRlZmluaW5nIHRoZSBx dWVyeSwKKyAgICAgYW5kIGFuIG9wdGlvbmFsIDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IGNs YXVzZSwgd2hpY2ggY2FuIHByb3ZpZGUgZGF0YQorICAgICB2YWx1ZXMgdG8gdGhlIDxyZXBsYWNl YWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPi4KKyAgICAgVGhlIHJlc3VsdCBvZiB0 aGUgaW5wdXQgZGF0YQorICAgICBldmFsdWF0aW9uIGlzIGNhbGxlZCB0aGUgPGZpcnN0dGVybT5y b3cgcGF0dGVybjwvZmlyc3R0ZXJtPi4gVGhlIHJvdworICAgICBwYXR0ZXJuIGlzIHVzZWQgYXMg dGhlIHNvdXJjZSBmb3Igcm93IHZhbHVlcyBpbiB0aGUgY29uc3RydWN0ZWQgdmlldy4KKyAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiggPHJl cGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4u PC9vcHRpb25hbD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4K KyAgICAgVGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZSBkZWZpbmluZyB0aGUg c2NoZW1hIG9mIHRoZQorICAgICBjb25zdHJ1Y3RlZCB2aWV3LiBJbiB0aGlzIGNsYXVzZSwgeW91 IG11c3Qgc3BlY2lmeSBhbGwgdGhlIGNvbHVtbnMKKyAgICAgdG8gYmUgZmlsbGVkIHdpdGggU1FM L0pTT04gaXRlbXMuCisgICAgIFRoZSA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3Jl cGxhY2VhYmxlPgorICAgICBleHByZXNzaW9uIGhhcyB0aGUgZm9sbG93aW5nIHN5bnRheCB2YXJp YW50czoKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJs ZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgIDxvcHRpb25hbD4g PGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0 aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD48L2xpdGVyYWw+CisgICAgPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJbnNlcnRzIGEgc2luZ2xlIFNRTC9KU09O IGl0ZW0gaW50byB0aGUgb3V0cHV0IHJvdy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAg IFRoZSBwcm92aWRlZCA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIGlzIGV2YWx1 YXRlZCBhbmQKKyAgICAgdGhlIGNvbHVtbiBpcyBmaWxsZWQgd2l0aCB0aGUgcHJvZHVjZWQgU1FM L0pTT04gaXRlbSwgb25lIGZvciBlYWNoIHJvdy4KKyAgICAgSWYgdGhlIDxsaXRlcmFsPlBBVEg8 L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgb21pdHRlZCwKKyAgICAgPGZ1bmN0aW9uPkpTT05fVEFC TEU8L2Z1bmN0aW9uPiB1c2VzIHRoZQorICAgICA8bGl0ZXJhbD4kLjxyZXBsYWNlYWJsZT5uYW1l PC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+IHBhdGggZXhwcmVzc2lvbiwKKyAgICAgd2hlcmUgPHJl cGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQgY29sdW1uIG5hbWUu CisgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvbHVtbiBuYW1lIG11c3QgY29ycmVzcG9uZCB0byBv bmUgb2YgdGhlCisgICAgIGtleXMgd2l0aGluIHRoZSBTUUwvSlNPTiBpdGVtIHByb2R1Y2VkIGJ5 IHRoZSByb3cgcGF0dGVybi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIE9wdGlvbmFs bHksIHlvdSBjYW4gc3BlY2lmeSA8bGl0ZXJhbD5XUkFQUEVSPC9saXRlcmFsPiwKKyAgICAgPGxp dGVyYWw+UVVPVEVTPC9saXRlcmFsPiBjbGF1c2VzIHRvIGZvcm1hdCB0aGUgb3V0cHV0IGFuZAor ICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPk9OIEVSUk9SPC9s aXRlcmFsPiB0byBoYW5kbGUKKyAgICAgdGhvc2UgbWlzc2luZyB2YWx1ZXMgYW5kIHN0cnVjdHVy YWwgZXJyb3JzLCByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorICAgIDxub3RlPgorICAgICA8 cGFyYT4KKyAgICAgIFRoaXMgY2xhdXNlIGlzIGludGVybmFsbHkgdHVybmVkIGludG8gYW5kIGhh cyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKKyAgICAgIDxmdW5jdGlvbj5qc29uX3ZhbHVlPC9mdW5j dGlvbj4gYW5kIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAgICBUaGUgbGF0 dGVyIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyBub3QgYSBzY2FsYXIgdHlwZSBvciBpZgorICAg ICAgPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFs PiBjbGF1c2UgaXMKKyAgICAgIHByZXNlbnQuCisgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPgorICAgICA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+Rk9STUFUIEpTT048L2xpdGVyYWw+IDxv cHRpb25hbD5FTkNPRElORyA8bGl0ZXJhbD5VVEY4PC9saXRlcmFsPjwvb3B0aW9uYWw+CisgICAg ICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNv bl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgIDwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgSW5zZXJ0cyBhIGNvbXBvc2l0 ZSBTUUwvSlNPTiBpdGVtIGludG8gdGhlIG91dHB1dCByb3cuCisgICAgPC9wYXJhPgorICAgIDxw YXJhPgorICAgICBUaGUgcHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZXhwcmVzc2lv biBpcyBldmFsdWF0ZWQgYW5kCisgICAgIHRoZSBjb2x1bW4gaXMgZmlsbGVkIHdpdGggdGhlIHBy b2R1Y2VkIFNRTC9KU09OIGl0ZW0uICBJZiB0aGUKKyAgICAgPGxpdGVyYWw+UEFUSDwvbGl0ZXJh bD4gZXhwcmVzc2lvbiBpcyBvbWl0dGVkLCBwYXRoIGV4cHJlc3Npb24KKyAgICAgPGxpdGVyYWw+ JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiBpcyB1c2VkLAorICAg ICB3aGVyZSA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IGlzIHRoZSBwcm92aWRlZCBj b2x1bW4gbmFtZS4KKyAgICAgSW4gdGhpcyBjYXNlLCB0aGUgY29sdW1uIG5hbWUgbXVzdCBjb3Jy ZXNwb25kIHRvIG9uZSBvZiB0aGUKKyAgICAga2V5cyB3aXRoaW4gdGhlIFNRTC9KU09OIGl0ZW0g cHJvZHVjZWQgYnkgdGhlIHJvdyBwYXR0ZXJuLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAg ICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IDxsaXRlcmFsPldSQVBQRVI8L2xpdGVyYWw+ LAorICAgICA8bGl0ZXJhbD5RVU9URVM8L2xpdGVyYWw+IGNsYXVzZXMgdG8gZm9ybWF0IHRoZSBv dXRwdXQgYW5kCisgICAgIDxsaXRlcmFsPk9OIEVNUFRZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ T04gRVJST1I8L2xpdGVyYWw+IHRvIGhhbmRsZQorICAgICB0aG9zZSBzY2VuYXJpb3MgYXBwcm9w cmlhdGVseS4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+CisgICAgIDxwYXJhPgorICAgICAgVGhp cyBjbGF1c2UgaXMgaW50ZXJuYWxseSB0dXJuZWQgaW50byBhbmQgaGFzIHRoZSBzYW1lIHNlbWFu dGljcyBhcworICAgICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4KKyAgICAgPC9w YXJhPgorICAgIDwvbm90ZT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisK KyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgICAgPHJlcGxhY2VhYmxlPm5hbWU8 L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+CisgICAgICAgPGxp dGVyYWw+RVhJU1RTPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+ IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0 aW9uYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJ bnNlcnRzIGEgYm9vbGVhbiBpdGVtIGludG8gZWFjaCBvdXRwdXQgcm93LgorICAgIDwvcGFyYT4K KyAgICA8cGFyYT4KKyAgICAgVGhlIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHdoZXRoZXIgZXZhbHVh dGluZyB0aGUgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4KKyAgICAgZXhwcmVzc2lvbiB5aWVsZHMg YW55IFNRTC9KU09OIGl0ZW1zLiAgSWYgdGhlIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+CisgICAg IGV4cHJlc3Npb24gaXMgb21pdHRlZCwgcGF0aCBleHByZXNzaW9uCisgICAgIDxsaXRlcmFsPiQu PHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4gaXMgdXNlZCwKKyAgICAg d2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQgY29s dW1uIG5hbWUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUaGUgc3BlY2lmaWVkIDxw YXJhbWV0ZXI+dHlwZTwvcGFyYW1ldGVyPiBzaG91bGQgaGF2ZSBhIGNhc3QgZnJvbSB0aGUKKyAg ICAgPHR5cGU+Ym9vbGVhbjwvdHlwZT4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBP cHRpb25hbGx5LCB5b3UgY2FuIGFkZCA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNl IHRvIGRlZmluZQorICAgICBlcnJvciBiZWhhdmlvci4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+ CisgICAgIDxwYXJhPgorICAgICAgVGhpcyBjbGF1c2UgaXMgaW50ZXJuYWxseSB0dXJuZWQgaW50 byBhbmQgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcworICAgICAgPGZ1bmN0aW9uPmpzb25fZXhp c3RzPC9mdW5jdGlvbj4uCisgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICAgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3Bh dGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+QVM8L2xp dGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+CisgICAgICAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4gKCA8cmVwbGFjZWFibGU+ anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFs PiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBFeHRy YWN0cyBTUUwvSlNPTiBpdGVtcyBmcm9tIG5lc3RlZCBsZXZlbHMgb2YgdGhlIHJvdyBwYXR0ZXJu LAorICAgICBnZW5lcmF0ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBhcyBkZWZpbmVkIGJ5IHRoZSA8 bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPgorICAgICBzdWJjbGF1c2UsIGFuZCBpbnNlcnRzIHRo ZSBleHRyYWN0ZWQgU1FML0pTT04gaXRlbXMgaW50byBlYWNoIHJvdyBvZiB0aGVzZSBjb2x1bW5z LgorICAgICBUaGUgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4g ZXhwcmVzc2lvbiBpbiB0aGUKKyAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4gc3ViY2xh dXNlIHVzZXMgdGhlIHNhbWUgc3ludGF4IGFzIGluIHRoZQorICAgICBwYXJlbnQgPGxpdGVyYWw+ Q09MVU1OUzwvbGl0ZXJhbD4gY2xhdXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAg ICBUaGUgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IHN5bnRheCBpcyByZWN1cnNpdmUs CisgICAgIHNvIHlvdSBjYW4gZ28gZG93biBtdWx0aXBsZSBuZXN0ZWQgbGV2ZWxzIGJ5IHNwZWNp Znlpbmcgc2V2ZXJhbAorICAgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gc3ViY2xh dXNlcyB3aXRoaW4gZWFjaCBvdGhlci4KKyAgICAgSXQgYWxsb3dzIHRvIHVubmVzdCB0aGUgaGll cmFyY2h5IG9mIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzCisgICAgIGluIGEgc2luZ2xlIGZ1bmN0 aW9uIGludm9jYXRpb24gcmF0aGVyIHRoYW4gY2hhaW5pbmcgc2V2ZXJhbAorICAgICA8ZnVuY3Rp b24+SlNPTl9UQUJMRTwvZnVuY3Rpb24+IGV4cHJlc3Npb25zIGluIGFuIFNRTCBzdGF0ZW1lbnQu CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFlvdSBjYW4gdXNlIHRoZSA8bGl0ZXJh bD5QTEFOPC9saXRlcmFsPiBjbGF1c2UgdG8gZGVmaW5lIGhvdworICAgICB0byBqb2luIHRoZSBj b2x1bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBjbGF1c2Vz LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBs YWNlYWJsZT4gPGxpdGVyYWw+Rk9SIE9SRElOQUxJVFk8L2xpdGVyYWw+CisgICAgPC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBBZGRzIGFuIG9yZGluYWxpdHkgY29s dW1uIHRoYXQgcHJvdmlkZXMgc2VxdWVudGlhbCByb3cgbnVtYmVyaW5nLgorICAgICBZb3UgY2Fu IGhhdmUgb25seSBvbmUgb3JkaW5hbGl0eSBjb2x1bW4gcGVyIHRhYmxlLiBSb3cgbnVtYmVyaW5n CisgICAgIGlzIDEtYmFzZWQuIEZvciBjaGlsZCByb3dzIHRoYXQgcmVzdWx0IGZyb20gdGhlIDxs aXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPgorICAgICBjbGF1c2VzLCB0aGUgcGFyZW50IHJv dyBudW1iZXIgaXMgcmVwZWF0ZWQuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxs aXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX25hbWU8L3JlcGxhY2Vh YmxlPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVGhl IG9wdGlvbmFsIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IHNlcnZl cyBhcyBhbgorICAgICBpZGVudGlmaWVyIG9mIHRoZSBwcm92aWRlZCA8cmVwbGFjZWFibGU+anNv bl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPi4KKyAgICAgVGhlIHBhdGggbmFtZSBt dXN0IGJlIHVuaXF1ZSBhbmQgZGlzdGluY3QgZnJvbSB0aGUgY29sdW1uIG5hbWVzLgorICAgICBX aGVuIHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiBjbGF1c2UsIHlvdSBtdXN0IHNw ZWNpZnkgdGhlIG5hbWVzCisgICAgIGZvciBhbGwgdGhlIHBhdGhzLCBpbmNsdWRpbmcgdGhlIHJv dyBwYXR0ZXJuLiBFYWNoIHBhdGggbmFtZSBjYW4gYXBwZWFyIGluCisgICAgIHRoZSA8bGl0ZXJh bD5QTEFOPC9saXRlcmFsPiBjbGF1c2Ugb25seSBvbmNlLgorICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+CisgICAgIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+ICggPHJlcGxhY2VhYmxlPmpzb25fdGFi bGVfcGxhbjwvcmVwbGFjZWFibGU+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisg ICAgPHBhcmE+CisgICAgIERlZmluZXMgaG93IHRvIGpvaW4gdGhlIGRhdGEgcmV0dXJuZWQgYnkg PGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+CisgICAgIGNsYXVzZXMgdG8gdGhlIGNvbnN0 cnVjdGVkIHZpZXcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUbyBqb2luIGNvbHVt bnMgd2l0aCBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwLCB5b3UgY2FuIHVzZToKKyAgICA8L3Bh cmE+CisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8bGl0ZXJhbD5JTk5FUjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor CisgICAgPHBhcmE+CisgICAgIFVzZSA8bGl0ZXJhbD5JTk5FUiBKT0lOPC9saXRlcmFsPiwgc28g dGhhdCB0aGUgcGFyZW50IHJvdworICAgICBpcyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dCBpZiBp dCBkb2VzIG5vdCBoYXZlIGFueSBjaGlsZCByb3dzCisgICAgIGFmdGVyIGpvaW5pbmcgdGhlIGRh dGEgcmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+LgorICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPk9VVEVSPC9saXRlcmFsPgorICAgIDwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVXNlIDxsaXRlcmFsPkxFRlQg T1VURVIgSk9JTjwvbGl0ZXJhbD4sIHNvIHRoYXQgdGhlIHBhcmVudCByb3cKKyAgICAgaXMgYWx3 YXlzIGluY2x1ZGVkIGludG8gdGhlIG91dHB1dCBldmVuIGlmIGl0IGRvZXMgbm90IGhhdmUgYW55 IGNoaWxkIHJvd3MKKyAgICAgYWZ0ZXIgam9pbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieSA8bGl0 ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4sIHdpdGggTlVMTCB2YWx1ZXMKKyAgICAgaW5zZXJ0 ZWQgaW50byB0aGUgY2hpbGQgY29sdW1ucyBpZiB0aGUgY29ycmVzcG9uZGluZworICAgICB2YWx1 ZXMgYXJlIG1pc3NpbmcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBUaGlzIGlzIHRo ZSBkZWZhdWx0IG9wdGlvbiBmb3Igam9pbmluZyBjb2x1bW5zIHdpdGggcGFyZW50L2NoaWxkIHJl bGF0aW9uc2hpcC4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICAgICA8cGFyYT4KKyAgICAgVG8gam9pbiBzaWJs aW5nIGNvbHVtbnMsIHlvdSBjYW4gdXNlOgorICAgIDwvcGFyYT4KKworICA8dmFyaWFibGVsaXN0 PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+VU5JT048L2xp dGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBH ZW5lcmF0ZSBvbmUgcm93IGZvciBlYWNoIHZhbHVlIHByb2R1Y2VkIGJ5IGVhY2ggb2YgdGhlIHNp YmxpbmcKKyAgICAgY29sdW1ucy4gVGhlIGNvbHVtbnMgZnJvbSB0aGUgb3RoZXIgc2libGluZ3Mg YXJlIHNldCB0byBudWxsLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhpcyBpcyB0 aGUgZGVmYXVsdCBvcHRpb24gZm9yIGpvaW5pbmcgc2libGluZyBjb2x1bW5zLgorICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50 cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPkNST1NTPC9saXRlcmFsPgorICAgIDwvdGVy bT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2VuZXJhdGUgb25lIHJvdyBm b3IgZWFjaCBjb21iaW5hdGlvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgc2libGluZyBjb2x1bW5zLgor ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92 YXJpYWJsZWxpc3Q+CisKKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPlBMQU4gREVGQVVMVDwv bGl0ZXJhbD4gKCA8bGl0ZXJhbD48cmVwbGFjZWFibGU+T1VURVIgfCBJTk5FUjwvcmVwbGFjZWFi bGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5VTklPTiB8IENST1NTPC9yZXBsYWNlYWJsZT4g PC9vcHRpb25hbD48L2xpdGVyYWw+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIFRoZSB0ZXJtcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW4gcmV2ZXJz ZSBvcmRlci4gVGhlCisgICAgICA8bGl0ZXJhbD5JTk5FUjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+ T1VURVI8L2xpdGVyYWw+IG9wdGlvbiBkZWZpbmVzIHRoZQorICAgICAgam9pbmluZyBwbGFuIGZv ciBwYXJlbnQvY2hpbGQgY29sdW1ucywgd2hpbGUgPGxpdGVyYWw+VU5JT048L2xpdGVyYWw+IG9y CisgICAgICA8bGl0ZXJhbD5DUk9TUzwvbGl0ZXJhbD4gYWZmZWN0cyBqb2lucyBvZiBzaWJsaW5n IGNvbHVtbnMuIFRoaXMgZm9ybQorICAgICAgb2YgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gb3Zl cnJpZGVzIHRoZSBkZWZhdWx0IHBsYW4gZm9yCisgICAgICBhbGwgY29sdW1ucyBhdCBvbmNlLiBF dmVuIHRob3VnaCB0aGUgcGF0aCBuYW1lcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZQorICAgICAg PGxpdGVyYWw+UExBTiBERUZBVUxUPC9saXRlcmFsPiBmb3JtLCB0byBjb25mb3JtIHRvIHRoZSBT UUwvSlNPTiBzdGFuZGFyZAorICAgICAgdGhleSBtdXN0IGJlIHByb3ZpZGVkIGZvciBhbGwgdGhl IHBhdGhzIGlmIHRoZSA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPgorICAgICAgY2xhdXNlIGlzIHVz ZWQuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5QTEFOIERFRkFV TFQ8L2xpdGVyYWw+IGlzIHNpbXBsZXIgdGhhbiBzcGVjaWZ5aW5nIGEgY29tcGxldGUKKyAgICAg IDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+LCBhbmQgaXMgb2Z0ZW4gYWxsIHRoYXQgaXMgcmVxdWly ZWQgdG8gZ2V0IHRoZSBkZXNpcmVkCisgICAgICBvdXRwdXQuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorCisgIDxw YXJhPkV4YW1wbGVzPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICBJbiB0aGVzZSBleGFtcGxl cyB0aGUgZm9sbG93aW5nIHNtYWxsIHRhYmxlIHN0b3Jpbmcgc29tZSBKU09OIGRhdGEgd2lsbCBi ZSB1c2VkOgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIFRBQkxFIG15X2ZpbG1zICgganMganNv bmIgKTsKKworSU5TRVJUIElOVE8gbXlfZmlsbXMgVkFMVUVTICgKKyd7ICJmYXZvcml0ZXMiIDog WworICAgeyAia2luZCIgOiAiY29tZWR5IiwgImZpbG1zIiA6IFsKKyAgICAgeyAidGl0bGUiIDog IkJhbmFuYXMiLAorICAgICAgICJkaXJlY3RvciIgOiAiV29vZHkgQWxsZW4ifSwKKyAgICAgeyAi dGl0bGUiIDogIlRoZSBEaW5uZXIgR2FtZSIsCisgICAgICAgImRpcmVjdG9yIiA6ICJGcmFuY2lz IFZlYmVyIiB9IF0gfSwKKyAgIHsgImtpbmQiIDogImhvcnJvciIsICJmaWxtcyIgOiBbCisgICAg IHsgInRpdGxlIiA6ICJQc3ljaG8iLAorICAgICAgICJkaXJlY3RvciIgOiAiQWxmcmVkIEhpdGNo Y29jayIgfSBdIH0sCisgICB7ICJraW5kIiA6ICJ0aHJpbGxlciIsICJmaWxtcyIgOiBbCisgICAg IHsgInRpdGxlIiA6ICJWZXJ0aWdvIiwKKyAgICAgICAiZGlyZWN0b3IiIDogIkFsZnJlZCBIaXRj aGNvY2siIH0gXSB9LAorICAgeyAia2luZCIgOiAiZHJhbWEiLCAiZmlsbXMiIDogWworICAgICB7 ICJ0aXRsZSIgOiAiWW9qaW1ibyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJBa2lyYSBLdXJvc2F3 YSIgfSBdIH0KKyAgXSB9Jyk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICA8L3BhcmE+CisgICAg IDxwYXJhPgorICAgICAgUXVlcnkgdGhlIDxzdHJ1Y3RuYW1lPm15X2ZpbG1zPC9zdHJ1Y3RuYW1l PiB0YWJsZSBob2xkaW5nCisgICAgICBzb21lIEpTT04gZGF0YSBhYm91dCB0aGUgZmlsbXMgYW5k IGNyZWF0ZSBhIHZpZXcgdGhhdAorICAgICAgZGlzdHJpYnV0ZXMgdGhlIGZpbG0gZ2VucmUsIHRp dGxlLCBhbmQgZGlyZWN0b3IgYmV0d2VlbiBzZXBhcmF0ZSBjb2x1bW5zOgorPHNjcmVlbj4KK1NF TEVDVCBqdC4qIEZST00KKyBteV9maWxtcywKKyBKU09OX1RBQkxFICgganMsICckLmZhdm9yaXRl c1sqXScgQ09MVU1OUyAoCisgICBpZCBGT1IgT1JESU5BTElUWSwKKyAgIGtpbmQgdGV4dCBQQVRI ICckLmtpbmQnLAorICAgTkVTVEVEIFBBVEggJyQuZmlsbXNbKl0nIENPTFVNTlMgKAorICAgICB0 aXRsZSB0ZXh0IFBBVEggJyQudGl0bGUnLAorICAgICBkaXJlY3RvciB0ZXh0IFBBVEggJyQuZGly ZWN0b3InKSkpIEFTIGp0OworLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tCisgaWQgfCAgIGtpbmQgICB8ICAgICAgIHRpdGxlICAgICAgfCAgICBk aXJlY3RvcgorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tCisgMSAgfCBjb21lZHkgICB8IEJhbmFuYXMgICAgICAgICAgfCBXb29keSBBbGxlbgor IDEgIHwgY29tZWR5ICAgfCBUaGUgRGlubmVyIEdhbWUgIHwgRnJhbmNpcyBWZWJlcgorIDIgIHwg aG9ycm9yICAgfCBQc3ljaG8gICAgICAgICAgIHwgQWxmcmVkIEhpdGNoY29jaworIDMgIHwgdGhy aWxsZXIgfCBWZXJ0aWdvICAgICAgICAgIHwgQWxmcmVkIEhpdGNoY29jaworIDQgIHwgZHJhbWEg ICAgfCBZb2ppbWJvICAgICAgICAgIHwgQWtpcmEgS3Vyb3Nhd2EKKyAoNSByb3dzKQorPC9zY3Jl ZW4+CisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgIEZpbmQgYSBkaXJlY3RvciB0 aGF0IGhhcyBkb25lIGZpbG1zIGluIHR3byBkaWZmZXJlbnQgZ2VucmVzOgorPHNjcmVlbj4KK1NF TEVDVAorICBkaXJlY3RvcjEgQVMgZGlyZWN0b3IsIHRpdGxlMSwga2luZDEsIHRpdGxlMiwga2lu ZDIKK0ZST00KKyAgbXlfZmlsbXMsCisgIEpTT05fVEFCTEUgKCBqcywgJyQuZmF2b3JpdGVzJyBB UyBmYXZzIENPTFVNTlMgKAorICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBmaWxtczEgQ09MVU1O UyAoCisgICAgICBraW5kMSB0ZXh0IFBBVEggJyQua2luZCcsCisgICAgICBORVNURUQgUEFUSCAn JC5maWxtc1sqXScgQVMgZmlsbTEgQ09MVU1OUyAoCisgICAgICAgIHRpdGxlMSB0ZXh0IFBBVEgg JyQudGl0bGUnLAorICAgICAgICBkaXJlY3RvcjEgdGV4dCBQQVRIICckLmRpcmVjdG9yJykKKyAg ICApLAorICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBmaWxtczIgQ09MVU1OUyAoCisgICAgICBr aW5kMiB0ZXh0IFBBVEggJyQua2luZCcsCisgICAgICBORVNURUQgUEFUSCAnJC5maWxtc1sqXScg QVMgZmlsbTIgQ09MVU1OUyAoCisgICAgICAgIHRpdGxlMiB0ZXh0IFBBVEggJyQudGl0bGUnLAor ICAgICAgICBkaXJlY3RvcjIgdGV4dCBQQVRIICckLmRpcmVjdG9yJworICAgICAgKQorICAgICkK KyAgICkKKyAgIFBMQU4gKGZhdnMgT1VURVIgKChmaWxtczEgSU5ORVIgZmlsbTEpIENST1NTIChm aWxtczIgSU5ORVIgZmlsbTIpKSkKKyAgKSBBUyBqdAorIFdIRVJFIGtpbmQxID4ga2luZDIgQU5E IGRpcmVjdG9yMSA9IGRpcmVjdG9yMjsKKworICAgICBkaXJlY3RvciAgICAgfCB0aXRsZTEgIHwg IGtpbmQxICAgfCB0aXRsZTIgfCBraW5kMgorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tCisgQWxmcmVkIEhpdGNoY29jayB8IFZlcnRpZ28g fCB0aHJpbGxlciB8IFBzeWNobyB8IGhvcnJvcgorKDEgcm93KQorPC9zY3JlZW4+CisgICAgIDwv cGFyYT4KKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImZ1bmN0aW9ucy1z ZXF1ZW5jZSI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50 eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggNzU5OGJkOGYy Mi4uOTUwMGE4MGY0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVy ZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApAQCAtNTUx LDEwICs1NTEsMTAgQEAgVDgxNAlDb2xvbiBpbiBKU09OX09CSkVDVCBvciBKU09OX09CSkVDVEFH RwkJCVlFUwogVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVyYXRvcnMJCQlZRVMJCiBUODIy CVNRTC9KU09OOiBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMgcHJlZGljYXRlCQkJWUVTCQogVDgy MwlTUUwvSlNPTjogUEFTU0lORyBjbGF1c2UJCQlZRVMJCi1UODI0CUpTT05fVEFCTEU6IHNwZWNp ZmljIFBMQU4gY2xhdXNlCQkJTk8JCitUODI0CUpTT05fVEFCTEU6IHNwZWNpZmljIFBMQU4gY2xh dXNlCQkJWUVTCQogVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVSUk9SIGNsYXVzZXMJ CQlZRVMJCiBUODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBFUlJPUiBvciBPTiBF TVBUWSBjbGF1c2VzCQkJWUVTCQotVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5nIE5FU1RFRCBDT0xV TU5TIGNsYXVzZXMJCQlOTwkKK1Q4MjcJSlNPTl9UQUJMRTogc2libGluZyBORVNURUQgQ09MVU1O UyBjbGF1c2VzCQkJWUVTCQogVDgyOAlKU09OX1FVRVJZCQkJWUVTCQogVDgyOQlKU09OX1FVRVJZ OiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZRVMJCiBUODMwCUVuZm9yY2luZyB1bmlxdWUga2V5 cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlZRVMJCkBAIC01NjUsNyArNTY1 LDcgQEAgVDgzNAlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiB3aWxkY2FyZCBtZW1iZXIgYWNjZXNz b3IJCQlZRVMKIFQ4MzUJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogZmlsdGVyIGV4cHJlc3Npb25z CQkJWUVTCQogVDgzNglTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBzdGFydHMgd2l0aCBwcmVkaWNh dGUJCQlZRVMJCiBUODM3CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHJlZ2V4X2xpa2UgcHJlZGlj YXRlCQkJWUVTCQotVDgzOAlKU09OX1RBQkxFOiBQTEFOIERFRkFVTFQgY2xhdXNlCQkJTk8JCitU ODM4CUpTT05fVEFCTEU6IFBMQU4gREVGQVVMVCBjbGF1c2UJCQlZRVMJCiBUODM5CUZvcm1hdHRl ZCBjYXN0IG9mIGRhdGV0aW1lcyB0by9mcm9tIGNoYXJhY3RlciBzdHJpbmdzCQkJTk8JCiBUODQw CUhleCBpbnRlZ2VyIGxpdGVyYWxzIGluIFNRTC9KU09OIHBhdGggbGFuZ3VhZ2UJCQlZRVMJCiBU ODUxCVNRTC9KU09OOiBvcHRpb25hbCBrZXl3b3JkcyBmb3IgZGVmYXVsdCBzeW50YXgJCQlZRVMJ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCBhN2QzY2I0OGFhLi44ZDA0 MDkyZWNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTQzNDEsNiAr NDM0MSwxMiBAQCBFeGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wLAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJ CXBvc3RfZXZhbC0+anVtcF9ldmFsX2NvZXJjaW9uID0gLTE7CisJCQkqb3AtPnJlc3ZhbHVlID0g aXRlbTsKKwkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoK IAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU1FML0pTT04gZXhwcmVzc2lvbiBvcCAlZCIs IGpleHByLT5vcCk7CiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRh YmxlRnVuY3NjYW4uYwppbmRleCA3MmNhMzRhMjI4Li45OWZiOTI4OTRjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVUYWJsZUZ1bmNzY2FuLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy94bWwuaCIKQEAgLTE2MSw4ICsxNjIsOSBAQCBFeGVjSW5pdFRhYmxlRnVuY1NjYW4o VGFibGVGdW5jU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJc2NhbnN0 YXRlLT5zcy5wcy5xdWFsID0KIAkJRXhlY0luaXRRdWFsKG5vZGUtPnNjYW4ucGxhbi5xdWFsLCAm c2NhbnN0YXRlLT5zcy5wcyk7CiAKLQkvKiBPbmx5IFhNTFRBQkxFIGlzIHN1cHBvcnRlZCBjdXJy ZW50bHkgKi8KLQlzY2Fuc3RhdGUtPnJvdXRpbmUgPSAmWG1sVGFibGVSb3V0aW5lOworCS8qIE9u bHkgWE1MVEFCTEUgYW5kIEpTT05fVEFCTEUgYXJlIHN1cHBvcnRlZCBjdXJyZW50bHkgKi8KKwlz Y2Fuc3RhdGUtPnJvdXRpbmUgPQorCQl0Zi0+ZnVuY3R5cGUgPT0gVEZUX1hNTFRBQkxFID8gJlht bFRhYmxlUm91dGluZSA6ICZKc29uYlRhYmxlUm91dGluZTsKIAogCXNjYW5zdGF0ZS0+cGVyVGFi bGVDeHQgPQogCQlBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCkBA IC0xODIsNiArMTg0LDEwIEBAIEV4ZWNJbml0VGFibGVGdW5jU2NhbihUYWJsZUZ1bmNTY2FuICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhlY0luaXRFeHByTGlzdCh0Zi0+ Y29sZXhwcnMsIChQbGFuU3RhdGUgKikgc2NhbnN0YXRlKTsKIAlzY2Fuc3RhdGUtPmNvbGRlZmV4 cHJzID0KIAkJRXhlY0luaXRFeHByTGlzdCh0Zi0+Y29sZGVmZXhwcnMsIChQbGFuU3RhdGUgKikg c2NhbnN0YXRlKTsKKwlzY2Fuc3RhdGUtPmNvbHZhbGV4cHJzID0KKwkJRXhlY0luaXRFeHByTGlz dCh0Zi0+Y29sdmFsZXhwcnMsIChQbGFuU3RhdGUgKikgc2NhbnN0YXRlKTsKKwlzY2Fuc3RhdGUt PnBhc3Npbmd2YWxleHBycyA9CisJCUV4ZWNJbml0RXhwckxpc3QodGYtPnBhc3Npbmd2YWxleHBy cywgKFBsYW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOwogCiAJc2NhbnN0YXRlLT5ub3RudWxscyA9IHRm LT5ub3RudWxsczsKIApAQCAtMzY5LDE0ICszNzUsMTcgQEAgdGZ1bmNJbml0aWFsaXplKFRhYmxl RnVuY1NjYW5TdGF0ZSAqdHN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIERhdHVtIGRvYykK IAkJcm91dGluZS0+U2V0TmFtZXNwYWNlKHRzdGF0ZSwgbnNfbmFtZSwgbnNfdXJpKTsKIAl9CiAK LQkvKiBJbnN0YWxsIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb24gaW50byB0aGUgdGFibGUgYnVp bGRlciBjb250ZXh0ICovCi0JdmFsdWUgPSBFeGVjRXZhbEV4cHIodHN0YXRlLT5yb3dleHByLCBl Y29udGV4dCwgJmlzbnVsbCk7Ci0JaWYgKGlzbnVsbCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX05VTExfVkFMVUVfTk9UX0FMTE9XRUQpLAotCQkJCSBlcnJtc2coInJv dyBmaWx0ZXIgZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBudWxsIikpKTsKKwlpZiAocm91dGluZS0+ U2V0Um93RmlsdGVyKQorCXsKKwkJLyogSW5zdGFsbCB0aGUgcm93IGZpbHRlciBleHByZXNzaW9u IGludG8gdGhlIHRhYmxlIGJ1aWxkZXIgY29udGV4dCAqLworCQl2YWx1ZSA9IEV4ZWNFdmFsRXhw cih0c3RhdGUtPnJvd2V4cHIsIGVjb250ZXh0LCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxM T1dFRCksCisJCQkJCSBlcnJtc2coInJvdyBmaWx0ZXIgZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBu dWxsIikpKTsKIAotCXJvdXRpbmUtPlNldFJvd0ZpbHRlcih0c3RhdGUsIFRleHREYXR1bUdldENT dHJpbmcodmFsdWUpKTsKKwkJcm91dGluZS0+U2V0Um93RmlsdGVyKHRzdGF0ZSwgVGV4dERhdHVt R2V0Q1N0cmluZyh2YWx1ZSkpOworCX0KIAogCS8qCiAJICogSW5zdGFsbCB0aGUgY29sdW1uIGZp bHRlciBleHByZXNzaW9ucyBpbnRvIHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21h a2VmdW5jcy5jCmluZGV4IDA5YTA1YTAzNzMuLmI4ZDM0NzcwZTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jCkBAIC01MzgsNiArNTM4LDIyIEBAIG1ha2VGdW5jRXhwcihPaWQgZnVuY2lkLCBPaWQgcmV0 dHlwZSwgTGlzdCAqYXJncywKIAlyZXR1cm4gZnVuY2V4cHI7CiB9CiAKKy8qCisgKiBtYWtlU3Ry aW5nQ29uc3QgLQorICogCWJ1aWxkIGEgQV9Db25zdCBub2RlIG9mIHR5cGUgVF9TdHJpbmcgZm9y IGdpdmVuIHN0cmluZworICovCitOb2RlICoKK21ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGlu dCBsb2NhdGlvbikKK3sKKwlBX0NvbnN0CSAgICpuID0gbWFrZU5vZGUoQV9Db25zdCk7CisKKwlu LT52YWwuc3ZhbC50eXBlID0gVF9TdHJpbmc7CisJbi0+dmFsLnN2YWwuc3ZhbCA9IHN0cjsKKwlu LT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisgICByZXR1cm4gKE5vZGUgKikgbjsKK30KKwogLyoK ICAqIG1ha2VEZWZFbGVtIC0KICAqCWJ1aWxkIGEgRGVmRWxlbSBub2RlCkBAIC04NzUsNiArODkx LDk4IEBAIG1ha2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpleHBy LCBKc29uQ29lcmNpb24gKmNvZXJjaW9uLAogCXJldHVybiBiZWhhdmlvcjsKIH0KIAorLyoKKyAq IG1ha2VKc29uVGFibGVQYXRoIC0KKyAqCQlNYWtlIEpzb25UYWJsZVBhdGggbm9kZSBmcm9tIGdp dmVuIHBhdGggc3RyaW5nIGFuZCBuYW1lIChpZiBhbnkpCisgKi8KK0pzb25UYWJsZVBhdGggKgor bWFrZUpzb25UYWJsZVBhdGgoQ29uc3QgKnBhdGh2YWx1ZSwgY2hhciAqcGF0aG5hbWUpCit7CisJ SnNvblRhYmxlUGF0aCAqcGF0aCA9IG1ha2VOb2RlKEpzb25UYWJsZVBhdGgpOworCisJQXNzZXJ0 KElzQShwYXRodmFsdWUsIENvbnN0KSk7CisJcGF0aC0+dmFsdWUgPSBwYXRodmFsdWU7CisJaWYg KHBhdGhuYW1lKQorCQlwYXRoLT5uYW1lID0gcGF0aG5hbWU7CisKKwlyZXR1cm4gcGF0aDsKK30K KworLyoKKyAqIG1ha2VKc29uVGFibGVQYXRoU3BlYyAtCisgKgkJTWFrZSBKc29uVGFibGVQYXRo U3BlYyBub2RlIGZyb20gZ2l2ZW4gcGF0aCBzdHJpbmcgYW5kIG5hbWUgKGlmIGFueSkKKyAqLwor Tm9kZSAqCittYWtlSnNvblRhYmxlUGF0aFNwZWMoY2hhciAqc3RyaW5nLCBjaGFyICpuYW1lLCBp bnQgc3RyaW5nX2xvY2F0aW9uLAorCQkJCQkgIGludCBuYW1lX2xvY2F0aW9uKQoreworCUpzb25U YWJsZVBhdGhTcGVjICpwYXRoc3BlYyA9IG1ha2VOb2RlKEpzb25UYWJsZVBhdGhTcGVjKTsKKwor CUFzc2VydChzdHJpbmcgIT0gTlVMTCk7CisJcGF0aHNwZWMtPnN0cmluZyA9IG1ha2VTdHJpbmdD b25zdChzdHJpbmcsIHN0cmluZ19sb2NhdGlvbik7CisJaWYgKG5hbWUgIT0gTlVMTCkKKwkJcGF0 aHNwZWMtPm5hbWUgPSBwc3RyZHVwKG5hbWUpOworCisJcGF0aHNwZWMtPm5hbWVfbG9jYXRpb24g PSBuYW1lX2xvY2F0aW9uOworCXBhdGhzcGVjLT5sb2NhdGlvbiA9IHN0cmluZ19sb2NhdGlvbjsK KworCXJldHVybiAoTm9kZSAqKSBwYXRoc3BlYzsKK30KKworLyoKKyAqIG1ha2VKc29uVGFibGVE ZWZhdWx0UGxhbiAtCisgKgkgICBjcmVhdGVzIGEgSnNvblRhYmxlUGxhblNwZWMgbm9kZSB0byBy ZXByZXNlbnQgYSAiZGVmYXVsdCIgSlNPTl9UQUJMRSBwbGFuCisgKgkgICB3aXRoIGdpdmVuIGpv aW4gc3RyYXRlZ3kKKyAqLworTm9kZSAqCittYWtlSnNvblRhYmxlRGVmYXVsdFBsYW4oSnNvblRh YmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZSwgaW50IGxvY2F0aW9uKQoreworCUpzb25UYWJsZVBs YW5TcGVjICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhblNwZWMpOworCisJbi0+cGxhbl90eXBl ID0gSlNUUF9ERUZBVUxUOworCW4tPmpvaW5fdHlwZSA9IGpvaW5fdHlwZTsKKwluLT5sb2NhdGlv biA9IGxvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIG47Cit9CisKKy8qCisgKiBtYWtlSnNv blRhYmxlU2ltcGxlUGxhbiAtCisgKgkgICBjcmVhdGVzIGEgSnNvblRhYmxlUGxhblNwZWMgbm9k ZSB0byByZXByZXNlbnQgYSAic2ltcGxlIiBKU09OX1RBQkxFIHBsYW4KKyAqCSAgIGZvciBnaXZl biBQQVRICisgKi8KK05vZGUgKgorbWFrZUpzb25UYWJsZVNpbXBsZVBsYW4oY2hhciAqcGF0aG5h bWUsIGludCBsb2NhdGlvbikKK3sKKwlKc29uVGFibGVQbGFuU3BlYyAqbiA9IG1ha2VOb2RlKEpz b25UYWJsZVBsYW5TcGVjKTsKKworCW4tPnBsYW5fdHlwZSA9IEpTVFBfU0lNUExFOworCW4tPnBh dGhuYW1lID0gcGF0aG5hbWU7CisJbi0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKworCXJldHVybiAo Tm9kZSAqKSBuOworfQorCisvKgorICogbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4gLQorICoJICAg Y3JlYXRlcyBhIEpzb25UYWJsZVBsYW5TcGVjIG5vZGUgdG8gcmVwcmVzZW50IGpvaW4gYmV0d2Vl biB0aGUgZ2l2ZW4KKyAqCSAgIHBhaXIgb2YgcGxhbnMKKyAqLworTm9kZSAqCittYWtlSnNvblRh YmxlSm9pbmVkUGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwgTm9kZSAqcGxhbjEsIE5v ZGUgKnBsYW4yLAorCQkJCQkJaW50IGxvY2F0aW9uKQoreworCUpzb25UYWJsZVBsYW5TcGVjICpu ID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhblNwZWMpOworCisJbi0+cGxhbl90eXBlID0gSlNUUF9K T0lORUQ7CisJbi0+am9pbl90eXBlID0gdHlwZTsKKwluLT5wbGFuMSA9IGNhc3ROb2RlKEpzb25U YWJsZVBsYW5TcGVjLCBwbGFuMSk7CisJbi0+cGxhbjIgPSBjYXN0Tm9kZShKc29uVGFibGVQbGFu U3BlYywgcGxhbjIpOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4gKE5vZGUg KikgbjsKK30KKwogLyoKICAqIG1ha2VKc29uS2V5VmFsdWUgLQogICoJICBjcmVhdGVzIGEgSnNv bktleVZhbHVlIG5vZGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXggNGEzZDk2YjI5OC4uZDhjMTNl NzQ5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAgLTI3MDAsNiArMjcwMCwxMCBAQCBleHByZXNz aW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJ aWYgKFdBTEsodGYtPmNvbGRlZmV4cHJzKSkKIAkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdB TEsodGYtPmNvbHZhbGV4cHJzKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsodGYt PnBhc3Npbmd2YWxleHBycykpCisJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CkBAIC0zNzcwLDYgKzM3NzQsOCBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9p bXBsKE5vZGUgKm5vZGUsCiAJCQkJTVVUQVRFKG5ld25vZGUtPnJvd2V4cHIsIHRmLT5yb3dleHBy LCBOb2RlICopOwogCQkJCU1VVEFURShuZXdub2RlLT5jb2xleHBycywgdGYtPmNvbGV4cHJzLCBM aXN0ICopOwogCQkJCU1VVEFURShuZXdub2RlLT5jb2xkZWZleHBycywgdGYtPmNvbGRlZmV4cHJz LCBMaXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5jb2x2YWxleHBycywgdGYtPmNvbHZhbGV4 cHJzLCBMaXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5wYXNzaW5ndmFsZXhwcnMsIHRmLT5w YXNzaW5ndmFsZXhwcnMsIExpc3QgKik7CiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJ CQl9CiAJCQlicmVhazsKQEAgLTQxOTUsNiArNDIwMSwzOCBAQCByYXdfZXhwcmVzc2lvbl90cmVl X3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJl YWs7CisJCWNhc2UgVF9Kc29uVGFibGU6CisJCQl7CisJCQkJSnNvblRhYmxlICAqanQgPSAoSnNv blRhYmxlICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqdC0+Y29udGV4dF9pdGVtKSkKKwkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanQtPnBhdGhzcGVjKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKFdBTEsoanQtPnBhc3NpbmcpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoV0FMSyhqdC0+Y29sdW1ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0 LT5vbl9lcnJvcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ug VF9Kc29uVGFibGVDb2x1bW46CisJCQl7CisJCQkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSAoSnNv blRhYmxlQ29sdW1uICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqdGMtPnR5cGVOYW1lKSkKKwkJ CQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanRjLT5vbl9lbXB0eSkpCisJCQkJCXJldHVy biB0cnVlOworCQkJCWlmIChXQUxLKGp0Yy0+b25fZXJyb3IpKQorCQkJCQlyZXR1cm4gdHJ1ZTsK KwkJCQlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19ORVNURUQgJiYgV0FMSyhqdGMtPmNvbHVtbnMp KQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvblRhYmxl UGF0aFNwZWM6CisJCQlyZXR1cm4gV0FMSygoKEpzb25UYWJsZVBhdGhTcGVjICopIG5vZGUpLT5z dHJpbmcpOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQlyZXR1cm4gV0FMSygoKE51bGxUZXN0ICop IG5vZGUpLT5hcmcpOwogCQljYXNlIFRfQm9vbGVhblRlc3Q6CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUKaW5kZXgg NDAxYzE2Njg2Yy4uMzE2MmEwMWYzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBA QCBPQkpTID0gXAogCXBhcnNlX2Vuci5vIFwKIAlwYXJzZV9leHByLm8gXAogCXBhcnNlX2Z1bmMu byBcCisJcGFyc2VfanNvbnRhYmxlLm8gXAogCXBhcnNlX21lcmdlLm8gXAogCXBhcnNlX25vZGUu byBcCiAJcGFyc2Vfb3Blci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IGU5MDBlZGZiOGEuLjc5MTVlODI3 OWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQpAQCAtMTcwLDcgKzE3MCw2IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVJh d1N0bXRFbmQoUmF3U3RtdCAqcnMsIGludCBlbmRfbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1h a2VDb2x1bW5SZWYoY2hhciAqY29sbmFtZSwgTGlzdCAqaW5kaXJlY3Rpb24sCiAJCQkJCQkgICBp bnQgbG9jYXRpb24sIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBOb2RlICptYWtl VHlwZUNhc3QoTm9kZSAqYXJnLCBUeXBlTmFtZSAqdHlwZW5hbWUsIGludCBsb2NhdGlvbik7Ci1z dGF0aWMgTm9kZSAqbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKTsKIHN0 YXRpYyBOb2RlICptYWtlU3RyaW5nQ29uc3RDYXN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uLCBU eXBlTmFtZSAqdHlwZW5hbWUpOwogc3RhdGljIE5vZGUgKm1ha2VJbnRDb25zdChpbnQgdmFsLCBp bnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2VGbG9hdENvbnN0KGNoYXIgKnN0ciwgaW50 IGxvY2F0aW9uKTsKQEAgLTY1NSwxNSArNjU0LDMxIEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJz aXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7 CiAJCQkJanNvbl9hcmd1bWVudAogCQkJCWpzb25fYmVoYXZpb3IKIAkJCQlqc29uX29uX2Vycm9y X2NsYXVzZV9vcHQKKwkJCQlqc29uX3RhYmxlCisJCQkJanNvbl90YWJsZV9jb2x1bW5fZGVmaW5p dGlvbgorCQkJCWpzb25fdGFibGVfY29sdW1uX3BhdGhfY2xhdXNlX29wdAorCQkJCWpzb25fdGFi bGVfcGxhbl9jbGF1c2Vfb3B0CisJCQkJanNvbl90YWJsZV9wbGFuCisJCQkJanNvbl90YWJsZV9w bGFuX3NpbXBsZQorCQkJCWpzb25fdGFibGVfcGxhbl9vdXRlcgorCQkJCWpzb25fdGFibGVfcGxh bl9pbm5lcgorCQkJCWpzb25fdGFibGVfcGxhbl91bmlvbgorCQkJCWpzb25fdGFibGVfcGxhbl9j cm9zcworCQkJCWpzb25fdGFibGVfcGxhbl9wcmltYXJ5CiAldHlwZSA8bGlzdD4JanNvbl9uYW1l X2FuZF92YWx1ZV9saXN0CiAJCQkJanNvbl92YWx1ZV9leHByX2xpc3QKIAkJCQlqc29uX2FycmF5 X2FnZ3JlZ2F0ZV9vcmRlcl9ieV9jbGF1c2Vfb3B0CiAJCQkJanNvbl9hcmd1bWVudHMKIAkJCQlq c29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKIAkJCQlqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJ CWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdAorJXR5cGUgPHN0cj4JCWpzb25fdGFi bGVfcGF0aF9uYW1lX29wdAogJXR5cGUgPGl2YWw+CWpzb25fYmVoYXZpb3JfdHlwZQogCQkJCWpz b25fcHJlZGljYXRlX3R5cGVfY29uc3RyYWludAogCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQK KwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9jaG9pY2VzCisJCQkJanNvbl90YWJsZV9kZWZh dWx0X3BsYW5faW5uZXJfb3V0ZXIKKwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9j cm9zcwogCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgogJXR5cGUgPGJvb2xlYW4+CWpzb25fa2V5 X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9u dWxsX2NsYXVzZV9vcHQKQEAgLTczMyw3ICs3NDgsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogCUlOVEVSU0VDVCBJTlRFUlZBTCBJTlRPIElOVk9LRVIgSVMgSVNOVUxMIElTT0xBVElPTgog CiAJSk9JTiBKU09OIEpTT05fQVJSQVkgSlNPTl9BUlJBWUFHRyBKU09OX0VYSVNUUyBKU09OX09C SkVDVCBKU09OX09CSkVDVEFHRwotCUpTT05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJ WkUgSlNPTl9WQUxVRQorCUpTT05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJWkUgSlNP Tl9UQUJMRSBKU09OX1ZBTFVFCiAKIAlLRUVQIEtFWSBLRVlTCiAKQEAgLTc0NCw4ICs3NTksOCBA QCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlz dCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU1BUFBJTkcgTUFUQ0ggTUFUQ0hFRCBNQVRFUklB TElaRUQgTUFYVkFMVUUgTUVSR0UgTUVUSE9ECiAJTUlOVVRFX1AgTUlOVkFMVUUgTU9ERSBNT05U SF9QIE1PVkUKIAotCU5BTUVfUCBOQU1FUyBOQVRJT05BTCBOQVRVUkFMIE5DSEFSIE5FVyBORVhU IE5GQyBORkQgTkZLQyBORktEIE5PIE5PTkUKLQlOT1JNQUxJWkUgTk9STUFMSVpFRAorCU5BTUVf UCBOQU1FUyBOQVRJT05BTCBOQVRVUkFMIE5DSEFSIE5FU1RFRCBORVcgTkVYVCBORkMgTkZEIE5G S0MgTkZLRCBOTworCU5PTkUgTk9STUFMSVpFIE5PUk1BTElaRUQKIAlOT1QgTk9USElORyBOT1RJ RlkgTk9UTlVMTCBOT1dBSVQgTlVMTF9QIE5VTExJRgogCU5VTExTX1AgTlVNRVJJQwogCkBAIC03 NTMsOCArNzY4LDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIg KnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlPUkRFUiBPUkRJTkFMSVRZ IE9USEVSUyBPVVRfUCBPVVRFUl9QCiAJT1ZFUiBPVkVSTEFQUyBPVkVSTEFZIE9WRVJSSURJTkcg T1dORUQgT1dORVIKIAotCVBBUkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElBTCBQQVJUSVRJ T04gUEFTU0lORyBQQVNTV09SRAotCVBMQUNJTkcgUExBTlMgUE9MSUNZCisJUEFSQUxMRUwgUEFS QU1FVEVSIFBBUlNFUiBQQVJUSUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JEIFBBVEgKKwlQ TEFDSU5HIFBMQU4gUExBTlMgUE9MSUNZCiAJUE9TSVRJT04gUFJFQ0VESU5HIFBSRUNJU0lPTiBQ UkVTRVJWRSBQUkVQQVJFIFBSRVBBUkVEIFBSSU1BUlkKIAlQUklPUiBQUklWSUxFR0VTIFBST0NF RFVSQUwgUFJPQ0VEVVJFIFBST0NFRFVSRVMgUFJPR1JBTSBQVUJMSUNBVElPTgogCkBAIC04NzIs MTAgKzg4NywxMyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAq cmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICogdGhlIHNhbWUgcHJlY2Vk ZW5jZSBhcyBJREVOVC4gIFRoaXMgYWxsb3dzIHJlc29sdmluZyBjb25mbGljdHMgaW4gdGhlCiAg KiBqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnQgYW5kIGpzb25fa2V5X3VuaXF1ZW5lc3Nf Y29uc3RyYWludF9vcHQKICAqIHByb2R1Y3Rpb25zIChzZWUgY29tbWVudHMgdGhlcmUpLgorICoK KyAqIExpa2UgdGhlIFVOQk9VTkRFRCBQUkVDRURJTkcvRk9MTE9XSU5HIGNhc2UsIE5FU1RFRCBp cyBhc3NpZ25lZCBhIGxvd2VyCisgKiBwcmVjZWRlbmNlIHRoYW4gUEFUSCB0byBmaXggYW1iaWd1 aXR5IGluIHRoZSBqc29uX3RhYmxlIHByb2R1Y3Rpb24uCiAgKi8KLSVub25hc3NvYwlVTkJPVU5E RUQJCS8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8KKyVu b25hc3NvYwlVTkJPVU5ERUQgTkVTVEVEIC8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNl ZGVuY2UgYXMgSURFTlQgKi8KICVub25hc3NvYwlJREVOVCBQQVJUSVRJT04gUkFOR0UgUk9XUyBH Uk9VUFMgUFJFQ0VESU5HIEZPTExPV0lORyBDVUJFIFJPTExVUAotCQkJU0VUIEtFWVMgT0JKRUNU X1AgU0NBTEFSIFZBTFVFX1AgV0lUSCBXSVRIT1VUCisJCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FM QVIgVkFMVUVfUCBXSVRIIFdJVEhPVVQgUEFUSAogJWxlZnQJCU9wIE9QRVJBVE9SCQkvKiBtdWx0 aS1jaGFyYWN0ZXIgb3BzIGFuZCB1c2VyLWRlZmluZWQgb3BlcmF0b3JzICovCiAlbGVmdAkJJysn ICctJwogJWxlZnQJCScqJyAnLycgJyUnCkBAIC04OTYsNyArOTE0LDYgQEAgc3RhdGljIE5vZGUg Km1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5v ZGUgKnF1ZXJ5KTsKICAqIGxlZnQtYXNzb2NpYXRpdml0eSBhbW9uZyB0aGUgSk9JTiBydWxlcyB0 aGVtc2VsdmVzLgogICovCiAlbGVmdAkJSk9JTiBDUk9TUyBMRUZUIEZVTEwgUklHSFQgSU5ORVJf UCBOQVRVUkFMCi0KICUlCiAKIC8qCkBAIC0xMzQ0NSw2ICsxMzQ2MiwyMSBAQCB0YWJsZV9yZWY6 CXJlbGF0aW9uX2V4cHIgb3B0X2FsaWFzX2NsYXVzZQogCQkJCQkkMi0+YWxpYXMgPSAkNDsKIAkJ CQkJJCQgPSAoTm9kZSAqKSAkMjsKIAkJCQl9CisJCQl8IGpzb25fdGFibGUgb3B0X2FsaWFzX2Ns YXVzZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlICAqanQgPSBjYXN0Tm9kZShKc29uVGFibGUsICQx KTsKKworCQkJCQlqdC0+YWxpYXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9 CisJCQl8IExBVEVSQUxfUCBqc29uX3RhYmxlIG9wdF9hbGlhc19jbGF1c2UKKwkJCQl7CisJCQkJ CUpzb25UYWJsZSAgKmp0ID0gY2FzdE5vZGUoSnNvblRhYmxlLCAkMik7CisKKwkJCQkJanQtPmFs aWFzID0gJDM7CisJCQkJCWp0LT5sYXRlcmFsID0gdHJ1ZTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBq dDsKKwkJCQl9CiAJCTsKIAogCkBAIC0xNDAxMiw2ICsxNDA0NCw4IEBAIHhtbHRhYmxlX2NvbHVt bl9vcHRpb25fZWw6CiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2Rl ICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7IH0KIAkJCXwgTlVMTF9QCiAJCQkJeyAkJCA9IG1h a2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKGZhbHNlKSwgQDEp OyB9CisJCQl8IFBBVEggYl9leHByCisJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJwYXRoIiwgJDIs IEAxKTsgfQogCQk7CiAKIHhtbF9uYW1lc3BhY2VfbGlzdDoKQEAgLTE0MDQwLDYgKzE0MDc0LDIz MyBAQCB4bWxfbmFtZXNwYWNlX2VsOgogCQkJCX0KIAkJOwogCitqc29uX3RhYmxlOgorCQkJSlNP Tl9UQUJMRSAnKCcKKwkJCQlqc29uX3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3RhYmxlX3Bh dGhfbmFtZV9vcHQKKwkJCQlqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCUNPTFVNTlMgJygn IGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdCAnKScKKwkJCQlqc29uX3RhYmxlX3Bs YW5fY2xhdXNlX29wdAorCQkJCWpzb25fb25fZXJyb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJ eworCQkJCQlKc29uVGFibGUgKm4gPSBtYWtlTm9kZShKc29uVGFibGUpOworCQkJCQljaGFyCSAg KnBhdGhzdHJpbmc7CisKKwkJCQkJbi0+Y29udGV4dF9pdGVtID0gKEpzb25WYWx1ZUV4cHIgKikg JDM7CisJCQkJCWlmICghSXNBKCQ1LCBBX0NvbnN0KSB8fAorCQkJCQkJY2FzdE5vZGUoQV9Db25z dCwgJDUpLT52YWwubm9kZS50eXBlICE9IFRfU3RyaW5nKQorCQkJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJ CWVycm1zZygib25seSBzdHJpbmcgY29uc3RhbnRzIGFyZSBzdXBwb3J0ZWQgaW4gSlNPTl9UQUJM RSIKKwkJCQkJCQkJCSAgICIgcGF0aCBzcGVjaWZpY2F0aW9uIiksCisJCQkJCQkJCXBhcnNlcl9l cnJwb3NpdGlvbihANSkpOworCQkJCQlwYXRoc3RyaW5nID0gY2FzdE5vZGUoQV9Db25zdCwgJDUp LT52YWwuc3ZhbC5zdmFsOworCQkJCQluLT5wYXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAq KQorCQkJCQkJbWFrZUpzb25UYWJsZVBhdGhTcGVjKHBhdGhzdHJpbmcsICQ2LCBANSwgQDYpOwor CQkJCQluLT5wYXNzaW5nID0gJDc7CisJCQkJCW4tPmNvbHVtbnMgPSAkMTA7CisJCQkJCW4tPnBs YW5zcGVjID0gKEpzb25UYWJsZVBsYW5TcGVjICopICQxMjsKKwkJCQkJbi0+b25fZXJyb3IgPSAo SnNvbkJlaGF2aW9yICopICQxMzsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAo Tm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3RhYmxlX3BhdGhfbmFtZV9vcHQ6CisJCQlB UyBuYW1lCQkJeyAkJCA9ICQyOyB9CisJCQl8IC8qIGVtcHR5ICovCXsgJCQgPSBOVUxMOyB9CisJ CTsKKworanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0OgorCQkJanNvbl90YWJsZV9j b2x1bW5fZGVmaW5pdGlvbgorCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBqc29u X3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uX2xpc3QgJywnIGpzb25fdGFibGVfY29sdW1uX2RlZmlu aXRpb24KKwkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworanNvbl90YWJsZV9j b2x1bW5fZGVmaW5pdGlvbjoKKwkJCUNvbElkIEZPUiBPUkRJTkFMSVRZCisJCQkJeworCQkJCQlK c29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4t PmNvbHR5cGUgPSBKVENfRk9SX09SRElOQUxJVFk7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJ bi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgQ29s SWQgVHlwZW5hbWUKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQKKwkJCQlq c29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNv bl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBt YWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfUkVHVUxB UjsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5m b3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQs IC0xKTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAoSnNvblRhYmxlUGF0aFNwZWMgKikgJDM7CisJCQkJ CW4tPndyYXBwZXIgPSAkNDsgLyogZGlzYWxsb3dlZCBkdXJpbmcgcGFyc2UtYW5hbHlzaXMhICov CisJCQkJCW4tPnF1b3RlcyA9ICQ1OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJzZS1hbmFseXNp cyEgKi8KKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQ2KTsK KwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDYpOworCQkJCQlu LT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBDb2xJ ZCBUeXBlbmFtZSBqc29uX2Zvcm1hdF9jbGF1c2UKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRo X2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19j bGF1c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJeworCQkJCQlKc29u VGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNv bHR5cGUgPSBKVENfRk9STUFUVEVEOworCQkJCQluLT5uYW1lID0gJDE7CisJCQkJCW4tPnR5cGVO YW1lID0gJDI7CisJCQkJCW4tPmZvcm1hdCA9IChKc29uRm9ybWF0ICopICQzOworCQkJCQluLT5w YXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAqKSAkNDsKKwkJCQkJbi0+d3JhcHBlciA9ICQ1 OworCQkJCQluLT5xdW90ZXMgPSAkNjsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9y ICopIGxpbml0aWFsKCQ3KTsKKwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxz ZWNvbmQoJDcpOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47 CisJCQkJfQorCQkJfCBDb2xJZCBUeXBlbmFtZQorCQkJCUVYSVNUUyBqc29uX3RhYmxlX2NvbHVt bl9wYXRoX2NsYXVzZV9vcHQKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCQl7CisJ CQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJ CQkJbi0+Y29sdHlwZSA9IEpUQ19FWElTVFM7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+ dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+Zm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFU X0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisJCQkJCW4tPndyYXBwZXIgPSBKU1dfTk9O RTsKKwkJCQkJbi0+cXVvdGVzID0gSlNfUVVPVEVTX1VOU1BFQzsKKwkJCQkJbi0+cGF0aHNwZWMg PSAoSnNvblRhYmxlUGF0aFNwZWMgKikgJDQ7CisJCQkJCW4tPm9uX2VtcHR5ID0gKEpzb25CZWhh dmlvciAqKSBsaW5pdGlhbCgkNSk7CisJCQkJCW4tPm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAq KSBsc2Vjb25kKCQ1KTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAq KSBuOworCQkJCX0KKwkJCXwgTkVTVEVEIHBhdGhfb3B0IFNjb25zdAorCQkJCUNPTFVNTlMgJygn IGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdCAnKScKKwkJCQl7CisJCQkJCUpzb25U YWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29s dHlwZSA9IEpUQ19ORVNURUQ7CisJCQkJCW4tPnBhdGhzcGVjID0gKEpzb25UYWJsZVBhdGhTcGVj ICopCisJCQkJCQltYWtlSnNvblRhYmxlUGF0aFNwZWMoJDMsIE5VTEwsIEAzLCAtMSk7CisJCQkJ CW4tPmNvbHVtbnMgPSAkNjsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9k ZSAqKSBuOworCQkJCX0KKwkJCXwgTkVTVEVEIHBhdGhfb3B0IFNjb25zdCBBUyBuYW1lCisJCQkJ Q09MVU1OUyAnKCcganNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0ICcpJworCQkJCXsK KwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKwor CQkJCQluLT5jb2x0eXBlID0gSlRDX05FU1RFRDsKKwkJCQkJbi0+cGF0aHNwZWMgPSAoSnNvblRh YmxlUGF0aFNwZWMgKikKKwkJCQkJCW1ha2VKc29uVGFibGVQYXRoU3BlYygkMywgJDUsIEAzLCBA NSk7CisJCQkJCW4tPmNvbHVtbnMgPSAkODsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitwYXRoX29wdDoKKwkJCVBBVEgKKwkJCXwg LyogRU1QVFkgKi8KKwkJOworCitqc29uX3RhYmxlX2NvbHVtbl9wYXRoX2NsYXVzZV9vcHQ6CisJ CQlQQVRIIFNjb25zdAorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlUGF0aFNwZWMoJDIsIE5VTEws IEAyLCAtMSk7IH0KKwkJCXwgLyogRU1QVFkgKi8KKwkJCQl7ICQkID0gTlVMTDsgfQorCQk7CisK K2pzb25fdGFibGVfcGxhbl9jbGF1c2Vfb3B0OgorCQkJUExBTiAnKCcganNvbl90YWJsZV9wbGFu ICcpJworCQkJCXsgJCQgPSAkMzsgfQorCQkJfCBQTEFOIERFRkFVTFQgJygnIGpzb25fdGFibGVf ZGVmYXVsdF9wbGFuX2Nob2ljZXMgJyknCisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVEZWZhdWx0 UGxhbigkNCwgQDEpOyB9CisJCQl8IC8qIEVNUFRZICovCisJCQkJeyAkJCA9IE5VTEw7IH0KKwkJ OworCitqc29uX3RhYmxlX3BsYW46CisJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlCisJCQl8IGpz b25fdGFibGVfcGxhbl9vdXRlcgorCQkJfCBqc29uX3RhYmxlX3BsYW5faW5uZXIKKwkJCXwganNv bl90YWJsZV9wbGFuX3VuaW9uCisJCQl8IGpzb25fdGFibGVfcGxhbl9jcm9zcworCQk7CisKK2pz b25fdGFibGVfcGxhbl9zaW1wbGU6CisJCQluYW1lCisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVT aW1wbGVQbGFuKCQxLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fb3V0ZXI6CisJCQlq c29uX3RhYmxlX3BsYW5fc2ltcGxlIE9VVEVSX1AganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJ CQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX09VVEVSLCAkMSwgJDMs IEAxKTsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9pbm5lcjoKKwkJCWpzb25fdGFibGVfcGxh bl9zaW1wbGUgSU5ORVJfUCBqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtl SnNvblRhYmxlSm9pbmVkUGxhbihKU1RQX0pPSU5fSU5ORVIsICQxLCAkMywgQDEpOyB9CisJCTsK KworanNvbl90YWJsZV9wbGFuX3VuaW9uOgorCQkJanNvbl90YWJsZV9wbGFuX3ByaW1hcnkgVU5J T04ganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5l ZFBsYW4oSlNUUF9KT0lOX1VOSU9OLCAkMSwgJDMsIEAxKTsgfQorCQkJfCBqc29uX3RhYmxlX3Bs YW5fdW5pb24gVU5JT04ganNvbl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpz b25UYWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX1VOSU9OLCAkMSwgJDMsIEAxKTsgfQorCQk7CisK K2pzb25fdGFibGVfcGxhbl9jcm9zczoKKwkJCWpzb25fdGFibGVfcGxhbl9wcmltYXJ5IENST1NT IGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQ bGFuKEpTVFBfSk9JTl9DUk9TUywgJDEsICQzLCBAMSk7IH0KKwkJCXwganNvbl90YWJsZV9wbGFu X2Nyb3NzIENST1NTIGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29u VGFibGVKb2luZWRQbGFuKEpTVFBfSk9JTl9DUk9TUywgJDEsICQzLCBAMSk7IH0KKwkJOworCitq c29uX3RhYmxlX3BsYW5fcHJpbWFyeToKKwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUKKwkJCQl7 ICQkID0gJDE7IH0KKwkJCXwgJygnIGpzb25fdGFibGVfcGxhbiAnKScKKwkJCQl7CisJCQkJCWNh c3ROb2RlKEpzb25UYWJsZVBsYW5TcGVjLCAkMiktPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0g JDI7CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2ljZXM6CisJCQlq c29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgorCQkJCXsgJCQgPSAkMSB8IEpTVFBf Sk9JTl9VTklPTjsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcwor CQkJCXsgJCQgPSAkMSB8IEpTVFBfSk9JTl9PVVRFUjsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1 bHRfcGxhbl9pbm5lcl9vdXRlciAnLCcganNvbl90YWJsZV9kZWZhdWx0X3BsYW5fdW5pb25fY3Jv c3MKKwkJCQl7ICQkID0gJDEgfCAkMzsgfQorCQkJfCBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91 bmlvbl9jcm9zcyAnLCcganNvbl90YWJsZV9kZWZhdWx0X3BsYW5faW5uZXJfb3V0ZXIKKwkJCQl7 ICQkID0gJDEgfCAkMzsgfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2lubmVyX291 dGVyOgorCQkJSU5ORVJfUAkJCQkJCXsgJCQgPSBKU1RQX0pPSU5fSU5ORVI7IH0KKwkJCXwgT1VU RVJfUAkJCQkJeyAkJCA9IEpTVFBfSk9JTl9PVVRFUjsgfQorCQk7CisKK2pzb25fdGFibGVfZGVm YXVsdF9wbGFuX3VuaW9uX2Nyb3NzOgorCQkJVU5JT04JCQkJCQl7ICQkID0gSlNUUF9KT0lOX1VO SU9OOyB9CisJCQl8IENST1NTCQkJCQkJeyAkJCA9IEpTVFBfSk9JTl9DUk9TUzsgfQorCQk7CisK IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogICoKICAqCVR5cGUgc3ludGF4CkBAIC0xNzQ0MSw2ICsx NzcwMiw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgTU9WRQogCQkJfCBOQU1FX1AKIAkJ CXwgTkFNRVMKKwkJCXwgTkVTVEVECiAJCQl8IE5FVwogCQkJfCBORVhUCiAJCQl8IE5GQwpAQCAt MTc0NzUsNiArMTc3MzcsOCBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgog CQkJfCBQQVNTSU5HCiAJCQl8IFBBU1NXT1JECisJCQl8IFBBVEgKKwkJCXwgUExBTgogCQkJfCBQ TEFOUwogCQkJfCBQT0xJQ1kKIAkJCXwgUFJFQ0VESU5HCkBAIC0xNzYzOSw2ICsxNzkwMyw3IEBA IGNvbF9uYW1lX2tleXdvcmQ6CiAJCQl8IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJ CXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9UQUJMRQogCQkJfCBKU09OX1ZBTFVFCiAJCQl8 IExFQVNUCiAJCQl8IE5BVElPTkFMCkBAIC0xODAwNyw2ICsxODI3Miw3IEBAIGJhcmVfbGFiZWxf a2V5d29yZDoKIAkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBKU09OX1NF UklBTElaRQorCQkJfCBKU09OX1RBQkxFCiAJCQl8IEpTT05fVkFMVUUKIAkJCXwgS0VFUAogCQkJ fCBLRVkKQEAgLTE4MDQ2LDYgKzE4MzEyLDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBO QVRJT05BTAogCQkJfCBOQVRVUkFMCiAJCQl8IE5DSEFSCisJCQl8IE5FU1RFRAogCQkJfCBORVcK IAkJCXwgTkVYVAogCQkJfCBORkMKQEAgLTE4MDkwLDcgKzE4MzU3LDkgQEAgYmFyZV9sYWJlbF9r ZXl3b3JkOgogCQkJfCBQQVJUSVRJT04KIAkJCXwgUEFTU0lORwogCQkJfCBQQVNTV09SRAorCQkJ fCBQQVRICiAJCQl8IFBMQUNJTkcKKwkJCXwgUExBTgogCQkJfCBQTEFOUwogCQkJfCBQT0xJQ1kK IAkJCXwgUE9TSVRJT04KQEAgLTE4MzU4LDE4ICsxODYyNyw2IEBAIG1ha2VUeXBlQ2FzdChOb2Rl ICphcmcsIFR5cGVOYW1lICp0eXBlbmFtZSwgaW50IGxvY2F0aW9uKQogCXJldHVybiAoTm9kZSAq KSBuOwogfQogCi1zdGF0aWMgTm9kZSAqCi1tYWtlU3RyaW5nQ29uc3QoY2hhciAqc3RyLCBpbnQg bG9jYXRpb24pCi17Ci0JQV9Db25zdAkgICAqbiA9IG1ha2VOb2RlKEFfQ29uc3QpOwotCi0Jbi0+ dmFsLnN2YWwudHlwZSA9IFRfU3RyaW5nOwotCW4tPnZhbC5zdmFsLnN2YWwgPSBzdHI7Ci0Jbi0+ bG9jYXRpb24gPSBsb2NhdGlvbjsKLQotICAgcmV0dXJuIChOb2RlICopIG47Ci19Ci0KIHN0YXRp YyBOb2RlICoKIG1ha2VTdHJpbmdDb25zdENhc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24sIFR5 cGVOYW1lICp0eXBlbmFtZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZAppbmRleCA4ZTgyOTU2NDBi Li41NzNkNzBiM2QxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkCkBAIC0xMCw2ICsxMCw3IEBAIGJh Y2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ3BhcnNlX2Vuci5jJywKICAgJ3BhcnNlX2V4cHIu YycsCiAgICdwYXJzZV9mdW5jLmMnLAorICAncGFyc2VfanNvbnRhYmxlLmMnLAogICAncGFyc2Vf bWVyZ2UuYycsCiAgICdwYXJzZV9ub2RlLmMnLAogICAncGFyc2Vfb3Blci5jJywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9jbGF1c2UuYwppbmRleCA0YjUwMjc4ZmQwLi4zOGUyN2U4NDcyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX2NsYXVzZS5jCkBAIC02OTcsNyArNjk3LDExIEBAIHRyYW5zZm9ybVJhbmdlVGFi bGVGdW5jKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUmFuZ2VUYWJsZUZ1bmMgKnJ0ZikKIAljaGFyCSAg KipuYW1lczsKIAlpbnQJCQljb2xubzsKIAotCS8qIEN1cnJlbnRseSBvbmx5IFhNTFRBQkxFIGlz IHN1cHBvcnRlZCAqLworCS8qCisJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBYTUxUQUJM RSBoZXJlLiAgU2VlIHRyYW5zZm9ybUpzb25UYWJsZSgpIGZvcgorCSAqIEpTT05fVEFCTEUgc3Vw cG9ydC4KKwkgKi8KKwl0Zi0+ZnVuY3R5cGUgPSBURlRfWE1MVEFCTEU7CiAJY29uc3RydWN0TmFt ZSA9ICJYTUxUQUJMRSI7CiAJZG9jVHlwZSA9IFhNTE9JRDsKIApAQCAtMTEwNCwxMyArMTEwOCwx NyBAQCB0cmFuc2Zvcm1Gcm9tQ2xhdXNlSXRlbShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKm4s CiAJCXJ0ci0+cnRpbmRleCA9IG5zaXRlbS0+cF9ydGluZGV4OwogCQlyZXR1cm4gKE5vZGUgKikg cnRyOwogCX0KLQllbHNlIGlmIChJc0EobiwgUmFuZ2VUYWJsZUZ1bmMpKQorCWVsc2UgaWYgKElz QShuLCBSYW5nZVRhYmxlRnVuYykgfHwgSXNBKG4sIEpzb25UYWJsZSkpCiAJewogCQkvKiB0YWJs ZSBmdW5jdGlvbiBpcyBsaWtlIGEgcGxhaW4gcmVsYXRpb24gKi8KIAkJUmFuZ2VUYmxSZWYgKnJ0 cjsKIAkJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07CiAKLQkJbnNpdGVtID0gdHJhbnNmb3Jt UmFuZ2VUYWJsZUZ1bmMocHN0YXRlLCAoUmFuZ2VUYWJsZUZ1bmMgKikgbik7CisJCWlmIChJc0Eo biwgUmFuZ2VUYWJsZUZ1bmMpKQorCQkJbnNpdGVtID0gdHJhbnNmb3JtUmFuZ2VUYWJsZUZ1bmMo cHN0YXRlLCAoUmFuZ2VUYWJsZUZ1bmMgKikgbik7CisJCWVsc2UKKwkJCW5zaXRlbSA9IHRyYW5z Zm9ybUpzb25UYWJsZShwc3RhdGUsIChKc29uVGFibGUgKikgbik7CisKIAkJKnRvcF9uc2l0ZW0g PSBuc2l0ZW07CiAJCSpuYW1lc3BhY2UgPSBsaXN0X21ha2UxKG5zaXRlbSk7CiAJCXJ0ciA9IG1h a2VOb2RlKFJhbmdlVGJsUmVmKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDAwNjU0YzU3 YTcuLjdjMzg3MGFjMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtNDIxOCw3ICs0MjE4 LDggQEAgdHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u U2VyaWFsaXplRXhwciAqZXhwcikKIH0KIAogLyoKLSAqIFRyYW5zZm9ybSBKU09OX1ZBTFVFLCBK U09OX1FVRVJZLCBKU09OX0VYSVNUUyBmdW5jdGlvbnMgaW50byBhIEpzb25FeHByIG5vZGUuCisg KiBUcmFuc2Zvcm0gSlNPTl9WQUxVRSwgSlNPTl9RVUVSWSwgSlNPTl9FWElTVFMsIEpTT05fVEFC TEUgZnVuY3Rpb25zIGludG8KKyAqIGEgSnNvbkV4cHIgbm9kZS4KICAqLwogc3RhdGljIE5vZGUg KgogdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHBy ICpmdW5jKQpAQCAtNDIzNyw2ICs0MjM4LDkgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCQljYXNlIEpTT05fVkFMVUVfT1A6 CiAJCQlmdW5jX25hbWUgPSAiSlNPTl9WQUxVRSI7CiAJCQlicmVhazsKKwkJY2FzZSBKU09OX1RB QkxFX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fVEFCTEUiOworCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKIAkJCWJyZWFr OwpAQCAtNDI3OSw2ICs0MjgzLDQyIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3Jt YXQtPmZvcm1hdF90eXBlID0gSlNfRk9STUFUX0RFRkFVTFQ7CiAJCQlqc2V4cHItPnJldHVybmlu Zy0+Zm9ybWF0LT5lbmNvZGluZyA9IEpTX0VOQ19ERUZBVUxUOwogCisJCQkvKiBKU09OX1RBQkxF KCkgQ09MVU1OUyBjYW4gc3BlY2lmeSBhIG5vbi1ib29sZWFuIHR5cGUuICovCisJCQlpZiAoanNl eHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQl7CisJCQkJTm9kZQkgICAqY29l cmNpb25fZXhwcjsKKwkJCQlDYXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2Fz ZVRlc3RFeHByKTsKKwkJCQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBq c2V4cHIpOworCisJCQkJLyoKKwkJCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBw bGFjZWhvbGRlciB0byBwYXNzIHRoZQorCQkJCSAqIHJlc3VsdCBvZiBldmFsdWF0aW5nIEpTT05f RVhJU1RTIHRvIHRoZSBjb2VyY2lvbgorCQkJCSAqIGV4cHJlc3Npb24uCisJCQkJICovCisJCQkJ cGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7CisJCQkJcGxhY2Vob2xkZXItPnR5cGVNb2Qg PSAtMTsKKwkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKworCQkJCWNv ZXJjaW9uX2V4cHIgPQorCQkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCAoTm9kZSAq KSBwbGFjZWhvbGRlciwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkJ ICBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULAor CQkJCQkJCQkJCSAgbG9jYXRpb24pOworCisJCQkJaWYgKGNvZXJjaW9uX2V4cHIgPT0gTlVMTCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VS Q0UpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJ CQkJZm9ybWF0X3R5cGVfYmUoQk9PTE9JRCksCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4 cHItPnJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0 aW9uKHBzdGF0ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKworCQkJCWlmIChjb2Vy Y2lvbl9leHByICE9IChOb2RlICopIHBsYWNlaG9sZGVyKQorCQkJCQlqc2V4cHItPnJlc3VsdF9j b2VyY2lvbiA9IGNvZXJjaW9uX2V4cHI7CisJCQl9CisKIAkJCWpzZXhwci0+b25fZXJyb3IgPSB0 cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lcnJvciwKIAkJCQkJCQkJCQkJ CQkgSlNPTl9CRUhBVklPUl9GQUxTRSwKIAkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcp OwpAQCAtNDM0Myw2ICs0MzgzLDE3IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1 cm5pbmcpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBKU09OX1RBQkxFX09QOgorCQkJaWYgKCFPaWRJ c1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCisJCQl7CisJCQkJanNleHByLT5yZXR1 cm5pbmctPnR5cGlkID0gZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcik7CisJCQkJanNl eHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5vbl9lcnJvciA9 IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAorCQkJCQkJCQkJ CQkJCSBKU09OX0JFSEFWSU9SX0VNUFRZLAorCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmlu Zyk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSnNv bkZ1bmNFeHByIG9wIik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9qc29udGFibGUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yNWI4MjA0ZGM2Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCkBAIC0w LDAgKzEsNzE4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwYXJzZV9qc29udGFibGUu YworICoJICBwYXJzaW5nIG9mIEpTT05fVEFCTEUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9qc29udGFibGUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK KyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2NsYXVzZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX2V4cHIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIK KyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgorCisvKiBDb250ZXh0IGZvciBKU09OX1RBQkxFIHRyYW5zZm9ybWF0aW9uICovCit0eXBlZGVm IHN0cnVjdCBKc29uVGFibGVQYXJzZUNvbnRleHQKK3sKKwlQYXJzZVN0YXRlICpwc3RhdGU7CQkJ LyogcGFyc2luZyBzdGF0ZSAqLworCUpzb25UYWJsZSAgKnRhYmxlOwkJCS8qIHVudHJhbnNmb3Jt ZWQgbm9kZSAqLworCVRhYmxlRnVuYyAgKnRhYmxlZnVuYzsJCS8qIHRyYW5zZm9ybWVkIG5vZGUJ Ki8KKwlMaXN0CSAgICpwYXRoTmFtZXM7CQkvKiBsaXN0IG9mIGFsbCBwYXRoIGFuZCBjb2x1bW5z IG5hbWVzICovCisJaW50CQkJcGF0aE5hbWVJZDsJCS8qIHBhdGggbmFtZSBpZCBjb3VudGVyICov CisJT2lkCQkJY29udGV4dEl0ZW1UeXBpZDsJLyogdHlwZSBvaWQgb2YgY29udGV4dCBpdGVtIChq c29uL2pzb25iKSAqLworfQkJCUpzb25UYWJsZVBhcnNlQ29udGV4dDsKKworc3RhdGljIEpzb25U YWJsZVBsYW4gKnRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VDb250ZXh0 ICogY3h0LAorCQkJCQkJCQkJCQkJSnNvblRhYmxlUGxhblNwZWMgKnBsYW5zcGVjLAorCQkJCQkJ CQkJCQkJTGlzdCAqY29sdW1ucywKKwkJCQkJCQkJCQkJCUpzb25UYWJsZVBhdGhTcGVjICpwYXRo c3BlYyk7CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTl9UQUJMRSBjb2x1bW4KKyAqICAgLSByZWd1 bGFyIGNvbHVtbiBpbnRvIEpTT05fVkFMVUUoKQorICogICAtIEZPUk1BVCBKU09OIGNvbHVtbiBp bnRvIEpTT05fUVVFUlkoKQorICogICAtIEVYSVNUUyBjb2x1bW4gaW50byBKU09OX0VYSVNUUygp CisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUpzb25UYWJsZUNvbHVtbihKc29uVGFibGVD b2x1bW4gKmp0YywgTm9kZSAqY29udGV4dEl0ZW1FeHByLAorCQkJCQkJIExpc3QgKnBhc3NpbmdB cmdzLCBib29sIGVycm9yT25FcnJvcikKK3sKKwlKc29uRnVuY0V4cHIgKmpmZXhwciA9IG1ha2VO b2RlKEpzb25GdW5jRXhwcik7CisJTm9kZQkgICAqcGF0aHNwZWM7CisJSnNvbkZvcm1hdCAqZGVm YXVsdF9mb3JtYXQ7CisKKwlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19SRUdVTEFSKQorCQlqZmV4 cHItPm9wID0gSlNPTl9WQUxVRV9PUDsKKwllbHNlIGlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX0VY SVNUUykKKwkJamZleHByLT5vcCA9IEpTT05fRVhJU1RTX09QOworCWVsc2UKKwkJamZleHByLT5v cCA9IEpTT05fUVVFUllfT1A7CisJamZleHByLT5vdXRwdXQgPSBtYWtlTm9kZShKc29uT3V0cHV0 KTsKKwlqZmV4cHItPm9uX2VtcHR5ID0ganRjLT5vbl9lbXB0eTsKKwlqZmV4cHItPm9uX2Vycm9y ID0ganRjLT5vbl9lcnJvcjsKKwlpZiAoamZleHByLT5vbl9lcnJvciA9PSBOVUxMICYmIGVycm9y T25FcnJvcikKKwkJamZleHByLT5vbl9lcnJvciA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhB VklPUl9FUlJPUiwgTlVMTCwKKwkJCQkJCQkJCQkJTlVMTCwgLTEpOworCWpmZXhwci0+cXVvdGVz ID0ganRjLT5xdW90ZXM7CisJamZleHByLT53cmFwcGVyID0ganRjLT53cmFwcGVyOworCWpmZXhw ci0+bG9jYXRpb24gPSBqdGMtPmxvY2F0aW9uOworCisJamZleHByLT5vdXRwdXQtPnR5cGVOYW1l ID0ganRjLT50eXBlTmFtZTsKKwlqZmV4cHItPm91dHB1dC0+cmV0dXJuaW5nID0gbWFrZU5vZGUo SnNvblJldHVybmluZyk7CisJamZleHByLT5vdXRwdXQtPnJldHVybmluZy0+Zm9ybWF0ID0ganRj LT5mb3JtYXQ7CisKKwlkZWZhdWx0X2Zvcm1hdCA9IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9E RUZBVUxULCBKU19FTkNfREVGQVVMVCwgLTEpOworCisJaWYgKGp0Yy0+cGF0aHNwZWMpCisJCXBh dGhzcGVjID0gKE5vZGUgKikganRjLT5wYXRoc3BlYy0+c3RyaW5nOworCWVsc2UKKwl7CisJCS8q IENvbnN0cnVjdCBkZWZhdWx0IHBhdGggYXMgJyQuImNvbHVtbl9uYW1lIicgKi8KKwkJU3RyaW5n SW5mb0RhdGEgcGF0aDsKKworCQlpbml0U3RyaW5nSW5mbygmcGF0aCk7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmcGF0aCwgIiQuIik7CisJCWVzY2FwZV9qc29uKCZwYXRoLCBqdGMtPm5h bWUpOworCisJCXBhdGhzcGVjID0gbWFrZVN0cmluZ0NvbnN0KHBhdGguZGF0YSwgLTEpOworCX0K KworCWpmZXhwci0+Y29udGV4dF9pdGVtID0JbWFrZUpzb25WYWx1ZUV4cHIoKEV4cHIgKikgY29u dGV4dEl0ZW1FeHByLCBOVUxMLAorCQkJCQkJCQkJCQkgIGRlZmF1bHRfZm9ybWF0KTsKKwlqZmV4 cHItPnBhdGhzcGVjID0gcGF0aHNwZWM7CisJamZleHByLT5wYXRobmFtZSA9IE5VTEw7CisJamZl eHByLT5wYXNzaW5nID0gcGFzc2luZ0FyZ3M7CisKKwlyZXR1cm4gKE5vZGUgKikgamZleHByOwor fQorCisvKgorICogUmVnaXN0ZXIgYSBjb2x1bW4vcGF0aCBuYW1lIGluIHRoZSBwYXRoIG5hbWUg bGlzdCwgZmxhZ2dpbmcgaWYgdGhlIG5hbWUgaXMKKyAqIGFscmVhZHkgdGFrZW4gYnkgYW5vdGhl ciBjb2x1bW4vcGF0aC4KKyAqLworc3RhdGljIHZvaWQKK3JlZ2lzdGVySnNvblRhYmxlQ29sdW1u KEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgY2hhciAqY29sbmFtZSwKKwkJCQkJCWludCBs b2NhdGlvbikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGN4dC0+cGF0aE5h bWVzKQorCXsKKwkJaWYgKHN0cmNtcChjb2xuYW1lLCAoY29uc3QgY2hhciAqKSBsZmlyc3QobGMp KSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0RVUExJQ0FU RV9BTElBUyksCisJCQkJCWVycm1zZygiZHVwbGljYXRlIEpTT05fVEFCTEUgY29sdW1uIG5hbWU6 ICVzIiwgY29sbmFtZSksCisJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwgbG9j YXRpb24pKTsKKwl9CisKKwljeHQtPnBhdGhOYW1lcyA9IGxhcHBlbmQoY3h0LT5wYXRoTmFtZXMs IGNvbG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorcmVnaXN0ZXJKc29uVGFibGVQYXRoKEpzb25U YWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgY2hhciAqcGF0aG5hbWUsCisJCQkJCSAgaW50IGxvY2F0 aW9uKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgY3h0LT5wYXRoTmFtZXMp CisJeworCQlpZiAoc3RyY21wKHBhdGhuYW1lLCAoY29uc3QgY2hhciAqKSBsZmlyc3QobGMpKSA9 PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9B TElBUyksCisJCQkJCWVycm1zZygiZHVwbGljYXRlIEpTT05fVEFCTEUgcGF0aCBuYW1lOiAlcyIs IHBhdGhuYW1lKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBsb2NhdGlv bikpOworCX0KKworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhOYW1lcywgcGF0 aG5hbWUpOworfQorCisvKgorICogUmVjdXJzaXZlbHkgcmVnaXN0ZXIgYWxsIG5lc3RlZCBjb2x1 bW4gbmFtZXMgaW4gdGhlIHNoYXJlZCBjb2x1bW5zL3BhdGggbmFtZQorICogbGlzdC4KKyAqLwor c3RhdGljIHZvaWQKK3JlZ2lzdGVyQWxsSnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKEpzb25UYWJs ZVBhcnNlQ29udGV4dCAqIGN4dCwKKwkJCQkJCQkJCUxpc3QgKmNvbHVtbnMpCit7CisJTGlzdENl bGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsKKwkJSnNvblRhYmxlQ29sdW1u ICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJzdChsYykpOworCisJCWlmIChq dGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCkKKwkJeworCQkJaWYgKGp0Yy0+cGF0aHNwZWMtPm5h bWUpCisJCQkJcmVnaXN0ZXJKc29uVGFibGVQYXRoKGN4dCwganRjLT5wYXRoc3BlYy0+bmFtZSwK KwkJCQkJCQkJCSAganRjLT5wYXRoc3BlYy0+bmFtZV9sb2NhdGlvbik7CisKKwkJCXJlZ2lzdGVy QWxsSnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKGN4dCwganRjLT5jb2x1bW5zKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCXJlZ2lzdGVySnNvblRhYmxlQ29sdW1uKGN4dCwganRjLT5uYW1lLCBqdGMt PmxvY2F0aW9uKTsKKwkJfQorCX0KK30KKworLyogR2VuZXJhdGUgYSBuZXcgdW5pcXVlIEpTT05f VEFCTEUgcGF0aCBuYW1lLiAqLworc3RhdGljIGNoYXIgKgorZ2VuZXJhdGVKc29uVGFibGVQYXRo TmFtZShKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQpCit7CisJY2hhcgkJbmFtZWJ1ZlszMl07 CisJY2hhcgkgICAqbmFtZSA9IG5hbWVidWY7CisKKwlzbnByaW50ZihuYW1lYnVmLCBzaXplb2Yo bmFtZWJ1ZiksICJqc29uX3RhYmxlX3BhdGhfJWQiLAorCQkJIGN4dC0+cGF0aE5hbWVJZCsrKTsK KworCW5hbWUgPSBwc3RyZHVwKG5hbWUpOworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQt PnBhdGhOYW1lcywgbmFtZSk7CisKKwlyZXR1cm4gbmFtZTsKK30KKworLyogQ29sbGVjdCBzaWJs aW5nIHBhdGggbmFtZXMgZnJvbSBwbGFuIHRvIHRoZSBzcGVjaWZpZWQgbGlzdC4gKi8KK3N0YXRp YyB2b2lkCitjb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKEpzb25UYWJsZVBsYW5T cGVjICpwbGFuLCBMaXN0ICoqcGF0aHMpCit7CisJaWYgKHBsYW4tPnBsYW5fdHlwZSA9PSBKU1RQ X1NJTVBMRSkKKwkJKnBhdGhzID0gbGFwcGVuZCgqcGF0aHMsIHBsYW4tPnBhdGhuYW1lKTsKKwll bHNlIGlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9KT0lORUQpCisJeworCQlpZiAocGxhbi0+ am9pbl90eXBlID09IEpTVFBfSk9JTl9JTk5FUiB8fAorCQkJcGxhbi0+am9pbl90eXBlID09IEpT VFBfSk9JTl9PVVRFUikKKwkJeworCQkJQXNzZXJ0KHBsYW4tPnBsYW4xLT5wbGFuX3R5cGUgPT0g SlNUUF9TSU1QTEUpOworCQkJKnBhdGhzID0gbGFwcGVuZCgqcGF0aHMsIHBsYW4tPnBsYW4xLT5w YXRobmFtZSk7CisJCX0KKwkJZWxzZSBpZiAocGxhbi0+am9pbl90eXBlID09IEpTVFBfSk9JTl9D Uk9TUyB8fAorCQkJCSBwbGFuLT5qb2luX3R5cGUgPT0gSlNUUF9KT0lOX1VOSU9OKQorCQl7CisJ CQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4tPnBsYW4xLCBwYXRocyk7 CisJCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4tPnBsYW4yLCBwYXRo cyk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSlNPTl9UQUJMRSBqb2lu IHR5cGUgJWQiLAorCQkJCSBwbGFuLT5qb2luX3R5cGUpOworCX0KK30KKworLyoKKyAqIFZhbGlk YXRlIGNoaWxkIEpTT05fVEFCTEUgcGxhbiBieSBjaGVja2luZyB0aGF0OgorICogIC0gYWxsIG5l c3RlZCBjb2x1bW5zIGhhdmUgcGF0aCBuYW1lcyBzcGVjaWZpZWQKKyAqICAtIGFsbCBuZXN0ZWQg Y29sdW1ucyBoYXZlIGNvcnJlc3BvbmRpbmcgbm9kZSBpbiB0aGUgc2libGluZyBwbGFuCisgKiAg LSBwbGFuIGRvZXMgbm90IGNvbnRhaW4gZHVwbGljYXRlIG9yIGV4dHJhIG5vZGVzCisgKi8KK3N0 YXRpYyB2b2lkCit2YWxpZGF0ZUpzb25UYWJsZUNoaWxkUGxhbihQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25UYWJsZVBsYW5TcGVjICpwbGFuLAorCQkJCQkJICAgTGlzdCAqY29sdW1ucykKK3sKKwlM aXN0Q2VsbCAgICpsYzE7CisJTGlzdAkgICAqc2libGluZ3MgPSBOSUw7CisJaW50CQkJbmNoaWxk cmVuID0gMDsKKworCWlmIChwbGFuKQorCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQ bGFuKHBsYW4sICZzaWJsaW5ncyk7CisKKwlmb3JlYWNoKGxjMSwgY29sdW1ucykKKwl7CisJCUpz b25UYWJsZUNvbHVtbiAqanRjID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1uLCBsZmlyc3QobGMx KSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEKQorCQl7CisJCQlMaXN0Q2Vs bCAgICpsYzI7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQlpZiAoanRjLT5wYXRoc3Bl Yy0+bmFtZSA9PSBOVUxMKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCWVycm1zZygibmVzdGVkIEpTT05fVEFCTEUgY29sdW1u cyBtdXN0IGNvbnRhaW4iCisJCQkJCQkJCSIgYW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lm aWNhdGlvbiIKKwkJCQkJCQkJIiBpZiBhbiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkIiks CisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBqdGMtPmxvY2F0aW9uKSk7CisKKwkJ CS8qIGZpbmQgbmVzdGVkIHBhdGggbmFtZSBpbiB0aGUgbGlzdCBvZiBzaWJsaW5nIHBhdGggbmFt ZXMgKi8KKwkJCWZvcmVhY2gobGMyLCBzaWJsaW5ncykKKwkJCXsKKwkJCQlpZiAoKGZvdW5kID0g IXN0cmNtcChqdGMtPnBhdGhzcGVjLT5uYW1lLCBsZmlyc3QobGMyKSkpKQorCQkJCQlicmVhazsK KwkJCX0KKworCQkJaWYgKCFmb3VuZCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coImludmFsaWQgSlNPTl9UQUJM RSBzcGVjaWZpY2F0aW9uIiksCisJCQkJCQllcnJkZXRhaWwoIlBMQU4gY2xhdXNlIGZvciBuZXN0 ZWQgcGF0aCAlcyB3YXMgbm90IGZvdW5kLiIsCisJCQkJCQkJCSAganRjLT5wYXRoc3BlYy0+bmFt ZSksCisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBqdGMtPmxvY2F0aW9uKSk7CisK KwkJCW5jaGlsZHJlbisrOworCQl9CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKHNpYmxpbmdzKSA+ IG5jaGlsZHJlbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQllcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVzZSIpLAor CQkJCWVycmRldGFpbCgiUExBTiBjbGF1c2UgY29udGFpbnMgc29tZSBleHRyYSBvciBkdXBsaWNh dGUgc2libGluZyBub2Rlcy4iKSwKKwkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBwbGFu ID8gcGxhbi0+bG9jYXRpb24gOiAtMSkpOworfQorCitzdGF0aWMgSnNvblRhYmxlQ29sdW1uICoK K2ZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4oTGlzdCAqY29sdW1ucywgY29uc3QgY2hhciAqcGF0 aG5hbWUpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsK KwkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJz dChsYykpOworCisJCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCAmJgorCQkJanRjLT5w YXRoc3BlYy0+bmFtZSAmJgorCQkJIXN0cmNtcChqdGMtPnBhdGhzcGVjLT5uYW1lLCBwYXRobmFt ZSkpCisJCQlyZXR1cm4ganRjOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgTm9k ZSAqCit0cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVDb2x1bW4oSnNvblRhYmxlUGFyc2VDb250ZXh0 ICogY3h0LCBKc29uVGFibGVDb2x1bW4gKmp0YywKKwkJCQkJCQkgICBKc29uVGFibGVQbGFuU3Bl YyAqcGxhbnNwZWMpCit7CisJaWYgKGp0Yy0+cGF0aHNwZWMtPm5hbWUgPT0gTlVMTCkKKwl7CisJ CWlmIChjeHQtPnRhYmxlLT5wbGFuc3BlYyAhPSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlk IEpTT05fVEFCTEUgZXhwcmVzc2lvbiIpLAorCQkJCQkgZXJyZGV0YWlsKCJKU09OX1RBQkxFIHBh dGggbXVzdCBjb250YWluIgorCQkJCQkJCSAgICIgZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lm aWNhdGlvbiBpZiIKKwkJCQkJCQkgICAiIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQiKSwK KwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwganRjLT5sb2NhdGlvbikpKTsK KworCQlqdGMtPnBhdGhzcGVjLT5uYW1lID0gZ2VuZXJhdGVKc29uVGFibGVQYXRoTmFtZShjeHQp OworCX0KKworCXJldHVybiAoTm9kZSAqKSB0cmFuc2Zvcm1Kc29uVGFibGVDb2x1bW5zKGN4dCwg cGxhbnNwZWMsIGp0Yy0+Y29sdW1ucywKKwkJCQkJCQkJCQkJICBqdGMtPnBhdGhzcGVjKTsKK30K Kworc3RhdGljIE5vZGUgKgorbWFrZUpzb25UYWJsZVNpYmxpbmdKb2luKGJvb2wgY3Jvc3MsIE5v ZGUgKmxub2RlLCBOb2RlICpybm9kZSkKK3sKKwlKc29uVGFibGVTaWJsaW5nICpqb2luID0gbWFr ZU5vZGUoSnNvblRhYmxlU2libGluZyk7CisKKwlqb2luLT5sYXJnID0gbG5vZGU7CisJam9pbi0+ cmFyZyA9IHJub2RlOworCWpvaW4tPmNyb3NzID0gY3Jvc3M7CisKKwlyZXR1cm4gKE5vZGUgKikg am9pbjsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBjaGlsZCBKU09OX1RBQkxF IHBsYW4uCisgKgorICogRGVmYXVsdCBwbGFuIGlzIHRyYW5zZm9ybWVkIGludG8gYSBjcm9zcy91 bmlvbiBqb2luIG9mIGl0cyBuZXN0ZWQgY29sdW1ucy4KKyAqIFNpbXBsZSBhbmQgb3V0ZXIvaW5u ZXIgcGxhbnMgYXJlIHRyYW5zZm9ybWVkIGludG8gYSBKc29uVGFibGVQbGFuIGJ5CisgKiBmaW5k aW5nIGFuZCB0cmFuc2Zvcm1pbmcgY29ycmVzcG9uZGluZyBuZXN0ZWQgY29sdW1uLgorICogU2li bGluZyBwbGFucyBhcmUgcmVjdXJzaXZlbHkgdHJhbnNmb3JtZWQgaW50byBhIEpzb25UYWJsZVNp YmxpbmcuCisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUpzb25UYWJsZUNoaWxkUGxhbihK c29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsCisJCQkJCQkJSnNvblRhYmxlUGxhblNwZWMgKnBs YW4sCisJCQkJCQkJTGlzdCAqY29sdW1ucykKK3sKKwlKc29uVGFibGVDb2x1bW4gKmp0YyA9IE5V TEw7CisKKwlpZiAoIXBsYW4gfHwgcGxhbi0+cGxhbl90eXBlID09IEpTVFBfREVGQVVMVCkKKwl7 CisJCS8qIHVuc3BlY2lmaWVkIG9yIGRlZmF1bHQgcGxhbiAqLworCQlOb2RlCSAgICpyZXMgPSBO VUxMOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJY3Jvc3MgPSBwbGFuICYmIChwbGFuLT5q b2luX3R5cGUgJiBKU1RQX0pPSU5fQ1JPU1MpOworCisJCS8qIHRyYW5zZm9ybSBhbGwgbmVzdGVk IGNvbHVtbnMgaW50byBjcm9zcy91bmlvbiBqb2luICovCisJCWZvcmVhY2gobGMsIGNvbHVtbnMp CisJCXsKKwkJCUpzb25UYWJsZUNvbHVtbiAqY29sID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1u LCBsZmlyc3QobGMpKTsKKwkJCU5vZGUJICAgKm5vZGU7CisKKwkJCWlmIChjb2wtPmNvbHR5cGUg IT0gSlRDX05FU1RFRCkKKwkJCQljb250aW51ZTsKKworCQkJbm9kZSA9IHRyYW5zZm9ybU5lc3Rl ZEpzb25UYWJsZUNvbHVtbihjeHQsIGNvbCwgcGxhbik7CisKKwkJCS8qIGpvaW4gdHJhbnNmb3Jt ZWQgbm9kZSB3aXRoIHByZXZpb3VzIHNpYmxpbmcgbm9kZXMgKi8KKwkJCXJlcyA9IHJlcyA/IG1h a2VKc29uVGFibGVTaWJsaW5nSm9pbihjcm9zcywgcmVzLCBub2RlKSA6IG5vZGU7CisJCX0KKwor CQlyZXR1cm4gcmVzOworCX0KKwllbHNlIGlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1Q TEUpCisJeworCQlqdGMgPSBmaW5kTmVzdGVkSnNvblRhYmxlQ29sdW1uKGNvbHVtbnMsIHBsYW4t PnBhdGhuYW1lKTsKKwl9CisJZWxzZSBpZiAocGxhbi0+cGxhbl90eXBlID09IEpTVFBfSk9JTkVE KQorCXsKKwkJaWYgKHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fSU5ORVIgfHwKKwkJCXBs YW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fT1VURVIpCisJCXsKKwkJCUFzc2VydChwbGFuLT5w bGFuMS0+cGxhbl90eXBlID09IEpTVFBfU0lNUExFKTsKKwkJCWp0YyA9IGZpbmROZXN0ZWRKc29u VGFibGVDb2x1bW4oY29sdW1ucywgcGxhbi0+cGxhbjEtPnBhdGhuYW1lKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCU5vZGUJICAgKm5vZGUxID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4 dCwgcGxhbi0+cGxhbjEsCisJCQkJCQkJCQkJCQkJCQljb2x1bW5zKTsKKwkJCU5vZGUJICAgKm5v ZGUyID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4dCwgcGxhbi0+cGxhbjIsCisJCQkJ CQkJCQkJCQkJCQljb2x1bW5zKTsKKworCQkJcmV0dXJuIG1ha2VKc29uVGFibGVTaWJsaW5nSm9p bihwbGFuLT5qb2luX3R5cGUgPT0gSlNUUF9KT0lOX0NST1NTLAorCQkJCQkJCQkJCQlub2RlMSwg bm9kZTIpOworCQl9CisJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgSlNPTl9UQUJM RSBwbGFuIHR5cGUgJWQiLCBwbGFuLT5wbGFuX3R5cGUpOworCisJaWYgKCFqdGMpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCSBlcnJt c2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVzZSIpLAorCQkJCSBlcnJkZXRhaWwoIlBB VEggbmFtZSB3YXMgJXMgbm90IGZvdW5kIGluIG5lc3RlZCBjb2x1bW5zIGxpc3QuIiwKKwkJCQkJ CSAgIHBsYW4tPnBhdGhuYW1lKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRl LCBwbGFuLT5sb2NhdGlvbikpKTsKKworCXJldHVybiB0cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVD b2x1bW4oY3h0LCBqdGMsIHBsYW4pOworfQorCisvKiBDaGVjayB3aGV0aGVyIHR5cGUgaXMganNv bi9qc29uYiwgYXJyYXksIG9yIHJlY29yZC4gKi8KK3N0YXRpYyBib29sCit0eXBlSXNDb21wb3Np dGUoT2lkIHR5cGlkKQoreworCWNoYXIJCXR5cHR5cGU7CisKKwlpZiAodHlwaWQgPT0gSlNPTk9J RCB8fAorCQl0eXBpZCA9PSBKU09OQk9JRCB8fAorCQl0eXBpZCA9PSBSRUNPUkRPSUQgfHwKKwkJ dHlwZV9pc19hcnJheSh0eXBpZCkpCisJCXJldHVybiB0cnVlOworCisJdHlwdHlwZSA9IGdldF90 eXB0eXBlKHR5cGlkKTsKKworCWlmICh0eXB0eXBlID09IFRZUFRZUEVfQ09NUE9TSVRFKQorCQly ZXR1cm4gdHJ1ZTsKKworCWlmICh0eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQorCQlyZXR1cm4g dHlwZUlzQ29tcG9zaXRlKGdldEJhc2VUeXBlKHR5cGlkKSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qIEFwcGVuZCB0cmFuc2Zvcm1lZCBub24tbmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucyB0 byB0aGUgVGFibGVGdW5jIG5vZGUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRKc29uVGFibGVDb2x1 bW5zKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgTGlzdCAqY29sdW1ucykKK3sKKwlMaXN0 Q2VsbCAgICpjb2w7CisJUGFyc2VTdGF0ZSAqcHN0YXRlID0gY3h0LT5wc3RhdGU7CisJSnNvblRh YmxlICAqanQgPSBjeHQtPnRhYmxlOworCVRhYmxlRnVuYyAgKnRmID0gY3h0LT50YWJsZWZ1bmM7 CisJYm9vbAkJb3JkaW5hbGl0eV9mb3VuZCA9IGZhbHNlOworCUpzb25CZWhhdmlvciAqb25fZXJy b3IgPSBqdC0+b25fZXJyb3I7CisJYm9vbAkJZXJyb3JPbkVycm9yID0gb25fZXJyb3IgJiYKKwkJ b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisKKwlmb3JlYWNoKGNvbCwg Y29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNvbHVtbiAqcmF3YyA9IGNhc3ROb2RlKEpzb25UYWJs ZUNvbHVtbiwgbGZpcnN0KGNvbCkpOworCQlPaWQJCQl0eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsK KwkJTm9kZQkgICAqY29sZXhwcjsKKworCQlpZiAocmF3Yy0+bmFtZSkKKwkJCXRmLT5jb2xuYW1l cyA9IGxhcHBlbmQodGYtPmNvbG5hbWVzLAorCQkJCQkJCQkgICBtYWtlU3RyaW5nKHBzdHJkdXAo cmF3Yy0+bmFtZSkpKTsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgdGhlIHR5cGUgYW5kIHR5cG1v ZCBmb3IgdGhlIG5ldyBjb2x1bW4uIEZPUiBPUkRJTkFMSVRZCisJCSAqIGNvbHVtbnMgYXJlIElO VEVHRVIgYnkgc3RhbmRhcmQ7IHRoZSBvdGhlcnMgYXJlIHVzZXItc3BlY2lmaWVkLgorCQkgKi8K KwkJc3dpdGNoIChyYXdjLT5jb2x0eXBlKQorCQl7CisJCQljYXNlIEpUQ19GT1JfT1JESU5BTElU WToKKwkJCQlpZiAob3JkaW5hbGl0eV9mb3VuZCkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJIGVycm1zZygiY2Fubm90 IHVzZSBtb3JlIHRoYW4gb25lIEZPUiBPUkRJTkFMSVRZIGNvbHVtbiIpLAorCQkJCQkJCSBwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5sb2NhdGlvbikpKTsKKwkJCQlvcmRpbmFsaXR5 X2ZvdW5kID0gdHJ1ZTsKKwkJCQljb2xleHByID0gTlVMTDsKKwkJCQl0eXBpZCA9IElOVDRPSUQ7 CisJCQkJdHlwbW9kID0gLTE7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSlRDX1JFR1VMQVI6CisJ CQkJdHlwZW5hbWVUeXBlSWRBbmRNb2QocHN0YXRlLCByYXdjLT50eXBlTmFtZSwgJnR5cGlkLCAm dHlwbW9kKTsKKworCQkJCS8qCisJCQkJICogVXNlIGltcGxpY2l0IEZPUk1BVCBKU09OIGZvciBj b21wb3NpdGUgdHlwZXMgKGFycmF5cyBhbmQKKwkJCQkgKiByZWNvcmRzKSBvciBpZiBhIG5vbi1k ZWZhdWx0IFdSQVBQRVIgLyBRVU9URVMgYmVoYXZpb3IKKwkJCQkgKiBpcyBzcGVjaWZpZWQuCisJ CQkJICovCisJCQkJaWYgKHR5cGVJc0NvbXBvc2l0ZSh0eXBpZCkgfHwKKwkJCQkJcmF3Yy0+cXVv dGVzICE9IEpTX1FVT1RFU19VTlNQRUMgfHwKKwkJCQkJcmF3Yy0+d3JhcHBlciAhPSBKU1dfVU5T UEVDKQorCQkJCQlyYXdjLT5jb2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKworCQkJCS8qIEZBTExU SFJPVUdIICovCisJCQljYXNlIEpUQ19GT1JNQVRURUQ6CisJCQljYXNlIEpUQ19FWElTVFM6CisJ CQkJeworCQkJCQlOb2RlCSAgICpqZTsKKwkJCQkJQ2FzZVRlc3RFeHByICpwYXJhbSA9IG1ha2VO b2RlKENhc2VUZXN0RXhwcik7CisKKwkJCQkJcGFyYW0tPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7 CisJCQkJCXBhcmFtLT50eXBlSWQgPSBjeHQtPmNvbnRleHRJdGVtVHlwaWQ7CisJCQkJCXBhcmFt LT50eXBlTW9kID0gLTE7CisKKwkJCQkJamUgPSB0cmFuc2Zvcm1Kc29uVGFibGVDb2x1bW4ocmF3 YywgKE5vZGUgKikgcGFyYW0sCisJCQkJCQkJCQkJCQkgIE5JTCwgZXJyb3JPbkVycm9yKTsKKwor CQkJCQljb2xleHByID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIGplLCBFWFBSX0tJTkRfRlJPTV9G VU5DVElPTik7CisJCQkJCWFzc2lnbl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCBjb2xleHByKTsK KworCQkJCQl0eXBpZCA9IGV4cHJUeXBlKGNvbGV4cHIpOworCQkJCQl0eXBtb2QgPSBleHByVHlw bW9kKGNvbGV4cHIpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgSlRDX05FU1RFRDoK KwkJCQljb250aW51ZTsKKworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5rbm93biBK U09OX1RBQkxFIGNvbHVtbiB0eXBlOiAlZCIsIHJhd2MtPmNvbHR5cGUpOworCQkJCWJyZWFrOwor CQl9CisKKwkJdGYtPmNvbHR5cGVzID0gbGFwcGVuZF9vaWQodGYtPmNvbHR5cGVzLCB0eXBpZCk7 CisJCXRmLT5jb2x0eXBtb2RzID0gbGFwcGVuZF9pbnQodGYtPmNvbHR5cG1vZHMsIHR5cG1vZCk7 CisJCXRmLT5jb2xjb2xsYXRpb25zID0gbGFwcGVuZF9vaWQodGYtPmNvbGNvbGxhdGlvbnMsIGdl dF90eXBjb2xsYXRpb24odHlwaWQpKTsKKwkJdGYtPmNvbHZhbGV4cHJzID0gbGFwcGVuZCh0Zi0+ Y29sdmFsZXhwcnMsIGNvbGV4cHIpOworCX0KK30KKworLyoKKyAqIENyZWF0ZSB0cmFuc2Zvcm1l ZCBKU09OX1RBQkxFIHBhcmVudCBwbGFuIG5vZGUgYnkgYXBwZW5kaW5nIGFsbCBub24tbmVzdGVk CisgKiBjb2x1bW5zIHRvIHRoZSBUYWJsZUZ1bmMgbm9kZSBhbmQgcmVtZW1iZXJpbmcgdGhlaXIg aW5kaWNlcyBpbiB0aGUKKyAqIGNvbHZhbGV4cHJzIGxpc3QuCisgKi8KK3N0YXRpYyBKc29uVGFi bGVQbGFuICoKK21ha2VQYXJlbnRKc29uVGFibGVQbGFuKEpzb25UYWJsZVBhcnNlQ29udGV4dCAq IGN4dCwgSnNvblRhYmxlUGF0aFNwZWMgKnBhdGhzcGVjLAorCQkJCQkJTGlzdCAqY29sdW1ucykK K3sKKwlKc29uVGFibGVQbGFuICpwbGFuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7CisJSnNv bkJlaGF2aW9yICpvbl9lcnJvciA9IGN4dC0+dGFibGUtPm9uX2Vycm9yOworCWNoYXIJCSAqcGF0 aHN0cmluZzsKKwlDb25zdAkJICp2YWx1ZTsKKworCUFzc2VydChJc0EocGF0aHNwZWMtPnN0cmlu ZywgQV9Db25zdCkpOworCXBhdGhzdHJpbmcgPSBjYXN0Tm9kZShBX0NvbnN0LCBwYXRoc3BlYy0+ c3RyaW5nKS0+dmFsLnN2YWwuc3ZhbDsKKwl2YWx1ZSA9IG1ha2VDb25zdChKU09OUEFUSE9JRCwg LTEsIEludmFsaWRPaWQsIC0xLAorCQkJCQkgIERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbnBhdGhf aW4sCisJCQkJCQkJCQkJICBDU3RyaW5nR2V0RGF0dW0ocGF0aHN0cmluZykpLAorCQkJCQkgIGZh bHNlLCBmYWxzZSk7CisJcGxhbi0+cGF0aCA9IG1ha2VKc29uVGFibGVQYXRoKHZhbHVlLCBwYXRo c3BlYy0+bmFtZSk7CisKKwkvKiBzYXZlIHN0YXJ0IG9mIGNvbHVtbiByYW5nZSAqLworCXBsYW4t PmNvbE1pbiA9IGxpc3RfbGVuZ3RoKGN4dC0+dGFibGVmdW5jLT5jb2x2YWxleHBycyk7CisKKwlh cHBlbmRKc29uVGFibGVDb2x1bW5zKGN4dCwgY29sdW1ucyk7CisKKwkvKiBzYXZlIGVuZCBvZiBj b2x1bW4gcmFuZ2UgKi8KKwlwbGFuLT5jb2xNYXggPSBsaXN0X2xlbmd0aChjeHQtPnRhYmxlZnVu Yy0+Y29sdmFsZXhwcnMpIC0gMTsKKworCXBsYW4tPmVycm9yT25FcnJvciA9IG9uX2Vycm9yICYm IG9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SOworCisJcmV0dXJuIHBsYW47 Cit9CisKK3N0YXRpYyBKc29uVGFibGVQbGFuICoKK3RyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMo SnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LAorCQkJCQkJICBKc29uVGFibGVQbGFuU3BlYyAq cGxhbnNwZWMsCisJCQkJCQkgIExpc3QgKmNvbHVtbnMsCisJCQkJCQkgIEpzb25UYWJsZVBhdGhT cGVjICpwYXRoc3BlYykKK3sKKwlKc29uVGFibGVQbGFuICpwbGFuOworCUpzb25UYWJsZVBsYW5T cGVjICpjaGlsZFBsYW5TcGVjOworCWJvb2wJCWRlZmF1bHRQbGFuID0gcGxhbnNwZWMgPT0gTlVM TCB8fAorCQlwbGFuc3BlYy0+cGxhbl90eXBlID09IEpTVFBfREVGQVVMVDsKKworCWlmIChkZWZh dWx0UGxhbikKKwkJY2hpbGRQbGFuU3BlYyA9IHBsYW5zcGVjOworCWVsc2UKKwl7CisJCS8qIHZh bGlkYXRlIHBhcmVudCBhbmQgY2hpbGQgcGxhbnMgKi8KKwkJSnNvblRhYmxlUGxhblNwZWMgKnBh cmVudFBsYW5TcGVjOworCisJCWlmIChwbGFuc3BlYy0+cGxhbl90eXBlID09IEpTVFBfSk9JTkVE KQorCQl7CisJCQlpZiAocGxhbnNwZWMtPmpvaW5fdHlwZSAhPSBKU1RQX0pPSU5fSU5ORVIgJiYK KwkJCQlwbGFuc3BlYy0+am9pbl90eXBlICE9IEpTVFBfSk9JTl9PVVRFUikKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVy cm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlIiksCisJCQkJCQkgZXJyZGV0YWls KCJFeHBlY3RlZCBJTk5FUiBvciBPVVRFUi4iKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o Y3h0LT5wc3RhdGUsIHBsYW5zcGVjLT5sb2NhdGlvbikpKTsKKworCQkJcGFyZW50UGxhblNwZWMg PSBwbGFuc3BlYy0+cGxhbjE7CisJCQljaGlsZFBsYW5TcGVjID0gcGxhbnNwZWMtPnBsYW4yOwor CisJCQlBc3NlcnQocGFyZW50UGxhblNwZWMtPnBsYW5fdHlwZSAhPSBKU1RQX0pPSU5FRCk7CisJ CQlBc3NlcnQocGFyZW50UGxhblNwZWMtPnBhdGhuYW1lKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CXBhcmVudFBsYW5TcGVjID0gcGxhbnNwZWM7CisJCQljaGlsZFBsYW5TcGVjID0gTlVMTDsKKwkJ fQorCisJCWlmIChzdHJjbXAocGFyZW50UGxhblNwZWMtPnBhdGhuYW1lLCBwYXRoc3BlYy0+bmFt ZSkgIT0gMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4iKSwKKwkJCQkJ IGVycmRldGFpbCgiUEFUSCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCAlcyBidXQgJXMgaXMgZ2l2 ZW4uIiwKKwkJCQkJCQkgICBwYXRoc3BlYy0+bmFtZSwgcGFyZW50UGxhblNwZWMtPnBhdGhuYW1l KSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwgcGxhbnNwZWMtPmxvY2F0 aW9uKSkpOworCisJCXZhbGlkYXRlSnNvblRhYmxlQ2hpbGRQbGFuKGN4dC0+cHN0YXRlLCBjaGls ZFBsYW5TcGVjLCBjb2x1bW5zKTsKKwl9CisKKwkvKiB0cmFuc2Zvcm0gb25seSBub24tbmVzdGVk IGNvbHVtbnMgKi8KKwlwbGFuID0gbWFrZVBhcmVudEpzb25UYWJsZVBsYW4oY3h0LCBwYXRoc3Bl YywgY29sdW1ucyk7CisKKwlpZiAoY2hpbGRQbGFuU3BlYyB8fCBkZWZhdWx0UGxhbikKKwl7CisJ CS8qIHRyYW5zZm9ybSByZWN1cnNpdmVseSBuZXN0ZWQgY29sdW1ucyAqLworCQlwbGFuLT5jaGls ZCA9IHRyYW5zZm9ybUpzb25UYWJsZUNoaWxkUGxhbihjeHQsIGNoaWxkUGxhblNwZWMsIGNvbHVt bnMpOworCQlpZiAocGxhbi0+Y2hpbGQpCisJCQlwbGFuLT5vdXRlckpvaW4gPSBwbGFuc3BlYyA9 PSBOVUxMIHx8CisJCQkJKHBsYW5zcGVjLT5qb2luX3R5cGUgJiBKU1RQX0pPSU5fT1VURVIpOwor CQkvKiBlbHNlOiBkZWZhdWx0IHBsYW4gY2FzZSwgbm8gY2hpbGRyZW4gZm91bmQgKi8KKwl9CisK KwlyZXR1cm4gcGxhbjsKK30KKworLyoKKyAqIHRyYW5zZm9ybUpzb25UYWJsZSAtCisgKgkJCVRy YW5zZm9ybSBhIHJhdyBKc29uVGFibGUgaW50byBUYWJsZUZ1bmMuCisgKgorICogVHJhbnNmb3Jt IHRoZSBkb2N1bWVudC1nZW5lcmF0aW5nIGV4cHJlc3Npb24sIHRoZSByb3ctZ2VuZXJhdGluZyBl eHByZXNzaW9uLAorICogdGhlIGNvbHVtbi1nZW5lcmF0aW5nIGV4cHJlc3Npb25zLCBhbmQgdGhl IGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbnMuCisgKi8KK1BhcnNlTmFtZXNwYWNlSXRlbSAqCit0 cmFuc2Zvcm1Kc29uVGFibGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVGFibGUgKmp0KQorewor CUpzb25UYWJsZVBhcnNlQ29udGV4dCBjeHQ7CisJVGFibGVGdW5jICAqdGYgPSBtYWtlTm9kZShU YWJsZUZ1bmMpOworCUpzb25GdW5jRXhwciAqamZlID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsK KwlKc29uRXhwciAgICpqZTsKKwlKc29uVGFibGVQbGFuU3BlYyAqcGxhbiA9IGp0LT5wbGFuc3Bl YzsKKwlKc29uVGFibGVQYXRoU3BlYyAqcm9vdFBhdGhTcGVjID0ganQtPnBhdGhzcGVjOworCWJv b2wJCWlzX2xhdGVyYWw7CisKKwlBc3NlcnQoSXNBKHJvb3RQYXRoU3BlYy0+c3RyaW5nLCBBX0Nv bnN0KSAmJgorCQkgICBjYXN0Tm9kZShBX0NvbnN0LCByb290UGF0aFNwZWMtPnN0cmluZyktPnZh bC5ub2RlLnR5cGUgPT0gVF9TdHJpbmcpOworCisJY3h0LnBzdGF0ZSA9IHBzdGF0ZTsKKwljeHQu dGFibGUgPSBqdDsKKwljeHQudGFibGVmdW5jID0gdGY7CisJY3h0LnBhdGhOYW1lcyA9IE5JTDsK KwljeHQucGF0aE5hbWVJZCA9IDA7CisKKwlpZiAocm9vdFBhdGhTcGVjLT5uYW1lKQorCQlyZWdp c3Rlckpzb25UYWJsZVBhdGgoJmN4dCwgcm9vdFBhdGhTcGVjLT5uYW1lLAorCQkJCQkJCSAgcm9v dFBhdGhTcGVjLT5uYW1lX2xvY2F0aW9uKTsKKwllbHNlCisJeworCQlpZiAoanQtPnBsYW5zcGVj ICE9IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRB WF9FUlJPUiksCisJCQkJCSBlcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBleHByZXNzaW9uIiks CisJCQkJCSBlcnJkZXRhaWwoIkpTT05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4iCisJCQkJCQkJ ICAgIiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZpY2F0aW9uIGlmIgorCQkJCQkJCSAgICIg ZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIpLAorCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9u KHBzdGF0ZSwgcm9vdFBhdGhTcGVjLT5sb2NhdGlvbikpKTsKKworCQlyb290UGF0aFNwZWMtPm5h bWUgPSBnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKCZjeHQpOworCX0KKworCXJlZ2lzdGVyQWxs SnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKCZjeHQsIGp0LT5jb2x1bW5zKTsKKworCWpmZS0+b3Ag PSBKU09OX1RBQkxFX09QOworCWpmZS0+Y29udGV4dF9pdGVtID0JanQtPmNvbnRleHRfaXRlbTsK KwlqZmUtPnBhdGhzcGVjID0gKE5vZGUgKikgcm9vdFBhdGhTcGVjLT5zdHJpbmc7CisJamZlLT5w YXRobmFtZSA9IHJvb3RQYXRoU3BlYy0+bmFtZTsKKwlqZmUtPnBhc3NpbmcgPSBqdC0+cGFzc2lu ZzsKKwlqZmUtPm9uX2VtcHR5ID0gTlVMTDsKKwlqZmUtPm9uX2Vycm9yID0ganQtPm9uX2Vycm9y OworCWpmZS0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247CisKKwkvKgorCSAqIFdlIG1ha2UgbGF0 ZXJhbF9vbmx5IG5hbWVzIG9mIHRoaXMgbGV2ZWwgdmlzaWJsZSwgd2hldGhlciBvciBub3QgdGhl CisJICogUmFuZ2VUYWJsZUZ1bmMgaXMgZXhwbGljaXRseSBtYXJrZWQgTEFURVJBTC4gIFRoaXMg aXMgbmVlZGVkIGZvciBTUUwKKwkgKiBzcGVjIGNvbXBsaWFuY2UgYW5kIHNlZW1zIHVzZWZ1bCBv biBjb252ZW5pZW5jZSBncm91bmRzIGZvciBhbGwKKwkgKiBmdW5jdGlvbnMgaW4gRlJPTS4KKwkg KgorCSAqIChMQVRFUkFMIGNhbid0IG5lc3Qgd2l0aGluIGEgc2luZ2xlIHBzdGF0ZSBsZXZlbCwg c28gd2UgZG9uJ3QgbmVlZAorCSAqIHNhdmUvcmVzdG9yZSBsb2dpYyBoZXJlLikKKwkgKi8KKwlB c3NlcnQoIXBzdGF0ZS0+cF9sYXRlcmFsX2FjdGl2ZSk7CisJcHN0YXRlLT5wX2xhdGVyYWxfYWN0 aXZlID0gdHJ1ZTsKKworCXRmLT5mdW5jdHlwZSA9IFRGVF9KU09OX1RBQkxFOworCXRmLT5kb2Nl eHByID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIChOb2RlICopIGpmZSwgRVhQUl9LSU5EX0ZST01f RlVOQ1RJT04pOworCisJY3h0LmNvbnRleHRJdGVtVHlwaWQgPSBleHByVHlwZSh0Zi0+ZG9jZXhw cik7CisKKwl0Zi0+cGxhbiA9IChOb2RlICopIHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoJmN4 dCwgcGxhbiwganQtPmNvbHVtbnMsCisJCQkJCQkJCQkJCQkgIHJvb3RQYXRoU3BlYyk7CisKKwkv KiBBbHNvIHNhdmUgYSBjb3B5IG9mIHRoZSBQQVNTSU5HIGFyZ3VtZW50cyBpbiB0aGUgVGFibGVG dW5jIG5vZGUuICovCisJamUgPSAoSnNvbkV4cHIgKikgdGYtPmRvY2V4cHI7CisJdGYtPnBhc3Np bmd2YWxleHBycyA9IGNvcHlPYmplY3QoamUtPnBhc3NpbmdfdmFsdWVzKTsKKworCXRmLT5vcmRp bmFsaXR5Y29sID0gLTE7CQkvKiB1bmRlZmluZSBvcmRpbmFsaXR5IGNvbHVtbiBudW1iZXIgKi8K Kwl0Zi0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247CisKKwlwc3RhdGUtPnBfbGF0ZXJhbF9hY3Rp dmUgPSBmYWxzZTsKKworCS8qCisJICogTWFyayB0aGUgUlRFIGFzIExBVEVSQUwgaWYgdGhlIHVz ZXIgc2FpZCBMQVRFUkFMIGV4cGxpY2l0bHksIG9yIGlmCisJICogdGhlcmUgYXJlIGFueSBsYXRl cmFsIGNyb3NzLXJlZmVyZW5jZXMgaW4gaXQuCisJICovCisJaXNfbGF0ZXJhbCA9IGp0LT5sYXRl cmFsIHx8IGNvbnRhaW5fdmFyc19vZl9sZXZlbCgoTm9kZSAqKSB0ZiwgMCk7CisKKwlyZXR1cm4g YWRkUmFuZ2VUYWJsZUVudHJ5Rm9yVGFibGVGdW5jKHBzdGF0ZSwKKwkJCQkJCQkJCQkgIHRmLCBq dC0+YWxpYXMsIGlzX2xhdGVyYWwsIHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYwppbmRleCA2NWU1NGFiZGQxLi5jMmUzZTY1Y2M2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf cmVsYXRpb24uYwpAQCAtMjA3NywxMyArMjA3NywxNSBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JU YWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXJ0ZS0+cmVsaWQgPSBJbnZhbGlkT2lkOwog CXJ0ZS0+c3VicXVlcnkgPSBOVUxMOwogCXJ0ZS0+dGFibGVmdW5jID0gdGY7Ci0JcnRlLT50YWJs ZWZ1bmNfbmFtZSA9IHBzdHJkdXAoIlhNTFRBQkxFIik7CisJcnRlLT50YWJsZWZ1bmNfbmFtZSA9 IHBzdHJkdXAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSA/CisJCQkJCQkJCSAgIlhNTFRB QkxFIiA6ICJKU09OX1RBQkxFIik7CiAJcnRlLT5jb2x0eXBlcyA9IHRmLT5jb2x0eXBlczsKIAly dGUtPmNvbHR5cG1vZHMgPSB0Zi0+Y29sdHlwbW9kczsKIAlydGUtPmNvbGNvbGxhdGlvbnMgPSB0 Zi0+Y29sY29sbGF0aW9uczsKIAlydGUtPmFsaWFzID0gYWxpYXM7CiAKLQlyZWZuYW1lID0gYWxp YXMgPyBhbGlhcy0+YWxpYXNuYW1lIDogcHN0cmR1cCgieG1sdGFibGUiKTsKKwlyZWZuYW1lID0g YWxpYXMgPyBhbGlhcy0+YWxpYXNuYW1lIDoKKwkJcHN0cmR1cCh0Zi0+ZnVuY3R5cGUgPT0gVEZU X1hNTFRBQkxFID8gInhtbHRhYmxlIiA6ICJqc29uX3RhYmxlIik7CiAJZXJlZiA9IGFsaWFzID8g Y29weU9iamVjdChhbGlhcykgOiBtYWtlQWxpYXMocmVmbmFtZSwgTklMKTsKIAludW1hbGlhc2Vz ID0gbGlzdF9sZW5ndGgoZXJlZi0+Y29sbmFtZXMpOwogCkBAIC0yMDk2LDcgKzIwOTgsNyBAQCBh ZGRSYW5nZVRhYmxlRW50cnlGb3JUYWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNF KSwKIAkJCQkgZXJybXNnKCIlcyBmdW5jdGlvbiBoYXMgJWQgY29sdW1ucyBhdmFpbGFibGUgYnV0 ICVkIGNvbHVtbnMgc3BlY2lmaWVkIiwKLQkJCQkJCSJYTUxUQUJMRSIsCisJCQkJCQl0Zi0+ZnVu Y3R5cGUgPT0gVEZUX1hNTFRBQkxFID8gIlhNTFRBQkxFIiA6ICJKU09OX1RBQkxFIiwKIAkJCQkJ CWxpc3RfbGVuZ3RoKHRmLT5jb2xuYW1lcyksIG51bWFsaWFzZXMpKSk7CiAKIAlydGUtPmVyZWYg PSBlcmVmOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCmluZGV4IGVhNWFjNmJhZmUuLmEzMzFl YTMyNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKQEAgLTIwMDIsNiArMjAwMiw5IEBA IEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCQljYXNl IEpTT05fVkFMVUVfT1A6CiAJCQkJCSpuYW1lID0gImpzb25fdmFsdWUiOwogCQkJCQlyZXR1cm4g MjsKKwkJCQljYXNlIEpTT05fVEFCTEVfT1A6CisJCQkJCSpuYW1lID0gImpzb25fdGFibGUiOwor CQkJCQlyZXR1cm4gMjsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29ucGF0aF9leGVjLmMKaW5kZXggY2VjMGYzZGQ2NS4uYzY5MzhiZmE1NyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCkBAIC02MSwxMCArNjEsMTIgQEAKIAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0V4cHIuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgi CiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJyZWdleC9yZWdleC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvZGF0ZS5oIgpAQCAtNzUsNiArNzcsOCBAQAogI2luY2x1ZGUgInV0aWxz L2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9qc29ucGF0 aC5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFy bGVuYS5oIgogCkBAIC0xNTksNiArMTYzLDYwIEBAIHR5cGVkZWYgc3RydWN0IEpzb25WYWx1ZUxp c3RJdGVyYXRvcgogCUxpc3RDZWxsICAgKm5leHQ7CiB9IEpzb25WYWx1ZUxpc3RJdGVyYXRvcjsK IAorLyogU3RydWN0dXJlcyBmb3IgSlNPTl9UQUJMRSBleGVjdXRpb24gICovCisKK3R5cGVkZWYg ZW51bSBKc29uVGFibGVQbGFuU3RhdGVUeXBlCit7CisJSlNPTl9UQUJMRV9TQ0FOX1NUQVRFID0g MCwKKwlKU09OX1RBQkxFX0pPSU5fU1RBVEUsCit9CQkJSnNvblRhYmxlUGxhblN0YXRlVHlwZTsK KwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlUGxhblN0YXRlCit7CisJSnNvblRhYmxlUGxhblN0 YXRlVHlwZSB0eXBlOworCisJc3RydWN0IEpzb25UYWJsZVBsYW5TdGF0ZSAqcGFyZW50OworCXN0 cnVjdCBKc29uVGFibGVQbGFuU3RhdGUgKm5lc3RlZDsKK30JCQlKc29uVGFibGVQbGFuU3RhdGU7 CisKK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVNjYW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5T dGF0ZSBwbGFuOworCisJTWVtb3J5Q29udGV4dCBtY3h0OworCUpzb25QYXRoICAgKnBhdGg7CisJ TGlzdAkgICAqYXJnczsKKwlKc29uVmFsdWVMaXN0IGZvdW5kOworCUpzb25WYWx1ZUxpc3RJdGVy YXRvciBpdGVyOworCURhdHVtCQljdXJyZW50OworCWludAkJCW9yZGluYWw7CisJYm9vbAkJY3Vy cmVudElzTnVsbDsKKwlib29sCQlvdXRlckpvaW47CisJYm9vbAkJZXJyb3JPbkVycm9yOworCWJv b2wJCWFkdmFuY2VOZXN0ZWQ7CisJYm9vbAkJcmVzZXQ7Cit9IEpzb25UYWJsZVNjYW5TdGF0ZTsK KwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlSm9pblN0YXRlCit7CisJSnNvblRhYmxlUGxhblN0 YXRlIHBsYW47CisKKwlKc29uVGFibGVQbGFuU3RhdGUgKmxlZnQ7CisJSnNvblRhYmxlUGxhblN0 YXRlICpyaWdodDsKKwlib29sCQljcm9zczsKKwlib29sCQlhZHZhbmNlUmlnaHQ7Cit9IEpzb25U YWJsZUpvaW5TdGF0ZTsKKworLyogcmFuZG9tIG51bWJlciB0byBpZGVudGlmeSBKc29uVGFibGVF eGVjQ29udGV4dCAqLworI2RlZmluZSBKU09OX1RBQkxFX0VYRUNfQ09OVEVYVF9NQUdJQwkJNDE4 MzUyODY3CisKK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZUV4ZWNDb250ZXh0Cit7CisJaW50CQkJ bWFnaWM7CisJSnNvblRhYmxlU2NhblN0YXRlICoqY29sZXhwcnNjYW5zOworCUpzb25UYWJsZVNj YW5TdGF0ZSAqcm9vdDsKK30JCQlKc29uVGFibGVFeGVjQ29udGV4dDsKKwogLyogc3RyaWN0L2xh eCBmbGFncyBpcyBkZWNvbXBvc2VkIGludG8gZm91ciBbdW5dd3JhcC9lcnJvciBmbGFncyAqLwog I2RlZmluZSBqc3BTdHJpY3RBYnNlbmNlT2ZFcnJvcnMoY3h0KQkoIShjeHQpLT5sYXhNb2RlKQog I2RlZmluZSBqc3BBdXRvVW53cmFwKGN4dCkJCQkJKChjeHQpLT5sYXhNb2RlKQpAQCAtMjU4LDYg KzMxNiw3IEBAIHN0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgZ2V0QXJyYXlJbmRleChKc29uUGF0 aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJSnNvblBhdGhJdGVtICpqc3AsIEpzb25iVmFs dWUgKmpiLCBpbnQzMiAqaW5kZXgpOwogc3RhdGljIEpzb25CYXNlT2JqZWN0SW5mbyBzZXRCYXNl T2JqZWN0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQlKc29uYlZhbHVlICpq YnYsIGludDMyIGlkKTsKK3N0YXRpYyB2b2lkIEpzb25WYWx1ZUxpc3RDbGVhcihKc29uVmFsdWVM aXN0ICpqdmwpOwogc3RhdGljIHZvaWQgSnNvblZhbHVlTGlzdEFwcGVuZChKc29uVmFsdWVMaXN0 ICpqdmwsIEpzb25iVmFsdWUgKmpidik7CiBzdGF0aWMgaW50CUpzb25WYWx1ZUxpc3RMZW5ndGgo Y29uc3QgSnNvblZhbHVlTGlzdCAqanZsKTsKIHN0YXRpYyBib29sIEpzb25WYWx1ZUxpc3RJc0Vt cHR5KEpzb25WYWx1ZUxpc3QgKmp2bCk7CkBAIC0yNzUsNiArMzM0LDMyIEBAIHN0YXRpYyBKc29u YlZhbHVlICp3cmFwSXRlbXNJbkFycmF5KGNvbnN0IEpzb25WYWx1ZUxpc3QgKml0ZW1zKTsKIHN0 YXRpYyBpbnQJY29tcGFyZURhdGV0aW1lKERhdHVtIHZhbDEsIE9pZCB0eXBpZDEsIERhdHVtIHZh bDIsIE9pZCB0eXBpZDIsCiAJCQkJCQkJYm9vbCB1c2VUeiwgYm9vbCAqY2FzdF9lcnJvcik7CiAK Kworc3RhdGljIEpzb25UYWJsZVBsYW5TdGF0ZSAqIEpzb25UYWJsZUluaXRQbGFuU3RhdGUoSnNv blRhYmxlRXhlY0NvbnRleHQgKiBjeHQsCisJCQkJCQkJCQkJCQkgICBOb2RlICpwbGFuLAorCQkJ CQkJCQkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICogcGFyZW50KTsKK3N0YXRpYyBib29sIEpz b25UYWJsZVBsYW5OZXh0Um93KEpzb25UYWJsZVBsYW5TdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBi b29sIEpzb25UYWJsZVNjYW5OZXh0Um93KEpzb25UYWJsZVNjYW5TdGF0ZSAqc2Nhbik7CisKK3N0 YXRpYyB2b2lkIEpzb25UYWJsZUluaXRPcGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwg aW50IG5hdHRzKTsKK3N0YXRpYyB2b2lkIEpzb25UYWJsZVNldERvY3VtZW50KFRhYmxlRnVuY1Nj YW5TdGF0ZSAqc3RhdGUsIERhdHVtIHZhbHVlKTsKK3N0YXRpYyBib29sIEpzb25UYWJsZUZldGNo Um93KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUpOworc3RhdGljIERhdHVtIEpzb25UYWJsZUdl dFZhbHVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBjb2xudW0sCisJCQkJICBPaWQg dHlwaWQsIGludDMyIHR5cG1vZCwgYm9vbCAqaXNudWxsKTsKK3N0YXRpYyB2b2lkIEpzb25UYWJs ZURlc3Ryb3lPcGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSk7CisKK2NvbnN0IFRhYmxl RnVuY1JvdXRpbmUgSnNvbmJUYWJsZVJvdXRpbmUgPQoreworCUpzb25UYWJsZUluaXRPcGFxdWUs CisJSnNvblRhYmxlU2V0RG9jdW1lbnQsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJSnNvblRh YmxlRmV0Y2hSb3csCisJSnNvblRhYmxlR2V0VmFsdWUsCisJSnNvblRhYmxlRGVzdHJveU9wYXF1 ZQorfTsKKwogLyoqKioqKioqKioqKioqKioqKiBVc2VyIGludGVyZmFjZSB0byBKc29uUGF0aCBl eGVjdXRvciAqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTI2NjEsNiArMjc0NiwxMyBA QCBzZXRCYXNlT2JqZWN0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvbmJWYWx1ZSAqamJ2 LCBpbnQzMiBpZCkKIAlyZXR1cm4gYmFzZU9iamVjdDsKIH0KIAorc3RhdGljIHZvaWQKK0pzb25W YWx1ZUxpc3RDbGVhcihKc29uVmFsdWVMaXN0ICpqdmwpCit7CisJanZsLT5zaW5nbGV0b24gPSBO VUxMOworCWp2bC0+bGlzdCA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkCiBKc29uVmFsdWVMaXN0 QXBwZW5kKEpzb25WYWx1ZUxpc3QgKmp2bCwgSnNvbmJWYWx1ZSAqamJ2KQogewpAQCAtMzE5Niwz ICszMjg4LDQ1OCBAQCBKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wg KmVtcHR5LCBib29sICplcnJvciwgTGlzdCAqdmFycykKIAogCXJldHVybiByZXM7CiB9CisKKy8q KioqKioqKioqKioqKioqKioqKioqKiogSlNPTl9UQUJMRSBmdW5jdGlvbnMgKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKgorICogUmV0dXJucyBwcml2YXRlIGRhdGEgZnJvbSBleGVj dXRvciBzdGF0ZS4gRW5zdXJlIHZhbGlkaXR5IGJ5IGNoZWNrIHdpdGgKKyAqIE1BR0lDIG51bWJl ci4KKyAqLworc3RhdGljIGlubGluZSBKc29uVGFibGVFeGVjQ29udGV4dCAqCitHZXRKc29uVGFi bGVFeGVjQ29udGV4dChUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbmFt ZSkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqcmVzdWx0OworCisJaWYgKCFJc0Eoc3RhdGUs IFRhYmxlRnVuY1NjYW5TdGF0ZSkpCisJCWVsb2coRVJST1IsICIlcyBjYWxsZWQgd2l0aCBpbnZh bGlkIFRhYmxlRnVuY1NjYW5TdGF0ZSIsIGZuYW1lKTsKKwlyZXN1bHQgPSAoSnNvblRhYmxlRXhl Y0NvbnRleHQgKikgc3RhdGUtPm9wYXF1ZTsKKwlpZiAocmVzdWx0LT5tYWdpYyAhPSBKU09OX1RB QkxFX0VYRUNfQ09OVEVYVF9NQUdJQykKKwkJZWxvZyhFUlJPUiwgIiVzIGNhbGxlZCB3aXRoIGlu dmFsaWQgVGFibGVGdW5jU2NhblN0YXRlIiwgZm5hbWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyogUmVjdXJzaXZlbHkgaW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gLyBqb2luIHN0YXRl ICovCitzdGF0aWMgSnNvblRhYmxlSm9pblN0YXRlICoKK0pzb25UYWJsZUluaXRKb2luU3RhdGUo SnNvblRhYmxlRXhlY0NvbnRleHQgKiBjeHQsIEpzb25UYWJsZVNpYmxpbmcgKnBsYW4sCisJCQkJ CSAgIEpzb25UYWJsZVBsYW5TdGF0ZSAqIHBhcmVudCkKK3sKKwlKc29uVGFibGVKb2luU3RhdGUg KmpvaW4gPSBwYWxsb2MwKHNpemVvZigqam9pbikpOworCisJam9pbi0+cGxhbi50eXBlID0gSlNP Tl9UQUJMRV9KT0lOX1NUQVRFOworCS8qIHBhcmVudCBhbmQgbmVzdGVkIG5vdCBzZXQuICovCisK Kwlqb2luLT5jcm9zcyA9IHBsYW4tPmNyb3NzOworCWpvaW4tPmxlZnQgPSBKc29uVGFibGVJbml0 UGxhblN0YXRlKGN4dCwgcGxhbi0+bGFyZywgcGFyZW50KTsKKwlqb2luLT5yaWdodCA9IEpzb25U YWJsZUluaXRQbGFuU3RhdGUoY3h0LCBwbGFuLT5yYXJnLCBwYXJlbnQpOworCisJcmV0dXJuIGpv aW47Cit9CisKK3N0YXRpYyBKc29uVGFibGVTY2FuU3RhdGUgKgorSnNvblRhYmxlSW5pdFNjYW5T dGF0ZShKc29uVGFibGVFeGVjQ29udGV4dCAqIGN4dCwKKwkJCQkJICAgSnNvblRhYmxlUGxhbiAq cGxhbiwKKwkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICpwYXJlbnQsCisJCQkJCSAgIExpc3Qg KmFyZ3MsIE1lbW9yeUNvbnRleHQgbWN4dCkKK3sKKwlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4g PSBwYWxsb2MwKHNpemVvZigqc2NhbikpOworCWludAkJCWk7CisKKwlzY2FuLT5wbGFuLnR5cGUg PSBKU09OX1RBQkxFX1NDQU5fU1RBVEU7CisJc2Nhbi0+cGxhbi5wYXJlbnQgPSBwYXJlbnQ7CisK KwlzY2FuLT5vdXRlckpvaW4gPSBwbGFuLT5vdXRlckpvaW47CisJc2Nhbi0+ZXJyb3JPbkVycm9y ID0gcGxhbi0+ZXJyb3JPbkVycm9yOworCXNjYW4tPnBhdGggPSBEYXR1bUdldEpzb25QYXRoUChw bGFuLT5wYXRoLT52YWx1ZS0+Y29uc3R2YWx1ZSk7CisJc2Nhbi0+YXJncyA9IGFyZ3M7CisJc2Nh bi0+bWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShtY3h0LCAiSnNvblRhYmxlRXhlY0NvbnRl eHQiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKgorCSAqIFNl dCBhZnRlciBzZXR0aW5ncyBzY2FuLT5hcmdzIGFuZCBzY2FuLT5tY3h0LCBiZWNhdXNlIHRoZSBy ZWN1cnNpdmUKKwkgKiBjYWxsIHdhbnRzIHRvIHVzZSB0aG9zZSB2YWx1ZXMuCisJICovCisJc2Nh bi0+cGxhbi5uZXN0ZWQgPSBwbGFuLT5jaGlsZCA/CisJCUpzb25UYWJsZUluaXRQbGFuU3RhdGUo Y3h0LCBwbGFuLT5jaGlsZCwgKEpzb25UYWJsZVBsYW5TdGF0ZSAqKSBzY2FuKSA6CisJCU5VTEw7 CisKKwlzY2FuLT5jdXJyZW50ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCXNjYW4tPmN1cnJl bnRJc051bGwgPSB0cnVlOworCisJZm9yIChpID0gcGxhbi0+Y29sTWluOyBpIDw9IHBsYW4tPmNv bE1heDsgaSsrKQorCQljeHQtPmNvbGV4cHJzY2Fuc1tpXSA9IHNjYW47CisKKwlyZXR1cm4gc2Nh bjsKK30KKworLyogUmVjdXJzaXZlbHkgaW5pdGlhbGl6ZSBKU09OX1RBQkxFIHNjYW4gc3RhdGUg Ki8KK3N0YXRpYyBKc29uVGFibGVQbGFuU3RhdGUgKgorSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShK c29uVGFibGVFeGVjQ29udGV4dCAqIGN4dCwgTm9kZSAqcGxhbiwKKwkJCQkJICAgSnNvblRhYmxl UGxhblN0YXRlICogcGFyZW50KQoreworCUpzb25UYWJsZVBsYW5TdGF0ZSAqc3RhdGU7CisKKwlp ZiAoSXNBKHBsYW4sIEpzb25UYWJsZVNpYmxpbmcpKQorCXsKKwkJSnNvblRhYmxlU2libGluZyAq am9pbiA9IChKc29uVGFibGVTaWJsaW5nICopIHBsYW47CisKKwkJc3RhdGUgPSAoSnNvblRhYmxl UGxhblN0YXRlICopCisJCQlKc29uVGFibGVJbml0Sm9pblN0YXRlKGN4dCwgam9pbiwgcGFyZW50 KTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlUGxhbiAqc2NhbiA9IGNhc3ROb2RlKEpzb25U YWJsZVBsYW4sIHBsYW4pOworCQlKc29uVGFibGVTY2FuU3RhdGUgKnBhcmVudF9zY2FuID0gKEpz b25UYWJsZVNjYW5TdGF0ZSAqKSBwYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuKTsKKwkJ c3RhdGUgPSAoSnNvblRhYmxlUGxhblN0YXRlICopCisJCQlKc29uVGFibGVJbml0U2NhblN0YXRl KGN4dCwgc2NhbiwgcGFyZW50LCBwYXJlbnRfc2Nhbi0+YXJncywKKwkJCQkJCQkJICAgcGFyZW50 X3NjYW4tPm1jeHQpOworCX0KKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIEpzb25UYWJs ZUluaXRPcGFxdWUKKyAqCQlGaWxsIGluIFRhYmxlRnVuY1NjYW5TdGF0ZS0+b3BhcXVlIGZvciBK c29uVGFibGUgcHJvY2Vzc29yCisgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVJbml0T3BhcXVl KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBuYXR0cykKK3sKKwlKc29uVGFibGVFeGVj Q29udGV4dCAqY3h0OworCVBsYW5TdGF0ZSAgKnBzID0gJnN0YXRlLT5zcy5wczsKKwlUYWJsZUZ1 bmNTY2FuICp0ZnMgPSBjYXN0Tm9kZShUYWJsZUZ1bmNTY2FuLCBwcy0+cGxhbik7CisJVGFibGVG dW5jICAqdGYgPSB0ZnMtPnRhYmxlZnVuYzsKKwlKc29uVGFibGVQbGFuICpyb290ID0gY2FzdE5v ZGUoSnNvblRhYmxlUGxhbiwgdGYtPnBsYW4pOworCUpzb25FeHByICAgKmplID0gY2FzdE5vZGUo SnNvbkV4cHIsIHRmLT5kb2NleHByKTsKKwlMaXN0CSAgICphcmdzID0gTklMOworCisJY3h0ID0g cGFsbG9jMChzaXplb2YoSnNvblRhYmxlRXhlY0NvbnRleHQpKTsKKwljeHQtPm1hZ2ljID0gSlNP Tl9UQUJMRV9FWEVDX0NPTlRFWFRfTUFHSUM7CisKKwlpZiAoc3RhdGUtPnBhc3Npbmd2YWxleHBy cykKKwl7CisJCUxpc3RDZWxsICAgKmV4cHJsYzsKKwkJTGlzdENlbGwgICAqbmFtZWxjOworCisJ CUFzc2VydChsaXN0X2xlbmd0aChzdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzKSA9PQorCQkJICAgbGlz dF9sZW5ndGgoamUtPnBhc3NpbmdfbmFtZXMpKTsKKwkJZm9yYm90aChleHBybGMsIHN0YXRlLT5w YXNzaW5ndmFsZXhwcnMsCisJCQkJbmFtZWxjLCBqZS0+cGFzc2luZ19uYW1lcykKKwkJeworCQkJ RXhwclN0YXRlICAqc3RhdGUgPSBsZmlyc3Rfbm9kZShFeHByU3RhdGUsIGV4cHJsYyk7CisJCQlT dHJpbmcJICAgKm5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIG5hbWVsYyk7CisJCQlKc29uUGF0 aFZhcmlhYmxlICp2YXIgPSBwYWxsb2Moc2l6ZW9mKCp2YXIpKTsKKworCQkJdmFyLT5uYW1lID0g cHN0cmR1cChuYW1lLT5zdmFsKTsKKwkJCXZhci0+dHlwaWQgPSBleHByVHlwZSgoTm9kZSAqKSBz dGF0ZS0+ZXhwcik7CisJCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgc3RhdGUt PmV4cHIpOworCisJCQkvKgorCQkJICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYW5kIHNhdmUg dGhlIHZhbHVlIHRvIGJlIHJldHVybmVkIGJ5CisJCQkgKiBHZXRKc29uUGF0aFZhcigpLgorCQkJ ICovCisJCQl2YXItPnZhbHVlID0gRXhlY0V2YWxFeHByKHN0YXRlLCBwcy0+cHNfRXhwckNvbnRl eHQsCisJCQkJCQkJCQkgICZ2YXItPmlzbnVsbCk7CisKKwkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3Ms IHZhcik7CisJCX0KKwl9CisKKwljeHQtPmNvbGV4cHJzY2FucyA9IHBhbGxvYyhzaXplb2YoSnNv blRhYmxlU2NhblN0YXRlICopICoKKwkJCQkJCQkgICBsaXN0X2xlbmd0aCh0Zi0+Y29sdmFsZXhw cnMpKTsKKworCWN4dC0+cm9vdCA9IEpzb25UYWJsZUluaXRTY2FuU3RhdGUoY3h0LCByb290LCBO VUxMLCBhcmdzLAorCQkJCQkJCQkJICAgQ3VycmVudE1lbW9yeUNvbnRleHQpOworCXN0YXRlLT5v cGFxdWUgPSBjeHQ7Cit9CisKKy8qIFJlc2V0IHNjYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgaXRlbSBsaXN0ICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlUmVzY2FuKEpzb25U YWJsZVNjYW5TdGF0ZSAqc2NhbikKK3sKKwlKc29uVmFsdWVMaXN0SW5pdEl0ZXJhdG9yKCZzY2Fu LT5mb3VuZCwgJnNjYW4tPml0ZXIpOworCXNjYW4tPmN1cnJlbnQgPSBQb2ludGVyR2V0RGF0dW0o TlVMTCk7CisJc2Nhbi0+Y3VycmVudElzTnVsbCA9IHRydWU7CisJc2Nhbi0+YWR2YW5jZU5lc3Rl ZCA9IGZhbHNlOworCXNjYW4tPm9yZGluYWwgPSAwOworfQorCisvKiBSZXNldCBjb250ZXh0IGl0 ZW0gb2YgYSBzY2FuLCBleGVjdXRlIEpTT04gcGF0aCBhbmQgcmVzZXQgYSBzY2FuICovCitzdGF0 aWMgdm9pZAorSnNvblRhYmxlUmVzZXRDb250ZXh0SXRlbShKc29uVGFibGVTY2FuU3RhdGUgKnNj YW4sIERhdHVtIGl0ZW0pCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJSnNvblBhdGhFeGVj UmVzdWx0IHJlczsKKwlKc29uYgkgICAqanMgPSAoSnNvbmIgKikgRGF0dW1HZXRKc29uYlAoaXRl bSk7CisKKwlKc29uVmFsdWVMaXN0Q2xlYXIoJnNjYW4tPmZvdW5kKTsKKworCU1lbW9yeUNvbnRl eHRSZXNldE9ubHkoc2Nhbi0+bWN4dCk7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oc2Nhbi0+bWN4dCk7CisKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoc2Nhbi0+cGF0aCwgc2Nh bi0+YXJncywKKwkJCQkJCSAgR2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJ CQkJICBqcywgc2Nhbi0+ZXJyb3JPbkVycm9yLCAmc2Nhbi0+Zm91bmQsCisJCQkJCQkgIGZhbHNl IC8qIEZJWE1FICovICk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlm IChqcGVySXNFcnJvcihyZXMpKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5lcnJvck9uRXJyb3IpOwor CQlKc29uVmFsdWVMaXN0Q2xlYXIoJnNjYW4tPmZvdW5kKTsJLyogRU1QVFkgT04gRVJST1IgY2Fz ZSAqLworCX0KKworCUpzb25UYWJsZVJlc2NhbihzY2FuKTsKK30KKworLyoKKyAqIEpzb25UYWJs ZVNldERvY3VtZW50CisgKgkJSW5zdGFsbCB0aGUgaW5wdXQgZG9jdW1lbnQKKyAqLworc3RhdGlj IHZvaWQKK0pzb25UYWJsZVNldERvY3VtZW50KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIERh dHVtIHZhbHVlKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFi bGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZVNldERvY3VtZW50Iik7CisKKwlKc29uVGFi bGVSZXNldENvbnRleHRJdGVtKGN4dC0+cm9vdCwgdmFsdWUpOworfQorCisvKiBSZWN1cnNpdmVs eSByZXNldCBzY2FuIGFuZCBpdHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFi bGVSZXNjYW5SZWN1cnNpdmUoSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0 YXRlLT50eXBlID09IEpTT05fVEFCTEVfSk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5T dGF0ZSAqam9pbiA9IChKc29uVGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxl UmVzY2FuUmVjdXJzaXZlKGpvaW4tPmxlZnQpOworCQlKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUo am9pbi0+cmlnaHQpOworCQlqb2luLT5hZHZhbmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQor CXsKKwkJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBz dGF0ZTsKKworCQlBc3NlcnQoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9TQ0FOX1NUQVRFKTsK KwkJSnNvblRhYmxlUmVzY2FuKHNjYW4pOworCQlpZiAoc2Nhbi0+cGxhbi5uZXN0ZWQpCisJCQlK c29uVGFibGVSZXNjYW5SZWN1cnNpdmUoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCX0KK30KKworLyoK KyAqIEZldGNoIG5leHQgcm93IGZyb20gYSBjcm9zcy91bmlvbiBqb2luZWQgc2Nhbi4KKyAqCisg KiBSZXR1cm5zIGZhbHNlIGF0IHRoZSBlbmQgb2YgYSBzY2FuLCB0cnVlIG90aGVyd2lzZS4KKyAq Lworc3RhdGljIGJvb2wKK0pzb25UYWJsZVBsYW5OZXh0Um93KEpzb25UYWJsZVBsYW5TdGF0ZSAq IHN0YXRlKQoreworCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbjsKKworCWlmIChzdGF0ZS0+dHlw ZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUpCisJCXJldHVybiBKc29uVGFibGVTY2FuTmV4dFJv dygoSnNvblRhYmxlU2NhblN0YXRlICopIHN0YXRlKTsKKworCWpvaW4gPSAoSnNvblRhYmxlSm9p blN0YXRlICopIHN0YXRlOworCWlmIChqb2luLT5hZHZhbmNlUmlnaHQpCisJeworCQkvKiBmZXRj aCBuZXh0IGlubmVyIHJvdyAqLworCQlpZiAoSnNvblRhYmxlUGxhbk5leHRSb3coam9pbi0+cmln aHQpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJLyogaW5uZXIgcm93cyBhcmUgZXhoYXVzdGVkICov CisJCWlmIChqb2luLT5jcm9zcykKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IGZhbHNlOyAvKiBu ZXh0IG91dGVyIHJvdyAqLworCQllbHNlCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2Nh biAqLworCX0KKworCXdoaWxlICgham9pbi0+YWR2YW5jZVJpZ2h0KQorCXsKKwkJLyogZmV0Y2gg bmV4dCBvdXRlciByb3cgKi8KKwkJYm9vbAkJbW9yZSA9IEpzb25UYWJsZVBsYW5OZXh0Um93KGpv aW4tPmxlZnQpOworCisJCWlmIChqb2luLT5jcm9zcykKKwkJeworCQkJaWYgKCFtb3JlKQorCQkJ CXJldHVybiBmYWxzZTsJLyogZW5kIG9mIHNjYW4gKi8KKworCQkJSnNvblRhYmxlUmVzY2FuUmVj dXJzaXZlKGpvaW4tPnJpZ2h0KTsKKworCQkJaWYgKCFKc29uVGFibGVQbGFuTmV4dFJvdyhqb2lu LT5yaWdodCkpCisJCQkJY29udGludWU7CQkvKiBuZXh0IG91dGVyIHJvdyAqLworCisJCQlqb2lu LT5hZHZhbmNlUmlnaHQgPSB0cnVlOwkvKiBuZXh0IGlubmVyIHJvdyAqLworCQl9CisJCWVsc2Ug aWYgKCFtb3JlKQorCQl7CisJCQlpZiAoIUpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0 KSkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIGVuZCBvZiBzY2FuICovCisKKwkJCWpvaW4tPmFkdmFu Y2VSaWdodCA9IHRydWU7CS8qIG5leHQgaW5uZXIgcm93ICovCisJCX0KKworCQlicmVhazsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogUmVjdXJzaXZlbHkgc2V0ICdyZXNldCcgZmxhZyBv ZiBzY2FuIGFuZCBpdHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVQbGFu UmVzZXQoSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09 IEpTT05fVEFCTEVfSk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9 IChKc29uVGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUGxhblJlc2V0KGpv aW4tPmxlZnQpOworCQlKc29uVGFibGVQbGFuUmVzZXQoam9pbi0+cmlnaHQpOworCQlqb2luLT5h ZHZhbmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlU2NhblN0YXRl ICpzY2FuOworCisJCUFzc2VydChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUp OworCQlzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJc2Nhbi0+cmVzZXQg PSB0cnVlOworCQlzY2FuLT5hZHZhbmNlTmVzdGVkID0gZmFsc2U7CisKKwkJaWYgKHNjYW4tPnBs YW4ubmVzdGVkKQorCQkJSnNvblRhYmxlUGxhblJlc2V0KHNjYW4tPnBsYW4ubmVzdGVkKTsKKwl9 Cit9CisKKy8qCisgKiBGZXRjaCBuZXh0IHJvdyBmcm9tIGEgc2ltcGxlIHNjYW4gd2l0aCBvdXRl ci9pbm5lciBqb2luZWQgbmVzdGVkIHN1YnNjYW5zLgorICoKKyAqIFJldHVybnMgZmFsc2UgYXQg dGhlIGVuZCBvZiBhIHNjYW4sIHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbAorSnNv blRhYmxlU2Nhbk5leHRSb3coSnNvblRhYmxlU2NhblN0YXRlICpzY2FuKQoreworCS8qIHJlc2V0 IGNvbnRleHQgaXRlbSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoc2Nhbi0+cmVzZXQpCisJeworCQlK c29uVGFibGVTY2FuU3RhdGUgKnBhcmVudF9zY2FuID0KKwkJCShKc29uVGFibGVTY2FuU3RhdGUg Kikgc2Nhbi0+cGxhbi5wYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuICYmICFwYXJlbnRf c2Nhbi0+Y3VycmVudElzTnVsbCk7CisJCUpzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oc2Nhbiwg cGFyZW50X3NjYW4tPmN1cnJlbnQpOworCQlzY2FuLT5yZXNldCA9IGZhbHNlOworCX0KKworCWlm IChzY2FuLT5hZHZhbmNlTmVzdGVkKQorCXsKKwkJLyogZmV0Y2ggbmV4dCBuZXN0ZWQgcm93ICov CisJCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFu Lm5lc3RlZCk7CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlmb3IgKDs7KQorCXsKKwkJLyogZmV0Y2ggbmV4dCByb3cgKi8KKwkJSnNvbmJWYWx1 ZSAqamJ2ID0gSnNvblZhbHVlTGlzdE5leHQoJnNjYW4tPmZvdW5kLCAmc2Nhbi0+aXRlcik7CisJ CU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCWlmICghamJ2KQorCQl7CisJCQlzY2FuLT5jdXJy ZW50ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQkJc2Nhbi0+Y3VycmVudElzTnVsbCA9IHRy dWU7CisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCQl9CisKKwkJLyogc2V0 IGN1cnJlbnQgcm93IGl0ZW0gKi8KKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNj YW4tPm1jeHQpOworCQlzY2FuLT5jdXJyZW50ID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRv SnNvbmIoamJ2KSk7CisJCXNjYW4tPmN1cnJlbnRJc051bGwgPSBmYWxzZTsKKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJc2Nhbi0+b3JkaW5hbCsrOworCisJCWlmICghc2Nh bi0+cGxhbi5uZXN0ZWQpCisJCQlicmVhazsKKworCQlKc29uVGFibGVQbGFuUmVzZXQoc2Nhbi0+ cGxhbi5uZXN0ZWQpOworCisJCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4 dFJvdyhzY2FuLT5wbGFuLm5lc3RlZCk7CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQgfHwg c2Nhbi0+b3V0ZXJKb2luKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBKc29uVGFibGVGZXRjaFJvdworICoJCVByZXBhcmUgdGhlIG5leHQgImN1cnJlbnQiIHR1 cGxlIGZvciB1cGNvbWluZyBHZXRWYWx1ZSBjYWxscy4KKyAqCQlSZXR1cm5zIGZhbHNlIGlmIG5v IG1vcmUgcm93cyBjYW4gYmUgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBib29sCitKc29uVGFibGVG ZXRjaFJvdyhUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlKQoreworCUpzb25UYWJsZUV4ZWNDb250 ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFibGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZUZl dGNoUm93Iik7CisKKwlyZXR1cm4gSnNvblRhYmxlU2Nhbk5leHRSb3coY3h0LT5yb290KTsKK30K KworLyoKKyAqIEpzb25UYWJsZUdldFZhbHVlCisgKgkJUmV0dXJuIHRoZSB2YWx1ZSBmb3IgY29s dW1uIG51bWJlciAnY29sbnVtJyBmb3IgdGhlIGN1cnJlbnQgcm93LgorICoKKyAqIFRoaXMgbGVh a3MgbWVtb3J5LCBzbyBiZSBzdXJlIHRvIHJlc2V0IG9mdGVuIHRoZSBjb250ZXh0IGluIHdoaWNo IGl0J3MKKyAqIGNhbGxlZC4KKyAqLworc3RhdGljIERhdHVtCitKc29uVGFibGVHZXRWYWx1ZShU YWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBpbnQgY29sbnVtLAorCQkJCSAgT2lkIHR5cGlkLCBp bnQzMiB0eXBtb2QsIGJvb2wgKmlzbnVsbCkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0 ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVHZXRWYWx1ZSIp OworCUV4cHJDb250ZXh0ICplY29udGV4dCA9IHN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsK KwlFeHByU3RhdGUgICplc3RhdGUgPSBsaXN0X250aChzdGF0ZS0+Y29sdmFsZXhwcnMsIGNvbG51 bSk7CisJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuID0gY3h0LT5jb2xleHByc2NhbnNbY29sbnVt XTsKKwlEYXR1bQkJcmVzdWx0OworCisJaWYgKHNjYW4tPmN1cnJlbnRJc051bGwpCS8qIE5VTEwg ZnJvbSBvdXRlci91bmlvbiBqb2luICovCisJeworCQlyZXN1bHQgPSAoRGF0dW0pIDA7CisJCSpp c251bGwgPSB0cnVlOworCX0KKwllbHNlIGlmIChlc3RhdGUpCQkJLyogcmVndWxhciBjb2x1bW4g Ki8KKwl7CisJCURhdHVtCQlzYXZlZF9jYXNlVmFsdWUgPSBlY29udGV4dC0+Y2FzZVZhbHVlX2Rh dHVtOworCQlib29sCQlzYXZlZF9jYXNlSXNOdWxsID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9pc051 bGw7CisKKwkJLyogUGFzcyB0aGUgdmFsdWUgZm9yIENhc2VUZXN0RXhwciB0aGF0IG1heSBiZSBw cmVzZW50IGluIGNvbGV4cHIgKi8KKwkJZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNjYW4t PmN1cnJlbnQ7CisJCWVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxsID0gZmFsc2U7CisKKwkJcmVz dWx0ID0gRXhlY0V2YWxFeHByKGVzdGF0ZSwgZWNvbnRleHQsIGlzbnVsbCk7CisKKwkJZWNvbnRl eHQtPmNhc2VWYWx1ZV9kYXR1bSA9IHNhdmVkX2Nhc2VWYWx1ZTsKKwkJZWNvbnRleHQtPmNhc2VW YWx1ZV9pc051bGwgPSBzYXZlZF9jYXNlSXNOdWxsOworCX0KKwllbHNlCisJeworCQlyZXN1bHQg PSBJbnQzMkdldERhdHVtKHNjYW4tPm9yZGluYWwpOwkvKiBvcmRpbmFsaXR5IGNvbHVtbiAqLwor CQkqaXNudWxsID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEpz b25UYWJsZURlc3Ryb3lPcGFxdWUKKyAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZURlc3Ryb3lP cGFxdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4 dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVEZXN0 cm95T3BhcXVlIik7CisKKwkvKiBub3QgdmFsaWQgYW55bW9yZSAqLworCWN4dC0+bWFnaWMgPSAw OworCisJc3RhdGUtPm9wYXF1ZSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK aW5kZXggN2E5NmE4N2IwYy4uOGQwOGNmODY4YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwpAQCAtNTIyLDYgKzUyMiw4IEBAIHN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lk IHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1 bSByZWxvcHRpb25zKTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRo X3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkgICBib29sIHNob3dpbXBs aWNpdCk7CitzdGF0aWMgdm9pZCBnZXRfanNvbl90YWJsZV9jb2x1bW5zKFRhYmxlRnVuYyAqdGYs IEpzb25UYWJsZVBsYW4gKm5vZGUsCisJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCwgYm9vbCBzaG93aW1wbGljaXQpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRl KS0+aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC04NjI5LDcgKzg2MzEsOCBAQCBnZXRfanNvbl9i ZWhhdmlvcihKc29uQmVoYXZpb3IgKmJlaGF2aW9yLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQs CiAvKgogICogZ2V0X2pzb25fZXhwcl9vcHRpb25zCiAgKgotICogUGFyc2UgYmFjayBjb21tb24g b3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMuCisgKiBQYXJz ZSBiYWNrIGNvbW1vbiBvcHRpb25zIGZvciBKU09OX1FVRVJZLCBKU09OX1ZBTFVFLCBKU09OX0VY SVNUUyBhbmQKKyAqIEpTT05fVEFCTEUgY29sdW1ucy4KICAqLwogc3RhdGljIHZvaWQKIGdldF9q c29uX2V4cHJfb3B0aW9ucyhKc29uRXhwciAqanNleHByLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQsCkBAIC05ODc2LDYgKzk4NzksOSBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFy c2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgogCQkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1ZBTFVFKCIpOwogCQkJCQkJYnJlYWs7CisJ CQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBKc29uRXhwciB0eXBl OiAlZCIsIGpleHByLT5vcCk7CisJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQlnZXRfcnVsZV9l eHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKQEAgLTEx MjQyLDE2ICsxMTI0OCwxNCBAQCBnZXRfc3VibGlua19leHByKFN1YkxpbmsgKnN1YmxpbmssIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCkKIAogCiAvKiAtLS0tLS0tLS0tCi0gKiBnZXRfdGFibGVm dW5jCQkJLSBQYXJzZSBiYWNrIGEgdGFibGUgZnVuY3Rpb24KKyAqIGdldF94bWx0YWJsZQkJCS0g UGFyc2UgYmFjayBhIFhNTFRBQkxFIGZ1bmN0aW9uCiAgKiAtLS0tLS0tLS0tCiAgKi8KIHN0YXRp YyB2b2lkCi1nZXRfdGFibGVmdW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCitnZXRfeG1sdGFibGUoVGFibGVGdW5jICp0ZiwgZGVw YXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIHsKIAlTdHJpbmdJbmZv CWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKIAotCS8qIFhNTFRBQkxFIGlzIHRoZSBvbmx5IGV4aXN0aW5n IGltcGxlbWVudGF0aW9uLiAgKi8KLQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiWE1M VEFCTEUoIik7CiAKIAlpZiAodGYtPm5zX3VyaXMgIT0gTklMKQpAQCAtMTEzNDIsNiArMTEzNDYs MjcxIEBAIGdldF90YWJsZWZ1bmMoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7 CiB9CiAKKy8qCisgKiBnZXRfanNvbl9uZXN0ZWRfY29sdW1ucyAtIFBhcnNlIGJhY2sgbmVzdGVk IEpTT05fVEFCTEUgY29sdW1ucworICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfbmVz dGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgTm9kZSAqbm9kZSwKKwkJCQkJCQkgIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQsCisJCQkJCQkJICBib29sIG5lZWRj b21tYSkKK3sKKwlpZiAoSXNBKG5vZGUsIEpzb25UYWJsZVNpYmxpbmcpKQorCXsKKwkJSnNvblRh YmxlU2libGluZyAqbiA9IChKc29uVGFibGVTaWJsaW5nICopIG5vZGU7CisKKwkJZ2V0X2pzb25f dGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPmxhcmcsIGNvbnRleHQsIHNob3dpbXBsaWNpdCwK KwkJCQkJCQkJCSAgbmVlZGNvbW1hKTsKKwkJZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnMo dGYsIG4tPnJhcmcsIGNvbnRleHQsIHNob3dpbXBsaWNpdCwgdHJ1ZSk7CisJfQorCWVsc2UKKwl7 CisJCUpzb25UYWJsZVBsYW4gKm4gPSBjYXN0Tm9kZShKc29uVGFibGVQbGFuLCBub2RlKTsKKwor CQlpZiAobmVlZGNvbW1hKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn LCcpOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJYXBw ZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIk5FU1RFRCBQQVRIICIsIDAsIDAsIDApOworCQln ZXRfY29uc3RfZXhwcihuLT5wYXRoLT52YWx1ZSwgY29udGV4dCwgLTEpOworCQlhcHBlbmRTdHJp bmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50aWZpZXIobi0+cGF0aC0+ bmFtZSkpOworCQlnZXRfanNvbl90YWJsZV9jb2x1bW5zKHRmLCBuLCBjb250ZXh0LCBzaG93aW1w bGljaXQpOworCX0KK30KKworLyoKKyAqIGdldF9qc29uX3RhYmxlX3BsYW4gLSBQYXJzZSBiYWNr IGEgSlNPTl9UQUJMRSBwbGFuCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJsZV9wbGFu KFRhYmxlRnVuYyAqdGYsIE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJ CQkJYm9vbCBwYXJlbnRoZXNpemUpCit7CisJaWYgKHBhcmVudGhlc2l6ZSkKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCisJaWYgKElzQShub2RlLCBKc29uVGFi bGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxpbmcgKm4gPSAoSnNvblRhYmxlU2libGlu ZyAqKSBub2RlOworCisJCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIG4tPmxhcmcsIGNvbnRleHQs CisJCQkJCQkJSXNBKG4tPmxhcmcsIEpzb25UYWJsZVNpYmxpbmcpIHx8CisJCQkJCQkJY2FzdE5v ZGUoSnNvblRhYmxlUGxhbiwgbi0+bGFyZyktPmNoaWxkKTsKKworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGNvbnRleHQtPmJ1Ziwgbi0+Y3Jvc3MgPyAiIENST1NTICIgOiAiIFVOSU9OICIpOwor CisJCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIG4tPnJhcmcsIGNvbnRleHQsCisJCQkJCQkJSXNB KG4tPnJhcmcsIEpzb25UYWJsZVNpYmxpbmcpIHx8CisJCQkJCQkJY2FzdE5vZGUoSnNvblRhYmxl UGxhbiwgbi0+cmFyZyktPmNoaWxkKTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlUGxhbiAq biA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIG5vZGUpOworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsKKwor CQlpZiAobi0+Y2hpbGQpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+ YnVmLAorCQkJCQkJCQkgICBuLT5vdXRlckpvaW4gPyAiIE9VVEVSICIgOiAiIElOTkVSICIpOwor CQkJZ2V0X2pzb25fdGFibGVfcGxhbih0Ziwgbi0+Y2hpbGQsIGNvbnRleHQsCisJCQkJCQkJCUlz QShuLT5jaGlsZCwgSnNvblRhYmxlU2libGluZykpOworCQl9CisJfQorCisJaWYgKHBhcmVudGhl c2l6ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisv KgorICogZ2V0X2pzb25fdGFibGVfY29sdW1ucyAtIFBhcnNlIGJhY2sgSlNPTl9UQUJMRSBjb2x1 bW5zCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJsZV9jb2x1bW5zKFRhYmxlRnVuYyAq dGYsIEpzb25UYWJsZVBsYW4gKnBsYW4sCisJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJU3RyaW5nSW5mbwlidWYgPSBjb250ZXh0LT5idWY7 CisJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgdGYtPmRvY2V4cHIpOwor CUxpc3RDZWxsICAgKmxjX2NvbG5hbWU7CisJTGlzdENlbGwgICAqbGNfY29sdHlwZTsKKwlMaXN0 Q2VsbCAgICpsY19jb2x0eXBtb2Q7CisJTGlzdENlbGwgICAqbGNfY29sdmFsZXhwcjsKKwlpbnQJ CQljb2xudW0gPSAwOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCWFwcGVu ZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJDT0xVTU5TICgiLCAwLCAwLCAwKTsKKworCWlmIChQ UkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRMZXZlbCArPSBQUkVUVFlJ TkRFTlRfVkFSOworCisJZm9yZm91cihsY19jb2xuYW1lLCB0Zi0+Y29sbmFtZXMsCisJCQlsY19j b2x0eXBlLCB0Zi0+Y29sdHlwZXMsCisJCQlsY19jb2x0eXBtb2QsIHRmLT5jb2x0eXBtb2RzLAor CQkJbGNfY29sdmFsZXhwciwgdGYtPmNvbHZhbGV4cHJzKQorCXsKKwkJY2hhcgkgICAqY29sbmFt ZSA9IHN0clZhbChsZmlyc3QobGNfY29sbmFtZSkpOworCQlKc29uRXhwciAgICpjb2xleHByOwor CQlPaWQJCQl0eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsKKwkJYm9vbAkJb3JkaW5hbGl0eTsKKwkJ SnNvbkJlaGF2aW9yVHlwZSBkZWZhdWx0X2JlaGF2aW9yOworCisJCXR5cGlkID0gbGZpcnN0X29p ZChsY19jb2x0eXBlKTsKKwkJdHlwbW9kID0gbGZpcnN0X2ludChsY19jb2x0eXBtb2QpOworCQlj b2xleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIGxmaXJzdChsY19jb2x2YWxleHByKSk7CisKKwkJ aWYgKGNvbG51bSA8IHBsYW4tPmNvbE1pbikKKwkJeworCQkJY29sbnVtKys7CisJCQljb250aW51 ZTsKKwkJfQorCisJCWlmIChjb2xudW0gPiBwbGFuLT5jb2xNYXgpCisJCQlicmVhazsKKworCQlp ZiAoY29sbnVtID4gcGxhbi0+Y29sTWluKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs ICIsICIpOworCisJCWNvbG51bSsrOworCisJCW9yZGluYWxpdHkgPSAhY29sZXhwcjsKKworCQlh cHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CisKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcyAlcyIsIHF1b3RlX2lkZW50aWZpZXIoY29sbmFtZSksCisJCQkJCQkg b3JkaW5hbGl0eSA/ICJGT1IgT1JESU5BTElUWSIgOgorCQkJCQkJIGZvcm1hdF90eXBlX3dpdGhf dHlwZW1vZCh0eXBpZCwgdHlwbW9kKSk7CisJCWlmIChvcmRpbmFsaXR5KQorCQkJY29udGludWU7 CisKKwkJaWYgKGNvbGV4cHItPm9wID09IEpTT05fRVhJU1RTX09QKQorCQl7CisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBFWElTVFMiKTsKKwkJCWRlZmF1bHRfYmVoYXZpb3IgPSBK U09OX0JFSEFWSU9SX0ZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGNvbGV4cHItPm9w ID09IEpTT05fUVVFUllfT1ApCisJCQl7CisJCQkJY2hhcgkJdHlwY2F0ZWdvcnk7CisJCQkJYm9v bAkJdHlwaXNwcmVmZXJyZWQ7CisKKwkJCQlnZXRfdHlwZV9jYXRlZ29yeV9wcmVmZXJyZWQodHlw aWQsICZ0eXBjYXRlZ29yeSwgJnR5cGlzcHJlZmVycmVkKTsKKworCQkJCWlmICh0eXBjYXRlZ29y eSA9PSBUWVBDQVRFR09SWV9TVFJJTkcpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LAorCQkJCQkJCQkJCSAgIGNvbGV4cHItPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFU X0pTT05CID8KKwkJCQkJCQkJCQkgICAiIEZPUk1BVCBKU09OQiIgOiAiIEZPUk1BVCBKU09OIik7 CisJCQl9CisKKwkJCWRlZmF1bHRfYmVoYXZpb3IgPSBKU09OX0JFSEFWSU9SX05VTEw7CisJCX0K KworCQlpZiAoamV4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQor CQkJZGVmYXVsdF9iZWhhdmlvciA9IEpTT05fQkVIQVZJT1JfRVJST1I7CisKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIgUEFUSCAiKTsKKworCQlnZXRfanNvbl9wYXRoX3NwZWMoY29s ZXhwci0+cGF0aF9zcGVjLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJCWdldF9qc29uX2V4 cHJfb3B0aW9ucyhjb2xleHByLCBjb250ZXh0LCBkZWZhdWx0X2JlaGF2aW9yKTsKKwl9CisKKwlp ZiAocGxhbi0+Y2hpbGQpCisJCWdldF9qc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zKHRmLCBwbGFu LT5jaGlsZCwgY29udGV4dCwgc2hvd2ltcGxpY2l0LAorCQkJCQkJCQkJICBwbGFuLT5jb2xNYXgg Pj0gcGxhbi0+Y29sTWluKTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250 ZXh0LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRFTlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtl eXdvcmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsKK30KKworLyogLS0tLS0tLS0tLQorICogZ2V0 X2pzb25fdGFibGUJCQktIFBhcnNlIGJhY2sgYSBKU09OX1RBQkxFIGZ1bmN0aW9uCisgKiAtLS0t LS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJsZShUYWJsZUZ1bmMgKnRmLCBk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0KQoreworCVN0cmluZ0lu Zm8JYnVmID0gY29udGV4dC0+YnVmOworCUpzb25FeHByICAgKmpleHByID0gY2FzdE5vZGUoSnNv bkV4cHIsIHRmLT5kb2NleHByKTsKKwlKc29uVGFibGVQbGFuICpyb290ID0gY2FzdE5vZGUoSnNv blRhYmxlUGxhbiwgdGYtPnBsYW4pOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJK U09OX1RBQkxFKCIpOworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQt PmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29y ZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CisKKwlnZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0 ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCAiLCAiKTsKKworCWdldF9jb25zdF9leHByKHJvb3QtPnBhdGgtPnZhbHVlLCBjb250 ZXh0LCAtMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50 aWZpZXIocm9vdC0+cGF0aC0+bmFtZSkpOworCisJaWYgKGpleHByLT5wYXNzaW5nX3ZhbHVlcykK Kwl7CisJCUxpc3RDZWxsICAgKmxjMSwKKwkJCQkgICAqbGMyOworCQlib29sCQluZWVkY29tbWEg PSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVuZENv bnRleHRLZXl3b3JkKGNvbnRleHQsICJQQVNTSU5HICIsIDAsIDAsIDApOworCisJCWlmIChQUkVU VFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5E RU5UX1ZBUjsKKworCQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJbGMy LCBqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCXsKKwkJCWlmIChuZWVkY29tbWEpCisJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKwor CQkJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIiIsIDAsIDAsIDApOworCisJCQlnZXRf cnVsZV9leHByKChOb2RlICopIGxmaXJzdChsYzIpLCBjb250ZXh0LCBmYWxzZSk7CisJCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoKGxm aXJzdF9ub2RlKFN0cmluZywgbGMxKSktPnN2YWwpCisJCQkJKTsKKwkJfQorCisJCWlmIChQUkVU VFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgLT0gUFJFVFRZSU5E RU5UX1ZBUjsKKwl9CisKKwlnZXRfanNvbl90YWJsZV9jb2x1bW5zKHRmLCByb290LCBjb250ZXh0 LCBzaG93aW1wbGljaXQpOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCWFw cGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJQTEFOICIsIDAsIDAsIDApOworCWdldF9qc29u X3RhYmxlX3BsYW4odGYsIChOb2RlICopIHJvb3QsIGNvbnRleHQsIHRydWUpOworCisJaWYgKGpl eHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FTVBUWSkKKwkJZ2V0X2pzb25f YmVoYXZpb3IoamV4cHItPm9uX2Vycm9yLCBjb250ZXh0LCAiRVJST1IiKTsKKworCWlmIChQUkVU VFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRF TlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsK K30KKworLyogLS0tLS0tLS0tLQorICogZ2V0X3RhYmxlZnVuYwkJCS0gUGFyc2UgYmFjayBhIHRh YmxlIGZ1bmN0aW9uCisgKiAtLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfdGFibGVm dW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1w bGljaXQpCit7CisJLyogWE1MVEFCTEUgYW5kIEpTT05fVEFCTEUgYXJlIHRoZSBvbmx5IGV4aXN0 aW5nIGltcGxlbWVudGF0aW9ucy4gICovCisKKwlpZiAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxU QUJMRSkKKwkJZ2V0X3htbHRhYmxlKHRmLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCWVsc2Ug aWYgKHRmLT5mdW5jdHlwZSA9PSBURlRfSlNPTl9UQUJMRSkKKwkJZ2V0X2pzb25fdGFibGUodGYs IGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIGdldF9mcm9t X2NsYXVzZQkJCS0gUGFyc2UgYmFjayBhIEZST00gY2xhdXNlCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCAxOTYxZDllMGFhLi5lZWRhMDJlN2FjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt MTk2OSw2ICsxOTY5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVGdW5jU2NhblN0YXRlCiAJRXhw clN0YXRlICAqcm93ZXhwcjsJCS8qIHN0YXRlIGZvciByb3ctZ2VuZXJhdGluZyBleHByZXNzaW9u ICovCiAJTGlzdAkgICAqY29sZXhwcnM7CQkvKiBzdGF0ZSBmb3IgY29sdW1uLWdlbmVyYXRpbmcg ZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKmNvbGRlZmV4cHJzOwkvKiBzdGF0ZSBmb3IgY29sdW1u IGRlZmF1bHQgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpjb2x2YWxleHByczsJLyogc3RhdGUg Zm9yIGNvbHVtbiB2YWx1ZSBleHByZXNzaW9uICovCisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJz OwkvKiBzdGF0ZSBmb3IgUEFTU0lORyBhcmd1bWVudCBleHByZXNzaW9uICovCiAJTGlzdAkgICAq bnNfbmFtZXM7CQkvKiBzYW1lIGFzIFRhYmxlRnVuYy5uc19uYW1lcyAqLwogCUxpc3QJICAgKm5z X3VyaXM7CQkvKiBsaXN0IG9mIHN0YXRlcyBvZiBuYW1lc3BhY2UgVVJJIGV4cHJzICovCiAJQml0 bWFwc2V0ICAqbm90bnVsbHM7CQkvKiBudWxsYWJpbGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBj b2x1bW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggOTFkOTVmYzUyYi4uNmQyMTA2ODRhOCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBleHRlcm4gSW5kZXhJbmZv ICptYWtlSW5kZXhJbmZvKGludCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQs CiAJCQkJCQkJCWJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LAogCQkJCQkJCQlib29sIHN1 bW1hcml6aW5nKTsKIAorZXh0ZXJuIE5vZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGlu dCBsb2NhdGlvbik7CiBleHRlcm4gRGVmRWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwgTm9k ZSAqYXJnLCBpbnQgbG9jYXRpb24pOwogZXh0ZXJuIERlZkVsZW0gKm1ha2VEZWZFbGVtRXh0ZW5k ZWQoY2hhciAqbmFtZVNwYWNlLCBjaGFyICpuYW1lLCBOb2RlICphcmcsCiAJCQkJCQkJCQlEZWZF bGVtQWN0aW9uIGRlZmFjdGlvbiwgaW50IGxvY2F0aW9uKTsKQEAgLTExNCw2ICsxMTUsMTQgQEAg ZXh0ZXJuIEpzb25WYWx1ZUV4cHIgKm1ha2VKc29uVmFsdWVFeHByKEV4cHIgKnJhd19leHByLCBF eHByICpmb3JtYXR0ZWRfZXhwciwKIAkJCQkJCQkJCQlKc29uRm9ybWF0ICpmb3JtYXQpOwogZXh0 ZXJuIEpzb25CZWhhdmlvciAqbWFrZUpzb25CZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUs IE5vZGUgKmV4cHIsCiAJCQkJCQkJCQkgIEpzb25Db2VyY2lvbiAqY29lcmNpb24sIGludCBsb2Nh dGlvbik7CitleHRlcm4gSnNvblRhYmxlUGF0aCAqbWFrZUpzb25UYWJsZVBhdGgoQ29uc3QgKnBh dGh2YWx1ZSwgY2hhciAqcGF0aG5hbWUpOworZXh0ZXJuIE5vZGUgKm1ha2VKc29uVGFibGVQYXRo U3BlYyhjaGFyICpzdHJpbmcsIGNoYXIgKm5hbWUsCisJCQkJCQkJCSAgIGludCBzdHJpbmdfbG9j YXRpb24sIGludCBuYW1lX2xvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlRGVm YXVsdFBsYW4oSnNvblRhYmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZSwKKwkJCQkJCQkJCSAgaW50 IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlU2ltcGxlUGxhbihjaGFyICpw YXRobmFtZSwgaW50IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlSm9pbmVk UGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwKKwkJCQkJCQkJCSBOb2RlICpwbGFuMSwg Tm9kZSAqcGxhbjIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gTm9kZSAqbWFrZUpzb25LZXlWYWx1 ZShOb2RlICprZXksIE5vZGUgKnZhbHVlKTsKIGV4dGVybiBOb2RlICptYWtlSnNvbklzUHJlZGlj YXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwKIAkJCQkJCQkJIEpzb25WYWx1ZVR5 cGUgaXRlbV90eXBlLCBib29sIHVuaXF1ZV9rZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4 IGFhMzZhYWY3NjkuLjVjZjMwOTUyODIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTE3NDIs NiArMTc0Miw3IEBAIHR5cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgogCUpzb25FeHByT3AJb3A7 CQkJCS8qIGV4cHJlc3Npb24gdHlwZSAqLwogCUpzb25WYWx1ZUV4cHIgKmNvbnRleHRfaXRlbTsJ LyogY29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KIAlOb2RlCSAgICpwYXRoc3BlYzsJCS8qIEpT T04gcGF0aCBzcGVjaWZpY2F0aW9uIGV4cHJlc3Npb24gKi8KKwljaGFyCSAgICpwYXRobmFtZTsJ CS8qIHBhdGggbmFtZSwgaWYgYW55ICovCiAJTGlzdAkgICAqcGFzc2luZzsJCS8qIGxpc3Qgb2Yg UEFTU0lORyBjbGF1c2UgYXJndW1lbnRzLCBpZiBhbnkgKi8KIAlKc29uT3V0cHV0ICpvdXRwdXQ7 CQkJLyogb3V0cHV0IGNsYXVzZSwgaWYgc3BlY2lmaWVkICovCiAJSnNvbkJlaGF2aW9yICpvbl9l bXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCkBAIC0xNzUxLDYgKzE3NTIsMTE0IEBAIHR5 cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9j YXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gSnNvbkZ1bmNFeHByOwogCisvKgorICogSnNv blRhYmxlUGF0aFNwZWMKKyAqCQl1bnRyYW5zZm9ybWVkIHNwZWNpZmljYXRpb24gb2YgSlNPTiBw YXRoIGV4cHJlc3Npb24gd2l0aCBhbiBvcHRpb25hbAorICoJCW5hbWUKKyAqLwordHlwZWRlZiBz dHJ1Y3QgSnNvblRhYmxlUGF0aFNwZWMKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJTm9kZQkgICAq c3RyaW5nOworCWNoYXIJICAgKm5hbWU7CisJaW50CQkJbmFtZV9sb2NhdGlvbjsKKwlpbnQJCQls b2NhdGlvbjsJLyogbG9jYXRpb24gb2YgJ3N0cmluZycgKi8KK30gSnNvblRhYmxlUGF0aFNwZWM7 CisKKy8qCisgKiBKc29uVGFibGVDb2x1bW5UeXBlIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBKU09O X1RBQkxFIGNvbHVtbiB0eXBlcworICovCit0eXBlZGVmIGVudW0gSnNvblRhYmxlQ29sdW1uVHlw ZQoreworCUpUQ19GT1JfT1JESU5BTElUWSwKKwlKVENfUkVHVUxBUiwKKwlKVENfRVhJU1RTLAor CUpUQ19GT1JNQVRURUQsCisJSlRDX05FU1RFRCwKK30gSnNvblRhYmxlQ29sdW1uVHlwZTsKKwor LyoKKyAqIEpzb25UYWJsZUNvbHVtbiAtCisgKgkJdW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlv biBvZiBKU09OX1RBQkxFIGNvbHVtbgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVDb2x1 bW4KK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25UYWJsZUNvbHVtblR5cGUgY29sdHlwZTsJLyog Y29sdW1uIHR5cGUgKi8KKwljaGFyCSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1lICovCisJVHlw ZU5hbWUgICAqdHlwZU5hbWU7CQkvKiBjb2x1bW4gdHlwZSBuYW1lICovCisJSnNvblRhYmxlUGF0 aFNwZWMgKnBhdGhzcGVjOyAvKiBKU09OIHBhdGggc3BlY2lmaWNhdGlvbiAqLworCUpzb25Gb3Jt YXQgKmZvcm1hdDsJCQkvKiBKU09OIGZvcm1hdCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpz b25XcmFwcGVyIHdyYXBwZXI7CQkvKiBXUkFQUEVSIGJlaGF2aW9yIGZvciBmb3JtYXR0ZWQgY29s dW1ucyAqLworCUpzb25RdW90ZXMJcXVvdGVzOwkJCS8qIG9taXQgb3Iga2VlcCBxdW90ZXMgb24g c2NhbGFyIHN0cmluZ3M/ICovCisJTGlzdAkgICAqY29sdW1uczsJCS8qIG5lc3RlZCBjb2x1bW5z ICovCisJSnNvbkJlaGF2aW9yICpvbl9lbXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCisJ SnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJCS8qIE9OIEVSUk9SIGJlaGF2aW9yICovCisJaW50CQkJ bG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29u VGFibGVDb2x1bW47CisKKy8qCisgKiBKc29uVGFibGVQbGFuVHlwZSAtCisgKgkJZmxhZ3MgZm9y IEpTT05fVEFCTEUgcGxhbiBub2RlIHR5cGVzIHJlcHJlc2VudGF0aW9uCisgKi8KK3R5cGVkZWYg ZW51bSBKc29uVGFibGVQbGFuVHlwZQoreworCUpTVFBfREVGQVVMVCwKKwlKU1RQX1NJTVBMRSwK KwlKU1RQX0pPSU5FRCwKK30gSnNvblRhYmxlUGxhblR5cGU7CisKKy8qCisgKiBKc29uVGFibGVQ bGFuSm9pblR5cGUgLQorICoJCUpTT05fVEFCTEUgam9pbiB0eXBlcyBmb3IgSlNUUF9KT0lORUQg cGxhbnMKKyAqLwordHlwZWRlZiBlbnVtIEpzb25UYWJsZVBsYW5Kb2luVHlwZQoreworCUpTVFBf Sk9JTl9JTk5FUiwKKwlKU1RQX0pPSU5fT1VURVIsCisJSlNUUF9KT0lOX0NST1NTLAorCUpTVFBf Sk9JTl9VTklPTiwKK30gSnNvblRhYmxlUGxhbkpvaW5UeXBlOworCisvKgorICogSnNvblRhYmxl UGxhblNwZWMgLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9UQUJM RSdzIFBMQU4gY2xhdXNlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBsYW5TcGVjCit7 CisJTm9kZVRhZwkJdHlwZTsKKworCUpzb25UYWJsZVBsYW5UeXBlIHBsYW5fdHlwZTsJLyogcGxh biB0eXBlICovCisJSnNvblRhYmxlUGxhbkpvaW5UeXBlIGpvaW5fdHlwZTsJLyogam9pbiB0eXBl IChmb3Igam9pbmVkIHBsYW4gb25seSkgKi8KKwljaGFyCSAgICpwYXRobmFtZTsJCS8qIHBhdGgg bmFtZSAoZm9yIHNpbXBsZSBwbGFuIG9ubHkpICovCisKKwkvKiBGb3Igam9pbmVkIHBsYW5zICov CisJc3RydWN0IEpzb25UYWJsZVBsYW5TcGVjICpwbGFuMTsJCS8qIGZpcnN0IGpvaW5lZCBwbGFu ICovCisJc3RydWN0IEpzb25UYWJsZVBsYW5TcGVjICpwbGFuMjsJCS8qIHNlY29uZCBqb2luZWQg cGxhbiAqLworCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYg dW5rbm93biAqLworfSBKc29uVGFibGVQbGFuU3BlYzsKKworLyoKKyAqIEpzb25UYWJsZSAtCisg KgkJdW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OX1RBQkxFCisgKi8KK3R5cGVk ZWYgc3RydWN0IEpzb25UYWJsZQoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvblZhbHVlRXhwciAq Y29udGV4dF9pdGVtOwkvKiBjb250ZXh0IGl0ZW0gZXhwcmVzc2lvbiAqLworCUpzb25UYWJsZVBh dGhTcGVjICpwYXRoc3BlYzsJLyogSlNPTiBwYXRoIHNwZWNpZmljYXRpb24gKi8KKwlMaXN0CSAg ICpwYXNzaW5nOwkJLyogbGlzdCBvZiBQQVNTSU5HIGNsYXVzZSBhcmd1bWVudHMsIGlmIGFueSAq LworCUxpc3QJICAgKmNvbHVtbnM7CQkvKiBsaXN0IG9mIEpzb25UYWJsZUNvbHVtbiAqLworCUpz b25UYWJsZVBsYW5TcGVjICpwbGFuc3BlYzsgLyogam9pbiBwbGFuLCBpZiBzcGVjaWZpZWQgKi8K KwlKc29uQmVoYXZpb3IgICpvbl9lcnJvcjsJLyogT04gRVJST1IgYmVoYXZpb3IgKi8KKwlBbGlh cwkgICAqYWxpYXM7CQkJLyogdGFibGUgYWxpYXMgaW4gRlJPTSBjbGF1c2UgKi8KKwlib29sCQls YXRlcmFsOwkJLyogZG9lcyBpdCBoYXZlIExBVEVSQUwgcHJlZml4PyAqLworCWludAkJCWxvY2F0 aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvblRhYmxl OworCiAvKgogICogSnNvbktleVZhbHVlIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0 aW9uIG9mIEpTT04gb2JqZWN0IGtleS12YWx1ZSBwYWlyIGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApp bmRleCBmYWQyZGQ5MDkyLi4yNTBhZmRhOTNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtOTQs OCArOTQsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUmFuZ2VWYXIKIAlpbnQJCQlsb2NhdGlvbjsKIH0g UmFuZ2VWYXI7CiAKK3R5cGVkZWYgZW51bSBUYWJsZUZ1bmNUeXBlCit7CisJVEZUX1hNTFRBQkxF LAorCVRGVF9KU09OX1RBQkxFLAorfSBUYWJsZUZ1bmNUeXBlOworCiAvKgotICogVGFibGVGdW5j IC0gbm9kZSBmb3IgYSB0YWJsZSBmdW5jdGlvbiwgc3VjaCBhcyBYTUxUQUJMRS4KKyAqIFRhYmxl RnVuYyAtIG5vZGUgZm9yIGEgdGFibGUgZnVuY3Rpb24sIHN1Y2ggYXMgWE1MVEFCTEUgb3IgSlNP Tl9UQUJMRS4KICAqCiAgKiBFbnRyaWVzIGluIHRoZSBuc19uYW1lcyBsaXN0IGFyZSBlaXRoZXIg U3RyaW5nIG5vZGVzIGNvbnRhaW5pbmcKICAqIGxpdGVyYWwgbmFtZXNwYWNlIG5hbWVzLCBvciBO VUxMIHBvaW50ZXJzIHRvIHJlcHJlc2VudCBERUZBVUxULgpAQCAtMTAzLDYgKzEwOSw4IEBAIHR5 cGVkZWYgc3RydWN0IFJhbmdlVmFyCiB0eXBlZGVmIHN0cnVjdCBUYWJsZUZ1bmMKIHsKIAlOb2Rl VGFnCQl0eXBlOworCS8qIFhNTFRBQkxFIG9yIEpTT05fVEFCTEUgKi8KKwlUYWJsZUZ1bmNUeXBl IGZ1bmN0eXBlOwogCS8qIGxpc3Qgb2YgbmFtZXNwYWNlIFVSSSBleHByZXNzaW9ucyAqLwogCUxp c3QJICAgKm5zX3VyaXMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8qIGxp c3Qgb2YgbmFtZXNwYWNlIG5hbWVzIG9yIE5VTEwgKi8KQEAgLTEyMyw4ICsxMzEsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVGdW5jCiAJTGlzdAkgICAqY29sZXhwcnM7CiAJLyogbGlzdCBvZiBj b2x1bW4gZGVmYXVsdCBleHByZXNzaW9ucyAqLwogCUxpc3QJICAgKmNvbGRlZmV4cHJzIHBnX25v ZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKwkvKiBsaXN0IG9mIGNvbHVtbiB2YWx1ZSBl eHByZXNzaW9ucyAqLworCUxpc3QJICAgKmNvbHZhbGV4cHJzIHBnX25vZGVfYXR0cihxdWVyeV9q dW1ibGVfaWdub3JlKTsKKwkvKiBsaXN0IG9mIFBBU1NJTkcgYXJndW1lbnQgZXhwcmVzc2lvbnMg Ki8KKwlMaXN0CSAgICpwYXNzaW5ndmFsZXhwcnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9p Z25vcmUpOwogCS8qIG51bGxhYmlsaXR5IGZsYWcgZm9yIGVhY2ggb3V0cHV0IGNvbHVtbiAqLwog CUJpdG1hcHNldCAgKm5vdG51bGxzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsK KwkvKiBKU09OX1RBQkxFIHBsYW4gKi8KKwlOb2RlCSAgICpwbGFuIHBnX25vZGVfYXR0cihxdWVy eV9qdW1ibGVfaWdub3JlKTsKIAkvKiBjb3VudHMgZnJvbSAwOyAtMSBpZiBub25lIHNwZWNpZmll ZCAqLwogCWludAkJCW9yZGluYWxpdHljb2wgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25v cmUpOwogCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCkBAIC0xNTYxLDYg KzE1NzUsNyBAQCB0eXBlZGVmIGVudW0gSnNvbkV4cHJPcAogCUpTT05fVkFMVUVfT1AsCQkJCS8q IEpTT05fVkFMVUUoKSAqLwogCUpTT05fUVVFUllfT1AsCQkJCS8qIEpTT05fUVVFUlkoKSAqLwog CUpTT05fRVhJU1RTX09QLAkJCQkvKiBKU09OX0VYSVNUUygpICovCisJSlNPTl9UQUJMRV9PUCwJ CQkJLyogSlNPTl9UQUJMRSgpICovCiB9IEpzb25FeHByT3A7CiAKIC8qCkBAIC0xODUwLDYgKzE4 NjUsNDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHIKIAlpbnQJCQlsb2NhdGlvbjsKIH0gSnNv bkV4cHI7CiAKKy8qCisgKiBKc29uVGFibGVQYXRoCisgKgkJQSBKU09OIHBhdGggZXhwcmVzc2lv biB0byBiZSBjb21wdXRlZCBhcyBwYXJ0IG9mIGV2YWx1YXRpbmcKKyAqCQlhIEpTT05fVEFCTEUg cGxhbiBub2RlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBhdGgKK3sKKwlOb2RlVGFn CQl0eXBlOworCisJQ29uc3QJICAgKnZhbHVlOworCWNoYXIJICAgKm5hbWU7Cit9CQkJSnNvblRh YmxlUGF0aDsKKworLyoKKyAqIEpzb25UYWJsZVNwZWMgLQorICoJCXRyYW5zZm9ybWVkIHJlcHJl c2VudGF0aW9uIG9mIGEgSlNPTl9UQUJMRSBwbGFuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25U YWJsZVBsYW4KK3sKKwlOb2RlVGFnCQl0eXBlOworCisJSnNvblRhYmxlUGF0aCAqcGF0aDsKKwlO b2RlCSAgICpjaGlsZDsJCQkvKiBuZXN0ZWQgY29sdW1ucywgaWYgYW55ICovCisJYm9vbAkJb3V0 ZXJKb2luOwkJLyogb3V0ZXIgb3IgaW5uZXIgam9pbiBmb3IgbmVzdGVkIGNvbHVtbnM/ICovCisJ aW50CQkJY29sTWluOwkJCS8qIG1pbiBjb2x1bW4gaW5kZXggaW4gdGhlIHJlc3VsdGluZyBjb2x1 bW4KKwkJCQkJCQkJICogbGlzdCAqLworCWludAkJCWNvbE1heDsJCQkvKiBtYXggY29sdW1uIGlu ZGV4IGluIHRoZSByZXN1bHRpbmcgY29sdW1uCisJCQkJCQkJCSAqIGxpc3QgKi8KKwlib29sCQll cnJvck9uRXJyb3I7CS8qIEVSUk9SL0VNUFRZIE9OIEVSUk9SIGJlaGF2aW9yICovCit9IEpzb25U YWJsZVBsYW47CisKKy8qCisgKiBKc29uVGFibGVTaWJsaW5nIC0KKyAqCQl0cmFuc2Zvcm1lZCBy ZXByZXNlbnRhdGlvbiBvZiBqb2luZWQgc2libGluZyBKU09OX1RBQkxFIHBsYW4gbm9kZQorICov Cit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVTaWJsaW5nCit7CisJTm9kZVRhZwkJdHlwZTsKKwlO b2RlCSAgICpsYXJnOwkJCS8qIGxlZnQgam9pbiBub2RlICovCisJTm9kZQkgICAqcmFyZzsJCQkv KiByaWdodCBqb2luIG5vZGUgKi8KKwlib29sCQljcm9zczsJCQkvKiBjcm9zcyBvciB1bmlvbiBq b2luPyAqLworfSBKc29uVGFibGVTaWJsaW5nOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKiBO dWxsVGVzdAogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3Ny Yy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCA5NGUxY2I0ZGNlLi5lMmJiZWViMjA5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUv cGFyc2VyL2t3bGlzdC5oCkBAIC0yNDIsNiArMjQyLDcgQEAgUEdfS0VZV09SRCgianNvbl9vYmpl Y3RhZ2ciLCBKU09OX09CSkVDVEFHRywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoImpzb25fcXVlcnkiLCBKU09OX1FVRVJZLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9zY2FsYXIiLCBKU09OX1NDQUxBUiwgQ09MX05BTUVf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fc2VyaWFsaXplIiwgSlNPTl9T RVJJQUxJWkUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJqc29u X3RhYmxlIiwgSlNPTl9UQUJMRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImpzb25fdmFsdWUiLCBKU09OX1ZBTFVFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgia2VlcCIsIEtFRVAsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoImtleSIsIEtFWSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQpAQCAtMjg0LDYgKzI4NSw3IEBAIFBHX0tFWVdPUkQoIm5hbWVzIiwgTkFNRVMsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5hdGlvbmFsIiwgTkFUSU9O QUwsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuYXR1cmFsIiwg TkFUVVJBTCwgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo Im5jaGFyIiwgTkNIQVIsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JE KCJuZXN0ZWQiLCBORVNURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoIm5ldyIsIE5FVywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgibmV4dCIsIE5FWFQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoIm5mYyIsIE5GQywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMzM0 LDcgKzMzNiw5IEBAIFBHX0tFWVdPUkQoInBhcnRpYWwiLCBQQVJUSUFMLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXJ0aXRpb24iLCBQQVJUSVRJT04sIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBhc3NpbmciLCBQQVNT SU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXNzd29y ZCIsIFBBU1NXT1JELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JE KCJwYXRoIiwgUEFUSCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgicGxhY2luZyIsIFBMQUNJTkcsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19L RVlXT1JEKCJwbGFuIiwgUExBTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgicGxhbnMiLCBQTEFOUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgicG9saWN5IiwgUE9MSUNZLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJwb3NpdGlvbiIsIFBPU0lUSU9OLCBDT0xfTkFNRV9LRVlXT1JELCBC QVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5o IGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oCmluZGV4IDM4MjlkYjBmYzQuLmU3 MTc2MmIxMGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9jbGF1c2UuaAor KysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgKQEAgLTUxLDQgKzUxLDcgQEAg ZXh0ZXJuIExpc3QgKmFkZFRhcmdldFRvU29ydExpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJn ZXRFbnRyeSAqdGxlLAogZXh0ZXJuIEluZGV4IGFzc2lnblNvcnRHcm91cFJlZihUYXJnZXRFbnRy eSAqdGxlLCBMaXN0ICp0bGlzdCk7CiBleHRlcm4gYm9vbCB0YXJnZXRJc0luU29ydExpc3QoVGFy Z2V0RW50cnkgKnRsZSwgT2lkIHNvcnRvcCwgTGlzdCAqc29ydExpc3QpOwogCisvKiBmdW5jdGlv bnMgaW4gcGFyc2VfanNvbnRhYmxlLmMgKi8KK2V4dGVybiBQYXJzZU5hbWVzcGFjZUl0ZW0gKnRy YW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25UYWJsZSAqanQpOworCiAj ZW5kaWYJCQkJCQkJLyogUEFSU0VfQ0xBVVNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCmluZGV4IDg5 N2RlMjFhNTEuLjgzOGRjOGUwZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25w YXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAtMTUsNiArMTUsNyBA QAogI2RlZmluZSBKU09OUEFUSF9ICiAKICNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiZXhl Y3V0b3IvdGFibGVmdW5jLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUg Im5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCkBAIC0yOTIsNCAr MjkzLDYgQEAgZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnkoRGF0dW0gamIsIEpzb25QYXRoICpq cCwgSnNvbldyYXBwZXIgd3JhcHBlciwKIGV4dGVybiBKc29uYlZhbHVlICpKc29uUGF0aFZhbHVl KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wgKmVtcHR5LAogCQkJCQkJCQkgYm9vbCAqZXJy b3IsIExpc3QgKnZhcnMpOwogCitleHRlcm4gUEdETExJTVBPUlQgY29uc3QgVGFibGVGdW5jUm91 dGluZSBKc29uYlRhYmxlUm91dGluZTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZSBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9l Y3BnX3NjaGVkdWxlCmluZGV4IDM5ODE0YTM5YzEuLjIyMDhmNDBkNjcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCisrKyBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCkBAIC01MSw2ICs1MSw3IEBAIHRlc3Q6IHNxbC9vbGRl eGVjCiB0ZXN0OiBzcWwvcXVvdGUKIHRlc3Q6IHNxbC9zaG93CiB0ZXN0OiBzcWwvc3FsanNvbgor dGVzdDogc3FsL3NxbGpzb25fanNvbnRhYmxlCiB0ZXN0OiBzcWwvaW5zdXBkCiB0ZXN0OiBzcWwv cGFyc2VyCiB0ZXN0OiBzcWwvcHJlcGFyZWFzCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLmMgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMGJiZjQ0NDMxOAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUu YwpAQCAtMCwwICsxLDEzMiBAQAorLyogUHJvY2Vzc2VkIGJ5IGVjcGcgKHJlZ3Jlc3Npb24gbW9k ZSkgKi8KKy8qIFRoZXNlIGluY2x1ZGUgZmlsZXMgYXJlIGFkZGVkIGJ5IHRoZSBwcmVwcm9jZXNz b3IgKi8KKyNpbmNsdWRlIDxlY3BnbGliLmg+CisjaW5jbHVkZSA8ZWNwZ2Vycm5vLmg+CisjaW5j bHVkZSA8c3FsY2EuaD4KKy8qIEVuZCBvZiBhdXRvbWF0aWMgaW5jbHVkZSBzZWN0aW9uICovCisj ZGVmaW5lIEVDUEdkZWJ1ZyhYLFkpIEVDUEdkZWJ1ZygoWCkrMTAwLChZKSkKKworI2xpbmUgMSAi c3FsanNvbl9qc29udGFibGUucGdjIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworI2xpbmUgMSAi c3FsY2EuaCIKKyNpZm5kZWYgUE9TVEdSRVNfU1FMQ0FfSAorI2RlZmluZSBQT1NUR1JFU19TUUxD QV9ICisKKyNpZm5kZWYgUEdETExJTVBPUlQKKyNpZiAgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5l ZChfX0NZR1dJTl9fKQorI2RlZmluZSBQR0RMTElNUE9SVCBfX2RlY2xzcGVjIChkbGxpbXBvcnQp CisjZWxzZQorI2RlZmluZSBQR0RMTElNUE9SVAorI2VuZGlmCQkJCQkJCS8qIF9fQ1lHV0lOX18g Ki8KKyNlbmRpZgkJCQkJCQkvKiBQR0RMTElNUE9SVCAqLworCisjZGVmaW5lIFNRTEVSUk1DX0xF TgkxNTAKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworc3Ry dWN0IHNxbGNhX3QKK3sKKwljaGFyCQlzcWxjYWlkWzhdOworCWxvbmcJCXNxbGFiYzsKKwlsb25n CQlzcWxjb2RlOworCXN0cnVjdAorCXsKKwkJaW50CQkJc3FsZXJybWw7CisJCWNoYXIJCXNxbGVy cm1jW1NRTEVSUk1DX0xFTl07CisJfQkJCXNxbGVycm07CisJY2hhcgkJc3FsZXJycFs4XTsKKwls b25nCQlzcWxlcnJkWzZdOworCS8qIEVsZW1lbnQgMDogZW1wdHkJCQkJCQkqLworCS8qIDE6IE9J RCBvZiBwcm9jZXNzZWQgdHVwbGUgaWYgYXBwbGljYWJsZQkJCSovCisJLyogMjogbnVtYmVyIG9m IHJvd3MgcHJvY2Vzc2VkCQkJCSovCisJLyogYWZ0ZXIgYW4gSU5TRVJULCBVUERBVEUgb3IJCQkJ Ki8KKwkvKiBERUxFVEUgc3RhdGVtZW50CQkJCQkqLworCS8qIDM6IGVtcHR5CQkJCQkJKi8KKwkv KiA0OiBlbXB0eQkJCQkJCSovCisJLyogNTogZW1wdHkJCQkJCQkqLworCWNoYXIJCXNxbHdhcm5b OF07CisJLyogRWxlbWVudCAwOiBzZXQgdG8gJ1cnIGlmIGF0IGxlYXN0IG9uZSBvdGhlciBpcyAn VycJKi8KKwkvKiAxOiBpZiAnVycgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBzdHJpbmcJCSovCisJ LyogdmFsdWUgd2FzIHRydW5jYXRlZCB3aGVuIGl0IHdhcwkJCSovCisJLyogc3RvcmVkIGludG8g YSBob3N0IHZhcmlhYmxlLiAgICAgICAgICAgICAqLworCisJLyoKKwkgKiAyOiBpZiAnVycgYSAo aG9wZWZ1bGx5KSBub24tZmF0YWwgbm90aWNlIG9jY3VycmVkCisJICovCS8qIDM6IGVtcHR5ICov CisJLyogNDogZW1wdHkJCQkJCQkqLworCS8qIDU6IGVtcHR5CQkJCQkJKi8KKwkvKiA2OiBlbXB0 eQkJCQkJCSovCisJLyogNzogZW1wdHkJCQkJCQkqLworCisJY2hhcgkJc3Fsc3RhdGVbNV07Cit9 OworCitzdHJ1Y3Qgc3FsY2FfdCAqRUNQR2dldF9zcWxjYSh2b2lkKTsKKworI2lmbmRlZiBQT1NU R1JFU19FQ1BHX0lOVEVSTkFMCisjZGVmaW5lIHNxbGNhICgqRUNQR2dldF9zcWxjYSgpKQorI2Vu ZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisjbGluZSAz ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKKworI2xpbmUgMSAicmVncmVzc2lvbi5oIgorCisK KworCisKKworI2xpbmUgNCAic3FsanNvbl9qc29udGFibGUucGdjIgorCisKKy8qIGV4ZWMgc3Fs IHdoZW5ldmVyIHNxbGVycm9yICBzcWxwcmludCA7ICovCisjbGluZSA2ICJzcWxqc29uX2pzb250 YWJsZS5wZ2MiCisKKworaW50CittYWluICgpCit7CisgIEVDUEdkZWJ1ZyAoMSwgc3RkZXJyKTsK KworICB7IEVDUEdjb25uZWN0KF9fTElORV9fLCAwLCAiZWNwZzFfcmVncmVzc2lvbiIgLCBOVUxM LCBOVUxMICwgTlVMTCwgMCk7IAorI2xpbmUgMTMgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKwor aWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCgpO30KKyNsaW5lIDEzICJzcWxqc29uX2pz b250YWJsZS5wZ2MiCisKKyAgeyBFQ1BHc2V0Y29tbWl0KF9fTElORV9fLCAib24iLCBOVUxMKTsK KyNsaW5lIDE0ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwg MCkgc3FscHJpbnQoKTt9CisjbGluZSAxNCAic3FsanNvbl9qc29udGFibGUucGdjIgorCisKKyAg eyBFQ1BHZG8oX19MSU5FX18sIDAsIDEsIE5VTEwsIDAsIEVDUEdzdF9ub3JtYWwsICJzZWxlY3Qg KiBmcm9tIGpzb25fdGFibGUgKCBqc29uYiAnbnVsbCcgLCAnJFsqXScgYXMgcDAgY29sdW1ucyAo IG5lc3RlZCAnJCcgYXMgcDEgY29sdW1ucyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMTEgY29sdW1u cyAoIGZvbyBpbnQgKSAsIG5lc3RlZCBwYXRoICckJyBhcyBwMTIgY29sdW1ucyAoIGJhciBpbnQg KSApICwgbmVzdGVkIHBhdGggJyQnIGFzIHAyIGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMg cDIxIGNvbHVtbnMgKCBiYXogaW50ICkgKSApIHBsYW4gKCBwMSApICkganQiLCBFQ1BHdF9FT0lU LCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDI2ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChz cWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQoKTt9CisjbGluZSAyNiAic3FsanNvbl9qc29udGFi bGUucGdjIgorCisgIC8vIGVycm9yCisKKyAgeyBFQ1BHZGlzY29ubmVjdChfX0xJTkVfXywgIkNV UlJFTlQiKTsKKyNsaW5lIDI5ICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChzcWxjYS5z cWxjb2RlIDwgMCkgc3FscHJpbnQoKTt9CisjbGluZSAyOSAic3FsanNvbl9qc29udGFibGUucGdj IgorCisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rl c3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLnN0ZGVyciBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3RkZXJyCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU4ODFmZGI1ZWUKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRh YmxlLnN0ZGVycgpAQCAtMCwwICsxLDIwIEBACitbTk9fUElEXTogRUNQR2RlYnVnOiBzZXQgdG8g MQorW05PX1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBFQ1BH Y29ubmVjdDogb3BlbmluZyBkYXRhYmFzZSBlY3BnMV9yZWdyZXNzaW9uIG9uIDxERUZBVUxUPiBw b3J0IDxERUZBVUxUPiAgCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAor W05PX1BJRF06IEVDUEdzZXRjb21taXQgb24gbGluZSAxNDogYWN0aW9uICJvbiI7IGNvbm5lY3Rp b24gImVjcGcxX3JlZ3Jlc3Npb24iCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAw MDAwMAorW05PX1BJRF06IGVjcGdfZXhlY3V0ZSBvbiBsaW5lIDE2OiBxdWVyeTogc2VsZWN0ICog ZnJvbSBqc29uX3RhYmxlICgganNvbmIgJ251bGwnICwgJyRbKl0nIGFzIHAwIGNvbHVtbnMgKCBu ZXN0ZWQgJyQnIGFzIHAxIGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDExIGNvbHVtbnMg KCBmb28gaW50ICkgLCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDEyIGNvbHVtbnMgKCBiYXIgaW50ICkg KSAsIG5lc3RlZCBwYXRoICckJyBhcyBwMiBjb2x1bW5zICggbmVzdGVkIHBhdGggJyQnIGFzIHAy MSBjb2x1bW5zICggYmF6IGludCApICkgKSBwbGFuICggcDEgKSApIGp0OyB3aXRoIDAgcGFyYW1l dGVyKHMpIG9uIGNvbm5lY3Rpb24gZWNwZzFfcmVncmVzc2lvbgorW05PX1BJRF06IHNxbGNhOiBj b2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBlY3BnX2V4ZWN1dGUgb24gbGluZSAxNjog dXNpbmcgUFFleGVjCitbTk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAorW05P X1BJRF06IGVjcGdfY2hlY2tfUFFyZXN1bHQgb24gbGluZSAxNjogYmFkIHJlc3BvbnNlIC0gRVJS T1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElORSAxOiAuLi50ZWQgcGF0aCAnJCcgYXMg cDIxIGNvbHVtbnMgKCBiYXogaW50ICkgKSApIHBsYW4gKCBwMSApICkganQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorREVU QUlMOiAgUEFUSCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCBwMCBidXQgcDEgaXMgZ2l2ZW4uCitb Tk9fUElEXTogc3FsY2E6IGNvZGU6IDAsIHN0YXRlOiAwMDAwMAorW05PX1BJRF06IHJhaXNpbmcg c3Fsc3RhdGUgNDI2MDEgKHNxbGNvZGUgLTQwMCk6IGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIG9u IGxpbmUgMTYKK1tOT19QSURdOiBzcWxjYTogY29kZTogLTQwMCwgc3RhdGU6IDQyNjAxCitTUUwg ZXJyb3I6IGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIG9uIGxpbmUgMTYKK1tOT19QSURdOiBlY3Bn X2ZpbmlzaDogY29ubmVjdGlvbiBlY3BnMV9yZWdyZXNzaW9uIGNsb3NlZAorW05PX1BJRF06IHNx bGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2Vj cGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3Rkb3V0IGIvc3JjL2ludGVy ZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5zdGRvdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0 IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9zcWwvTWFrZWZpbGUKaW5kZXggZDgyMTNiMjVjZS4uN2YwMzI2NTliOSAxMDA2 NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZQorKysgYi9zcmMv aW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIFRFU1RT ID0gYXJyYXkgYXJyYXkuYyBcCiAgICAgICAgIHF1b3RlIHF1b3RlLmMgXAogICAgICAgICBzaG93 IHNob3cuYyBcCiAgICAgICAgIHNxbGpzb24gc3FsanNvbi5jIFwKKyAgICAgICAgc3FsanNvbl9q c29udGFibGUgc3FsanNvbl9qc29udGFibGUuYyBcCiAgICAgICAgIGluc3VwZCBpbnN1cGQuYyBc CiAgICAgICAgIHR3b3BoYXNlIHR3b3BoYXNlLmMgXAogICAgICAgICBpbnN1cGQgaW5zdXBkLmMg XApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9tZXNvbi5idWlsZCBi L3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvbWVzb24uYnVpbGQKaW5kZXggMTJmMjhlMGEy NC4uODhhM2FjYjlhZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9t ZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxk CkBAIC0yNiw2ICsyNiw3IEBAIHBnY19maWxlcyA9IFsKICAgJ3Nob3cnLAogICAnc3FsZGEnLAog ICAnc3FsanNvbicsCisgICdzcWxqc29uX2pzb250YWJsZScsCiAgICd0d29waGFzZScsCiBdCiAK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9qc29udGFi bGUucGdjIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9zcWxqc29uX2pzb250YWJsZS5w Z2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDZmOGEyYjYzNAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9qc29u dGFibGUucGdjCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitFWEVDIFNR TCBJTkNMVURFIHNxbGNhOworZXhlYyBzcWwgaW5jbHVkZSAuLi9yZWdyZXNzaW9uOworCitFWEVD IFNRTCBXSEVORVZFUiBTUUxFUlJPUiBzcWxwcmludDsKKworaW50CittYWluICgpCit7CisgIEVD UEdkZWJ1ZyAoMSwgc3RkZXJyKTsKKworICBFWEVDIFNRTCBDT05ORUNUIFRPIFJFR1JFU1NEQjE7 CisgIEVYRUMgU1FMIFNFVCBBVVRPQ09NTUlUID0gT047CisKKyAgRVhFQyBTUUwgU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJ CU5FU1RFRCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENP TFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBi YXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAo cDEpKSBqdDsKKyAgLy8gZXJyb3IKKworICBFWEVDIFNRTCBESVNDT05ORUNUOworCisgIHJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX2pz b250YWJsZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fanNvbnRhYmxl Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43ZTJjYTg5OTgzCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX2pzb250 YWJsZS5vdXQKQEAgLTAsMCArMSwxMjA4IEBACistLSBKU09OX1RBQkxFCistLSBTaG91bGQgZmFp bCAoSlNPTl9UQUJMRSBjYW4gYmUgdXNlZCBvbmx5IGluIEZST00gY2xhdXNlKQorU0VMRUNUIEpT T05fVEFCTEUoJ1tdJywgJyQnKTsKK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigi CitMSU5FIDE6IFNFTEVDVCBKU09OX1RBQkxFKCdbXScsICckJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgXgorLS0gU2hvdWxkIGZhaWwgKGpzb24gYXJndW1lbnQgbm90IHN1cHBvcnRlZCkK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1BVCBKU09OLCAnJCcgQ09MVU1OUyAo Zm9vIHRleHQpKTsKK0VSUk9SOiAgSlNPTl9UQUJMRSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQg Zm9yIHRoZSBqc29uIHR5cGUKK0xJTkUgMTogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKE5VTEwg Rk9STUFUIEpTT04sICckJyBDT0xVTU5TIChmb28gLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCist LSBTaG91bGQgZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxM LCAnJCcgQ09MVU1OUyAoKSk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgor TElORSAxOiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRSAoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1l c3RhbXApKSBBUyBmICh2MSwgdjIpOworRVJST1I6ICBKU09OX1RBQkxFIGZ1bmN0aW9uIGhhcyAx IGNvbHVtbnMgYXZhaWxhYmxlIGJ1dCAyIGNvbHVtbnMgc3BlY2lmaWVkCistLSBOVUxMID0+IGVt cHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBDT0xV TU5TIChmb28gaW50KSkgYmFyOworIGZvbyAKKy0tLS0tCisoMCByb3dzKQorCistLQorU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQ QVRIICckJywgZm9vIGludCkpIGJhcjsKKyBpdGVtIHwgZm9vIAorLS0tLS0tKy0tLS0tCisgIDEy MyB8ICAgIAorKDEgcm93KQorCistLSBKU09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5CitD UkVBVEUgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdm b28nKTsKK0NSRUFURSBURU1QIFRBQkxFIGpzb25fdGFibGVfdGVzdCAoanMpIEFTCisJKFZBTFVF UworCQkoJzEnKSwKKwkJKCdbXScpLAorCQkoJ3t9JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFh YWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXScpCisJKTsKKy0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxF Q1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05f VEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQg Rk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQ QVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wg UEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpz b25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpz b25iIFBBVEggJyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgaWQgfCBpbnQgfCAgdGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmlj IHwgZG9tYWluICB8ICAgICAganMgICAgICB8ICAgICAgamIgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAg ICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEgICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAg ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICB8IAorIHt9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAg fCAgICAgICAgIHwge30gICAgICAgICAgIHwge30KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAg ICAgICB8IDEgICAgICAgICAgICB8IDEKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg IDIgfCAgIDEgfCAxLjIzICAgIHwgMS4yMyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICB8 IDEuMjMgICAgICAgICB8IDEuMjMKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBu dWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMg fCAgIDIgfCAyICAgICAgIHwgMiAgICAgICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAgICB8ICIy IiAgICAgICAgICB8ICIyIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8ICAg ICB8IGFhYWFhYWEgfCBhYWFhICAgIHwgICAgICB8ICAgICAgICAgfCBhYWFhYWFhIHwgImFhYWFh YWEiICAgIHwgImFhYWFhYWEiCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVs bCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwg ICAgIHwgZm9vICAgICB8IGZvbyAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAiZm9v IiAgICAgICAgfCAiZm9vIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAg ICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgbnVsbCAg ICAgICAgIHwgbnVsbAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgMCB8 IGZhbHNlICAgfCBmYWxzICAgIHwgZiAgICB8ICAgICAgICAgfCBmYWxzZSAgIHwgZmFsc2UgICAg ICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxz ZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgIDEgfCB0 cnVlICAgIHwgdHJ1ZSAgICB8IHQgICAgfCAgICAgICAgIHwgdHJ1ZSAgICB8IHRydWUgICAgICAg ICB8IHRydWUKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCAgICAgfCAgICAg ICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8 IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAgICB8 IFsxLDJdICAgfCBbMSwyICAgIHwgICAgICB8ICAgICAgICAgfCBbMSwyXSAgIHwgIlsxLDJdIiAg ICAgIHwgIlsxLDJdIgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICAgICB8 ICJzdHIiICAgfCAic3RyICAgIHwgICAgICB8ICAgICAgICAgfCAic3RyIiAgIHwgIlwic3RyXCIi ICAgIHwgIlwic3RyXCIiCisoMTQgcm93cykKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VM RUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09O X1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlk IEZPUiBPUkRJTkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAor CQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkg Rk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQn LAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJ KSBqdAorCU9OIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgICAg IGpzdCAgICAgIHwganNjICB8IGpzdiAgfCAgICAganNiICAgICAgfCAgICAganNicSAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0r LS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAxIHwgMSAgICAgICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAgICAg ICAgfCAxCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICAg IHwgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEgfCB7fSAgICAgICAgICAgfCB7fSAgIHwge30gICB8IHt9ICAgICAgICAgICB8 IHt9CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAxIHwgMSAgICAgICAgICAgIHwg MSAgICB8IDEgICAgfCAxICAgICAgICAgICAgfCAxCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEi LCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3Ry XCIiXSB8ICAyIHwgMS4yMyAgICAgICAgIHwgMS4yMyB8IDEuMjMgfCAxLjIzICAgICAgICAgfCAx LjIzCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAzIHwgIjIiICAgICAgICAgIHwg IjIiICB8ICIyIiAgfCAiMiIgICAgICAgICAgfCAyCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEi LCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3Ry XCIiXSB8ICA0IHwgImFhYWFhYWEiICAgIHwgImFhYSB8ICJhYWEgfCAiYWFhYWFhYSIgICAgfCAK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDUgfCAiZm9vIiAgICAgICAgfCAiZm9v IHwgImZvbyB8ICJmb28iICAgICAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZv byIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0g fCAgNiB8IG51bGwgICAgICAgICB8IG51bGwgfCBudWxsIHwgbnVsbCAgICAgICAgIHwgbnVsbAor IFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8IGZhbHNlICAgICAgICB8IGZhbHMg fCBmYWxzIHwgZmFsc2UgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDggfCB0cnVlICAgICAgICAgfCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRy dWUKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCB7ImFhYSI6IDEyM30gfCB7 ImFhIHwgeyJhYSB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIs ICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwy XSIsICJcInN0clwiIl0gfCAxMCB8ICJbMSwyXSIgICAgICB8ICJbMSwgfCAiWzEsIHwgIlsxLDJd IiAgICAgIHwgWzEsIDJdCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgIlwi c3RyXCIiICAgIHwgIlwicyB8ICJcInMgfCAiXCJzdHJcIiIgICAgfCAic3RyIgorKDE0IHJvd3Mp CisKKy0tIEVYSVNUUyBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFs cworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4 ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJv b2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFh YScsCisJCQlleGlzdHMzIGludCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9O IEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNF IE9OIEVSUk9SCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgaWQgfCBleGlzdHMxIHwgZXhpc3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgZiAg ICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbXSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAKKyB7fSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBm YWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMSB8IGYgICAgICAgfCAgICAg ICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAy IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDMgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQor IFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8IGYgICAgICAgfCAgICAgICAwIHwg ICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgZiAg ICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFh YSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgIDYgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAg ICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgZiAgICAgICB8 ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJm b28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJd IHwgIDkgfCB0ICAgICAgIHwgICAgICAgMSB8ICAgICAgIDEgfCB0cnVlCisgWzEsIDEuMjMsICIy IiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsx LDJdIiwgIlwic3RyXCIiXSB8IDEwIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFs c2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTEgfCBmICAgICAgIHwgICAgICAg MCB8ICAgICAgICAgfCBmYWxzZQorKDE0IHJvd3MpCisKKy0tIE90aGVyIG1pc2NlbGxhbm91cyBj aGVja3MKK1NFTEVDVCAqCitGUk9NIGpzb25fdGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBK T0lOCisJSlNPTl9UQUJMRSgKKwkJdmFscy5qczo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1O UyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCWFhYSBpbnQsIC0tICJhYWEiIGhhcyBpbXBs aWNpdCBwYXRoICckLiJhYWEiJworCQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJanMyIGpz b24gUEFUSCAnJCcsCisJCQlqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlq c2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAor CQkJdGEgdGV4dFtdIFBBVEggJyQnLAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQorCSkg anQKKwlPTiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg anMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpZCB8IGFhYSB8 IGFhYTEgfCAgICAganMyICAgICAgfCAgICAganNiMncgICAgICB8ICAgIGpzYjJxICAgICB8IGlh IHwgdGEgfCBqYmEgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSst LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0t Ky0tLS0rLS0tLS0KKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgICAgfCAg ICAgIHwgMSAgICAgICAgICAgIHwgWzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8 ICAgIHwgCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgIHwgICAgICB8 ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICB8 IAorIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgfCB7fSAg ICAgICAgICAgfCBbe31dICAgICAgICAgICB8IHt9ICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAg ICAgIHwgWzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEu MjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgICAgIHwgICAgICB8IDEuMjMgICAgICAgICB8 IFsxLjIzXSAgICAgICAgIHwgMS4yMyAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJb MSwyXSIsICJcInN0clwiIl0gfCAgMyB8ICAgICB8ICAgICAgfCAiMiIgICAgICAgICAgfCBbIjIi XSAgICAgICAgICB8IDIgICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDQgfCAgICAgfCAgICAgIHwgImFhYWFhYWEiICAgIHwgWyJhYWFhYWFh Il0gICAgfCAgICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFh YWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwi c3RyXCIiXSB8ICA1IHwgICAgIHwgICAgICB8ICJmb28iICAgICAgICB8IFsiZm9vIl0gICAgICAg IHwgICAgICAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwg ImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwi Il0gfCAgNiB8ICAgICB8ICAgICAgfCBudWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51 bGwgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg IDcgfCAgICAgfCAgICAgIHwgZmFsc2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZSAg ICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVs bCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwg ICAgIHwgICAgICB8IHRydWUgICAgICAgICB8IFt0cnVlXSAgICAgICAgIHwgdHJ1ZSAgICAgICAg IHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOSB8IDEyMyB8 ICAxMjMgfCB7ImFhYSI6IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAg IHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgICAgfCAgICAg IHwgIlsxLDJdIiAgICAgIHwgWyJbMSwyXSJdICAgICAgfCBbMSwgMl0gICAgICAgfCAgICB8ICAg IHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgICAgIHwgICAgICB8ICJc InN0clwiIiAgICB8IFsiXCJzdHJcIiJdICAgIHwgInN0ciIgICAgICAgIHwgICAgfCAgICB8IAor KDE0IHJvd3MpCisKKy0tIEpTT05fVEFCTEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworQ1JFQVRF IFZJRVcganNvbmJfdGFibGVfdmlldyBBUworU0VMRUNUICogRlJPTQorCUpTT05fVEFCTEUoCisJ CWpzb25iICdudWxsJywgJ2xheCAkWypdJyBQQVNTSU5HIDEgKyAyIEFTIGEsIGpzb24gJyJmb28i JyBBUyAiYiBjIgorCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJImludCIg aW50IFBBVEggJyQnLAorCQkJInRleHQiIHRleHQgUEFUSCAnJCcsCisJCQkiY2hhcig0KSIgY2hh cig0KSBQQVRIICckJywKKwkJCSJib29sIiBib29sIFBBVEggJyQnLAorCQkJIm51bWVyaWMiIG51 bWVyaWMgUEFUSCAnJCcsCisJCQkiZG9tYWluIiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywK KwkJCWpzIGpzb24gUEFUSCAnJCcsCisJCQlqYiBqc29uYiBQQVRIICckJywKKwkJCWpzdCB0ZXh0 ICAgIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYyBjaGFyKDQpIEZPUk1BVCBKU09OICBQ QVRIICckJywKKwkJCWpzdiB2YXJjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpz YiBqc29uYiAgIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNP TiBQQVRIICckJyBPTUlUIFFVT1RFUywKKwkJCWFhYSBpbnQsIC0tIGltcGxpY2l0IHBhdGggJyQu ImFhYSInLAorCQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMSBib29sIEVYSVNU UyBQQVRIICckLmFhYScsCisJCQlleGlzdHMyIGludCBFWElTVFMgUEFUSCAnJC5hYWEnIFRSVUUg T04gRVJST1IsCisJCQlleGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5L Tk9XTiBPTiBFUlJPUiwKKwkJCWpzMiBqc29uIFBBVEggJyQnLAorCQkJanNiMncganNvbmIgUEFU SCAnJCcgV0lUSCBXUkFQUEVSLAorCQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMs CisJCQlpYSBpbnRbXSBQQVRIICckJywKKwkJCXRhIHRleHRbXSBQQVRIICckJywKKwkJCWpiYSBq c29uYltdIFBBVEggJyQnLAorCQkJTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAor CQkJCWExIGludCwKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAor CQkJCQlhMTEgdGV4dAorCQkJCSksCisJCQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRI ICckWzJdJyBBUyBwMiBDT0xVTU5TICgKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEi IENPTFVNTlMgKAorCQkJCQlhMjEgdGV4dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0n IEFTIHAyMiBDT0xVTU5TICgKKwkJCQkJYTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOwor XHN2IGpzb25iX3RhYmxlX3ZpZXcKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLmpzb25i X3RhYmxlX3ZpZXcgQVMKKyBTRUxFQ1QgaWQsCisgICAgImludCIsCisgICAgdGV4dCwKKyAgICAi Y2hhcig0KSIsCisgICAgYm9vbCwKKyAgICAibnVtZXJpYyIsCisgICAgZG9tYWluLAorICAgIGpz LAorICAgIGpiLAorICAgIGpzdCwKKyAgICBqc2MsCisgICAganN2LAorICAgIGpzYiwKKyAgICBq c2JxLAorICAgIGFhYSwKKyAgICBhYWExLAorICAgIGV4aXN0czEsCisgICAgZXhpc3RzMiwKKyAg ICBleGlzdHMzLAorICAgIGpzMiwKKyAgICBqc2IydywKKyAgICBqc2IycSwKKyAgICBpYSwKKyAg ICB0YSwKKyAgICBqYmEsCisgICAgYTEsCisgICAgYjEsCisgICAgYTExLAorICAgIGEyMSwKKyAg ICBhMjIKKyAgIEZST00gSlNPTl9UQUJMRSgKKyAgICAgICAgICAgICdudWxsJzo6anNvbmIsICck WypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMAorICAgICAgICAgICAgUEFTU0lORworICAgICAgICAg ICAgICAgIDEgKyAyIEFTIGEsCisgICAgICAgICAgICAgICAgJyJmb28iJzo6anNvbiBBUyAiYiBj IgorICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgaWQgRk9SIE9SRElOQUxJ VFksCisgICAgICAgICAgICAgICAgImludCIgaW50ZWdlciBQQVRIICckJywKKyAgICAgICAgICAg ICAgICB0ZXh0IHRleHQgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJh Y3Rlcig0KSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcs CisgICAgICAgICAgICAgICAgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisgICAgICAgICAg ICAgICAgZG9tYWluIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorICAgICAgICAgICAgICAg IGpzIGpzb24gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgamIganNvbmIgUEFUSCAnJCcsCisg ICAgICAgICAgICAgICAganN0IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAg ICAgICAganNjIGNoYXJhY3Rlcig0KSBGT1JNQVQgSlNPTiBQQVRIICckJywKKyAgICAgICAgICAg ICAgICBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAg ICAgICAgICAgICAganNiIGpzb25iIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYnEganNv bmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAgYWFhIGludGVnZXIgUEFU SCAnJC4iYWFhIicsCisgICAgICAgICAgICAgICAgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFhYSIn LAorICAgICAgICAgICAgICAgIGV4aXN0czEgYm9vbGVhbiBFWElTVFMgUEFUSCAnJC4iYWFhIics CisgICAgICAgICAgICAgICAgZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBU UlVFIE9OIEVSUk9SLAorICAgICAgICAgICAgICAgIGV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAn c3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsCisgICAgICAgICAgICAgICAganMyIGpz b24gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBV TkNPTkRJVElPTkFMIFdSQVBQRVIsCisgICAgICAgICAgICAgICAganNiMnEganNvbmIgUEFUSCAn JCcgT01JVCBRVU9URVMsCisgICAgICAgICAgICAgICAgaWEgaW50ZWdlcltdIFBBVEggJyQnLAor ICAgICAgICAgICAgICAgIHRhIHRleHRbXSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqYmEg anNvbmJbXSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMg cDEKKyAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgYTEgaW50 ZWdlciBQQVRIICckLiJhMSInLAorICAgICAgICAgICAgICAgICAgICBiMSB0ZXh0IFBBVEggJyQu ImIxIicsCisgICAgICAgICAgICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIK KyAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBh MTEgdGV4dCBQQVRIICckLiJhMTEiJworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgKSwKKyAgICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsyXScgQVMgcDIKKyAgICAg ICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRb Kl0nIEFTICJwMjoxIgorICAgICAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAg ICAgICAgICAgICAgIGEyMSB0ZXh0IFBBVEggJyQuImEyMSInCisgICAgICAgICAgICAgICAgICAg ICksCisgICAgICAgICAgICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIKKyAgICAg ICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMjIgdGV4 dCBQQVRIICckLiJhMjIiJworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgKQorICAgICAgICAgICAgUExBTiAoanNvbl90YWJsZV9wYXRoXzAgT1VU RVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikp KSkKKyAgICAgICAgKQorRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9N IGpzb25iX3RhYmxlX3ZpZXc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBGdW5jdGlvbiBTY2Fu IG9uICJKU09OX1RBQkxFIiAianNvbl90YWJsZSIKKyAgIE91dHB1dDogImpzb25fdGFibGUiLmlk LCAianNvbl90YWJsZSIuImludCIsICJqc29uX3RhYmxlIi50ZXh0LCAianNvbl90YWJsZSIuImNo YXIoNCkiLCAianNvbl90YWJsZSIuYm9vbCwgImpzb25fdGFibGUiLiJudW1lcmljIiwgImpzb25f dGFibGUiLmRvbWFpbiwgImpzb25fdGFibGUiLmpzLCAianNvbl90YWJsZSIuamIsICJqc29uX3Rh YmxlIi5qc3QsICJqc29uX3RhYmxlIi5qc2MsICJqc29uX3RhYmxlIi5qc3YsICJqc29uX3RhYmxl Ii5qc2IsICJqc29uX3RhYmxlIi5qc2JxLCAianNvbl90YWJsZSIuYWFhLCAianNvbl90YWJsZSIu YWFhMSwgImpzb25fdGFibGUiLmV4aXN0czEsICJqc29uX3RhYmxlIi5leGlzdHMyLCAianNvbl90 YWJsZSIuZXhpc3RzMywgImpzb25fdGFibGUiLmpzMiwgImpzb25fdGFibGUiLmpzYjJ3LCAianNv bl90YWJsZSIuanNiMnEsICJqc29uX3RhYmxlIi5pYSwgImpzb25fdGFibGUiLnRhLCAianNvbl90 YWJsZSIuamJhLCAianNvbl90YWJsZSIuYTEsICJqc29uX3RhYmxlIi5iMSwgImpzb25fdGFibGUi LmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25fdGFibGUiLmEyMgorICAgVGFibGUgRnVuY3Rp b24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompzb25iLCAnJFsqXScgQVMganNvbl90YWJsZV9w YXRoXzAgUEFTU0lORyAzIEFTIGEsICciZm9vIic6Ompzb25iIEFTICJiIGMiIENPTFVNTlMgKGlk IEZPUiBPUkRJTkFMSVRZLCAiaW50IiBpbnRlZ2VyIFBBVEggJyQnLCB0ZXh0IHRleHQgUEFUSCAn JCcsICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcsIGJvb2wgYm9vbGVhbiBQQVRIICck JywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsIGRvbWFpbiBqc29uYl90ZXN0X2RvbWFpbiBQ QVRIICckJywganMganNvbiBQQVRIICckJywgamIganNvbmIgUEFUSCAnJCcsIGpzdCB0ZXh0IEZP Uk1BVCBKU09OIFBBVEggJyQnLCBqc2MgY2hhcmFjdGVyKDQpIEZPUk1BVCBKU09OIFBBVEggJyQn LCBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYiBqc29u YiBQQVRIICckJywganNicSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywgYWFhIGludGVnZXIg UEFUSCAnJC4iYWFhIicsIGFhYTEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgZXhpc3RzMSBib29s ZWFuIEVYSVNUUyBQQVRIICckLiJhYWEiJywgZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICck LiJhYWEiJyBUUlVFIE9OIEVSUk9SLCBleGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAk LiJhYWEiJyBVTktOT1dOIE9OIEVSUk9SLCBqczIganNvbiBQQVRIICckJywganNiMncganNvbmIg UEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIsIGpzYjJxIGpzb25iIFBBVEggJyQn IE9NSVQgUVVPVEVTLCBpYSBpbnRlZ2VyW10gUEFUSCAnJCcsIHRhIHRleHRbXSBQQVRIICckJywg amJhIGpzb25iW10gUEFUSCAnJCcsIE5FU1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TIChh MSBpbnRlZ2VyIFBBVEggJyQuImExIicsIGIxIHRleHQgUEFUSCAnJC4iYjEiJywgTkVTVEVEIFBB VEggJyRbKl0nIEFTICJwMSAxIiBDT0xVTU5TIChhMTEgdGV4dCBQQVRIICckLiJhMTEiJykpLCBO RVNURUQgUEFUSCAnJFsyXScgQVMgcDIgQ09MVU1OUyAoIE5FU1RFRCBQQVRIICckWypdJyBBUyAi cDI6MSIgQ09MVU1OUyAoYTIxIHRleHQgUEFUSCAnJC4iYTIxIicpLCBORVNURUQgUEFUSCAnJFsq XScgQVMgcDIyIENPTFVNTlMgKGEyMiB0ZXh0IFBBVEggJyQuImEyMiInKSkpIFBMQU4gKGpzb25f dGFibGVfcGF0aF8wIE9VVEVSICgocDEgT1VURVIgInAxIDEiKSBVTklPTiAocDIgT1VURVIgKCJw MjoxIiBVTklPTiBwMjIpKSkpKQorKDMgcm93cykKKworLS0gSlNPTl9UQUJMRSgpIHdpdGggYWxp YXMKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAqIEZST00KKwlKU09OX1RB QkxFKAorCQlqc29uYiAnbnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29u ICciZm9vIicgQVMgImIgYyIKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJ CSJpbnQiIGludCBQQVRIICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnCisJKSkganNvbl90 YWJsZV9mdW5jOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBG dW5jdGlvbiBTY2FuIG9uICJKU09OX1RBQkxFIiBqc29uX3RhYmxlX2Z1bmMKKyAgIE91dHB1dDog aWQsICJpbnQiLCB0ZXh0CisgICBUYWJsZSBGdW5jdGlvbiBDYWxsOiBKU09OX1RBQkxFKCdudWxs Jzo6anNvbmIsICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMCBQQVNTSU5HIDMgQVMgYSwgJyJm b28iJzo6anNvbmIgQVMgImIgYyIgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksICJpbnQiIGlu dGVnZXIgUEFUSCAnJCcsIHRleHQgdGV4dCBQQVRIICckJykgUExBTiAoanNvbl90YWJsZV9wYXRo XzApKQorKDMgcm93cykKKworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc7CitEUk9QIERPTUFJ TiBqc29uYl90ZXN0X2RvbWFpbjsKKy0tIEpTT05fVEFCTEU6IG9ubHkgb25lIEZPUiBPUkRJTkFM SVRZIGNvbHVtbnMgYWxsb3dlZAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywg JyQnIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9SRElOQUxJVFksIGEgaW50 IFBBVEggJyQuYScgRVJST1IgT04gRU1QVFkpKSBqdDsKK0VSUk9SOiAgY2Fubm90IHVzZSBtb3Jl IHRoYW4gb25lIEZPUiBPUkRJTkFMSVRZIGNvbHVtbgorTElORSAxOiAuLi5fVEFCTEUoanNvbmIg JzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksIGlkMiBGT1IgT1IuLi4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9S IE9SRElOQUxJVFksIGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVNUFRZKSkganQ7CisgaWQgfCBh IAorLS0tLSstLS0KKyAgMSB8IDEKKygxIHJvdykKKworLS0gSlNPTl9UQUJMRTogT04gRU1QVFkv T04gRVJST1IgYmVoYXZpb3IKK1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJy IicpKSB2YWxzKGpzKSwKKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnJCcpKSBqdDsKKyAganMgICB8IGEgCistLS0tLS0tKy0tLQorIDEgICAgIHwg MQorICJlcnIiIHwgIAorKDIgcm93cykKKworU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScp LCAoJyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUodmFs cy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJykgRVJST1IgT04gRVJST1Ip IGp0CisJCU9OIHRydWU7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGlu dGVnZXI6ICJlcnIiCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkg dmFscyhqcykKKwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwg JyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVSUk9SKSkganQKKwkJT04gdHJ1 ZTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQ QVRIICckLmEnIEVSUk9SIE9OIEVNUFRZKSkganQ7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQ QVRIICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0OworRVJS T1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBv YmplY3QKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChh IGludCBQQVRIICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0Owor RVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJyAgIERFRkFVTFQgMSBPTiBFTVBUWSBE RUZBVUxUIDIgT04gRVJST1IpKSBqdDsKKyBhIAorLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdz dHJpY3QgJC5hJyBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7Cisg YSAKKy0tLQorIDIKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICci YSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZ IERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworIGEgCistLS0KKyAxCisoMSByb3cpCisKKy0tIEpT T05fVEFCTEU6IEVYSVNUUyBQQVRIIHR5cGVzCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDQgRVhJU1RTIFBBVEggJyQuYScpKTsKKyBhIAor LS0tCisgMAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIics ICckJyBDT0xVTU5TIChhIGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIHNtYWxsaW50CitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSS4uLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50 OCBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4g dG8gYmlnaW50CitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSIn LCAnJCcgQ09MVU1OUyAoYSBpbnQ4IEVYSS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEn KSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byByZWFsCitMSU5FIDE6IC4u LkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBmbG9h dDQgRS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQn IENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpOworICBhICAKKy0tLS0tCisg ZmFsCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQn IENPTFVNTlMgKGEganNvbiBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2Fz dCB0eXBlIGJvb2xlYW4gdG8ganNvbgorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbiBFWEkuLi4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYSVNU UyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBqc29u YgorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENP TFVNTlMgKGEganNvbmIgRVguLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBKU09OX1RBQkxFOiBXUkFQUEVSL1FVT1RF UyBjbGF1c2VzIG9uIHNjYWxhciBjb2x1bW5zCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVT IE9OIFNDQUxBUiBTVFJJTkcpKTsKKyAgaXRlbSAgIAorLS0tLS0tLS0tCisgIndvcmxkIgorKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09M VU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsK KyBpdGVtICAKKy0tLS0tLS0KKyB3b3JsZAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09O IFBBVEggJyQnIEtFRVAgUVVPVEVTKSk7CisgIGl0ZW0gICAKKy0tLS0tLS0tLQorICJ3b3JsZCIK KygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQn IENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUykpOwor IGl0ZW0gIAorLS0tLS0tLQorIHdvcmxkCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04g UEFUSCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CisgIGl0ZW0gICAKKy0tLS0t LS0tLQorICJ3b3JsZCIKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIT1VUIFdSQVBQ RVIgT01JVCBRVU9URVMpKTsKKyBpdGVtICAKKy0tLS0tLS0KKyB3b3JsZAorKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRl bSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIFdJVEggV1JBUFBFUikpOworICAgaXRlbSAgICAK Ky0tLS0tLS0tLS0tCisgWyJ3b3JsZCJdCisoMSByb3cpCisKKy0tIEVycm9yOiBRVU9URVMgY2xh dXNlIG1lYW5pbmdsZXNzIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHByZXNlbnQKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9S TUFUIEpTT04gUEFUSCAnJCcgV0lUSCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CitFUlJPUjogIFNR TC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdS QVBQRVIgaXMgdXNlZAorTElORSAxOiAuLi5UICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29y bGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQn IFdJVEggV1JBUFBFUiBPTUlUIFFVT1RFUykpOworRVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVo YXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJ TkUgMTogLi4uVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5T IChpdGVtIHRleHQgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgorLS0gSlNPTl9UQUJMRTogbmVzdGVkIHBhdGhzIGFuZCBw bGFucworLS0gU2hvdWxkIGZhaWwgKEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRhaW4gZXhw bGljaXQgQVMgcGF0aAorLS0gc3BlY2lmaWNhdGlvbnMgaWYgZXhwbGljaXQgUExBTiBjbGF1c2Ug aXMgdXNlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgLS0g QVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCUNPTFVNTlMgKAorCQlmb28gaW50IFBBVEgg JyQnCisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpT T05fVEFCTEUgZXhwcmVzc2lvbgorTElORSAyOiAganNvbmIgJ1tdJywgJyQnIC0tIEFTIDxwYXRo IG5hbWU+IHJlcXVpcmVkIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIEpT T05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNh dGlvbiBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIHBhdGgxCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQ QVRIICckJyBDT0xVTU5TICggLS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCQkJZm9v IGludCBQQVRIICckJworCQkpCisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworRVJS T1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgZXhwcmVzc2lvbgorTElORSA0OiAgIE5FU1RFRCBQQVRI ICckJyBDT0xVTU5TICggLS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorICAgICAgICAg IF4KK0RFVEFJTDogIEpTT05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0 aG5hbWUgc3BlY2lmaWNhdGlvbiBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkCistLSBT aG91bGQgZmFpbCAoY29sdW1uIG5hbWVzIG11c3QgYmUgZGlzdGluY3QpCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYSBpbnQK KwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBjb2x1bW4gbmFtZTogYQor TElORSA0OiAgIGEgaW50CisgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAor CWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFU SCAnJCcgQVMgYQorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworRVJST1I6 ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBwYXRoIG5hbWU6IGEKK0xJTkUgNTogICBORVNURUQgUEFU SCAnJCcgQVMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlO RVNURUQgUEFUSCAnJCcgQVMgYgorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0 OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBwYXRoIG5hbWU6IGIKK0xJTkUgNTogICBO RVNURUQgUEFUSCAnJCcgQVMgYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnCisJCUNPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVN TlMgKAorCQkJCWMgaW50CisJCQkpCisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUg SlNPTl9UQUJMRSBwYXRoIG5hbWU6IGEKK0xJTkUgMTA6ICAgIE5FU1RFRCBQQVRIICckJyBBUyBh CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gSlNPTl9UQUJMRTogcGxhbiB2 YWxpZGF0aW9uCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsq XScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9U QUJMRSBwbGFuCitMSU5FIDEyOiAgUExBTiAocDEpCisgICAgICAgICAgICAgICAgXgorREVUQUlM OiAgUEFUSCBuYW1lIG1pc21hdGNoOiBleHBlY3RlZCBwMCBidXQgcDEgaXMgZ2l2ZW4uCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xV TU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAx MiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkp CisJKQorCVBMQU4gKHAwKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHNwZWNp ZmljYXRpb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisgICAg ICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxIHdhcyBub3Qg Zm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScg QVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJh eiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKK0VSUk9SOiAgaW52 YWxpZCBKU09OX1RBQkxFIHNwZWNpZmljYXRpb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcg QVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5l c3RlZCBwYXRoIHAxIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9v IGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJ CSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIFVOSU9OIHAx IFVOSU9OIHAxMSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVz ZQorTElORSAxMjogIFBMQU4gKHAwIFVOSU9OIHAxIFVOSU9OIHAxMSkKKyAgICAgICAgICAgICAg ICBeCitERVRBSUw6ICBFeHBlY3RlZCBJTk5FUiBvciBPVVRFUi4KK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENP TFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBi YXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAo cDAgT1VURVIgKHAxIENST1NTIHAxMykpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFC TEUgc3BlY2lmaWNhdGlvbgorTElORSA4OiAgIE5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5T ICgKKyAgICAgICAgICBeCitERVRBSUw6ICBQTEFOIGNsYXVzZSBmb3IgbmVzdGVkIHBhdGggcDIg d2FzIG5vdCBmb3VuZC4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xV TU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKHAxIENST1NTIHAyKSkK KykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDU6 ICAgIE5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKyAgICAgICAg ICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxMSB3YXMgbm90IGZv dW5kLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFT IHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIFVOSU9OIHAxMSkgQ1JPU1MgcDIp KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlCitMSU5FIDEy OiAgUExBTiAocDAgT1VURVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICBeCitERVRBSUw6ICBQTEFOIGNsYXVzZSBjb250YWlucyBzb21lIGV4dHJh IG9yIGR1cGxpY2F0ZSBzaWJsaW5nIG5vZGVzLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAor CWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZv byBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQor CQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAo KHAxIElOTkVSIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RB QkxFIHNwZWNpZmljYXRpb24KK0xJTkUgNjogICAgTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xV TU5TICggYmFyIGludCApCisgICAgICAgICAgIF4KK0RFVEFJTDogIFBMQU4gY2xhdXNlIGZvciBu ZXN0ZWQgcGF0aCBwMTIgd2FzIG5vdCBmb3VuZC4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIg KChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIHAyKSkKKykganQ7CitFUlJPUjogIGlu dmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDk6ICAgIE5FU1RFRCBQQVRIICck JyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorICAgICAgICAgICBeCitERVRBSUw6ICBQTEFO IGNsYXVzZSBmb3IgbmVzdGVkIHBhdGggcDIxIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIEFTIHAwCisJQ09MVU1O UyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIg Q09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQor CSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgKHAy IElOTkVSIHAyMSkpKQorKSBqdDsKKyBiYXIgfCBmb28gfCBiYXogCistLS0tLSstLS0tLSstLS0t LQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywg J3N0cmljdCAkWypdJyAtLSB3aXRob3V0IHJvb3QgcGF0aCBuYW1lCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEg Q09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAo IGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFO ICgocDEgSU5ORVIgKHAxMiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkKKykganQ7 CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBleHByZXNzaW9uCitMSU5FIDI6ICBqc29uYiAn bnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290IHBhdGggbmFtZQorICAgICAgICAg ICAgICAgICAgICAgICBeCitERVRBSUw6ICBKU09OX1RBQkxFIHBhdGggbXVzdCBjb250YWluIGV4 cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2Ug aXMgdXNlZAorLS0gSlNPTl9UQUJMRTogcGxhbiBleGVjdXRpb24KK0NSRUFURSBURU1QIFRBQkxF IGpzb25iX3RhYmxlX3Rlc3QgKGpzIGpzb25iKTsKK0lOU0VSVCBJTlRPIGpzb25iX3RhYmxlX3Rl c3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6IFtdLCAiYyI6IFtdfSwKKwkJeyJh IjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51bGwsIDIwXX0sCisJCXsiYSI6ICAz LCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAiNCIsICJiIjogWzEsIDJdLCAiYyI6 IDEyM30KKwkgXScKKyk7CistLSB1bnNwZWNpZmllZCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxl Y3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJ CWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFs aXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcg KSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQg cGF0aCAnJCcgKQorCQkpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0r LS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAg IAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAor IDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQg fCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisKKy0tIGRlZmF1bHQg cGxhbiAob3V0ZXIsIHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQg KG91dGVyLCB1bmlvbikKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSst LS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAg CisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisg MiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8 ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93 cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJ anQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQu anMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwK KwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGgg JyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwg YSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAg MiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8 ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEg fCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAg IAorKDExIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorCSkg anQ7CisgbiB8IGEgIHwgYyAgfCBiIAorLS0tKy0tLS0rLS0tLSstLS0KKyAxIHwgIDEgfCAgICB8 ICAKKyAyIHwgIDIgfCAxMCB8ICAKKyAyIHwgIDIgfCAgICB8ICAKKyAyIHwgIDIgfCAyMCB8ICAK KyAyIHwgIDIgfCAgICB8IDEKKyAyIHwgIDIgfCAgICB8IDIKKyAyIHwgIDIgfCAgICB8IDMKKyAz IHwgIDMgfCAgICB8IDEKKyAzIHwgIDMgfCAgICB8IDIKKyA0IHwgLTEgfCAgICB8IDEKKyA0IHwg LTEgfCAgICB8IDIKKygxMSByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKGlubmVyLCB1bmlvbikK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChpbm5lcikKKwkpIGp0OworIG4g fCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8 ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAy IHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwg MyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8 ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBp bm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVy IChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0r LS0tLQorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAg IAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAor IDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQg fCAtMSB8IDIgfCAgIAorKDEwIHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIGNyb3Nz KQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFi bGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Ig b3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHks CisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBh dGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAo IGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGNyb3NzLCBpbm5lcikKKwkp IGp0OworIG4gfCBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0rLS0tLQorIDIgfCAyIHwgMSB8IDEw CisgMiB8IDIgfCAxIHwgICAKKyAyIHwgMiB8IDEgfCAyMAorIDIgfCAyIHwgMiB8IDEwCisgMiB8 IDIgfCAyIHwgICAKKyAyIHwgMiB8IDIgfCAyMAorIDIgfCAyIHwgMyB8IDEwCisgMiB8IDIgfCAz IHwgICAKKyAyIHwgMiB8IDMgfCAyMAorKDkgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBp bm5lciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVy IChwYiBjcm9zcyBwYykpCisJKSBqdDsKKyBuIHwgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tKy0t LS0KKyAyIHwgMiB8IDEgfCAxMAorIDIgfCAyIHwgMSB8ICAgCisgMiB8IDIgfCAxIHwgMjAKKyAy IHwgMiB8IDIgfCAxMAorIDIgfCAyIHwgMiB8ICAgCisgMiB8IDIgfCAyIHwgMjAKKyAyIHwgMiB8 IDMgfCAxMAorIDIgfCAyIHwgMyB8ICAgCisgMiB8IDIgfCAzIHwgMjAKKyg5IHJvd3MpCisKKy0t IGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25i X3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBh cyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xh eCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsq XScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3Ry aWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFu IGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSst LS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisgMiB8ICAy IHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwg MiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8 ICAgCisgMiB8ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAg CisoMTIgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQor c2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUg KAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3Jk aW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGgg JyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMg aW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiBjcm9zcyBwYykpCisJKSBq dDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAg IAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDEgfCAyMAor IDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDIgfCAyMAorIDIg fCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8IDMgfCAyMAorIDMgfCAg MyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAgIAorKDEyIHJvd3MpCisKK3NlbGVjdAorCWp0Lios IGIxICsgMTAwIGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjog IDEsICAiYiI6IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJd fSwKKwkJCXsiYSI6ICAyLCAgImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJ eyJ4IjogIjMiLCAiYiI6IFsxMSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlcnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICgKKwkJCQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVz dGVkIHBhdGggJ3N0cmljdCAkWypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRo ICckJworCQkJCSkKKwkJCSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMg Y29sdW1ucyAoCisJCQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcK KwkJCQkpCisJCQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFu KHAgb3V0ZXIgKChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0Owor IG4gfCBhICB8ICAgICAgYiAgICAgICB8IGIxICB8ICBjICAgfCBjMSB8ICBiICAKKy0tLSstLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tKy0tLS0tCisgMSB8ICAxIHwgWzEsIDEw XSAgICAgIHwgICAxIHwgMSAgICB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwg ICAxIHwgbnVsbCB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgICAxIHwgMiAg ICB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgMSAgICB8ICAgIHwg MTEwCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgbnVsbCB8ICAgIHwgMTEwCisgMSB8 ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgMiAgICB8ICAgIHwgMTEwCisgMSB8ICAxIHwgWzJd ICAgICAgICAgIHwgICAyIHwgMSAgICB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzJdICAgICAgICAg IHwgICAyIHwgbnVsbCB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzJdICAgICAgICAgIHwgICAyIHwg MiAgICB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgMSAgICB8ICAg IHwgMTAzCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgbnVsbCB8ICAgIHwgMTAzCisg MSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgMiAgICB8ICAgIHwgMTAzCisgMSB8ICAxIHwg WzMsIDMwLCAzMDBdIHwgIDMwIHwgMSAgICB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAz MDBdIHwgIDMwIHwgbnVsbCB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgIDMw IHwgMiAgICB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgMSAgICB8 ICAgIHwgNDAwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgbnVsbCB8ICAgIHwgNDAw CisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgMiAgICB8ICAgIHwgNDAwCisgMiB8ICAy IHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgIHwgICAgCisgMyB8IC0xIHwgICAgICAg ICAgICAgIHwgICAgIHwgICAgICB8ICAgIHwgICAgCisoMjAgcm93cykKKworLS0gU2hvdWxkIHN1 Y2NlZWQgKEpTT04gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gcm9vdCBhbmQgbmVzdGVkIHBhdGhz KQorU0VMRUNUICoKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNCkgeCwKKwlnZW5lcmF0ZV9z ZXJpZXMoMSwgMykgeSwKKwlKU09OX1RBQkxFKGpzb25iCisJCSdbWzEsMiwzXSxbMiwzLDQsNV0s WzMsNCw1LDZdXScsCisJCSdzdHJpY3QgJFsqXSA/IChAWypdIDwgJHgpJworCQlQQVNTSU5HIHgg QVMgeCwgeSBBUyB5CisJCUNPTFVNTlMgKAorCQkJeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQn LAorCQkJTkVTVEVEIFBBVEggJ3N0cmljdCAkWypdID8gKEAgPj0gJHkpJworCQkJQ09MVU1OUyAo CisJCQkJeiBpbnQgUEFUSCAnJCcKKwkJCSkKKwkJKQorCSkganQ7CisgeCB8IHkgfCAgICAgIHkg ICAgICAgfCB6IAorLS0tKy0tLSstLS0tLS0tLS0tLS0tLSstLS0KKyAyIHwgMSB8IFsxLCAyLCAz XSAgICB8IDEKKyAyIHwgMSB8IFsxLCAyLCAzXSAgICB8IDIKKyAyIHwgMSB8IFsxLCAyLCAzXSAg ICB8IDMKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8IDEKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8 IDIKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDIK KyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDQKKyAz IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMSB8IFsxLCAyLCAzXSAgICB8IDEKKyA0IHwg MSB8IFsxLCAyLCAzXSAgICB8IDIKKyA0IHwgMSB8IFsxLCAyLCAzXSAgICB8IDMKKyA0IHwgMSB8 IFsyLCAzLCA0LCA1XSB8IDIKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMSB8IFsy LCAzLCA0LCA1XSB8IDQKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMSB8IFszLCA0 LCA1LCA2XSB8IDMKKyA0IHwgMSB8IFszLCA0LCA1LCA2XSB8IDQKKyA0IHwgMSB8IFszLCA0LCA1 LCA2XSB8IDUKKyA0IHwgMSB8IFszLCA0LCA1LCA2XSB8IDYKKyAyIHwgMiB8IFsxLCAyLCAzXSAg ICB8IDIKKyAyIHwgMiB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMiB8IFsxLCAyLCAzXSAgICB8 IDIKKyAzIHwgMiB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDIK KyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDQKKyAz IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMiB8IFsxLCAyLCAzXSAgICB8IDIKKyA0IHwg MiB8IFsxLCAyLCAzXSAgICB8IDMKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDIKKyA0IHwgMiB8 IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDQKKyA0IHwgMiB8IFsy LCAzLCA0LCA1XSB8IDUKKyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDMKKyA0IHwgMiB8IFszLCA0 LCA1LCA2XSB8IDQKKyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwgMiB8IFszLCA0LCA1 LCA2XSB8IDYKKyAyIHwgMyB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMyB8IFsxLCAyLCAzXSAg ICB8IDMKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8 IDQKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMyB8IFsxLCAyLCAzXSAgICB8IDMK KyA0IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDQKKyA0 IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8IDMKKyA0IHwg MyB8IFszLCA0LCA1LCA2XSB8IDQKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwgMyB8 IFszLCA0LCA1LCA2XSB8IDYKKyg1MiByb3dzKQorCistLSBTaG91bGQgZmFpbCAoSlNPTiBhcmd1 bWVudHMgYXJlIG5vdCBwYXNzZWQgdG8gY29sdW1uIHBhdGhzKQorU0VMRUNUICoKK0ZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnWzEsMiwzXScsCisJJyRbKl0gPyAoQCA8ICR4KScKKwkJUEFTU0lO RyAxMCBBUyB4CisJCUNPTFVNTlMgKHkgdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckID8gKEAgPCAk eCknKQorCSkganQ7CitFUlJPUjogIGNvdWxkIG5vdCBmaW5kIGpzb25wYXRoIHZhcmlhYmxlICJ4 IgorLS0gU2hvdWxkIGZhaWwgKG5vdCBzdXBwb3J0ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBDT0xVTU5TIChmb28gaW50 KSk7CitFUlJPUjogIG9ubHkgc3RyaW5nIGNvbnN0YW50cyBhcmUgc3VwcG9ydGVkIGluIEpTT05f VEFCTEUgcGF0aCBzcGVjaWZpY2F0aW9uCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJy4uLgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQppbmRleCA5MTBmNmZlM2M5Li5kOGUyNWJiZDJlIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKQEAgLTEwMyw3ICsxMDMsNyBAQCB0ZXN0OiBzZWxlY3Rfdmlld3MgcG9y dGFsc19wMiBmb3JlaWduX2tleSBjbHVzdGVyIGRlcGVuZGVuY3kgZ3VjIGJpdG1hcG9wcyBjb21i bwogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMgKEpTT04g cmVsYXRlZCkKICMgLS0tLS0tLS0tLQotdGVzdDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpz b25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9x dWVyeWZ1bmNzCit0ZXN0OiBqc29uIGpzb25iIGpzb25fZW5jb2RpbmcganNvbnBhdGgganNvbnBh dGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNvbiBzcWxqc29uX3F1ZXJ5ZnVuY3Mgc3Fs anNvbl9qc29udGFibGUKIAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxs ZWwgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRh YmxlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40YzgxMDkzZDZlCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9qc29udGFibGUuc3FsCkBAIC0w LDAgKzEsNjg2IEBACistLSBKU09OX1RBQkxFCisKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxF IGNhbiBiZSB1c2VkIG9ubHkgaW4gRlJPTSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10n LCAnJCcpOworCistLSBTaG91bGQgZmFpbCAoanNvbiBhcmd1bWVudCBub3Qgc3VwcG9ydGVkKQor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKE5VTEwgRk9STUFUIEpTT04sICckJyBDT0xVTU5TIChm b28gdGV4dCkpOworCistLSBTaG91bGQgZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShOVUxMLCAnJCcgQ09MVU1OUyAoKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSAoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwg djIpOworCistLSBOVUxMID0+IGVtcHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo TlVMTDo6anNvbmIsICckJyBDT0xVTU5TIChmb28gaW50KSkgYmFyOworCistLQorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRI ICckJywgZm9vIGludCkpIGJhcjsKKworLS0gSlNPTl9UQUJMRTogYmFzaWMgZnVuY3Rpb25hbGl0 eQorQ1JFQVRFIERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbiBBUyB0ZXh0IENIRUNLICh2YWx1ZSA8 PiAnZm9vJyk7CitDUkVBVEUgVEVNUCBUQUJMRSBqc29uX3RhYmxlX3Rlc3QgKGpzKSBBUworCShW QUxVRVMKKwkJKCcxJyksCisJCSgnW10nKSwKKwkJKCd7fScpLAorCQkoJ1sxLCAxLjIzLCAiMiIs ICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwy XSIsICJcInN0clwiIl0nKQorCSk7CisKKy0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5z CitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgor CUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAor CQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIg dGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wi IGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21h aW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJ CWpiIGpzb25iIFBBVEggJyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKworLS0gImZvcm1hdHRl ZCIgY29sdW1ucworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9V VEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlD T0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpT T04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJ anN2IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1B VCBKU09OIFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlU IFFVT1RFUworCQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tIEVYSVNUUyBjb2x1bW5zCitTRUxF Q1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05f VEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQg Rk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJ CWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMzIGludCBFWElTVFMg UEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVY SVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9SCisJCSkKKwkpIGp0CisJT04g dHJ1ZTsKKworLS0gT3RoZXIgbWlzY2VsbGFub3VzIGNoZWNrcworU0VMRUNUICoKK0ZST00ganNv bl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxz LmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZ LAorCQkJYWFhIGludCwgLS0gImFhYSIgaGFzIGltcGxpY2l0IHBhdGggJyQuImFhYSInCisJCQlh YWExIGludCBQQVRIICckLmFhYScsCisJCQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpz b25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQg UVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJ CQlqYmEganNvbmJbXSBQQVRIICckJworCQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tIEpTT05f VEFCTEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworCitDUkVBVEUgVklFVyBqc29uYl90YWJsZV92 aWV3IEFTCitTRUxFQ1QgKiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4 ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVN TlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQki dGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJ ImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJ CSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICck JywKKwkJCWpiIGpzb25iIFBBVEggJyQnLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBB VEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZh cmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iICAgRk9STUFUIEpT T04gUEFUSCAnJCcsCisJCQlqc2JxIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVP VEVTLAorCQkJYWFhIGludCwgLS0gaW1wbGljaXQgcGF0aCAnJC4iYWFhIicsCisJCQlhYWExIGlu dCBQQVRIICckLmFhYScsCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJ CWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScgVFJVRSBPTiBFUlJPUiwKKwkJCWV4aXN0 czMgdGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCisJ CQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBF UiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFU SCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywK KworCQkJTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJ CQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAor CQkJCSksCisJCQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBD T0xVTU5TICgKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJ CQlhMjEgdGV4dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xVTU5T ICgKKwkJCQkJYTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOworCitcc3YganNvbmJfdGFi bGVfdmlldworCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNv bmJfdGFibGVfdmlldzsKKworLS0gSlNPTl9UQUJMRSgpIHdpdGggYWxpYXMKK0VYUExBSU4gKENP U1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAn bnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIg YyIKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCSJpbnQiIGludCBQQVRI ICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnCisJKSkganNvbl90YWJsZV9mdW5jOworCitE Uk9QIFZJRVcganNvbmJfdGFibGVfdmlldzsKK0RST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWlu OworCistLSBKU09OX1RBQkxFOiBvbmx5IG9uZSBGT1IgT1JESU5BTElUWSBjb2x1bW5zIGFsbG93 ZWQKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChpZCBG T1IgT1JESU5BTElUWSwgaWQyIEZPUiBPUkRJTkFMSVRZLCBhIGludCBQQVRIICckLmEnIEVSUk9S IE9OIEVNUFRZKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcg Q09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksIGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVNUFRZ KSkganQ7CisKKy0tIEpTT05fVEFCTEU6IE9OIEVNUFRZL09OIEVSUk9SIGJlaGF2aW9yCitTRUxF Q1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcyksCisJSlNPTl9U QUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnKSkganQ7CisK K1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlM RUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnJCcpIEVSUk9SIE9OIEVSUk9SKSBqdAorCQlPTiB0cnVlOworCitTRUxFQ1Qg KgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVGVCBPVVRF UiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBB VEggJyQnIEVSUk9SIE9OIEVSUk9SKSkganQKKwkJT04gdHJ1ZTsKKworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQuYScgRVJST1Ig T04gRU1QVFkpKSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBD T0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04g RVJST1IpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikg anQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMg KGEgaW50IFBBVEggJyQnICAgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikp IGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBF UlJPUikpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09M VU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBP TiBFUlJPUikpIGp0OworCistLSBKU09OX1RBQkxFOiBFWElTVFMgUEFUSCB0eXBlcworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ0IEVYSVNU UyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICck JyBDT0xVTU5TIChhIGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50OCBFWElTVFMgUEFUSCAnJC5h JykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAo YSBmbG9hdDQgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpOwor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29u IEVYSVNUUyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJh IicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYSVNUUyBQQVRIICckLmEnKSk7CisKKy0tIEpTT05f VEFCTEU6IFdSQVBQRVIvUVVPVEVTIGNsYXVzZXMgb24gc2NhbGFyIGNvbHVtbnMKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQg UEFUSCAnJCcgS0VFUCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICck JyBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBB VEggJyQnIEtFRVAgUVVPVEVTKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3 b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQg UVVPVEVTKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcg Q09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIFdJVEhPVVQgV1JBUFBFUiBL RUVQIFFVT1RFUykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywg JyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIT1VUIFdSQVBQRVIgT01JVCBRVU9U RVMpKTsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENP TFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBXSVRIIFdSQVBQRVIpKTsKKwor LS0gRXJyb3I6IFFVT1RFUyBjbGF1c2UgbWVhbmluZ2xlc3Mgd2hlbiBXSVRIIFdSQVBQRVIgaXMg cHJlc2VudAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENP TFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBXSVRIIFdSQVBQRVIgS0VFUCBR VU9URVMpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBD T0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgV0lUSCBXUkFQUEVSIE9NSVQgUVVPVEVTKSk7CisK Ky0tIEpTT05fVEFCTEU6IG5lc3RlZCBwYXRocyBhbmQgcGxhbnMKKworLS0gU2hvdWxkIGZhaWwg KEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aAorLS0gc3Bl Y2lmaWNhdGlvbnMgaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCkKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgLS0gQVMgPHBhdGggbmFtZT4gcmVxdWly ZWQgaGVyZQorCUNPTFVNTlMgKAorCQlmb28gaW50IFBBVEggJyQnCisJKQorCVBMQU4gREVGQVVM VCAoVU5JT04pCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1td JywgJyQnIEFTIHBhdGgxCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBDT0xVTU5TICgg LS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCQkJZm9vIGludCBQQVRIICckJworCQkp CisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworCistLSBTaG91bGQgZmFpbCAoY29s dW1uIG5hbWVzIG11c3QgYmUgZGlzdGluY3QpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYSBpbnQKKwkpCispIGp0OworCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5T ICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYyBp bnQKKwkJKQorCSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAn W10nLCAnJCcKKwlDT0xVTU5TICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBiCisJ CUNPTFVNTlMgKAorCQkJYyBpbnQKKwkJKQorCSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQn IEFTIGEKKwkJQ09MVU1OUyAoCisJCQliIGludAorCQkpLAorCQlORVNURUQgUEFUSCAnJCcKKwkJ Q09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQkJQ09MVU1OUyAoCisJCQkJYyBp bnQKKwkJCSkKKwkJKQorCSkKKykganQ7CisKKy0tIEpTT05fVEFCTEU6IHBsYW4gdmFsaWRhdGlv bgorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMg cDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIg Q09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkK KwkJKQorCSkKKwlQTEFOIChwMSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDApCispIGp0 OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMg cDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBB UyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBp bnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKKworU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJ CU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1O UyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQ TEFOIChwMCBVTklPTiBwMSBVTklPTiBwMTEpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xV TU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFy IGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RF RCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAw IE9VVEVSIChwMSBDUk9TUyBwMTMpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiAocDEgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpz b25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBB UyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBp bnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkp LAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAx IFVOSU9OIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiAoKHAxIElOTkVSIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09M VU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJh ciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChw MCBPVVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgcDIpKQorKSBqdDsKKwor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJ3N0cmljdCAkWypdJyBB UyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6 IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAx MSkpIENST1NTIChwMiBJTk5FUiBwMjEpKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290IHBhdGgg bmFtZQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6 IGludCApCisJCSkKKwkpCisJUExBTiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1Mg KHAyIElOTkVSIHAyMSkpCispIGp0OworCistLSBKU09OX1RBQkxFOiBwbGFuIGV4ZWN1dGlvbgor CitDUkVBVEUgVEVNUCBUQUJMRSBqc29uYl90YWJsZV90ZXN0IChqcyBqc29uYik7CisKK0lOU0VS VCBJTlRPIGpzb25iX3RhYmxlX3Rlc3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6 IFtdLCAiYyI6IFtdfSwKKwkJeyJhIjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51 bGwsIDIwXX0sCisJCXsiYSI6ICAzLCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAi NCIsICJiIjogWzEsIDJdLCAiYyI6IDEyM30KKwkgXScKKyk7CisKKy0tIHVuc3BlY2lmaWVkIHBs YW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0 IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1 bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZh dWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNv bHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0n IGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkpIGp0OworCistLSBkZWZh dWx0IHBsYW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJs ZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAor CQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5h JyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFz IHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAk LmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZh dWx0IChvdXRlciwgdW5pb24pCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAo cGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0 LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMg KAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQg LTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1u cyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMg cGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1 bmlvbiBwYykpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGMgdW5pb24g cGIpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYyB1bmlvbiBwYikp CisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwgdW5pb24pCitzZWxlY3QKKwlqdC4q Citmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywn c3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJ YSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRo ICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcg KQorCQkpCisJCXBsYW4gZGVmYXVsdCAoaW5uZXIpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxh biAocCBpbm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3Rh YmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBw CisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAk LmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScg YXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChw IGlubmVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwg Y3Jvc3MpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNv bl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQlu IGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBl bXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBp bnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1 bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAoY3Jvc3MsIGlubmVy KQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBjKSkKK3Nl bGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgK KwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGlu YWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICck JyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGlu dCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQorCSkganQ7 CisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQor CWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAk WypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBh dGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQor CQlwbGFuIGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworCistLSBzcGVjaWZpYyBwbGFu IChwIG91dGVyIChwYiBjcm9zcyBwYykpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFi bGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAg b3V0ZXIgKHBiIGNyb3NzIHBjKSkKKwkpIGp0OworCisKK3NlbGVjdAorCWp0LiosIGIxICsgMTAw IGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjogIDEsICAiYiI6 IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsi YSI6ICAyLCAgImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4IjogIjMi LCAiYiI6IFsxMSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJY29sdW1u cyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVs dCAtMSBvbiBlcnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1 bW5zICgKKwkJCQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkWypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRoICckJworCQkJ CSkKKwkJCSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAo CisJCQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJp Y3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJ CQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAgb3V0ZXIg KChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0OworCistLSBTaG91 bGQgc3VjY2VlZCAoSlNPTiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byByb290IGFuZCBuZXN0ZWQg cGF0aHMpCitTRUxFQ1QgKgorRlJPTQorCWdlbmVyYXRlX3NlcmllcygxLCA0KSB4LAorCWdlbmVy YXRlX3NlcmllcygxLCAzKSB5LAorCUpTT05fVEFCTEUoanNvbmIKKwkJJ1tbMSwyLDNdLFsyLDMs NCw1XSxbMyw0LDUsNl1dJywKKwkJJ3N0cmljdCAkWypdID8gKEBbKl0gPCAkeCknCisJCVBBU1NJ TkcgeCBBUyB4LCB5IEFTIHkKKwkJQ09MVU1OUyAoCisJCQl5IHRleHQgRk9STUFUIEpTT04gUEFU SCAnJCcsCisJCQlORVNURUQgUEFUSCAnc3RyaWN0ICRbKl0gPyAoQCA+PSAkeSknCisJCQlDT0xV TU5TICgKKwkJCQl6IGludCBQQVRIICckJworCQkJKQorCQkpCisJKSBqdDsKKworLS0gU2hvdWxk IGZhaWwgKEpTT04gYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkIHRvIGNvbHVtbiBwYXRocykKK1NF TEVDVCAqCitGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1sxLDIsM10nLAorCSckWypdID8gKEAg PCAkeCknCisJCVBBU1NJTkcgMTAgQVMgeAorCQlDT0xVTU5TICh5IHRleHQgRk9STUFUIEpTT04g UEFUSCAnJCA/IChAIDwgJHgpJykKKwkpIGp0OworCistLSBTaG91bGQgZmFpbCAobm90IHN1cHBv cnRlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAneyJhIjogMTIzfScsICckJyB8 fCAnLicgfHwgJ2EnIENPTFVNTlMgKGZvbyBpbnQpKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggYTZiZTZmNzg3NC4uZDU2MmYyMTU1ZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTEzMjMsNiArMTMyMyw3IEBAIEpzb25QYXRoTXV0YWJsZUNvbnRleHQKIEpzb25QYXRoUGFy c2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNrCitK c29uUGF0aFNwZWMKIEpzb25QYXRoU3RyaW5nCiBKc29uUGF0aFZhcmlhYmxlCiBKc29uUGF0aFZh cmlhYmxlRXZhbENvbnRleHQKQEAgLTEzMzIsNiArMTMzMywyMCBAQCBKc29uUmV0dXJuaW5nCiBK c29uU2NhbGFyRXhwcgogSnNvblNlbUFjdGlvbgogSnNvblNlcmlhbGl6ZUV4cHIKK0pzb25UYWJs ZQorSnNvblRhYmxlQ29sdW1uCitKc29uVGFibGVDb2x1bW5UeXBlCitKc29uVGFibGVDb250ZXh0 CitKc29uVGFibGVQYXJzZUNvbnRleHQKK0pzb25UYWJsZUpvaW5TdGF0ZQorSnNvblRhYmxlUGxh bgorSnNvblRhYmxlUGxhblNwZWMKK0pzb25UYWJsZVBsYW5TdGF0ZQorSnNvblRhYmxlUGxhblN0 YXRlVHlwZQorSnNvblRhYmxlUGxhbkpvaW5UeXBlCitKc29uVGFibGVQbGFuVHlwZQorSnNvblRh YmxlU2NhblN0YXRlCitKc29uVGFibGVTaWJsaW5nCiBKc29uVG9rZW5UeXBlCiBKc29uVHJhbnNm b3JtU3RyaW5nVmFsdWVzQWN0aW9uCiBKc29uVHlwZUNhdGVnb3J5CkBAIC0yNzk3LDYgKzI4MTIs NyBAQCBUYWJsZUZ1bmMKIFRhYmxlRnVuY1JvdXRpbmUKIFRhYmxlRnVuY1NjYW4KIFRhYmxlRnVu Y1NjYW5TdGF0ZQorVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCiBUYWJsZUxpa2VDbGF1c2UKIFRh YmxlU2FtcGxlQ2xhdXNlCi0tIAoyLjM1LjMKCg== --0000000000004450f6060fc18be9 Content-Type: application/octet-stream; name="v39-0001-Add-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v39-0001-Add-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrszs7132 RnJvbSA0MTAyZmNjOTNhMzM2N2U5YjgyOWEwNDRkYmRiMTBmYTUxOGY2YmU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTc6NTc6MjAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz OSAxLzNdIEFkZCBTUUwvSlNPTiBxdWVyeSBmdW5jdGlvbnMKTUlNRS1WZXJzaW9uOiAxLjAKQ29u dGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5j b2Rpbmc6IDhiaXQKClRoaXMgaW50cm9kdWNlcyB0aGUgZm9sbG93aW5nIFNRTC9KU09OIGZ1bmN0 aW9ucyBmb3IgcXVlcnlpbmcgSlNPTgpkYXRhIHVzaW5nIGpzb25wYXRoIGV4cHJlc3Npb25zOgoK SlNPTl9FWElTVFMoKQpKU09OX1FVRVJZKCkKSlNPTl9WQUxVRSgpCgpKU09OX0VYSVNUUygpIHRl c3RzIGlmIHRoZSBqc29ucGF0aCBleHByZXNzaW9uIGFwcGxpZWQgdG8gdGhlIGpzb25iCnZhbHVl IHlpZWxkcyBhbnkgdmFsdWVzLgoKSlNPTl9WQUxVRSgpIG11c3QgcmV0dXJuIGEgc2luZ2xlIHZh bHVlLCBhbmQgYW4gZXJyb3Igb2NjdXJzIGlmIGl0CnRyaWVzIHRvIHJldHVybiBtdWx0aXBsZSB2 YWx1ZXMuCgpKU09OX1FVRVJZKCkgbXVzdCByZXR1cm4gYSBqc29uIG9iamVjdCBvciBhcnJheSwg YW5kIHRoZXJlIGFyZQp2YXJpb3VzIFdSQVBQRVIgb3B0aW9ucyBmb3IgaGFuZGxpbmcgc2NhbGFy IG9yIG11bHRpLXZhbHVlIHJlc3VsdHMuCkJvdGggdGhlc2UgZnVuY3Rpb25zIGhhdmUgb3B0aW9u cyBmb3IgaGFuZGxpbmcgRU1QVFkgYW5kIEVSUk9SCmNvbmRpdGlvbnMuCgpBbGwgb2YgdGhlc2Ug ZnVuY3Rpb25zIG9ubHkgb3BlcmF0ZSBvbiBqc29uYi4gVGhlIHdvcmthcm91bmQgZm9yIG5vdwpp cyB0byBjYXN0IHRoZSBhcmd1bWVudCB0byBqc29uYi4KCkF1dGhvcjogTmlraXRhIEdsdWtob3Yg PG4uZ2x1aG92QHBvc3RncmVzcHJvLnJ1PgpBdXRob3I6IFRlb2RvciBTaWdhZXYgPHRlb2RvckBz aWdhZXYucnU+CkF1dGhvcjogT2xlZyBCYXJ0dW5vdiA8b2JhcnR1bm92QGdtYWlsLmNvbT4KQXV0 aG9yOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFla29yb3Rrb3ZAZ21haWwuY29tPgpBdXRob3I6IEFu ZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PgpBdXRob3I6IEFtaXQgTGFuZ290ZSA8 YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+CkF1dGhvcjogUGV0ZXIgRWlzZW50cmF1dCA8cGV0ZXJA ZWlzZW50cmF1dC5vcmc+CkF1dGhvcjogSmlhbiBIZSA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwu Y29tPgoKUmV2aWV3ZXJzIGhhdmUgaW5jbHVkZWQgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpIEFu ZHJlcyBGcmV1bmQsIEFsZXhhbmRlcgpLb3JvdGtvdiwgUGF2ZWwgU3RlaHVsZSwgQW5kcmV3IEFs c3VwLCBFcmlrIFJpamtlcnMsIFppaG9uZyBZdSwKSGltYW5zaHUgVXBhZGh5YXlhLCBEYW5pZWwg R3VzdGFmc3NvbiwgSnVzdGluIFByeXpieSwgw4FsdmFybyBIZXJyZXJhLApKaWFuIEhlLCBBbnRv biBBLiBNZWxuaWtvdiwgTmlraXRhIE1hbGFraG92LCBQZXRlciBFaXNlbnRyYXV0CgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NkMGJiOTM1LTAxNTgtNzhhNy0wOGI1LTkwNDg4NmRl YWM0YkBwb3N0Z3Jlc3Byby5ydQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMjIw NjE2MjMzMTMwLnJwYXJpdmFmaXB0NmRvajNAYWxhcDMuYW5hcmF6ZWwuZGUKRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9hYmQ5YjgzYi1hYTY2LWYyMzAtM2Q2ZC03MzQ4MTdmMDk5NWQl NDBwb3N0Z3Jlc3FsLm9yZwpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FI Uk9wZjllNjQ0RDhCUnFZdmFBUG1nQlpWdXAteEtNRFBrLW5kNEVwZ3pId0BtYWlsLmdtYWlsLmNv bQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhUZGZiMW5XPU9qb3lf dFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMv c2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNzMgKysrCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgICAgICAgICAgfCAgIDEyICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgICAgICAgICAgfCAgMzQ5ICsrKysrCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgICAgICAgfCAgMzc2ICsrKysrLQog c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgICAgICAgICAgIHwgIDE0NCArKwog c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jICAgICAgICAgIHwgICAgMyArCiBz cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgICAgICAgICAgfCAgIDE4ICsKIHNy Yy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAgICAgICAgICAgICAgICB8ICAyNDggKysrLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgICAgMyArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgICAgIHwgICAyMCArCiBz cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgMTg4ICsrLQog c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICAgICAgICAgIHwgIDYzMSArKysr KysrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyAgICAgICAgICAgICB8ICAg MTUgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgICAgICAgIHwgICA0 NCArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICAgICAgICAgICAgfCAgIDMx ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgICAgICAgICAgICB8ICAgNjIg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jICAgICAgICAgICAgICB8ICAyNTkg KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyAgICAgICAgIHwgIDMy MiArKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgIHwg IDEzNiArKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICAgICAgICAgIHwg ICAyNCArLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwg ICA4NyArKwogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAgfCAg IDQ3ICsKIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAx ODAgKysrCiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgICAgICAgICAgfCAg IDExICsKIHNyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaCAgICAgICAgICAgICAgICB8ICAg IDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCAgICAgICAgICAgICAgICAgICAgIHwgICAg MSArCiBzcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaCAgICAgICAgICAgICAgICAgfCAgICA3 ICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAgICAgICAgICAgICAgICB8ICAgMjQg Kwogc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJhaWxlciAgICAgIHwgICAyOCAr CiAuLi4vcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1ZXJ5ZnVuY3Mub3V0ICAgfCAxMTk3ICsr KysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Mu c3FsICAgfCAgMzkyICsrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICAgICAgIHwgICAxOCArCiAzNCBmaWxlcyBjaGFuZ2VkLCA1MDE2IGluc2VydGlvbnMoKyks IDM5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3FsanNvbl9xdWVyeWZ1bmNzLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fcXVlcnlmdW5jcy5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA5NjhlOGQ1OWZi Li42ODAxYmM4MDQ1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTE1NDYxLDYgKzE1NDYxLDExIEBAIHRhYmxlMi1tYXBw aW5nCiAgICAgICB0aGUgU1FML0pTT04gcGF0aCBsYW5ndWFnZQogICAgICA8L3BhcmE+CiAgICAg PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgdGhlIFNRTC9K U09OIHF1ZXJ5IGZ1bmN0aW9ucworICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KICAgIDwv aXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKQEAgLTE4MjE1LDYgKzE4MjIwLDE3NCBAQCAkLiog PyAoQCBsaWtlX3JlZ2V4ICJeXFxkKyQiKQogICAgIDwvcGFyYT4KICAgIDwvc2VjdDM+CiAgIDwv c2VjdDI+CisKKyAgIDxzZWN0MiBpZD0ic3FsanNvbi1xdWVyeS1mdW5jdGlvbnMiPgorICAgIDx0 aXRsZT5TUUwvSlNPTiBRdWVyeSBGdW5jdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKyAgIFNRTC9K U09OIGZ1bmN0aW9ucyA8bGl0ZXJhbD5KU09OX0VYSVNUUygpPC9saXRlcmFsPiwKKyAgIDxsaXRl cmFsPkpTT05fUVVFUlkoKTwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5KU09OX1ZBTFVFKCk8L2xp dGVyYWw+CisgICBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24t cXVlcnlpbmciLz4gY2FuIGJlIHVzZWQKKyAgIHRvIHF1ZXJ5IEpTT04gZG9jdW1lbnQuICBFYWNo IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcHBseSBhCisgICA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNz aW9uPC9yZXBsYWNlYWJsZT4gKHRoZSBxdWVyeSkgdG8gYQorICAgPHJlcGxhY2VhYmxlPmNvbnRl eHRfaXRlbTwvcmVwbGFjZWFibGU+ICh0aGUgZG9jdW1lbnQpOyBzZWVuCisgICA8eHJlZiBsaW5r ZW5kPSJmdW5jdGlvbnMtc3FsanNvbi1wYXRoIi8+IGZvciBtb3JlIGRldGFpbHMgb24gd2hhdAor ICAgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IGNhbiBjb250YWlu LgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBTUUwvSlNPTiBxdWVyeSBm dW5jdGlvbnMgY3VycmVudGx5IG9ubHkgYWNjZXB0IHZhbHVlcyBvZiB0aGUKKyAgICA8dHlwZT5q c29uYjwvdHlwZT4gdHlwZSwgYmVjYXVzZSB0aGUgU1FML0pTT04gcGF0aCBsYW5ndWFnZSBvbmx5 CisgICAgc3VwcG9ydHMgdGhvc2UsIHNvIGl0IG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBjYXN0IHRo ZQorICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiBhcmd1bWVudCBv ZiB0aGVzZSBmdW5jdGlvbnMgdG8KKyAgICA8dHlwZT5qc29uYjwvdHlwZT4uCisgICA8L3BhcmE+ CisgIDwvbm90ZT4KKworICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy1zcWxqc29uLXF1ZXJ5aW5nIj4K KyAgIDx0aXRsZT5TUUwvSlNPTiBRdWVyeSBGdW5jdGlvbnM8L3RpdGxlPgorICAgPHRncm91cCBj b2xzPSIxIj4KKyAgICA8dGhlYWQ+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVu Y190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5j dGlvbiBzaWduYXR1cmUKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIERl c2NyaXB0aW9uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBFeGFtcGxl KHMpCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90aGVhZD4KKyAg ICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmlt YXJ5Pmpzb25fZXhpc3RzPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+ anNvbl9leGlzdHM8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0 ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFi bGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFibGU+ dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZh cm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25h bD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IHwgPGxpdGVy YWw+RkFMU0U8L2xpdGVyYWw+IHw8bGl0ZXJhbD4gVU5LTk9XTjwvbGl0ZXJhbD4gfCA8bGl0ZXJh bD5FUlJPUjwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25h bD4pCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHRydWUg aWYgdGhlIFNRTC9KU09OIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxl PgorICAgICAgICBhcHBsaWVkIHRvIHRoZSA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBs YWNlYWJsZT4gdXNpbmcgdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFi bGU+cyB5aWVsZHMgYW55IGl0ZW1zLgorICAgICAgICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xp dGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIGlmCisgICAgICAgIGFuIGVycm9y IG9jY3VyczsgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIHRoZSA8dHlwZT5ib29sZWFuPC90eXBl PgorICAgICAgICA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gdmFsdWUuCisgICAgICAgIE5vdGUg dGhhdCBpZiB0aGUgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+Cisg ICAgICAgIGlzIDxsaXRlcmFsPnN0cmljdDwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPk9OIEVSUk9S PC9saXRlcmFsPiBiZWhhdmlvcgorICAgICAgICBpcyA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJh bD4sIGFuIGVycm9yIGlzIGdlbmVyYXRlZCBpZiBpdCB5aWVsZHMgbm8KKyAgICAgICAgaXRlbXMu CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX2V4 aXN0cyhqc29uYiAneyJrZXkxIjogWzEsMiwzXX0nLCAnc3RyaWN0ICQua2V5MVsqXSA/IChAID4g MiknKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPnQ8L3JldHVybnZhbHVlPgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9leGlzdHMo anNvbmIgJ3siYSI6IFsxLDIsM119JywgJ2xheCAkLmFbNV0nIEVSUk9SIE9OIEVSUk9SKTwvbGl0 ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPmY8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl9leGlzdHMoanNvbmIgJ3si YSI6IFsxLDIsM119JywgJ3N0cmljdCAkLmFbNV0nIEVSUk9SIE9OIEVSUk9SKTwvbGl0ZXJhbD4K KyAgICAgICAgPHJldHVybnZhbHVlPkVSUk9SOiAganNvbnBhdGggYXJyYXkgc3Vic2NyaXB0IGlz IG91dCBvZiBib3VuZHM8L3JldHVybnZhbHVlPgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAg IDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnki PjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT48cHJpbWFy eT5qc29uX3F1ZXJ5PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNv bl9xdWVyeTwvZnVuY3Rpb24+ICgKKyAgICAgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwv cmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g PG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1 ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFt ZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPgor ICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gPHJlcGxhY2Vh YmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+Rk9STUFUIEpT T048L2xpdGVyYWw+IDxvcHRpb25hbD4gPGxpdGVyYWw+RU5DT0RJTkcgVVRGODwvbGl0ZXJhbD4g PC9vcHRpb25hbD4gPC9vcHRpb25hbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7 IDxsaXRlcmFsPldJVEhPVVQ8L2xpdGVyYWw+IHwgPGxpdGVyYWw+V0lUSDwvbGl0ZXJhbD4geyA8 bGl0ZXJhbD5DT05ESVRJT05BTDwvbGl0ZXJhbD4gfCA8b3B0aW9uYWw+PGxpdGVyYWw+VU5DT05E SVRJT05BTDwvbGl0ZXJhbD48L29wdGlvbmFsPiB9IH0gPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUlJB WTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4gPC9vcHRp b25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPktFRVA8L2xpdGVyYWw+IHwgPGxp dGVyYWw+T01JVDwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5RVU9URVM8L2xpdGVyYWw+IDxvcHRpb25h bD4gPGxpdGVyYWw+T04gU0NBTEFSIFNUUklORzwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gPC9vcHRp b25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxs aXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xpdGVyYWw+IHsgPG9wdGlv bmFsPiA8bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gfCA8bGl0ZXJhbD5PQkpF Q1Q8L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IDwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4g fCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVNUFRZPC9saXRlcmFsPiB7IDxv cHRpb25hbD4gPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IHwgPGxpdGVyYWw+ T0JKRUNUPC9saXRlcmFsPiB9IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxhY2Vh YmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFs PiA8L29wdGlvbmFsPikKKyAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0 dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+cGF0 aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gdG8gdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5j b250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxl PnZhbHVlPC9yZXBsYWNlYWJsZT5zLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJu IGEgSlNPTiBzdHJpbmcsIHNvIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24KKyAgICAgICAgcmV0dXJu cyBtdWx0aXBsZSBTUUwvSlNPTiBpdGVtcywgeW91IG11c3Qgd3JhcCB0aGUgcmVzdWx0IHVzaW5n IHRoZQorICAgICAgICA8bGl0ZXJhbD5XSVRIIFdSQVBQRVI8L2xpdGVyYWw+IGNsYXVzZS4gSWYg dGhlIHdyYXBwZXIgaXMKKyAgICAgICAgPGxpdGVyYWw+VU5DT05ESVRJT05BTDwvbGl0ZXJhbD4s IGFuIGFycmF5IHdyYXBwZXIgd2lsbCBhbHdheXMKKyAgICAgICAgYmUgYXBwbGllZCwgZXZlbiBp ZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYWxyZWFkeSBhIHNpbmdsZSBKU09OIG9iamVjdAorICAg ICAgICBvciBhbiBhcnJheSwgYnV0IGlmIGl0IGlzIDxsaXRlcmFsPkNPTkRJVElPTkFMPC9saXRl cmFsPiwgaXQgd2lsbCBub3QgYmUKKyAgICAgICAgYXBwbGllZCB0byBhIHNpbmdsZSBhcnJheSBv ciBvYmplY3QuIDxsaXRlcmFsPlVOQ09ORElUSU9OQUw8L2xpdGVyYWw+CisgICAgICAgIGlzIHRo ZSBkZWZhdWx0LiAgSWYgdGhlIHJlc3VsdCBpcyBhIHNjYWxhciBzdHJpbmcsIGJ5IGRlZmF1bHQg dGhlIHZhbHVlCisgICAgICAgIHJldHVybmVkIHdpbGwgaGF2ZSBzdXJyb3VuZGluZyBxdW90ZXMg bWFraW5nIGl0IGEgdmFsaWQgSlNPTiB2YWx1ZSwKKyAgICAgICAgd2hpY2ggY2FuIGJlIG1hZGUg ZXhwbGljaXQgYnkgc3BlY2lmeWluZyA8bGl0ZXJhbD5LRUVQIFFVT1RFUzwvbGl0ZXJhbD4uCisg ICAgICAgIENvbnZlcnNlbHksIHF1b3RlcyBjYW4gYmUgb21pdHRlZCBieSBzcGVjaWZ5aW5nIDxs aXRlcmFsPk9NSVQgUVVPVEVTPC9saXRlcmFsPi4KKyAgICAgICAgVGhlIDxsaXRlcmFsPlJFVFVS TklORzwvbGl0ZXJhbD4gY2xhdXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlCisgICAgICAg IDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiBvZiB0aGUgcmVzdWx0IHZhbHVl LiAgSXQgbXVzdAorICAgICAgICBiZSBhIHR5cGUgZm9yIHdoaWNoIHRoZXJlIGlzIGEgY2FzdCBm cm9tIDx0eXBlPnRleHQ8L3R5cGU+IHRvIHRoYXQgdHlwZS4KKyAgICAgICAgSWYgbm8gPGxpdGVy YWw+UkVUVVJOSU5HPC9saXRlcmFsPiBpcyBzcGNpZmllZCwgdGhlIHJldHVybmVkIHZhbHVlIHdp bGwKKyAgICAgICAgYmUgb2YgdHlwZSA8dHlwZT5qc29uYjwvdHlwZT4uCisgICAgICAgIFRoZSA8 bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNpZmllcyB0aGUgYmVoYXZpb3Ig aWYgdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxl PiB5aWVsZHMgbm8gdmFsdWUgYXQgYWxsOyB0aGUKKyAgICAgICAgZGVmYXVsdCB3aGVuIDxsaXRl cmFsPk9OIEVNUFRZPC9saXRlcmFsPiBpcyBub3Qgc3BlY2lmaWVkIGlzIHRvIHJldHVybiBhCisg ICAgICAgIG51bGwgdmFsdWUuICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IGNsYXVz ZSBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yCisgICAgICAgIGlmIGFuIGVycm9yIG9jY3VycyBhcyBh IHJlc3VsdCBvZiA8dHlwZT5qc29ucGF0aDwvdHlwZT4gZXZhbHVhdGlvbgorICAgICAgICAoaW5j bHVkaW5nIGNhc3QgdG8gdGhlIG91dHB1dCB0eXBlKSBvciBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBv ZgorICAgICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYmVoYXZpb3IgKHRoYXQgd2Fz IGNhdXNlZCBieSBlbXB0eSByZXN1bHQgb2YKKyAgICAgICAgPHR5cGU+anNvbnBhdGg8L3R5cGU+ IGV2YWx1YXRpb24pOyB0aGUgZGVmYXVsdCB3aGVuCisgICAgICAgIDxsaXRlcmFsPk9OIEVSUk9S PC9saXRlcmFsPiBpcyBub3Qgc3BlY2lmaWVkIGlzIHRvIHJldHVybiBhIG51bGwgdmFsdWUuCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3F1ZXJ5 KGpzb25iICdbMSxbMiwzXSxudWxsXScsICdsYXggJFsqXVsxXScgV0lUSCBDT05ESVRJT05BTCBX UkFQUEVSKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPlszXTwvcmV0dXJudmFsdWU+ CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUi PgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5Pmpzb25fdmFsdWU8L3ByaW1hcnk+PC9pbmRl eHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29uX3ZhbHVlPC9mdW5jdGlvbj4gKAorICAgICAg ICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5w YXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPgorICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFs PlBBU1NJTkc8L2xpdGVyYWw+IHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gPGxp dGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8 b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPjwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4g PGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBs YWNlYWJsZT4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9S PC9saXRlcmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+REVGQVVMVDwv bGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFs Pk9OIEVNUFRZPC9saXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxp dGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJh bD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IDwvb3B0aW9uYWw+KQorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5n IHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g dG8gdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1 c2luZyB0aGUKKyAgICAgICAgPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxl PnZhbHVlPC9yZXBsYWNlYWJsZT5zLiBUaGUKKyAgICAgICAgZXh0cmFjdGVkIHZhbHVlIG11c3Qg YmUgYSBzaW5nbGUgPGFjcm9ueW0+U1FML0pTT048L2Fjcm9ueW0+IHNjYWxhcgorICAgICAgICBp dGVtLiBGb3IgcmVzdWx0cyB0aGF0IGFyZSBvYmplY3RzIG9yIGFycmF5cywgdXNlIHRoZQorICAg ICAgICA8ZnVuY3Rpb24+anNvbl9xdWVyeTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGluc3RlYWQuCisg ICAgICAgIFRoZSA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+IGNsYXVzZSBjYW4gYmUgdXNl ZCB0byBzcGVjaWZ5IHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNl YWJsZT4gb2YgdGhlIHJlc3VsdCB2YWx1ZS4gIEl0IG11c3QKKyAgICAgICAgYmUgYSB0eXBlIGZv ciB3aGljaCB0aGVyZSBhcmUgY2FzdHMgZnJvbSBhbGwgcG9zc2libGUgSlNPTiBzY2FsYXIKKyAg ICAgICAgdmFsdWUgdHlwZXMgKDx0eXBlPnRleHQ8L3R5cGU+LCA8dHlwZT5ib29sZWFuPC90eXBl PiwgPHR5cGU+bnVtZXJpYzwvdHlwZT4sCisgICAgICAgIGFuZCB2YXJpb3VzIGRhdGV0aW1lIHR5 cGVzKSB0byB0aGF0IHR5cGUuICBJZiBubyA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+Cisg ICAgICAgIGlzIHNwY2lmaWVkLCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBvZiB0eXBlIDx0 eXBlPnRleHQ8L3R5cGU+LgorICAgICAgICBUaGUgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+ IGFuZCA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4KKyAgICAgICAgY2xhdXNlcyBoYXZlIHNp bWlsYXIgc2VtYW50aWNzIGFzIG1lbnRpb25lZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICAg ICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4gIE5vdGUgdGhhdCBzY2FsYXIgc3Ry aW5ncyByZXR1cm5lZAorICAgICAgICBieSA8ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+ IGFsd2F5cyBoYXZlIHRoZWlyIHF1b3RlcyByZW1vdmVkLAorICAgICAgICBlcXVpdmFsZW50IHRv IHdoYXQgb25lIHdvdWxkIGdldCB3aXRoIDxsaXRlcmFsPk9NSVQgUVVPVEVTPC9saXRlcmFsPgor ICAgICAgICB3aGVuIHVzaW5nIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3ZhbHVlKGpz b25iICciMTIzLjQ1IicsICckJyBSRVRVUk5JTkcgZmxvYXQpPC9saXRlcmFsPgorICAgICAgICA8 cmV0dXJudmFsdWU+MTIzLjQ1PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fdmFsdWUoanNvbmIgJyIwMzowNCAyMDE1LTAy LTAxIicsICckLmRhdGV0aW1lKCJISDI0Ok1JJm5ic3A7WVlZWS1NTS1ERCIpJyBSRVRVUk5JTkcg ZGF0ZSk8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT4yMDE1LTAyLTAxPC9yZXR1cm52 YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpz b25fdmFsdWUoanNvbmIgJ1sxLDJdJywgJ3N0cmljdCAkWypdJyBERUZBVUxUIDkgT04gRVJST1Ip PC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+OTwvcmV0dXJudmFsdWU+CisgICAgICA8 L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgor ICA8L3RhYmxlPgorICA8L3NlY3QyPgogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImZ1bmN0aW9u cy1zZXF1ZW5jZSI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJl cy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggODBjNDBl YWY1Ny4uNzU5OGJkOGYyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVh dHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApAQCAt NTQ4LDE1ICs1NDgsMTUgQEAgVDgxMQlCYXNpYyBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlv bnMJCQlZRVMKIFQ4MTIJU1FML0pTT046IEpTT05fT0JKRUNUQUdHCQkJWUVTCQogVDgxMwlTUUwv SlNPTjogSlNPTl9BUlJBWUFHRyB3aXRoIE9SREVSIEJZCQkJWUVTCQogVDgxNAlDb2xvbiBpbiBK U09OX09CSkVDVCBvciBKU09OX09CSkVDVEFHRwkJCVlFUwkKLVQ4MjEJQmFzaWMgU1FML0pTT04g cXVlcnkgb3BlcmF0b3JzCQkJTk8JCitUODIxCUJhc2ljIFNRTC9KU09OIHF1ZXJ5IG9wZXJhdG9y cwkJCVlFUwkKIFQ4MjIJU1FML0pTT046IElTIEpTT04gV0lUSCBVTklRVUUgS0VZUyBwcmVkaWNh dGUJCQlZRVMJCi1UODIzCVNRTC9KU09OOiBQQVNTSU5HIGNsYXVzZQkJCU5PCQorVDgyMwlTUUwv SlNPTjogUEFTU0lORyBjbGF1c2UJCQlZRVMJCiBUODI0CUpTT05fVEFCTEU6IHNwZWNpZmljIFBM QU4gY2xhdXNlCQkJTk8JCi1UODI1CVNRTC9KU09OOiBPTiBFTVBUWSBhbmQgT04gRVJST1IgY2xh dXNlcwkJCU5PCQotVDgyNglHZW5lcmFsIHZhbHVlIGV4cHJlc3Npb24gaW4gT04gRVJST1Igb3Ig T04gRU1QVFkgY2xhdXNlcwkJCU5PCQorVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVS Uk9SIGNsYXVzZXMJCQlZRVMJCitUODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBF UlJPUiBvciBPTiBFTVBUWSBjbGF1c2VzCQkJWUVTCQogVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5n IE5FU1RFRCBDT0xVTU5TIGNsYXVzZXMJCQlOTwkKLVQ4MjgJSlNPTl9RVUVSWQkJCU5PCQotVDgy OQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlOTwkKK1Q4MjgJSlNPTl9RVUVS WQkJCVlFUwkKK1Q4MjkJSlNPTl9RVUVSWTogYXJyYXkgd3JhcHBlciBvcHRpb25zCQkJWUVTCQog VDgzMAlFbmZvcmNpbmcgdW5pcXVlIGtleXMgaW4gU1FML0pTT04gY29uc3RydWN0b3IgZnVuY3Rp b25zCQkJWUVTCQogVDgzMQlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBzdHJpY3QgbW9kZQkJCVlF UwkKIFQ4MzIJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogaXRlbSBtZXRob2QJCQlZRVMJCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYwppbmRleCAzMTgxYjExMzZhLi4yZmJhZWExY2E3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNz LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC04OCw2ICs4OSwxMiBAQCBz dGF0aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3Rh dGUgKmFnZ3N0YXRlLAogCQkJCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAogCQkJCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGlu dCBzZXRvZmYsIGJvb2wgaXNoYXNoLAogCQkJCQkJCQkgIGJvb2wgbnVsbGNoZWNrKTsKK3N0YXRp YyB2b2lkIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRl LAorCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwKKwkJCQkJCQkgRXhwckV2YWxT dGVwICpzY3JhdGNoKTsKK3N0YXRpYyBpbnQJRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKEV4cHJT dGF0ZSAqc3RhdGUsIE5vZGUgKmNvZXJjaW9uLAorCQkJCQkJCQkJIEVycm9yU2F2ZUNvbnRleHQg KmVzY29udGV4dCwKKwkJCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCk7CiAKIAog LyoKQEAgLTI0MTMsNiArMjQyMCwxNCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhw clN0YXRlICpzdGF0ZSwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIFRfSnNvbkV4cHI6CisJ CQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7CisK KwkJCQlFeGVjSW5pdEpzb25FeHByKGpleHByLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwgJnNjcmF0 Y2gpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXsKIAkJCQlO dWxsVGVzdCAgICpudGVzdCA9IChOdWxsVGVzdCAqKSBub2RlOwpAQCAtNDE4MSwzICs0MTk2LDMz NyBAQCBFeGVjQnVpbGRQYXJhbVNldEVxdWFsKFR1cGxlRGVzYyBkZXNjLAogCiAJcmV0dXJuIHN0 YXRlOwogfQorCisvKgorICogUHVzaCBzdGVwcyB0byBldmFsdWF0ZSBhIEpzb25FeHByIGFuZCBp dHMgdmFyaW91cyBzdWJzaWRpYXJ5IGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgdm9pZAorRXhl Y0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJIERh dHVtICpyZXN2LCBib29sICpyZXNudWxsLAorCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpCit7 CisJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29uRXhwclN0YXRl KSk7CisJSnNvbkV4cHJQb3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAmanNlc3RhdGUtPnBvc3Rf ZXZhbDsKKwlMaXN0Q2VsbCAgICphcmdleHBybGM7CisJTGlzdENlbGwgICAqYXJnbmFtZWxjOwor CUxpc3QJICAgKmp1bXBzX2lmX3NraXAgPSBOSUw7CisJTGlzdAkgICAqanVtcHNfdG9fY29lcmNl X2ZpbmlzaCA9IE5JTDsKKwlMaXN0CSAgICpqdW1wc190b19lbmQgPSBOSUw7CisJTGlzdENlbGwg ICAqbGM7CisJRXhwckV2YWxTdGVwICphczsKKworCWpzZXN0YXRlLT5qc2V4cHIgPSBqZXhwcjsK KworCS8qCisJICogRXZhbHVhdGUgZm9ybWF0dGVkX2V4cHIgc3RvcmluZyB0aGUgcmVzdWx0IGlu dG8KKwkgKiBqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuCisJICovCisJRXhlY0luaXRFeHByUmVj KChFeHByICopIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgc3RhdGUsCisJCQkJCSZqc2VzdGF0ZS0+ Zm9ybWF0dGVkX2V4cHIudmFsdWUsCisJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNu dWxsKTsKKworCS8qIFN0ZXBzIHRvIGp1bXAgdG8gZW5kIGlmIGZvcm1hdHRlZF9leHByIGV2YWx1 YXRlcyB0byBOVUxMICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05VTEw7CisJ c2NyYXRjaC0+cmVzbnVsbCA9ICZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsOworCXNj cmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQgYmVsb3cgKi8KKwlqdW1wc19pZl9z a2lwID0gbGFwcGVuZF9pbnQoanVtcHNfaWZfc2tpcCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJRXhw ckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIEV2YWx1YXRlIHBhdGhz cGVjIGV4cHJlc3Npb24gc3RvcmluZyB0aGUgcmVzdWx0IGludG8KKwkgKiBqc2VzdGF0ZS0+cGF0 aHNwZWMuCisJICovCisJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpleHByLT5wYXRoX3NwZWMs IHN0YXRlLAorCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVjLnZhbHVlLAorCQkJCQkmanNlc3RhdGUt PnBhdGhzcGVjLmlzbnVsbCk7CisKKwkvKiBTdGVwcyB0byBKVU1QIHRvIGVuZCBpZiBwYXRoc3Bl YyBldmFsdWF0ZXMgdG8gTlVMTCAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9O VUxMOworCXNjcmF0Y2gtPnJlc251bGwgPSAmanNlc3RhdGUtPnBhdGhzcGVjLmlzbnVsbDsKKwlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJanVtcHNfaWZf c2tpcCA9IGxhcHBlbmRfaW50KGp1bXBzX2lmX3NraXAsIHN0YXRlLT5zdGVwc19sZW4pOworCUV4 cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyogU3RlcHMgdG8gY29tcHV0ZSBQ QVNTSU5HIGFyZ3MuICovCisJanNlc3RhdGUtPmFyZ3MgPSBOSUw7CisJZm9yYm90aChhcmdleHBy bGMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywKKwkJCWFyZ25hbWVsYywgamV4cHItPnBhc3Npbmdf bmFtZXMpCisJeworCQlFeHByCSAgICphcmdleHByID0gKEV4cHIgKikgbGZpcnN0KGFyZ2V4cHJs Yyk7CisJCVN0cmluZwkgICAqYXJnbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgYXJnbmFtZWxj KTsKKwkJSnNvblBhdGhWYXJpYWJsZSAqdmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7CisKKwkJ dmFyLT5uYW1lID0gYXJnbmFtZS0+c3ZhbDsKKwkJdmFyLT50eXBpZCA9IGV4cHJUeXBlKChOb2Rl ICopIGFyZ2V4cHIpOworCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgYXJnZXhw cik7CisKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIGFyZ2V4cHIsIHN0YXRlLCAmdmFyLT52 YWx1ZSwgJnZhci0+aXNudWxsKTsKKworCQlqc2VzdGF0ZS0+YXJncyA9IGxhcHBlbmQoanNlc3Rh dGUtPmFyZ3MsIHZhcik7CisJfQorCisJLyogU3RlcCBmb3IgSnNvblBhdGgqIGV2YWx1YXRpb247 IHNlZSBFeGVjRXZhbEpzb25FeHByUGF0aCgpLiAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1Bf SlNPTkVYUFJfUEFUSDsKKwlzY3JhdGNoLT5yZXN2YWx1ZSA9IHJlc3Y7CisJc2NyYXRjaC0+cmVz bnVsbCA9IHJlc251bGw7CisJc2NyYXRjaC0+ZC5qc29uZXhwci5qc2VzdGF0ZSA9IGpzZXN0YXRl OworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyoKKwkgKiBTdGVwIHRv IGp1bXAgdG8gZW5kIHdoZW4gdGhlcmUncyBuZWl0aGVyIGFuIGVycm9yIHdoZW4gZXZhbHVhdGlu ZworCSAqIEpzb25QYXRoKiBub3IgYW55IG5lZWQgdG8gY29lcmNlIHRoZSByZXN1bHQgYmVjYXVz ZSBpdCdzIGFscmVhZHkgb2YgdGhlCisJICogc3BlY2lmaWVkIHR5cGUuCisJICovCisJc2NyYXRj aC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCXNjcmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkv KiBzZXQgYmVsb3cgKi8KKwlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQs IHN0YXRlLT5zdGVwc19sZW4pOworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOwor CisJLyoKKwkgKiBTdGVwcyB0byBjb2VyY2UgdGhlIHJlc3VsdCB2YWx1ZSBjb21wdXRlZCBieSBF RU9QX0pTT05FWFBSX1BBVEguIFRvCisJICogaGFuZGxlIGNvZXJjaW9uIGVycm9ycyBzb2Z0bHks IHVzZSB0aGUgZm9sbG93aW5nIEVycm9yU2F2ZUNvbnRleHQgd2hlbgorCSAqIGluaXRpYWxpemlu ZyB0aGUgY29lcmNpb24gZXhwcmVzc2lvbnMsIGluY2x1ZGluZyBhbnkgSnNvbkNvZXJjaW9uCisJ ICogbm9kZXMuCisJICovCisJanNlc3RhdGUtPmVzY29udGV4dC50eXBlID0gVF9FcnJvclNhdmVD b250ZXh0OworCWlmIChqZXhwci0+cmVzdWx0X2NvZXJjaW9uIHx8IGpleHByLT5vbWl0X3F1b3Rl cykKKwl7CisJCWpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID0KKwkJCUV4ZWNJ bml0SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwKKwkJCQkJ CQkJCSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1IgPworCQkJ CQkJCQkJICZqc2VzdGF0ZS0+ZXNjb250ZXh0IDogTlVMTCwKKwkJCQkJCQkJCSByZXN2LCByZXNu dWxsKTsKKwkJLyogSnVtcCB0byBDT0VSQ0lPTl9GSU5JU0guICovCisJCXNjcmF0Y2gtPm9wY29k ZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBi ZWxvdyAqLworCQlqdW1wc190b19jb2VyY2VfZmluaXNoID0gbGFwcGVuZF9pbnQoanVtcHNfdG9f Y29lcmNlX2ZpbmlzaCwKKwkJCQkJCQkJCQkJIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZh bFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisJZWxzZQorCQlqc2VzdGF0ZS0+anVtcF9l dmFsX3Jlc3VsdF9jb2VyY2lvbiA9IC0xOworCisJLyogU3RlcHMgZm9yIGNvZXJjaW5nIEpzb25J dGVtVHlwZSB2YWx1ZXMgcmV0dXJuZWQgYnkgSnNvblBhdGhWYWx1ZSgpLiAqLworCWlmIChqZXhw ci0+aXRlbV9jb2VyY2lvbnMpCisJeworCQkvKgorCQkgKiBIZXJlIHdlIGNyZWF0ZSB0aGUgc3Rl cHMgZm9yIGVhY2ggSnNvbkl0ZW1UeXBlIHR5cGUncyBjb2VyY2lvbgorCQkgKiBleHByZXNzaW9u IGFuZCBhbHNvIHN0b3JlIGEgZmxhZyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGlzIGEKKwkJICog SnNvbkNvZXJjaW9uIG5vZGUuICBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oKSBjYWxsZWQg YnkKKwkJICogRXhlY0V2YWxKc29uRXhwclBhdGgoKSB3aWxsIG1hcCBhIGdpdmVuIEpzb25iVmFs dWUgcmV0dXJuZWQgYnkKKwkJICogSnNvblBhdGhWYWx1ZSgpIHRvIGl0cyAgSnNvbkl0ZW1UeXBl J3MgZXhwcmVzc2lvbidzIHN0ZXAgYWRkcmVzcworCQkgKiBhbmQgdGhlIGZsYWcgYnkgaW5kZXhp bmcgdGhlIGZvbGxvd2luZyBhcnJheXMgd2l0aCBKc29uSXRlbVR5cGUKKwkJICogZW51bSB2YWx1 ZS4KKwkJICovCisJCWpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgPSBsaXN0X2xlbmd0aChq ZXhwci0+aXRlbV9jb2VyY2lvbnMpOworCQlqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1 bXBzID0gKGludCAqKQorCQkJcGFsbG9jKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgKiBz aXplb2YoaW50KSk7CisJCWpzZXN0YXRlLT5pdGVtX2NvZXJjaW9uX3ZpYV9leHByID0gKGJvb2wg KikKKwkJCXBhbGxvYzAoanNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyAqIHNpemVvZihib29s KSk7CisJCWZvcmVhY2gobGMsIGpleHByLT5pdGVtX2NvZXJjaW9ucykKKwkJeworCQkJSnNvbkl0 ZW1Db2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9IGxmaXJzdChsYyk7CisJCQlOb2RlCSAgICpjb2Vy Y2lvbiA9IGl0ZW1fY29lcmNpb24tPmNvZXJjaW9uOworCisJCQlqc2VzdGF0ZS0+aXRlbV9jb2Vy Y2lvbl92aWFfZXhwcltpdGVtX2NvZXJjaW9uLT5pdGVtX3R5cGVdID0KKwkJCQkoY29lcmNpb24g IT0gTlVMTCAmJiAhSXNBKGNvZXJjaW9uLCBKc29uQ29lcmNpb24pKTsKKwkJCWpzZXN0YXRlLT5l dmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaXRlbV9jb2VyY2lvbi0+aXRlbV90eXBlXSA9CisJCQkJ RXhlY0luaXRKc29uRXhwckNvZXJjaW9uKHN0YXRlLCBjb2VyY2lvbiwKKwkJCQkJCQkJCQkgamV4 cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SID8KKwkJCQkJCQkJCQkg JmpzZXN0YXRlLT5lc2NvbnRleHQgOiBOVUxMLAorCQkJCQkJCQkJCSByZXN2LCByZXNudWxsKTsK KworCQkJLyogSnVtcCB0byBDT0VSQ0lPTl9GSU5JU0guICovCisJCQlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0pVTVA7CisJCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJl bG93ICovCisJCQlqdW1wc190b19jb2VyY2VfZmluaXNoID0gbGFwcGVuZF9pbnQoanVtcHNfdG9f Y29lcmNlX2ZpbmlzaCwKKwkJCQkJCQkJCQkJCSBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCQl9CisJfQorCisJLyoKKwkgKiBBZGQgc3Rl cCB0byByZXNldCB0aGUgRXJyb3JTYXZlQ29udGV4dCBhbmQgc2V0IGVycm9yIGZsYWcgaWYgdGhl CisJICogY29lcmNpb24gc3RlcHMgZW5jb3VudGVyZWQgYW4gZXJyb3IgYnV0IHdhcyBub3QgdGhy b3duIGJlY2F1c2Ugb2YgdGhlCisJICogT04gRVJST1IgYmVoYXZpb3IuCisJICovCisJaWYgKGpl eHByLT5yZXN1bHRfY29lcmNpb24gfHwgamV4cHItPml0ZW1fY29lcmNpb25zKQorCXsKKwkJZm9y ZWFjaChsYywganVtcHNfdG9fY29lcmNlX2ZpbmlzaCkKKwkJeworCQkJYXMgPSAmc3RhdGUtPnN0 ZXBzW2xmaXJzdF9pbnQobGMpXTsKKwkJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3Rl cHNfbGVuOworCQl9CisKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9DT0VSQ0lP Tl9GSU5JU0g7CisJCXNjcmF0Y2gtPmQuanNvbmV4cHIuanNlc3RhdGUgPSBqc2VzdGF0ZTsKKwkJ RXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJfQorCisJanNlc3RhdGUtPmp1bXBf ZW1wdHkgPSBqc2VzdGF0ZS0+anVtcF9lcnJvciA9IC0xOworCisJLyoKKwkgKiBTdGVwIHRvIGhh bmRsZSBPTiBFUlJPUiBiZWhhdmlvcnMuICBUaGlzIGhhbmRsZXMgYm90aCB0aGUgZXJyb3JzIHRo YXQKKwkgKiBvY2N1ciBkdXJpbmcgRUVPUF9KU09ORVhQUl9QQVRIIGV2YWx1YXRpb24gYW5kIHN1 YnNlcXVlbnQgY29lcmNpb24KKwkgKiBldmFsdWF0aW9uLgorCSAqLworCWlmIChqZXhwci0+b25f ZXJyb3IgJiYKKwkJamV4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9S KQorCXsKKwkJanNlc3RhdGUtPmp1bXBfZXJyb3IgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQlzY3Jh dGNoLT5vcGNvZGUgPSBFRU9QX0pVTVBfSUZfTk9UX1RSVUU7CisKKwkJLyoKKwkJICogcG9zdF9l dmFsLmVycm9yIGlzIHNldCBieSBFeGVjRXZhbEpzb25FeHByUGF0aCgpIGFuZAorCQkgKiBFeGVj RXZhbEpzb25Db2VyY2lvbkZpbmlzaCgpLgorCQkgKi8KKwkJc2NyYXRjaC0+cmVzdmFsdWUgPSAm cG9zdF9ldmFsLT5lcnJvci52YWx1ZTsKKwkJc2NyYXRjaC0+cmVzbnVsbCA9ICZwb3N0X2V2YWwt PmVycm9yLmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBi ZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRl LT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCQkv KiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04gRVJST1IgZXhwcmVzc2lvbiAqLworCQlFeGVjSW5p dEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9uX2Vycm9yLT5leHByLAorCQkJCQkJc3RhdGUsIHJl c3YsIHJlc251bGwpOworCisJCS8qIFN0ZXBzIHRvIGNvZXJjZSB0aGUgT04gRVJST1IgZXhwcmVz c2lvbiBpZiBuZWVkZWQgKi8KKwkJKHZvaWQpIEV4ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihzdGF0 ZSwKKwkJCQkJCQkJCQkoTm9kZSAqKSBqZXhwci0+b25fZXJyb3ItPmNvZXJjaW9uLAorCQkJCQkJ CQkJCSZqc2VzdGF0ZS0+ZXNjb250ZXh0LAorCQkJCQkJCQkJCXJlc3YsIHJlc251bGwpOworCisJ CWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xl bik7CisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1 bXBkb25lID0gLTE7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKwor CS8qIFN0ZXAgdG8gaGFuZGxlIE9OIEVNUFRZIGJlaGF2aW9ycy4gKi8KKwlpZiAoamV4cHItPm9u X2VtcHR5ICE9IE5VTEwgJiYKKwkJamV4cHItPm9uX2VtcHR5LT5idHlwZSAhPSBKU09OX0JFSEFW SU9SX0VSUk9SKQorCXsKKwkJanNlc3RhdGUtPmp1bXBfZW1wdHkgPSBzdGF0ZS0+c3RlcHNfbGVu OworCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OT1RfVFJVRTsKKwkJc2NyYXRj aC0+cmVzdmFsdWUgPSAmcG9zdF9ldmFsLT5lbXB0eS52YWx1ZTsKKwkJc2NyYXRjaC0+cmVzbnVs bCA9ICZwb3N0X2V2YWwtPmVtcHR5LmlzbnVsbDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25l ID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1w c190b19lbmQsIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBz Y3JhdGNoKTsKKworCQkvKiBTdGVwcyB0byBldmFsdWF0ZSB0aGUgT04gRU1QVFkgZXhwcmVzc2lv biAqLworCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPm9uX2VtcHR5LT5leHByLAor CQkJCQkJc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCS8qIFN0ZXBzIHRvIGNvZXJjZSB0aGUg T04gRU1QVFkgZXhwcmVzc2lvbiBpZiBuZWVkZWQgKi8KKwkJKHZvaWQpIEV4ZWNJbml0SnNvbkV4 cHJDb2VyY2lvbihzdGF0ZSwKKwkJCQkJCQkJCQkoTm9kZSAqKSBqZXhwci0+b25fZW1wdHktPmNv ZXJjaW9uLAorCQkJCQkJCQkJCSZqc2VzdGF0ZS0+ZXNjb250ZXh0LAorCQkJCQkJCQkJCXJlc3Ys IHJlc251bGwpOworCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQlqdW1wc190b19lbmQgPSBs YXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRlLT5zdGVwc19sZW4pOworCQlFeHByRXZhbFB1 c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisKKwlpZiAoanNlc3RhdGUtPmp1bXBfZXJyb3Ig PCAwICYmIGpzZXN0YXRlLT5qdW1wX2VtcHR5IDwgMCkKKwl7CisJCXNjcmF0Y2gtPm9wY29kZSA9 IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxv dyAqLworCQlqdW1wc190b19lbmQgPSBsYXBwZW5kX2ludChqdW1wc190b19lbmQsIHN0YXRlLT5z dGVwc19sZW4pOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisKKwkv KiBSZXR1cm4gTlVMTCB3aGVuIGVpdGhlciBmb3JtYXR0ZWRfZXhwciBvciBwYXRoc3BlYyBpcyBO VUxMLiAqLworCWZvcmVhY2gobGMsIGp1bXBzX2lmX3NraXApCisJeworCQlhcyA9ICZzdGF0ZS0+ c3RlcHNbbGZpcnN0X2ludChsYyldOworCQlhcy0+ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0 ZXBzX2xlbjsKKwl9CisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9DT05TVDsKKwlzY3JhdGNoLT5y ZXN2YWx1ZSA9IHJlc3Y7CisJc2NyYXRjaC0+cmVzbnVsbCA9IHJlc251bGw7CisJc2NyYXRjaC0+ ZC5jb25zdHZhbC52YWx1ZSA9IChEYXR1bSkgMDsKKwlzY3JhdGNoLT5kLmNvbnN0dmFsLmlzbnVs bCA9IHRydWU7CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKiBKdW1w IHRvIGNvZXJjZSB0aGUgTlVMTCB1c2luZyByZXN1bHRfY29lcmNpb24gaXMgcHJlc2VudC4gKi8K KwlpZiAoanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gPj0gMCkKKwl7CisJCXNj cmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0g anNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247CisJCUV4cHJFdmFsUHVzaFN0ZXAo c3RhdGUsIHNjcmF0Y2gpOworCX0KKworCWZvcmVhY2gobGMsIGp1bXBzX3RvX2VuZCkKKwl7CisJ CWFzID0gJnN0YXRlLT5zdGVwc1tsZmlyc3RfaW50KGxjKV07CisJCWFzLT5kLmp1bXAuanVtcGRv bmUgPSBzdGF0ZS0+c3RlcHNfbGVuOworCX0KKworCWpzZXN0YXRlLT5qdW1wX2VuZCA9IHN0YXRl LT5zdGVwc19sZW47Cit9CisKKy8qIEluaXRpYWxpemUgb25lIEpzb25Db2VyY2lvbiBmb3IgZXhl Y3V0aW9uLiAqLworc3RhdGljIGludAorRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKEV4cHJTdGF0 ZSAqc3RhdGUsIE5vZGUgKmNvZXJjaW9uX2V4cHIsCisJCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAq ZXNjb250ZXh0LAorCQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKQoreworCWludAkJ CWp1bXBfZXZhbF9jb2VyY2lvbjsKKwlEYXR1bQkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZXZhbDsK Kwlib29sCSAgICpzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwlFcnJvclNhdmVDb250ZXh0ICpz YXZlX2VzY29udGV4dDsKKworCWlmIChjb2VyY2lvbl9leHByID09IE5VTEwpCisJCXJldHVybiAt MTsKKworCWp1bXBfZXZhbF9jb2VyY2lvbiA9IHN0YXRlLT5zdGVwc19sZW47CisJaWYgKElzQShj b2VyY2lvbl9leHByLCBKc29uQ29lcmNpb24pKQorCXsKKwkJSnNvbkNvZXJjaW9uICpjb2VyY2lv biA9IChKc29uQ29lcmNpb24gKikgY29lcmNpb25fZXhwcjsKKwkJRXhwckV2YWxTdGVwIHNjcmF0 Y2ggPSB7MH07CisJCU9pZAkJCXR5cGlucHV0OworCQlGbWdySW5mbyAgICpmaW5mbzsKKwkJT2lk CQkJdHlwaW9wYXJhbTsKKworCQlnZXRUeXBlSW5wdXRJbmZvKCgoSnNvbkNvZXJjaW9uICopIGNv ZXJjaW9uKS0+dGFyZ2V0dHlwZSwKKwkJCQkJCSAmdHlwaW5wdXQsICZ0eXBpb3BhcmFtKTsKKwkJ ZmluZm8gPSBwYWxsb2MwKHNpemVvZihGbWdySW5mbykpOworCQlmbWdyX2luZm8odHlwaW5wdXQs IGZpbmZvKTsKKworCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfQ09FUkNJT047CisJ CXNjcmF0Y2gucmVzdmFsdWUgPSByZXN2OworCQlzY3JhdGNoLnJlc251bGwgPSByZXNudWxsOwor CQlzY3JhdGNoLmQuanNvbmV4cHJfY29lcmNpb24uY29lcmNpb24gPSBjb2VyY2lvbjsKKwkJc2Ny YXRjaC5kLmpzb25leHByX2NvZXJjaW9uLmlucHV0X2ZpbmZvID0gZmluZm87CisJCXNjcmF0Y2gu ZC5qc29uZXhwcl9jb2VyY2lvbi50eXBpb3BhcmFtID0gdHlwaW9wYXJhbTsKKwkJc2NyYXRjaC5k Lmpzb25leHByX2NvZXJjaW9uLmpzb25fcG9wdWxhdGVfdHlwZV9jYWNoZSA9IE5VTEw7CisJCXNj cmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5lc2NvbnRleHQgPSBlc2NvbnRleHQ7CisJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgY2FzdCBl eHByZXNzaW9uIGJlbG93LCBpZiBhbnkuICovCisJCWlmIChjb2VyY2lvbi0+Y2FzdF9leHByICE9 IE5VTEwpCisJCQljb2VyY2lvbl9leHByID0gY29lcmNpb24tPmNhc3RfZXhwcjsKKwkJZWxzZQor CQkJcmV0dXJuIGp1bXBfZXZhbF9jb2VyY2lvbjsKKwl9CisKKwkvKiBQdXNoIHN0ZXAocykgdG8g Y29tcHV0ZSBjc3RhdGUtPmNvZXJjaW9uLiAqLworCXNhdmVfaW5uZXJtb3N0X2Nhc2V2YWwgPSBz dGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWw7CisJc2F2ZV9pbm5lcm1vc3RfY2FzZW51bGwgPSBzdGF0 ZS0+aW5uZXJtb3N0X2Nhc2VudWxsOworCXNhdmVfZXNjb250ZXh0ID0gc3RhdGUtPmVzY29udGV4 dDsKKworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbCA9IHJlc3Y7CisJc3RhdGUtPmlubmVybW9z dF9jYXNlbnVsbCA9IHJlc251bGw7CisJc3RhdGUtPmVzY29udGV4dCA9IGVzY29udGV4dDsKKwor CUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBjb2VyY2lvbl9leHByLCBzdGF0ZSwgcmVzdiwgcmVz bnVsbCk7CisKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSBzYXZlX2lubmVybW9zdF9jYXNl dmFsOworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSBzYXZlX2lubmVybW9zdF9jYXNlbnVs bDsKKwlzdGF0ZS0+ZXNjb250ZXh0ID0gc2F2ZV9lc2NvbnRleHQ7CisKKwlyZXR1cm4ganVtcF9l dmFsX2NvZXJjaW9uOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXgg M2YyMGYxZGQzMS4uYTdkM2NiNDhhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVy cC5jCkBAIC03Myw4ICs3Myw4IEBACiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRl ICJ1dGlscy9leHBhbmRlZHJlY29yZC5oIgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKLSNpbmNs dWRlICJ1dGlscy9qc29uYi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25mdW5jcy5oIgorI2luY2x1 ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKQEAg LTE4MSw2ICsxODEsMTAgQEAgc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQg RXhlY0FnZ1BsYWluVHJhbnNCeVJlZihBZ2dTdGF0ZSAqYWdnc3RhdGUKIAkJCQkJCQkJCQkJCQkJ CSAgQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCwKIAkJCQkJCQkJCQkJCQkJCSAgRXhwckNvbnRl eHQgKmFnZ2NvbnRleHQsCiAJCQkJCQkJCQkJCQkJCQkgIGludCBzZXRubyk7CitzdGF0aWMgdm9p ZCBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oSnNvbmJWYWx1ZSAqaXRlbSwgSnNvbkV4cHJT dGF0ZSAqanNlc3RhdGUsCisJCQkJCQkJCQkJYm9vbCB0aHJvd19lcnJvciwKKwkJCQkJCQkJCQlp bnQgKmp1bXBfZXZhbF9pdGVtX2NvZXJjaW9uLAorCQkJCQkJCQkJCURhdHVtICpyZXN2YWx1ZSwg Ym9vbCAqcmVzbnVsbCk7CiAKIC8qCiAgKiBTY2FsYXJBcnJheU9wRXhwckhhc2hFbnRyeQpAQCAt NDgyLDYgKzQ4Niw5IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250 ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkmJkNBU0VfRUVPUF9YTUxFWFBSLAogCQkm JkNBU0VfRUVPUF9KU09OX0NPTlNUUlVDVE9SLAogCQkmJkNBU0VfRUVPUF9JU19KU09OLAorCQkm JkNBU0VfRUVPUF9KU09ORVhQUl9QQVRILAorCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9DT0VSQ0lP TiwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNILAogCQkmJkNBU0VfRUVP UF9BR0dSRUYsCiAJCSYmQ0FTRV9FRU9QX0dST1VQSU5HX0ZVTkMsCiAJCSYmQ0FTRV9FRU9QX1dJ TkRPV19GVU5DLApAQCAtMTU1NCw2ICsxNTYxLDI4IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkJRUVPX05F WFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfSlNPTkVYUFJfUEFUSCkKKwkJeworCQkJLyog dG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJRUVPX0pVTVAo RXhlY0V2YWxKc29uRXhwclBhdGgoc3RhdGUsIG9wLCBlY29udGV4dCkpOworCQl9CisKKwkJRUVP X0NBU0UoRUVPUF9KU09ORVhQUl9DT0VSQ0lPTikKKwkJeworCQkJLyogdG9vIGNvbXBsZXggZm9y IGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJRXhlY0V2YWxKc29uQ29lcmNpb24oc3Rh dGUsIG9wLCBlY29udGV4dCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KKworCQlFRU9fQ0FTRShF RU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCkKKwkJeworCQkJLyogdG9vIGNvbXBsZXggZm9y IGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJRXhlY0V2YWxKc29uQ29lcmNpb25GaW5p c2goc3RhdGUsIG9wKTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQorCiAJCUVFT19DQVNFKEVFT1Bf QUdHUkVGKQogCQl7CiAJCQkvKgpAQCAtNDIxNCw2ICs0MjQzLDM1MSBAQCBFeGVjRXZhbEpzb25J c1ByZWRpY2F0ZShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQogCSpvcC0+cmVz dmFsdWUgPSBCb29sR2V0RGF0dW0ocmVzKTsKIH0KIAorLyoKKyAqIFBlcmZvcm1zIEpzb25QYXRo e0V4aXN0c3xRdWVyeXxWYWx1ZX0oKSBmb3IgZ2l2ZW4gY29udGV4dCBpdGVtIGFuZCBKU09OCisg KiBwYXRoLgorICoKKyAqIFJlc3VsdCBpcyBzZXQgaW4gKm9wLT5yZXN2YWx1ZSBhbmQgKm9wLT5y ZXNudWxsLiAgUmV0dXJuIHZhbHVlIGlzIHRoZQorICogc3RlcCBhZGRyZXNzIHRvIGJlIHBlcmZv cm1lZCBuZXh0LgorICoKKyAqIE9uIHJldHVybiwgSnNvbkV4cHJQb3N0RXZhbFN0YXRlIGlzIHBv cHVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGV0YWlsczoKKyAqCS0gZXJyb3IudmFsdWU6IHRy dWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIEpzb25QYXRoIGV2YWx1YXRpb24KKyAqCS0g ZW1wdHkudmFsdWU6IHRydWUgaWYgSnNvblBhdGh7UXVlcnl8VmFsdWV9KCkgZm91bmQgbm8gbWF0 Y2hpbmcgaXRlbQorICoKKyAqIE5vIHJldHVybiBpZiB0aGUgT04gRVJST1IvRU1QVFkgYmVoYXZp b3IgaXMgRVJST1IuCisgKi8KK2ludAorRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCkKK3sK KwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRlOworCUpz b25FeHByUG9zdEV2YWxTdGF0ZSAqcG9zdF9ldmFsID0gJmpzZXN0YXRlLT5wb3N0X2V2YWw7CisJ SnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNleHByOworCURhdHVtCQlpdGVtOworCUpz b25QYXRoICAgKnBhdGg7CisJYm9vbAkJdGhyb3dfZXJyb3IgPSBqZXhwci0+b25fZXJyb3ItPmJ0 eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisJYm9vbAkJZXJyb3IgPSBmYWxzZSwKKwkJCQll bXB0eSA9IGZhbHNlOworCisJLyogTWlnaHQgZ2V0IG92ZXJyaWRkZW4gZm9yIEpTT05fVkFMVUVf T1AgYnkgYW4gcGVyLWl0ZW0gY29lcmNpb24uICovCisJaW50CQkJanVtcF9ldmFsX2NvZXJjaW9u ID0ganNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247CisKKwlpdGVtID0ganNlc3Rh dGUtPmZvcm1hdHRlZF9leHByLnZhbHVlOworCXBhdGggPSBEYXR1bUdldEpzb25QYXRoUChqc2Vz dGF0ZS0+cGF0aHNwZWMudmFsdWUpOworCisJLyogUmVzZXQgSnNvbkV4cHJQb3N0RXZhbFN0YXRl IGZvciB0aGlzIGV2YWx1YXRpb24uICovCisJbWVtc2V0KHBvc3RfZXZhbCwgMCwgc2l6ZW9mKCpw b3N0X2V2YWwpKTsKKwlzd2l0Y2ggKGpleHByLT5vcCkKKwl7CisJCWNhc2UgSlNPTl9FWElTVFNf T1A6CisJCQl7CisJCQkJYm9vbAkJZXhpc3RzID0gSnNvblBhdGhFeGlzdHMoaXRlbSwgcGF0aCwK KwkJCQkJCQkJCQkJCQkhdGhyb3dfZXJyb3IgPyAmZXJyb3IgOiBOVUxMLAorCQkJCQkJCQkJCQkJ CWpzZXN0YXRlLT5hcmdzKTsKKworCQkJCWlmICghZXJyb3IpCisJCQkJeworCQkJCQkqb3AtPnJl c3ZhbHVlID0gQm9vbEdldERhdHVtKGV4aXN0cyk7CisJCQkJCSpvcC0+cmVzbnVsbCA9IGZhbHNl OworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9RVUVSWV9PUDoKKwkJCSpv cC0+cmVzdmFsdWUgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53cmFwcGVyLCAm ZW1wdHksCisJCQkJCQkJCQkJICAhdGhyb3dfZXJyb3IgPyAmZXJyb3IgOiBOVUxMLAorCQkJCQkJ CQkJCSAganNlc3RhdGUtPmFyZ3MpOworCisJCQlpZiAoIWVycm9yICYmICFlbXB0eSkKKwkJCQkq b3AtPnJlc251bGwgPSAoRGF0dW1HZXRQb2ludGVyKCpvcC0+cmVzdmFsdWUpID09IE5VTEwpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJeworCQkJCUpzb25iVmFsdWUg KmpidiA9IEpzb25QYXRoVmFsdWUoaXRlbSwgcGF0aCwgJmVtcHR5LAorCQkJCQkJCQkJCQkJIXRo cm93X2Vycm9yID8gJmVycm9yIDogTlVMTCwKKwkJCQkJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsK KworCQkJCWlmIChqYnYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIFdpbGwgYmUgY29lcmNlZCB3 aXRoIHJlc3VsdF9jb2VyY2lvbi4gKi8KKwkJCQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsK KwkJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoIWVycm9yICYm ICFlbXB0eSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSByZXF1ZXN0ZWQgb3V0cHV0 IHR5cGUgaXMganNvbihiKSwgdXNlCisJCQkJCSAqIHJlc3VsdF9jb2VyY2lvbiB0byBkbyB0aGUg Y29lcmNpb24uCisJCQkJCSAqLworCQkJCQlpZiAoamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0g SlNPTk9JRCB8fAorCQkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gSlNPTkJPSUQpCisJ CQkJCXsKKwkJCQkJCSpvcC0+cmVzdmFsdWUgPSBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9K c29uYihqYnYpKTsKKwkJCQkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOworCQkJCQl9CisJCQkJCWVs c2UKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEVsc2UsIHVzZSBvbmUgb2YgdGhlIGl0ZW1f Y29lcmNpb25zLgorCQkJCQkJICoKKwkJCQkJCSAqIEVycm9yIG91dCBpZiBubyBjYXN0IGV4cHJl c3Npb24gZXhpc3RzLgorCQkJCQkJICovCisJCQkJCQlFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNp b24oamJ2LCBqc2VzdGF0ZSwgdGhyb3dfZXJyb3IsCisJCQkJCQkJCQkJCQkJJmp1bXBfZXZhbF9j b2VyY2lvbiwKKwkJCQkJCQkJCQkJCQlvcC0+cmVzdmFsdWUsIG9wLT5yZXNudWxsKTsKKwkJCQkJ fQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBTUUwvSlNPTiBleHByZXNzaW9uIG9wICVkIiwgamV4cHItPm9wKTsKKwkJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZW1wdHkpCisJeworCQlpZiAoamV4cHItPm9uX2Vt cHR5KQorCQl7CisJCQlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9S X0VSUk9SKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfTk9fU1FM X0pTT05fSVRFTSksCisJCQkJCQllcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0iKSk7CisJCQllbHNl CisJCQkJcG9zdF9ldmFsLT5lbXB0eS52YWx1ZSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKworCQkJ QXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDApOworCQkJcmV0dXJuIGpzZXN0YXRlLT5q dW1wX2VtcHR5OworCQl9CisJCWVsc2UgaWYgKGpleHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNP Tl9CRUhBVklPUl9FUlJPUikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09E RV9OT19TUUxfSlNPTl9JVEVNKSwKKwkJCQkJZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpOwor CQllbHNlCisJCQlwb3N0X2V2YWwtPmVycm9yLnZhbHVlID0gQm9vbEdldERhdHVtKHRydWUpOwor CisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisK KwkJQXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDApOworCQlyZXR1cm4ganNlc3RhdGUt Pmp1bXBfZXJyb3I7CisJfQorCisJaWYgKGVycm9yKQorCXsKKwkJQXNzZXJ0KCF0aHJvd19lcnJv ciAmJiBqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKTsKKwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1 bSkgMDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJcG9zdF9ldmFsLT5lcnJvci52YWx1ZSA9 IEJvb2xHZXREYXR1bSh0cnVlKTsKKwkJcmV0dXJuIGpzZXN0YXRlLT5qdW1wX2Vycm9yOworCX0K KworCS8qIEVsc2UgcmV0dXJuIHRoZSBjb2VyY2lvbiBzdGVwIGFkZHJlc3Mgb3IgdGhlIGFkZHJl c3MgdG8gc2tpcCB0byBlbmQuICovCisJcmV0dXJuIGp1bXBfZXZhbF9jb2VyY2lvbiA+PSAwID8g anVtcF9ldmFsX2NvZXJjaW9uIDoganNlc3RhdGUtPmp1bXBfZW5kOworfQorCisvKgorICogU2Vs ZWN0cyBhIGNvZXJjaW9uIGZvciBhIGdpdmVuIEpzb25iVmFsdWUgYmFzZWQgb24gaXRzIHR5cGUu CisgKgorICogT24gcmV0dXJuLCAqcmVzdmFsdWUgYW5kICpyZXNudWxsIGFyZSBzZXQgdG8gdGhl IHZhbHVlIGV4dHJhY3RlZCBmcm9tIHRoZQorICogSnNvbmJWYWx1ZSBhbmQgKmp1bXBfZXZhbF9p dGVtX2NvZXJjaW9uIGlzIHNldCB0byB0aGUgc3RlcCBhZGRyZXNzIG9mIHRoZQorICogY29lcmNp b24gZXhwcmVzc2lvbi4KKyAqCisgKiBJZiB0aGUgZm91bmQgZXhwcmVzc2lvbiBpcyBhIEpzb25D b2VyY2lvbiBub2RlIHRoYXQgbWVhbnMgdGhlIHBhcnNlcgorICogZGlkbnQnIGZpbmQgYSBjYXN0 IHRvIGRvIHRoZSBjb2VyY2lvbiwgc28gdGhyb3cgYW4gZXJyb3IgaWYgdGhlCisgKiBPTiBFUlJP UiBiZWhhdmlvciBzYXlzIHRvIGRvIHNvLgorICovCitzdGF0aWMgdm9pZAorRXhlY1ByZXBhcmVK c29uSXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRl LAorCQkJCQkJCWJvb2wgdGhyb3dfZXJyb3IsCisJCQkJCQkJaW50ICpqdW1wX2V2YWxfaXRlbV9j b2VyY2lvbiwKKwkJCQkJCQlEYXR1bSAqcmVzdmFsdWUsIGJvb2wgKnJlc251bGwpCit7CisJaW50 CQkgICAqZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzID0ganNlc3RhdGUtPmV2YWxfaXRlbV9jb2Vy Y2lvbl9qdW1wczsKKwlib29sCSAgICppdGVtX2NvZXJjaW9uX3ZpYV9leHByID0ganNlc3RhdGUt Pml0ZW1fY29lcmNpb25fdmlhX2V4cHI7CisJYm9vbAkJdmlhX2V4cHI7CisJaW50CQkJanVtcF90 bzsKKwlKc29uYlZhbHVlCWJ1ZjsKKworCWlmIChpdGVtLT50eXBlID09IGpidkJpbmFyeSAmJiBK c29uQ29udGFpbmVySXNTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhKSkKKwl7CisJCWJvb2wJ CWlzX3NjYWxhciBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisKKwkJaXNfc2NhbGFyID0gSnNv bmJFeHRyYWN0U2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnkuZGF0YSwgJmJ1Zik7CisJCWl0ZW0gPSAm YnVmOworCQlBc3NlcnQoaXNfc2NhbGFyKTsKKwl9CisKKwkqcmVzbnVsbCA9IGZhbHNlOworCisJ LyogZ2V0IGNvZXJjaW9uIHN0YXRlIHJlZmVyZW5jZSBhbmQgZGF0dW0gb2YgdGhlIGNvcnJlc3Bv bmRpbmcgU1FMIHR5cGUgKi8KKwlzd2l0Y2ggKGl0ZW0tPnR5cGUpCisJeworCQljYXNlIGpidk51 bGw6CisJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlTnVs bF07CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZU51 bGxdOworCQkJKnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkJKnJlc251bGwgPSB0cnVlOworCQkJ YnJlYWs7CisKKwkJY2FzZSBqYnZTdHJpbmc6CisJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25f dmlhX2V4cHJbSnNvbkl0ZW1UeXBlU3RyaW5nXTsKKwkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29l cmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlU3RyaW5nXTsKKwkJCSpyZXN2YWx1ZSA9CisJCQkJUG9p bnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihpdGVtLT52YWwuc3RyaW5nLnZh bCwKKwkJCQkJCQkJCQkJCQkJIGl0ZW0tPnZhbC5zdHJpbmcubGVuKSk7CisJCQlicmVhazsKKwor CQljYXNlIGpidk51bWVyaWM6CisJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJb SnNvbkl0ZW1UeXBlTnVtZXJpY107CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1 bXBzW0pzb25JdGVtVHlwZU51bWVyaWNdOworCQkJKnJlc3ZhbHVlID0gTnVtZXJpY0dldERhdHVt KGl0ZW0tPnZhbC5udW1lcmljKTsKKwkJCWJyZWFrOworCisJCWNhc2UgamJ2Qm9vbDoKKwkJCXZp YV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5cGVCb29sZWFuXTsKKwkJ CWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlQm9vbGVhbl07 CisJCQkqcmVzdmFsdWUgPSBCb29sR2V0RGF0dW0oaXRlbS0+dmFsLmJvb2xlYW4pOworCQkJYnJl YWs7CisKKwkJY2FzZSBqYnZEYXRldGltZToKKwkJCSpyZXN2YWx1ZSA9IGl0ZW0tPnZhbC5kYXRl dGltZS52YWx1ZTsKKwkJCXN3aXRjaCAoaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkKQorCQkJewor CQkJCWNhc2UgREFURU9JRDoKKwkJCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9leHBy W0pzb25JdGVtVHlwZURhdGVdOworCQkJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1 bXBzW0pzb25JdGVtVHlwZURhdGVdOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRJTUVPSUQ6CisJ CQkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5cGVUaW1lXTsK KwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVUaW1l XTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1FVFpPSUQ6CisJCQkJCXZpYV9leHByID0gaXRl bV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5cGVUaW1ldHpdOworCQkJCQlqdW1wX3RvID0g ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZVRpbWV0el07CisJCQkJCWJyZWFr OworCQkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25f dmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGltZXN0YW1wXTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRl bV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVUaW1lc3RhbXBdOworCQkJCQlicmVhazsKKwkJ CQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlh X2V4cHJbSnNvbkl0ZW1UeXBlVGltZXN0YW1wdHpdOworCQkJCQlqdW1wX3RvID0gZXZhbF9pdGVt X2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZVRpbWVzdGFtcHR6XTsKKwkJCQkJYnJlYWs7CisJ CQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIgZGF0ZXRpbWUg dHlwZSBvaWQgJXUiLAorCQkJCQkJIGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCk7CisJCQl9CisJ CQlicmVhazsKKworCQljYXNlIGpidkFycmF5OgorCQljYXNlIGpidk9iamVjdDoKKwkJY2FzZSBq YnZCaW5hcnk6CisJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1U eXBlQ29tcG9zaXRlXTsKKwkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNv bkl0ZW1UeXBlQ29tcG9zaXRlXTsKKwkJCSpyZXN2YWx1ZSA9IEpzb25iUEdldERhdHVtKEpzb25i VmFsdWVUb0pzb25iKGl0ZW0pKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBqc29uYiB2YWx1ZSB0eXBlICVkIiwgaXRlbS0+dHlwZSk7CisJfQor CisJLyogSWYgdGhlIGV4cHJlc3Npb24gaXMgYSBKc29uQ29lcmNpb24sIHRocm93IGFuIGVycm9y LiAqLworCWlmIChqdW1wX3RvID49IDAgJiYgIXZpYV9leHByKQorCXsKKwkJaWYgKHRocm93X2Vy cm9yKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NRTF9KU09OX0lU RU1fQ0FOTk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUpLAorCQkJCQllcnJtc2coIlNRTC9KU09O IGl0ZW0gY2Fubm90IGJlIGNhc3QgdG8gdGFyZ2V0IHR5cGUiKSk7CisKKwkJKnJlc3ZhbHVlID0g KERhdHVtKSAwOworCQkqcmVzbnVsbCA9IHRydWU7CisJfQorCisJKmp1bXBfZXZhbF9pdGVtX2Nv ZXJjaW9uID0ganVtcF90bzsKK30KKworLyoKKyAqIENvZXJjZSBhIGpzb25iIHZhbHVlIHByb2R1 Y2VkIGJ5IEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgb3IgYW4gT04gRVJST1IgLworICogRU1QVFkg YmVoYXZpb3IgZXhwcmVzc2lvbiB0byB0aGUgdGFyZ2V0IHR5cGUgYnkgZWl0aGVyIGNhbGxpbmcK KyAqIGpzb25fcG9wdWxhdGVfdHlwZSgpIG9yIGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIHR5cGUn cyBpbnB1dCBmdW5jdGlvbiBpbgorICogc29tZSBjYXNlcy4KKyAqCisgKiBBbnkgc29mdCBlcnJv cnMgdGhhdCBvY2N1ciB3aWxsIGJlIGNoZWNrZWQgYnkgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9G SU5JU0gKKyAqIHRoYXQgd2lsbCBydW4gcmlnaHQgYWZ0ZXIgdGhpcy4KKyAqLwordm9pZAorRXhl Y0V2YWxKc29uQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJ CQkJIEV4cHJDb250ZXh0ICplY29udGV4dCkKK3sKKwlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0g b3AtPmQuanNvbmV4cHJfY29lcmNpb24uY29lcmNpb247CisJRXJyb3JTYXZlQ29udGV4dCAqZXNj b250ZXh0ID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24uZXNjb250ZXh0OworCURhdHVtCQlyZXMg PSAqb3AtPnJlc3ZhbHVlOworCWJvb2wJCXJlc251bGwgPSAqb3AtPnJlc251bGw7CisJSnNvbmIJ ICAgKmpiID0gIXJlc251bGwgPyBEYXR1bUdldEpzb25iUChyZXMpIDogTlVMTDsKKworCS8qCisJ ICogQ2FuJ3QgZ28gdG8ganNvbl9wb3B1bGF0ZV90eXBlKCkgZm9yIHNjYWxhcnMgd2hlbiBPTUlU IFFVT1RFUyBpcworCSAqIHNwZWNpZmllZCwgYmVjYXVzZSBpdCBrZWVwcyB0aGUgcXVvdGVzIGJ5 IGRlZmF1bHQuICBTbyBsZXQncyBkbyB0aGUKKwkgKiBkZWVkIG91cnNlbHZlcyBieSBjYWxsaW5n IHRoZSBpbnB1dCBmdW5jdGlvbiwgdGhhdCBpcywgYWZ0ZXIgcmVtb3ZpbmcKKwkgKiB0aGUgcXVv dGVzLgorCSAqLworCWlmIChqYiAmJiBKQl9ST09UX0lTX1NDQUxBUihqYikgJiYgY29lcmNpb24t Pm9taXRfcXVvdGVzKQorCXsKKwkJRm1nckluZm8gICAqaW5wdXRfZmluZm8gPSBvcC0+ZC5qc29u ZXhwcl9jb2VyY2lvbi5pbnB1dF9maW5mbzsKKwkJT2lkCQkJdHlwaW9wYXJhbSA9IG9wLT5kLmpz b25leHByX2NvZXJjaW9uLnR5cGlvcGFyYW07CisJCWNoYXIJICAgKnZhbCA9IEpzb25iVW5xdW90 ZShqYik7CisKKwkJLyogUGFzcyB0aGUgdGV4dCBvbiB0byB0aGUgY2FzdCBleHByZXNzaW9uLiAq LworCQlpZiAoY29lcmNpb24tPmNhc3RfZXhwcikKKwkJCSpvcC0+cmVzdmFsdWUgPSBEaXJlY3RG dW5jdGlvbkNhbGwxKHRleHRpbiwKKwkJCQkJCQkJCQkJCUNTdHJpbmdHZXREYXR1bSh2YWwpKTsK KwkJZWxzZQorCQkJKHZvaWQpIElucHV0RnVuY3Rpb25DYWxsU2FmZShpbnB1dF9maW5mbywgdmFs LCB0eXBpb3BhcmFtLAorCQkJCQkJCQkJCSBjb2VyY2lvbi0+dGFyZ2V0dHlwbW9kLAorCQkJCQkJ CQkJCSAoTm9kZSAqKSBlc2NvbnRleHQsCisJCQkJCQkJCQkJIG9wLT5yZXN2YWx1ZSk7CisJfQor CWVsc2UKKwl7CisJCXZvaWQJICAgKmNhY2hlID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24uanNv bl9wb3B1bGF0ZV90eXBlX2NhY2hlOworCisJCSpvcC0+cmVzdmFsdWUgPSBqc29uX3BvcHVsYXRl X3R5cGUocmVzLCBKU09OQk9JRCwKKwkJCQkJCQkJCQkgICBjb2VyY2lvbi0+dGFyZ2V0dHlwZSwK KwkJCQkJCQkJCQkgICBjb2VyY2lvbi0+dGFyZ2V0dHlwbW9kLAorCQkJCQkJCQkJCSAgICZjYWNo ZSwKKwkJCQkJCQkJCQkgICBlY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5LAorCQkJCQkJ CQkJCSAgIG9wLT5yZXNudWxsLCAoTm9kZSAqKSBlc2NvbnRleHQpOworCX0KK30KKworLyoKKyAq IENoZWNrcyBpZiB0aGUgY29lcmNpb24gZXZhbHVhdGlvbiBsZWQgdG8gYW4gZXJyb3IuICBJZiBh biBlcnJvciBkaWQgb2NjdXIsCisgKiB0aGlzIHNldHMgcG9zdF9ldmFsLT5lcnJvciB0byB0cmln Z2VyIHRoZSBzdWJzZXF1ZW50IE9OIEVSUk9SIGhhbmRsaW5nCisgKiBzdGVwcy4KKyAqLwordm9p ZAorRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxT dGVwICpvcCkKK3sKKwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpz ZXN0YXRlOworCisJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoJmpzZXN0YXRlLT5lc2NvbnRleHQp KQorCXsKKwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1 ZTsKKwkJanNlc3RhdGUtPnBvc3RfZXZhbC5lcnJvci52YWx1ZSA9IEJvb2xHZXREYXR1bSh0cnVl KTsKKworCQkvKgorCQkgKiBBbHNvIG1ha2UgRXJyb3JTYXZlQ29udGV4dCByZWFkeSBmb3IgdGhl IG5leHQgcm93LiAgU2luY2Ugd2UgbmV2ZXIKKwkJICogc2V0IGRldGFpbHNfd2FudGVkLCB3ZSBk b24ndCBuZWVkIHRvIGFsc28gcmVzZXQgZXJyb3JfZGF0YSwgd2hpY2gKKwkJICogd291bGQgYmUg TlVMTCBhbnl3YXkuCisJCSAqLworCQlBc3NlcnQoIWpzZXN0YXRlLT5lc2NvbnRleHQuZGV0YWls c193YW50ZWQgJiYKKwkJCSAgIGpzZXN0YXRlLT5lc2NvbnRleHQuZXJyb3JfZGF0YSA9PSBOVUxM KTsKKwkJanNlc3RhdGUtPmVzY29udGV4dC5lcnJvcl9vY2N1cnJlZCA9IGZhbHNlOworCX0KK30K IAogLyoKICAqIEV4ZWNFdmFsR3JvdXBpbmdGdW5jCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9q aXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhw ci5jCmluZGV4IDBjNDQ4NDIyZTIuLjMyMjkyZjllYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1q aXRfZXhwci5jCkBAIC0xOTMwLDYgKzE5MzAsMTUwIEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJT dGF0ZSAqc3RhdGUpCiAJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKIAkJ CQlicmVhazsKIAorCQkJY2FzZSBFRU9QX0pTT05FWFBSX1BBVEg6CisJCQkJeworCQkJCQlKc29u RXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRlOworCQkJCQlMTFZN VmFsdWVSZWYgdl9yZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogQ2FsbCBFeGVjRXZhbEpzb25FeHBy UGF0aCgpLiAgSXQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZgorCQkJCQkgKiB0aGUgc3RlcCB0byBw ZXJmb3JtIG5leHQuCisJCQkJCSAqLworCQkJCQl2X3JldCA9IGJ1aWxkX0V2YWxYRnVuYyhiLCBt b2QsICJFeGVjRXZhbEpzb25FeHByUGF0aCIsCisJCQkJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vj b250ZXh0KTsKKworCQkJCQkvKgorCQkJCQkgKiBCdWlsZCBhIHN3aXRjaCB0byBtYXAgdGhlIHJl dHVybiB2YWx1ZSwgd2hpY2ggaXMgYQorCQkJCQkgKiBydW50aW1lIHZhbHVlIG9mIHRoZSBzdGVw IGFkZHJlc3MgdG8gcGVyZm9ybSBuZXh0LCB0bworCQkJCQkgKiBlaXRoZXIganVtcF9lbXB0eSwg anVtcF9lcnJvciwgb3IgdGhlIGNvZXJjaW9uCisJCQkJCSAqIGV4cHJlc3Npb24uCisJCQkJCSAq LworCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZW1wdHkgPj0gMCB8fAorCQkJCQkJanNlc3RhdGUt Pmp1bXBfZXJyb3IgPj0gMCB8fAorCQkJCQkJanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29l cmNpb24gPj0gMCB8fAorCQkJCQkJanNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyA+IDApCisJ CQkJCXsKKwkJCQkJCWludAkJCWk7CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9qdW1wX2VtcHR5Owor CQkJCQkJTExWTVZhbHVlUmVmIHZfanVtcF9lcnJvcjsKKwkJCQkJCUxMVk1WYWx1ZVJlZiB2X2p1 bXBfY29lcmNpb247CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9zd2l0Y2g7CisJCQkJCQlMTFZNQmFz aWNCbG9ja1JlZiBiX2RvbmUsCisJCQkJCQkJCQliX2VtcHR5LAorCQkJCQkJCQkJYl9lcnJvciwK KwkJCQkJCQkJCWJfcmVzdWx0X2NvZXJjaW9uLAorCQkJCQkJCQkgICAqYl9pdGVtX2NvZXJjaW9u cyA9IE5VTEw7CisKKwkJCQkJCWJfZW1wdHkgPQorCQkJCQkJCWxfYmJfYmVmb3JlX3Yob3BibG9j a3Nbb3BubyArIDFdLAorCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2VtcHR5Iiwgb3Bubyk7 CisJCQkJCQliX2Vycm9yID0KKwkJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAx XSwKKwkJCQkJCQkJCQkgICJvcC4lZC5qc29uZXhwcl9lcnJvciIsIG9wbm8pOworCQkJCQkJYl9y ZXN1bHRfY29lcmNpb24gPQorCQkJCQkJCWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFd LAorCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX3Jlc3VsdF9jb2VyY2lvbiIsIG9wbm8pOwor CQkJCQkJaWYgKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgPiAwKQorCQkJCQkJeworCQkJ CQkJCWJfaXRlbV9jb2VyY2lvbnMgPSBwYWxsb2Moc2l6ZW9mKExMVk1CYXNpY0Jsb2NrUmVmKSAq CisJCQkJCQkJCQkJCQkJICBqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zKTsKKwkJCQkJCQlm b3IgKGkgPSAwOyBpIDwganNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9uczsgaSsrKQorCQkJCQkJ CXsKKwkJCQkJCQkJYl9pdGVtX2NvZXJjaW9uc1tpXSA9CisJCQkJCQkJCQlsX2JiX2JlZm9yZV92 KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2l0ZW1f Y29lcmNpb24uJWQiLAorCQkJCQkJCQkJCQkJICBvcG5vLCBpKTsKKwkJCQkJCQl9CisJCQkJCQl9 CisJCQkJCQliX2RvbmUgPQorCQkJCQkJCWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFd LAorCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2RvbmUiLCBvcG5vKTsKKworCQkJCQkJdl9z d2l0Y2ggPSBMTFZNQnVpbGRTd2l0Y2goYiwKKwkJCQkJCQkJCQkJCSAgIHZfcmV0LAorCQkJCQkJ CQkJCQkJICAgYl9kb25lLAorCQkJCQkJCQkJCQkJICAganNlc3RhdGUtPm51bV9pdGVtX2NvZXJj aW9ucyArIDMpOworCQkJCQkJLyogUmV0dXJuZWQganNlc3RhdGUtPmp1bXBfZW1wdHk/ICovCisJ CQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZW1wdHkgPj0gMCkKKwkJCQkJCXsKKwkJCQkJCQl2X2p1 bXBfZW1wdHkgPSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0ZS0+anVtcF9lbXB0eSk7CisJCQkJ CQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9lbXB0eSwgYl9lbXB0eSk7CisJCQkJCQl9 CisJCQkJCQkvKiBSZXR1cm5lZCBqc2VzdGF0ZS0+anVtcF9lcnJvcj8gKi8KKwkJCQkJCWlmIChq c2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKQorCQkJCQkJeworCQkJCQkJCXZfanVtcF9lcnJvciA9 IGxfaW50MzJfY29uc3QobGMsIGpzZXN0YXRlLT5qdW1wX2Vycm9yKTsKKwkJCQkJCQlMTFZNQWRk Q2FzZSh2X3N3aXRjaCwgdl9qdW1wX2Vycm9yLCBiX2Vycm9yKTsKKwkJCQkJCX0KKwkJCQkJCS8q IFJldHVybmVkIGpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uPyAqLworCQkJCQkJ aWYgKGpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID49IDApCisJCQkJCQl7CisJ CQkJCQkJdl9qdW1wX2NvZXJjaW9uID0gbF9pbnQzMl9jb25zdChsYywganNlc3RhdGUtPmp1bXBf ZXZhbF9yZXN1bHRfY29lcmNpb24pOworCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1 bXBfY29lcmNpb24sIGJfcmVzdWx0X2NvZXJjaW9uKTsKKwkJCQkJCX0KKworCQkJCQkJLyoKKwkJ CQkJCSAqIFJldHVybmVkIG9uZSBvZgorCQkJCQkJICoganNlc3RhdGUtPmV2YWxfaXRlbV9jb2Vy Y2lvbl9qdW1wc1tdPworCQkJCQkJICovCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwganNlc3RhdGUt Pm51bV9pdGVtX2NvZXJjaW9uczsgaSsrKQorCQkJCQkJeworCQkJCQkJCWlmIChqc2VzdGF0ZS0+ ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW2ldID49IDApCisJCQkJCQkJeworCQkJCQkJCQl2X2p1 bXBfY29lcmNpb24gPSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJj aW9uX2p1bXBzW2ldKTsKKwkJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9jb2Vy Y2lvbiwgYl9pdGVtX2NvZXJjaW9uc1tpXSk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkv KiBPTiBFTVBUWSBjb2RlICovCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9l bXB0eSk7CisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZW1wdHkgPj0gMCkKKwkJCQkJCQlMTFZN QnVpbGRCcihiLCBvcGJsb2Nrc1tqc2VzdGF0ZS0+anVtcF9lbXB0eV0pOworCQkJCQkJZWxzZQor CQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJLyogT04gRVJST1IgY29kZSAq LworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIsIGJfZXJyb3IpOworCQkJCQkJaWYg KGpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDApCisJCQkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9j a3NbanNlc3RhdGUtPmp1bXBfZXJyb3JdKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlMTFZNQnVpbGRV bnJlYWNoYWJsZShiKTsKKwkJCQkJCS8qIHJlc3VsdF9jb2VyY2lvbiBjb2RlICovCisJCQkJCQlM TFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9yZXN1bHRfY29lcmNpb24pOworCQkJCQkJaWYg KGpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID49IDApCisJCQkJCQkJTExWTUJ1 aWxkQnIoYiwgb3BibG9ja3NbanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb25dKTsK KwkJCQkJCWVsc2UKKwkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJsZShiKTsKKwkJCQkJCS8qIGl0 ZW0gY29lcmNpb24gY29kZSBibG9ja3MgKi8KKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBqc2VzdGF0 ZS0+bnVtX2l0ZW1fY29lcmNpb25zOyBpKyspCisJCQkJCQl7CisJCQkJCQkJTExWTVBvc2l0aW9u QnVpbGRlckF0RW5kKGIsIGJfaXRlbV9jb2VyY2lvbnNbaV0pOworCQkJCQkJCWlmIChqc2VzdGF0 ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW2ldID49IDApCisJCQkJCQkJCUxMVk1CdWlsZEJy KGIsIG9wYmxvY2tzW2pzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaV1dKTsKKwkJ CQkJCQllbHNlCisJCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJfQorCisJ CQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9kb25lKTsKKwkJCQkJfQorCisJCQkJ CUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJCWJyZWFrOworCQkJCX0K KworCQkJY2FzZSBFRU9QX0pTT05FWFBSX0NPRVJDSU9OOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhi LCBtb2QsICJFeGVjRXZhbEpzb25Db2VyY2lvbiIsCisJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vj b250ZXh0KTsKKworCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0g6CisJCQkJYnVp bGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNoIiwKKwkJCQkJ CQkJdl9zdGF0ZSwgb3ApOworCisJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFd KTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBFRU9QX0FHR1JFRjoKIAkJCQl7CiAJCQkJCUxMVk1W YWx1ZVJlZiB2X2FnZ25vOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWpp dF90eXBlcy5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCmluZGV4IDQ3 YzlkYWY0MDIuLmVkZDFlMTY3OWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xs dm1qaXRfdHlwZXMuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMK QEAgLTE3Miw2ICsxNzIsOSBAQCB2b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlF eGVjRXZhbFhtbEV4cHIsCiAJRXhlY0V2YWxKc29uQ29uc3RydWN0b3IsCiAJRXhlY0V2YWxKc29u SXNQcmVkaWNhdGUsCisJRXhlY0V2YWxKc29uQ29lcmNpb24sCisJRXhlY0V2YWxKc29uQ29lcmNp b25GaW5pc2gsCisJRXhlY0V2YWxKc29uRXhwclBhdGgsCiAJTWFrZUV4cGFuZGVkT2JqZWN0UmVh ZE9ubHlJbnRlcm5hbCwKIAlzbG90X2dldG1pc3NpbmdhdHRycywKIAlzbG90X2dldHNvbWVhdHRy c19pbnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9i YWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IGEwMjMzMmExZWMuLjA5YTA1YTAzNzMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL21ha2VmdW5jcy5jCkBAIC04NTcsNiArODU3LDI0IEBAIG1ha2VKc29uVmFsdWVFeHBy KEV4cHIgKnJhd19leHByLCBFeHByICpmb3JtYXR0ZWRfZXhwciwKIAlyZXR1cm4ganZlOwogfQog CisvKgorICogbWFrZUpzb25CZWhhdmlvciAtCisgKgkgIGNyZWF0ZXMgYSBKc29uQmVoYXZpb3Ig bm9kZQorICovCitKc29uQmVoYXZpb3IgKgorbWFrZUpzb25CZWhhdmlvcihKc29uQmVoYXZpb3JU eXBlIHR5cGUsIE5vZGUgKmV4cHIsIEpzb25Db2VyY2lvbiAqY29lcmNpb24sCisJCQkJIGludCBs b2NhdGlvbikKK3sKKwlKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gbWFrZU5vZGUoSnNvbkJlaGF2 aW9yKTsKKworCWJlaGF2aW9yLT5idHlwZSA9IHR5cGU7CisJYmVoYXZpb3ItPmV4cHIgPSBleHBy OworCWJlaGF2aW9yLT5jb2VyY2lvbiA9IGNvZXJjaW9uOworCWJlaGF2aW9yLT5sb2NhdGlvbiA9 IGxvY2F0aW9uOworCisJcmV0dXJuIGJlaGF2aW9yOworfQorCiAvKgogICogbWFrZUpzb25LZXlW YWx1ZSAtCiAgKgkgIGNyZWF0ZXMgYSBKc29uS2V5VmFsdWUgbm9kZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3Mu YwppbmRleCBlMWE1YmM3ZTk1Li40YTNkOTZiMjk4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9u b2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAt MjM0LDYgKzIzNCwzMyBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfSnNv bklzUHJlZGljYXRlOgogCQkJdHlwZSA9IEJPT0xPSUQ7CiAJCQlicmVhazsKKwkJY2FzZSBUX0pz b25FeHByOgorCQkJeworCQkJCWNvbnN0IEpzb25FeHByICpqZXhwciA9IChjb25zdCBKc29uRXhw ciAqKSBleHByOworCisJCQkJdHlwZSA9IGpleHByLT5yZXR1cm5pbmctPnR5cGlkOworCQkJCWJy ZWFrOworCQkJfQorCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJeworCQkJCWNvbnN0IEpzb25D b2VyY2lvbiAqY29lcmNpb24gPSAoY29uc3QgSnNvbkNvZXJjaW9uICopIGV4cHI7CisKKwkJCQl0 eXBlID0gY29lcmNpb24tPnRhcmdldHR5cGU7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgVF9K c29uSXRlbUNvZXJjaW9uOgorCQkJdHlwZSA9IGV4cHJUeXBlKCgoSnNvbkl0ZW1Db2VyY2lvbiAq KSBleHByKS0+Y29lcmNpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJ CQl7CisJCQkJY29uc3QgSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChjb25zdCBKc29uQmVoYXZp b3IgKikgZXhwcjsKKworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCisJCQkJCXR5cGUgPSBl eHByVHlwZSgoTm9kZSAqKSBiZWhhdmlvci0+Y29lcmNpb24pOworCQkJCWVsc2UKKwkJCQkJdHlw ZSA9IGV4cHJUeXBlKGJlaGF2aW9yLT5leHByKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBU X051bGxUZXN0OgogCQkJdHlwZSA9IEJPT0xPSUQ7CiAJCQlicmVhazsKQEAgLTQ5MSw4ICs1MTgs MzIgQEAgZXhwclR5cG1vZChjb25zdCBOb2RlICpleHByKQogCQkJcmV0dXJuICgoY29uc3QgU1FM VmFsdWVGdW5jdGlvbiAqKSBleHByKS0+dHlwbW9kOwogCQljYXNlIFRfSnNvblZhbHVlRXhwcjoK IAkJCXJldHVybiBleHByVHlwbW9kKChOb2RlICopICgoY29uc3QgSnNvblZhbHVlRXhwciAqKSBl eHByKS0+Zm9ybWF0dGVkX2V4cHIpOwotCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKLQkJ CXJldHVybiAoKGNvbnN0IEpzb25Db25zdHJ1Y3RvckV4cHIgKikgZXhwciktPnJldHVybmluZy0+ dHlwbW9kOworCQljYXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJY29uc3QgSnNvbkV4cHIgKmpl eHByID0gKGNvbnN0IEpzb25FeHByICopIGV4cHI7CisKKwkJCQlyZXR1cm4gamV4cHItPnJldHVy bmluZy0+dHlwbW9kOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJ CQl7CisJCQkJY29uc3QgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChjb25zdCBKc29uQ29lcmNp b24gKikgZXhwcjsKKworCQkJCXJldHVybiBjb2VyY2lvbi0+dGFyZ2V0dHlwbW9kOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uOgorCQkJcmV0dXJuIGV4cHJUeXBt b2QoKChKc29uSXRlbUNvZXJjaW9uICopIGV4cHIpLT5jb2VyY2lvbik7CisJCWNhc2UgVF9Kc29u QmVoYXZpb3I6CisJCQl7CisJCQkJY29uc3QgSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChjb25z dCBKc29uQmVoYXZpb3IgKikgZXhwcjsKKworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCisJ CQkJCXJldHVybiBleHByVHlwbW9kKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7CisJCQkJ ZWxzZQorCQkJCQlyZXR1cm4gZXhwclR5cG1vZChiZWhhdmlvci0+ZXhwcik7CisJCQl9CisJCQli cmVhazsKIAkJY2FzZSBUX0NvZXJjZVRvRG9tYWluOgogCQkJcmV0dXJuICgoY29uc3QgQ29lcmNl VG9Eb21haW4gKikgZXhwciktPnJlc3VsdHR5cG1vZDsKIAkJY2FzZSBUX0NvZXJjZVRvRG9tYWlu VmFsdWU6CkBAIC05NjksNiArMTAyMCwyNyBAQCBleHByQ29sbGF0aW9uKGNvbnN0IE5vZGUgKmV4 cHIpCiAJCQkvKiBJUyBKU09OJ3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4uICovCiAJCQljb2xsID0g SW52YWxpZE9pZDsJLyogLi4uIHNvIGl0IGhhcyBubyBjb2xsYXRpb24gKi8KIAkJCWJyZWFrOwor CQljYXNlIFRfSnNvbkV4cHI6CisJCQljb2xsID0gZXhwckNvbGxhdGlvbigoKEpzb25FeHByICop IGV4cHIpLT5yZXN1bHRfY29lcmNpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNp b246CisJCQljb2xsID0gKChjb25zdCBKc29uQ29lcmNpb24gKikgZXhwciktPmNvbGxhdGlvbjsK KwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkl0ZW1Db2VyY2lvbjoKKwkJCWNvbGwgPSBleHByQ29s bGF0aW9uKCgoSnNvbkl0ZW1Db2VyY2lvbiAqKSBleHByKS0+Y29lcmNpb24pOworCQkJYnJlYWs7 CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJSnNvbkJlaGF2aW9yICpiZWhhdmlv ciA9IChKc29uQmVoYXZpb3IgKikgZXhwcjsKKworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24p CisJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7 CisJCQkJZWxzZSBpZiAoYmVoYXZpb3ItPmV4cHIpCisJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9u KGJlaGF2aW9yLT5leHByKTsKKwkJCQllbHNlCisJCQkJCWNvbGwgPSBJbnZhbGlkT2lkOworCQkJ fQorCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCS8qIE51bGxUZXN0J3MgcmVzdWx0 IGlzIGJvb2xlYW4gLi4uICovCiAJCQljb2xsID0gSW52YWxpZE9pZDsJLyogLi4uIHNvIGl0IGhh cyBubyBjb2xsYXRpb24gKi8KQEAgLTEyMDUsNiArMTI3Nyw0NCBAQCBleHByU2V0Q29sbGF0aW9u KE5vZGUgKmV4cHIsIE9pZCBjb2xsYXRpb24pCiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJ CQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7IC8qIHJlc3VsdCBpcyBhbHdheXMgYm9v bGVhbiAqLwogCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhw ciAgICpqZXhwciA9IChKc29uRXhwciAqKSBleHByOworCisJCQkJaWYgKGpleHByLT5yZXN1bHRf Y29lcmNpb24pCisJCQkJCWV4cHJTZXRDb2xsYXRpb24oKE5vZGUgKikgamV4cHItPnJlc3VsdF9j b2VyY2lvbiwgY29sbGF0aW9uKTsKKwkJCQllbHNlCisJCQkJCUFzc2VydCghT2lkSXNWYWxpZChj b2xsYXRpb24pKTsgLyogcmVzdWx0IGlzIGFsd2F5cyBhCisJCQkJCQkJCQkJCQkJICoganNvblti XSB0eXBlICovCisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJ CQl7CisJCQkJSnNvbkl0ZW1Db2VyY2lvbiAqaXRlbV9jb2VyY2lvbiA9IChKc29uSXRlbUNvZXJj aW9uICopIGV4cHI7CisKKwkJCQlpZiAoaXRlbV9jb2VyY2lvbi0+Y29lcmNpb24pCisJCQkJCWV4 cHJTZXRDb2xsYXRpb24oaXRlbV9jb2VyY2lvbi0+Y29lcmNpb24sIGNvbGxhdGlvbik7CisJCQl9 CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uQ29lcmNp b24gKmNvZXJjaW9uID0gKEpzb25Db2VyY2lvbiAqKSBleHByOworCisJCQkJaWYgKGNvZXJjaW9u LT5jYXN0X2V4cHIpCisJCQkJCWV4cHJTZXRDb2xsYXRpb24oY29lcmNpb24tPmNhc3RfZXhwciwg Y29sbGF0aW9uKTsKKwkJCQljb2VyY2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJSnNvbkJlaGF2aW9y ICpiZWhhdmlvciA9IChKc29uQmVoYXZpb3IgKikgZXhwcjsKKworCQkJCWlmIChiZWhhdmlvci0+ ZXhwcikKKwkJCQkJZXhwclNldENvbGxhdGlvbihiZWhhdmlvci0+ZXhwciwgY29sbGF0aW9uKTsK KwkJCQlpZiAoYmVoYXZpb3ItPmNvZXJjaW9uKQorCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2Rl ICopIGJlaGF2aW9yLT5jb2VyY2lvbiwgY29sbGF0aW9uKTsKKwkJCX0KKwkJCWJyZWFrOwogCQlj YXNlIFRfTnVsbFRlc3Q6CiAJCQkvKiBOdWxsVGVzdCdzIHJlc3VsdCBpcyBib29sZWFuIC4uLiAq LwogCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikpOyAvKiAuLi4gc28gbmV2ZXIgc2V0 IGEgY29sbGF0aW9uICovCkBAIC0xNTA4LDYgKzE2MTgsMTggQEAgZXhwckxvY2F0aW9uKGNvbnN0 IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlsb2MgPSAoKGNvbnN0 IEpzb25Jc1ByZWRpY2F0ZSAqKSBleHByKS0+bG9jYXRpb247CiAJCQlicmVhazsKKwkJY2FzZSBU X0pzb25FeHByOgorCQkJeworCQkJCWNvbnN0IEpzb25FeHByICpqc2V4cHIgPSAoY29uc3QgSnNv bkV4cHIgKikgZXhwcjsKKworCQkJCS8qIGNvbnNpZGVyIGJvdGggZnVuY3Rpb24gbmFtZSBhbmQg bGVmdG1vc3QgYXJnICovCisJCQkJbG9jID0gbGVmdG1vc3RMb2MoanNleHByLT5sb2NhdGlvbiwK KwkJCQkJCQkJICBleHByTG9jYXRpb24oanNleHByLT5mb3JtYXR0ZWRfZXhwcikpOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQlsb2MgPSBleHByTG9jYXRpb24o KChKc29uQmVoYXZpb3IgKikgZXhwciktPmV4cHIpOworCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxs VGVzdDoKIAkJCXsKIAkJCQljb25zdCBOdWxsVGVzdCAqbmV4cHIgPSAoY29uc3QgTnVsbFRlc3Qg KikgZXhwcjsKQEAgLTIyNjAsNiArMjM4Miw1MSBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyX2lt cGwoTm9kZSAqbm9kZSwKIAkJCWJyZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJ cmV0dXJuIFdBTEsoKChKc29uSXNQcmVkaWNhdGUgKikgbm9kZSktPmV4cHIpOworCQljYXNlIFRf SnNvbkV4cHI6CisJCQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSAoSnNvbkV4cHIgKikgbm9k ZTsKKworCQkJCWlmIChXQUxLKGpleHByLT5mb3JtYXR0ZWRfZXhwcikpCisJCQkJCXJldHVybiB0 cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5yZXN1bHRfY29lcmNpb24pKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+aXRlbV9jb2VyY2lvbnMpKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+cGFzc2luZ192YWx1ZXMpKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQkvKiB3ZSBhc3N1bWUgd2Fsa2VyIGRvZXNuJ3QgY2FyZSBhYm91dCBwYXNzaW5n X25hbWVzICovCisJCQkJaWYgKFdBTEsoamV4cHItPm9uX2VtcHR5KSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKFdBTEsoamV4cHItPm9uX2Vycm9yKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJ CQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uQ29l cmNpb24gKmNvZXJjaW9uID0gKEpzb25Db2VyY2lvbiAqKSBub2RlOworCisJCQkJaWYgKFdBTEso Y29lcmNpb24tPmNhc3RfZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7 CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uOgorCQkJeworCQkJCUpzb25JdGVtQ29lcmNpb24g Kml0ZW1fY29lcmNpb24gPSAoSnNvbkl0ZW1Db2VyY2lvbiAqKSBub2RlOworCisJCQkJaWYgKFdB TEsoaXRlbV9jb2VyY2lvbi0+Y29lcmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJ CWJyZWFrOworCQljYXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlvciAq YmVoYXZpb3IgPSAoSnNvbkJlaGF2aW9yICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhiZWhhdmlv ci0+ZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGJlaGF2aW9yLT5jb2Vy Y2lvbikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxs VGVzdDoKIAkJCXJldHVybiBXQUxLKCgoTnVsbFRlc3QgKikgbm9kZSktPmFyZyk7CiAJCWNhc2Ug VF9Cb29sZWFuVGVzdDoKQEAgLTMyNjMsNiArMzQzMCw1MyBAQCBleHByZXNzaW9uX3RyZWVfbXV0 YXRvcl9pbXBsKE5vZGUgKm5vZGUsCiAKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJ CX0KKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpz b25FeHByICopIG5vZGU7CisJCQkJSnNvbkV4cHIgICAqbmV3bm9kZTsKKworCQkJCUZMQVRDT1BZ KG5ld25vZGUsIGpleHByLCBKc29uRXhwcik7CisJCQkJTVVUQVRFKG5ld25vZGUtPnBhdGhfc3Bl YywgamV4cHItPnBhdGhfc3BlYywgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Zm9ybWF0 dGVkX2V4cHIsIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3 bm9kZS0+cmVzdWx0X2NvZXJjaW9uLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLCBOb2RlICopOwor CQkJCU1VVEFURShuZXdub2RlLT5pdGVtX2NvZXJjaW9ucywgamV4cHItPml0ZW1fY29lcmNpb25z LCBMaXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5wYXNzaW5nX3ZhbHVlcywgamV4cHItPnBh c3NpbmdfdmFsdWVzLCBMaXN0ICopOworCQkJCS8qIGFzc3VtZSBtdXRhdG9yIGRvZXMgbm90IGNh cmUgYWJvdXQgcGFzc2luZ19uYW1lcyAqLworCQkJCU1VVEFURShuZXdub2RlLT5vbl9lbXB0eSwg amV4cHItPm9uX2VtcHR5LCBKc29uQmVoYXZpb3IgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPm9u X2Vycm9yLCBqZXhwci0+b25fZXJyb3IsIEpzb25CZWhhdmlvciAqKTsKKwkJCQlyZXR1cm4gKE5v ZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgor CQkJeworCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIG5vZGU7 CisJCQkJSnNvbkNvZXJjaW9uICpuZXdub2RlOworCisJCQkJRkxBVENPUFkobmV3bm9kZSwgY29l cmNpb24sIEpzb25Db2VyY2lvbik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmNhc3RfZXhwciwgY29l cmNpb24tPmNhc3RfZXhwciwgTm9kZSAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsK KwkJCX0KKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQl7CisJCQkJSnNvbkl0ZW1Db2Vy Y2lvbiAqaXRlbV9jb2VyY2lvbiA9IChKc29uSXRlbUNvZXJjaW9uICopIG5vZGU7CisJCQkJSnNv bkl0ZW1Db2VyY2lvbiAqbmV3bm9kZTsKKworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGl0ZW1fY29l cmNpb24sIEpzb25JdGVtQ29lcmNpb24pOworCQkJCU1VVEFURShuZXdub2RlLT5jb2VyY2lvbiwg aXRlbV9jb2VyY2lvbi0+Y29lcmNpb24sIE5vZGUgKik7CisJCQkJcmV0dXJuIChOb2RlICopIG5l d25vZGU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJ CQlKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gKEpzb25CZWhhdmlvciAqKSBub2RlOworCQkJCUpz b25CZWhhdmlvciAqbmV3bm9kZTsKKworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGJlaGF2aW9yLCBK c29uQmVoYXZpb3IpOworCQkJCU1VVEFURShuZXdub2RlLT5leHByLCBiZWhhdmlvci0+ZXhwciwg Tm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Y29lcmNpb24sIGJlaGF2aW9yLT5jb2VyY2lv biwgSnNvbkNvZXJjaW9uICopOworCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCQkJfQor CQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXsKIAkJCQlOdWxsVGVzdCAgICpudGVz dCA9IChOdWxsVGVzdCAqKSBub2RlOwpAQCAtMzk1MSw2ICs0MTY1LDM2IEBAIHJhd19leHByZXNz aW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCWJyZWFrOwogCQljYXNlIFRfSnNv bklzUHJlZGljYXRlOgogCQkJcmV0dXJuIFdBTEsoKChKc29uSXNQcmVkaWNhdGUgKikgbm9kZSkt PmV4cHIpOworCQljYXNlIFRfSnNvbkFyZ3VtZW50OgorCQkJcmV0dXJuIFdBTEsoKChKc29uQXJn dW1lbnQgKikgbm9kZSktPnZhbCk7CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQl7CisJCQkJ SnNvbkZ1bmNFeHByICpqZmUgPSAoSnNvbkZ1bmNFeHByICopIG5vZGU7CisKKwkJCQlpZiAoV0FM SyhqZmUtPmNvbnRleHRfaXRlbSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpm ZS0+cGF0aHNwZWMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZmUtPnBhc3Np bmcpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoamZlLT5vdXRwdXQgJiYgV0FMSyhqZmUt Pm91dHB1dCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChqZmUtPm9uX2VtcHR5KQorCQkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoamZlLT5vbl9lcnJvcikKKwkJCQkJcmV0dXJuIHRydWU7 CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29u QmVoYXZpb3IgKmpiID0gKEpzb25CZWhhdmlvciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoamIt PmV4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqYi0+Y29lcmNpb24pKQor CQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJ CQlyZXR1cm4gV0FMSygoKE51bGxUZXN0ICopIG5vZGUpLT5hcmcpOwogCQljYXNlIFRfQm9vbGVh blRlc3Q6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCA4Yjc2ZTk4NTI5 Li40Y2Q2MDZjYTczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTQ4 NzksNyArNDg3OSw4IEBAIGNvc3RfcXVhbF9ldmFsX3dhbGtlcihOb2RlICpub2RlLCBjb3N0X3F1 YWxfZXZhbF9jb250ZXh0ICpjb250ZXh0KQogCQkJIElzQShub2RlLCBTUUxWYWx1ZUZ1bmN0aW9u KSB8fAogCQkJIElzQShub2RlLCBYbWxFeHByKSB8fAogCQkJIElzQShub2RlLCBDb2VyY2VUb0Rv bWFpbikgfHwKLQkJCSBJc0Eobm9kZSwgTmV4dFZhbHVlRXhwcikpCisJCQkgSXNBKG5vZGUsIE5l eHRWYWx1ZUV4cHIpIHx8CisJCQkgSXNBKG5vZGUsIEpzb25FeHByKSkKIAl7CiAJCS8qIFRyZWF0 IGFsbCB0aGVzZSBhcyBoYXZpbmcgY29zdCAxICovCiAJCWNvbnRleHQtPnRvdGFsLnBlcl90dXBs ZSArPSBjcHVfb3BlcmF0b3JfY29zdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwpp bmRleCA5NGViNTZhMWU3Li4yMzFjZDBjM2U1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xh dXNlcy5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNp bmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRl ICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTQx Nyw2ICs0MTgsMjUgQEAgY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9uc193YWxrZXIoTm9kZSAqbm9k ZSwgdm9pZCAqY29udGV4dCkKIAkJLyogQ2hlY2sgYWxsIHN1Ym5vZGVzICovCiAJfQogCisJaWYg KElzQShub2RlLCBKc29uRXhwcikpCisJeworCQlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2Rl KEpzb25FeHByLCBub2RlKTsKKwkJQ29uc3QJICAgKmNuc3Q7CisKKwkJaWYgKCFJc0EoamV4cHIt PnBhdGhfc3BlYywgQ29uc3QpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJY25zdCA9IGNhc3ROb2Rl KENvbnN0LCBqZXhwci0+cGF0aF9zcGVjKTsKKworCQlBc3NlcnQoY25zdC0+Y29uc3R0eXBlID09 IEpTT05QQVRIT0lEKTsKKwkJaWYgKGNuc3QtPmNvbnN0aXNudWxsKQorCQkJcmV0dXJuIGZhbHNl OworCisJCWlmIChqc3BJc011dGFibGUoRGF0dW1HZXRKc29uUGF0aFAoY25zdC0+Y29uc3R2YWx1 ZSksCisJCQkJCQkgamV4cHItPnBhc3NpbmdfbmFtZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcykp CisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoSXNBKG5vZGUsIFNRTFZhbHVlRnVuY3Rpb24p KQogCXsKIAkJLyogYWxsIHZhcmlhbnRzIG9mIFNRTFZhbHVlRnVuY3Rpb24gYXJlIHN0YWJsZSAq LwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3Bh cnNlci9ncmFtLnkKaW5kZXggMTMwZjdmYzdjMy4uZTkwMGVkZmI4YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBA IC02NTIsMTAgKzY1MiwxOSBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3Qo Y2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCWpzb25fcmV0 dXJuaW5nX2NsYXVzZV9vcHQKIAkJCQlqc29uX25hbWVfYW5kX3ZhbHVlCiAJCQkJanNvbl9hZ2dy ZWdhdGVfZnVuYworCQkJCWpzb25fYXJndW1lbnQKKwkJCQlqc29uX2JlaGF2aW9yCisJCQkJanNv bl9vbl9lcnJvcl9jbGF1c2Vfb3B0CiAldHlwZSA8bGlzdD4JanNvbl9uYW1lX2FuZF92YWx1ZV9s aXN0CiAJCQkJanNvbl92YWx1ZV9leHByX2xpc3QKIAkJCQlqc29uX2FycmF5X2FnZ3JlZ2F0ZV9v cmRlcl9ieV9jbGF1c2Vfb3B0Ci0ldHlwZSA8aXZhbD4JanNvbl9wcmVkaWNhdGVfdHlwZV9jb25z dHJhaW50CisJCQkJanNvbl9hcmd1bWVudHMKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQK KwkJCQlqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorJXR5cGUgPGl2YWw+CWpzb25fYmVoYXZpb3Jf dHlwZQorCQkJCWpzb25fcHJlZGljYXRlX3R5cGVfY29uc3RyYWludAorCQkJCWpzb25fcXVvdGVz X2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKICV0eXBlIDxib29sZWFuPglq c29uX2tleV91bmlxdWVuZXNzX2NvbnN0cmFpbnRfb3B0CiAJCQkJanNvbl9vYmplY3RfY29uc3Ry dWN0b3JfbnVsbF9jbGF1c2Vfb3B0CiAJCQkJanNvbl9hcnJheV9jb25zdHJ1Y3Rvcl9udWxsX2Ns YXVzZV9vcHQKQEAgLTY5Niw3ICs3MDUsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZp ZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCUNB Q0hFIENBTEwgQ0FMTEVEIENBU0NBREUgQ0FTQ0FERUQgQ0FTRSBDQVNUIENBVEFMT0dfUCBDSEFJ TiBDSEFSX1AKIAlDSEFSQUNURVIgQ0hBUkFDVEVSSVNUSUNTIENIRUNLIENIRUNLUE9JTlQgQ0xB U1MgQ0xPU0UKIAlDTFVTVEVSIENPQUxFU0NFIENPTExBVEUgQ09MTEFUSU9OIENPTFVNTiBDT0xV TU5TIENPTU1FTlQgQ09NTUVOVFMgQ09NTUlUCi0JQ09NTUlUVEVEIENPTVBSRVNTSU9OIENPTkNV UlJFTlRMWSBDT05GSUdVUkFUSU9OIENPTkZMSUNUCisJQ09NTUlUVEVEIENPTVBSRVNTSU9OIENP TkNVUlJFTlRMWSBDT05ESVRJT05BTCBDT05GSUdVUkFUSU9OIENPTkZMSUNUCiAJQ09OTkVDVElP TiBDT05TVFJBSU5UIENPTlNUUkFJTlRTIENPTlRFTlRfUCBDT05USU5VRV9QIENPTlZFUlNJT05f UCBDT1BZCiAJQ09TVCBDUkVBVEUgQ1JPU1MgQ1NWIENVQkUgQ1VSUkVOVF9QCiAJQ1VSUkVOVF9D QVRBTE9HIENVUlJFTlRfREFURSBDVVJSRU5UX1JPTEUgQ1VSUkVOVF9TQ0hFTUEKQEAgLTcwNyw4 ICs3MTYsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCURFVEFDSCBESUNUSU9OQVJZIERJ U0FCTEVfUCBESVNDQVJEIERJU1RJTkNUIERPIERPQ1VNRU5UX1AgRE9NQUlOX1AKIAlET1VCTEVf UCBEUk9QCiAKLQlFQUNIIEVMU0UgRU5BQkxFX1AgRU5DT0RJTkcgRU5DUllQVEVEIEVORF9QIEVO VU1fUCBFU0NBUEUgRVZFTlQgRVhDRVBUCi0JRVhDTFVERSBFWENMVURJTkcgRVhDTFVTSVZFIEVY RUNVVEUgRVhJU1RTIEVYUExBSU4gRVhQUkVTU0lPTgorCUVBQ0ggRUxTRSBFTVBUWV9QIEVOQUJM RV9QIEVOQ09ESU5HIEVOQ1JZUFRFRCBFTkRfUCBFTlVNX1AgRVJST1JfUCBFU0NBUEUKKwlFVkVO VCBFWENFUFQgRVhDTFVERSBFWENMVURJTkcgRVhDTFVTSVZFIEVYRUNVVEUgRVhJU1RTIEVYUExB SU4gRVhQUkVTU0lPTgogCUVYVEVOU0lPTiBFWFRFUk5BTCBFWFRSQUNUCiAKIAlGQUxTRV9QIEZB TUlMWSBGRVRDSCBGSUxURVIgRklOQUxJWkUgRklSU1RfUCBGTE9BVF9QIEZPTExPV0lORyBGT1IK QEAgLTcyMywxMCArNzMyLDEwIEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVj dChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJSU5ORVJfUCBJ Tk9VVCBJTlBVVF9QIElOU0VOU0lUSVZFIElOU0VSVCBJTlNURUFEIElOVF9QIElOVEVHRVIKIAlJ TlRFUlNFQ1QgSU5URVJWQUwgSU5UTyBJTlZPS0VSIElTIElTTlVMTCBJU09MQVRJT04KIAotCUpP SU4gSlNPTiBKU09OX0FSUkFZIEpTT05fQVJSQVlBR0cgSlNPTl9PQkpFQ1QgSlNPTl9PQkpFQ1RB R0cKLQlKU09OX1NDQUxBUiBKU09OX1NFUklBTElaRQorCUpPSU4gSlNPTiBKU09OX0FSUkFZIEpT T05fQVJSQVlBR0cgSlNPTl9FWElTVFMgSlNPTl9PQkpFQ1QgSlNPTl9PQkpFQ1RBR0cKKwlKU09O X1FVRVJZIEpTT05fU0NBTEFSIEpTT05fU0VSSUFMSVpFIEpTT05fVkFMVUUKIAotCUtFWSBLRVlT CisJS0VFUCBLRVkgS0VZUwogCiAJTEFCRUwgTEFOR1VBR0UgTEFSR0VfUCBMQVNUX1AgTEFURVJB TF9QCiAJTEVBRElORyBMRUFLUFJPT0YgTEVBU1QgTEVGVCBMRVZFTCBMSUtFIExJTUlUIExJU1RF TiBMT0FEIExPQ0FMCkBAIC03NDAsNyArNzQ5LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNp dmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsK IAlOT1QgTk9USElORyBOT1RJRlkgTk9UTlVMTCBOT1dBSVQgTlVMTF9QIE5VTExJRgogCU5VTExT X1AgTlVNRVJJQwogCi0JT0JKRUNUX1AgT0YgT0ZGIE9GRlNFVCBPSURTIE9MRCBPTiBPTkxZIE9Q RVJBVE9SIE9QVElPTiBPUFRJT05TIE9SCisJT0JKRUNUX1AgT0YgT0ZGIE9GRlNFVCBPSURTIE9M RCBPTUlUIE9OIE9OTFkgT1BFUkFUT1IgT1BUSU9OIE9QVElPTlMgT1IKIAlPUkRFUiBPUkRJTkFM SVRZIE9USEVSUyBPVVRfUCBPVVRFUl9QCiAJT1ZFUiBPVkVSTEFQUyBPVkVSTEFZIE9WRVJSSURJ TkcgT1dORUQgT1dORVIKIApAQCAtNzQ5LDcgKzc1OCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJUE9TSVRJT04gUFJFQ0VESU5HIFBSRUNJU0lPTiBQUkVTRVJWRSBQUkVQQVJFIFBSRVBB UkVEIFBSSU1BUlkKIAlQUklPUiBQUklWSUxFR0VTIFBST0NFRFVSQUwgUFJPQ0VEVVJFIFBST0NF RFVSRVMgUFJPR1JBTSBQVUJMSUNBVElPTgogCi0JUVVPVEUKKwlRVU9URSBRVU9URVMKIAogCVJB TkdFIFJFQUQgUkVBTCBSRUFTU0lHTiBSRUNIRUNLIFJFQ1VSU0lWRSBSRUZfUCBSRUZFUkVOQ0VT IFJFRkVSRU5DSU5HCiAJUkVGUkVTSCBSRUlOREVYIFJFTEFUSVZFX1AgUkVMRUFTRSBSRU5BTUUg UkVQRUFUQUJMRSBSRVBMQUNFIFJFUExJQ0EKQEAgLTc2MCw3ICs3NjksNyBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywg Tm9kZSAqcXVlcnkpOwogCVNFUVVFTkNFIFNFUVVFTkNFUwogCVNFUklBTElaQUJMRSBTRVJWRVIg U0VTU0lPTiBTRVNTSU9OX1VTRVIgU0VUIFNFVFMgU0VUT0YgU0hBUkUgU0hPVwogCVNJTUlMQVIg U0lNUExFIFNLSVAgU01BTExJTlQgU05BUFNIT1QgU09NRSBTUUxfUCBTVEFCTEUgU1RBTkRBTE9O RV9QCi0JU1RBUlQgU1RBVEVNRU5UIFNUQVRJU1RJQ1MgU1RESU4gU1RET1VUIFNUT1JBR0UgU1RP UkVEIFNUUklDVF9QIFNUUklQX1AKKwlTVEFSVCBTVEFURU1FTlQgU1RBVElTVElDUyBTVERJTiBT VERPVVQgU1RPUkFHRSBTVE9SRUQgU1RSSUNUX1AgU1RSSU5HX1AgU1RSSVBfUAogCVNVQlNDUklQ VElPTiBTVUJTVFJJTkcgU1VQUE9SVCBTWU1NRVRSSUMgU1lTSUQgU1lTVEVNX1AgU1lTVEVNX1VT RVIKIAogCVRBQkxFIFRBQkxFUyBUQUJMRVNBTVBMRSBUQUJMRVNQQUNFIFRFTVAgVEVNUExBVEUg VEVNUE9SQVJZIFRFWFRfUCBUSEVOCkBAIC03NjgsNyArNzc3LDcgQEAgc3RhdGljIE5vZGUgKm1h a2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUg KnF1ZXJ5KTsKIAlUUkVBVCBUUklHR0VSIFRSSU0gVFJVRV9QCiAJVFJVTkNBVEUgVFJVU1RFRCBU WVBFX1AgVFlQRVNfUAogCi0JVUVTQ0FQRSBVTkJPVU5ERUQgVU5DT01NSVRURUQgVU5FTkNSWVBU RUQgVU5JT04gVU5JUVVFIFVOS05PV04KKwlVRVNDQVBFIFVOQk9VTkRFRCBVTkNPTkRJVElPTkFM IFVOQ09NTUlUVEVEIFVORU5DUllQVEVEIFVOSU9OIFVOSVFVRSBVTktOT1dOCiAJVU5MSVNURU4g VU5MT0dHRUQgVU5USUwgVVBEQVRFIFVTRVIgVVNJTkcKIAogCVZBQ1VVTSBWQUxJRCBWQUxJREFU RSBWQUxJREFUT1IgVkFMVUVfUCBWQUxVRVMgVkFSQ0hBUiBWQVJJQURJQyBWQVJZSU5HCkBAIC0x NTc4OSw2ICsxNTc5OCw2MiBAQCBmdW5jX2V4cHJfY29tbW9uX3N1YmV4cHI6CiAJCQkJCW4tPmxv Y2F0aW9uID0gQDE7CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJCQl9CisJCQl8IEpTT05fUVVF UlkgJygnCisJCQkJanNvbl92YWx1ZV9leHByICcsJyBhX2V4cHIganNvbl9wYXNzaW5nX2NsYXVz ZV9vcHQKKwkJCQlqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2Jl aGF2aW9yCisJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fYmVoYXZpb3JfY2xh dXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBtYWtlTm9kZShK c29uRnVuY0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNPTl9RVUVSWV9PUDsKKwkJCQkJbi0+Y29u dGV4dF9pdGVtID0gKEpzb25WYWx1ZUV4cHIgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVjID0gJDU7 CisJCQkJCW4tPnBhc3NpbmcgPSAkNjsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikg JDc7CisJCQkJCW4tPndyYXBwZXIgPSAkODsKKwkJCQkJbi0+cXVvdGVzID0gJDk7CisJCQkJCW4t Pm9uX2VtcHR5ID0gKEpzb25CZWhhdmlvciAqKSBsaW5pdGlhbCgkMTApOworCQkJCQluLT5vbl9l cnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29uZCgkMTApOworCQkJCQluLT5sb2NhdGlvbiA9 IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX0VYSVNUUyAnKCcK KwkJCQlqc29uX3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAor CQkJCWpzb25fb25fZXJyb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uRnVu Y0V4cHIgKm4gPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNPTl9F WElTVFNfT1A7CisJCQkJCW4tPmNvbnRleHRfaXRlbSA9IChKc29uVmFsdWVFeHByICopICQzOwor CQkJCQluLT5wYXRoc3BlYyA9ICQ1OworCQkJCQluLT5wYXNzaW5nID0gJDY7CisJCQkJCW4tPm91 dHB1dCA9IE5VTEw7CisJCQkJCW4tPm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAqKSAkNzsKKwkJ CQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwg SlNPTl9WQUxVRSAnKCcKKwkJCQlqc29uX3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3Bhc3Np bmdfY2xhdXNlX29wdAorCQkJCWpzb25fcmV0dXJuaW5nX2NsYXVzZV9vcHQKKwkJCQlqc29uX2Jl aGF2aW9yX2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkZ1bmNFeHByICpuID0g bWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKworCQkJCQluLT5vcCA9IEpTT05fVkFMVUVfT1A7CisJ CQkJCW4tPmNvbnRleHRfaXRlbSA9IChKc29uVmFsdWVFeHByICopICQzOworCQkJCQluLT5wYXRo c3BlYyA9ICQ1OworCQkJCQluLT5wYXNzaW5nID0gJDY7CisJCQkJCW4tPm91dHB1dCA9IChKc29u T3V0cHV0ICopICQ3OworCQkJCQluLT5vbl9lbXB0eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRp YWwoJDgpOworCQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29uZCgkOCk7 CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CiAJ CQk7CiAKIApAQCAtMTY1MTUsNiArMTY1ODAsNzcgQEAgb3B0X2FzeW1tZXRyaWM6IEFTWU1NRVRS SUMKIAkJOwogCiAvKiBTUUwvSlNPTiBzdXBwb3J0ICovCitqc29uX3Bhc3NpbmdfY2xhdXNlX29w dDoKKwkJCVBBU1NJTkcganNvbl9hcmd1bWVudHMJCQkJCXsgJCQgPSAkMjsgfQorCQkJfCAvKkVN UFRZKi8JCQkJCQkJCXsgJCQgPSBOSUw7IH0KKwkJOworCitqc29uX2FyZ3VtZW50czoKKwkJCWpz b25fYXJndW1lbnQJCQkJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25fYXJn dW1lbnRzICcsJyBqc29uX2FyZ3VtZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsK KworanNvbl9hcmd1bWVudDoKKwkJCWpzb25fdmFsdWVfZXhwciBBUyBDb2xMYWJlbAorCQkJewor CQkJCUpzb25Bcmd1bWVudCAqbiA9IG1ha2VOb2RlKEpzb25Bcmd1bWVudCk7CisKKwkJCQluLT52 YWwgPSAoSnNvblZhbHVlRXhwciAqKSAkMTsKKwkJCQluLT5uYW1lID0gJDM7CisJCQkJJCQgPSAo Tm9kZSAqKSBuOworCQkJfQorCQk7CisKKy8qIEFSUkFZIGlzIGEgbm9pc2Ugd29yZCAqLworanNv bl93cmFwcGVyX2JlaGF2aW9yOgorCQkJICBXSVRIT1VUIFdSQVBQRVIJCQkJCXsgJCQgPSBKU1df Tk9ORTsgfQorCQkJfCBXSVRIT1VUIEFSUkFZCVdSQVBQRVIJCQkJeyAkJCA9IEpTV19OT05FOyB9 CisJCQl8IFdJVEggV1JBUFBFUgkJCQkJCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQkJ fCBXSVRIIEFSUkFZIFdSQVBQRVIJCQkJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8 IFdJVEggQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUgl7ICQkID0gSlNXX0NPTkRJVElPTkFMOyB9 CisJCQl8IFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBXUkFQUEVSCXsgJCQgPSBKU1dfVU5DT05E SVRJT05BTDsgfQorCQkJfCBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIJCQl7ICQkID0gSlNXX0NP TkRJVElPTkFMOyB9CisJCQl8IFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSCQl7ICQkID0gSlNX X1VOQ09ORElUSU9OQUw7IH0KKwkJCXwgLyogZW1wdHkgKi8JCQkJCQl7ICQkID0gSlNXX1VOU1BF QzsgfQorCQk7CisKK2pzb25fYmVoYXZpb3I6CisJCQlERUZBVUxUIGFfZXhwcgorCQkJCXsgJCQg PSAoTm9kZSAqKSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVMVCwgJDIsIE5V TEwsIEAxKTsgfQorCQkJfCBqc29uX2JlaGF2aW9yX3R5cGUKKwkJCQl7ICQkID0gKE5vZGUgKikg bWFrZUpzb25CZWhhdmlvcigkMSwgTlVMTCwgTlVMTCwgQDEpOyB9CisJCTsKKworanNvbl9iZWhh dmlvcl90eXBlOgorCQkJRVJST1JfUAkJeyAkJCA9IEpTT05fQkVIQVZJT1JfRVJST1I7IH0KKwkJ CXwgTlVMTF9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX05VTEw7IH0KKwkJCXwgVFJVRV9QCXsgJCQg PSBKU09OX0JFSEFWSU9SX1RSVUU7IH0KKwkJCXwgRkFMU0VfUAl7ICQkID0gSlNPTl9CRUhBVklP Ul9GQUxTRTsgfQorCQkJfCBVTktOT1dOCXsgJCQgPSBKU09OX0JFSEFWSU9SX1VOS05PV047IH0K KwkJCXwgRU1QVFlfUCBBUlJBWQl7ICQkID0gSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWTsgfQor CQkJfCBFTVBUWV9QIE9CSkVDVF9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVDsg fQorCQkJLyogbm9uLXN0YW5kYXJkLCBmb3IgT3JhY2xlIGNvbXBhdGliaWxpdHkgb25seSAqLwor CQkJfCBFTVBUWV9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOyB9CisJCTsKKwor anNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0OgorCQkJanNvbl9iZWhhdmlvciBPTiBFTVBUWV9QCisJ CQkJeyAkJCA9IGxpc3RfbWFrZTIoJDEsIE5VTEwpOyB9CisJCQl8IGpzb25fYmVoYXZpb3IgT04g RVJST1JfUAorCQkJCXsgJCQgPSBsaXN0X21ha2UyKE5VTEwsICQxKTsgfQorCQkJfCBqc29uX2Jl aGF2aW9yIE9OIEVNUFRZX1AganNvbl9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJeyAkJCA9IGxp c3RfbWFrZTIoJDEsICQ0KTsgfQorCQkJfCAvKiBFTVBUWSAqLworCQkJCXsgJCQgPSBsaXN0X21h a2UyKE5VTEwsIE5VTEwpOyB9CisJCTsKKworanNvbl9vbl9lcnJvcl9jbGF1c2Vfb3B0OgorCQkJ anNvbl9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJeyAkJCA9ICQxOyB9CisJCQl8IC8qIEVNUFRZ ICovCisJCQkJeyAkJCA9IE5VTEw7IH0KKwkJOworCiBqc29uX3ZhbHVlX2V4cHI6CiAJCQlhX2V4 cHIganNvbl9mb3JtYXRfY2xhdXNlX29wdAogCQkJewpAQCAtMTY1NTksNiArMTY2OTUsMTQgQEAg anNvbl9mb3JtYXRfY2xhdXNlX29wdDoKIAkJCQl9CiAJCTsKIAoranNvbl9xdW90ZXNfY2xhdXNl X29wdDoKKwkJCUtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkdfUAkJeyAkJCA9IEpTX1FVT1RF U19LRUVQOyB9CisJCQl8IEtFRVAgUVVPVEVTCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19LRUVQOyB9 CisJCQl8IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkdfUAl7ICQkID0gSlNfUVVPVEVTX09N SVQ7IH0KKwkJCXwgT01JVCBRVU9URVMJCQkJCQl7ICQkID0gSlNfUVVPVEVTX09NSVQ7IH0KKwkJ CXwgLyogRU1QVFkgKi8JCQkJCQl7ICQkID0gSlNfUVVPVEVTX1VOU1BFQzsgfQorCQk7CisKIGpz b25fcmV0dXJuaW5nX2NsYXVzZV9vcHQ6CiAJCQlSRVRVUk5JTkcgVHlwZW5hbWUganNvbl9mb3Jt YXRfY2xhdXNlX29wdAogCQkJCXsKQEAgLTE3MTc1LDYgKzE3MzE5LDcgQEAgdW5yZXNlcnZlZF9r ZXl3b3JkOgogCQkJfCBDT01NSVQKIAkJCXwgQ09NTUlUVEVECiAJCQl8IENPTVBSRVNTSU9OCisJ CQl8IENPTkRJVElPTkFMCiAJCQl8IENPTkZJR1VSQVRJT04KIAkJCXwgQ09ORkxJQ1QKIAkJCXwg Q09OTkVDVElPTgpAQCAtMTcyMTEsMTAgKzE3MzU2LDEyIEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoK IAkJCXwgRE9VQkxFX1AKIAkJCXwgRFJPUAogCQkJfCBFQUNICisJCQl8IEVNUFRZX1AKIAkJCXwg RU5BQkxFX1AKIAkJCXwgRU5DT0RJTkcKIAkJCXwgRU5DUllQVEVECiAJCQl8IEVOVU1fUAorCQkJ fCBFUlJPUl9QCiAJCQl8IEVTQ0FQRQogCQkJfCBFVkVOVAogCQkJfCBFWENMVURFCkBAIC0xNzI2 NCw2ICsxNzQxMSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgSU5TVEVBRAogCQkJfCBJ TlZPS0VSCiAJCQl8IElTT0xBVElPTgorCQkJfCBLRUVQCiAJCQl8IEtFWQogCQkJfCBLRVlTCiAJ CQl8IExBQkVMCkBAIC0xNzMxMCw2ICsxNzQ1OCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJ CXwgT0ZGCiAJCQl8IE9JRFMKIAkJCXwgT0xECisJCQl8IE9NSVQKIAkJCXwgT1BFUkFUT1IKIAkJ CXwgT1BUSU9OCiAJCQl8IE9QVElPTlMKQEAgLTE3MzQwLDYgKzE3NDg5LDcgQEAgdW5yZXNlcnZl ZF9rZXl3b3JkOgogCQkJfCBQUk9HUkFNCiAJCQl8IFBVQkxJQ0FUSU9OCiAJCQl8IFFVT1RFCisJ CQl8IFFVT1RFUwogCQkJfCBSQU5HRQogCQkJfCBSRUFECiAJCQl8IFJFQVNTSUdOCkBAIC0xNzM5 OSw2ICsxNzU0OSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJfCBT VE9SRUQKIAkJCXwgU1RSSUNUX1AKKwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJfCBT VUJTQ1JJUFRJT04KIAkJCXwgU1VQUE9SVApAQCAtMTc0MjEsNiArMTc1NzIsNyBAQCB1bnJlc2Vy dmVkX2tleXdvcmQ6CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09NTUlU VEVECisJCQl8IFVOQ09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5LTk9XTgog CQkJfCBVTkxJU1RFTgpAQCAtMTc0ODEsMTAgKzE3NjMzLDEzIEBAIGNvbF9uYW1lX2tleXdvcmQ6 CiAJCQl8IEpTT04KIAkJCXwgSlNPTl9BUlJBWQogCQkJfCBKU09OX0FSUkFZQUdHCisJCQl8IEpT T05fRVhJU1RTCiAJCQl8IEpTT05fT0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCisJCQl8IEpT T05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNP Tl9WQUxVRQogCQkJfCBMRUFTVAogCQkJfCBOQVRJT05BTAogCQkJfCBOQ0hBUgpAQCAtMTc3MTcs NiArMTc4NzIsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IENPTU1JVFRFRAogCQkJfCBD T01QUkVTU0lPTgogCQkJfCBDT05DVVJSRU5UTFkKKwkJCXwgQ09ORElUSU9OQUwKIAkJCXwgQ09O RklHVVJBVElPTgogCQkJfCBDT05GTElDVAogCQkJfCBDT05ORUNUSU9OCkBAIC0xNzc2OSwxMSAr MTc5MjUsMTMgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBEUk9QCiAJCQl8IEVBQ0gKIAkJ CXwgRUxTRQorCQkJfCBFTVBUWV9QCiAJCQl8IEVOQUJMRV9QCiAJCQl8IEVOQ09ESU5HCiAJCQl8 IEVOQ1JZUFRFRAogCQkJfCBFTkRfUAogCQkJfCBFTlVNX1AKKwkJCXwgRVJST1JfUAogCQkJfCBF U0NBUEUKIAkJCXwgRVZFTlQKIAkJCXwgRVhDTFVERQpAQCAtMTc4NDMsMTAgKzE4MDAxLDE0IEBA IGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgSlNPTgogCQkJfCBKU09OX0FSUkFZCiAJCQl8IEpT T05fQVJSQVlBR0cKKwkJCXwgSlNPTl9FWElTVFMKIAkJCXwgSlNPTl9PQkpFQ1QKIAkJCXwgSlNP Tl9PQkpFQ1RBR0cKKwkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBKU09O X1NFUklBTElaRQorCQkJfCBKU09OX1ZBTFVFCisJCQl8IEtFRVAKIAkJCXwgS0VZCiAJCQl8IEtF WVMKIAkJCXwgTEFCRUwKQEAgLTE3OTA3LDYgKzE4MDY5LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3Jk OgogCQkJfCBPRkYKIAkJCXwgT0lEUwogCQkJfCBPTEQKKwkJCXwgT01JVAogCQkJfCBPTkxZCiAJ CQl8IE9QRVJBVE9SCiAJCQl8IE9QVElPTgpAQCAtMTc5NDQsNiArMTgxMDcsNyBAQCBiYXJlX2xh YmVsX2tleXdvcmQ6CiAJCQl8IFBST0dSQU0KIAkJCXwgUFVCTElDQVRJT04KIAkJCXwgUVVPVEUK KwkJCXwgUVVPVEVTCiAJCQl8IFJBTkdFCiAJCQl8IFJFQUQKIAkJCXwgUkVBTApAQCAtMTgwMTIs NiArMTgxNzYsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IFNUT1JBR0UKIAkJCXwgU1RP UkVECiAJCQl8IFNUUklDVF9QCisJCQl8IFNUUklOR19QCiAJCQl8IFNUUklQX1AKIAkJCXwgU1VC U0NSSVBUSU9OCiAJCQl8IFNVQlNUUklORwpAQCAtMTgwNDYsNiArMTgyMTEsNyBAQCBiYXJlX2xh YmVsX2tleXdvcmQ6CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09NTUlU VEVECisJCQl8IFVOQ09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5JUVVFCiAJ CQl8IFVOS05PV04KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDkzMDBjN2I5YWIuLjAwNjU0 YzU3YTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRl ICJ1dGlscy94bWwuaCIKQEAgLTkwLDYgKzkxLDIyIEBAIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1K c29uUGFyc2VFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblBhcnNlRXhwciAqZXhwcik7CiBz dGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvblNjYWxhckV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBK c29uU2NhbGFyRXhwciAqZXhwcik7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvblNlcmlhbGl6 ZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJCUpzb25TZXJpYWxpemVFeHByICpl eHByKTsKK3N0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBKc29uRnVuY0V4cHIgKnApOworc3RhdGljIEpzb25FeHByICp0cmFuc2Zvcm1Kc29uRXhw ckNvbW1vbihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKKwkJCQkJCQkJ CQkgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSk7CitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Kc29u UGFzc2luZ0FyZ3MoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1l LAorCQkJCQkJCQkJIEpzb25Gb3JtYXRUeXBlIGZvcm1hdCwgTGlzdCAqYXJncywKKwkJCQkJCQkJ CSBMaXN0ICoqcGFzc2luZ192YWx1ZXMsIExpc3QgKipwYXNzaW5nX25hbWVzKTsKK3N0YXRpYyBO b2RlICpjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRXhw ciAqanNleHByKTsKK3N0YXRpYyBPaWQJSnNvbkZ1bmNFeHByRGVmYXVsdFJldHVyblR5cGUoSnNv bkV4cHIgKmpzZXhwcik7CitzdGF0aWMgTm9kZSAqY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAq cHN0YXRlLCBOb2RlICpleHByLAorCQkJCQkJCWNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmlu Zyk7CitzdGF0aWMgSnNvbkNvZXJjaW9uICptYWtlSnNvbkNvZXJjaW9uKGNvbnN0IEpzb25SZXR1 cm5pbmcgKnJldHVybmluZyk7CitzdGF0aWMgTGlzdCAqSW5pdEpzb25JdGVtQ29lcmNpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAorCQkJCQkJ CQkgICBPaWQgY29udGV4dEl0ZW1UeXBlSWQpOworc3RhdGljIEpzb25CZWhhdmlvciAqdHJhbnNm b3JtSnNvbkJlaGF2aW9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkJlaGF2aW9yICpiZWhhdmlv ciwKKwkJCQkJCQkJCQkgICBKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3IsCisJCQkJ CQkJCQkJICAgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKIHN0YXRpYyBOb2RlICptYWtlX3Jv d19jb21wYXJpc29uX29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLAogCQkJCQkJ CQkJTGlzdCAqbGFyZ3MsIExpc3QgKnJhcmdzLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUg Km1ha2Vfcm93X2Rpc3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLApA QCAtMzUzLDYgKzM3MCwxMCBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQYXJzZVN0YXRlICpwc3Rh dGUsIE5vZGUgKmV4cHIpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihw c3RhdGUsIChKc29uU2VyaWFsaXplRXhwciAqKSBleHByKTsKIAkJCWJyZWFrOwogCisJCWNhc2Ug VF9Kc29uRnVuY0V4cHI6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIocHN0YXRl LCAoSnNvbkZ1bmNFeHByICopIGV4cHIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCS8q IHNob3VsZCBub3QgcmVhY2ggaGVyZSAqLwogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBu b2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhleHByKSk7CkBAIC0zMjI5LDcgKzMyNTAsNyBA QCBtYWtlSnNvbkJ5dGVhVG9UZXh0Q29udmVyc2lvbihOb2RlICpleHByLCBKc29uRm9ybWF0ICpm b3JtYXQsIGludCBsb2NhdGlvbikKIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25WYWx1ZUV4 cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1lLAogCQkJCQkg ICBKc29uVmFsdWVFeHByICp2ZSwgSnNvbkZvcm1hdFR5cGUgZGVmYXVsdF9mb3JtYXQsCi0JCQkJ CSAgIE9pZCB0YXJnZXR0eXBlKQorCQkJCQkgICBPaWQgdGFyZ2V0dHlwZSwgYm9vbCBpc2FyZykK IHsKIAlOb2RlCSAgICpleHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAq KSB2ZS0+cmF3X2V4cHIpOwogCU5vZGUJICAgKnJhd2V4cHI7CkBAIC0zMjYxLDYgKzMyODIsNDEg QEAgdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIg KmNvbnN0cnVjdE5hbWUsCiAJCWVsc2UKIAkJCWZvcm1hdCA9IHZlLT5mb3JtYXQtPmZvcm1hdF90 eXBlOwogCX0KKwllbHNlIGlmIChpc2FyZykKKwl7CisJCS8qCisJCSAqIFNwZWNpYWwgdHJlYXRt ZW50IGZvciBQQVNTSU5HIGFyZ3VtZW50cy4KKwkJICoKKwkJICogUGFzcyB0eXBlcyBzdXBwb3J0 ZWQgYnkgR2V0SnNvblBhdGhWYXIoKSAvIEpzb25JdGVtRnJvbURhdHVtKCkKKwkJICogZGlyZWN0 bHkgd2l0aG91dCBjb252ZXJ0aW5nIHRvIGpzb25bYl0uCisJCSAqLworCQlzd2l0Y2ggKGV4cHJ0 eXBlKQorCQl7CisJCQljYXNlIEJPT0xPSUQ6CisJCQljYXNlIE5VTUVSSUNPSUQ6CisJCQljYXNl IElOVDJPSUQ6CisJCQljYXNlIElOVDRPSUQ6CisJCQljYXNlIElOVDhPSUQ6CisJCQljYXNlIEZM T0FUNE9JRDoKKwkJCWNhc2UgRkxPQVQ4T0lEOgorCQkJY2FzZSBURVhUT0lEOgorCQkJY2FzZSBW QVJDSEFST0lEOgorCQkJY2FzZSBEQVRFT0lEOgorCQkJY2FzZSBUSU1FT0lEOgorCQkJY2FzZSBU SU1FVFpPSUQ6CisJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6 CisJCQkJcmV0dXJuIGV4cHI7CisKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHR5cGNhdGVnb3J5ID09 IFRZUENBVEVHT1JZX1NUUklORykKKwkJCQkJcmV0dXJuIGV4cHI7CisJCQkJLyogZWxzZSBjb252 ZXJ0IGFyZ3VtZW50IHRvIGpzb25bYl0gdHlwZSAqLworCQkJCWJyZWFrOworCQl9CisKKwkJZm9y bWF0ID0gZGVmYXVsdF9mb3JtYXQ7CisJfQogCWVsc2UgaWYgKGV4cHJ0eXBlID09IEpTT05PSUQg fHwgZXhwcnR5cGUgPT0gSlNPTkJPSUQpCiAJCWZvcm1hdCA9IEpTX0ZPUk1BVF9ERUZBVUxUOyAv KiBkbyBub3QgZm9ybWF0IGpzb25bYl0gdHlwZXMgKi8KIAllbHNlCkBAIC0zMjcyLDcgKzMzMjgs MTIgQEAgdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNo YXIgKmNvbnN0cnVjdE5hbWUsCiAJCU5vZGUJICAgKmNvZXJjZWQ7CiAJCWJvb2wJCW9ubHlfYWxs b3dfY2FzdCA9IE9pZElzVmFsaWQodGFyZ2V0dHlwZSk7CiAKLQkJaWYgKCFvbmx5X2FsbG93X2Nh c3QgJiYKKwkJLyoKKwkJICogUEFTU0lORyBhcmdzIGFyZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkg YnkgR2V0SnNvblBhdGhWYXIoKSAvCisJCSAqIEpzb25JdGVtRnJvbURhdHVtKCkuCisJCSAqLwor CQlpZiAoIWlzYXJnICYmCisJCQkhb25seV9hbGxvd19jYXN0ICYmCiAJCQlleHBydHlwZSAhPSBC WVRFQU9JRCAmJiB0eXBjYXRlZ29yeSAhPSBUWVBDQVRFR09SWV9TVFJJTkcpCiAJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQllcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLApAQCAtMzQy NSw2ICszNDg2LDExIEBAIHRyYW5zZm9ybUpzb25PdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBj b25zdCBKc29uT3V0cHV0ICpvdXRwdXQsCiAJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCiAJCQkJZXJybXNnKCJyZXR1cm5pbmcgU0VUT0YgdHlwZXMgaXMgbm90IHN1 cHBvcnRlZCBpbiBTUUwvSlNPTiBmdW5jdGlvbnMiKSk7CiAKKwlpZiAoZ2V0X3R5cHR5cGUocmV0 LT50eXBpZCkgPT0gVFlQVFlQRV9QU0VVRE8pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJyZXR1cm5pbmcg cHNldWRvLXR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVuY3Rpb25zIikpOwor CiAJaWYgKHJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVMVCkKIAkJ LyogYXNzaWduIEpTT05CIGZvcm1hdCB3aGVuIHJldHVybmluZyBqc29uYiwgb3IgSlNPTiBmb3Jt YXQgb3RoZXJ3aXNlICovCiAJCXJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9CkBAIC0zNTIxLDcg KzM1ODcsNiBAQCBjb2VyY2VKc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpl eHByLAogCS8qIHRyeSB0byBjb2VyY2UgZXhwcmVzc2lvbiB0byB0aGUgb3V0cHV0IHR5cGUgKi8K IAlyZXMgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCBleHByLCBleHBydHlwZSwKIAkJ CQkJCQkJcmV0dXJuaW5nLT50eXBpZCwgcmV0dXJuaW5nLT50eXBtb2QsCi0JLyogWFhYIHRocm93 aW5nIGVycm9ycyB3aGVuIGNhc3RpbmcgdG8gY2hhcihOKSAqLwogCQkJCQkJCQlDT0VSQ0lPTl9F WFBMSUNJVCwKIAkJCQkJCQkJQ09FUkNFX0VYUExJQ0lUX0NBU1QsCiAJCQkJCQkJCWxvY2F0aW9u KTsKQEAgLTM2MjEsNyArMzY4Niw3IEBAIHRyYW5zZm9ybUpzb25PYmplY3RDb25zdHJ1Y3RvcihQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RDb25zdHJ1Y3RvciAqY3RvcikKIAkJCU5vZGUJ ICAgKnZhbCA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTl9PQkpFQ1QoKSIs CiAJCQkJCQkJCQkJCQkJIGt2LT52YWx1ZSwKIAkJCQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFV TFQsCi0JCQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkJCSBJbnZhbGlkT2lk LCBmYWxzZSk7CiAKIAkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIGtleSk7CiAJCQlhcmdzID0gbGFw cGVuZChhcmdzLCB2YWwpOwpAQCAtMzgwOCw3ICszODczLDcgQEAgdHJhbnNmb3JtSnNvbk9iamVj dEFnZyhQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RBZ2cgKmFnZykKIAl2YWwgPSB0cmFu c2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgIkpTT05fT0JKRUNUQUdHKCkiLAogCQkJCQkJCQkg YWdnLT5hcmctPnZhbHVlLAogCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCSBJ bnZhbGlkT2lkKTsKKwkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAlhcmdzID0gbGlzdF9t YWtlMihrZXksIHZhbCk7CiAKIAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JP dXRwdXQocHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQsCkBAIC0zODY0LDkgKzM5Mjks OCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlBZ2coUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQXJyYXlB Z2cgKmFnZykKIAlPaWQJCQlhZ2dmbm9pZDsKIAlPaWQJCQlhZ2d0eXBlOwogCi0JYXJnID0gdHJh bnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZQUdHKCkiLAotCQkJCQkJCQkg YWdnLT5hcmcsCi0JCQkJCQkJCSBKU19GT1JNQVRfREVGQVVMVCwgSW52YWxpZE9pZCk7CisJYXJn ID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZQUdHKCkiLCBhZ2ct PmFyZywKKwkJCQkJCQkJIEpTX0ZPUk1BVF9ERUZBVUxULCBJbnZhbGlkT2lkLCBmYWxzZSk7CiAK IAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JPdXRwdXQocHN0YXRlLCBhZ2ct PmNvbnN0cnVjdG9yLT5vdXRwdXQsCiAJCQkJCQkJCQkJCSAgIGxpc3RfbWFrZTEoYXJnKSk7CkBA IC0zOTEzLDkgKzM5NzcsOCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlDb25zdHJ1Y3RvcihQYXJzZVN0 YXRlICpwc3RhdGUsIEpzb25BcnJheUNvbnN0cnVjdG9yICpjdG9yKQogCQl7CiAJCQlKc29uVmFs dWVFeHByICpqc3ZhbCA9IGNhc3ROb2RlKEpzb25WYWx1ZUV4cHIsIGxmaXJzdChsYykpOwogCQkJ Tm9kZQkgICAqdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZ KCkiLAotCQkJCQkJCQkJCQkJCSBqc3ZhbCwKLQkJCQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFV TFQsCi0JCQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkJCSBqc3ZhbCwgSlNf Rk9STUFUX0RFRkFVTFQsCisJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAogCQkJ YXJncyA9IGxhcHBlbmQoYXJncywgdmFsKTsKIAkJfQpAQCAtNDA3NCw3ICs0MTM3LDcgQEAgdHJh bnNmb3JtSnNvblBhcnNlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25QYXJzZUV4cHIgKmpz ZXhwcikKIAkJICogZnVuY3Rpb24tbGlrZSBDQVNUcy4KIAkJICovCiAJCWFyZyA9IHRyYW5zZm9y bUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTigpIiwganNleHByLT5leHByLAotCQkJCQkJCQkJ IEpTX0ZPUk1BVF9KU09OLCByZXR1cm5pbmctPnR5cGlkKTsKKwkJCQkJCQkJCSBKU19GT1JNQVRf SlNPTiwgcmV0dXJuaW5nLT50eXBpZCwgZmFsc2UpOwogCX0KIAogCXJldHVybiBtYWtlSnNvbkNv bnN0cnVjdG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX1BBUlNFLCBsaXN0X21ha2UxKGFyZyks IE5VTEwsCkBAIC00MTE5LDcgKzQxODIsNyBAQCB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpleHByKQogCU5vZGUJICAgKmFy ZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTl9TRVJJQUxJWkUoKSIsCiAJ CQkJCQkJCQkJCSBleHByLT5leHByLAogCQkJCQkJCQkJCQkgSlNfRk9STUFUX0pTT04sCi0JCQkJ CQkJCQkJCSBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAog CWlmIChleHByLT5vdXRwdXQpCiAJewpAQCAtNDE1MywzICs0MjE2LDU0NSBAQCB0cmFuc2Zvcm1K c29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpl eHByKQogCXJldHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09O X1NFUklBTElaRSwgbGlzdF9tYWtlMShhcmcpLAogCQkJCQkJCQkgICBOVUxMLCByZXR1cm5pbmcs IGZhbHNlLCBmYWxzZSwgZXhwci0+bG9jYXRpb24pOwogfQorCisvKgorICogVHJhbnNmb3JtIEpT T05fVkFMVUUsIEpTT05fUVVFUlksIEpTT05fRVhJU1RTIGZ1bmN0aW9ucyBpbnRvIGEgSnNvbkV4 cHIgbm9kZS4KKyAqLworc3RhdGljIE5vZGUgKgordHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNl U3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQoreworCUpzb25FeHByICAgKmpzZXhw ciA9IE5VTEw7CisJY29uc3QgY2hhciAqZnVuY19uYW1lID0gTlVMTDsKKworCXN3aXRjaCAoZnVu Yy0+b3ApCisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05f RVhJU1RTIjsKKwkJCWJyZWFrOworCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQlmdW5jX25hbWUg PSAiSlNPTl9RVUVSWSI7CisJCQlicmVhazsKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJZnVu Y19uYW1lID0gIkpTT05fVkFMVUUiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKKwkJCWJyZWFrOworCX0KKworCS8qIE9u bHkgYWxsb3cgRk9STUFUIHNwZWNpZmljYXRpb24gZm9yIEpTT05fUVVFUlkoKS4gKi8KKwlpZiAo ZnVuYy0+b3V0cHV0ICYmIGZ1bmMtPm9wICE9IEpTT05fUVVFUllfT1ApCisJeworCQlKc29uRm9y bWF0ICpmb3JtYXQgPSBmdW5jLT5vdXRwdXQtPnJldHVybmluZy0+Zm9ybWF0OworCisJCWlmIChm b3JtYXQtPmZvcm1hdF90eXBlICE9IEpTX0ZPUk1BVF9ERUZBVUxUIHx8CisJCQlmb3JtYXQtPmVu Y29kaW5nICE9IEpTX0VOQ19ERUZBVUxUKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY2Fubm90IHNwZWNpZnkgRk9S TUFUIGluIFJFVFVSTklORyBjbGF1c2Ugb2YgJXMoKSIsCisJCQkJCQkgICBmdW5jX25hbWUpLAor CQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBmb3JtYXQtPmxvY2F0aW9uKSk7CisJfQor CisJaWYgKGZ1bmMtPm9wID09IEpTT05fUVVFUllfT1AgJiYKKwkJZnVuYy0+cXVvdGVzICE9IEpT X1FVT1RFU19VTlNQRUMgJiYKKwkJKGZ1bmMtPndyYXBwZXIgPT0gSlNXX0NPTkRJVElPTkFMIHx8 CisJCSBmdW5jLT53cmFwcGVyID09IEpTV19VTkNPTkRJVElPTkFMKSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQllcnJtc2coIlNRTC9K U09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQ RVIgaXMgdXNlZCIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGZ1bmMtPmxvY2F0 aW9uKSk7CisKKworCWpzZXhwciA9IHRyYW5zZm9ybUpzb25FeHByQ29tbW9uKHBzdGF0ZSwgZnVu YywgZnVuY19uYW1lKTsKKworCXN3aXRjaCAoZnVuYy0+b3ApCisJeworCQljYXNlIEpTT05fRVhJ U1RTX09QOgorCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCisJ CQl7CisJCQkJanNleHByLT5yZXR1cm5pbmctPnR5cGlkID0gQk9PTE9JRDsKKwkJCQlqc2V4cHIt PnJldHVybmluZy0+dHlwbW9kID0gLTE7CisJCQl9CisJCQlqc2V4cHItPnJldHVybmluZy0+Zm9y bWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxUOworCQkJanNleHByLT5yZXR1cm5p bmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVGQVVMVDsKKworCQkJanNleHByLT5vbl9l cnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAorCQkJ CQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX0ZBTFNFLAorCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJl dHVybmluZyk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQlqc2V4cHIt PndyYXBwZXIgPSBmdW5jLT53cmFwcGVyOworCisJCQkvKgorCQkJICogS2VlcCBxdW90ZXMgYnkg ZGVmYXVsdCwgb21pdHRpbmcgdGhlbSBvbmx5IGlmIE9NSVQgUVVPVEVTIGlzCisJCQkgKiBzcGVj aWZpZWQuCisJCQkgKi8KKwkJCWpzZXhwci0+b21pdF9xdW90ZXMgPSAoZnVuYy0+cXVvdGVzID09 IEpTX1FVT1RFU19PTUlUKTsKKworCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5n LT50eXBpZCkpCisJCQl7CisJCQkJSnNvblJldHVybmluZyAqcmV0ID0ganNleHByLT5yZXR1cm5p bmc7CisKKwkJCQlyZXQtPnR5cGlkID0gSnNvbkZ1bmNFeHByRGVmYXVsdFJldHVyblR5cGUoanNl eHByKTsKKwkJCQlyZXQtPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5yZXN1bHRfY29l cmNpb24gPSBjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQocHN0YXRlLCBqc2V4cHIpOworCisJCQlp ZiAoZnVuYy0+b25fZW1wdHkpCisJCQkJanNleHByLT5vbl9lbXB0eSA9IHRyYW5zZm9ybUpzb25C ZWhhdmlvcihwc3RhdGUsCisJCQkJCQkJCQkJCQkJCSBmdW5jLT5vbl9lbXB0eSwKKwkJCQkJCQkJ CQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJu aW5nKTsKKwkJCWpzZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRl LCBmdW5jLT5vbl9lcnJvciwKKwkJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9OVUxMLAorCQkJ CQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05f VkFMVUVfT1A6CisJCQlpZiAoIU9pZElzVmFsaWQoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKSkK KwkJCXsKKwkJCQkvKiBNYWtlIEpTT05fVkFMVUUgcmV0dXJuIHRleHQgYnkgZGVmYXVsdCAqLwor CQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IFRFWFRPSUQ7CisJCQkJanNleHByLT5yZXR1 cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ Zm9ybWF0X3R5cGUgPSBKU19GT1JNQVRfREVGQVVMVDsKKwkJCWpzZXhwci0+cmV0dXJuaW5nLT5m b3JtYXQtPmVuY29kaW5nID0gSlNfRU5DX0RFRkFVTFQ7CisKKwkJCWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0ZSwganNleHByKTsKKworCQkJ LyoKKwkJCSAqIEluaXRpYWxpemUgZXhwcmVzc2lvbnMgdG8gY29lcmNlIHRoZSBzY2FsYXIgdmFs dWUgcmV0dXJuZWQgYnkKKwkJCSAqIEpzb25QYXRoVmFsdWUoKSB0byB0aGUgInJldHVybmluZyIg dHlwZS4KKwkJCSAqLworCQkJaWYgKGpzZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCQkJCWpzZXhw ci0+aXRlbV9jb2VyY2lvbnMgPQorCQkJCQlJbml0SnNvbkl0ZW1Db2VyY2lvbnMocHN0YXRlLCBq c2V4cHItPnJldHVybmluZywKKwkJCQkJCQkJCQkgIGV4cHJUeXBlKGpzZXhwci0+Zm9ybWF0dGVk X2V4cHIpKTsKKworCQkJaWYgKGZ1bmMtPm9uX2VtcHR5KQorCQkJCWpzZXhwci0+b25fZW1wdHkg PSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLAorCQkJCQkJCQkJCQkJCQkgZnVuYy0+b25f ZW1wdHksCisJCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX05VTEwsCisJCQkJCQkJCQkJCQkJ CSBqc2V4cHItPnJldHVybmluZyk7CisJCQlqc2V4cHItPm9uX2Vycm9yID0gdHJhbnNmb3JtSnNv bkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJyb3IsCisJCQkJCQkJCQkJCQkJIEpTT05fQkVI QVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcpOworCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpzb25GdW5jRXhwciBvcCIp OworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChOb2RlICopIGpzZXhwcjsKK30KKworLyoKKyAq IENvbW1vbiBjb2RlIGZvciBKU09OX1ZBTFVFLCBKU09OX1FVRVJZLCBKU09OX0VYSVNUUyB0cmFu c2Zvcm1hdGlvbgorICogaW50byBhIEpzb25FeHByIG5vZGUuCisgKi8KK3N0YXRpYyBKc29uRXhw ciAqCit0cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5j RXhwciAqZnVuYywKKwkJCQkJCWNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUpCit7CisJSnNvbkV4 cHIgICAqanNleHByID0gbWFrZU5vZGUoSnNvbkV4cHIpOworCU5vZGUJICAgKnBhdGhfc3BlYzsK KworCWpzZXhwci0+bG9jYXRpb24gPSBmdW5jLT5sb2NhdGlvbjsKKwlqc2V4cHItPm9wID0gZnVu Yy0+b3A7CisJanNleHByLT5mb3JtYXR0ZWRfZXhwciA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIo cHN0YXRlLCBjb25zdHJ1Y3ROYW1lLAorCQkJCQkJCQkJCQkJCWZ1bmMtPmNvbnRleHRfaXRlbSwK KwkJCQkJCQkJCQkJCQlKU19GT1JNQVRfSlNPTiwKKwkJCQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBm YWxzZSk7CisKKwlpZiAoZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikgIT0gSlNPTkJP SUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCisJCQkJZXJybXNnKCIlcygpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRo ZSBqc29uIHR5cGUiLAorCQkJCQkgICBjb25zdHJ1Y3ROYW1lKSwKKwkJCQllcnJoaW50KCJUcnkg Y2FzdGluZyB0aGUgYXJndW1lbnQgdG8ganNvbmIiKSwKKwkJCQlwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCBleHByTG9jYXRpb24oanNleHByLT5mb3JtYXR0ZWRfZXhwcikpKTsKKworCWpzZXhw ci0+Zm9ybWF0ID0gZnVuYy0+Y29udGV4dF9pdGVtLT5mb3JtYXQ7CisKKwlwYXRoX3NwZWMgPSB0 cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIGZ1bmMtPnBhdGhzcGVjKTsKKwlqc2V4cHItPnBh dGhfc3BlYyA9CisJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIHBhdGhfc3BlYywgZXhw clR5cGUocGF0aF9zcGVjKSwKKwkJCQkJCQkgIEpTT05QQVRIT0lELCAtMSwKKwkJCQkJCQkgIENP RVJDSU9OX0VYUExJQ0lULCBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKKwkJCQkJCQkgIGV4cHJMb2Nh dGlvbihwYXRoX3NwZWMpKTsKKwlpZiAoIWpzZXhwci0+cGF0aF9zcGVjKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCSBlcnJt c2coIkpTT04gcGF0aCBleHByZXNzaW9uIG11c3QgYmUgb2YgdHlwZSAlcywgbm90IG9mIHR5cGUg JXMiLAorCQkJCQkJImpzb25wYXRoIiwgZm9ybWF0X3R5cGVfYmUoZXhwclR5cGUocGF0aF9zcGVj KSkpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24ocGF0aF9z cGVjKSkpKTsKKworCS8qCisJICogVHJhbnNmb3JtIGFuZCBjb2VyY2UgdG8ganNvbltiXSBwYXNz aW5nIGFyZ3VtZW50cywgd2hvc2UgZm9ybWF0IGlzCisJICogZGV0ZXJtaW5lZCBieSBjb250ZXh0 IGl0ZW0gdHlwZS4KKwkgKi8KKwl0cmFuc2Zvcm1Kc29uUGFzc2luZ0FyZ3MocHN0YXRlLCBjb25z dHJ1Y3ROYW1lLAorCQkJCQkJCSBleHByVHlwZShqc2V4cHItPmZvcm1hdHRlZF9leHByKSA9PSBK U09OQk9JRCA/CisJCQkJCQkJIEpTX0ZPUk1BVF9KU09OQiA6IEpTX0ZPUk1BVF9KU09OLAorCQkJ CQkJCSBmdW5jLT5wYXNzaW5nLAorCQkJCQkJCSAmanNleHByLT5wYXNzaW5nX3ZhbHVlcywKKwkJ CQkJCQkgJmpzZXhwci0+cGFzc2luZ19uYW1lcyk7CisKKwlqc2V4cHItPnJldHVybmluZyA9IHRy YW5zZm9ybUpzb25PdXRwdXQocHN0YXRlLCBmdW5jLT5vdXRwdXQsIGZhbHNlKTsKKworCXJldHVy biBqc2V4cHI7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gYSBKU09OIFBBU1NJTkcgY2xhdXNlLgor ICovCitzdGF0aWMgdm9pZAordHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKFBhcnNlU3RhdGUgKnBz dGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwKKwkJCQkJCSBKc29uRm9ybWF0VHlwZSBm b3JtYXQsIExpc3QgKmFyZ3MsCisJCQkJCQkgTGlzdCAqKnBhc3NpbmdfdmFsdWVzLCBMaXN0ICoq cGFzc2luZ19uYW1lcykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCSpwYXNzaW5nX3ZhbHVlcyA9 IE5JTDsKKwkqcGFzc2luZ19uYW1lcyA9IE5JTDsKKworCWZvcmVhY2gobGMsIGFyZ3MpCisJewor CQlKc29uQXJndW1lbnQgKmFyZyA9IGNhc3ROb2RlKEpzb25Bcmd1bWVudCwgbGZpcnN0KGxjKSk7 CisJCU5vZGUJICAgKmV4cHIgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgY29uc3Ry dWN0TmFtZSwKKwkJCQkJCQkJCQkJCSAgYXJnLT52YWwsIGZvcm1hdCwKKwkJCQkJCQkJCQkJCSAg SW52YWxpZE9pZCwgdHJ1ZSk7CisKKwkJKnBhc3NpbmdfdmFsdWVzID0gbGFwcGVuZCgqcGFzc2lu Z192YWx1ZXMsIGV4cHIpOworCQkqcGFzc2luZ19uYW1lcyA9IGxhcHBlbmQoKnBhc3NpbmdfbmFt ZXMsIG1ha2VTdHJpbmcoYXJnLT5uYW1lKSk7CisJfQorfQorCisvKgorICogQ3JlYXRlIGFuIGV4 cHJlc3Npb24gdG8gY29lcmNlIHRoZSBvdXRwdXQgb2YgSlNPTl9WQUxVRSgpIC8gSlNPTl9RVUVS WSgpCisgKiB0byB0aGUgb3V0cHV0IHR5cGUsIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIE5vZGUg KgorY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIg KmpzZXhwcikKK3sKKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcgPSBqc2V4cHItPnJldHVybmlu ZzsKKwlOb2RlCSAgICpjb250ZXh0X2l0ZW0gPSBqc2V4cHItPmZvcm1hdHRlZF9leHByOworCU5v ZGUJICAgKmNvZXJjaW9uX2V4cHIgPSBOVUxMOworCWludAkJCWRlZmF1bHRfdHlwbW9kOworCU9p ZAkJCWRlZmF1bHRfdHlwaWQ7CisJYm9vbAkJb21pdF9xdW90ZXMgPQorCQlqc2V4cHItPm9wID09 IEpTT05fUVVFUllfT1AgJiYganNleHByLT5vbWl0X3F1b3RlczsKKworCUFzc2VydChyZXR1cm5p bmcpOworCisJZGVmYXVsdF90eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKGpz ZXhwcik7CisJZGVmYXVsdF90eXBtb2QgPSAtMTsKKwlpZiAocmV0dXJuaW5nLT50eXBpZCAhPSBk ZWZhdWx0X3R5cGlkIHx8CisJCXJldHVybmluZy0+dHlwbW9kICE9IGRlZmF1bHRfdHlwbW9kKQor CXsKKwkJLyoKKwkJICogV2UgYWJ1c2UgQ2FzZVRlc3RFeHByIGhlcmUgYXMgcGxhY2Vob2xkZXIg dG8gcGFzcyB0aGUgcmVzdWx0IG9mCisJCSAqIGV2YWx1YXRpbmcgdGhlIEpTT05fVkFMVUUvUVVF UlkganNvbnBhdGggZXhwcmVzc2lvbiBhcyBpbnB1dCB0byB0aGUKKwkJICogY29lcmNpb24gZXhw cmVzc2lvbi4KKwkJICovCisJCUNhc2VUZXN0RXhwciAqcGxhY2Vob2xkZXIgPSBtYWtlTm9kZShD YXNlVGVzdEV4cHIpOworCisJCXBsYWNlaG9sZGVyLT50eXBlSWQgPSBvbWl0X3F1b3RlcyA/IFRF WFRPSUQgOiBleHByVHlwZShjb250ZXh0X2l0ZW0pOworCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9 IG9taXRfcXVvdGVzID8gLTEgOiBleHByVHlwbW9kKGNvbnRleHRfaXRlbSk7CisKKwkJQXNzZXJ0 KHBsYWNlaG9sZGVyLT50eXBlSWQgPT0gZGVmYXVsdF90eXBpZCB8fAorCQkJICAgcGxhY2Vob2xk ZXItPnR5cGVJZCA9PSBURVhUT0lEKTsKKwkJQXNzZXJ0KHBsYWNlaG9sZGVyLT50eXBlTW9kID09 IGRlZmF1bHRfdHlwbW9kIHx8CisJCQkgICBwbGFjZWhvbGRlci0+dHlwZU1vZCA9PSAtMSk7CisK KwkJY29lcmNpb25fZXhwciA9IGNvZXJjZUpzb25FeHByKHBzdGF0ZSwgKE5vZGUgKikgcGxhY2Vo b2xkZXIsCisJCQkJCQkJCQkgICByZXR1cm5pbmcpOworCX0KKworCS8qCisJICogVXNlIGEgSnNv bkNvZXJjaW9uIG5vZGUgdG8gaW1wbGVtZW50IGEgbm9uLWRlZmF1bHQgUVVPVEVTIG9yIFdSQVBQ RVIKKwkgKiBiZWhhdmlvciBmb3IgSlNPTl9RVUVSWS4KKwkgKi8KKwlpZiAoY29lcmNpb25fZXhw ciA9PSBOVUxMIHx8IG9taXRfcXVvdGVzKQorCXsKKwkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9 IG1ha2VKc29uQ29lcmNpb24ocmV0dXJuaW5nKTsKKworCQljb2VyY2lvbi0+b21pdF9xdW90ZXMg PSBqc2V4cHItPm9taXRfcXVvdGVzOworCQljb2VyY2lvbi0+Y2FzdF9leHByID0gY29lcmNpb25f ZXhwcjsKKworCQlyZXR1cm4gKE5vZGUgKikgY29lcmNpb247CisJfQorCisJcmV0dXJuIGNvZXJj aW9uX2V4cHI7Cit9CisKKy8qIFJldHVybnMgdGhlIGRlZmF1bHQgdHlwZSBmb3IgYSBnaXZlbiBK c29uRXhwciBmb3IgYSBnaXZlbiBKc29uRm9ybWF0LiAqLworc3RhdGljIE9pZAorSnNvbkZ1bmNF eHByRGVmYXVsdFJldHVyblR5cGUoSnNvbkV4cHIgKmpzZXhwcikKK3sKKwlKc29uRm9ybWF0ICpm b3JtYXQgPSBqc2V4cHItPmZvcm1hdDsKKwlOb2RlCSAgICpjb250ZXh0X2l0ZW0gPSBqc2V4cHIt PmZvcm1hdHRlZF9leHByOworCisJQXNzZXJ0KGZvcm1hdCk7CisJaWYgKGZvcm1hdC0+Zm9ybWF0 X3R5cGUgPT0gSlNfRk9STUFUX0pTT05CKQorCQlyZXR1cm4gSlNPTkJPSUQ7CisJZWxzZSBpZiAo Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVMVCAmJgorCQkJIGV4cHJUeXBl KGNvbnRleHRfaXRlbSkgPT0gSlNPTkJPSUQpCisJCXJldHVybiBKU09OQk9JRDsKKworCXJldHVy biBKU09OT0lEOworfQorCisvKgorICogUmV0dXJucyBhIEpzb25Db2VyY2lvbiBub2RlIHRvIGNv ZXJjZSBhIGpzb25iLXZhbHVlZCBleHByZXNzaW9uIHRvIHRoZQorICogdGFyZ2V0IHR5cGUgZ2l2 ZW4gYnkgJ3JldHVybmluZycgdXNpbmcgZWl0aGVyIGpzb25fcG9wdWxhdGVfdHlwZSgpIG9yCisg KiBieSB1c2luZyB0aGUgdGFyZ2V0IHR5cGUncyBpbnB1dCBmdW5jdGlvbi4KKyAqLworc3RhdGlj IEpzb25Db2VyY2lvbiAqCittYWtlSnNvbkNvZXJjaW9uKGNvbnN0IEpzb25SZXR1cm5pbmcgKnJl dHVybmluZykKK3sKKwlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNvZXJj aW9uKTsKKworCWNvZXJjaW9uLT50YXJnZXR0eXBlID0gcmV0dXJuaW5nLT50eXBpZDsKKwljb2Vy Y2lvbi0+dGFyZ2V0dHlwbW9kID0gcmV0dXJuaW5nLT50eXBtb2Q7CisKKwlyZXR1cm4gY29lcmNp b247Cit9CisKKy8qCisgKiBTZXQgdXAgYSBKc29uQ29lcmNpb24gbm9kZSB0bzoKKyAqCisgKiAJ LSBjb2VyY2UgZXhwcmVzc2lvbiB0byB0aGUgb3V0cHV0IHJldHVybmluZyB0eXBlLCBvcgorICog CS0gY29lcmNlIHVzaW5nIGpzb25fcG9wdWxhdGVfdHlwZSgpIGlmIHJldHVybmluZyB0eXBlIHJl cXVpcmVzIGl0LCBvcgorICogCS0gY29lcmNlIHZpYSBJL08uCisgKi8KK3N0YXRpYyBOb2RlICoK K2NvZXJjZUpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwciwgY29uc3QgSnNv blJldHVybmluZyAqcmV0dXJuaW5nKQoreworCU5vZGUJICAgKmNvZXJjZWRfZXhwcjsKKworCWNv ZXJjZWRfZXhwciA9IGNvZXJjZUpzb25GdW5jRXhwcihwc3RhdGUsIGV4cHIsIHJldHVybmluZywg ZmFsc2UpOworCWlmIChjb2VyY2VkX2V4cHIpCisJeworCQlpZiAoY29lcmNlZF9leHByID09IGV4 cHIpCisJCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGNvZXJjZWRfZXhwcjsKKwl9CisKKwlyZXR1 cm4gKE5vZGUgKikgbWFrZUpzb25Db2VyY2lvbihyZXR1cm5pbmcpOworfQorCisvKgorICogSW5p dGlhbGl6ZSBKc29uQ29lcmNpb24gbm9kZXMgZm9yIGNvZXJjaW5nIGEgZ2l2ZW4gSlNPTiBpdGVt IHZhbHVlIHByb2R1Y2VkCisgKiBieSBKU09OX1ZBTFVFIHRvIHRoZSB0YXJnZXQgInJldHVybmlu ZyIgdHlwZTsgYWxzbyBzZWUKKyAqIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbigpLgorICov CitzdGF0aWMgTGlzdCAqCitJbml0SnNvbkl0ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCisJCQkJCSAgT2lkIGNvbnRleHRJdGVt VHlwZUlkKQoreworCUxpc3QJICAgKml0ZW1fY29lcmNpb25zID0gTklMOworCWludAkJCWk7CisJ T2lkCQkJdHlwZW9pZDsKKwlzdHJ1Y3QKKwl7CisJCUpzb25JdGVtVHlwZSBpdGVtX3R5cGU7CisJ CU9pZAkJCXR5cGVvaWQ7CisJfQkJCWl0ZW1fdHlwZXNbXSA9CisJeworCQl7SnNvbkl0ZW1UeXBl TnVsbCwgVU5LTk9XTk9JRH0sCisJCXtKc29uSXRlbVR5cGVTdHJpbmcsIFRFWFRPSUR9LAorCQl7 SnNvbkl0ZW1UeXBlTnVtZXJpYywgTlVNRVJJQ09JRH0sCisJCXtKc29uSXRlbVR5cGVCb29sZWFu LCBCT09MT0lEfSwKKwkJe0pzb25JdGVtVHlwZURhdGUsIERBVEVPSUR9LAorCQl7SnNvbkl0ZW1U eXBlVGltZSwgVElNRU9JRH0sCisJCXtKc29uSXRlbVR5cGVUaW1ldHosIFRJTUVUWk9JRH0sCisJ CXtKc29uSXRlbVR5cGVUaW1lc3RhbXAsIFRJTUVTVEFNUE9JRH0sCisJCXtKc29uSXRlbVR5cGVU aW1lc3RhbXB0eiwgVElNRVNUQU1QVFpPSUR9LAorCQl7SnNvbkl0ZW1UeXBlQ29tcG9zaXRlLCBj b250ZXh0SXRlbVR5cGVJZH0sCisJCXtKc29uSXRlbVR5cGVJbnZhbGlkLCBJbnZhbGlkT2lkfQor CX07CisKKwlmb3IgKGkgPSAwOyBPaWRJc1ZhbGlkKHR5cGVvaWQgPSBpdGVtX3R5cGVzW2ldLnR5 cGVvaWQpOyBpKyspCisJeworCQlOb2RlCSAgICpleHByOworCQlKc29uSXRlbUNvZXJjaW9uICpp dGVtX2NvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkl0ZW1Db2VyY2lvbik7CisKKwkJaWYgKHR5cGVv aWQgPT0gVU5LTk9XTk9JRCkKKwkJeworCQkJZXhwciA9IChOb2RlICopIG1ha2VOdWxsQ29uc3Qo VU5LTk9XTk9JRCwgLTEsIEludmFsaWRPaWQpOworCQl9CisJCWVsc2UKKwkJeworCQkJQ2FzZVRl c3RFeHByICpwbGFjZWhvbGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisKKwkJCS8qCisJ CQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBwbGFjZWhvbGRlciB0byBwYXNzIHRo ZSByZXN1bHQgb2YKKwkJCSAqIEpTT05fVkFMVUUganNvbnBhdGggZXhwcmVzc2lvbiB0byB0aGUg Y29lcmNpb24gZnVuY3Rpb24uCisJCQkgKi8KKwkJCXBsYWNlaG9sZGVyLT50eXBlSWQgPSBpdGVt X3R5cGVzW2ldLnR5cGVvaWQ7CisJCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IC0xOworCQkJcGxh Y2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisKKwkJCWV4cHIgPSAoTm9kZSAqKSBw bGFjZWhvbGRlcjsKKwkJfQorCisJCWl0ZW1fY29lcmNpb24tPml0ZW1fdHlwZSA9IGl0ZW1fdHlw ZXNbaV0uaXRlbV90eXBlOworCQlpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiA9IGNvZXJjZUpzb25F eHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nKTsKKwkJaXRlbV9jb2VyY2lvbnMgPSBsYXBwZW5k KGl0ZW1fY29lcmNpb25zLCBpdGVtX2NvZXJjaW9uKTsKKwl9CisKKwlyZXR1cm4gaXRlbV9jb2Vy Y2lvbnM7Cit9CisKKy8qCisgKiBSZXR1cm5zIGNvbnN0YW50IHZhbHVlcyB0byBiZSByZXR1cm5l ZCB0byB0aGUgdXNlciBmb3IgdmFyaW91cworICogbm9uLUVSUk9SIE9OIEVSUk9SL0VNUFRZIGJl aGF2aW9ycy4KKyAqCisgKiBOb3RlIHRoYXQgSlNPTl9CRUhBVklPUl9ERUZBVUxUIGV4cHJlc3Np b24gaXMgaGFuZGxlZCBieSB0aGUKKyAqIGNhbGxlciBzZXBhcmF0ZWx5LgorICovCitzdGF0aWMg Tm9kZSAqCitHZXRKc29uQmVoYXZpb3JDb25zdEV4cHIoSnNvbkJlaGF2aW9yVHlwZSBidHlwZSwg aW50IGxvY2F0aW9uKQoreworCURhdHVtCQl2YWwgPSAoRGF0dW0pIDA7CisJT2lkCQkJdHlwaWQg PSBKU09OQk9JRDsKKwlpbnQJCQlsZW4gPSAtMTsKKwlib29sCQlpc2J5dmFsID0gZmFsc2U7CisJ Ym9vbAkJaXNudWxsID0gZmFsc2U7CisJQ29uc3QJICAgKmNvbjsKKworCXN3aXRjaCAoYnR5cGUp CisJeworCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVk6CisJCQl2YWwgPSBEaXJlY3RG dW5jdGlvbkNhbGwxKGpzb25iX2luLCBDU3RyaW5nR2V0RGF0dW0oIltdIikpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVDoKKwkJCXZhbCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDEoanNvbmJfaW4sIENTdHJpbmdHZXREYXR1bSgie30iKSk7CisJCQlicmVhazsK KworCQljYXNlIEpTT05fQkVIQVZJT1JfVFJVRToKKwkJCXZhbCA9IEJvb2xHZXREYXR1bSh0cnVl KTsKKwkJCXR5cGlkID0gQk9PTE9JRDsKKwkJCWxlbiA9IHNpemVvZihib29sKTsKKwkJCWlzYnl2 YWwgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0ZBTFNFOgorCQkJ dmFsID0gQm9vbEdldERhdHVtKGZhbHNlKTsKKwkJCXR5cGlkID0gQk9PTE9JRDsKKwkJCWxlbiA9 IHNpemVvZihib29sKTsKKwkJCWlzYnl2YWwgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBK U09OX0JFSEFWSU9SX05VTEw6CisJCWNhc2UgSlNPTl9CRUhBVklPUl9VTktOT1dOOgorCQljYXNl IEpTT05fQkVIQVZJT1JfRU1QVFk6CisJCQl2YWwgPSAoRGF0dW0pIDA7CisJCQlpc251bGwgPSB0 cnVlOworCQkJdHlwaWQgPSBJTlQ0T0lEOworCQkJbGVuID0gc2l6ZW9mKGludDMyKTsKKwkJCWlz Ynl2YWwgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0RFRkFVTFQ6 CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FUlJPUjoKKwkJCS8qIEFsd2F5cyBoYW5kbGVkIGluIHRo ZSBjYWxsZXIuICovCisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU1FML0pTT04gYmVoYXZpb3IgJWQiLCBidHlw ZSk7CisJCQlicmVhazsKKwl9CisKKwljb24gPSBtYWtlQ29uc3QodHlwaWQsIC0xLCBJbnZhbGlk T2lkLCBsZW4sIHZhbCwgaXNudWxsLCBpc2J5dmFsKTsKKwljb24tPmxvY2F0aW9uID0gbG9jYXRp b247CisKKwlyZXR1cm4gKE5vZGUgKikgY29uOworfQorCisvKgorICogVHJhbnNmb3JtIGEgSlNP TiBCRUhBVklPUiBjbGF1c2UuCisgKi8KK3N0YXRpYyBKc29uQmVoYXZpb3IgKgordHJhbnNmb3Jt SnNvbkJlaGF2aW9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkJlaGF2aW9yICpiZWhhdmlvciwK KwkJCQkJICBKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3IsCisJCQkJCSAgSnNvblJl dHVybmluZyAqcmV0dXJuaW5nKQoreworCUpzb25CZWhhdmlvclR5cGUgYmVoYXZpb3JfdHlwZSA9 IGRlZmF1bHRfYmVoYXZpb3I7CisJTm9kZQkgICAqZXhwciA9IE5VTEw7CisJSnNvbkNvZXJjaW9u ICpjb2VyY2lvbiA9IE5VTEw7CisJaW50CQkJbG9jYXRpb24gPSAtMTsKKworCWlmIChiZWhhdmlv cikKKwl7CisJCWJlaGF2aW9yX3R5cGUgPSBiZWhhdmlvci0+YnR5cGU7CisJCWxvY2F0aW9uID0g YmVoYXZpb3ItPmxvY2F0aW9uOworCQlpZiAoYmVoYXZpb3JfdHlwZSA9PSBKU09OX0JFSEFWSU9S X0RFRkFVTFQpCisJCXsKKwkJCWV4cHIgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIGJl aGF2aW9yLT5leHByKTsKKwkJCWlmICghSXNBKGV4cHIsIENvbnN0KSAmJiAhSXNBKGV4cHIsIEZ1 bmNFeHByKSAmJgorCQkJCSFJc0EoZXhwciwgT3BFeHByKSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCQkgZXJybXNn KCJjYW4gb25seSBzcGVjaWZ5IGNvbnN0YW50LCBub24tYWdncmVnYXRlIgorCQkJCQkJCQkiIGZ1 bmN0aW9uLCBvciBvcGVyYXRvciBleHByZXNzaW9uIGZvciIKKwkJCQkJCQkJIiBERUZBVUxUIiks CisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oZXhwcikpKSk7 CisJCQlpZiAoY29udGFpbl92YXJfY2xhdXNlKGV4cHIpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQkJCSBlcnJtc2co IkRFRkFVTFQgZXhwcmVzc2lvbiBtdXN0IG5vdCBjb250YWluIGNvbHVtbiByZWZlcmVuY2VzIiks CisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oZXhwcikpKSk7 CisJCQlpZiAoZXhwcmVzc2lvbl9yZXR1cm5zX3NldChleHByKSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCQkgZXJy bXNnKCJERUZBVUxUIGV4cHJlc3Npb24gbXVzdCBub3QgcmV0dXJuIGEgc2V0IiksCisJCQkJCQlw YXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oZXhwcikpKSk7CisJCX0KKwl9 CisKKwlpZiAoZXhwciA9PSBOVUxMICYmIGJlaGF2aW9yX3R5cGUgIT0gSlNPTl9CRUhBVklPUl9F UlJPUikKKwkJZXhwciA9IEdldEpzb25CZWhhdmlvckNvbnN0RXhwcihiZWhhdmlvcl90eXBlLCBs b2NhdGlvbik7CisKKwlpZiAoZXhwcikKKwl7CisJCU5vZGUJICAgKmNvZXJjZWRfZXhwciA9IGV4 cHI7CisJCWJvb2wJCWlzbnVsbCA9IChJc0EoZXhwciwgQ29uc3QpICYmICgoQ29uc3QgKikgZXhw ciktPmNvbnN0aXNudWxsKTsKKworCQkvKgorCQkgKiBDb2VyY2UgTlVMTHMgYW5kICJpbnRlcm5h bCIgKHRoYXQgaXMsIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIpCisJCSAqIGpzb25iLXZhbHVl ZCBleHByZXNzaW9ucyB3aXRoIGEgSnNvbkNvZXJjaW9uIG5vZGUuCisJCSAqCisJCSAqIEZvciBv dGhlciAodXNlci1zcGVjaWZpZWQpIG5vbi1OVUxMIHZhbHVlcywgdHJ5IHRvIGZpbmQgYSBjYXN0 IGFuZAorCQkgKiBlcnJvciBvdXQgaWYgb25lIGlzIG5vdCBmb3VuZC4KKwkJICovCisJCWlmIChp c251bGwgfHwKKwkJCShleHByVHlwZShleHByKSA9PSBKU09OQk9JRCAmJgorCQkJIGJlaGF2aW9y X3R5cGUgPT0gZGVmYXVsdF9iZWhhdmlvcikpCisJCQljb2VyY2lvbiA9IG1ha2VKc29uQ29lcmNp b24ocmV0dXJuaW5nKTsKKwkJZWxzZQorCQkJY29lcmNlZF9leHByID0KKwkJCQljb2VyY2VfdG9f dGFyZ2V0X3R5cGUocHN0YXRlLCBleHByLCBleHByVHlwZShleHByKSwKKwkJCQkJCQkJCSAgcmV0 dXJuaW5nLT50eXBpZCwgcmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkgIENPRVJDSU9OX0VY UExJQ0lULCBDT0VSQ0VfRVhQTElDSVRfQ0FTVCwKKwkJCQkJCQkJCSAgZXhwckxvY2F0aW9uKChO b2RlICopIGJlaGF2aW9yKSk7CisKKwkJaWYgKGNvZXJjZWRfZXhwciA9PSBOVUxMKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VSQ0UpLAorCQkJCQll cnJtc2coImNhbm5vdCBjYXN0IGJlaGF2aW9yIGV4cHJlc3Npb24gb2YgdHlwZSAlcyB0byAlcyIs CisJCQkJCQkgICBmb3JtYXRfdHlwZV9iZShleHByVHlwZShleHByKSksCisJCQkJCQkgICBmb3Jt YXRfdHlwZV9iZShyZXR1cm5pbmctPnR5cGlkKSksCisJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihw c3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkpOworCQllbHNlCisJCQlleHByID0gY29lcmNlZF9l eHByOworCX0KKworCXJldHVybiBtYWtlSnNvbkJlaGF2aW9yKGJlaGF2aW9yX3R5cGUsIGV4cHIs IGNvZXJjaW9uLCBsb2NhdGlvbik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXgg MGNkOTA0ZjhkYS4uZWE1YWM2YmFmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAt MTk4OSw2ICsxOTg5LDIxIEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFy ICoqbmFtZSkKIAkJCS8qIG1ha2UgSlNPTl9BUlJBWUFHRyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVu Y3Rpb24gKi8KIAkJCSpuYW1lID0gImpzb25fYXJyYXlhZ2ciOwogCQkJcmV0dXJuIDI7CisJCWNh c2UgVF9Kc29uRnVuY0V4cHI6CisJCQkvKiBtYWtlIFNRTC9KU09OIGZ1bmN0aW9ucyBhY3QgbGlr ZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KKwkJCXN3aXRjaCAoKChKc29uRnVuY0V4cHIgKikgbm9k ZSktPm9wKQorCQkJeworCQkJCWNhc2UgSlNPTl9FWElTVFNfT1A6CisJCQkJCSpuYW1lID0gImpz b25fZXhpc3RzIjsKKwkJCQkJcmV0dXJuIDI7CisJCQkJY2FzZSBKU09OX1FVRVJZX09QOgorCQkJ CQkqbmFtZSA9ICJqc29uX3F1ZXJ5IjsKKwkJCQkJcmV0dXJuIDI7CisJCQkJY2FzZSBKU09OX1ZB TFVFX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3ZhbHVlIjsKKwkJCQkJcmV0dXJuIDI7CisJCQl9 CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0dGluZy5jCmluZGV4IDgzZTFmMTI2NWMuLjQxYmIwZTA1NDYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdHRpbmcuYwpAQCAtNDQyNiw2ICs0NDI2LDUwIEBAIHBhcnNlX2RhdGV0aW1lKHRleHQg KmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9pZCBjb2xsaWQsIGJvb2wgc3RyaWN0LAogCX0KIH0KIAor LyoKKyAqIFBhcnNlcyB0aGUgZGF0ZXRpbWUgZm9ybWF0IHN0cmluZyBpbiAnZm10X3N0cicgYW5k IHJldHVybnMgdHJ1ZSBpZiBpdAorICogY29udGFpbnMgYSB0aW1lem9uZSBzcGVjaWZpZXIsIGZh bHNlIGlmIG5vdC4KKyAqLworYm9vbAorZGF0ZXRpbWVfZm9ybWF0X2hhc190eihjb25zdCBjaGFy ICpmbXRfc3RyKQoreworCWJvb2wJCWluY2FjaGU7CisJaW50CQkJZm10X2xlbiA9IHN0cmxlbihm bXRfc3RyKTsKKwlpbnQJCQlyZXN1bHQ7CisJRm9ybWF0Tm9kZSAqZm9ybWF0OworCisJaWYgKGZt dF9sZW4gPiBEQ0hfQ0FDSEVfU0laRSkKKwl7CisJCS8qCisJCSAqIEFsbG9jYXRlIG5ldyBtZW1v cnkgaWYgZm9ybWF0IHBpY3R1cmUgaXMgYmlnZ2VyIHRoYW4gc3RhdGljIGNhY2hlCisJCSAqIGFu ZCBkbyBub3QgdXNlIGNhY2hlIChjYWxsIHBhcnNlciBhbHdheXMpCisJCSAqLworCQlpbmNhY2hl ID0gZmFsc2U7CisKKwkJZm9ybWF0ID0gKEZvcm1hdE5vZGUgKikgcGFsbG9jKChmbXRfbGVuICsg MSkgKiBzaXplb2YoRm9ybWF0Tm9kZSkpOworCisJCXBhcnNlX2Zvcm1hdChmb3JtYXQsIGZtdF9z dHIsIERDSF9rZXl3b3JkcywKKwkJCQkJIERDSF9zdWZmLCBEQ0hfaW5kZXgsIERDSF9GTEFHLCBO VUxMKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogVXNlIGNhY2hlIGJ1ZmZlcnMKKwkJICov CisJCURDSENhY2hlRW50cnkgKmVudCA9IERDSF9jYWNoZV9mZXRjaChmbXRfc3RyLCBmYWxzZSk7 CisKKwkJaW5jYWNoZSA9IHRydWU7CisJCWZvcm1hdCA9IGVudC0+Zm9ybWF0OworCX0KKworCXJl c3VsdCA9IERDSF9kYXRldGltZV90eXBlKGZvcm1hdCk7CisKKwlpZiAoIWluY2FjaGUpCisJCXBm cmVlKGZvcm1hdCk7CisKKwlyZXR1cm4gcmVzdWx0ICYgRENIX1pPTkVEOworfQorCiAvKgogICog ZG9fdG9fdGltZXN0YW1wOiBzaGFyZWQgY29kZSBmb3IgdG9fdGltZXN0YW1wIGFuZCB0b19kYXRl CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCBjMTBiM2ZiZWRmLi42ZDc5N2MwOTUzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmIuYwpAQCAtMjE2MywzICsyMTYzLDM0IEBAIGpzb25iX2Zsb2F0OChQR19G VU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0RBVFVNKHJldFZhbHVlKTsKIH0KKworLyoKKyAq IENvbnZlcnQganNvbmIgdG8gYSBDLXN0cmluZyBzdHJpcHBpbmcgcXVvdGVzIGZyb20gc2NhbGFy IHN0cmluZ3MuCisgKi8KK2NoYXIgKgorSnNvbmJVbnF1b3RlKEpzb25iICpqYikKK3sKKwlpZiAo SkJfUk9PVF9JU19TQ0FMQVIoamIpKQorCXsKKwkJSnNvbmJWYWx1ZQl2OworCisJCSh2b2lkKSBK c29uYkV4dHJhY3RTY2FsYXIoJmpiLT5yb290LCAmdik7CisKKwkJaWYgKHYudHlwZSA9PSBqYnZT dHJpbmcpCisJCQlyZXR1cm4gcG5zdHJkdXAodi52YWwuc3RyaW5nLnZhbCwgdi52YWwuc3RyaW5n Lmxlbik7CisJCWVsc2UgaWYgKHYudHlwZSA9PSBqYnZCb29sKQorCQkJcmV0dXJuIHBzdHJkdXAo di52YWwuYm9vbGVhbiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQllbHNlIGlmICh2LnR5cGUgPT0g amJ2TnVtZXJpYykKKwkJCXJldHVybiBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxs MShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0odi52YWwubnVt ZXJpYykpKTsKKwkJZWxzZSBpZiAodi50eXBlID09IGpidk51bGwpCisJCQlyZXR1cm4gcHN0cmR1 cCgibnVsbCIpOworCQllbHNlCisJCXsKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNv bmIgdmFsdWUgdHlwZSAlZCIsIHYudHlwZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwll bHNlCisJCXJldHVybiBKc29uYlRvQ1N0cmluZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIp KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCAxYjBmNDk0MzI5Li41NGRiZDdl NzlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC0yODMwLDcgKzI4MzAsOSBAQCBw b3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgLyogY29u dGV4dCAqLwogCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKIAotCWlmIChqYnYtPnR5cGUgIT0gamJ2 QmluYXJ5IHx8ICFKc29uQ29udGFpbmVySXNBcnJheShqYmMpKQorCS8qIEV2ZW4gc2NhbGFycyBj YW4gZW5kIHVwIGhlcmUgdGhhbmtzIHRvIEpzb25QYXRoUXVlcnkvVmFsdWUoKS4gKi8KKwlpZiAo amJ2LT50eXBlICE9IGpidkJpbmFyeSB8fCAhSnNvbkNvbnRhaW5lcklzQXJyYXkoamJjKSB8fAor CQlKc29uQ29udGFpbmVySXNTY2FsYXIoamJjKSkKIAl7CiAJCXBvcHVsYXRlX2FycmF5X3JlcG9y dF9leHBlY3RlZF9hcnJheShjdHgsIG5kaW0gLSAxKTsKIAkJLyogR2V0dGluZyBoZXJlIG1lYW5z IHRoZSBlcnJvciB3YXMgcmVwb3J0ZWQgc29mdGx5LiAqLwpAQCAtMjgzOCw4ICsyODQwLDYgQEAg cG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIC8qIGNv bnRleHQgKi8KIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCUFzc2VydCghSnNvbkNvbnRhaW5lcklz U2NhbGFyKGpiYykpOwotCiAJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChqYmMpOwogCiAJdG9rID0g SnNvbmJJdGVyYXRvck5leHQoJml0LCAmdmFsLCB0cnVlKTsKQEAgLTMzMjMsNiArMzMyMyw2MiBA QCBwcmVwYXJlX2NvbHVtbl9jYWNoZShDb2x1bW5JT0RhdGEgKmNvbHVtbiwKIAlSZWxlYXNlU3lz Q2FjaGUodHVwKTsKIH0KIAorLyoKKyAqIFBvcHVsYXRlIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9m IHNwZWNpZmllZCB0eXBlIGZyb20gYSBnaXZlbiBqc29uL2pzb25iCisgKiB2YWx1ZSAnanNvbl92 YWwnLiAgJ2NhY2hlJyBpcyBjYWxsZXItc3BlY2lmaWVkIHBvaW50ZXIgdG8gc2F2ZSB0aGUKKyAq IENvbHVtbklPRGF0YSB0aGF0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgb24gdGhlIDFzdCBjYWxsIGFu ZCB0aGVuIHJldXNlZAorICogZHVyaW5nIGFueSBzdWJzZXF1ZW50IGNhbGxzLiAgJ21jeHQnIGdp dmVzIHRoZSBtZW1vcnkgY29udGV4dCB0byBhbGxvY2F0ZQorICogdGhlIENvbHVtbklPRGF0YSBh bmQgYW55IG90aGVyIHN1YnNpZGlhcnkgbWVtb3J5IGluLiAgJ2VzY29udGV4dCcsCisgKiBpZiBu b3QgTlVMTCwgdGVsbHMgdGhhdCBhbnkgZXJyb3JzIHRoYXQgb2NjdXIgc2hvdWxkIGJlIGhhbmRs ZWQgc29mdGx5LgorICovCitEYXR1bQoranNvbl9wb3B1bGF0ZV90eXBlKERhdHVtIGpzb25fdmFs LCBPaWQganNvbl90eXBlLAorCQkJCSAgIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCSAg IHZvaWQgKipjYWNoZSwgTWVtb3J5Q29udGV4dCBtY3h0LAorCQkJCSAgIGJvb2wgKmlzbnVsbCwK KwkJCQkgICBOb2RlICplc2NvbnRleHQpCit7CisJSnNWYWx1ZQkJanN2ID0gezB9OworCUpzb25i VmFsdWUJamJ2OworCisJanN2LmlzX2pzb24gPSBqc29uX3R5cGUgPT0gSlNPTk9JRDsKKworCWlm ICgqaXNudWxsKQorCXsKKwkJaWYgKGpzdi5pc19qc29uKQorCQkJanN2LnZhbC5qc29uLnN0ciA9 IE5VTEw7CisJCWVsc2UKKwkJCWpzdi52YWwuanNvbmIgPSBOVUxMOworCX0KKwllbHNlIGlmIChq c3YuaXNfanNvbikKKwl7CisJCXRleHQJICAgKmpzb24gPSBEYXR1bUdldFRleHRQUChqc29uX3Zh bCk7CisKKwkJanN2LnZhbC5qc29uLnN0ciA9IFZBUkRBVEFfQU5ZKGpzb24pOworCQlqc3YudmFs Lmpzb24ubGVuID0gVkFSU0laRV9BTllfRVhIRFIoanNvbik7CisJCWpzdi52YWwuanNvbi50eXBl ID0gSlNPTl9UT0tFTl9JTlZBTElEOyAvKiBub3QgdXNlZCBpbgorCQkJCQkJCQkJCQkJICogcG9w dWxhdGVfY29tcG9zaXRlKCkgKi8KKwl9CisJZWxzZQorCXsKKwkJSnNvbmIJICAgKmpzb25iID0g RGF0dW1HZXRKc29uYlAoanNvbl92YWwpOworCisJCWpzdi52YWwuanNvbmIgPSAmamJ2OworCisJ CS8qIGZpbGwgYmluYXJ5IGpzb25iIHZhbHVlIHBvaW50aW5nIHRvIGpiICovCisJCWpidi50eXBl ID0gamJ2QmluYXJ5OworCQlqYnYudmFsLmJpbmFyeS5kYXRhID0gJmpzb25iLT5yb290OworCQlq YnYudmFsLmJpbmFyeS5sZW4gPSBWQVJTSVpFKGpzb25iKSAtIFZBUkhEUlNaOworCX0KKworCWlm ICgqY2FjaGUgPT0gTlVMTCkKKwkJKmNhY2hlID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhtY3h0 LCBzaXplb2YoQ29sdW1uSU9EYXRhKSk7CisKKwlyZXR1cm4gcG9wdWxhdGVfcmVjb3JkX2ZpZWxk KCpjYWNoZSwgdHlwaWQsIHR5cG1vZCwgTlVMTCwgbWN4dCwKKwkJCQkJCQkJIFBvaW50ZXJHZXRE YXR1bShOVUxMKSwgJmpzdiwgaXNudWxsLAorCQkJCQkJCQkgZXNjb250ZXh0KTsKK30KKwogLyog cmVjdXJzaXZlbHkgcG9wdWxhdGUgYSByZWNvcmQgZmllbGQgb3IgYW4gYXJyYXkgZWxlbWVudCBm cm9tIGEganNvbi9qc29uYiB2YWx1ZSAqLwogc3RhdGljIERhdHVtCiBwb3B1bGF0ZV9yZWNvcmRf ZmllbGQoQ29sdW1uSU9EYXRhICpjb2wsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbnBhdGguYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCmluZGV4IGQw MmMwM2UwMTQuLjIwMDc3YjY3YTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29ucGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCkBAIC02OCw3 ICs2OCw5IEBACiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJub2Rlcy9t aXNjbm9kZXMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rl RnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2Zv cm1hdHRpbmcuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNv bnBhdGguaCIKIApAQCAtMTExMCwzICsxMTEyLDI2MCBAQCBqc3BHZXRBcnJheVN1YnNjcmlwdChK c29uUGF0aEl0ZW0gKnYsIEpzb25QYXRoSXRlbSAqZnJvbSwgSnNvblBhdGhJdGVtICp0bywKIAog CXJldHVybiB0cnVlOwogfQorCisvKiBTUUwvSlNPTiBkYXRhdHlwZSBzdGF0dXM6ICovCitlbnVt IEpzb25QYXRoRGF0YXR5cGVTdGF0dXMKK3sKKwlqcGRzTm9uRGF0ZVRpbWUsCQkJLyogbnVsbCwg Ym9vbCwgbnVtZXJpYywgc3RyaW5nLCBhcnJheSwgb2JqZWN0ICovCisJanBkc1Vua25vd25EYXRl VGltZSwJCS8qIHVua25vd24gZGF0ZXRpbWUgdHlwZSAqLworCWpwZHNEYXRlVGltZVpvbmVkLAkJ CS8qIHRpbWV0eiwgdGltZXN0YW1wdHogKi8KKwlqcGRzRGF0ZVRpbWVOb25ab25lZCwJCS8qIHRp bWUsIHRpbWVzdGFtcCwgZGF0ZSAqLworfTsKKworLyogQ29udGV4dCBmb3IganNwSXNNdXRhYmxl V2Fsa2VyKCkgKi8KK3N0cnVjdCBKc29uUGF0aE11dGFibGVDb250ZXh0Cit7CisJTGlzdAkgICAq dmFybmFtZXM7CQkvKiBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzICovCisJTGlzdAkgICAqdmFyZXhw cnM7CQkvKiBsaXN0IG9mIHZhcmlhYmxlIGV4cHJlc3Npb25zICovCisJZW51bSBKc29uUGF0aERh dGF0eXBlU3RhdHVzIGN1cnJlbnQ7CS8qIHN0YXR1cyBvZiBAIGl0ZW0gKi8KKwlib29sCQlsYXg7 CQkJLyoganNvbnBhdGggaXMgbGF4IG9yIHN0cmljdCAqLworCWJvb2wJCW11dGFibGU7CQkvKiBy ZXN1bHRpbmcgbXV0YWJpbGl0eSBzdGF0dXMgKi8KK307CisKK3N0YXRpYyBlbnVtIEpzb25QYXRo RGF0YXR5cGVTdGF0dXMganNwSXNNdXRhYmxlV2Fsa2VyKEpzb25QYXRoSXRlbSAqanBpLAorCQkJ CQkJCQkJCQkJCSAgc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCk7CisKKy8qCisg KiBGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGpzb25wYXRoIGV4cHJlc3Npb24gaXMgbXV0YWJs ZSB0byBiZSB1c2VkIGluIHRoZQorICogcGxhbm5lciBmdW5jdGlvbiBjb250YWluX211dGFibGVf ZnVuY3Rpb25zKCkuCisgKi8KK2Jvb2wKK2pzcElzTXV0YWJsZShKc29uUGF0aCAqcGF0aCwgTGlz dCAqdmFybmFtZXMsIExpc3QgKnZhcmV4cHJzKQoreworCXN0cnVjdCBKc29uUGF0aE11dGFibGVD b250ZXh0IGN4dDsKKwlKc29uUGF0aEl0ZW0ganBpOworCisJY3h0LnZhcm5hbWVzID0gdmFybmFt ZXM7CisJY3h0LnZhcmV4cHJzID0gdmFyZXhwcnM7CisJY3h0LmN1cnJlbnQgPSBqcGRzTm9uRGF0 ZVRpbWU7CisJY3h0LmxheCA9IChwYXRoLT5oZWFkZXIgJiBKU09OUEFUSF9MQVgpICE9IDA7CisJ Y3h0Lm11dGFibGUgPSBmYWxzZTsKKworCWpzcEluaXQoJmpwaSwgcGF0aCk7CisJKHZvaWQpIGpz cElzTXV0YWJsZVdhbGtlcigmanBpLCAmY3h0KTsKKworCXJldHVybiBjeHQubXV0YWJsZTsKK30K KworLyoKKyAqIFJlY3Vyc2l2ZSB3YWxrZXIgZm9yIGpzcElzTXV0YWJsZSgpCisgKi8KK3N0YXRp YyBlbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMKK2pzcElzTXV0YWJsZVdhbGtlcihKc29uUGF0 aEl0ZW0gKmpwaSwgc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCkKK3sKKwlKc29u UGF0aEl0ZW0gbmV4dDsKKwllbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMgc3RhdHVzID0ganBk c05vbkRhdGVUaW1lOworCisJd2hpbGUgKCFjeHQtPm11dGFibGUpCisJeworCQlKc29uUGF0aEl0 ZW0gYXJnOworCQllbnVtIEpzb25QYXRoRGF0YXR5cGVTdGF0dXMgbGVmdFN0YXR1czsKKwkJZW51 bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzIHJpZ2h0U3RhdHVzOworCisJCXN3aXRjaCAoanBpLT50 eXBlKQorCQl7CisJCQljYXNlIGpwaVJvb3Q6CisJCQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9u RGF0ZVRpbWUpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUN1cnJlbnQ6CisJCQkJQXNzZXJ0 KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCXN0YXR1cyA9IGN4dC0+Y3VycmVudDsK KwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlGaWx0ZXI6CisJCQkJeworCQkJCQllbnVtIEpzb25Q YXRoRGF0YXR5cGVTdGF0dXMgcHJldlN0YXR1cyA9IGN4dC0+Y3VycmVudDsKKworCQkJCQljeHQt PmN1cnJlbnQgPSBzdGF0dXM7CisJCQkJCWpzcEdldEFyZyhqcGksICZhcmcpOworCQkJCQlqc3BJ c011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKworCQkJCQljeHQtPmN1cnJlbnQgPSBwcmV2U3Rh dHVzOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UganBpVmFyaWFibGU6CisJCQkJewor CQkJCQlpbnQzMgkJbGVuOworCQkJCQljb25zdCBjaGFyICpuYW1lID0ganNwR2V0U3RyaW5nKGpw aSwgJmxlbik7CisJCQkJCUxpc3RDZWxsICAgKmxjMTsKKwkJCQkJTGlzdENlbGwgICAqbGMyOwor CisJCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKworCQkJCQlmb3Jib3Ro KGxjMSwgY3h0LT52YXJuYW1lcywgbGMyLCBjeHQtPnZhcmV4cHJzKQorCQkJCQl7CisJCQkJCQlT dHJpbmcJICAgKnZhcm5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGxjMSk7CisJCQkJCQlOb2Rl CSAgICp2YXJleHByID0gbGZpcnN0KGxjMik7CisKKwkJCQkJCWlmIChzdHJuY21wKHZhcm5hbWUt PnN2YWwsIG5hbWUsIGxlbikpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCXN3aXRjaCAoZXhw clR5cGUodmFyZXhwcikpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBEQVRFT0lEOgorCQkJCQkJCWNh c2UgVElNRU9JRDoKKwkJCQkJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkJCQkJc3RhdHVzID0g anBkc0RhdGVUaW1lTm9uWm9uZWQ7CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJY2FzZSBUSU1F VFpPSUQ6CisJCQkJCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQkJCQkJc3RhdHVzID0ganBk c0RhdGVUaW1lWm9uZWQ7CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJ CQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwor CQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIGpwaUVx dWFsOgorCQkJY2FzZSBqcGlOb3RFcXVhbDoKKwkJCWNhc2UganBpTGVzczoKKwkJCWNhc2UganBp R3JlYXRlcjoKKwkJCWNhc2UganBpTGVzc09yRXF1YWw6CisJCQljYXNlIGpwaUdyZWF0ZXJPckVx dWFsOgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJCQlqc3BHZXRM ZWZ0QXJnKGpwaSwgJmFyZyk7CisJCQkJbGVmdFN0YXR1cyA9IGpzcElzTXV0YWJsZVdhbGtlcigm YXJnLCBjeHQpOworCisJCQkJanNwR2V0UmlnaHRBcmcoanBpLCAmYXJnKTsKKwkJCQlyaWdodFN0 YXR1cyA9IGpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCisJCQkJLyoKKwkJCQkgKiBD b21wYXJpc29uIG9mIGRhdGV0aW1lIHR5cGUgd2l0aCBkaWZmZXJlbnQgdGltZXpvbmUgc3RhdHVz CisJCQkJICogaXMgbXV0YWJsZS4KKwkJCQkgKi8KKwkJCQlpZiAobGVmdFN0YXR1cyAhPSBqcGRz Tm9uRGF0ZVRpbWUgJiYKKwkJCQkJcmlnaHRTdGF0dXMgIT0ganBkc05vbkRhdGVUaW1lICYmCisJ CQkJCShsZWZ0U3RhdHVzID09IGpwZHNVbmtub3duRGF0ZVRpbWUgfHwKKwkJCQkJIHJpZ2h0U3Rh dHVzID09IGpwZHNVbmtub3duRGF0ZVRpbWUgfHwKKwkJCQkJIGxlZnRTdGF0dXMgIT0gcmlnaHRT dGF0dXMpKQorCQkJCQljeHQtPm11dGFibGUgPSB0cnVlOworCQkJCWJyZWFrOworCisJCQljYXNl IGpwaU5vdDoKKwkJCWNhc2UganBpSXNVbmtub3duOgorCQkJY2FzZSBqcGlFeGlzdHM6CisJCQlj YXNlIGpwaVBsdXM6CisJCQljYXNlIGpwaU1pbnVzOgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBk c05vbkRhdGVUaW1lKTsKKwkJCQlqc3BHZXRBcmcoanBpLCAmYXJnKTsKKwkJCQlqc3BJc011dGFi bGVXYWxrZXIoJmFyZywgY3h0KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlBbmQ6CisJCQlj YXNlIGpwaU9yOgorCQkJY2FzZSBqcGlBZGQ6CisJCQljYXNlIGpwaVN1YjoKKwkJCWNhc2UganBp TXVsOgorCQkJY2FzZSBqcGlEaXY6CisJCQljYXNlIGpwaU1vZDoKKwkJCWNhc2UganBpU3RhcnRz V2l0aDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJanNwR2V0 TGVmdEFyZyhqcGksICZhcmcpOworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOwor CQkJCWpzcEdldFJpZ2h0QXJnKGpwaSwgJmFyZyk7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZh cmcsIGN4dCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpSW5kZXhBcnJheToKKwkJCQlmb3Ig KGludCBpID0gMDsgaSA8IGpwaS0+Y29udGVudC5hcnJheS5uZWxlbXM7IGkrKykKKwkJCQl7CisJ CQkJCUpzb25QYXRoSXRlbSBmcm9tOworCQkJCQlKc29uUGF0aEl0ZW0gdG87CisKKwkJCQkJaWYg KGpzcEdldEFycmF5U3Vic2NyaXB0KGpwaSwgJmZyb20sICZ0bywgaSkpCisJCQkJCQlqc3BJc011 dGFibGVXYWxrZXIoJnRvLCBjeHQpOworCisJCQkJCWpzcElzTXV0YWJsZVdhbGtlcigmZnJvbSwg Y3h0KTsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKworCQkJY2FzZSBqcGlBbnlBcnJh eToKKwkJCQlpZiAoIWN4dC0+bGF4KQorCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UganBpQW55OgorCQkJCWlmIChqcGktPmNvbnRlbnQuYW55Ym91 bmRzLmZpcnN0ID4gMCkKKwkJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCWJyZWFr OworCisJCQljYXNlIGpwaURhdGV0aW1lOgorCQkJCWlmIChqcGktPmNvbnRlbnQuYXJnKQorCQkJ CXsKKwkJCQkJY2hhcgkgICAqdGVtcGxhdGU7CisKKwkJCQkJanNwR2V0QXJnKGpwaSwgJmFyZyk7 CisJCQkJCWlmIChhcmcudHlwZSAhPSBqcGlTdHJpbmcpCisJCQkJCXsKKwkJCQkJCXN0YXR1cyA9 IGpwZHNOb25EYXRlVGltZTsKKwkJCQkJCWJyZWFrOwkvKiB0aGVyZSB3aWxsIGJlIHJ1bnRpbWUg ZXJyb3IgKi8KKwkJCQkJfQorCisJCQkJCXRlbXBsYXRlID0ganNwR2V0U3RyaW5nKCZhcmcsIE5V TEwpOworCQkJCQlpZiAoZGF0ZXRpbWVfZm9ybWF0X2hhc190eih0ZW1wbGF0ZSkpCisJCQkJCQlz dGF0dXMgPSBqcGRzRGF0ZVRpbWVab25lZDsKKwkJCQkJZWxzZQorCQkJCQkJc3RhdHVzID0ganBk c0RhdGVUaW1lTm9uWm9uZWQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXN0YXR1cyA9 IGpwZHNVbmtub3duRGF0ZVRpbWU7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUxp a2VSZWdleDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJanNw SW5pdEJ5QnVmZmVyKCZhcmcsIGpwaS0+YmFzZSwganBpLT5jb250ZW50Lmxpa2VfcmVnZXguZXhw cik7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJlYWs7CisKKwkJ CQkvKiBsaXRlcmFscyAqLworCQkJY2FzZSBqcGlOdWxsOgorCQkJY2FzZSBqcGlTdHJpbmc6CisJ CQljYXNlIGpwaU51bWVyaWM6CisJCQljYXNlIGpwaUJvb2w6CisJCQkJLyogYWNjZXNzb3JzICov CisJCQljYXNlIGpwaUtleToKKwkJCWNhc2UganBpQW55S2V5OgorCQkJCS8qIHNwZWNpYWwgaXRl bXMgKi8KKwkJCWNhc2UganBpU3Vic2NyaXB0OgorCQkJY2FzZSBqcGlMYXN0OgorCQkJCS8qIGl0 ZW0gbWV0aG9kcyAqLworCQkJY2FzZSBqcGlUeXBlOgorCQkJY2FzZSBqcGlTaXplOgorCQkJY2Fz ZSBqcGlBYnM6CisJCQljYXNlIGpwaUZsb29yOgorCQkJY2FzZSBqcGlDZWlsaW5nOgorCQkJY2Fz ZSBqcGlEb3VibGU6CisJCQljYXNlIGpwaUtleVZhbHVlOgorCQkJCXN0YXR1cyA9IGpwZHNOb25E YXRlVGltZTsKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICghanNwR2V0TmV4dChqcGksICZuZXh0 KSkKKwkJCWJyZWFrOworCisJCWpwaSA9ICZuZXh0OworCX0KKworCXJldHVybiBzdGF0dXM7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCBjYjJlYTA0OGMzLi5jZWMw ZjNkZDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTIzNCw2ICsy MzQsMTIgQEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29sUmVzdWx0KEpzb25Q YXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkgICBKc29uUGF0aEl0ZW0gKmpzcCwgSnNv blZhbHVlTGlzdCAqZm91bmQsIEpzb25QYXRoQm9vbCByZXMpOwogc3RhdGljIHZvaWQgZ2V0SnNv blBhdGhJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAog CQkJCQkJCUpzb25iVmFsdWUgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpHZXRKc29uUGF0 aFZhcih2b2lkICpjeHQsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJCQkJCQkg IEpzb25iVmFsdWUgKmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVjdElkKTsKK3N0YXRpYyBpbnQJ Q291bnRKc29uUGF0aFZhcnModm9pZCAqY3h0KTsKK3N0YXRpYyB2b2lkIEpzb25JdGVtRnJvbURh dHVtKERhdHVtIHZhbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJICBKc29uYlZh bHVlICpyZXMpOworc3RhdGljIHZvaWQgSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0oSnNvbmJW YWx1ZSAqamJ2LCBEYXR1bSBudW0pOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhWYXJpYWJsZShK c29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCUpzb25QYXRoSXRlbSAqdmFyaWFibGUs IEpzb25iVmFsdWUgKnZhbHVlKTsKIHN0YXRpYyBpbnQJY291bnRWYXJpYWJsZXNGcm9tSnNvbmIo dm9pZCAqdmFyc0pzb25iKTsKQEAgLTIxMzgsNiArMjE0NCwxNTUgQEAgZ2V0SnNvblBhdGhJdGVt KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCX0KIH0KIAor LyoKKyAqIFJldHVybnMgdGhlIGNvbXB1dGVkIHZhbHVlIG9mIGEgSlNPTiBwYXRoIHZhcmlhYmxl IHdpdGggZ2l2ZW4gbmFtZS4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorR2V0SnNvblBhdGhW YXIodm9pZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCSAgIEpzb25i VmFsdWUgKmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVjdElkKQoreworCUpzb25QYXRoVmFyaWFi bGUgKnZhciA9IE5VTEw7CisJTGlzdAkgICAqdmFycyA9IGN4dDsKKwlMaXN0Q2VsbCAgICpsYzsK KwlKc29uYlZhbHVlICpyZXN1bHQ7CisJaW50CQkJaWQgPSAxOworCisJZm9yZWFjaChsYywgdmFy cykKKwl7CisJCUpzb25QYXRoVmFyaWFibGUgKmN1cnZhciA9IGxmaXJzdChsYyk7CisKKwkJaWYg KCFzdHJuY21wKGN1cnZhci0+bmFtZSwgdmFyTmFtZSwgdmFyTmFtZUxlbikpCisJCXsKKwkJCXZh ciA9IGN1cnZhcjsKKwkJCWJyZWFrOworCQl9CisKKwkJaWQrKzsKKwl9CisKKwlpZiAodmFyID09 IE5VTEwpCisJeworCQkqYmFzZU9iamVjdElkID0gLTE7CisJCXJldHVybiBOVUxMOworCX0KKwor CXJlc3VsdCA9IHBhbGxvYyhzaXplb2YoSnNvbmJWYWx1ZSkpOworCWlmICh2YXItPmlzbnVsbCkK Kwl7CisJCSpiYXNlT2JqZWN0SWQgPSAwOworCQlyZXN1bHQtPnR5cGUgPSBqYnZOdWxsOworCX0K KwllbHNlCisJCUpzb25JdGVtRnJvbURhdHVtKHZhci0+dmFsdWUsIHZhci0+dHlwaWQsIHZhci0+ dHlwbW9kLCByZXN1bHQpOworCisJKmJhc2VPYmplY3QgPSAqcmVzdWx0OworCSpiYXNlT2JqZWN0 SWQgPSBpZDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK0NvdW50SnNvblBh dGhWYXJzKHZvaWQgKmN4dCkKK3sKKwlMaXN0CSAgICp2YXJzID0gKExpc3QgKikgY3h0OworCisJ cmV0dXJuIGxpc3RfbGVuZ3RoKHZhcnMpOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIEpzb25i VmFsdWUgdG8gcGFzcyB0byBqc29ucGF0aCBleGVjdXRvciBmcm9tIGdpdmVuCisgKiBkYXR1bSB2 YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCitKc29uSXRlbUZy b21EYXR1bShEYXR1bSB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBKc29uYlZhbHVlICpy ZXMpCit7CisJc3dpdGNoICh0eXBpZCkKKwl7CisJCWNhc2UgQk9PTE9JRDoKKwkJCXJlcy0+dHlw ZSA9IGpidkJvb2w7CisJCQlyZXMtPnZhbC5ib29sZWFuID0gRGF0dW1HZXRCb29sKHZhbCk7CisJ CQlicmVhazsKKwkJY2FzZSBOVU1FUklDT0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0 dW0ocmVzLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgSU5UMk9JRDoKKwkJCUpzb25iVmFsdWVJ bml0TnVtZXJpY0RhdHVtKHJlcywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQyX251bWVyaWMsIHZh bCkpOworCQkJYnJlYWs7CisJCWNhc2UgSU5UNE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJp Y0RhdHVtKHJlcywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ0X251bWVyaWMsIHZhbCkpOworCQkJ YnJlYWs7CisJCWNhc2UgSU5UOE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJl cywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJ CWNhc2UgRkxPQVQ0T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJl Y3RGdW5jdGlvbkNhbGwxKGZsb2F0NF9udW1lcmljLCB2YWwpKTsKKwkJCWJyZWFrOworCQljYXNl IEZMT0FUOE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJlcywgRGlyZWN0RnVu Y3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSBURVhU T0lEOgorCQljYXNlIFZBUkNIQVJPSUQ6CisJCQlyZXMtPnR5cGUgPSBqYnZTdHJpbmc7CisJCQly ZXMtPnZhbC5zdHJpbmcudmFsID0gVkFSREFUQV9BTlkodmFsKTsKKwkJCXJlcy0+dmFsLnN0cmlu Zy5sZW4gPSBWQVJTSVpFX0FOWV9FWEhEUih2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgREFURU9J RDoKKwkJY2FzZSBUSU1FT0lEOgorCQljYXNlIFRJTUVUWk9JRDoKKwkJY2FzZSBUSU1FU1RBTVBP SUQ6CisJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQlyZXMtPnR5cGUgPSBqYnZEYXRldGltZTsK KwkJCXJlcy0+dmFsLmRhdGV0aW1lLnZhbHVlID0gdmFsOworCQkJcmVzLT52YWwuZGF0ZXRpbWUu dHlwaWQgPSB0eXBpZDsKKwkJCXJlcy0+dmFsLmRhdGV0aW1lLnR5cG1vZCA9IHR5cG1vZDsKKwkJ CXJlcy0+dmFsLmRhdGV0aW1lLnR6ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEpTT05CT0lEOgor CQkJeworCQkJCUpzb25iVmFsdWUgKmpidiA9IHJlczsKKwkJCQlKc29uYgkgICAqamIgPSBEYXR1 bUdldEpzb25iUCh2YWwpOworCisJCQkJaWYgKEpzb25Db250YWluZXJJc1NjYWxhcigmamItPnJv b3QpKQorCQkJCXsKKwkJCQkJYm9vbAkJcmVzdWx0IFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsK KworCQkJCQlyZXN1bHQgPSBKc29uYkV4dHJhY3RTY2FsYXIoJmpiLT5yb290LCBqYnYpOworCQkJ CQlBc3NlcnQocmVzdWx0KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlKc29uYkluaXRCaW5hcnko amJ2LCBqYik7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgSlNPTk9JRDoKKwkJCXsKKwkJCQl0 ZXh0CSAgICp0eHQgPSBEYXR1bUdldFRleHRQKHZhbCk7CisJCQkJY2hhcgkgICAqc3RyID0gdGV4 dF90b19jc3RyaW5nKHR4dCk7CisJCQkJSnNvbmIJICAgKmpiOworCisJCQkJamIgPSBEYXR1bUdl dEpzb25iUChEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLAorCQkJCQkJCQkJCQkJCQlDU3Ry aW5nR2V0RGF0dW0oc3RyKSkpOworCQkJCXBmcmVlKHN0cik7CisKKwkJCQlKc29uSXRlbUZyb21E YXR1bShKc29uYlBHZXREYXR1bShqYiksIEpTT05CT0lELCAtMSwgcmVzKTsKKwkJCQlicmVhazsK KwkJCX0KKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiY291bGQgbm90IGNvbnZl cnQgdmFsdWUgb2YgdHlwZSAlcyB0byBqc29ucGF0aCIsCisJCQkJCQkgICBmb3JtYXRfdHlwZV9i ZSh0eXBpZCkpKTsKKwl9Cit9CisKKy8qIEluaXRpYWxpemUgbnVtZXJpYyB2YWx1ZSBmcm9tIHRo ZSBnaXZlbiBkYXR1bSAqLworc3RhdGljIHZvaWQKK0pzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVt KEpzb25iVmFsdWUgKmpidiwgRGF0dW0gbnVtKQoreworCWpidi0+dHlwZSA9IGpidk51bWVyaWM7 CisJamJ2LT52YWwubnVtZXJpYyA9IERhdHVtR2V0TnVtZXJpYyhudW0pOworfQorCiAvKgogICog R2V0IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSBwYXNzZWQgdG8ganNvbnBhdGggZXhlY3V0b3IKICAq LwpAQCAtMjg3NCwzICszMDI5LDE3MCBAQCBjb21wYXJlRGF0ZXRpbWUoRGF0dW0gdmFsMSwgT2lk IHR5cGlkMSwgRGF0dW0gdmFsMiwgT2lkIHR5cGlkMiwKIAogCXJldHVybiBEYXR1bUdldEludDMy KERpcmVjdEZ1bmN0aW9uQ2FsbDIoY21wZnVuYywgdmFsMSwgdmFsMikpOwogfQorCisvKgorICog RXhlY3V0b3ItY2FsbGFibGUgSlNPTl9FWElTVFMgaW1wbGVtZW50YXRpb24KKyAqCisgKiBSZXR1 cm5zIE5VTEwgaW5zdGVhZCBvZiB0aHJvd2luZyBlcnJvcnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVM TCwgc2V0dGluZworICogKmVycm9yIHRvIHRydWUuCisgKi8KK2Jvb2wKK0pzb25QYXRoRXhpc3Rz KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKQoreworCUpz b25QYXRoRXhlY1Jlc3VsdCByZXM7CisKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMs CisJCQkJCQkgIEdldEpzb25QYXRoVmFyLCBDb3VudEpzb25QYXRoVmFycywKKwkJCQkJCSAgRGF0 dW1HZXRKc29uYlAoamIpLCAhZXJyb3IsIE5VTEwsIHRydWUpOworCisJQXNzZXJ0KGVycm9yIHx8 ICFqcGVySXNFcnJvcihyZXMpKTsKKworCWlmIChlcnJvciAmJiBqcGVySXNFcnJvcihyZXMpKQor CQkqZXJyb3IgPSB0cnVlOworCisJcmV0dXJuIHJlcyA9PSBqcGVyT2s7Cit9CisKKy8qCisgKiBF eGVjdXRvci1jYWxsYWJsZSBKU09OX1FVRVJZIGltcGxlbWVudGF0aW9uCisgKgorICogUmV0dXJu cyBOVUxMIGluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzIGlmICdlcnJvcicgaXMgbm90IE5VTEws IHNldHRpbmcKKyAqICplcnJvciB0byB0cnVlLiAgKmVtcHR5IGlzIHNldCB0byB0cnVlIGlmIG5v IG1hdGNoIGlzIGZvdW5kLgorICovCitEYXR1bQorSnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNv blBhdGggKmpwLCBKc29uV3JhcHBlciB3cmFwcGVyLCBib29sICplbXB0eSwKKwkJCSAgYm9vbCAq ZXJyb3IsIExpc3QgKnZhcnMpCit7CisJSnNvbmJWYWx1ZSAqc2luZ2xldG9uOworCWJvb2wJCXdy YXA7CisJSnNvblZhbHVlTGlzdCBmb3VuZCA9IHswfTsKKwlKc29uUGF0aEV4ZWNSZXN1bHQgcmVz OworCWludAkJCWNvdW50OworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLAorCQkJ CQkJICBHZXRKc29uUGF0aFZhciwgQ291bnRKc29uUGF0aFZhcnMsCisJCQkJCQkgIERhdHVtR2V0 SnNvbmJQKGpiKSwgIWVycm9yLCAmZm91bmQsIHRydWUpOworCUFzc2VydChlcnJvciB8fCAhanBl cklzRXJyb3IocmVzKSk7CisJaWYgKGVycm9yICYmIGpwZXJJc0Vycm9yKHJlcykpCisJeworCQkq ZXJyb3IgPSB0cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9 CisKKwkvKiBXUkFQIG9yIG5vdD8gKi8KKwljb3VudCA9IEpzb25WYWx1ZUxpc3RMZW5ndGgoJmZv dW5kKTsKKwlzaW5nbGV0b24gPSBjb3VudCA+IDAgPyBKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQp IDogTlVMTDsKKwlpZiAoc2luZ2xldG9uID09IE5VTEwpCisJCXdyYXAgPSBmYWxzZTsKKwllbHNl IGlmICh3cmFwcGVyID09IEpTV19OT05FIHx8IHdyYXBwZXIgPT0gSlNXX1VOU1BFQykKKwkJd3Jh cCA9IGZhbHNlOworCWVsc2UgaWYgKHdyYXBwZXIgPT0gSlNXX1VOQ09ORElUSU9OQUwpCisJCXdy YXAgPSB0cnVlOworCWVsc2UgaWYgKHdyYXBwZXIgPT0gSlNXX0NPTkRJVElPTkFMKQorCQl3cmFw ID0gY291bnQgPiAxIHx8CisJCQlJc0FKc29uYlNjYWxhcihzaW5nbGV0b24pIHx8CisJCQkoc2lu Z2xldG9uLT50eXBlID09IGpidkJpbmFyeSAmJgorCQkJIEpzb25Db250YWluZXJJc1NjYWxhcihz aW5nbGV0b24tPnZhbC5iaW5hcnkuZGF0YSkpOworCWVsc2UKKwl7CisJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQganNvbiB3cmFwcGVyICVkIiwgd3JhcHBlcik7CisJCXdyYXAgPSBmYWxzZTsK Kwl9CisKKwlpZiAod3JhcCkKKwkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pz b25iKHdyYXBJdGVtc0luQXJyYXkoJmZvdW5kKSkpOworCisJLyogTm8gd3JhcHBpbmcgbWVhbnMg b25seSBvbmUgaXRlbSBpcyBleHBlY3RlZC4gKi8KKwlpZiAoY291bnQgPiAxKQorCXsKKwkJaWYg KGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJ fQorCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9NT1JFX1RIQU5fT05F X1NRTF9KU09OX0lURU0pLAorCQkJCSBlcnJtc2coIkpTT04gcGF0aCBleHByZXNzaW9uIGluIEpT T05fUVVFUlkgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gaXRlbSB3aXRob3V0IHdyYXBwZXIiKSwK KwkJCQkgZXJyaGludCgiVXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgdG8gd3JhcCBTUUwvSlNPTiBp dGVtIHNlcXVlbmNlIGludG8gYXJyYXkuIikpKTsKKwl9CisKKwlpZiAoc2luZ2xldG9uKQorCQly ZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoc2luZ2xldG9uKSk7CisKKwkq ZW1wdHkgPSB0cnVlOworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisg KiBFeGVjdXRvci1jYWxsYWJsZSBKU09OX1ZBTFVFIGltcGxlbWVudGF0aW9uCisgKgorICogUmV0 dXJucyBOVUxMIGluc3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzIGlmICdlcnJvcicgaXMgbm90IE5V TEwsIHNldHRpbmcKKyAqICplcnJvciB0byB0cnVlLiAgKmVtcHR5IGlzIHNldCB0byB0cnVlIGlm IG5vIG1hdGNoIGlzIGZvdW5kLgorICovCitKc29uYlZhbHVlICoKK0pzb25QYXRoVmFsdWUoRGF0 dW0gamIsIEpzb25QYXRoICpqcCwgYm9vbCAqZW1wdHksIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJz KQoreworCUpzb25iVmFsdWUgKnJlczsKKwlKc29uVmFsdWVMaXN0IGZvdW5kID0gezB9OworCUpz b25QYXRoRXhlY1Jlc3VsdCBqcGVyIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKwlpbnQJCQlj b3VudDsKKworCWpwZXIgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIEdldEpzb25QYXRoVmFy LCBDb3VudEpzb25QYXRoVmFycywKKwkJCQkJCSAgIERhdHVtR2V0SnNvbmJQKGpiKSwKKwkJCQkJ CSAgICFlcnJvciwgJmZvdW5kLCB0cnVlKTsKKworCUFzc2VydChlcnJvciB8fCAhanBlcklzRXJy b3IoanBlcikpOworCisJaWYgKGVycm9yICYmIGpwZXJJc0Vycm9yKGpwZXIpKQorCXsKKwkJKmVy cm9yID0gdHJ1ZTsKKwkJKmVtcHR5ID0gZmFsc2U7CisJCXJldHVybiBOVUxMOworCX0KKworCWNv dW50ID0gSnNvblZhbHVlTGlzdExlbmd0aCgmZm91bmQpOworCisJKmVtcHR5ID0gKGNvdW50ID09 IDApOworCisJaWYgKCplbXB0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBKU09OX1ZBTFVFIGV4 cGVjdHMgdG8gZ2V0IG9ubHkgc2luZ2xldG9ucy4gKi8KKwlpZiAoY291bnQgPiAxKQorCXsKKwkJ aWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIE5VTEw7CisJCX0K KworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTU9SRV9USEFOX09ORV9T UUxfSlNPTl9JVEVNKSwKKwkJCQkgZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09O X1ZBTFVFIHNob3VsZCByZXR1cm4gc2luZ2xldG9uIHNjYWxhciBpdGVtIikpKTsKKwl9CisKKwly ZXMgPSBKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQpOworCWlmIChyZXMtPnR5cGUgPT0gamJ2Qmlu YXJ5ICYmIEpzb25Db250YWluZXJJc1NjYWxhcihyZXMtPnZhbC5iaW5hcnkuZGF0YSkpCisJCUpz b25iRXh0cmFjdFNjYWxhcihyZXMtPnZhbC5iaW5hcnkuZGF0YSwgcmVzKTsKKworCS8qIEpTT05f VkFMVUUgZXhwZWN0cyB0byBnZXQgb25seSBzY2FsYXJzLiAqLworCWlmICghSXNBSnNvbmJTY2Fs YXIocmVzKSkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJl dHVybiBOVUxMOworCQl9CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1NRTF9KU09OX1NDQUxBUl9SRVFVSVJFRCksCisJCQkJIGVycm1zZygiSlNPTiBwYXRoIGV4cHJl c3Npb24gaW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBzY2FsYXIgaXRlbSIp KSk7CisJfQorCisJaWYgKHJlcy0+dHlwZSA9PSBqYnZOdWxsKQorCQlyZXR1cm4gTlVMTDsKKwor CXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0 aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggYjYyNWY0NzFh OC4uN2E5NmE4N2IwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNDc2LDYgKzQ3 Niw4IEBAIHN0YXRpYyB2b2lkIGdldF9jb25zdF9leHByKENvbnN0ICpjb25zdHZhbCwgZGVwYXJz ZV9jb250ZXh0ICpjb250ZXh0LAogCQkJCQkJICAgaW50IHNob3d0eXBlKTsKIHN0YXRpYyB2b2lk IGdldF9jb25zdF9jb2xsYXRpb24oQ29uc3QgKmNvbnN0dmFsLCBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25fZm9ybWF0KEpzb25Gb3JtYXQgKmZvcm1hdCwg U3RyaW5nSW5mbyBidWYpOworc3RhdGljIHZvaWQgZ2V0X2pzb25fcmV0dXJuaW5nKEpzb25SZXR1 cm5pbmcgKnJldHVybmluZywgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBqc29uX2Zv cm1hdF9ieV9kZWZhdWx0KTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX2NvbnN0cnVjdG9yKEpzb25D b25zdHJ1Y3RvckV4cHIgKmN0b3IsCiAJCQkJCQkJCSBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQs IGJvb2wgc2hvd2ltcGxpY2l0KTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX2NvbnN0cnVjdG9yX29w dGlvbnMoSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciwKQEAgLTUxOCw2ICs1MjAsOCBAQCBzdGF0 aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZShPaWQgdHlwaWQpOwogc3RhdGlj IHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7CiBzdGF0aWMgY2hhciAqZmxhdHRlbl9y ZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJ bmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CitzdGF0aWMgdm9pZCBnZXRfanNvbl9wYXRoX3Nw ZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJICAg Ym9vbCBzaG93aW1wbGljaXQpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+ aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC04MzAyLDYgKzgzMDYsNyBAQCBpc1NpbXBsZU5vZGUo Tm9kZSAqbm9kZSwgTm9kZSAqcGFyZW50Tm9kZSwgaW50IHByZXR0eUZsYWdzKQogCQljYXNlIFRf V2luZG93RnVuYzoKIAkJY2FzZSBUX0Z1bmNFeHByOgogCQljYXNlIFRfSnNvbkNvbnN0cnVjdG9y RXhwcjoKKwkJY2FzZSBUX0pzb25FeHByOgogCQkJLyogZnVuY3Rpb24tbGlrZTogbmFtZSguLikg b3IgbmFtZVsuLl0gKi8KIAkJCXJldHVybiB0cnVlOwogCkBAIC04NDczLDYgKzg0NzgsNyBAQCBp c1NpbXBsZU5vZGUoTm9kZSAqbm9kZSwgTm9kZSAqcGFyZW50Tm9kZSwgaW50IHByZXR0eUZsYWdz KQogCQkJCWNhc2UgVF9Hcm91cGluZ0Z1bmM6CS8qIG93biBwYXJlbnRoZXNlcyAqLwogCQkJCWNh c2UgVF9XaW5kb3dGdW5jOgkvKiBvd24gcGFyZW50aGVzZXMgKi8KIAkJCQljYXNlIFRfQ2FzZUV4 cHI6CS8qIG90aGVyIHNlcGFyYXRvcnMgKi8KKwkJCQljYXNlIFRfSnNvbkV4cHI6CS8qIG93biBw YXJlbnRoZXNlcyAqLwogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQlkZWZhdWx0OgogCQkJCQlyZXR1 cm4gZmFsc2U7CkBAIC04NTg4LDYgKzg1OTQsNjQgQEAgZ2V0X3J1bGVfZXhwcl9wYXJlbihOb2Rl ICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyknKTsKIH0KIAorc3RhdGljIHZvaWQKK2dldF9qc29uX2JlaGF2aW9y KEpzb25CZWhhdmlvciAqYmVoYXZpb3IsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkg IGNvbnN0IGNoYXIgKm9uKQoreworCS8qCisJICogVGhlIG9yZGVyIG9mIGFycmF5IGVsZW1lbnRz IG11c3QgY29ycmVzcG9uZCB0byB0aGUgb3JkZXIgb2YKKwkgKiBKc29uQmVoYXZpb3JUeXBlIG1l bWJlcnMuCisJICovCisJY29uc3QgY2hhciAqYmVoYXZpb3JfbmFtZXNbXSA9CisJeworCQkiIE5V TEwiLAorCQkiIEVSUk9SIiwKKwkJIiBFTVBUWSIsCisJCSIgVFJVRSIsCisJCSIgRkFMU0UiLAor CQkiIFVOS05PV04iLAorCQkiIEVNUFRZIEFSUkFZIiwKKwkJIiBFTVBUWSBPQkpFQ1QiLAorCQki IERFRkFVTFQgIgorCX07CisKKwlpZiAoKGludCkgYmVoYXZpb3ItPmJ0eXBlIDwgMCB8fCBiZWhh dmlvci0+YnR5cGUgPj0gbGVuZ3Rob2YoYmVoYXZpb3JfbmFtZXMpKQorCQllbG9nKEVSUk9SLCAi aW52YWxpZCBqc29uIGJlaGF2aW9yIHR5cGU6ICVkIiwgYmVoYXZpb3ItPmJ0eXBlKTsKKworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBiZWhhdmlvcl9uYW1lc1tiZWhhdmlv ci0+YnR5cGVdKTsKKworCWlmIChiZWhhdmlvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZB VUxUKQorCQlnZXRfcnVsZV9leHByKGJlaGF2aW9yLT5leHByLCBjb250ZXh0LCBmYWxzZSk7CisK KwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBPTiAlcyIsIG9uKTsKK30KKworLyoK KyAqIGdldF9qc29uX2V4cHJfb3B0aW9ucworICoKKyAqIFBhcnNlIGJhY2sgY29tbW9uIG9wdGlv bnMgZm9yIEpTT05fUVVFUlksIEpTT05fVkFMVUUsIEpTT05fRVhJU1RTLgorICovCitzdGF0aWMg dm9pZAorZ2V0X2pzb25fZXhwcl9vcHRpb25zKEpzb25FeHByICpqc2V4cHIsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwKKwkJCQkJICBKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3Ip Cit7CisJaWYgKGpzZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCkKKwl7CisJCWlmIChqc2V4cHIt PndyYXBwZXIgPT0gSlNXX0NPTkRJVElPTkFMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0 LT5idWYsICIgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIik7CisJCWVsc2UgaWYgKGpzZXhwci0+ d3JhcHBlciA9PSBKU1dfVU5DT05ESVRJT05BTCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC0+YnVmLCAiIFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSIik7CisKKwkJaWYgKGpzZXhwci0+ b21pdF9xdW90ZXMpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBPTUlUIFFV T1RFUyIpOworCX0KKworCWlmIChqc2V4cHItPm9uX2VtcHR5ICYmIGpzZXhwci0+b25fZW1wdHkt PmJ0eXBlICE9IGRlZmF1bHRfYmVoYXZpb3IpCisJCWdldF9qc29uX2JlaGF2aW9yKGpzZXhwci0+ b25fZW1wdHksIGNvbnRleHQsICJFTVBUWSIpOworCisJaWYgKGpzZXhwci0+b25fZXJyb3IgJiYg anNleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gZGVmYXVsdF9iZWhhdmlvcikKKwkJZ2V0X2pzb25f YmVoYXZpb3IoanNleHByLT5vbl9lcnJvciwgY29udGV4dCwgIkVSUk9SIik7Cit9CiAKIC8qIC0t LS0tLS0tLS0KICAqIGdldF9ydWxlX2V4cHIJCQktIFBhcnNlIGJhY2sgYW4gZXhwcmVzc2lvbgpA QCAtOTc0Nyw2ICs5ODExLDcgQEAgZ2V0X3J1bGVfZXhwcihOb2RlICpub2RlLCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQsCiAJCQl9CiAJCQlicmVhazsKIAorCiAJCWNhc2UgVF9Kc29uVmFsdWVF eHByOgogCQkJewogCQkJCUpzb25WYWx1ZUV4cHIgKmp2ZSA9IChKc29uVmFsdWVFeHByICopIG5v ZGU7CkBAIC05Nzk2LDYgKzk4NjEsNjQgQEAgZ2V0X3J1bGVfZXhwcihOb2RlICpub2RlLCBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQl9CiAJCQlicmVhazsKIAorCQljYXNlIFRfSnNvbkV4 cHI6CisJCQl7CisJCQkJSnNvbkV4cHIgICAqamV4cHIgPSAoSnNvbkV4cHIgKikgbm9kZTsKKwor CQkJCXN3aXRjaCAoamV4cHItPm9wKQorCQkJCXsKKwkJCQkJY2FzZSBKU09OX0VYSVNUU19PUDoK KwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9FWElTVFMoIik7CisJCQkJ CQlicmVhazsKKwkJCQkJY2FzZSBKU09OX1FVRVJZX09QOgorCQkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJKU09OX1FVRVJZKCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSlNP Tl9WQUxVRV9PUDoKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9WQUxV RSgiKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWdldF9ydWxlX2V4cHIoamV4cHItPmZv cm1hdHRlZF9leHByLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIsICIpOworCisJCQkJZ2V0X2pzb25fcGF0aF9zcGVjKGpleHByLT5w YXRoX3NwZWMsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwkJCQlpZiAoamV4cHItPnBhc3Np bmdfdmFsdWVzKQorCQkJCXsKKwkJCQkJTGlzdENlbGwgICAqbGMxLAorCQkJCQkJCSAgICpsYzI7 CisJCQkJCWJvb2wJCW5lZWRjb21tYSA9IGZhbHNlOworCisJCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiIFBBU1NJTkcgIik7CisKKwkJCQkJZm9yYm90aChsYzEsIGpleHByLT5wYXNz aW5nX25hbWVzLAorCQkJCQkJCWxjMiwgamV4cHItPnBhc3NpbmdfdmFsdWVzKQorCQkJCQl7CisJ CQkJCQlpZiAobmVlZGNvbW1hKQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAi LCAiKTsKKwkJCQkJCW5lZWRjb21tYSA9IHRydWU7CisKKwkJCQkJCWdldF9ydWxlX2V4cHIoKE5v ZGUgKikgbGZpcnN0KGxjMiksIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisJCQkJCQlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsCisJCQkJCQkJCQkJICgoU3RyaW5nICopIGxmaXJzdF9u b2RlKFN0cmluZywgbGMxKSktPnN2YWwpOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGpleHBy LT5vcCAhPSBKU09OX0VYSVNUU19PUCB8fAorCQkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCAh PSBCT09MT0lEKQorCQkJCQlnZXRfanNvbl9yZXR1cm5pbmcoamV4cHItPnJldHVybmluZywgY29u dGV4dC0+YnVmLAorCQkJCQkJCQkJICAgamV4cHItPm9wID09IEpTT05fUVVFUllfT1ApOworCisJ CQkJZ2V0X2pzb25fZXhwcl9vcHRpb25zKGpleHByLCBjb250ZXh0LAorCQkJCQkJCQkJICBqZXhw ci0+b3AgIT0gSlNPTl9FWElTVFNfT1AgPworCQkJCQkJCQkJICBKU09OX0JFSEFWSU9SX05VTEwg OgorCQkJCQkJCQkJICBKU09OX0JFSEFWSU9SX0ZBTFNFKTsKKworCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiKSIpOworCQkJfQorCQkJYnJlYWs7CisKIAkJY2FzZSBUX0xpc3Q6CiAJ CQl7CiAJCQkJY2hhcgkgICAqc2VwOwpAQCAtOTkxOSw2ICsxMDA0Miw3IEBAIGxvb2tzX2xpa2Vf ZnVuY3Rpb24oTm9kZSAqbm9kZSkKIAkJY2FzZSBUX01pbk1heEV4cHI6CiAJCWNhc2UgVF9TUUxW YWx1ZUZ1bmN0aW9uOgogCQljYXNlIFRfWG1sRXhwcjoKKwkJY2FzZSBUX0pzb25FeHByOgogCQkJ LyogdGhlc2UgYXJlIGFsbCBhY2NlcHRlZCBieSBmdW5jX2V4cHJfY29tbW9uX3N1YmV4cHIgKi8K IAkJCXJldHVybiB0cnVlOwogCQlkZWZhdWx0OgpAQCAtMTA3ODgsNiArMTA5MTIsMTggQEAgZ2V0 X2NvbnN0X2NvbGxhdGlvbihDb25zdCAqY29uc3R2YWwsIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCkKIAl9CiB9CiAKKy8qCisgKiBnZXRfanNvbl9wYXRoX3NwZWMJCS0gUGFyc2UgYmFjayBhIEpT T04gcGF0aCBzcGVjaWZpY2F0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl9wYXRoX3Nw ZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hvd2lt cGxpY2l0KQoreworCWlmIChJc0EocGF0aF9zcGVjLCBDb25zdCkpCisJCWdldF9jb25zdF9leHBy KChDb25zdCAqKSBwYXRoX3NwZWMsIGNvbnRleHQsIC0xKTsKKwllbHNlCisJCWdldF9ydWxlX2V4 cHIocGF0aF9zcGVjLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworfQorCiAvKgogICogZ2V0X2pz b25fZm9ybWF0CQkJLSBQYXJzZSBiYWNrIGEgSnNvbkZvcm1hdCBub2RlCiAgKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjRXhwci5oCmluZGV4IGEyOGRkY2RkNzcuLjJiYWM4NzcwMGIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0V4cHIuaApAQCAtMjQwLDYgKzI0MCw5IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9wCiAJ RUVPUF9YTUxFWFBSLAogCUVFT1BfSlNPTl9DT05TVFJVQ1RPUiwKIAlFRU9QX0lTX0pTT04sCisJ RUVPUF9KU09ORVhQUl9QQVRILAorCUVFT1BfSlNPTkVYUFJfQ09FUkNJT04sCisJRUVPUF9KU09O RVhQUl9DT0VSQ0lPTl9GSU5JU0gsCiAJRUVPUF9BR0dSRUYsCiAJRUVPUF9HUk9VUElOR19GVU5D LAogCUVFT1BfV0lORE9XX0ZVTkMsCkBAIC02OTIsNiArNjk1LDIxIEBAIHR5cGVkZWYgc3RydWN0 IEV4cHJFdmFsU3RlcAogCQkJSnNvbklzUHJlZGljYXRlICpwcmVkOwkvKiBvcmlnaW5hbCBleHBy ZXNzaW9uIG5vZGUgKi8KIAkJfQkJCWlzX2pzb247CiAKKwkJLyogZm9yIEVFT1BfSlNPTkVYUFJf UEFUSCAqLworCQlzdHJ1Y3QKKwkJeworCQkJc3RydWN0IEpzb25FeHByU3RhdGUgKmpzZXN0YXRl OworCQl9CQkJanNvbmV4cHI7CisKKwkJLyogZm9yIEVFT1BfSlNPTkVYUFJfQ09FUkNJT04gKi8K KwkJc3RydWN0CisJCXsKKwkJCUpzb25Db2VyY2lvbiAqY29lcmNpb247CisJCQlGbWdySW5mbyAg ICppbnB1dF9maW5mbzsKKwkJCU9pZAkJCXR5cGlvcGFyYW07CisJCQl2b2lkCSAgICpqc29uX3Bv cHVsYXRlX3R5cGVfY2FjaGU7CisJCQlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQ7CisJCX0J CQlqc29uZXhwcl9jb2VyY2lvbjsKIAl9CQkJZDsKIH0gRXhwckV2YWxTdGVwOwogCkBAIC03NTUs NyArNzczLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkNvbnN0cnVjdG9yRXhwclN0YXRlCiAJaW50 CQkJbmFyZ3M7CiB9IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZTsKIAotCiAvKiBmdW5jdGlvbnMg aW4gZXhlY0V4cHIuYyAqLwogZXh0ZXJuIHZvaWQgRXhwckV2YWxQdXNoU3RlcChFeHByU3RhdGUg KmVzLCBjb25zdCBFeHByRXZhbFN0ZXAgKnMpOwogCkBAIC04MDksNiArODI2LDExIEBAIGV4dGVy biB2b2lkIEV4ZWNFdmFsWG1sRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9w KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQpOwogZXh0 ZXJuIHZvaWQgRXhlY0V2YWxKc29uSXNQcmVkaWNhdGUoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCk7CitleHRlcm4gdm9pZCBFeGVjRXZhbEpzb25Db2VyY2lvbihFeHByU3RhdGUg KnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAorCQkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0 KTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNoKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3ApOworZXh0ZXJuIGludAlFeGVjRXZhbEpzb25FeHByUGF0aChF eHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAorCQkJCQkJCQkgRXhwckNvbnRleHQg KmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsR3JvdXBpbmdGdW5jKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxTdWJQbGFuKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJRXhwckNvbnRleHQgKmVj b250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNDQ0YTVmMGZkNS4uMTk2MWQ5ZTBhYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTEwMDgsNiArMTAwOCw5MyBAQCB0eXBlZGVmIHN0cnVj dCBEb21haW5Db25zdHJhaW50U3RhdGUKIAlFeHByU3RhdGUgICpjaGVja19leHByc3RhdGU7CS8q IGNoZWNrX2V4cHIncyBldmFsIHN0YXRlLCBvciBOVUxMICovCiB9IERvbWFpbkNvbnN0cmFpbnRT dGF0ZTsKIAorLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiBKc29uUGF0aCog ZXZhbHVhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHJQb3N0RXZhbFN0YXRlCit7 CisJLyogRGlkIEpzb25QYXRoKiBldmFsdWF0aW9uIGNhdXNlIGFuIGVycm9yPyAqLworCU51bGxh YmxlRGF0dW0gZXJyb3I7CisKKwkvKiBJcyB0aGUgcmVzdWx0IG9mIEpzb25QYXRoKiBldmFsdWF0 aW9uIGVtcHR5PyAqLworCU51bGxhYmxlRGF0dW0gZW1wdHk7CisKKwkvKgorCSAqIEV4ZWNFdmFs SnNvbkV4cHJQYXRoKCkgd2lsbCBzZXQgdGhpcyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgc3RlcCB0 byB1c2UKKwkgKiB0byBjb2VyY2UgdGhlIHJlc3VsdCBvZiBKc29uUGF0aCogZXZhbHVhdGlvbiB0 byB0aGUgUkVUVVJOSU5HIHR5cGUuCisJICogQWxzbyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHBv c3NpYmxlIHN0ZXAgYWRkcmVzc2VzIHRoYXQgdGhpcyBjb3VsZCBiZQorCSAqIHNldCB0byBpbiB0 aGUgZGVmaW5pdGlvbiBvZiBKc29uRXhwclN0YXRlLgorCSAqLworCWludAkJCWp1bXBfZXZhbF9j b2VyY2lvbjsKK30gSnNvbkV4cHJQb3N0RXZhbFN0YXRlOworCisvKiBTdGF0ZSBmb3IgZXZhbHVh dGluZyBhIEpzb25FeHByLCB0b28gYmlnIHRvIGlubGluZSAqLwordHlwZWRlZiBzdHJ1Y3QgSnNv bkV4cHJTdGF0ZQoreworCS8qIG9yaWdpbmFsIGV4cHJlc3Npb24gbm9kZSAqLworCUpzb25FeHBy ICAgKmpzZXhwcjsKKworCS8qIHZhbHVlL2lzbnVsbCBmb3IgZm9ybWF0dGVkX2V4cHIgKi8KKwlO dWxsYWJsZURhdHVtIGZvcm1hdHRlZF9leHByOworCisJLyogdmFsdWUvaXNudWxsIGZvciBwYXRo c3BlYyAqLworCU51bGxhYmxlRGF0dW0gcGF0aHNwZWM7CisKKwkvKiBKc29uUGF0aFZhcmlhYmxl IGVudHJpZXMgZm9yIHBhc3NpbmdfdmFsdWVzICovCisJTGlzdAkgICAqYXJnczsKKworCS8qCisJ ICogUGVyLXJvdyByZXN1bHQgc3RhdHVzIGluZm8gcG9wdWxhdGVkIGJ5IEV4ZWNFdmFsSnNvbkV4 cHJQYXRoKCkgYW5kCisJICogRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goKS4KKwkgKi8KKwlK c29uRXhwclBvc3RFdmFsU3RhdGUgcG9zdF9ldmFsOworCisJLyoKKwkgKiBBZGRyZXNzZXMgb2Yg dGhlIHN0ZXBzIHRoYXQgaW1wbGVtZW50cyB0aGUgbm9uLUVSUk9SIHZhcmlhbnQgb2YgT04KKwkg KiBFTVBUWSBhbmQgT04gRVJST1IgYmVoYXZpb3JzLCByZXNwZWN0aXZlbHkuCisJICovCisJaW50 CQkJanVtcF9lbXB0eTsKKwlpbnQJCQlqdW1wX2Vycm9yOworCisJLyoKKwkgKiBBZGRyZXNzZXMg b2Ygc3RlcHMgdG8gcGVyZm9ybSB0aGUgY29lcmNpb24gb2YgdGhlIEpzb25QYXRoKiByZXN1bHQK KwkgKiB2YWx1ZSB0byB0aGUgUkVUVVJOSU5HIHR5cGUuICBFYWNoIGFkZHJlc3MgcG9pbnRzIHRv IGVpdGhlciAxKSBhCisJICogc3BlY2lhbCBFRU9QX0pTT05FWFBSX0NPRVJDSU9OIHN0ZXAgdGhh dCBoYW5kbGVzIGNvZXJjaW9uIHVzaW5nIHRoZQorCSAqIFJFVFVSTklORyB0eXBlJ3MgaW5wdXQg ZnVuY3Rpb24gb3IgYnkgdXNpbmcganNvbl92aWFfcG9wdWxhdGUoKSwgb3IgMikKKwkgKiBhbiBl eHByZXNzaW9uIHN1Y2ggYXMgQ29lcmNlVmlhSU8uICBJdCBtYXkgYmUgLTEgaWYgbm8gY29lcmNp b24gaXMKKwkgKiBuZWNlc3NhcnkuCisJICoKKwkgKiBqdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9u IHBvaW50cyB0byB0aGUgc3RlcCB0byBldmFsdWF0ZSB0aGUgY29lcmNpb24KKwkgKiBnaXZlbiBp biBKc29uRXhwci5yZXN1bHRfY29lcmNpb24uCisJICovCisJaW50CQkJanVtcF9ldmFsX3Jlc3Vs dF9jb2VyY2lvbjsKKworCS8qIEp1bXAgdG8gZW5kIHRvIHNraXAgYWxsIHRoZSBzdGVwcyBhZnRl ciBFRU9QX0pTT05FWFBSX1BBVEguICovCisJaW50CQkJanVtcF9lbmQ7CisKKwkvKgorCSAqIGV2 YWxfaXRlbV9jb2VyY2lvbl9qdW1wcyBpcyBhbiBhcnJheSBvZiBudW1faXRlbV9jb2VyY2lvbnMg ZWxlbWVudHMKKwkgKiBlYWNoIGNvbnRhaW5pbmcgYSBzdGVwIGFkZHJlc3MgdG8gZXZhbHVhdGUg dGhlIGNvZXJjaW9uIGZyb20gYSB2YWx1ZSBvZgorCSAqIHRoZSBnaXZlbiBKc29uSXRlbVR5cGUg dG8gdGhlIFJFVFVSTklORyB0eXBlLCBvciAtMSBpZiBubyBjb2VyY2lvbiBpcworCSAqIG5lY2Vz c2FyeS4gIGl0ZW1fY29lcmNpb25fdmlhX2V4cHIgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbiBmbGFn cyBvZiB0aGUKKwkgKiBzYW1lIGxlbmd0aCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGVhY2ggdmFs aWQgc3RlcCBhZGRyZXNzIGluIHRoZQorCSAqIGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wcyBhcnJh eSBwb2ludHMgdG8gYW4gZXhwcmVzc2lvbiBvciBhCisJICogRUVPUF9KU09ORVhQUl9DT0VSQ0lP TiBzdGVwLiAgRXhlY0V2YWxKc29uRXhwclBhdGgoKSB3aWxsIGNhdXNlIGFuCisJICogZXJyb3Ig aWYgaXQncyB0aGUgbGF0dGVyLCBiZWNhdXNlIHRoYXQgbW9kZSBvZiBjb2VyY2lvbiBpcyBub3QK KwkgKiBzdXBwb3J0ZWQgZm9yIGFsbCBKc29uSXRlbVR5cGVzLgorCSAqLworCWludAkJCW51bV9p dGVtX2NvZXJjaW9uczsKKwlpbnQJCSAgICpldmFsX2l0ZW1fY29lcmNpb25fanVtcHM7CisJYm9v bAkgICAqaXRlbV9jb2VyY2lvbl92aWFfZXhwcjsKKworCS8qCisJICogRm9yIHBhc3Npbmcgd2hl biBpbml0aWFsaXppbmcgYSBFRU9QX0lPQ09FUkNFX1NBRkUgc3RlcCBmb3IgYW55CisJICogQ29l cmNlVmlhSU8gbm9kZXMgaW4gdGhlIGV4cHJlc3Npb24gdGhhdCBtdXN0IGJlIGV2YWx1YXRlZCBp biBhbgorCSAqIGVycm9yLXNhZmUgbWFubmVyLgorCSAqLworCUVycm9yU2F2ZUNvbnRleHQgZXNj b250ZXh0OworfSBKc29uRXhwclN0YXRlOworCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCSBFeGVjdXRv ciBTdGF0ZSBUcmVlcwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAppbmRleCAyZGM3OTY0OGQyLi45MWQ5NWZj NTJiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTEyLDYgKzExMiw4IEBAIGV4dGVybiBKc29u Rm9ybWF0ICptYWtlSnNvbkZvcm1hdChKc29uRm9ybWF0VHlwZSB0eXBlLCBKc29uRW5jb2Rpbmcg ZW5jb2RpbmcsCiAJCQkJCQkJCSAgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBKc29uVmFsdWVFeHBy ICptYWtlSnNvblZhbHVlRXhwcihFeHByICpyYXdfZXhwciwgRXhwciAqZm9ybWF0dGVkX2V4cHIs CiAJCQkJCQkJCQkJSnNvbkZvcm1hdCAqZm9ybWF0KTsKK2V4dGVybiBKc29uQmVoYXZpb3IgKm1h a2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpleHByLAorCQkJCQkJ CQkJICBKc29uQ29lcmNpb24gKmNvZXJjaW9uLCBpbnQgbG9jYXRpb24pOwogZXh0ZXJuIE5vZGUg Km1ha2VKc29uS2V5VmFsdWUoTm9kZSAqa2V5LCBOb2RlICp2YWx1ZSk7CiBleHRlcm4gTm9kZSAq bWFrZUpzb25Jc1ByZWRpY2F0ZShOb2RlICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQsCiAJCQkJ CQkJCSBKc29uVmFsdWVUeXBlIGl0ZW1fdHlwZSwgYm9vbCB1bmlxdWVfa2V5cywKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaAppbmRleCA0NzZkNTVkZDI0Li42MDBjZDg0MDhlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCkBAIC0xNjkyLDYgKzE2OTIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgVHJpZ2dlclRyYW5z aXRpb24KIAogLyogTm9kZXMgZm9yIFNRTC9KU09OIHN1cHBvcnQgKi8KIAorLyoKKyAqIEpzb25Q YXRoU3BlYyAtCisgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBwYXRoIGNvbnN0YW50CisgKi8K K3R5cGVkZWYgY2hhciAqSnNvblBhdGhTcGVjOworCiAvKgogICogSnNvbk91dHB1dCAtCiAgKgkJ cmVwcmVzZW50YXRpb24gb2YgSlNPTiBvdXRwdXQgY2xhdXNlIChSRVRVUk5JTkcgdHlwZSBbRk9S TUFUIGZvcm1hdF0pCkBAIC0xNzAzLDYgKzE3MDksNDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbk91 dHB1dAogCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsJLyogUkVUVVJOSU5HIEZPUk1BVCBjbGF1 c2UgYW5kIHR5cGUgT2lkcyAqLwogfSBKc29uT3V0cHV0OwogCisvKgorICogSnNvbkFyZ3VtZW50 IC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBhcmd1bWVudCBmcm9tIEpTT04gUEFTU0lORyBjbGF1 c2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkFyZ3VtZW50Cit7CisJTm9kZVRhZwkJdHlwZTsK KwlKc29uVmFsdWVFeHByICp2YWw7CQkJLyogYXJndW1lbnQgdmFsdWUgZXhwcmVzc2lvbiAqLwor CWNoYXIJICAgKm5hbWU7CQkJLyogYXJndW1lbnQgbmFtZSAqLworfSBKc29uQXJndW1lbnQ7CisK Ky8qCisgKiBKc29uUXVvdGVzIC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBbS0VFUHxPTUlUXSBR VU9URVMgY2xhdXNlIGZvciBKU09OX1FVRVJZKCkKKyAqLwordHlwZWRlZiBlbnVtIEpzb25RdW90 ZXMKK3sKKwlKU19RVU9URVNfVU5TUEVDLAkJCS8qIHVuc3BlY2lmaWVkICovCisJSlNfUVVPVEVT X0tFRVAsCQkJCS8qIEtFRVAgUVVPVEVTICovCisJSlNfUVVPVEVTX09NSVQsCQkJCS8qIE9NSVQg UVVPVEVTICovCit9IEpzb25RdW90ZXM7CisKKy8qCisgKiBKc29uRnVuY0V4cHIgLQorICoJCXVu dHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTiBmdW5jdGlvbiBleHByZXNzaW9ucwor ICovCit0eXBlZGVmIHN0cnVjdCBKc29uRnVuY0V4cHIKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpz b25FeHByT3AJb3A7CQkJCS8qIGV4cHJlc3Npb24gdHlwZSAqLworCUpzb25WYWx1ZUV4cHIgKmNv bnRleHRfaXRlbTsJLyogY29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KKwlOb2RlCSAgICpwYXRo c3BlYzsJCS8qIEpTT04gcGF0aCBzcGVjaWZpY2F0aW9uIGV4cHJlc3Npb24gKi8KKwlMaXN0CSAg ICpwYXNzaW5nOwkJLyogbGlzdCBvZiBQQVNTSU5HIGNsYXVzZSBhcmd1bWVudHMsIGlmIGFueSAq LworCUpzb25PdXRwdXQgKm91dHB1dDsJCQkvKiBvdXRwdXQgY2xhdXNlLCBpZiBzcGVjaWZpZWQg Ki8KKwlKc29uQmVoYXZpb3IgKm9uX2VtcHR5OwkJLyogT04gRU1QVFkgYmVoYXZpb3IgKi8KKwlK c29uQmVoYXZpb3IgKm9uX2Vycm9yOwkJLyogT04gRVJST1IgYmVoYXZpb3IgKi8KKwlKc29uV3Jh cHBlciB3cmFwcGVyOwkJLyogYXJyYXkgd3JhcHBlciBiZWhhdmlvciAoSlNPTl9RVUVSWSBvbmx5 KSAqLworCUpzb25RdW90ZXMJcXVvdGVzOwkJCS8qIG9taXQgb3Iga2VlcCBxdW90ZXM/IChKU09O X1FVRVJZIG9ubHkpICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3Ig LTEgaWYgdW5rbm93biAqLworfSBKc29uRnVuY0V4cHI7CisKIC8qCiAgKiBKc29uS2V5VmFsdWUg LQogICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTiBvYmplY3Qga2V5LXZh bHVlIHBhaXIgZm9yCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDRhMTU0NjA2ZDIuLmZhZDJkZDkw OTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0xNTUyLDYgKzE1NTIsMTcgQEAgdHlwZWRlZiBz dHJ1Y3QgWG1sRXhwcgogCWludAkJCWxvY2F0aW9uOwogfSBYbWxFeHByOwogCisvKgorICogSnNv bkV4cHJPcCAtCisgKgkJZW51bWVyYXRpb24gb2YgSlNPTiBmdW5jdGlvbnMgdXNpbmcgSlNPTiBw YXRoCisgKi8KK3R5cGVkZWYgZW51bSBKc29uRXhwck9wCit7CisJSlNPTl9WQUxVRV9PUCwJCQkJ LyogSlNPTl9WQUxVRSgpICovCisJSlNPTl9RVUVSWV9PUCwJCQkJLyogSlNPTl9RVUVSWSgpICov CisJSlNPTl9FWElTVFNfT1AsCQkJCS8qIEpTT05fRVhJU1RTKCkgKi8KK30gSnNvbkV4cHJPcDsK KwogLyoKICAqIEpzb25FbmNvZGluZyAtCiAgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBFTkNP RElORyBjbGF1c2UKQEAgLTE2NzAsNiArMTY4MSwxNzUgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbklz UHJlZGljYXRlCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYg dW5rbm93biAqLwogfSBKc29uSXNQcmVkaWNhdGU7CiAKKy8qIE5vZGVzIHVzZWQgaW4gU1FML0pT T04gcXVlcnkgZnVuY3Rpb25zICovCisKKy8qCisgKiBKc29uV3JhcHBlciAtCisgKgkJcmVwcmVz ZW50YXRpb24gb2YgV1JBUFBFUiBjbGF1c2UgZm9yIEpTT05fUVVFUlkoKQorICovCit0eXBlZGVm IGVudW0gSnNvbldyYXBwZXIKK3sKKwlKU1dfVU5TUEVDLAorCUpTV19OT05FLAorCUpTV19DT05E SVRJT05BTCwKKwlKU1dfVU5DT05ESVRJT05BTCwKK30gSnNvbldyYXBwZXI7CisKKy8qCisgKiBK c29uQmVoYXZpb3JUeXBlIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBiZWhhdmlvciB0eXBlcyB1c2Vk IGluIFNRTC9KU09OIE9OIEVSUk9SL0VNUFRZIGNsYXVzZXMKKyAqCisgKiAJCUlmIGVudW0gbWVt YmVycyBhcmUgcmVvcmRlcmVkLCBnZXRfanNvbl9iZWhhdmlvcigpIGZyb20gcnVsZXV0aWxzLmMK KyAqIAkJbXVzdCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LgorICovCit0eXBlZGVmIGVudW0gSnNv bkJlaGF2aW9yVHlwZQoreworCUpTT05fQkVIQVZJT1JfTlVMTCA9IDAsCisJSlNPTl9CRUhBVklP Ul9FUlJPUiwKKwlKU09OX0JFSEFWSU9SX0VNUFRZLAorCUpTT05fQkVIQVZJT1JfVFJVRSwKKwlK U09OX0JFSEFWSU9SX0ZBTFNFLAorCUpTT05fQkVIQVZJT1JfVU5LTk9XTiwKKwlKU09OX0JFSEFW SU9SX0VNUFRZX0FSUkFZLAorCUpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNULAorCUpTT05fQkVI QVZJT1JfREVGQVVMVCwKK30gSnNvbkJlaGF2aW9yVHlwZTsKKworLyoKKyAqIEpzb25Db2VyY2lv bgorICoJCUluZm9ybWF0aW9uIGFib3V0IGNvZXJjaW5nIGEgU1FML0pTT04gdmFsdWUgdG8gdGhl IHNwZWNpZmllZAorICoJCXR5cGUgYXQgcnVudGltZQorICoKKyAqIEEgbm9kZSBvZiB0aGlzIHR5 cGUgaXMgY3JlYXRlZCBpZiB0aGUgcGFyc2VyIGNhbm5vdCBmaW5kIGEgY2FzdCBleHByZXNzaW9u CisgKiB1c2luZyBjb2VyY2VfdHlwZSgpIG9yIE9NSVQgUVVPVEVTIGlzIHNwZWNpZmllZCBmb3Ig SlNPTl9RVUVSWS4gIElmIHRoZQorICogbGF0dGVyLCAnZXhwcicgbWF5IGNvbnRhaW4gdGhlIGNh c3QgZXhwcmVzc2lvbjsgaWYgbm90LCB0aGUgcXVvdGUtc3RyaXBwZWQKKyAqIHNjYWxhciBzdHJp bmcgd2lsbCBiZSBjb2VyY2VkIGJ5IGNhbGxpbmcgdGhlIHRhcmdldCB0eXBlJ3MgaW5wdXQgZnVu Y3Rpb24uCisgKiBTZWUgRXhlY0V2YWxKc29uQ29lcmNpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0 IEpzb25Db2VyY2lvbgoreworCU5vZGVUYWcJCXR5cGU7CisKKwlPaWQJCQl0YXJnZXR0eXBlOwor CWludDMyCQl0YXJnZXR0eXBtb2Q7CisJYm9vbAkJb21pdF9xdW90ZXM7CS8qIE9NSVQgUVVPVEVT IHNwZWNpZmllZCBmb3IgSlNPTl9RVUVSWT8gKi8KKwlOb2RlCSAgICpjYXN0X2V4cHI7CQkvKiBj b2VyY2lvbiBjYXN0IGV4cHJlc3Npb24gb3IgTlVMTCAqLworCU9pZAkJCWNvbGxhdGlvbjsKK30g SnNvbkNvZXJjaW9uOworCisvKgorICogSnNvbkl0ZW1UeXBlCisgKgkJUG9zc2libGUgdHlwZXMg Zm9yIHNjYWxhciB2YWx1ZXMgcmV0dXJuZWQgYnkgSlNPTl9WQUxVRSgpCisgKgorICogVGhlIGNv bW1lbnQgbmV4dCB0byBlYWNoIGl0ZW0gdHlwZSBtZW50aW9ucyB0aGUgY29ycmVzcG9uZGluZwor ICogSnNvbmJWYWx1ZS5qYnZUeXBlLgorICovCit0eXBlZGVmIGVudW0gSnNvbkl0ZW1UeXBlCit7 CisJSnNvbkl0ZW1UeXBlTnVsbCwJCQkvKiBqYnZOdWxsICovCisJSnNvbkl0ZW1UeXBlU3RyaW5n LAkJCS8qIGpidlN0cmluZyAqLworCUpzb25JdGVtVHlwZU51bWVyaWMsCQkvKiBqYnZOdW1lcmlj ICovCisJSnNvbkl0ZW1UeXBlQm9vbGVhbiwJCS8qIGpidkJvb2wgKi8KKwlKc29uSXRlbVR5cGVE YXRlLAkJCS8qIGpidkRhdGV0aW1lOiBEQVRFT0lEICovCisJSnNvbkl0ZW1UeXBlVGltZSwJCQkv KiBqYnZEYXRldGltZTogVElNRU9JRCAqLworCUpzb25JdGVtVHlwZVRpbWV0eiwJCQkvKiBqYnZE YXRldGltZTogVElNRVRaT0lEICovCisJSnNvbkl0ZW1UeXBlVGltZXN0YW1wLAkJLyogamJ2RGF0 ZXRpbWU6IFRJTUVTVEFNUE9JRCAqLworCUpzb25JdGVtVHlwZVRpbWVzdGFtcHR6LAkvKiBqYnZE YXRldGltZTogVElNRVNUQU1QVFpPSUQgKi8KKwlKc29uSXRlbVR5cGVDb21wb3NpdGUsCQkvKiBq YnZBcnJheSwgamJ2T2JqZWN0LCBqYnZCaW5hcnkgKi8KKwlKc29uSXRlbVR5cGVJbnZhbGlkLAor fSBKc29uSXRlbVR5cGU7CisKKy8qCisgKiBKc29uSXRlbUNvZXJjaW9uCisgKgkJQ29lcmNpb24g ZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVuIEpzb25JdGVtVHlwZQorICoKKyAqIElmIG5vdCBOVUxM LCAnY29lcmNpb24nIGdpdmVuIHRoZSBleHByZXNzaW9uIG5vZGUgdG8gY29udmVydCBhIHNjYWxh ciB2YWx1ZQorICogZXh0cmFjdGVkIGZyb20gYSBKc29uYlZhbHVlIG9mIHRoZSBnaXZlbiB0eXBl IHRvIHRoZSB0YXJnZXQgdHlwZSBnaXZlbiBieQorICogSnNvbkV4cHIucmV0dXJuaW5nLiAgTlVM TCBtZWFucyB0aGUgY29lcmNpb24gaXMgdW5uZWNlc3NhcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0 IEpzb25JdGVtQ29lcmNpb24KK3sKKwlOb2RlVGFnCQl0eXBlOworCisJSnNvbkl0ZW1UeXBlIGl0 ZW1fdHlwZTsKKwlOb2RlCSAgICpjb2VyY2lvbjsKK30gSnNvbkl0ZW1Db2VyY2lvbjsKKworLyoK KyAqIEpzb25CZWhhdmlvcgorICoJCUluZm9ybWF0aW9uIGFib3V0IE9OIEVSUk9SIC8gT04gRU1Q VFkgYmVoYXZpb3JzIG9mIEpTT05fVkFMVUUoKSwKKyAqCQlKU09OX1FVRVJZKCksIGFuZCBKU09O X0VYSVNUUygpCisgKgorICogJ2V4cHInIGlzIHRoZSBleHByZXNzaW9uIHRvIGVtaXQgd2hlbiBh IGdpdmVuIGJlaGF2aW9yIChFTVBUWSBvciBFUlJPUikKKyAqIG9jY3VycyBvbiBldmFsdWF0aW5n IHRoZSBTUUwvSlNPTiBxdWVyeSBmdW5jdGlvbi4gICdjb2VyY2lvbicgaXMgc2V0CisgKiBpZiAn ZXhwcicgaXNuJ3QgYWxyZWFkeSBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHR5cGUgZ2l2ZW4gYnkK KyAqIEpzb25FeHByLnJldHVybmluZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkJlaGF2aW9y Cit7CisJTm9kZVRhZwkJdHlwZTsKKworCUpzb25CZWhhdmlvclR5cGUgYnR5cGU7CisJTm9kZQkg ICAqZXhwcjsKKwlKc29uQ29lcmNpb24gKmNvZXJjaW9uOwkJLyogdG8gY29lcmNlIGJlaGF2aW9y IGV4cHJlc3Npb24gd2hlbiB0aGVyZSBpcworCQkJCQkJCQkgKiBubyBjYXN0IHRvIHRoZSB0YXJn ZXQgdHlwZSAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlm IHVua25vd24gKi8KK30gSnNvbkJlaGF2aW9yOworCisvKgorICogSnNvbkV4cHIgLQorICoJCVRy YW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVkFMVUUoKSwgSlNPTl9RVUVSWSgpLCBh bmQKKyAqCQlKU09OX0VYSVNUUygpCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25FeHByCit7CisJ RXhwcgkJeHByOworCisJLyogSlNPTl8qIGZ1bmN0aW9uIGlkZW50aWZpZXIgKi8KKwlKc29uRXhw ck9wCW9wOworCisJLyoganNvbihiKS12YWx1ZWQgZXhwcmVzc2lvbiB0byBxdWVyeSAqLworCU5v ZGUJICAgKmZvcm1hdHRlZF9leHByOworCisJLyogRm9ybWF0IG9mIHRoZSBhYm92ZSBleHByZXNz aW9uIG5lZWRlZCBieSBydWxldXRpbHMuYyAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsKKworCS8q IGpzb3BhdGgtdmFsdWVkIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgcXVlcnkgcGF0dGVybiAq LworCU5vZGUJICAgKnBhdGhfc3BlYzsKKworCS8qIEV4cGVjdGVkIHR5cGUvZm9ybWF0IG9mIHRo ZSBvdXRwdXQuICovCisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOworCisJLyogSW5mb3JtYXRp b24gYWJvdXQgdGhlIFBBU1NJTkcgYXJndW1lbnQgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpw YXNzaW5nX25hbWVzOworCUxpc3QJICAgKnBhc3NpbmdfdmFsdWVzOworCisJLyogVXNlLXNwZWNp ZmllZCBvciBkZWZhdWx0IE9OIEVNUFRZIGFuZCBPTiBFUlJPUiBiZWhhdmlvcnMgKi8KKwlKc29u QmVoYXZpb3IgKm9uX2VtcHR5OworCUpzb25CZWhhdmlvciAqb25fZXJyb3I7CisKKwkvKgorCSAq IEV4cHJlc3Npb24gdG8gY29udmVydCB0aGUgcmVzdWx0IG9mIEpTT05fKiBmdW5jdGlvbiB0byB0 aGUgUkVUVVJOSU5HCisJICogdHlwZQorCSAqLworCU5vZGUJICAgKnJlc3VsdF9jb2VyY2lvbjsK KworCS8qCisJICogTGlzdCBvZiBleHByZXNzaW9ucyBmb3IgY29lcmNpbmcgSlNPTl9WQUxVRSgp IHJlc3VsdCB2YWx1ZXMsIGNvbnRhaW5pbmcKKwkgKiBvbmUgZWxlbWVudCBmb3IgZXZlcnkgSnNv bkl0ZW1UeXBlLgorCSAqLworCUxpc3QJICAgKml0ZW1fY29lcmNpb25zOworCisJLyogV1JBUFBF UiBzcGVjaWZpY2F0aW9uIGZvciBKU09OX1FVRVJZICovCisJSnNvbldyYXBwZXIgd3JhcHBlcjsK KworCS8qIEtFRVAgb3IgT01JVCBRVU9URVMgZm9yIHNpbmdsZXRvbiBzY2FsYXJzIHJldHVybmVk IGJ5IEpTT05fUVVFUlkoKSAqLworCWJvb2wJCW9taXRfcXVvdGVzOworCisJLyogT3JpZ2luYWwg SnNvbkZ1bmNFeHByJ3MgbG9jYXRpb24gKi8KKwlpbnQJCQlsb2NhdGlvbjsKK30gSnNvbkV4cHI7 CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqIE51bGxUZXN0CiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmlu ZGV4IDIzMzFhY2FjMDkuLjk0ZTFjYjRkY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNl ci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTkzLDYgKzkz LDcgQEAgUEdfS0VZV09SRCgiY29tbWl0IiwgQ09NTUlULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJjb21taXR0ZWQiLCBDT01NSVRURUQsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbXByZXNzaW9uIiwgQ09NUFJFU1NJ T04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbmN1cnJl bnRseSIsIENPTkNVUlJFTlRMWSwgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkK K1BHX0tFWVdPUkQoImNvbmRpdGlvbmFsIiwgQ09ORElUSU9OQUwsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbmZpZ3VyYXRpb24iLCBDT05GSUdVUkFUSU9O LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJjb25mbGljdCIs IENPTkZMSUNULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJj b25uZWN0aW9uIiwgQ09OTkVDVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpA QCAtMTQ3LDExICsxNDgsMTMgQEAgUEdfS0VZV09SRCgiZG91YmxlIiwgRE9VQkxFX1AsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRyb3AiLCBEUk9QLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlYWNoIiwgRUFDSCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZWxzZSIsIEVMU0UsIFJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJlbXB0eSIsIEVNUFRZX1As IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuYWJsZSIsIEVO QUJMRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbmNv ZGluZyIsIEVOQ09ESU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJlbmNyeXB0ZWQiLCBFTkNSWVBURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoImVuZCIsIEVORF9QLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgiZW51bSIsIEVOVU1fUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQorUEdfS0VZV09SRCgiZXJyb3IiLCBFUlJPUl9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlc2NhcGUiLCBFU0NBUEUsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImV2ZW50IiwgRVZFTlQsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImV4Y2VwdCIsIEVYQ0VQVCwgUkVTRVJWRURf S0VZV09SRCwgQVNfTEFCRUwpCkBAIC0yMzMsMTAgKzIzNiwxNCBAQCBQR19LRVlXT1JEKCJqb2lu IiwgSk9JTiwgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo Impzb24iLCBKU09OLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi anNvbl9hcnJheSIsIEpTT05fQVJSQVksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJqc29uX2FycmF5YWdnIiwgSlNPTl9BUlJBWUFHRywgQ09MX05BTUVfS0VZV09S RCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fZXhpc3RzIiwgSlNPTl9FWElTVFMsIENP TF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX29iamVjdCIsIEpT T05fT0JKRUNULCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNv bl9vYmplY3RhZ2ciLCBKU09OX09CSkVDVEFHRywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJF TCkKK1BHX0tFWVdPUkQoImpzb25fcXVlcnkiLCBKU09OX1FVRVJZLCBDT0xfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9zY2FsYXIiLCBKU09OX1NDQUxBUiwgQ09M X05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fc2VyaWFsaXplIiwg SlNPTl9TRVJJQUxJWkUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JE KCJqc29uX3ZhbHVlIiwgSlNPTl9WQUxVRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkK K1BHX0tFWVdPUkQoImtlZXAiLCBLRUVQLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJrZXkiLCBLRVksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoImtleXMiLCBLRVlTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJsYWJlbCIsIExBQkVMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCkBAIC0zMDIsNiArMzA5LDcgQEAgUEdfS0VZV09SRCgib2ZmIiwgT0ZGLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJvZmZzZXQiLCBPRkZTRVQsIFJFU0VS VkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgib2lkcyIsIE9JRFMsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9sZCIsIE9MRCwgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgib21pdCIsIE9NSVQsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9uIiwgT04sIFJFU0VSVkVEX0tF WVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgib25seSIsIE9OTFksIFJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJvcGVyYXRvciIsIE9QRVJBVE9SLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0zNDQsNiArMzUyLDcgQEAgUEdfS0VZV09SRCgi cHJvY2VkdXJlcyIsIFBST0NFRFVSRVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoInByb2dyYW0iLCBQUk9HUkFNLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJwdWJsaWNhdGlvbiIsIFBVQkxJQ0FUSU9OLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJxdW90ZSIsIFFVT1RFLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJxdW90ZXMiLCBRVU9URVMsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJhbmdlIiwgUkFOR0Us IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlYWQiLCBSRUFE LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZWFsIiwgUkVB TCwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTQxNCw2ICs0MjMsNyBAQCBQR19L RVlXT1JEKCJzdGRvdXQiLCBTVERPVVQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoInN0b3JhZ2UiLCBTVE9SQUdFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJzdG9yZWQiLCBTVE9SRUQsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN0cmljdCIsIFNUUklDVF9QLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJzdHJpbmciLCBTVFJJTkdfUCwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3RyaXAiLCBTVFJJUF9QLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzdWJzY3JpcHRpb24i LCBTVUJTQ1JJUFRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoInN1YnN0cmluZyIsIFNVQlNUUklORywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkK QEAgLTQ0OSw2ICs0NTksNyBAQCBQR19LRVlXT1JEKCJ0eXBlcyIsIFRZUEVTX1AsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVlc2NhcGUiLCBVRVNDQVBFLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmJvdW5kZWQiLCBV TkJPVU5ERUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVu Y29tbWl0dGVkIiwgVU5DT01NSVRURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK K1BHX0tFWVdPUkQoInVuY29uZGl0aW9uYWwiLCBVTkNPTkRJVElPTkFMLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmVuY3J5cHRlZCIsIFVORU5DUllQVEVE LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmlvbiIsIFVO SU9OLCBSRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tFWVdPUkQoInVuaXF1ZSIsIFVO SVFVRSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL2Zvcm1hdHRpbmcuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaApp bmRleCA3ZWExYTcwZjcxLi5jZGUwMzA0MTRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy9mb3JtYXR0aW5nLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oCkBAIC0y OSw1ICsyOSw2IEBAIGV4dGVybiBjaGFyICphc2NfaW5pdGNhcChjb25zdCBjaGFyICpidWZmLCBz aXplX3QgbmJ5dGVzKTsKIGV4dGVybiBEYXR1bSBwYXJzZV9kYXRldGltZSh0ZXh0ICpkYXRlX3R4 dCwgdGV4dCAqZm10LCBPaWQgY29sbGlkLCBib29sIHN0cmljdCwKIAkJCQkJCQlPaWQgKnR5cGlk LCBpbnQzMiAqdHlwbW9kLCBpbnQgKnR6LAogCQkJCQkJCXN0cnVjdCBOb2RlICplc2NvbnRleHQp OworZXh0ZXJuIGJvb2wgZGF0ZXRpbWVfZm9ybWF0X2hhc190eihjb25zdCBjaGFyICpmbXRfc3Ry KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbmIuaAppbmRleCBlMzhkZmQ0OTAxLi5kNTg5YWNlNWEyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2pzb25iLmgKQEAgLTQyMiw2ICs0MjIsNyBAQCBleHRlcm4gY2hhciAqSnNvbmJUb0NTdHJpbmco U3RyaW5nSW5mbyBvdXQsIEpzb25iQ29udGFpbmVyICppbiwKIAkJCQkJCQlpbnQgZXN0aW1hdGVk X2xlbik7CiBleHRlcm4gY2hhciAqSnNvbmJUb0NTdHJpbmdJbmRlbnQoU3RyaW5nSW5mbyBvdXQs IEpzb25iQ29udGFpbmVyICppbiwKIAkJCQkJCQkJICBpbnQgZXN0aW1hdGVkX2xlbik7CitleHRl cm4gY2hhciAqSnNvbmJVbnF1b3RlKEpzb25iICpqYik7CiBleHRlcm4gYm9vbCBKc29uYkV4dHJh Y3RTY2FsYXIoSnNvbmJDb250YWluZXIgKmpiYywgSnNvbmJWYWx1ZSAqcmVzKTsKIGV4dGVybiBj b25zdCBjaGFyICpKc29uYlR5cGVOYW1lKEpzb25iVmFsdWUgKnZhbCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1 bmNzLmgKaW5kZXggMzFjMWFlNDc2Ny4uMTkwZTEzMjg0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvanNvbmZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgK QEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgSlNPTkZVTkNTX0gKIAogI2luY2x1ZGUgImNvbW1v bi9qc29uYXBpLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9q c29uYi5oIgogCiAvKgpAQCAtODgsNCArODksMTAgQEAgZXh0ZXJuIERhdHVtIGRhdHVtX3RvX2pz b25iKERhdHVtIHZhbCwgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksCiAJCQkJCQkJT2lkIG91 dGZ1bmNvaWQpOwogZXh0ZXJuIERhdHVtIGpzb25iX2Zyb21fdGV4dCh0ZXh0ICpqcywgYm9vbCB1 bmlxdWVfa2V5cyk7CiAKK2V4dGVybiBEYXR1bSBqc29uX3BvcHVsYXRlX3R5cGUoRGF0dW0ganNv bl92YWwsIE9pZCBqc29uX3R5cGUsCisJCQkJCQkJCU9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAor CQkJCQkJCQl2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRleHQgbWN4dCwKKwkJCQkJCQkJYm9vbCAq aXNudWxsLAorCQkJCQkJCQlOb2RlICplc2NvbnRleHQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0 aC5oCmluZGV4IDlkNTVjMjVlYmMuLjg5N2RlMjFhNTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL2pzb25wYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAt MTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xp c3QuaCIKKyNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29u Yi5oIgogCiB0eXBlZGVmIHN0cnVjdApAQCAtMTkxLDYgKzE5Miw3IEBAIGV4dGVybiBib29sIGpz cEdldEJvb2woSnNvblBhdGhJdGVtICp2KTsKIGV4dGVybiBjaGFyICpqc3BHZXRTdHJpbmcoSnNv blBhdGhJdGVtICp2LCBpbnQzMiAqbGVuKTsKIGV4dGVybiBib29sIGpzcEdldEFycmF5U3Vic2Ny aXB0KEpzb25QYXRoSXRlbSAqdiwgSnNvblBhdGhJdGVtICpmcm9tLAogCQkJCQkJCQkgSnNvblBh dGhJdGVtICp0bywgaW50IGkpOworZXh0ZXJuIGJvb2wganNwSXNNdXRhYmxlKEpzb25QYXRoICpw YXRoLCBMaXN0ICp2YXJuYW1lcywgTGlzdCAqdmFyZXhwcnMpOwogCiBleHRlcm4gY29uc3QgY2hh ciAqanNwT3BlcmF0aW9uTmFtZShKc29uUGF0aEl0ZW1UeXBlIHR5cGUpOwogCkBAIC0yNjgsNCAr MjcwLDI2IEBAIGV4dGVybiBib29sIGpzcENvbnZlcnRSZWdleEZsYWdzKHVpbnQzMiB4ZmxhZ3Ms IGludCAqcmVzdWx0LAogCQkJCQkJCQkgc3RydWN0IE5vZGUgKmVzY29udGV4dCk7CiAKIAorLyoK KyAqIEV2YWx1YXRpb24gb2YganNvbnBhdGgKKyAqLworCisvKiBFeHRlcm5hbCB2YXJpYWJsZSBw YXNzZWQgaW50byBqc29ucGF0aC4gKi8KK3R5cGVkZWYgc3RydWN0IEpzb25QYXRoVmFyaWFibGUK K3sKKwljaGFyCSAgICpuYW1lOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJRGF0 dW0JCXZhbHVlOworCWJvb2wJCWlzbnVsbDsKK30gSnNvblBhdGhWYXJpYWJsZTsKKworCisvKiBT UUwvSlNPTiBpdGVtICovCitleHRlcm4gYm9vbCBKc29uUGF0aEV4aXN0cyhEYXR1bSBqYiwgSnNv blBhdGggKnBhdGgsIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKTsKK2V4dGVybiBEYXR1bSBKc29u UGF0aFF1ZXJ5KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIEpzb25XcmFwcGVyIHdyYXBwZXIsCisJ CQkJCQkgICBib29sICplbXB0eSwgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOworZXh0ZXJuIEpz b25iVmFsdWUgKkpzb25QYXRoVmFsdWUoRGF0dW0gamIsIEpzb25QYXRoICpqcCwgYm9vbCAqZW1w dHksCisJCQkJCQkJCSBib29sICplcnJvciwgTGlzdCAqdmFycyk7CisKICNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJhaWxlciBiL3NyYy9pbnRl cmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIKaW5kZXggNDM1YzEzOWVjMi4uYjJhYTQ0 ZjM2ZCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJhaWxl cgorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCkBAIC02NTEs NiArNjUxLDM0IEBAIHZhcl90eXBlOglzaW1wbGVfdHlwZQogCQkJJCQudHlwZV9pbmRleCA9IG1t X3N0cmR1cCgiLTEiKTsKIAkJCSQkLnR5cGVfc2l6ZW9mID0gTlVMTDsKIAkJfQorCQl8IFNUUklO R19QCisJCXsKKwkJCWlmIChJTkZPUk1JWF9NT0RFKQorCQkJeworCQkJCS8qIEluIEluZm9ybWl4 IG1vZGUsICJzdHJpbmciIGlzIGF1dG9tYXRpY2FsbHkgYSB0eXBlZGVmICovCisJCQkJJCQudHlw ZV9lbnVtID0gRUNQR3Rfc3RyaW5nOworCQkJCSQkLnR5cGVfc3RyID0gbW1fc3RyZHVwKCJjaGFy Iik7CisJCQkJJCQudHlwZV9kaW1lbnNpb24gPSBtbV9zdHJkdXAoIi0xIik7CisJCQkJJCQudHlw ZV9pbmRleCA9IG1tX3N0cmR1cCgiLTEiKTsKKwkJCQkkJC50eXBlX3NpemVvZiA9IE5VTEw7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogT3RoZXJ3aXNlLCBsZWdhbCBvbmx5IGlmIHVzZXIg dHlwZWRlZidlZCBpdCAqLworCQkJCXN0cnVjdCB0eXBlZGVmcyAqdGhpcyA9IGdldF90eXBlZGVm KCJzdHJpbmciLCBmYWxzZSk7CisKKwkJCQkkJC50eXBlX3N0ciA9ICh0aGlzLT50eXBlLT50eXBl X2VudW0gPT0gRUNQR3RfdmFyY2hhciB8fCB0aGlzLT50eXBlLT50eXBlX2VudW0gPT0gRUNQR3Rf Ynl0ZWEpID8gRU1QVFkgOiBtbV9zdHJkdXAodGhpcy0+bmFtZSk7CisJCQkJJCQudHlwZV9lbnVt ID0gdGhpcy0+dHlwZS0+dHlwZV9lbnVtOworCQkJCSQkLnR5cGVfZGltZW5zaW9uID0gdGhpcy0+ dHlwZS0+dHlwZV9kaW1lbnNpb247CisJCQkJJCQudHlwZV9pbmRleCA9IHRoaXMtPnR5cGUtPnR5 cGVfaW5kZXg7CisJCQkJaWYgKHRoaXMtPnR5cGUtPnR5cGVfc2l6ZW9mICYmIHN0cmxlbih0aGlz LT50eXBlLT50eXBlX3NpemVvZikgIT0gMCkKKwkJCQkJJCQudHlwZV9zaXplb2YgPSB0aGlzLT50 eXBlLT50eXBlX3NpemVvZjsKKwkJCQllbHNlCisJCQkJCSQkLnR5cGVfc2l6ZW9mID0gY2F0X3N0 cigzLCBtbV9zdHJkdXAoInNpemVvZigiKSwgbW1fc3RyZHVwKHRoaXMtPm5hbWUpLCBtbV9zdHJk dXAoIikiKSk7CisKKwkJCQlzdHJ1Y3RfbWVtYmVyX2xpc3Rbc3RydWN0X2xldmVsXSA9IEVDUEdz dHJ1Y3RfbWVtYmVyX2R1cCh0aGlzLT5zdHJ1Y3RfbWVtYmVyX2xpc3QpOworCQkJfQorCQl9CiAJ CXwgSU5URVJWQUwgZWNwZ19pbnRlcnZhbAogCQl7CiAJCQkkJC50eXBlX2VudW0gPSBFQ1BHdF9p bnRlcnZhbDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9x dWVyeWZ1bmNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9xdWVyeWZ1 bmNzLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hM2JmNWMxOGRh Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX3F1 ZXJ5ZnVuY3Mub3V0CkBAIC0wLDAgKzEsMTE5NyBAQAorLS0gSlNPTl9FWElTVFMKKy0tIGpzb24g YXJndW1lbnRzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVM TCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VSUk9SOiAgSlNPTl9FWElTVFMoKSBpcyBub3QgeWV0IGlt cGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCBKU09OX0VYSVNUUyhO VUxMIEZPUk1BVCBKU09OLCAnJCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorSElO VDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgorU0VMRUNUIEpTT05fRVhJU1RT KE5VTEw6Ompzb25iLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIAorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKyBqc29uX2V4aXN0 cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09O X09CSkVDVChSRVRVUk5JTkcganNvbmIpLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQnKTsK KyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09O X0VYSVNUUyhqc29uYiAnbnVsbCcsICckJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKyBq c29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAnMScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBm CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyk7 IC0tIEZBTFNFIG9uIGVycm9yCisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1Ig T04gRVJST1IpOworRVJST1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUg YXBwbGllZCB0byBhbiBvYmplY3QKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICck LmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJC5hJyk7CisganNvbl9leGlzdHMgCistLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1sxLCAiYWFh IiwgeyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJyb3IKKyBqc29uX2V4 aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhq c29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4ICQuYScpOworIGpzb25fZXhpc3RzIAor LS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7 fScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJiIjogMSwgImEiOiAyfScsICckLmEnKTsKKyBq c29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAnMScsICckLmEuYicpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQor IGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiB7ImIiOiAxfX0n LCAnJC5hLmInKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLmEuYicpOwor IGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05f RVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5H IDEgQVMgeCk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAk eCknIFBBU1NJTkcgJzEnIEFTIHgpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYK KygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9Jywg JyQuKiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDIgQVMgeSk7CisganNv bl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElT VFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCAmJiBAIDwgJHkpJyBQ QVNTSU5HIDAgQVMgeCwgMSBBUyB5KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBm CisoMSByb3cpCisKKy0tIGV4dGVuc2lvbjogYm9vbGVhbiBleHByZXNzaW9ucworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJyQgPiAyJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0t LS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4g MicgRVJST1IgT04gRVJST1IpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworLS0gSlNPTl9WQUxVRQorLS0ganNvbiBhcmd1bWVudHMgY3VycmVudGx5IG5vdCBz dXBwb3J0ZWQKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICckJyk7CitFUlJP UjogIEpTT05fVkFMVUUoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBl CitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICckJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIF4KK0hJTlQ6ICBUcnkgY2FzdGluZyB0aGUgYXJndW1lbnQg dG8ganNvbmIKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEw6Ompzb25iLCAnJCcpOworIGpzb25fdmFs dWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIGludCk7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ3RydWUnLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyB0cnVlCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJF VFVSTklORyBib29sKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgMTIzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMn LCAnJCcgUkVUVVJOSU5HIGludCkgKyAyMzQ7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgICAg ICAzNTcKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRV Uk5JTkcgdGV4dCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEyMworKDEgcm93KQor CisvKiBqc29uYiBieXRlYSA/Pz8gKi8KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAn JCcgUkVUVVJOSU5HIGJ5dGVhIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgU1FML0pTT04gaXRl bSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzEuMjMnLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAxLjIzCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxLjIzJywgJyQnIFJFVFVSTklORyBpbnQpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAxCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMpOworIGpz b25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAxLjIzCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJP Uik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICIxLjIz IgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnKTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQor IGFhYQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVU VVJOSU5HIGNoYXIoNSkpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBhYWEgIAorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGNo YXIoMikpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBhYQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJh YWEiJywgJyQnIFJFVFVSTklORyBqc29uIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYiBFUlJPUiBPTiBFUlJPUik7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICciXCJhYWFcIiInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAiXCJhYWFcIiIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyJcImFhYVwiIicsICckJyBSRVRVUk5JTkcganNvbmIpOworIGpzb25fdmFsdWUgCistLS0tLS0t LS0tLS0KKyAiXCJhYWFcIiIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJh YWEiJywgJyQnIFJFVFVSTklORyBpbnQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICck JyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBz eW50YXggZm9yIHR5cGUgaW50ZWdlcjogImFhYSIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMTExIE9OIEVSUk9SKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgIDExMQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnIjEyMyInLCAnJCcgUkVUVVJOSU5HIGludCkgKyAyMzQ7CisgP2NvbHVtbj8g CistLS0tLS0tLS0tCisgICAgICAzNTcKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5JTkcgZGF0ZSkgKyA5OworICA/Y29sdW1uPyAg CistLS0tLS0tLS0tLS0KKyAwMy0wMS0yMDE3CisoMSByb3cpCisKKy0tIFRlc3QgTlVMTCBjaGVj a3MgZXhlY3V0aW9uIGluIGRvbWFpbiB0eXBlcworQ1JFQVRFIERPTUFJTiBzcWxqc29uYl9pbnRf bm90X251bGwgQVMgaW50IE5PVCBOVUxMOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBFUlJPUiBPTiBF UlJPUik7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxs b3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVS TklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVS Uk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxv dyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAgJyQuYScgUkVUVVJO SU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIgT04gRU1QVFkgRVJST1IgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAyCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9p bnRfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29u X3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgIAorKDEgcm93KQorCitDUkVBVEUgVFlQ RSByYWluYm93IEFTIEVOVU0gKCdyZWQnLCAnb3JhbmdlJywgJ3llbGxvdycsICdncmVlbicsICdi bHVlJywgJ3B1cnBsZScpOworQ1JFQVRFIERPTUFJTiByZ2IgQVMgcmFpbmJvdyBDSEVDSyAoVkFM VUUgSU4gKCdyZWQnLCAnZ3JlZW4nLCAnYmx1ZScpKTsKK1NFTEVDVCBKU09OX1ZBTFVFKCcicHVy cGxlIic6Ompzb25iLCAnbGF4ICRbKl0nIFJFVFVSTklORyByZ2IpOworIGpzb25fdmFsdWUgCist LS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6 anNvbmIsICdsYXggJFsqXScgUkVUVVJOSU5HIHJnYiBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjog IHZhbHVlIGZvciBkb21haW4gcmdiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInJnYl9jaGVj ayIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAn JCcgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09O X1ZBTFVFIHNob3VsZCByZXR1cm4gc2luZ2xldG9uIHNjYWxhciBpdGVtCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAne30nLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnIEVSUk9SIE9OIEVSUk9S KTsKK0VSUk9SOiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0 dXJuIHNpbmdsZXRvbiBzY2FsYXIgaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAn JC5hJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFUlJPUik7CitFUlJP UjogIGpzb25wYXRoIG1lbWJlciBhY2Nlc3NvciBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFuIG9i amVjdAorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAn ZXJyb3InIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgZXJyb3IKKygx IHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJST1IgT04g RVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjog IG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAk LmEnIERFRkFVTFQgMiBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDIK KygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVM VCAyIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUICcyJyBPTiBF UlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgTlVMTCBPTiBFTVBUWSBERUZBVUxUICcy JyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUICcyJyBPTiBFTVBU WSBERUZBVUxUICczJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDIK KygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJST1Ig T04gRU1QVFkgREVGQVVMVCAnMycgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVt CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWzEsMl0nLCAnJFsqXScgRVJST1IgT04gRVJST1Ip OworRVJST1I6ICBKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09OX1ZBTFVFIHNob3VsZCByZXR1 cm4gc2luZ2xldG9uIHNjYWxhciBpdGVtCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWzEsMl0n LCAnJFsqXScgREVGQVVMVCAnMCcgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0t LS0KKyAwCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIiAiXScsICckWypd JyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBz eW50YXggZm9yIHR5cGUgaW50ZWdlcjogIiAiCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIg Il0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBERUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKKyBqc29u X3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgNQorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBERUZBVUxUIDIgKyAz IE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5H IGludCBGT1JNQVQgSlNPTik7IC0tIFJFVFVSTklORyBGT1JNQVQgbm90IGFsbG93ZWQKK0VSUk9S OiAgY2Fubm90IHNwZWNpZnkgRk9STUFUIGluIFJFVFVSTklORyBjbGF1c2Ugb2YgSlNPTl9WQUxV RSgpCitMSU5FIDE6IC4uLkNUIEpTT05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVS TklORyBpbnQgRk9STUFUIEpTTy4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIFJFVFVHTklORyBwc2V1ZG8tdHlwZXMg bm90IGFsbG93ZWQKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRV Uk5JTkcgcmVjb3JkKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHBzZXVkby10eXBlcyBpcyBub3Qgc3Vw cG9ydGVkIGluIFNRTC9KU09OIGZ1bmN0aW9ucworU0VMRUNUCisJeCwKKwlKU09OX1ZBTFVFKAor CQlqc29uYiAneyJhIjogMSwgImIiOiAyfScsCisJCSckLiogPyAoQCA+ICR4KScgUEFTU0lORyB4 IEFTIHgKKwkJUkVUVVJOSU5HIGludAorCQlERUZBVUxUIC0xIE9OIEVNUFRZCisJCURFRkFVTFQg LTIgT04gRVJST1IKKwkpIHkKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMCwgMikgeDsKKyB4IHwg eSAgCistLS0rLS0tLQorIDAgfCAtMgorIDEgfCAgMgorIDIgfCAtMQorKDMgcm93cykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiAp JyBBUyBhKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwg MiApJyBBUyBhIFJFVFVSTklORyBwb2ludCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQor ICgxLDIpCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQ QVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQgRVJST1IgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCistLSBU ZXN0IFBBU1NJTkcgYW5kIFJFVFVSTklORyBkYXRlL3RpbWUgdHlwZXMKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAx MjozNDo1NiArMTAnIEFTIHRzKTsKKyAgICAgICAgICBqc29uX3ZhbHVlICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVHVlIEZlYiAyMCAxODozNDo1NiAyMDE4IFBT VAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJ TkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcg dGltZXN0YW1wdHopOworICAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0OjU2IDIwMTggUFNUCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1l c3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3Rh bXApOworICAgICAgICBqc29uX3ZhbHVlICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgVHVlIEZlYiAyMCAxODozNDo1NiAyMDE4CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyBkYXRlICcyMDE4LTAyLTIxIDEyOjM0OjU2 ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGRhdGUpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAwMi0yMS0yMDE4CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywg JyR0cycgUEFTU0lORyB0aW1lICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJO SU5HIHRpbWUpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAxMjozNDo1NgorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXR6 ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWV0eik7CisganNv bl92YWx1ZSAgCistLS0tLS0tLS0tLS0tCisgMTI6MzQ6NTYrMTAKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcCAnMjAxOC0w Mi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXApOworICAgICAgICBq c29uX3ZhbHVlICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2VkIEZlYiAy MSAxMjozNDo1NiAyMDE4CisoMSByb3cpCisKKy0tIEFsc28gdGVzdCBSRVRVUk5JTkcganNvblti XQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFt cHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOworICAg ICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgIjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAx MjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisgICAgICAgICBqc29uX3ZhbHVl ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQw MjozNDo1NiswMDowMCIKKygxIHJvdykKKworLS0gSlNPTl9RVUVSWQorLS0ganNvbiBhcmd1bWVu dHMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKK1NFTEVDVCBKU09OX1FVRVJZKE5VTEwgRk9STUFU IEpTT04sICckJyk7CitFUlJPUjogIEpTT05fUVVFUlkoKSBpcyBub3QgeWV0IGltcGxlbWVudGVk IGZvciB0aGUganNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKE5VTEwgRk9STUFU IEpTT04sICckJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0hJTlQ6ICBUcnkgY2Fz dGluZyB0aGUgYXJndW1lbnQgdG8ganNvbmIKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEw6Ompzb25i LCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU CisJSlNPTl9RVUVSWShqcywgJyQnKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSE9VVCBXUkFQ UEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSKSwKKwlK U09OX1FVRVJZKGpzLCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpLAorCUpT T05fUVVFUlkoanMsICckJyBXSVRIIEFSUkFZIFdSQVBQRVIpCitGUk9NCisJKFZBTFVFUworCQko anNvbmIgJ251bGwnKSwKKwkJKCcxMi4zJyksCisJCSgndHJ1ZScpLAorCQkoJyJhYWEiJyksCisJ CSgnWzEsIG51bGwsICIyIl0nKSwKKwkJKCd7ImEiOiAxLCAiYiI6IFsyXX0nKQorCSkgZm9vKGpz KTsKKyAgICAganNvbl9xdWVyeSAgICAgfCAgICAganNvbl9xdWVyeSAgICAgfCAgICAganNvbl9x dWVyeSAgICAgfCAgICAgIGpzb25fcXVlcnkgICAgICB8ICAgICAganNvbl9xdWVyeSAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbnVs bCAgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICAgICAgIHwgW251bGxdICAgICAgICAgICAg IHwgW251bGxdICAgICAgICAgICAgICAgfCBbbnVsbF0KKyAxMi4zICAgICAgICAgICAgICAgfCAx Mi4zICAgICAgICAgICAgICAgfCBbMTIuM10gICAgICAgICAgICAgfCBbMTIuM10gICAgICAgICAg ICAgICB8IFsxMi4zXQorIHRydWUgICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgICAgICB8 IFt0cnVlXSAgICAgICAgICAgICB8IFt0cnVlXSAgICAgICAgICAgICAgIHwgW3RydWVdCisgImFh YSIgICAgICAgICAgICAgIHwgImFhYSIgICAgICAgICAgICAgIHwgWyJhYWEiXSAgICAgICAgICAg IHwgWyJhYWEiXSAgICAgICAgICAgICAgfCBbImFhYSJdCisgWzEsIG51bGwsICIyIl0gICAgIHwg WzEsIG51bGwsICIyIl0gICAgIHwgWzEsIG51bGwsICIyIl0gICAgIHwgW1sxLCBudWxsLCAiMiJd XSAgICAgfCBbWzEsIG51bGwsICIyIl1dCisgeyJhIjogMSwgImIiOiBbMl19IHwgeyJhIjogMSwg ImIiOiBbMl19IHwgeyJhIjogMSwgImIiOiBbMl19IHwgW3siYSI6IDEsICJiIjogWzJdfV0gfCBb eyJhIjogMSwgImIiOiBbMl19XQorKDYgcm93cykKKworU0VMRUNUCisJSlNPTl9RVUVSWShqcywg J3N0cmljdCAkWypdJykgQVMgInVuc3BlYyIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypd JyBXSVRIT1VUIFdSQVBQRVIpIEFTICJ3aXRob3V0IiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0 ICRbKl0nIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUikgQVMgIndpdGggY29uZCIsCisJSlNPTl9R VUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIFVOQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUikg QVMgIndpdGggdW5jb25kIiwKKwlKU09OX1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEggQVJS QVkgV1JBUFBFUikgQVMgIndpdGgiCitGUk9NCisJKFZBTFVFUworCQkoanNvbmIgJzEnKSwKKwkJ KCdbXScpLAorCQkoJ1tudWxsXScpLAorCQkoJ1sxMi4zXScpLAorCQkoJ1t0cnVlXScpLAorCQko J1siYWFhIl0nKSwKKwkJKCdbWzEsIDIsIDNdXScpLAorCQkoJ1t7ImEiOiAxLCAiYiI6IFsyXX1d JyksCisJCSgnWzEsICIyIiwgbnVsbCwgWzNdXScpCisJKSBmb28oanMpOworICAgICAgIHVuc3Bl YyAgICAgICB8ICAgICAgd2l0aG91dCAgICAgICB8ICAgICAgd2l0aCBjb25kICAgICAgfCAgICAg d2l0aCB1bmNvbmQgICAgICB8ICAgICAgICAgd2l0aCAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICB8IAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IAorIG51bGwgICAg ICAgICAgICAgICB8IG51bGwgICAgICAgICAgICAgICB8IFtudWxsXSAgICAgICAgICAgICAgfCBb bnVsbF0gICAgICAgICAgICAgICB8IFtudWxsXQorIDEyLjMgICAgICAgICAgICAgICB8IDEyLjMg ICAgICAgICAgICAgICB8IFsxMi4zXSAgICAgICAgICAgICAgfCBbMTIuM10gICAgICAgICAgICAg ICB8IFsxMi4zXQorIHRydWUgICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgICAgICB8IFt0 cnVlXSAgICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAgICAgICB8IFt0cnVlXQorICJhYWEi ICAgICAgICAgICAgICB8ICJhYWEiICAgICAgICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICAg fCBbImFhYSJdICAgICAgICAgICAgICB8IFsiYWFhIl0KKyBbMSwgMiwgM10gICAgICAgICAgfCBb MSwgMiwgM10gICAgICAgICAgfCBbMSwgMiwgM10gICAgICAgICAgIHwgW1sxLCAyLCAzXV0gICAg ICAgICAgfCBbWzEsIDIsIDNdXQorIHsiYSI6IDEsICJiIjogWzJdfSB8IHsiYSI6IDEsICJiIjog WzJdfSB8IHsiYSI6IDEsICJiIjogWzJdfSAgfCBbeyJhIjogMSwgImIiOiBbMl19XSB8IFt7ImEi OiAxLCAiYiI6IFsyXX1dCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg IHwgWzEsICIyIiwgbnVsbCwgWzNdXSB8IFsxLCAiMiIsIG51bGwsIFszXV0gIHwgWzEsICIyIiwg bnVsbCwgWzNdXQorKDkgcm93cykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywg JyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImFhYSIK KygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklO RyB0ZXh0IEtFRVAgUVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImFhYSIK KygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklO RyB0ZXh0IEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOworIGpzb25fcXVlcnkgCistLS0t LS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFh YSInLCAnJCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0t LS0tLS0tLS0KKyBhYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEi JywgJyQnIFJFVFVSTklORyB0ZXh0IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOworIGpz b25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBhYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJyJhYWEiJywgJyQnIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9S OiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUganNvbgorREVUQUlMOiAgVG9rZW4gImFh YSIgaXMgaW52YWxpZC4KK0NPTlRFWFQ6ICBKU09OIGRhdGEsIGxpbmUgMTogYWFhCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gT01JVCBRVU9URVMg RVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBq c29uCitERVRBSUw6ICBUb2tlbiAiYWFhIiBpcyBpbnZhbGlkLgorQ09OVEVYVDogIEpTT04gZGF0 YSwgbGluZSAxOiBhYWEKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgYnl0ZWEgRk9STUFUIEpTT04gT01JVCBRVU9URVMgRVJST1IgT04gRVJST1IpOworIGpz b25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBceDYxNjE2MQorKDEgcm93KQorCistLSBCZWhhdmlv ciB3aGVuIGEgUkVUVVJOSU5HIHR5cGUgaGFzIHR5cG1vZCAhPSAtMQorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDIpKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgImEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJh YWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDIpIE9NSVQgUVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJh YWEiJywgJyQuYScgUkVUVVJOSU5HIGNoYXIoMikgT01JVCBRVU9URVMgREVGQVVMVCAnYmJiJyBP TiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIGJiCisoMSByb3cpCisKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckLmEnIFJFVFVSTklORyBjaGFyKDIpIE9N SVQgUVVPVEVTIERFRkFVTFQgJyJiYmIiJzo6anNvbmIgT04gRU1QVFkpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyAiYgorKDEgcm93KQorCistLSBRVU9URVMgYmVoYXZpb3Igc2hvdWxk IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgdXNlZDoKKy0tIFNob3VsZCBmYWls CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBPTUlUIFFV T1RFUyk7CitFUlJPUjogIFNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVj aWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZAorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBPTUlUIFFVT1RFUykuLi4KKyAgICAgICAg ICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBXUkFQUEVS IEtFRVAgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90 IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkCitMSU5FIDE6IFNFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBXUkFQUEVSIEtFRVAgUVVPVEVTKS4uLgor ICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRI IENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URVMpOworRVJST1I6ICBTUUwvSlNPTiBRVU9U RVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVz ZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJ VElPTkFMIFdSQVBQRVIgLi4uCisgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBPTUlUIFFVT1RFUyk7CitF UlJPUjogIFNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hl biBXSVRIIFdSQVBQRVIgaXMgdXNlZAorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn WzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiAuLi4KKyAgICAgICAgICAgICAgIF4K Ky0tIFNob3VsZCBzdWNjZWVkCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJ VEhPVVQgV1JBUFBFUiBPTUlUIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IFsxXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEhP VVQgV1JBUFBFUiBLRUVQIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsx XQorKDEgcm93KQorCistLSB0ZXN0IFFVT1RFUyBiZWhhdmlvci4KK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgcmV0dXJuaW5nIGludFtdIG9taXQg cXVvdGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgezEsMiwzfQorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJl dHVybmluZyBpbnRbXSBrZWVwIHF1b3Rlcyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0n LCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcik7CitF UlJPUjogIGV4cGVjdGVkIEpTT04gYXJyYXkKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVj IjogIlsxLDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Ugb21pdCBxdW90ZXMpOwor IGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwzKQorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50NHJh bmdlIGtlZXAgcXVvdGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIAly ZXR1cm5pbmcgaW50NHJhbmdlIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKK0VSUk9SOiAg bWFsZm9ybWVkIHJhbmdlIGxpdGVyYWw6ICIiWzEsMl0iIgorREVUQUlMOiAgTWlzc2luZyBsZWZ0 IHBhcmVudGhlc2lzIG9yIGJyYWNrZXQuCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAn JFsqXScpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIE5VTEwgT04gRU1QVFkpOworIGpzb25fcXVl cnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1tdJywgJyRbKl0nIEVNUFRZIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgW10KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVN UFRZIEFSUkFZIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgW10KKygx IHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVNUFRZIE9CSkVD VCBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHt9CisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSk7CitF UlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0t LS0tLQorICJlbXB0eSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywg JyRbKl0nIEVSUk9SIE9OIEVNUFRZIE5VTEwgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNP TiBpdGVtCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1Q VFkgRU1QVFkgQVJSQVkgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRU1QVFkgT0JK RUNUIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0VS Uk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRb Kl0nIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAg SlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9RVUVSWSBzaG91bGQgcmV0dXJuIHNpbmdsZXRv biBpdGVtIHdpdGhvdXQgd3JhcHBlcgorSElOVDogIFVzZSBXSVRIIFdSQVBQRVIgY2xhdXNlIHRv IHdyYXAgU1FML0pTT04gaXRlbSBzZXF1ZW5jZSBpbnRvIGFycmF5LgorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIERFRkFVTFQgJyJlbXB0eSInIE9OIEVSUk9SKTsKKyBq c29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImVtcHR5IgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb24pOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uIEZPUk1BVCBKU09OKTsKKyBqc29uX3F1ZXJ5 IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIpOworIGpzb25fcXVlcnkgCistLS0tLS0t LS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJd JywgJyQnIFJFVFVSTklORyBqc29uYiBGT1JNQVQgSlNPTik7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJCcgUkVUVVJOSU5HIHRleHQpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBb MSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJF VFVSTklORyBjaGFyKDEwKSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXSAg ICAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVS TklORyBjaGFyKDMpKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgdGV4dCBG T1JNQVQgSlNPTik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVh KTsKKyAgIGpzb25fcXVlcnkgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyBceDViMzEyYzIwMzI1ZAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5H IGJ5dGVhIEZPUk1BVCBKU09OKTsKKyAgIGpzb25fcXVlcnkgICAKKy0tLS0tLS0tLS0tLS0tLS0K KyBceDViMzEyYzIwMzI1ZAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJFsqXScgUkVUVVJOSU5HIGJ5dGVhIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJP UjogIGNhbm5vdCBjYXN0IGJlaGF2aW9yIGV4cHJlc3Npb24gb2YgdHlwZSBqc29uYiB0byBieXRl YQorTElORSAxOiAuLi4gSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJOSU5H IGJ5dGVhIEVNUFRZIE9CSkUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJFsqXScgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIEVNUFRZIE9CSkVDVCBPTiBF UlJPUik7CitFUlJPUjogIGNhbm5vdCBjYXN0IGJlaGF2aW9yIGV4cHJlc3Npb24gb2YgdHlwZSBq c29uYiB0byBieXRlYQorTElORSAxOiAuLi5qc29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJOSU5H IGJ5dGVhIEZPUk1BVCBKU09OIEVNUFRZIE9CSkUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVUVVJOSU5HIGpzb24gRU1QVFkgT0JKRUNUIE9OIEVS Uk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uYiBFTVBUWSBP QkpFQ1QgT04gRVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJp Z2ludFtdIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIGNhbm5vdCBjYXN0IGJlaGF2 aW9yIGV4cHJlc3Npb24gb2YgdHlwZSBqc29uYiB0byBiaWdpbnRbXQorTElORSAxOiAuLi5PTl9R VUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkUu Li4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnIlszLDRdIicsICckWypdJyBSRVRV Uk5JTkcgYmlnaW50W10gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK0VSUk9SOiAgY2Fubm90IGNh c3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0eXBlIGpzb25iIHRvIGJpZ2ludFtdCitMSU5FIDE6 IC4uLl9RVUVSWShqc29uYiAnIlszLDRdIicsICckWypdJyBSRVRVUk5JTkcgYmlnaW50W10gRU1Q VFkgT0JKRS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KKy0tIFJFVFVHTklORyBwc2V1ZG8tdHlwZXMgbm90IGFsbG93ZWQK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcgYW55YXJy YXkgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHBzZXVkby10eXBl cyBpcyBub3Qgc3VwcG9ydGVkIGluIFNRTC9KU09OIGZ1bmN0aW9ucworU0VMRUNUCisJeCwgeSwK KwlKU09OX1FVRVJZKAorCQlqc29uYiAnWzEsMiwzLDQsNSxudWxsXScsCisJCSckWypdID8gKEAg Pj0gJHggJiYgQCA8PSAkeSknCisJCVBBU1NJTkcgeCBBUyB4LCB5IEFTIHkKKwkJV0lUSCBDT05E SVRJT05BTCBXUkFQUEVSCisJCUVNUFRZIEFSUkFZIE9OIEVNUFRZCisJKSBsaXN0CitGUk9NCisJ Z2VuZXJhdGVfc2VyaWVzKDAsIDQpIHgsCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDQpIHk7CisgeCB8 IHkgfCAgICAgbGlzdCAgICAgCistLS0rLS0tKy0tLS0tLS0tLS0tLS0tCisgMCB8IDAgfCBbXQor IDAgfCAxIHwgWzFdCisgMCB8IDIgfCBbMSwgMl0KKyAwIHwgMyB8IFsxLCAyLCAzXQorIDAgfCA0 IHwgWzEsIDIsIDMsIDRdCisgMSB8IDAgfCBbXQorIDEgfCAxIHwgWzFdCisgMSB8IDIgfCBbMSwg Ml0KKyAxIHwgMyB8IFsxLCAyLCAzXQorIDEgfCA0IHwgWzEsIDIsIDMsIDRdCisgMiB8IDAgfCBb XQorIDIgfCAxIHwgW10KKyAyIHwgMiB8IFsyXQorIDIgfCAzIHwgWzIsIDNdCisgMiB8IDQgfCBb MiwgMywgNF0KKyAzIHwgMCB8IFtdCisgMyB8IDEgfCBbXQorIDMgfCAyIHwgW10KKyAzIHwgMyB8 IFszXQorIDMgfCA0IHwgWzMsIDRdCisgNCB8IDAgfCBbXQorIDQgfCAxIHwgW10KKyA0IHwgMiB8 IFtdCisgNCB8IDMgfCBbXQorIDQgfCA0IHwgWzRdCisoMjUgcm93cykKKworLS0gcmVjb3JkIHR5 cGUgcmV0dXJuaW5nIHdpdGggcXVvdGVzIGJlaGF2aW9yLgorQ1JFQVRFIFRZUEUgY29tcF9hYmMg QVMgKGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1wKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i J3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBf YWJjIG9taXQgcXVvdGVzKTsKKyAgICAgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoYWJjLDQyLCJUaHUgSmFu IDAyIDAwOjAwOjAwIDIwMDMiKQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7 InJlYyI6ICIoYWJjLDQyLDAxLjAyLjIwMDMpIn0nLCAnJC5yZWMnIHJldHVybmluZyBjb21wX2Fi YyBrZWVwIHF1b3Rlcyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICIoYWJjLDQyLDAxLjAyLjIwMDMpIn0n LCAnJC5yZWMnIHJldHVybmluZyBjb21wX2FiYyBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcik7 CitFUlJPUjogIGNhbm5vdCBjYWxsIHBvcHVsYXRlX2NvbXBvc2l0ZSBvbiBhIHNjYWxhcgorRFJP UCBUWVBFIGNvbXBfYWJjOworLS0gRXh0ZW5zaW9uOiByZWNvcmQgdHlwZXMgcmV0dXJuaW5nCitD UkVBVEUgVFlQRSBzcWxqc29uYl9yZWMgQVMgKGEgaW50LCB0IHRleHQsIGpzIGpzb24sIGpiIGpz b25iLCBqc2EganNvbltdKTsKK0NSRUFURSBUWVBFIHNxbGpzb25iX3JlY2EgQVMgKHJlY2Egc3Fs anNvbmJfcmVjW10pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAxLCAiYiI6ICJm b28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIs IHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBzcWxqc29uYl9yZWMpOworICAg ICAgICAgICAgICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKDEsYWFh LCJbMSwgIiIyIiIsIHt9XSIsInsiIngiIjogWzEsICIiMiIiLCB7fV19IiwpCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogImEiLCAiYiI6ICJmb28iLCAidCI6ICJh YWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJh IjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBzcWxqc29uYl9yZWMgRVJST1IgT04gRVJST1IpOwor RVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiYSIKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogImEiLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAi anMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1d JywgJyRbMF0nIFJFVFVSTklORyBzcWxqc29uYl9yZWMpOworIGpzb25fcXVlcnkgCistLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNv bmIgJ3sianNhIjogIFt7ImEiOiAxLCAiYiI6IFsiZm9vIl19LCB7ImEiOiAyLCAiYyI6IHt9fSwg MTIzXX0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3JlYykpLmpzYSk7CisgICAgICAgICB1bm5l c3QgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiYSI6IDEsICJiIjogWyJm b28iXX0KKyB7ImEiOiAyLCAiYyI6IHt9fQorIDEyMworKDMgcm93cykKKworU0VMRUNUICogRlJP TSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAidCI6IFsiZm9v IiwgW11dfSwgeyJhIjogMiwgImpiIjogW3t9LCB0cnVlXX1dfScsICckJyBSRVRVUk5JTkcgc3Fs anNvbmJfcmVjYSkpLnJlY2EpOworIGEgfCAgICAgIHQgICAgICB8IGpzIHwgICAgIGpiICAgICB8 IGpzYSAKKy0tLSstLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tCisgMSB8IFsi Zm9vIiwgW11dIHwgICAgfCAgICAgICAgICAgIHwgCisgMiB8ICAgICAgICAgICAgIHwgICAgfCBb e30sIHRydWVdIHwgCisoMiByb3dzKQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6 IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4 IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIGpzb25wYXRo KTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEs ICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBd JyBSRVRVUk5JTkcganNvbnBhdGggRVJST1IgT04gRVJST1IpOworRVJST1I6ICBzeW50YXggZXJy b3IgYXQgb3IgbmVhciAieyIgb2YganNvbnBhdGggaW5wdXQKKy0tIEV4dGVuc2lvbjogYXJyYXkg dHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCIzIl0n LCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CisgIGpzb25fcXVlcnkgIAor LS0tLS0tLS0tLS0tLS0KKyB7MSwyLE5VTEwsM30KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDIsbnVsbCwiYSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdS QVBQRVIgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3Ig dHlwZSBpbnRlZ2VyOiAiYSIKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsImEi XScsICckWypdJyBSRVRVUk5JTkcgaW50W10gV0lUSCBXUkFQUEVSKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KEpTT05fUVVF UlkoanNvbmIgJ1t7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjogMiwgImpiIjogW3t9 LCB0cnVlXX1dJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWNbXSkpOworIGEgfCAgICAgIHQg ICAgICB8IGpzIHwgICAgIGpiICAgICB8IGpzYSAKKy0tLSstLS0tLS0tLS0tLS0tKy0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tCisgMSB8IFsiZm9vIiwgW11dIHwgICAgfCAgICAgICAgICAgIHwgCisg MiB8ICAgICAgICAgICAgIHwgICAgfCBbe30sIHRydWVdIHwgCisoMiByb3dzKQorCistLSBFeHRl bnNpb246IGRvbWFpbiB0eXBlcyByZXR1cm5pbmcKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7 ImEiOiAxfScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworIGpzb25f cXVlcnkgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICd7ImEiOiAxfScsICckLmInIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90 X251bGwpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxfScsICckLmInIFJFVFVSTklORyBz cWxqc29uYl9pbnRfbm90X251bGwgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNP TiBpdGVtCistLSBUZXN0IHRpbWVzdGFtcHR6IHBhc3NpbmcgYW5kIG91dHB1dAorU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAy LTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMpOworICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6 MDAiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFT U0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklO RyBqc29uKTsKKyAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAwIgorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHog JzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOworICAgICAg ICAganNvbl9xdWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg IjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKKy0tIFRlc3QgY29uc3RyYWlu dHMKK0NSRUFURSBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzICgKKwlqcyB0ZXh0LAorCWkg aW50LAorCXgganNvbmIgREVGQVVMVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBX SVRIIFdSQVBQRVIpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQxCisJCUNIRUNL IChqcyBJUyBKU09OKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MgorCQlDSEVD SyAoSlNPTl9FWElTVFMoanM6Ompzb25iLCAnJC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6 dGV4dCBBUyB0eHQsIGFycmF5WzEsMiwzXSBhcyBhcnIpKQorCUNPTlNUUkFJTlQgdGVzdF9qc29u Yl9jb25zdHJhaW50MworCQlDSEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLmEnIFJFVFVS TklORyBpbnQgREVGQVVMVCAnMTInIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisJQ09O U1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0CisJCUNIRUNLIChKU09OX1FVRVJZKGpzOjpq c29uYiwgJyQuYScgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJP UikgPCBqc29uYiAnWzEwXScpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1CisJ CUNIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGNoYXIoNSkgT01J VCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gICdhJyBDT0xMQVRFICJDIikKKyk7Citc ZCB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RfanNvbmJfY29uc3RyYWludHMiCisgQ29sdW1u IHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBqcyAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAK KyBpICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyB4ICAgICAgfCBq c29uYiAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCBKU09OX1FVRVJZKCdbMSwgMl0nOjpqc29u YiwgJyRbKl0nIFJFVFVSTklORyBqc29uYiBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUikKK0No ZWNrIGNvbnN0cmFpbnRzOgorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQxIiBDSEVDSyAoanMg SVMgSlNPTikKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MiIgQ0hFQ0sgKEpTT05fRVhJU1RT KGpzOjpqc29uYiwgJyQuImEiJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0eHQs IEFSUkFZWzEsIDIsIDNdIEFTIGFycikpCisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDMiIENI RUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcgaW50ZWdlciBERUZB VUxUIDEyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisgICAgInRlc3RfanNvbmJfY29u c3RyYWludDQiIENIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcg anNvbmIgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCAn WzEwXSc6Ompzb25iKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1IiBDSEVDSyAoSlNPTl9R VUVSWShqczo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGNoYXJhY3Rlcig1KSBPTUlUIFFVT1RF UyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpicGNoYXIgQ09MTEFURSAiQyIpKQorCitT RUxFQ1QgY2hlY2tfY2xhdXNlCitGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVja19jb25zdHJh aW50cworV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29uc3RyYWludCUn CitPUkRFUiBCWSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hlY2tfY2xhdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoSlNPTl9RVUVSWSgoanMpOjpqc29uYiwg JyQuImEiJyBSRVRVUk5JTkcgY2hhcmFjdGVyKDUpIE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9O IEVNUFRZKSA+ICgnYSc6OmJwY2hhciBDT0xMQVRFICJDIikpCisgKEpTT05fUVVFUlkoKGpzKTo6 anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBF TVBUWSBPQkpFQ1QgT04gRVJST1IpIDwgJ1sxMF0nOjpqc29uYikKKyAoSlNPTl9WQUxVRSgoanMp Ojpqc29uYiwgJyQuImEiJyBSRVRVUk5JTkcgaW50ZWdlciBERUZBVUxUIDEyIE9OIEVNUFRZIEVS Uk9SIE9OIEVSUk9SKSA+IGkpCisgKGpzIElTIEpTT04pCisgSlNPTl9FWElTVFMoKGpzKTo6anNv bmIsICckLiJhIicgUEFTU0lORyAoaSArIDUpIEFTIGludCwgKGkpOjp0ZXh0IEFTIHR4dCwgQVJS QVlbMSwgMiwgM10gQVMgYXJyKQorKDUgcm93cykKKworU0VMRUNUIHBnX2dldF9leHByKGFkYmlu LCBhZHJlbGlkKQorRlJPTSBwZ19hdHRyZGVmCitXSEVSRSBhZHJlbGlkID0gJ3Rlc3RfanNvbmJf Y29uc3RyYWludHMnOjpyZWdjbGFzcworT1JERVIgQlkgMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfZXhwciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEpTT05fUVVFUlkoJ1sxLCAyXSc6Ompzb25i LCAnJFsqXScgUkVUVVJOSU5HIGpzb25iIFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSKQorKDEg cm93KQorCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJycsIDEp OworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIg dmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50MSIKK0RFVEFJ TDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgsIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0 X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJzEnLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFp bnQgInRlc3RfanNvbmJfY29uc3RyYWludDIiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlu cyAoMSwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFM VUVTICgnW10nKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29u c3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWlu dDIiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoW10sIG51bGwsIFsxLCAyXSkuCitJ TlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYiI6IDF9JywgMSk7 CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2 aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQyIgorREVUQUlM OiAgRmFpbGluZyByb3cgY29udGFpbnMgKHsiYiI6IDF9LCAxLCBbMSwgMl0pLgorSU5TRVJUIElO VE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxfScsIDEpOworRVJST1I6 ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50MyIKK0RFVEFJTDogIEZhaWxp bmcgcm93IGNvbnRhaW5zICh7ImEiOiAxfSwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3Rf anNvbmJfY29uc3RyYWludHMgVkFMVUVTICgneyJhIjogN30nLCAxKTsKK0VSUk9SOiAgbmV3IHJv dyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNv bnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDUiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBj b250YWlucyAoeyJhIjogN30sIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2Nv bnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDEwfScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWlu dCAidGVzdF9qc29uYl9jb25zdHJhaW50NCIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5z ICh7ImEiOiAxMH0sIDEsIFsxLCAyXSkuCitEUk9QIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWlu dHM7CistLSBUZXN0IG11dGFiaWxpbHkgb2YgcXVlcnkgZnVuY3Rpb25zCitDUkVBVEUgVEFCTEUg dGVzdF9qc29uYl9tdXRhYmlsaXR5KGpzIGpzb25iLCBiIGludCk7CitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJCcpKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmFbMF0nKSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5k YXRldGltZSgpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyQuYSA/IChAIDwgJC5kYXRldGltZSgpKScpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGlt ZSgpIDwgJC5kYXRldGltZSgpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJl c3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0 ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJl c3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRa SCIpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpN SSIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUo IkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu ZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR5JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0eiBB UyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsK K0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1N VVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyMzQnOjppbnQgQVMgeCkpOworQ1JF QVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0 ZXRpbWUoKSA/IChAID09ICR4KScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0VSUk9S OiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxF CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5kYXRldGltZSgiWVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0xNCc6 OmRhdGUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcx MjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lv biBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211 dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9 PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMg aW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/IChA LmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7 CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAn JCcgREVGQVVMVCByYW5kb20oKTo6aW50IE9OIEVSUk9SKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBp biBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorLS0gREVGQVVMVCBl eHByZXNzaW9uCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiByZXRfc2V0aW50KCkgUkVUVVJO UyBTRVRPRiBpbnRlZ2VyIEFTCiskJAorQkVHSU4KKyAgICBSRVRVUk4gUVVFUlkgRVhFQ1VURSAn c2VsZWN0IDEgdW5pb24gYWxsIHNlbGVjdCAxJzsKK0VORDsKKyQkCitMQU5HVUFHRSBwbHBnc3Fs IElNTVVUQUJMRTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVG QVVMVCByZXRfc2V0aW50KCkgT04gRVJST1IpIEZST00gdGVzdF9qc29uYl9tdXRhYmlsaXR5Owor RVJST1I6ICBERUZBVUxUIGV4cHJlc3Npb24gbXVzdCBub3QgcmV0dXJuIGEgc2V0CitMSU5FIDE6 IFNFTEVDVCBKU09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCByZXRfc2V0 aW50KC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZB VUxUIGIgKyAxIE9OIEVSUk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKK0VSUk9SOiAg REVGQVVMVCBleHByZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4gY29sdW1uIHJlZmVyZW5jZXMKK0xJ TkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIGIg KyAxIE9OIEVSLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50 IERFRkFVTFQgc3VtKDEpIG92ZXIoKSBPTiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxp dHk7CitFUlJPUjogIGNhbiBvbmx5IHNwZWNpZnkgY29uc3RhbnQsIG5vbi1hZ2dyZWdhdGUgZnVu Y3Rpb24sIG9yIG9wZXJhdG9yIGV4cHJlc3Npb24gZm9yIERFRkFVTFQKK0xJTkUgMTogU0VMRUNU IEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIHN1bSgxKSBvdmVyLi4u CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqcywgJyQnICBSRVRVUk5JTkcgaW50IERFRkFVTFQgKFNF TEVDVCAxKSBPTiBFUlJPUikgRlJPTSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CitFUlJPUjogIGNh biBvbmx5IHNwZWNpZnkgY29uc3RhbnQsIG5vbi1hZ2dyZWdhdGUgZnVuY3Rpb24sIG9yIG9wZXJh dG9yIGV4cHJlc3Npb24gZm9yIERFRkFVTFQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanMs ICckJyAgUkVUVVJOSU5HIGludCBERUZBVUxUIChTRUxFQ1QgMSkgLi4uCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitEUk9QIFRBQkxF IHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKK0RST1AgRlVOQ1RJT04gcmV0X3NldGludDsKKy0tIEV4 dGVuc2lvbjogbm9uLWNvbnN0YW50IEpTT04gcGF0aAorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEy M30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEy MworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8 fCAnLicgfHwgJ2InIERFRkFVTFQgJ2ZvbycgT04gRU1QVFkpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyBmb28KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6 IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IDEyMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICck JyB8fCAnLicgfHwgJ2EnIFdJVEggV1JBUFBFUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0t LQorIFsxMjNdCisoMSByb3cpCisKKy0tIFNob3VsZCBmYWlsIChpbnZhbGlkIHBhdGgpCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICdlcnJvcicgfHwgJyAnIHx8ICdlcnJv cicpOworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiICIgb2YganNvbnBhdGggaW5w dXQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDFkOGE0MTRlZWEuLjkxMGY2ZmUz YzkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTAzLDcgKzEwMyw3IEBAIHRl c3Q6IHNlbGVjdF92aWV3cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5j eSBndWMgYml0bWFwb3BzIGNvbWJvCiAjIC0tLS0tLS0tLS0KICMgQW5vdGhlciBncm91cCBvZiBw YXJhbGxlbCB0ZXN0cyAoSlNPTiByZWxhdGVkKQogIyAtLS0tLS0tLS0tCi10ZXN0OiBqc29uIGpz b25iIGpzb25fZW5jb2RpbmcganNvbnBhdGgganNvbnBhdGhfZW5jb2RpbmcganNvbmJfanNvbnBh dGggc3FsanNvbgordGVzdDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25w YXRoX2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9xdWVyeWZ1bmNzCiAK ICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5jMzA2MGU0MjhjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnNxbApAQCAtMCwwICsxLDM5MiBAQAor LS0gSlNPTl9FWElTVFMKKworLS0ganNvbiBhcmd1bWVudHMgY3VycmVudGx5IG5vdCBzdXBwb3J0 ZWQKK1NFTEVDVCBKU09OX0VYSVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCitTRUxFQ1Qg SlNPTl9FWElTVFMoTlVMTDo6anNvbmIsICckJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J1tdJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09OX09CSkVDVChSRVRVUk5JTkcganNv bmIpLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJCcpOworU0VMRUNU IEpTT05fRVhJU1RTKGpzb25iICdudWxsJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAnW10nLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hJyk7CitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScpOyAtLSBGQUxTRSBvbiBl cnJvcgorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIEVSUk9SIE9O IEVSUk9SKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckLmEnKTsKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJ1sxLCAiYWFhIiwgeyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJy b3IKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4 ICQuYScpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7fScsICckLmEnKTsKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAneyJiIjogMSwgImEiOiAyfScsICckLmEnKTsKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJyQuYS5iJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J3siYSI6IHsiYiI6IDF9fScsICckLmEuYicpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7 ImEiOiAxLCAiYiI6IDJ9JywgJyQuYS5iJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAn eyJhIjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAxIEFTIHgpOworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgp JyBQQVNTSU5HICcxJyBBUyB4KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwg ImIiOiAyfScsICckLiogPyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4LCAyIEFT IHkpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/ IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDEgQVMgeSk7CisKKy0tIGV4dGVu c2lvbjogYm9vbGVhbiBleHByZXNzaW9ucworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywg JyQgPiAyJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1Ig T04gRVJST1IpOworCistLSBKU09OX1ZBTFVFCisKKy0tIGpzb24gYXJndW1lbnRzIGN1cnJlbnRs eSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcp OworCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKKworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ251bGwnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIGludCk7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywg JyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJFVFVSTklORyBib29s KTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7CitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgdGV4dCk7CisvKiBqc29uYiBieXRlYSA/ Pz8gKi8KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGJ5dGVh IEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcp OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGludCBFUlJP UiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDUpKTsKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gRVJST1IgT04g RVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBq c29uYiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwiYWFhXCIi JywgJyQnIFJFVFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciXCJhYWFc IiInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcgaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIics ICckJyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICciYWFhIicsICckJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMTExIE9OIEVSUk9SKTsKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICciMTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5JTkcg ZGF0ZSkgKyA5OworCistLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4gdHlw ZXMKK0NSRUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9p bnRfbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJO SU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERF RkFVTFQgMiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMScsICAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBP TiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICAn JC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFTVBU WSBFUlJPUiBPTiBFUlJPUik7CitDUkVBVEUgVFlQRSByYWluYm93IEFTIEVOVU0gKCdyZWQnLCAn b3JhbmdlJywgJ3llbGxvdycsICdncmVlbicsICdibHVlJywgJ3B1cnBsZScpOworQ1JFQVRFIERP TUFJTiByZ2IgQVMgcmFpbmJvdyBDSEVDSyAoVkFMVUUgSU4gKCdyZWQnLCAnZ3JlZW4nLCAnYmx1 ZScpKTsKK1NFTEVDVCBKU09OX1ZBTFVFKCcicHVycGxlIic6Ompzb25iLCAnbGF4ICRbKl0nIFJF VFVSTklORyByZ2IpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXgg JFsqXScgUkVUVVJOSU5HIHJnYiBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdbXScsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcgRVJS T1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnKTsKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEn LCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAnZXJyb3InIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9S KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgMiBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxU IDIgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVG QVVMVCAnMicgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQu YScgTlVMTCBPTiBFTVBUWSBERUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUICcyJyBPTiBFTVBUWSBERUZBVUxUICczJyBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBP TiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnWzEsMl0nLCAnJFsqXScgREVGQVVMVCAnMCcgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgREVG QVVMVCAyICsgMyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAn JFsqXScgUkVUVVJOSU5HIGludCBERUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU09OKTsg LS0gUkVUVVJOSU5HIEZPUk1BVCBub3QgYWxsb3dlZAorCistLSBSRVRVR05JTkcgcHNldWRvLXR5 cGVzIG5vdCBhbGxvd2VkCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScg UkVUVVJOSU5HIHJlY29yZCk7CisKK1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNvbmIg J3siYSI6IDEsICJiIjogMn0nLAorCQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBBUyB4CisJ CVJFVFVSTklORyBpbnQKKwkJREVGQVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxUIC0yIE9OIEVS Uk9SCisJKSB5CitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDIpIHg7CisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgx LCAyICknIEFTIGEgUkVUVVJOSU5HIHBvaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQg RVJST1IgT04gRVJST1IpOworCistLSBUZXN0IFBBU1NJTkcgYW5kIFJFVFVSTklORyBkYXRlL3Rp bWUgdHlwZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0 aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0y MSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXB0eik7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDIt MjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyBkYXRlICcyMDE4LTAyLTIxIDEyOjM0 OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGRhdGUpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0 cyBSRVRVUk5JTkcgdGltZSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMn IFBBU1NJTkcgdGltZXR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5H IHRpbWV0eik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcg dGltZXN0YW1wICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVz dGFtcCk7CisKKy0tIEFsc28gdGVzdCBSRVRVUk5JTkcganNvbltiXQorU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEy OjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2 ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb25iKTsKKworLS0gSlNPTl9RVUVSWQorCistLSBqc29u IGFyZ3VtZW50cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorU0VMRUNUIEpTT05fUVVFUlkoTlVM TCBGT1JNQVQgSlNPTiwgJyQnKTsKKworU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICck Jyk7CisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICckJyksCisJSlNPTl9RVUVSWShqcywgJyQn IFdJVEhPVVQgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggQ09ORElUSU9OQUwg V1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBX UkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJBWSBXUkFQUEVSKQorRlJPTQor CShWQUxVRVMKKwkJKGpzb25iICdudWxsJyksCisJCSgnMTIuMycpLAorCQkoJ3RydWUnKSwKKwkJ KCciYWFhIicpLAorCQkoJ1sxLCBudWxsLCAiMiJdJyksCisJCSgneyJhIjogMSwgImIiOiBbMl19 JykKKwkpIGZvbyhqcyk7CisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScp IEFTICJ1bnNwZWMiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSE9VVCBXUkFQ UEVSKSBBUyAid2l0aG91dCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIENP TkRJVElPTkFMIFdSQVBQRVIpIEFTICJ3aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJp Y3QgJFsqXScgV0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIHVuY29u ZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQRVIpIEFT ICJ3aXRoIgorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgnW10nKSwKKwkJKCdb bnVsbF0nKSwKKwkJKCdbMTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJdJyksCisJ CSgnW1sxLCAyLCAzXV0nKSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScpLAorCQkoJ1sxLCAi MiIsIG51bGwsIFszXV0nKQorCSkgZm9vKGpzKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9URVMgT04gU0NBTEFS IFNUUklORyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5H IHRleHQgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQn IFJFVFVSTklORyB0ZXh0IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBPTUlU IFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSIn LCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVS Uk9SKTsKKworLS0gQmVoYXZpb3Igd2hlbiBhIFJFVFVSTklORyB0eXBlIGhhcyB0eXBtb2QgIT0g LTEKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigy KSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGNoYXIo MikgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQuYScg UkVUVVJOSU5HIGNoYXIoMikgT01JVCBRVU9URVMgREVGQVVMVCAnYmJiJyBPTiBFTVBUWSk7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJC5hJyBSRVRVUk5JTkcgY2hhcigyKSBP TUlUIFFVT1RFUyBERUZBVUxUICciYmJiIic6Ompzb25iIE9OIEVNUFRZKTsKKworLS0gUVVPVEVT IGJlaGF2aW9yIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6 CistLSBTaG91bGQgZmFpbAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRI IFdSQVBQRVIgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICck JyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx XScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgT01JVCBR VU9URVMpOworLS0gU2hvdWxkIHN1Y2NlZWQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0n LCAnJCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKKworLS0gdGVzdCBR VU9URVMgYmVoYXZpb3IuCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9 In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7CitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBr ZWVwIHF1b3Rlcyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0n LCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcik7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1cm5p bmcgaW50NHJhbmdlIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVj IjogIlsxLDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMpOwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgCXJldHVy bmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1td JywgJyRbKl0nIE5VTEwgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywg JyRbKl0nIEVNUFRZIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBFTVBUWSBBUlJBWSBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10n LCAnJFsqXScgRU1QVFkgT0JKRUNUIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRU1QVFkpOworCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgTlVMTCBPTiBFUlJPUik7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRU1QVFkg QVJSQVkgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVS Uk9SIE9OIEVNUFRZIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBF UlJPUik7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcg anNvbik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpz b24gRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJF VFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVU VVJOSU5HIGpzb25iIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwy XScsICckJyBSRVRVUk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0n LCAnJCcgUkVUVVJOSU5HIGNoYXIoMTApKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwy XScsICckJyBSRVRVUk5JTkcgY2hhcigzKSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJCcgUkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBieXRlYSk7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OKTsKKworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBUWSBP QkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0n IFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uIEVNUFRZ IE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsq XScgUkVUVVJOSU5HIGpzb25iIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkVD VCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnIlszLDRdIicsICckWypdJyBS RVRVUk5JTkcgYmlnaW50W10gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKworLS0gUkVUVUdOSU5H IHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1szLDRd JywgJyRbKl0nIFJFVFVSTklORyBhbnlhcnJheSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworCitT RUxFQ1QKKwl4LCB5LAorCUpTT05fUVVFUlkoCisJCWpzb25iICdbMSwyLDMsNCw1LG51bGxdJywK KwkJJyRbKl0gPyAoQCA+PSAkeCAmJiBAIDw9ICR5KScKKwkJUEFTU0lORyB4IEFTIHgsIHkgQVMg eQorCQlXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIKKwkJRU1QVFkgQVJSQVkgT04gRU1QVFkKKwkp IGxpc3QKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMo MCwgNCkgeTsKKworLS0gcmVjb3JkIHR5cGUgcmV0dXJuaW5nIHdpdGggcXVvdGVzIGJlaGF2aW9y LgorQ1JFQVRFIFRZUEUgY29tcF9hYmMgQVMgKGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1wKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScs ICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJu aW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVj IjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIGtl ZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKK0RST1AgVFlQRSBjb21wX2FiYzsKKworLS0gRXh0 ZW5zaW9uOiByZWNvcmQgdHlwZXMgcmV0dXJuaW5nCitDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWMg QVMgKGEgaW50LCB0IHRleHQsIGpzIGpzb24sIGpiIGpzb25iLCBqc2EganNvbltdKTsKK0NSRUFU RSBUWVBFIHNxbGpzb25iX3JlY2EgQVMgKHJlY2Egc3FsanNvbmJfcmVjW10pOworCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6 IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAn JFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAi amIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcg c3FsanNvbmJfcmVjIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb eyJhIjogImEiLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJq YiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBz cWxqc29uYl9yZWMpOworU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIgJ3si anNhIjogIFt7ImEiOiAxLCAiYiI6IFsiZm9vIl19LCB7ImEiOiAyLCAiYyI6IHt9fSwgMTIzXX0n LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3JlYykpLmpzYSk7CitTRUxFQ1QgKiBGUk9NIHVubmVz dCgoSlNPTl9RVUVSWShqc29uYiAneyJyZWNhIjogW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19 LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV19JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9y ZWNhKSkucmVjYSk7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAi Zm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIi LCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcganNvbnBhdGgpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMi OiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywg JyRbMF0nIFJFVFVSTklORyBqc29ucGF0aCBFUlJPUiBPTiBFUlJPUik7CisKKy0tIEV4dGVuc2lv bjogYXJyYXkgdHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixu dWxsLCIzIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtd IFdJVEggV1JBUFBFUiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn WzEsMixudWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CitT RUxFQ1QgKiBGUk9NIHVubmVzdChKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgInQiOiBbImZv byIsIFtdXX0sIHsiYSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XScsICckJyBSRVRVUk5JTkcgc3Fs anNvbmJfcmVjW10pKTsKKworLS0gRXh0ZW5zaW9uOiBkb21haW4gdHlwZXMgcmV0dXJuaW5nCitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNv bmJfaW50X25vdF9udWxsKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxfScsICck LmInIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBF UlJPUiBPTiBFUlJPUik7CisKKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1w dHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6 NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn bnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEw JyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOworCistLSBUZXN0IGNvbnN0cmFpbnRzCisKK0NSRUFU RSBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzICgKKwlqcyB0ZXh0LAorCWkgaW50LAorCXgg anNvbmIgREVGQVVMVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBXSVRIIFdSQVBQ RVIpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQxCisJCUNIRUNLIChqcyBJUyBK U09OKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MgorCQlDSEVDSyAoSlNPTl9F WElTVFMoanM6Ompzb25iLCAnJC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0 eHQsIGFycmF5WzEsMiwzXSBhcyBhcnIpKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJh aW50MworCQlDSEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBpbnQg REVGQVVMVCAnMTInIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisJQ09OU1RSQUlOVCB0 ZXN0X2pzb25iX2NvbnN0cmFpbnQ0CisJCUNIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQu YScgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCBqc29u YiAnWzEwXScpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1CisJCUNIRUNLIChK U09OX1FVRVJZKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGNoYXIoNSkgT01JVCBRVU9URVMg RU1QVFkgQVJSQVkgT04gRU1QVFkpID4gICdhJyBDT0xMQVRFICJDIikKKyk7CisKK1xkIHRlc3Rf anNvbmJfY29uc3RyYWludHMKKworU0VMRUNUIGNoZWNrX2NsYXVzZQorRlJPTSBpbmZvcm1hdGlv bl9zY2hlbWEuY2hlY2tfY29uc3RyYWludHMKK1dIRVJFIGNvbnN0cmFpbnRfbmFtZSBMSUtFICd0 ZXN0X2pzb25iX2NvbnN0cmFpbnQlJworT1JERVIgQlkgMTsKKworU0VMRUNUIHBnX2dldF9leHBy KGFkYmluLCBhZHJlbGlkKQorRlJPTSBwZ19hdHRyZGVmCitXSEVSRSBhZHJlbGlkID0gJ3Rlc3Rf anNvbmJfY29uc3RyYWludHMnOjpyZWdjbGFzcworT1JERVIgQlkgMTsKKworSU5TRVJUIElOVE8g dGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcnLCAxKTsKK0lOU0VSVCBJTlRPIHRlc3Rf anNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnMScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29u Yl9jb25zdHJhaW50cyBWQUxVRVMgKCdbXScpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25z dHJhaW50cyBWQUxVRVMgKCd7ImIiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9j b25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29u Yl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiA3fScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9q c29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKKworRFJPUCBUQUJMRSB0 ZXN0X2pzb25iX2NvbnN0cmFpbnRzOworCistLSBUZXN0IG11dGFiaWxpbHkgb2YgcXVlcnkgZnVu Y3Rpb25zCitDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5KGpzIGpzb25iLCBiIGlu dCk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpz LCAnJCcpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLmFbMF0nKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5 IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChAIDwgJC5kYXRldGltZSgp KScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckLmEgPyAoQC5kYXRldGltZSgpIDwgJC5kYXRldGltZSgpKScpKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRl dGltZSgpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRl c3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJI SDpNSSBUWkgiKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGlt ZSgiSEg6TUkiKSA8ICQuZGF0ZXRpbWUoIllZLU1NLUREIEhIOk1JIikpJykpOworQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRh dGV0aW1lKCJISDpNSSBUWkgiKSA8ICQuZGF0ZXRpbWUoIllZLU1NLUREIEhIOk1JIikpJykpOwor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu ZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR5JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0eiBB UyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICck LmRhdGV0aW1lKCkgPCAkeCcgUEFTU0lORyAnMTIzNCc6OmludCBBUyB4KSk7CitDUkVBVEUgSU5E RVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgp ID8gKEAgPT0gJHgpJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworQ1JFQVRFIElOREVY IE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoIllZ LU1NLUREIikgPyAoQCA9PSAkeCknIFBBU1NJTkcgJzIwMjAtMDctMTQnOjpkYXRlIEFTIHgpKTsK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICck WzEsICQuYSA/IChALmRhdGV0aW1lKCkgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFT IHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcxMjoz NCc6OnRpbWUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAo SlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIikgPT0gJHgpXScg UEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25i X211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckJyBERUZBVUxUIHJhbmRvbSgpOjppbnQgT04g RVJST1IpKTsKKworLS0gREVGQVVMVCBleHByZXNzaW9uCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTiByZXRfc2V0aW50KCkgUkVUVVJOUyBTRVRPRiBpbnRlZ2VyIEFTCiskJAorQkVHSU4KKyAg ICBSRVRVUk4gUVVFUlkgRVhFQ1VURSAnc2VsZWN0IDEgdW5pb24gYWxsIHNlbGVjdCAxJzsKK0VO RDsKKyQkCitMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRTsKK1NFTEVDVCBKU09OX1FVRVJZKGpz LCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCByZXRfc2V0aW50KCkgT04gRVJST1IpIEZST00g dGVzdF9qc29uYl9tdXRhYmlsaXR5OworU0VMRUNUIEpTT05fUVVFUlkoanMsICckJyAgUkVUVVJO SU5HIGludCBERUZBVUxUIGIgKyAxIE9OIEVSUk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJpbGl0 eTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCBzdW0o MSkgb3ZlcigpIE9OIEVSUk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzLCAnJCcgIFJFVFVSTklORyBpbnQgREVGQVVMVCAoU0VMRUNUIDEpIE9OIEVS Uk9SKSBGUk9NIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKK0RST1AgVEFCTEUgdGVzdF9qc29uYl9t dXRhYmlsaXR5OworRFJPUCBGVU5DVElPTiByZXRfc2V0aW50OworCistLSBFeHRlbnNpb246IG5v bi1jb25zdGFudCBKU09OIHBhdGgKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMTIz fScsICckJyB8fCAnLicgfHwgJ2EnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAx MjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6 IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdiJyBERUZBVUxUICdmb28nIE9OIEVNUFRZKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBXSVRI IFdSQVBQRVIpOworLS0gU2hvdWxkIGZhaWwgKGludmFsaWQgcGF0aCkKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICd7ImEiOiAxMjN9JywgJ2Vycm9yJyB8fCAnICcgfHwgJ2Vycm9yJyk7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDdlODY2ZTNjM2QuLmE2YmU2Zjc4NzQgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMjU2LDYgKzEyNTYsNyBAQCBKb2luCiBKb2luQ29zdFdv cmtzcGFjZQogSm9pbkRvbWFpbgogSm9pbkV4cHIKK0pzb25GdW5jRXhwcgogSm9pbkhhc2hFbnRy eQogSm9pblBhdGgKIEpvaW5QYXRoRXh0cmFEYXRhCkBAIC0xMjY2LDE4ICsxMjY3LDI4IEBAIEpz T2JqZWN0CiBKc1ZhbHVlCiBKc29uQWdnQ29uc3RydWN0b3IKIEpzb25BZ2dTdGF0ZQorSnNvbkFy Z3VtZW50CiBKc29uQXJyYXlBZ2cKIEpzb25BcnJheUNvbnN0cnVjdG9yCiBKc29uQXJyYXlRdWVy eUNvbnN0cnVjdG9yCiBKc29uQmFzZU9iamVjdEluZm8KK0pzb25CZWhhdmlvcgorSnNvbkJlaGF2 aW9yVHlwZQorSnNvbkNvZXJjaW9uCiBKc29uQ29uc3RydWN0b3JFeHByCiBKc29uQ29uc3RydWN0 b3JFeHByU3RhdGUKIEpzb25Db25zdHJ1Y3RvclR5cGUKIEpzb25FbmNvZGluZworSnNvbkV4cHIK K0pzb25FeHByT3AKK0pzb25FeHByUG9zdEV2YWxTdGF0ZQorSnNvbkV4cHJTdGF0ZQogSnNvbkZv cm1hdAogSnNvbkZvcm1hdFR5cGUKIEpzb25IYXNoRW50cnkKIEpzb25Jc1ByZWRpY2F0ZQorSnNv bkl0ZW1Db2VyY2lvbgorSnNvbkl0ZW1UeXBlCiBKc29uSXRlcmF0ZVN0cmluZ1ZhbHVlc0FjdGlv bgogSnNvbktleVZhbHVlCiBKc29uTGV4Q29udGV4dApAQCAtMTI5NSw2ICsxMzA2LDcgQEAgSnNv blBhcnNlQ29udGV4dAogSnNvblBhcnNlRXJyb3JUeXBlCiBKc29uUGF0aAogSnNvblBhdGhCb29s CitKc29uUGF0aERhdGF0eXBlU3RhdHVzCiBKc29uUGF0aEV4ZWNDb250ZXh0CiBKc29uUGF0aEV4 ZWNSZXN1bHQKIEpzb25QYXRoR2luQWRkUGF0aEl0ZW1GdW5jCkBAIC0xMzA3LDEwICsxMzE5LDE1 IEBAIEpzb25QYXRoR2luUGF0aEl0ZW0KIEpzb25QYXRoSXRlbQogSnNvblBhdGhJdGVtVHlwZQog SnNvblBhdGhLZXl3b3JkCitKc29uUGF0aE11dGFibGVDb250ZXh0CiBKc29uUGF0aFBhcnNlSXRl bQogSnNvblBhdGhQYXJzZVJlc3VsdAogSnNvblBhdGhQcmVkaWNhdGVDYWxsYmFjawogSnNvblBh dGhTdHJpbmcKK0pzb25QYXRoVmFyaWFibGUKK0pzb25QYXRoVmFyaWFibGVFdmFsQ29udGV4dAor SnNvblBhdGhWYXJDYWxsYmFjaworSnNvblF1b3RlcwogSnNvblJldHVybmluZwogSnNvblNjYWxh ckV4cHIKIEpzb25TZW1BY3Rpb24KQEAgLTEzMjcsNiArMTM0NCw3IEBAIEpzb25WYWx1ZUV4cHIK IEpzb25WYWx1ZUxpc3QKIEpzb25WYWx1ZUxpc3RJdGVyYXRvcgogSnNvblZhbHVlVHlwZQorSnNv bldyYXBwZXIKIEpzb25iCiBKc29uYkFnZ1N0YXRlCiBKc29uYkNvbnRhaW5lcgotLSAKMi4zNS4z Cgo= --0000000000004450f6060fc18be9--