Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIQe8-0006Hk-43 for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jan 2023 08:51:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pIQe6-0007l7-VL for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jan 2023 08:51:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIQe5-0007kt-9x for pgsql-hackers@lists.postgresql.org; Thu, 19 Jan 2023 08:51:42 +0000 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pIQde-0000qt-V9 for pgsql-hackers@lists.postgresql.org; Thu, 19 Jan 2023 08:51:40 +0000 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-15ebfdf69adso1877641fac.0 for ; Thu, 19 Jan 2023 00:51:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=natBOVc0xLdn/FyBSliGMAs7O4u+cgXsgLJ8SLqQLdg=; b=Mat1JlRUhZk5QQYzD7oLWDtcAWmLvw2Z3Xduii31pAAzGQSV4lNuZpfhbyOpe55AU+ CE7DbS1RyT0e24UR/98MTtKwVa3c+/vyRHVaZeqM6V9SZxmM/DMU1L5GQh7k1prTasOw VB029LVACJLV5mYM3ul69L9GRdP2RSlkRN5A4JpXvKFsGEZfpAzjM4Sas2m5kioqxHzA WS39mVl/23/ung4810uWbs/NK4Bnwjk4zq/6+JRmPjQWDLrOhcfQZp83epgpYbKoBYGJ NlujkvoWZVGVQBKmdQJ2/JZqPKEuXiJksGSvbLZyx6YyPfQuKoWUz3Ov94Jl7qE9DQoP a+3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=natBOVc0xLdn/FyBSliGMAs7O4u+cgXsgLJ8SLqQLdg=; b=QB61jhJ2+8Q3ZHm8LpbtiO0l+Pqy0umlqH4jMmAOdgFRim8tiT14Zvt9VAroUL5dxy dfjxrXpiznuFr0CIwHYDcD5l0t1LP8qWVnh+A4LFvK3yQ/uyEQVeDPDvV4OO2Vixki81 gyUA+gTFmWi0Zw5538rk6rsMtXOWybZUqOk0Myhi9zCyuysO+fiLUEagcz2uwJTn2SzX C3iE/a9rxC+Ao12w+HMO9xHm2IiLbC6ygq6JDCtgCnRJ17u4qUJTxe6TwQhpc5gfJM3+ DtcS7WiqNNP2nxGonFiysVwBFboM49+y6aF80p5/dbmP/cEjgmqHYhbK9J3qauKgkwaY 3kng== X-Gm-Message-State: AFqh2kq/TtQBH5noozohiCr8az5Lxdx2MqF9Rl+IwKO/qfG0L8y9cevm wPDWjjDTRzPy2UqXk3FZOJFLVtrzEA/wOoQ49GI= X-Google-Smtp-Source: AMrXdXsI8p3me2lhNp1DtlKPeIeGeR7QBH4tWVj3QgOnCl2/q3hIUdGr1YlmlZWJxV8BjDI5O1MpHSDhXw4bYI8CkO8= X-Received: by 2002:a05:6870:5154:b0:153:b199:10a with SMTP id z20-20020a056870515400b00153b199010amr1021407oak.160.1674118273662; Thu, 19 Jan 2023 00:51:13 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: vignesh C Date: Thu, 19 Jan 2023 14:21:01 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Ajin Cherian Cc: Zheng Li , Peter Smith , li jie , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000003c9ff05f29a094d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000003c9ff05f29a094d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 16 Jan 2023 at 19:04, Ajin Cherian wrote: > > On Mon, Jan 16, 2023 at 2:13 PM vignesh C wrote: > > > > On Sun, 15 Jan 2023 at 09:39, Ajin Cherian wrote: > > > > > > On Fri, Jan 13, 2023 at 5:33 PM vignesh C wrote= : > > > > Adding support for CREATE/ALTER/DROP Publication ddl deparsing. > > > > The attached v61 patch has the changes for the same. > > > > > > > > > > Hi Vignesh, > > > this doesn't seem to compile: > > > > > > gcc -std=3Dgnu99 -Wall -Wmissing-prototypes -Wpointer-arith > > > -Wdeclaration-after-statement -Werror=3Dvla -Wendif-labels > > > -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing > > > -fwrapv -fexcess-precision=3Dstandard -g -ggdb -Og -g3 > > > -fno-omit-frame-pointer -I../../../src/include -D_GNU_SOURCE -c -o > > > ddl_deparse.o ddl_deparse.c > > > ddl_deparse.c: In function =E2=80=98deparse_PublicationObjects=E2=80= =99: > > > ddl_deparse.c:8956:3: error: unknown type name =E2=80=98publication_r= el=E2=80=99 > > > publication_rel *pub_rel =3D (publication_rel *) lfirst(lc1); > > > ^ > > > ddl_deparse.c:8956:31: error: =E2=80=98publication_rel=E2=80=99 undec= lared (first use > > > in this function) > > > publication_rel *pub_rel =3D (publication_rel *) lfirst(lc1); > > > ^ > > > ddl_deparse.c:8956:31: note: each undeclared identifier is reported > > > only once for each function it appears in > > > ddl_deparse.c:8956:48: error: expected expression before =E2=80=98)= =E2=80=99 token > > > publication_rel *pub_rel =3D (publication_rel *) lfirst(lc1); > > > > I was able to apply all the patches and compile successfully, also > > cfbot as in [1] has compiled successfully. One thing I noticed is that > > structure is available at 006 patch, if you did not apply all the > > patch it might fail, we will take care of structure movement in the > > next version. > > [1] - https://cirrus-ci.com/task/5231672585617408 > > > > Fixing an earlier comment from Peter: > On Mon, Oct 31, 2022 at 7:07 PM Peter Smith > wrote: > > > >0. append_object_to_format_string > >Instead of this little loop why doesn't the code just look for the > ?name delimiters? > > > >e.g. > >pstart =3D strch(sub_fmt, '{'); > >pend =3D strbrk(pstart, ":}"); > > > >then the 'name' is what lies in between... > > made the logic simpler with strchr. > > Also: > 1. fixed a compilation warning seen in publicationcmds.c > 2. fixed a broken documentation build > 3. changed a failed build of patch 3 due to missing header. Hi, I have fixed the following issues in the v63 version patch attached: 1) pg_dump was dumping the internally generated event triggers and the create publication with ddl option which resulted in creating multiple event triggers while restoring, this patch now addresses this by skipping the dump of internally generated event triggers 2) Restoring of non ddl publication was not correct, this is handled 3) There were few indent issues while applying 003 patch. These are handled in the v63 version attached. Regards, Vignesh --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v63-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us3470 RnJvbSAxNjM3MzQ2MjVjODUxZGRlZDgwNjYzNzk0NTczY2U0YmU4ZGRhZDRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6MzM6NDQgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2M10gSW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFzdHJ1 Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoxKSBTb21lIG9mIHRoZSBldmVudCB0cmln Z2VyIHN0cnVjdHVyZXMgd2VyZSBtb3ZlZCBmcm9tIGV2ZW50X3RyaWdnZXIuYwogICB0byBldmVu dF90cmlnZ2VyLmggYXMgdGhlc2Ugd2lsbCBiZSByZXF1aXJlZCBmb3IgcHVibGljYXRpb24gZXZl bnQKICAgdHJpZ2dlciBjcmVhdGlvbi4KMikgU29tZSBvZiB0aGUgcHJvdG90eXBlIGFuZCBzdHJ1 Y3R1cmVzIHdlcmUgbW92ZWQgZnJvbSBwZ19wdWJsaWNhdGlvbi5oCiAgIHRvIHB1YmxpY2F0aW9u Y21kcy5oIGFzIG9uZSBvZiB0aGUgbGF0ZXIgcGF0Y2ggcmVxdWlyZXMgaW5jbHVzaW9uIG9mCiAg IHBnX3B1YmxpY2F0aW9uLmggYW5kIHRoZXNlIHByb3RvdHlwZSBoYWQgcmVmZXJlbmNlcyB0byBz ZXJ2ZXIgaGVhZGVyCiAgIGZpbGVzLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMg ICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21k cy5jICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyAgICAgICAgIHwgIDQwICstLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYyAgICAg ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAg ICAgICAgfCAgMzMgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1 dC5jICB8ICAgMSArCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgICAg ICB8ICA5MSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyAgICAg ICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyAgICAgICAgICAg ICAgfCAgNTMgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAg ICAgfCAyNTggKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlv bmNtZHMuaCAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmln Z2VyLmggICAgICAgICB8ICAzOSArKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5oICAgICAgIHwgIDE0ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlv bi5oICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oICAgICAgICAgICAgICAg ICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbC5oICAgICAgICAgICAgICAgICAgICAg IHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oICAgICAgICAgIHwg ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgICAgICAgICAgIHwgICAy ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAgICAgICAgIHwgIDE5ICsrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCB8ICAgMiArLQogMjQg ZmlsZXMgY2hhbmdlZCwgNDc0IGluc2VydGlvbnMoKyksIDEzNSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9hY2xjaGsuYwppbmRleCBjNDIzMjM0NGFhLi4zNmE2Njc3MTEzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hr LmMKQEAgLTEyOSw3ICsxMjksNiBAQCBzdGF0aWMgdm9pZCBleHBhbmRfYWxsX2NvbF9wcml2aWxl Z2VzKE9pZCB0YWJsZV9vaWQsIEZvcm1fcGdfY2xhc3MgY2xhc3NGb3JtLAogCQkJCQkJCQkJICBB Y2xNb2RlICpjb2xfcHJpdmlsZWdlcywKIAkJCQkJCQkJCSAgaW50IG51bV9jb2xfcHJpdmlsZWdl cyk7CiBzdGF0aWMgQWNsTW9kZSBzdHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0IGNoYXIgKnByaXZu YW1lKTsKLXN0YXRpYyBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJp dmlsZWdlKTsKIHN0YXRpYyBBY2xNb2RlIHJlc3RyaWN0X2FuZF9jaGVja19ncmFudChib29sIGlz X2dyYW50LCBBY2xNb2RlIGF2YWlsX2dvcHRpb25zLAogCQkJCQkJCQkJCWJvb2wgYWxsX3ByaXZz LCBBY2xNb2RlIHByaXZpbGVnZXMsCiAJCQkJCQkJCQkJT2lkIG9iamVjdElkLCBPaWQgZ3JhbnRv cklkLApAQCAtMzg1LDExICszODQsMTAgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0bXQgKnN0 bXQpCiAJTGlzdENlbGwgICAqY2VsbDsKIAljb25zdCBjaGFyICplcnJvcm1zZzsKIAlBY2xNb2Rl CQlhbGxfcHJpdmlsZWdlczsKKwlPaWQJCQlncmFudG9yID0gSW52YWxpZE9pZDsKIAogCWlmIChz dG10LT5ncmFudG9yKQogCXsKLQkJT2lkCQkJZ3JhbnRvcjsKLQogCQlncmFudG9yID0gZ2V0X3Jv bGVzcGVjX29pZChzdG10LT5ncmFudG9yLCBmYWxzZSk7CiAKIAkJLyoKQEAgLTQwOCw2ICs0MDYs OSBAQCBFeGVjdXRlR3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkKIAlpc3RtdC5pc19ncmFudCA9 IHN0bXQtPmlzX2dyYW50OwogCWlzdG10Lm9ianR5cGUgPSBzdG10LT5vYmp0eXBlOwogCisJLyog Q29weSB0aGUgZ3JhbnRvciBpZCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgR3JhbnQgKi8K Kwlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CisKIAkvKiBDb2xsZWN0IHRoZSBPSURzIG9m IHRoZSB0YXJnZXQgb2JqZWN0cyAqLwogCXN3aXRjaCAoc3RtdC0+dGFyZ3R5cGUpCiAJewpAQCAt MjYyOCw3ICsyNjI5LDcgQEAgc3RyaW5nX3RvX3ByaXZpbGVnZShjb25zdCBjaGFyICpwcml2bmFt ZSkKIAlyZXR1cm4gMDsJCQkJCS8qIGFwcGVhc2UgY29tcGlsZXIgKi8KIH0KIAotc3RhdGljIGNv bnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBwcml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJp dmlsZWdlKQogewogCXN3aXRjaCAocHJpdmlsZWdlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYwppbmRleCAyNWM1MGQ2NmZkLi4yZjY4ODE2NmUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVj dGFkZHJlc3MuYwpAQCAtNTkyMiw3ICs1OTIyLDcgQEAgZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cyhj b25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJCQkJdHJhbnNmb3JtVHlwZSA9IGZvcm1hdF90 eXBlX2JlX3F1YWxpZmllZCh0cmFuc2Zvcm0tPnRyZnR5cGUpOwogCQkJCXRyYW5zZm9ybUxhbmcg PSBnZXRfbGFuZ3VhZ2VfbmFtZSh0cmFuc2Zvcm0tPnRyZmxhbmcsIGZhbHNlKTsKIAotCQkJCWFw cGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwgImZvciAlcyBvbiBsYW5ndWFnZSAlcyIsCisJCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIGxhbmd1YWdlICVzIiwKIAkJCQkJCQkJIHRy YW5zZm9ybVR5cGUsCiAJCQkJCQkJCSB0cmFuc2Zvcm1MYW5nKTsKIAkJCQlpZiAob2JqbmFtZSkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwppbmRleCA2YTQzMTFjYzYzLi5hYjJhZjJk Mjc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCkBAIC01Miw3ICs1Miw4IEBA IHR5cGVkZWYgc3RydWN0CiAgKiBDUkVBVEUgQ09MTEFUSU9OCiAgKi8KIE9iamVjdEFkZHJlc3MK LURlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpw YXJhbWV0ZXJzLCBib29sIGlmX25vdF9leGlzdHMpCitEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkgYm9vbCBpZl9u b3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2V4aXN0aW5nX2NvbGxpZCkKIHsKIAljaGFy CSAgICpjb2xsTmFtZTsKIAlPaWQJCQljb2xsTmFtZXNwYWNlOwpAQCAtMTM5LDYgKzE0MCwxMyBA QCBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAq cGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZQogCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQog CQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiAldSIsIGNv bGxpZCk7CiAKKwkJLyoKKwkJICogTWFrZSBmcm9tIGV4aXN0aW5nIGNvbGxhdGlvbmlkIGF2YWls YWJsZSB0byBjYWxsZXJzIGZvciBzdGF0ZW1lbnQgc3VjaCBhcworCQkgKiBDUkVBVEUgQ09MTEFU SU9OIGFueV9uYW1lIEZST00gYW55X25hbWUKKwkJICovCisJCWlmIChmcm9tX2V4aXN0aW5nX2Nv bGxpZCAmJiBPaWRJc1ZhbGlkKGNvbGxpZCkpCisJCQlPYmplY3RBZGRyZXNzU2V0KCpmcm9tX2V4 aXN0aW5nX2NvbGxpZCwgQ29sbGF0aW9uUmVsYXRpb25JZCwgY29sbGlkKTsKKwogCQljb2xscHJv dmlkZXIgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbHByb3ZpZGVy OwogCQljb2xsaXNkZXRlcm1pbmlzdGljID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNU KHRwKSktPmNvbGxpc2RldGVybWluaXN0aWM7CiAJCWNvbGxlbmNvZGluZyA9ICgoRm9ybV9wZ19j b2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xsZW5jb2Rpbmc7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMKaW5kZXggZDRiMDBkMWE4Mi4uNjkwMjcwOTk1NiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtNDgsNDUgKzQ4LDcgQEAKICNpbmNsdWRlICJ1dGls cy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi10eXBlZGVmIHN0cnVjdCBF dmVudFRyaWdnZXJRdWVyeVN0YXRlCi17Ci0JLyogbWVtb3J5IGNvbnRleHQgZm9yIHRoaXMgc3Rh dGUncyBvYmplY3RzICovCi0JTWVtb3J5Q29udGV4dCBjeHQ7Ci0KLQkvKiBzcWxfZHJvcCAqLwot CXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7Ci0JYm9vbAkJaW5fc3FsX2Ryb3A7Ci0KLQkvKiB0YWJs ZV9yZXdyaXRlICovCi0JT2lkCQkJdGFibGVfcmV3cml0ZV9vaWQ7CS8qIEludmFsaWRPaWQsIG9y IHNldCBmb3IgdGFibGVfcmV3cml0ZQotCQkJCQkJCQkJICogZXZlbnQgKi8KLQlpbnQJCQl0YWJs ZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSByZWFzb24gKi8KLQotCS8qIFN1cHBvcnQg Zm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLwotCWJvb2wJCWNvbW1hbmRDb2xsZWN0aW9uSW5oaWJp dGVkOwotCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRDb21tYW5kOwotCUxpc3QJICAgKmNvbW1h bmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1hbmQ7IHNlZQotCQkJCQkJCQkgKiBkZXBh cnNlX3V0aWxpdHkuaCAqLwotCXN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlICpwcmV2aW91 czsKLX0gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKLQotc3RhdGljIEV2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7Ci0KLS8qIFN1cHBvcnQgZm9y IGRyb3BwZWQgb2JqZWN0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgU1FMRHJvcE9iamVjdAotewotCU9i amVjdEFkZHJlc3MgYWRkcmVzczsKLQljb25zdCBjaGFyICpzY2hlbWFuYW1lOwotCWNvbnN0IGNo YXIgKm9iam5hbWU7Ci0JY29uc3QgY2hhciAqb2JqaWRlbnRpdHk7Ci0JY29uc3QgY2hhciAqb2Jq ZWN0dHlwZTsKLQlMaXN0CSAgICphZGRybmFtZXM7Ci0JTGlzdAkgICAqYWRkcmFyZ3M7Ci0JYm9v bAkJb3JpZ2luYWw7Ci0JYm9vbAkJbm9ybWFsOwotCWJvb2wJCWlzdGVtcDsKLQlzbGlzdF9ub2Rl CW5leHQ7Ci19IFNRTERyb3BPYmplY3Q7CitFdmVudFRyaWdnZXJRdWVyeVN0YXRlICpjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUgPSBOVUxMOwogCiBzdGF0aWMgdm9pZCBBbHRlckV2ZW50VHJpZ2dl ck93bmVyX2ludGVybmFsKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJSGVhcFR1cGxlIHR1cCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zZWNsYWJlbC5jCmluZGV4IDdmZjE2ZTMyNzYuLjFlODMxZmY3MjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc2VjbGFiZWwuYwpAQCAtMTM0LDYgKzEzNCw5IEBAIEV4ZWNTZWNMYWJlbFN0bXQo U2VjTGFiZWxTdG10ICpzdG10KQogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKIAkJCQkJIGVycm1zZygibXVzdCBzcGVjaWZ5IHByb3ZpZGVyIHdoZW4gbXVs dGlwbGUgc2VjdXJpdHkgbGFiZWwgcHJvdmlkZXJzIGhhdmUgYmVlbiBsb2FkZWQiKSkpOwogCQlw cm92aWRlciA9IChMYWJlbFByb3ZpZGVyICopIGxpbml0aWFsKGxhYmVsX3Byb3ZpZGVyX2xpc3Qp OworCisJCS8qIENvcHkgdGhlIHByb3ZpZGVyIG5hbWUgdG8gdGhlIHBhcnNldHJlZSwgbmVlZGVk IGZvciBEREwgZGVwYXJzaW5nIG9mIFNlY0xhYmVsU3RtdCAqLworCQlzdG10LT5wcm92aWRlciA9 IHBzdHJkdXAocHJvdmlkZXItPnByb3ZpZGVyX25hbWUpOwogCX0KIAllbHNlCiAJewpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3NlcXVlbmNlLmMKaW5kZXggYmZlMjc5Y2RkZi4uMzA0OWUwZTkwMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxh dGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRp b25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2Ug cGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2Vx dWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFU YWJsZSAgICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVw bGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEg cmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5p dF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19h Y2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBE QVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygi cGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAm YnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2Vx dWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdf c2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9u X2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBS ZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBi eSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMKaW5kZXggMWE4MGQ2N2JiOS4uYTBlYzNlNTAzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlw dGlvbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu aCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImZtZ3IuaCIKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMKaW5kZXggYzdkOWQ5NmI0NS4uMWU4M2NmZTM5MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAg LTE0NDYsNyArMTQ0Niw4IEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUs CiAJCQkJCQkJYWRkcmVzcyA9IERlZmluZUNvbGxhdGlvbihwc3RhdGUsCiAJCQkJCQkJCQkJCQkJ ICBzdG10LT5kZWZuYW1lcywKIAkJCQkJCQkJCQkJCQkgIHN0bXQtPmRlZmluaXRpb24sCi0JCQkJ CQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzKTsKKwkJCQkJCQkJCQkJCQkgIHN0bXQtPmlm X25vdF9leGlzdHMsCisJCQkJCQkJCQkJCQkJICAmc2Vjb25kYXJ5T2JqZWN0KTsKIAkJCQkJCQli cmVhazsKIAkJCQkJCWRlZmF1bHQ6CiAJCQkJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBk ZWZpbmUgc3RtdCB0eXBlOiAlZCIsCkBAIC0yMTk2LDYgKzIxOTcsOTQgQEAgVXRpbGl0eUNvbnRh aW5zUXVlcnkoTm9kZSAqcGFyc2V0cmVlKQogCX0KIH0KIAorLyoKKyAqIFJldHVybiB0aGUgZ2l2 ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK2NvbnN0IGNoYXIgKgorc3RyaW5naWZ5 X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpCit7CisJc3dpdGNoIChv Ymp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJcmV0dXJuICJBR0dSRUdB VEUiOworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0dXJuICJDQVNUIjsKKwkJY2FzZSBPQkpF Q1RfQ09MTEFUSU9OOgorCQkJcmV0dXJuICJDT0xMQVRJT04iOworCQljYXNlIE9CSkVDVF9DT0xV TU46CisJCQlyZXR1cm4gaXNncmFudCA/ICJUQUJMRSIgOiAiQ09MVU1OIjsKKwkJY2FzZSBPQkpF Q1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RB VEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJ CXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVy biAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAi RVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEg V1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuIGlzZ3Jh bnQgPyAiRk9SRUlHTiBTRVJWRVIiIDogIlNFUlZFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05f VEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFCTEUiOworCQljYXNlIE9CSkVDVF9GVU5DVElP TjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJCXJldHVy biAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCXJldHVybiAiTEFOR1VBR0Ui OworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCXJldHVybiAiTEFSR0UgT0JKRUNUIjsK KwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJldHVybiAiTUFURVJJQUxJWkVEIFZJRVciOwor CQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0dXJuICJPUEVSQVRPUiBDTEFTUyI7CisJCWNh c2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuICJPUEVSQVRPUiI7CisJCWNhc2UgT0JKRUNU X09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRPUiBGQU1JTFkiOworCQljYXNlIE9CSkVDVF9Q T0xJQ1k6CisJCQlyZXR1cm4gIlBPTElDWSI7CisJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKKwkJ CXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJY2FzZSBPQkpFQ1RfUk9MRToKKwkJCXJldHVybiAiUk9M RSI7CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQlyZXR1cm4gIlJPVVRJTkUiOworCQljYXNl IE9CSkVDVF9SVUxFOgorCQkJcmV0dXJuICJSVUxFIjsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgor CQkJcmV0dXJuICJTQ0hFTUEiOworCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCXJldHVybiAi U0VRVUVOQ0UiOworCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgorCQkJcmV0dXJuICJTVEFU SVNUSUNTIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJY2Fz ZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAiVEFCTEVTUEFDRSI7CisJCWNhc2UgT0JK RUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9UU0NPTkZJ R1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iOworCQljYXNl IE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJT05BUlki OworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggUEFSU0VS IjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggVEVN UExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJY2FzZSBP QkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQljYXNlIE9C SkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KK30KIAogLyoKICAq IEFsdGVyT2JqZWN0VHlwZUNvbW1hbmRUYWcKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMK aW5kZXggMTI0MDJhMDYzNy4uN2I0NzZhZGIyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90 eXBlLmMKQEAgLTI3LDggKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1lcmljLmgiCiAjaW5j bHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0 IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7Ci0KIAogLyoKICAq IFNRTCBmdW5jdGlvbjogZm9ybWF0X3R5cGUodHlwZV9vaWQsIHR5cGVtb2QpCkBAIC0zNjMsNyAr MzYxLDcgQEAgZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKE9pZCB0eXBlX29pZCwgaW50MzIgdHlw ZW1vZCkKIC8qCiAgKiBBZGQgdHlwbW9kIGRlY29yYXRpb24gdG8gdGhlIGJhc2ljIHR5cGUgbmFt ZQogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIHByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5 cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCkKIHsKIAljaGFyCSAgICpyZXM7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JlZ3Byb2MuYwppbmRleCAyOTY5MzBlYjNiLi4xMjhjMTc5NWExIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9yZWdwcm9jLmMKQEAgLTQ5LDYgKzQ5LDggQEAgc3RhdGljIGJvb2wgcGFyc2VOYW1l QW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJ IExpc3QgKipuYW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcywKIAkJCQkJCQkJIE5vZGUg KmVzY29udGV4dCk7CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5h bChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5mbyBidWYsIGJv b2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJIFVTRVIgSS9P IFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpAQCAtMzA3LDYgKzMwOSwyOSBAQCBmb3JtYXRfcHJv Y2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJlX29pZCkKIAlyZXR1cm4gZm9ybWF0X3Byb2Nl ZHVyZV9leHRlbmRlZChwcm9jZWR1cmVfb2lkLCBGT1JNQVRfUFJPQ19GT1JDRV9RVUFMSUZZKTsK IH0KIAorLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJvYyBPSUQg dG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2Nl ZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJ SGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlwcm9jdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2VkdXJlX29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQpOworCXBy b2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5pdFN0cmlu Z0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nmb3JtLCAm YnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKworCXJl dHVybiBidWYuZGF0YTsKK30KKwogLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQgLSBj b252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCkBAIC0yMDE2LDMg KzIwNDEsMzEgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29s IGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcmV0dXJuIHRydWU7CiB9CisKKy8qCisgKiBB cHBlbmQgdGhlIHBhcmVudGhlc2l6ZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBwZ19wcm9jIHJv dyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gZm9yY2VfcXVhbGlmeSBpbmRpY2F0ZXMgd2hl dGhlciB0byBzY2hlbWEtcXVhbGlmeSB0eXBlIG5hbWVzCisgKiByZWdhcmRsZXNzIG9mIHZpc2li aWxpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwo Rm9ybV9wZ19wcm9jIHByb2Nmb3JtLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBib29sIGZv cmNlX3F1YWxpZnkpCit7CisJaW50CQkJaTsKKwljaGFyKgkJKCpmdW5jWzJdKShPaWQpID0ge2Zv cm1hdF90eXBlX2JlLCBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWR9OworCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBwcm9jZm9ybS0+cHJvbmFyZ3M7 IGkrKykKKwl7CisJCU9pZAkJCXRoaXNhcmd0eXBlID0gcHJvY2Zvcm0tPnByb2FyZ3R5cGVzLnZh bHVlc1tpXTsKKwkJY2hhcgkgICAqYXJndHlwZSA9IE5VTEw7CisKKwkJaWYgKGkgPiAwKQorCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCisJCWFyZ3R5cGUgPSBmdW5jW2ZvcmNl X3F1YWxpZnldKHRoaXNhcmd0eXBlKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGFy Z3R5cGUpOworCQlwZnJlZShhcmd0eXBlKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDlhYzQyZWZkYmMuLjFm NDEyMDY2MTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1LDYgKzM1LDcgQEAK ICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19w YXJ0aXRpb25lZF90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGlj X2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZS5oIgpAQCAtMzU4LDcgKzM1OSw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rp b25fYXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJ CSBib29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZv aWQgcHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0 dXApOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYs IEhlYXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHko U3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFi bGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2Vz LAogCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJz ZV9mb3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4 MiwyMiArNDgyLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJh bmdlVGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNl ICp0YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRp YyB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUs Ci0JCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rp b24oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHBy aW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3Rh dGljIGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3Bh Y2VzKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQg cmVsaWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwg aW50IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJ CQkJCQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQ YXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29w ZXJhdG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lk IGFkZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdl bmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJp bmdfdG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhP aWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERh dHVtIHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5o ID8gIiIgOiAiT05MWSAiKQpAQCAtNTQ1LDYgKzUzOCwxMDQgQEAgcGdfZ2V0X3J1bGVkZWZfZXh0 KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMp KTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBjb3JyZXNwb25kaW5nIHRvIGEg cnVsZSdzIHBnX3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2FjdGlvbiBjb2x1bW5zLCByZXR1 cm4gdGhlaXIgdGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBhcyBhIHNpbmdsZQorICogc3Ry aW5nIGluIHdoZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBMaXN0IG9mIHN0cmluZ3MgKHdo aWNoIG1pZ2h0IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElORykgaW4gYWN0aW9ucy4KKyAq Lwordm9pZAorcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwgRGF0dW0gZXZf YWN0aW9uLAorCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0aW9ucykKK3sKKwlp bnQJCQlwcmV0dHlGbGFncyA9IDA7CisJY2hhcgkgICAqcXVhbHN0ciA9IFRleHREYXR1bUdldENT dHJpbmcoZXZfcXVhbCk7CisJY2hhcgkgICAqYWN0aW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmlu Zyhldl9hY3Rpb24pOworCUxpc3QJICAgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3QgKikgc3RyaW5n VG9Ob2RlKGFjdGlvbnN0cik7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJKndoZXJlQ2xhdXNl ID0gTlVMTDsKKwkqYWN0aW9ucyA9IE5JTDsKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlpZiAo c3RybGVuKHF1YWxzdHIpID4gMCAmJiBzdHJjbXAocXVhbHN0ciwgIjw+IikgIT0gMCkKKwl7CisJ CU5vZGUJICAgKnF1YWw7CisJCVF1ZXJ5CSAgICpxdWVyeTsKKwkJZGVwYXJzZV9jb250ZXh0IGNv bnRleHQ7CisJCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisKKwkJcXVhbCA9IHN0cmluZ1RvTm9k ZShxdWFsc3RyKTsKKworCQlxdWVyeSA9IChRdWVyeSAqKSBsaW5pdGlhbChhY3Rpb25Ob2RlTGlz dCk7CisJCXF1ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVlcnkocXVlcnksIE5VTEwpOworCisJCUFj cXVpcmVSZXdyaXRlTG9ja3MocXVlcnksIGZhbHNlLCBmYWxzZSk7CisKKwkJY29udGV4dC5idWYg PSAmYnVmOworCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKwkJY29u dGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7CisJ CWNvbnRleHQudmFycHJlZml4ID0gKGxpc3RfbGVuZ3RoKHF1ZXJ5LT5ydGFibGUpICE9IDEpOwor CQljb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5RmxhZ3M7CisJCWNvbnRleHQud3JhcENvbHVt biA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJ TkRFTlRfU1REOworCisJCXNldF9kZXBhcnNlX2Zvcl9xdWVyeSgmZHBucywgcXVlcnksIE5JTCk7 CisKKwkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOworCisJCSp3aGVyZUNs YXVzZSA9IHBzdHJkdXAoYnVmLmRhdGEpOworCX0KKworCWlmIChsaXN0X2xlbmd0aChhY3Rpb25O b2RlTGlzdCkgPiAwKQorCXsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlmb3JlYWNoKGNlbGws IGFjdGlvbk5vZGVMaXN0KQorCQl7CisJCQlRdWVyeQkgICAqcXVlcnkgPSAoUXVlcnkgKikgbGZp cnN0KGNlbGwpOworCisJCQlpZiAocXVlcnktPmNvbW1hbmRUeXBlID09IENNRF9OT1RISU5HKQor CQkJCWNvbnRpbnVlOworCisJCQlyZXNldFN0cmluZ0luZm8oJmJ1Zik7CisJCQlnZXRfcXVlcnlf ZGVmKHF1ZXJ5LCAmYnVmLCBOSUwsIE5VTEwsIHRydWUsCisJCQkJCQkgIHByZXR0eUZsYWdzLCBX UkFQX0NPTFVNTl9ERUZBVUxULCAwKTsKKwkJCSphY3Rpb25zID0gbGFwcGVuZCgqYWN0aW9ucywg cHN0cmR1cChidWYuZGF0YSkpOworCQl9CisJfQorfQorCisvKgorICogVG8gZ2V0IHRoZSByZXdy aXRlIHJ1bGUgb2YgYSB2aWV3IHdoZW4gdGhlIENSRUFURSBWSUVXIGNvbW1hbmQgZXhlY3V0aW9u IGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzczogd2Ugc2VhcmNoIHRoZSBzeXN0ZW0gY2FjaGUgUlVM RVJFTE5BTUUgdG8gZ2V0IHRoZSByZXdyaXRlCisgKiBydWxlIG9mIHRoZSB2aWV3IGFzIG9wcG9z ZWQgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBpbiBwZ19nZXRfdmlld2RlZl93b3JrZXIoKSwK KyAqIHdoaWNoIHdpbGwgcmV0dXJuIGVtcHR5IHJlc3VsdC4KKyAqLworY2hhciAqCitwZ19nZXRf dmlld2RlZl9pbnRlcm5hbChPaWQgdmlld29pZCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJ UmVsYXRpb24JcGdfcmV3cml0ZTsKKwlIZWFwVHVwbGUJcnVsZXR1cDsKKwlUdXBsZURlc2MJcnVs ZXR0YzsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBnX3Jld3JpdGUgPSB0YWJsZV9vcGVu KFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcnVsZXR1cCA9IFNlYXJj aFN5c0NhY2hlMihSVUxFUkVMTkFNRSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0odmlld29p ZCksCisJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0oVmlld1NlbGVjdFJ1bGVOYW1lKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHJ1bGV0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIGZvciB2aWV3IHdpdGggT0lEICV1Iiwgdmlld29pZCk7 CisKKwlydWxldHRjID0gcGdfcmV3cml0ZS0+cmRfYXR0OworCW1ha2Vfdmlld2RlZigmYnVmLCBy dWxldHVwLCBydWxldHRjLCAwLCBXUkFQX0NPTFVNTl9ERUZBVUxUKTsKKwlSZWxlYXNlU3lzQ2Fj aGUocnVsZXR1cCk7CisJdGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBidWYuZGF0YTsKK30KIAogc3RhdGljIGNoYXIgKgogcGdfZ2V0X3J1bGVkZWZf d29ya2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMDE1LDY1ICsxMTA2LDEy IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlp ZiAoIWlzbnVsbCkKIAl7CiAJCU5vZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJlbGtpbmQ7Ci0JCWRl cGFyc2VfY29udGV4dCBjb250ZXh0OwotCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwotCQlSYW5n ZVRibEVudHJ5ICpvbGRydGU7Ci0JCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKLQotCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZidWYsICJXSEVOICgiKTsKKwkJY2hhcgkgICAqcXVhbHN0cjsKIAog CQlxdWFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJcXVh bHN0ciA9IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwgcHJldHR5KTsK IAotCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOwotCi0JCS8q IEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLwotCQlvbGRydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFU SU9OOwotCQlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xkcnRlLT5yZWxr aW5kID0gcmVsa2luZDsKLQkJb2xkcnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsK LQkJb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKLQkJb2xkcnRlLT5lcmVm ID0gb2xkcnRlLT5hbGlhczsKLQkJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+ aW5oID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5ld3J0ZSA9IG1h a2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047 Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQluZXdydGUtPnJlbGtpbmQg PSByZWxraW5kOwotCQluZXdydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQlu ZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOwotCQluZXdydGUtPmVyZWYgPSBu ZXdydGUtPmFsaWFzOwotCQluZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3cnRlLT5pbmgg PSBmYWxzZTsKLQkJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJLyogQnVpbGQgdHdvLWVs ZW1lbnQgcnRhYmxlICovCi0JCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKLQkJZHBu cy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5zdWJwbGFucyA9 IE5JTDsKLQkJZHBucy5jdGVzID0gTklMOwotCQlkcG5zLmFwcGVuZHJlbHMgPSBOVUxMOwotCQlz ZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOwotCQlzZXRfc2ltcGxlX2NvbHVtbl9u YW1lcygmZHBucyk7Ci0KLQkJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3Bh Y2Ugc3RhY2sgKi8KLQkJY29udGV4dC5idWYgPSAmYnVmOwotCQljb250ZXh0Lm5hbWVzcGFjZXMg PSBsaXN0X21ha2UxKCZkcG5zKTsKLQkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7Ci0JCWNv bnRleHQud2luZG93VExpc3QgPSBOSUw7Ci0JCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKLQkJ Y29udGV4dC5wcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsKLQkJY29udGV4 dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRlbnRMZXZl bCA9IFBSRVRUWUlOREVOVF9TVEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJf S0lORF9OT05FOwotCQljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCWdldF9ydWxl X2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZidWYsICIpICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJXSEVOICglcykgIiwgcXVh bHN0cik7CiAJfQogCiAJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VURSBGVU5DVElPTiAl cygiLApAQCAtMTExNCw2ICsxMTUyLDY5IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQg dHJpZ2lkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAKKy8qCisgKiBQYXJz ZSBiYWNrIHRoZSBUcmlnZ2VyV2hlbiBjbGF1c2Ugb2YgYSB0cmlnZ2VyIGdpdmVuIHRoZSBwZ190 cmlnZ2VyIHJlY29yZCBhbmQKKyAqIHRoZSBleHByZXNzaW9uIHRyZWUgKGluIG5vZGVUb1N0cmlu ZygpIHJlcHJlc2VudGF0aW9uKSBmcm9tIHBnX3RyaWdnZXIudGdxdWFsCisgKiBmb3IgdGhlIHRy aWdnZXIncyBXSEVOIGNvbmRpdGlvbi4KKyAqLworY2hhciAqCitwZ19nZXRfdHJpZ2dlcl93aGVu Y2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHBy ZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hhcgkJcmVsa2luZDsKKwlkZXBhcnNl X2NvbnRleHQgY29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCVJhbmdlVGJsRW50 cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKworCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7CisK KwkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KKwlvbGRy dGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVM QVRJT047CisJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJb2xkcnRlLT5yZWxr aW5kID0gcmVsa2luZDsKKwlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOwor CW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7 CisJb2xkcnRlLT5pbmggPSBmYWxzZTsKKwlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCW5l d3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRla2luZCA9IFJURV9S RUxBVElPTjsKKwluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwluZXdydGUtPnJl bGtpbmQgPSByZWxraW5kOworCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7 CisJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKwluZXdydGUtPmxhdGVyYWwgPSBmYWxz ZTsKKwluZXdydGUtPmluaCA9IGZhbHNlOworCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisJ LyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCisJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2Yo ZHBucykpOworCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7CisJZHBu cy5jdGVzID0gTklMOworCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7CisJc2V0 X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOworCisJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBv bmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKwljb250ZXh0LmJ1ZiA9ICZidWY7CisJY29udGV4 dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJY29udGV4dC53aW5kb3dDbGF1c2Ug PSBOSUw7CisJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwljb250ZXh0LnZhcnByZWZpeCA9 IHRydWU7CisJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRUWUZMQUdfUEFSRU4g fCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworCWNvbnRleHQud3JhcENv bHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRU WUlOREVOVF9TVEQ7CisJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7 CisKKwlnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisKKwlyZXR1 cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0g R2V0IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2ICsxOTgxLDEzIEBA IHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1 cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFs c2UpOwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0 aXRpb24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxl KE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCAw LCBmYWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29t cGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzMSw2ICsyMjM5LDE1 IEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBJbnRlcm5hbCB2ZXJz aW9uIHRoYXQgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJTlQgY29tbWFuZAor ICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBjb25z dHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihjb25zdHJh aW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB2ZXJzaW9uIHRo YXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIGNvbW1hbmQK ICAqLwpAQCAtMzUwMSw3ICszNjE4LDEyIEBAIHBnX2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQ R19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7 CiB9CiAKLXN0YXRpYyB2b2lkCisvKgorICogUHJvZHVjZSB0aGUgZm9ybWF0dGVkIFNRTCBib2R5 IChub3QgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24pCisgKiBvZiBhIGZ1bmN0aW9uIGdp dmVuIHRoZSBwZ19wcm9jIHR1cGxlLiBTYXZlIHRoZSBmb3JtYXR0ZWQgU1FMIGluIHRoZQorICog Z2l2ZW4gU3RyaW5nSW5mby4KKyAqLwordm9pZAogcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJp bmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJbnVtYXJnczsKQEAgLTEx MzU3LDcgKzExNDc5LDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAq dGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAqIGFjdHVhbF9kYXRhdHlw ZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0IHBhc3MKICAqIEludmFs aWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBnZXRf b3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAogCQkJCSBTdHJp bmdJbmZvIGJ1ZikKIHsKQEAgLTExNzUxLDcgKzExODczLDcgQEAgZ2VuZXJhdGVfcXVhbGlmaWVk X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1bHQgaW5jbHVkZXMgYWxs IG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgogICovCi1zdGF0aWMgY2hh ciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdz LCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAgYm9vbCBoYXNfdmFyaWFk aWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4cHJLaW5kIHNwZWNpYWxf ZXhwcmtpbmQpCkBAIC0xMjEzNyw3ICsxMjI1OSw3IEBAIGdldF9yZWxvcHRpb25zKFN0cmluZ0lu Zm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRlIGEgQyBzdHJpbmcgcmVw cmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxMIGlmIG5vbmUuCiAgKi8K LXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCkKIHsK IAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5o CmluZGV4IDZlY2FhMmEwMWUuLjcxNWYyYTJlMzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKQEAgLTE4LDggKzE4LDggQEAKICNkZWZpbmUgUEdfUFVCTElDQVRJT05fSAogCiAj aW5jbHVkZSAiY2F0YWxvZy9nZW5ia2kuaCIKLSNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJl c3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX2QuaCIKKyNpbmNsdWRlICJu b2Rlcy9wZ19saXN0LmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlwZ19wdWJsaWNhdGlv biBkZWZpbml0aW9uLiAgY3BwIHR1cm5zIHRoaXMgaW50bwpAQCAtMTAzLDEyICsxMDMsNiBAQCB0 eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbgogCVB1YmxpY2F0aW9uQWN0aW9ucyBwdWJhY3Rpb25z OwogfSBQdWJsaWNhdGlvbjsKIAotdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25SZWxJbmZvCi17 Ci0JUmVsYXRpb24JcmVsYXRpb247Ci0JTm9kZQkgICAqd2hlcmVDbGF1c2U7Ci0JTGlzdAkgICAq Y29sdW1uczsKLX0gUHVibGljYXRpb25SZWxJbmZvOwogCiBleHRlcm4gUHVibGljYXRpb24gKkdl dFB1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CiBleHRlcm4gUHVibGljYXRpb24gKkdldFB1YmxpY2F0 aW9uQnlOYW1lKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vayk7CkBAIC0xNDQs MTUgKzEzOCw2IEBAIGV4dGVybiBMaXN0ICpHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMo TGlzdCAqcmVzdWx0LAogCQkJCQkJCQkJCQlPaWQgcmVsaWQpOwogZXh0ZXJuIE9pZAlHZXRUb3BN b3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBwdWJvaWQsIExpc3QgKmFuY2VzdG9ycywKIAkJ CQkJCQkJCQkJaW50ICphbmNlc3Rvcl9sZXZlbCk7Ci0KLWV4dGVybiBib29sIGlzX3B1Ymxpc2hh YmxlX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gYm9vbCBpc19zY2hlbWFfcHVibGlj YXRpb24oT2lkIHB1YmlkKTsKLWV4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9y ZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAotCQkJCQkJCQkJCQkg IGJvb2wgaWZfbm90X2V4aXN0cyk7Ci1leHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9h ZGRfc2NoZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLAotCQkJCQkJCQkJCQlib29sIGlmX25v dF9leGlzdHMpOwotCi1leHRlcm4gQml0bWFwc2V0ICpwdWJfY29sbGlzdF90b19iaXRtYXBzZXQo Qml0bWFwc2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xzLAotCQkJCQkJCQkJCSAgIE1lbW9yeUNv bnRleHQgbWN4dCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQR19QVUJMSUNBVElPTl9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKaW5kZXggYjc2YzdiM2RjMy4uNTNjNGExYThjMiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaApAQCAtMTgsNyArMTgsOCBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9u b2RlLmgiCiAKLWV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9leGlz dHMpOworZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJCQkJCQkJCQkgIGJvb2wgaWZf bm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9jb2xsaWQpOwogZXh0ZXJuIHZvaWQgSXNU aGVyZUNvbGxhdGlvbkluTmFtZXNwYWNlKGNvbnN0IGNoYXIgKmNvbGxuYW1lLCBPaWQgbnNwT2lk KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyQ29sbGF0aW9uKEFsdGVyQ29sbGF0aW9uU3Rt dCAqc3RtdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCA1ZWQ2ZWNl NTU1Li40OGM2NWVmNTNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC0x Niw2ICsxNiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19ldmVudF90cmln Z2VyLmgiCisjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgogI2luY2x1ZGUgInRjb3AvY21kdGFnLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0 aWxpdHkuaCIKQEAgLTI5LDYgKzMwLDQ0IEBAIHR5cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlckRh dGEKIAlDb21tYW5kVGFnCXRhZzsKIH0gRXZlbnRUcmlnZ2VyRGF0YTsKIAordHlwZWRlZiBzdHJ1 Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZQoreworCS8qIG1lbW9yeSBjb250ZXh0IGZvciB0aGlz IHN0YXRlJ3Mgb2JqZWN0cyAqLworCU1lbW9yeUNvbnRleHQgY3h0OworCisJLyogc3FsX2Ryb3Ag Ki8KKwlzbGlzdF9oZWFkCVNRTERyb3BMaXN0OworCWJvb2wJCWluX3NxbF9kcm9wOworCisJLyog dGFibGVfcmV3cml0ZSAqLworCU9pZAkJCXRhYmxlX3Jld3JpdGVfb2lkOwkvKiBJbnZhbGlkT2lk LCBvciBzZXQgZm9yIHRhYmxlX3Jld3JpdGUKKwkJCQkJCQkJCSAqIGV2ZW50ICovCisJaW50CQkJ dGFibGVfcmV3cml0ZV9yZWFzb247CS8qIEFUX1JFV1JJVEUgcmVhc29uICovCisKKwkvKiBTdXBw b3J0IGZvciBjb21tYW5kIGNvbGxlY3Rpb24gKi8KKwlib29sCQljb21tYW5kQ29sbGVjdGlvbklu aGliaXRlZDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjdXJyZW50Q29tbWFuZDsKKwlMaXN0CSAgICpj b21tYW5kTGlzdDsJLyogbGlzdCBvZiBDb2xsZWN0ZWRDb21tYW5kOyBzZWUKKwkJCQkJCQkJICog ZGVwYXJzZV91dGlsaXR5LmggKi8KKwlzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqcHJl dmlvdXM7Cit9IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGU7CisKKy8qIFN1cHBvcnQgZm9yIGRyb3Bw ZWQgb2JqZWN0cyAqLwordHlwZWRlZiBzdHJ1Y3QgU1FMRHJvcE9iamVjdAoreworCU9iamVjdEFk ZHJlc3MgYWRkcmVzczsKKwljb25zdCBjaGFyICpzY2hlbWFuYW1lOworCWNvbnN0IGNoYXIgKm9i am5hbWU7CisJY29uc3QgY2hhciAqb2JqaWRlbnRpdHk7CisJY29uc3QgY2hhciAqb2JqZWN0dHlw ZTsKKwlMaXN0CSAgICphZGRybmFtZXM7CisJTGlzdAkgICAqYWRkcmFyZ3M7CisJYm9vbAkJb3Jp Z2luYWw7CisJYm9vbAkJbm9ybWFsOworCWJvb2wJCWlzdGVtcDsKKwlzbGlzdF9ub2RlCW5leHQ7 Cit9IFNRTERyb3BPYmplY3Q7CisKICNkZWZpbmUgQVRfUkVXUklURV9BTFRFUl9QRVJTSVNURU5D RQkweDAxCiAjZGVmaW5lIEFUX1JFV1JJVEVfREVGQVVMVF9WQUwJCQkweDAyCiAjZGVmaW5lIEFU X1JFV1JJVEVfQ09MVU1OX1JFV1JJVEUJCTB4MDQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmgKaW5kZXggNzBkNWUzNjgwYS4uYTNmY2E5ZTY0YyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmgKQEAgLTIyLDYgKzIyLDEzIEBACiAvKiBTYW1lIGFzIE1BWE5V TU1FU1NBR0VTIGluIHNpbnZhbGFkdC5jICovCiAjZGVmaW5lIE1BWF9SRUxDQUNIRV9JTlZBTF9N U0dTIDQwOTYKIAordHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25SZWxJbmZvCit7CisJUmVsYXRp b24JcmVsYXRpb247CisJTm9kZQkgICAqd2hlcmVDbGF1c2U7CisJTGlzdAkgICAqY29sdW1uczsK K30gUHVibGljYXRpb25SZWxJbmZvOworCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBDcmVhdGVQdWJs aWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCk7 CiBleHRlcm4gdm9pZCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQ dWJsaWNhdGlvblN0bXQgKnN0bXQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlUHVibGljYXRpb25CeUlk KE9pZCBwdWJpZCk7CkBAIC0zNSw1ICs0MiwxMiBAQCBleHRlcm4gYm9vbCBwdWJfcmZfY29udGFp bnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJ CQkgICBMaXN0ICphbmNlc3RvcnMsIGJvb2wgcHVidmlhcm9vdCk7CiBleHRlcm4gYm9vbCBwdWJf Y29sbGlzdF9jb250YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0 aW9uLAogCQkJCQkJCQkJCQkJTGlzdCAqYW5jZXN0b3JzLCBib29sIHB1YnZpYXJvb3QpOworZXh0 ZXJuIEJpdG1hcHNldCAqcHViX2NvbGxpc3RfdG9fYml0bWFwc2V0KEJpdG1hcHNldCAqY29sdW1u cywgRGF0dW0gcHViY29scywKKwkJCQkJCQkJCQkgICBNZW1vcnlDb250ZXh0IG1jeHQpOworZXh0 ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVi bGljYXRpb25SZWxJbmZvICpwcmksCisJCQkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzKTsK K2V4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBP aWQgc2NoZW1haWQsCisJCQkJCQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRlcm4gYm9v bCBpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihSZWxhdGlvbiByZWwpOwogCiAjZW5kaWYJCQkJCQkJ LyogUFVCTElDQVRJT05DTURTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IDdkYjdi M2RhN2IuLjMwOWRhMGNlMzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVl bmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQs NyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRl cm5hbChPaWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5l eHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhP aWQgcmVsaWQpOworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFs dWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVu Y2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVj dEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAq c3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRp b24uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oCmluZGV4IDlj MzQwNTRiYjcuLjQ3MWM1MzU3YTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxyZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxy ZWxhdGlvbi5oCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvYXR0bWFwLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9sb2NrZGVmcy5oIgogCiB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwUmVsTWFwRW50cnkKIHsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNv cC91dGlsaXR5LmgKaW5kZXggNTllNjRhZWEwNy4uYTY4Y2UzZDMzNiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgK QEAgLTk5LDYgKzk5LDggQEAgZXh0ZXJuIFF1ZXJ5ICpVdGlsaXR5Q29udGFpbnNRdWVyeShOb2Rl ICpwYXJzZXRyZWUpOwogCiBleHRlcm4gQ29tbWFuZFRhZyBDcmVhdGVDb21tYW5kVGFnKE5vZGUg KnBhcnNldHJlZSk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmpl Y3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCk7CisKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hh ciAqCiBDcmVhdGVDb21tYW5kTmFtZShOb2RlICpwYXJzZXRyZWUpCiB7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9hY2wuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCmluZGV4IGY4 ZTEyMzhmYTIuLmYwNTU3OGQzMjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0yMDksNiArMjA5LDggQEAgZXh0ZXJu IEFjbE1vZGUgYWNsbWFzayhjb25zdCBBY2wgKmFjbCwgT2lkIHJvbGVpZCwgT2lkIG93bmVySWQs CiAJCQkJCSAgIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwogZXh0ZXJuIGludAlhY2xt ZW1iZXJzKGNvbnN0IEFjbCAqYWNsLCBPaWQgKipyb2xlaWRzKTsKIAorZXh0ZXJuIGNvbnN0IGNo YXIgKnByaXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxlZ2UpOworCiBleHRlcm4gYm9v bCBoYXNfcHJpdnNfb2Zfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7CiBleHRlcm4gYm9vbCBt ZW1iZXJfY2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKIGV4dGVybiB2b2lkIGNo ZWNrX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNo a19pbnRlcm5hbC5oCmluZGV4IDU1YWY2MjRmYjMuLjk0NjU0NWY1M2YgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlz dAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhh dmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaAppbmRleCAyZjhiNDZkNmRhLi40OGI4YmZkNzlhIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK QEAgLTEyMywxMCArMTIzLDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVy ZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElG WQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRf VFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJu IGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwg Yml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHBy b2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRf dHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxp ZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1v ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9k KGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4 dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCmluZGV4IGFmOTc4NTAzOGQuLjEwM2IzOTJiNzMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0xNiwx MCArMTYsMTIgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmRleC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb24uaCIKICNpbmNsdWRlICJub2Rlcy9iaXRtYXBz ZXQuaCIKKyNpbmNsdWRlICJub2Rlcy9sb2Nrb3B0aW9ucy5oIgogI2luY2x1ZGUgInBhcnRpdGlv bmluZy9wYXJ0ZGVmcy5oIgogI2luY2x1ZGUgInJld3JpdGUvcHJzMmxvY2suaCIKICNpbmNsdWRl ICJzdG9yYWdlL2Jsb2NrLmgiCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRp bHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDFhNDJkOWYzOWIuLmMz M2M4ZDA2NTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2lmbmRl ZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNjZXNzL2h0 dXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9u b2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9w Z19saXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0IFBsYW47 CQkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0IFBsYW5u ZWRTdG10OwpAQCAtMjMsMTIgKzI2LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0ZXJu IGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNo YXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIg dHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsKIGV4 dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7Citl eHRlcm4gY2hhciAqcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwogCiBleHRl cm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5 KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsKIGV4 dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBj aGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dldF9y dWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCQkJ CWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVw YXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9v bCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2Vf Y29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCAr NTEsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlz dCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNo YXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdl bmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVf ZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJ CQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1 c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7 CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0 dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1 YWxfZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0 dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0 aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1bmN0 aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2VuZGlm CQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2Jq ZWN0X2FkZHJlc3Mub3V0CmluZGV4IDI1YzE3NGYyNzUuLmZjNDJkNDE4YmYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTYsNyArNDk2LDcg QEAgb3BlcmF0b3IgZmFtaWx5fHBnX2NhdGFsb2d8aW50ZWdlcl9vcHN8cGdfY2F0YWxvZy5pbnRl Z2VyX29wcyBVU0lORyBidHJlZXx0CiBwb2xpY3l8TlVMTHxOVUxMfGdlbnBvbCBvbiBhZGRyX25z cC5nZW50YWJsZXx0CiBzdGF0aXN0aWNzIG9iamVjdHxhZGRyX25zcHxnZW50YWJsZV9zdGF0fGFk ZHJfbnNwLmdlbnRhYmxlX3N0YXR8dAogY29sbGF0aW9ufHBnX2NhdGFsb2d8ImRlZmF1bHQifHBn X2NhdGFsb2cuImRlZmF1bHQifHQKLXRyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgb24g bGFuZ3VhZ2Ugc3FsfHQKK3RyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgbGFuZ3VhZ2Ug c3FsfHQKIHRleHQgc2VhcmNoIGRpY3Rpb25hcnl8YWRkcl9uc3B8YWRkcl90c19kaWN0fGFkZHJf bnNwLmFkZHJfdHNfZGljdHx0CiB0ZXh0IHNlYXJjaCBwYXJzZXJ8YWRkcl9uc3B8YWRkcl90c19w cnN8YWRkcl9uc3AuYWRkcl90c19wcnN8dAogdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbnxhZGRy X25zcHxhZGRyX3RzX2NvbmZ8YWRkcl9uc3AuYWRkcl90c19jb25mfHQKLS0gCjIuMzQuMQoK --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v63-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us34m4 RnJvbSBmMjE4NDI3NjZhMDk4YTVlYmM4NzdlMzMxNDdiMmRkZjZiNDhkMWY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6NTM6MTggLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MyA1LzddIERETCBtZXNzYWdpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIERETCByZXBsaWNhdGlv bi4KCkRETCBtZXNzYWdpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIERETCByZXBsaWNhdGlvbi4KLS0t CiBjb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvZGRsLm91dCAgICAgICAgfCAgMjYgKysr KwogY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsICAgICAgICAgICAgIHwgICA1ICsK IGNvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29kaW5nLmMgICAgICAgICB8ICA0OCArKysr KysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgICAgICAgICAgfCAgIDEg KwogLi4uL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jICAgICAgIHwgIDUyICsr KysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZCAgICAgICB8ICAg MSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICB8ICA4NCArKysr KysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8 ICA0MSArKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAg ICB8ICA0NCArKysrKysKIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jICAg ICAgICB8ICAyNCArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1 aWxkICAgfCAgIDEgKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAg ICAgIHwgMTI3ICsrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNj LmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5o ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 ICAgICAgICAgICAgICAgfCAgIDggKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCAgICAgICAgICB8ICA2MCArKysrKysrKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2Rl Y29kZS5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRw dXRfcGx1Z2luLmggICAgICAgfCAgMTQgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCAgICAgICB8ICAyNyArKysrCiAyMSBmaWxlcyBjaGFuZ2VkLCA1NjggaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9s b2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVj b2RpbmcvZXhwZWN0ZWQvZGRsLm91dCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9k ZGwub3V0CmluZGV4IDlhMjhiNWRkYzUuLjBmNTFmMmI0MWEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0CisrKyBiL2NvbnRyaWIvdGVzdF9kZWNvZGlu Zy9leHBlY3RlZC9kZGwub3V0CkBAIC04MzEsNiArODMxLDMyIEBAIFNFTEVDVCBkYXRhIEZST00g cGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxM LCAnaW5jCiAtLS0tLS0KICgwIHJvd3MpCiAKK1NFTEVDVCAnZGRsIG1zZzEnIEZST00gcGdfbG9n aWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMScsIDE2Mzk0LCAxLCAnbXNnMScpOworID9j b2x1bW4/IAorLS0tLS0tLS0tLQorIGRkbCBtc2cxCisoMSByb3cpCisKK1NFTEVDVCAnZGRsIG1z ZzInIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMicsIDE2Mzk0LCAx LCAneyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1 dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAi QVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwg ImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifScpOworID9j b2x1bW4/IAorLS0tLS0tLS0tLQorIGRkbCBtc2cyCisoMSByb3cpCisKK1NFTEVDVCAnZGRsIG1z ZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMycsIDE2Mzk0LCAx LCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9 cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFi bGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9 cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwgInNjaGVt YW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgl e3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25f Y29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQi OiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNw YWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJX SVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJ T04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51 bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMi OiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNU T1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3Rf bnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAi dHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZh bHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRl ZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6 ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAi Y29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9O ICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25f bWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFM V0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworID9jb2x1bW4/IAorLS0tLS0tLS0t LQorIGRkbCBtc2czCisoMSByb3cpCisKK1NFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90 X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRz JywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcxJyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbWVzc2FnZTogcHJlZml4OiBkZGwgbXNnMSwg cmVsaWQ6IDE2Mzk0LCBjbWR0eXBlOiBEcm9wIHN0YXJ0LCBzejogNCBjb250ZW50Om1zZzEKKyBt ZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cyLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Agc3Rh cnQsIHN6OiAyMTcgY29udGVudDp7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0 c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6 YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhp c3RzIjogIiJ9CisgbWVzc2FnZTogcHJlZml4OiBkZGwgbXNnMywgcmVsaWQ6IDE2Mzk0LCBjbWR0 eXBlOiBEcm9wIHN0YXJ0LCBzejogMTM5NiBjb250ZW50OnsiZm10IjogIkNSRUFURSAle3BlcnNp c3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2Vs ZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7 cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50 aXR5IjogeyJvYmpuYW1lIjogImZvbyIsICJzY2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9LCAi aW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMi OiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1J VCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1 ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNl fUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2Ui OiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAi cGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZt dCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3Nf bWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7 ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29t cHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVy YXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUi OiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAi c2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIs ICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10Ijog IkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29t cHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVk X2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNl fX1dfX0KKygzIHJvd3MpCisKIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3JlZ3Jl c3Npb25fc2xvdCcpOwogIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCAKIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5z cWwgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKaW5kZXggNGY3NmJlZDcyYy4u MWVhNWE0YjI3MSAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3Fs CisrKyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbApAQCAtNDMxLDYgKzQzMSwx MSBAQCBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVz c2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2luYwogLS0gZG9uZSwgZnJlZSBsb2dpY2FsIHJlcGxp Y2F0aW9uIHNsb3QKIFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2Vz KCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRzJywgJzAnLCAnc2tp cC1lbXB0eS14YWN0cycsICcxJyk7CiAKK1NFTEVDVCAnZGRsIG1zZzEnIEZST00gcGdfbG9naWNh bF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMScsIDE2Mzk0LCAxLCAnbXNnMScpOworU0VMRUNU ICdkZGwgbXNnMicgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywg MTYzOTQsIDEsICd7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFt ZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7 ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9 Jyk7CitTRUxFQ1QgJ2RkbCBtc2czJyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgn ZGRsIG1zZzMnLCAxNjM5NCwgMSwgJ3siZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFC TEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMp ICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5 fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpu YW1lIjogImZvbyIsICJzY2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9LCAiaW5oZXJpdHMiOiB7 ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJl c2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1p dF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAi dGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhf Y2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5 IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxz ZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAl e2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVs bH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25h bWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAl e2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59 cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6 ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6 ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50Ijog ZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAi cHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7 ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBm YWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsi Zm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX1dfX0nKTsKK1NF TEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Ns b3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycs ICcxJyk7CisKIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3JlZ3Jlc3Npb25fc2xv dCcpOwogCiAvKiBjaGVjayB0aGF0IHRoZSBzbG90IGlzIGdvbmUgKi8KZGlmZiAtLWdpdCBhL2Nv bnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29kaW5nLmMgYi9jb250cmliL3Rlc3RfZGVjb2Rp bmcvdGVzdF9kZWNvZGluZy5jCmluZGV4IGU1MjNkMjJlYmEuLmNhYmYwYmMxZDkgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29kaW5nLmMKKysrIGIvY29udHJpYi90 ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYwpAQCAtMTQsOSArMTQsMTEgQEAKIAogI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9vcmlnaW4uaCIKIAorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC03Miw2ICs3NCwxMiBAQCBzdGF0aWMgdm9pZCBwZ19k ZWNvZGVfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJICBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCSAgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJICBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnX2RlY29kZV9kZGxfbWVzc2FnZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCSAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJ CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJl Zml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCSAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdf ZGVjb2RlX2ZpbHRlcl9wcmVwYXJlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJ CQkJCSBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSBjb25zdCBjaGFyICpnaWQpOwpAQCAt MTM3LDYgKzE0NSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJh Y2tzICpjYikKIAljYi0+ZmlsdGVyX2J5X29yaWdpbl9jYiA9IHBnX2RlY29kZV9maWx0ZXI7CiAJ Y2ItPnNodXRkb3duX2NiID0gcGdfZGVjb2RlX3NodXRkb3duOwogCWNiLT5tZXNzYWdlX2NiID0g cGdfZGVjb2RlX21lc3NhZ2U7CisJY2ItPmRkbF9jYiA9IHBnX2RlY29kZV9kZGxfbWVzc2FnZTsK IAljYi0+ZmlsdGVyX3ByZXBhcmVfY2IgPSBwZ19kZWNvZGVfZmlsdGVyX3ByZXBhcmU7CiAJY2It PmJlZ2luX3ByZXBhcmVfY2IgPSBwZ19kZWNvZGVfYmVnaW5fcHJlcGFyZV90eG47CiAJY2ItPnBy ZXBhcmVfY2IgPSBwZ19kZWNvZGVfcHJlcGFyZV90eG47CkBAIC03NTIsNiArNzYxLDQ1IEBAIHBn X2RlY29kZV9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAlPdXRwdXRQbHVn aW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdfZGVjb2RlX2RkbF9tZXNz YWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLAorCQkJCQkgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwgU2l6ZSBzeiwgY29uc3Qg Y2hhciAqbWVzc2FnZSkKK3sKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsK KwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAibWVzc2FnZTogcHJlZml4OiAlcywgcmVsaWQ6 ICV1LCAiLAorCQkJCQkgcHJlZml4LCByZWxpZCk7CisKKwlzd2l0Y2goY21kdHlwZSkKKwl7CisJ Y2FzZSBEQ1RfU2ltcGxlQ21kOgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlw ZTogU2ltcGxlLCAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6CisJCWFw cGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wIHN0YXJ0LCAiKTsKKwkJYnJl YWs7CisJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0 LCAiY21kdHlwZTogRHJvcCBlbmQsICIpOworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZUFsdGVy OgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlwZTogQWx0ZXIgdGFibGUsICIp OworCQlicmVhazsKKwljYXNlIERDVF9PYmplY3RDcmVhdGU6CisJCWFwcGVuZFN0cmluZ0luZm8o Y3R4LT5vdXQsICJjbWR0eXBlOiBDcmVhdGUsICIpOworCQlicmVhazsKKwljYXNlIERDVF9PYmpl Y3REcm9wOgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlwZTogRHJvcCwgIik7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0 eXBlOiBJbnZhbGlkLCAiKTsKKwkJYnJlYWs7CisJfQorCisJYXBwZW5kU3RyaW5nSW5mbyhjdHgt Pm91dCwgInN6OiAlenUgY29udGVudDoiLCBzeik7CisJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhj dHgtPm91dCwgbWVzc2FnZSwgc3opOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7Cit9 CisKIHN0YXRpYyB2b2lkCiBwZ19kZWNvZGVfc3RyZWFtX3N0YXJ0KExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKIAkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmZkODYuLjJmZjAxZTY5YmYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgT0JKUyA9IFwKIAln aXN0ZGVzYy5vIFwKIAloYXNoZGVzYy5vIFwKIAloZWFwZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNn ZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKIAlteGFjdGRlc2MubyBcCiAJbmJ0ZGVzYy5v IFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNn ZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDVlOTMwYzkwYwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVz Yy5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxvZ2ljYWxk ZGxtc2dkZXNjLmMKKyAqCSAgcm1nciBkZXNjcmlwdG9yIHJvdXRpbmVzIGZvciByZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx NS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKworI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKwordm9pZAorbG9n aWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkK K3sKKwljaGFyCSAgICpyZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOworCXVpbnQ4CQlpbmZv ID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8g PT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCXsKKwkJeGxfbG9naWNhbF9kZGxfbWVzc2Fn ZSAqeGxyZWMgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSByZWM7CisJCWNoYXIJICAgKnBy ZWZpeCA9IHhscmVjLT5tZXNzYWdlOworCQljaGFyCSAgICptZXNzYWdlID0geGxyZWMtPm1lc3Nh Z2UgKyB4bHJlYy0+cHJlZml4X3NpemU7CisJCWNoYXIJICAgKnNlcCA9ICIiOworCisJCUFzc2Vy dChwcmVmaXhbeGxyZWMtPnByZWZpeF9zaXplXSAhPSAnXDAnKTsKKworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgInByZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6dSBieXRlcyk6ICIsCisJCQkJCQkg cHJlZml4LCB4bHJlYy0+bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJy ZWxpZCAldSBjbWR0eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJlYy0+Y21kdHlwZSk7CisJCS8q IFdyaXRlIG1lc3NhZ2UgcGF5bG9hZCBhcyBhIHNlcmllcyBvZiBoZXggYnl0ZXMgKi8KKwkJZm9y IChpbnQgY250ID0gMDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZTsgY250KyspCisJCXsKKwkJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAodW5zaWduZWQgY2hhcikgbWVz c2FnZVtjbnRdKTsKKwkJCXNlcCA9ICIgIjsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqCits b2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZvICYgflhMUl9J TkZPX01BU0spID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJcmV0dXJuICJEREwiOwor CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQK aW5kZXggMTY2Y2VlNjdiNi4uNzgxZTJkNzcxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBybWdyX2Rlc2Nfc291cmNlcyA9IGZpbGVz KAogICAnZ2lzdGRlc2MuYycsCiAgICdoYXNoZGVzYy5jJywKICAgJ2hlYXBkZXNjLmMnLAorICAn bG9naWNhbGRkbG1zZ2Rlc2MuYycsCiAgICdsb2dpY2FsbXNnZGVzYy5jJywKICAgJ214YWN0ZGVz Yy5jJywKICAgJ25idGRlc2MuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9ybWdyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKaW5kZXggN2Q2 N2VkYTVmNy4uNjc4ZTgxYWUwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vcm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwpAQCAtMjcs NiArMjcsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21l c3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IDJkYzI1ZTM3YmIuLmQzNjgwZTliYjUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBA QCBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0g XAogCWFwcGx5cGFyYWxsZWx3b3JrZXIubyBcCisJZGRsbWVzc2FnZS5vIFwKIAlkZWNvZGUubyBc CiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uZTExZTU2ZTVhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGRkbG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3Nh Z2VzIGFsbG93IFhMT0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdl dCBwYXNzZWQgdG8gdGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBw cm9jZXNzaW5nIHRoZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVy aWMgbG9naWNhbCBtZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2Fj dGlvbmFsCisgKiBtb2RlLiBOb3RlIGJ5IGRlZmF1bHQgRERMcyBpbiBQb3N0Z3JlU1FMIGFyZSB0 cmFuc2FjdGlvbmFsLgorICoKKyAqIFRoZXNlIG1lc3NhZ2VzIGFyZSBwYXJ0IG9mIGN1cnJlbnQg dHJhbnNhY3Rpb24gYW5kIHdpbGwgYmUgc2VudCB0bworICogZGVjb2RpbmcgcGx1Z2luIHVzaW5n IGluIGEgc2FtZSB3YXkgYXMgRE1MIG9wZXJhdGlvbnMuCisgKgorICogRXZlcnkgbWVzc2FnZSBj YXJyaWVzIHByZWZpeCB0byBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBkaWZmZXJlbnQgZGVjb2Rp bmcKKyAqIHBsdWdpbnMuIFRoZSBwbHVnaW4gYXV0aG9ycyBtdXN0IHRha2UgZXh0cmEgY2FyZSB0 byB1c2UgdW5pcXVlIHByZWZpeCwKKyAqIGdvb2Qgb3B0aW9ucyBzZWVtcyB0byBiZSBmb3IgZXhh bXBsZSB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbi4KKyAqCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRh bG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVz L2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK KworLyoKKyAqIFdyaXRlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2UgaW50byBYTG9nLgor ICovCitYTG9nUmVjUHRyCitMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgs IE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgY29uc3QgY2hh ciAqbWVzc2FnZSwgc2l6ZV90IHNpemUpCit7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSB4bHJl YzsKKworCSAvKiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLiAqLworCUFz c2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsK KworCXhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogVHJhaWxpbmcgemVybyBpcyBjcml0 aWNhbDsgc2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3Ry bGVuKHByZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVs aWQgPSByZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2Vy dCgpOworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERM TWVzc2FnZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwg eGxyZWMucHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICos IG1lc3NhZ2UpLCBzaXplKTsKKworCS8qIEFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9n U2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2Vy dChSTV9MT0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisv KgorICogUmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRk bCBtZXNzYWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5Y TFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQor CQllbG9nKFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBp bmZvKTsKKworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGlu Zywgc2VlIGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVj b2RlLmMKaW5kZXggYTUzZTIzYzY3OS4uNDE1MWFhNzMwZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNz L3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjAzLDYg KzYwNCw0NiBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAkJCQkJCQkgIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNz YWdlLT5wcmVmaXhfc2l6ZSk7CiB9CiAKKy8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNH X0lEIHJlY29yZHMgZm9yIERlY29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3Zv aWQKK2xvZ2ljYWxkZGxfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y29yZEJ1ZmZlciAqYnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90 X2J1aWxkZXI7CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rp b25JZCB4aWQgPSBYTG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldElu Zm8ocikgJiB+WExSX0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVj R2V0T3JpZ2luKHIpOworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAo aW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVj dGVkIFJNX0xPR0lDQUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9y ZGVyQnVmZmVyUHJvY2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+ b3JpZ3B0cik7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJl IGp1c3QgZmFzdC1mb3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5n IGRkbCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIp IDwgU05BUEJVSUxEX0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJl dHVybjsKKworCW1lc3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0 RGF0YShyKTsKKworCWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFz ZSB8fAorCQlGaWx0ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlm IChTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJ UmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRw dHIsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdl IGlzIHByZWZpeCAqLworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJ CSBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVz c2FnZS0+cmVsaWQsIG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCiAvKgogICogQ29uc29saWRhdGVk IGNvbW1pdCByZWNvcmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29t bWl0CiAgKiByZWNvcmRzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwu YwppbmRleCAxYTU4ZGQ3NjQ5Li5kNWFmYWU5ZDkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L29yaWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGlj IHZvaWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFu c2FjdGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3Np emUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsX2NiX3dyYXBwZXIoUmVv cmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdl X3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICov CiBzdGF0aWMgdm9pZCBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLApAQCAtMjE4LDYgKzIyMyw3IEBAIFN0YXJ0dXBEZWNv ZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+ YXBwbHlfdHJ1bmNhdGUgPSB0cnVuY2F0ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29t bWl0ID0gY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2Fn ZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+ZGRsID0gZGRsX2NiX3dyYXBwZXI7CiAKIAkv KgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQv Y29tbWl0L2NoYW5nZQpAQCAtMTIyMiw2ICsxMjI4LDQ0IEBAIG1lc3NhZ2VfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRl eHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK2RkbF9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgs IE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVz c2FnZV9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxs YmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJ QXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsX2Ni ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBl cnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNr X25hbWUgPSAiZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwll cnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJy Y2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0g ZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNr OworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7 CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8g dGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsX2Ni KGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJCQkJ IG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3Rh Y2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisK IHN0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24pCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYwppbmRleCBm YTFiNjQxYTJiLi45MmY1ZjkzNTdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbG9naWNhbGZ1bmNzLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Zk LmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTM4OCwzICszODksMjYgQEAgcGdfbG9n aWNhbF9lbWl0X21lc3NhZ2VfdGV4dChQR19GVU5DVElPTl9BUkdTKQogCS8qIGJ5dGVhIGFuZCB0 ZXh0IGFyZSBjb21wYXRpYmxlICovCiAJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlX2J5 dGVhKGZjaW5mbyk7CiB9CisKKy8qCisgKiBTUUwgZnVuY3Rpb24gZm9yIHdyaXRpbmcgbG9naWNh bCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFdBTC4KKyAqLworRGF0dW0KK3BnX2xvZ2ljYWxf ZW1pdF9kZGxfbWVzc2FnZV9ieXRlYShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnBy ZWZpeCA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisJT2lkCQkJcmVs aWQgPSBQR19HRVRBUkdfT0lEKDEpOworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSA9IFBH X0dFVEFSR19JTlQxNigyKTsKKwljaGFyCSAgICpkYXRhID0gdGV4dF90b19jc3RyaW5nKFBHX0dF VEFSR19URVhUX1BQKDMpKTsKKwlYTG9nUmVjUHRyCWxzbjsKKworCWxzbiA9IExvZ0xvZ2ljYWxE RExNZXNzYWdlKHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsIGRhdGEsIHN0cmxlbihkYXRhKSk7CisJ UEdfUkVUVVJOX0xTTihsc24pOworfQorCitEYXR1bQorcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNz YWdlX3RleHQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwkvKiBieXRlYSBhbmQgdGV4dCBhcmUgY29t cGF0aWJsZSAqLworCXJldHVybiBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfYnl0ZWEoZmNp bmZvKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVz b24uYnVpbGQgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmlu ZGV4IGQ0OGNkNGM1OTAuLjk5YzYwOGQwM2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9tZXNvbi5idWlsZApAQCAtMiw2ICsyLDcgQEAKIAogYmFja2VuZF9zb3VyY2VzICs9 IGZpbGVzKAogICAnYXBwbHlwYXJhbGxlbHdvcmtlci5jJywKKyAgJ2RkbG1lc3NhZ2UuYycsCiAg ICdkZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDU0ZWU4MjRl NmMuLjlhN2RjOWU0MDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhl YXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9n aWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTYsNiArNTE3LDE0IEBAIFJlb3JkZXJCdWZmZXJS ZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5n ZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9EREw6CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggIT0gTlVMTCkKKwkJCQlw ZnJlZShjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZp eCA9IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlICE9IE5VTEwpCisJCQkJ cGZyZWUoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVz c2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5W QUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKQogCQkJ CXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKTsKQEAgLTg5NCw2ICs5MDMs MzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNh Y3Rpb25JZCB4aWQsCiAJfQogfQogCisvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdl IGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3Jk ZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJ CSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydChUcmFuc2Fj dGlvbklkSXNWYWxpZCh4aWQpKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7 CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOworCWNoYW5nZS0+ ZGF0YS5kZGwucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGwucmVs aWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5n ZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEu ZGRsLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVl dWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwogLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJ VmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1 ZmZlcgpAQCAtMjAwMiw2ICsyMDQxLDIxIEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVv cmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlKTsKIH0KIAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1 ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCitSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFuZ2Ug KmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCit7CisJcmItPmRkbChyYiwgdHhuLCBjaGFuZ2UtPmxz biwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJY2hhbmdlLT5kYXRhLmRkbC5yZWxp ZCwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVz c2FnZV9zaXplLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1 bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9m IHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hp bGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCkBAIC0yMzgyLDYgKzI0MzYsMTAgQEAgUmVvcmRl ckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVh bWluZyk7CiAJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERM OgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3Ry ZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9J TlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBs b2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2Ut PmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zODIxLDYgKzM4NzksMzkgQEAgUmVvcmRl ckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0 YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKIAorCQkJCWJyZWFrOworCQkJfQor CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0 YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsLm1lc3Nh Z2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkg KyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6 KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1 ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFi b3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRi dWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRp bmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6 ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdl LT5kYXRhLmRkbC5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7 CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIHNpemVvZihEZXBh cnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHko ZGF0YSwgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9 IHByZWZpeF9zaXplOworCisJCQkJLyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBz aXplICovCisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwg c2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0 YSwgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1l c3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZTsK KwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElE QVRJT046CkBAIC00MTM1LDYgKzQyMjYsMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVv cmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKQogCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemUgKwogCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6 ZSk7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERM OgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwu cHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9m KE9pZCkgKyBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSk7CisKIAkJCQlicmVhazsKIAkJCX0K IAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDQxMiw2ICs0 NTEyLDMzIEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9z aXplKTsKIAkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJ YnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJ CQlTaXplCQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5 KCZwcmVmaXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihT aXplKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsIGRhdGEsIHNpemVvZihP aWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRh LmRkbC5jbWR0eXBlLCBkYXRhLCBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSkpOworCQkJCWRh dGEgKz0gc2l6ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBNZW1vcnlD b250ZXh0QWxsb2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdl LT5kYXRhLmRkbC5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdl LT5kYXRhLmRkbC5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9 IHByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgm Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJ ZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVt b3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZSwgZGF0YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRh dGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0K IAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRl c2MuYwppbmRleCA2YjhjMTdiYjRjLi5kYWYxNzMwMjUyIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpA QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHNfeGxvZy5oIgog I2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVz cGFjZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAj aW5jbHVkZSAicm1ncmRlc2MuaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdy bGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggNDYzYmNiNjdjNS4u YWJjYmU5NzU5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1H UihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNf ZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9u T3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRl bnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJH ZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5V TEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwg IkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2lj YWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdf Uk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRs bXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVM TCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbF9kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApp bmRleCBhZTE2ZjAxOTcyLi40YjU4YjE3ZjE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAg LTExMDA0LDYgKzExMDA0LDE0IEBACiAgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9tZXNz YWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCiAgIHByb3JldHR5 cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICdib29sIHRleHQgYnl0ZWEnLAogICBwcm9z cmMgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlX2J5dGVhJyB9LAoreyBvaWQgPT4gJzM4MTMn LCBkZXNjciA9PiAnZW1pdCBhIHRleHR1YWwgbG9naWNhbCBkZWNvZGluZyBtZXNzYWdlJywKKyAg cHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4g J3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2Fy Z3R5cGVzID0+ICdib29sIHRleHQgdGV4dCcsCisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0 X2RkbF9tZXNzYWdlX3RleHQnIH0sCit7IG9pZCA9PiAnMzgxNCcsIGRlc2NyID0+ICdlbWl0IGEg YmluYXJ5IGxvZ2ljYWwgZGVjb2RpbmcgbWVzc2FnZScsCisgIHByb25hbWUgPT4gJ3BnX2xvZ2lj YWxfZW1pdF9kZGxfbWVzc2FnZScsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4g J3UnLAorICBwcm9yZXR0eXBlID0+ICdwZ19sc24nLCBwcm9hcmd0eXBlcyA9PiAndGV4dCByZWdj bGFzcyBpbnQ0IHRleHQnLAorICBwcm9zcmMgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2Fn ZV9ieXRlYScgfSwKIAogIyBldmVudCB0cmlnZ2VycwogeyBvaWQgPT4gJzM1NjYnLCBkZXNjciA9 PiAnbGlzdCBvYmplY3RzIGRyb3BwZWQgYnkgdGhlIGN1cnJlbnQgY29tbWFuZCcsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uNzdkZjZlYTExYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq IGRkbG1lc3NhZ2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVT U0FHRV9ICisjZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nl c3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1 cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVk ZWYgZW51bSBEZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFi bGVEcm9wU3RhcnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1Rf T2JqZWN0Q3JlYXRlLAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisK Ky8qCisgKiBHZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCWRi SWQ7CQkJLyogZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCXByZWZpeF9zaXpl OwkvKiBsZW5ndGggb2YgcHJlZml4IGluY2x1ZGluZyBudWxsIHRlcm1pbmF0b3IgKi8KKwlPaWQJ CQlyZWxpZDsJCQkvKiBpZCBvZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGU7CS8qIHR5cGUgb2Ygc3FsIGNvbW1hbmQgKi8KKwlTaXplCQltZXNzYWdlX3NpemU7CS8q IHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51 bGwtdGVybWluYXRlZCBwcmVmaXggb2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJ bWVzc2FnZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdl OworCisjZGVmaW5lIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2Fs X2RkbF9tZXNzYWdlLCBtZXNzYWdlKSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERE TE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qg c2l6ZSk7CisKKy8qIFJNR1IgQVBJKi8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdF CTB4MDAKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7 Cit2b2lkCQlsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKTsKK2NvbnN0IGNoYXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5m byk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2Rl LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAppbmRleCAxNGZhOTIxYWI0Li5j OWFjNzA4ZDMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBl eHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3Rh bmRieV9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVy ICpidWYpOwogZXh0ZXJuIHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRk bF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYpOwogCiBleHRlcm4gdm9pZCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IDJkODlkMjY1ODYu LjVlZDVlNmE3YmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9w bHVnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAg LTksNiArOSw3IEBACiAjaWZuZGVmIE9VVFBVVF9QTFVHSU5fSAogI2RlZmluZSBPVVRQVVRfUExV R0lOX0gKIAorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAKIHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250 ZXh0OwpAQCAtOTAsNiArOTEsMTggQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3Nh Z2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJU2l6 ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisg KiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlw ZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUs CisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBGaWx0ZXIgY2hh bmdlcyBieSBvcmlnaW4uCiAgKi8KQEAgLTIyMSw2ICsyMzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBP dXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9j YjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNz YWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbF9jYjsKIAlM b2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2lj YWxEZWNvZGVTaHV0ZG93bkNCIHNodXRkb3duX2NiOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmgKaW5kZXggZjZjNGRkNzVkYi4uN2I2YTYzMzFiYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVk ZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1 ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgog I2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgog I2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC02NCw2ICs2Niw3IEBAIHR5cGVkZWYgZW51 bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQs CiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0Vf REVMRVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREwsCiAJUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX01FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9S REVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzgsNiArMTQxLDE2IEBA IHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7 CiAJCX0JCQltc2c7CiAKKwkJLyogRERMICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpw cmVmaXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJ T2lkCQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCX0JCQlkZGw7 CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQ U0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDUxLDYgKzQ2NCwxNiBAQCB0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJ CQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNo YXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5 cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpy YiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlw ZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAq cmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTY3LDYgKzU5MCw3 IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBh cHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJC dWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbDsK IAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3aGVuIHN0cmVhbWluZyBhIHRyYW5z YWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTY2NSw2ICs2ODksOSBAQCBleHRlcm4gdm9pZCBS ZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklk IHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJ CQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBT aXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwg WExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21t aXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9nUmVj UHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHog Y29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNu KTsKLS0gCjIuMzQuMQoK --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v63-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us34m3 RnJvbSAzN2IzYTQ3NjdmYmZiMDYxMTcxOGVmYmVlZDZhYWMwOWRkYWM4Nzc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6NTA6MzMgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MyA0LzddIEludHJvZHVjZSB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIHRlc3QgbW9k dWxlLgoKVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBm b3VyIHRlc3RpbmcgZ29hbHMgZm9yIHRoZSBEREwgZGVwYXJzZXI6CjEuIFRlc3QgdGhhdCB0aGUg Z2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCjIuIFRlc3Qg dGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5kIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0 cy4KMy4gVGVzdCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVm ZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZCBieSBjb21wYXJpbmcKICAgdGhlIHJlc3VsdHMg b2YgcGdfZHVtcCwgdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAxIGFuZCAyLgo0LiBUZXN0IHRoYXQg bmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBieSB0aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmlu ZyBhbmQgZGVwYXJpbmcgRERMIGNvbW1hbmRzCiAgIHJhbiBieSBwZ19yZWdyZXNzLgoKMSBhbmQg MiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMsIGJ5IHByaW50aW5nIHRoZSBkZXBhcnNlZCBKU09O IGJsb2IgYW5kIHRoZSByZS1mb3JtZWQgY29tbWFuZC4KCkdvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBU QVAgZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKCkdvYWwgNCBp cyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGFuZCBwZ19yZWdyZXNzIGluIDAwMl9yZWdyZXNz X3Rlc3RzLnBsLCB0aGUgZXhlY3V0aW9uIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1 c2UgaXQgd2lsbCBmYWlsIGR1ZSB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVw YXJzZXIuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZSAgICAgICB8 ICAgNCArCiAuLi4vbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgfCAg NDQgKysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgICAgICAgIHwg IDIyICsrCiAuLi4vZXhwZWN0ZWQvYWdncmVnYXRlLm91dCAgICAgICAgICAgICAgICAgICAgfCAg IDggKwogLi4uL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0ICAgICAgICAgICAgIHwgICA2 ICsKIC4uLi9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCAgICAgICAgICAgICAgICB8ICAyMiAr KwogLi4uL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgICAgICAgICAgICAgICAgIHwgIDM2ICsr KwogLi4uL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0ICAgICAgICAgICAgIHwgIDE4ICsr CiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkICAgICAgfCAgNDIgKysr KwogLi4uL3NxbC9hZ2dyZWdhdGUuc3FsICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsK IC4uLi9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwgICAgICAgICAgICAgICAgICB8ICAgNSArCiAu Li4vc3FsL2NyZWF0ZV9zY2hlbWEuc3FsICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKysKIC4u Li9zcWwvY3JlYXRlX3RhYmxlLnNxbCAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogLi4u L3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCAgICAgICAgICAgICAgICAgIHwgIDIwICsrCiAuLi4v dC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCAgICAgICAgICAgfCAxODEgKysrKysrKysr KysrKysrCiAuLi4vdC8wMDJfcmVncmVzc190ZXN0cy5wbCAgICAgICAgICAgICAgICAgICAgfCAy MDcgKysrKysrKysrKysrKysrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAu c3FsICAgICAgICAgfCAgIDkgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jICAgICAg ICAgICAgICAgIHwgIDU5ICsrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRy b2wgICAgICAgICAgfCAgIDQgKwogMjAgZmlsZXMgY2hhbmdlZCwgNzI3IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC9hZ2dyZWdhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9l eHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv c3FsL2FnZ3JlZ2F0ZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwv Y3JlYXRlX3NjaGVtYS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0 X2RkbF9kZXBhcnNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0x LjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGM2MjljYmUzODMuLmMyNzJjNjRh MjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rf Y29weV9jYWxsYmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKIAkJICB0ZXN0X2RkbF9k ZXBhcnNlIFwKKwkJICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgXAogCQkgIHRlc3RfZXh0ZW5z aW9ucyBcCiAJCSAgdGVzdF9naW5wb3N0aW5nbGlzdCBcCiAJCSAgdGVzdF9pbnRlZ2Vyc2V0IFwK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5n aXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0 aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVkY2IzZmY5NzIK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3Jp ZXMKKy9sb2cvCisvcmVzdWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjVkNWE5ZTg2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ0 IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCisjCisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2Vm aWxlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK01PRFVMRVMgPSB0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MKK1BHRklMRURFU0MgPSAidGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVz c2lvbiB0ZXN0aW5nIGZvciBEREwgZGVwYXJzaW5nIgorCitFWFRFTlNJT04gPSB0ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MKK0RBVEEgPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwK KworIyB0ZXN0X2RkbF9kZXBhcnNlIG11c3QgYmUgZmlyc3QKK1JFR1JFU1MgPSB0ZXN0X2RkbF9k ZXBhcnNlIFwKKwljcmVhdGVfZXh0ZW5zaW9uIFwKKwljcmVhdGVfc2NoZW1hIFwKKwljcmVhdGVf dGFibGUgXAorCWFnZ3JlZ2F0ZQorCitleHBvcnQgUkVHUkVTUworCitFWFRSQV9JTlNUQUxMID0g Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0Vf UEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitp bmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9w X3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworUkVHUkVTU19TSExJ Qj0kKGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgp CitleHBvcnQgUkVHUkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmNjMjUxOTg5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKQEAgLTAsMCArMSwyMiBAQAorIyBU ZXN0aW5nIGhhcm5lc3MgZm9yIERETCBkZXBhcnNlcgorCisjIyBUZXN0aW5nIGdvYWxzCisKK0RE TCBEZXBhcnNlciBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBlbmNvZGUgdGhlIG9yaWdpbmFsIERE TCBjb21tYW5kIHRvIGEgSlNPTiBzdHJpbmcsIHRoZW4gZGVjb2RlIGl0IHRvIGEgZnVsbHkgc2No ZW1hLXF1YWxpZmllZCBEREwgY29tbWFuZCB3aGljaCBpcyBzdXBwb3NlZCB0byBoYXZlIHRoZSBz YW1lIGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZC4gVGhpcyB0ZXN0aW5nIG1vZHVsZSBh aW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBmb3VyIHRlc3RpbmcgZm9yIHRoZSBEREwgZGVw YXJzZXI6CisKKzEuIFRlc3QgdGhhdCB0aGUgZ2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3Rl ZCB1c2luZyBTUUwgdGVzdHMuCisyLiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFu ZCBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCiszLiBUZXN0CXRoYXQgdGhlIHJlLWZvcm1l ZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5k CisgICBieSBjb21wYXJpbmcJdGhlIHJlc3VsdHMgb2YgcGdfZHVtcCwJdXNpbmcgdGhlIFNRTCB0 ZXN0cyBpbiAxIGFuZCAyLgorNC4gVGVzdAl0aGF0IG5ldyBEREwgc3ludGF4IGlzIGhhbmRsZWQg YnkgdGhlIERETCBkZXBhcnNlciBieSBjYXB0dXJpbmcgYW5kIGRlcGFyaW5nCisgICBEREwgY29t bWFuZHMJcmFuIGJ5IHBnX3JlZ3Jlc3MuCisKKzEgYW5kIDIgaXMgdGVzdGVkIHdpdGggU1FMIHRl c3RzLCBieSBub3RpY2luZyB0aGUgZGVwYXJzZWQgSlNPTiBibG9iIGFuZCB0aGUgcmUtZm9ybWVk IGNvbW1hbmQuCisKK0dvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGluIHQvMDAx X2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKKworR29hbCA0IGlzIHRlc3RlZCB3aXRoIFRBUCBm cmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVzdHMucGwKKworIyMgVXNh Z2UKKworUnVuIGBtYWtlIGNoZWNrYCwgaXQgd2lsbCBydW4gdGhlIFNRTCB0ZXN0cyBmaXJzdCwg dGhlbiBpdCB3aWxsIHJ1biB0aGUgVEFQIHRlc3RzLiBUaGUgZXhlY3V0aW9uIG9mIDAwMl9yZWdy ZXNzX3Rlc3RzLnBsIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgd2lsbCBm YWlsIGR1ZSB0byB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVwYXJzZXIuCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9hZ2dyZWdhdGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi5lOTM5NWQwNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlLm91dApAQCAtMCww ICsxLDggQEAKK0NSRUFURSBBR0dSRUdBVEUgbmV3YXZnKGludDQpICgKKyAgIHNmdW5jID0gaW50 NF9hdmdfYWNjdW0sIHN0eXBlID0gX2ludDgsCisgICBmaW5hbGZ1bmMgPSBpbnQ4X2F2ZywKKyAg IGluaXRjb25kMSA9ICd7MCwwfScKKyk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6 ICJDUkVBVEUgQUdHUkVHQVRFICV7aWRlbnRpdHl9RCAoJXt0eXBlc31zKSAoJXtlbGVtczosIH1z KSIsICJlbGVtcyI6IFt7ImZtdCI6ICJTRlVOQz0le3Byb2NlZHVyZX1EIiwgInByb2NlZHVyZSI6 IHsib2JqbmFtZSI6ICJpbnQ0X2F2Z19hY2N1bSIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fX0sIHsiZm10IjogIlNUWVBFPSV7dHlwZX1UIiwgInR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlw YXJyYXkiOiB0cnVlLCAidHlwZW5hbWUiOiAiaW50OCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFs b2cifX0sIHsiZm10IjogIlNTUEFDRT0le3NwYWNlfW4iLCAicHJlc2VudCI6IGZhbHNlfSwgeyJm bXQiOiAiRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJvY2VkdXJlIjogeyJvYmpuYW1lIjog ImludDhfYXZnIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgeyJmbXQiOiAiRklOQUxG VU5DX0VYVFJBPSV7dmFsdWV9cyIsICJ2YWx1ZSI6ICJmYWxzZSJ9LCB7ImZtdCI6ICJJTklUQ09O RD0le2luaXR2YWx9TCIsICJpbml0dmFsIjogInswLDB9In0sIHsiZm10IjogIk1TRlVOQz0le3By b2NlZHVyZX1EIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1TVFlQRT0le3R5cGV9VCIs ICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNU1NQQUNFPSV7c3BhY2V9biIsICJwcmVzZW50 IjogZmFsc2V9LCB7ImZtdCI6ICJNSU5WRlVOQz09JXt0eXBlfVQiLCAicHJlc2VudCI6IGZhbHNl fSwgeyJmbXQiOiAiTUZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIiwgInByZXNlbnQiOiBmYWxzZX0s IHsiZm10IjogIk1GSU5BTEZVTkNfRVhUUkE9JXt2YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZX0s IHsiZm10IjogIk1JTklUQ09ORD0le2luaXR2YWx9TCIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZt dCI6ICJIWVBPVEhFVElDQUw9JXt2YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10Ijog IlNPUlRPUD0le29wZXJhdG9yfUQiLCAicHJlc2VudCI6IGZhbHNlfV0sICJ0eXBlcyI6IHsiZm10 IjogIiV7ZGlyZWN0OiwgfXMiLCAiZGlyZWN0IjogW3siZm10IjogIiV7bW9kZX1zICV7bmFtZX1z ICV7dHlwZX1UIiwgIm1vZGUiOiAiIiwgIm5hbWUiOiAiIiwgInR5cGUiOiB7InR5cG1vZCI6ICIi LCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJw Z19jYXRhbG9nIn19XX0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJuZXdhdmciLCAic2NoZW1h bmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgQUdH UkVHQVRFIHB1YmxpYy5uZXdhdmcgKCAgcGdfY2F0YWxvZy5pbnQ0KSAoU0ZVTkM9cGdfY2F0YWxv Zy5pbnQ0X2F2Z19hY2N1bSwgU1RZUEU9cGdfY2F0YWxvZy5pbnQ4W10sIEZJTkFMRlVOQz1wZ19j YXRhbG9nLmludDhfYXZnLCBGSU5BTEZVTkNfRVhUUkE9ZmFsc2UsIElOSVRDT05EPSd7MCwwfScp CitEUk9QIEFHR1JFR0FURSBuZXdhdmcoaW50NCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91 dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9leHRlbnNpb24ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjA2Y2NjNjJiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dApAQCAtMCwwICsx LDYgQEAKKy0tLQorLS0tIENSRUFURV9FWFRFTlNJT04KKy0tLQorQ1JFQVRFIEVYVEVOU0lPTiBw Z19zdGF0X3N0YXRlbWVudHM7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVB VEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMiLCAi bmFtZSI6ICJwZ19zdGF0X3N0YXRlbWVudHMiLCAib3B0aW9ucyI6IFt7ImZtdCI6ICJTQ0hFTUEg JXtzY2hlbWF9SSIsICJ0eXBlIjogInNjaGVtYSIsICJzY2hlbWEiOiAicHVibGljIn1dLCAiaWZf bm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBFWFRF TlNJT04gIHBnX3N0YXRfc3RhdGVtZW50cyBTQ0hFTUEgcHVibGljCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2No ZW1hLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVj dGVkL2NyZWF0ZV9zY2hlbWEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjFlMDlkYTUxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dApAQCAtMCwwICsx LDIyIEBACistLQorLS0gQ1JFQVRFX1NDSEVNQQorLS0KK0NSRUFURSBTQ0hFTUEgZm9vOworTk9U SUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlz dHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRob3Jp emF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwg InByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4 aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGZv byAKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXI7CitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7 YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiYmFyIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6 ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNl LCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIklGIE5PVCBF WElTVFMifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgSUYgTk9U IEVYSVNUUyBiYXIgCitDUkVBVEUgU0NIRU1BIGJhejsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXoiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFV VEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJh dXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBiYXogCistLSBXaWxsIG5vdCBiZSBj cmVhdGVkLCBhbmQgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUKKy0tIGV2ZW50IHRyaWdnZXIK K0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXo7CitOT1RJQ0U6ICBzY2hlbWEgImJheiIg YWxyZWFkeSBleGlzdHMsIHNraXBwaW5nCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRfdGVzdAorICBD UkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6 ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlv bn1zIiwgIm5hbWUiOiAiZWxlbWVudF90ZXN0IiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJB VVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAi YXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6 ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZWxlbWVudF90ZXN0IAorTk9USUNF OiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAl e2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtp bmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAl e2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUi OiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10 IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50 IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3Zh bHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJs ZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1 c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7 ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAi ZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNj ZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwg ImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1J ICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29s bGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwg Im5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIs ICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBn X2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxz ZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVz ZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10 IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNl LCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQi OiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19CitOT1RJQ0U6ICBy ZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgZWxlbWVudF90ZXN0LmZvbyAoaWQgcGdf Y2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICkgICAgICAKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJs ZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfdGFibGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjllZWFhMWNjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CkBAIC0wLDAgKzEsMzYg QEAKK0NSRUFURSBUQUJMRSBzaW1wbGVfdGFibGUoCisgICAgaWQgaW50LAorICAgIG5hbWUgdmFy Y2hhcig1KQorKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3Bl cnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxl X2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1z ICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlk ZW50aXR5IjogeyJvYmpuYW1lIjogInNpbXBsZV90YWJsZSIsICJzY2hlbWFuYW1lIjogInB1Ymxp YyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBh cmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9O IENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1p dF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJs ZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lz dGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFs c2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1z IiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2Qi OiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJh Y2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50 cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1z ICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAl e2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNv bHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImlu dDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVG QVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsi Zm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4i LCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2Vu ZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6 IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9y YWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVs dH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiKDUpIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJ2YXJjaGFyIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6 IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJj b2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUi OiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjog ImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUg IFRBQkxFICBwdWJsaWMuc2ltcGxlX3RhYmxlIChpZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBw bGFpbiAgICAgLCBuYW1lIHBnX2NhdGFsb2cuInZhcmNoYXIiKDUpIFNUT1JBR0UgZXh0ZW5kZWQg IENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICApICAgICAgCistLSBUZXN0IENSRUFURSBJ TkRFWCB3aXRoIGFuIElOQ0xVREUgQ0xBVVNFCitDUkVBVEUgVU5JUVVFIElOREVYIGNvdmVyaW5n X2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOworTk9USUNFOiAgZGVw YXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50 bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQgVVNJTkcgJXtpbmRl eF9hbX1zICV7ZGVmaW5pdGlvbn1zICV7d2l0aH1zICV7dGFibGVzcGFjZX1zICV7d2hlcmVfY2xh dXNlfXMiLCAibmFtZSI6ICJjb3ZlcmluZ19pbmRleCIsICJ3aXRoIjogeyJmbXQiOiAiV0lUSCIs ICJwcmVzZW50IjogZmFsc2V9LCAidGFibGUiOiB7Im9iam5hbWUiOiAic2ltcGxlX3RhYmxlIiwg InNjaGVtYW5hbWUiOiAicHVibGljIn0sICJ1bmlxdWUiOiAiVU5JUVVFIiwgImluZGV4X2FtIjog ImJ0cmVlIiwgImRlZmluaXRpb24iOiAiKGlkIHBnX2NhdGFsb2cuaW50NF9vcHMpIElOQ0xVREUg KG5hbWUpIiwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFIiwgInByZXNlbnQiOiBm YWxzZX0sICJjb25jdXJyZW50bHkiOiAiIiwgIndoZXJlX2NsYXVzZSI6IHsiZm10IjogIldIRVJF IiwgInByZXNlbnQiOiBmYWxzZX0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1m b3JtZWQgY29tbWFuZDogQ1JFQVRFIFVOSVFVRSBJTkRFWCAgIGNvdmVyaW5nX2luZGV4IE9OIHB1 YmxpYy5zaW1wbGVfdGFibGUgVVNJTkcgYnRyZWUgKGlkIHBnX2NhdGFsb2cuaW50NF9vcHMpIElO Q0xVREUgKG5hbWUpICAgCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Bl cmx5CitDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJ TUFSWSBLRVksIGIgdGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVB VEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAo JXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9j b21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9 cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1Ymxp YyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBh cmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9O IENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1p dF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJs ZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lz dGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFs c2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1z IiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2Qi OiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJh Y2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50 cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1z ICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAl e2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29s dHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4 dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZB VUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJm bXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAi c2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJj b21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUki LCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0 ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFs c2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9 cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMg JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAiY29sdW1uIiwgImNv bHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRl eHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVG QVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsi Zm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAi Y29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJh dGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZh bHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFt ZSI6ICJjdGx0MV9hX2NoZWNrIiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogImNo ZWNrIiwgImRlZmluaXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRP UihwZ19jYXRhbG9nLj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm aW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAi Y29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9 XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3Rs dDEgKGEgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxv Zy4iZGVmYXVsdCIgICAsIGIgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExB VEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgY3RsdDFfYV9jaGVjayBDSEVD SyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMikpLCBDT05T VFJBSU5UIGN0bHQxX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJz ZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitBTFRF UiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworTk9USUNFOiAg ZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7 c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjog InNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJhIiwgInN0b3JhZ2UiOiAibWFpbiJ9XSwgImlkZW50 aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJ Q0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENP TFVNTiBhIFNFVCBTVE9SQUdFIG1haW4KK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBi IFNFVCBTVE9SQUdFIEVYVEVSTkFMOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAi QUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUi OiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBT RVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6 ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJj dGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBl eHRlcm5hbAorLS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBm b2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNF UyBzdWJjb21tYW5kCitDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBu YW1lIHRleHQpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVy c2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVf ZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMg JXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRl bnRpdHkiOiB7Im9iam5hbWUiOiAicHJvZHVjdCIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAi aW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMi OiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1J VCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1 ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNl fUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2Ui OiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAi cGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZt dCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3Nf bWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7 ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29t cHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVy YXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUi OiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAi c2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIs ICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10Ijog IkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29t cHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVk X2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNl fX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMg JXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJj b2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0 ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRF RkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7 ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwg ImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVy YXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBm YWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5h bWUiOiAicHJvZHVjdF9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogInBy aW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGlkKSJ9XX0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMucHJvZHVjdCAoaWQgcGdf Y2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgbmFtZSBwZ19jYXRhbG9nLnRleHQgU1RP UkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlO VCBwcm9kdWN0X3BrZXkgUFJJTUFSWSBLRVkgKGlkKSkgICAgICAKK05PVElDRTogIGRlcGFyc2Vk IGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgorQ1JFQVRF IFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludAor UkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQi OiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50 aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1z ICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhf Y2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAib3JkZXJzIiwgInNjaGVtYW5hbWUi OiAicHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9 RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJm bXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAi b25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFD RSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0s ICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNl bnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZp bml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNz X21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBm YWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxl X2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xz dG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVm YXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAib3JkZXJfaWQiLCAidHlwZSI6 ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAi dHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQi OiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAi Y29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3Rv cmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29t cHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9k IjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBB UyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RP UkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9u dWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJwcm9kdWN0 X2lkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJy YXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9n In0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90 X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZh bHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01Q UkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXBy ZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVS QVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQg JXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJvcmRlcnNfcGtleSIsICJ0eXBlIjog ImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBS SU1BUlkgS0VZIChvcmRlcl9pZCkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JF QVRFICBUQUJMRSAgcHVibGljLm9yZGVycyAob3JkZXJfaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JB R0UgcGxhaW4gICAgICwgcHJvZHVjdF9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAg ICAgLCBDT05TVFJBSU5UIG9yZGVyc19wa2V5IFBSSU1BUlkgS0VZIChvcmRlcl9pZCkpICAgICAg CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21t YW5kOiA8TlVMTD4KK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVSICV7b2Jq dHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwg InN1YmNtZHMiOiBbeyJmbXQiOiAiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9u fXMiLCAibmFtZSI6ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5IiwgInR5cGUiOiAiYWRkIGNvbnN0 cmFpbnQiLCAiZGVmaW5pdGlvbiI6ICJGT1JFSUdOIEtFWSAocHJvZHVjdF9pZCkgUkVGRVJFTkNF UyBwdWJsaWMucHJvZHVjdChpZCkifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJvcmRlcnMi LCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBB TFRFUiBUQUJMRSBwdWJsaWMub3JkZXJzIEFERCBDT05TVFJBSU5UIG9yZGVyc19wcm9kdWN0X2lk X2ZrZXkgRk9SRUlHTiBLRVkgKHByb2R1Y3RfaWQpIFJFRkVSRU5DRVMgcHVibGljLnByb2R1Y3Qo aWQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmIwZTJiZjI1MWEKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90 ZXN0X2RkbF9kZXBhcnNlLm91dApAQCAtMCwwICsxLDE4IEBACitDUkVBVEUgRVhURU5TSU9OIHRl c3RfZGRsX2RlcGFyc2VfcmVncmVzczsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3Rf ZGRsX2RlcGFyc2UoKQorICBSRVRVUk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0UgcGxwZ3NxbCBB UworJCQKK0RFQ0xBUkUKKwlyIHJlY29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7CitCRUdJTgor CUZPUiByIElOIFNFTEVDVCAqIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQor CUxPT1AKKwkJZGVwYXJzZWRfanNvbiA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihy LmNvbW1hbmQpOworCQlSQUlTRSBOT1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBkZXBhcnNlZF9q c29uOworCQlSQUlTRSBOT1RJQ0UgJ3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdfY2F0YWxvZy5k ZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQgTE9PUDsKK0VO RDsKKyQkOworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRsX2Nv bW1hbmRfZW5kIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxk IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uN2ExNTJhMjNlMgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21l c29uLmJ1aWxkCkBAIC0wLDAgKzEsNDIgQEAKKyMgRklYTUU6IHByZXZlbnQgaW5zdGFsbCBkdXJp bmcgbWFpbiBpbnN0YWxsLCBidXQgbm90IGR1cmluZyB0ZXN0IDovCisKK3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzc19zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mu YycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3Nfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJh X2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICAg Jy0tRklMRURFU0MnLCAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0 aW5nIGZvciBEREwgZGVwYXJzaW5nJyxdKQorZW5kaWYKKwordGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzID0gc2hhcmVkX21vZHVsZSgndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzX3NvdXJjZXMsCisgIGt3YXJnczogcGdfbW9kX2FyZ3MsCispCit0 ZXN0cHJlcF90YXJnZXRzICs9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcworCitpbnN0YWxsX2Rh dGEoCisgICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCcsCisgICd0ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAor KQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisg ICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50 X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ3Rlc3Rf ZGRsX2RlcGFyc2UnLAorICAgICAgJ2NyZWF0ZV9leHRlbnNpb24nLAorICAgICAgJ2NyZWF0ZV9z Y2hlbWEnLAorICAgICAgJ2NyZWF0ZV90YWJsZScsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsK KyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCcs CisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uNTYxYjRlMTIwYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsCkBA IC0wLDAgKzEsNyBAQAorQ1JFQVRFIEFHR1JFR0FURSBuZXdhdmcoaW50NCkgKAorICAgc2Z1bmMg PSBpbnQ0X2F2Z19hY2N1bSwgc3R5cGUgPSBfaW50OCwKKyAgIGZpbmFsZnVuYyA9IGludDhfYXZn LAorICAgaW5pdGNvbmQxID0gJ3swLDB9JworKTsKKworRFJPUCBBR0dSRUdBVEUgbmV3YXZnKGlu dDQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQyM2U3ZmQ5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lv bi5zcWwKQEAgLTAsMCArMSw1IEBACistLS0KKy0tLSBDUkVBVEVfRVhURU5TSU9OCistLS0KKwor Q1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRlbWVudHM7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3Nj aGVtYS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTBiMTNmMGE1 NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbApAQCAtMCwwICsxLDE2IEBACistLQorLS0gQ1JF QVRFX1NDSEVNQQorLS0KKworQ1JFQVRFIFNDSEVNQSBmb287CisKK0NSRUFURSBTQ0hFTUEgSUYg Tk9UIEVYSVNUUyBiYXI7CisKK0NSRUFURSBTQ0hFTUEgYmF6OworCistLSBXaWxsIG5vdCBiZSBj cmVhdGVkLCBhbmQgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUKKy0tIGV2ZW50IHRyaWdnZXIK K0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXo7CisKK0NSRUFURSBTQ0hFTUEgZWxlbWVu dF90ZXN0CisgIENSRUFURSBUQUJMRSBmb28gKGlkIGludCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJs ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTk3ZDJmNTRmYgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCkBAIC0wLDAgKzEsMTYgQEAKK0NSRUFURSBUQUJMRSBz aW1wbGVfdGFibGUoCisgICAgaWQgaW50LAorICAgIG5hbWUgdmFyY2hhcig1KQorKTsKKy0tIFRl c3QgQ1JFQVRFIElOREVYIHdpdGggYW4gSU5DTFVERSBDTEFVU0UKK0NSRUFURSBVTklRVUUgSU5E RVggY292ZXJpbmdfaW5kZXggb24gc2ltcGxlX3RhYmxlIChpZCkgSU5DTFVERSAobmFtZSk7CisK Ky0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkKK0NSRUFURSBUQUJM RSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZIEtFWSwgYiB0ZXh0 KTsKK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitB TFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKKwor LS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcg QUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21t YW5kCitDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQp OworQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0 X2lkIGludAorUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3Fs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRs X2RlcGFyc2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA4ODlm YTAyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKQEAgLTAsMCArMSwyMCBAQAorQ1JF QVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisKK0NSRUFURSBPUiBSRVBM QUNFIEZVTkNUSU9OIHRlc3RfZGRsX2RlcGFyc2UoKQorICBSRVRVUk5TIGV2ZW50X3RyaWdnZXIg TEFOR1VBR0UgcGxwZ3NxbCBBUworJCQKK0RFQ0xBUkUKKwlyIHJlY29yZDsKKwlkZXBhcnNlZF9q c29uIHRleHQ7CitCRUdJTgorCUZPUiByIElOIFNFTEVDVCAqIEZST00gcGdfZXZlbnRfdHJpZ2dl cl9kZGxfY29tbWFuZHMoKQorCUxPT1AKKwkJZGVwYXJzZWRfanNvbiA9IHBnX2NhdGFsb2cuZGRs X2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQpOworCQlSQUlTRSBOT1RJQ0UgJ2RlcGFyc2VkIGpz b246ICUnLCBkZXBhcnNlZF9qc29uOworCQlSQUlTRSBOT1RJQ0UgJ3JlLWZvcm1lZCBjb21tYW5k OiAlJywgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZXBhcnNlZF9qc29u KTsKKwlFTkQgTE9PUDsKK0VORDsKKyQkOworCitDUkVBVEUgRVZFTlQgVFJJR0dFUiB0ZXN0X2Rk bF9kZXBhcnNlCitPTiBkZGxfY29tbWFuZF9lbmQgRVhFQ1VURSBQUk9DRURVUkUgdGVzdF9kZGxf ZGVwYXJzZSgpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMu cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjY0YWQzNDk4ZgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKQEAgLTAsMCArMSwxODEgQEAKK3VzZSBz dHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRW52OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKK3Vz ZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIGV4ZWN1dGVfdGVzdF9jYXNlIHsKKyAgICBteSAkdGVz dF9uYW1lID0gJF9bMF07CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMV07CisgICAgbXkgJHN1Yl9u b2RlID0gJF9bMl07CisgICAgbXkgJGRibmFtZSA9ICRfWzNdOworICAgIG15ICRvdXRwdXRkaXIg PSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRl cGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291 cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgbXkgJHRlc3RfZmls ZSA9ICIuL3NxbC8ke3Rlc3RfbmFtZX0uc3FsIjsKKyAgICBteSAkY29udGVudCA9IGRve2xvY2Fs KEBBUkdWLCQvKT0kdGVzdF9maWxlOzw+fTsKKworICAgICRwdWJfbm9kZSAtPiBwc3FsKCRkYm5h bWUsICRjb250ZW50KTsKKworICAgICMgcmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBm cm9tIGRlcGFyc2VkIERETHMgb24gcHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAg ICRwdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kKGRkbCkgfHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBp ZCBBU0MpLAorICAgICAgICBzdGRvdXQgPT4gXCRkZGxfc3FsKTsKKworICAgIHByaW50ICJcbnN0 YXJ0IHByaW50aW5nIHJlLWZvcm1lZCBzcWxcbiI7CisgICAgcHJpbnQgJGRkbF9zcWw7CisgICAg cHJpbnQgIlxuZW5kIHByaW50aW5nIHJlLWZvcm1lZCBzcWxcbiI7CisgICAgIyBleGVjdXRlIFNR TCBjb21tYW5kcyBvbiBzdWIgbm9kZQorICAgICRzdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRk ZGxfc3FsKTsKKworICAgICMgY2xlYW4gdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAg IGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAk ZGJuYW1lKTsKKworICAgICMgZHVtcCBmcm9tIHB1YiBub2RlIGFuZCBzdWIgbm9kZQorICAgIG1r ZGlyICR7b3V0cHV0ZGlyfS4iL2R1bXBzIiwgMDc1NTsKKyAgICBteSAkcHViX2R1bXAgPSAke291 dHB1dGRpcn0uIi9kdW1wcy8ke3Rlc3RfbmFtZX1fcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVt cCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBzLyR7dGVzdF9uYW1lfV9zdWIuZHVtcCI7CisgICAgc3lz dGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAg ICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4g ICctcCAnCisgICAgICAgIC4gJHB1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHVi IG5vZGUgZmFpbGVkIGluICR7dGVzdF9uYW1lfSI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIK KyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHN1Yl9kdW1wIC4g IiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4g JHN1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgc3ViIG5vZGUgZmFpbGVkIGluICR7 dGVzdF9uYW1lfSI7CisKKyAgICAjIGNvbXBhcmUgZHVtcGVkIHJlc3VsdHMKKyAgICBpcyhzeXN0 ZW0oImRpZmYgIgorICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgLiAkc3ViX2R1bXApLCAwLCAi RHVtcGVkIHJlc3VsdHMgZGlmZiBpbiAke3Rlc3RfbmFtZX0iKTsKK30KKworc3ViIGluaXRfbm9k ZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2RlID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2RlLT5pbml0OworICAg ICMgaW5jcmVhc2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBtYWtlcyB0b28gbG93 IGJ5IGRlZmF1bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAn bWF4X2Nvbm5lY3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwJyk7CisgICAg cmV0dXJuICRub2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFt ZSA9ICRfWzBdLiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisK K3N1YiBpbml0X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9zdWIiOwor ICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNyZWF0ZV9kZXBhcnNl X3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOwor ICAgIG15ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRkYm5hbWUsIHEoCisg ICAgICAgIGJlZ2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2Vf cmVncmVzczsKKyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMoaWQgU0VSSUFMIFBS SU1BUlkgS0VZLCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRkbCB0ZXh0KTsKKwor ICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKQorICAg ICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAg ICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJl Z2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQg aW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5j b21tYW5kX3RhZywgci5vYmplY3RfaWRlbnRpdHksIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9f anNvbihyLmNvbW1hbmQpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7Cisg ICAgICAgICQkOworCisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2Vf ZHJvcHNfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3Vh Z2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICBy IHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZy b20gcGdfZXZlbnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAgICAgbG9vcAor ICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRl bnRpdHksIGRkbCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVudGl0eSwgcHVi bGljLmRlcGFyc2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0X3R5cGUpKTsK KyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworCisgICAg ICAgIGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gZGRs X2NvbW1hbmRfZW5kIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOworCisgICAg ICAgIGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWcKKyAgICAgICAg b24gc3FsX2Ryb3AgZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisK KyAgICAgICAgY29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0aW5n X3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAk ZGJuYW1lID0gJF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUgZnVu Y3Rpb24gYmVmb3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZlX3Bz cWwoJGRibmFtZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJp ZzsKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7Cisg ICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3AgZnVu Y3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVwYXJz ZWRfZGRsczsKKyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz OworICAgICkpOworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZvciAo QG91dCkgeworICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQorICAg IHJldHVybiB3YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5kIHN0 YXJ0IHB1YiBzdWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInRlc3QiKTsK K215ICRzdWJfbm9kZSA9IGluaXRfc3ViX25vZGUoInRlc3QiKTsKK215ICRkYm5hbWUgPSAicG9z dGdyZXMiOworJHB1Yl9ub2RlIC0+IHN0YXJ0OworJHN1Yl9ub2RlIC0+IHN0YXJ0OworCisjIGxv YWQgdGVzdCBjYXNlcyBmcm9tIHRoZSByZWdyZXNzaW9uIHRlc3RzCitteSBAcmVncmVzc190ZXN0 cyA9IHNwbGl0IC9ccysvLCAkRU5We1JFR1JFU1N9OworCitmb3JlYWNoKEByZWdyZXNzX3Rlc3Rz KSB7CisgICAgbXkgJHRlc3RfbmFtZSA9IHRyaW0oJF8pOworICAgICMgc2tpcCBpZiBpdCdzIHJl Z3Jlc3Npb24gdGVzdCBwcmVwYXJhdGlvbiBvciBlbXB0eSBzdHJpbmcKKyAgICBpZiAoJHRlc3Rf bmFtZSBlcSAiIiBvciAkdGVzdF9uYW1lIGVxICJ0ZXN0X2RkbF9kZXBhcnNlIikKKyAgICB7Cisg ICAgICAgIG5leHQ7CisgICAgfQorICAgIGV2YWwge2V4ZWN1dGVfdGVzdF9jYXNlKCR0ZXN0X25h bWUsICRwdWJfbm9kZSwgJHN1Yl9ub2RlLCAkZGJuYW1lKTt9OworICAgIGlmICgkQCBuZSAiIikK KyAgICB7CisgICAgICAgIGZhaWwoJEApOworICAgIH0KK30KK2Nsb3NlOworCisjIENsb3NlIG5v ZGVzCiskcHViX25vZGUtPnN0b3A7Ciskc3ViX25vZGUtPnN0b3A7CisKK2RvbmVfdGVzdGluZygp OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv dC8wMDJfcmVncmVzc190ZXN0cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uM2E4NzVjMzNmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKQEAg LTAsMCArMSwyMDcgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRW52OwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7 Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIGV4ZWN1dGVfcmVn cmVzc190ZXN0IHsKKyAgICBteSAkcHViX25vZGUgPSAkX1swXTsKKyAgICBteSAkc3ViX25vZGUg PSAkX1sxXTsKKyAgICBteSAkZGJuYW1lID0gInBvc3RncmVzIjsKKyAgICBteSAkZGxwYXRoICAg ID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKyAgICBteSAkaW5wdXRkaXIgPSAiLi4v Li4vcmVncmVzcyI7CisgICAgbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dG1wX2NoZWNrOworCisgICAgIyBzZXQgdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcwor ICAgIGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9k ZSwgJGRibmFtZSk7CisKKyAgICAjIGV4ZWN1dGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIG9uIHB1 YiBub2RlCisgICAgbXkgJHJlZ3Jlc3NfY21kID0gJEVOVntQR19SRUdSRVNTfQorICAgICAgICAu ICIgIgorICAgICAgICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisgICAgICAgIC4gIi0tbWF4 LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorICAgICAgICAuICItLWRibmFtZT0iCisgICAgICAgIC4g JGRibmFtZSAuICIgIgorICAgICAgICAuICItLXVzZS1leGlzdGluZyAiCisgICAgICAgIC4gIi0t aG9zdD0iCisgICAgICAgIC4gJHB1Yl9ub2RlLT5ob3N0IC4gIiAiCisgICAgICAgIC4gIi0tcG9y dD0iCisgICAgICAgIC4gJHB1Yl9ub2RlLT5wb3J0IC4gIiAiCisgICAgICAgIC4gIi0taW5wdXRk aXI9JGlucHV0ZGlyICIKKyAgICAgICAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0ZGlyXCIgIgor ICAgICAgICAuICItLXNjaGVkdWxlPSRpbnB1dGRpci9wYXJhbGxlbF9zY2hlZHVsZSI7CisgICAg cHJpbnQgIlJlZ3Jlc3Npb24gdGVzdCBjb21tYW5kIGlzICRyZWdyZXNzX2NtZCI7CisgICAgbXkg JHJjID0gc3lzdGVtKCRyZWdyZXNzX2NtZCk7CisgICAgaWYgKCRyYyAhPSAwKQorICAgIHsKKyAg ICAgICAgIyBJZiByZWdyZXNzaW9uIHRlc3QgZmFpbHMsIGR1bXAgb3V0IHRoZSByZWdyZXNzaW9u IGRpZmZzIGZpbGUKKyAgICAgICAgbXkgJGRpZmZzID0gIiR7b3V0cHV0ZGlyfS9yZWdyZXNzaW9u L3JlZ3Jlc3Npb24uZGlmZnMiOworICAgICAgICBpZiAoLWUgJGRpZmZzKQorICAgICAgICB7Cisg ICAgICAgICAgICBwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKyAgICAgICAgICAg IHByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKyAgICAgICAgICAgIHByaW50ICI9PT0gRU9GID09 PVxuIjsKKyAgICAgICAgfQorICAgICAgICBkaWUgIlJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQiOwor ICAgIH0KKworICAgICMgUmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBmcm9tIGRlcGFy c2VkIERETHMgb24gcHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAgICRwdWJfbm9k ZSAtPiBwc3FsKCRkYm5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNlX2V4cGFuZF9j b21tYW5kKGRkbCkgfHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBpZCBBU0MpLAor ICAgICAgICBzdGRvdXQgPT4gXCRkZGxfc3FsKTsKKworICAgICMgRXhlY3V0ZSBTUUwgY29tbWFu ZHMgb24gc3ViIG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkZGRsX3NxbCk7 CisKKyAgICAjIENsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjbGVhbl9k ZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7 CisKKyAgICAjIER1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBta2RpciAke291 dHB1dGRpcn0uIi9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9 LiIvZHVtcHMvcmVncmVzc19wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1wID0gJHtvdXRwdXRk aXJ9LiIvZHVtcHMvcmVncmVzc19zdWIuZHVtcCI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIK KyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHB1Yl9kdW1wIC4g IiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4g JHB1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHViIG5vZGUgZmFpbGVkIjsKKyAg ICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAgIC4gIi1mICIK KyAgICAgICAgLiAkc3ViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAg ICAgLiAgJy1wICcKKyAgICAgICAgLiAkc3ViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVt cCBzdWIgbm9kZSBmYWlsZWQiOworCisgICAgIyBDb21wYXJlIGR1bXBlZCByZXN1bHRzCisgICAg aXMoc3lzdGVtKCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1Yl9kdW1w KSwgMCwgIkNvbXBhcmluZyBkdW1wZWQgb3V0cHV0Iik7CisKKyAgICAjIENsb3NlIG5vZGVzCisg ICAgJHB1Yl9ub2RlLT5zdG9wOworICAgICRzdWJfbm9kZS0+c3RvcDsKK30KKworc3ViIGluaXRf bm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2RlID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2RlLT5pbml0Owor ICAgICMgaW5jcmVhc2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBtYWtlcyB0b28g bG93IGJ5IGRlZmF1bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LCAnbWF4X2Nvbm5lY3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwJyk7Cisg ICAgcmV0dXJuICRub2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGVf bmFtZSA9ICRfWzBdLiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9 CisKK3N1YiBpbml0X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9zdWIi OworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNyZWF0ZV9kZXBh cnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBd OworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRkYm5hbWUsIHEo CisgICAgICAgIGJlZ2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFy c2VfcmVncmVzczsKKyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMoaWQgU0VSSUFM IFBSSU1BUlkgS0VZLCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRkbCB0ZXh0KTsK KyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCkKKyAg ICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAg ICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBi ZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2Vy X2RkbF9jb21tYW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0 IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIu Y29tbWFuZF90YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3Rv X2pzb24oci5jb21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOwor ICAgICAgICAkJDsKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV9k cm9wc190b19qc29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFn ZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIg cmVjb3JkOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJv bSBwZ19ldmVudF90cmlnZ2VyX2Ryb3BwZWRfb2JqZWN0cygpCisgICAgICAgICAgICBsb29wCisg ICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVu dGl0eSwgZGRsKSB2YWx1ZXMgKHIub2JqZWN0X3R5cGUsIHIub2JqZWN0X2lkZW50aXR5LCBwdWJs aWMuZGVwYXJzZV9kcm9wX2RkbChyLm9iamVjdF9pZGVudGl0eSwgci5vYmplY3RfdHlwZSkpOwor ICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisgICAgICAg IGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gZGRsX2Nv bW1hbmRfZW5kIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBj cmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIHNx bF9kcm9wIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAg ICBjb21taXQ7CisgICAgKSk7Cit9CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3Vy Y2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUg PSAkX1sxXTsKKyAgICAjIERyb3AgdGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBmdW5jdGlvbiBi ZWZvcmUgdGFraW5nIGEgbG9naWNhbCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVfcHNxbCgkZGJu YW1lLHEoCisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnOworICAg ICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsKKyAgICAgICAg ZHJvcCBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBmdW5jdGlvbiBk ZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBhcnNlZF9kZGxz OworICAgICAgICBEUk9QIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAg KSk7Cit9CisKK3N1YiB0cmltIHsKKyAgICBteSBAb3V0ID0gQF87CisgICAgZm9yIChAb3V0KSB7 CisgICAgICAgIHMvXlxzKy8vOworICAgICAgICBzL1xzKyQvLzsKKyAgICB9CisgICAgcmV0dXJu IHdhbnRhcnJheSA/IEBvdXQgOiAkb3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQgc3RhcnQgcHVi IHN1YiBub2RlcworbXkgJHB1Yl9ub2RlID0gaW5pdF9wdWJfbm9kZSgicmVncmVzcyIpOworbXkg JHN1Yl9ub2RlID0gaW5pdF9zdWJfbm9kZSgicmVncmVzcyIpOworJHB1Yl9ub2RlIC0+IHN0YXJ0 OworJHN1Yl9ub2RlIC0+IHN0YXJ0OworCisjIENvbW1lbnQgdGhlIGV4ZWN1dGlvbiB0ZW1wb3Jh cmlseSwgYW4gZXJyb3IgaW4gZGRsX2RlcGFyc2UuYyB3aWxsIGNhdXNlIHRoZSBkYXRhYmFzZSBl eGl0cyBhYm5vcm1hbGx5LCBlcnJvciBzaWduYXR1cmU6CisjCisjIDIwMjItMTItMDMgMjM6MDI6 NDQuNzc4IFVUQyBbMTI5MTAyXSBwZ19yZWdyZXNzL3RhYmxlc3BhY2UgTE9HOiAgc3RhdGVtZW50 OiBBTFRFUiBUQUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlX3JlbmFtZWQg U0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdDsKKyMgVFJBUDogZmFpbGVkIEFzc2VydCgiSXNBKHN0 bXQsIEFsdGVyVGFibGVTdG10KSIpLCBGaWxlOiAiZGRsX2RlcGFyc2UuYyIsIExpbmU6IDMzNzEs IFBJRDogMTI5MTAyCisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkgcG9zdGdyZXMgW2xv Y2FsXSBBTFRFUiBUQUJMRShFeGNlcHRpb25hbENvbmRpdGlvbisweGJiKVsweDU2M2JkNmVhNWIw ZF0KKyMgLi4uCisjIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLnNvLjYoKzB4MjlkOTApWzB4 N2ZkNmE3NGE2ZDkwXQorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KF9fbGliY19z dGFydF9tYWluKzB4ODApWzB4N2ZkNmE3NGE2ZTQwXQorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6 IHJ1bnFpIHBvc3RncmVzIFtsb2NhbF0gQUxURVIgVEFCTEUoX3N0YXJ0KzB4MjUpWzB4NTYzYmQ2 NzJmMWU1XQorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgc2Vy dmVyIHByb2Nlc3MgKFBJRCAxMjkxMDIpIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCA2OiBBYm9y dGVkCisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBERVRBSUw6ICBGYWls ZWQgcHJvY2VzcyB3YXMgcnVubmluZzogQUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVn cmVzc190YmxzcGFjZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIDIwMjIt MTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICB0ZXJtaW5hdGluZyBhbnkgb3Ro ZXIgYWN0aXZlIHNlcnZlciBwcm9jZXNzZXMKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTEgVVRD IFsxMjkwNThdIExPRzogIHNodXR0aW5nIGRvd24gYmVjYXVzZSByZXN0YXJ0X2FmdGVyX2NyYXNo IGlzIG9mZgorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MiBVVEMgWzEyOTA1OF0gTE9HOiAgZGF0 YWJhc2Ugc3lzdGVtIGlzIHNodXQgZG93bgorCisjIGV2YWwge2V4ZWN1dGVfcmVncmVzc190ZXN0 KCRwdWJfbm9kZSwgJHN1Yl9ub2RlKTt9OworIyBpZiAoJEAgbmUgIiIpCisjIHsKKyMgICAgIGZh aWwoJEApOworIyB9CisKKyMgQ2xvc2Ugbm9kZXMKKyRwdWJfbm9kZS0+c3RvcDsKKyRzdWJfbm9k ZS0+c3RvcDsKKworcGFzcygicmVncmVzc3Npb24gdGVzdCBwYXNzZWQiKTsKKworZG9uZV90ZXN0 aW5nKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjE0MDcwY2Q1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEu MC5zcWwKQEAgLTAsMCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgKi8KKworLS0gY29t cGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFU RSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gZGVw YXJzZV9kcm9wX2RkbChJTiBvYmppZGVudGl0eSB0ZXh0LAorICAgIElOIG9iamVjdHR5cGUgdGV4 dCkKKyAgUkVUVVJOUyB0ZXh0IElNTVVUQUJMRSBTVFJJQ1QKKyAgQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmJkNjk5MmJkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpAQCAtMCww ICsxLDU5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5j CisgKgkJU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mg bW9kdWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz LmMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJu b2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorI2lu Y2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNU SU9OX0lORk9fVjEoZGVwYXJzZV9kcm9wX2RkbCk7CisKKy8qCisgKiBHaXZlbiBvYmplY3RfaWRl bnRpdHkgYW5kIG9iamVjdF90eXBlIG9mIGRyb3BwZWQgb2JqZWN0LCByZXR1cm4gYSBKU09OIHJl cHJlc2VudGF0aW9uIG9mIERST1AgY29tbWFuZC4KKyAqLworRGF0dW0KK2RlcGFyc2VfZHJvcF9k ZGwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpvYmppZGVudGl0eSA9IFBHX0dFVEFS R19URVhUX1AoMCk7CisJY29uc3QgY2hhcgkgICAqb2JqaWRlbnRpdHlfc3RyID0gdGV4dF90b19j c3RyaW5nKG9iamlkZW50aXR5KTsKKwl0ZXh0CSAgICpvYmplY3R0eXBlID0gUEdfR0VUQVJHX1RF WFRfUCgxKTsKKwljb25zdCBjaGFyCSAgICpvYmplY3R0eXBlX3N0ciA9IHRleHRfdG9fY3N0cmlu ZyhvYmplY3R0eXBlKTsKKworCWNoYXIJCSAgICpjb21tYW5kOworCisJLy8gY29uc3RyYWludCBp cyBwYXJ0IG9mIGFsdGVyIHRhYmxlIGNvbW1hbmQsIG5vIG5lZWQgdG8gZHJvcCBpbiBEUk9QIGNv bW1hbmQKKwlpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAidGFibGUgY29uc3RyYWludCIpID09 IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBl X3N0ciwgInRvYXN0IHRhYmxlIikgPT0gMCkgeworCQlvYmplY3R0eXBlX3N0ciA9ICJ0YWJsZSI7 CisJfSAgZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZGVmYXVsdCB2YWx1ZSIpID09 IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBl X3N0ciwgIm9wZXJhdG9yIG9mIGFjY2VzcyBtZXRob2QiKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9O VUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJmdW5jdGlvbiBvZiBh Y2Nlc3MgbWV0aG9kIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOworCX0gZWxzZSBpZiAo c3RyY21wKG9iamVjdHR5cGVfc3RyLCAidGFibGUgY29sdW1uIikgPT0gMCkgeworCQlQR19SRVRV Uk5fTlVMTCgpOworCX0KKworCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmppZGVu dGl0eV9zdHIsIG9iamVjdHR5cGVfc3RyLCBEUk9QX0NBU0NBREUpOworCisJaWYgKGNvbW1hbmQp CisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JF VFVSTl9OVUxMKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5hMWY5MzRlNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLmNvbnRyb2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgRERM IGRlcGFyc2UgcmVncmVzcyBmZWF0dXJlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVs ZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycKK3JlbG9jYXRh YmxlID0gdHJ1ZQotLSAKMi4zNC4xCgo= --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v63-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us34l2 RnJvbSAzYWZhYjEyYWEwOGI0NTcwZWM4NThkNDA0OGRlNWJiM2Q5ZmMzOTIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6NDg6MzkgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MyAzLzddIFN1cHBvcnQgRERMIGRlcGFyc2Ugb2YgdGhlIHJlc3QgY29tbWFuZHMuCgogICAg Q1JFQVRFL0RST1AgQUNDRVNTIE1FVEhPRAogICAgQ1JFQVRFL0FMVEVSL0RST1AgQUdHUkVHQVRF CiAgICBDUkVBVEUvQUxURVIvRFJPUCBDQVNUCiAgICBDUkVBVEUvQUxURVIvRFJPUCBDT0xMQVRJ T04KICAgIENPTU1FTlQKICAgIENSRUFURS9BTFRFUi9EUk9QIENPTlZFUlNJT04KICAgIEFMVEVS IERFRkFVTFQgUFJJVklMRUdFUwogICAgQ1JFQVRFL0FMVEVSL0RST1AgRE9NQUlOCiAgICBDUkVB VEUvQUxURVIvRFJPUCBFWFRFTlNJT04KICAgIENSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gREFU QSBXUkFQUEVSCiAgICBDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIFRBQkxFCiAgICBDUkVBVEUv QUxURVIgRlVOQ1RJT04vUFJPQ0VEVVJFCiAgICBHUkFOVAogICAgQ1JFQVRFL0RST1AgSU5ERVgK ICAgIENSRUFURS9BTFRFUi9EUk9QIExBTkdVQUdFCiAgICBDUkVBVEUvQUxURVIvRFJPUCBNQVRF UklBTElaRUQgVklFVwogICAgQ1JFQVRFL0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KICAg IENSRUFURS9BTFRFUi9EUk9QIFBVQkxJQ0FUSU9OCiAgICBDUkVBVEUvQUxURVIvRFJPUCBQT0xJ Q1kKICAgIFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKICAgIFJFVk9LRQogICAgQUxURVIvRFJP UCBST1VUSU5FCiAgICBDUkVBVEUvQUxURVIvRFJPUCBSVUxFCiAgICBDUkVBVEUvQUxURVIvRFJP UCBTQ0hFTUEKICAgIFNFQ1VSSVRZIExBQkVMCiAgICBDUkVBVEUvQUxURVIvRFJPUCBTRVFVRU5D RQogICAgQ1JFQVRFL0FMVEVSL0RST1AgU0VSVkVSCiAgICBDUkVBVEUvQUxURVIvRFJPUCBTVEFU SVNUSUNTCiAgICBDUkVBVEUvQUxURVIvRFJPUCBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OL1BB UlNFUi9ESUNUSU9OQVJZL1RFTVBMQVRFCiAgICBDUkVBVEUvRFJPUCBUUkFOU0ZPUk0KICAgIENS RUFURS9BTFRFUiBUUklHR0VSCiAgICBDUkVBVEUvQUxURVIvRFJPUCBUWVBFCiAgICBDUkVBVEUv QUxURVIvRFJPUCBVU0VSIE1BUFBJTkcKICAgIENSRUFURS9BTFRFUi9EUk9QIFZJRVcgLS0gTm90 ZSAjNAoKKE5vdGUgIzMpIFJlbW92ZWQgYW4gdW5kZXNpcmFibGUgJ29uJyBmcm9tIHRoZSBpZGVu dGl0eSBzdHJpbmcgZm9yIFRSQU5TRk9STQppbiBnZXRPYmplY3RJZGVudGl0eVBhcnRzLiBUaGlz IGlzIG5lZWRlZCB0byBtYWtlIGRlcGFyc2Ugb2YgRFJPUApUUkFOU0ZPUk0gY29tbWFuZCB3b3Jr IHNpbmNlICdvbicgaXMgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQKRFJPUCBUUkFOU0ZPUk0g c3ludGF4LiBGb3IgZXhhbXBsZSwgdGhlIGNvcnJlY3Qgc3ludGF4IGlzCkRST1AgVFJBTlNGT1JN IHRyZiBGT1IgSU5UIExBTkdVQUdFIFNRTDsKaW5zdGVhZCBvZiBEUk9QIFRSQU5TRk9STSB0cmYg Rk9SIElOVCBPTiBMQU5HVUFHRSBTUUw7CgooTm90ZSAjNCkgRm9yIFZJRVdTVE1ULCB3ZSBjcmVh dGVkIHBnX2dldF92aWV3ZGVmX2ludGVybmFsIHRvIGdldCB0aGUKU0VMRUNUIHF1ZXJ5IG9mIHRo ZSBwZW5kaW5nIFZJRVdTVE1ULiBJbiB0aGUgY2FzZSB0aGF0IHRoZSBDUkVBVEUgVklFVyBjb21t YW5kCmlzIHN0aWxsIGluIHByb2dyZXNzLCB3ZSB3b3VsZCBuZWVkIHRvIHNlYXJjaCB0aGUgc3lz dGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUKcmV3cml0ZSBydWxlIG9mIHRoZSB2aWV3 IGFzIG9wcG9zZSB0byBxdWVyeWluZyBwZ19yZXdyaXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dv cmtlcigpLAp0aGUgbGF0dGVyIHdpbGwgcmV0dXJuIGVtcHR5IHJlc3VsdC4KLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICAgfCA2Mzk0ICsrKysrKysrKysrKysrKysrKysr KysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgfCAgICA2ICsKIHNy Yy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgICB8ICAgMTAgKwogc3JjL2luY2x1ZGUv dGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgIHwgICAyMCArLQogNCBmaWxlcyBjaGFuZ2VkLCA2MzY4 IGluc2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCmluZGV4IDg5NjhjODNkZTcuLjA5MjMxMzU3OTAgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYwpAQCAtMTUxLDYgKzE1MSw3IEBAIGJvb2wJCXZlcmJvc2UgPSB0cnVlOwogCiBzdGF0 aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQs IExpc3QgKmFycmF5KTsKIHN0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9h dF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKTsKIHN0 YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10 KTsKIHN0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKIHN0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3Rv X2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CkBAIC0xNjAsMTAg KzE2MSwxNCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAogc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0 YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAogCQkJCQkJCQkgT2lkICpuc3BpZCwg Y2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAogCQkJCQkJCQkgYm9vbCAqdHlwYXJy YXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVs dHMpOwogc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1l KTsKIHN0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNz SWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3JvbGVz cGVjKFJvbGVTcGVjICpzcGVjKTsKIHN0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChP YmpUcmVlICp2YWx1ZSk7CiBzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10 LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlKGNoYXIgKmZt dCk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOwogc3Rh dGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25i UGFyc2VTdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVk KE9pZCBpbmRleHJlbGlkLAogCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKQEAgLTE3OCw4ICsx ODMsMTggQEAgc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG8KIAkJCQkJCQkJICBDb2x1bW5EZWYgKmNv bGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRl cl90YWJsZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0Fn Z3JlZ2F0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQg KmRlZmluZSwKKwkJCQkJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0aWMg T2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShP aWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBP YmplY3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10 X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1w bGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiAKIHN0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMg T2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAq bmFtZSwgY2hhciAqdmFsdWUpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1 c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNl dE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKIApAQCAtMTg4LDYgKzIwMyw3IEBAIHN0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhCiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2Vx X0luY3JlbWVudEJ5KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7 CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdfc2Vx dWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfU2VxX01heHZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPaWQgc2VxdWVu Y2VJZCwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2Vf U2VxX1Jlc3RhcnQoRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOwogc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9TdGFydHdpdGgoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFf QXMoRGVmRWxlbSAqZWxlbSk7CkBAIC0yMDMsNiArMjE5LDggQEAgc3RhdGljIExpc3QgKmRlcGFy c2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCk7CiBzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpk cGNvbnRleHQsCiAJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKIAorc3Rh dGljIGNoYXIgKkRvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxlIGRvbVR1cCwgYm9vbCBtaXNzaW5n X29rKTsKKwogLyoKICAqIEFwcGVuZCBwcmVzZW50IGFzIGZhbHNlIHRvIGEgdHJlZS4KICAqLwpA QCAtMjEyLDYgKzIzMCwyNCBAQCBhcHBlbmRfbm90X3ByZXNlbnQoT2JqVHJlZSAqdHJlZSkKIAlh cHBlbmRfYm9vbF9vYmplY3QodHJlZSwgInByZXNlbnQiLCBmYWxzZSk7CiB9CiAKKy8qCisgKiBB cHBlbmQgYSBmbG9hdDggcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2Fw cGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZh bHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJ QXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1h dF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUZs b2F0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmZsdCA9IHZhbHVlOworCWFwcGVuZF9w cmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKIC8qCiAgKiBBcHBlbmQgYW4gYXJyYXkg cGFyYW1ldGVyIHRvIGEgdHJlZS4KICAqLwpAQCAtNDIxLDYgKzQ1NywzNCBAQCBhcHBlbmRfc3Ry aW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICogb2JqZWN0X25h bWUsCiAJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKIH0KIAorLyoKKyAqIEFw cGVuZCBhIE5VTEwtb3ItcXVvdGVkLWxpdGVyYWwgY2xhdXNlLiAgVXNlZnVsIGZvciBDT01NRU5U IGFuZCBTRUNVUklUWQorICogTEFCRUwuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bnVs bH1zICV7bGl0ZXJhbH1zCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbGl0ZXJhbF9vcl9udWxs KE9ialRyZWUgKnBhcmVudCwgY2hhciAqZWxlbW5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRy ZWUgICAgKnRvcDsKKwlPYmpUcmVlICAgICpwYXJ0OworCisJdG9wID0gbmV3X29ianRyZWUoIiIp OworCXBhcnQgPSBuZXdfb2JqdHJlZV9WQSgiTlVMTCIsIDEsCisJCQkJCQkgICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsICF2YWx1ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtudWxs fXMiLCBwYXJ0KTsKKworCXBhcnQgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCSAgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwgdmFsdWUgIT0gTlVMTCk7CisKKwlpZiAodmFsdWUpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHBhcnQsICIle3ZhbHVlfUwiLCAidmFsdWUiLCB2YWx1ZSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtsaXRlcmFsfXMiLCBwYXJ0KTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHBhcmVudCwgZWxlbW5hbWUsIHRvcCk7Cit9CisKIC8qCiAgKiBTaW1p bGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9m IGluZm9ybWF0aW9uCiAgKiBzZXBhcmF0ZWx5OgpAQCAtNTIzLDYgKzU4NywzMSBAQCBmb3JtYXRf dHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCiAJUmVsZWFzZVN5c0Nh Y2hlKHR1cGxlKTsKIH0KIAorLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgYXJn dW1lbnRzIHRvIGEgZnVuY3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lv bnMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJn ZGVmYXVsdHMpCit7CisJTGlzdAkgICAqbm9kZWRlZnM7CisJTGlzdAkgICAqc3RyZGVmcyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05v ZGUodGV4dF90b19jc3RyaW5nKHByb2FyZ2RlZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMs IExpc3QpKQorCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOwor CisJZm9yZWFjaChjZWxsLCBub2RlZGVmcykKKwl7CisJCU5vZGUJICAgKm9uZWRlZiA9IGxmaXJz dChjZWxsKTsKKworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Np b24ob25lZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOwor fQorCiAvKgogICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVu IFJFTFBFUlNJU1RFTkNFIHZhbHVlLgogICovCkBAIC03MTIsNiArODAxLDU3IEBAIG5ld19vYmp0 cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKIAkJCQkJCSAgInR5cGFycmF5 IiwgT2JqVHlwZUJvb2wsIHR5cGVfYXJyYXkpOwogfQogCisvKgorICogSGVscGVyIHJvdXRpbmUg Zm9yICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgor ICogU3BlY2lhbCB2YWx1ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFu ZGVkIHRvIHRoZWlyIGZpbmFsCisgKiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3 X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKQoreworCWNoYXIJICAgKnJvbGV0 eXBlOworCisJaWYgKHNwZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJQykKKwkJcm9sZXR5 cGUgPSBnZXRfcm9sZXNwZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0eXBlID0gcHN0cmR1 cCgiIik7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCSAgImlzX3B1 YmxpYyIsIE9ialR5cGVCb29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJ CQkJCQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKK30KKworLyoKKyAq IEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkg T0lELiAoQUNMX0lEX1BVQkxJQworICogbWVhbnMgdG8gdXNlICJwdWJsaWMiKS4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoT2lkIHJvbGVvaWQpCit7CisJ T2JqVHJlZSAgICAqcm9sZTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9QVUJMSUMpCisJewor CQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlX25hbWU7CisKKwkJcm9sdHVwID0g U2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0ocm9sZW9pZCkpOworCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciByb2xlIHdpdGggT0lEICV1Iiwgcm9sZW9pZCk7CisKKwkJcm9sZV9uYW1l ID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUp OworCQlyb2xlID0gbmV3X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAi cm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKHJvbGVfbmFtZSkpOworCisJCVJlbGVh c2VTeXNDYWNoZShyb2x0dXApOworCX0KKwllbHNlCisJCXJvbGUgPSBuZXdfb2JqdHJlZV9WQSgi JXtyb2xlbmFtZX1JIiwgMSwKKwkJCQkJCQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsICJw dWJsaWMiKTsKKworCXJldHVybiByb2xlOworfQorCiAvKgogICogQWxsb2NhdGUgYSBuZXcgb2Jq ZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCiAg KgpAQCAtNzg5LDYgKzkyOSwyMiBAQCBuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1v YmpzLC4uLikKIAlyZXR1cm4gdHJlZTsKIH0KIAorLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHN0cmlu ZyBvYmplY3QuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2JqZWN0KGNoYXIg KnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVlKTsKKworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUuc3Ry aW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKIC8qCiAgKiBQcm9jZXNzIHRoZSBw cmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBw YXJzZQogICogc3RhdGUuCkBAIC0xOTMyLDYgKzIwODgsODMgQEAgZGVwYXJzZV9TZXFfTWludmFs dWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQogCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChyZXQpOwogfQogCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2Ug T1dORUQgQlkgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT1dORUQgQlkgJXtv d25lcn1ECisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVkQnkoT2lkIHNl cXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsK KwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlz WzNdOworCUhlYXBUdXBsZQl0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlB bnVtX3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURF USwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJ bml0KCZrZXlzWzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsK KwlTY2FuS2V5SW5pdCgma2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJ CQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkp OworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5k ZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCQlvd25l cklkOworCQlGb3JtX3BnX2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlICAgICp0bXBfb2JqOwor CQljaGFyCSAgICpjb2xuYW1lOworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNU UlVDVCh0dXBsZSk7CisKKwkJLyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBw Z19jbGFzcyAqLworCQlpZiAoZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJ CQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlv bklkKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJ Y29udGludWU7CisKKwkJb3duZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1lID0g Z2V0X2F0dG5hbWUob3duZXJJZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYg KGNvbG5hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wX29iaiwgImF0dHJuYW1lIiwgImF0dHJuYW1lIiwgY29sbmFtZSk7 CisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLCAyLAorCQkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkgIm93bmVyIiwgT2Jq VHlwZU9iamVjdCwgdG1wX29iaik7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwly ZWxhdGlvbl9jbG9zZShkZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRo ZXJlJ3Mgbm8gb3duZXIgY29sdW1uLCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNl dCB1cCBzbworCSAqIHRoYXQgaXQgd29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFy ZXQpCisJCS8qIFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4uICovCisJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLCAzLAorCQkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU51bGwsCisJCQkJ CQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChyZXQpOworfQorCiAvKgogICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBv cHRpb24uCiAgKgpAQCAtMzQ4MCw5NiArMzcxMyw2MTM1IEBAIGRlcGFyc2VfZHJvcF9jb21tYW5k KGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAogfQogCiAv KgotICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKiBEZXBhcnNlIGFu IEFsdGVyQ29sbGF0aW9uU3RtdCAoQUxURVIgQ09MTEFUSU9OKQogICoKLSAqIFRoaXMgZnVuY3Rp b24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4K KyAqIEdpdmVuIGEgY29sbGF0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4OgorICogQUxURVIgQ09MTEFUSU9OICV7aWRlbnRpdHl9 TyBSRUZSRVNIIFZFUlNJT04KICAqLwogc3RhdGljIE9ialRyZWUgKgotZGVwYXJzZV9zaW1wbGVf Y29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCitkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogewotCU9pZAkJCW9iamVjdElkOwotCU5vZGUJ ICAgKnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlG b3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOwogCi0JQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2lt cGxlKTsKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXAp OwogCi0JcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7Ci0Jb2JqZWN0SWQgPSBjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTExB VElPTiAle2lkZW50aXR5fU8gUkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3Jt LT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1l KSkpOwogCi0JaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0g VF9DcmVhdGVFeHRlbnNpb25TdG10KSkKLQkJcmV0dXJuIE5VTEw7CisJUmVsZWFzZVN5c0NhY2hl KGNvbFR1cCk7CiAKLQkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0 aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCi0Jc3dpdGNoIChub2RlVGFnKHBhcnNldHJl ZSkpCi0JewotCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKLQkJCXJldHVybiBkZXBhcnNlX0NyZWF0 ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJcmV0dXJuIHJldDsKK30KIAotCQljYXNl IFRfQ3JlYXRlU3RtdDoKLQkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisvKgorICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJFU0VUIEFMTAorICogT1IKKyAqIFNFVCAle3NldF9u YW1lfUkgVE8gJXtzZXRfdmFsdWV9cworICogT1IKKyAqIFJFU0VUICV7c2V0X25hbWV9SQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBr aW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CiAKLQkJ Y2FzZSBUX0luZGV4U3RtdDoKLQkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKwlpZiAoa2luZCA9PSBWQVJfUkVTRVRfQUxMKQorCQlyZXQgPSBuZXdfb2Jq dHJlZSgiUkVTRVQgQUxMIik7CisJZWxzZSBpZiAoa2luZCA9PSBWQVJfU0VUX1ZBTFVFKQorCXsK KwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJCSAi c2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKIAotCQlkZWZhdWx0OgotCQkJZWxvZyhM T0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAotCQkJ CSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCQkvKgorCQkgKiBTb21lIEdVQyB2YXJpYWJs ZSBuYW1lcyBhcmUgJ0xJU1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAqIHF1b3Rl ZC4KKwkJICovCisJCWlmIChHZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAmIEdVQ19M SVNUX1FVT1RFKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9 cyIsICJzZXRfdmFsdWUiLCB2YWx1ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJldCwgIlRPICV7c2V0X3ZhbHVlfUwiLCAic2V0X3ZhbHVlIiwgdmFsdWUpOwogCX0KKwllbHNl CisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJ CSAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKIAotCXJldHVybiBOVUxMOworCXJl dHVybiByZXQ7CiB9CiAKIC8qCi0gKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3RlZENv bW1hbmQuCisgKiBEZXBhcnNlIGFuIEFsdGVyRnVuY3Rpb25TdG10IChBTFRFUiBGVU5DVElPTi9S T1VUSU5FL1BST0NFRFVSRSkKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBh cnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4OgorICogQUxURVIg RlVOQ1RJT04vUk9VVElORS9QUk9DRURVUkUgJXtzaWduYXR1cmV9cyAle2RlZmluaXRpb246IH1z CiAgKi8KLWNoYXIgKgotZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJG dW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIHsKLQlPdmVycmlkZVNlYXJj aFBhdGggKm92ZXJyaWRlUGF0aDsKLQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKLQlNZW1vcnlDb250 ZXh0IHRtcGN4dDsKLQlPYmpUcmVlICAgICp0cmVlOwotCWNoYXIJICAgKmNvbW1hbmQgPSBOVUxM OwotCVN0cmluZ0luZm9EYXRhIHN0cjsKKwlBbHRlckZ1bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRl ckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOwor CUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlw cm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCWlmIChwcm9jRm9ybS0+cHJva2luZCA9 PSBQUk9LSU5EX1BST0NFRFVSRSkKKwkJcmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIFBST0NFRFVS RSIpOworCWVsc2UKKwkJcmV0ID0gbmV3X29ianRyZWUobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1Rf Uk9VVElORSA/CisJCQkJCQkgICJBTFRFUiBST1VUSU5FIiA6ICJBTFRFUiBGVU5DVElPTiIpOwog CiAJLyoKLQkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0 aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAotCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmts ZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAotCSAqIGFsbG9jYXRlIHRoZSBv dXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqIEFMVEVSIEZVTkNUSU9OIGRv ZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nIHRvIGdldAorCSAq IGlucHV0IHR5cGUgT2lkcy4KIAkgKi8KLQlpbml0U3RyaW5nSW5mbygmc3RyKTsKLQl0bXBjeHQg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCSAg ICJkZXBhcnNlIGN0eCIsCi0JCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKLQkJ CQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKLQkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9NQVhTSVpFKTsKLQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0 KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPYmpU cmVlICAgICp0bXBfb2JqOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQi LCAxLAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFt cyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJ c2lnbiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwg MiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJ CSAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9k ZS0+YWN0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0 KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBfb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRy ZWUoc3RyVmFsKGRlZmVsLT5hcmcpKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAic3RyaWN0IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVs LT5hcmcpID8KKwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJ CQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInNlY3VyaXR5IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFs KGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJ TlZPS0VSIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIp ID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9vbFZhbChkZWZlbC0+YXJnKSA/CisJ CQkJCQkJCSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09GIik7CisJCWVsc2UgaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAor CQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJyb3dzIikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJS T1dTIik7CisJCQlpZiAoZGVmR2V0TnVtZXJpYyhkZWZlbCkgPT0gMCkKKwkJCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBf b2JqLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZh cmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJ CQljaGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0 bXBfb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZh bHVlKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdXBwb3J0Iikg PT0gMCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJ CQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1l IGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJl bnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMiLCAibmFtZSIsCisJCQkJ CQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJ CQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJ CQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIlBBUkFMTEVMICV7dmFsdWV9cyIsIDEsCisJCQkJCQkJCQkidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVw KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT2JqZWN0U2No ZW1hU3RtdCAoQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBHaXZlbiB0aGUg b2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdz Y2hlbWF9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1h U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9i amVjdEFkZHJlc3Mgb2xkX3NjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUg PSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwljaGFyCSAgICppZGVudGl0 eTsKKwljaGFyCSAgICpuZXdfc2NoZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCWNoYXIJICAgKm9s ZF9zY2huYW1lOworCWNoYXIJICAgKmlkZW50OwogCiAJLyoKLQkgKiBNYW55IHJvdXRpbmVzIHVu ZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQot CSAqIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2gg cmVzdWx0cywgd2Ugd2FudAotCSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBz byB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIgdG8KLQkgKiBlbnZpcm9ubWVudHMgd2l0aCBk aWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKLQkgKiB3 aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxs IG92ZXIgdGhlCi0JICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqIFNpbmNl IHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9mIHZp ZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2JqZWN0 IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1dCBv ZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBuYW1l LCBob3dldmVyLCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5CisJ ICogc3RyaW5nIGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgor CSAqIFhYWCBUaGlzIGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CiAJICovCi0J b3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0 KTsKLQlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7Ci0Jb3ZlcnJpZGVQYXRoLT5hZGRDYXRh bG9nID0gZmFsc2U7Ci0Jb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKLQlQdXNoT3ZlcnJp ZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0 eSgmYWRkcmVzcywgZmFsc2UpOworCW9sZF9zY2huYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKG9s ZF9zY2hlbWEub2JqZWN0SWQpOworCWlmICghb2xkX3NjaG5hbWUpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hlbWEgd2l0aCBPSUQgJXUiLAorCQkJIG9sZF9zY2hl bWEub2JqZWN0SWQpOworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsIHF1b3RlX2lkZW50aWZp ZXIob2xkX3NjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmll cihuZXdfc2NoZW1hKSkpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5 cGV9cyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwgMywKKwkJCQkJCSAg Im9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5vYmplY3RUeXBlLCBmYWxzZSksCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcs IGlkZW50LAorCQkJCQkJICAibmV3c2NoZW1hIiwgT2JqVHlwZVN0cmluZywgbmV3X3NjaGVtYSk7 Cit9CiAKLQl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworLyoKKyAqIERlcGFyc2UgYSBHUkFOVC9S RVZPS0UgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogR1JBTlQgJXtwcml2aWxl Z2VzOiwgfXMgT04iICV7b2JqdHlwZX1zICV7cHJpdnRhcmdldDosIH1zIFRPICV7Z3JhbnRlZXM6 LCB9cworICogJXtncmFudF9vcHRpb259cyBHUkFOVEVEIEJZICV7cm9sZW5hbWV9cworICogCQlP UgorICogUkVWT0tFICV7cHJpdmlsZWdlczosIH1zIE9OIiAle29ianR5cGV9cyAle3ByaXZ0YXJn ZXQ6LCB9cworICogRlJPTSAle2dyYW50ZWVzOiwgfXMgJXtncmFudF9vcHRpb259cyAle2Nhc2Nh ZGV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0dyYW50U3RtdChDb2xsZWN0ZWRD b21tYW5kICpjbWQpCit7CisJSW50ZXJuYWxHcmFudCAqaXN0bXQ7CisJT2JqVHJlZSAgICAqcmV0 OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPaWQJCQljbGFz c0lkOworCU9ialRyZWUgICAgKnRtcDsKIAotCXN3aXRjaCAoY21kLT50eXBlKQorCS8qIERvbid0 IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24g Ki8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJaXN0bXQgPSBj bWQtPmQuZ3JhbnQuaXN0bXQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBvYmplY3RzIGZy b20gIkFMTCAuLi4gSU4gU0NIRU1BIiB0byBiZSBncmFudGVkLCB0aGVuCisJICogbm90aGluZyB0 byBkby4KKwkgKi8KKwlpZiAoaXN0bXQtPm9iamVjdHMgPT0gTklMKQorCQlyZXR1cm4gTlVMTDsK KworCXN3aXRjaCAoaXN0bXQtPm9ianR5cGUpCiAJewotCQljYXNlIFNDVF9TaW1wbGU6Ci0JCQl0 cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQljYXNlIE9CSkVDVF9DT0xVTU46 CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCWNsYXNz SWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJCQlicmVhazsKLQkJY2FzZSBTQ1RfQWx0ZXJUYWJs ZToKLQkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVsYXRpb24oY21kKTsKKwkJY2FzZSBPQkpFQ1Rf RE9NQUlOOgorCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJY2xhc3NJZCA9IFR5cGVSZWxhdGlvbklk OwogCQkJYnJlYWs7Ci0JCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6Ci0JCQl0cmVlID0gZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQljbGFzc0lk ID0gRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVD VF9GT1JFSUdOX1NFUlZFUjoKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VE VVJFOgorCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0 aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQljbGFzc0lkID0g TGFuZ3VhZ2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNU OgorCQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9TQ0hFTUE6CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToK KwkJCWNsYXNzSWQgPSBJbnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3Rz IG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgT0JKRUNUIHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdS QU5UIFRPIG9yIFJFVk9LRSBGUk9NICovCisJcmV0ID0gbmV3X29ianRyZWUoaXN0bXQtPmlzX2dy YW50ID8gIkdSQU5UIiA6ICJSRVZPS0UiKTsKKworCS8qIEJ1aWxkIGEgbGlzdCBvZiBwcml2aWxl Z2VzIHRvIGdyYW50L3Jldm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1w ID0gbmV3X29ianRyZWUoIkFMTCBQUklWSUxFR0VTIik7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlCisJeworCQljaGFyICpwcml2OworCQlp ZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9JTlNFUlQpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9TRUxFQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJp bmcoQUNMX1NFTEVDVCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJ eworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVBEQVRFKTsKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlp ZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9ERUxFVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9UUlVOQ0FURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0 cmluZyhBQ0xfVFJVTkNBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVO Q0VTKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9SRUZF UkVOQ0VTKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYp KTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJeworCQkJ cHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJJR0dFUik7CisJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlz dG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX0VYRUNVVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAm IEFDTF9VU0FHRSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhB Q0xfVVNBR0UpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJp dikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCXsKKwkJ CXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURSk7CisJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlz dG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9URU1QKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DUkVBVEVfVEVNUCk7CisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2 aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90 b19zdHJpbmcoQUNMX0NPTk5FQ1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9NQUlO VEFJTikKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfTUFJ TlRBSU4pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikp OworCQl9CisKKwkJaWYgKCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRf b3B0aW9uIiwKKwkJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiR1JBTlQgT1BUSU9OIEZP UiIgOiAiIik7CisKKwkJaWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0 Q2VsbCAgICpvY2VsbDsKKworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJ CXsKKwkJCQlBY2Nlc3NQcml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0CSAgICpj b2xzID0gTklMOworCisJCQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xzKQorCQkJCXsKKwkJCQkJ U3RyaW5nCSAgICpjb2xuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQkJCQlj b2xzID0gbGFwcGVuZChjb2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwo Y29sbmFtZSkpKTsKKwkJCQl9CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29sczos IH1zKSAle3ByaXZ9cyIsIDIsCisJCQkJCQkJCQkgImNvbHMiLCBPYmpUeXBlQXJyYXksIGNvbHMs CisJCQkJCQkJCQkgInByaXYiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJICBwcml2LT5wcml2 X25hbWUgPyBwcml2LT5wcml2X25hbWUgOiAiQUxMIFBSSVZJTEVHRVMiKTsKKworCQkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQor CWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b2JqdHlwZX1zIiwgIm9ianR5cGUiLAor CQkJCQkJIChjaGFyICopc3RyaW5naWZ5X29ianR5cGUoaXN0bXQtPm9ianR5cGUsIHRydWUpKTsK KworCS8qIFRhcmdldCBvYmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8K KwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJ CQlvYmppZCA9IGxmaXJzdF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlh ZGRyLmNsYXNzSWQgPSBjbGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIu b2JqZWN0U3ViSWQgPSAwOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMi LCAxLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBnZXRPYmpl Y3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3By aXZ0YXJnZXQ6LCB9cyIsIGxpc3QpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBpc3Rt dC0+aXNfZ3JhbnQgPyAiVE8iIDogIkZST00iKTsKKworCS8qIExpc3Qgb2YgZ3JhbnRlZXMgKi8K KwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lk CQkJZ3JhbnRlZSA9IGxmaXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9y X3JvbGVfaWQoZ3JhbnRlZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtncmFudGVlczos IH1zIiwgbGlzdCk7CisKKwkvKiBUaGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZh cmlhYmxlIC4uLiAqLworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkgaXN0 bXQtPmdyYW50X29wdGlvbiA/ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0 bXQtPmdyYW50b3JfdWlkKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9s ZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0 RGF0dW0oaXN0bXQtPmdyYW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0 dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBP SUQgJXUiLAorCQkJCSBpc3RtdC0+Z3JhbnRvcl91aWQpOworCisJCXJvbGVuYW1lID0gTmFtZVN0 cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsCisJCQkJCQkJ ICJyb2xlbmFtZSIsIHJvbGVuYW1lKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQor CisJaWYgKCFpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7 Y2FzY2FkZX1zIiwgImNhc2NhZGUiLAorCQkJCQkJCSBpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9D QVNDQURFID8gIkNBU0NBREUiIDogIiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYW4gQWx0ZXJPcGVyYXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4K KyAqCisgKiBHaXZlbiBhbiBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0 eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5cGV9VCkKKyAqIFNFVCAoJXtlbGVtczosIH1z KQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJQWx0ZXJP cGVyYXRvclN0bXQgKm5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUgICAgKnJldDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAq Y2VsbDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUx KE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9w ZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVy YXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg T1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExF RlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiKCV7bGVmdF90eXBlfXMiLCAibGVmdF90eXBlIiwgIk5PTkUiKTsKKworCS8q IFJJR0hUQVJHICovCisJQXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2goY2Vs bCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJ CQkJCQkJCSAiTk9ORSIpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAi am9pbiIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAx LAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpv aW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9j ZWR1cmV9cyIsICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKworCQlBc3Nl cnQodG1wX29iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlNFVCAoJXtlbGVtczos IH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1Ag Y29tbWFuZC4KKyAqCisgKiBHaXZlbiB0aGUgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGFuIE9i alRyZWUgcmVwcmVzZW50aW5nIHRoZSBBbHRlcgorICogT3BlcmF0b3IgY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBV U0lORyAle2FtbmFtZX1JIEFERC9EUk9QICV7aXRlbXM6LH1zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCUFsdGVyT3BGYW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlT dG10ICopIGNtZC0+cGFyc2V0cmVlOworCUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWls eSBvcGZGb3JtOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CS8qIERvbid0IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBl eHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJ ZnRwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERh dHVtKGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGZ0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRv ciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElk KTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJ TkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwg T2JqVHlwZVN0cmluZywgc3RtdC0+YW1uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9w ZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJ CSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlw ZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVS QVRPUiAle251bX1uIiwgMSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5u dW1iZXIpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vz bid0IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5v YmplY3QpKTsKKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9w ZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXty dHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwg LTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBu b3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYg KG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCQkgIkZPUiBTRUFS Q0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlICAgICpvcmRlcmJ5X29iajsKKworCQkJ CW9yZGVyYnlfb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQi LCAxLAorCQkJCQkJCQkJCQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCQkJb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsIG9yZGVyYnlfb2JqKTsKKwkJCX0KKwkJfQorCisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlN ZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7 cnR5cGV9VCkiLCAzLAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJl ciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkp OworCisJCS8qCisJCSAqIEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUg RFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0bXQtPmlz RHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zv cm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7 CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9i amVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo cHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2Nl ZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJv Y0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwkJCXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlhcmcgPSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBs YXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKHRtcF9vYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2Fy Z3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmos ICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlpZiAoc3Rt dC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJEUk9QIik7CisJZWxzZQor CQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3duZXJTdG10IChB TFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3Mg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVl IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQUxURVIgJXMgJXtpZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVz cywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3du ZXJTdG10ICopIHBhcnNldHJlZTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtv Ymp0eXBlfXMgJXtpZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SSIsIDMsCisJCQkJCQkg ICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9k ZS0+b2JqZWN0VHlwZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJICAi bmV3b3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRfcm9sZXNwZWNfbmFtZShub2Rl LT5uZXdvd25lcikpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisgKgor ICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtk ZWZpbml0aW9uOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJ UmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3BnX3NlcXVlbmNl IHNlcWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlBbHRlclNl cVN0bXQgKmFsdGVyU2VxU3RtdCA9IChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoK KwkgKiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2aWEg Q1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkg Ki8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJ c2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29w ZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNl YXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgICV1Iiwgb2Jq ZWN0SWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVw bGUpOworCisJZm9yZWFjaChjZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5vcHRp b25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsK KwkJT2JqRWxlbSAgICAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImNh Y2hlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVs ZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9N aW52YWx1ZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAibWF4dmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoc2Vx Zm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0Iikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzZXFmb3JtLCBmYWxzZSk7 CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNlcWRhdGEpOworCQllbHNlIGlmIChzdHJjbXAo ZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2Vx X093bmVkQnkob2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5h bWUsICJhcyIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9BcyhlbGVtKTsKKwkJZWxz ZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVm bmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9u OiB9cyIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJk ZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJv d0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBlU3Rt dC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVFlQRSAle2lkZW50aXR5fUQgKCV7ZGVm aW5pdGlvbjogfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUeXBlU2V0 U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKmNtZCkKK3sKKwlBbHRlclR5cGVTdG10ICphbHRlclR5 cGVTZXRTdG10ID0gKEFsdGVyVHlwZVN0bXQgKikgY21kOworCUxpc3RDZWxsICAgKnBsOworCUxp c3QJICAgKmVsZW1zID0gTklMOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5 cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVj dElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlm b3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAq ZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QocGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07CisK KwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJyZWNlaXZlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZl KHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU2VuZCh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVf VHlwbW9kX0luKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlwbW9k X291dCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX091dCh0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9UeXBlX0FuYWx5emUodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJzdWJzY3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1 YnNjcmlwdCh0eXBGb3JtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBv cHRpb24gJXMiLCBkZWZlbC0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBu ZXdlbG0pOworCX0KKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBTRVQgKCV7ZGVmaW5pdGlvbjogfXMp IiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSAgb2Jq ZWN0SWQpLAorCQkJCQkJICAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworfQor CisvKgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVBVEUgVFlQRSBBUykKKyAq CisgKiBHaXZlbiBhIENvbXBvc2l0ZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50 aXR5fUQgQVMgKCV7Y29sdW1uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNv bXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsK KwlIZWFwVHVwbGUJdHlwdHVwOworCUZvcm1fcGdfdHlwZSB0eXBmb3JtOworCVJlbGF0aW9uCXR5 cGVyZWw7CisJTGlzdAkgICAqZHBjb250ZXh0OworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsK KworCS8qIEZpbmQgdGhlIHBnX3R5cGUgZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcg cmVsYXRpb24gKi8KKwl0eXB0dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9i amVjdElkKTsKKwl0eXBmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cCk7CisJ dHlwZXJlbCA9IHJlbGF0aW9uX29wZW4odHlwZm9ybS0+dHlwcmVsaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHR5cGVyZWwpLAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZCh0eXBlcmVsKSk7CisK Kwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVm bGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJLyogbm90IHR5cGVkICovCisJCQkJ CQkJCQkgIHRydWUpOwkvKiBjb21wb3NpdGUgdHlwZSAqLworCisJdGFibGVfY2xvc2UodHlwZXJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJldHVy biBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTICgle2NvbHVtbnM6 LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJ CQkJCSAgImNvbHVtbnMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlQ29udmVyc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhIGNvbnZlcnNpb24g T0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVl CisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1Ig JXtzb3VyY2V9TCBUTyAle2Rlc3R9TAorICogRlJPTSAle2Z1bmN0aW9ufUQKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQljb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlG b3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwljb252cmVs ID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlj b25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29udmVy c2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBPSUQg JXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNUUlVD VChjb25UdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle2RlZmF1bHR9cyBD T05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TCBGUk9NICV7 ZnVuY3Rpb259RCIsIDUsCisJCQkJCQkgICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSAgY29uRm9ybS0+Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiLAorCQkJCQkJICAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29u Rm9ybS0+Y29ubmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihjb25Gb3JtLT5jb25u YW1lKSksCisJCQkJCQkgICJzb3VyY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAoY2hhciAq KXBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29uZm9yZW5jb2RpbmcpLAorCQkJCQkJICAi ZGVzdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIChjaGFyICopcGdfZW5jb2RpbmdfdG9fY2hh cihjb25Gb3JtLT5jb250b2VuY29kaW5nKSwKKwkJCQkJCSAgImZ1bmN0aW9uIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJICBjb25Gb3JtLT5jb25wcm9jKSk7CisKKwl0YWJsZV9jbG9z ZShjb252cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVFbnVtU3RtdCAoQ1JFQVRFIFRZUEUgQVMgRU5VTSkKKyAqCisgKiBH aXZlbiBhIEVudW0gdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIEVO VU0gKCV7dmFsdWVzOiwgfUwpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl RW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0 bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOworCUxpc3QJICAgKnZhbHVl cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZm9yZWFjaChjZWxsLCBub2RlLT52YWxz KQorCQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxm aXJzdF9ub2RlKFN0cmluZywgY2VsbCkpKSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNS RUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIDIsCisJCQkJ CQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAidmFsdWVzIiwg T2JqVHlwZUFycmF5LCB2YWx1ZXMpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUV4dGVu c2lvblN0bXQKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBFWFRF TlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cworICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVhdGVF eHRlbnNpb25TdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJSGVh cFR1cGxlCWV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUgICAg KnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19l eHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFu dW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChl eHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9u IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24p IEdFVFNUUlVDVChleHRUdXApOworCisJLyogTGlzdCBvZiBvcHRpb25zICovCisJZm9yZWFjaChj ZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0g MCkKKwkJeworCQkJLyogU2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkg YmVsb3cgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5h bWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJW RVJTSU9OICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJp bmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9 PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIs CisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJz aW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhF UlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyog QWRkIHRoZSBTQ0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAl e3NjaGVtYX1JIiwgMiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAor CQkJCQkJICJzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFt ZShleHRGb3JtLT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBFWFRFTlNJT04gJXtpZl9u b3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cyIsIDMsCisJCQkJCQkgICJpZl9ub3Rf ZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJ RiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PmV4dG5hbWUsCisJCQkJCQkgICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKK30KKwor LyoKKyAqIElmIGEgY29sdW1uIG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3Ig aXQ7IG90aGVyd2lzZSBpdCdzIGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5h bWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJaWYgKGNvbG5hbWUpCisJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDEsCisJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBjb2xuYW1lKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlKCJP UFRJT05TIik7CisKKwlpZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQg PSBOSUw7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQor CQl7CisJCQlEZWZFbGVtICAgICplbGVtOworCQkJT2JqVHJlZSAgICAqb3B0OworCisJCQllbGVt ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlv bikKKwkJCXsKKwkJCQljYXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJl ZV9WQSgiJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5 cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJ CQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBERUZFTEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAl e2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmlu ZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVm R2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQlj YXNlIERFRkVMRU1fQUREOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9 SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVt LT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29s ZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVG RUxFTV9EUk9QOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAx LAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJ CQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFj dGlvbiAlZCIsIGVsZW0tPmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJ CW9wdG91dCA9IGxhcHBlbmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQor CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsK Kwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04gREFUQSBX UkFQUEVSKQorICoKKyAqIEdpdmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEZPUkVJR04gREFU QSBXUkFQUEVSICV7aWRlbnRpdHl9SSAle2hhbmRsZXJ9cyAle3ZhbGlkYXRvcn1zICV7Z2VuZXJp Y19vcHRpb25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGZHdTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQgKm5vZGUg PSAoQ3JlYXRlRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsKKwlGb3Jt X3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVp Z25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0g U2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIg d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3Jl aWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7 CisKKwkvKiBBZGQgSEFORExFUiBjbGF1c2UgKi8KKwlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ ZmR3aGFuZGxlcikpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBIQU5ETEVSIik7CisJZWxzZQor CXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJ CQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZkd0Zv cm0tPmZkd2hhbmRsZXIpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtoYW5k bGVyfXMiLCB0bXApOworCisJLyogQWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoIU9pZElz VmFsaWQoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSkKKwkJdG1wID0gbmV3X29ianRyZWUoIk5PIFZB TElEQVRPUiIpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1Ig JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCX0KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKworCS8qIEFkZCBhbiBPUFRJ T05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5l cmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMs IE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwg Um93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBh biBBbHRlckZkd1N0bXQgKEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVu IGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JICV7 ZmR3X29wdGlvbnM6IH1zICV7Z2VuZXJpY19vcHRpb25zfUQKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlckZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQWx0ZXJGZHdTdG10ICpub2RlID0gKEFsdGVyRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVh cFR1cGxlCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJ UmVsYXRpb24JcmVsOworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpmZHdfb3B0aW9ucyA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0 YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJj aFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9k YXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkv KgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBvcHRpb25zLCB0byBzZWUgd2hhdCBjaGFuZ2VkLCBidXQg dXNlIGNhdGFsb2cgYXMgYQorCSAqIGJhc2lzIGZvciBuZXcgdmFsdWVzLgorCSAqLworCWZvcmVh Y2goY2VsbCwgbm9kZS0+ZnVuY19vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJ T2JqVHJlZSAgICAqdG1wOworCisJCWVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHBnX3N0 cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgImhhbmRsZXIiKSA9PSAwKQorCQl7CisJCQkvKiBhZGQg SEFORExFUiBjbGF1c2UgKi8KKwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHdoYW5kbGVy KSkKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gSEFORExFUiIpOworCQkJZWxzZQorCQkJewor CQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJ CQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5k bGVyKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ ZGVmbmFtZSwgInZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBWQUxJREFUT1IgY2xh dXNlICovCisJCQlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSkKKwkJCQl0 bXAgPSBuZXdfb2JqdHJlZSgiTk8gVkFMSURBVE9SIik7CisJCQllbHNlCisJCQl7CisJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkJ CSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9y KSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCQl9CisJfQorCisJLyogQWRkIEhBTkRMRVIvVkFMSURBVE9SIGlm IHNwZWNpZmllZCAqLworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtmZHdfb3B0aW9uczog fXMiLCBmZHdfb3B0aW9ucyk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAq LworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAorCQkJ CQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNl U3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5H RSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBU WVBFICV7aWRlbnRpdHl9RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0g TklMOworCVJlbGF0aW9uCXBnX3JhbmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3Bn X3JhbmdlIHJhbmdlRm9ybTsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2Nh bjsKKworCXBnX3JhbmdlID0gdGFibGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5 cGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jhbmdl LCBSYW5nZVR5cGlkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwly YW5nZVR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHJhbmdlVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdl IHdpdGggdHlwZSBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3Jt X3BnX3JhbmdlKSBHRVRTVFJVQ1QocmFuZ2VUdXApOworCisJLyogU1VCVFlQRSAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLCAyLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgcmFu Z2VGb3JtLT5ybmdzdWJ0eXBlKSk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlpZiAo T2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNsYXNz UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3Vib3BjKSk7CisJCWRl ZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CX0KKworCS8qIENPTExBVElPTiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29s bGF0aW9uKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxh dGlvbn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRpb24i LAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBy YW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0 aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8KKwlp ZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0gJXtjYW5vbmljYWx9RCIsIDIsCisJCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpKTsK KwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJLyogU1VCVFlQRV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3Jt LT5ybmdzdWJkaWZmKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYg PSAle3N1YnR5cGVfZGlmZn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJzdWJ0eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKTsKKwkJZGVmaW5pdGlvbiA9 IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9 RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVS ZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5 LCBkZWZpbml0aW9uKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAq CisgKiBHaXZlbiBhbiBlbnVtIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIEFERCBWQUxVRSAl e2lmX25vdF9leGlzdHN9cyAle3ZhbHVlfUwKKyAqICV7YWZ0ZXJfb3JfYmVmb3JlfXMgJXtuZWln aGJvcn1MCisgKiAJT1IKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBWQUxVRSAl e3ZhbHVlfUwgVE8gJXtuZXd2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckVu dW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCIs IDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJl dCwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lmX25vdF9l eGlzdHN9cyIsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCQkgbm9kZS0+c2tpcElmTmV3VmFsRXhp c3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl dCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5vZGUtPm5l d1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2FmdGVy X29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJICJhZnRlcl9vcl9iZWZvcmUiLAorCQkJCQkJCQkgbm9k ZS0+bmV3VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICIle25laWdoYm9yfUwiLCAibmVpZ2hib3IiLAorCQkJCQkJCQkgbm9kZS0+ bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIlJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8iLCAidmFsdWUiLAorCQkJCQkJCSBu b2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25ld3ZhbHVlfUwi LCAibmV3dmFsdWUiLCBub2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhURU5TSU9OIC4uIFVQ REFURSBUTyBWRVJTSU9OKQorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIGEgcGFy c2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBFWFRF TlNJT04gJXtpZGVudGl0eX1JIFVQREFURSAle29wdGlvbnM6IH1zCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUFsdGVyRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvblN0 bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJZXh0 VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCUxp c3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlEZWZFbGVtICAgICpkX25l d192ZXJzaW9uID0gTlVMTDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9u UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK KwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCWZv cmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZF bGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192 ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJT2JqVHJlZSAgICAqdG1wOworCisJCQlpZiAoZF9uZXdf dmVyc2lvbikKKwkJCQllbG9nKEVSUk9SLCAiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlv bnMgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJCQkJCSBvYmplY3RJZCk7CisKKwkJCWRf bmV3X3ZlcnNpb24gPSBvcHQ7CisKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAle3ZlcnNp b259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJ CQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxz ZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7 CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5 fUkgVVBEQVRFICV7b3B0aW9uczogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFtZSksCisJCQkJCQkgIm9wdGlvbnMiLCBPYmpU eXBlQXJyYXksIGxpc3QpOworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFeHRl bnNpb25Db250ZW50c1N0bXQgKEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0KQor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVudGl0eX1J IEFERC9EUk9QICV7b2JqaWRlbnRpdHl9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl LAorCQkJCQkJCQkgICBPYmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7CisJQWx0ZXJFeHRl bnNpb25Db250ZW50c1N0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKikg cGFyc2V0cmVlOworCisJQXNzZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5hY3Rpb24g PT0gLTEpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtleHRp ZGVudGl0eX1JICV7ZXh0b3B0aW9ufXMgJXtleHRvYmp0eXBlfXMgJXtvYmppZGVudGl0eX1zIiwg NCwKKwkJCQkJCSAgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0bmFtZSwK KwkJCQkJCSAgImV4dG9wdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmFjdGlv biA9PSArMSA/ICJBREQiIDogIkRST1AiLAorCQkJCQkJICAiZXh0b2JqdHlwZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSwK KwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0 SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNlKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNl IHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zICV7 Y29udGV4dH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQgKm5vZGUg PSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7CisJSGVh cFR1cGxlCWNhc3RUdXA7CisJRm9ybV9wZ19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUgICAgKnJl dDsKKwljaGFyCSAgICpjb250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9i eV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9wZ19j YXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsIDIsCisJCQkJCQkgInNv dXJjZXR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGNh c3RGb3JtLT5jYXN0c291cmNlLCAtMSksCisJCQkJCQkgInRhcmdldHR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0LCAt MSkpOworCisJaWYgKG5vZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e21lY2hhbmlzbX1zIiwgIm1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIIElOT1VUIik7CisJZWxz ZSBpZiAobm9kZS0+ZnVuYyA9PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e21lY2hhbmlzbX1zIiwgIm1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIT1VUIEZVTkNUSU9OIik7 CisJZWxzZQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVu YzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50 CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5j YXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXAp OworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywg IiVzKCIsCisJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9u YW1lKGZ1bmNGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIoZnVuY0Zv cm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJaWYgKGkgIT0gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywg JywnKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9y bWF0X3R5cGVfYmVfcXVhbGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsK KwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJ CQkJCSJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwgdG1wX29iaik7CisKKwkJUmVsZWFz ZVN5c0NhY2hlKGZ1bmNUdXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7CisJ CWNhc2UgQ09FUkNJT05fSU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsKKwkJ CWJyZWFrOworCQljYXNlIENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFTIEFT U0lHTk1FTlQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQljb250 ZXh0ID0gIiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlk IGNvZXJjaW9uIGNvZGUgJWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkJLyog a2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e2NvbnRleHR9cyIsICJjb250ZXh0IiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0cmVs LCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQUxURVIgREVGQVVMVCBQUklWSUxFR0VTICV7aW5fc2NoZW1hfXMgJXtmb3Jfcm9s ZXN9cyAle2dyYW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlZmF1 bHRQcml2aWxlZ2VzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAq cmV0OworCUFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICpzdG10ID0gKEFsdGVyRGVmYXVsdFBy aXZpbGVnZXNTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCUxpc3QJICAgKnJvbGVzID0gTklMOwor CUxpc3QJICAgKnNjaGVtYXMgPSBOSUw7CisJTGlzdAkgICAqZ3JhbnRlZXM7CisJTGlzdAkgICAq cHJpdnM7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAg ICAqZ3JhbnQ7CisJY2hhcgkgICAqb2JqdHlwZTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJBTFRF UiBERUZBVUxUIFBSSVZJTEVHRVMiKTsKKworCS8qIFNjYW4gdGhlIHBhcnNlIG5vZGUgdG8gZGln IG91dCB0aGUgRk9SIFJPTEUgYW5kIElOIFNDSEVNQSBjbGF1c2VzICovCisJZm9yZWFjaChjZWxs LCBzdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZp cnN0KGNlbGwpOworCQlMaXN0Q2VsbCAgICpjZWxsMjsKKworCQlBc3NlcnQoSXNBKG9wdCwgRGVm RWxlbSkpOworCQlBc3NlcnQoSXNBKG9wdC0+YXJnLCBMaXN0KSk7CisJCWlmIChzdHJjbXAob3B0 LT5kZWZuYW1lLCAicm9sZXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAq KSBvcHQtPmFyZykKKwkJCXsKKwkJCQlSb2xlU3BlYyAgICpyb2xlc3BlYyA9IGxmaXJzdChjZWxs Mik7CisJCQkJT2JqVHJlZSAgICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHJvbGVz cGVjKTsKKworCQkJCXJvbGVzID0gbGFwcGVuZChyb2xlcywgbmV3X29iamVjdF9vYmplY3Qob2Jq KSk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYXMi KSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJCXsK KwkJCQlTdHJpbmcJICAgKnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbDIpOworCisJCQkJ c2NoZW1hcyA9IGxhcHBlbmQoc2NoZW1hcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKHZhbCkp KTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEFkZCB0aGUgSU4gU0NIRU1BIGNsYXVzZSwgaWYgYW55 ICovCisJdG1wID0gbmV3X29ianRyZWUoIklOIFNDSEVNQSIpOworCWFwcGVuZF9hcnJheV9vYmpl Y3QodG1wLCAiJXtzY2hlbWFzOiwgfUkiLCBzY2hlbWFzKTsKKwlpZiAoc2NoZW1hcyA9PSBOSUwp CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7aW5fc2NoZW1hfXMiLCB0bXApOworCisJLyogQWRkIHRoZSBGT1IgUk9MRSBjbGF1c2UsIGlm IGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJGT1IgUk9MRSIpOworCWFwcGVuZF9hcnJheV9v YmplY3QodG1wLCAiJXtyb2xlczosIH1SIiwgcm9sZXMpOworCWlmIChyb2xlcyA9PSBOSUwpCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 Zm9yX3JvbGVzfXMiLCB0bXApOworCisJLyoKKwkgKiBBZGQgdGhlIEdSQU5UIHN1YmNvbW1hbmQK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFy Z2V0fXMgVE8gJXtncmFudGVlczosIH1SICV7Z3JhbnRfb3B0aW9ufXMKKwkgKiBvcgorCSAqIFJF Vk9LRSAle2dyYW50X29wdGlvbn1zICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0fXMgRlJP TSAle2dyYW50ZWVzOiwgfVIKKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkKKwkJ Z3JhbnQgPSBuZXdfb2JqdHJlZSgiR1JBTlQiKTsKKwllbHNlCisJeworCQlncmFudCA9IG5ld19v Ymp0cmVlKCJSRVZPS0UiKTsKKworCQkvKiBBZGQgdGhlIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9y IFJFVk9LRSBzdWJjb21tYW5kICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHUkFOVCBPUFRJ T04gRk9SIiwgMSwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3Rt dC0+YWN0aW9uLT5ncmFudF9vcHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFudCwg IiV7Z3JhbnRfb3B0aW9ufXMiLCB0bXApOworCX0KKworCS8qCisJICogQWRkIHRoZSBwcml2aWxl Z2VzIGxpc3QuICBUaGlzIHVzZXMgdGhlIHBhcnNlciBzdHJ1Y3QsIGFzIG9wcG9zZWQgdG8KKwkg KiB0aGUgSW50ZXJuYWxHcmFudCBmb3JtYXQgdXNlZCBieSBHUkFOVC4gIFRoZXJlIGFyZSBlbm91 Z2ggb3RoZXIKKwkgKiBkaWZmZXJlbmNlcyB0aGF0IHRoaXMgZG9lc24ndCBzZWVtIHdvcnRoIGlt cHJvdmluZy4KKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzID09IE5JTCkKKwkJ cHJpdnMgPSBsaXN0X21ha2UxKG5ld19zdHJpbmdfb2JqZWN0KCJBTEwgUFJJVklMRUdFUyIpKTsK KwllbHNlCisJeworCQlwcml2cyA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIHN0bXQtPmFjdGlv bi0+cHJpdmlsZWdlcykKKwkJeworCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChjZWxsKTsK KworCQkJQXNzZXJ0KHByaXYtPmNvbHMgPT0gTklMKTsKKwkJCXByaXZzID0gbGFwcGVuZChwcml2 cywgbmV3X3N0cmluZ19vYmplY3QocHJpdi0+cHJpdl9uYW1lKSk7CisJCX0KKwl9CisKKwlhcHBl bmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiJXtwcml2aWxlZ2VzOiwgfXMiLCBwcml2cyk7CisKKwlz d2l0Y2ggKGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6 CisJCQlvYmp0eXBlID0gIlRBQkxFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJ T046CisJCQlvYmp0eXBlID0gIkZVTkNUSU9OUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf Uk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX1NFUVVFTkNFOgorCQkJb2JqdHlwZSA9ICJTRVFVRU5DRVMiOworCQkJYnJlYWs7CisJCWNh c2UgT0JKRUNUX1RZUEU6CisJCQlvYmp0eXBlID0gIlRZUEVTIjsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQVMiOworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQgZm9yIGRlZmF1 bHQgcHJpdmlsZWdlcyIsIGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKTsKKwl9CisKKwkvKiBBZGQg dGhlIHRhcmdldCBvYmplY3QgdHlwZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50LCAi T04gJXt0YXJnZXR9cyIsICJ0YXJnZXQiLCBvYmp0eXBlKTsKKworCS8qIEFkZCB0aGUgZ3JhbnRl ZSBsaXN0ICovCisJZ3JhbnRlZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24t PmdyYW50ZWVzKQorCXsKKwkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3Qo Y2VsbCk7CisJCU9ialRyZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhzcGVj KTsKKworCQlncmFudGVlcyA9IGxhcHBlbmQoZ3JhbnRlZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9i aikpOworCX0KKworCWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJYXBwZW5kX2Fy cmF5X29iamVjdChncmFudCwgIlRPICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCQkv KiBBZGQgdGhlIFdJVEggR1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgR1JBTlQgc3ViY29tbWFuZCAq LworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBHUkFOVCBPUFRJT04iLCAxLAorCQkJCQkJ CSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdyYW50X29w dGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRpb259cyIs IHRtcCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwgIkZST00gJXtn cmFudGVlczosIH1SIiwgZ3JhbnRlZXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtncmFudH1zIiwgZ3JhbnQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIENSRUFURSBET01BSU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBh cnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVB VEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJh aW50c31zCisgKiAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlRG9tYWluKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUg ICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9y bV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisJY2hhcgkgICAqZGVm dmFsOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0g KEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zIiwg MywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICJ0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50 eXBiYXNldHlwZSwKKwkJCQkJCQkJCQkJICB0eXBGb3JtLT50eXB0eXBtb2QpLAorCQkJCQkJICJu b3RfbnVsbCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgdHlwRm9ybS0+dHlwbm90bnVsbCA/ICJO T1QgTlVMTCIgOiAiIik7CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwg SW52YWxpZE9pZCwgb2JqZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJeworCQl0 bXBfb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7 CisJfQorCWVsc2UKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRzOiwgfXMi LCAxLAorCQkJCQkJCQkiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRzKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbnN0cmFpbnRzfXMiLCB0bXBfb2JqKTsKKwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQljb2xs bmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkgICB0eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29s bGF0aW9ufXMiLCB0bXBfb2JqKTsKKworCWRlZnZhbCA9IERvbWFpbkdldERlZmF1bHQodHlwVHVw LCB0cnVlKTsKKwlpZiAoZGVmdmFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJERUZB VUxUICV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBkZWZ2YWwpOworCisJUmVsZWFzZVN5c0NhY2hl KHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1 bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqCisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWduYXR1cmV9cyBS RVRVUk5TICV7cmV0dXJuX3R5cGV9cworICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7 bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1zCisgKiAle3BhcmFsbGVsX3NhZmV0 eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmluZXJ9cworICogJXtj b3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMgQVMgJXtvYmpmaWxl fUwsCisgKiAle3N5bWJvbH1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl RnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rp b25TdG10ICpub2RlID0gKENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJRGF0dW0JCXRtcGRhdHVtOworCWNo YXIJICAgKnNvdXJjZTsKKwljaGFyCSAgICpwcm9iaW4gPSBOVUxMOworCUxpc3QJICAgKnBhcmFt czsKKwlMaXN0CSAgICpkZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAg KnR5cGVzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOwor CUxpc3RDZWxsICAgKnRhYmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJ Rm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5 cGFycmF5OworCU9pZAkJICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07 CisJaW50CQkJaTsKKwlpbnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWludAkJCXBhcmFt Y291bnQgPSBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsKKwlib29sCQlpc251bGw7CisJ Ym9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9y bV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRp bmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdP SUQsIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRoIE9J RCAldSIsCisJCQkgcHJvY0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFu Z3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2 YWx1ZXMgZm9yIHByb3NyYyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJl aW5nIGVpdGhlciBOVUxMIG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1 ZS4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAor CQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJ CWVsb2coRVJST1IsICJudWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVj dElkKTsKKwlzb3VyY2UgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERl dGVybWluZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmlu LCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXByb2JpbiA9IFRleHREYXR1bUdldENT dHJpbmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21wKHByb2Jp biwgIi0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zIiwgMSwKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsK KworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhl IHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHBy b25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QKKwkgKiBsZW5ndGgsIHRoZXJlIGFyZSBu byBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZQorCSAqIE9J RCBmcm9tIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJn dHlwZXMsIHdoaWNoCisJICogaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJh eSA9IHBhbGxvYyhwYXJhbWNvdW50ICogc2l6ZW9mKE9pZCkpOworCWlmIChwYXJhbWNvdW50ID4g cHJvY0Zvcm0tPnByb25hcmdzKQorCXsKKwkJRGF0dW0JCWFsbHR5cGVzOworCQlEYXR1bQkgICAq dmFsdWVzOworCQlib29sCSAgICpudWxsczsKKwkJaW50CQkJbmVsZW1zOworCisJCWFsbHR5cGVz ID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAgIEFudW1fcGdf cHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVS Uk9SLCAibnVsbCBwcm9hbGxhcmd0eXBlcywgbW9yZSBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGFu IGFyZ3MgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSBvYmplY3RJZCk7CisJCWRlY29u c3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9J RCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlm IChuZWxlbXMgIT0gcGFyYW1jb3VudCkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2Fs bGFyZ2F0eXBlcyIpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsgaSsrKQorCQkJdHlw YXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBw YXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRlZmF1bHQgZXhwcmVz c2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Npb24KKwkgKiBhcyBhIGxpc3Qgc28g dGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4KKwkgKi8KKwl0bXBkYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdf cHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlkZWZh dWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0bXBkYXR1bSkpOworCQlj dXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJeworCQlkZWZhdWx0cyA9 IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5vdyBpdGVyYXRlIG92ZXIg ZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNlIHRyZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFt ZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7CisJZm9yZWFj aChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFt ID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqcGFy YW1fb2JqOworCQlPYmpUcmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlICAgICpuYW1lOwor CisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgZW5kIG9m IGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBwYXJ0 IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUsIGJ1dCBrZWVw IHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRoYXQgd2UKKwkJ ICogY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJICovCisJCWlm IChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJsZV9wYXJhbXMg PSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheCBmb3Ig cGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAle2RlZmF1bHR9cwor CQkgKi8KKwkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7bW9kZX1zIiwgMSwKKwkJCQkJ CQkJICAibW9kZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVO Q19QQVJBTV9PVVQgPyAiT1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJB TV9JTk9VVCA/ICJJTk9VVCIgOgorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1f VkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkJICAiSU4iKTsKKworCQkvKiBPcHRpb25h bCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisJCW5hbWUg PSBuZXdfb2JqdHJlZSgiIik7CisJCWlmIChwYXJhbS0+bmFtZSkKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KG5hbWUsICIle25hbWV9SSIsICJuYW1lIiwgcGFyYW0tPm5hbWUpOworCQllbHNlCisJ CXsKKwkJCWFwcGVuZF9udWxsX29iamVjdChuYW1lLCAiJXtuYW1lfUkiKTsKKwkJCWFwcGVuZF9u b3RfcHJlc2VudChuYW1lKTsKKwkJfQorCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29i aiwgIiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVlKCJERUZB VUxUIik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsKKwkJCWNo YXIJICAgKmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAi cHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBsZmlyc3QoY3VyZGVm KTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9cyIsICJ2 YWx1ZSIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1cmRlZik7CisJCX0K KwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KGRlZmF1bHR2YWwpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHBhcmFtX29iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0g bGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCX0KKworCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCQkiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQlvYmplY3RJZCkpOworCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9v YmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBfb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9L SU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCWVsc2UKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBfb2Jq KTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3Jtczog ZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsCisJICogb3IgYSBUQUJMRShsaXN0LW9mLXR5cGVz KS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdworCSAqIGEgdGFi bGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJ aWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCIiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7c2V0b2Z9cyIsICJzZXRvZiIsCisJ CQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBfb2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlz dAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKworCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkJInJldHVybl9mb3JtIiwg T2JqVHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsg dGFibGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1zKSkKKwkJ eworCQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFtcyk7CisK KwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle3R5cGV9VCIsIDIsCisJ CQkJCQkJCQkgICJuYW1lIiwgT2JqVHlwZVN0cmluZywgcGFyYW0tPm5hbWUsCisJCQkJCQkJCQkg ICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3R5cGUo dHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVz LCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9v YmplY3QodG1wX29iaiwgIigle3JldHR5cGVzOiwgfXMpIiwgcmV0dHlwZXMpOworCX0KKworCWlm IChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJSRVRVUk5TICV7cmV0 dXJuX3R5cGV9cyIsIHRtcF9vYmopOworCisJLyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3Ry ZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsr KQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEs CisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9y X3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wX29i aik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIl e2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RyYW5zZm9ybV90eXBlfXMi LCB0bXBfb2JqKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkxBTkdVQUdFICV7bGFu Z3VhZ2V9SSIsICJsYW5ndWFnZSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkp OworCisJaWYgKGlzZnVuY3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e3dpbmRvd31zIiwgIndpbmRvdyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJ TkRfV0lORE9XID8gIldJTkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiV7dm9sYXRpbGl0eX1zIiwgInZvbGF0aWxpdHkiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9s YXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJ CQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJ CQkJICJTVEFCTEUiIDogIklNTVVUQUJMRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl dCwgIiV7cGFyYWxsZWxfc2FmZXR5fXMiLAorCQkJCQkJCSAicGFyYWxsZWxfc2FmZXR5IiwKKwkJ CQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJ CSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJP UEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQ QVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2xlYWtw cm9vZn1zIiwgImxlYWtwcm9vZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAi TEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzdHJpY3R9 cyIsICJzdHJpY3QiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAi UkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElO UFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzZWN1cml0eV9kZWZpbmVy fXMiLAorCQkJCQkJCSAic2VjdXJpdHlfZGVmaW5lciIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9z ZWNkZWYgPworCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIp OworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5 cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBfb2JqID0g bmV3X29ianRyZWUoIlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9vYmpl Y3QodG1wX29iaiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle3Jvd3N9cyIsIHRtcF9vYmopOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3N1cHBvcnQp CisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzW10gPSB7IElOVEVSTkFMT0lEIH07CisKKwkJCS8qCisJ CQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQg d291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFy Y2ggcGF0aC4KKwkJCSAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7bmFt ZX1zIiwgIm5hbWUiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+ cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJ CQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJ ZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7c3VwcG9ydH1zIiwgdG1wX29iaik7CisJfQorCisJZm9yZWFjaChjZWxs LCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBs Zmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDAp CisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRl ZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0 bXQpOworCisJCQl0bXBfb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0 bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7c2V0 X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24g Ki8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJv Y19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFu Z3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRT dHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXAp OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7ZGVmaW5pdGlvbn1zIiwgImRlZmlu aXRpb24iLAorCQkJCQkJCSBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYgKHByb2JpbiA9PSBOVUxM KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle2RlZmluaXRpb259TCIsICJkZWZp bml0aW9uIiwgc291cmNlKTsKKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICJBUyAle29iamZpbGV9TCIsICJvYmpmaWxlIiwgcHJvYmluKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiLCAle3N5bWJvbH1MIiwgInN5bWJvbCIsIHNvdXJjZSk7CisJfQorCisJUmVs ZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAl e2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKyAqICV7YW1u YW1lfUkgJXtvcGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlP aWQJCQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mub2JqZWN0SWQ7CisJSGVhcFR1 cGxlCW9wY1R1cDsKKwlIZWFwVHVwbGUJb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9y bTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkv KiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0 ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCW9w Y1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bjb2lkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlvcGNGb3Jt ID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1pbHkpOwor CW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2Rl ZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORyAle2FtbmFtZX1JIiwgNCwKKwkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BjRm9ybS0+ b3BjbmFtZSkpLAorCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBvcGNG b3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2ludHlwZSwg LTEpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfYW1fbmFtZShvcGNGb3Jt LT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlLCBidXQgaWYg aXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0 aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5IGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYSBmYWls dXJlCisJICogaWYgdGhlIG9wZmFtaWx5IHdhcyBjcmVhdGVkIGludGVybmFsbHkuCisJICovCisJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJ CQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJIE5hbWVTdHIob3BmRm9y bS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwg TmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3Bh Y2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29wZmFtaWx5fXMiLCB0bXBfb2Jq KTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlz IGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGlu IHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1RP UkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkSXNWYWxpZChvcGNGb3JtLT5vcGNrZXl0eXBlKSA/ CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwK KwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFj aChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVy ICpvcGVyID0gbGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BF UkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgNCwKKwkJ CQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJCSJvcGVy YXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQlvcGVyLT5vYmplY3QpLAorCQkJ CQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlw ZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJ LyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlpZiAob3Bl ci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w X29iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkgIkZPUiBTRUFSQ0giKTsK KwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKworCQkJdG1wX29iajIgPSBu ZXdfb2JqdHJlZSgiRk9SIE9SREVSIEJZICV7b3BmYW1pbHl9RCIpOworCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9w ZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3B1 cnBvc2V9cyIsIHRtcF9vYmoyKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBv cnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVy ZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVhcFR1 cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJn dHlwZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1 cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVj dCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkgcHJv Yy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1 cCk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0 eXBlfVQsICV7cnR5cGV9VCkgJXtmdW5jdGlvbn1EIiwgNCwKKwkJCQkJCQkJIm51bSIsIE9ialR5 cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJ CQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBl KHByb2MtPnJpZ2h0dHlwZSwgLTEpLAorCQkJCQkJCQkiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJv YXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkgPSAwOyBp IDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKmFyZzsKKwor CQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFy Z2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisK KwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwkJYXBwZW5kX2FycmF5X29i amVjdCh0bXBfb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOwor CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9 CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOwor CisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZU9wRmFtaWx5U3RtdCAo Q1JFQVRFIE9QRVJBVE9SIEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIG9wZXJhdG9yIGZhbWlseSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5h bWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcGZUdXA7CisJSGVhcFR1 cGxlCWFtVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2FtCWFtRm9y bTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1J TFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdf b3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEo QU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7 CisJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXth bW5hbWV9SSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwgT2JqVHlw ZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFt VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9yIEFsdGVyUG9saWN5IGRl cGFyc2Ugb2JqZWN0cy4KKyAqLworc3RhdGljIHZvaWQKK2FkZF9wb2xpY3lfY2xhdXNlcyhPYmpU cmVlICpyZXQsIE9pZCBwb2xpY3lPaWQsIExpc3QgKnJvbGVzLCBib29sIGRvX3F1YWwsCisJCQkJ ICAgYm9vbCBkb193aXRoX2NoZWNrKQoreworCVJlbGF0aW9uCXBvbFJlbCA9IHRhYmxlX29wZW4o UG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlIZWFwVHVwbGUJcG9sVHVwID0g Z2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwb2xSZWwsIEFudW1fcGdfcG9saWN5X29pZCwgcG9s aWN5T2lkKTsKKwlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHBvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xp Y3kgd2l0aCBPSUQgJXUiLCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGlj eSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBBZGQgdGhlICJPTiB0YWJsZSIgY2xhdXNlICov CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CSBwb2xGb3JtLT5wb2xyZWxpZCkpOworCisJLyoKKwkgKiBBZGQgdGhlICJUTyByb2xlIiBjbGF1 c2UsIGlmIGFueS4gIEluIHRoZSBDUkVBVEUgY2FzZSwgaXQgYWx3YXlzCisJICogY29udGFpbnMg YXQgbGVhc3QgUFVCTElDLCBidXQgaW4gdGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQgYmUgZW1wdHku CisJICovCisJaWYgKHJvbGVzKQorCXsKKwkJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwkJTGlzdENl bGwgICAqY2VsbDsKKworCQlmb3JlYWNoKGNlbGwsIHJvbGVzKQorCQl7CisJCQlSb2xlU3BlYyAg ICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KG5ld19vYmp0cmVlX2Zvcl9yb2xlc3Bl YyhzcGVjKSkpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiVE8gJXtyb2xlOiwg fVIiLCBsaXN0KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCS8q IEFkZCB0aGUgVVNJTkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVhbCkKKwl7CisJCURh dHVtCQlkZXBhcnNlZDsKKwkJRGF0dW0JCXN0b3JlZGV4cHI7CisJCWJvb2wJCWlzbnVsbDsKKwor CQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9scXVh bCwKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAo aXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgcG9scXVhbCBleHByZXNzaW9uIGluIHBvbGlj eSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19n ZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICJVU0lORyAoJXtleHByZXNzaW9ufXMpIiwgImV4cHJlc3Npb24iLAorCQkJ CQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHJldCk7CisKKwkvKiBBZGQgdGhlIFdJVEggQ0hFQ0sgY2xhdXNlLCBpZiBh bnkgKi8KKwlpZiAoZG9fd2l0aF9jaGVjaykKKwl7CisJCURhdHVtCQlkZXBhcnNlZDsKKwkJRGF0 dW0JCXN0b3JlZGV4cHI7CisJCWJvb2wJCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0gaGVhcF9n ZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCQkgIFJl bGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9n KEVSUk9SLCAibnVsbCBwb2x3aXRoY2hlY2sgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xp Y3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0 b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiV0lUSCBDSEVDSyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgImV4cHJlc3Npb24iLCBU ZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHJldCk7CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUG9saWN5U3RtdCAoQ1JFQVRFIFBPTElDWSkK KyAqCisgKiBHaXZlbiBhIHBvbGljeSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFBPTElDWSAle2lkZW50aXR5 fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAo Q3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBB ZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwgb2Jq ZWN0SWQsIG5vZGUtPnJvbGVzLCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUtPndp dGhfY2hlY2sgIT0gTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBh IEFsdGVyUG9saWN5U3RtdCAoQUxURVIgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9saWN5IE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgb2YgdGhlIEFMVEVSIFBPTElDWSBjb21tYW5kLCByZXR1cm4K KyAqIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUFsdGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0bXQgKikg cGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0 dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCBu b2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVMTCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQuCisg KgorICogR2l2ZW4gYSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhp c3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKyovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqYXV0aDsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIiwgMiwK KwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZf bm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSBub2RlLT5zY2hlbWFuYW1lID8gbm9kZS0+c2NoZW1hbmFtZSA6ICIi KTsKKworCWF1dGggPSBuZXdfb2JqdHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5h dXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9y b2xlfUkiLAorCQkJCQkJCSAiYXV0aG9yaXphdGlvbl9yb2xlIiwKKwkJCQkJCQkgZ2V0X3JvbGVz cGVjX25hbWUobm9kZS0+YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmpl Y3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50 KGF1dGgpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2F1dGhvcml6YXRpb259 cyIsIGF1dGgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVs dCB2YWx1ZSBvZiBhIGRvbWFpbi4KKyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVmYXVs dChIZWFwVHVwbGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spCit7CisJRGF0dW0JCWRlZjsKKwlO b2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCWJvb2wJCWlzbnVsbDsKKworCWRl ZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1fcGdfdHlwZV90eXBkZWZh dWx0YmluLAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCXsKKwkJaWYgKCFtaXNz aW5nX29rKQorCQkJZWxvZyhFUlJPUiwgImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2ZSBhIGRl ZmF1bHQgdmFsdWUiLAorCQkJCU5hbWVTdHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21U dXApKS0+dHlwbmFtZSkpOworCQllbHNlCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZWZ2YWwg PSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBkZXBh cnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8gLAorCQkJCQkJCQlm YWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBB bHRlckRvbWFpblN0bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIERPTUFJTiAl e2lkZW50aXR5fUQgRFJPUCBERUZBVUxUCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRp dHl9RCBTRVQgREVGQVVMVCAle2RlZmF1bHR9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgRFJPUCBOT1QgTlVMTAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5 fUQgU0VUIE5PVCBOVUxMCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBBREQg Q09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zCisgKiBPUgorICog QUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTICV7Y29u c3RyYWludF9uYW1lfXMgJXtjYXNjYWRlfXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVu dGl0eX1EIFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cworICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSwKKwkJCQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJQWx0 ZXJEb21haW5TdG10ICpub2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVh cFR1cGxlCWRvbVR1cDsKKwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7 CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAoRm9y bV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlwZSkK Kwl7CisJCWNhc2UgJ1QnOgorCQkJLyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8KKwkJ CWlmIChub2RlLT5kZWYgPT0gTlVMTCkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg RE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUp KSk7CisJCQllbHNlCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgU0VUIERFRkFVTFQgJXtkZWZhdWx0fXMiLCAzLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50 eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkp LAorCQkJCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBEb21haW5H ZXREZWZhdWx0KGRvbVR1cCwgZmFsc2UpKTsKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJCS8q IERST1AgTk9UIE5VTEwgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5 cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkp KTsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLworCQkJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxM IiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJ CQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1l U3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKgor CQkJICogQUREIENPTlNUUkFJTlQuICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0 ZWQgYnkKKwkJCSAqIGRvbWFpbnMKKwkJCSAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIERPTUFJTiAle2lkZW50aXR5fUQgQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9 cyAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJh ZGQgY29uc3RyYWludCIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJICJjb25z dHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFpbnRfbmFt ZShjb25zdHJhaW50QWRkci5vYmplY3RJZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShj b25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyog VkFMSURBVEUgQ09OU1RSQUlOVCAqLworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVj aWZpYyBvcHRpb25zLiBWYWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRz IG5hbWUuCisJCQkgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtp ZGVudGl0eX1EIFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIDMsCisJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVT dHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQkJeworCQkJ CU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJCQkvKiBEUk9QIENPTlNUUkFJTlQgKi8KKwkJCQly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNU UkFJTlQgSUYgRVhJU1RTICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9t Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCU5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpLAorCQkJCQkJCQkJCSJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uYW1lKTsKKworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJ CQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9D QVNDQURFKTsKKworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwg dG1wX29iaik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisKKwkvKiBEb25lICovCisJ UmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhIENyZWF0ZVN0YXRzU3RtdC4KKyAqCisgKiBHaXZlbiBhIHN0YXRpc3RpY3MgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBTVEFUSVNUSUNTICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBPTiAl e2V4cHI6LCB9cyBGUk9NICV7c3RhdF90YWJsZV9pZGVudGl0eX1ECisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJQ3JlYXRlU3RhdHNTdG10ICpub2RlID0gKENyZWF0ZVN0YXRzU3RtdCAq KSBwYXJzZXRyZWU7CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXRmb3JtOworCU9ialRyZWUg ICAgKnJldDsKKwlIZWFwVHVwbGUJdHVwOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7 CisJTGlzdAkgICAqc3RhdGV4cHJzID0gTklMOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNU QVRFWFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRp c3RpYyB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3Rh dGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIFNUQVRJU1RJQ1MgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJ CSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4 aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoc3RhdGZvcm0tPnN0eG5hbWUpKSk7CisKKwlk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGlj X2V4dF9zdHhleHBycywKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCUxp c3RDZWxsICAgKmxjOworCQlSZWxhdGlvbglzdGF0c3JlbDsKKwkJTGlzdAkgICAqY29udGV4dDsK KwkJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJCXN0 YXRzcmVsID0gcmVsYXRpb25fb3BlbihzdGF0Zm9ybS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHN0YXRzcmVsKSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxpZChzdGF0c3JlbCkpOwor CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJCWV4cHJzID0g KExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKworCQlmb3JlYWNoKGxjLCBleHBy cykKKwkJeworCQkJTm9kZQkgICAqZXhwciA9IChOb2RlICopIGxmaXJzdChsYyk7CisJCQljaGFy CSAgICpzdGF0ZXhwcjsKKworCQkJc3RhdGV4cHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZXhwciwg Y29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwkJCXN0YXRleHBycyA9IGxhcHBlbmQoc3RhdGV4cHJz LCBuZXdfc3RyaW5nX29iamVjdChzdGF0ZXhwcikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICJPTiAle2V4cHI6LCB9cyIsIHN0YXRleHBycyk7CisJCXBmcmVlKGV4cHJzU3Ry aW5nKTsKKwkJcmVsYXRpb25fY2xvc2Uoc3RhdHNyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQor CisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRp c3RpY19leHRfc3R4a2V5cywKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJ CWludAkJCWtleW5vOworCQljaGFyCSAgICphdHRuYW1lOworCQlMaXN0CSAgICpzdGF0Y29scyA9 IE5JTDsKKwkJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCisJCWluZG9wdGlvbiA9IChpbnQydmVj dG9yICopIERhdHVtR2V0UG9pbnRlcihkYXR1bSk7CisKKwkJZm9yIChrZXlubyA9IDA7IGtleW5v IDwgaW5kb3B0aW9uLT5kaW0xOyBrZXlubysrKQorCQl7CisJCQlhdHRuYW1lID0gZ2V0X2F0dG5h bWUoc3RhdGZvcm0tPnN0eHJlbGlkLCBpbmRvcHRpb24tPnZhbHVlc1trZXlub10sCisJCQkJCQkJ CSAgZmFsc2UpOworCQkJc3RhdGNvbHMgPSBsYXBwZW5kKHN0YXRjb2xzLCBuZXdfc3RyaW5nX29i amVjdChhdHRuYW1lKSk7CisJCX0KKworCQlpZiAoaW5kb3B0aW9uLT5kaW0xKQorCQl7CisJCQkv KiBBcHBlbmQgYSAnLCcgaWYgc3RhdGV4cHJzIGlzIHByZXNlbnQgZWxzZSBhcHBlbmQgJ09OJyAq LworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtjb21tYX1zIiwgImNvbW1hIiwKKwkJ CQkJCQkJIHN0YXRleHBycyA/ICIsIiA6ICJPTiIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICIle2NvbHM6LCB9cyIsIHN0YXRjb2xzKTsKKwkJfQorCX0KKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIkZST00gJXtzdGF0X3RhYmxlX2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShnZXRfcmVsX25hbWVzcGFjZShzdGF0Zm9ybS0+c3R4cmVsaWQp LAorCQkJCQkJCQkJCQkJICBnZXRfcmVsX25hbWUoc3RhdGZvcm0tPnN0eHJlbGlkKSkpOworCisJ UmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhbiBDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAoQ1JFQVRFIFNFUlZFUikKKyAqCisgKiBHaXZl biBhIHNlcnZlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFNFUlZFUiAle2lkZW50aXR5fUkgJXt0eXBlfXMgJXt2 ZXJzaW9ufXMgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtmZHd9SQorICogJXtnZW5lcmljX29wdGlv bnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZvcmVpZ25TZXJ2 ZXJTdG10ICpub2RlID0gKENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1lKTsKKworCS8qIEFkZCBhIFRZUEUgY2xhdXNl LCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVFlQRSIpOworCWlmIChub2RlLT5zZXJ2 ZXJ0eXBlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3R5cGV9TCIsICJ0eXBlIiwg bm9kZS0+c2VydmVydHlwZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3R5cGV9cyIsIHRtcCk7CisKKwkvKiBBZGQgYSBW RVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIlZFUlNJT04iKTsK KwlpZiAobm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJz aW9ufUwiLCAidmVyc2lvbiIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2ZXJzaW9ufXMiLCB0 bXApOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiRk9SRUlHTiBEQVRBIFdSQVBQRVIg JXtmZHd9SSIsICJmZHciLAorCQkJCQkJIG5vZGUtPmZkd25hbWUpOworCisJLyogQWRkIGFuIE9Q VElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dl bmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9u cywgTlVMTCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJG b3JlaWduU2VydmVyU3RtdCAoQUxURVIgU0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRp b25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRm9yZWlnblNlcnZl clN0bXQgKm5vZGUgPSAoQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZSAgICAqdG1wOworCisJLyogQWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRt cCA9IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJaWYgKG5vZGUtPmhhc192ZXJzaW9uICYmIG5v ZGUtPnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwg InZlcnNpb24iLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lvbikK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAidmVyc2lvbiIsICJ2ZXJzaW9uIiwgIk5VTEwi KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJcmV0dXJuIG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19v cHRpb25zfXMiLCAzLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5z ZXJ2ZXJuYW1lLAorCQkJCQkJICAidmVyc2lvbiIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJ CSAgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIGRlcGFyc2VfRmR3 T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3Jl YXRlUExhbmdTdG10LgorICoKKyAqIEdpdmVuIGEgbGFuZ3VhZ2UgT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAl e29yX3JlcGxhY2V9cyAle3RydXN0ZWR9cyBMQU5HVUFHRSAle2lkZW50aXR5fXMgSEFORExFUiAl e2hhbmRsZXJ9RAorICogJXtpbmxpbmV9cyAle3ZhbGlkYXRvcn1zCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQ3JlYXRlUExhbmdTdG10ICpub2RlID0gKENyZWF0ZVBMYW5nU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlIZWFwVHVwbGUJ bGFuZ1R1cDsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCisJbGFuZ1R1cCA9IFNlYXJj aFN5c0NhY2hlMShMQU5HT0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWxh bmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXt0cnVzdGVkfXMgTEFOR1VB R0UgJXtpZGVudGl0eX1zIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0cnVz dGVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBsYW5nRm9ybS0+bGFucGx0cnVzdGVkID8gIlRS VVNURUQiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cGxu YW1lKTsKKworCWlmIChub2RlLT5wbGhhbmRsZXIgIT0gTklMKQorCXsKKwkJLyogQWRkIHRoZSBI QU5ETEVSIGNsYXVzZSAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJIQU5ETEVSICV7 aGFuZGxlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFucGxjYWxsZm9pZCkpOwor CisJCS8qIEFkZCB0aGUgSU5MSU5FIGNsYXVzZSwgaWYgYW55ICovCisJCXRtcCA9IG5ld19vYmp0 cmVlKCJJTkxJTkUiKTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0tPmxhbmlubGluZSkpCisJ CXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFuZGxlcl9uYW1lfUQiLAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbmlubGluZSkpOworCQl9CisJCWVsc2UKKwkJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lu bGluZX1zIiwgdG1wKTsKKworCQkvKiBBZGQgdGhlIFZBTElEQVRPUiBjbGF1c2UsIGlmIGFueSAq LworCQl0bXAgPSBuZXdfb2JqdHJlZSgiVkFMSURBVE9SIik7CisJCWlmIChPaWRJc1ZhbGlkKGxh bmdGb3JtLT5sYW52YWxpZGF0b3IpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW52YWxp ZGF0b3IpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisJfQorCisJUmVs ZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBDcmVhdGVGb3JlaWduVGFibGVTdG10IChDUkVBVEUgRk9SRUlHTiBUQUJMRSkuCisgKgor ICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5 fUQKKyAqIFsoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMKKyAqICB8IFBBUlRJ VElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EICgle3R5cGVkX3RhYmxlX2VsZW1lbnRzOiwgfXMp ICV7cGFydGl0aW9uX2JvdW5kfXNdCisgKiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0 aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRm9yZWlnblRhYmxl U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduVGFi bGVTdG10ICpzdG10ID0gKENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKikgcGFyc2V0cmVlOworCVJl bGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZSAgICAqY3JlYXRlU3RtdDsKKwlPYmpU cmVlICAgICp0bXBvYmo7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJY3JlYXRlU3Rt dCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRk9SRUlHTiBUQUJMRSIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwgImlmX25vdF9leGlzdHMi LAorCQkJCQkJIHN0bXQtPmJhc2UuaWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIi KTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVs LT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0 aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIs IHRtcG9iaik7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKwlpZiAoc3RtdC0+ YmFzZS5wYXJ0Ym91bmQpCisJeworCQkvKiBQYXJ0aXRpb25lZCB0YWJsZSAqLworCQlMaXN0CSAg ICpwYXJlbnRzOworCQlPYmpFbGVtICAgICplbGVtOworCisJCXBhcmVudHMgPSBkZXBhcnNlX0lu aFJlbGF0aW9ucyhvYmplY3RJZCk7CisJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJl bnRzKTsKKworCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJYXBwZW5k X2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJ CQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxl bWVudHMocmVsYXRpb24sIHN0bXQtPmJhc2UudGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJ CQkJICB0cnVlLCAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3Qg Y29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywg b2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJ aWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7ZWxlbWVu dHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w b2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0eXBlZF90YWJs ZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKworCQkvKgorCQkgKiBBZGQgdGhlIHBhcnRpdGlvbl9i b3VuZF9zcGVjLCBpLmUuIHRoZSBGT1IgVkFMVUVTIGNsYXVzZS4KKwkJICogR2V0IHBnX2NsYXNz LnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlIHBhcnNldHJlZQor CQkgKiBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbiB3 aGljaCBoYXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3Ry aW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsICJwYXJ0aXRpb25f Ym91bmQiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisK KwkJLyogTm8gUEFSVElUSU9OIEJZIGNsYXVzZSBmb3IgQ1JFQVRFIEZPUkVJR04gVEFCTEUgKi8K Kwl9CisJZWxzZQorCXsKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0 aW9uLCBzdG10LT5iYXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2Us CQkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBv c2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVj dElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29i amVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOwor CQllbHNlCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiKCkiKTsKKworCQkv KgorCQkqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBz Y2FuIHRoZSBsaXN0IG9mCisJCSogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVz ZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBh cmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJKiByZS1yZXNvbHZlIHRo ZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSog bW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMu CisJCSovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAoc3RtdC0+ YmFzZS5pbmhSZWxhdGlvbnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmos ICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJ ZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1E KSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJCX0KKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRtcG9iaik7CisJfQorCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIlNFUlZFUiAle3NlcnZlcn1JIiwgInNlcnZl ciIsIHN0bXQtPnNlcnZlcm5hbWUpOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBh bnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlv bnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKHN0bXQtPm9wdGlvbnMsIE5VTEwpKTsK KworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlLCBPYmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZp bmUgPSAoRGVmaW5lU3RtdCAqKSBwYXJzZXRyZWU7CisKKwlzd2l0Y2ggKGRlZmluZS0+a2luZCkK Kwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0 bXRfQWdncmVnYXRlKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX0NPTExBVElP TjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKG9iamVjdElkLCBkZWZp bmUsIHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4g ZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2Ug T0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFND b25maWcob2JqZWN0SWQsIGRlZmluZSwgc2Vjb25kYXJ5T2JqKTsKKworCQljYXNlIE9CSkVDVF9U U0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShv YmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiBk ZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBP QkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0 ZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuIGRl cGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IGtpbmQ6ICVkIiwgZGVmaW5lLT5raW5k KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZvcm0gYW4gT2JqRWxlbSB0byBi ZSB1c2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50IGluIGFuIGFnZ3JlZ2F0ZSBhcmd1bWVudAorICog bGlzdAorICovCitzdGF0aWMgT2JqRWxlbSAqCitmb3JtX2FnZ19hcmd1bWVudChpbnQgaWR4LCBj aGFyICptb2RlcywgY2hhciAqKm5hbWVzLCBPaWQgKnR5cGVzKQoreworCU9ialRyZWUJICAgKmFy ZzsKKworCWFyZyA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFy ZywgIiV7bW9kZX1zIiwgIm1vZGUiLAorCQkJCQkJIChtb2RlcyAmJiBtb2Rlc1tpZHhdID09ICd2 JykgPyAiVkFSSUFESUMiIDogIiIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFyZywgIiV7bmFt ZX1zIiwgIm5hbWUiLCBuYW1lcyA/IG5hbWVzW2lkeF0gOiAiIik7CisJYXBwZW5kX29iamVjdF9v YmplY3QoYXJnLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGVz W2lkeF0sIC0xKSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoYXJnKTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgQUdHUkVHQVRFKQorICoKKyAqIEdpdmVu IGEgYWdncmVnYXRlIE9JRCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVB VEUgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEFHR1JFR0FURSAl e2lkZW50aXR5fUQoJXt0eXBlc31zKSAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfQWdncmVnYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIGFnZ1R1cDsKKwlIZWFwVHVwbGUgICBwcm9jVHVw OworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7 CisJRGF0dW0JCWluaXR2YWw7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfYWdncmVnYXRlIGFn ZzsKKwlGb3JtX3BnX3Byb2MgcHJvYzsKKwlGb3JtX3BnX29wZXJhdG9yIG9wOworCUhlYXBUdXBs ZQl0dXA7CisKKwlhZ2dUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQUdHRk5PSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYWdnVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFnZ3JlZ2F0ZSB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwlhZ2cgPSAoRm9ybV9wZ19hZ2dyZWdhdGUpIEdFVFNUUlVDVChhZ2dUdXAp OworCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVt KGFnZy0+YWdnZm5vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUi LAorCQkJIGFnZy0+YWdnZm5vaWQpOworCXByb2MgPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1Qo cHJvY1R1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBBR0dSRUdBVEUiKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5h bWVTdHIocHJvYy0+cHJvbmFtZSkpKTsKKworCS8qCisJICogQWRkIHRoZSBhcmd1bWVudCBsaXN0 LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzIHRvIGNvbnNpZGVyOgorCSAqCisJICogMS4gbm8gYXJn dW1lbnRzLCBpbiB3aGljaCBjYXNlIHRoZSBzaWduYXR1cmUgaXMgKCopLgorCSAqCisJICogMi4g Tm90IGFuIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZS4gIEluIHRoaXMgY2FzZSB0aGVyZSdzIG9uZSBv ciBtb3JlCisJICogYXJndW1lbnRzLgorCSAqCisJICogMy4gT3JkZXJlZC1zZXQgYWdncmVnYXRl cy4gVGhlc2UgaGF2ZSB6ZXJvIG9yIG1vcmUgZGlyZWN0IGFyZ3VtZW50cywgYW5kCisJICogb25l IG9yIG1vcmUgb3JkZXJlZCBhcmd1bWVudHMuCisJICoKKwkgKiBXZSBkb24ndCBuZWVkIHRvIGNv bnNpZGVyIGRlZmF1bHQgdmFsdWVzIG9yIHRhYmxlIHBhcmFtZXRlcnMsIGFuZCB0aGUKKwkgKiBv bmx5IG1vZGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGlzIFZBUklBRElDLgorCSAqLworCisJ aWYgKHByb2MtPnByb25hcmdzID09IDApCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIo JXt0eXBlc31zKSIsICJ0eXBlcyIsICIqIik7CisJZWxzZSBpZiAoIUFHR0tJTkRfSVNfT1JERVJF RF9TRVQoYWdnLT5hZ2draW5kKSkKKwl7CisJCWludAkJCWk7CisJCWludAkJCW5hcmdzOworCQlP aWQJCSAgICp0eXBlczsKKwkJY2hhcgkgICAqbW9kZXM7CisJCWNoYXIJICAqKm5hbWVzOworCisJ CW5hcmdzID0gZ2V0X2Z1bmNfYXJnX2luZm8ocHJvY1R1cCwgJnR5cGVzLCAmbmFtZXMsICZtb2Rl cyk7CisKKwkJLyogb25seSBkaXJlY3QgYXJndW1lbnRzIGluIHRoaXMgY2FzZSAqLworCQlsaXN0 ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJeworCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwgZm9ybV9hZ2dfYXJndW1lbnQoaSwgbW9kZXMsIG5hbWVzLCB0eXBlcykpOwor CQl9CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7ZGlyZWN0OiwgfXMiLCAxLAorCQkJCQkJ CSAiZGlyZWN0IiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo c3RtdCwgIigle3R5cGVzfXMpIiwgdG1wKTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJaTsKKwkJ aW50CQkJbmFyZ3M7CisJCU9pZAkJICAgKnR5cGVzOworCQljaGFyCSAgICptb2RlczsKKwkJY2hh cgkgICoqbmFtZXM7CisKKwkJbmFyZ3MgPSBnZXRfZnVuY19hcmdfaW5mbyhwcm9jVHVwLCAmdHlw ZXMsICZuYW1lcywgJm1vZGVzKTsKKworCQkvKiBkaXJlY3QgYXJndW1lbnRzIC4uLiAqLworCQls aXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgYWdnLT5hZ2dudW1kaXJlY3RhcmdzOyBpKysp CisJCXsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVz LCBuYW1lcywgdHlwZXMpKTsKKwkJfQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtkaXJlY3Q6 LCB9cyIsIDEsCisJCQkJCQkJICJkaXJlY3QiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJCS8q CisJCSAqIC4uLiBhbmQgYWdncmVnYXRlZCBhcmd1bWVudHMuICBJZiB0aGUgbGFzdCBkaXJlY3Qg YXJndW1lbnQgaXMKKwkJICogVkFSSUFESUMsIHdlIG5lZWQgdG8gcmVwZWF0IGl0IGhlcmUgcmF0 aGVyIHRoYW4gc2VhcmNoaW5nIGZvciBtb3JlCisJCSAqIGFyZ3VtZW50cy4gIChTZWUgYWdncl9h cmdzIHByb2R1Y3Rpb24gaW4gZ3JhbS55IGZvciBhbiBleHBsYW5hdGlvbi4pCisJCSAqLworCQlp ZiAobW9kZXMgJiYgbW9kZXNbYWdnLT5hZ2dudW1kaXJlY3RhcmdzIC0gMV0gPT0gJ3YnKQorCQl7 CisJCQlsaXN0ID0gbGlzdF9tYWtlMShmb3JtX2FnZ19hcmd1bWVudChhZ2ctPmFnZ251bWRpcmVj dGFyZ3MgLSAxLAorCQkJCQkJCQkJCQkJbW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQl9CisJCWVs c2UKKwkJeworCQkJbGlzdCA9IE5JTDsKKwkJCWZvciAoaSA9IGFnZy0+YWdnbnVtZGlyZWN0YXJn czsgaSA8IG5hcmdzOyBpKyspCisJCQl7CisJCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgZm9ybV9h Z2dfYXJndW1lbnQoaSwgbW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQkJfQorCQl9CisJCWFwcGVu ZF9hcnJheV9vYmplY3QodG1wLCAiT1JERVIgQlkgJXthZ2dyZWdhdGVkOiwgfXMiLCBsaXN0KTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiKCV7dHlwZXN9cykiLCB0bXApOworCX0K KworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyog U0ZVTkMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0ZVTkM9JXtwcm9jZWR1cmV9RCIsIDEs CisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIGFnZy0+YWdndHJhbnNmbikpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1RZ UEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RZUEU9JXt0eXBlfVQiLCAxLAorCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShhZ2ct PmFnZ3RyYW5zdHlwZSwgLTEpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIFNTUEFDRSAqLworCWlmIChhZ2ctPmFnZ3RyYW5zc3BhY2UgIT0g MCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTU1BBQ0U9JXtzcGFjZX1uIiwgMSwKKwkJ CQkJCQkgInNwYWNlIiwgT2JqVHlwZUludGVnZXIsIGFnZy0+YWdndHJhbnNzcGFjZSk7CisJfQor CWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJTU1BBQ0U9JXtzcGFjZX1uIik7CisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEZJTkFMRlVOQyAqLwor CWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnZmluYWxmbikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJGSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGFnZy0+YWdnZmluYWxmbikpOworCWVsc2UKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlKCJGSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIpOworCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBGSU5BTEZVTkNfRVhUUkEg Ki8KKwlpZiAoYWdnLT5hZ2dmaW5hbGV4dHJhKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRklO QUxGVU5DX0VYVFJBPSV7dmFsdWV9cyIsIDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsICJ0cnVlIik7CisJZWxzZQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRklOQUxGVU5DX0VY VFJBPSV7dmFsdWV9cyIsIDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJmYWxz ZSIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogSU5JVENPTkQgKi8KKwlpbml0dmFsID0gU3lzQ2FjaGVHZXRBdHRyKEFHR0ZOT0lELCBhZ2dU dXAsCisJCQkJCQkJICBBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dpbml0dmFsLAorCQkJCQkJCSAgJmlz bnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIklOSVRDT05EPSIpOworCWlmICghaXNudWxsKQor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5JVENPTkQ9JXtpbml0dmFsfUwiLCAxLAorCQkJCQkJ CSAiaW5pdHZhbCIsIE9ialR5cGVTdHJpbmcsIFRleHREYXR1bUdldENTdHJpbmcoaW5pdHZhbCkp OworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTklUQ09ORD0le2luaXR2YWx9TCIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNU0ZVTkMg Ki8KKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ210cmFuc2ZuKSkKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIk1TRlVOQz0le3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLCBhZ2ctPmFnZ210cmFuc2ZuKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWUoIk1TRlVOQz0le3Byb2NlZHVyZX1EIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1TVFlQRSAqLworCWlmIChPaWRJc1ZhbGlkKGFnZy0+ YWdnbXRyYW5zdHlwZSkpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNU1RZUEU9JXt0eXBlfVQi LCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsIG5ld19vYmp0cmVlX2Zvcl90eXBl KGFnZy0+YWdnbXRyYW5zdHlwZSwgLTEpKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZSgiTVNUWVBFPSV7dHlwZX1UIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIE1TU1BBQ0UgKi8KKwlpZiAoYWdnLT5hZ2dtdHJhbnNzcGFjZSAhPSAwKQor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTVNTUEFDRT0le3NwYWNlfW4iLCAxLAorCQkJCQkJCSAi c3BhY2UiLCBPYmpUeXBlSW50ZWdlcixhZ2ctPmFnZ210cmFuc3NwYWNlKTsKKwllbHNlCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZSgiTVNTUEFDRT0le3NwYWNlfW4iKTsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTUlOVkZVTkMgKi8KKwlpZiAoT2lkSXNW YWxpZChhZ2ctPmFnZ21pbnZ0cmFuc2ZuKSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1JTlZG VU5DPSV7dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIGFnZy0+YWdnbWludnRyYW5zZm4pKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdf b2JqdHJlZSgiTUlOVkZVTkM9PSV7dHlwZX1UIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCS8qIE1GSU5BTEZVTkMgKi8KKwlpZiAoT2lkSXNWYWxpZChhZ2ct PmFnZ21maW5hbGZuKSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1GSU5BTEZVTkM9JXtwcm9j ZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIGFnZy0+YWdnbWZpbmFsZm4pKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZSgiTUZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1GSU5BTEZVTkNfRVhUUkEgKi8KKwlpZiAoYWdnLT5h Z2dtZmluYWxleHRyYSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1GSU5BTEZVTkNfRVhUUkE9 JXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgInRydWUiKTsK KwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiTUZJTkFMRlVOQ19FWFRSQT0le3ZhbHVl fXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTUlO SVRDT05EICovCisJaW5pdHZhbCA9IFN5c0NhY2hlR2V0QXR0cihBR0dGTk9JRCwgYWdnVHVwLAor CQkJCQkJCSAgQW51bV9wZ19hZ2dyZWdhdGVfYWdnbWluaXR2YWwsCisJCQkJCQkJICAmaXNudWxs KTsKKwlpZiAoIWlzbnVsbCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1JTklUQ09ORD0le2lu aXR2YWx9TCIsIDEsCisJCQkJCQkJICJpbml0dmFsIiwgT2JqVHlwZVN0cmluZywgVGV4dERhdHVt R2V0Q1N0cmluZyhpbml0dmFsKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1J TklUQ09ORD0le2luaXR2YWx9TCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBIWVBPVEhFVElDQUwgKi8KKwlpZiAoYWdnLT5hZ2draW5kID09IEFHR0tJ TkRfSFlQT1RIRVRJQ0FMKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSFlQT1RIRVRJQ0FMPSV7 dmFsdWV9cyIsIDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJ0cnVlIik7CisJ ZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIkhZUE9USEVUSUNBTD0le3ZhbHVlfXMiKTsK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU09SVE9QICov CisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dzb3J0b3ApKQorCXsKKwkJdHVwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0oYWdnLT5hZ2dzb3J0b3ApKTsKKwkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBhZ2ctPmFnZ3NvcnRvcCk7CisJCW9wID0g KEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVCh0dXApOworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU09SVE9QPSV7b3BlcmF0b3J9RCIsIDEsCisJCQkJCQkJICJvcGVyYXRvciIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcC0+b3BybmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcC0+b3BybmFtZSkpKTsKKworCQlSZWxlYXNlU3lz Q2FjaGUodHVwKTsKKwl9CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIlNPUlRPUD0l e29wZXJhdG9yfUQiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxz ZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogRG9uZSB3aXRoIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWFwcGVuZF9hcnJheV9v YmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo cHJvY1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKGFnZ1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgQ09MTEFUSU9OKQorICoKKyAq IEdpdmVuIGEgY29sbGF0aW9uIE9JRCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRo ZSBDUkVBVEUgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIENPTExB VElPTiAle2lkZW50aXR5fUQgRlJPTSAle2Zyb21faWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCSBPYmplY3RBZGRyZXNzIGZyb21D b2xsaWQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb2xUdXA7CisJRm9ybV9w Z19jb2xsYXRpb24gY29sRm9ybTsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCU9i alRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJY29sVHVwID0gU2VhcmNo U3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoY29sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZv cm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QoY29sVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29sRm9y bS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5jb2xsbmFt ZSkpKTsKKworCWlmIChPaWRJc1ZhbGlkKGZyb21Db2xsaWQub2JqZWN0SWQpKQorCXsKKwkJT2lk CQkJY29sbGlkID0gZnJvbUNvbGxpZC5vYmplY3RJZDsKKwkJSGVhcFR1cGxlCXRwOworCQlGb3Jt X3BnX2NvbGxhdGlvbiBmcm9tQ29sRm9ybTsKKworCQkvKgorCQkgKiBDUkVBVEUgQ09MTEFUSU9O ICV7aWRlbnRpdHl9RCBGUk9NIGV4aXN0aW5nX2NvbGxhdGlvbjsKKwkJICovCisJCXRwID0gU2Vh cmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0oY29sbGlkKSk7CisJCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1IiwgY29sbGlkKTsKKworCQlmcm9tQ29sRm9ybSA9 IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKTsKKworCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICJGUk9NICV7ZnJvbV9pZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKGZyb21Db2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAg TmFtZVN0cihmcm9tQ29sRm9ybS0+Y29sbG5hbWUpKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHRw KTsKKwkJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyog TE9DQUxFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVt X3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMT0NBTEU9JXtsb2NhbGV9TCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibG9jYWxlIiwKKwkJCQkJCQkgImxvY2FsZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmco ZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCX0KKworCS8qIExDX0NPTExBVEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xM T0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKKwlp ZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMQ19DT0xMQVRFPSV7Y29s bGF0ZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRlIiwK KwkJCQkJCQkgImNvbGxhdGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMi LCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBMQ19DVFlQRSAqLworCWRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGN0 eXBlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJMQ19DVFlQRT0le2N0eXBlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImN0eXBlIiwKKwkJCQkJCQkgImN0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNw cmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogUFJPVklERVIgKi8K KwlpZiAoY29sRm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJPVklERVI9JXtwcm92aWRlcn1MIiwgMiwKKwkJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm92aWRlciIsCisJCQkJCQkJICJwcm92aWRlciIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJpY3UiKSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlIGlmIChj b2xGb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiUFJPVklERVI9JXtwcm92aWRlcn1MIiwgMiwKKwkJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJwcm92aWRlciIsCisJCQkJCQkJICJwcm92aWRlciIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJsaWJjIikpOworCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBERVRFUk1JTklT VElDICovCisJaWYgKGNvbEZvcm0tPmNvbGxpc2RldGVybWluaXN0aWMpCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiREVURVJNSU5JU1RJQz0le2RldGVybWluaXN0aWN9TCIsIDIsCisJCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGV0ZXJtaW5pc3RpYyIsCisJCQkJCQkJICJk ZXRlcm1pbmlzdGljIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgInRy dWUiKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CX0KKworCS8qIFZFUlNJT04gKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBj b2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGx2ZXJzaW9uLCAmaXNudWxsKTsKKwlpZiAoIWlz bnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OPSV7dmVyc2lvbn1MIiwg MiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkg InZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0 dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle2VsZW1z OiwgfXMpIiwgbGlzdCk7CisJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAq CisgKiBHaXZlbiBhIG9wZXJhdG9yIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0 eX1PICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5l U3RtdF9PcGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFw VHVwbGUJb3ByVHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCisJb3By VHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9w ckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0t Pm9wcm5hbWUpKSk7CisKKwkvKiBQUk9DRURVUkUgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIlBST0NFRFVSRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInByb2NlZHVyZSIsCisJCQkJCQkJInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCW9wckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJMRUZUQVJHPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsZWZ0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCisJLyogUklHSFRBUkcgKi8KKwl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlJJR0hUQVJHPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJyaWdodGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJpZ2h0KSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCisJLyogQ09NTVVUQVRPUiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y29tbXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJG b3JtLT5vcHJjb20pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBO RUdBVE9SICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJORUdBVE9SPSIsIDEsCisJCQkJ CQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJuZWdhdG9yIik7CisJaWYgKE9pZElzVmFsaWQo b3ByRm9ybS0+b3BybmVnYXRlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7 b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIFJFU1RSSUNUICovCisJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAicmVzdHJpY3QiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisKKwkvKiBKT0lOICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEs CisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFs aWQob3ByRm9ybS0+b3Byam9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJZWxz ZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogSEFTSEVTICovCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCisJLyogTUVSR0VTICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJNRVJHRVMiLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWVyZ2VzIik7 CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5tZXJnZSkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDUkVBVEUgVFlQRSBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSBUWVBFICV7aWRlbnRpdHl9RCAle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAq ZGVmaW5lKQoreworCUhlYXBUdXBsZQl0eXBUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRy ZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCWNoYXIJICAgKnN0cjsKKwlEYXR1 bQkJZGZsdDsKKwlib29sCQlpc251bGw7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBU dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3Jt ID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0eXBGb3JtLT50 eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsK KworCS8qIFNoZWxsIHR5cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNkZWZpbmVkKQorCXsK KwkJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogQWRk IHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIihJTlBVVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImlucHV0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJPVVRQVVQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJvdXRwdXQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5 cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4p KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9k b3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJ c1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYg KHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwkJdG1wID0gbmV3X29ianRyZWUoIklOVEVSTkFMTEVO R1RIPVZBUklBQkxFIik7CisJZWxzZQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxM RU5HVEg9JXt0eXBsZW59biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwg dHlwRm9ybS0+dHlwbGVuKTsKKworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogUEFTU0VEQllWQUxVRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJQQVNTRURCWVZBTFVFIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBh c3NlZGJ5dmFsdWUiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGJ5dmFsKQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFhYWCBpdCdzIG9kZCB0byByZXByZXNlbnQgYWxpZ25tZW50IHdpdGggc2NoZW1h LXF1YWxpZmllZCB0eXBlIG5hbWVzICovCisJc3dpdGNoICh0eXBGb3JtLT50eXBhbGlnbikKKwl7 CisJCWNhc2UgJ2QnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuZmxvYXQ4IjsKKwkJCWJyZWFrOwor CQljYXNlICdpJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDQiOworCQkJYnJlYWs7CisJCWNh c2UgJ3MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50MiI7CisJCQlicmVhazsKKwkJY2FzZSAn Yyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5icGNoYXIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhbGlnbm1lbnQgJWMiLCB0eXBGb3JtLT50eXBhbGln bik7CisJfQorCisJLyogQUxJR05NRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMSUdO TUVOVD0le2FsaWdufXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYWxp Z25tZW50IiwKKwkJCQkJCSAiYWxpZ24iLCBPYmpUeXBlU3RyaW5nLCBzdHIpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1RPUkFHRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVE9SQUdFPSV7c3RvcmFnZX1zIiwgMiwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICJzdG9yYWdlIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSBnZXRfdHlwZV9zdG9yYWdlKHR5cEZvcm0tPnR5cHN0b3JhZ2Up KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IENBVEVHT1JZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBVEVHT1JZPSV7Y2F0ZWdvcnl9 cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYXRlZ29yeSIsCisJCQkJ CQkgImNhdGVnb3J5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBG b3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBS RUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJlZmVycmVk Iik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAs CisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLAorCQkJCQkJCSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRmbHQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRUxFTUVO VCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTEVNRU5UPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJlbGVtZW50Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwZWxlbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImVsZW0iLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBlbGVtLCAtMSkpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBERUxJTUlURVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi REVMSU1JVEVSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWxpbWl0 ZXIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2RlbGltfUwiLCAiZGVsaW0iLAor CQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGRlbGltKSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDT0xMQVRBQkxFICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVEFCTEU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImNvbGxhdGFibGUiKTsKKwlpZiAoIU9pZElzVmFsaWQodHlwRm9ybS0+ dHlwY29sbGF0aW9uKSkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIiV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXAp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENS RUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1z KQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJT2JqZWN0QWRkcmVzcyBjb3Bp ZWQpCit7CisJSGVhcFR1cGxlCXRzY1R1cDsKKwlIZWFwVHVwbGUJdHNwVHVwOworCU9ialRyZWUg ICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJRm9ybV9wZ190c19jb25maWcgdHNjRm9ybTsK KwlGb3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwl0 c2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNDT05GSUdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNjVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gd2l0aCBP SUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2NGb3JtID0gKEZvcm1fcGdfdHNfY29uZmlnKSBH RVRTVFJVQ1QodHNjVHVwKTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9J RCwgT2JqZWN0SWRHZXREYXR1bSh0c2NGb3JtLT5jZmdwYXJzZXIpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHRleHQgc2VhcmNoIHBhcnNlciAldSIsCisJCQkgdHNjRm9ybS0+Y2ZncGFyc2VyKTsKKwl0c3BG b3JtID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICog QWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09QWSdlZCBhbiBleGlzdGlu ZyBjb25maWcsIGFkZAorCSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lzZSBhZGQgYSBQQVJTRVIg Y2xhdXNlLgorCSAqLworCS8qIENPUFkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09QWT0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29weSIpOworCWlmIChPaWRJ c1ZhbGlkKGNvcGllZC5vYmplY3RJZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7 dHNjb25maWd9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0NvbmZp Z1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjb3BpZWQub2JqZWN0SWQpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogUEFSU0VSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IlBBUlNFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFyc2VyIik7 CisJaWYgKGNvcGllZC5vYmplY3RJZCA9PSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3BhcnNlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KHRzcEZvcm0tPnByc25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+ cHJzbmFtZSkpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtl bGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKHRzY0Zvcm0tPmNmZ25hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpU eXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisJUmVsZWFzZVN5 c0NhY2hlKHRzY1R1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVB VEUgVEVYVCBTRUFSQ0ggUEFSU0VSIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c3BUdXA7CisJT2Jq VHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOwor CUZvcm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEo VFNQQVJTRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHRleHQgc2VhcmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZv cm0gPSAoRm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyogQWRkIHRo ZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIFNUQVJUICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIlNUQVJUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAic3RhcnQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSB0c3BGb3JtLT5wcnNzdGFydCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogR0VUVE9LRU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiR0VUVE9LRU49JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJnZXR0b2tlbiIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3Rva2VuKSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTkQgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiRU5EPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAiZW5kIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgdHNwRm9ybS0+cHJzZW5kKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhUWVBFUyAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJMRVhUWVBFUz0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImxleHR5cGVzIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzbGV4dHlwZSkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSEVBRExJTkUgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiSEVBRExJTkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImhlYWRsaW5lIik7CisJaWYgKE9pZElzVmFsaWQodHNwRm9ybS0+cHJzaGVhZGxpbmUp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSB0c3BGb3JtLT5wcnNoZWFkbGluZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lk ZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSksCisJCQkJCQkg ImVsZW1zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXAp OworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRFWFQgU0VBUkNI IERJQ1RJT05BUlkgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUg VEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQgb2Jq ZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNkVHVwOworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlE YXR1bQkJb3B0aW9uczsKKwlib29sCQlpc251bGw7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07 CisKKwl0c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdF VFNUUlVDVCh0c2RUdXApOworCisKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8K KwkvKiBURU1QTEFURSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJURU1QTEFURT0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidGVtcGxhdGUiKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICIle3RlbXBsYXRlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChUU1RlbXBsYXRlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNkRm9ybS0+ ZGljdHRlbXBsYXRlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKgorCSAqIG9wdGlvbnMuICBYWFggdGhpcyBpcyBhIHByZXR0eSB1c2VsZXNz IHJlcHJlc2VudGF0aW9uLCBidXQgd2UgY2FuJ3QgZG8KKwkgKiBiZXR0ZXIgd2l0aG91dCBtb3Jl IHRzX2NhY2hlLmMgY29vcGVyYXRpb24gLi4uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0 QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5p dG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsKKwlp ZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCAi b3B0aW9ucyIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQg U0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZv cm0tPmRpY3RuYW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIHN0YXRlbWVudC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFICV7aWRlbnRpdHl9RCAo JXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf VFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVw bGUJdHN0VHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkg ICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZvcm07CisKKwl0c3RUdXAg PSBTZWFyY2hTeXNDYWNoZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUgd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVtcGxhdGUpIEdFVFNUUlVD VCh0c3RUdXApOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIElOSVQg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5JVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiaW5pdCIpOworCWlmIChPaWRJc1ZhbGlkKHRzdEZvcm0tPnRtcGxpbml0 KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGluaXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogTEVYSVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWElaRT0le3Byb2NlZHVy ZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxleGl6ZSIsCisJCQkJ CQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRt cGxsZXhpemUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUg JXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3RGb3JtLT50bXBs bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0tPnRtcGxuYW1lKSksCisJ CQkJCQkgImVsZW1zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0 c3RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIFRFWFQg U0VBUkNIIENPTkZJR1VSQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBREQgTUFQUElO RworICogRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczosIH1ECisgKglP UgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgRFJPUCBN QVBQSU5HICV7aWZfZXhpc3RzfXMKKyAqIEZPUiAle3Rva2VudHlwZX1JCisgKglPUgorICogQUxU RVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORwor ICogRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczosIH1ECisgKglPUgor ICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQ UElORworICogUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5 fUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9 RCBBTFRFUiBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBSRVBMQUNFICV7b2xkX2Rp Y3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQp Cit7CisJQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICpub2RlID0gKEFsdGVyVFNDb25maWd1cmF0 aW9uU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJ CQlpOworCisJcmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJ T04iKTsKKworCS8qIERldGVybWluZSB0aGUgZm9ybWF0IHN0cmluZyBhcHByb3ByaWF0ZSB0byBl YWNoIHN1YmNvbW1hbmQgKi8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQpCisJeworCQljYXNlIEFMVEVS X1RTQ09ORklHX0FERF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtp ZGVudGl0eX1EIEFERCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQt PmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJf VFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtp ZGVudGl0eX1EIERST1AgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21k LT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQl0bXAgPSBuZXdfb2JqdHJlZSgiSUYg RVhJU1RTIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIG5vZGUtPm1p c3Npbmdfb2spOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZl9leGlzdHN9cyIs IHRtcCk7CisJCQlicmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdf Rk9SX1RPS0VOOgorCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJY2FzZSBB TFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCQkJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7 CisJfQorCisJLyogQWRkIHRoZSBhZmZlY3RlZCB0b2tlbiBsaXN0LCBmb3Igc3ViY29tbWFuZHMg dGhhdCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FERF9N QVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19G T1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Rf Rk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5H KQorCXsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT50b2tlbnR5cGUpCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHJldCwgIkZPUiAle3Rva2VudHlwZTosIH1JIiwgbGlzdCk7CisJfQor CisJLyogQWRkIGZ1cnRoZXIgc3ViY29tbWFuZC1zcGVjaWZpYyBlbGVtZW50cyAqLworCWlmIChu b2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4pCisJeworCQkvKiBBREQg TUFQUElORyBhbmQgQUxURVIgTUFQUElORyBGT1IgbmVlZCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVz ICovCisJCWxpc3QgPSBOSUw7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmQuYXRzY2ZnLm5kaWN0 czsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICpkaWN0X29iajsKKworCQkJZGljdF9vYmogPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCSAgY21kLT5kLmF0c2NmZy5kaWN0SWRzW2ldKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChkaWN0X29iaikpOworCQl9CisJCWFwcGVu ZF9hcnJheV9vYmplY3QocmV0LCAiV0lUSCAle2RpY3Rpb25hcmllczosIH1EIiwgbGlzdCk7CisJ fQorCWVsc2UgaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUIHx8 CisJCQkgbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VO KQorCXsKKwkJLyogVGhlIFJFUExBQ0UgZm9ybXMgd2FudCBvbGQgYW5kIG5ldyBkaWN0aW9uYXJp ZXMgKi8KKwkJQXNzZXJ0KGNtZC0+ZC5hdHNjZmcubmRpY3RzID09IDIpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICJSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgY21kLT5kLmF0c2NmZy5kaWN0SWRzWzBdKSk7CisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIldJVEggJXtuZXdfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBj bWQtPmQuYXRzY2ZnLmRpY3RJZHNbMV0pKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhbiBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIHN0YXRlbWVudC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lk ZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCURhdHVtCQlvcHRpb25z OworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBs ZQl0c2RUdXA7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXApOworCisJ LyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gbGlzdCBhY2NvcmRpbmcgdG8gdGhlIHBnX3RzX2Rp Y3QgZGljdGluaXRvcHRpb24KKwkgKiBjb2x1bW4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVH ZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rp bml0b3B0aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIiIpOwor CWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIs ICJvcHRpb25zIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxz ZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRl ZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRp b246LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIs IE9ialR5cGVBcnJheSwgZGVmaW5pdGlvbik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogZGVwYXJzZV9WaWV3U3RtdAorICoJCWRlcGFyc2Ug YSBWaWV3U3RtdAorICoKKyAqIEdpdmVuIGEgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVw bGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9WaWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlWaWV3U3RtdCAgICpub2RlID0gKFZpZXdTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisKKwlyZWxhdGlvbiA9 IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7 aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMiLCA0LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJ CQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vf c3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlv bi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSksCisJCQkJCQkgInF1ZXJ5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBwZ19nZXRfdmlld2RlZl9pbnRlcm5hbChvYmplY3RJZCkpOworCisJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgQ1JFQVRFIE1hdGVyaWFsaXplZCBWaWV3IHN0YXRlbWVudCwgaXQgaXMgYSB2YXJpYW50 IG9mCisgKiBDcmVhdGVUYWJsZUFzU3RtdAorICoKKyAqIE5vdGUgdGhhdCBDUkVBVEUgVEFCTEUg QVMgU0VMRUNUIElOVE8gY2FuIGFsc28gYmUgZGVwYXJzZWQgYnkKKyAqIGRlcGFyc2VfQ3JlYXRl VGFibGVBc1N0bXQgdG8gcmVtb3ZlIHRoZSBTRUxFQ1QgSU5UTyBjbGF1c2UuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgW01BVEVSSUFMSVpFRCBWSUVX IHwgVEFCTEVdICV7aWZfbm90X2V4aXN0c31zCisgKiAJCSV7aWRlbnRpdHl9RCAle2NvbHVtbnN9 cyBbJXtvbl9jb21taXR9c10gJXt0YWJsZXNwYWNlfXMKKyAqICAJCUFTICV7cXVlcnl9cyAle3dp dGhfbm9fZGF0YX1zIgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxl QXNTdG10X3ZhbmlsbGEoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl VGFibGVBc1N0bXQgKm5vZGUgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlOworCVJl bGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCU9ialRyZWUgICAgKnRt cDI7CisJY2hhcgkgICAqZm10OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKworCS8qIFJlamVjdCB1bnN1cHBvcnRlZCBjYXNlIHJpZ2h0IGF3YXkuICovCisJaWYg KCgoUXVlcnkgKikgKG5vZGUtPnF1ZXJ5KSktPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQor CQllbG9nKEVSUk9SLCAidW5pbXBsZW1lbnRlZCBkZXBhcnNlIG9mIENSRUFURSBUQUJMRSBBUyBF WEVDVVRFIik7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBJTlNFUlQgSU5UTyBpcyBkZXBhcnNlZCBh cyBDUkVBVEUgVEFCTEUgQVMuICBUaGV5IGFyZQorCSAqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50 IHN5bm9ueW1zIHNvIHRoZXJlIGlzIG5vIGhhcm0gZnJvbSB0aGlzLgorCSAqLworCWlmIChub2Rl LT5vYmp0eXBlID09IE9CSkVDVF9NQVRWSUVXKQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVu Y2V9cyBNQVRFUklBTElaRUQgVklFVyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiOwor CWVsc2UKKwkJZm10ID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EIjsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJ CQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5j ZV9zdHIobm9kZS0+aW50by0+cmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlmX25vdF9l eGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwkvKiBDT0xVTU5TIGNsYXVzZSAqLworCWlmIChub2Rl LT5pbnRvLT5jb2xOYW1lcykKKwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+aW50by0+Y29sTmFt ZXMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZp cnN0KGNlbGwpKSkpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtjb2x1bW5zOiwgfUkp IiwgMSwKKwkJCQkJCQkgImNvbHVtbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCX0KKwllbHNl CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5 cGVCb29sLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbHVtbnN9 cyIsIHRtcCk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVVNJ TkciKTsKKwlpZiAobm9kZS0+aW50by0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkg bm9kZS0+aW50by0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1w KTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwls aXN0ID0gTklMOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5vcHRpb25zKQorCXsKKwkJ RGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcDIgPSBk ZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcDIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29i amVjdCh0bXAsICIoJXt3aXRoOiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9jbGF1c2V9 cyIsIHRtcCk7CisKKwkvKiBPTiBDT01NSVQgY2xhdXNlLiAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBW SUVXIGRvZXNuJ3QgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFC TEUpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJ CSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPmludG8tPm9uQ29tbWl0KSk7CisKKwkvKiBU QUJMRVNQQUNFIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFICV7dGFi bGVzcGFjZX1JIik7CisJaWYgKG5vZGUtPmludG8tPnRhYmxlU3BhY2VOYW1lKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXAsICIle3RhYmxlc3BhY2V9cyIsICJ0YWJsZXNwYWNlIiwKKwkJCQkJ CQkgbm9kZS0+aW50by0+dGFibGVTcGFjZU5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxs X29iamVjdCh0bXAsICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w KTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXAp OworCisJLyogQWRkIHRoZSBxdWVyeSAqLworCUFzc2VydChJc0Eobm9kZS0+cXVlcnksIFF1ZXJ5 KSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiQVMgJXtxdWVyeX1zIiwgInF1ZXJ5IiwK KwkJCQkJCSBwZ19nZXRfcXVlcnlkZWYoKFF1ZXJ5ICopIG5vZGUtPnF1ZXJ5LCBmYWxzZSkpOwor CisJLyogQWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJ CQkgbm9kZS0+aW50by0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBh IHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1J ICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cyBPTgorICogJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJs ZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMgRk9SIEVBQ0gKKyAqICV7Zm9yX2VhY2h9cyAle3do ZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7 CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3Ry aWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7 CisJaW50CQkJdGduYXJnczsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3QJICAgKmV2ZW50 czsKKwljaGFyCSAgICp0cmlndGltaW5nOworCisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4oVHJp Z2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0gZ2V0X2NhdGFs b2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lkLCBvYmplY3RJ ZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisK Kwl0cmlndGltaW5nID0gbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9CRUZPUkUgPyAiQkVG T1JFIiA6CisJCW5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIgPyAiQUZURVIiIDoK KwkJbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9JTlNURUFEID8gIklOU1RFQUQgT0YiIDoK KwkJTlVMTDsKKwlpZiAoIXRyaWd0aW1pbmcpCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg dHJpZ2dlciB0aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMi LCAzLAorCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+aXNjb25zdHJh aW50ID8gIkNPTlNUUkFJTlQiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT50cmlnbmFtZSwKKwkJCQkJCSAidGltZSIsIE9ialR5cGVTdHJpbmcsIHRyaWd0aW1pbmcp OworCisJLyoKKwkgKiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZv ci4gIFRoZSBvdXRwdXQgaXMgYSBsaXN0OyBpbgorCSAqIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0 IGJlIGEgc3RyaW5nIHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJICogdGhlcmUncyBh biBVUERBVEUgd2l0aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEgSlNPTiBvYmplY3Qu CisJICovCisJZXZlbnRzID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVf SU5TRVJUKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIklO U0VSVCIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RFTEVURSkKKwkJZXZl bnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7CisJaWYg KG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZlbnRzID0gbGFwcGVu ZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlpZiAobm9kZS0+ZXZl bnRzICYgVFJJR0dFUl9UWVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5jb2x1bW5zID09IE5J TCkKKwkJeworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJV UERBVEUiKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp1cGRhdGU7CisJCQlM aXN0Q2VsbCAgICpjZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJLyoKKwkJCSAq IEN1cnJlbnRseSBvbmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0aGUgb3V0cHV0IEpT T04sIGJ1dAorCQkJICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhhdCB1c2VyIGNvZGUg Y2FuIGRpc3Rpbmd1aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2ZW50IHR5cGVzLgor CQkJICovCisJCQl1cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9GIiwgMSwKKwkJCQkJ CQkJCSJraW5kIiwgT2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJCQlmb3JlYWNoKGNl bGwsIG5vZGUtPmNvbHVtbnMpCisJCQl7CisJCQkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZhbChs Zmlyc3QoY2VsbCkpOworCisJCQkJY29scyA9IGxhcHBlbmQoY29scywgbmV3X3N0cmluZ19vYmpl Y3QoY29sbmFtZSkpOworCQkJfQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHVwZGF0ZSwgIiV7 Y29sdW1uczosIH1JIiwgY29scyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdf b2JqZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJl dCwgIiV7ZXZlbnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgdHJpZ0Zvcm0t PnRncmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7cmVsYXRpb259RCIs IHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJGUk9NIik7CisJaWYgKHRyaWdG b3JtLT50Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2JqVHJlZSAgICAqcmVsOworCisJCXJlbCA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ ICB0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9v YmosICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zyb21fdGFibGV9cyIs IHRtcF9vYmopOworCisJaWYgKG5vZGUtPmRlZmVycmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVm ZXJyZWQpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFM TFkgREVGRVJSRUQiKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2NvbnN0cmFpbnRf YXR0cnM6IH1zIiwgbGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJGT1IgRUFD SCAle2Zvcl9lYWNofXMiLCAiZm9yX2VhY2giLAorCQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDog IlNUQVRFTUVOVCIpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVOIik7CisJaWYgKG5v ZGUtPndoZW5DbGF1c2UpCisJeworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFs dWU7CisJCWJvb2wJCWlzbnVsbDsKKworCQl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFu dW1fcGdfdHJpZ2dlcl90Z3F1YWwsCisJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2Vy KSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCB0Z3F1YWwg Zm9yIHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7CisK KwkJd2hlbkNsYXVzZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIoJXtjbGF1c2V9cykiLCAiY2xhdXNl IiwKKwkJCQkJCQkgcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJ CQkJCQkgICB3aGVuQ2xhdXNlLAorCQkJCQkJCQkJCQkJCSAgIGZhbHNlKSk7CisJfQorCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7d2hlbn1zIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7 ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkJImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRy aWdGb3JtLT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhCSAgICp0Z2Fy Z3M7CisJCWNoYXIJICAgKmFyZ3N0cjsKKwkJYm9vbAkJaXNudWxsOworCQlpbnQJCQlmaW5keDsK KwkJaW50CQkJbGVudGdhcmdzOworCQljaGFyCSAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0 Qnl0ZWFQKGZhc3RnZXRhdHRyKHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90 Z2FyZ3MsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJ CQkJCSZpc251bGwpKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRnYXJn cyBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsK KwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJT SVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAw OyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAkJdGxlbjsKKworCQkJ LyogVmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRs ZW4gPSBzdHJsZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQor CQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMpIGZvciB0cmlnZ2Vy IFwiJXNcIiIsCisJCQkJCSBhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisKKwkJCXAgKz0g dGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIp OworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CS8q IG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9u fXMiLCB0bXBfb2JqKTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVVzZXJNYXBw aW5nU3RtdCAoQ1JFQVRFIFVTRVIgTUFQUElORykKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGlu ZyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJldHVybiBhbiBP YmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIFVTRVIgTUFQUElORyBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBT RVJWRVIgJXtzZXJ2ZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVVz ZXJNYXBwaW5nU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVV c2VyTWFwcGluZ1N0bXQgKm5vZGUgPSAoQ3JlYXRlVXNlck1hcHBpbmdTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlG b3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJl bCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsK KworCS8qCisJICogTG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2 ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAgPSBT ZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdXNlciBtYXBwaW5nIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7 CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJc2Vy dmVyID0gR2V0Rm9yZWlnblNlcnZlcihmb3JtLT51bXNlcnZlcik7CisKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQ1JFQVRFIFVTRVIgTUFQUElORyBGT1IgJXtyb2xlfVIgU0VSVkVSICV7c2VydmVy fUkgJXtnZW5lcmljX29wdGlvbnN9cyIsIDMsCisJCQkJCQkgInJvbGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNlciksCisJCQkJCQkg InNlcnZlciIsIE9ialR5cGVTdHJpbmcsIHNlcnZlci0+c2VydmVybmFtZSwKKwkJCQkJCSAiZ2Vu ZXJpY19vcHRpb25zIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMo bm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBk ZXBhcnNlX0FsdGVyVXNlck1hcHBpbmcKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGluZyBPSUQg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVl IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQUxURVIgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyVXNlck1hcHBpbmdTdG10ICpub2RlID0g KEFsdGVyVXNlck1hcHBpbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJ UmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGluZyBmb3Jt OworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNlck1hcHBp bmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICogTG9va3VwIG9iamVj dCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJy ZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJ TkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBw aW5nIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdfdXNl cl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJc2VydmVyID0gR2V0Rm9yZWlnblNlcnZlcihm b3JtLT51bXNlcnZlcik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVVNFUiBNQVBQ SU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwg MywKKwkJCQkJCSAicm9sZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3JvbGVfaWQoZm9ybS0+dW11c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywg c2VydmVyLT5zZXJ2ZXJuYW1lLAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9j ayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTdGF0c1N0bXQg KEFMVEVSIFNUQVRJU1RJQ1MpCisgKgorICogR2l2ZW4gYSBhbHRlciBzdGF0aXN0aWNzIE9JRCBh bmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBBTFRFUiBTVEFUSVNUSUNTICV7aWRlbnRpdHl9RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1u CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTdGF0c1N0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJTdGF0c1N0bXQgKm5vZGUgPSAoQWx0ZXJT dGF0c1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJdHA7 CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXRmb3JtOworCisJaWYgKCFub2RlLT5zdHhzdGF0 dGFyZ2V0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIExvb2t1cCBvYmplY3QgaW4gdGhlIGNhdGFs b2cgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAldSIsIG9iamVjdElk KTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHRwKTsK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU1RBVElTVElDUyAle2lkZW50aXR5fUQgU0VU IFNUQVRJU1RJQ1MgJXt0YXJnZXR9biIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFtZSkpLAorCQkJCQkJ ICJ0YXJnZXQiLCBPYmpUeXBlSW50ZWdlciwgbm9kZS0+c3R4c3RhdHRhcmdldCk7CisKKwlSZWxl YXNlU3lzQ2FjaGUodHApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVm cmVzaE1hdFZpZXdTdG10IChSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXKQorICoKKyAqIEdpdmVu IGEgbWF0ZXJpYWxpemVkIHZpZXcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIHJlZnJlc2ggY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyAl e2NvbmN1cnJlbnRseX1zICV7aWRlbnRpdHl9RCAle3dpdGhfbm9fZGF0YX1zCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9IChSZWZyZXNoTWF0 Vmlld1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0 bXA7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyAl e2NvbmN1cnJlbnRseX1zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImNvbmN1cnJlbnRseSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFki IDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBv YmplY3RJZCkpOworCisJLyogQWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsCisJCQkJCQkgbm9kZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10LgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBQT0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGljeW5h bWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxU RVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURSAle2NvbG5hbWV9SSBUTyAl e25ld25hbWV9SSAle2Nhc2NhZGV9cworICogT1IKKyAqIEFMVEVSIG9ianR5cGUgJXtpZl9leGlz dHN9cyAlJXtpZGVudGl0eX1EIFJFTkFNRSBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1l fUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1l fUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21ldGhv ZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBTQ0hFTUEgJXtpZGVu dGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFJVTEUgJXtydWxl bmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBB TFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7 bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJSV7 bmV3bmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpub2Rl ID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlv bglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8qCisJICogSW4gYW4gQUxURVIgLi4g UkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJ ICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVy IHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBn b25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4g IE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZwor CSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5v dCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChub2Rl LT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX0lO REVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJY2Fz ZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVz cGFjZShyZWxhdGlvbik7CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBl fXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwK KwkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0cmluZ2lmeV9v Ymp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJICJpZl9leGlzdHMiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDog IiIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0 aW9uLT5yZWxuYW1lKSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQl7CisJCQkJ SGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCQkJCVJlbGF0 aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YSBrZXk7CisJCQkJU3lzU2NhbkRlc2Mgc2Nh bjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVtX3BnX3BvbGljeV9vaWQs CisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCU9iamVjdElk R2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkJCSAgTlVMTCwg MSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwkJCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHBvbGljeSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJ ZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisK KwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWZfZXhpc3RzfXMgJXtw b2xpY3luYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJ CQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+bWlz c2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIsCisJCQkJCQkJCQkgInBvbGljeW5hbWUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCks CisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPm5l d25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJCQkJcmVsYXRpb25fY2xvc2Uo cGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9IHJl bGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVt YUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJCQlpZiAobm9kZS0+cmVu YW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFICV7Y29sbmFtZX1JIiwgMiwK KwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRp b24tPnJlbG5hbWUpLAorCQkJCQkJCQkJICJjb2xuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ c3VibmFtZSk7CisJCQllbHNlCisJCQl7CisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS ICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBlLCBmYWxzZSkpOwor CisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLworCQkJ CWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJCSAiaWZfZXhpc3RzIiwK KwkJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJl bGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiUkVOQU1F IENPTFVNTiAle2NvbG5hbWV9SSIsCisJCQkJCQkJCQkgImNvbG5hbWUiLCBub2RlLT5zdWJuYW1l KTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtuZXduYW1lfUki LCAibmV3bmFtZSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUtPnJl bmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAx LAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJCQkJbm9k ZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQUdHUkVH QVRFOgorCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJ CXsKKwkJCQljaGFyCSAgICppZGVudDsKKwkJCQlIZWFwVHVwbGUJcHJvY3R1cDsKKwkJCQlGb3Jt X3BnX3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlBc3NlcnQo SXNBKG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9ICgoT2Jq ZWN0V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oYWRk cmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJ CQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9J RCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9w Z19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsg Zm9yIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMl cyIsCisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25h bWUocHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3Qo aWRlbnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmpl Y3RJZCwgdHJ1ZSkpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlw ZX1zICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJv Ymp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywgaWRlbnQsCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXdu YW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOwor CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9wY1R1cDsKKwkJ CQlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQlj aGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wY25hbWU7CisKKwkJCQlvcGNUdXAg PSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0 SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJ IGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdF VFNUUlVDVChvcGNUdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAq KSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAq LworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZv cGNuYW1lKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAl e2lkZW50aXR5fUQgVVNJTkcgJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUki LCA0LAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo b3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBvcGNuYW1lKSwKKwkJCQkJ CQkJCSAiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfYW1fbmFt ZShvcGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJCX0K KwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBUdXBs ZQlvcGZUdXA7CisJCQkJSGVhcFR1cGxlCWFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkgb3Bm Rm9ybTsKKwkJCQlGb3JtX3BnX2FtCWFtRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJ CQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7CisKKwkJCQlvcGZU dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBh ZGRyZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNU UlVDVChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVj dElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFj Y2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisK KwkJCQlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5h bWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8q IERlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5h bWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFVTSU5HICV7aW5kZXhfbWV0 aG9kfXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlw ZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkJCSAgb3BmbmFtZSksCisJCQkJCQkJCQkgImluZGV4X21ldGhvZCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkgIm5l d25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXND YWNoZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJCQl9CisJCQlicmVh azsKKworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAyLAorCQkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQlj YXNlIE9CSkVDVF9GRFc6CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQljYXNlIE9CSkVDVF9G T1JFSUdOX1NFUlZFUjoKKwkJY2FzZSBPQkpFQ1RfUFVCTElDQVRJT046CisJCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAle25l d25hbWV9SSIsIDMsCisJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgc3RyVmFsKGNhc3ROb2RlKFN0cmlu Zywgbm9kZS0+b2JqZWN0KSksCisJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXsKKwkJ CQlIZWFwVHVwbGUJcmV3clR1cDsKKwkJCQlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJCQkJ UmVsYXRpb24JcGdfcmV3cml0ZTsKKworCQkJCXBnX3Jld3JpdGUgPSByZWxhdGlvbl9vcGVuKFJl d3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXJld3JUdXAgPSBnZXRfY2F0 YWxvZ19vYmplY3RfYnlfb2lkKHBnX3Jld3JpdGUsIEFudW1fcGdfcmV3cml0ZV9vaWQsIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNU KHJld3JUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFJVTEUgJXtydWxl bmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJ CQkJICJydWxlbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSByZXdyRm9ybS0+ ZXZfY2xhc3MpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3 bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQl7CisJCQkJSGVh cFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCQkJCVJlbGF0 aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2VyID0gcmVsYXRpb25fb3BlbihUcmlnZ2Vy UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl0cmlnVHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5j bGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmln Z2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25l d25hbWV9SSIsIDMsCisJCQkJCQkJCQkgInRyaWdnZXJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3JlbGlkKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJcmVsYXRpb25fY2xvc2UocGdfdHJp Z2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNU X0NPTExBVElPTjoKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VYVDoKKwkJY2FzZSBPQkpFQ1Rf VFlQRToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgor CQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQlj YXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJ CQl7CisJCQkJSGVhcFR1cGxlCW9ialR1cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURh dHVtCQlvYmpuc3A7CisJCQkJYm9vbAkJaXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1l c3BhY2U7CisJCQkJTGlzdAkgICAqaWRlbnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmpl Y3QpOworCisJCQkJLyogT2J0YWluIG9iamVjdCB0dXBsZSAqLworCQkJCWNhdGFsb2cgPSByZWxh dGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlvYmpUdXAg PSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIGdldF9vYmplY3RfYXR0bnVtX29p ZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCS8qIE9idGFpbiBu YW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVz cGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihvYmpUdXAs IEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLCAm aXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxM IG5hbWVzcGFjZSIpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlw ZX1zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJv Ymp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChv Ympuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSksCisJCQkJ CQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxh dGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIs IG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIgLi4uIERFUEVORFMgT04gLi4uKS4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgSU5ERVggJXtpZGVudGl0eX1EICV7bm99 cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpub2RlID0gKEFsdGVyT2JqZWN0RGVwZW5kc1N0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisKKwlpZiAobm9kZS0+ b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJeworCQlPYmpUcmVlICAgICpxdWFsaWZpZWQ7 CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCQlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRp b24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJl bG5hbWUpOworCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgSU5ERVggJXtpZGVudGl0eX1EICV7bm99cyBE RVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsIHF1YWxpZmllZCwKKwkJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkgbm9kZS0+cmVtb3ZlID8gIk5PIiA6ICIiLAorCQkJCQkJCSAibmV3bmFtZSIsIE9i alR5cGVTdHJpbmcsIHN0clZhbChub2RlLT5leHRuYW1lKSk7CisJfQorCWVsc2UKKwkJZWxvZyhM T0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJ IChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog SGVscGVyIGZvciBkZXBhcnNlX0NyZWF0ZVB1YmxpY2F0aW9uU3RtdCBhbmQgZGVwYXJzZV9BbHRl clB1YmxpY2F0aW9uU3RtdC4KKyAqLworc3RhdGljIHZvaWQKK2RlcGFyc2VfUHVibGljYXRpb25P YmplY3RzKExpc3QgKnJlbHMsIExpc3QgKnNjaGVtYXMsCisJCQkJCQkgICBMaXN0ICoqcHVicmVs cywgTGlzdCAqKnB1YnNjaGVtYXMpCit7CisJTGlzdENlbGwgICAqbGMxOworCUxpc3RDZWxsICAg KmxjMjsKKworCSpwdWJyZWxzID0gTklMOworCSpwdWJzY2hlbWFzID0gTklMOworCisJZm9yZWFj aChsYzEsIHJlbHMpCisJeworCQlPYmpUcmVlICAgICp0bXBfcmVsOworCQlMaXN0CSAgICpjb2xs aXN0ID0gTklMOworCQlSZWxhdGlvbglyZWxhdGlvbjsKKworCQlwdWJsaWNhdGlvbl9yZWwgKnB1 Yl9yZWwgPSAocHVibGljYXRpb25fcmVsICopIGxmaXJzdChsYzEpOworCisJCXJlbGF0aW9uID0g cmVsYXRpb25fb3BlbihwdWJfcmVsLT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQl0bXBf cmVsID0gbmV3X29ianRyZWVfVkEoIiV7dGFibGVuYW1lfUQiLCAxLAorCQkJCQkJCQkgInRhYmxl bmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSkpOworCisJCWlmIChwdWJfcmVsLT5jb2x1bW5MaXN0 KQorCQl7CisJCQlmb3JlYWNoKGxjMiwgcHViX3JlbC0+Y29sdW1uTGlzdCkKKwkJCQljb2xsaXN0 ID0gbGFwcGVuZChjb2xsaXN0LAorCQkJCQkJCQkgIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChs Zmlyc3QobGMyKSkpKTsKKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfcmVsLCAiKCV7Y29s czosIH1zKSIsIGNvbGxpc3QpOworCQl9CisKKwkJaWYgKHB1Yl9yZWwtPndoZXJlQ2xhdXNlKQor CQl7CisJCQlMaXN0CSAgICpjb250ZXh0OworCQkJY2hhcgkgICAqd2hlcmVDbGF1c2U7CisKKwkJ CWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSwKKwkJCQkJCQkJCQkgIHB1Yl9yZWwtPnJlbGlkKTsKKworCQkJLyogRGVwYXJzZSB0 aGUgZXhwcmVzc2lvbiAqLworCQkJd2hlcmVDbGF1c2UgPQorCQkJCWRlcGFyc2VfZXhwcmVzc2lv bihwdWJfcmVsLT53aGVyZUNsYXVzZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wX3JlbCwgIldIRVJFICV7d2hlcmV9cyIsICJ3aGVyZSIsIHdo ZXJlQ2xhdXNlKTsKKwkJfQorCisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJCSpwdWJyZWxzID0gbGFwcGVuZCgqcHVicmVscywgbmV3X29iamVjdF9vYmpl Y3QodG1wX3JlbCkpOworCX0KKworCWZvcmVhY2gobGMxLCBzY2hlbWFzKQorCQkqIHB1YnNjaGVt YXMgPSBsYXBwZW5kKCpwdWJzY2hlbWFzLAorCQkJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KGdl dF9uYW1lc3BhY2VfbmFtZShsZmlyc3Rfb2lkKGxjMSkpKSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ1JFQVRFIFBVQkxJQ0FUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQ1JFQVRFIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBGT1IgQUxMIFRBQkxFUyBXSVRIICgl e3dpdGg6LCB9cykKKyAqCU9SCisgKiBDUkVBVEUgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIEZP UiBUQUJMRSAle3RhYmxlczosIH1zIFdJVEggKCV7d2l0aDosIH1zKQorICoJT1IKKyAqIENSRUFU RSBQVUJMSUNBVElPTiAle2lkZW50aXR5fXMgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgJXtzY2hlbWFz OiwgfXMKKyAqIFdJVEggKCV7d2l0aDosIH1zKQorICoJT1IKKyAqIENSRUFURSBQVUJMSUNBVElP TiAle2lkZW50aXR5fXMgRk9SIFRBQkxFICV7dGFibGVzOiwgfXMsCisgKiBUQUJMRVMgSU4gU0NI RU1BICV7c2NoZW1hczosIH1zIFdJVEggKCV7d2l0aDosIH1zKQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVB1YmxpY2F0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQp Cit7CisJT2lkCQkJb2JqZWN0SWQgPSBjbWQtPmQuY3JlYXRlcHViLmFkZHJlc3Mub2JqZWN0SWQ7 CisJQ3JlYXRlUHVibGljYXRpb25TdG10ICpub2RlID0gKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq KSBjbWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpjcmVhdGVQdWI7CisJSGVhcFR1cGxlCXB1 YnR1cDsKKwlGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5J TDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3QJICAgKnJlbGxpc3QgPSBOSUw7CisJTGlzdAkg ICAqc2NobGlzdCA9IE5JTDsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1hbmRzIGdlbmVy YXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24p CisJCXJldHVybiBOVUxMOworCisJLyogRmluZCB0aGUgcGdfcHVibGljYXRpb24gZW50cnkgYW5k IG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb24gKi8KKwlwdWJ0dXAgPSBTZWFyY2hTeXND YWNoZTEoUFVCTElDQVRJT05PSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocHVidHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHB1YmxpY2F0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlw dWJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb24pIEdFVFNUUlVDVChwdWJ0dXApOworCXB1YmZv cm0tPm9pZCA9IHB1YmZvcm0tPm9pZDsKKworCWNyZWF0ZVB1YiA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHki LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgIE5hbWVTdHIocHViZm9ybS0+cHVibmFtZSkpOwor CisJLyogRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24gKi8KKwlpZiAocHViZm9ybS0+cHViYWxs dGFibGVzKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVQdWIsICJGT1IgQUxMIFRBQkxF UyIpOworCWVsc2UKKwl7CisJCWRlcGFyc2VfUHVibGljYXRpb25PYmplY3RzKGNtZC0+ZC5jcmVh dGVwdWIucmVscywKKwkJCQkJCQkJICAgY21kLT5kLmNyZWF0ZXB1Yi5zY2hlbWFzLAorCQkJCQkJ CQkgICAmcmVsbGlzdCwgJnNjaGxpc3QpOworCisJCS8qIEFwcGVuZCB0aGUgcHVibGljYXRpb24g dGFibGVzICovCisJCWlmIChyZWxsaXN0KQorCQkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVQ dWIsICJGT1IgVEFCTEUgJXt0YWJsZXM6LCB9cyIsIHJlbGxpc3QpOworCisJCS8qIEFwcGVuZCB0 aGUgcHVibGljYXRpb24gc2NoZW1hcyAqLworCQlpZiAoc2NobGlzdCkKKwkJeworCQkJaWYgKHJl bGxpc3QpCisJCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlUHViLCAiLCBUQUJMRVMgSU4g U0NIRU1BIik7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlUHViLCAi Rk9SIFRBQkxFUyBJTiBTQ0hFTUEiKTsKKworCQkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVQ dWIsICIle3NjaGVtYXM6LCB9cyIsIHNjaGxpc3QpOworCQl9CisJfQorCisJLyogV0lUSCBjbGF1 c2UgKi8KKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlICAgICp0 bXBfb2JqOworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisK KwkJdG1wX29iaiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJh eV9vYmplY3QoY3JlYXRlUHViLCAiV0lUSCAoJXt3aXRoOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxl YXNlU3lzQ2FjaGUocHVidHVwKTsKKwlyZXR1cm4gY3JlYXRlUHViOworfQorCisvKgorICogRGVw YXJzZSBhIEFMVEVSIFBVQkxJQ0FUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIEFERHxEUk9QfFNFVCBUQUJMRSAl e3RhYmxlczosIH1zCisgKiAJT1IKKyAqIEFMVEVSIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBB RER8RFJPUHxTRVQgVEFCTEVTIElOIFNDSEVNQSAle3NjaGVtYXM6LCB9cworICoJT1IKKyAqIEFM VEVSIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBBRER8RFJPUHxTRVQgVEFCTEUgJXt0YWJsZXM6 LCB9cywKKyAqIFRBQkxFUyBJTiBTQ0hFTUEgJXtzY2hlbWFzOiwgfXMKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpj bWQpCit7CisJT2lkCQkJb2JqZWN0SWQgPSBjbWQtPmQuY3JlYXRlcHViLmFkZHJlc3Mub2JqZWN0 SWQ7CisJQWx0ZXJQdWJsaWNhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJQdWJsaWNhdGlvblN0bXQg KikgY21kLT5wYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqYWx0ZXJwdWI7CisJSGVhcFR1cGxlCXB1 YnR1cDsKKwlGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm07CisJTGlzdENlbGwgICAqY2VsbDsK KwlMaXN0CSAgICpyZWxsaXN0ID0gTklMOworCUxpc3QJICAgKnNjaGxpc3QgPSBOSUw7CisKKwkv KiBEb24ndCBkZXBhcnNlIHNxbCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0 ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCS8q IEZpbmQgdGhlIHBnX3B1YmxpY2F0aW9uIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5n IHJlbGF0aW9uICovCisJcHVidHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHB1YnR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwdWJsaWNhdGlvbiB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNh dGlvbikgR0VUU1RSVUNUKHB1YnR1cCk7CisKKwlwdWJmb3JtLT5vaWQgPSBwdWJmb3JtLT5vaWQ7 CisKKwlhbHRlcnB1YiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50 aXR5fXMiLCAxLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkg IE5hbWVTdHIocHViZm9ybS0+cHVibmFtZSkpOworCisJaWYgKG5vZGUtPm9wdGlvbnMpCisJewor CQkvKiBTRVQgb3B0aW9uICovCisJCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwkJZm9yZWFjaChj ZWxsLCBub2RlLT5vcHRpb25zKQorCQl7CisJCQlPYmpUcmVlICAgICp0bXBfb2JqOworCQkJRGVm RWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCQl0bXBfb2JqID0g ZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQl9CisKKwkJLyogQXBwZW5kIHRoZSBwdWJsaWNh dGlvbiBvcHRpb25zICovCisJCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJwdWIsICJTRVQgKCV7 b3B0aW9uczosIH1zKSIsIGxpc3QpOworCisJCVJlbGVhc2VTeXNDYWNoZShwdWJ0dXApOworCQly ZXR1cm4gYWx0ZXJwdWI7CisJfQorCisJaWYgKG5vZGUtPmFjdGlvbiA9PSBBUF9BZGRPYmplY3Rz KQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlcnB1YiwgIkFERCIpOworCWVsc2UgaWYgKG5v ZGUtPmFjdGlvbiA9PSBBUF9Ecm9wT2JqZWN0cykKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0 ZXJwdWIsICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlcnB1Yiwg IlNFVCIpOworCisJZGVwYXJzZV9QdWJsaWNhdGlvbk9iamVjdHMoY21kLT5kLmFsdGVycHViLnJl bHMsIGNtZC0+ZC5hbHRlcnB1Yi5zY2hlbWFzLAorCQkJCQkJCSAgICZyZWxsaXN0LCAmc2NobGlz dCk7CisKKwkvKiBBcHBlbmQgdGhlIHB1YmxpY2F0aW9uIHRhYmxlcyAqLworCWlmIChyZWxsaXN0 KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVycHViLCAiVEFCTEUgJXt0YWJsZXM6LCB9cyIs IHJlbGxpc3QpOworCisJaWYgKHNjaGxpc3QpCisJeworCQlpZiAoY21kLT5kLmNyZWF0ZXB1Yi5y ZWxzKQorCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJwdWIsICIsIFRBQkxFUyBJTiBTQ0hF TUEiKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJwdWIsICJUQUJMRVMg SU4gU0NIRU1BIik7CisKKwkJLyogQXBwZW5kIHRoZSBwdWJsaWNhdGlvbiBzY2hlbWFzICovCisJ CWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJwdWIsICIle3NjaGVtYXM6LCB9cyIsIHNjaGxpc3Qp OworCX0KKworCVJlbGVhc2VTeXNDYWNoZShwdWJ0dXApOworCXJldHVybiBhbHRlcnB1YjsKK30K KworLyoKKyAqIERlcGFyc2UgYSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgorICoKKyAqIEdpdmVu IGEgcnVsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMg T04gJXtldmVudH1zIFRPICV7dGFibGV9RAorICogJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3Rl YWR9cyAle2FjdGlvbnM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICAgKm5vZGUg PSAoUnVsZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXA7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07 CisJSGVhcFR1cGxlCXJld3JUdXA7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBr ZXk7CisJRGF0dW0JCWV2X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxs OworCWNoYXIJICAgKnF1YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0ID0g TklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZXZlbnRfc3RyOworCisJcGdfcmV3 cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ U2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwKKwkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jld3JpdGUsIFJld3JpdGVPaWRJbmRl eElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJcmV3clR1cCA9IHN5c3RhYmxl X2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIHdpdGggT0lEICV1 IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNU UlVDVChyZXdyVHVwKTsKKworCWV2ZW50X3N0ciA9IG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1Qg PyAiU0VMRUNUIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJ CW5vZGUtPmV2ZW50ID09IENNRF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCW5vZGUtPmV2ZW50ID09 IENNRF9JTlNFUlQgPyAiSU5TRVJUIiA6IE5VTEw7CisJQXNzZXJ0KGV2ZW50X3N0ciAhPSBOVUxM KTsKKworCWV2X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2 X3F1YWwsCisJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsK Kwlldl9hY3Rpb25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9h Y3Rpb24sCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsK KworCXBnX2dldF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAm YWN0aW9ucyk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKHF1YWwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiLCAiY2xhdXNlIiwgcXVhbCk7 CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMi KTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCisJaWYgKGFjdGlvbnMgPT0gTklM KQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiTk9USElORyIpKTsK KwllbHNlCisJeworCQlmb3JlYWNoKGNlbGwsIGFjdGlvbnMpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdChsZmlyc3QoY2VsbCkpKTsKKwl9CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIFJVTEUgJXtvcl9yZXBsYWNlfXMgJXtpZGVudGl0eX1JIEFTIE9O ICV7ZXZlbnR9cyBUTyAle3RhYmxlfUQgJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyAl e2FjdGlvbnM6LCB9cyIsIDcsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5ydWxlbmFtZSwKKwkJCQkJCSAiZXZlbnQiLCBPYmpU eXBlU3RyaW5nLCBldmVudF9zdHIsCisJCQkJCQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZfY2xhc3MpLAorCQkJCQkJICJ3aGVyZV9jbGF1c2UiLCBP YmpUeXBlT2JqZWN0LCB0bXAsCisJCQkJCQkgImluc3RlYWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIG5vZGUtPmluc3RlYWQgPyAiSU5TVEVBRCIgOiAiQUxTTyIsCisJCQkJCQkgImFjdGlvbnMi LCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJs ZV9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmFuc2Zvcm1TdG10IChDUkVBVEUgVFJBTlNGT1JN KS4KKyAqCisgKiBHaXZlbiBhIHRyYW5zZm9ybSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRF IFRSQU5TRk9STSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtv cl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFn ZX1JCisgKiAoIEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cywgVE8gU1FMIFdJ VEggRlVOQ1RJT04KKyAqICV7c2lnbmF0dXJlX3RvZn1zICkKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNyZWF0ZVRyYW5zZm9ybVN0bXQgKm5vZGUgPSAoQ3JlYXRlVHJhbnNmb3JtU3Rt dCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnNpZ25hdHVy ZTsKKwlIZWFwVHVwbGUJdHJmVHVwOworCUhlYXBUdXBsZQlsYW5nVHVwOworCUhlYXBUdXBsZQlw cm9jVHVwOworCUZvcm1fcGdfdHJhbnNmb3JtIHRyZkZvcm07CisJRm9ybV9wZ19sYW5ndWFnZSBs YW5nRm9ybTsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJaW50CQkJaTsKKworCS8qIEdldCB0 aGUgcGdfdHJhbnNmb3JtIHR1cGxlICovCisJdHJmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRSRk9J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 cmZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHJhbnNmb3Jt IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHJmRm9ybSA9IChGb3JtX3BnX3RyYW5z Zm9ybSkgR0VUU1RSVUNUKHRyZlR1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdf bGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHRy ZkZvcm0tPnRyZmxhbmcpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwK KwkJCSB0cmZGb3JtLT50cmZsYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBH RVRTVFJVQ1QobGFuZ1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3Jf cmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9 SSIsIDMsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUt PnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAidHlwZW5hbWUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkgdHJmRm9ybS0+dHJmdHlwZSksCisJCQkJCQkgImxhbmd1YWdlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwkv KiBEZXBhcnNlIHRoZSB0cmFuc2Zvcm1fZWxlbWVudF9saXN0ICovCisJaWYgKE9pZElzVmFsaWQo dHJmRm9ybS0+dHJmZnJvbXNxbCkpCisJeworCQlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisKKwkJ LyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlIGZvciB0aGUgRlJPTSBGVU5DVElPTiAqLworCQlwcm9j VHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIHRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZGb3JtLT50cmZm cm9tc3FsKTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7 CisKKwkJLyoKKwkJICogQ1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24g c2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UKKwkJICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBP aWRzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQor CQl7CisJCQlPYmpUcmVlICAgICpwYXJhbV9vYmo7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1 ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmpl Y3QocGFyYW1fb2JqKSk7CisJCX0KKworCQlzaWduYXR1cmUgPSBuZXdfb2JqdHJlZV9WQSgiJXtp ZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1zKSIsIDIsCisJCQkJCQkJCSAgICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSAgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9j Rm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihwcm9jRm9ybS0+cHJv bmFtZSkpLAorCQkJCQkJCQkgICAiYXJndW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOwor CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIihGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7 c2lnbmF0dXJlfXMiLAorCQkJCQkJCSBzaWduYXR1cmUpOworCQlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisJfQorCWlmIChPaWRJc1ZhbGlkKHRyZkZvcm0tPnRyZnRvc3FsKSkKKwl7CisJCUxp c3QJICAgKnBhcmFtcyA9IE5JTDsKKworCQkvKiBBcHBlbmQgYSAnLCcgaWYgdHJmZnJvbXNxbCBp cyBwcmVzZW50LCBlbHNlIGFwcGVuZCAnKCcgKi8KKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0 LCBPaWRJc1ZhbGlkKHRyZkZvcm0tPnRyZmZyb21zcWwpID8gIiwiIDogIigiKTsKKworCQkvKiBH ZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBUTyBGVU5DVElPTiAqLworCQlwcm9jVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIHRyZkZvcm0tPnRyZnRvc3FsKTsKKwkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkgdHJmRm9ybS0+dHJmdG9zcWwpOwor CQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgor CQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUg c28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9nIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAq LworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9i alRyZWUgICAgKnBhcmFtX29iaiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQkJcGFyYW1fb2JqID0g bmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJn dHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19v YmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCQl9CisKKwkJc2lnbmF0dXJlID0gbmV3X29ianRy ZWVfVkEoIiV7aWRlbnRpdHl9RCAoJXthcmd1bWVudHM6LCB9cykiLCAyLAorCQkJCQkJCQkgICAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgICBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCU5hbWVTdHIocHJv Y0Zvcm0tPnByb25hbWUpKSwKKwkJCQkJCQkJICAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwg cGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJUTyBTUUwgV0lUSCBGVU5D VElPTiAle3NpZ25hdHVyZV90b2Z9cyIsCisJCQkJCQkJIHNpZ25hdHVyZSk7CisJCVJlbGVhc2VT eXNDYWNoZShwcm9jVHVwKTsKKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICIpIik7 CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRyZlR1cCk7 CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb21tZW50U3RtdCB3aGVuIGl0 IHBlcnRhaW5zIHRvIGEgY29uc3RyYWludC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ09N TUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9cyBPTiBbRE9NQUlOXSAle3BhcmVudG9ian1z IElTICV7Y29tbWVudH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tbWVudE9u Q29uc3RyYWludFNtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21tZW50 U3RtdCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0 OworCUhlYXBUdXBsZQljb25zdHJUdXA7CisJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07 CisJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJQXNzZXJ0KG5vZGUtPm9ianR5cGUgPT0gT0JKRUNU X1RBQkNPTlNUUkFJTlQgfHwgbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCk7 CisKKwljb25zdHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNv bnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uc3RyVHVwKTsKKwor CWlmIChPaWRJc1ZhbGlkKGNvbnN0ckZvcm0tPmNvbnJlbGlkKSkKKwkJT2JqZWN0QWRkcmVzc1Nl dChhZGRyLCBSZWxhdGlvblJlbGF0aW9uSWQsIGNvbnN0ckZvcm0tPmNvbnJlbGlkKTsKKwllbHNl CisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgVHlwZVJlbGF0aW9uSWQsIGNvbnN0ckZvcm0tPmNv bnR5cGlkKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDT01NRU5UIE9OIENPTlNUUkFJTlQg JXtpZGVudGl0eX1zIE9OICV7ZG9tYWlufXMgJXtwYXJlbnRvYmp9cyIsIDMsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChOYW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5h bWUpKSwKKwkJCQkJCSAiZG9tYWluIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAobm9kZS0+b2Jq dHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCkgPyAiRE9NQUlOIiA6ICIiLAorCQkJCQkJICJw YXJlbnRvYmoiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldE9iamVjdElkZW50aXR5KCZhZGRy LCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBjb21tZW50IGNsYXVzZSAqLworCWFwcGVuZF9saXRl cmFsX29yX251bGwocmV0LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21tZW50KTsKKworCVJl bGVhc2VTeXNDYWNoZShjb25zdHJUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIENvbW1lbnRTdG10IChDT01NRU5UIE9OIC4uLikuCisgKgorICogR2l2ZW4gdGhlIG9i amVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh bgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGNvbW1lbnQgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ09NTUVOVCBPTiAle29ianR5cGV9cyAle2lkZW50aXR5fXMgSVMg JXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21tZW50U3RtdChP YmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21tZW50U3RtdCAq bm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCWNo YXIJICAgKmlkZW50aXR5OworCisJLyoKKwkgKiBDb25zdHJhaW50cyBhcmUgc3VmZmljaWVudGx5 IGRpZmZlcmVudCB0aGF0IGl0IGlzIGVhc2llciB0byBoYW5kbGUgdGhlbQorCSAqIHNlcGFyYXRl bHkuCisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQgfHwK KwkJbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCkKKwl7CisJCUFzc2VydChh ZGRyZXNzLmNsYXNzSWQgPT0gQ29uc3RyYWludFJlbGF0aW9uSWQpOworCQlyZXR1cm4gZGVwYXJz ZV9Db21tZW50T25Db25zdHJhaW50U210KGFkZHJlc3Mub2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ fQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNPTU1FTlQgT04gJXtvYmp0eXBlfXMiLCAxLAor CQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAoY2hhciAqKSBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSkpOworCisJLyoKKwkgKiBBZGQgdGhlIG9i amVjdCBpZGVudGl0eSBjbGF1c2UuICBGb3IgemVybyBhcmd1bWVudCBhZ2dyZWdhdGVzIHdlIG5l ZWQKKwkgKiB0byBhZGQgdGhlICgqKSBiaXQ7IGluIGFsbCBvdGhlciBjYXNlcyB3ZSBjYW4ganVz dCB1c2UKKwkgKiBnZXRPYmplY3RJZGVudGl0eS4KKwkgKgorCSAqIFhYWCBzaG91bGRuJ3Qgd2Ug aW5zdGVhZCBmaXggdGhlIG9iamVjdCBpZGVudGl0aWVzIGZvciB6ZXJvLWFyZ3VtZW50CisJICog YWdncmVnYXRlcz8KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfQUdHUkVHQVRF KQorCXsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwor CQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRk cmVzcy5vYmplY3RJZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1 IiwKKwkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKHByb2NUdXApOworCQlpZiAocHJvY0Zvcm0tPnByb25hcmdzID09IDApCisJCQlp ZGVudGl0eSA9IHBzcHJpbnRmKCIlcygqKSIsCisJCQkJCQkJCXF1b3RlX3F1YWxpZmllZF9pZGVu dGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJ CQkJCQkJCQkJICAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZWxzZQorCQkJaWRl bnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCQlSZWxlYXNlU3lz Q2FjaGUocHJvY1R1cCk7CisJfQorCWVsc2UKKwkJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0 eSgmYWRkcmVzcywgZmFsc2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZGVu dGl0eX1zIiwgImlkZW50aXR5IiwgaWRlbnRpdHkpOworCisJLyogQWRkIHRoZSBjb21tZW50IGNs YXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVvdGVkIGxpdGVyYWwuICovCisJYXBwZW5k X2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIsIG5vZGUtPmNvbW1lbnQpOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBTZWNMYWJlbFN0bXQgKFNFQ1VS SVRZIExBQkVMKQorICoKKyAqIEdpdmVuIHRoZSBPYmplY3RBZGRyZXNzIG9mIHRoZSB0YXJnZXQg b2JqZWN0IGFuZCB0aGUgcGFyc2UgdHJlZSBvZiB0aGUKKyAqIFNFQ1VSSVRZIExBQkVMIGNvbW1h bmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgU0VDVVJJVFkgTEFCRUwKKyAq IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFQ1VSSVRZIExBQkVMIEZPUiAl e3Byb3ZpZGVyfXMgT04gJXtvYmplY3RfdHlwZV9uYW1lfXMgJXtpZGVudGl0eX1zIElTICV7bGFi ZWx9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1NlY0xhYmVsU3RtdChPYmplY3RB ZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlTZWNMYWJlbFN0bXQgKm5vZGUg PSAoU2VjTGFiZWxTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZXQ7CisKKwlBc3Nl cnQobm9kZS0+cHJvdmlkZXIpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFQ1VSSVRZIExB QkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIiwgMywKKwkJ CQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wcm92aWRlciwKKwkJCQkJCSAi b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ b2JqdHlwZSwgZmFsc2UpLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGdldE9i amVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBsYWJlbCBjbGF1 c2U7IGNhbiBiZSBlaXRoZXIgTlVMTCBvciBhIHF1b3RlZCBsaXRlcmFsLiAqLworCWFwcGVuZF9s aXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtsYWJlbH1zIiwgbm9kZS0+bGFiZWwpOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVBbVN0bXQgKENSRUFURSBBQ0NF U1MgTUVUSE9EKS4KKyAqCisgKiBHaXZlbiBhbiBhY2Nlc3MgbWV0aG9kIE9JRCBhbmQgdGhlIHBh cnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50 aW5nIHRoZSBDUkVBVEUgQUNDRVNTIE1FVEhPRCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgQUNDRVNTIE1FVEhPRCAle2lkZW50aXR5fUkgVFlQRSAle2FtX3R5cGV9 cyBIQU5ETEVSICV7aGFuZGxlcn1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlQW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAg KnJldDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9wZ19hbQlhbUZvcm07CisJY2hhcgkgICAq YW10eXBlOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIs CisJCQkgb2JqZWN0SWQpOworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXAp OworCisJc3dpdGNoIChhbUZvcm0tPmFtdHlwZSkKKwl7CisJCWNhc2UgJ2knOgorCQkJYW10eXBl ID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWFtdHlwZSA9ICJUQUJMRSI7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUgJWMg Zm9yIGFjY2VzcyBtZXRob2QiLCBhbUZvcm0tPmFtdHlwZSk7CisJfQorCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBBQ0NFU1MgTUVUSE9EICV7aWRlbnRpdHl9SSBUWVBFICV7YW1fdHlw ZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQiLCAzLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkgImFtX3R5cGUi LCBPYmpUeXBlU3RyaW5nLCBhbXR5cGUsCisJCQkJCQkgImhhbmRsZXIiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSBhbUZvcm0tPmFtaGFuZGxlcikpOworCisJUmVsZWFzZVN5c0NhY2hl KGFtVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9m IHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwg Y2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9p ZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUg PT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJ ZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVu c2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJ CXJldHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhp bmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJz ZXRyZWUpKQorCXsKKwkJY2FzZSBUX0FsdGVyQ29sbGF0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRl ckRvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRvbWFpblN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7 CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckVudW1T dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckV4dGVuc2lvbkNvbnRl bnRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KG9i amVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFy eU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf QWx0ZXJGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGZHdTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZ1bmN0 aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJ CQkJIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVj dCk7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0 ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT3du ZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclBvbGljeVN0bXQ6CisJCQlyZXR1 cm4gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0FsdGVyU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9BbHRlclN0YXRzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0 ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclR5cGVTdG10OgorCQkJ cmV0dXJuIGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclVz ZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ29tbWVudFN0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3Ms IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbXBvc2l0ZVR5cGVTdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0NyZWF0ZUFtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUFtU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl Q29udmVyc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9D cmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgRU5VTSAqLworCQkJcmV0dXJuIGRlcGFy c2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZUV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGZHdTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf Q3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGb3JlaWdu U2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRnVuY3Rp b25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQ TGFuZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVMYW5nU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZVJhbmdlU3RtdDogLyogQ1JFQVRFIFRZUEUgQVMgUkFOR0UgKi8KKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl U2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVT dGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdGF0aXN0aWNzU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZvcmVp Z25UYWJsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGb3JlaWduVGFibGVTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUYWJsZUFzU3RtdDoJLyogQ1JF QVRFIE1BVEVSSUFMSVpFRCBWSUVXICovCisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUYWJsZUFz U3RtdF92YW5pbGxhKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmFu c2Zvcm1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlVHJhbnNmb3JtU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVUcmlnU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlVXNlck1hcHBpbmdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9EZWZpbmVTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJICBj bWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVmcmVzaE1hdFZpZXdT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfUmVuYW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX1J1bGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUnVsZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1ZpZXdTdG10OgkJLyogQ1JFQVRFIFZJRVcgKi8K KwkJCXJldHVybiBkZXBhcnNlX1ZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNh c2UgVF9TZWNMYWJlbFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9TZWNMYWJlbFN0bXQoY21kLT5k LnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKExPRywg InVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChp bnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisg KiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgor ZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJv c2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKwlNZW1vcnlDb250ZXh0IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVl OworCWNoYXIJICAgKmNvbW1hbmQgPSBOVUxMOworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8q CisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMg aW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhl bSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0 IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3Ry KTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQs CisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRf TUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJ ICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8odG1wY3h0KTsKKworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMg b25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4g ZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdh bnQKKwkgKiBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRz IGFyZSAicG9ydGFibGUiIHRvCisJICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJj aF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSBy ZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAq IHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBH ZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0 aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlv dmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3Zl cnJpZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+ dHlwZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9j b21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUg PSBkZXBhcnNlX0FsdGVyUmVsYXRpb24oY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9HcmFu dDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX0NyZWF0ZVRhYmxlQXM6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChj bWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVw YXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BD bGFzczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVh azsKKwkJY2FzZSBTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlczoKKwkJCXRyZWUgPSBkZXBhcnNl X0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1Rf Q3JlYXRlUHVibGljYXRpb246CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVQdWJsaWNhdGlvblN0 bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclB1YmxpY2F0aW9uOgorCQkJdHJl ZSA9IGRlcGFyc2VfQWx0ZXJQdWJsaWNhdGlvblN0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNl IFNDVF9BbHRlclRTQ29uZmlnOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRp b25TdG10KGNtZCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NDcyZTI4ZDcxLi5iYzA3MmYwNDI1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0xODI2LDYgKzE4MjYsOCBAQCBwZ19ldmVudF90 cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQ3JlYXRl T3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CiAJCQljYXNlIFNDVF9DcmVhdGVU YWJsZUFzOgorCQkJY2FzZSBTQ1RfQ3JlYXRlUHVibGljYXRpb246CisJCQljYXNlIFNDVF9BbHRl clB1YmxpY2F0aW9uOgogCQkJCXsKIAkJCQkJY2hhcgkgICAqaWRlbnRpdHk7CiAJCQkJCWNoYXIJ ICAgKnR5cGU7CkBAIC0xODQ1LDYgKzE4NDcsMTAgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29t bWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJl c3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcykKIAkJCQkJ CWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0g U0NUX0NyZWF0ZVB1YmxpY2F0aW9uKQorCQkJCQkJYWRkciA9IGNtZC0+ZC5jcmVhdGVwdWIuYWRk cmVzczsKKwkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclB1YmxpY2F0aW9uKQor CQkJCQkJYWRkciA9IGNtZC0+ZC5hbHRlcnB1Yi5hZGRyZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAq IElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21tYW5kIHdlIG1heSBlbmQK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAppbmRleCA5YzI1NDljOTRjLi41YTA3NzY2OThkIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKKysrIGIvc3JjL2luY2x1ZGUvdGNv cC9kZGxfZGVwYXJzZS5oCkBAIC0xNCw2ICsxNCwxNiBAQAogCiAjaW5jbHVkZSAidGNvcC9kZXBh cnNlX3V0aWxpdHkuaCIKIAorLyoKKyAqIFJlcHJlc2VudCB0aGUgcHVibGljYXRpb24gcmVsYXRp b24gZm9yIGRlcGFyc2luZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcHVibGljYXRpb25fcmVsCit7 CisJT2lkCQkJcmVsaWQ7CQkJLyogcmVsYXRpb24gaWQgKi8KKwlOb2RlCSAgICp3aGVyZUNsYXVz ZTsJLyogcm93IGZpbHRlciAqLworCUxpc3QJICAgKmNvbHVtbkxpc3Q7CQkvKiBjb2x1bW4gbGlz dCAqLworfQkJCXB1YmxpY2F0aW9uX3JlbDsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0 eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOwogZXh0 ZXJuIGNoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKIGV4dGVy biBjaGFyICpkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29u c3QgY2hhciAqb2JqZWN0dHlwZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDFm Y2EyMjdmMDUuLjljNjAzMWFlMDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAt MzAsNyArMzAsOSBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0 ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFzcywKIAlTQ1RfQWx0ZXJUU0Nv bmZpZywKLQlTQ1RfQ3JlYXRlVGFibGVBcworCVNDVF9DcmVhdGVUYWJsZUFzLAorCVNDVF9DcmVh dGVQdWJsaWNhdGlvbiwKKwlTQ1RfQWx0ZXJQdWJsaWNhdGlvbgogfSBDb2xsZWN0ZWRDb21tYW5k VHlwZTsKIAogLyoKQEAgLTkwLDYgKzkyLDIyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENv bW1hbmQKIAkJCUxpc3QJICAgKnByb2NlZHVyZXM7CiAJCX0JCQljcmVhdGVvcGM7CiAKKwkJLyog Q1JFQVRFIFBVQkxJQ0FUSU9OICovCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFk ZHJlc3M7CisJCQlMaXN0CSAgICpyZWxzOworCQkJTGlzdAkgICAqc2NoZW1hczsKKwkJfQkJCWNy ZWF0ZXB1YjsKKworCQkvKiBBTFRFUiBQVUJMSUNBVElPTiAqLworCQlzdHJ1Y3QgYWx0ZXJwdWIK KwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTGlzdAkgICAqcmVsczsKKwkJCUxp c3QJICAgKnNjaGVtYXM7CisJCX0JCQlhbHRlcnB1YjsKKwogCQkvKiBBTFRFUiBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIEFERC9BTFRFUi9EUk9QIE1BUFBJTkcgKi8KIAkJc3RydWN0CiAJCXsK LS0gCjIuMzQuMQoK --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v63-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us34k1 RnJvbSAxMjhjMGQwMDViN2U0MTFhMDQ2MTQ5MjIwZDlhYzBlM2E3OTgxMTQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDc6Mzk6NTkgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MyAyLzddIEZ1bmN0aW9ucyB0byBkZXBhcnNlIFRhYmxlIERETCBjb21tYW5kcy4KClRoaXMg cGF0Y2ggcHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGlj aCBjYW4KbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRl ZmluZWQgc3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRl bmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVw bGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5m b3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNh dGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3Np YmxlIHRvIHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUu IG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRo ZSBwYXJzZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRp b24gb2YgRERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZv cjoKCkNSRUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKCihOb3RlICMx KSBTb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJU SVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5l ZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgRm9y IEFUVEFDSC9ERVRBQ0ggUEFSVElUSU9OLCB3ZSBoYXZlbid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9u CnRoZSBzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gdGhl IHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUg b24gdGhlIHN1YmNyaWJlciBzaWRlIGlzIGEgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNo IHRoaXMgbW9yZSBhbmQgaW1wcm92ZSBpdCBsYXRlci4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZSAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBh cnNlLmMgICB8IDM2MTYgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9qc29uLmMgICAgICB8ICA3NzYgKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgfCAgICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1 aWxkICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgIHwg ICAgNiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgfCAgICAxICsKIHNy Yy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgICB8ICAgMjMgKwogc3JjL2luY2x1ZGUv dGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgIHwgICAxMSArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgIHwgICAgNCArCiAxMCBmaWxlcyBjaGFuZ2VkLCA0NDQzIGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2pzb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2Rl cGFyc2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8u byBcCiAJY3JlYXRlYXMubyBcCiAJZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlk ZGxfanNvbi5vIFwKIAlkZWZpbmUubyBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAwMDAuLjg5NjhjODNkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAgKzEsMzYxNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogZGRsX2RlcGFyc2UuYworICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNv bW1hbmRzIHRvIG1hY2hpbmUtcGFyc2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBp cyBpbnRlbmRlZCB0byBwcm92aWRlIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5k cywgd2hpY2ggY2FuCisgKiBsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdz IGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04g b2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICog dGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVj dHMuCisgKgorICogTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFj dHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1h bmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3Ry dWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24g c2VhcmNoX3BhdGgKKyAqIGV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoK KyAqIERlcGFyc2Ugb2JqZWN0IHRyZWUgaXMgY3JlYXRlZCBieSB1c2luZzoKKyAqIAlhKSBuZXdf b2JqdHJlZSgia25vdyBjb250ZW50cyIpIHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNvbnRlbnQg aXMga25vd24gb3IKKyAqICAgICB0aGUgaW5pdGlhbCB0cmVlIGNvbnRlbnQgaXMga25vd24uCisg KiAJYikgbmV3X29ianRyZWUoIiIpIGZvciB0aGUgc3ludGF4IHdoZXJlIHRoZSBvYmplY3QgdHJl ZSB3aWxsIGJlIGRlcml2ZWQKKyAqICAgICBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbmFsIGNoZWNr cy4KKyAqIAljKSBuZXdfb2JqdHJlZV9WQSB3aGVyZSB0aGUgY29tcGxldGUgdHJlZSBjYW4gYmUg ZGVyaXZlZCB1c2luZyBzb21lIGZpeGVkCisgKiAgICAgY29udGVudCBhbmQvb3Igc29tZSB2YXJp YWJsZSBhcmd1bWVudHMuCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nv bGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3Nl cnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Nl cXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2NvbmZp Zy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfZGljdC5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c190ZW1wbGF0ZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdXNlcl9tYXBw aW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv c2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAi Zm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1iL3Bn X3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMv cGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRl ICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIu aCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5 LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lk cy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5j bHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKwor LyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLworI2Rl ZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJlIHR1 cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJl c2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAqLwor dHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0 cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0LAor CU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKworLyoKKyAqIFJlcHJlc2VudCB0aGUgY29tbWFu ZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNs aXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9iamVjdCB0cmVlIHBhcmFtZXRlcnMgKi8KKwlpbnQJCQlu dW1QYXJhbXM7CQkvKiBOdW1iZXIgb2YgcGFyYW1ldGVycyBpbiB0aGUgb2JqZWN0IHRyZWUgKi8K KwlTdHJpbmdJbmZvCWZtdGluZm87CQkvKiBGb3JtYXQgc3RyaW5nIG9mIHRoZSBPYmpUcmVlICov CisJYm9vbAkJcHJlc2VudDsJCS8qIEluZGljYXRlcyBpZiBib29sZWFuIHZhbHVlIHNob3VsZCBi ZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsKKworLyoKKyAqIEFuIGVsZW1lbnQgb2YgYW4gb2JqZWN0 IHRyZWUgKE9ialRyZWUpLgorICovCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJY2hhcgkg ICAqbmFtZTsJCQkvKiBOYW1lIG9mIG9iamVjdCBlbGVtZW50ICovCisJT2JqVHlwZQkJb2JqdHlw ZTsJCS8qIE9iamVjdCB0eXBlICovCisKKwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJ Y2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9i alRyZWUgICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJfQkJCXZhbHVlOwkJCS8qIFN0 b3JlIHRoZSBvYmplY3QgdmFsdWUgYmFzZWQgb24gdGhlIG9iamVjdAorCQkJCQkJCQkgKiB0eXBl ICovCisJc2xpc3Rfbm9kZQlub2RlOwkJCS8qIFVzZWQgaW4gY29udmVydGluZyBiYWNrIHRvIE9i akVsZW0KKwkJCQkJCQkJICogc3RydWN0dXJlICovCit9IE9iakVsZW07CisKKy8qCisgKiBSZWR1 Y2Ugc29tZSB1bm5lY2Vzc2FyeSBzdHJpbmdzIGZyb20gdGhlIG91dHB1dCBqc29uIHdoZW4gdmVy Ym9zZQorICogYW5kICJwcmVzZW50IiBtZW1iZXIgaXMgZmFsc2UuIFRoaXMgbWVhbnMgdGhlc2Ug c3RyaW5ncyB3b24ndCBiZSBtZXJnZWQgaW50bworICogdGhlIGxhc3QgRERMIGNvbW1hbmQuCisg Ki8KK2Jvb2wJCXZlcmJvc2UgPSB0cnVlOworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2 b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29s IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBl bmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxl bSAqZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY2hhciAqdmFsdWUpOworc3Rh dGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9k LAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3Ry LAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Qo T2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqRWxl bSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKm5l d19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKTsKK3N0YXRpYyBKc29uYlZh bHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUg KnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhy ZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmlu aXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRh Ymxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAor CQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CisKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0 LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19h bHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50 aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNt ZCk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9v bCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNv bW1pdEFjdGlvbiBvcHRpb24pOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfUmVsU2V0T3B0aW9u cyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOworCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFy c2VfU2VxX0NhY2hlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7 CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfU2VxX0luY3JlbWVudEJ5KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfU2VxX01heHZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwg Ym9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jl c3RhcnQoRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1NlcV9TdGFydHdpdGgoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29s IGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQXMoRGVm RWxlbSAqZWxlbSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdG9yYWdl KEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9U eXBlX1JlY2VpdmUoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1R5cGVfU2VuZChGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oRm9ybV9wZ190eXBlIHR5cEZvcm0pOwor c3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX091dChGb3JtX3BnX3R5 cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9BbmFseXpl KEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9U eXBlX1N1YnNjcmlwdChGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CisKK3N0YXRpYyBMaXN0ICpkZXBh cnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpOworc3RhdGljIExpc3QgKmRlcGFyc2VfVGFi bGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAq ZHBjb250ZXh0LAorCQkJCQkJCQkgICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSk7CisKKy8q CisgKiBBcHBlbmQgcHJlc2VudCBhcyBmYWxzZSB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfbm90X3ByZXNlbnQoT2JqVHJlZSAqdHJlZSkKK3sKKwlhcHBlbmRfYm9vbF9vYmpl Y3QodHJlZSwgInByZXNlbnQiLCBmYWxzZSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYW4gYXJyYXkg cGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9hcnJheV9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpCit7CisJT2JqRWxl bSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7 CisKKwlpZiAobGlzdF9sZW5ndGgoYXJyYXkpID09IDApCisJCXJldHVybjsKKworCWlmICghdmVy Ym9zZSkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qIFJlbW92ZSBlbGVtZW50cyB3aGVy ZSBwcmVzZW50IGZsYWcgaXMgZmFsc2UgKi8KKwkJZm9yZWFjaChsYywgYXJyYXkpCisJCXsKKwkJ CU9iakVsZW0gICAgKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmlyc3QobGMpOworCisJCQlBc3NlcnQo ZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0IHx8CisJCQkJICAgZWxlbS0+b2JqdHlwZSA9 PSBPYmpUeXBlU3RyaW5nKTsKKworCQkJaWYgKCFlbGVtLT52YWx1ZS5vYmplY3QtPnByZXNlbnQg JiYKKwkJCQllbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QpCisJCQkJYXJyYXkgPSBmb3Jl YWNoX2RlbGV0ZV9jdXJyZW50KGFycmF5LCBsYyk7CisJCX0KKworCX0KKworCS8qIENoZWNrIGZv ciBlbXB0eSBsaXN0IGFmdGVyIHJlbW92aW5nIGVsZW1lbnRzICovCisJaWYgKGxpc3RfbGVuZ3Ro KGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3Rf dG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChP YmpUeXBlQXJyYXksIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsK KwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5k IGEgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUpCit7 CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWUgPSBzdWJfZm10Owor CWJvb2wJCWlzX3ByZXNlbnRfZmxhZyA9IGZhbHNlOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJ LyoKKwkgKiBDaGVjayBpZiB0aGUgZm9ybWF0IHN0cmluZyBpcyAncHJlc2VudCcgYW5kIGlmIHll cywgc3RvcmUgdGhlIGJvb2xlYW4KKwkgKiB2YWx1ZQorCSAqLworCWlmIChzdHJjbXAoc3ViX2Zt dCwgInByZXNlbnQiKSA9PSAwKQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJl ZS0+cHJlc2VudCA9IHZhbHVlOworCX0KKworCWlmICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2Vu dCkKKwkJcmV0dXJuOworCisJaWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0g YXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0g PSBuZXdfb2JqZWN0KE9ialR5cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJv b2xlYW4gPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQor CisvKgorICogQXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgor ICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCkKK3sKKwlpbnQJCQlsZW47CisJY2hhcgkgICAqZm10OworCisJaWYgKHRyZWUt PmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm10ID0gdHJlZS0+Zm10aW5mby0+ZGF0 YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisKKwkvKiBBZGQgYSBzZXBhcmF0b3IgaWYg bmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYgZm10W2xlbiAtIDFdICE9ICcgJykKKwkJYXBw ZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRpbmZvLCAxKTsKKworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2ZtdCk7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBO VUxMIG9iamVjdCB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwljaGFyCSAgICpvYmplY3RfbmFt ZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJ b2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2Zt dCk7CisKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgbmV3X29iamVjdChPYmpUeXBlTnVs bCwgb2JqZWN0X25hbWUpKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBvYmplY3QgcGFyYW1ldGVy IHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAg KnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJ aWYgKCF2ZXJib3NlICYmICF2YWx1ZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25h bWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlw YXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52 YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0p OworfQorCisvKgorICogUmV0dXJuIHRoZSBvYmplY3QgbmFtZSB3aGljaCBpcyBleHRyYWN0ZWQg ZnJvbSB0aGUgaW5wdXQgIiole25hbWVbOi5dfSoiCisgKiBzdHlsZSBzdHJpbmcuIEFuZCBhcHBl bmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyBj aGFyICoKK2FwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10KQoreworCVN0cmluZ0luZm9EYXRhIG9iamVjdF9uYW1lOworCWNvbnN0IGNoYXIg KmVuZF9wdHIsICpzdGFydF9wdHI7CisJaW50ICAgICAgICAgbGVuZ3RoOworCWNoYXIgICAgICAg ICp0bXBfc3RyOworCisJaWYgKHN1Yl9mbXQgPT0gTlVMTCB8fCB0cmVlLT5mbXRpbmZvID09IE5V TEwpCisJCXJldHVybiBzdWJfZm10OworCisJaW5pdFN0cmluZ0luZm8oJm9iamVjdF9uYW1lKTsK KworCXN0YXJ0X3B0ciA9IHN0cmNocihzdWJfZm10LCAneycpOworCWVuZF9wdHIgPSBzdHJjaHIo c3ViX2ZtdCwgJzonKTsKKwlpZiAoZW5kX3B0ciA9PSBOVUxMKQorCQllbmRfcHRyID0gc3RyY2hy KHN1Yl9mbXQsICd9Jyk7CisKKwlpZiAoc3RhcnRfcHRyICE9IE5VTEwgJiYgZW5kX3B0ciAhPSBO VUxMKQorCXsKKwkJbGVuZ3RoID0gZW5kX3B0ciAtIHN0YXJ0X3B0ciAtIDE7CisJCXRtcF9zdHIg PSAoY2hhciAqKSBwYWxsb2MobGVuZ3RoICsgMSk7CisJCXN0cm5jcHkodG1wX3N0ciwgc3RhcnRf cHRyICsgMSwgbGVuZ3RoKTsKKwkJdG1wX3N0cltsZW5ndGhdID0gJ1wwJzsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmb2JqZWN0X25hbWUsIHRtcF9zdHIpOworCQlwZnJlZSh0bXBfc3RyKTsK Kwl9CisKKwlpZiAob2JqZWN0X25hbWUubGVuID09IDApCisJCWVsb2coRVJST1IsICJvYmplY3Qg bmFtZSBub3QgZm91bmQiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQp OworCisJcmV0dXJuIG9iamVjdF9uYW1lLmRhdGE7CisKK30KKworLyoKKyAqIEFwcGVuZCBhIHBy ZWFsbG9jYXRlZCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2FwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKQorewor CXNsaXN0X3B1c2hfaGVhZCgmdHJlZS0+cGFyYW1zLCAmZWxlbS0+bm9kZSk7CisJdHJlZS0+bnVt UGFyYW1zKys7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBzdHJpbmcgcGFyYW1ldGVyIHRvIGEgdHJl ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKnN1Yl9mbXQsIGNoYXIgKiBvYmplY3RfbmFtZSwKKwkJCQkJIGNoYXIgKnZhbHVlKQor eworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJi b3NlICYmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlWzBdID09ICdcMCcpKQorCQlyZXR1cm47CisK KwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwlwYXJhbSA9IG5ld19vYmpl Y3QoT2JqVHlwZVN0cmluZywgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2 YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICog U2ltaWxhciB0byBmb3JtYXRfdHlwZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJldHVybiBlYWNoIGJp dCBvZiBpbmZvcm1hdGlvbgorICogc2VwYXJhdGVseToKKyAqCisgKiAtIG5zcGlkIGlzIHRoZSBz Y2hlbWEgT0lELiAgRm9yIGNlcnRhaW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdoaWNoIGhhdmUgd2Vp cmQKKyAqICAgdHlwbW9kIHJ1bGVzLCB3ZSByZXR1cm4gSW52YWxpZE9pZDsgdGhlIGNhbGxlciBp cyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFsaWZ5IHRoZSBuYW1lIG5vciBhZGQg cXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNlLgorICoKKyAqIC0gdHlwbmFtZSBp cyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwgd2l0aG91dCBxdW90ZXMKKyAqCisgKiAtIHR5cGVtb2Rz dHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5nIHdpdGggcGFyZW50 aGVzZXMKKyAqCisgKiAtIHR5cGFycmF5IGluZGljYXRlcyB3aGV0aGVyIFtdcyBtdXN0IGJlIGFk ZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRlY29kZSB0eXBlIG5hbWVzIHRvIHRoZWlyIHN0 YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQKKyAqIGluIHRoZSBjYXNlcyBvZiB0eXBlcyB3 aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3R5cGVf ZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkgT2lkICpuc3BpZCwg Y2hhciAqKnR5cGVuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGVhcnJh eSkKK3sKKwlIZWFwVHVwbGUJdHVwbGU7CisJRm9ybV9wZ190eXBlIHR5cGVmb3JtOworCU9pZAkJ CWFycmF5X2Jhc2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9i amVjdElkR2V0RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAl dSIsIHR5cGVfb2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1 cGxlKTsKKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxlIGxlbmd0 aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0eXBlcyBz dWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJYXJyYXlf YmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwkqdHlwZWFycmF5ID0gKElzVHJ1ZUFy cmF5VHlwZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RPUkFHRV9Q TEFJTik7CisKKwlpZiAoKnR5cGVhcnJheSkKKwl7CisJCS8qIFN3aXRjaCBvdXIgYXR0ZW50aW9u IHRvIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgKi8KKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsK KwkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShhcnJh eV9iYXNlX3R5cGUpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9v aWQpOworCisJCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwkJ dHlwZV9vaWQgPSBhcnJheV9iYXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBTcGVjaWFsLWNhc2Ug Y3JvY2sgZm9yIHR5cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUgd2UgcHV0CisJ ICogdHlwZW1vZCBhdCB0aGUgbWlkZGxlIG9mIG5hbWUgKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUg em9uZSkuIFdlIGNhbm5vdAorCSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRo ZSB0eXBlIG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJICovCisJKm5zcGlkID0gSW52YWxpZE9pZDsK KworCXN3aXRjaCAodHlwZV9vaWQpCisJeworCQljYXNlIElOVEVSVkFMT0lEOgorCQkJKnR5cGVu YW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUFRa T0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUVT VEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJZWxzZQorCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBU WiBpcyBhZGRlZCBieSB0eXBtb2QuICovCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNU QU1QIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkqdHlwZW5hbWUgPSBw c3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVUWk9JRDoKKwkJCWlm ICh0eXBlbW9kIDwgMCkKKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJVEggVElNRSBa T05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5 cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJ Y2FzZSBUSU1FT0lEOgorCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisKKwkJCS8qCisJCQkgKiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMg cmVxdWlyZWQgZm9yIG90aGVyIHR5cGVzLCBzbyBnZXQKKwkJCSAqIHRoZSB0eXBlIG5hbWUgYW5k IHNjaGVtYSBkaXJlY3RseSBmcm9tIHRoZSBjYXRhbG9nLgorCQkJICovCisJCQkqbnNwaWQgPSB0 eXBlZm9ybS0+dHlwbmFtZXNwYWNlOworCQkJKnR5cGVuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5 cGVmb3JtLT50eXBuYW1lKSk7CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5cGVtb2Rz dHIgPSBwcmludFR5cG1vZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJZWxz ZQorCQkqdHlwZW1vZHN0ciA9IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxl KTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBn aXZlbiBSRUxQRVJTSVNURU5DRSB2YWx1ZS4KKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X3BlcnNp c3RlbmNlX3N0cihjaGFyIHBlcnNpc3RlbmNlKQoreworCXN3aXRjaCAocGVyc2lzdGVuY2UpCisJ eworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1RFTVA6CisJCQlyZXR1cm4gIlRFTVBPUkFSWSI7CisJ CWNhc2UgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQ6CisJCQlyZXR1cm4gIlVOTE9HR0VEIjsKKwkJ Y2FzZSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ6CisJCQlyZXR1cm4gIiI7CisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJraW5nICVjIiwgcGVy c2lzdGVuY2UpOworCQkJcmV0dXJuICIiOwkJCS8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9 Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2 ZW4gc3RvcmFnZXR5cGUgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciAqCitnZXRfdHlw ZV9zdG9yYWdlKGNoYXIgc3RvcmFnZXR5cGUpCit7CisJc3dpdGNoIChzdG9yYWdldHlwZSkKKwl7 CisJCWNhc2UgJ3AnOgorCQkJcmV0dXJuICJwbGFpbiI7CisJCWNhc2UgJ2UnOgorCQkJcmV0dXJu ICJleHRlcm5hbCI7CisJCWNhc2UgJ3gnOgorCQkJcmV0dXJuICJleHRlbmRlZCI7CisJCWNhc2Ug J20nOgorCQkJcmV0dXJuICJtYWluIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZh bGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVjIiwgc3RvcmFnZXR5cGUpOworCX0KK30KKworLyoKKyAq IEFsbG9jYXRlIGEgbmV3IHBhcmFtZXRlci4KKyAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29i amVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisK KwlwYXJhbSA9IHBhbGxvYzAoc2l6ZW9mKE9iakVsZW0pKTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7 CisJcGFyYW0tPm9ianR5cGUgPSB0eXBlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICog QWxsb2NhdGUgYSBuZXcgb2JqZWN0IHBhcmFtZXRlci4KKyAqLworc3RhdGljIE9iakVsZW0gKgor bmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07 CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZh bHVlLm9iamVjdCA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2Nh dGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWUoY2hhciAqZm10KQoreworCU9ialRyZWUgICAgKnBh cmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnBy ZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQp CisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1z OworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXQgdXAgJXt9RCBhbmQgJXt9TyBl bGVtZW50cy4KKyAqCisgKiBFbGVtZW50cyAic2NoZW1hX25hbWUiIGFuZCAib2JqX25hbWUiIGFy ZSBzZXQuICBJZiB0aGUgbmFtZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNj aGVtYSwgdGhhdCdzIHNldCB0byAicGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0 d2VlbiB0aG9zZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpfbmFtZSB3aWxs CisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21l dGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdp bGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3BpZCwgY2hhciAqbmFtZSkKK3sKKwlPYmpU cmVlICAgICpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNwYWNlOworCisJaWYgKGlzQW55VGVt cE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9IHBzdHJkdXAoInBnX3RlbXAiKTsKKwll bHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShuc3BpZCk7CisKKwlxdWFsaWZp ZWQgPSBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgT2Jq VHlwZVN0cmluZywgbmFtZXNwYWNlLAorCQkJCQkJCSAgICJvYmpuYW1lIiwgT2JqVHlwZVN0cmlu ZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBo ZWxwZXIgcm91dGluZSB0byBzZXQgdXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cywgd2l0aCB0aGUg b2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9vYmpJZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0 SWQpCit7CisJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVh cFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2JqX25zcDsKKwlEYXR1bQkJb2JqX25hbWU7CisJQXR0 ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwlBdHRyTnVt YmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNzSWQpOworCWJvb2wJCWlz bnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIEFudW1fb2lk LCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBvYmplY3Qgd2l0aCBPSUQgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAorCQkJIG9i amVjdElkLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9uYW1lID0g Z2V0X29iamVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9IGdldF9v YmplY3RfYXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKworCW9ial9uc3AgPSBoZWFwX2dldGF0 dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJ CQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgbmFtZXNw YWNlIGZvciBvYmplY3QgJXUiLCBvYmplY3RJZCk7CisKKwlvYmpfbmFtZSA9IGhlYXBfZ2V0YXR0 cihjYXRvYmosIEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAg ICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIGF0dHJpYnV0ZSBu YW1lIGZvciBvYmplY3QgJXUiLCBvYmplY3RJZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChvYmpfbnNwKSwKKwkJCQkJCQkJCQkgTmFt ZVN0cigqRGF0dW1HZXROYW1lKG9ial9uYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxw ZXIgcm91dGluZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAq CituZXdfb2JqdHJlZV9mb3JfdHlwZShPaWQgdHlwZUlkLCBpbnQzMiB0eXBtb2QpCit7CisJT2lk CQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwZV9uc3A7CisJY2hhcgkgICAqdHlwZV9uYW1lID0g TlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9vbAkJdHlwZV9hcnJheTsKKworCWZvcm1h dF90eXBlX2RldGFpbGVkKHR5cGVJZCwgdHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVf bmFtZSwgJnR5cG1vZHN0ciwgJnR5cGVfYXJyYXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNw aWQpKQorCQl0eXBlX25zcCA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsK KwllbHNlCisJCXR5cGVfbnNwID0gcHN0cmR1cCgiIik7CisKKwlyZXR1cm4gbmV3X29ianRyZWVf VkEoTlVMTCwgNCwKKwkJCQkJCSAgInNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlX25z cCwKKwkJCQkJCSAgInR5cGVuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9uYW1lLAorCQkJCQkJ ICAidHlwbW9kIiwgT2JqVHlwZVN0cmluZywgdHlwbW9kc3RyLAorCQkJCQkJICAidHlwYXJyYXki LCBPYmpUeXBlQm9vbCwgdHlwZV9hcnJheSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBv YmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4K KyAqCisgKiBUaGUgImZtdCIgYXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBl bGVtZW50IGluIHRoZSBvdXRwdXQgYmxvYi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1i ZXIgb2YgZXh0cmEgZWxlbWVudHMgdG8gYXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUg KHN0cmluZyksIHR5cGUgKGZyb20gdGhlIE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUg c3VwcGxpZWQuICBUaGUKKyAqIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBp bnN0YW5jZSwgT2JqVHlwZUludGVnZXIgcmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3Ry aW5nIHJlcXVpcmVzIGEgY2hhciAqLCBPYmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgor ICogT2JqRWxlbSksIE9ialR5cGVPYmplY3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9u LiAgRWFjaCBlbGVtZW50IHR5cGUgKgorICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVj aWZpZXIgZ2l2ZW4gaW4gdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRs X2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQsIHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUg dGhlIGx1eHVyeSBvZiBzcHJpbnRmLWxpa2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxm b3JtZWQgYXJndW1lbnQgbGlzdHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVl X1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKQoreworCU9ialRyZWUgICAgKnRyZWU7CisJ dmFfbGlzdAkJYXJnczsKKwlpbnQJCQlpOworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmpl Y3QgYW5kIGl0cyAiZm10IiAqLworCXRyZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5k IHByb2Nlc3MgdGhlIGdpdmVuIHZhcmFyZ3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtb2JqczsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJ T2JqVHlwZQkJdHlwZTsKKwkJT2JqRWxlbSAgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFy Z3MsIGNoYXIgKik7CisJCXR5cGUgPSB2YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBu ZXdfb2JqZWN0KHR5cGUsIE5VTEwpOworCisJCS8qCisJCSAqIEZvciBhbGwgcGFyYW0gdHlwZXMg b3RoZXIgdGhhbiBPYmpUeXBlTnVsbCwgdGhlcmUgbXVzdCBiZSBhIHZhbHVlIGluCisJCSAqIHRo ZSB2YXJhcmdzLiBGZXRjaCBpdCBhbmQgYWRkIHRoZSBmdWxseSBmb3JtZWQgc3Vib2JqZWN0IGlu dG8gdGhlCisJCSAqIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJc3dpdGNoICh0eXBlKQorCQl7CisJ CQljYXNlIE9ialR5cGVOdWxsOgorCQkJCS8qIE51bGwgcGFyYW1zIGRvbid0IGhhdmUgYSB2YWx1 ZSAob2J2aW91c2x5KSAqLworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCQll bGVtLT52YWx1ZS5ib29sZWFuID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQlj YXNlIE9ialR5cGVTdHJpbmc6CisJCQkJZWxlbS0+dmFsdWUuc3RyaW5nID0gdmFfYXJnKGFyZ3Ms IGNoYXIgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVBcnJheToKKwkJCQllbGVtLT52 YWx1ZS5hcnJheSA9IHZhX2FyZyhhcmdzLCBMaXN0ICopOworCQkJCWJyZWFrOworCQkJY2FzZSBP YmpUeXBlSW50ZWdlcjoKKwkJCQllbGVtLT52YWx1ZS5pbnRlZ2VyID0gdmFfYXJnKGFyZ3MsIGlu dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5m bHQgPSB2YV9hcmcoYXJncywgZG91YmxlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9i amVjdDoKKwkJCQllbGVtLT52YWx1ZS5vYmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsK KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJl ZSBlbGVtZW50IHR5cGUgJWQiLCB0eXBlKTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOwor CQlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3Mp OworCXJldHVybiB0cmVlOworfQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1h dCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRl LgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBh cnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpz b25iVmFsdWUJdmFsOworCisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5 LnZhbC5zdHJpbmcudmFsID0gImZtdCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtl eS52YWwuc3RyaW5nLnZhbCk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5 KTsKKworCS8qIFRoZW4gcHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2 YWwudHlwZSA9IGpidlN0cmluZzsKKwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZv LT5sZW47CisJdmFsLnZhbC5zdHJpbmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUg YSBKU09OQiByZXByZXNlbnRhdGlvbiBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29u YiAqCitvYmp0cmVlX3RvX2pzb25iKE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFs dWU7CisKKwl2YWx1ZSA9IG9ianRyZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVy biBKc29uYlZhbHVlVG9Kc29uYih2YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRy ZWVfdG9fanNvbmI6IHByb2Nlc3MgYW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0 IG9yCisgKiBhbiBhcnJheSBpbnRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRp YyB2b2lkCitvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwg T2JqRWxlbSAqb2JqZWN0LAorCQkJCQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQor eworCUpzb25iVmFsdWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQlj YXNlIE9ialR5cGVOdWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlw ZVN0cmluZzoKKwkJCXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVu ID0gc3RybGVuKG9iamVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9 IG9iamVjdC0+dmFsdWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rv a2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwu dHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlE YXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJ CQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJ CQl2YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykK KwkJCQlEYXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywK KwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVC b29sOgorCQkJdmFsLnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0 LT52YWx1ZS5ib29sZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2 ZWx5IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlv Ymp0cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQl7CisJCQkJTGlzdENlbGwgICAqY2VsbDsK KworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJ CQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkpCisJCQkJeworCQkJCQlPYmpFbGVt ICAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVu dChzdGF0ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJCX0KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmplY3QtPm9i anR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhlbHBlciBmb3Ig b2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19q c29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlz dF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgdHJlZSk7CisK KwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpFbGVtICAgICpv YmplY3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOworCQlKc29u YlZhbHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5cGUgPSBq YnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5hbWUpOwor CQlrZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1ZSBhY2Nv cmRpbmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBv YmplY3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRF IFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lE IG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0aGVtIHRv CisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMgcmV0dXJu ZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRhYmxlcywg YW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBjb25zdHJh aW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFpbkNvbnN0 cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklkKQorewor CVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mgc2NhbjsK KwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZSAgICAqY29uc3RyOworCisJLyogT25seSBvbmUg bWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJc1Zh bGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBh bGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgma2V5 LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7CisJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5h bWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNlCisJ eworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQs CisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXRE YXR1bShkb21haW5JZCkpOworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29u c3RyYWludFR5cGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9 CisKKwkvKgorCSAqIEZvciBlYWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qg b2YgdGFibGUgZWxlbWVudHMuICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9u bHkgdGhlIHByaW50YWJsZSBpbmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFy YXRlIGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJ ICogYXV0b21hdGljIHByb2Nlc3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQo dHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWlu dCBjb25zdHJGb3JtOworCQljaGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9y bV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9y bS0+Y29udHlwZSkKKwkJeworCQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUg PSAiY2hlY2siOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJ Y29udGludWU7CQkvKiBub3QgaGVyZSAqLworCQkJY2FzZSBDT05TVFJBSU5UX1BSSU1BUlk6CisJ CQkJY29udHlwZSA9ICJwcmltYXJ5IGtleSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJ TlRfVU5JUVVFOgorCQkJCWNvbnR5cGUgPSAidW5pcXVlIjsKKwkJCQlicmVhazsKKwkJCWNhc2Ug Q09OU1RSQUlOVF9UUklHR0VSOgorCQkJCWNvbnR5cGUgPSAidHJpZ2dlciI7CisJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWNvbnR5cGUgPSAiZXhjbHVzaW9u IjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBjb25zdHJhaW50IHR5cGUiKTsKKwkJfQorCisJCS8qCisJCSAqICJ0eXBlIiBhbmQgImNvbnR5 cGUiIGFyZSBub3QgcGFydCBvZiB0aGUgcHJpbnRhYmxlIG91dHB1dCwgYnV0IGFyZQorCQkgKiB1 c2VmdWwgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXN0aW5ndWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMg YW5kIGFtb25nCisJCSAqIGRpZmZlcmVudCBjb25zdHJhaW50IHR5cGVzLgorCQkgKgorCQkgKiBY WFggaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsc28gbGlzdCB0aGUgY29sdW1uIG5hbWVzIGluIGEg UEssIGV0Yy4KKwkJICovCisJCWNvbnN0ciA9IG5ld19vYmp0cmVlX1ZBKCJDT05TVFJBSU5UICV7 bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgNCwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiY29uc3RyYWludCIsCisJCQkJCQkJCSJjb250eXBlIiwgT2JqVHlwZVN0cmluZywgY29udHlw ZSwKKwkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGNvbnN0ckZvcm0tPmNv bm5hbWUpLAorCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCXBn X2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQll bGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOwor CX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFu IGluZGV4IGRlZmluaXRpb24sIHNwbGl0IGludG8gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBs YXJnZSBhbW91bnQgb2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93 b3JrZXIsIGJ1dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBk b2Vzbid0IHNlZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGlj IHZvaWQKK3BnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBj aGFyICoqaW5kZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAq KnJlbG9wdGlvbnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndo ZXJlQ2xhdXNlKQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsK KwlIZWFwVHVwbGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFz cyBpZHhyZWxyZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0 aW5lOworCUxpc3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlM aXN0CSAgICpjb250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVt CQlpbmRjb2xsRGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlv bkRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lk dmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9E YXRhIGRlZmluaXRpb25CdWY7CisKKwkqdGFibGVzcGFjZSA9IE5VTEw7CisJKndoZXJlQ2xhdXNl ID0gTlVMTDsKKworCS8qIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRo ZSBpbmRleCAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJ ZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4IHdpdGggT0lEICV1 IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9p ZHgpOworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlk ID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGlu ZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5k ZXhfaW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0 aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWlu ZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJ CQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOwor CWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7 CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgs CisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCgh aXNudWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5k b3B0aW9uRGF0dW0pOworCisJLyogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRl eCByZWxhdGlvbiAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhy ZWwpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0 aCBPSUQgJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VU U1RSVUNUKGh0X2lkeHJlbCk7CisKKwkvKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGlu ZGV4JyBhY2Nlc3MgbWV0aG9kICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChG b3JtX3BnX2FtKSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4 cHJlc3Npb25zLCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkg KiB2ZXJzaW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3 YW50IHRvIGRpc3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8K KwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVM TCkpCisJeworCQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisK KwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJ CQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxs KTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlp bmRleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4 cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRl bSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2Zv cihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygm ZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBw c3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyog RmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4 QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVm aW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICog Y2FsbGVyLgorCSAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIo Iik7CisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykK Kwl7CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsK KwkJaW50MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lkCQkJa2V5Y29s dHlwZTsKKwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCisJCS8qIFByaW50IElOQ0xVREUgdG8g ZGl2aWRlIGtleSBhbmQgbm9uLWtleSBhdHRycy4gKi8KKwkJaWYgKGtleW5vID09IGlkeHJlYy0+ aW5kbmtleWF0dHMpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25C dWYsICIpIElOQ0xVREUgKCIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmRlZmluaXRpb25CdWYsIGtleW5vID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChhdHRu dW0gIT0gMCkKKwkJeworCQkJLyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkgICAq YXR0bmFtZTsKKwkJCWludDMyCQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRfYXR0 bmFtZShpbmRyZWxpZCwgYXR0bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkZWZpbml0aW9uQnVmLCBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9hdHR0 eXBldHlwbW9kY29sbChpbmRyZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAm a2V5Y29sdHlwbW9kLAorCQkJCQkJCQkgICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVsc2UK KwkJeworCQkJLyogRXhwcmVzc2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtleTsK KwkJCWNoYXIJICAgKnN0cjsKKworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJCWVs b2coRVJST1IsICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5kZXhr ZXkgPSAoTm9kZSAqKSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9IGxu ZXh0KGluZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIg PSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisK KwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJ CQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNF eHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQor CQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJ a2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4 cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9CisKKwkJLyogUHJpbnQgYWRkaXRpb25hbCBkZWNv cmF0aW9uIGZvciAoc2VsZWN0ZWQpIGtleSBjb2x1bW5zLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJ aWYgKGtleW5vIDwgaWR4cmVjLT5pbmRua2V5YXR0cykKKwkJeworCQkJT2lkIGluZGNvbGwgPSBp bmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMiLAorCQkJ CQkJCQlnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkJLyogQWRkIHRo ZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJCWdldF9vcGNsYXNz X25hbWUoaW5kY2xhc3MtPnZhbHVlc1trZXlub10sIEludmFsaWRPaWQsICZkZWZpbml0aW9uQnVm KTsKKworCQkJLyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJCWlmIChhbXJvdXRpbmUt PmFtY2Fub3JkZXIpCisJCQl7CisJCQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywg cmVwb3J0IERFU0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RF U0MpCisJCQkJeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAi IERFU0MiKTsKKwkJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNl ICovCisJCQkJCWlmICghKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkpCisJCQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCQl9 CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkK KwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgRklS U1QiKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3YXMgaGVy ZTsgZG8gd2UgbmVlZCBhbnl0aGluZz8gKi8KKwkJfQorCX0KKwlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZkZWZpbml0aW9uQnVmLCAiKSIpOworCSpkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5k YXRhOworCisJLyogT3V0cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5f cmVsb3B0aW9ucyhpbmRleHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICovCisJewor CQlPaWQJCQl0YmxzcGM7CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVs aWQpOworCQlpZiAoT2lkSXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVw KHF1b3RlX2lkZW50aWZpZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJfQorCisJ LyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFoZWFwX2F0dGlzbnVs bChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJeworCQlOb2RlCSAgICpu b2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJCS8q IENvbnZlcnQgdGV4dCBzdHJpbmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2lu ZHByZWQsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHByZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdUb05v ZGUocHJlZFN0cmluZyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2UgKi8K KwkJKndoZXJlQ2xhdXNlID0gZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNl LCBmYWxzZSk7CisJfQorCisJLyogQ2xlYW4gdXAgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4 KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4cmVsKTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfYW0p OworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUg Z2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZl IHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitzdGF0aWMgY2hhciAqCitSZWxh dGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLCBMaXN0 ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQoreworCU5vZGUJICAgKmRlZnZhbDsK KwljaGFyCSAgICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWws IGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBkcGNvbnRleHQs IGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZvciBsYXRlciBy ZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhwcnMgPSBsYXBw ZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBPYnRh aW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4g dGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoT2lk IHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91bmREYXR1bTsKKwlib29s CQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEo UkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uIHdpdGggT0lEICV1IiwgcmVs aWQpOworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJ CQkJCQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKwor CWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAg Q1N0cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJ CQkJCQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBU ZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1 bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFyIChub24tdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgor ICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUg ZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91 dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRo ZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5KS4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogJXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtjb21wcmVzc2lvbn1zICV7 ZGVmYXVsdH1zICV7bm90X251bGx9cyAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQs IGJvb2wgY29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIs IExpc3QgKipleHBycykKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29i ajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBs ZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOwor CWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxs OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhv dXQgbG9jYWwgZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBt YXliZSBpdCBpcyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Ig c29tZQorCSAqIHN1Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4g TlVMTDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+ Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9S LCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRp b24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1f cGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNv bGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5 cGNvbGxhdGlvbik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBl fVQiLCAzLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkg Im5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgImNvbHR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBt b2QpKTsKKworCWlmICghY29tcG9zaXRlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJT VE9SQUdFICV7Y29sc3RvcmFnZX1zIiwgImNvbHN0b3JhZ2UiLAorCQkJCQkJCSBnZXRfdHlwZV9z dG9yYWdlKGF0dHJGb3JtLT5hdHRzdG9yYWdlKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0 bXBfb2JqID0gbmV3X29ianRyZWUoIkNPTVBSRVNTSU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJl c3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNzaW9uX21l dGhvZH1JIiwKKwkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIGNvbGRlZi0+Y29tcHJlc3Np b24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXtjb21wcmVz c2lvbl9tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29tcHJlc3Npb259cyIsIHRtcF9vYmopOworCisJ dG1wX29iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29s bGF0aW9uKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7bmFtZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBjb2xsYXRpb24pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1zIiwg dG1wX29iaik7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAkJCXNlcXJlbGlkID0gSW52 YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVj ZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdAorCQkgKiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0 bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0CisJCSAqIHdoZW4gcHJp bWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkg KiBjb25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAg VGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVk IHRvIHRoaXMgY29sdW1uIHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1p dCBhbnl0aGluZy4gKEZvcnR1bmF0ZWx5LCBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50cyBjYW5u b3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUg Y2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJr ZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNo KGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9 IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9 PSBDT05TVFJfTk9UTlVMTCkKKwkJCXsKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkK KwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e25vdF9udWxsfXMiLCAibm90X251bGwiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVM TCIgOiAiIik7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChh dHRyRm9ybS0+YXR0aGFzZGVmICYmCisJCQljb2xkZWYtPmdlbmVyYXRlZCAhPSBBVFRSSUJVVEVf R0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIg PSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJ CQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7ZGVmYXVsdH1zIiwgdG1wX29iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICov CisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJCQlhdHRubyA9IGdldF9hdHRu dW0ocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwkJCXNlcXJlbGlkID0gZ2V0SWRlbnRpdHlT ZXF1ZW5jZShyZWxpZCwgYXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCWlmIChPaWRJc1ZhbGlkKHNl cXJlbGlkKSkKKwkJeworCQkJdG1wX29iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVs aWQsIGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVyKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0bXBfb2JqKTsKKwkJfQorCisJCS8qIEdFTkVS QVRFRCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkdFTkVS QVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9H RU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9 IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cF9vYmosICIle2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsCisJCQkJCQkJCSAiZ2VuZXJhdGlv bl9leHByIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmF0ZWRfY29sdW1u fXMiLCB0bXBfb2JqKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5 cGVkIHRhYmxlIGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIg Y2FzZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24s CisgKiBjb2xsYXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGlu ZyBpZiB0aGUgY29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBB cyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2Vk IGVsc2V3aGVyZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtuYW1lfUkgV0lUSCBPUFRJ T05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwg Q29sdW1uRGVmICpjb2xkZWYpCit7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsKKwlPYmpUcmVl ICAgICp0bXBfb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7 CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lk CQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJ c2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXND YWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkg Zm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwg cmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1 cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJ CQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFNlYXJj aCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCB3 ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiByYXRoZXIg dGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNl ZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxsID0gZmFsc2U7CisJZm9yZWFj aChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWludCAqY29uc3RyID0g KENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChjb25zdHItPmNvbnR5cGUgPT0g Q09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7 CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYp CisJeworCQljaGFyCSAgICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5E ZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0 LCBOVUxMKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZhdWx0fXMi LCAiZGVmYXVsdCIsIGRlZnN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyAl e25vdF9udWxsfXMgJXtkZWZhdWx0fXMiLCA0LAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImNvbHVtbiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5h bWUsCisJCQkJCQkgIm5vdF9udWxsIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzYXdfbm90bnVs bCA/ICJOT1QgTlVMTCIgOiAiIiwKKwkJCQkJCSAiZGVmYXVsdCIsIE9ialR5cGVPYmplY3QsIHRt cF9vYmopOworCisJLyogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlw ZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZSAqLworCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXAp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2Yg Y29sdW1uIGlkZW50aXR5LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgR0VORVJBVEVE ICV7b3B0aW9ufXMgJXtpZGVudGl0eV90eXBlfXMgJXtzZXFfZGVmaW5pdGlvbjogfXMKKyAqIAlP UgorICogR0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkgJXtpZGVudGl0eV90eXBlfXMg KCAle3NlcV9kZWZpbml0aW9uOiB9cyApCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICppZGVudF9vYmo7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsK KwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRh dGE7CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJaWYgKGFsdGVy X3RhYmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAi JXtvcHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJCWlkZW50Zm10ID0gIkdFTkVSQVRFRCAiOwor CQlvYmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVOVElUWSI7CisJfQorCisJaWRlbnRfb2JqID0g bmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVO VElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10LCAi b3B0aW9uIiwgIkFMV0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVO VElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudF9vYmosIG9iamZt dCwgIm9wdGlvbiIsICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo aWRlbnRfb2JqKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5X3R5cGV9cyIs IDEsCisJCQkJCQkgImlkZW50aXR5X3R5cGUiLCBPYmpUeXBlT2JqZWN0LCBpZGVudF9vYmopOwor CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJCQkgc2VxcmVsaWQpOwor CisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNl cWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24g ZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9DeWNsZShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3Jt LCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBk ZXBhcnNlX1NlcV9SZXN0YXJ0KHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90 IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIiV7c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJ YXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVt cyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQg KCV7b3B0aW9uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNl dE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJYm9vbAkJaXNfcmVzZXQg PSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRPcHRpb25zOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JICV7b3B0aW9ufXMiLCAyLAorCQkJCQkJICJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkgIm9wdGlvbiIsIE9i alR5cGVTdHJpbmcsIGlzX3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQiKTsKKworCWZvcmVhY2goY2Vs bCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpU cmVlICAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0 ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0 cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVu ZF9hcnJheV9vYmplY3QocmV0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAq c3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwli b29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlvbnM7CisK Kwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAq ZWxlbTsKKwkJT2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMg PSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChz ZXRzKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiJXtzZXRfcmVzZXR9cyAoJXtvcHRpb25z OiwgfXMpIiwgMiwKKwkJCQkJCSAgInNldF9yZXNldCIsIE9ialR5cGVTdHJpbmcsIGlzX3Jlc2V0 ID8gIlJFU0VUIiA6ICJTRVQiLAorCQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgc2V0 cyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIg Q09MVU1OIC4uLiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAorICogKC4uLikgIG9yIFJFU0VUICgu Li4pIGNvbnRlbnRzLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle2xhYmVsfXMgPSAle3Zh bHVlfUwKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVs ZW0sIGJvb2wgaXNfcmVzZXQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKm9w dG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5V TEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1JLiIsICJzY2hl bWEiLAorCQkJCQkJCSBlbGVtLT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3Qob3B0bmFtZSwgIiV7bGFiZWx9SSIsICJsYWJlbCIsIGVsZW0tPmRlZm5hbWUpOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9cyIsIDEsCisJCQkJCQkgImxhYmVsIiwgT2JqVHlw ZU9iamVjdCwgb3B0bmFtZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICI9ICV7dmFsdWV9TCIsICJ2YWx1ZSIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRl ZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIg OiAiRkFMU0UiKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJTkhF UklUUyByZWxhdGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNjaGVt YS1xdWFsaWZpZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFibGVz LgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQp Cit7CisJTGlzdAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJaW5o UmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNS ZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJd2hp bGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7 CisJCU9ialRyZWUgICAgKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZv cm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1J bmgtPmluaHBhcmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rf b2JqZWN0KHBhcmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVf Y2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQor CisvKgorICogRGVwYXJzZSB0aGUgT04gQ09NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4g VEVNUE9SQVJZIC4uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPTiBDT01NSVQgJXtvbl9j b21taXRfdmFsdWV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xh dXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpUcmVlICAgICpyZXQgID0gbmV3X29i anRyZWUoIk9OIENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1J VF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9 cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiREVM RVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLAorCQkJ CQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKwor CQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3QocmV0LCAiJXtvbl9j b21taXRfdmFsdWV9cyIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisJCQlicmVhazsK Kwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FD SEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgQ0FDSEUgJXt2YWx1ZX1z CisgKiBPUgorICogQ0FDSEUgJXt2YWx1ZX0KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoK K2RlcGFyc2VfU2VxX0NhY2hlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAg KmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNB Q0hFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRh dGEtPnNlcWNhY2hlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBTRVQgJXtub31zIENZQ0xFCisgKiBPUgorICogJXtub31zIENZQ0xFCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNo YXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCAle25vfXMgQ1lDTEUiIDog IiV7bm99cyBDWUNMRSI7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisKKwlyZXR1cm4g bmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNl IElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNS RU1FTlQgQlkgJXt2YWx1ZX1zCisgKiBPUgorICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJl dDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFi bGUgPyAiU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiIDogIklOQ1JFTUVOVCBCWSAle3ZhbHVl fXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNy ZW1lbnQpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUFYVkFMVUUg JXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2 YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQg PSBhbHRlcl90YWJsZSA/ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3Zh bHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFt YXgpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0 bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIFNFVCBNSU5WQUxVRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNSU5WQUxVRSAle3ZhbHVl fXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVy X3RhYmxlID8gIlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiIDogIk1JTlZBTFVFICV7dmFsdWV9cyI7 CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJ cmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAibWludmFsdWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7 CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHNlcXVlbmNlIFJFU1RBUlQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBS RVNUQVJUICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9T ZXFfUmVzdGFydChGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9S TUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFS VCAle3ZhbHVlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFy dCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2Ug QVMgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBUyAle2lkZW50aXR5fUQKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0p Cit7CisJT2JqVHJlZSAgICAqcmV0OworCVR5cGUJCWxpa2VUeXBlOworCUZvcm1fcGdfdHlwZSBs aWtlRm9ybTsKKworCWxpa2VUeXBlID0gdHlwZW5hbWVUeXBlKE5VTEwsIGRlZkdldFR5cGVOYW1l KGVsZW0pLCBOVUxMKTsKKwlsaWtlRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChsaWtl VHlwZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQVMgJXtpZGVudGl0eX1EIiwgMSwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShsaWtlRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGxp a2VGb3JtLT50eXBuYW1lKSkpOworCVJlbGVhc2VTeXNDYWNoZShsaWtlVHlwZSk7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVl bmNlIFNUQVJUIFdJVEggb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgU1RB UlQgV0lUSCAle3ZhbHVlfXMKKyAqIE9SCisgKiBTVEFSVCBXSVRIICV7dmFsdWV9cworICovCitz dGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2Vx dWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJ Y2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8g IlNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cyIgOiAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJ dG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJcmV0 ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3RhcnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5 cGUgU1RPUkFHRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNUT1JBR0U9JXt2 YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFn ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIlNUT1JBR0UgPSAle3ZhbHVlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg Z2V0X3R5cGVfc3RvcmFnZSh0eXBGb3JtLT50eXBzdG9yYWdlKSk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJFQ0VJVkU9JXtwcm9jZWR1cmV9RAor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1JlY2VpdmUoRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJl Y2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHR5cGUgU0VORCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFTkQ9JXtwcm9j ZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQo Rm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUg dHlwbW9kX2luIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogVFlQTU9EX0lOPSV7 cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9U eXBtb2RfSW4oRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlw bW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX291dCBvcHRpb24uCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIFRZUE1PRF9PVVQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7 CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2Rv dXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUg b3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTkFMWVpFPSV7cHJvY2VkdXJlfUQK KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKEZvcm1f cGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJh bmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSB0eXBlIHN1YnNjcmlwdCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNVQlND UklQVD0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNl X1R5cGVfU3Vic2NyaXB0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJl dDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cHN1YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qo cmV0KTsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcu CisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNv bnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFy c2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dz IGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxh dGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJ CQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0g TklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7 CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2Rl VGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVl ICAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRl Zl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBl bHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJ CQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2Us IE5VTEwpOworCQkJCQlpZiAodHJlZSAhPSBOVUxMKQorCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5k KGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdCh0cmVlKSk7CisJCQkJfQorCQkJCWJyZWFrOwor CQkJY2FzZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2co RVJST1IsICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisK KwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4K KyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1z IFNFUVVFTkNFICV7aWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZVNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAg ICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFk YXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsK KwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNy ZWF0ZVNlcVN0bXQgPSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNl cXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUg VEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlm IChjcmVhdGVTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0 YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlv bl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2Vx dWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5 c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgJXUiLAorCQkJIG9iamVj dElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxl KTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKSk7 CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBm YWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNl cWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0 YXJ0KHNlcWRhdGEpKTsKKworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBC WSBoZXJlICovCisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9 cyBTRVFVRU5DRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9 cyIsIDQsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRf cGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJ CSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgY3JlYXRlU2VxU3RtdC0+ aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxl bXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29y cmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7 aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisgKiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9h bX1zICV7ZGVmaW5pdGlvbn1zICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisgKiAle3doZXJlX2Ns YXVzZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUluZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsK KwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9h bTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkg ICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmlt YXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9yIFBS SU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRl bHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4 cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVs ID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmlu ZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAm d2hlcmVDbGF1c2UpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3VuaXF1ZX1z IElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04gJXt0 YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAle2RlZmluaXRpb259cyIsIDcsCisJCQkJCQkgInVu aXF1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAi IiwKKwkJCQkJCSAiY29uY3VycmVudGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5j b25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJ U1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShpZHhyZWwpLAorCQkJCQkJICJ0YWJsZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwtPnJkX3JlbC0+cmVsbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSks CisJCQkJCQkgImluZGV4X2FtIiwgT2JqVHlwZVN0cmluZywgaW5kZXhfYW0sCisJCQkJCQkgImRl ZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMg Ki8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIigle29wdHN9cykiLCAib3B0cyIsIHJlbG9w dGlvbnMpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aH1zIiwgdG1wX29iaik7CisKKwkvKiB0YWJsZXNwYWNl ICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRhYmxlc3Bh Y2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3BhY2V9cyIsICJ0 YWJsZXNwYWNlIiwgdGFibGVzcGFjZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBf b2JqKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0hF UkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmos ICIle3doZXJlfXMiLCAid2hlcmUiLCB3aGVyZUNsYXVzZSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVyZV9j bGF1c2V9cyIsIHRtcF9vYmopOworCisJdGFibGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisg KgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgW09GCisgKiAle29mX3R5cGV9VCB8IFBB UlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRzfXMKKyAqICV7 aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cworICogJXtvbl9jb21taXR9cyAle3RhYmxlc3BhY2V9cworICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlv bglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ TGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBf b2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4 aXN0c31zICV7aWRlbnRpdHl9RCIsIDMsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSk7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRl eHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVj dElkKTsKKworCS8qCisJICogVHlwZWQgdGFibGVzIGFuZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdo dGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3ZQorCSAqIG11c3Qgbm90IHB1dCB0YWJsZV9l bGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcsCisJICogYmVj YXVzZSBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0aGUgcGFyZW50aGVzZXMgbXVzdCBub3QgYmUg ZW1pdHRlZDsKKwkgKiBhbmQgYWxzbywgdHlwZWQgdGFibGVzIGRvIG5vdCBhbGxvdyBmb3IgaW5o ZXJpdGFuY2UuCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUgfHwgbm9kZS0+cGFydGJvdW5k KQorCXsKKwkJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFdlIGNhbid0 IHB1dCB0YWJsZSBlbGVtZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZyBhcyBhbiBhcnJh eQorCQkgKiBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkg Y2xhdXNlIHdvdWxkIGNhdXNlCisJCSAqIGEgc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1 c2UgYW4gaW5kaXJlY3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hl biB0aGVyZSBhcmUgbm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkK KwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9yZWwt PnJlbG9mdHlwZSwgLTEpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT0YgJXtvZl90 eXBlfVQiLCB0bXBfb2JqKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QJICAgKnBhcmVudHM7 CisJCQlPYmpFbGVtICAgICplbGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlv bnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOwor CisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHJldCwgIlBBUlRJVElPTiBPRiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVj dCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24s IG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQg dGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJs ZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lk KTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlpZiAodGFibGVlbHRzKQorCQkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7ZWxlbWVudHM6LCB9cykiLCB0YWJsZWVs dHMpOworCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wX29iaik7CisJfQor CWVsc2UKKwl7CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBUaGVy ZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgTElLRSBjbGF1c2VzIHNlcGFyYXRlbHk7IHRoZXkgaGF2 ZQorCQkgKiBhbHJlYWR5IGJlZW4gdHJhbnNmb3JtZWQgaW50byBjb2x1bW5zIGFuZCBjb25zdHJh aW50cy4KKwkJICovCisKKwkJLyoKKwkJICogUHJvY2VzcyB0YWJsZSBlbGVtZW50czogY29sdW1u IGRlZmluaXRpb25zIGFuZCBjb25zdHJhaW50cy4gIE9ubHkKKwkJICogdGhlIGNvbHVtbiBkZWZp bml0aW9ucyBhcmUgb2J0YWluZWQgZnJvbSB0aGUgcGFyc2Ugbm9kZSBpdHNlbGYuICBUbworCQkg KiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBwZ19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBw YXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Npbmcgc29tZSB0aGluZ3Mgc3VjaCBhcyB0aGUg bmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAqLworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1Rh YmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJ CQkJCSAgZmFsc2UsCS8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkv KiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxl ZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHJldCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRz KTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiKCkiKTsKKworCQkvKgor CQkgKiBBZGQgaW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2Nh biB0aGUgbGlzdCBvZgorCQkgKiBwYXJlbnRzIGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNl IHRoYXQgbWF5IGxhY2sgdGhlIGFjdHVhbAorCQkgKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBh cmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0 aGVtIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkg KiBtb3JlIGFjY3VyYXRlIGFuZCBjb252ZW5pZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0 cy4KKwkJICovCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKG5v ZGUtPmluaFJlbGF0aW9ucyAhPSBOSUwpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmos ICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJ ZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwgIigle3BhcmVudHM6LCB9 RCkiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJfQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle2luaGVyaXRzfXMiLCB0bXBfb2JqKTsKKwl9CisKKwl0bXBfb2Jq ID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3BhY2V9SSIsICJ0YWJs ZXNwYWNlIiwKKwkJCQkJCQkgbm9kZS0+dGFibGVzcGFjZW5hbWUpOworCWVsc2UKKwl7CisJCWFw cGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcF9vYmopOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Rh Ymxlc3BhY2V9cyIsIHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b25f Y29tbWl0fXMiLAorCQkJCQkJIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+b25jb21taXQp KTsKKworCS8qIEZPUiBWQUxVRVMgY2xhdXNlICovCisJaWYgKG5vZGUtPnBhcnRib3VuZCkKKwl7 CisJCS8qCisJCSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFy dGJvdW5kIGluIHRoZSBwYXJzZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2lu YWwgcGFydGJvdW5kIGV4cHJlc3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9y bWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtwYXJ0aXRpb25fYm91 bmR9cyIsICJwYXJ0aXRpb25fYm91bmQiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJv dW5kKG9iamVjdElkKSk7CisJfQorCisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAqLworCXRtcF9v YmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwt PnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJCSBw Z19nZXRfcGFydGtleWRlZl9zaW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRf bnVsbF9vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwYXJ0aXRp b25fYnl9cyIsIHRtcF9vYmopOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wX29iaiA9IG5l d19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2FjY2Vzc19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9k IiwKKwkJCQkJCQkgbm9kZS0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVs bF9vYmplY3QodG1wX29iaiwgIiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3Nf bWV0aG9kfXMiLCB0bXBfb2JqKTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wX29iaiA9IG5l d19vYmp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJewor CQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmoyID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2Up OworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqMikpOwor CX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIoJXt3aXRo OiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3dpdGhfY2xhdXNlfXMiLCB0bXBfb2JqKTsK KworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgor ICogZGVwYXJzZV9DcmVhdGVTdG10IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRo ZSBmaW5hbCBDcmVhdGVTdG10IGZvcgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29t bWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKwor CUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0g Y21kLT5kLmN0YXMucmVhbF9jcmVhdGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNz Lm9iamVjdElkOworCisJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMg YW5kIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIHJlbHR5cGUgJXtpZGVudGl0eX1EICV7 c3ViY21kczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJSZWxhdGlv bihDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnRtcF9vYmo7CisJT2JqVHJlZSAgICAqdG1wX29iajI7CisJTGlzdAkgICAqZHBjb250ZXh0 OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpzdWJjbWRzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwli b29sCQlpc3RhYmxlID0gZmFsc2U7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJT2lkCQkJcmVs SWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwlBbHRlclRhYmxlU3RtdCAqc3RtdCA9 IE5VTEw7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKwlzdG10ID0g KEFsdGVyVGFibGVTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCUFzc2VydChJc0Eoc3RtdCwgQWx0 ZXJUYWJsZVN0bXQpKTsKKworCS8qCisJICogQUxURVIgVEFCTEUgc3ViY29tbWFuZHMgZ2VuZXJh dGVkIGZvciBUYWJsZUxpa2VDbGF1c2UgaXMgcHJvY2Vzc2VkIGluCisJICogdGhlIHRvcCBsZXZl bCBDUkVBVEUgVEFCTEUgY29tbWFuZDsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKHN0 bXQtPnRhYmxlX2xpa2UpCisJCXJldHVybiBOVUxMOworCisJcmVsID0gcmVsYXRpb25fb3Blbihy ZWxJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9y KFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQlyZWxJZCk7CisKKwlzd2l0 Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgor CQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsK KwkJCWlzdGFibGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJ Y2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7CisJ CQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAiVFlQ RSI7CisJCQlpc3R5cGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JFSUdO X1RBQkxFOgorCQkJcmVsdHlwZSA9ICJGT1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNl IFJFTEtJTkRfTUFUVklFVzoKKwkJCXJlbHR5cGUgPSAiTUFURVJJQUxJWkVEIFZJRVciOworCQkJ YnJlYWs7CisKKwkJCS8qIFRPRE8gc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+ cmRfcmVsLT5yZWxraW5kKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtv Ymp0eXBlfXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJp bmcsIHJlbHR5cGUsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpOworCisJZm9yZWFjaChjZWxs LCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1 YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQg KnN1YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlICAg ICp0cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkgICAv KgorCQkqIFNraXAgZGVwYXJzZSBvZiB0aGUgc3ViY29tbWFuZCBpZiB0aGUgb2JqZWN0SWQgZG9l c24ndCBtYXRjaCB0aGUKKwkJKiB0YXJnZXQgcmVsYXRpb24gSUQuIEl0IGNhbiBoYXBwZW4gZm9y IGluaGVyaXRlZCB0YWJsZXMgd2hlbgorCQkqIHN1YmNvbW1hbmRzIGZvciBpbmhlcml0ZWQgdGFi bGVzIGFuZCB0aGUgcGFyZW50IHRhYmxlIGFyZSBib3RoCisJCSogY29sbGVjdGVkIGluIHRoZSBB TFRFUiBUQUxCRSBjb21tYW5kIGZvciB0aGUgcGFyZW50IHRhYmxlLiBXaXRoIHRoZQorCQkqIGV4 Y2VwdGlvbiBvZiB0aGUgaW50ZXJuYWxseSBnZW5lcmF0ZWQgQWRkQ29uc3RyYWludCAoZm9yCisJ CSogQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUykgd2hl cmUgdGhlCisJCSogb2JqZWN0SWRzIGNvdWxkIG1pc21hdGNoIChmb3JlaW4gdGFibGUgaWQgYW5k IHRoZSByZWZlcmVuY2VkIHRhYmxlCisJCSogaWQpLgorCQkqLworCQlpZiAoKHN1Yi0+YWRkcmVz cy5vYmplY3RJZCAhPSByZWxJZCAmJgorCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSBJbnZh bGlkT2lkKSAmJgorCQkJIShzdWJjbWQtPnN1YnR5cGUgPT0gQVRfQWRkQ29uc3RyYWludCAmJgor CQkJICBzdWJjbWQtPnJlY3Vyc2UpICYmCisJCQlpc3RhYmxlKQorCQkJY29udGludWU7CisKKwkJ c3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJ CS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2Vf Q29sdW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAq KSBzdWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkFERCAle29ianR5cGV9cyAle2lmX25vdF9leGlzdHN9cyAle2RlZmluaXRpb259cyIsIDQs CisJCQkJCQkJCQkJIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlwZSA/ ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYWRkIGNvbHVtbiIsCisJCQkJCQkJCQkJImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAor CQkJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4 U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9 IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJ bmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJ CQkJCUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJ CWlkeCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBD T05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJ ICogJWluZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkg Ki8KKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9 SSAle2NvbnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYICV7aW5kZXhfbmFtZX1JICV7ZGVmZXJy YWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwgNiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCQkibmFtZSIs IE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJ CQkJImNvbnN0cmFpbnRfdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5w cmltYXJ5ID8gIlBSSU1BUlkgS0VZIiA6ICJVTklRVUUiLAorCQkJCQkJCQkJCQkiaW5kZXhfbmFt ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlk eCksCisJCQkJCQkJCQkJCSJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJ aXN0bXQtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJ CQkJCQkJCQkiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10 LT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJ QVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2Ug QVRfUmVBZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQljYXNlIEFU X1JlcGxhY2VSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9DaGVja05vdE51bGw6CisJCQljYXNlIEFU X1JlQWRkU3RhdGlzdGljczoKKwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5hbCBvcGVy YXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9D b29rZWRDb2x1bW5EZWZhdWx0OgorCQkJCXsKKwkJCQkJUmVsYXRpb24JYXR0cnJlbDsKKwkJCQkJ SGVhcFR1cGxlCWF0dHR1cDsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0U3RydWN0OworCisJ CQkJCWF0dHJyZWwgPSB0YWJsZV9vcGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCQkJCQlhdHR0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkyKEFUVE5VTSwKKwkJCQkJ CQkJCQkJCSBPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSksCisJCQkJCQkJ CQkJCQkgSW50MTZHZXREYXR1bShzdWJjbWQtPm51bSkpOworCQkJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoYXR0dHVwKSkKKwkJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkJCSBzdWJjbWQt Pm51bSwgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0U3RydWN0ID0gKEZvcm1fcGdf YXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0dHVwKTsKKworCQkJCQkvKgorCQkJCQkgKiBCb3RoIGRl ZmF1bHQgYW5kIGdlbmVyYXRpb24gZXhwcmVzc2lvbiBub3Qgc3VwcG9ydGVkCisJCQkJCSAqIHRv Z2V0aGVyLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFhdHRTdHJ1Y3QtPmF0dGdlbmVyYXRlZCkKKwkJ CQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAor CQkJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCisJCQkJCWhlYXBfZnJlZXR1cGxlKGF0dHR1cCk7 CisJCQkJCXRhYmxlX2Nsb3NlKGF0dHJyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJCQlicmVh azsKKwkJCQl9CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBP UiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9Q IERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRl ZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHRfcmVsOworCQkJCQlI ZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZBVUxUIiwg MiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJ CQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlk cGNvbnRleHRfcmVsID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpLAorCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRy dHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21k LT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0 cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2Rl ZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5E ZWZhdWx0KHJlbCwgYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJICBkcGNvbnRleHRfcmVsLAorCQkJ CQkJCQkJCQkJCQkJCSAgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJ CQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBOT1Qg TlVMTCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVs bCIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0ZvcmNlUm93U2VjdXJpdHk6CisJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlKCJGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfTm9Gb3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiTk8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OICV7aWZfZXhpc3RzfXMiLCAzLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJ ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiaWZfZXhp c3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYg RVhJU1RTIiA6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RhdGlzdGlj czoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIpKTsKKwkJCQkJ aWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLCAzLAorCQkJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJ CSJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlpbnRWYWwoKEludGVn ZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJZWxzZQorCQkJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3Rp Y3N9biIsIDMsCisJCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlz dGljcyIsCisJCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVt LAorCQkJCQkJCQkJCQkJInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJ CWludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJ CQkJCQkJCSBkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3Ry aW5nKSk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJCXN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5k ZWYsIFN0cmluZykpOworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgU0VUIENPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMiLCAzLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQki Y29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdHJWYWwoKFN0 cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9w Q29sdW1uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5cGV9cyAl e2lmX25vdF9leGlzdHN9cyAle2NvbHVtbn1JIiwgNCwKKwkJCQkJCQkJCQkib2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIiwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJ CQkJImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+bWlz c2luZ19vayA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWVfVkEo IkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBzdWJjbWQt PmJlaGF2aW9yKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtjYXNjYWRl fXMiLCB0bXBfb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6 CisJCQkJeworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJ CUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIg KmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNt ZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ ZGVmOworCisJCQkJCWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJ CQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlp ZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQg PSBnZXRfcmVsYXRpb25fY29uc3RyYWludF9vaWQoCisJCQkJCQkJCQkJCQkJCQljbWQtPmQuYWx0 ZXJUYWJsZS5vYmplY3RJZCwgaWR4bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAor CQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJ CQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkJImRlZmlu aXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9j b21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlk eCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRk Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2Ui IGJpdCBzb21ld2hlcmU/ICovCisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5v YmplY3RJZDsKKwkJCQkJYm9vbAkJaXNudWxsOworCQkJCQlIZWFwVHVwbGUJdHVwOworCQkJCQlE YXR1bQkJdmFsOworCQkJCQlDb25zdHJhaW50ICpjb25zdHI7CisKKwkJCQkJQXNzZXJ0KElzQShz dWJjbWQtPmRlZiwgQ29uc3RyYWludCkpOworCQkJCQljb25zdHIgPSBjYXN0Tm9kZShDb25zdHJh aW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFsaWRhdGlvbikK KwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgT2JqZWN0SWRH ZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwKSkK KwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBGZXRjaCBjb25z dHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2YWwgPSBTeXND YWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1fcGdfY29uc3Ry YWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJCQkJCQkJewor CQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJCQkJCWV4cHJz ID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJCX0KKworCQkJ CQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259 cyIsIDMsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50 IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1l KGNvbnN0ck9pZCksCisJCQkJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7 CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50Ogor CQkJCXsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJ CQlDb25zdHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyog SWYgbm8gY29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlp ZiAoIU9pZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJ c0EoYywgQ29uc3RyYWludCkpOworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMiLCA0 LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwK KwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNv bnN0ck9pZCksCisJCQkJCQkJCQkJCSJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkJYy0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJ CQkJCQkJCQkJCSJpbml0X2RlZmVycmVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJYy0+ aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFU RSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25z dHJhaW50OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09OU1RSQUlO VCAle2NvbnN0cmFpbnR9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi dmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29u c3RyYWludDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgQ09OU1RSQUlOVCAl e2NvbnN0cmFpbnR9SSAle2lmX25vdF9leGlzdHN9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZHJvcCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiaWZfbm90X2V4aXN0 cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIE5P VCBFWElTVFMiIDogIiIsCisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5 cGU6CisJCQkJeworCQkJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVs KTsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYgICpkZWY7CisK KwkJCQkJYXR0ID0gJih0dXBkZXNjLT5hdHRyc1tzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQgLSAx XSk7CisJCQkJCWRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisJCQkJCUFzc2VydChJ c0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAor CQkJCQkgKgorCQkJCQkgKiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59 SSBTRVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIEFUVFJJ QlVURSAle2Nhc2NhZGV9cworCQkJCQkgKgorCQkJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIHJl bHR5cGUgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2Nv bGxhdGlvbn1zIENPTFVNTiAle3VzaW5nfXMKKwkJCQkJICovCisJCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFICV7 ZGF0YXR5cGV9VCIsIDQsCisJCQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkJaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29sdW1uIHR5cGUiLAorCQkJCQkJCQkJCQkiY29s dW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkiZGF0YXR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShhdHQtPmF0 dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkJCSBhdHQtPmF0dHR5cG1vZCkpOworCisJCQkJCS8qIEFk ZCBhIENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wX29iajIgPSBuZXdfb2Jq dHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikp CisJCQkJCXsKKwkJCQkJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iajIsICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwkJCQkJfQorCQkJCQllbHNlCisJ CQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iajIpOworCQkJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcF9vYmoyKTsKKworCQkJCQkvKiBJZiBu b3QgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwkJCQkJaWYgKCFp c3R5cGUpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xh dXNlLCB0cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAorCQkJCQkJICogcmFuIGl0IHRocm91Z2ggdHJh bnNmb3JtRXhwciBhbmQgc3RvcmVkIHRoZQorCQkJCQkJICogcmVzdWx0aW5nIG5vZGUgaW4gY29v a2VkX2RlZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhlcmUuCisJCQkJCQkgKi8K KwkJCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJCQkJCQlpZiAoZGVmLT5y YXdfZGVmYXVsdCkKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqMiwgIiV7ZXhw cmVzc2lvbn1zIiwKKwkJCQkJCQkJCQkJCSAiZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJCQkgc3Vi LT51c2luZ2V4cHIpOworCQkJCQkJZWxzZQorCQkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBf b2JqMik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt1c2luZ31zIiwg dG1wX29iajIpOworCQkJCQl9CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBh ZGQgdGhlIENBU0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJ CXRtcF9vYmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJl aGF2aW9yICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i ajIpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7Y2FzY2FkZX1zIiwg dG1wX29iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRP RE9MSVNUCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wX29i aiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJCQkJ c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdl T3duZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJ CQkJCQkJCQkJIm93bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlnZXRfcm9sZXNwZWNf bmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ns dXN0ZXJPbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04gJXtpbmRl eH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVyIG9uIiwK KwkJCQkJCQkJCQkiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCBXSVRIT1VUIENMVVNURVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfU2V0TG9nZ2VkOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExP R0dFRCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Ryb3BPaWRzOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQg T0lEUyIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQg b2lkcyIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0 aG9kfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3Mg bWV0aG9kIiwKKwkJCQkJCQkJCQkiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwK KwkJCQkJCQkJCQkidGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jl c2V0UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmln Z2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRW5hYmxlQWx3YXlzVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBBTFdBWVMgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJp Z2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJCQkJ InRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkRJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVRyaWdBbGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dF UiBBTEwiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmln Z2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoK KwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBBTEwiLCAxLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciBhbGwiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnVXNlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5B QkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImVuYWJsZSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVs ZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhUnVsZToKKwkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJ CQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJESVNBQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRpc2FibGUgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0 OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCQki cGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFyZW50fUQiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJ CQkJInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRy ZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT0YgJXt0eXBlX29mfVQiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBvZiIsCisJCQkJCQkJCQkJInR5cGVfb2YiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+YWRkcmVz cy5vYmplY3RJZCwgLTEpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9mOgor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfUmVwbGljYUlkZW50aXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVQTElD QSBJREVOVElUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAicmVwbGlj YSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNt ZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElU WV9ERUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9 cyIsICJpZGVudCIsCisJCQkJCQkJCQkJCSAiREVGQVVMVCIpOworCQkJCQkJYnJlYWs7CisJCQkJ CWNhc2UgUkVQTElDQV9JREVOVElUWV9GVUxMOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJCQkJCQkJCSAiRlVMTCIpOworCQkJ CQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJCQkJ CQkJCSAiTk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElU WV9JTkRFWDoKKwkJCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7 aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkJCSAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJ CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCB0bXBfb2JqMik7 CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJPVyBM RVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5h YmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxl Um93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBM RVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlz YWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjaWZkZWYgVE9ET0xJU1QKKwkJ CWNhc2UgQVRfR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wX29iaiA9IGRlcGFyc2VfRmR3T3B0aW9u cygoTGlzdCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJ CQljYXNlIEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkFUVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJInBh cnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3Vi LT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0g UkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w X29iaiwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCQkJCSAicGFydGl0aW9uX2JvdW5k IiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mub2Jq ZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgor CQkJeworCQkJCVBhcnRpdGlvbkNtZCAqY21kOworCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRl ZiwgUGFydGl0aW9uQ21kKSk7CisJCQkJY21kID0gKFBhcnRpdGlvbkNtZCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3Bh cnRpdGlvbl9pZGVudGl0eX1EICV7Y29uY3VycmVudH1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJ CSJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJ CXN1Yi0+YWRkcmVzcy5vYmplY3RJZCksCisJCQkJCQkJCQkJY21kLT5jb25jdXJyZW50ID8gIkNP TkNVUlJFTlRMWSIgOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBBVF9EZXRh Y2hQYXJ0aXRpb25GaW5hbGl6ZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFD SCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJ CQkJCQkJCQkJInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlP aWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVm ICAqY29sZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0 dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxp ZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRy dWUpOworCisJCQkJCWlmIChPaWRJc1ZhbGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNl cWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5 LCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiQUREICV7aWRl bnRpdHlfY29sdW1ufXMiLCBzZXFkZWYpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVh azsKKwkJCWNhc2UgQVRfU2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpkZWZl bDsKKwkJCQkJY2hhcgkJaWRlbnRpdHkgPSAwOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJ CQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJ CQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1 YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQt PmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlk ZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVm R2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxh dGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElk ZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJ CQkJCWlmIChPaWRJc1ZhbGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRl cGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisJCQkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOwor CQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0 eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWZfZXhpc3Rz fXMiLAorCQkJCQkJCQkJICJpZl9leGlzdHMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19v ayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJ CQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJ CQkJIHN1YmNtZC0+c3VidHlwZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBXZSBk b24ndCBzdXBwb3J0IHJlcGxpY2F0aW5nIEFMVEVSIFRBQkxFIHdoaWNoIGNvbnRhaW5zIHZvbGF0 aWxlCisJCSAqIGZ1bmN0aW9ucyBiZWNhdXNlIEl0J3MgcG9zc2libGUgdGhlIGZ1bmN0aW9ucyBj b250YWluIERETC9ETUwgaW4KKwkJICogd2hpY2ggY2FzZSB0aGVzZSBvcGVyYXRpb25zIHdpbGwg YmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRp dGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNjZXNz ZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBhbGxv d2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxp a2UgdGhlIHRhYmxlcworCQkgKiBhY2Nlc3NlZCBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBl dmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRp bGVfZnVuY3Rpb25zKChOb2RlICopIGV4cHJzKSkKKwkJCWVsb2coRVJST1IsICJBTFRFUiBUQUJM RSBjb21tYW5kIHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIik7 CisKKwkJLyoKKwkJICogQ2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhl cmUgaXMgbm8gdm9sYXRpbGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhw cnMpOworCQlleHBycyA9IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlpZiAobGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21kcyk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNv bW1hbmRzLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBEUk9QICVzIElGIEVYSVNUUyAlJXtv YmppZGVudGl0eX1zICV7Y2FzY2FkZX1zCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1h bmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJ CSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCWNoYXIJ ICAgKmNvbW1hbmQ7CisJY2hhcgkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsK KwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJSnNvbmIJICAgKmpz b25iOworCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEo IkRST1AgJXtvYmp0eXBlfXMgSUYgRVhJU1RTICV7b2JqaWRlbnRpdHl9cyIsIDIsCisJCQkJCQkg ICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywgb2JqZWN0dHlwZSwKKwkJCQkJCSAgIm9iamlkZW50 aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlv ciA9PSBEUk9QX0NBU0NBREUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2Nhc2Nh ZGV9cyIsIHRtcF9vYmopOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNv bW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRF RF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5n IG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBh bGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5 cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmpl Y3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4 dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkp CisJCXJldHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5 dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhw YXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKExPRywgInVucmVjb2duaXpl ZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWco cGFyc2V0cmVlKSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXb3JraG9yc2Ug dG8gZGVwYXJzZSBhIENvbGxlY3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGls aXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sK KwlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4 dDsKKwlNZW1vcnlDb250ZXh0IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAg KmNvbW1hbmQgPSBOVUxMOworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2Nh dGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAg Y29udGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9y eSBoYW5kbGluZyBjb2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8g YmVmb3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAg ICJkZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJ CQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0 KTsKKworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52 b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVy c2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwg b2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFi bGUiIHRvCisJICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRp bmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNh bGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBk byBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNl YXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9 IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgt PmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsK KworCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJ CWNhc2UgU0NUX1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7 CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0Fs dGVyUmVsYXRpb24oY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgor CQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQi LCBjbWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRy ZWUpCisJeworCQlKc29uYgkgICAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25i KHRyZWUpOworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBK U09OQl9FU1RJTUFURURfTEVOKTsKKwl9CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0 IHNpbmNlIHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29u dGV4dCwgdGhlIG91dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7 CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFu ZCwgcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFu ZCBpcyBleHBhbmRlZCBmdWxseSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVu IGluIHRoZQorICogZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRs X2RlcGFyc2VfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQg KmNtZCA9IChDb2xsZWN0ZWRDb21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJ ICAgKmNvbW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCB0 cnVlKTsKKworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4 dChjb21tYW5kKSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29u LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmJkM2I1NGU1ZQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCAr MSw3NzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNP TiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgor ICogQ29udmVyc2lvbiBzcGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBob3cgd2UgZXhwYW5kIHRo ZSBKU09OIGVsZW1lbnQgaW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlT cGVjVHlwZU5hbWUsCisJU3BlY09wZXJhdG9yTmFtZSwKKwlTcGVjRG90dGVkTmFtZSwKKwlTcGVj U3RyaW5nLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lkZW50aWZp ZXIsCisJU3BlY1JvbGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFyeSB2YWx1 ZSB0aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwordHlwZWRl ZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30JCQlqc29uX3Ry aXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5m byBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZT cGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMg dm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJ CQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCQkJCSAgIGNv bnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10 c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZXBhcnNlX2RkbF9qc29uX3Rv X3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBm aW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYg aXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElm IGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSBy ZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1 ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIs IGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7 CisJanNvbl90cml2YWx1ZSByZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXku dmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihr ZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIs CisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJl dHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJ CQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0 dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog R2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZl biBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3Ry aW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJy b3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisg KgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBj b3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNl dCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRf c3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIg KmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpz b25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8q IFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlr ZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtl eS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZh bHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7 CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBO VUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4gSlNP TiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZTdHJp bmcpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUg c3RyaW5nIiwga2V5bmFtZSkpKTsKKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3RyaW5n LnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0g dmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOworfQor CisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsgXAor CQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVycm1z ZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkKKwor LyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nLgor ICoKKyAqIEZpbmQgdGhlICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5k IGV4cGFuZCBpdCBpbnRvIHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGlj IHZvaWQKK2V4cGFuZF9mbXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIFN0 cmluZ0luZm8gYnVmKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOwor CWNvbnN0IGNoYXIgKmNwOworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICpl bmRfcHRyOworCWludAkJCWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGNvbnRhaW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3Rh cnRfcHRyICsgbGVuOworCisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsr KQorCXsKKwkJY29udlNwZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0gZmFs c2U7CisJCWNoYXIJICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxM OworCisJCWlmICgqY3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3Jv KGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNFX1BPSU5U RVIoY3AsIGVuZF9wdHIpOworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmdsZSAl ICovCisJCWlmICgqY3AgPT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3Jv KGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUgbWFu ZGF0b3J5IGVsZW1lbnQgbmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJICog KHdoaWNoIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIgYSBj b2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBw YXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBw ZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFy YnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7 IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkv KgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUg aXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJ CQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRU byA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BB UlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlp ZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5k X3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3Jv KGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7 CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFy cmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJz aW9uIHNwZWNpZmllciIpKSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgor CQkJCXNwZWNpZmllciA9IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6 CisJCQkJc3BlY2lmaWVyID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdz JzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6 CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNl ICdUJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjVHlwZU5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNl ICdPJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjT3BlcmF0b3JOYW1lOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ1InOgorCQkJCXNwZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lm aWVyIFwiJWNcIiIsICpjcCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVu dCB0byBiZSBleHBhbmRlZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXku dmFsLnN0cmluZy52YWwgPSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBh cmFtKTsKKworCQl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIs IEpCX0ZPQkpFQ1QsICZrZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9zc2li bHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYgKGlz X2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNl cCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2Vs ZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisK Ky8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBUaGUg dmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7 CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsK KworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwu c3RyaW5nLmxlbik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZp ZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUg YXMgYSBkb3Qtc2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBi aW5hcnkgYW5kIG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAi b2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUg cXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRv dCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQg YSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICog bmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUo U3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOwor CisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KTsKKworCXN0ciA9IGZpbmRfc3Ry aW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7 CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0 cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwu YmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0 cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRpZmllcihz dHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVl IGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfdHlwZW5h bWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc2No ZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJ anNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9kZWNvcjsKKworCS8qCisJ ICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVt YSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRp ZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0 ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBU aGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBp bnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdo aWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRv IGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQg YXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9 IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwK KwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmlu ZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJ CQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3Ry aW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBh cnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJh eV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlf ZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0Ogor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkgZWxlbWVudCIpKSk7CisJ fQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwg cXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAn KQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOwkvKiBTcGVjaWFsIHR5 cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1 b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1l KSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2Rz dHIgOiAiIiwgYXJyYXlfZGVjb3IpOworCXBmcmVlKHNjaGVtYSk7CisJcGZyZWUodHlwZW5hbWUp OworCXBmcmVlKHR5cG1vZHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFz IGFuIG9wZXJhdG9yIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9vcGVy YXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpz dHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwu YmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBT Y2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIgIT0gTlVMTCAmJiBzdHJb MF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRl bnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9i am5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5k IGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3Ry aW5nIG9yIG9mCisgKiB0eXBlIEJpbmFyeS4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgaXQgbXVzdCBj b250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBleHBh bmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50Igor ICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3Ry aW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFk ZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4KKyAq CisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGNoZWNrIGpzb252YWwgaXMgb2YgdHlw ZSBqYnZTdHJpbmcgb3IgamJ2QmluYXJ5LgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252 YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChq c29udmFsLT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8o YnVmLCBqc29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3Ry aW5nLmxlbik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsK KwkJanNvbl90cml2YWx1ZSBwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVz ZW50Iik7CisKKwkJLyoKKwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwgdGhpcyBl bGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRydWUgb3Ig YWJzZW50KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVz ZW50ID09IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRfcmVjdXJz aXZlKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJZWxzZQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUg YXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0 cmxpdChTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpz dHI7CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZp eGVzW10gPSAiX1hZWlpZWF8iOworCWludAkJCWRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5z dHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsK KworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEg c2luZ2xlIHF1b3RlICovCisJaWYgKHN0cnBicmsoc3RyLCAiXCdcXCIpID09IE5VTEwpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQly ZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXIt cXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVs aW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBk cXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hhciAlIChz aXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8KKwlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5IHByb2R1 Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICovCisJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFkZWxpbS5k YXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBF eHBhbmQgYSBKU09OIHZhbHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpz b252YWwpCit7CisJY2hhcgkgICAqc3RyZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0 cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVt ZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCBzdHJkYXR1bSk7CisJcGZyZWUoc3RyZGF0dW0pOworfQorCisvKgorICogRXhw YW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHJvbGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMgZWxlbWVu dCBpcyBzZXQgdG8KKyAqIHRydWUsIFBVQkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVzKTsgb3Ro ZXJ3aXNlLCBleHBhbmQgdGhlIGdpdmVuIHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMgYW4gaWRl bnRpZmllci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJanNvbl90cml2YWx1ZSBpc19wdWJsaWM7 CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1YmxpYyA9 PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIpOworCWVs c2UKKwl7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkJ ICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJaWYgKHJvbGVuYW1lKQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkpOworCQkJ cGZyZWUocm9sZW5hbWUpOworCQl9CisJfQorfQorCisvKgorICogRXhwYW5kIG9uZSBKU09OIGVs ZW1lbnQgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQorICogY29u dmVyc2lvbiBzcGVjaWZpZXIuICBUaGUgZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwgYW5kIGFu IGVycm9yIGlzIHJhaXNlZAorICogaWYgaXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4cGVjdCBm b3IgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8g YWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICog YmVpbmcgc2V0IHRvICJmYWxzZSIgaW4gZm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24pLgorICov CitzdGF0aWMgYm9vbAorZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBj aGFyICpwYXJhbSwgSnNvbmJWYWx1ZSAqanNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNw ZWNpZmllciwgY29uc3QgY2hhciAqZm10KQoreworCWJvb2wJCXJlc3VsdCA9IHRydWU7CisJRXJy b3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4g YSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLwor CWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2Nh bGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29u dGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ IGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2gg KHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFy YW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJ CQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFt ZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZC aW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcg b3Igc3RydWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFt LCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1 ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3Ry bGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlTmFtZToKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQi LAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5 cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvck5h bWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwg Z290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNv bnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVt YmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNc IiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRf anNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1Jv bGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwg Z290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNv bnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQll cnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJy YXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVy IHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgor ICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmlu Z0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFy ICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAq Zm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250 YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29uYlZhbHVlCXY7CisJ aW50CQkJdHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEgYXJyYXll bGVtOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVy ZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRl eHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJn ID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4 dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKwor CWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJl bGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwljb250YWlu ZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJaWYgKCFKc29uQ29udGFpbmVySXNBcnJh eShjb250YWluZXIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5v dCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWluaXRTdHJpbmdJbmZvKCZhcnJheWVsZW0p OworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChjb250YWluZXIpOworCXdoaWxlICgodHlwZSA9 IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCWlm ICh0eXBlID09IFdKQl9FTEVNKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7 CisKKwkJCWlmIChleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoJmFycmF5ZWxlbSwgcGFyYW0sICZ2 LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJeworCQkJCWlmICghZmlyc3QpCisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7CisKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJ bmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5ZWxlbS5sZW4pOworCQkJCWZpcnN0ID0gZmFs c2U7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0g c3FsZXJyY29udGV4dC5wcmV2aW91czsKK30KKworLyoKKyAqIFdvcmtob3JzZSBmb3IgZGRsX2Rl cGFyc2VfZXhwYW5kX2NvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kZGxfanNvbl90b19z dHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJRGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOwor CVN0cmluZ0luZm8JYnVmID0gKFN0cmluZ0luZm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9E YXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhidWYpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2Fs bDEoanNvbmJfaW4sIFBvaW50ZXJHZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpzb25i ICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29uYi0+ cm9vdCwgYnVmKTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1 cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0 YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEg c3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUg JS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQg aW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBm b2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBz cGVjaWZpZXJzIGFyZToKKyAqCisgKiAlCQlleHBhbmQgdG8gYSBsaXRlcmFsICUKKyAqIEkJCWV4 cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQlleHBhbmQg YXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFzIGEgdHlw ZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhwYW5kIGFz IGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBzCQlleHBh bmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFzIGEgc2lt cGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAocG9z c2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBuYW1lIG1h eSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVkCisgKiBi eSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIGV4 cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3IgaXMgdXNl ZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVtCitkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJICAgKmpz b24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJanNvbl9z dHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdf dG9fdGV4dChkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoK KyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNp b24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywg aWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2 b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcg XCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YwppbmRleCA2OTAyNzA5OTU2Li40NDcyZTI4ZDcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jCkBAIC0xODI1LDYgKzE4MjUsNyBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21t YW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNh c2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2Fz ZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJ CQljaGFyCSAgICp0eXBlOwpAQCAtMTg0Miw2ICsxODQzLDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRl b3BjLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZp ZykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNt ZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5h ZGRyZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0 aGUgc2FtZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKaW5kZXgg NDJjY2VkOWViZS4uMjg0NGQzNjUyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKQEAgLTE3 LDYgKzE3LDggQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnY29weXRvLmMnLAogICAn Y3JlYXRlYXMuYycsCiAgICdkYmNvbW1hbmRzLmMnLAorICAnZGRsX2RlcGFyc2UuYycsCisgICdk ZGxfanNvbi5jJywKICAgJ2RlZmluZS5jJywKICAgJ2Rpc2NhcmQuYycsCiAgICdkcm9wY21kcy5j JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDg2ZWI4ZThjNTguLmFlMTZmMDE5NzIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4OTEsNCArMTE4OTEsMTAgQEAKICAgcHJvcmV0 dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3Vt bWFyeScsCiAgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9LAog Cit7IG9pZCA9PiAnNDY0MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRv IEpTT04gZm9ybWF0IHN0cmluZycsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24n LCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5k JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV90b19qc29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBk ZXNjciA9PiAnZXhwYW5kIEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywK KyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGYzOWFiODU4 NmEuLjBjM2QwZTkwNWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTE5NzEsNiArMTk3MSw3 IEBAIHR5cGVkZWYgc3RydWN0IEFsdGVyVGFibGVTdG10CiAJTGlzdAkgICAqY21kczsJCQkvKiBs aXN0IG9mIHN1YmNvbW1hbmRzICovCiAJT2JqZWN0VHlwZQlvYmp0eXBlOwkJLyogdHlwZSBvZiBv YmplY3QgKi8KIAlib29sCQltaXNzaW5nX29rOwkJLyogc2tpcCBlcnJvciBpZiB0YWJsZSBtaXNz aW5nICovCisJYm9vbCAgICAgICAgdGFibGVfbGlrZTsJCS8qIGludGVybmFsbHkgZ2VuZXJhdGVk IGZvciBUYWJsZUxpa2VDbGF1c2UgKi8KIH0gQWx0ZXJUYWJsZVN0bXQ7CiAKIHR5cGVkZWYgZW51 bSBBbHRlclRhYmxlVHlwZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJz ZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjljMjU0OWM5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAsMCArMSwyMyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogZGRsX2RlcGFyc2UuaAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQQVJTRV9ICisjZGVmaW5lIERETF9ERVBB UlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisKK2V4dGVybiBjaGFy ICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFy ICpqc29uYik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAq b2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCQkJCSAgRHJvcEJlaGF2 aW9yIGJlaGF2aW9yKTsKKworCisjZW5kaWYJCQkJCQkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRl L3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggYjU4NTgxMGI5YS4uMWZjYTIyN2YwNSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5j bHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC0yOSw3ICsyOSw4IEBAIHR5cGVkZWYgZW51 bSBDb2xsZWN0ZWRDb21tYW5kVHlwZQogCVNDVF9BbHRlck9wRmFtaWx5LAogCVNDVF9BbHRlckRl ZmF1bHRQcml2aWxlZ2VzLAogCVNDVF9DcmVhdGVPcENsYXNzLAotCVNDVF9BbHRlclRTQ29uZmln CisJU0NUX0FsdGVyVFNDb25maWcsCisJU0NUX0NyZWF0ZVRhYmxlQXMKIH0gQ29sbGVjdGVkQ29t bWFuZFR5cGU7CiAKIC8qCkBAIC0zOSw2ICs0MCw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3Rl ZEFUU3ViY21kCiB7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwkJLyogYWZmZWN0ZWQgY29sdW1u LCBjb25zdHJhaW50LCBpbmRleCwgLi4uICovCiAJTm9kZQkgICAqcGFyc2V0cmVlOworCWNoYXIJ ICAgKnVzaW5nZXhwcjsKIH0gQ29sbGVjdGVkQVRTdWJjbWQ7CiAKIHR5cGVkZWYgc3RydWN0IENv bGxlY3RlZENvbW1hbmQKQEAgLTYyLDYgKzY0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVk Q29tbWFuZAogCQl7CiAJCQlPaWQJCQlvYmplY3RJZDsKIAkJCU9pZAkJCWNsYXNzSWQ7CisJCQli b29sCQlyZXdyaXRlOwogCQkJTGlzdAkgICAqc3ViY21kczsKIAkJfQkJCWFsdGVyVGFibGU7CiAK QEAgLTEwMCw2ICsxMDMsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7 CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJ eworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJ fQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50Owkv KiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwOTMxNjAzOWU0 Li5hY2NlZWYwYjI2IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYxMiw2ICsxNjEy LDkgQEAgT1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpFbGVt CitPYmpUcmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1lc3Bh Y2VTZWFyY2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE4NCw2ICszMTg3LDcgQEAgY29t cGFyZV9jb250ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxfY29u dGV4dAogY29udmVydF90ZXN0ZXhwcl9jb250ZXh0Citjb252U3BlY2lmaWVyCiBjb3B5X2RhdGFf ZGVzdF9jYgogY29weV9kYXRhX3NvdXJjZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoyLjM0LjEKCg== --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v63-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us34o6 RnJvbSA0Mjk3NjBiOTk2ZTg5YTcxNGRhYTNmY2UwOTZmNzY5OWU3Njk2YjE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMDg6MjQ6MzIgLTA1MDAKU3ViamVjdDogW1BBVENI IHY2MyA3LzddIERvY3VtZW50IERETCByZXBsaWNhdGlvbiBhbmQgRERMIGRlcGFyc2VyLgoKLS0t CiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIHwgMTA1NyArKysrKysrKysr KysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTA1NyBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCBiL2RvYy9zcmMv c2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKaW5kZXggMWJkNTY2MGM4Ny4uOTI4ZTBlZmI0 MiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCkBAIC0xNDM3LDYgKzE0Mzcs MTA2MyBAQCB0ZXN0X3N1Yj0jIFNFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgaWQ7CiAKICA8L3Nl Y3QxPgogCisgPHNlY3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9uLWRkbCI+CisgIDx0aXRsZT5E REwgUmVwbGljYXRpb248L3RpdGxlPgorICA8cGFyYT4KKyAgICBEYXRhIERlZmluaXRpb24gQ29t bWFuZHMgKERETHMpIGNhbiBiZSByZXBsaWNhdGVkIHVzaW5nIGxvZ2ljYWwgcmVwbGljYXRpb24u CisgICAgV2hpbGUgZW5hYmxlZCB0aGlzIGZlYXR1cmUgYXV0b21hdGljYWxseSByZXBsaWNhdGVz IHN1cHBvcnRlZCBEREwgY29tbWFuZHMKKyAgICB0aGF0IGFyZSBzdWNjZXNzZnVsbHkgZXhlY3V0 ZWQgb24gYSBwdWJsaXNoZXIgdG8gYSBzdWJzY3JpYmVyLiBUaGlzIGlzCisgICAgZXNwZWNpYWxs eSB1c2VmdWwgaWYgeW91IGhhdmUgbG90cyBzY2hlbWEgY2hhbmdlcyBvdmVyIHRpbWUgdGhhdCBu ZWVkIHJlcGxpY2F0aW9uLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgRm9yIGV4YW1wbGUs IHdoZW4gZW5hYmxlZCBhIENSRUFURSBUQUJMRSBjb21tYW5kIGV4ZWN1dGVkIG9uIHRoZSBwdWJs aXNoZXIgZ2V0cworICAgIFdBTC1sb2dnZWQsIGFuZCBmb3J3YXJkZWQgdG8gdGhlIHN1YnNjcmli ZXIgdG8gcmVwbGF5OyBhIHN1YnNlcXVlbnQgIkFMVEVSCisgICAgU1VCU0NSSVBUSU9OIC4uLiBS RUZSRVNIIFBVQkxJQ0FUSU9OIiBpcyBydW4gb24gdGhlIHN1YnNjcmllciBkYXRhYmFzZSBzbyBh bnkKKyAgICBmb2xsb3dpbmcgRE1MIGNoYW5nZXMgb24gdGhlIG5ldyB0YWJsZSBjYW4gYmUgcmVw bGljYXRlZCB3aXRob3V0IGEgaGl0Y2guCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBEREwg cmVwbGljYXRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgaXQgY2FuIGJlIGVuYWJsZWQgYXQg ZGlmZmVyZW50IGxldmVscworICAgIHVzaW5nIHRoZSBkZGwgUFVCTElDQVRJT04gb3B0aW9uLiBU aGlzIG9wdGlvbiBjdXJyZW50bHkgaGFzIHR3byBsZXZlbHMgYW5kIGFyZQorICAgIG9ubHkgYWxs b3dlZCB0byBiZSBzZXQgaWYgdGhlIFBVQkxJQ0FUSU9OIGlzIEZPUiBBTEwgVEFCTEVTLgorICA8 L3BhcmE+CisKKyAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgICAgYWxsOiB0aGlzIG9wdGlvbiBlbmFibGVzIHJlcGxpY2F0aW9uIG9mIGFsbCBzdXBw b3J0ZWQgRERMIGNvbW1hbmRzLgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgdGFibGU6IHRoaXMgb3B0aW9uIGVu YWJsZXMgcmVwbGljYXRpb24gb2YgVGFibGUgRERMIGNvbW1hbmRzLAorICAgICAgICB3aGljaCBp bmNsdWRlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBDUkVBVEUvQUxURVIvRFJPUCBUQUJMRQor ICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQ1JFQVRFIFRBQkxF IEFTCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAg ICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L2l0 ZW1pemVkbGlzdD4KKworICA8c2VjdDIgaWQ9ImRkbC1yZXBsaWNhdGlvbi1vcHRpb24tZXhhbXBs ZXMiPgorICAgIDx0aXRsZT5FeGFtcGxlcyAtIFNldHVwIERETCBSZXBsaWNhdGlvbiBvbiB0aGUg UHVibGlzaGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgQ3JlYXRlIGEgbmV3IHB1Ymxp Y2F0aW9uIHdpdGggYWxsIGRkbCByZXBsaWNhdGlvbiBlbmFibGVkOgorPHByb2dyYW1saXN0aW5n PgorQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKGRkbCA9ICdh bGwnKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBFbmFi bGUgdGFibGUgZGRsIHJlcGxpY2F0aW9uIGZvciBhbiBleGlzdGluZyBQdWJsaWNhdGlvbjoKKzxw cm9ncmFtbGlzdGluZz4KK0FMVEVSIFBVQkxJQ0FUSU9OIG15cHViIFNFVCAoZGRsID0gJ3RhYmxl Jyk7Cis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICA8L3NlY3QyPgorCisgIDxzZWN0MiBp ZD0iZGRsLXJlcGxpY2F0aW9uLXN1cHBvcnRlZC1jb21tYW5kcyI+CisgICAgPHRpdGxlPlN1cHBv cnRlZCBEREwgY29tbWFuZHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgRERMIGNv bW1hbmRzIHN1cHBvcnRlZCBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBhcmUgbGlzdGVkIGluIHRo ZSBmb2xsb3dpbmcKKyAgICAgIG1hdHJpeC4gTm90ZSB0aGF0IGdsb2JhbCBjb21tYW5kcyBjYW4g YmUgZXhlY3V0ZWQgYXQgYW55IGRhdGFiYXNlIGFuZCBhcmUgY3VycmVudGx5CisgICAgICBub3Qg c3VwcG9ydGVkIGZvciByZXBsaWNhdGlvbiwgZ2xvYmFsIGNvbW1hbmRzIGluY2x1ZGUgUk9MRSBz dGF0ZW1lbnRzLCBEYXRhYmFzZQorICAgICAgc3RhdGVtZW50cywgVGFibGVTcGFjZSBzdGF0ZW1l bnRzIGFuZCBzb21lIG9mIHRoZSBHcmFudFN0bXQvUmV2b2tlU3RtdCBpZiB0aGUgdGFyZ2V0Cisg ICAgICBvYmplY3QgaXMgYSBnbG9iYWwgb2JqZWN0LgorICAgIDwvcGFyYT4KKworICAgIDx0YWJs ZSBpZD0iZGRsLXJlcGxpY2F0aW9uLWJ5LWNvbW1hbmQtdGFnIj4KKyAgICAgIDx0aXRsZT5EREwg UmVwbGljYXRpb24gU3VwcG9ydCBieSBDb21tYW5kIFRhZzwvdGl0bGU+CisgICAgICA8dGdyb3Vw IGNvbHM9IjMiPgorICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wxIiBjb2x3aWR0aD0iMioi Lz4KKyAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMiIgY29sd2lkdGg9IjEqIi8+CisgICAg ICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDMiIGNvbHdpZHRoPSIxKiIvPgorICAgICAgPHRoZWFk PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5Db21tYW5kIFRhZzwvZW50cnk+CisgICAg ICAgIDxlbnRyeT5Gb3IgUmVwbGljYXRpb248L2VudHJ5PgorICAgICAgICA8ZW50cnk+Tm90ZXM8 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgPC90aGVhZD4KKyAgICAgIDx0Ym9keT4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEFH R1JFR0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIENPTExBVElP TjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBDT05WRVJTSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIERBVEFCQVNF PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkFMVEVSIERFRkFVTFQgUFJJVklMRUdFUzwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBE T01BSU48L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRVZFTlQgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBF WFRFTlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVI8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+QUxURVIgRk9SRUlHTiBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBGVU5DVElPTjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5BTFRFUiBJTkRFWDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBMQU5HVUFHRTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5B TFRFUiBMQVJHRSBPQkpFQ1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgTUFURVJJQUxJWkVEIFZJRVc8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+QUxURVIgT1BFUkFUT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgT1BFUkFUT1IgQ0xBU1M8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+QUxURVIgT1BFUkFUT1IgRkFNSUxZPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFBPTElD WTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQUk9DRURVUkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUFVCTElDQVRJ T048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBST1VUSU5FPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkFMVEVSIFJVTEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNDSEVNQTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5B TFRFUiBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBTRVJWRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg U1RBVElTVElDUzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBTVUJTQ1JJUFRJT048L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxU RVIgU1lTVEVNPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRBQkxF U1BBQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5BTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRFWFQg U0VBUkNIIFBBUlNFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhUIFNFQVJDSCBURU1QTEFURTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5BTFRFUiBUUkFOU0ZPUk08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVFJJR0dFUjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5BTFRFUiBUWVBFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFVTRVIgTUFQUElORzwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5BTFRFUiBWSUVXPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFOQUxZWkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QkVHSU48L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q0FMTDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DSEVDS1BPSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNMT1NFPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNMT1NFIENVUlNPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DTE9TRSBDVVJTT1IgQUxMPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkNMVVNURVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09NTUVOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT01NSVQ8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q09NTUlUIFBSRVBBUkVEPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPUFk8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09QWSBG Uk9NPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBBQ0NFU1MgTUVUSE9EPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBB R0dSRUdBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENPTExB VElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ09OU1RSQUlOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ09O VkVSU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgREFUQUJBU0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIERP TUFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRVZFTlQgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUg RVhURU5TSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DUkVBVEUgRk9SRUlHTiBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRlVOQ1RJT048L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q1JFQVRFIElOREVYPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBMQU5HVUFHRTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DUkVBVEUgTUFURVJJQUxJWkVEIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIE9QRVJBVE9S PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBPUEVSQVRPUiBDTEFTUzwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgT1BF UkFUT1IgRkFNSUxZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBQT0xJQ1k8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRF IFBST0NFRFVSRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUFVCTElDQVRJT048L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JF QVRFIFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFJVTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNDSEVN QTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0VRVUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNFUlZFUjwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5DUkVBVEUgU1RBVElTVElDUzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU1VCU0NSSVBU SU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEFCTEUgQVM8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFU1BBQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05B Ulk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVB VEUgVEVYVCBTRUFSQ0ggVEVNUExBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRSQU5TRk9STTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DUkVBVEUgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVFlQRTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5DUkVBVEUgVVNFUiBNQVBQSU5HPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBWSUVXPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRFQUxMT0NBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+REVBTExPQ0FURSBBTEw8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+REVDTEFS RSBDVVJTT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQ8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RElTQ0FSRCBBTEw8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRCBQTEFOUzwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVND QVJEIFNFUVVFTkNFUzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEIFRFTVA8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RE88L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+RFJPUCBBQ0NFU1MgTUVUSE9EPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQUdHUkVHQVRFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkRST1AgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIENPTExBVElPTjwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIENPTlNUUkFJTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBDT05WRVJTSU9OPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRST1AgREFUQUJBU0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBET01BSU48L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBF VkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRVhURU5TSU9OPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag Rk9SRUlHTiBEQVRBIFdSQVBQRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBGT1JFSUdOIFRBQkxFPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkRST1AgRlVOQ1RJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIExBTkdVQUdFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgTUFURVJJQUxJWkVEIFZJRVc8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBPUEVSQVRPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE9QRVJBVE9SIENMQVNTPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgT1BFUkFUT1IgRkFNSUxZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgT1dORUQ8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBQT0xJQ1k8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBQUk9DRURVUkU8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBQVUJMSUNBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBST1VU SU5FPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkRST1AgUlVMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFNDSEVNQTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU0VSVkVSPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgU1RBVElTVElDUzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFNVQlNDUklQVElPTjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEFCTEVTUEFDRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBURVhUIFNFQVJDSCBESUNU SU9OQVJZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEVYVCBTRUFSQ0ggUEFSU0VSPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgVEVYVCBTRUFSQ0ggVEVNUExBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUUkFOU0ZPUk08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+RFJPUCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVFlQRTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9Q IFVTRVIgTUFQUElORzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RVhFQ1VURTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkZFVENIPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkdSQU5UPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkdSQU5UIFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+SU1QT1JUIEZPUkVJR04gU0NIRU1BPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPklOU0VSVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5MSVNURU48L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TE9BRDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5MT0NLIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPk1FUkdFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPk1PVkU8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Tk9USUZZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlBSRVBBUkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UFJFUEFSRSBU UkFOU0FDVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUFTU0lHTiBPV05FRDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUZSRVNI IE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVMRUFT RTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5SRVNFVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRVZPS0U8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVWT0tF IFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Uk9MTEJBQ0s8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Uk9MTEJBQ0sgUFJFUEFSRUQ8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+U0FWRVBPSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlNFQ1VSSVRZIExBQkVMPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPlNFVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5TRVQgQ09OU1RSQUlOVFM8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+U0hPVzwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5TVEFSVCBUUkFOU0FDVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5VTkxJU1RFTjwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5VUERBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+VkFDVVVNPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5 PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlk PSJkZGwtcmVwbGljYXRpb24tZGRsLWRlcGFyc2VyIj4KKyAgICA8dGl0bGU+RERMIERlcGFyc2Vy PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBEREwgZGVwYXJzZXIgdXRpbGl0eSBpcyBp bnZva2VkIGR1cmluZyB0aGUgcmVwbGljYXRpb24gb2YgRERMcy4gVGhlIERETAorICAgICAgZGVw YXJzZXIgaXMgY2FwYWJsZSBvZiBjb252ZXJ0aW5nIGEgRERMIGNvbW1hbmQgaW50byBmb3JtYXR0 ZWQgSlNPTiBibG9iLCB3aXRoCisgICAgICB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHJl Y29uc3RydWN0IHRoZSBEREwgY29tbWFuZHMgYXQgdGhlIGRlc3RpbmF0aW9uLiBUaGUKKyAgICAg IGJlbmVmaXQgb2YgdXNpbmcgdGhlIGRlcGFyc2VyIG91dHB1dCBjb21wYXJlZCB0byB0aGUgb3Jp Z2luYWwgY29tbWFuZCBzdHJpbmcKKyAgICAgIGluY2x1ZGVzOgorICAgICAgPGl0ZW1pemVkbGlz dD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXZl cnkgZGF0YWJhc2Ugb2JqZWN0IGluIHRoZSBkZXBhcnNlZCBvdXRwdXQgaXMgc2NoZW1hLXF1YWxp ZmllZCwgc28gdGhhdAorICAgICAgICAgICAgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4g aW4gdGhlIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdlcy4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJh PgorICAgICAgICAgICAgVGhlIHN0cnVjdHVyZWQgSlNPTiBhbmQgdGhlIGZvcm1hdHRlZCBvdXRw dXQgbWFrZXMgaXQgcG9zc2libGUgZm9yCisgICAgICAgICAgICBtYWNoaW5lIGVkaXRpbmcuIFRo aXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgc3Vic2NyaWJlciBpcyBvbiBhIGRpZmZlcmVudAorICAg ICAgICAgICAgUEcgdmVyc2lvbiBhbmQgaGFzIGNlcnRhaW4gRERMIHN5bnRheCBkaWZmZXJlbmNl cyB3aGljaCBuZWVkIHRvIGJlCisgICAgICAgICAgICByZXNvbHZlZCBiZWZvcmUgYXBwbHkuCisg ICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8L2l0ZW1pemVk bGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBEREwgZGVwYXJzZXIg ZXhwb3NlcyB0d28gU1FMIGZ1bmN0aW9uczoKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGRkbF9kZXBhcnNlX3Rv X2pzb246IGdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCBmcm9tIGV2ZW50IHRyaWdnZXIsCisgICAg ICAgICAgICByZXR1cm5zIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4gVGhlIGNvbW1hbmQg aXMgZXhwYW5kZWQgZnVsbHkKKyAgICAgICAgICAgIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmln dWl0aWVzIGV2ZW4gaW4gdGhlIGZhY2Ugb2Ygc2VhcmNoX3BhdGgKKyAgICAgICAgICAgIGNoYW5n ZXMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVt aXplZGxpc3Q+CisKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kOiBF eHBhbmQgSlNPTiBmb3JtYXQgRERMIGdlbmVyYXRlZCBieQorICAgICAgICAgICAgZGRsX2RlcGFy c2VfdG9fanNvbiB0byBhIHBsYWluIERETCBjb21tYW5kLgorICAgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKyAg PC9zZWN0Mj4KKworIDwvc2VjdDE+CisKICA8c2VjdDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24t Y29uZmxpY3RzIj4KICAgPHRpdGxlPkNvbmZsaWN0czwvdGl0bGU+CiAKLS0gCjIuMzQuMQoK --00000000000003c9ff05f29a094d Content-Type: text/x-patch; charset="US-ASCII"; name="v63-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v63-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ld2us34n5 RnJvbSBiNTJhNTMwZjQ2MzFjMmNlZTNkOTZmMTMzNjg4YmE2NWVmODkxOTQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTkgSmFuIDIwMjMgMTI6MjQ6NTMgKzA1MzAKU3ViamVjdDogW1BBVENIIHY2MyA2Lzdd IFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGljYXRpb24sIHdl IHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMuIER1cmluZyBD UkVBVEUgUFVCTElDQVRJT04gd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZCB0cmlnZ2VyIHRoYXQK ZGVwYXJzZXMgdGhlIERETCAoaWYgdGhlIERETCBpcyBhbm5vdGF0ZWQgYXMgZGRscmVwbG9rIGZv ciBEREwgcmVwbGljYXRpb24gaW4KY21kdGFnbGlzdC5oKSBhcyBhIEpTT04gYmxvYiwgYW5kIFdB TCBsb2dzIGl0LiBUaGUgZXZlbnQgdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5CnJlbW92ZWQgYXQg dGhlIHRpbWUgb2YgRFJPUCBQVUJMSUNBVElPTi4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBX QUwgYW5kIHNlbmRzCml0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwgY29tbWFuZHMu IFRoZSBzdWJzY3JpYmVyIHRoZW4gY29udmVydHMgSlNPTgpiYWNrIHRvIHRoZSBEREwgY29tbWFu ZCBzdHJpbmcgYW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQK dGhlIG5ld2x5IGFkZGVkIHJlbCB0byBwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERN TCBjaGFuZ2VzIG9uIHRoZSBuZXcKdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dCBoYXZp bmcgdG8gbWFudWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElD QVRJT04iLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxURVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAg IENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29t bWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJp bmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3Jp YmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFibGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0 cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQgZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJl bGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4uKSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkg d2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIs IHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29t bWFuZCBzdGFydCcgZXZlbnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVs aWRzIG9mCnRoZSB0YWJsZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdp biAocGdvdXRwdXQpIHN0b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIg dmVyaWZ5aW5nIHRoYXQgaXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJs aWNhdGlvbi4gTGF0ZXIgdGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUK YWN0dWFsIGRyb3AgbWVzc2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVu ZCwgb25seSBzZW5kcyBvdXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUg b2YgdGhlIHJlbGlkcyBtYXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8g ZG8gdGhpcyBpcyBiZWNhdXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhl ICdjb21tYW5kIGVuZCcgbWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9u Z2VyCnZhbGlkIGFzIGl0IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25z IHJlY2VpdmVkIGZvciB0aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9z c2libGUgdG8gdmVyaWZ5IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBs aXN0IG9yIG5vdC4gVG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUg ZWxlbWVudHMgdG8gdGhlIGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0 eXBlKS4KCldlIGNvdWxkIGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3Jp YmVyIHNpZGUgYXMgd2VsbCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRk bCBtZXNzYWdlcyBmb3IgdGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlv bi4KCi0gRm9yIHRhYmxlX3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVN TiBUWVBFLCBBREQgQ09MVU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9E KQoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBz dHJpbmcgYXQKdGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29k ZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJs ZSBpcyBwdWJsaXNoZWQuIFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNv bWluZyByZXdyaXRlIElOU0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmli ZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4g YWx3YXlzIGJlCmNvbnNpc3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCBy ZXdyaXRlIGRkbCBtdXN0IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3Jk ZXIgdG8gYmUgYWJsZSB0byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4K CldlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9y ZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlz aGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2Ny aWJlciB3aGljaApkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4s IHdlIG5lZWQgdG8gbGV0IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3Jp dGUgZGRsIHRvIHJld3JpdGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFm dGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlz aGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1 c2VkIGR1cmluZwpyZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUg VVBEQVRFcyB0byBrZWVwIHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFw cHJvYWNoIGNvdWxkIGJlIGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRv IHVwZGF0ZQp0aGUgZXh0cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdy aXRlIGRkbCBhbmQgdXNlIHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0 aGUgcmVzdCBkYXRhLiBUbyBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJz ZWQganNvbiBzdHJpbmcgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5k IGFkZCBzb21lIGxvZ2ljIGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpC ZXNpZGVzLCB3ZSBtYXkgbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0 eXBlIG9mIHJld3JpdGUKZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNl bmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBk YXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVz ZSB0aGUgZGVwYXJzZXIgYW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5k IHNraXAKc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMgICAgICAgICAgfCAzODAgKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICAgICAgICB8IDI3OSArKysrKysrKyst LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgIDEwICst CiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jICB8IDM1OCArKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwg IDQ5ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQz ICsrCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAgMjAg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDI0MCAr KysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8 IDE5MCArKysrKystCiBzcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jICAgICAgICAgICAgICAgICAg ICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAg ICB8ICAxNSArLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgICAgICAg IHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8 ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgfCAg OTAgKysrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwg ICAyICsKIHNyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ0 ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgMTIg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgIDE3ICsK IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAxNyArLQog c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICAgIHwgICA0ICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAgICAgICB8ICAxNSArLQogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICB8ICAxMiArCiBzcmMvaW5j bHVkZS90Y29wL2NtZHRhZy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNs dWRlL3Rjb3AvY21kdGFnbGlzdC5oICAgICAgICAgICAgICAgICB8IDM4NiArKysrKysrLS0tLS0t LS0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgICAgICAgICB8ICAgMyAr LQogLi4uL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgICAgICAgICAgICAgICAgIHwgICA3ICsK IC4uLi9zcWwvY3JlYXRlX3RhYmxlLnNxbCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgICAgICAgfCAgIDYgKy0KIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICB8IDQyMCArKysrKysr Ky0tLS0tLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgfCAgIDYgKwogMzggZmlsZXMgY2hhbmdlZCwgMjY2MSBpbnNlcnRpb25z KCspLCA0ODIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCmluZGV4IGE5OGZjYWQ0MjEuLmM1MDVmMjQ0MGQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw4IEBAIEdldFB1YmxpY2F0 aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVi dXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7 CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJ cHViLT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgPSBwdWJmb3JtLT5wdWJkZGxfYWxsOworCXB1Yi0+ cHViYWN0aW9ucy5wdWJkZGxfdGFibGUgPSBwdWJmb3JtLT5wdWJkZGxfdGFibGU7CiAJcHViLT5w dWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXAp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggZDZjNmQ1MTRmMy4uNzdkY2I5YzlkYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvY3JlYXRlYXMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvbWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBh cmUuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUg QEAgY3JlYXRlX2N0YXNfaW50ZXJuYWwoTGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8p CiAJCVN0b3JlVmlld1F1ZXJ5KGludG9SZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxz ZSk7CiAJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJ CSAqIEZpcmUgdGhlIHRyaWdnZXIgZm9yIHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcg dGhlIHRhYmxlIHNvCisJCSAqIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFi b3V0IHRoZSBuZXdseSBjcmVhdGVkIHRhYmxlCisJCSAqIGluIHRoZSB0cmlnZ2VyIGZ1bmN0aW9u LgorCQkgKi8KKwkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBp bnRvUmVsYXRpb25BZGRyKTsKKwl9CiAKIAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBiYzA3MmYwNDI1Li5kN2E5NWY1YzYw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2Vf dXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC05Miw3ICs5NSw4IEBAIENy ZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAo c3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChz dG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10 LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFt ZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFi bGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2lu aXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVz XCIiLApAQCAtMTE4LDcgKzEyMiw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRy aWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChz dHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBz dHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5l dmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUs ICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0 ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFt ZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01NDQsNyArNTQ5LDggQEAgRXZlbnRUcmlnZ2Vy Q29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFn KHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQll dmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJ CQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRl KQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJ CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5k VGFnTmFtZShkYmd0YWcpKTsKQEAgLTgyNyw2ICs4MzMsMTQxIEBAIEV2ZW50VHJpZ2dlclRhYmxl UmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRF IFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVk LgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21t YW5kOworCUNyZWF0ZVRhYmxlQXNTdG10ICpzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopcGFy c2V0cmVlOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBv ciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUg fHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRl ZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxl Y3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSAoc3RtdC0+b2JqdHlwZSA9PSBPQkpF Q1RfVEFCTEUpID8gU0NUX0NyZWF0ZVRhYmxlQXMgOiBTQ1RfU2ltcGxlOworCWNvbW1hbmQtPmlu X2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVz cyA9IEludmFsaWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9 IE5VTEw7CisJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOworCisJ Y29tbWFuZC0+cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZDsKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gY29tbWFuZDsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmln Z2VyVGFibGVJbml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1FIHRoaXMgQVBJIGlzbid0IGNv bnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qvc3VieGFjdCBpcworICogYWJv cnRlZCBwYXJ0d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJlc3QgdG8gYWRkIGFuCisgKiBB dEVPU3ViWGFjdF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMuCisgKi8KK3ZvaWQKK0V2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlDb2xs ZWN0ZWRDb21tYW5kICpwYXJlbnQ7CisJQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQ7CisKKwkvKiBp Z25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlz YWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisK KwlzdG10ID0gIChDcmVhdGVUYWJsZUFzU3RtdCAqKWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQtPnBhcnNldHJlZTsKKworCWlmIChzdG10LT5vYmp0eXBlID09IE9CSkVD VF9UQUJMRSkKKwl7CisJCXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQtPnBhcmVudDsKKworCQlwZnJlZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kKTsKKworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kID0gcGFyZW50OworCX0KKwllbHNlCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwor CQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jeHQpOworCisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQu c2ltcGxlLmFkZHJlc3MgPSBhZGRyZXNzOworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNv bW1hbmRMaXN0ID0KKwkJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5k TGlzdCwKKwkJCQkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisK KwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorfQorCisvKgorICogRmlyZSB0 YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxl SW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJ TGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxlY3Rl ZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21tYW5k U3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUg ZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFz dGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3RhdGUg aXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55 IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBEREwK KwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBi dXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNldHVw IG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0 aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl KQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNvbGxlY3Rl ZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpCisJ CXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1hbmQtPnBh cnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJICAidGFi bGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0g TklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQg YW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVh bF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJLyogUnVu IHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRyaWdkYXRh KTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoKKwkgKiBN YWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZpc2libGUg dG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50 KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBl dmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTEwOCw3ICsxMjQ5LDggQEAgdHJhY2tEcm9wcGVkT2Jq ZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAoRXZlbnRDYWNoZUxvb2t1cChFVlRfU1FM RHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdyaXRlKSAh PSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAhPSBOSUwp OworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKSB8fAorCQko RXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpICE9IE5JTCk7CiB9CiAKIC8qCkBA IC0xNDk5LDYgKzE2NDEsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFy c2V0cmVlKQogCiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0 aW9uSWQ7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwlj b21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJU YWJsZS5zdWJjbWRzID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFy c2V0cmVlKTsKIApAQCAtMTUzMiw3ICsxNjc1LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJl bGlkKE9pZCBvYmplY3RJZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlz IGNvZGUgbmVlZHMgdG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJp Z2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzKQorRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21k LCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKIAlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU1MiwxMiArMTY5NSwx NDAgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBP YmplY3RBZGRyZXNzIGFkZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdz dWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7 CiAJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxl LnN1YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOwogCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydAor ICoJCVNhdmUgZGF0YSBhYm91dCBhIHNpbmdsZSBwYXJ0IG9mIGFuIEFMVEVSIFRZUEUuCisgKgor ICogQUxURVIgVEFCTEUgY2FuIGhhdmUgbXVsdGlwbGUgc3ViY29tbWFuZHMgd2hpY2ggbWlnaHQg aW5jbHVkZSBEUk9QIENPTFVNTgorICogY29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcg dGhlIGRyb3AgY29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uCisgKiBBcyB0aGUgZHJvcHBlZCBj b2x1bW4gY2Fubm90IGJlIGFjY2Vzc2VkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgRFJPUCBDT0xV TU4sCisgKiBhIHNwZWNpYWwgdHJpZ2dlciBpcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNl IGJlZm9yZSB0aGUgZHJvcCBjb2x1bW4gaXMKKyAqIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVu dFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJl bCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3Vi OworCUNvbHVtbkRlZiAgKmRlZjsKKwlSZWxhdGlvbglhdHRyZWxhdGlvbjsKKwlIZWFwVHVwbGUJ aGVhcFR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRUdXA7CisJQXR0ck51bWJlcglhdHRudW07 CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIg Y29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5k Q29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJQXNzZXJ0KElzQShzdWJjbWQsIEFs dGVyVGFibGVDbWQpKTsKKwlBc3NlcnQoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FsdGVyQ29sdW1u VHlwZSk7CisJQXNzZXJ0KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQg IT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisKKwlkZWYgPSAoQ29sdW1u RGVmICopIHN1YmNtZC0+ZGVmOworCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4 dCk7CisKKwluZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3 c3ViLT5wYXJzZXRyZWUgPSAoTm9kZSAqKWNvcHlPYmplY3Qoc3ViY21kKTsKKworCWF0dHJlbGF0 aW9uID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsK KworCS8qIExvb2sgdXAgdGhlIHRhcmdldCBjb2x1bW4gKi8KKwloZWFwVHVwID0gU2VhcmNoU3lz Q2FjaGVDb3B5QXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGhlYXBUdXApKSAvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4pLAor CQkJCWVycm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhp c3QiLAorCQkJCQkgICBzdWJjbWQtPm5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkp KTsKKwlhdHRUdXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChoZWFwVHVwKTsKKwlh dHRudW0gPSBhdHRUdXAtPmF0dG51bTsKKworCU9iamVjdEFkZHJlc3NTdWJTZXQoYWRkcmVzcywg UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0p OworCWhlYXBfZnJlZXR1cGxlKGhlYXBUdXApOworCXRhYmxlX2Nsb3NlKGF0dHJlbGF0aW9uLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCisJaWYgKGRl Zi0+cmF3X2RlZmF1bHQpCisJeworCQljaGFyCSAgICpkZWZleHByOworCisJCWRlZmV4cHIgPSBu b2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCW5ld3N1Yi0+dXNpbmdleHByID0g VGV4dERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJ CQkJCQkJCQkJCQkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJ CQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwl9CisJZWxzZQorCQluZXdzdWItPnVzaW5n ZXhwciA9IE5VTEw7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k LT5kLmFsdGVyVGFibGUuc3ViY21kcyA9CisJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlckFs dGVyVHlwZUVuZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQUxURVIgVFlQRSBjb21tYW5kLCBh bmQgYWRkIGl0IHRvIGNvbW1hbmQgbGlzdC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJU eXBlRW5kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUp Cit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsK KwlMaXN0Q2VsbCAgICpjZWxsOworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwlBbHRlclRhYmxl Q21kICphbHRzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKXN1YmNtZDsKKworCS8qIGlnbm9yZSBp ZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCWNtZCA9 IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlBc3NlcnQoSXNB KHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCUFzc2VydChjbWQgIT0gTlVMTCk7CisJQXNzZXJ0 KE9pZElzVmFsaWQoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpKTsKKworCWZvcmVhY2goY2Vs bCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpz dWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21k ICpjb2xsY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisKKwkJaWYgKGNv bGxjbWQtPnN1YnR5cGUgPT0gYWx0c3ViY21kLT5zdWJ0eXBlICYmCisJCQlhZGRyZXNzLmNsYXNz SWQgPT0gc3ViLT5hZGRyZXNzLmNsYXNzSWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0SWQgPT0gc3Vi LT5hZGRyZXNzLm9iamVjdElkICYmCisJCQlhZGRyZXNzLm9iamVjdFN1YklkID09IHN1Yi0+YWRk cmVzcy5vYmplY3RTdWJJZCkKKwkJeworCQkJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSBy ZXdyaXRlOworCQkJcmV0dXJuOworCQl9CisJfQorCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCW5ld3N1YiA9IHBhbGxv YyhzaXplb2YoQ29sbGVjdGVkQVRTdWJjbWQpKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNz OworCW5ld3N1Yi0+cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJjbWQpOworCisJY21kLT5kLmFs dGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOworCWNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMg PSBsYXBwZW5kKGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIEV2ZW50VHJpZ2dlckFsdGVyVGFi bGVFbmQKICAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRBQkxFIGNvbW1hbmQsIGFuZCBh ZGQgaXQgdG8gY29tbWFuZCBsaXN0LgpAQCAtMTcxMCw2ICsxOTgxLDEwNSBAQCBFdmVudFRyaWdn ZXJDb2xsZWN0Q3JlYXRlT3BDbGFzcyhDcmVhdGVPcENsYXNzU3RtdCAqc3RtdCwgT2lkIG9wY29p ZCwKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIH0KIAorLyoKKyAqIEV2ZW50VHJp Z2dlckNvbGxlY3RDcmVhdGVQdWJsaWNhdGlvbgorICoJCVNhdmUgZGF0YSBhYm91dCBhIENSRUFU RSBQVUJMSUNBVElPTiBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkCisgKi8KK3ZvaWQKK0V2ZW50VHJp Z2dlckNvbGxlY3RDcmVhdGVQdWJsaWNhdGlvbihDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQs CisJCQkJCQkJCQkgT2lkIHB1YmlkLCBMaXN0ICpyZWxhdGlvbnMsCisJCQkJCQkJCQkgTGlzdCAq c2NoZW1hcykKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpj b21tYW5kOworCUxpc3RDZWxsICAgKmxjOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIg Y29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5k Q29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBw YWxsb2MwKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisJY29tbWFuZC0+dHlwZSA9IFNDVF9D cmVhdGVQdWJsaWNhdGlvbjsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRl bnNpb247CisJT2JqZWN0QWRkcmVzc1NldChjb21tYW5kLT5kLmNyZWF0ZXB1Yi5hZGRyZXNzLAor CQkJCQkgUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJpZCk7CisJY29tbWFuZC0+cGFyc2V0cmVl ID0gKE5vZGUgKikgY29weU9iamVjdChzdG10KTsKKworCWZvcmVhY2gobGMsIHJlbGF0aW9ucykK Kwl7CisJCVB1YmxpY2F0aW9uVGFibGUgKnB1Yl9yZWwgPSAoUHVibGljYXRpb25UYWJsZSAqKSBs Zmlyc3QobGMpOworCisJCXB1YmxpY2F0aW9uX3JlbCAqYWRkcmVsID0gKHB1YmxpY2F0aW9uX3Jl bCAqKSBwYWxsb2Moc2l6ZW9mKHB1YmxpY2F0aW9uX3JlbCkpOworCisJCVJlbGF0aW9uCXJlbCA9 IHRhYmxlX29wZW5ydihwdWJfcmVsLT5yZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlh ZGRyZWwtPnJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCQlhZGRyZWwtPndoZXJlQ2xh dXNlID0gY29weU9iamVjdChwdWJfcmVsLT53aGVyZUNsYXVzZSk7CisJCWFkZHJlbC0+Y29sdW1u TGlzdCA9IGxpc3RfY29weV9kZWVwKHB1Yl9yZWwtPmNvbHVtbnMpOworCQljb21tYW5kLT5kLmNy ZWF0ZXB1Yi5yZWxzID0gbGFwcGVuZChjb21tYW5kLT5kLmNyZWF0ZXB1Yi5yZWxzLCBhZGRyZWwp OworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJY29tbWFuZC0+ ZC5jcmVhdGVwdWIuc2NoZW1hcyA9IGxpc3RfY29weShzY2hlbWFzKTsKKworCWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QgPQorCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZExpc3QsIGNvbW1hbmQpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJQdWJsaWNhdGlv bgorICoJCVNhdmUgZGF0YSBhYm91dCBhIEFMVEVSIFBVQkxJQ0FUSU9OIGNvbW1hbmQgYmVpbmcg ZXhlY3V0ZWQKKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyUHVibGljYXRpb24o QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIE9pZCBwdWJpZCwKKwkJCQkJCQkJCUxpc3QgKnJl bGF0aW9ucywgTGlzdCAqc2NoZW1hcykKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xs ZWN0ZWRDb21tYW5kICpjb21tYW5kOworCUxpc3RDZWxsICAgKmxjOworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsK KworCWNvbW1hbmQgPSBwYWxsb2MwKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisJY29tbWFu ZC0+dHlwZSA9IFNDVF9BbHRlclB1YmxpY2F0aW9uOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9 IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwlPYmplY3RBZGRyZXNzU2V0KGNvbW1hbmQtPmQuYWx0ZXJw dWIuYWRkcmVzcywKKwkJCQkJIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHViaWQpOworCWNvbW1h bmQtPnBhcnNldHJlZSA9IChOb2RlICopIGNvcHlPYmplY3Qoc3RtdCk7CisKKwlmb3JlYWNoKGxj LCByZWxhdGlvbnMpCisJeworCQlQdWJsaWNhdGlvblRhYmxlICpwdWJfcmVsID0gKFB1YmxpY2F0 aW9uVGFibGUgKikgbGZpcnN0KGxjKTsKKworCQlwdWJsaWNhdGlvbl9yZWwgKmFkZHJlbCA9IChw dWJsaWNhdGlvbl9yZWwgKikgcGFsbG9jKHNpemVvZihwdWJsaWNhdGlvbl9yZWwpKTsKKworCQlS ZWxhdGlvbglyZWwgPSB0YWJsZV9vcGVucnYocHViX3JlbC0+cmVsYXRpb24sIEFjY2Vzc1NoYXJl TG9jayk7CisKKwkJYWRkcmVsLT5yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwkJYWRk cmVsLT53aGVyZUNsYXVzZSA9IGNvcHlPYmplY3QocHViX3JlbC0+d2hlcmVDbGF1c2UpOworCQlh ZGRyZWwtPmNvbHVtbkxpc3QgPSBsaXN0X2NvcHlfZGVlcChwdWJfcmVsLT5jb2x1bW5zKTsKKwkJ Y29tbWFuZC0+ZC5hbHRlcnB1Yi5yZWxzID0gbGFwcGVuZChjb21tYW5kLT5kLmFsdGVycHViLnJl bHMsIGFkZHJlbCk7CisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisK Kwljb21tYW5kLT5kLmFsdGVycHViLnNjaGVtYXMgPSBsaXN0X2NvcHkoc2NoZW1hcyk7CisKKwlj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0ID0KKwkJbGFwcGVuZChjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0LCBjb21tYW5kKTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VFNDb25maWcKICAqCQlTYXZlIGRhdGEgYWJvdXQgYW4gQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklH VVJBVElPTiBjb21tYW5kIGJlaW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j CmluZGV4IGY0YmE1NzI2OTcuLmJmZTRiYmU1MzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jCkBAIC0zOCwxMCArMzgsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1 bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNl ci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisj aW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC04MiwyMSAr ODQsMjYgQEAgc3RhdGljIHZvaWQgUHVibGljYXRpb25Ecm9wU2NoZW1hcyhPaWQgcHViaWQsIExp c3QgKnNjaGVtYXMsIGJvb2wgbWlzc2luZ19vayk7CiBzdGF0aWMgdm9pZAogcGFyc2VfcHVibGlj YXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkgIExpc3QgKm9wdGlvbnMs CisJCQkJCQkgIGJvb2wgZm9yX2FsbF90YWJsZXMsCiAJCQkJCQkgIGJvb2wgKnB1Ymxpc2hfZ2l2 ZW4sCiAJCQkJCQkgIFB1YmxpY2F0aW9uQWN0aW9ucyAqcHViYWN0aW9ucywKIAkJCQkJCSAgYm9v bCAqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4sCi0JCQkJCQkgIGJvb2wgKnB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290KQorCQkJCQkJICBib29sICpwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCwKKwkJCQkJCSAgYm9vbCAqZGRsX3R5cGVfZ2l2ZW4pCiB7CiAJTGlzdENlbGwgICAq bGM7CiAKIAkqcHVibGlzaF9naXZlbiA9IGZhbHNlOwogCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdF9naXZlbiA9IGZhbHNlOworCSpkZGxfdHlwZV9naXZlbiA9IGZhbHNlOwogCiAJLyogZGVm YXVsdHMgKi8KIAlwdWJhY3Rpb25zLT5wdWJpbnNlcnQgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1 YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rp b25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsX2FsbCA9IGZhbHNl OworCXB1YmFjdGlvbnMtPnB1YmRkbF90YWJsZSA9IGZhbHNlOwogCSpwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IGZhbHNlOwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwpAQCAtMTIzLDcgKzEz MCw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJ cHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSBmYWxzZTsKIAogCQkJKnB1Ymxpc2hfZ2l2ZW4gPSB0 cnVlOwotCQkJcHVibGlzaCA9IGRlZkdldFN0cmluZyhkZWZlbCk7CisJCQlwdWJsaXNoID0gcHN0 cmR1cChkZWZHZXRTdHJpbmcoZGVmZWwpKTsKIAogCQkJaWYgKCFTcGxpdElkZW50aWZpZXJTdHJp bmcocHVibGlzaCwgJywnLCAmcHVibGlzaF9saXN0KSkKIAkJCQllcmVwb3J0KEVSUk9SLApAQCAt MTU4LDYgKzE2NSw1MiBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiA9IHRydWU7CiAJCQkq cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKIAkJfQor CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJkZGwiKSA9PSAwKQorCQl7CisJCQlj aGFyCSAgICpkZGxfbGV2ZWw7CisJCQlMaXN0CSAgICpkZGxfbGlzdDsKKwkJCUxpc3RDZWxsICAg KmxjMzsKKworCQkJaWYgKCpkZGxfdHlwZV9naXZlbikKKwkJCQllcnJvckNvbmZsaWN0aW5nRGVm RWxlbShkZWZlbCwgcHN0YXRlKTsKKworCQkJaWYgKCFmb3JfYWxsX3RhYmxlcykKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJ IGVycm1zZygiRERMIHJlcGxpY2F0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIEZPUiBBTEwgVEFC TEVTIHB1YmxpY2F0aW9uIikpKTsKKwkJCS8qCisJCQkgKiBJZiBkZGwgb3B0aW9uIHdhcyBnaXZl biBvbmx5IHRoZSBleHBsaWNpdGx5IGxpc3RlZCBkZGwgdHlwZXMKKwkJCSAqIHNob3VsZCBiZSBw dWJsaXNoZWQuCisJCQkgKi8KKwkJCXB1YmFjdGlvbnMtPnB1YmRkbF9hbGwgPSBmYWxzZTsKKwkJ CXB1YmFjdGlvbnMtPnB1YmRkbF90YWJsZSA9IGZhbHNlOworCisJCQkqZGRsX3R5cGVfZ2l2ZW4g PSB0cnVlOworCQkJZGRsX2xldmVsID0gZGVmR2V0U3RyaW5nKGRlZmVsKTsKKworCQkJaWYgKCFT cGxpdElkZW50aWZpZXJTdHJpbmcoZGRsX2xldmVsLCAnLCcsICZkZGxfbGlzdCkpCisJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJ CSBlcnJtc2coImludmFsaWQgbGlzdCBzeW50YXggZm9yIFwiZGRsXCIgb3B0aW9uIikpKTsKKwor CQkJLyogUHJvY2VzcyB0aGUgb3B0aW9uIGxpc3QuICovCisJCQlmb3JlYWNoKGxjMywgZGRsX2xp c3QpCisJCQl7CisJCQkJY2hhcgkgICAqcHVibGlzaF9vcHQgPSAoY2hhciAqKSBsZmlyc3QobGMz KTsKKworCQkJCWlmIChzdHJjbXAocHVibGlzaF9vcHQsICJhbGwiKSA9PSAwKQorCQkJCXsKKwkJ CQkJcHViYWN0aW9ucy0+cHViZGRsX2FsbCA9IHRydWU7CisJCQkJCXB1YmFjdGlvbnMtPnB1YmRk bF90YWJsZSA9IHRydWU7CisJCQkJfQorCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwg InRhYmxlIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gdHJ1ZTsKKwkJ CQllbHNlCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBcImRkbFwiIHZhbHVlOiBc IiVzXCIiLCBwdWJsaXNoX29wdCkpKTsKKwkJCX0KKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC01OTksMTQgKzY1 Miw1NyBAQCBjaGVja19zaW1wbGVfcm93ZmlsdGVyX2V4cHIoTm9kZSAqbm9kZSwgUGFyc2VTdGF0 ZSAqcHN0YXRlKQogCXJldHVybiBjaGVja19zaW1wbGVfcm93ZmlsdGVyX2V4cHJfd2Fsa2VyKG5v ZGUsIHBzdGF0ZSk7CiB9CiAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdHJhbmZvcm0gYSB3 aGVyZSBjbGF1c2UuCisgKgorICogQWxzbyBjaGVjayB0aGUgcHVibGljYXRpb24gcm93IGZpbHRl ciBleHByZXNzaW9uIGFuZCB0aHJvdyBhbiBlcnJvciBpZgorICogYW55dGhpbmcgbm90IHBlcm1p dHRlZCBvciB1bmV4cGVjdGVkIGlzIGVuY291bnRlcmVkLgorICovCitzdGF0aWMgTm9kZSAqCitH ZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMoY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFJlbGF0aW9u IHJlbGF0aW9uLAorCQkJCQkJIE5vZGUgKndoZXJlQ2xhdXNlLCBib29sIGNoZWNrX2V4cHIpCit7 CisJTm9kZQkgICAqdHJhbnNmb3JtZWRXaGVyZUNsYXVzZSA9IE5VTEw7CisJUGFyc2VOYW1lc3Bh Y2VJdGVtICpuc2l0ZW07CisJUGFyc2VTdGF0ZSAqcHN0YXRlOworCisJLyoKKwkgKiBBIGZyZXNo IHBzdGF0ZSBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIG9ubHkgaGF2ZSAidGhpcyIgdGFibGUgaW4g aXRzCisJICogcmFuZ2V0YWJsZQorCSAqLworCXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShOVUxM KTsKKwlwc3RhdGUtPnBfc291cmNldGV4dCA9IHF1ZXJ5U3RyaW5nOworCW5zaXRlbSA9IGFkZFJh bmdlVGFibGVFbnRyeUZvclJlbGF0aW9uKHBzdGF0ZSwgcmVsYXRpb24sCisJCQkJCQkJCQkJICAg QWNjZXNzU2hhcmVMb2NrLCBOVUxMLAorCQkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7CisJYWRk TlNJdGVtVG9RdWVyeShwc3RhdGUsIG5zaXRlbSwgZmFsc2UsIHRydWUsIHRydWUpOworCisJdHJh bnNmb3JtZWRXaGVyZUNsYXVzZSA9IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJ CQkJCQkJCSAgY29weU9iamVjdCh3aGVyZUNsYXVzZSksCisJCQkJCQkJCQkJCQkgIEVYUFJfS0lO RF9XSEVSRSwKKwkJCQkJCQkJCQkJCSAgIlBVQkxJQ0FUSU9OIFdIRVJFIik7CisKKwkvKiBGaXgg dXAgY29sbGF0aW9uIGluZm9ybWF0aW9uICovCisJYXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3Rh dGUsIHRyYW5zZm9ybWVkV2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBXZSBhbGxvdyBvbmx5IHNp bXBsZSBleHByZXNzaW9ucyBpbiByb3cgZmlsdGVycy4gU2VlCisJICogY2hlY2tfc2ltcGxlX3Jv d2ZpbHRlcl9leHByX3dhbGtlci4KKwkgKi8KKwlpZiAoY2hlY2tfZXhwcikKKwkJY2hlY2tfc2lt cGxlX3Jvd2ZpbHRlcl9leHByKHRyYW5zZm9ybWVkV2hlcmVDbGF1c2UsIHBzdGF0ZSk7CisKKwlm cmVlX3BhcnNlc3RhdGUocHN0YXRlKTsKKworCXJldHVybiB0cmFuc2Zvcm1lZFdoZXJlQ2xhdXNl OworfQorCiAvKgogICogVHJhbnNmb3JtIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9u IGZvciBhbGwgdGhlIHJlbGF0aW9ucyBpbiB0aGUgbGlzdCwKICAqIGVuc3VyaW5nIGl0IGlzIGNv ZXJjZWQgdG8gYm9vbGVhbiBhbmQgbmVjZXNzYXJ5IGNvbGxhdGlvbiBpbmZvcm1hdGlvbiBpcwog ICogYWRkZWQgaWYgcmVxdWlyZWQsIGFuZCBhZGQgYSBuZXcgbnNpdGVtL1JURSBmb3IgdGhlIGFz c29jaWF0ZWQgcmVsYXRpb24gdG8KICAqIHRoZSBQYXJzZVN0YXRlJ3MgbmFtZXNwYWNlIGxpc3Qu CiAgKgotICogQWxzbyBjaGVjayB0aGUgcHVibGljYXRpb24gcm93IGZpbHRlciBleHByZXNzaW9u IGFuZCB0aHJvdyBhbiBlcnJvciBpZgotICogYW55dGhpbmcgbm90IHBlcm1pdHRlZCBvciB1bmV4 cGVjdGVkIGlzIGVuY291bnRlcmVkLgogICovCiBzdGF0aWMgdm9pZAogVHJhbnNmb3JtUHViV2hl cmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCkBAIC02MTYs OSArNzEyLDcgQEAgVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3Qg Y2hhciAqcXVlcnlTdHJpbmcsCiAKIAlmb3JlYWNoKGxjLCB0YWJsZXMpCiAJewotCQlQYXJzZU5h bWVzcGFjZUl0ZW0gKm5zaXRlbTsKLQkJTm9kZQkgICAqd2hlcmVjbGF1c2UgPSBOVUxMOwotCQlQ YXJzZVN0YXRlICpwc3RhdGU7CisKIAkJUHVibGljYXRpb25SZWxJbmZvICpwcmkgPSAoUHVibGlj YXRpb25SZWxJbmZvICopIGxmaXJzdChsYyk7CiAKIAkJaWYgKHByaS0+d2hlcmVDbGF1c2UgPT0g TlVMTCkKQEAgLTYzOCwzOCArNzMyLDM4IEBAIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0 ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkgZXJyZGV0YWlsKCJXSEVS RSBjbGF1c2UgY2Fubm90IGJlIHVzZWQgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgd2hlbiAlcyBp cyBmYWxzZS4iLAogCQkJCQkJCSAgICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIpKSk7CiAK LQkJLyoKLQkJICogQSBmcmVzaCBwc3RhdGUgaXMgcmVxdWlyZWQgc28gdGhhdCB3ZSBvbmx5IGhh dmUgInRoaXMiIHRhYmxlIGluIGl0cwotCQkgKiByYW5nZXRhYmxlCi0JCSAqLwotCQlwc3RhdGUg PSBtYWtlX3BhcnNlc3RhdGUoTlVMTCk7Ci0JCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0ID0gcXVlcnlT dHJpbmc7Ci0JCW5zaXRlbSA9IGFkZFJhbmdlVGFibGVFbnRyeUZvclJlbGF0aW9uKHBzdGF0ZSwg cHJpLT5yZWxhdGlvbiwKLQkJCQkJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrLCBOVUxMLAotCQkJ CQkJCQkJCQkgICBmYWxzZSwgZmFsc2UpOwotCQlhZGROU0l0ZW1Ub1F1ZXJ5KHBzdGF0ZSwgbnNp dGVtLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisJCXByaS0+d2hlcmVDbGF1c2UgPSBHZXRUcmFuc2Zv cm1XaGVyZUNsYXVzZXMocXVlcnlTdHJpbmcsIHByaS0+cmVsYXRpb24sCisJCQkJCQkJCQkJCQkJ cHJpLT53aGVyZUNsYXVzZSwgdHJ1ZSk7CisJfQorfQogCi0JCXdoZXJlY2xhdXNlID0gdHJhbnNm b3JtV2hlcmVDbGF1c2UocHN0YXRlLAotCQkJCQkJCQkJCSAgIGNvcHlPYmplY3QocHJpLT53aGVy ZUNsYXVzZSksCi0JCQkJCQkJCQkJICAgRVhQUl9LSU5EX1dIRVJFLAotCQkJCQkJCQkJCSAgICJQ VUJMSUNBVElPTiBXSEVSRSIpOworLyoKKyAqIFRyYW5zZm9ybSB0aGUgcHVibGljYXRpb24gV0hF UkUgZXhwcmVzc2lvbiBmb3IgYWxsIHRoZSByZWxhdGlvbnMgaW4gdGhlIGxpc3QsCisgKiBlbnN1 cmluZyBpdCBpcyBjb2VyY2VkIHRvIGJvb2xlYW4gYW5kIG5lY2Vzc2FyeSBjb2xsYXRpb24gaW5m b3JtYXRpb24gaXMKKyAqIGFkZGVkIGlmIHJlcXVpcmVkLCBhbmQgYWRkIGEgbmV3IG5zaXRlbS9S VEUgZm9yIHRoZSBhc3NvY2lhdGVkIHJlbGF0aW9uIHRvCisgKiB0aGUgUGFyc2VTdGF0ZSdzIG5h bWVzcGFjZSBsaXN0LgorICovCitzdGF0aWMgdm9pZAorVHJhbnNmb3JtUHViVGFibGVXaGVyZUNs YXVzZXMoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZykKK3sKKwlMaXN0Q2Vs bCAgICpsYzsKIAotCQkvKiBGaXggdXAgY29sbGF0aW9uIGluZm9ybWF0aW9uICovCi0JCWFzc2ln bl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCB3aGVyZWNsYXVzZSk7CisJZm9yZWFjaChsYywgdGFi bGVzKQorCXsKKwkJUHVibGljYXRpb25UYWJsZSAqcHJpID0gKFB1YmxpY2F0aW9uVGFibGUgKikg bGZpcnN0KGxjKTsKKwkJUmVsYXRpb24JcmVsOwogCi0JCS8qCi0JCSAqIFdlIGFsbG93IG9ubHkg c2ltcGxlIGV4cHJlc3Npb25zIGluIHJvdyBmaWx0ZXJzLiBTZWUKLQkJICogY2hlY2tfc2ltcGxl X3Jvd2ZpbHRlcl9leHByX3dhbGtlci4KLQkJICovCi0JCWNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJf ZXhwcih3aGVyZWNsYXVzZSwgcHN0YXRlKTsKKwkJaWYgKHByaS0+d2hlcmVDbGF1c2UgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOwogCi0JCWZyZWVfcGFyc2VzdGF0ZShwc3RhdGUpOworCQlyZWwgPSB0 YWJsZV9vcGVucnYocHJpLT5yZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKIAotCQlwcmktPndo ZXJlQ2xhdXNlID0gd2hlcmVjbGF1c2U7CisJCXByaS0+d2hlcmVDbGF1c2UgPSBHZXRUcmFuc2Zv cm1XaGVyZUNsYXVzZXMocXVlcnlTdHJpbmcsIHJlbCwKKwkJCQkJCQkJCQkJCQlwcmktPndoZXJl Q2xhdXNlLCBmYWxzZSk7CisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKIAl9 CiB9CiAKLQogLyoKICAqIEdpdmVuIGEgbGlzdCBvZiB0YWJsZXMgdGhhdCBhcmUgZ29pbmcgdG8g YmUgYWRkZWQgdG8gYSBwdWJsaWNhdGlvbiwKICAqIHZlcmlmeSB0aGF0IHRoZXkgZnVsZmlsbCB0 aGUgbmVjZXNzYXJ5IHByZWNvbmRpdGlvbnMsIG5hbWVseTogbm8gdGFibGVzCkBAIC03MjgsNiAr ODIyLDUyIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5hbWUsIExpc3Qg KnRhYmxlcywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1 c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBs aWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJ CQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkg T2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQlpOworCUxpc3QJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJ dHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzIHJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmln U3RtdCAqZGRsX3RyaWdnZXI7CisJY2hhcgkJdHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwlj aGFyCQl0cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIg KnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxf dHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJp Z2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgUFVCX0VWRU5UX1RSSUdfUFJFRklYLAor CQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6 ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5h bWUpOworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOwor CWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNu YW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsg aSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5nCSAgICp0YWcgPSBtYWtlU3RyaW5nKHBz dHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisKKwkJdGFncyA9IGxhcHBl bmQodGFncywgdGFnKTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFr ZTEobWFrZURlZkVsZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lk ID0gQ3JlYXRlRXZlbnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIg dGhlIGV2ZW50IHRyaWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9uIHRoZSBwdWJsaWNh dGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJl bGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwg JnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCiAvKgogICogQ3JlYXRlIG5l dyBwdWJsaWNhdGlvbi4KICAqLwpAQCAtNzQxLDYgKzg4MSw3IEBAIENyZWF0ZVB1YmxpY2F0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCURhdHVt CQl2YWx1ZXNbTmF0dHNfcGdfcHVibGljYXRpb25dOwogCUhlYXBUdXBsZQl0dXA7CiAJYm9vbAkJ cHVibGlzaF9naXZlbjsKKwlib29sCQlkZGxfdHlwZV9naXZlbjsKIAlQdWJsaWNhdGlvbkFjdGlv bnMgcHViYWN0aW9uczsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbjsK IAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDsKQEAgLTc4MSw5ICs5MjIsMTEgQEAg Q3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0 bXQgKnN0bXQpCiAKIAlwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKHBzdGF0ZSwKIAkJCQkJCQkg IHN0bXQtPm9wdGlvbnMsCisJCQkJCQkJICBzdG10LT5mb3JfYWxsX3RhYmxlcywKIAkJCQkJCQkg ICZwdWJsaXNoX2dpdmVuLCAmcHViYWN0aW9ucywKIAkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7 CisJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJCQkJICAmZGRsX3R5 cGVfZ2l2ZW4pOwogCiAJcHVib2lkID0gR2V0TmV3T2lkV2l0aEluZGV4KHJlbCwgUHVibGljYXRp b25PYmplY3RJbmRleElkLAogCQkJCQkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX29pZCk7CkBAIC03 OTgsNiArOTQxLDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3Jl YXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJk ZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQog CQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdf cHVibGljYXRpb25fcHViZGRsX2FsbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMu cHViZGRsX2FsbCk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsX3RhYmxlIC0g MV0gPQorCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbF90YWJsZSk7CiAJdmFsdWVzW0Fu dW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODU4LDYgKzEwMDUsNTMgQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJCX0KIAl9CiAKKwlUcmFuc2Zvcm1QdWJUYWJsZVdoZXJlQ2xhdXNlcyhyZWxhdGlvbnMsIHBz dGF0ZS0+cF9zb3VyY2V0ZXh0KTsKKwlFdmVudFRyaWdnZXJDb2xsZWN0Q3JlYXRlUHVibGljYXRp b24oc3RtdCwgcHVib2lkLCByZWxhdGlvbnMsIHNjaGVtYWlkbGlzdCk7CisKKwkvKgorCSAqIENy ZWF0ZSBhbiBldmVudCB0cmlnZ2VyIHRvIGFsbG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMu CisJICoKKwkgKi8KKwlpZiAocHViYWN0aW9ucy5wdWJkZGxfdGFibGUgfHwgcHViYWN0aW9ucy5w dWJkZGxfYWxsKQorCXsKKwkJQ29tbWFuZFRhZwlzdGFydF9jb21tYW5kc1tdID0ge0NNRFRBR19E Uk9QX1RBQkxFfTsKKwkJQ29tbWFuZFRhZwlyZXdyaXRlX2NvbW1hbmRzW10gPSB7Q01EVEFHX0FM VEVSX1RBQkxFfTsKKwkJQ29tbWFuZFRhZwlpbml0X2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdf Q1JFQVRFX1RBQkxFX0FTLAorCQkJQ01EVEFHX1NFTEVDVF9JTlRPCisJCX07CisJCWludCBuY29t bWFuZHMgPSAwOworCQlDb21tYW5kVGFnICplbmRfY29tbWFuZHMgPSBOVUxMOworCisJCWlmIChw dWJhY3Rpb25zLnB1YmRkbF9hbGwpCisJCQllbmRfY29tbWFuZHMgPSBHZXRDb21tYW5kVGFnc0Zv ckRETFJlcGwoJm5jb21tYW5kcyk7CisJCWVsc2UgaWYgKHB1YmFjdGlvbnMucHViZGRsX3RhYmxl KQorCQl7CisJCQluY29tbWFuZHMgPSAzOworCQkJZW5kX2NvbW1hbmRzID0gcGFsbG9jMChuY29t bWFuZHMgKiBzaXplb2YoQ29tbWFuZFRhZykpOworCQkJZW5kX2NvbW1hbmRzWzBdID0gQ01EVEFH X0NSRUFURV9UQUJMRTsKKwkJCWVuZF9jb21tYW5kc1sxXSA9IENNRFRBR19BTFRFUl9UQUJMRTsK KwkJCWVuZF9jb21tYW5kc1syXSA9IENNRFRBR19EUk9QX1RBQkxFOworCQl9CisKKwkJLyogQ3Jl YXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBs aWNhRXZlbnRUcmlnZ2VyKFBVQl9UUklHX0VWRU5UMSwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJ IG5jb21tYW5kcywgbXlzZWxmLCBwdWJvaWQpOworCQlwZnJlZShlbmRfY29tbWFuZHMpOworCisJ CS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfc3RhcnQgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVh dGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKFBVQl9UUklHX0VWRU5UMiwgc3RhcnRfY29tbWFuZHMs CisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisK KwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRl RERMUmVwbGljYUV2ZW50VHJpZ2dlcihQVUJfVFJJR19FVkVOVDMsIHJld3JpdGVfY29tbWFuZHMs CisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsK KworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlD cmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKFBVQl9UUklHX0VWRU5UNCwgaW5pdF9jb21tYW5k cywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwor CX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmpl Y3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC04 ODIsNiArMTA3Niw3IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJYm9vbAkJcmVwbGFjZXNbTmF0dHNfcGdf cHVibGljYXRpb25dOwogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfcHVibGljYXRpb25dOwogCWJv b2wJCXB1Ymxpc2hfZ2l2ZW47CisJYm9vbAkJZGRsX3R5cGVfZ2l2ZW47CiAJUHVibGljYXRpb25B Y3Rpb25zIHB1YmFjdGlvbnM7CiAJYm9vbAkJcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2 ZW47CiAJYm9vbAkJcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q7CkBAIC04OTAsMTEgKzEwODUs MTUgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAlMaXN0CSAgICpyb290X3JlbGlkcyA9IE5JTDsKIAlMaXN0 Q2VsbCAgICpsYzsKIAorCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNU KHR1cCk7CisKIAlwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKHBzdGF0ZSwKIAkJCQkJCQkgIHN0 bXQtPm9wdGlvbnMsCisJCQkJCQkJICBwdWJmb3JtLT5wdWJhbGx0YWJsZXMsCiAJCQkJCQkJICAm cHVibGlzaF9naXZlbiwgJnB1YmFjdGlvbnMsCiAJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3RfZ2l2ZW4sCi0JCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwor CQkJCQkJCSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJCSAgJmRkbF90eXBl X2dpdmVuKTsKIAogCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1 cCk7CiAKQEAgLTk5Niw2ICsxMTk1LDEyIEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVzW0Fu dW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rp b25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVu Y2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxf YWxsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfYWxsKTsKKwkJcmVwbGFj ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxsIC0gMV0gPSB0cnVlOworCisJCXZhbHVl c1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHViZGRsX3RhYmxlKTsKKwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9w dWJkZGxfdGFibGUgLSAxXSA9IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290X2dpdmVuKQpAQCAtMTM4MCw2ICsxNTg1LDggQEAgQWx0ZXJQdWJsaWNhdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10KQogCVJlbGF0aW9uCXJl bDsKIAlIZWFwVHVwbGUJdHVwOwogCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybTsKKwlMaXN0 CSAgICpyZWxhdGlvbnMgPSBOSUw7CisJTGlzdAkgICAqc2NoZW1haWRsaXN0ID0gTklMOwogCiAJ cmVsID0gdGFibGVfb3BlbihQdWJsaWNhdGlvblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OwogCkBAIC0xNDAzLDggKzE2MTAsNiBAQCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUFsdGVyUHVibGljYXRpb25PcHRp b25zKHBzdGF0ZSwgc3RtdCwgcmVsLCB0dXApOwogCWVsc2UKIAl7Ci0JCUxpc3QJICAgKnJlbGF0 aW9ucyA9IE5JTDsKLQkJTGlzdAkgICAqc2NoZW1haWRsaXN0ID0gTklMOwogCQlPaWQJCQlwdWJp ZCA9IHB1YmZvcm0tPm9pZDsKIAogCQlPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhzdG10LT5w dWJvYmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMsCkBAIC0xNDM2LDYgKzE2NDEsMTAgQEAgQWx0 ZXJQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpz dG10KQogCQlBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhzdG10LCB0dXAsIHNjaGVtYWlkbGlzdCk7 CiAJfQogCisJVHJhbnNmb3JtUHViVGFibGVXaGVyZUNsYXVzZXMocmVsYXRpb25zLCBwc3RhdGUt PnBfc291cmNldGV4dCk7CisJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyUHVibGljYXRpb24oc3Rt dCwgcHViZm9ybS0+b2lkLCByZWxhdGlvbnMsCisJCQkJCQkJCQkJc2NoZW1haWRsaXN0KTsKKwog CS8qIENsZWFudXAuICovCiAJaGVhcF9mcmVldHVwbGUodHVwKTsKIAl0YWJsZV9jbG9zZShyZWws IFJvd0V4Y2x1c2l2ZUxvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA3YzY5N2Ey ODViLi4xNWFhYzJhNjNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNDY2NSw2ICs0 NjY1LDkgQEAgQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJs ZUNtZCAqY21kLAogCQkJY21kID0gQVRQYXJzZVRyYW5zZm9ybUNtZCh3cXVldWUsIHRhYiwgcmVs LCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlLAogCQkJCQkJCQkJICBBVF9QQVNTX1VOU0VULCBjb250 ZXh0KTsKIAkJCUFzc2VydChjbWQgIT0gTlVMTCk7CisKKwkJCUV2ZW50VHJpZ2dlckFsdGVyVHlw ZVN0YXJ0KGNtZCwgcmVsKTsKKwogCQkJLyogUGVyZm9ybXMgb3duIHJlY3Vyc2lvbiAqLwogCQkJ QVRQcmVwQWx0ZXJDb2x1bW5UeXBlKHdxdWV1ZSwgdGFiLCByZWwsIHJlY3Vyc2UsIHJlY3Vyc2lu ZywgY21kLAogCQkJCQkJCQkgIGxvY2ttb2RlLCBjb250ZXh0KTsKQEAgLTQ5MzYsNiArNDkzOSw3 IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiB7CiAJ T2JqZWN0QWRkcmVzcyBhZGRyZXNzID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CiAJUmVsYXRpb24J cmVsID0gdGFiLT5yZWw7CisJYm9vbAkJY29tbWFuZENvbGxlY3RlZCA9IGZhbHNlOwogCiAJc3dp dGNoIChjbWQtPnN1YnR5cGUpCiAJewpAQCAtNTA1OSw2ICs1MDYzLDggQEAgQVRFeGVjQ21kKExp c3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkJY2FzZSBBVF9BbHRlckNvbHVt blR5cGU6CS8qIEFMVEVSIENPTFVNTiBUWVBFICovCiAJCQkvKiBwYXJzZSB0cmFuc2Zvcm1hdGlv biB3YXMgZG9uZSBlYXJsaWVyICovCiAJCQlhZGRyZXNzID0gQVRFeGVjQWx0ZXJDb2x1bW5UeXBl KHRhYiwgcmVsLCBjbWQsIGxvY2ttb2RlKTsKKwkJCUV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZCgo Tm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CisJCQljb21tYW5kQ29sbGVjdGVk ID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6 CS8qIEFMVEVSIENPTFVNTiBPUFRJT05TICovCiAJCQlhZGRyZXNzID0KQEAgLTUyMzEsOCArNTIz Nyw4IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJ LyoKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBldmVudCB0cmlnZ2Vy cy4KIAkgKi8KLQlpZiAoY21kKQotCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNt ZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MpOworCWlmIChjbWQgJiYgIWNvbW1hbmRDb2xsZWN0ZWQp CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRk cmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVy IHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV91dGlsY21kLmMKaW5kZXggZjkyMThmNDhhYS4uOGI1M2I0MzVhZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfdXRpbGNtZC5jCkBAIC0xMzkyLDYgKzEzOTIsNyBAQCBleHBhbmRUYWJsZUxp a2VDbGF1c2UoUmFuZ2VWYXIgKmhlYXBSZWwsIFRhYmxlTGlrZUNsYXVzZSAqdGFibGVfbGlrZV9j bGF1c2UpCiAJCWF0Y21kLT5jbWRzID0gYXRzdWJjbWRzOwogCQlhdGNtZC0+b2JqdHlwZSA9IE9C SkVDVF9UQUJMRTsKIAkJYXRjbWQtPm1pc3Npbmdfb2sgPSBmYWxzZTsKKwkJYXRjbWQtPnRhYmxl X2xpa2UgPSB0cnVlOwogCQlyZXN1bHQgPSBsY29ucyhhdGNtZCwgcmVzdWx0KTsKIAl9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGQzNjgwZTliYjUuLmI3 OWRkZDhjZGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFr ZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAt MTcsNiArMTcsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdT KQogT0JKUyA9IFwKIAlhcHBseXBhcmFsbGVsd29ya2VyLm8gXAogCWRkbG1lc3NhZ2UubyBcCisJ ZGRsdHJpZ2dlci5vIFwKIAlkZWNvZGUubyBcCiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2NhZDQ2OTAzMwotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCkBAIC0wLDAg KzEsMzU4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGx0cmlnZ2VyLmMKKyAqCSAg TG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCisgKgorICogTk9U RVMKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICoKKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5j bHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgor I2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9z LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK2V4dGVybiBFdmVudFRyaWdnZXJR dWVyeVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGU7CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0IHByaW9yIHRvCisgKiBleGVjdXRpb24uIEN1cnJlbnRs eSBvbmx5IHVzZWQgZm9yIERST1AgVEFCTEUgY29tbWFuZAorICogc28gdGhhdCBjYXRhbG9nIGNh biBiZSBhY2Nlc3NlZCBiZWZvcmUgYmVpbmcgZGVsZXRlZC4KKyAqIFRoaXMgaXMgdG8gY2hlY2sg aWYgdGhlIHRhYmxlIGlzIHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCisgKiBvciBub3QuCisgKi8K K0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0KFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJY2hhcgkgICAqY29tbWFu ZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlEcm9wU3RtdCAgICpz dG10OworCUxpc3RDZWxsICAgKmNlbGwxOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dF UihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFu YWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRl eHQ7CisJc3RtdCA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJLyogRXh0 cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAqLworCWZvcmVhY2goY2VsbDEsIHN0 bXQtPm9iamVjdHMpCisJeworCQljaGFyCQlyZWxwZXJzaXN0OworCQlOb2RlCSAgICpvYmplY3Qg PSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCVJlbGF0aW9uCXJl bGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRyZXNzKHN0bXQtPnJl bW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxhdGlvbiwKKwkJCQkJ CQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOworCisJCS8qIE9iamVj dCBkb2VzIG5vdCBleGlzdCwgbm90aGluZyB0byBkbyAqLworCQlpZiAoIXJlbGF0aW9uKQorCQkJ Y29udGludWU7CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5v YmplY3RJZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1h bmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoK KwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRo YXQgdW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQg b24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBk aXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29t aW5nIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8K KwkJaWYgKHJlbHBlcnNpc3QgIT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCUxvZ0xvZ2ljYWxE RExNZXNzYWdlKCJkZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0 LAorCQkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0 aW9uKQorCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2lu dGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFu ZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1h bmQgKmNtZDsKKwljaGFyCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5U X1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmln Z2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOwor CisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMg d2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBX ZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxv Z2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBz dWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSBy ZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0 ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBl cnNpc3QgIT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJCS8qIERlcGFyc2UgdGhlIERETCBj b21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLwor CQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJ CWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgRENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJ CSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKworCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFu ZCBhbmQgbG9nIGl0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGV4ZWN1 dGlvbiBvZiB0aGUgY29tbWFuZCBidXQgYmVmb3JlIHRoZQorICogdHJhbnNhY3Rpb24gY29tbWl0 cy4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlcglpdGVyOworCURl cGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQJCQlyZWxpZDsKKwljaGFyCQlyZWxraW5kOwor CisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAi bm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCXJlbHBlcnNp c3QgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9 IGxmaXJzdChsYyk7CisJCWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERM IGhhcyBiZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQt PmQuYWx0ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0g KFJlbmFtZVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5hbWVTdG10ICYmIHJl bmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0bXQt PnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlp ZiAoY21kLT50eXBlID09IFNDVF9TaW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1w bGUuYWRkcmVzcy5vYmplY3RJZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBlID09 IFNDVF9BbHRlclRhYmxlKQorCQl7CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVj dElkOworCQkJdHlwZSA9IERDVF9UYWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJLyog T25seSBTQ1RfU2ltcGxlIGZvciBub3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5hZGRy ZXNzLm9iamVjdElkOworCQkJdHlwZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlyZWxraW5k ID0gZ2V0X3JlbF9yZWxraW5kKHJlbGlkKTsKKwkJaWYgKHJlbGtpbmQpCisJCQlyZWxwZXJzaXN0 ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShyZWxpZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVy YXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRl bXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3Ig dW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJl IGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBt YWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFu ZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5n IGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3QgIT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJeworCQkJLyoKKwkJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwg bG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZQorCQkJICogc2FtZS4KKwkJCSAqLworCQkJ anNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQkJ aWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCByZWxpZCwgdHlwZSwganNvbl9zdHJpbmcsCisJCQkJCQkJCQkgc3RybGVuKGpzb25fc3Ry aW5nKSArIDEpOworCQl9CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVj dCAqb2JqOworCQlEcm9wU3RtdCAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0 YTsKKwkJY2hhcgkgICAqY29tbWFuZDsKKwkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlOwor CQljb25zdCBjaGFyICp0bXB0eXBlOworCQlPYmplY3RDbGFzcwlvYmpjbGFzczsKKwkJT2JqZWN0 QWRkcmVzcyBvYmphZGRyOworCisJCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNp bmZvLT5jb250ZXh0OworCQlzdG10ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7 CisKKwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3Vy KTsKKwkJb2JqYWRkciA9IG9iai0+YWRkcmVzczsKKwkJb2JqY2xhc3MgPSBnZXRPYmplY3RDbGFz cygmb2JqYWRkcik7CisKKwkJaWYgKHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09 IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxzZSBpZiAob2JqY2xhc3Mg PT0gT0NMQVNTX1NDSEVNQSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BFUkFUT1IgfHwK KwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX09QQ0xBU1MgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX09QRkFNSUxZIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DQVNUIHx8CisJCQkJIG9i amNsYXNzID09IE9DTEFTU19UWVBFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UUklHR0VS IHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DT05WRVJTSU9OIHx8CisJCQkJIG9iamNsYXNz ID09IE9DTEFTU19QT0xJQ1kgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1JFV1JJVEUgfHwK KwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0VYVEVOU0lPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBP Q0xBU1NfRkRXIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU0NPTkZJRyB8fAorCQkJCSBv YmpjbGFzcyA9PSBPQ0xBU1NfVFNESUNUIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU1RF TVBMQVRFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU1BBUlNFUiB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfVFJBTlNGT1JNIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GT1JF SUdOX1NFUlZFUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfQ09MTEFUSU9OIHx8CisJCQkJ IG9iamNsYXNzID09IE9DTEFTU19VU0VSX01BUFBJTkcgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX0xBTkdVQUdFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19TVEFUSVNUSUNfRVhUIHx8 CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19BTSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1Nf UFVCTElDQVRJT04gfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24gdGFi bGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAibWF0ZXJpYWxpemVkIHZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJyb3V0aW5lIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiYWdn cmVnYXRlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJ Y29udGludWU7CisKKwkJLyogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24g ZGF0YSB3cmFwcGVyICovCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24t ZGF0YSB3cmFwcGVyIiwgMjApID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJmb3Jl aWduIGRhdGEgd3JhcHBlciIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9i ai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOwor CQl9CisKKwkJLyogQ2hhbmdlIHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3MgKi8KKwkJ ZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVjdCIsCisJ CQkJCQkgc3RybGVuKCJzdGF0aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0bXB0eXBl ID0gcHN0cmR1cCgic3RhdGlzdGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21t YW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZp b3IpOworCQl9CisKKwkJLyoKKwkJICogT2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJlIG1vZGlm aWVkIHRvIG1ha2UgdGhlIGRyb3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4gb24gc2Vy dmVyIDxzZXJ2ZXJuYW1lPiBUTyAgOiBmb3IgPHJvbGU+IHNlcnZlcgorCQkgKiA8c2VydmVybmFt ZT4KKwkJICoKKwkJICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidXNl ciBtYXBwaW5nIiwgMTIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsKKworCQkJ dG1wdHlwZSA9IHBhbGxvYyhzdHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJCW9uX3Nl cnZlciA9IHN0cnN0cihvYmotPm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJCXNwcmlu dGYoKGNoYXIgKikgdG1wdHlwZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikgdG1wdHlw ZSwgb2JqLT5vYmppZGVudGl0eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7CisJCQlz dHJjYXQoKGNoYXIgKikgdG1wdHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5kID0gZGVw YXJzZV9kcm9wX2NvbW1hbmQodG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAg IHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9w X2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAg IHN0bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCkKKwkJCUxvZ0xvZ2ljYWxERExNZXNz YWdlKCJkZXBhcnNlIiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJCQkJCQkg Y29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KKworCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0 X3dyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21tYW5kIGFuZCBs b2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1h bmQgKmNtZDsKKwljaGFyCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5U X1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmln Z2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0 ZW5jZShjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3Qg Z2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVt cG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZv ciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBi ZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMg aXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFu ZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcg YSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVN UCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERE TCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAq LworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisK KwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJ CQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9p bnRlckdldERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwppbmRleCBkNWFmYWU5ZDkwLi5jODU5N2M2NWZlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtOTUsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQg c3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4KIHN0YXRpYyB2b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBj aGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0 YXRpYyB2b2lkIHN0cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJ CQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2UpOwogCkBAIC0yNDAsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29u dGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJl YW1fY29tbWl0X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdl X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBO VUxMKSB8fAorCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbF9jYiAhPSBOVUxMKSB8fAogCQko Y3R4LT5jYWxsYmFja3Muc3RyZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAgLTI1 Nyw2ICsyNjMsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5f b3B0aW9ucywKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0X2Ni X3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5nZV9j Yl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVzc2Fn ZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+c3RyZWFtX2RkbCA9IHN0cmVhbV9kZGxfY2Jf d3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90cnVuY2F0 ZV9jYl93cmFwcGVyOwogCiAKQEAgLTE1ODEsNiArMTU4OCw0OCBAQCBzdHJlYW1fbWVzc2FnZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ ZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMg dm9pZAorc3RyZWFtX2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJ IGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNz YWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2Rh dGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxs YmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyog V2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9y dGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlz IG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgPT0gTlVMTCkK KwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRl eHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJz dHJlYW1fZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJj YWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2Fs bGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJy b3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOwor CisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJ Y3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0 aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhl IGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3RyZWFtX2Rk bF9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21k dHlwZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4 dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK K30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9u cywgUmVsYXRpb24gcmVsYXRpb25zW10sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9tZXNvbi5idWlsZAppbmRleCA5OWM2MDhkMDNmLi4wNWU3NzU2OTdlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTMsNiArMyw3IEBACiBiYWNr ZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGRs bWVzc2FnZS5jJywKKyAgJ2RkbHRyaWdnZXIuYycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVuY2hl ci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3Rv LmMKaW5kZXggM2E5ZDUzYTYxZS4uZGU4NzRjMmNkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYzLDYgKzY2Myw0NyBAQCBsb2dpY2FscmVwX3dyaXRlX21l c3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwK IAlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7CiB9CiAKKy8qCisgKiBSZWFkIERETCBN RVNTQUdFIGZyb20gc3RyZWFtCisgKi8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2RkbChTdHJp bmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4 LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJ ZmxhZ3MgPSBwcV9nZXRtc2dpbnQoaW4sIDEpOworCWlmIChmbGFncyAhPSAwKQorCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIGZsYWdzICV1IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3MpOworCisJ KmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGlu KTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1z Z2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBN RVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJ bmZvIG91dCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisKKwlwcV9z ZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19EREwpOworCisJcHFfc2VuZGludDgob3V0LCBm bGFncyk7CisJcHFfc2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwgcHJl Zml4KTsKKwlwcV9zZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2Fn ZSwgc3opOworfQorCiAvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhlIG91 dHB1dCBzdHJlYW0uCiAgKi8KQEAgLTEyNDQsNiArMTI4NSw4IEBAIGxvZ2ljYWxyZXBfbWVzc2Fn ZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAiVFlQRSI7CiAJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NBR0UiOworCQljYXNl IExPR0lDQUxfUkVQX01TR19EREw6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNhc2UgTE9HSUNBTF9S RVBfTVNHX0JFR0lOX1BSRVBBUkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBBUkUiOwogCQljYXNl IExPR0lDQUxfUkVQX01TR19QUkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA5YTdkYzllNDA0Li5mZDRkMWJiODBmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAt MjA0OCwxMiArMjA0OCwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIFJlb3JkZXJCdWZmZXJBcHBs eURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ CQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKIHsKLQly Yi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgs Ci0JCQljaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBl LAotCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCi0JCQljaGFuZ2UtPmRhdGEuZGRs Lm1lc3NhZ2UpOworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsKHJiLCB0eG4sIGNo YW5nZS0+bHNuLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCQkJICBj aGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBl LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCQkJICBjaGFu Z2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworCWVsc2UKKwkJcmItPmRkbChyYiwgdHhuLCBjaGFuZ2Ut PmxzbiwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ ZGF0YS5kZGwucmVsaWQsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCQkJ ICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYwppbmRleCBhMDA4NGM3ZWY2Li5jN2YxMTk3MjQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTE2Niw2ICsxNjYsNyBAQAogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvYmd3b3JrZXIuaCIKQEAgLTE5MCw3ICsxOTEsMTAgQEAKICNpbmNsdWRlICJzdG9y YWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0 Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ0Y29w L3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0zMjM1LDYgKzMyMzksMjM4 IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKIH0KIAorLyoKKyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENSRUFURSBUQUJMRSBB UyBhbmQgU0VMRUNUIElOVE8KKyAqIHRvIG5vdCBwb3B1bGF0ZSBkYXRhIGZyb20gdGhlIHNvdXJj ZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlci4KKyAqIEFsbG93IHRoZSBkYXRhIHRvIGJlIHJlcGxp Y2F0ZWQgdGhyb3VnaCBJTlNFUlRzIG9uIHRoZSBwdWJsaXNoZXIuCisgKi8KK3N0YXRpYyB2b2lk CitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRU YWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICop IGNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JF QVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlDcmVh dGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQtPnN0 bXQ7CisKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJ CQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBk YXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJv bSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQt PmludG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBD TURUQUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQg KikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRv IGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGlj YXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJ CXNzdG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRF IFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBD UkVBVEUgTEFCRUwgY29tbWFuZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RB VEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0 ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9u IC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0 ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlS YW5nZVZhciAgICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNl ID0gSW52YWxpZE9pZDsKKwlDcmVhdGVTdG10ICpjc3RtdDsKKwljaGFyCSAgICpzY2hlbWFuYW1l ID0gTlVMTDsKKwljaGFyCSAgICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVh dGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCWNzdG10ID0gKENyZWF0ZVN0bXQgKikg Y29tbWFuZC0+c3RtdDsKKwlydiA9IGNzdG10LT5yZWxhdGlvbjsKKworCWlmIChjb21tYW5kVGFn ID09IENNRFRBR19DUkVBVEVfVEFCTEUpCisJeworCQljc3RtdCA9IChDcmVhdGVTdG10ICopIGNv bW1hbmQtPnN0bXQ7CisJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCX0KKwllbHNlCisJeworCQly ZXR1cm47CisJfQorCisJaWYgKCFydikKKwkJcmV0dXJuOworCisJc2NoZW1hbmFtZSA9IHJ2LT5z Y2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChzY2hlbWFuYW1lICE9 IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5hbWUsIGZh bHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJcmVsaWQgPSBnZXRf cmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UKKwkJcmVsaWQgPSBS ZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCisJewor CQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJ CQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJ CWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRl ZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBEREwgcmVwbGljYXRpb24gbWVz c2FnZXMuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykK K3sKKwlYTG9nUmVjUHRyCWxzbjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNoYXIJ ICAgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJCXN6Owor CUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOwor CURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWNv bnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOwor CisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGwocywgJmxzbiwgJnByZWZpeCwgJnN6KTsK KworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZXBhcnNlX2RkbF9qc29u X3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsK KworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBD cmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2Vf cXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVl X2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRy ZWVfbGlzdDsKKwkJUmF3U3RtdCAgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJz ZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBw ZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJ c25hcHNob3Rfc2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWco KE5vZGUgKikgY29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBw YXJzaW5nIG9yIHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJ cHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEg c25hcHNob3QgaWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICov CisJCWlmIChhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNo QWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3Nl dCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJz ZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5 IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8K KwkJcGVyX3BhcnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJy ZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0 ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsK KworCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMo Y29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVM TCwgMCwgTlVMTCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRy ZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25h cHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQor CQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2lj YWwgcmVwbGljYXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZl IHRvIGNvcHkgYW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJ ICogd2UgYXJlIHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQor CQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRh bCBhbnl3YXkuCisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5V TEwsCisJCQkJCQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBw bGFudHJlZV9saXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9y dGFsLiAgTm8gcGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBO VUxMLCAwLCBJbnZhbGlkU25hcHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRy YW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJ CSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVy LAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFs LCBmYWxzZSk7CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBU YWJsZSBjcmVhdGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9t YXRpY2FsbHkKKwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJ aGFuZGxlX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhl IHBlci1wYXJzZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlD b250ZXh0RGVsZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlf c3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAo KTsKK30KIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBkaXNw YXRjaGVyLgpAQCAtMzMwMCw2ICszNTM2LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8g cykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMOgorCQkJ YXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVh azsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IGEw ZWMzZTUwMzAuLjVhOTYyNTA4NDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXQvcGdvdXRwdXQuYwpAQCAtNTUsNiArNTUsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlv bmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworc3RhdGljIHZvaWQgcGdvdXRwdXRfZGRsKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKKwkJCQkJCQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKIHN0YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3Rh dGljIHZvaWQgcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LApAQCAtMjU4LDYgKzI2Myw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0 UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwog CWNiLT50cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0g cGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+ZGRsX2NiID0gcGdvdXRwdXRfZGRsOwogCWNiLT5jb21t aXRfY2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBw Z291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3NCw2ICsyODAsNyBAQCBfUEdfb3V0cHV0 X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21t aXRfY2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0g cGdvdXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3Nh Z2U7CisJY2ItPnN0cmVhbV9kZGxfY2IgPSBwZ291dHB1dF9kZGw7CiAJY2ItPnN0cmVhbV90cnVu Y2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAt IHR3by1waGFzZSBjb21taXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9z dHJlYW1fcHJlcGFyZV90eG47CkBAIC00MjgsNiArNDM1LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAog CS8qIFRoaXMgcGx1Z2luIHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5 cGUgPSBPVVRQVVRfUExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVz ID0gdHJ1ZTsKIAogCS8qCiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNs b3QgaW5pdGlhbGl6YXRpb24uCkBAIC01MDgsNiArNTE2LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAog CQkvKiBJbml0IHB1YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBO SUw7CisJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQg PSBmYWxzZTsKIAkJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQs CiAJCQkJCQkJCQkgIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTE0MDEsOSArMTQx MCwyMiBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hh bmdlLT5hY3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRh YmxlU2xvdCAqbmV3X3Nsb3QgPSBOVUxMOworCWJvb2wJCXRhYmxlX3Jld3JpdGUgPSBmYWxzZTsK IAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjdHgsIGZhbHNlKTsKIAorCS8qCisJICog Rm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8gcmVwbGljYXRlIHRoZW0gaWYgdGhl IHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdyaXRlIGRkbCBtZXNzYWdlLiBTbyBn ZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlCisJICogYW5kIGNoZWNrIHRoZSBwdWJhY3Rpb24g bGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpCisJeworCQl0 YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24o cmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRhcmdldHJlbCA9IHJlbGF0aW9uOwor CX0KKwogCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24ocmVsYXRpb24pKQogCQlyZXR1cm47 CiAKQEAgLTE0MzcsNiArMTQ1OSwxMyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQlBc3NlcnQoZmFsc2UpOwog CX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJsZSByZXdyaXRlIGNoYW5nZSB1bmxl c3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBtZXNzYWdlLgorCSAqLworCWlmICh0 YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCXJl dHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5nIGFuZCByZXNldHRpbmcg b3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNv bnRleHQpOwogCkBAIC0xNDY2LDggKzE0OTUsOCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQl9CiAKIAkJCS8q IENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRy ZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkgJmFjdGlvbikpCisJCQlp ZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWws IE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJCWJyZWFrOwogCiAJCQkv KgpAQCAtMTQ4Nyw4ICsxNTE2LDE5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1heWJlX3NlbmRfc2NoZW1h KGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlPdXRwdXRQbHVnaW5QcmVw YXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0 LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVu dHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhlIHJld3JpdGUgaW5zZXJ0 cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAqIGNhbiByZXBsYXkgaXQu IFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYgKHRhYmxl X3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFy Z2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJ CQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5z ZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJCQkJCQkJCQkJZGF0YS0+ YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRy dWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKQEAg LTE2MjAsNiArMTY2MCw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3IgPSBOVUxMOwogCX0KIAor CWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwogCS8qIENs ZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlNZW1vcnlDb250ZXh0UmVz ZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNzM4LDYgKzE3ODEsMTM4IEBAIHBnb3V0cHV0X21lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ T3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIH0KIAorLyoKKyAqIFNlbmQgdGhlIGRlY29k ZWQgRERMIG92ZXIgd2lyZS4KKyAqLworc3RhdGljIHZvaWQKK3Bnb3V0cHV0X2RkbChMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVz c2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0 cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0YSA9IChQR091dHB1 dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVsYXRpb24JcmVsYXRp b24gPSBOVUxMOworCVJlbGF0aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsKKworCXN3aXRjaCAoY21k dHlwZSkKKwl7CisJCWNhc2UgRENUX1RhYmxlRHJvcFN0YXJ0OgorCisJCQkvKgorCQkJICogT24g RFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUK KwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBw dWJsaWNhdGlvbi4KKwkJCSAqIFdlIG5lZWQgdGhpcyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUg cmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwg dmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhl IGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNz YWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7 CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRy eShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxf dGFibGUpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29pZChkYXRhLT5kZWxl dGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCXJl dHVybjsKKworCQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29p ZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJ CQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3Jl bGlkcywgcmVsaWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfVGFibGVBbHRlcjoKKworCQkJ LyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUgb3JpZ2lu YWwgZGRsIG1lc3NhZ2UKKwkJCSAqIHRvIHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0aGUgdXBj b21pbmcgcmV3cml0ZSBJTlNFUlQgdG8KKwkJCSAqIFVQREFURSBhbmQgc2VuZCB0aGVtIHRvIHN1 YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1 YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdlIGRvIHRo aXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhlIGRhdGEg YmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudAorCQkJICog YW1vbmcgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRh dGEgaW4KKwkJCSAqIHN1YnNjcmliZXIgd2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIg YWxzbyBnZXQgcmV3cml0dGVuLAorCQkJICogd2UgbmVlZCB0byBsZXQgdGhlIHN1YnNjcmliZXIg ZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwKKwkJCSAqIHRvIHJld3JpdGUgYWxsIHRo ZSBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50CisJCQkgKiBhbW9uZyBwdWJsaXNoZXIg YW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudAorCQkJICogZnVuY3Rpb25zL29wZXJhdG9y cyB1c2VkIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0bworCQkJICogcmVwbGljYXRlIHRo ZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcCB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJICoKKwkJ CSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRoZSBzdWJz Y3JpYmVyCisJCQkgKiBvbmx5IHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBvZiBkb2lu ZyBmdWxseSByZXdyaXRlIGFuZAorCQkJICogdXNlIHRoZSB1cGNvbWluZyByZXdyaXRlIFVQREFU RXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLgorCQkJICogQmVzaWRlcywgd2UgbWF5IG5vdCBu ZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZQorCQkJICogb2YgcmV3cml0 ZSBkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZworCQkJICog cmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGlu IHRoZQorCQkJICogdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLgorCQkJICovCisJ CQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3NlcnQocmVs YXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlv bik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9uJ3QgcHVi bGlzaCBkZGwgbWVzc2FnZSBvciB0aGUKKwkJCSAqIGRkbCBuZWVkIHRvIGJlIHB1Ymxpc2hlZCB2 aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlv bnMucHViZGRsX3RhYmxlIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVs aWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJ fQorCisJCQlicmVhazsKKworCQljYXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJl bGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQor CQkJCWJyZWFrOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxh dGlvbik7CisKKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQkJ eworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJ YnJlYWs7CisKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJ CWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAl ZCIsIGNtZHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZl bid0IHlldCAqLworCWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJ cGdvdXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3Jp dGUoY3R4LCB0cnVlKTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbChjdHgtPm91dCwKKwkJCQkJCQkJ bWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJCQkJCW1lc3Nh Z2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVsYXRpb24pCisJ CVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICogUmV0dXJuIHRydWUgaWYgdGhl IGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQgdGhlIHVzZXIgaGFzCiAgKiBy ZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFuIG9yaWdpbiwgZmFsc2Ugb3Ro ZXJ3aXNlLgpAQCAtMjAzOCw3ICsyMjEzLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0 RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZh bHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlvbnMu cHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7 CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfYWxsID0gZW50cnktPnB1YmFj dGlvbnMucHViZGRsX3RhYmxlID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJ CWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBz aXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwpAQCAtMjA5Niw2ICsyMjcyLDggQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsK KwkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX2FsbCA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZGxfdGFibGUgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVh bnVwcy4gKFdpbGwgYmUgcmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjIwOSw2ICsyMzg3 LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVs YXRpb24pCiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9u cy5wdWJ1cGRhdGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHVi YWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0g cHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRk bF9hbGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRkbF9hbGw7CisJCQkJZW50cnktPnB1YmFjdGlv bnMucHViZGRsX3RhYmxlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGU7CiAKIAkJCQkv KgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3Qg YW5jZXN0b3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMgYi9zcmMvYmFj a2VuZC90Y29wL2NtZHRhZy5jCmluZGV4IDRiZDcxM2EwYjQuLmNlMDljNWYyMzMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0 YWcuYwpAQCAtMjYsMTAgKzI2LDExIEBAIHR5cGVkZWYgc3RydWN0IENvbW1hbmRUYWdCZWhhdmlv cgogCWNvbnN0IGJvb2wJdGFibGVfcmV3cml0ZV9vazsKIAljb25zdCBib29sCWRpc3BsYXlfcm93 Y291bnQ7CS8qIHNob3VsZCB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYmUKIAkJCQkJCQkJ CSAqIHNob3duIGluIHRoZSBjb21tYW5kIGNvbXBsZXRpb24gc3RyaW5nICovCisJY29uc3QgYm9v bAlkZGxfcmVwbGljYXRpb25fb2s7CiB9IENvbW1hbmRUYWdCZWhhdmlvcjsKIAotI2RlZmluZSBQ R19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250KSBcCi0JeyBuYW1lLCAo dWludDgpIChzaXplb2YobmFtZSkgLSAxKSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCB9LAorI2Rl ZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBs b2spIFwKKwl7IG5hbWUsICh1aW50OCkgKHNpemVvZihuYW1lKSAtIDEpLCBldnRyZ29rLCByd3Jv aywgcm93Y250LCBkZGxyZXBsb2sgfSwKIAogc3RhdGljIGNvbnN0IENvbW1hbmRUYWdCZWhhdmlv ciB0YWdfYmVoYXZpb3JbQ09NTUFORF9UQUdfTkVYVFRBR10gPSB7CiAjaW5jbHVkZSAidGNvcC9j bWR0YWdsaXN0LmgiCkBAIC01Nyw2ICs1OCwyMSBAQCBHZXRDb21tYW5kVGFnTmFtZUFuZExlbihD b21tYW5kVGFnIGNvbW1hbmRUYWcsIFNpemUgKmxlbikKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2Nv bW1hbmRUYWddLm5hbWU7CiB9CiAKK0NvbW1hbmRUYWcgKgorR2V0Q29tbWFuZFRhZ3NGb3JERExS ZXBsKGludCAqbmNvbW1hbmRzKQoreworCUNvbW1hbmRUYWcgKmRkbHJlcGxfY29tbWFuZHMgPSBw YWxsb2MwKENPTU1BTkRfVEFHX05FWFRUQUcgKiBzaXplb2YoQ29tbWFuZFRhZykpOworCSpuY29t bWFuZHMgPSAwOworCisJZm9yKGludCBpID0gMDsgaSA8IENPTU1BTkRfVEFHX05FWFRUQUc7IGkr KykKKwl7CisJCWlmICh0YWdfYmVoYXZpb3JbaV0uZGRsX3JlcGxpY2F0aW9uX29rKQorCQkJZGRs cmVwbF9jb21tYW5kc1soKm5jb21tYW5kcykrK10gPSAoQ29tbWFuZFRhZykgaTsKKwl9CisKKwly ZXR1cm4gZGRscmVwbF9jb21tYW5kczsKK30KKwogYm9vbAogY29tbWFuZF90YWdfZGlzcGxheV9y b3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRUYWcpCiB7CkBAIC03NSw2ICs5MSwxMiBAQCBjb21t YW5kX3RhZ190YWJsZV9yZXdyaXRlX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZykKIAlyZXR1cm4g dGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLnRhYmxlX3Jld3JpdGVfb2s7CiB9CiAKK2Jvb2wKK2Nv bW1hbmRfdGFnX2RkbF9yZXBsaWNhdGlvbl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCit7CisJ cmV0dXJuIHRhZ19iZWhhdmlvcltjb21tYW5kVGFnXS5kZGxfcmVwbGljYXRpb25fb2s7Cit9CisK IC8qCiAgKiBTZWFyY2ggQ29tbWFuZFRhZyBieSBuYW1lCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAx ZTgzY2ZlMzkzLi4zYjg0MDAzZTcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxp dHkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDEx IEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAK IAkJCWNhc2UgVF9DcmVhdGVUYWJsZUFzU3RtdDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZVN0YXJ0KHBhcnNldHJlZSk7CiAJCQkJYWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBz dGF0ZSwgKENyZWF0ZVRhYmxlQXNTdG10ICopIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1z LCBxdWVyeUVudiwgcWMpOworCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJl c3MpOworCQkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNl IFRfUmVmcmVzaE1hdFZpZXdTdG10OgpAQCAtMTgzNSwxNCArMTgzOCwyMCBAQCBQcm9jZXNzVXRp bGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJCQljYXNlIFRfQ3JlYXRlUHVibGljYXRp b25TdG10OgogCQkJCWFkZHJlc3MgPSBDcmVhdGVQdWJsaWNhdGlvbihwc3RhdGUsIChDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVlKTsKKworCQkJCS8qCisJCQkJICogQ3JlYXRlUHVi bGljYXRpb24gY2FsbHMgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uCisJCQkJ ICogZGlyZWN0bHkKKwkJCQkgKi8KKwkJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQli cmVhazsKIAogCQkJY2FzZSBUX0FsdGVyUHVibGljYXRpb25TdG10OgogCQkJCUFsdGVyUHVibGlj YXRpb24ocHN0YXRlLCAoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVlKTsKIAogCQkJ CS8qCi0JCQkJICogQWx0ZXJQdWJsaWNhdGlvbiBjYWxscyBFdmVudFRyaWdnZXJDb2xsZWN0U2lt cGxlQ29tbWFuZAotCQkJCSAqIGRpcmVjdGx5CisJCQkJICogQWx0ZXJQdWJsaWNhdGlvbiBjYWxs cyBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZCBhbmQKKwkJCQkgKiBFdmVudFRyaWdn ZXJDb2xsZWN0QWx0ZXJQdWJsaWNhdGlvbiBkaXJlY3RseQogCQkJCSAqLwogCQkJCWNvbW1hbmRD b2xsZWN0ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMjI0OSw2ICsyMjU4LDggQEAgc3RyaW5n aWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpCiAJCQlyZXR1cm4g IlBPTElDWSI7CiAJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKIAkJCXJldHVybiAiUFJPQ0VEVVJF IjsKKwkJY2FzZSBPQkpFQ1RfUFVCTElDQVRJT046CisJCQlyZXR1cm4gIlBVQkxJQ0FUSU9OIjsK IAkJY2FzZSBPQkpFQ1RfUk9MRToKIAkJCXJldHVybiAiUk9MRSI7CiAJCWNhc2UgT0JKRUNUX1JP VVRJTkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwppbmRleCAxZjVlN2ViNGM2Li5mMmE5 ZjVkY2MyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2Nyw2ICsxNjcsOCBA QCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVWVF9TUUxEcm9wOwog CQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikgPT0gMCkKIAkJCWV2 ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFi bGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUluaXRXcml0ZTsKIAkJ ZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGQx NzFjZmNmMmYuLjVmOGZiMDQ0ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAt NTY5MCw2ICs1NjkwLDggQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiBy ZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25z LnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMu cHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5w dWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9u cy5wdWJkZGxfYWxsIHw9IHB1YmZvcm0tPnB1YmRkbF9hbGw7CisJCXB1YmRlc2MtPnB1YmFjdGlv bnMucHViZGRsX3RhYmxlIHw9IHB1YmZvcm0tPnB1YmRkbF90YWJsZTsKIAogCQkvKgogCQkgKiBD aGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBh cmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNTI3Yzc2NTFhYi4uNzg1YjUwN2VlZCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdF9k LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdF9tZXRhZGF0YV9kLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19wcm9jX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3RyaWdnZXJfZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZV9kLmgiCkBA IC0zOTQ5LDYgKzM5NTAsOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpu dW1QdWJsaWNhdGlvbnMpCiAJaW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7 CiAJaW50CQkJaV9wdWJ0cnVuY2F0ZTsKKwlpbnQJCQlpX3B1YmRkbF9hbGw7CisJaW50CQkJaV9w dWJkZGxfdGFibGU7CiAJaW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7 CkBAIC0zOTY0LDIzICszOTY3LDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBp bnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdl dCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAw MCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNjAwMDApCiAJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5h bWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBw LnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1 YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsX2FsbCwgcC5wdWJkZGxf dGFibGUsIHAucHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsK IAllbHNlIGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVi bmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMs IHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZh bHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0 LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHVi ZGRsX2FsbCwgZmFsc2UgYXMgcC5wdWJkZGxfdGFibGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgog CQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJu YW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywg cC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNh dGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHVi aW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBm YWxzZSBhcyBwLnB1YmRkbF9hbGwsIGZhbHNlIGFzIHAucHViZGRsX3RhYmxlLCBmYWxzZSBBUyBw dWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJcmVzID0g RXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwpAQCAt Mzk5Niw2ICszOTk5LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVt UHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVwZGF0ZSIp OwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlfcHVidHJ1 bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbF9hbGwgPSBQ UWZudW1iZXIocmVzLCAicHViZGRsX2FsbCIpOworCWlfcHViZGRsX3RhYmxlID0gUFFmbnVtYmVy KHJlcywgInB1YmRkbF90YWJsZSIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJw dWJ2aWFyb290Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1Ymxp Y2F0aW9uSW5mbykpOwpAQCAtNDAxOSw2ICs0MDI0LDEwIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShy ZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVuY2F0 ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQiKSA9 PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGxfYWxsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShy ZXMsIGksIGlfcHViZGRsX2FsbCksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsX3Rh YmxlID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsX3RhYmxlKSwgInQi KSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwOTgsNyArNDEwNywy NCBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZv ICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAotCWFwcGVuZFBRRXhwQnVmZmVyQ2hh cihxdWVyeSwgJ1wnJyk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7CisKKwlp ZiAocHViaW5mby0+cHViZGRsX2FsbCB8fCBwdWJpbmZvLT5wdWJkZGxfdGFibGUpCisJeworCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgZGRsID0gJyIpOworCQlpZiAocHViaW5mby0+ cHViZGRsX2FsbCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiYWxsIik7CisKKwkJ aWYgKHB1YmluZm8tPnB1YmRkbF90YWJsZSkKKwkJeworCQkJaWYgKHB1YmluZm8tPnB1YmRkbF9h bGwpCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxdWVyeSwgInRhYmxlIik7CisJCX0KKworCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgIiciKTsKKwl9CiAKIAlpZiAocHViaW5mby0+cHVidmlhcm9vdCkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g dHJ1ZSIpOwpAQCAtNzc4MCw2ICs3ODA2LDUwIEBAIGdldFRyaWdnZXJzKEFyY2hpdmUgKmZvdXQs IFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJZGVzdHJveVBRRXhwQnVmZmVy KHRibG9pZHMpOwogfQogCisvKgorICogZ2V0UHVibGljYXRpb25FdmVudFRyaWdnZXJzCisgKgkg IGdldCB0aGUgcHVibGljYXRpb24gZXZlbnQgdHJpZ2dlcnMgdGhhdCBzaG91bGQgYmUgc2tpcHBl ZAorICovCitzdGF0aWMgdm9pZAorZ2V0UHVibGljYXRpb25FdmVudFRyaWdnZXJzKEFyY2hpdmUg KmZvdXQsIFNpbXBsZVN0cmluZ0xpc3QgKnNraXBUcmlnZ2VycykKK3sKKwlQUUV4cEJ1ZmZlciBx dWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisJaW50CQkJaTsKKwlpbnQJCQludHVwczsKKworCXF1 ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LAorCQkJCQkJICJTRUxFQ1Qgb2lkIEZST00gcGdfcHVibGljYXRpb24gIgorCQkJCQkJICJXSEVS RSBwdWJkZGxfYWxsIE9SIHB1YmRkbF90YWJsZSIpOworCisJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5 KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOworCW50dXBzID0gUFFudHVwbGVz KHJlcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnR1cHM7IGkrKykKKwl7CisJCWNoYXIgKnRyaWdu YW1lOworCQlPaWQgcHViaWQgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIDAsIDApKTsKKworCQl0 cmlnbmFtZSA9IHBzcHJpbnRmKFBVQl9FVkVOVF9UUklHX1BSRUZJWCwgUFVCX1RSSUdfRVZFTlQx LCBwdWJpZCk7CisJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoc2tpcFRyaWdnZXJzLCB0cmln bmFtZSk7CisKKwkJdHJpZ25hbWUgPSBwc3ByaW50ZihQVUJfRVZFTlRfVFJJR19QUkVGSVgsIFBV Ql9UUklHX0VWRU5UMiwgcHViaWQpOworCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKHNraXBU cmlnZ2VycywgdHJpZ25hbWUpOworCisJCXRyaWduYW1lID0gcHNwcmludGYoUFVCX0VWRU5UX1RS SUdfUFJFRklYLCBQVUJfVFJJR19FVkVOVDMsIHB1YmlkKTsKKwkJc2ltcGxlX3N0cmluZ19saXN0 X2FwcGVuZChza2lwVHJpZ2dlcnMsIHRyaWduYW1lKTsKKworCQl0cmlnbmFtZSA9IHBzcHJpbnRm KFBVQl9FVkVOVF9UUklHX1BSRUZJWCwgUFVCX1RSSUdfRVZFTlQ0LCBwdWJpZCk7CisJCXNpbXBs ZV9zdHJpbmdfbGlzdF9hcHBlbmQoc2tpcFRyaWdnZXJzLCB0cmlnbmFtZSk7CisJfQorCisJUFFj bGVhcihyZXMpOworCisJZGVzdHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKK30KKwogLyoKICAqIGdl dEV2ZW50VHJpZ2dlcnMKICAqCSAgZ2V0IGluZm9ybWF0aW9uIGFib3V0IGV2ZW50IHRyaWdnZXJz CkBAIC03ODAwLDYgKzc4NzAsNyBAQCBnZXRFdmVudFRyaWdnZXJzKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtRXZlbnRUcmlnZ2VycykKIAkJCQlpX2V2dGZuYW1lLAogCQkJCWlfZXZ0ZW5hYmxlZDsK IAlpbnQJCQludHVwczsKKwlTaW1wbGVTdHJpbmdMaXN0IHNraXBUcmlnZ2VycyA9IHtOVUxMLCBO VUxMfTsKIAogCS8qIEJlZm9yZSA5LjMsIHRoZXJlIGFyZSBubyBldmVudCB0cmlnZ2VycyAqLwog CWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uIDwgOTAzMDApCkBAIC03ODA4LDYgKzc4NzksOCBAQCBn ZXRFdmVudFRyaWdnZXJzKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtRXZlbnRUcmlnZ2VycykKIAkJ cmV0dXJuIE5VTEw7CiAJfQogCisJZ2V0UHVibGljYXRpb25FdmVudFRyaWdnZXJzKGZvdXQsICZz a2lwVHJpZ2dlcnMpOworCiAJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksCkBAIC03ODUyLDkgKzc5MjUsMTQgQEAgZ2V0RXZlbnRUcmln Z2VycyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bUV2ZW50VHJpZ2dlcnMpCiAJCWV2dGluZm9baV0u ZXZ0ZW5hYmxlZCA9ICooUFFnZXR2YWx1ZShyZXMsIGksIGlfZXZ0ZW5hYmxlZCkpOwogCiAJCS8q IERlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gZHVtcCBpdCAqLwotCQlzZWxlY3REdW1wYWJsZU9i amVjdCgmKGV2dGluZm9baV0uZG9iaiksIGZvdXQpOworCQlpZiAoc2ltcGxlX3N0cmluZ19saXN0 X21lbWJlcigmc2tpcFRyaWdnZXJzLCBldnRpbmZvW2ldLmV2dG5hbWUpKQorCQkJZXZ0aW5mb1tp XS5kb2JqLmR1bXA9IERVTVBfQ09NUE9ORU5UX05PTkU7CisJCWVsc2UKKwkJCXNlbGVjdER1bXBh YmxlT2JqZWN0KCYoZXZ0aW5mb1tpXS5kb2JqKSwgZm91dCk7CiAJfQogCisJc2ltcGxlX3N0cmlu Z19saXN0X2Rlc3Ryb3koJnNraXBUcmlnZ2Vycyk7CisKIAlQUWNsZWFyKHJlcyk7CiAKIAlkZXN0 cm95UFFFeHBCdWZmZXIocXVlcnkpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggZTdjYmQ4ZDdlZC4uZTMyNjc0 MGRhMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MTksNiArNjE5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1 YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7CiAJYm9v bAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsX2FsbDsKKwlib29sCQlwdWJkZGxfdGFibGU7 CiAJYm9vbAkJcHVidmlhcm9vdDsKIH0gUHVibGljYXRpb25JbmZvOwogCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCmluZGV4IGQ5MjI0N2M5MTUuLmZhYzI4NjFlOWEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCkBAIC0yNDkzLDcgKzI0OTMsNyBAQCBteSAldGVzdHMgPSAoCiAJCWNyZWF0ZV9v cmRlciA9PiA1MCwKIAkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgUFVCTElDQVRJT04gcHViMgog CQkJCQkJIEZPUiBBTEwgVEFCTEVTCi0JCQkJCQkgV0lUSCAocHVibGlzaCA9IFwnXCcpOycsCisJ CQkJCQkgV0lUSCAocHVibGlzaCA9IFwnXCcsIGRkbCA9IFwnXCcpOycsCiAJCXJlZ2V4cCA9PiBx ci9eCiAJCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1 Ymxpc2ggPSAnJyk7XEUKIAkJCS94bSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggYzhhMGJiN2IzYS4uNzgzMmVmMDRj YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKQEAgLTYxNjIsNyArNjE2Miw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsK IAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRy YW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1u c1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChwc2V0LnN2ZXJzaW9uIDwgMTAwMDAwKQogCXsK QEAgLTYxNzksMTMgKzYxNzksMjMgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0 ZXJuKQogCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCSAgIlNFTEVDVCBwdWJuYW1lIEFT IFwiJXNcIixcbiIKIAkJCQkJICAiICBwZ19jYXRhbG9nLnBnX2dldF91c2VyYnlpZChwdWJvd25l cikgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YmFsbHRhYmxlcyBBUyBcIiVzXCIsXG4iCi0J CQkJCSAgIiAgcHViaW5zZXJ0IEFTIFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJ1cGRhdGUgQVMg XCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YmRlbGV0ZSBBUyBcIiVzXCIiLAorCQkJCQkgICIgIHB1 YmFsbHRhYmxlcyBBUyBcIiVzXCIiLAogCQkJCQkgIGdldHRleHRfbm9vcCgiTmFtZSIpLAogCQkJ CQkgIGdldHRleHRfbm9vcCgiT3duZXIiKSwKLQkJCQkJICBnZXR0ZXh0X25vb3AoIkFsbCB0YWJs ZXMiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSk7CisJaWYgKHBzZXQuc3Zl cnNpb24gPj0gMTYwMDAwKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAg IixcbiAgcHViZGRsX2FsbCBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIkFsbCBE RExzIikpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGxf dGFibGUgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJUYWJsZSBERExzIikpOwor CX0KKwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIsXG4gIHB1Ymluc2VydCBBUyBc IiVzXCIsXG4iCisJCQkJCSAgIiAgcHVidXBkYXRlIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBw dWJkZWxldGUgQVMgXCIlc1wiIiwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIkluc2VydHMiKSwKIAkJ CQkJICBnZXR0ZXh0X25vb3AoIlVwZGF0ZXMiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIkRlbGV0 ZXMiKSk7CkBAIC02MTk3LDcgKzYyMDcsNiBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICIsXG4gIHB1YnZp YXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpKTsKLQog CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBn X3B1YmxpY2F0aW9uXG4iKTsKIApAQCAtNjI4Nyw2ICs2Mjk2LDcgQEAgZGVzY3JpYmVQdWJsaWNh dGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFz X3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7 CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAg LTYzMDMsMTMgKzYzMTMsMTkgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0 dGVybikKIAogCWhhc19wdWJ0cnVuY2F0ZSA9IChwc2V0LnN2ZXJzaW9uID49IDExMDAwMCk7CiAJ aGFzX3B1YnZpYXJvb3QgPSAocHNldC5zdmVyc2lvbiA+PSAxMzAwMDApOworCWhhc19wdWJkZGwg PSAgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKTsKIAogCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsK IAogCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCSAgIlNFTEVDVCBvaWQsIHB1Ym5hbWUs XG4iCiAJCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfdXNlcmJ5aWQocHVib3duZXIpIEFTIG93 bmVyLFxuIgotCQkJCQkgICIgIHB1YmFsbHRhYmxlcywgcHViaW5zZXJ0LCBwdWJ1cGRhdGUsIHB1 YmRlbGV0ZSIpOworCQkJCQkgICIgIHB1YmFsbHRhYmxlcyIpOworCWlmIChoYXNfcHViZGRsKQor CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAiLCBwdWJkZGxfYWxsLCBwdWJk ZGxfdGFibGUiKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJICIsICBwdWJp bnNlcnQsIHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CiAJaWYgKGhhc19wdWJ0cnVuY2F0ZSkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidHJ1bmNhdGUiKTsKQEAg LTYzNjcsNiArNjM4Myw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlp ZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzICs9IDI7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRs ZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVi bmFtZSk7CkBAIC02Mzc0LDYgKzYzOTIsMTEgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25v b3AoIk93bmVyIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwg Z2V0dGV4dF9ub29wKCJBbGwgdGFibGVzIiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhhc19wdWJk ZGwpCisJCXsKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiQWxs IERETHMiKSwgdHJ1ZSwgYWxpZ24pOworCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0 dGV4dF9ub29wKCJUYWJsZSBERExzIiksIHRydWUsIGFsaWduKTsKKwkJfQogCQlwcmludFRhYmxl QWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkluc2VydHMiKSwgdHJ1ZSwgYWxpZ24pOwog CQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlVwZGF0ZXMiKSwgdHJ1 ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRl bGV0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwpAQCAtNjM5MSw2ICs2NDE0LDExIEBAIGRlc2NyaWJlUHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29u dCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZp YXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgp LCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJeworCQkJcHJpbnRUYWJsZUFk ZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2UsIGZhbHNlKTsKKwkJCXBy aW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMTApLCBmYWxzZSwgZmFs c2UpOworCQl9CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IDRiNThiMTdmMTYuLmUzYmJjNTk2MmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dApAQCAtMTE5MDUsNCArMTE5MDUsMTYgQEAKIHsgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4 cGFuZCBKU09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCiAgIHByb25hbWUg PT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAg IHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29t bWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21t YW5kIGRlcGFyc2UgZW5kJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxf Y29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlw ZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQn IH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBk ZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29t bWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBl cyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0 JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQg ZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJz ZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2Fy Z3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0 ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5k IGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9h cmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRf d3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggNzE1ZjJh MmUzNi4uMWNmMDJhNDFkYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAt MjEsNiArMjEsMTUgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX2QuaCIKICNp bmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCiAKKy8qIFB1YmxpY2F0aW9uIHRyaWdnZXIgZXZlbnRz ICovCisjZGVmaW5lIFBVQl9UUklHX0VWRU5UMSAiZGRsX2NvbW1hbmRfZW5kIgorI2RlZmluZSBQ VUJfVFJJR19FVkVOVDIgImRkbF9jb21tYW5kX3N0YXJ0IgorI2RlZmluZSBQVUJfVFJJR19FVkVO VDMgInRhYmxlX3Jld3JpdGUiCisjZGVmaW5lIFBVQl9UUklHX0VWRU5UNCAidGFibGVfaW5pdF93 cml0ZSIKKworLyogUHVibGljYXRpb24gZXZlbnQgdHJpZ2dlciBwcmVmaXggKi8KKyNkZWZpbmUg UFVCX0VWRU5UX1RSSUdfUFJFRklYICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiCisKIC8qIC0tLS0t LS0tLS0tLS0tLS0KICAqCQlwZ19wdWJsaWNhdGlvbiBkZWZpbml0aW9uLiAgY3BwIHR1cm5zIHRo aXMgaW50bwogICoJCXR5cGVkZWYgc3RydWN0IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uCkBAIC01 NCw2ICs2MywxMiBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxh dGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVz aW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgYWxs IHN1cHBvcnRlZCBkZGxzIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGxfYWxsOworCisJ LyogdHJ1ZSBpZiB0YWJsZSBkZGxzIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGxfdGFi bGU7CiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBA IC03Miw2ICs4Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJ CXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9v bAkJcHViZGRsX2FsbDsKKwlib29sCQlwdWJkZGxfdGFibGU7CiB9IFB1YmxpY2F0aW9uQWN0aW9u czsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmgKaW5kZXggNDhjNjVlZjUzYy4uYmFhZTFkYzU0NCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtOTQsNiArOTQsMTAgQEAgZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyRERMQ29tbWFuZEVuZChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyU1FMRHJvcChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2Vy VGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKTsK IAorZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJz ZXRyZWUpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcGFy c2V0cmVlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2Vy VGFibGVJbml0V3JpdGVFbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwogZXh0ZXJuIGJvb2wg RXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9i amVjdHNOZWVkZWQodm9pZCk7CkBAIC0xMTAsNyArMTE0LDEyIEBAIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpOwogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQs Ci0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJCQkJCQkJT2JqZWN0 QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKKworZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoQWx0ZXJUYWJsZUNtZCAqc3ViY21kLCBSZWxh dGlvbiByZWwpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5vZGUgKnN1 YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJIGJvb2wgcmV3cml0ZSk7CiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpAQCAtMTIw LDYgKzEyOSwxMiBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJPcEZhbShB bHRlck9wRmFtaWx5U3RtdCAqc3RtdCwKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RD cmVhdGVPcENsYXNzKENyZWF0ZU9wQ2xhc3NTdG10ICpzdG10LAogCQkJCQkJCQkJCQkgT2lkIG9w Y29pZCwgTGlzdCAqb3BlcmF0b3JzLAogCQkJCQkJCQkJCQkgTGlzdCAqcHJvY2VkdXJlcyk7Citl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0Q3JlYXRlUHVibGljYXRpb24oQ3JlYXRlUHVi bGljYXRpb25TdG10ICpzdG10LAorCQkJCQkJCQkJCQkJIE9pZCBwdWJpZCwgTGlzdCAqcmVsYXRp b25zLAorCQkJCQkJCQkJCQkJIExpc3QgKnNjaGVtYXMpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyUHVibGljYXRpb24oQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCisJ CQkJCQkJCQkJCQlPaWQgcHViaWQsIExpc3QgKnJlbGF0aW9ucywKKwkJCQkJCQkJCQkJCUxpc3Qg KnNjaGVtYXMpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVFNDb25maWco QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICpzdG10LAogCQkJCQkJCQkJCQkgT2lkIGNmZ0lkLCBP aWQgKmRpY3RJZHMsIGludCBuZGljdHMpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVj dEFsdGVyRGVmUHJpdnMoQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQgKnN0bXQpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRleCAwZWEyZGY1MDg4Li41ZmIzYmFhZWIx IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjYsNiArNjYsNyBA QCB0eXBlZGVmIGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJ T04gPSAnUicsCiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9SRVBfTVNH X01FU1NBR0UgPSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RETCA9ICdMJywKIAlMT0dJQ0FMX1JF UF9NU0dfQkVHSU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRSA9ICdQ JywKIAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVEID0gJ0snLApAQCAtMjQ2LDYgKzI0 Nyw5IEBAIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBp biwKIAkJCQkJCQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9vbCAqcmVzdGFydF9zZXFzKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwg Y29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBYTG9nUmVjUHRyIGxz biwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGwoU3RyaW5nSW5mbyBpbiwg WExvZ1JlY1B0ciAqbHNuLCBjb25zdCBjaGFyICoqcHJlZml4LCBTaXplICpzeik7CiBleHRlcm4g dm9pZCBsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4 aWQsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4g TG9naWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IDVlZDVlNmE3YmMuLjQ0 YmFmNDA3MjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVn aW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTks NyArOSw2IEBACiAjaWZuZGVmIE9VVFBVVF9QTFVHSU5fSAogI2RlZmluZSBPVVRQVVRfUExVR0lO X0gKIAotI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAKIHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 OwpAQCAtMjE0LDYgKzIxMywxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFt TWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJ CQkgIFNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OwogCisvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29kaW5nIERETCBt ZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8KK3R5cGVkZWYg dm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK KwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXpl LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKgogICogQ2FsbGJhY2sg Zm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAg Ki8KQEAgLTI1Myw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFj a3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsKIAlMb2dp Y2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2FsRGVjb2Rl U3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVTdHJlYW1E RExNZXNzYWdlQ0Igc3RyZWFtX2RkbF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVD QiBzdHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNrczsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggYjRhODAxNTQwMy4uYTJjZjk5YjRlNCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysgYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0 IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsKIAlMaXN0CSAgICpwdWJs aWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJTGlzdAkgICAqZGVsZXRl ZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWNoYXIJCXN0cmVhbWluZzsKIAlib29sCQltZXNz YWdlczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCA3YjZhNjMz MWJiLi42MTdmNmEzZTNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5o CkBAIC01NDAsNiArNTQwLDE3IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1N ZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJ CQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIHN0cmVhbSBEREwgbWVzc2Fn ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJl YW1ERExNZXNzYWdlQ0IpICgKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJ CQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBt ZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJ CQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwK KwkJCQkJCQkJCQkJCSBTaXplIHN6LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworCiAvKiBzdHJlYW0gdHJ1bmNhdGUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZv aWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQikgKAogCQkJCQkJCQkJCQkgICBSZW9y ZGVyQnVmZmVyICpyYiwKQEAgLTYxMCw2ICs2MjEsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgog CVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0OwogCVJlb3JkZXJCdWZm ZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1NZXNz YWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQiBz dHJlYW1fZGRsOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0 ZTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oIGIvc3JjL2lu Y2x1ZGUvdGNvcC9jbWR0YWcuaAppbmRleCAxZTc1MTRkY2ZmLi4wNzZjMjdlNjQyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21k dGFnLmgKQEAgLTE2LDcgKzE2LDcgQEAKIC8qIGJ1ZmZlciBzaXplIHJlcXVpcmVkIGZvciBjb21t YW5kIGNvbXBsZXRpb24gdGFncyAqLwogI2RlZmluZSBDT01QTEVUSU9OX1RBR19CVUZTSVpFCTY0 CiAKLSNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCkg XAorI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBk ZGxyZXBsb2spIFwKIAl0YWcsCiAKIHR5cGVkZWYgZW51bSBDb21tYW5kVGFnCkBAIC01Myw5ICs1 MywxMSBAQCBDb3B5UXVlcnlDb21wbGV0aW9uKFF1ZXJ5Q29tcGxldGlvbiAqZHN0LCBjb25zdCBR dWVyeUNvbXBsZXRpb24gKnNyYykKIGV4dGVybiB2b2lkIEluaXRpYWxpemVRdWVyeUNvbXBsZXRp b24oUXVlcnlDb21wbGV0aW9uICpxYyk7CiBleHRlcm4gY29uc3QgY2hhciAqR2V0Q29tbWFuZFRh Z05hbWUoQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4dGVybiBjb25zdCBjaGFyICpHZXRDb21t YW5kVGFnTmFtZUFuZExlbihDb21tYW5kVGFnIGNvbW1hbmRUYWcsIFNpemUgKmxlbik7CitleHRl cm4gQ29tbWFuZFRhZyAqR2V0Q29tbWFuZFRhZ3NGb3JERExSZXBsKGludCAqbmNvbW1hbmRzKTsK IGV4dGVybiBib29sIGNvbW1hbmRfdGFnX2Rpc3BsYXlfcm93Y291bnQoQ29tbWFuZFRhZyBjb21t YW5kVGFnKTsKIGV4dGVybiBib29sIGNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soQ29tbWFu ZFRhZyBjb21tYW5kVGFnKTsKIGV4dGVybiBib29sIGNvbW1hbmRfdGFnX3RhYmxlX3Jld3JpdGVf b2soQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKK2V4dGVybiBib29sIGNvbW1hbmRfdGFnX2RkbF9y ZXBsaWNhdGlvbl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0ZXJuIENvbW1hbmRUYWcg R2V0Q29tbWFuZFRhZ0VudW0oY29uc3QgY2hhciAqY29tbWFuZG5hbWUpOwogZXh0ZXJuIFNpemUg QnVpbGRRdWVyeUNvbXBsZXRpb25TdHJpbmcoY2hhciAqYnVmZiwgY29uc3QgUXVlcnlDb21wbGV0 aW9uICpxYywKIAkJCQkJCQkJCSAgIGJvb2wgbmFtZW9ubHkpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmggYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaApp bmRleCBlNzM4YWMxYzA5Li4xOGI2OWU0YmIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29w L2NtZHRhZ2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaApAQCAtMjMs MTk2ICsyMywxOTYgQEAKICAqIHRleHR1YWwgbmFtZSwgc28gdGhhdCB3ZSBjYW4gYnNlYXJjaCBv biBpdDsgc2VlIEdldENvbW1hbmRUYWdFbnVtKCkuCiAgKi8KIAotLyogc3ltYm9sIG5hbWUsIHRl eHR1YWwgbmFtZSwgZXZlbnRfdHJpZ2dlcl9vaywgdGFibGVfcmV3cml0ZV9vaywgcm93Y291bnQg Ki8KLVBHX0NNRFRBRyhDTURUQUdfVU5LTk9XTiwgIj8/PyIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0FDQ0VTU19NRVRIT0QsICJBTFRFUiBBQ0NFU1MgTUVU SE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BR0dSRUdB VEUsICJBTFRFUiBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX0NBU1QsICJBTFRFUiBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19BTFRFUl9DT0xMQVRJT04sICJBTFRFUiBDT0xMQVRJT04iLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlNUUkFJTlQsICJBTFRFUiBDT05T VFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT05W RVJTSU9OLCAiQUxURVIgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfREFUQUJBU0UsICJBTFRFUiBEQVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RFRkFVTFRfUFJJVklMRUdFUywgIkFMVEVS IERFRkFVTFQgUFJJVklMRUdFUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQUxURVJfRE9NQUlOLCAiQUxURVIgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19BTFRFUl9FVkVOVF9UUklHR0VSLCAiQUxURVIgRVZFTlQgVFJJR0dFUiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwg IkFMVEVSIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf QUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRk9SRUlHTl9UQUJM RSwgIkFMVEVSIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX0ZVTkNUSU9OLCAiQUxURVIgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0lOREVYLCAiQUxURVIgSU5ERVgiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0xBTkdVQUdFLCAiQUxURVIgTEFO R1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0xBUkdF X09CSkVDVCwgIkFMVEVSIExBUkdFIE9CSkVDVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQUxURVJfTUFURVJJQUxJWkVEX1ZJRVcsICJBTFRFUiBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIHRydWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRP UiwgIkFMVEVSIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9PUEVSQVRPUl9DTEFTUywgIkFMVEVSIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksICJBTFRF UiBPUEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX1BPTElDWSwgIkFMVEVSIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQUxURVJfUFJPQ0VEVVJFLCAiQUxURVIgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QVUJMSUNBVElPTiwgIkFMVEVSIFBV QkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9S T0xFLCAiQUxURVIgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX1JPVVRJTkUsICJBTFRFUiBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19BTFRFUl9SVUxFLCAiQUxURVIgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0NIRU1BLCAiQUxURVIgU0NIRU1BIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVFVRU5DRSwgIkFMVEVSIFNF UVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVJW RVIsICJBTFRFUiBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVUJTQ1JJUFRJT04sICJBTFRFUiBTVUJTQ1JJUFRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NZU1RFTSwg IkFMVEVSIFNZU1RFTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX1RBQkxFLCAiQUxURVIgVEFCTEUiLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfVEFCTEVTUEFDRSwgIkFMVEVSIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9O LCAiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkFMVEVSIFRF WFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQgU0VBUkNIIFBBUlNFUiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hf VEVNUExBVEUsICJBTFRFUiBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJBTlNGT1JNLCAiQUxURVIgVFJBTlNGT1JNIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UUklHR0VSLCAiQUxU RVIgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJf VFlQRSwgIkFMVEVSIFRZUEUiLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf QUxURVJfVVNFUl9NQVBQSU5HLCAiQUxURVIgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9WSUVXLCAiQUxURVIgVklFVyIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQU5BTFlaRSwgIkFOQUxZWkUiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19CRUdJTiwgIkJFR0lOIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DSEVDS1BPSU5ULCAiQ0hFQ0tQT0lOVCIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NMT1NFLCAiQ0xPU0UiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRV9DVVJTT1IsICJDTE9TRSBDVVJT T1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRV9DVVJTT1Jf QUxMLCAiQ0xPU0UgQ1VSU09SIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0NMVVNURVIsICJDTFVTVEVSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQ09NTUVOVCwgIkNPTU1FTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NPTU1JVCwgIkNPTU1JVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NPTU1JVF9QUkVQQVJFRCwgIkNPTU1JVCBQUkVQQVJFRCIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NPUFksICJDT1BZIiwgZmFsc2UsIGZhbHNlLCB0 cnVlKQotUEdfQ01EVEFHKENNRFRBR19DT1BZX0ZST00sICJDT1BZIEZST00iLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQUNDRVNTX01FVEhPRCwgIkNSRUFU RSBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfQUdHUkVHQVRFLCAiQ1JFQVRFIEFHR1JFR0FURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NBU1QsICJDUkVBVEUgQ0FTVCIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTExBVElPTiwgIkNSRUFURSBDT0xM QVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT05T VFJBSU5ULCAiQ1JFQVRFIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9DT05WRVJTSU9OLCAiQ1JFQVRFIENPTlZFUlNJT04iLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9EQVRBQkFTRSwgIkNSRUFURSBE QVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9E T01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNSRUFURSBFVkVOVCBUUklHR0VSIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwgIkNSRUFU RSBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0ZPUkVJR05fVEFCTEUs ICJDUkVBVEUgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX0ZVTkNUSU9OLCAiQ1JFQVRFIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfSU5ERVgsICJDUkVBVEUgSU5ERVgiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9MQU5HVUFHRSwgIkNSRUFU RSBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X01BVEVSSUFMSVpFRF9WSUVXLCAiQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1IsICJDUkVBVEUgT1BF UkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVS QVRPUl9DTEFTUywgIkNSRUFURSBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwgIkNSRUFURSBPUEVSQVRP UiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9Q T0xJQ1ksICJDUkVBVEUgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfUFJPQ0VEVVJFLCAiQ1JFQVRFIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BVQkxJQ0FUSU9OLCAiQ1JFQVRFIFBVQkxJ Q0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUk9M RSwgIkNSRUFURSBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1JPVVRJTkUsICJDUkVBVEUgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JVTEUsICJDUkVBVEUgUlVMRSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NDSEVNQSwgIkNSRUFURSBTQ0hFTUEiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVFVRU5DRSwgIkNS RUFURSBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1NFUlZFUiwgIkNSRUFURSBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9TVEFUSVNUSUNTLCAiQ1JFQVRFIFNUQVRJU1RJQ1MiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TVUJTQ1JJUFRJT04sICJDUkVB VEUgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfVEFCTEUsICJDUkVBVEUgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9UQUJMRV9BUywgIkNSRUFURSBUQUJMRSBBUyIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFU1BBQ0UsICJDUkVBVEUgVEFC TEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9U RVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NF QVJDSF9ESUNUSU9OQVJZLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9QQVJTRVIs ICJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJDUkVBVEUgVEVYVCBTRUFS Q0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9UUkFOU0ZPUk0sICJDUkVBVEUgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfVFJJR0dFUiwgIkNSRUFURSBUUklHR0VSIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFlQRSwgIkNSRUFURSBUWVBFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVVNFUl9NQVBQSU5H LCAiQ1JFQVRFIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX1ZJRVcsICJDUkVBVEUgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfREVBTExPQ0FURSwgIkRFQUxMT0NBVEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUFMTE9DQVRFX0FMTCwgIkRFQUxMT0NBVEUgQUxMIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVDTEFSRV9DVVJTT1IsICJE RUNMQVJFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RF TEVURSwgIkRFTEVURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfRElT Q0FSRCwgIkRJU0NBUkQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E SVNDQVJEX0FMTCwgIkRJU0NBUkQgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRElTQ0FSRF9QTEFOUywgIkRJU0NBUkQgUExBTlMiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1NFUVVFTkNFUywgIkRJU0NBUkQgU0VRVUVO Q0VTIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9URU1Q LCAiRElTQ0FSRCBURU1QIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf RE8sICJETyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQUND RVNTX01FVEhPRCwgIkRST1AgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9BR0dSRUdBVEUsICJEUk9QIEFHR1JFR0FURSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9DQVNULCAiRFJPUCBDQVNUIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTExBVElPTiwgIkRST1Ag Q09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NP TlNUUkFJTlQsICJEUk9QIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwgIkRST1AgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9EQVRBQkFTRSwgIkRST1AgREFUQUJBU0Ui LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0RPTUFJTiwgIkRS T1AgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0VW RU5UX1RSSUdHRVIsICJEUk9QIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX0VYVEVOU0lPTiwgIkRST1AgRVhURU5TSU9OIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVS LCAiRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfRFJPUF9GT1JFSUdOX1RBQkxFLCAiRFJPUCBGT1JFSUdOIFRBQkxFIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZVTkNUSU9OLCAiRFJPUCBG VU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9JTkRF WCwgIkRST1AgSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfTEFOR1VBR0UsICJEUk9QIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19EUk9QX01BVEVSSUFMSVpFRF9WSUVXLCAiRFJPUCBNQVRFUklBTElaRUQgVklF VyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUiwg IkRST1AgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfT1BFUkFUT1JfQ0xBU1MsICJEUk9QIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0ZBTUlMWSwgIkRST1AgT1BFUkFU T1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09X TkVELCAiRFJPUCBPV05FRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf RFJPUF9QT0xJQ1ksICJEUk9QIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9QUk9DRURVUkUsICJEUk9QIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9QVUJMSUNBVElPTiwgIkRST1AgUFVCTElDQVRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUk9MRSwgIkRS T1AgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUk9V VElORSwgIkRST1AgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfRFJPUF9SVUxFLCAiRFJPUCBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19EUk9QX1NDSEVNQSwgIkRST1AgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUVVFTkNFLCAiRFJPUCBTRVFVRU5DRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVJWRVIsICJEUk9QIFNFUlZFUiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TVEFUSVNUSUNTLCAi RFJPUCBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E Uk9QX1NVQlNDUklQVElPTiwgIkRST1AgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFLCAiRFJPUCBUQUJMRSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJMRVNQQUNFLCAiRFJPUCBUQUJMRVNQ QUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NF QVJDSF9DT05GSUdVUkFUSU9OLCAiRFJPUCBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0RJQ1RJ T05BUlksICJEUk9QIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiRFJPUCBURVhUIFNF QVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1Bf VEVYVF9TRUFSQ0hfVEVNUExBVEUsICJEUk9QIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RSQU5TRk9STSwgIkRST1AgVFJB TlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RSSUdH RVIsICJEUk9QIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfVFlQRSwgIkRST1AgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9VU0VSX01BUFBJTkcsICJEUk9QIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9WSUVXLCAiRFJPUCBWSUVXIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19FWEVDVVRFLCAiRVhFQ1VURSIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0VYUExBSU4sICJFWFBMQUlOIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRkVUQ0gsICJGRVRDSCIsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfR1JBTlQsICJHUkFOVCIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfR1JBTlRfUk9MRSwgIkdSQU5UIFJPTEUiLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19JTVBPUlRfRk9SRUlHTl9TQ0hF TUEsICJJTVBPUlQgRk9SRUlHTiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0lOU0VSVCwgIklOU0VSVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRB RyhDTURUQUdfTElTVEVOLCAiTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfTE9BRCwgIkxPQUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19MT0NLX1RBQkxFLCAiTE9DSyBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX01FUkdFLCAiTUVSR0UiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURU QUcoQ01EVEFHX01PVkUsICJNT1ZFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENN RFRBR19OT1RJRlksICJOT1RJRlkiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19QUkVQQVJFLCAiUFJFUEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX1BSRVBBUkVfVFJBTlNBQ1RJT04sICJQUkVQQVJFIFRSQU5TQUNUSU9OIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVBU1NJR05fT1dORUQsICJSRUFTU0lH TiBPV05FRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFRlJFU0hf TUFURVJJQUxJWkVEX1ZJRVcsICJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUlOREVYLCAiUkVJTkRFWCIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFTEVBU0UsICJSRUxFQVNFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVTRVQsICJSRVNFVCIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFVk9LRSwgIlJFVk9LRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVWT0tFX1JPTEUsICJSRVZPS0UgUk9MRSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JPTExCQUNLLCAiUk9MTEJB Q0siLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ST0xMQkFDS19QUkVQ QVJFRCwgIlJPTExCQUNLIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfU0FWRVBPSU5ULCAiU0FWRVBPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfU0VDVVJJVFlfTEFCRUwsICJTRUNVUklUWSBMQUJFTCIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNULCAiU0VMRUNUIiwgZmFsc2UsIGZh bHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX0tFWV9TSEFSRSwgIlNFTEVD VCBGT1IgS0VZIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf U0VMRUNUX0ZPUl9OT19LRVlfVVBEQVRFLCAiU0VMRUNUIEZPUiBOTyBLRVkgVVBEQVRFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9TSEFSRSwgIlNF TEVDVCBGT1IgU0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19T RUxFQ1RfRk9SX1VQREFURSwgIlNFTEVDVCBGT1IgVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0lOVE8sICJTRUxFQ1QgSU5UTyIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VULCAiU0VUIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VUX0NPTlNUUkFJTlRTLCAiU0VUIENPTlNUUkFJTlRT IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0hPVywgIlNIT1ciLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TVEFSVF9UUkFOU0FDVElPTiwg IlNUQVJUIFRSQU5TQUNUSU9OIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfVFJVTkNBVEVfVEFCTEUsICJUUlVOQ0FURSBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX1VOTElTVEVOLCAiVU5MSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19VUERBVEUsICJVUERBVEUiLCBmYWxzZSwgZmFsc2UsIHRy dWUpCi1QR19DTURUQUcoQ01EVEFHX1ZBQ1VVTSwgIlZBQ1VVTSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCisvKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1lLCBldmVudF90cmlnZ2VyX29rLCB0YWJs ZV9yZXdyaXRlX29rLCByb3djb3VudCwgZGRscmVwbG9rICovCitQR19DTURUQUcoQ01EVEFHX1VO S05PV04sICI/Pz8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfQUNDRVNTX01FVEhPRCwgIkFMVEVSIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BR0dSRUdBVEUsICJBTFRF UiBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0NBU1QsICJBTFRFUiBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9DT0xMQVRJT04sICJBTFRFUiBDT0xMQVRJT04iLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlNUUkFJTlQsICJB TFRFUiBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfQ09OVkVSU0lPTiwgIkFMVEVSIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0RBVEFCQVNFLCAiQUxURVIgREFU QUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfREVGQVVMVF9QUklWSUxFR0VTLCAiQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ET01BSU4sICJBTFRF UiBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX0VWRU5UX1RSSUdHRVIsICJBTFRFUiBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwgIkFMVEVSIEVY VEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRk9SRUlHTl9U QUJMRSwgIkFMVEVSIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLCAiQUxURVIgRlVOQ1RJT04iLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0lOREVYLCAiQUxURVIg SU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVS X0xBTkdVQUdFLCAiQUxURVIgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0FMVEVSX0xBUkdFX09CSkVDVCwgIkFMVEVSIExBUkdFIE9CSkVDVCIs IHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX01BVEVS SUFMSVpFRF9WSUVXLCAiQUxURVIgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCB0cnVlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1IsICJBTFRFUiBPUEVSQVRP UiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BF UkFUT1JfQ0xBU1MsICJBTFRFUiBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfRkFNSUxZLCAiQUxURVIgT1BF UkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19BTFRFUl9QT0xJQ1ksICJBTFRFUiBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwgIkFMVEVSIFBST0NFRFVSRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUFVCTElDQVRJ T04sICJBTFRFUiBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfQUxURVJfUk9MRSwgIkFMVEVSIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUk9VVElORSwgIkFMVEVSIFJPVVRJTkUi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JVTEUs ICJBTFRFUiBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19BTFRFUl9TQ0hFTUEsICJBTFRFUiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NFUVVFTkNFLCAiQUxURVIgU0VRVUVOQ0UiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NFUlZFUiwgIkFM VEVSIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf QUxURVJfU1RBVElTVElDUywgIkFMVEVSIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NVQlNDUklQVElPTiwgIkFMVEVSIFNVQlND UklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX1NZU1RFTSwgIkFMVEVSIFNZU1RFTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9UQUJMRSwgIkFMVEVSIFRBQkxFIiwgdHJ1ZSwgdHJ1ZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RBQkxFU1BBQ0UsICJBTFRFUiBU QUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJBTFRFUiBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19B TFRFUl9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFS WSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVY VF9TRUFSQ0hfUEFSU0VSLCAiQUxURVIgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9URU1QTEFU RSwgIkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UUkFOU0ZPUk0sICJBTFRFUiBUUkFOU0ZPUk0iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UUklHR0VS LCAiQUxURVIgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfVFlQRSwgIkFMVEVSIFRZUEUiLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVVNFUl9NQVBQSU5HLCAiQUxURVIgVVNFUiBNQVBQSU5H IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9WSUVX LCAiQUxURVIgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQU5BTFlaRSwgIkFOQUxZWkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfQkVHSU4sICJCRUdJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19DQUxMLCAiQ0FMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19DSEVDS1BPSU5ULCAiQ0hFQ0tQT0lOVCIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DTE9TRSwgIkNMT1NFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NMT1NFX0NVUlNPUiwgIkNM T1NFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19DTE9TRV9DVVJTT1JfQUxMLCAiQ0xPU0UgQ1VSU09SIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DTFVTVEVSLCAiQ0xVU1RFUiIsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT01NRU5ULCAiQ09NTUVOVCIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09NTUlULCAiQ09N TUlUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NPTU1J VF9QUkVQQVJFRCwgIkNPTU1JVCBQUkVQQVJFRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19DT1BZLCAiQ09QWSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0NPUFlfRlJPTSwgIkNPUFkgRlJPTSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQUNDRVNTX01FVEhPRCwg IkNSRUFURSBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfQUdHUkVHQVRFLCAiQ1JFQVRFIEFHR1JFR0FURSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NBU1QsICJDUkVBVEUg Q0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X0NPTExBVElPTiwgIkNSRUFURSBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT05TVFJBSU5ULCAiQ1JFQVRFIENPTlNUUkFJTlQi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09O VkVSU0lPTiwgIkNSRUFURSBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfREFUQUJBU0UsICJDUkVBVEUgREFUQUJBU0UiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RPTUFJTiwg IkNSRUFURSBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9FVkVOVF9UUklHR0VSLCAiQ1JFQVRFIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwg IkNSRUFURSBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkNSRUFURSBGT1JFSUdOIERBVEEg V1JBUFBFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX0ZPUkVJR05fVEFCTEUsICJDUkVBVEUgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0ZVTkNUSU9OLCAiQ1JFQVRFIEZV TkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfSU5ERVgsICJDUkVBVEUgSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9MQU5HVUFHRSwgIkNSRUFURSBMQU5HVUFHRSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX01BVEVSSUFMSVpFRF9W SUVXLCAiQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1IsICJDUkVBVEUgT1BFUkFUT1IiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRP Ul9DTEFTUywgIkNSRUFURSBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwgIkNSRUFURSBPUEVS QVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9QT0xJQ1ksICJDUkVBVEUgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLCAiQ1JFQVRFIFBST0NFRFVSRSIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BVQkxJ Q0FUSU9OLCAiQ1JFQVRFIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUk9MRSwgIkNSRUFURSBST0xFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST1VUSU5FLCAiQ1JFQVRF IFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfUlVMRSwgIkNSRUFURSBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfU0NIRU1BLCAiQ1JFQVRFIFNDSEVNQSIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLCAiQ1JFQVRF IFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfU0VSVkVSLCAiQ1JFQVRFIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NUQVRJU1RJQ1MsICJDUkVBVEUgU1RBVElTVElDUyIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NVQlND UklQVElPTiwgIkNSRUFURSBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEUsICJDUkVBVEUgVEFCTEUiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRV9BUywgIkNS RUFURSBUQUJMRSBBUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9UQUJMRVNQQUNFLCAiQ1JFQVRFIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0NPTkZJ R1VSQVRJT04sICJDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0RJQ1RJ T05BUlksICJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkNS RUFURSBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9URU1QTEFURSwgIkNSRUFURSBURVhUIFNF QVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQ1JFQVRFX1RSQU5TRk9STSwgIkNSRUFURSBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9UUklHR0VSLCAiQ1JFQVRFIFRSSUdH RVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9U WVBFLCAiQ1JFQVRFIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9VU0VSX01BUFBJTkcsICJDUkVBVEUgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVklFVywgIkNSRUFU RSBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19ERUFM TE9DQVRFLCAiREVBTExPQ0FURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19ERUFMTE9DQVRFX0FMTCwgIkRFQUxMT0NBVEUgQUxMIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RFQ0xBUkVfQ1VSU09SLCAiREVDTEFS RSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf REVMRVRFLCAiREVMRVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfRElTQ0FSRCwgIkRJU0NBUkQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfRElTQ0FSRF9BTEwsICJESVNDQVJEIEFMTCIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1BMQU5TLCAiRElTQ0FSRCBQ TEFOUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVND QVJEX1NFUVVFTkNFUywgIkRJU0NBUkQgU0VRVUVOQ0VTIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfVEVNUCwgIkRJU0NBUkQgVEVNUCIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ETywgIkRPIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQUNDRVNTX01F VEhPRCwgIkRST1AgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfRFJPUF9BR0dSRUdBVEUsICJEUk9QIEFHR1JFR0FURSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9DQVNULCAiRFJPUCBDQVNU IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTExB VElPTiwgIkRST1AgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX0NPTlNUUkFJTlQsICJEUk9QIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTlZFUlNJT04sICJEUk9Q IENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0RST1BfREFUQUJBU0UsICJEUk9QIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRE9NQUlOLCAiRFJPUCBET01BSU4iLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRVZFTlRfVFJJR0dFUiwg IkRST1AgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX0VYVEVOU0lPTiwgIkRST1AgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVS LCAiRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JFSUdOX1RBQkxFLCAiRFJPUCBGT1JFSUdOIFRBQkxF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZVTkNU SU9OLCAiRFJPUCBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9JTkRFWCwgIkRST1AgSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfTEFOR1VBR0UsICJEUk9QIExBTkdVQUdFIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX01BVEVSSUFMSVpF RF9WSUVXLCAiRFJPUCBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUiwgIkRST1AgT1BFUkFUT1IiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xB U1MsICJEUk9QIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0ZBTUlMWSwgIkRST1AgT1BFUkFUT1IgRkFNSUxZ IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX09XTkVE LCAiRFJPUCBPV05FRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0RST1BfUE9MSUNZLCAiRFJPUCBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0RST1BfUFJPQ0VEVVJFLCAiRFJPUCBQUk9DRURVUkUiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUFVCTElDQVRJT04s ICJEUk9QIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX1JPTEUsICJEUk9QIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ST1VUSU5FLCAiRFJPUCBST1VUSU5FIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1JVTEUsICJEUk9QIFJV TEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfU0NI RU1BLCAiRFJPUCBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0RST1BfU0VRVUVOQ0UsICJEUk9QIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUlZFUiwgIkRST1AgU0VSVkVSIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NUQVRJU1RJQ1Ms ICJEUk9QIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0RST1BfU1VCU0NSSVBUSU9OLCAiRFJPUCBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFLCAiRFJPUCBUQUJM RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJM RVNQQUNFLCAiRFJPUCBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkRST1AgVEVY VCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiRFJPUCBURVhUIFNFQVJD SCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkRST1AgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNI X1RFTVBMQVRFLCAiRFJPUCBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UUkFOU0ZPUk0sICJEUk9QIFRSQU5TRk9S TSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UUklH R0VSLCAiRFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX1RZUEUsICJEUk9QIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0RST1BfVVNFUl9NQVBQSU5HLCAiRFJPUCBVU0VSIE1BUFBJTkci LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVklFVywg IkRST1AgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RVhFQ1VURSwgIkVYRUNVVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfRVhQTEFJTiwgIkVYUExBSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfRkVUQ0gsICJGRVRDSCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0dSQU5ULCAiR1JBTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0dSQU5UX1JPTEUsICJHUkFOVCBST0xFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0lNUE9SVF9GT1JFSUdOX1ND SEVNQSwgIklNUE9SVCBGT1JFSUdOIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfSU5TRVJULCAiSU5TRVJUIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTElTVEVOLCAiTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xPQUQsICJMT0FEIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xPQ0tfVEFCTEUsICJMT0NLIFRBQkxF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX01FUkdFLCAi TUVSR0UiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19NT1ZF LCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX05P VElGWSwgIk5PVElGWSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19QUkVQQVJFLCAiUFJFUEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19QUkVQQVJFX1RSQU5TQUNUSU9OLCAiUFJFUEFSRSBUUkFOU0FDVElPTiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRUFTU0lHTl9P V05FRCwgIlJFQVNTSUdOIE9XTkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcsICJSRUZSRVNIIE1BVEVSSUFM SVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19S RUlOREVYLCAiUkVJTkRFWCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19SRUxFQVNFLCAiUkVMRUFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19SRVNFVCwgIlJFU0VUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX1JFVk9LRSwgIlJFVk9LRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVWT0tFX1JPTEUsICJSRVZPS0UgUk9MRSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ST0xMQkFDSywgIlJP TExCQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JP TExCQUNLX1BSRVBBUkVELCAiUk9MTEJBQ0sgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0FWRVBPSU5ULCAiU0FWRVBPSU5UIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFQ1VSSVRZX0xBQkVMLCAi U0VDVVJJVFkgTEFCRUwiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX1NFTEVDVCwgIlNFTEVDVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX1NFTEVDVF9GT1JfS0VZX1NIQVJFLCAiU0VMRUNUIEZPUiBLRVkgU0hBUkUiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9O T19LRVlfVVBEQVRFLCAiU0VMRUNUIEZPUiBOTyBLRVkgVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfU0hBUkUsICJTRUxFQ1Qg Rk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X1NFTEVDVF9GT1JfVVBEQVRFLCAiU0VMRUNUIEZPUiBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0lOVE8sICJTRUxFQ1QgSU5UTyIs IHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFVCwgIlNFVCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRVRfQ09OU1RS QUlOVFMsICJTRVQgQ09OU1RSQUlOVFMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfU0hPVywgIlNIT1ciLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfU1RBUlRfVFJBTlNBQ1RJT04sICJTVEFSVCBUUkFOU0FDVElPTiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9U QUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX1VOTElTVEVOLCAiVU5MSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVVBEQVRFLCAiVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCB0 cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNo ZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkMzQwMDI2NTE4Li45MWQ0 YmRkNmIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVt CiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJv cCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0 V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAppbmRleCA5ZWVhYTFjY2MxLi44ZTZmZmE5ODkzIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfdGFibGUub3V0CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTIwLDYgKzIwLDEzIEBA IE5PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxU RVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBi IFNFVCBTVE9SQUdFIEVYVEVSTkFMOwogTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAi QUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUi OiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBT RVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6 ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJj dGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQogTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBl eHRlcm5hbAorQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFM TCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5j ZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50 czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRp dGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6 IHsib2JqbmFtZSI6ICJjdGx0MV9saWtlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhl cml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51 bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7 b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjog bnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs ICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIi LCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0 aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10Ijog IlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRo b2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0 eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVt YW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJl c2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xM QVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1l IjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogIm1haW4iLCAiY29tcHJlc3Npb24iOiB7 ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBm YWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsi Zm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10Ijog IiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lv bn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2Nv bHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBt b2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5h bWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2Vu dCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRF ICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjog InBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVybmFsIiwgImNvbXByZXNzaW9uIjog eyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7 ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6 ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfYV9j aGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJjaGVjayIsICJkZWZpbml0 aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+ KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJu YW1lIjogImN0bHQxX2xpa2VfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6 ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9XX0KK05PVElD RTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3RsdDFfbGlrZSAo YSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBtYWluICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1 bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVybmFsICBDT0xMQVRFIHBnX2Nh dGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQxX2FfY2hlY2sgQ0hFQ0sgKChwZ19j YXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSwgQ09OU1RSQUlOVCBj dGx0MV9saWtlX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQg anNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVM TD4KIC0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93 aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3Vi Y29tbWFuZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0 ZXh0KTsKIE5PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3Rl bmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1l bnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFy dGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5 IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVy aXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVs bCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtv bl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBu dWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwg InByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIs ICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRp dGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50 IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAi VVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhv ZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQi OiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNz aW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRf Y29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0 eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVt YW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJl c2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xM QVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNz aW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVz ZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1 bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7 ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29t cHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVy YXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlw ZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxU IiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQi OiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjog InByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5 IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCkifV19CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxl LnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVh dGVfdGFibGUuc3FsCmluZGV4IDk5N2QyZjU0ZmIuLjFjNWYwYzIwNmEgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUu c3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9j cmVhdGVfdGFibGUuc3FsCkBAIC05LDYgKzksNyBAQCBDUkVBVEUgVU5JUVVFIElOREVYIGNvdmVy aW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOwogQ1JFQVRFIFRB QkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0aChhKSA+IDIpIFBSSU1BUlkgS0VZLCBiIHRl eHQpOwogQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UgTUFJTjsK IEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOwor Q1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CiAKIC0t IFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFM VEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFu ZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDhmYzYyY2ViZDIuLmQ4YWZmYWU2OTgg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNjE5NCw5ICs2MTk0LDkgQEAgTGlz dCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwg T3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwg T3duZXIgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0rLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3Vj aC5zdWJzY3JpcHRpb24iCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CmluZGV4IDQyN2Y4N2VhMDcuLmIyMzE3ZTc5YmUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHVibGljYXRpb24ub3V0CkBAIC0zMCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGlu ZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJs aWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAg IHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogKDIgcm93cykK IAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNl cnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAg ICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3Ry dW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAg ICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBB bGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHBpYl9pbnNf dHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3 LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFi bGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxk UnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZy b20gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0 YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgog CiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0 aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTEyMywxMCArMTIzLDEwIEBA IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdDsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZP UiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90 Ymxfc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25v cGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTM1LDEwICsxMzUsMTAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBhIHRhYmxlIG9mIHRoZSBzYW1l IHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVz dHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVz dHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCArMTQ3LDEwIEBAIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHRoZSB0YWJsZQog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50 ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYxLDEwIEBA IEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1Ymxp Y2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0 aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rl c3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xODYsMTAgKzE4Niwx MCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0 ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBU QUJMRSB0ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3RibDMiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjM0LDEwICsy MzQsMTAgQEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVu dCBpcyBsaXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0 ZWQ7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRB QkxFIHRlc3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBE QVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJw KyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21l c3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUg dGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBk IDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0 Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6CiAKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUg KGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJs MiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMTksMTAgKzMx OSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1Ag VEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMi IFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICszMzAsMTAgQEAg VGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJs MyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUw MCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAgKzM2 NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVz dHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4 MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBT RVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1h MS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0 Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4 MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9z eW50YXgyCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0 ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5 NywxMCArNDk3LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElO IFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBT RVQgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZf c2NoZW1hMi50ZXN0cHViX3JmX3RibDYgV0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJf cmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgpAQCAtNzE0LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJf dGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFE RCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5z Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJs ZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxs IERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQog CkBAIC04OTEsMTAgKzg5MSwxMCBAQCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0 ZXJzIChhIGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJM RSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0 ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Ym90aF9maWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hF UkUgKGMgIT0gMSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMp IFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlv biAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1 Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVz dHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkg ZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTE0 MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBc ZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEyMjEsMTAgKzEy MjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRB QkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgx IHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTEyMzQs MjAgKzEyMzQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3Rw dWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVs dCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICBO YW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAg ICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBi YWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv byBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9k ZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJf ZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNj aGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNV UlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg QWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEyODksNDQgQEAgQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVO VF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBU QUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRf U0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAog XGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3Rw dWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEu Q1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAgRVJST1I6ICBzY2hlbWEg InRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hv dWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rl c3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM3MSwy MCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcgdGhlIHNjaGVt YSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEg cHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3Qx X3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Ml9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxs IERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAg ICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1h czoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2No ZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlz IGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEw IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVt YQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFND SEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsx NDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFi bGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRp b24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0NDksMjkgKzE0NDksMjkgQEAgVGFi bGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBE Uk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1h ICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNh dGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3Jz Y2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDgwLDEwICsxNDgwLDEwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2No ZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsx NTc0LDE4IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJf Zm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIK IAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24u cGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRiYzRmZjIyMTIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBA IC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lvbiB0ZXN0cyBmb3IgbG9naWNhbCByZXBsaWNh dGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFt aW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9z dWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK KyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAkZGRsID0gIkNSRUFURSBUQUJMRSB0ZXN0 X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdmFyY2hhciwgdmFsdWUgaW50ZWdlcik7IjsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRkZGwpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+ Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3 aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnLCBkZGwgPSAnYWxsJyk7Iik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlND UklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9O IG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor CisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUuCisjIFRo aXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4ZWN1dGVk IGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1 ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9NIHBnX3N1 YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywgJ3InKSBB TkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0IEFMVEVS IFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVS IFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0YTInLCAy LCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKK215 ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRB QkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBU QUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRlc3Rf cmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJlcGxpY2F0 ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBU WVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVz dF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFC TEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1 ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIg Q09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9vJywgJ0FM VEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBoYXZlIHRo ZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gdmFs dWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5VTEwgRlJP TSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxURVIgdGVz dF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRB QkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29yZCB0aGF0 IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVw IFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRh NicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0X3JlcFwi IHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxURVIgVEFC TEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIEluc2VydCBz YW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1dCBub3cg c2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUgSVMg TlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEodCksICJB TFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcsICdkYXRh NycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVzdWx0LCBx cSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdkYXRhOCcs ICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0LCBxcSgx KSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdf dGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMiwg J2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdlcyB0byB0 bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklUUworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAyIChj MyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdf dGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRt cDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8gaW5oZXJp dGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBMSUtFCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcDMg KGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFi bGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JF QVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmluZWQgd2l0 aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3Rh YmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnVEFC TEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJMRQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dFRCBUQUJM RSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFi bGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxPR0dFRCBU QUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOwor aXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJsZSBpcyBu b3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5P VCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBw Z190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0YWJsZSBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVj ayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUg b24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMgaW4gcmVw bGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVB VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisj IHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBvbiB0aGUg c3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJM RSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdp dGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgnZm9vJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY29sbGF0 aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJsZV9uYW1l ID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRoIGNvbGxh dGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1lZCBjb25z dHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwXCIgQ0hF Q0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3Rk ZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9 fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3Qg Q1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMgTk9UIE5V TEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNv bHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWlu dC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFpbnQgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0 ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7CitpcygkcmVzdWx0 LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNhdGVkIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAi KTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0LCBwcmlj ZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9uX2Vycm9y X3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQg PT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAi dG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLworICBvciBk aWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGQVVM VAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIGZyb20g dG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRlZmF1bHQg dmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgVU5J UVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25z dHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIGNvbnN0 cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBS SU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsiLAorCQkJ CQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJ CQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRl IGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLworICBvciBk aWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAoYyBXSVRI ICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+ Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVy ciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4g L0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJh aW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBFWENM VURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2ZvbycpOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1 Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBw cm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRl IG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgIm9yZGVy c19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgUkVGRVJF TkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Zv bycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQg PSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZhaWwgZm9y IElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVyLT5wc3Fs KCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsKK0lO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRtcCBXSEVS RSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9PiBcJHN0 ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRl IGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLworICBvciBk aWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJsZSI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVSUkFCTEUs IG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBs aWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtleSIvCisg IG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0 YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50 IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRleHQpOyIp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVy cmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQ REFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0 IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBp ZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJP TSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFC TEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3MgYW5kIGNv bmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1wIChwcmlj ZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmljZSA+IDAg QU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9lcnJvcl9z dG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+ IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRt cCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikgYXQgY3Jl YXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xh dGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVhdGluZyB0 YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJhbWV0ZXIK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJF IHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRv dXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHN0 b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVzcGFjZSBp cyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNwYWNlX2Rp cik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2Vf ZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGlyKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBt eXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0gJG5vZGVf c3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNf c3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRh Ymxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxF IFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5cGUgQVMg KGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNh dGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZ UEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBFTlVNICgn bmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCduZXcnKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20g dG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVk Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUg bXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2UgQVMgUkFO R0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4X3Jhbmdl KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNlcnQgaW50 byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxFIE9GIHJl cGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEgVFlQRSBh bmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9OIGludDQy X2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAgTEFOR1VB R0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0Ml9vdXQo aW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFOR1VBR0Ug aW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAgIGludGVy bmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBpbnQ0Ml9v dXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFzc2VkYnl2 YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRPIHRtcCBE RUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVBVEUgVEFC TEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxpY2F0aW9u IHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVfcHVibGlz aGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggYWNjZWVmMGIyNi4uODFkMDcyOWJlZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAg LTU1OSw2ICs1NTksNyBAQCBEZWZFbGVtQWN0aW9uCiBEZWZhdWx0QUNMSW5mbwogRGVmaW5lU3Rt dAogRGVsZXRlU3RtdAorRGVwYXJzZWRDb21tYW5kVHlwZQogRGVwZW5kZW5jeUdlbmVyYXRvcgog RGVwZW5kZW5jeUdlbmVyYXRvckRhdGEKIERlcGVuZGVuY3lUeXBlCkBAIC0xNDM5LDYgKzE0NDAs OCBAQCBMb2dpY2FsRGVjb2RlQmVnaW5QcmVwYXJlQ0IKIExvZ2ljYWxEZWNvZGVDaGFuZ2VDQgog TG9naWNhbERlY29kZUNvbW1pdENCCiBMb2dpY2FsRGVjb2RlQ29tbWl0UHJlcGFyZWRDQgorTG9n aWNhbERlY29kZURETE1lc3NhZ2VDQgorTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQgog TG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IKIExvZ2ljYWxEZWNvZGVGaWx0ZXJQcmVwYXJl Q0IKIExvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IKQEAgLTIyOTIsNiArMjI5NSw4IEBAIFJlb3JkZXJC dWZmZXJDaGFuZ2UKIFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiBSZW9yZGVyQnVmZmVyQ29tbWl0 Q0IKIFJlb3JkZXJCdWZmZXJDb21taXRQcmVwYXJlZENCCitSZW9yZGVyQnVmZmVyRERMTWVzc2Fn ZUNCCitSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCCiBSZW9yZGVyQnVmZmVyRGlza0No YW5nZQogUmVvcmRlckJ1ZmZlckl0ZXJUWE5FbnRyeQogUmVvcmRlckJ1ZmZlckl0ZXJUWE5TdGF0 ZQpAQCAtMzU5Miw2ICszNTk3LDcgQEAgcHRocmVhZF9tdXRleF90CiBwdGhyZWFkX29uY2VfdAog cHRocmVhZF90CiBwdHJkaWZmX3QKK3B1YmxpY2F0aW9uX3JlbAogcHVsbF92YXJfY2xhdXNlX2Nv bnRleHQKIHB1bGxfdmFyYXR0bm9zX2NvbnRleHQKIHB1bGxfdmFybm9zX2NvbnRleHQKLS0gCjIu MzQuMQoK --00000000000003c9ff05f29a094d--