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 1pGDdl-0001ue-7g for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Jan 2023 06:34:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pGDdj-0005lg-LX for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Jan 2023 06:34:11 +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 1pGDdh-0005lU-W0 for pgsql-hackers@lists.postgresql.org; Fri, 13 Jan 2023 06:34:10 +0000 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pGDdD-0001TH-G4 for pgsql-hackers@lists.postgresql.org; Fri, 13 Jan 2023 06:34:08 +0000 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-15ed38a9b04so2712530fac.8 for ; Thu, 12 Jan 2023 22:33:39 -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=SVKg8fckuCM6YhdKvN/Hdtf3t9Tm6iC96WKApP/C3Iw=; b=DZNjUgmuM/+f2xtdzOz5Uw+5CBD86/Q6cqRZD3gJEoXXHUMoicQP8T5hfp4f/kY5Tz AQVdqBrAIPgumyH302fYThcxKQ5lUoGBql2dreWNHaiF2TGklIFn199F7OWAJad/tTM+ Itec/gGzxdnX8DECCL/qZqnJvVR1r0CyKjSS+dDU92b6c98OmV5Ar59tqcM2nXoDkip+ KWyK+xD8uY2MtIUcqB9ewXYGBeadjcC3V28srC441/GIi0EUWPbmaYzKcrQTIrCP3Kkb Rdz6+cMxcPiDWRw4u2k6kyjKNyIiXmllx90YbshO4lyjW4W5pzWmLlgs2mjayprBBUA3 +jPA== 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=SVKg8fckuCM6YhdKvN/Hdtf3t9Tm6iC96WKApP/C3Iw=; b=GoSTwV7JUyVJK0uAe/Bucws7MGDPAjDqbK24aj+o3sNN3rnNiysc349vJ9+Avmdzck oY5dgt0VUNuSMNsgPqFjXkHv/GKZuujRVcIj7K5uW+RRW8XteXc+3qsc9hC2ne75+1qX 9yi/wHx7kFc2bzG3XoIzP2ojApGsDTrr1C+cagKWA8Z0ZL/8s2XDG13RthJQiktLHqro VAW0xe36nh5T1B/M5zDr6Q6HkULk8/k0S+aZn+3zFsGnoL++eorGSbC7S3oRsg78/ZuT expD6Yh4XGlMq4Wl9fIAnWPb8uRz3ONbXlWGz/bGcsrW51/JA8X8i2jdK6Yzr0EPAxoZ qCKQ== X-Gm-Message-State: AFqh2kqHeXhG4kzHd/tBUOOlCXGrobVKjhuzw0EBaVyaQIm3h9gdcOoW BlfJ/iarYnNtS6P2fTXfy/JWN3NvGjKq12alaw4= X-Google-Smtp-Source: AMrXdXtJibaVWWd7V40yQydUrM3K4rFs670xnJeSFuO5zy3kxj9c1nkwDQLqbMwG60slJQlgP7bGMok+jrcANjKFb40= X-Received: by 2002:a05:6870:82aa:b0:153:b199:10a with SMTP id q42-20020a05687082aa00b00153b199010amr2783676oae.160.1673591618481; Thu, 12 Jan 2023 22:33:38 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: vignesh C Date: Fri, 13 Jan 2023 12:03:26 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Zheng Li Cc: Peter Smith , li jie , Ajin Cherian , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ebc24105f21f6934" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ebc24105f21f6934 Content-Type: text/plain; charset="UTF-8" On Sat, 7 Jan 2023 at 20:58, Zheng Li wrote: > > Hi, > > I added documentation and changed user interface design in the > attached v60 patch set. > The patch set addressed comments from Peter in [1]. > > The motivation for the user interface change is that we want to manage > DDL replication feature in stages with fine grained replication > levels. > For example, we can focus on reviewing and testing table commands > first, then other commands. It also make sense to introduce different > DDL replication levels > from the user perspective as pointed out in [1]. We can add more > replication levels along the way. > > In this patch DDL replication is disabled by default and it can be > enabled at different levels > using the new PUBLICATION option 'ddl'. This option currently has two > levels and are > only allowed to be set if the PUBLICATION is FOR ALL TABLES. > > all: this option enables replication of all supported DDL commands. > table: this option enables replication of Table DDL commands which include: > -CREATE/ALTER/DROP TABLE > -CREATE TABLE AS > > Example: > Create a new publication with all ddl replication enabled: > CREATE PUBLICATION pub1 FOR ALL TABLES with (ddl = 'all'); > > Enable table ddl replication for an existing Publication: > ALTER PUBLICATION pub2 SET (ddl = 'table'); > > Also I break down ddl_deparse.c into two patches: > 1.v60-0002-Functions-to-deparse-Table-DDL-commands.patch > 2.v60-0003-Support-DDL-deparse-of-the-rest-commands.patch Adding support for CREATE/ALTER/DROP Publication ddl deparsing. The attached v61 patch has the changes for the same. Regards, Vignesh --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v61-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581td0 RnJvbSBkNzliYTUxNDZiMzVjMTdlMTZjNWQxYTk2M2Q3ODc2MTY3NjFmNGZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjAgRGVjIDIwMjIgMTc6NDU6MDcgKzA1MzAKU3ViamVjdDogW1BBVENIIHY2MSAxLzdd IEluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgRERMIGRlcGFyc2luZy4KCkluZnJhc3RydWN0dXJl IHRvIHN1cHBvcnQgRERMIGRlcGFyc2luZy4KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNo ay5jICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3Rh ZGRyZXNzLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlv bmNtZHMuYyAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICB8ICA0MCArLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMg ICAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgICAg ICAgICAgICAgIHwgIDMzICsrKwogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAg ICAgICAgICAgfCAgOTEgKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgICAg ICAgICAgICAgIHwgIDUzICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgIHwgMjU4ICsrKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRz L2NvbGxhdGlvbmNtZHMuaCAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmggICAgICAgICB8ICAzOSArKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Nl cXVlbmNlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5o ICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbC5oICAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5h bC5oICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgIHwgIDE5ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dCB8ICAgMiArLQogMTkgZmlsZXMgY2hhbmdlZCwgNDU1IGluc2VydGlvbnMoKyksIDExOSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBjYzZlMjYwOTA4Li5iZWRjNDU3Yjk2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvYWNsY2hrLmMKQEAgLTEyOSw3ICsxMjksNiBAQCBzdGF0aWMgdm9pZCBleHBh bmRfYWxsX2NvbF9wcml2aWxlZ2VzKE9pZCB0YWJsZV9vaWQsIEZvcm1fcGdfY2xhc3MgY2xhc3NG b3JtLAogCQkJCQkJCQkJICBBY2xNb2RlICpjb2xfcHJpdmlsZWdlcywKIAkJCQkJCQkJCSAgaW50 IG51bV9jb2xfcHJpdmlsZWdlcyk7CiBzdGF0aWMgQWNsTW9kZSBzdHJpbmdfdG9fcHJpdmlsZWdl KGNvbnN0IGNoYXIgKnByaXZuYW1lKTsKLXN0YXRpYyBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9f c3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKTsKIHN0YXRpYyBBY2xNb2RlIHJlc3RyaWN0X2FuZF9j aGVja19ncmFudChib29sIGlzX2dyYW50LCBBY2xNb2RlIGF2YWlsX2dvcHRpb25zLAogCQkJCQkJ CQkJCWJvb2wgYWxsX3ByaXZzLCBBY2xNb2RlIHByaXZpbGVnZXMsCiAJCQkJCQkJCQkJT2lkIG9i amVjdElkLCBPaWQgZ3JhbnRvcklkLApAQCAtMzg1LDExICszODQsMTAgQEAgRXhlY3V0ZUdyYW50 U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJTGlzdENlbGwgICAqY2VsbDsKIAljb25zdCBjaGFyICpl cnJvcm1zZzsKIAlBY2xNb2RlCQlhbGxfcHJpdmlsZWdlczsKKwlPaWQJCQlncmFudG9yID0gSW52 YWxpZE9pZDsKIAogCWlmIChzdG10LT5ncmFudG9yKQogCXsKLQkJT2lkCQkJZ3JhbnRvcjsKLQog CQlncmFudG9yID0gZ2V0X3JvbGVzcGVjX29pZChzdG10LT5ncmFudG9yLCBmYWxzZSk7CiAKIAkJ LyoKQEAgLTQwOCw2ICs0MDYsOSBAQCBFeGVjdXRlR3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkK IAlpc3RtdC5pc19ncmFudCA9IHN0bXQtPmlzX2dyYW50OwogCWlzdG10Lm9ianR5cGUgPSBzdG10 LT5vYmp0eXBlOwogCisJLyogQ29weSB0aGUgZ3JhbnRvciBpZCBuZWVkZWQgZm9yIERETCBkZXBh cnNpbmcgb2YgR3JhbnQgKi8KKwlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CisKIAkvKiBD b2xsZWN0IHRoZSBPSURzIG9mIHRoZSB0YXJnZXQgb2JqZWN0cyAqLwogCXN3aXRjaCAoc3RtdC0+ dGFyZ3R5cGUpCiAJewpAQCAtMjYyOCw3ICsyNjI5LDcgQEAgc3RyaW5nX3RvX3ByaXZpbGVnZShj b25zdCBjaGFyICpwcml2bmFtZSkKIAlyZXR1cm4gMDsJCQkJCS8qIGFwcGVhc2UgY29tcGlsZXIg Ki8KIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBwcml2aWxlZ2VfdG9f c3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKQogewogCXN3aXRjaCAocHJpdmlsZWdlKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL29iamVjdGFkZHJlc3MuYwppbmRleCAyNWM1MGQ2NmZkLi4yZjY4ODE2NmUxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwpAQCAtNTkyMiw3ICs1OTIyLDcgQEAgZ2V0T2Jq ZWN0SWRlbnRpdHlQYXJ0cyhjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJCQkJdHJhbnNm b3JtVHlwZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0cmFuc2Zvcm0tPnRyZnR5cGUpOwog CQkJCXRyYW5zZm9ybUxhbmcgPSBnZXRfbGFuZ3VhZ2VfbmFtZSh0cmFuc2Zvcm0tPnRyZmxhbmcs IGZhbHNlKTsKIAotCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwgImZvciAlcyBvbiBsYW5n dWFnZSAlcyIsCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIGxhbmd1YWdl ICVzIiwKIAkJCQkJCQkJIHRyYW5zZm9ybVR5cGUsCiAJCQkJCQkJCSB0cmFuc2Zvcm1MYW5nKTsK IAkJCQlpZiAob2JqbmFtZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwppbmRleCA2 YTQzMTFjYzYzLi5hYjJhZjJkMjc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j b2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5j CkBAIC01Miw3ICs1Miw4IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBDUkVBVEUgQ09MTEFUSU9OCiAg Ki8KIE9iamVjdEFkZHJlc3MKLURlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExp c3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9leGlzdHMpCitEZWZpbmVD b2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVy cywKKwkJCQkgYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2V4aXN0aW5n X2NvbGxpZCkKIHsKIAljaGFyCSAgICpjb2xsTmFtZTsKIAlPaWQJCQljb2xsTmFtZXNwYWNlOwpA QCAtMTM5LDYgKzE0MCwxMyBAQCBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZQogCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHApKQogCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGNvbGxhdGlvbiAldSIsIGNvbGxpZCk7CiAKKwkJLyoKKwkJICogTWFrZSBmcm9tIGV4aXN0aW5n IGNvbGxhdGlvbmlkIGF2YWlsYWJsZSB0byBjYWxsZXJzIGZvciBzdGF0ZW1lbnQgc3VjaCBhcwor CQkgKiBDUkVBVEUgQ09MTEFUSU9OIGFueV9uYW1lIEZST00gYW55X25hbWUKKwkJICovCisJCWlm IChmcm9tX2V4aXN0aW5nX2NvbGxpZCAmJiBPaWRJc1ZhbGlkKGNvbGxpZCkpCisJCQlPYmplY3RB ZGRyZXNzU2V0KCpmcm9tX2V4aXN0aW5nX2NvbGxpZCwgQ29sbGF0aW9uUmVsYXRpb25JZCwgY29s bGlkKTsKKwogCQljb2xscHJvdmlkZXIgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1Qo dHApKS0+Y29sbHByb3ZpZGVyOwogCQljb2xsaXNkZXRlcm1pbmlzdGljID0gKChGb3JtX3BnX2Nv bGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxpc2RldGVybWluaXN0aWM7CiAJCWNvbGxlbmNv ZGluZyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xsZW5jb2Rpbmc7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggZDRiMDBkMWE4Mi4uNjkwMjcw OTk1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtNDgsNDUgKzQ4LDcg QEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgog Ci10eXBlZGVmIHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlCi17Ci0JLyogbWVtb3J5IGNv bnRleHQgZm9yIHRoaXMgc3RhdGUncyBvYmplY3RzICovCi0JTWVtb3J5Q29udGV4dCBjeHQ7Ci0K LQkvKiBzcWxfZHJvcCAqLwotCXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7Ci0JYm9vbAkJaW5fc3Fs X2Ryb3A7Ci0KLQkvKiB0YWJsZV9yZXdyaXRlICovCi0JT2lkCQkJdGFibGVfcmV3cml0ZV9vaWQ7 CS8qIEludmFsaWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3cml0ZQotCQkJCQkJCQkJICogZXZl bnQgKi8KLQlpbnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSByZWFzb24g Ki8KLQotCS8qIFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLwotCWJvb2wJCWNvbW1h bmRDb2xsZWN0aW9uSW5oaWJpdGVkOwotCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRDb21tYW5k OwotCUxpc3QJICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1hbmQ7IHNl ZQotCQkJCQkJCQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLwotCXN0cnVjdCBFdmVudFRyaWdnZXJR dWVyeVN0YXRlICpwcmV2aW91czsKLX0gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKLQotc3RhdGlj IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7 Ci0KLS8qIFN1cHBvcnQgZm9yIGRyb3BwZWQgb2JqZWN0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgU1FM RHJvcE9iamVjdAotewotCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKLQljb25zdCBjaGFyICpzY2hl bWFuYW1lOwotCWNvbnN0IGNoYXIgKm9iam5hbWU7Ci0JY29uc3QgY2hhciAqb2JqaWRlbnRpdHk7 Ci0JY29uc3QgY2hhciAqb2JqZWN0dHlwZTsKLQlMaXN0CSAgICphZGRybmFtZXM7Ci0JTGlzdAkg ICAqYWRkcmFyZ3M7Ci0JYm9vbAkJb3JpZ2luYWw7Ci0JYm9vbAkJbm9ybWFsOwotCWJvb2wJCWlz dGVtcDsKLQlzbGlzdF9ub2RlCW5leHQ7Ci19IFNRTERyb3BPYmplY3Q7CitFdmVudFRyaWdnZXJR dWVyeVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgPSBOVUxMOwogCiBzdGF0aWMgdm9p ZCBBbHRlckV2ZW50VHJpZ2dlck93bmVyX2ludGVybmFsKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJ CQkJSGVhcFR1cGxlIHR1cCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xh YmVsLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCmluZGV4IDdmZjE2ZTMyNzYu LjFlODMxZmY3MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYwpAQCAtMTM0LDYgKzEzNCw5IEBA IEV4ZWNTZWNMYWJlbFN0bXQoU2VjTGFiZWxTdG10ICpzdG10KQogCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkJIGVycm1zZygibXVzdCBzcGVjaWZ5 IHByb3ZpZGVyIHdoZW4gbXVsdGlwbGUgc2VjdXJpdHkgbGFiZWwgcHJvdmlkZXJzIGhhdmUgYmVl biBsb2FkZWQiKSkpOwogCQlwcm92aWRlciA9IChMYWJlbFByb3ZpZGVyICopIGxpbml0aWFsKGxh YmVsX3Byb3ZpZGVyX2xpc3QpOworCisJCS8qIENvcHkgdGhlIHByb3ZpZGVyIG5hbWUgdG8gdGhl IHBhcnNldHJlZSwgbmVlZGVkIGZvciBEREwgZGVwYXJzaW5nIG9mIFNlY0xhYmVsU3RtdCAqLwor CQlzdG10LT5wcm92aWRlciA9IHBzdHJkdXAocHJvdmlkZXItPnByb3ZpZGVyX25hbWUpOwogCX0K IAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggYmZlMjc5Y2RkZi4uMzA0OWUw ZTkwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJv Y2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5LCBib29sIGZvcl9p ZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7CiB9CiAKKy8qCisg KiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZl ciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhl YXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3Jt X3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNjZXNzU2hhcmVMb2Nr IHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsK KworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFD TF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdF KSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJc2VxID0gcmVhZF9z ZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9IHBhbGxvYyhzaXpl b2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJldFNlcSwgc2VxLCBz aXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiByZXRT ZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2Yg dGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBjN2Q5ZDk2 YjQ1Li4xZTgzY2ZlMzkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwor KysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTQ0Niw3ICsxNDQ2LDggQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQlhZGRyZXNzID0gRGVm aW5lQ29sbGF0aW9uKHBzdGF0ZSwKIAkJCQkJCQkJCQkJCQkgIHN0bXQtPmRlZm5hbWVzLAogCQkJ CQkJCQkJCQkJCSAgc3RtdC0+ZGVmaW5pdGlvbiwKLQkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25v dF9leGlzdHMpOworCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4aXN0cywKKwkJCQkJCQkJ CQkJCQkgICZzZWNvbmRhcnlPYmplY3QpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJZGVmYXVsdDoK IAkJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGRlZmluZSBzdG10IHR5cGU6ICVkIiwK QEAgLTIxOTYsNiArMjE5Nyw5NCBAQCBVdGlsaXR5Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRy ZWUpCiAJfQogfQogCisvKgorICogUmV0dXJuIHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0 cmluZy4KKyAqLworY29uc3QgY2hhciAqCitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9i anR5cGUsIGJvb2wgaXNncmFudCkKK3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9C SkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NB U1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1 cm4gIkNPTExBVElPTiI7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJldHVybiBpc2dyYW50 ID8gIlRBQkxFIiA6ICJDT0xVTU4iOworCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQkJcmV0 dXJuICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCQlyZXR1cm4gIkRB VEFCQVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJcmV0dXJuICJET01BSU4iOworCQlj YXNlIE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJuICJFVkVOVCBUUklHR0VSIjsKKwkJ Y2FzZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJFWFRFTlNJT04iOworCQljYXNlIE9C SkVDVF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJY2FzZSBPQkpF Q1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gaXNncmFudCA/ICJGT1JFSUdOIFNFUlZFUiIg OiAiU0VSVkVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9S RUlHTiBUQUJMRSI7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElP TiI7CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JK RUNUX0xBTkdVQUdFOgorCQkJcmV0dXJuICJMQU5HVUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdF T0JKRUNUOgorCQkJcmV0dXJuICJMQVJHRSBPQkpFQ1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVX OgorCQkJcmV0dXJuICJNQVRFUklBTElaRUQgVklFVyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6 CisJCQlyZXR1cm4gIk9QRVJBVE9SIENMQVNTIjsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJ CQlyZXR1cm4gIk9QRVJBVE9SIjsKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4g Ik9QRVJBVE9SIEZBTUlMWSI7CisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXJldHVybiAiUE9M SUNZIjsKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQkJcmV0dXJuICJQUk9DRURVUkUiOwor CQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUk9V VElORToKKwkJCXJldHVybiAiUk9VVElORSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1 cm4gIlJVTEUiOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJ CWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JK RUNUX1NUQVRJU1RJQ19FWFQ6CisJCQlyZXR1cm4gIlNUQVRJU1RJQ1MiOworCQljYXNlIE9CSkVD VF9UQUJMRToKKwkJCXJldHVybiAiVEFCTEUiOworCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgor CQkJcmV0dXJuICJUQUJMRVNQQUNFIjsKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXJldHVy biAiVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiAi VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiI7CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToK KwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggRElDVElPTkFSWSI7CisJCWNhc2UgT0JKRUNUX1RTUEFS U0VSOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBQQVJTRVIiOworCQljYXNlIE9CSkVDVF9UU1RF TVBMQVRFOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBURU1QTEFURSI7CisJCWNhc2UgT0JKRUNU X1RZUEU6CisJCQlyZXR1cm4gIlRZUEUiOworCQljYXNlIE9CSkVDVF9VU0VSX01BUFBJTkc6CisJ CQlyZXR1cm4gIlVTRVIgTUFQUElORyI7CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4g IlZJRVciOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0 eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQogCiAvKgogICogQWx0ZXJPYmplY3RUeXBlQ29tbWFu ZFRhZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAxMjQwMmEwNjM3Li43YjQ3 NmFkYjIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsOCArMjcsNiBA QAogI2luY2x1ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5o IgogCi1zdGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIg dHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKLQogCiAvKgogICogU1FMIGZ1bmN0aW9uOiBmb3JtYXRf dHlwZSh0eXBlX29pZCwgdHlwZW1vZCkKQEAgLTM2Myw3ICszNjEsNyBAQCBmb3JtYXRfdHlwZV93 aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBt b2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoK K2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBP aWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmlu ZGV4IDI5NjkzMGViM2IuLjEyOGMxNzk1YTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAt NDksNiArNDksOCBAQCBzdGF0aWMgYm9vbCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFy ICpzdHJpbmcsIGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5h cmdzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkJCQkgTm9kZSAqZXNjb250ZXh0KTsKIAorc3RhdGlj IHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9y bSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJbmZvIGJ1ZiwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiAgKgkgVVNFUiBJL08gUk9VVElORVMJCQkJCQkJCQkJCQkJ CSAqCkBAIC0zMDcsNiArMzA5LDI5IEBAIGZvcm1hdF9wcm9jZWR1cmVfcXVhbGlmaWVkKE9pZCBw cm9jZWR1cmVfb2lkKQogCXJldHVybiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkKHByb2NlZHVy ZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNFX1FVQUxJRlkpOwogfQogCisvKgorICogZm9ybWF0X3By b2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBwcm9jIE9JRCB0byAiKGFyZ3MpIgorICovCitjaGFy ICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJvY2VkdXJlX29pZCwgYm9vbCBmb3JjZV9x dWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlIZWFwVHVwbGUgICBwcm9jdHVwOwor CUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKworCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJP Q09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jZWR1cmVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29pZCk7CisJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9j KSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JtYXRf cHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJvY2Zvcm0sICZidWYsIGZvcmNlX3F1YWxpZnkpOwor CisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAv KgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRlZCAtIGNvbnZlcnRzIHByb2NlZHVyZSBPSUQg dG8gInByb19uYW1lKGFyZ3MpIgogICoKQEAgLTIwMTYsMyArMjA0MSwzMSBAQCBwYXJzZU5hbWVB bmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcsIGJvb2wgYWxsb3dOb25lLCBMaXN0ICoqbmFt ZXMsCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworLyoKKyAqIEFwcGVuZCB0aGUgcGFyZW50aGVzaXpl ZCBhcmd1bWVudHMgb2YgdGhlIGdpdmVuIHBnX3Byb2Mgcm93IGludG8gdGhlIG91dHB1dAorICog YnVmZmVyLiBmb3JjZV9xdWFsaWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5 IHR5cGUgbmFtZXMKKyAqIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZv aWQKK2Zvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0s IFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJ CQlpOworCWNoYXIqCQkoKmZ1bmNbMl0pKE9pZCkgPSB7Zm9ybWF0X3R5cGVfYmUsIGZvcm1hdF90 eXBlX2JlX3F1YWxpZmllZH07CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJ Zm9yIChpID0gMDsgaSA8IHByb2Nmb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2lkCQkJdGhp c2FyZ3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCQljaGFyCSAgICph cmd0eXBlID0gTlVMTDsKKworCQlpZiAoaSA+IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcsJyk7CisKKwkJYXJndHlwZSA9IGZ1bmNbZm9yY2VfcXVhbGlmeV0odGhpc2FyZ3R5cGUp OworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJndHlwZSk7CisJCXBmcmVlKGFyZ3R5 cGUpOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKaW5kZXggOWFjNDJlZmRiYy4uMWY0MTIwNjYxOCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdf b3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3BhcnRpdGlvbmVkX3RhYmxlLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRl LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCkBAIC0zNTgs NyArMzU5LDYgQEAgc3RhdGljIGludAlwcmludF9mdW5jdGlvbl9hcmd1bWVudHMoU3RyaW5nSW5m byBidWYsIEhlYXBUdXBsZSBwcm9jdHVwLAogCQkJCQkJCQkJIGJvb2wgcHJpbnRfdGFibGVfYXJn cywgYm9vbCBwcmludF9kZWZhdWx0cyk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9yZXR0 eXBlKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBwcmlu dF9mdW5jdGlvbl90cmZ0eXBlcyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwot c3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1 cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgc2V0X3J0YWJsZV9uYW1lcyhkZXBhcnNlX25hbWVz cGFjZSAqZHBucywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMsCiAJCQkJCQkJIEJpdG1hcHNldCAq cmVsc191c2VkKTsKIHN0YXRpYyB2b2lkIHNldF9kZXBhcnNlX2Zvcl9xdWVyeShkZXBhcnNlX25h bWVzcGFjZSAqZHBucywgUXVlcnkgKnF1ZXJ5LApAQCAtNDgyLDIyICs0ODIsMTUgQEAgc3RhdGlj IHZvaWQgZ2V0X2Zyb21fY2xhdXNlX2NvbGRlZmxpc3QoUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5j LAogCQkJCQkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdl dF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLAogCQkJCQkJ CQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwotc3RhdGljIHZvaWQgZ2V0X29wY2xhc3NfbmFt ZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKLQkJCQkJCQkgU3RyaW5nSW5mbyBi dWYpOwogc3RhdGljIE5vZGUgKnByb2Nlc3NJbmRpcmVjdGlvbihOb2RlICpub2RlLCBkZXBhcnNl X2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgcHJpbnRTdWJzY3JpcHRzKFN1YnNjcmlw dGluZ1JlZiAqc2JzcmVmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGNoYXIg KmdldF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcmVs YXRpb25fbmFtZShPaWQgcmVsaWQsIExpc3QgKm5hbWVzcGFjZXMpOwogc3RhdGljIGNoYXIgKmdl bmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7Ci1zdGF0aWMgY2hhciAq Z2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsCi0JCQkJCQkJCQlM aXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKLQkJCQkJCQkJCWJvb2wgaGFzX3ZhcmlhZGlj LCBib29sICp1c2VfdmFyaWFkaWNfcCwKLQkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9l eHBya2luZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFtZShPaWQgb3Blcmlk LCBPaWQgYXJnMSwgT2lkIGFyZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3RfdG8oU3RyaW5nSW5m byBidWYsIE9pZCB0eXBpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVf bmFtZShPaWQgdHlwaWQpOwogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7 Ci1zdGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9p ZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiAKICNk ZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCkBAIC01 NDUsNiArNTM4LDEwNCBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQ R19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwogfQogCisvKgorICogR2l2ZW4g YSBwYWlyIG9mIERhdHVtIGNvcnJlc3BvbmRpbmcgdG8gYSBydWxlJ3MgcGdfcmV3cml0ZS5ldl9x dWFsIGFuZAorICogZXZfYWN0aW9uIGNvbHVtbnMsIHJldHVybiB0aGVpciB0ZXh0IHJlcHJlc2Vu dGF0aW9uOyBldl9xdWFsIGFzIGEgc2luZ2xlCisgKiBzdHJpbmcgaW4gd2hlcmVDbGF1c2UgYW5k IGV2X2FjdGlvbiBhcyBhIExpc3Qgb2Ygc3RyaW5ncyAod2hpY2ggbWlnaHQgYmUKKyAqIE5JTCwg c2lnbmFsbGluZyBOT1RISU5HKSBpbiBhY3Rpb25zLgorICovCit2b2lkCitwZ19nZXRfcnVsZWRl Zl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQljaGFyICoq d2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKQoreworCWludAkJCXByZXR0eUZsYWdzID0gMDsK KwljaGFyCSAgICpxdWFsc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9xdWFsKTsKKwljaGFy CSAgICphY3Rpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X2FjdGlvbik7CisJTGlzdAkg ICAqYWN0aW9uTm9kZUxpc3QgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoYWN0aW9uc3RyKTsKKwlT dHJpbmdJbmZvRGF0YSBidWY7CisKKwkqd2hlcmVDbGF1c2UgPSBOVUxMOworCSphY3Rpb25zID0g TklMOworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWlmIChzdHJsZW4ocXVhbHN0cikgPiAwICYm IHN0cmNtcChxdWFsc3RyLCAiPD4iKSAhPSAwKQorCXsKKwkJTm9kZQkgICAqcXVhbDsKKwkJUXVl cnkJICAgKnF1ZXJ5OworCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwkJZGVwYXJzZV9uYW1l c3BhY2UgZHBuczsKKworCQlxdWFsID0gc3RyaW5nVG9Ob2RlKHF1YWxzdHIpOworCisJCXF1ZXJ5 ID0gKFF1ZXJ5ICopIGxpbml0aWFsKGFjdGlvbk5vZGVMaXN0KTsKKwkJcXVlcnkgPSBnZXRJbnNl cnRTZWxlY3RRdWVyeShxdWVyeSwgTlVMTCk7CisKKwkJQWNxdWlyZVJld3JpdGVMb2NrcyhxdWVy eSwgZmFsc2UsIGZhbHNlKTsKKworCQljb250ZXh0LmJ1ZiA9ICZidWY7CisJCWNvbnRleHQubmFt ZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5J TDsKKwkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwkJY29udGV4dC52YXJwcmVmaXggPSAo bGlzdF9sZW5ndGgocXVlcnktPnJ0YWJsZSkgIT0gMSk7CisJCWNvbnRleHQucHJldHR5RmxhZ3Mg PSBwcmV0dHlGbGFnczsKKwkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVM VDsKKwkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7CisKKwkJc2V0X2Rl cGFyc2VfZm9yX3F1ZXJ5KCZkcG5zLCBxdWVyeSwgTklMKTsKKworCQlnZXRfcnVsZV9leHByKHF1 YWwsICZjb250ZXh0LCBmYWxzZSk7CisKKwkJKndoZXJlQ2xhdXNlID0gcHN0cmR1cChidWYuZGF0 YSk7CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlvbk5vZGVMaXN0KSA+IDApCisJeworCQlM aXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwgYWN0aW9uTm9kZUxpc3QpCisJCXsK KwkJCVF1ZXJ5CSAgICpxdWVyeSA9IChRdWVyeSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChx dWVyeS0+Y29tbWFuZFR5cGUgPT0gQ01EX05PVEhJTkcpCisJCQkJY29udGludWU7CisKKwkJCXJl c2V0U3RyaW5nSW5mbygmYnVmKTsKKwkJCWdldF9xdWVyeV9kZWYocXVlcnksICZidWYsIE5JTCwg TlVMTCwgdHJ1ZSwKKwkJCQkJCSAgcHJldHR5RmxhZ3MsIFdSQVBfQ09MVU1OX0RFRkFVTFQsIDAp OworCQkJKmFjdGlvbnMgPSBsYXBwZW5kKCphY3Rpb25zLCBwc3RyZHVwKGJ1Zi5kYXRhKSk7CisJ CX0KKwl9Cit9CisKKy8qCisgKiBUbyBnZXQgdGhlIHJld3JpdGUgcnVsZSBvZiBhIHZpZXcgd2hl biB0aGUgQ1JFQVRFIFZJRVcgY29tbWFuZCBleGVjdXRpb24gaXMKKyAqIHN0aWxsIGluIHByb2dy ZXNzOiB3ZSBzZWFyY2ggdGhlIHN5c3RlbSBjYWNoZSBSVUxFUkVMTkFNRSB0byBnZXQgdGhlIHJl d3JpdGUKKyAqIHJ1bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3NlZCB0byBxdWVyeWluZyBwZ19yZXdy aXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dvcmtlcigpLAorICogd2hpY2ggd2lsbCByZXR1cm4g ZW1wdHkgcmVzdWx0LgorICovCitjaGFyICoKK3BnX2dldF92aWV3ZGVmX2ludGVybmFsKE9pZCB2 aWV3b2lkKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlSZWxhdGlvbglwZ19yZXdyaXRlOwor CUhlYXBUdXBsZQlydWxldHVwOworCVR1cGxlRGVzYwlydWxldHRjOworCisJaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7CisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlydWxldHVwID0gU2VhcmNoU3lzQ2FjaGUyKFJVTEVSRUxOQU1F LAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bSh2aWV3b2lkKSwKKwkJCQkJCQkgIFBvaW50ZXJH ZXREYXR1bShWaWV3U2VsZWN0UnVsZU5hbWUpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocnVs ZXR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1 bGUgZm9yIHZpZXcgd2l0aCBPSUQgJXUiLCB2aWV3b2lkKTsKKworCXJ1bGV0dGMgPSBwZ19yZXdy aXRlLT5yZF9hdHQ7CisJbWFrZV92aWV3ZGVmKCZidWYsIHJ1bGV0dXAsIHJ1bGV0dGMsIDAsIFdS QVBfQ09MVU1OX0RFRkFVTFQpOworCVJlbGVhc2VTeXNDYWNoZShydWxldHVwKTsKKwl0YWJsZV9j bG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGJ1Zi5kYXRhOwor fQogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1bGVvaWQsIGlu dCBwcmV0dHlGbGFncykKQEAgLTEwMTUsNjUgKzExMDYsMTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZf d29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCWlmICghaXNudWxsKQogCXsKIAkJTm9k ZQkgICAqcXVhbDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7 Ci0JCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJ UmFuZ2VUYmxFbnRyeSAqbmV3cnRlOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1Ziwg IldIRU4gKCIpOworCQljaGFyCSAgICpxdWFsc3RyOwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUo VGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJf d2hlbmNsYXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVs X3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0KLQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5k IE5FVyBSVEVzIGZvciB0aGUgcmVsICovCi0JCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50 cnkpOwotCQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQg PSB0cmlncmVjLT50Z3JlbGlkOwotCQlvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRy dGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFr ZUFsaWFzKCJvbGQiLCBOSUwpOwotCQlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlv bGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xkcnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRl LT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7 Ci0JCW5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRy aWdyZWMtPnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+ cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxp YXMoIm5ldyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0 ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQluZXdydGUtPmluaCA9IGZhbHNlOwotCQluZXdydGUtPmlu RnJvbUNsID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVt c2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwotCQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIo b2xkcnRlLCBuZXdydGUpOwotCQlkcG5zLnN1YnBsYW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBO SUw7Ci0JCWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMs IE5JTCwgTlVMTCk7Ci0JCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBT ZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0 LmJ1ZiA9ICZidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwot CQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5J TDsKLQkJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOwotCQljb250ZXh0LnByZXR0eUZsYWdzID0g R0VUX1BSRVRUWV9GTEFHUyhwcmV0dHkpOwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NP TFVNTl9ERUZBVUxUOwotCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsK LQkJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQu YXBwZW5kcGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwg ZmFsc2UpOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAiLCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRT dHJpbmdJbmZvKCZidWYsICJFWEVDVVRFIEZVTkNUSU9OICVzKCIsCkBAIC0xMTE0LDYgKzExNTIs NjkgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQog CXJldHVybiBidWYuZGF0YTsKIH0KIAorLyoKKyAqIFBhcnNlIGJhY2sgdGhlIFRyaWdnZXJXaGVu IGNsYXVzZSBvZiBhIHRyaWdnZXIgZ2l2ZW4gdGhlIHBnX3RyaWdnZXIgcmVjb3JkIGFuZAorICog dGhlIGV4cHJlc3Npb24gdHJlZSAoaW4gbm9kZVRvU3RyaW5nKCkgcmVwcmVzZW50YXRpb24pIGZy b20gcGdfdHJpZ2dlci50Z3F1YWwKKyAqIGZvciB0aGUgdHJpZ2dlcidzIFdIRU4gY29uZGl0aW9u LgorICovCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2Vy IHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KQoreworCVN0cmluZ0luZm9E YXRhIGJ1ZjsKKwljaGFyCQlyZWxraW5kOworCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRl cGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOworCVJhbmdlVGJs RW50cnkgKm5ld3J0ZTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCisJcmVsa2luZCA9IGdl dF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKKworCS8qIEJ1aWxkIG1pbmltYWwgT0xE IGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLworCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJs RW50cnkpOworCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKwlvbGRydGUtPnJlbGlk ID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwlvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOworCW9sZHJ0 ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7CisJb2xkcnRlLT5lcmVmID0gb2xkcnRl LT5hbGlhczsKKwlvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKKwlvbGRydGUtPmluaCA9IGZhbHNl OworCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisJbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VU YmxFbnRyeSk7CisJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworCW5ld3J0ZS0+cmVs aWQgPSB0cmlncmVjLT50Z3JlbGlkOworCW5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisJbmV3 cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKKwluZXdydGUtPmVyZWYgPSBuZXdy dGUtPmFsaWFzOworCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW5ld3J0ZS0+aW5oID0gZmFs c2U7CisJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwkvKiBCdWlsZCB0d28tZWxlbWVudCBy dGFibGUgKi8KKwltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7CisJZHBucy5ydGFibGUg PSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKwlkcG5zLmN0ZXMgPSBOSUw7CisJc2V0X3J0 YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKKwlzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygm ZHBucyk7CisKKwkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFj ayAqLworCWNvbnRleHQuYnVmID0gJmJ1ZjsKKwljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21h a2UxKCZkcG5zKTsKKwljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKwljb250ZXh0LndpbmRv d1RMaXN0ID0gTklMOworCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKKwljb250ZXh0LnByZXR0 eUZsYWdzID0gcHJldHR5ID8gUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZMQUdfSU5ERU5UIDog UFJFVFRZRkxBR19JTkRFTlQ7CisJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVG QVVMVDsKKwljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKwljb250ZXh0 LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKKworCWdldF9ydWxlX2V4cHIod2hl bkNsYXVzZSwgJmNvbnRleHQsIGZhbHNlKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKwogLyog LS0tLS0tLS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2Yg YW4gaW5kZXgKICAqCkBAIC0xODgwLDYgKzE5ODEsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29s dW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93 b3JrZXIocmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFs IHZlcnNpb24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAq LworY2hhciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVy biBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisK IC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBk ZWZpbml0aW9uLgogICovCkBAIC0yMTMxLDYgKzIyMzksMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4 dChyZXMpKTsKIH0KIAorLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIHRoZSBk ZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlOVCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2Nv bnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4g cGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNl KTsKK30KKwogLyoKICAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRF UiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgY29tbWFuZAogICovCkBAIC0zNTAxLDcgKzM2MTgs MTIgQEAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdf UkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGljIHZvaWQKKy8q CisgKiBQcm9kdWNlIHRoZSBmb3JtYXR0ZWQgU1FMIGJvZHkgKG5vdCB0aGUgd2hvbGUgZnVuY3Rp b24gZGVmaW5pdGlvbikKKyAqIG9mIGEgZnVuY3Rpb24gZ2l2ZW4gdGhlIHBnX3Byb2MgdHVwbGUu IFNhdmUgdGhlIGZvcm1hdHRlZCBTUUwgaW4gdGhlCisgKiBnaXZlbiBTdHJpbmdJbmZvLgorICov Cit2b2lkCiBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUg cHJvY3R1cCkKIHsKIAlpbnQJCQludW1hcmdzOwpAQCAtMTEzNTcsNyArMTE0NzksNyBAQCBnZXRf dGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50 IHRoaXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0 eXBlLikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xh c3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3 NTEsNyArMTE4NzMsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVs aWQpCiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5k IHNjaGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVf ZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQg KmFyZ3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGlj X3AsCiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTM3LDcg KzEyMjU5LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlv bnMpCiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidz IHJlbG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAq CiBmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKaW5kZXggYjc2YzdiM2RjMy4uNTNj NGExYThjMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5o CisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaApAQCAtMTgsNyArMTgs OCBAQAogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgInBhcnNl ci9wYXJzZV9ub2RlLmgiCiAKLWV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlm X25vdF9leGlzdHMpOworZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJCQkJCQkJCQkg IGJvb2wgaWZfbm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9jb2xsaWQpOwogZXh0ZXJu IHZvaWQgSXNUaGVyZUNvbGxhdGlvbkluTmFtZXNwYWNlKGNvbnN0IGNoYXIgKmNvbGxuYW1lLCBP aWQgbnNwT2lkKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyQ29sbGF0aW9uKEFsdGVyQ29s bGF0aW9uU3RtdCAqc3RtdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRl eCA1ZWQ2ZWNlNTU1Li40OGM2NWVmNTNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5LmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19l dmVudF90cmlnZ2VyLmgiCisjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAibm9kZXMv cGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgInRjb3AvY21kdGFnLmgiCiAjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKQEAgLTI5LDYgKzMwLDQ0IEBAIHR5cGVkZWYgc3RydWN0IEV2ZW50 VHJpZ2dlckRhdGEKIAlDb21tYW5kVGFnCXRhZzsKIH0gRXZlbnRUcmlnZ2VyRGF0YTsKIAordHlw ZWRlZiBzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZQoreworCS8qIG1lbW9yeSBjb250ZXh0 IGZvciB0aGlzIHN0YXRlJ3Mgb2JqZWN0cyAqLworCU1lbW9yeUNvbnRleHQgY3h0OworCisJLyog c3FsX2Ryb3AgKi8KKwlzbGlzdF9oZWFkCVNRTERyb3BMaXN0OworCWJvb2wJCWluX3NxbF9kcm9w OworCisJLyogdGFibGVfcmV3cml0ZSAqLworCU9pZAkJCXRhYmxlX3Jld3JpdGVfb2lkOwkvKiBJ bnZhbGlkT2lkLCBvciBzZXQgZm9yIHRhYmxlX3Jld3JpdGUKKwkJCQkJCQkJCSAqIGV2ZW50ICov CisJaW50CQkJdGFibGVfcmV3cml0ZV9yZWFzb247CS8qIEFUX1JFV1JJVEUgcmVhc29uICovCisK KwkvKiBTdXBwb3J0IGZvciBjb21tYW5kIGNvbGxlY3Rpb24gKi8KKwlib29sCQljb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjdXJyZW50Q29tbWFuZDsKKwlM aXN0CSAgICpjb21tYW5kTGlzdDsJLyogbGlzdCBvZiBDb2xsZWN0ZWRDb21tYW5kOyBzZWUKKwkJ CQkJCQkJICogZGVwYXJzZV91dGlsaXR5LmggKi8KKwlzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlT dGF0ZSAqcHJldmlvdXM7Cit9IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGU7CisKKy8qIFN1cHBvcnQg Zm9yIGRyb3BwZWQgb2JqZWN0cyAqLwordHlwZWRlZiBzdHJ1Y3QgU1FMRHJvcE9iamVjdAorewor CU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwljb25zdCBjaGFyICpzY2hlbWFuYW1lOworCWNvbnN0 IGNoYXIgKm9iam5hbWU7CisJY29uc3QgY2hhciAqb2JqaWRlbnRpdHk7CisJY29uc3QgY2hhciAq b2JqZWN0dHlwZTsKKwlMaXN0CSAgICphZGRybmFtZXM7CisJTGlzdAkgICAqYWRkcmFyZ3M7CisJ Ym9vbAkJb3JpZ2luYWw7CisJYm9vbAkJbm9ybWFsOworCWJvb2wJCWlzdGVtcDsKKwlzbGlzdF9u b2RlCW5leHQ7Cit9IFNRTERyb3BPYmplY3Q7CisKICNkZWZpbmUgQVRfUkVXUklURV9BTFRFUl9Q RVJTSVNURU5DRQkweDAxCiAjZGVmaW5lIEFUX1JFV1JJVEVfREVGQVVMVF9WQUwJCQkweDAyCiAj ZGVmaW5lIEFUX1JFV1JJVEVfQ09MVU1OX1JFV1JJVEUJCTB4MDQKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oCmluZGV4IDdkYjdiM2RhN2IuLjMwOWRhMGNlMzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2Uu aApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50 NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwog ZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2Vx dWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBn ZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJl c3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEp OwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUs IEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3V0aWxp dHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCmluZGV4IDU5ZTY0YWVhMDcuLmE2OGNl M2QzMzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCisrKyBiL3NyYy9p bmNsdWRlL3Rjb3AvdXRpbGl0eS5oCkBAIC05OSw2ICs5OSw4IEBAIGV4dGVybiBRdWVyeSAqVXRp bGl0eUNvbnRhaW5zUXVlcnkoTm9kZSAqcGFyc2V0cmVlKTsKIAogZXh0ZXJuIENvbW1hbmRUYWcg Q3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpOwogCitleHRlcm4gY29uc3QgY2hhciAq c3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpOworCiBz dGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgogQ3JlYXRlQ29tbWFuZE5hbWUoTm9kZSAqcGFyc2V0 cmVlKQogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggYi9zcmMvaW5jbHVk ZS91dGlscy9hY2wuaAppbmRleCBmOGUxMjM4ZmEyLi5mMDU1NzhkMzIyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9hY2wuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2wuaApAQCAt MjA5LDYgKzIwOSw4IEBAIGV4dGVybiBBY2xNb2RlIGFjbG1hc2soY29uc3QgQWNsICphY2wsIE9p ZCByb2xlaWQsIE9pZCBvd25lcklkLAogCQkJCQkgICBBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cg aG93KTsKIGV4dGVybiBpbnQJYWNsbWVtYmVycyhjb25zdCBBY2wgKmFjbCwgT2lkICoqcm9sZWlk cyk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJp dmlsZWdlKTsKKwogZXh0ZXJuIGJvb2wgaGFzX3ByaXZzX29mX3JvbGUoT2lkIG1lbWJlciwgT2lk IHJvbGUpOwogZXh0ZXJuIGJvb2wgbWVtYmVyX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQg cm9sZSk7CiBleHRlcm4gdm9pZCBjaGVja19jYW5fc2V0X3JvbGUoT2lkIG1lbWJlciwgT2lkIHJv bGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggYi9z cmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaAppbmRleCA1NWFmNjI0ZmIzLi45NDY1 NDVmNTNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaApAQCAtMzksNiArMzksNyBA QCB0eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKmdyYW50ZWVzOwogCWJvb2wJCWdyYW50X29wdGlv bjsKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CisJT2lkCQkJZ3JhbnRvcl91aWQ7CiB9IEludGVy bmFsR3JhbnQ7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggMmY4YjQ2ZDZkYS4uNDhiOGJmZDc5 YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0xMjMsMTAgKzEyMywxMiBAQCBleHRlcm4gRGF0dW0g bnVtZXJpY19mbG9hdDhfbm9fb3ZlcmZsb3coUEdfRlVOQ1RJT05fQVJHUyk7CiAjZGVmaW5lIEZP Uk1BVF9UWVBFX0ZPUkNFX1FVQUxJRlkJMHgwNAkvKiBmb3JjZSBxdWFsaWZpY2F0aW9uIG9mIHR5 cGUgKi8KICNkZWZpbmUgRk9STUFUX1RZUEVfSU5WQUxJRF9BU19OVUxMCTB4MDgJLyogTlVMTCBp ZiB1bmRlZmluZWQgKi8KIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9leHRlbmRlZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7CitleHRlcm4gY2hhciAqZm9ybWF0 X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpOwog CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFy ICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpm b3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4 dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2Qs IE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5 cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCAxYTQyZDlm MzliLi5jMzNjOGQwNjUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTMsOSArMTMsMTIgQEAK ICNpZm5kZWYgUlVMRVVUSUxTX0gKICNkZWZpbmUgUlVMRVVUSUxTX0gKIAorI2luY2x1ZGUgImFj Y2Vzcy9odHVwLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAi bm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgiCiAKIHN0cnVj dCBQbGFuOwkJCQkJLyogYXZvaWQgaW5jbHVkaW5nIHBsYW5ub2Rlcy5oIGhlcmUgKi8KIHN0cnVj dCBQbGFubmVkU3RtdDsKQEAgLTIzLDEyICsyNiwyMCBAQCBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CiAK IGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKTsKIGV4 dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBw cmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190 cmlnZ2VyIHRyaWdyZWMsCisJCQkJCQkJCQkgICBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0 eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0 dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF92aWV3ZGVmX2ludGVybmFsKE9pZCB2aWV3b2lkKTsK IAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29s IHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxp ZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRp b25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gdm9pZCBw Z19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJ CQkJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKTsKKwogZXh0ZXJuIGNo YXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJ CQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0ICpk ZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAg LTQwLDggKzUxLDE2IEBAIGV4dGVybiBMaXN0ICpzZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9leHBs YWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191c2VkKTsKIGV4 dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShPaWQgY29sbGlkKTsKIGV4dGVybiBj aGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MpOworZXh0ZXJuIGNoYXIgKmdl bmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1l cywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wgaGFzX3ZhcmlhZGljLAorCQkJCQkJCQkJ Ym9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhw cmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJv dW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBP aWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hh ciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRf c3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmlu dF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAK ICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL29iamVjdF9hZGRyZXNzLm91dAppbmRleCAyNWMxNzRmMjc1Li5mYzQyZDQxOGJmIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dApAQCAtNDk2LDcg KzQ5Niw3IEBAIG9wZXJhdG9yIGZhbWlseXxwZ19jYXRhbG9nfGludGVnZXJfb3BzfHBnX2NhdGFs b2cuaW50ZWdlcl9vcHMgVVNJTkcgYnRyZWV8dAogcG9saWN5fE5VTEx8TlVMTHxnZW5wb2wgb24g YWRkcl9uc3AuZ2VudGFibGV8dAogc3RhdGlzdGljcyBvYmplY3R8YWRkcl9uc3B8Z2VudGFibGVf c3RhdHxhZGRyX25zcC5nZW50YWJsZV9zdGF0fHQKIGNvbGxhdGlvbnxwZ19jYXRhbG9nfCJkZWZh dWx0InxwZ19jYXRhbG9nLiJkZWZhdWx0Inx0Ci10cmFuc2Zvcm18TlVMTHxOVUxMfGZvciBpbnRl Z2VyIG9uIGxhbmd1YWdlIHNxbHx0Cit0cmFuc2Zvcm18TlVMTHxOVUxMfGZvciBpbnRlZ2VyIGxh bmd1YWdlIHNxbHx0CiB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5fGFkZHJfbnNwfGFkZHJfdHNfZGlj dHxhZGRyX25zcC5hZGRyX3RzX2RpY3R8dAogdGV4dCBzZWFyY2ggcGFyc2VyfGFkZHJfbnNwfGFk ZHJfdHNfcHJzfGFkZHJfbnNwLmFkZHJfdHNfcHJzfHQKIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRp b258YWRkcl9uc3B8YWRkcl90c19jb25mfGFkZHJfbnNwLmFkZHJfdHNfY29uZnx0Ci0tIAoyLjM0 LjEKCg== --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v61-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581tt1 RnJvbSBlZjk4YzQ4NGE5OTA0NWFlZGRiN2E5YWMyNjdiMTI2NzBhNjhlYTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFNhdCwgNyBKYW4gMjAyMyAwNjowOTo0NCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjYx IDIvN10gRnVuY3Rpb25zIHRvIGRlcGFyc2UgVGFibGUgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRj aCBwcm92aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNh bgpsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5l ZCBzcHJpbnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVk IHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNp bmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1h dGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxv Z3MsIG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUg dG8gcmVsaWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25l IG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBh cnNlIG5vZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBv ZiBEREwgc3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoK Q1JFQVRFL0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgoKKE5vdGUgIzEpIFNv bWUgcmVjZW50bHkgaW50cm9kdWNlZCBERExzKGUuZy4gRERMcyByZWxhdGVkIHRvClBBUlRJVElP TkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQuIFdlIGNhbiBleHRlbmQgaXQgYXMgd2UgbmVlZCBt b3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERETCByZXBsaWNhdGlvbi4KCihOb3RlICMyKSBGb3IgQVRU QUNIL0RFVEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24KdGhl IHN1YnNjcmliZXIgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0YWJsZSBvbiB0aGUgcHVi bGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0YWJsZSBvbiB0 aGUgc3ViY3JpYmVyIHNpZGUgaXMgYSBOT1JNQUwgdGFibGUuIFdlIHdpbGwKcmVzZWFyY2ggdGhp cyBtb3JlIGFuZCBpbXByb3ZlIGl0IGxhdGVyLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL01h a2VmaWxlICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2Uu YyAgIHwgMzYxOCArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2pzb24uYyAgICAgIHwgIDc3NiArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuYyB8ICAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQg ICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgfCAgICA2 ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICB8ICAgIDEgKwogc3JjL2lu Y2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVkZS90Y29w L2RlcGFyc2VfdXRpbGl0eS5oICAgfCAgIDExICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgfCAgICA0ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDQ0NDUgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJz ZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4ZjkxLi4xNzFkZmIyODAwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwK IAljcmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9q c29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw MC4uNDNlZWM3ZDEzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKQEAgLTAsMCArMSwzNjE4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFu ZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGlu dGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3 aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkg d2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmpl Y3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUg Y29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4K KyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFs bHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBw YXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3Qg YSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFy Y2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICog RGVwYXJzZSBvYmplY3QgdHJlZSBpcyBjcmVhdGVkIGJ5IHVzaW5nOgorICogCWEpIG5ld19vYmp0 cmVlKCJrbm93IGNvbnRlbnRzIikgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY29udGVudCBpcyBr bm93biBvcgorICogICAgIHRoZSBpbml0aWFsIHRyZWUgY29udGVudCBpcyBrbm93bi4KKyAqIAli KSBuZXdfb2JqdHJlZSgiIikgZm9yIHRoZSBzeW50YXggd2hlcmUgdGhlIG9iamVjdCB0cmVlIHdp bGwgYmUgZGVyaXZlZAorICogICAgIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzLgor ICogCWMpIG5ld19vYmp0cmVlX1ZBIHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNhbiBiZSBkZXJp dmVkIHVzaW5nIHNvbWUgZml4ZWQKKyAqICAgICBjb250ZW50IGFuZC9vciBzb21lIHZhcmlhYmxl IGFyZ3VtZW50cy4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9y ZWlnbl9kYXRhX3dyYXBwZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVy LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhcmdlb2JqZWN0LmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xh c3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVu Y2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3RyYW5zZm9ybS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfY29uZmlnLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19kaWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 c19wYXJzZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3RlbXBsYXRlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ191c2VyX21hcHBpbmcu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1 ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJmb3Jl aWduL2ZvcmVpZ24uaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWIvcGdfd2No YXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgor I2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIK KyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgi CisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRl ICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKiBF c3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVmaW5l IEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVybmVk IGludG8gSlNPTkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVzZW50 ZWQgYXMgYW4gb2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0eXBl ZGVmIGVudW0KK3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5n LAorCU9ialR5cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJT2Jq VHlwZU9iamVjdAorfSBPYmpUeXBlOworCisvKgorICogUmVwcmVzZW50IHRoZSBjb21tYW5kIGFz IGFuIG9iamVjdCB0cmVlLgorICovCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xpc3Rf aGVhZAlwYXJhbXM7CQkJLyogT2JqZWN0IHRyZWUgcGFyYW1ldGVycyAqLworCWludAkJCW51bVBh cmFtczsJCS8qIE51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHRoZSBvYmplY3QgdHJlZSAqLworCVN0 cmluZ0luZm8JZm10aW5mbzsJCS8qIEZvcm1hdCBzdHJpbmcgb2YgdGhlIE9ialRyZWUgKi8KKwli b29sCQlwcmVzZW50OwkJLyogSW5kaWNhdGVzIGlmIGJvb2xlYW4gdmFsdWUgc2hvdWxkIGJlIHN0 b3JlZCAqLworfSBPYmpUcmVlOworCisvKgorICogQW4gZWxlbWVudCBvZiBhbiBvYmplY3QgdHJl ZSAoT2JqVHJlZSkuCisgKi8KK3R5cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAgICpu YW1lOwkJCS8qIE5hbWUgb2Ygb2JqZWN0IGVsZW1lbnQgKi8KKwlPYmpUeXBlCQlvYmp0eXBlOwkJ LyogT2JqZWN0IHR5cGUgKi8KKworCXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQljaGFy CSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJl ZSAgICAqb2JqZWN0OworCQlMaXN0CSAgICphcnJheTsKKwl9CQkJdmFsdWU7CQkJLyogU3RvcmUg dGhlIG9iamVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgb2JqZWN0CisJCQkJCQkJCSAqIHR5cGUgKi8K KwlzbGlzdF9ub2RlCW5vZGU7CQkJLyogVXNlZCBpbiBjb252ZXJ0aW5nIGJhY2sgdG8gT2JqRWxl bQorCQkJCQkJCQkgKiBzdHJ1Y3R1cmUgKi8KK30gT2JqRWxlbTsKKworLyoKKyAqIFJlZHVjZSBz b21lIHVubmVjZXNzYXJ5IHN0cmluZ3MgZnJvbSB0aGUgb3V0cHV0IGpzb24gd2hlbiB2ZXJib3Nl CisgKiBhbmQgInByZXNlbnQiIG1lbWJlciBpcyBmYWxzZS4gVGhpcyBtZWFucyB0aGVzZSBzdHJp bmdzIHdvbid0IGJlIG1lcmdlZCBpbnRvCisgKiB0aGUgbGFzdCBEREwgY29tbWFuZC4KKyAqLwor Ym9vbAkJdmVyYm9zZSA9IHRydWU7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3Qo T2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpOworc3RhdGljIHZvaWQg YXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFs dWUpOworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIGNoYXIgKmFwcGVuZF9v YmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0 YXRpYyB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICpl bGVtKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQsIGNoYXIgKm5hbWUsCisJCQkJCQkJCSBjaGFyICp2YWx1ZSk7CitzdGF0aWMg dm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJ CQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJ CQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChPYmpU eXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKTsKK3N0YXRpYyBPYmpFbGVtICpu ZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29i anRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIEpzb25iVmFsdWUg Km9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3Rh dGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlk LAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBjaGFyICoqZGVmaW5pdGlv biwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJCSBjaGFyICoqdGFibGVz cGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3RhdGljIGNoYXIgKlJlbGF0 aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJ CQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKKworc3RhdGljIE9ialRyZWUg KmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJv b2wgY29tcG9zaXRlLAorCQkJCQkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVy LCBMaXN0ICoqZXhwcnMpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHko T2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsK Kworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlz X3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0 QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFs dGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfQ2FjaGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29s IGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFy dChGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9BcyhEZWZFbGVt ICplbGVtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0b3JhZ2UoRm9y bV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf UmVjZWl2ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfVHlwZV9TZW5kKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlwZSB0 eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUoRm9y bV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf U3Vic2NyaXB0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKKworc3RhdGljIExpc3QgKmRlcGFyc2Vf SW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJsZUVs ZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNv bnRleHQsCisJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKKworLyoKKyAq IEFwcGVuZCBwcmVzZW50IGFzIGZhbHNlIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2Fw cGVuZF9ub3RfcHJlc2VudChPYmpUcmVlICp0cmVlKQoreworCWFwcGVuZF9ib29sX29iamVjdCh0 cmVlLCAicHJlc2VudCIsIGZhbHNlKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBhcnJheSBwYXJh bWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FycmF5X29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVtICAg ICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKwor CWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCF2ZXJib3Nl KQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogUmVtb3ZlIGVsZW1lbnRzIHdoZXJlIHBy ZXNlbnQgZmxhZyBpcyBmYWxzZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJT2Jq RWxlbSAgICAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChlbGVt LT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBlID09IE9i alR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2VudCAmJgor CQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZvcmVhY2hf ZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJLyogQ2hlY2sgZm9yIGVt cHR5IGxpc3QgYWZ0ZXIgcmVtb3ZpbmcgZWxlbWVudHMgKi8KKwlpZiAobGlzdF9sZW5ndGgoYXJy YXkpID09IDApCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19m b3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5 cGVBcnJheSwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5OworCWFw cGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBi b29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYm9v bF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkKK3sKKwlP YmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJYm9v bAkJaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkvKgor CSAqIENoZWNrIGlmIHRoZSBmb3JtYXQgc3RyaW5nIGlzICdwcmVzZW50JyBhbmQgaWYgeWVzLCBz dG9yZSB0aGUgYm9vbGVhbgorCSAqIHZhbHVlCisJICovCisJaWYgKHN0cmNtcChzdWJfZm10LCAi cHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0cnVlOworCQl0cmVlLT5w cmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0cmVlLT5wcmVzZW50KQor CQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2JqZWN0X25hbWUgPSBhcHBl bmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5l d19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYm9vbGVh biA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8q CisgKiBBcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8K K3N0YXRpYyB2b2lkCithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10KQoreworCWludAkJCWxlbjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+Zm10 aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOwor CWxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBuZWNl c3NhcnkgKi8KKwlpZiAobGVuID4gMCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBlbmRT dHJpbmdJbmZvU3BhY2VzKHRyZWUtPmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyh0cmVlLT5mbXRpbmZvLCBzdWJfZm10KTsKK30KKworLyoKKyAqIEFwcGVuZCBhIE5VTEwg b2JqZWN0IHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIJICAgKm9iamVjdF9uYW1lOwor CisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlvYmpl Y3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsK KworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxsLCBv YmplY3RfbmFtZSkpOworfQorCisvKgorICogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8g YSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFy YW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAo IXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9 IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFt ID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVl Lm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9 CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdoaWNoIGlzIGV4dHJhY3RlZCBmcm9t IHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxlIHN0cmluZy4gQW5kIGFwcGVuZCB0 aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIGNoYXIg KgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1 Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEgb2JqZWN0X25hbWU7CisJY29uc3QgY2hhciAqZW5k X3B0cjsKKwljb25zdCBjaGFyICpjcDsKKwlib29sCQlzdGFydF9jb3B5ID0gZmFsc2U7CisKKwlp ZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIHN1 Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25hbWUpOworCWVuZF9wdHIgPSBzdWJf Zm10ICsgc3RybGVuKHN1Yl9mbXQpOworCisJZm9yIChjcCA9IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0 cjsgY3ArKykKKwl7CisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlzdGFydF9jb3B5ID0gdHJ1 ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdGFydF9jb3B5KQorCQkJY29udGludWU7 CisKKwkJaWYgKCpjcCA9PSAnOicgfHwgKmNwID09ICd9JykKKwkJCWJyZWFrOworCisJCWFwcGVu ZFN0cmluZ0luZm9DaGFyTWFjcm8oJm9iamVjdF9uYW1lLCAqY3ApOworCX0KKworCWlmIChvYmpl Y3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9iamVjdCBuYW1lIG5vdCBmb3VuZCIp OworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlyZXR1cm4gb2Jq ZWN0X25hbWUuZGF0YTsKK30KKworLyoKKyAqIEFwcGVuZCBhIHByZWFsbG9jYXRlZCBwYXJhbWV0 ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2FwcGVuZF9wcmVtYWRlX29i amVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKQoreworCXNsaXN0X3B1c2hfaGVhZCgm dHJlZS0+cGFyYW1zLCAmZWxlbS0+bm9kZSk7CisJdHJlZS0+bnVtUGFyYW1zKys7Cit9CisKKy8q CisgKiBBcHBlbmQgYSBzdHJpbmcgcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZv aWQKK2FwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNo YXIgKiBvYmplY3RfbmFtZSwKKwkJCQkJIGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBh cmFtOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBO VUxMIHx8IHZhbHVlWzBdID09ICdcMCcpKQorCQlyZXR1cm47CisKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywg b2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJl bWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogU2ltaWxhciB0byBmb3JtYXRf dHlwZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJldHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgor ICogc2VwYXJhdGVseToKKyAqCisgKiAtIG5zcGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNl cnRhaW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdoaWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1 bGVzLCB3ZSByZXR1cm4gSW52YWxpZE9pZDsgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qg c2NoZW1hLQorICogICBxdWFsaWZ5IHRoZSBuYW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBl IG5hbWUgaW4gdGhpcyBjYXNlLgorICoKKyAqIC0gdHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUg bmFtZSwgd2l0aG91dCBxdW90ZXMKKyAqCisgKiAtIHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0 eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5nIHdpdGggcGFyZW50aGVzZXMKKyAqCisgKiAtIHR5 cGFycmF5IGluZGljYXRlcyB3aGV0aGVyIFtdcyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9u J3QgdHJ5IHRvIGRlY29kZSB0eXBlIG5hbWVzIHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5h bWVzLCBleGNlcHQKKyAqIGluIHRoZSBjYXNlcyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9k IHJ1bGVzLgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVf b2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cGVuYW1lLCBj aGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGVhcnJheSkKK3sKKwlIZWFwVHVwbGUJ dHVwbGU7CisJRm9ybV9wZ190eXBlIHR5cGVmb3JtOworCU9pZAkJCWFycmF5X2Jhc2VfdHlwZTsK KworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0odHlw ZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIHR5cGVfb2lkKTsKKwor CXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICog Q2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxlIGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFz IGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91 bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJYXJyYXlfYmFzZV90eXBlID0gdHlwZWZv cm0tPnR5cGVsZW07CisKKwkqdHlwZWFycmF5ID0gKElzVHJ1ZUFycmF5VHlwZSh0eXBlZm9ybSkg JiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RPUkFHRV9QTEFJTik7CisKKwlpZiAoKnR5 cGVhcnJheSkKKwl7CisJCS8qIFN3aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBhcnJheSBlbGVt ZW50IHR5cGUgKi8KKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVwbGUgPSBTZWFyY2hT eXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShhcnJheV9iYXNlX3R5cGUpKTsKKwkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9vaWQpOworCisJCXR5cGVmb3Jt ID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwkJdHlwZV9vaWQgPSBhcnJheV9i YXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdp dGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUgd2UgcHV0CisJICogdHlwZW1vZCBhdCB0aGUg bWlkZGxlIG9mIG5hbWUgKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUgem9uZSkuIFdlIGNhbm5vdAor CSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhl c2UgY2FzZXMuCisJICovCisJKm5zcGlkID0gSW52YWxpZE9pZDsKKworCXN3aXRjaCAodHlwZV9v aWQpCisJeworCQljYXNlIElOVEVSVkFMT0lEOgorCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiSU5U RVJWQUwiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJaWYgKHR5cGVt b2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCBXSVRIIFRJTUUgWk9O RSIpOworCQkJZWxzZQorCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBt b2QuICovCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQlicmVhazsK KwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAi KTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVUWk9JRDoKKwkJCWlmICh0eXBlbW9kIDwgMCkKKwkJ CQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJ CQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlw ZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FT0lEOgorCQkJ KnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisKKwkJ CS8qCisJCQkgKiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIG90aGVy IHR5cGVzLCBzbyBnZXQKKwkJCSAqIHRoZSB0eXBlIG5hbWUgYW5kIHNjaGVtYSBkaXJlY3RseSBm cm9tIHRoZSBjYXRhbG9nLgorCQkJICovCisJCQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFtZXNw YWNlOworCQkJKnR5cGVuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5cGVmb3JtLT50eXBuYW1lKSk7 CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5cGVtb2RzdHIgPSBwcmludFR5cG1vZCgi IiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJZWxzZQorCQkqdHlwZW1vZHN0ciA9 IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKK30KKworLyoKKyAqIFJl dHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBSRUxQRVJTSVNURU5D RSB2YWx1ZS4KKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X3BlcnNpc3RlbmNlX3N0cihjaGFyIHBl cnNpc3RlbmNlKQoreworCXN3aXRjaCAocGVyc2lzdGVuY2UpCisJeworCQljYXNlIFJFTFBFUlNJ U1RFTkNFX1RFTVA6CisJCQlyZXR1cm4gIlRFTVBPUkFSWSI7CisJCWNhc2UgUkVMUEVSU0lTVEVO Q0VfVU5MT0dHRUQ6CisJCQlyZXR1cm4gIlVOTE9HR0VEIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5D RV9QRVJNQU5FTlQ6CisJCQlyZXR1cm4gIiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJraW5nICVjIiwgcGVyc2lzdGVuY2UpOworCQkJcmV0 dXJuICIiOwkJCS8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKKy8qCisgKiBSZXR1 cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RvcmFnZXR5cGUgdmFs dWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciAqCitnZXRfdHlwZV9zdG9yYWdlKGNoYXIgc3Rv cmFnZXR5cGUpCit7CisJc3dpdGNoIChzdG9yYWdldHlwZSkKKwl7CisJCWNhc2UgJ3AnOgorCQkJ cmV0dXJuICJwbGFpbiI7CisJCWNhc2UgJ2UnOgorCQkJcmV0dXJuICJleHRlcm5hbCI7CisJCWNh c2UgJ3gnOgorCQkJcmV0dXJuICJleHRlbmRlZCI7CisJCWNhc2UgJ20nOgorCQkJcmV0dXJuICJt YWluIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lm aWVyICVjIiwgc3RvcmFnZXR5cGUpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHBh cmFtZXRlci4KKyAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdChPYmpUeXBlIHR5cGUs IGNoYXIgKm5hbWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxvYzAo c2l6ZW9mKE9iakVsZW0pKTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJcGFyYW0tPm9ianR5cGUg PSB0eXBlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2Jq ZWN0IHBhcmFtZXRlci4KKyAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3Qo T2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlwYXJhbSA9IG5ld19v YmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVl OworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRy ZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3 X29ianRyZWUoY2hhciAqZm10KQoreworCU9ialRyZWUgICAgKnBhcmFtczsKKworCXBhcmFtcyA9 IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNs aXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZt dGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFt cy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBo ZWxwZXIgcm91dGluZSB0byBzZXQgdXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cy4KKyAqCisgKiBF bGVtZW50cyAic2NoZW1hX25hbWUiIGFuZCAib2JqX25hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFt ZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0 byAicGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxl bWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpfbmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMg YW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJv dXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4 cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKE9pZCBuc3BpZCwgY2hhciAqbmFtZSkKK3sKKwlPYmpUcmVlICAgICpxdWFsaWZpZWQ7 CisJY2hhcgkgICAqbmFtZXNwYWNlOworCisJaWYgKGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkp CisJCW5hbWVzcGFjZSA9IHBzdHJkdXAoInBnX3RlbXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9 IGdldF9uYW1lc3BhY2VfbmFtZShuc3BpZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9W QShOVUxMLCAyLAorCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZXNw YWNlLAorCQkJCQkJCSAgICJvYmpuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7 CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBz ZXQgdXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cywgd2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAor ICogYnkgY2xhc3NJZC9vYmpJZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZSAg ICAqcXVhbGlmaWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlE YXR1bQkJb2JqX25zcDsKKwlEYXR1bQkJb2JqX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWU7 CisJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwlBdHRyTnVtYmVyCUFudW1fb2lkID0gZ2V0 X29iamVjdF9hdHRudW1fb2lkKGNsYXNzSWQpOworCWJvb2wJCWlzbnVsbDsKKworCWNhdGFsb2cg PSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwljYXRvYmogPSBnZXRf Y2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIEFudW1fb2lkLCBvYmplY3RJZCk7CisJaWYg KCFjYXRvYmopCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvYmplY3Qg d2l0aCBPSUQgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAorCQkJIG9iamVjdElkLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9uYW1lID0gZ2V0X29iamVjdF9hdHRudW1f bmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVz cGFjZShjbGFzc0lkKTsKKworCW9ial9uc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25h bWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJ aWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgbmFtZXNwYWNlIGZvciBvYmplY3QgJXUi LCBvYmplY3RJZCk7CisKKwlvYmpfbmFtZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFt ZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgICZpc251bGwpOworCWlmIChp c251bGwpCisJCWVsb2coRVJST1IsICJudWxsIGF0dHJpYnV0ZSBuYW1lIGZvciBvYmplY3QgJXUi LCBvYmplY3RJZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0 dW1HZXRPYmplY3RJZChvYmpfbnNwKSwKKwkJCQkJCQkJCQkgTmFtZVN0cigqRGF0dW1HZXROYW1l KG9ial9uYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1 cCAle31UIGVsZW1lbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jf dHlwZShPaWQgdHlwZUlkLCBpbnQzMiB0eXBtb2QpCit7CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hh cgkgICAqdHlwZV9uc3A7CisJY2hhcgkgICAqdHlwZV9uYW1lID0gTlVMTDsKKwljaGFyCSAgICp0 eXBtb2RzdHI7CisJYm9vbAkJdHlwZV9hcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5 cGVJZCwgdHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVfbmFtZSwgJnR5cG1vZHN0ciwg JnR5cGVfYXJyYXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBlX25zcCA9 IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsKKwllbHNlCisJCXR5cGVfbnNw ID0gcHN0cmR1cCgiIik7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoTlVMTCwgNCwKKwkJCQkJ CSAgInNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlX25zcCwKKwkJCQkJCSAgInR5cGVu YW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9uYW1lLAorCQkJCQkJICAidHlwbW9kIiwgT2JqVHlw ZVN0cmluZywgdHlwbW9kc3RyLAorCQkJCQkJICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlw ZV9hcnJheSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9y ZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KKyAqCisgKiBUaGUgImZtdCIg YXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBlbGVtZW50IGluIHRoZSBvdXRw dXQgYmxvYi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZXh0cmEgZWxlbWVu dHMgdG8gYXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUgKHN0cmluZyksIHR5cGUgKGZy b20gdGhlIE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQuICBUaGUKKyAq IHZhbHVlIG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgT2JqVHlwZUlu dGVnZXIgcmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3RyaW5nIHJlcXVpcmVzIGEgY2hh ciAqLCBPYmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgorICogT2JqRWxlbSksIE9ialR5 cGVPYmplY3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9uLiAgRWFjaCBlbGVtZW50IHR5 cGUgKgorICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIgZ2l2ZW4gaW4gdGhl IGZvcm1hdCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRsX2RlcGFyc2VfZXhwYW5kX2Nv bW1hbmQsIHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUgdGhlIGx1eHVyeSBvZiBzcHJp bnRmLWxpa2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxmb3JtZWQgYXJndW1lbnQgbGlz dHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50 IG51bW9ianMsLi4uKQoreworCU9ialRyZWUgICAgKnRyZWU7CisJdmFfbGlzdAkJYXJnczsKKwlp bnQJCQlpOworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmplY3QgYW5kIGl0cyAiZm10IiAq LworCXRyZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5kIHByb2Nlc3MgdGhlIGdpdmVu IHZhcmFyZ3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsKKwlmb3IgKGkgPSAwOyBpIDwg bnVtb2JqczsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJT2JqVHlwZQkJdHlwZTsKKwkJ T2JqRWxlbSAgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCXR5 cGUgPSB2YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBuZXdfb2JqZWN0KHR5cGUsIE5V TEwpOworCisJCS8qCisJCSAqIEZvciBhbGwgcGFyYW0gdHlwZXMgb3RoZXIgdGhhbiBPYmpUeXBl TnVsbCwgdGhlcmUgbXVzdCBiZSBhIHZhbHVlIGluCisJCSAqIHRoZSB2YXJhcmdzLiBGZXRjaCBp dCBhbmQgYWRkIHRoZSBmdWxseSBmb3JtZWQgc3Vib2JqZWN0IGludG8gdGhlCisJCSAqIG1haW4g b2JqZWN0LgorCQkgKi8KKwkJc3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVOdWxs OgorCQkJCS8qIE51bGwgcGFyYW1zIGRvbid0IGhhdmUgYSB2YWx1ZSAob2J2aW91c2x5KSAqLwor CQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCQllbGVtLT52YWx1ZS5ib29sZWFu ID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVTdHJpbmc6 CisJCQkJZWxlbS0+dmFsdWUuc3RyaW5nID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCQkJYnJl YWs7CisJCQljYXNlIE9ialR5cGVBcnJheToKKwkJCQllbGVtLT52YWx1ZS5hcnJheSA9IHZhX2Fy ZyhhcmdzLCBMaXN0ICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJ CQllbGVtLT52YWx1ZS5pbnRlZ2VyID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJ CQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywg ZG91YmxlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52 YWx1ZS5vYmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRl ZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQi LCB0eXBlKTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9v YmplY3QodHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOwor fQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUg T2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9p ZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBP YmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUJdmFsOworCisJ aWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCB0aGUga2V5 IGZpcnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0g ImZtdCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7 CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJv Y2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmlu ZzsKKwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisJdmFsLnZhbC5z dHJpbmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBKU09OQiByZXByZXNlbnRh dGlvbiBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29uYiAqCitvYmp0cmVlX3RvX2pz b25iKE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwl2YWx1ZSA9IG9i anRyZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVybiBKc29uYlZhbHVlVG9Kc29u Yih2YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmI6IHByb2Nl c3MgYW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0IG9yCisgKiBhbiBhcnJheSBp bnRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX3Rv X2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAor CQkJCQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQoreworCUpzb25iVmFsdWUJdmFs OworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQljYXNlIE9ialR5cGVOdWxsOgor CQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rv a2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCXZhbC50 eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+ dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+dmFsdWUuc3Ry aW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwudHlwZSA9IGpidk51bWVyaWM7 CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdldE51bWVyaWMoRGly ZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1 ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQl2YWwudHlwZSA9IGpidk51 bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdldE51bWVy aWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlvYmpl Y3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tl biwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVCb29sOgorCQkJdmFsLnR5cGUg PSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0LT52YWx1ZS5ib29sZWFuOwor CQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgb2JqZWN0 IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlvYmp0cmVlX3RvX2pzb25iX3Jl YyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpU eXBlQXJyYXk6CisJCQl7CisJCQkJTGlzdENlbGwgICAqY2VsbDsKKworCQkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJCQlmb3JlYWNoKGNlbGwsIG9i amVjdC0+dmFsdWUuYXJyYXkpCisJCQkJeworCQkJCQlPYmpFbGVtICAgICplbGVtID0gbGZpcnN0 KGNlbGwpOworCisJCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgZWxlbSwgV0pC X0VMRU0pOworCQkJCX0KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVks IE5VTEwpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmplY3QtPm9ianR5cGUpOworCQkJYnJlYWs7 CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYi4K KyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAq dHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJb2JqdHJl ZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgdHJlZSk7CisKKwlzbGlzdF9mb3JlYWNoKGl0 ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpFbGVtICAgICpvYmplY3QgPSBzbGlzdF9jb250 YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOworCQlKc29uYlZhbHVlCWtleTsKKworCQkv KiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52 YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5hbWUpOworCQlrZXkudmFsLnN0cmluZy52 YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtl eSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1ZSBhY2NvcmRpbmcgdG8gaXRzIHR5cGUg Ki8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBvYmplY3QsIFdKQl9WQUxVRSk7 CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5V TEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFL0NSRUFURSBET01B SU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9i dGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxl bWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3 b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgor ICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGln bm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1l bnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsK KwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7 CisJT2JqVHJlZSAgICAqY29uc3RyOworCisJLyogT25seSBvbmUgbWF5IGJlIHZhbGlkICovCisJ QXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisK KwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBhbGwgY29uc3RyYWludHMgbGlu a2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLworCWNvblJlbCA9IHRhYmxlX29w ZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaWYgKE9pZElzVmFs aWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2Nv bnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9i ZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJ CQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNlCisJeworCQlTY2FuS2V5SW5pdCgm a2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOwor CQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJ ZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBl YWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMu ICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBp bmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8g aW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nl c3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQlj aGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBH RVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJewor CQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJy ZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CQkvKiBub3Qg aGVyZSAqLworCQkJY2FzZSBDT05TVFJBSU5UX1BSSU1BUlk6CisJCQkJY29udHlwZSA9ICJwcmlt YXJ5IGtleSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCWNv bnR5cGUgPSAidW5pcXVlIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9UUklHR0VS OgorCQkJCWNvbnR5cGUgPSAidHJpZ2dlciI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJ TlRfRVhDTFVTSU9OOgorCQkJCWNvbnR5cGUgPSAiZXhjbHVzaW9uIjsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBjb25zdHJhaW50IHR5cGUi KTsKKwkJfQorCisJCS8qCisJCSAqICJ0eXBlIiBhbmQgImNvbnR5cGUiIGFyZSBub3QgcGFydCBv ZiB0aGUgcHJpbnRhYmxlIG91dHB1dCwgYnV0IGFyZQorCQkgKiB1c2VmdWwgdG8gcHJvZ3JhbW1h dGljYWxseSBkaXN0aW5ndWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMgYW5kIGFtb25nCisJCSAqIGRp ZmZlcmVudCBjb25zdHJhaW50IHR5cGVzLgorCQkgKgorCQkgKiBYWFggaXQgbWlnaHQgYmUgdXNl ZnVsIHRvIGFsc28gbGlzdCB0aGUgY29sdW1uIG5hbWVzIGluIGEgUEssIGV0Yy4KKwkJICovCisJ CWNvbnN0ciA9IG5ld19vYmp0cmVlX1ZBKCJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlv bn1zIiwgNCwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29uc3RyYWludCIsCisJ CQkJCQkJCSJjb250eXBlIiwgT2JqVHlwZVN0cmluZywgY29udHlwZSwKKwkJCQkJCQkJIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5hbWUpLAorCQkJCQkJCQki ZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVm X2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9IGxhcHBlbmQo ZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5c3RhYmxlX2Vu ZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRlZmluaXRpb24s IHNwbGl0IGludG8gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91bnQgb2YgY29k ZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1dAorICogY29u dHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNlZW0gd29ydGgg a2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQKK3BnX2dldF9pbmRl eGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJ CQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJ CQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKQoreworCUhl YXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVwbGUJaHRfYW07 CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxyZWM7CisJRm9y bV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxpc3QJICAgKmlu ZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpjb250ZXh0Owor CU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xsRGF0dW07CisJ RGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOworCWJvb2wJCWlz bnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7 CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmluaXRpb25CdWY7 CisKKwkqdGFibGVzcGFjZSA9IE5VTEw7CisJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIEZl dGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleCAqLworCWh0X2lk eCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4cmVs aWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4IHdpdGggT0lEICV1IiwgaW5kZXhyZWxpZCk7CisJ aWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQg PSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhy ZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0 aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRF WFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAm aXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAq KSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXND YWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9p bmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZl Y3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9w Z19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRp b24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJ LyogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRleCByZWxhdGlvbiAqLworCWh0 X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhy ZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhyZWwpKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUiLCBpbmRleHJl bGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKGh0X2lkeHJlbCk7 CisKKwkvKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3MgbWV0aG9k ICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0oaWR4 cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kIHdpdGggT0lEICV1 IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJV Q1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnku ICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUg ZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkg KiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNu dWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJ ZXhwcnNEYXR1bTsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJZXhwcnNEYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRl eF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJZXhwcnNTdHJpbmcg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlpbmRleHBycyA9IChMaXN0ICop IHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwl9CisJ ZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChpbmRl eHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihnZXRfcmVsX25hbWUoaW5k cmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1Zik7CisK KwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBwc3RyZHVwKHF1b3RlX2lkZW50 aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyogRmV0Y2ggdGhlIGluZGV4IEFN J3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5lKGFtcmVjLT5h bWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVmaW5pdGlvbi4gIE5vdGUgdGhl IG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICogY2FsbGVyLgorCSAqLworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIoIik7CisJZm9yIChrZXlubyA9 IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1iZXIJ YXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9IGlu ZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJa2V5 Y29sY29sbGF0aW9uOworCisJCS8qIFByaW50IElOQ0xVREUgdG8gZGl2aWRlIGtleSBhbmQgbm9u LWtleSBhdHRycy4gKi8KKwkJaWYgKGtleW5vID09IGlkeHJlYy0+aW5kbmtleWF0dHMpCisJCXsK KwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIpIElOQ0xVREUgKCIp OworCQl9CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYs IGtleW5vID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChhdHRudW0gIT0gMCkKKwkJeworCQkJ LyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkgICAqYXR0bmFtZTsKKwkJCWludDMy CQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShpbmRyZWxpZCwgYXR0 bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBx dW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9hdHR0eXBldHlwbW9kY29sbChpbmRy ZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAma2V5Y29sdHlwbW9kLAorCQkJ CQkJCQkgICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRXhwcmVz c2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtleTsKKwkJCWNoYXIJICAgKnN0cjsK KworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJ0b28gZmV3 IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5kZXhrZXkgPSAoTm9kZSAqKSBsZmly c3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KGluZGV4cHJzLCBpbmRl eHByX2l0ZW0pOworCisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Np b24oaW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5z IGlmIGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYg SXNBKGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ ZnVuY2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJU eXBlKGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhr ZXkpOworCQl9CisKKwkJLyogUHJpbnQgYWRkaXRpb25hbCBkZWNvcmF0aW9uIGZvciAoc2VsZWN0 ZWQpIGtleSBjb2x1bW5zLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaWYgKGtleW5vIDwgaWR4cmVj LT5pbmRua2V5YXR0cykKKwkJeworCQkJT2lkIGluZGNvbGwgPSBpbmRjb2xsYXRpb24tPnZhbHVl c1trZXlub107CisJCQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCQlnZW5lcmF0ZV9jb2xs YXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkJLyogQWRkIHRoZSBvcGVyYXRvciBjbGFzcyBu YW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJCWdldF9vcGNsYXNzX25hbWUoaW5kY2xhc3MtPnZh bHVlc1trZXlub10sIEludmFsaWRPaWQsICZkZWZpbml0aW9uQnVmKTsKKworCQkJLyogQWRkIG9w dGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3JkZXIpCisJCQl7 CisJCQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywgcmVwb3J0IERFU0MgYW5kIE5V TExTIG9wdHMgKi8KKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQkJeworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERFU0MiKTsKKwkJCQkJLyog TlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJCWlmICghKG9w dCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkpCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsK KwkJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgRklSU1QiKTsKKwkJCQl9CisJCQl9 CisKKwkJCS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3YXMgaGVyZTsgZG8gd2UgbmVlZCBhbnl0 aGluZz8gKi8KKwkJfQorCX0KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVm LCAiKSIpOworCSpkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJLyogT3V0cHV0 IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9ucyhpbmRleHJl bGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0YmxzcGM7CisK KwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlpZiAoT2lkSXNW YWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIo Z2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHBy ZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdf aW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJeworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJl ZERhdHVtOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJCS8qIENvbnZlcnQgdGV4dCBzdHJp bmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJF TElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZHByZWQsICZpc251bGwpOwor CQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBy ZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdUb05vZGUocHJlZFN0cmluZyk7CisJ CXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2UgKi8KKwkJKndoZXJlQ2xhdXNlID0g ZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCisJ LyogQ2xlYW4gdXAgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4KTsKKwlSZWxlYXNlU3lzQ2Fj aGUoaHRfaWR4cmVsKTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfYW0pOworfQorCisvKgorICogT2J0 YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRo ZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVw YXJzZSBjb250ZXh0LgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1 bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJ CQkgTGlzdCAqKmV4cHJzKQoreworCU5vZGUJICAgKmRlZnZhbDsKKwljaGFyCSAgICpkZWZzdHI7 CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIg PSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisK KwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZvciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkg Y2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhwcnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFs KTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBh cnRpdGlvbiBib3VuZCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK3N0YXRp YyBjaGFyICoKK1JlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoT2lkIHJlbGlkKQoreworCURhdHVt CQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91bmREYXR1bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1 cGxlCXR1cGxlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCByZWxpZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHJlbGF0aW9uIHdpdGggT0lEICV1IiwgcmVsaWQpOworCisJYm91bmREYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJCQkJCQkgQW51bV9wZ19jbGFz c19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKworCWRlcGFyc2VkID0gRGlyZWN0 RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1 bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJCQkJCQkJICAgcmVsaWQpOwor CisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBUZXh0RGF0dW1HZXRDU3RyaW5n KGRlcGFyc2VkKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4g YSByZWd1bGFyIChub24tdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNv bnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBp biB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3Ry YWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJz ZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5KS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog JXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtjb21wcmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251 bGx9cyAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1u RGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAor CQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykKK3sK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlPaWQJCQlyZWxpZCA9 IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1f cGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJ T2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNl bGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5pdGlv bnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBtYXliZSBpdCBpcyB1c2VmdWwg dG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZQorCSAqIHN1Y2g/CisJ ICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0dHJUdXAg PSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg Y2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRl Zi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBlfVQiLCAzLAorCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3Ry aW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgImNvbHR5cGUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsKKworCWlmICghY29t cG9zaXRlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJTVE9SQUdFICV7Y29sc3RvcmFn ZX1zIiwgImNvbHN0b3JhZ2UiLAorCQkJCQkJCSBnZXRfdHlwZV9zdG9yYWdlKGF0dHJGb3JtLT5h dHRzdG9yYWdlKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRy ZWUoIkNPTVBSRVNTSU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwKKwkJCQkJCQkg ImNvbXByZXNzaW9uX21ldGhvZCIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJ CWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIpOwor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7Y29tcHJlc3Npb259cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0aW9uKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7bmFtZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBj b2xsYXRpb24pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1zIiwgdG1wX29iaik7CisKKwlpZiAo IWNvbXBvc2l0ZSkKKwl7CisJCU9pZAkJCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgor CQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0 IHdlIGNhbm5vdAorCQkgKiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNh dXNlIHRoYXQgYml0IGlzIGFsc28gc2V0CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlzIGFyZSBzcGVj aWZpZWQ7IHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGluIHRo YXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3 ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRv CisJCSAqIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4gKEZvcnR1 bmF0ZWx5LCBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3Ry YWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRk IGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJ CSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29u c3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxm aXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkK KwkJCXsKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwor CQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJCXNhd19ub3RudWxsID0g dHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25vdF9udWxsfXMiLCAibm90 X251bGwiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwkJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVm ICYmCisJCQljb2xkZWYtPmdlbmVyYXRlZCAhPSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkK KwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVt bkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250 ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmF1 bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iaik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZGVmYXVsdH1z IiwgdG1wX29iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xkZWYtPmlk ZW50aXR5KQorCQl7CisJCQlPaWQJCQlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRlZi0+ Y29sbmFtZSk7CisKKwkJCXNlcXJlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0 bm8sIGZhbHNlKTsKKwkJfQorCisJCWlmIChPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwkJeworCQkJ dG1wX29iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRp dHksIGlzX2FsdGVyKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHlf Y29sdW1ufXMiLCB0bXBfb2JqKTsKKwkJfQorCisJCS8qIEdFTkVSQVRFRCBDT0xVTU4gRVhQUkVT U0lPTiAqLworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsK KwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQor CQl7CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1u RGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRl eHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2dlbmVyYXRp b25fZXhwcn1zIFNUT1JFRCIsCisJCQkJCQkJCSAiZ2VuZXJhdGlvbl9leHByIiwgZGVmc3RyKTsK KwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBfb2JqKTsKKwl9 CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0aW9u LglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3ZSBk b24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24sIG9y IGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1uIGlz IGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0NvbHVt bkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7 bm90X251bGx9cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlw ZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYp Cit7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCU9p ZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJU dXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJ CXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlz dENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQs IGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQll bG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIg b2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3Jt ID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlw ZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5 cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBk ZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICogZmlu ZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlzX25v dF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2FzZXMu KQorCSAqLworCXNhd19ub3RudWxsID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNv bnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZp cnN0KGNlbGwpOworCisJCWlmIChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJ CXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFz YXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXNDYWNo ZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJERUZBVUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQljaGFyCSAgICpk ZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBh dHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBOVUxMKTsKKworCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnN0 cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMiLCA0LAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJ CQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgIm5vdF9u dWxsIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAi IiwKKwkJCQkJCSAiZGVmYXVsdCIsIE9ialR5cGVPYmplY3QsIHRtcF9vYmopOworCisJLyogR2Vu ZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBh cmUgZG9uZSAqLworCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5Lgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgR0VORVJBVEVEICV7b3B0aW9ufXMgJXtpZGVu dGl0eV90eXBlfXMgJXtzZXFfZGVmaW5pdGlvbjogfXMKKyAqIAlPUgorICogR0VORVJBVEVEICV7 b3B0aW9ufXMgQVMgSURFTlRJVFkgJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9u OiB9cyApCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lk IHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUg ICAgKnJldDsKKwlPYmpUcmVlICAgICppZGVudF9vYmo7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7 CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNl IHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkgICAqaWRl bnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCXsKKwkJaWRl bnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyI7CisJfQor CWVsc2UKKwl7CisJCWlkZW50Zm10ID0gIkdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRp b259cyBBUyBJREVOVElUWSI7CisJfQorCisJaWRlbnRfb2JqID0gbmV3X29ianRyZWUoaWRlbnRm bXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10LCAib3B0aW9uIiwgIkFMV0FZUyIp OworCWVsc2UgaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudF9vYmosIG9iamZtdCwgIm9wdGlvbiIsICJCWSBE RUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQoaWRlbnRfb2JqKTsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5X3R5cGV9cyIsIDEsCisJCQkJCQkgImlkZW50 aXR5X3R5cGUiLCBPYmpUeXBlT2JqZWN0LCBpZGVudF9vYmopOworCisJcmVsID0gdGFibGVfb3Bl bihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2Vh cmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBz ZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChGb3Jt X3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2VxdWVu Y2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBh bHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVt ZW50Qnkoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRl cGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGFs dGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0 KHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVy ZSAqLworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7 c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVj dChyZXQsICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9z ZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIC4u LiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJs ZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2Vs bDsKKwlPYmpUcmVlICAgICpyZXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUg PT0gQVRfUmVzZXRPcHRpb25zOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JICV7b3B0aW9ufXMiLCAyLAorCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkgIm9wdGlvbiIsIE9ialR5cGVTdHJpbmcsIGlzX3Jl c2V0ID8gIlJFU0VUIiA6ICJTRVQiKTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21k LT5kZWYpCisJeworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpUcmVlICAgICpzZXQ7CisKKwkJ ZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVt KGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmpl Y3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiKCV7b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJ ICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlib29sCQlpc19yZXNldCA9IHN1 YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlvbnM7CisKKwlmb3JlYWNoKGNlbGwsIChM aXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJT2JqVHJlZSAg ICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRl cGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5l d19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKworCXJldHVybiBu ZXdfb2JqdHJlZV9WQSgiJXtzZXRfcmVzZXR9cyAoJXtvcHRpb25zOiwgfXMpIiwgMiwKKwkJCQkJ CSAgInNldF9yZXNldCIsIE9ialR5cGVTdHJpbmcsIGlzX3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQi LAorCQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgc2V0cyk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIERlZkVsZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4uLiBTRVQsIGlu dG8gYSBsaXN0IG9mIFNFVAorICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRlbnRzLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle2xhYmVsfXMgPSAle3ZhbHVlfUwKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQp Cit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKm9wdG5hbWUgPSBuZXdfb2JqdHJl ZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1JLiIsICJzY2hlbWEiLAorCQkJCQkJCSBlbGVt LT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7bGFi ZWx9SSIsICJsYWJlbCIsIGVsZW0tPmRlZm5hbWUpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IiV7bGFiZWx9cyIsIDEsCisJCQkJCQkgImxhYmVsIiwgT2JqVHlwZU9iamVjdCwgb3B0bmFtZSk7 CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICI9ICV7dmFs dWV9TCIsICJ2YWx1ZSIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6 CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJTkhFUklUUyByZWxhdGlvbnMuCisg KgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNjaGVtYS1xdWFsaWZpZWQgdGFibGUg bGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFibGVzLgorICovCitzdGF0aWMgTGlz dCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpCit7CisJTGlzdAkgICAqcGFy ZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2Fu S2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJaW5oUmVsID0gdGFibGVfb3BlbihJ bmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtl eSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwK KwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFs aWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9ialRyZWUgICAgKnBh cmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1JbmgtPmluaHBhcmVudCk7CisJ CXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmVudCkpOwor CX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQorCisvKgorICogRGVwYXJzZSB0 aGUgT04gQ09NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9u IG9wdGlvbikKK3sKKwlPYmpUcmVlICAgICpyZXQgID0gbmV3X29ianRyZWUoIk9OIENPTU1JVCIp OworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1JVF9EUk9QOgorCQkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25f Y29tbWl0X3ZhbHVlIiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVM RVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1 ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiREVMRVRFIFJPV1MiKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLAorCQkJCQkJCQkgIm9uX2NvbW1pdF92 YWx1ZSIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05P T1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIpOwor CQkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9uLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgQ0FDSEUgJXt2YWx1ZX1zCisgKiBPUgorICogQ0FDSEUg JXt2YWx1ZX0KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hl KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVl ICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFs dGVyX3RhYmxlID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNBQ0hFICV7dmFsdWV9cyI7CisK Kwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hlKTsKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjYWNoZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgJXtu b31zIENZQ0xFCisgKiBPUgorICogJXtub31zIENZQ0xFCisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKmZtdDsKKworCWZt dCA9IGFsdGVyX3RhYmxlID8gIlNFVCAle25vfXMgQ1lDTEUiIDogIiV7bm99cyBDWUNMRSI7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJjeWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzZXFk YXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qo cmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRp b24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1z CisgKiBPUgorICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIElOQ1JFTUVO VCBCWSAle3ZhbHVlfXMiIDogIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0g cHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQpOworCXJldCA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNl cWluY3JlbWVudCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQg TUFYVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUFYVkFMVUUgJXt2YWx1ZX1zCisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNo YXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJT RVQgTUFYVkFMVUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3Ry ID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZh bHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5j ZSBNSU5WQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBNSU5WQUxV RSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNSU5WQUxVRSAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAq dG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBNSU5W QUxVRSAle3ZhbHVlfXMiIDogIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJcmV0ID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWludmFsdWUiLAor CQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RB UlQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNUQVJUICV7dmFsdWV9cwor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFydChGb3JtX3Bn X3NlcXVlbmNlX2RhdGEgc2VxZGF0YSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAq dG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5sYXN0 X3ZhbHVlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkgInZhbHVl IiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChy ZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQVMgb3B0aW9uLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBBUyAle2lkZW50aXR5fUQKKyAqLworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0pCit7CisJT2JqVHJlZSAgICAq cmV0OworCVR5cGUJCWxpa2VUeXBlOworCUZvcm1fcGdfdHlwZSBsaWtlRm9ybTsKKworCWxpa2VU eXBlID0gdHlwZW5hbWVUeXBlKE5VTEwsIGRlZkdldFR5cGVOYW1lKGVsZW0pLCBOVUxMKTsKKwls aWtlRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChsaWtlVHlwZSk7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQVMgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShsaWtlRm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGxpa2VGb3JtLT50eXBuYW1lKSkp OworCVJlbGVhc2VTeXNDYWNoZShsaWtlVHlwZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmpl Y3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0 aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMK KyAqIE9SCisgKiBTVEFSVCBXSVRIICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOwor CWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBTVEFSVCBXSVRIICV7 dmFsdWV9cyIgOiAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYo SU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJ ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRpb24u CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNUT1JBR0U9JXt2YWx1ZX1zCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5cGUgdHlw Rm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNUT1JB R0UgPSAle3ZhbHVlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Rv cmFnZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgZ2V0X3R5cGVfc3RvcmFnZSh0 eXBGb3JtLT50eXBzdG9yYWdlKSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIFJFQ0VJVkU9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1JlY2VpdmUoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7 CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRpb24u CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFTkQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZv cm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmpl Y3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9wdGlvbi4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogVFlQTU9EX0lOPSV7cHJvY2VkdXJlfUQKKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oRm9ybV9wZ190 eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlw bW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5 cGUgdHlwbW9kX291dCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZUE1PRF9P VVQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9U eXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0 OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBG b3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTkFMWVpFPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQor eworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUp KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNjcmlwdCBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNVQlNDUklQVD0le3Byb2NlZHVyZX1E CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KEZv cm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAq IFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRo IGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisg KiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5 IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlz dCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJv b2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAg KmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9 IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJ CWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlICAgICp0cmVlOworCisJCQkJ CXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwg ZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFy c2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBjb21wb3NpdGUs IChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlpZiAo dHJlZSAhPSBOVUxMKQorCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1lbnRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0cmVlKSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBUX0NvbnN0cmFp bnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIG5v ZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxlbWVudHM7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNl cXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWRlbnRp dHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9u CXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVs ZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJ SGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNyZWF0ZVNlcVN0bXQgPSAoQ3Jl YXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElU WSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkgKiBBTFRF UiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChjcmVhdGVTZXFTdG10LT5m b3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92 YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBB Y2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVM SUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0g PSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCS8qIERlZmluaXRp b24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hl KHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9D eWNsZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNlcWRhdGEpKTsKKwor CS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lmX25v dF9leGlzdHN9cyAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIsIDQsCisJCQkJCQkgInBl cnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJl bGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgY3JlYXRlU2VxU3RtdC0+aWZfbm90X2V4aXN0cyA/ICJJ RiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwK KwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworCisJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIElu ZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25z dHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVB VEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7 bmFtZX1JIE9OCisgKiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICV7ZGVmaW5pdGlvbn1z ICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisgKiAle3doZXJlX2NsYXVzZX1zCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUluZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlSZWxhdGlvbglpZHhyZWw7 CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZp bml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwlj aGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29u c3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhl ciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBo ZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4cmVsID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVsID0gcmVsYXRpb25fb3Blbihp ZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9p bmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlv biwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVu dGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04gJXt0YWJsZX1EIFVTSU5HICV7aW5k ZXhfYW19cyAle2RlZmluaXRpb259cyIsIDcsCisJCQkJCQkgInVuaXF1ZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIiwKKwkJCQkJCSAiY29uY3Vy cmVudGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNV UlJFTlRMWSIgOiAiIiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJ ICJuYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShp ZHhyZWwpLAorCQkJCQkJICJ0YWJsZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSksCisJCQkJCQkgImluZGV4X2Ft IiwgT2JqVHlwZVN0cmluZywgaW5kZXhfYW0sCisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBl U3RyaW5nLCBkZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wX29iaiwgIigle29wdHN9cykiLCAib3B0cyIsIHJlbG9wdGlvbnMpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7d2l0aH1zIiwgdG1wX29iaik7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wX29iaiA9IG5l d19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3BhY2V9cyIsICJ0YWJsZXNwYWNlIiwgdGFibGVz cGFjZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBfb2JqKTsKKworCS8qIFdIRVJF IGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVD bGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3doZXJlfXMiLCAid2hl cmUiLCB3aGVyZUNsYXVzZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcF9vYmop OworCisJdGFibGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3Nl KGhlYXByZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJs ZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9 cyAle2lkZW50aXR5fUQgW09GCisgKiAle29mX3R5cGV9VCB8IFBBUlRJVElPTiBPRiAle3BhcmVu dF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRzfXMKKyAqICV7aW5oZXJpdHN9cyAle3BhcnRp dGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cworICogJXtvbl9jb21t aXR9cyAle3RhYmxlc3BhY2V9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9k ZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0 OworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUxpc3QJICAgKmxp c3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCIsIDMsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRf cGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJ CSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4 aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwt PnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs YXRpb24pKSk7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICog VHlwZWQgdGFibGVzIGFuZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3Jt YXQgc3RyaW5nOiB3ZQorCSAqIG11c3Qgbm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVu dHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUg bm8gb3B0aW9ucyB0aGUgcGFyZW50aGVzZXMgbXVzdCBub3QgYmUgZW1pdHRlZDsKKwkgKiBhbmQg YWxzbywgdHlwZWQgdGFibGVzIGRvIG5vdCBhbGxvdyBmb3IgaW5oZXJpdGFuY2UuCisJICovCisJ aWYgKG5vZGUtPm9mVHlwZW5hbWUgfHwgbm9kZS0+cGFydGJvdW5kKQorCXsKKwkJTGlzdAkgICAq dGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFdlIGNhbid0IHB1dCB0YWJsZSBlbGVtZW50 cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZyBhcyBhbiBhcnJheQorCQkgKiBzdXJyb3VuZGVk IGJ5IHBhcmVudGhlc2VzIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxkIGNhdXNl CisJCSAqIGEgc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJlY3Rpb24g ZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUgbm8gZWxl bWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG9mdHlwZSwgLTEpOwor CQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT0YgJXtvZl90eXBlfVQiLCB0bXBfb2JqKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QJICAgKnBhcmVudHM7CisJCQlPYmpFbGVtICAgICpl bGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJ ZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9s ZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIlBB UlRJVElPTiBPRiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3BhcmVudF9p ZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJs ZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywg ZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJ CQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25z dHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQl0bXBfb2JqID0g bmV3X29ianRyZWUoIiIpOworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVj dCh0bXBfb2JqLCAiKCV7ZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wX29iaik7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJ ICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHBy b2Nlc3MgTElLRSBjbGF1c2VzIHNlcGFyYXRlbHk7IHRoZXkgaGF2ZQorCQkgKiBhbHJlYWR5IGJl ZW4gdHJhbnNmb3JtZWQgaW50byBjb2x1bW5zIGFuZCBjb25zdHJhaW50cy4KKwkJICovCisKKwkJ LyoKKwkJICogUHJvY2VzcyB0YWJsZSBlbGVtZW50czogY29sdW1uIGRlZmluaXRpb25zIGFuZCBj b25zdHJhaW50cy4gIE9ubHkKKwkJICogdGhlIGNvbHVtbiBkZWZpbml0aW9ucyBhcmUgb2J0YWlu ZWQgZnJvbSB0aGUgcGFyc2Ugbm9kZSBpdHNlbGYuICBUbworCQkgKiBnZXQgY29uc3RyYWludHMg d2UgcmVseSBvbiBwZ19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1p Z2h0IGJlIG1pc3Npbmcgc29tZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3Ry YWludHMuCisJCSAqLworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRp b24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsCS8qIG5v dCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICov CisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIElu dmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJl dCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBw ZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiKCkiKTsKKworCQkvKgorCQkgKiBBZGQgaW5oZXJpdGFu Y2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUgbGlzdCBvZgorCQkg KiBwYXJlbnRzIGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRoYXQgbWF5IGxhY2sgdGhl IGFjdHVhbAorCQkgKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCByZWxhdGlvbnMuICBS YXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0aGVtIGZyb20gdGhlIGluZm9y bWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkgKiBtb3JlIGFjY3VyYXRlIGFu ZCBjb252ZW5pZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJICovCisJCXRtcF9v YmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKG5vZGUtPmluaFJlbGF0aW9ucyAh PSBOSUwpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIoJXtwYXJlbnRzOiwgfUQp IiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBl bmRfbnVsbF9vYmplY3QodG1wX29iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJfQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2luaGVyaXRzfXMiLCB0bXBfb2JqKTsKKwl9CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlRB QkxFU1BBQ0UiKTsKKwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3BhY2V9SSIsICJ0YWJsZXNwYWNlIiwKKwkJCQkJCQkg bm9kZS0+dGFibGVzcGFjZW5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0 bXBfb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmop OworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcF9v YmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJ IGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+b25jb21taXQpKTsKKworCS8qIEZPUiBWQUxV RVMgY2xhdXNlICovCisJaWYgKG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCS8qCisJCSAqIEdldCBw Z19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJz ZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJl c3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsICJwYXJ0aXRpb25f Ym91bmQiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisJ fQorCisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgi UEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7 ZGVmaW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJCSBwZ19nZXRfcGFydGtleWRlZl9z aW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29i aiwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcF9vYmop OworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJVU0lORyIp OworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9v YmosICIle2FjY2Vzc19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkgbm9kZS0+ YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwg IiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXBfb2Jq KTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7 CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlICAgICp0bXBf b2JqMjsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJ CXRtcF9vYmoyID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqMikpOworCX0KKworCWlmIChsaXN0KQor CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIoJXt3aXRoOiwgfXMpIiwgbGlzdCk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle3dpdGhfY2xhdXNlfXMiLCB0bXBfb2JqKTsKKworCXJlbGF0aW9uX2Nsb3Nl KHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgorICogZGVwYXJzZV9DcmVhdGVT dG10IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRoZSBmaW5hbCBDcmVhdGVTdG10 IGZvcgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9p ZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUg PT0gU0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0gY21kLT5kLmN0YXMucmVhbF9j cmVhdGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzLm9iamVjdElkOworCisJcmV0 dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKK30KKworLyoKKyAq IERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMgYW5kIHJldHVybiBhbiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIEFMVEVSIHJlbHR5cGUgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJSZWxhdGlvbihDb2xsZWN0ZWRDb21tYW5k ICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJT2Jq VHJlZSAgICAqdG1wX29iajI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsK KwlMaXN0CSAgICpzdWJjbWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY29uc3QgY2hh ciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwlib29sCQlpc3RhYmxlID0gZmFs c2U7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJT2lkCQkJcmVsSWQgPSBjbWQtPmQuYWx0ZXJU YWJsZS5vYmplY3RJZDsKKwlBbHRlclRhYmxlU3RtdCAqc3RtdCA9IE5VTEw7CisKKwlBc3NlcnQo Y21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKwlzdG10ID0gKEFsdGVyVGFibGVTdG10ICop IGNtZC0+cGFyc2V0cmVlOworCUFzc2VydChJc0Eoc3RtdCwgQWx0ZXJUYWJsZVN0bXQpKTsKKwor CS8qCisJICogQUxURVIgVEFCTEUgc3ViY29tbWFuZHMgZ2VuZXJhdGVkIGZvciBUYWJsZUxpa2VD bGF1c2UgaXMgcHJvY2Vzc2VkIGluCisJICogdGhlIHRvcCBsZXZlbCBDUkVBVEUgVEFCTEUgY29t bWFuZDsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKHN0bXQtPnRhYmxlX2xpa2UpCisJ CXJldHVybiBOVUxMOworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxJZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCksCisJCQkJCQkJCQlyZWxJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5y ZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFS VElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWlzdGFibGUgPSB0cnVl OworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJ VElPTkVEX0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2FzZSBS RUxLSU5EX1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOworCQkJYnJlYWs7CisJCWNhc2UgUkVM S0lORF9DT01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAiVFlQRSI7CisJCQlpc3R5cGUgPSB0 cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JFSUdOX1RBQkxFOgorCQkJcmVsdHlw ZSA9ICJGT1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfTUFUVklFVzoK KwkJCXJlbHR5cGUgPSAiTUFURVJJQUxJWkVEIFZJRVciOworCQkJYnJlYWs7CisKKwkJCS8qIFRP RE8gc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxraW5kKTsK Kwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0 eX1EIiwgMiwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsIHJlbHR5cGUsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSkpOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJs ZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1 YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKnN1YmNtZCA9IChBbHRlclRh YmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlICAgICp0cmVlOworCisJCUFzc2Vy dChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkgICAvKgorCQkqIFNraXAgZGVwYXJz ZSBvZiB0aGUgc3ViY29tbWFuZCBpZiB0aGUgb2JqZWN0SWQgZG9lc24ndCBtYXRjaCB0aGUKKwkJ KiB0YXJnZXQgcmVsYXRpb24gSUQuIEl0IGNhbiBoYXBwZW4gZm9yIGluaGVyaXRlZCB0YWJsZXMg d2hlbgorCQkqIHN1YmNvbW1hbmRzIGZvciBpbmhlcml0ZWQgdGFibGVzIGFuZCB0aGUgcGFyZW50 IHRhYmxlIGFyZSBib3RoCisJCSogY29sbGVjdGVkIGluIHRoZSBBTFRFUiBUQUxCRSBjb21tYW5k IGZvciB0aGUgcGFyZW50IHRhYmxlLiBXaXRoIHRoZQorCQkqIGV4Y2VwdGlvbiBvZiB0aGUgaW50 ZXJuYWxseSBnZW5lcmF0ZWQgQWRkQ29uc3RyYWludCAoZm9yCisJCSogQUxURVIgVEFCTEUgQURE IENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUykgd2hlcmUgdGhlCisJCSogb2JqZWN0 SWRzIGNvdWxkIG1pc21hdGNoIChmb3JlaW4gdGFibGUgaWQgYW5kIHRoZSByZWZlcmVuY2VkIHRh YmxlCisJCSogaWQpLgorCQkqLworCQlpZiAoKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSByZWxJ ZCAmJgorCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKSAmJgorCQkJIShz dWJjbWQtPnN1YnR5cGUgPT0gQVRfQWRkQ29uc3RyYWludCAmJgorCQkJICBzdWJjbWQtPnJlY3Vy c2UpICYmCisJCQlpc3RhYmxlKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1 YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNl dCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBj b250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1 ZSwgJmV4cHJzKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCAle29ianR5cGV9 cyAle2lmX25vdF9leGlzdHN9cyAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCQkJIm9ianR5 cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNP TFVNTiIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJ CQkJCQkJCQkJImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNt ZC0+bWlzc2luZ19vayA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJkZWZpbml0 aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJ CQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJ aXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFzc2VydChpc3RtdC0+ aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29w ZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJCS8qCisJCQkJCSAq IFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05TVFJBSU5UICV7bmFtZX1J ICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICogJWluZGV4X25hbWV9SSAl e2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8KKwkJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFpbnRfdHlw ZX1zIFVTSU5HIElOREVYICV7aW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZl cnJlZH1zIiwgNiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0 cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdl dF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImNvbnN0cmFpbnRfdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5wcmltYXJ5ID8gIlBSSU1BUlkg S0VZIiA6ICJVTklRVUUiLAorCQkJCQkJCQkJCQkiaW5kZXhfbmFtZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCksCisJCQkJCQkJCQkJCSJk ZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPmRlZmVycmFibGUg PyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCQkiaW5pdF9kZWZl cnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5pbml0ZGVmZXJyZWQgPyAi SU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJ CQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRDb25zdHJhaW50 OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRpb25z OgorCQkJY2FzZSBBVF9DaGVja05vdE51bGw6CisJCQljYXNlIEFUX1JlQWRkU3RhdGlzdGljczoK KwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRv IGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Db29rZWRDb2x1bW5EZWZhdWx0 OgorCQkJCXsKKwkJCQkJUmVsYXRpb24JYXR0cnJlbDsKKwkJCQkJSGVhcFR1cGxlCWF0dHR1cDsK KwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0U3RydWN0OworCisJCQkJCWF0dHJyZWwgPSB0YWJs ZV9vcGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJCQlhdHR0 dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkyKEFUVE5VTSwKKwkJCQkJCQkJCQkJCSBPYmplY3RJZEdl dERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSksCisJCQkJCQkJCQkJCQkgSW50MTZHZXREYXR1 bShzdWJjbWQtPm51bSkpOworCQkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0dHVwKSkKKwkJ CQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhdHRyaWJ1dGUgJWQgb2Yg cmVsYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkJCSBzdWJjbWQtPm51bSwgUmVsYXRpb25HZXRS ZWxpZChyZWwpKTsKKwkJCQkJYXR0U3RydWN0ID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJV Q1QoYXR0dHVwKTsKKworCQkJCQkvKgorCQkJCQkgKiBCb3RoIGRlZmF1bHQgYW5kIGdlbmVyYXRp b24gZXhwcmVzc2lvbiBub3Qgc3VwcG9ydGVkCisJCQkJCSAqIHRvZ2V0aGVyLgorCQkJCQkgKi8K KwkJCQkJaWYgKCFhdHRTdHJ1Y3QtPmF0dGdlbmVyYXRlZCkKKwkJCQkJCWVsb2coV0FSTklORywg InVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkJCSBzdWJjbWQtPnN1 YnR5cGUpOworCisJCQkJCWhlYXBfZnJlZXR1cGxlKGF0dHR1cCk7CisJCQkJCXRhYmxlX2Nsb3Nl KGF0dHJyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNh c2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0g bm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVm YXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJ CQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQllbHNlCisJCQkJ eworCQkJCQlMaXN0CSAgICpkcGNvbnRleHRfcmVsOworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsK KwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlkcGNvbnRleHRfcmVsID0gZGVw YXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJ CQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2Fj aGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0 bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIsICJkZWZp bml0aW9uIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8s CisJCQkJCQkJCQkJCQkJCQkJICBkcGNvbnRleHRfcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAgTlVM TCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0ZvcmNlUm93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJG T1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf Tm9Gb3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiTk8gRk9SQ0Ug Uk9XIExFVkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5v dE51bGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJP UCBFWFBSRVNTSU9OICV7aWZfZXhpc3RzfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFz c2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkK KwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg U0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLCAzLAorCQkJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwgT2Jq VHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYp KTsKKwkJCQkJZWxzZQorCQkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsIDMsCisJCQkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJ CQkiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkJInN0 YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJCWludFZhbCgoSW50ZWdlciAq KSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1Nl dE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNlX0Nv bHVtblNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0 b3JhZ2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAl e3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0 b3JhZ2UiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUs CisJCQkJCQkJCQkJInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZhbCgo U3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1Nl dENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENP TVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiY29tcHJlc3Npb25fbWV0aG9k IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRl ZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5cGV9cyAle2lmX25vdF9leGlzdHN9cyAl e2NvbHVtbn1JIiwgNCwKKwkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkJImlmX25vdF9leGlzdHMi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJ CQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBzdWJjbWQtPmJlaGF2aW9yKTsKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBfb2JqMik7CisK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJCQlPaWQJ CQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10 OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9p ZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQp KTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCWlmICgh aXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9IHJlbGF0aW9u X29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRpb25fY29u c3RyYWludF9vaWQoCisJCQkJCQkJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwg aWR4bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENP TlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2Jq VHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25z dHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludDoKKwkJCQl7 CisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICov CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9v bAkJaXNudWxsOworCQkJCQlIZWFwVHVwbGUJdHVwOworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlD b25zdHJhaW50ICpjb25zdHI7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3Ry YWludCkpOworCQkJCQljb25zdHIgPSBjYXN0Tm9kZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7 CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFsaWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgT2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQp KTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQlj aGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBGZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24g aW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RS T0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1fcGdfY29uc3RyYWludF9jb25iaW4sICZpc251 bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJCQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywg c3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJCX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNo ZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5h bWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJ CQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJcGdfZ2V0X2Nv bnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQkJ Y29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25zdHJhaW50ICpjID0g KENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogSWYgbm8gY29uc3RyYWludCB3 YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFsaWQoY29u c3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywgQ29uc3RyYWludCkp OworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTlNUUkFJTlQgJXtuYW1l fUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMiLCA0LAorCQkJCQkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJ CQkJCSJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJYy0+ZGVmZXJyYWJs ZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJCSJpbml0X2Rl ZmVycmVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJYy0+aW5pdGRlZmVycmVkID8gIklO SVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIs IDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWlu dCIsCisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSAle2lm X25vdF9leGlzdHN9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJv cCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJ CQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJCQkJeworCQkJCQlU dXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJCQkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYgICpkZWY7CisKKwkJCQkJYXR0ID0gJih0dXBk ZXNjLT5hdHRyc1tzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQgLSAxXSk7CisJCQkJCWRlZiA9IChD b2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisJCQkJCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYp KTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBD b21wb3NpdGUgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJ CQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIEFUVFJJQlVURSAle2Nhc2NhZGV9cwor CQkJCQkgKgorCQkJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBT RVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIENPTFVNTiAl e3VzaW5nfXMKKwkJCQkJICovCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg JXtvYmp0eXBlfXMgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFICV7ZGF0YXR5cGV9VCIsIDQsCisJ CQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0eXBlID8g IkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYWx0ZXIgY29sdW1uIHR5cGUiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkiZGF0YXR5cGUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShhdHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJ CQkJCQkJCSBhdHQtPmF0dHR5cG1vZCkpOworCisJCQkJCS8qIEFkZCBhIENPTExBVEUgY2xhdXNl LCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOwor CQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9i alRyZWUgICAgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5h dHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iajIsICIle25h bWV9RCIsIGNvbGxuYW1lKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iajIpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtj b2xsYXRpb259cyIsIHRtcF9vYmoyKTsKKworCQkJCQkvKiBJZiBub3QgYSBjb21wb3NpdGUgdHlw ZSwgYWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwkJCQkJaWYgKCFpc3R5cGUpCisJCQkJCXsKKwkJ CQkJCS8qCisJCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFuc2Zvcm1BbHRl clRhYmxlU3RtdAorCQkJCQkJICogcmFuIGl0IHRocm91Z2ggdHJhbnNmb3JtRXhwciBhbmQgc3Rv cmVkIHRoZQorCQkJCQkJICogcmVzdWx0aW5nIG5vZGUgaW4gY29va2VkX2RlZmF1bHQsIHdoaWNo IHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhlcmUuCisJCQkJCQkgKi8KKwkJCQkJCXRtcF9vYmoyID0g bmV3X29ianRyZWUoIlVTSU5HIik7CisJCQkJCQlpZiAoZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqMiwgIiV7ZXhwcmVzc2lvbn1zIiwKKwkJCQkJ CQkJCQkJCSAiZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJCQkgc3ViLT51c2luZ2V4cHIpOworCQkJ CQkJZWxzZQorCQkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqMik7CisJCQkJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt1c2luZ31zIiwgdG1wX29iajIpOworCQkJCQl9 CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIENBU0NBREUgY2xh dXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcF9vYmoyID0gbmV3X29i anRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1BfQ0FT Q0FERSkKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iajIpOworCQkJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iajIpOworCQkJCQl9 CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFU X0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wX29iaiA9IGRlcGFyc2VfRmR3T3B0 aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJCQkJc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJCQkJIm93bmVyIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlnZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293 bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJPbjoKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04gJXtpbmRleH1JIiwgMiwKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVyIG9uIiwKKwkJCQkJCQkJCQkiaW5kZXgi LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRI T1VUIENMVVNURVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3 aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0TG9nZ2Vk OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExPR0dFRCIsIDEsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPaWRzOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgT0lEUyIsIDEsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgb2lkcyIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUkiLCAyLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9kIiwKKwkJCQkJCQkJ CQkiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJCQkJCQkidGFibGVz cGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVsT3B0aW9uczoKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJ CQkJCQkJCSBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFC TEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3 YXlzVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgVFJJ R0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJl cGxpY2FUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0Eg VFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNh YmxlVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiAl e3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJs ZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdBbGw6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Rpc2FibGVUcmlnVXNlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUg VFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNh YmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVS dWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJVTEUgJXtydWxlfUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJ CQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkJInJ1 bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVSZXBsaWNhUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBSRVBMSUNBIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RGlzYWJsZVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJVTEUg JXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUg cnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCQkicGFyZW50IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJCQkJInBhcmVudCIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiT0YgJXt0eXBlX29mfVQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBvZiIsCisJCQkJCQkJCQkJInR5cGVfb2YiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwgLTEpKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9mOgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVwbGljYUlkZW50aXR5 OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJREVOVElUWSIsIDEsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAicmVwbGljYSBpZGVudGl0eSIpOworCQkJ CXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlf dHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9ERUZBVUxUOgorCQkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJ CQkJCQkJCSAiREVGQVVMVCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVO VElUWV9GVUxMOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9 cyIsICJpZGVudCIsCisJCQkJCQkJCQkJCSAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNh c2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJCQkJCQkJCSAiTk9USElORyIpOwor CQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRFWDoKKwkJCQkJCXRt cF9vYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9SSIsIDEsCisJCQkJ CQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJCSAoKFJlcGxpY2FJ ZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCB0bXBfb2JqMik7CisJCQkJCQlicmVhazsKKwkJ CQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1NlY3VyaXR5OgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJvdyBzZWN1cml0eSIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2VjdXJpdHk6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHki KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfR2VuZXJpY09w dGlvbnM6CisJCQkJdG1wX29iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQt PmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0F0dGFjaFBh cnRpdGlvbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFUVEFDSCBQQVJUSVRJT04g JXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJInBhcnRpdGlvbl9pZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElk KSk7CisKKwkJCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cGFydGl0aW9u X2JvdW5kfXMiLAorCQkJCQkJCQkJCSAicGFydGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkJCQkgUmVs YXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgorCQkJeworCQkJCVBhcnRpdGlv bkNtZCAqY21kOworCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgUGFydGl0aW9uQ21kKSk7 CisJCQkJY21kID0gKFBhcnRpdGlvbkNtZCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1E ICV7Y29uY3VycmVudH1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkJImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0aXRpb25faWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmpl Y3RJZCksCisJCQkJCQkJCQkJY21kLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb25GaW5hbGl6 ZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0 aXRpb25faWRlbnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkJInBhcnRpdGlv bl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRy ZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToK KwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJ CQkJCU9ialRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJl bGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2Vx dWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlmIChP aWRJc1ZhbGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29s dW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisJCQkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCBz ZXFkZWYpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0 SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpkZWZlbDsKKwkJCQkJY2hhcgkJaWRl bnRpdHkgPSAwOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUF0dHJOdW1iZXIJYXR0 bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7 CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25v ZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOwor CQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCks IHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVs YXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlmIChPaWRJc1ZhbGlk KHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRp dHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOworCQkJCQl9CisKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0eToKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAy LAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJ CQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJICJp Zl9leGlzdHMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDog IiIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKFdBUk5JTkcsICJ1 bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJCQkJIHN1YmNtZC0+c3VidHlw ZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBzdXBwb3J0IHJlcGxp Y2F0aW5nIEFMVEVSIFRBQkxFIHdoaWNoIGNvbnRhaW5zIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9u cyBiZWNhdXNlIEl0J3MgcG9zc2libGUgdGhlIGZ1bmN0aW9ucyBjb250YWluIERETC9ETUwgaW4K KwkJICogd2hpY2ggY2FzZSB0aGVzZSBvcGVyYXRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2Ug YW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25v dyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RN TCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1 bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcworCQkg KiBhY2Nlc3NlZCBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBz dWJzY3JpYmVyLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2Rl ICopIGV4cHJzKSkKKwkJCWVsb2coRVJST1IsICJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZv bGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIik7CisKKwkJLyoKKwkJICogQ2xl YW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRpbGUK KwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9IE5J TDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAobGlz dF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHJldCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21kcyk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNvbW1hbmRzLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zICV7Y2Fz Y2FkZX1zCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2Jq aWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9wQmVoYXZpb3IgYmVo YXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCWNoYXIJICAgKmNvbW1hbmQ7CisJY2hh cgkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwlPYmpUcmVlICAgICpzdG10 OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJSnNvbmIJICAgKmpzb25iOworCisJaW5pdFN0cmlu Z0luZm8oJnN0cik7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkRST1AgJXtvYmp0eXBlfXMg SUYgRVhJU1RTICV7b2JqaWRlbnRpdHl9cyIsIDIsCisJCQkJCQkgICJvYmp0eXBlIiwgT2JqVHlw ZVN0cmluZywgb2JqZWN0dHlwZSwKKwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywgaWRlbnRpdHkpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwK KwkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2Nhc2NhZGV9cyIsIHRtcF9vYmopOwor CisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0 cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJu IGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5k cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBp biBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2lt cGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOwor CU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7 CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1w bGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRh ZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJCXJldHVybiBOVUxMOwor CisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9jZXNz VXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQorCXsKKwkJ Y2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfSW5kZXhT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CisJCWRlZmF1bHQ6CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVw YXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJfQor CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxl Y3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVj dGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBh dGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlNZW1vcnlDb250ZXh0 IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAgKmNvbW1hbmQgPSBOVUxMOwor CVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25l IGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0byBh dm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlLCBi dXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4K KwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFKTsK KwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICogTWFu eSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1 bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lv bnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2JqZWN0IG5hbWVzIHRvIGJl IHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRvCisJICogZW52aXJv bm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4g aW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNl YXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVy ZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVudE1l bW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlkZVBh dGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVlOwor CVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2ZXJi b3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBsZToK KwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJY2Fz ZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVsYXRpb24oY21kKTsK KwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2Vf Q3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOworCX0K KworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJeworCQlKc29uYgkg ICAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUpOworCQljb21tYW5k ID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVO KTsKKwl9CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQg dGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBz dHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFu ZDsKK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiBy ZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxs eSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBv ZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQ R19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRD b21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJICAgKmNvbW1hbmQ7CisKKwlj b21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCB0cnVlKTsKKworCWlmIChjb21t YW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQ R19SRVRVUk5fTlVMTCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZiZDNi NTRlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5j CkBAIC0wLDAgKzEsNzc2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5j CisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8u aCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgi CisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyIHdoaWNoIGRldGVybWluZXMgaG93IHdl IGV4cGFuZCB0aGUgSlNPTiBlbGVtZW50IGludG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRlZiBl bnVtCit7CisJU3BlY1R5cGVOYW1lLAorCVNwZWNPcGVyYXRvck5hbWUsCisJU3BlY0RvdHRlZE5h bWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNw ZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBBIHRl cm5hcnkgdmFsdWUgdGhhdCByZXByZXNlbnRzIGEgYm9vbGVhbiB0eXBlIEpzb25iVmFsdWUuCisg Ki8KK3R5cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9 CQkJanNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5kX29uZV9qc29uYl9lbGVtZW50 KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkJCSBKc29uYlZhbHVlICpqc29u dmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpmbXQp Oworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpw YXJhbSwKKwkJCQkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwKKwkJ CQkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KTsKK3N0YXRp YyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAqZGVwYXJzZV9k ZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4gYSBKc29uYkNv bnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBp dC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMg cmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBv dGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNvbl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpz b25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAq Y29udGFpbmVyLCBjaGFyICprZXluYW1lKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFs dWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUgcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJp bmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIo Y29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBO VUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xl YW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0 dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0 aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0 aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhp c3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVy biBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBw YWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxM LCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hh ciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFp bmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0 aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpz dHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJh eSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5 bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBm aW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpF Q1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJ CQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIl c1wiIGluIEpTT04gb2JqZWN0Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlpZiAodmFsdWUtPnR5cGUg IT0gamJ2U3RyaW5nKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5v dCBvZiB0eXBlIHN0cmluZyIsIGtleW5hbWUpKSk7CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+ dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJ Kmxlbmd0aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJu IHN0cjsKK30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwK KwlkbyB7IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9S LCBcCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJ CQkJCSBlcnJtc2coInVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hp bGUgKDApCisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBkZXBhcnNlX2RkbF9qc29uX3Rv X3N0cmluZy4KKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250 YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29u dGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVl ICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29u c3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmlu Z19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5k X3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5k X3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19h cnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5 c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9Q QVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMg YSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNj YW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJh dG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVk IGFmdGVyIGEgY29sb24uCisJCSAqLworCQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJU3RyaW5n SW5mb0RhdGEgcGFyYnVmOworCQkJU3RyaW5nSW5mb0RhdGEgYXJyYXlzZXBidWY7CisJCQlTdHJp bmdJbmZvCWFwcGVuZFRvOworCisJCQlpbml0U3RyaW5nSW5mbygmcGFyYnVmKTsKKwkJCWFwcGVu ZFRvID0gJnBhcmJ1ZjsKKworCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsK KwkJCWZvciAoOyBjcCA8IGVuZF9wdHI7KQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxl bWVudCBuYW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2Vw YXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJ CQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJ QURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJ fQorCisJCQkJaWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5U RVIoY3AsIGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3As IGVuZF9wdHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJh eSkKKwkJCQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09 IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUg aW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQlj YXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOwor CQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFr OworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVOYW1lOworCQkJCWJyZWFr OworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9yTmFtZTsKKwkJCQli cmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJl YWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsK KwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJz aW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4g dGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmlu ZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9 IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIo Y29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhlIGRh dGEgKHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJICov CisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2YWx1 ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5kX29u ZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7 CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlm aWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lk CitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpq c29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpi dlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNv bnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90 ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBq c29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2Yg dHlwZQorICogYmluYXJ5IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9w dGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwp LiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3Nh cnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBt aWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNl IGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9k b3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJ ICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSk7CisKKwlzdHIg PSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEs CisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlw ZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxM KTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsK KwlwZnJlZShzdHIpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJhdHRybmFtZSIsIHRydWUsIE5VTEwp OworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lk ZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEg SlNPTiB2YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX3R5cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNo YXIJICAgKnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWU7CisJY2hhcgkgICAqdHlw bW9kc3RyOworCWpzb25fdHJpdmFsdWUgaXNfYXJyYXk7CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7 CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxpZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlm IHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhlciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5V TEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGNhc2VzCisJICogaXMgdGhhdCBp biB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5hbWUsIGluIHRoZSBmb3JtZXIgd2UgZG9u J3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdpdGggc3BlY2lhbCB0eXBtb2QgbmVlZHMs IHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0 YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFsbG93aW5nCisJICogZm9yIHRoZSBzY2hl bWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBuYW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVz CisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9tIGEgdXNlciBzY2hlbWEuCisJICovCisK KwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmlu YXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBl bmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIg PSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEs CisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2FycmF5ID0gZmluZF9i b29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2FycmF5KQorCXsKKwkJY2FzZSB0dl90cnVl OgorCQkJYXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9mYWxzZToK KwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2Fic2VudDoKKwkJ ZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVsZW1l bnQiKSkpOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKwllbHNlIGlmIChzY2hlbWFb MF0gPT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHR5cGVuYW1lKTsJLyog U3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi JXMuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRlbnRpZmll cih0eXBlbmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzIiwgdHlwbW9kc3Ry ID8gdHlwbW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsKKwlwZnJlZShzY2hlbWEpOworCXBmcmVl KHR5cGVuYW1lKTsKKwlwZnJlZSh0eXBtb2RzdHIpOworfQorCisvKgorICogRXhwYW5kIGEgSlNP TiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pz b252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVM TCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5V TEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIs IHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmlu ZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJ CQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCisJaWYgKHN0cikKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoK KyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcuICBUaGUgdmFsdWUgbXVzdCBiZSBv ZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBCaW5hcnkuICBJbiB0aGUgbGF0dGVyIGNhc2Us IGl0IG11c3QgY29udGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICogYmUgcmVjdXJz aXZlbHkgZXhwYW5kZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4gZWxlbWVudCAi cHJlc2VudCIKKyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNpb24gaXMgdGhl IGVtcHR5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNp b24gd2FzIG1hZGUgZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJm YWxzZSIuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBjaGVjayBqc29udmFs IGlzIG9mIHR5cGUgamJ2U3RyaW5nIG9yIGpidkJpbmFyeS4KKyAqLworc3RhdGljIGJvb2wKK2V4 cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZh bC0+dmFsLnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJp bmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUgcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9i b29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkJICAicHJlc2VudCIpOworCisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFs c2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhl ciB0cnVlIG9yIGFic2VudCksIGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLwor CQlpZiAocHJlc2VudCA9PSB0dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRf Zm10X3JlY3Vyc2l2ZShqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBK U09OIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRf anNvbnZhbF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhcgkgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNo YXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQJCQlkcW5leHRjaGFyID0gMDsKKwor CXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3Ry aW5nLmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBq dXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJwYnJrKHN0ciwgIlwnXFwiKSA9PSBO VUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICInJXMnIiwgc3RyKTsKKwkJcGZyZWUo c3RyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE90aGVyd2lzZSBuZWVkIHRvIGZpbmQgYSB1c2Vm dWwgZG9sbGFyLXF1b3RlIGRlbGltaXRlciAqLworCWluaXRTdHJpbmdJbmZvKCZkcWRlbGltKTsK KwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkcWRlbGltLCAiJCIpOworCXdoaWxlIChzdHJzdHIo c3RyLCBkcWRlbGltLmRhdGEpICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigm ZHFkZWxpbSwgZHFzdWZmaXhlc1tkcW5leHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hhciA9IGRxbmV4 dGNoYXIgJSAoc2l6ZW9mKGRxc3VmZml4ZXMpIC0gMSk7CisJfQorCS8qIEFkZCB0cmFpbGluZyAk ICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sICckJyk7CisKKwkvKiBBbmQgZmlu YWxseSBwcm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5m byAqLworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIs IGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShzdHIpOworfQor CisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhbiBpbnRlZ2VyIHF1YW50aXR5LgorICov CitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfbnVtYmVyKFN0cmluZ0luZm8gYnVmLCBKc29u YlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cmRhdHVtOworCisJc3RyZGF0dW0gPSBE YXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJ CQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworCXBmcmVlKHN0cmRhdHVtKTsKK30KKwor LyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVi bGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1 b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5n IGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xl KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUg aXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChp c19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJM SUMiKTsKKwllbHNlCisJeworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZp bmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJ CQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJ eworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5h bWUpKTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBv bmUgSlNPTiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0 aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0 ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3 ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZh bHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQi IGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5z aW9uKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJ bmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNw ZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sCQlyZXN1bHQgPSB0 cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3 ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2Fs bGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0 cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJ CXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9j b250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOwor CisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRp ZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToK KwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmlu ZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5 cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RyaW5nIG9yIHN0cnVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJ CQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFs X3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0 ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wi LCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9q c29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlw ZU5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlVCBlbGVtZW50IFwiJXNc IiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRf anNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj T3BlcmF0b3JOYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJU8gZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNh c2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQlj YXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVIgZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYg KGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2Yg YSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJp bmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0 aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9h cnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNv bmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNv bnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0Owor CUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAqaXQ7CisJSnNvbmJW YWx1ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9E YXRhIGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBz ZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlz cWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJj b250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVy cm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4 dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ IGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOwor CisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRh aW5lcklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwi JXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygm YXJyYXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGls ZSAoKHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUp CisJeworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZh cnJheWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0s IHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmlu YXJ5U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlm aXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4 dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2Ug Zm9yIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfZGRs X2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAg ICpqc29uYjsKKwlTdHJpbmdJbmZvCWJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihT dHJpbmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RG dW5jdGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29u YiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2 ZSgmanNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0t LQorICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoK KyAqIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2gg bXVzdCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVy byBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1l IGVuY2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlm aWVyLAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNv bnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAl CisgKiBJCQlleHBhbmQgYXMgYSBzaW5nbGUsIG5vbi1xdWFsaWZpZWQgaWRlbnRpZmllcgorICog RAkJZXhwYW5kIGFzIGEgcG9zc2libHktcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIFQJCWV4cGFu ZCBhcyBhIHR5cGUgbmFtZQorICogTwkJZXhwYW5kIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJ CWV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQor ICogcwkJZXhwYW5kIGFzIGEgc2ltcGxlIHN0cmluZyAobm8gcXVvdGluZykKKyAqIG4JCWV4cGFu ZCBhcyBhIHNpbXBsZSBudW1iZXIgKG5vIHF1b3RpbmcpCisgKiBSCQlleHBhbmQgYXMgYSByb2xl IG5hbWUgKHBvc3NpYmx5IHF1b3RlZCBuYW1lLCBvciBQVUJMSUMpCisgKgorICogVGhlIGVsZW1l bnQgbmFtZSBtYXkgaGF2ZSBhbiBvcHRpb25hbCBzZXBhcmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVj ZWRlZAorICogYnkgYSBjb2xvbi4gIEl0cyBwcmVzZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxl bWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4gYXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJh dG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkgZWxlbWVudHMuCisgKi0tLS0tLQorICovCitE YXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0 ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsK KworCWpzb25fc3RyID0gdGV4dF90b19jc3RyaW5nKGpzb24pOworCisJUEdfUkVUVVJOX1RFWFRf UChjc3RyaW5nX3RvX3RleHQoZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoanNvbl9zdHIpKSk7 Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZvcm1hdCBzdHJp bmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hpY2ggZWxlbWVudCB3ZSdyZSBl eHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2b2lkCitmbXRzdHJfZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFuZGluZyBmb3Jt YXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKaW5kZXggNjkwMjcwOTk1Ni4uNDQ3MmUyOGQ3MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTgyNSw2ICsxODI1LDcgQEAgcGdfZXZlbnRfdHJpZ2dl cl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1p bHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZp ZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVu dGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4NDIsNiArMTg0Myw4IEBAIHBnX2V2ZW50 X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21k LT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0Fs dGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQll bHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpCisJCQkJCQlhZGRyID0gY21k LT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRy b3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1 aWxkCmluZGV4IDQyY2NlZDllYmUuLjI4NDRkMzY1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1 aWxkCkBAIC0xNyw2ICsxNyw4IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2NvcHl0 by5jJywKICAgJ2NyZWF0ZWFzLmMnLAogICAnZGJjb21tYW5kcy5jJywKKyAgJ2RkbF9kZXBhcnNl LmMnLAorICAnZGRsX2pzb24uYycsCiAgICdkZWZpbmUuYycsCiAgICdkaXNjYXJkLmMnLAogICAn ZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAzODEwZGU3YjIyLi43YTlk ODQ2MzAzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODkxLDQgKzExODkxLDEwIEBA CiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4 X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlf c2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNv bW1hbmQgaW50byBKU09OIGZvcm1hdCBzdHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJz ZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19k ZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwg Y29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJv cmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdk ZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRl eCBjZmVjYTk2ZDUzLi42ZjE0MWY0YTg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xOTYz LDYgKzE5NjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlclRhYmxlU3RtdAogCUxpc3QJICAgKmNt ZHM7CQkJLyogbGlzdCBvZiBzdWJjb21tYW5kcyAqLwogCU9iamVjdFR5cGUJb2JqdHlwZTsJCS8q IHR5cGUgb2Ygb2JqZWN0ICovCiAJYm9vbAkJbWlzc2luZ19vazsJCS8qIHNraXAgZXJyb3IgaWYg dGFibGUgbWlzc2luZyAqLworCWJvb2wgICAgICAgIHRhYmxlX2xpa2U7CQkvKiBpbnRlcm5hbGx5 IGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlICovCiB9IEFsdGVyVGFibGVTdG10OwogCiB0 eXBlZGVmIGVudW0gQWx0ZXJUYWJsZVR5cGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3Av ZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45YzI1NDljOTRjCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFUEFSU0VfSAorI2RlZmlu ZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorCitl eHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21k LCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19z dHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJvcF9jb21tYW5kKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkJCQkg IERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKworI2VuZGlmCQkJCQkJCS8qIERETF9ERVBBUlNF X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1ODU4MTBiOWEuLjFmY2Ey MjdmMDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0 eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlT Q1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0 ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENv bGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMzksNiArNDAsNyBAQCB0eXBlZGVmIHN0cnVj dCBDb2xsZWN0ZWRBVFN1YmNtZAogewogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsJCS8qIGFmZmVj dGVkIGNvbHVtbiwgY29uc3RyYWludCwgaW5kZXgsIC4uLiAqLwogCU5vZGUJICAgKnBhcnNldHJl ZTsKKwljaGFyCSAgICp1c2luZ2V4cHI7CiB9IENvbGxlY3RlZEFUU3ViY21kOwogCiB0eXBlZGVm IHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCkBAIC02Miw2ICs2NCw3IEBAIHR5cGVkZWYgc3RydWN0 IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFz c0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRl clRhYmxlOwogCkBAIC0xMDAsNiArMTAzLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENv bW1hbmQKIAkJewogCQkJT2JqZWN0VHlwZQlvYmp0eXBlOwogCQl9CQkJZGVmcHJpdnM7CisKKwkJ c3RydWN0CisJCXsKKwkJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9j cmVhdGU7CisJCX0JCQljdGFzOwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQg KnBhcmVudDsJLyogd2hlbiBuZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXgg MjNiYWZlYzVmNy4uNTk2MmQ2MTk1OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2 MTIsNiArMTYxMiw5IEBAIE9TSW5mbwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBF RAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNj ZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxODUsNiArMzE4 OCw3IEBAIGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29m X2xldmVsX2NvbnRleHQKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgog Y29weV9kYXRhX2Rlc3RfY2IKIGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAK Mi4zNC4xCgo= --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v61-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581tz4 RnJvbSAyYjVlYTE0YjYxMTFmZDY5YjFiZDUzNzVlMTMwMGM2YTdhNmQyZTVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IE1vbiwgOSBKYW4gMjAyMyAwOTozMjowOSArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjYxIDUvN10g RERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKRERMIG1l c3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0KIGNvbnRyaWIv dGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICB8ICAyNiArKysrCiBjb250cmli L3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi90 ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyAgICAgICAgIHwgIDQ4ICsrKysrKysKIHNyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiAuLi4vYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysrKysrKwogc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg0ICsrKysrKysrKysrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrKysr Kwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDQ0ICsr KysrKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAgICAgIHwgIDI0 ICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICB8ICAg MSArCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMjcg KysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAg ICAgICB8ICAgOCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oICAgICAg ICAgIHwgIDYwICsrKysrKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4u aCAgICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5o ICAgICAgIHwgIDI3ICsrKysKIDIxIGZpbGVzIGNoYW5nZWQsIDU2OCBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxt c2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBl Y3RlZC9kZGwub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKaW5k ZXggOWEyOGI1ZGRjNS4uMGY1MWYyYjQxYSAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2RlY29k aW5nL2V4cGVjdGVkL2RkbC5vdXQKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVk L2RkbC5vdXQKQEAgLTgzMSw2ICs4MzEsMzIgQEAgU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmMKIC0t LS0tLQogKDAgcm93cykKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRf ZGRsX21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CisgP2NvbHVtbj8gCist LS0tLS0tLS0tCisgZGRsIG1zZzEKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMicgRlJPTSBw Z19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYzOTQsIDEsICd7ImZtdCI6 ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlv bn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFU SU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXph dGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7CisgP2NvbHVtbj8gCist LS0tLS0tLS0tCisgZGRsIG1zZzIKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMycgRlJPTSBw Z19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2czJywgMTYzOTQsIDEsICd7ImZtdCI6 ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRp dHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMg JXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9j bGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJl bGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czos IH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7 ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2Us ICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQ QUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxs fSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJl c2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2Rl ZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nl c3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFi bGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2Nv bHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdl IjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19XX19Jyk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1z ZzMKKygxIHJvdykKKworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5n ZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdz a2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 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 LS0tLS0tLS0tLS0tLS0tLS0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cxLCByZWxpZDogMTYz OTQsIGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiA0IGNvbnRlbnQ6bXNnMQorIG1lc3NhZ2U6IHBy ZWZpeDogZGRsIG1zZzIsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJvcCBzdGFydCwgc3o6IDIx NyBjb250ZW50OnsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsi Zm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0K KyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2czLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Ag c3RhcnQsIHN6OiAxMzk2IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBU QUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9 cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25f Ynl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9i am5hbWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6 IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJw cmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29t bWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0s ICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVz ZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0 aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25f YnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZh bHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5H ICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBu dWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7 bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1z ICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVt bn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9k IjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1l IjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQi OiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIs ICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6 IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjog eyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fQorKDMg cm93cykKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90 Jyk7CiAgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbCBiL2NvbnRy aWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAppbmRleCA0Zjc2YmVkNzJjLi4xZWE1YTRiMjcx IDEwMDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKKysrIGIvY29u dHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCkBAIC00MzEsNiArNDMxLDExIEBAIFNFTEVD VCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3Qn LCBOVUxMLCBOVUxMLCAnaW5jCiAtLSBkb25lLCBmcmVlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xv dAogU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Np b25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhh Y3RzJywgJzEnKTsKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CitTRUxFQ1QgJ2RkbCBtc2cy JyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAxNjM5NCwgMSwg J3siZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFV VEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJh dXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0nKTsKK1NFTEVD VCAnZGRsIG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMycs IDE2Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25v dF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0 c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vz c19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9v IiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklO SEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFs c2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMi LCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNl IjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2Us ICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7 ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6 ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5p dGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21l dGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25v dF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29s dHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9u fXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUi OiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBh cnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFs b2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJu b3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50Ijog ZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNP TVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29t cHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VO RVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworU0VMRUNUIGRhdGEg RlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEws IE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKwog U0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7CiAKIC8q IGNoZWNrIHRoYXQgdGhlIHNsb3QgaXMgZ29uZSAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0 X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2Rl Y29kaW5nLmMKaW5kZXggZTUyM2QyMmViYS4uY2FiZjBiYzFkOSAxMDA2NDQKLS0tIGEvY29udHJp Yi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rlc3RfZGVjb2Rp bmcvdGVzdF9kZWNvZGluZy5jCkBAIC0xNCw5ICsxNCwxMSBAQAogCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCiAKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdp bi5oIgogCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKQEAgLTcyLDYgKzc0LDEyIEBAIHN0YXRpYyB2b2lkIHBnX2RlY29kZV9tZXNz YWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNv bnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Oworc3RhdGljIHZvaWQgcGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKKwkJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCBy ZWxpZCwKKwkJCQkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAg U2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ19kZWNvZGVfZmls dGVyX3ByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJIFRyYW5z YWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmdpZCk7CkBAIC0xMzcsNiArMTQ1 LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQog CWNiLT5maWx0ZXJfYnlfb3JpZ2luX2NiID0gcGdfZGVjb2RlX2ZpbHRlcjsKIAljYi0+c2h1dGRv d25fY2IgPSBwZ19kZWNvZGVfc2h1dGRvd247CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ19kZWNvZGVf bWVzc2FnZTsKKwljYi0+ZGRsX2NiID0gcGdfZGVjb2RlX2RkbF9tZXNzYWdlOwogCWNiLT5maWx0 ZXJfcHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0ZXJfcHJlcGFyZTsKIAljYi0+YmVnaW5fcHJl cGFyZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9wcmVwYXJlX3R4bjsKIAljYi0+cHJlcGFyZV9jYiA9 IHBnX2RlY29kZV9wcmVwYXJlX3R4bjsKQEAgLTc1Miw2ICs3NjEsNDUgQEAgcGdfZGVjb2RlX21l c3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCU91dHB1dFBsdWdpbldyaXRlKGN0 eCwgdHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ19kZWNvZGVfZGRsX21lc3NhZ2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJ CSAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNz YWdlKQoreworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWFwcGVuZFN0 cmluZ0luZm8oY3R4LT5vdXQsICJtZXNzYWdlOiBwcmVmaXg6ICVzLCByZWxpZDogJXUsICIsCisJ CQkJCSBwcmVmaXgsIHJlbGlkKTsKKworCXN3aXRjaChjbWR0eXBlKQorCXsKKwljYXNlIERDVF9T aW1wbGVDbWQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBTaW1wbGUs ICIpOworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJYXBwZW5kU3RyaW5n SW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IERyb3Agc3RhcnQsICIpOworCQlicmVhazsKKwljYXNl IERDVF9UYWJsZURyb3BFbmQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBl OiBEcm9wIGVuZCwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCWFwcGVu ZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBBbHRlciB0YWJsZSwgIik7CisJCWJyZWFr OworCWNhc2UgRENUX09iamVjdENyZWF0ZToKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwg ImNtZHR5cGU6IENyZWF0ZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX09iamVjdERyb3A6CisJ CWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wLCAiKTsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IEludmFs aWQsICIpOworCQlicmVhazsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAic3o6 ICV6dSBjb250ZW50OiIsIHN6KTsKKwlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGN0eC0+b3V0LCBt ZXNzYWdlLCBzeik7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKK30KKwogc3RhdGlj IHZvaWQKIHBnX2RlY29kZV9zdHJlYW1fc3RhcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAogCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv TWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uMmZmMDFlNjliZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBPQkpTID0gXAogCWdpc3RkZXNjLm8g XAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAog CWxvZ2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8gXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNWU5MzBjOTBjCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAs MCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2Mu YworICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwv ZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNn X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJ ICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVj R2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xP R0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9 ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxy ZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVj LT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4 bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi cHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhs cmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNt ZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVz c2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQg PSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0p OworCQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxt c2dfaWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykg PT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCI7CisKKwlyZXR1cm4g TlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAppbmRleCAxNjZj ZWU2N2I2Li43ODFlMmQ3NzEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1 aWxkCkBAIC0xMSw2ICsxMSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMoCiAgICdnaXN0 ZGVzYy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICdsb2dpY2FsZGRs bXNnZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAn bmJ0ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3Iu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA3ZDY3ZWRhNWY3Li42 NzhlODFhZTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsyNyw3IEBA CiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvTWFrZWZpbGUKaW5kZXggMmRjMjVlMzdiYi4uZDM2ODBlOWJiNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRl IENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJYXBwbHlw YXJhbGxlbHdvcmtlci5vIFwKKwlkZGxtZXNzYWdlLm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hl ci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rk bG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lMTFlNTZl NWEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog ZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdo dCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1l c3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cg WExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0 byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3Npbmcg dGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2Fs IG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAq IG1vZGUuIE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9u YWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlv biBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1l IHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJl Zml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1 Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlx dWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVz ZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIK KyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNw YWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVz LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICog V3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dS ZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdl LCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJIC8q IEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICovCisJQXNzZXJ0KElzVHJh bnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMu ZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUg bG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4 KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlk OworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExv Z1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsK KwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVm aXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSks IHNpemUpOworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRG bGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lD QUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRv IGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2Vz LgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQp Cit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01B U0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFO SUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJ LyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVj b2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRl eCBhNTNlMjNjNjc5Li40MTUxYWE3MzBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxz LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdl LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02MDMsNiArNjA0LDQ2IEBA IGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29y ZEJ1ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZp eF9zaXplKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3Jk cyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNh bGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVy ICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsK KwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9 IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5Y TFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4o cik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhM T0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9H SUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQ cm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsK KworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0 LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3Nh Z2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJ TERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJ bWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOwor CisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZp bHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWls ZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVm ZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJ CQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4 ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2Ut Pm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxp ZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJl Y29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJl Y29yZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2lj YWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDFh NThkZDc2NDkuLmQ1YWZhZTlkOTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv bG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgi CkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNz YWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWws CiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVz c2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29u c3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2 b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCkBAIC0yMTgsNiArMjIzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4 dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5hcHBseV90cnVu Y2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21taXQgPSBjb21t aXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dyYXBw ZXI7CisJY3R4LT5yZW9yZGVyLT5kZGwgPSBkZGxfY2Jfd3JhcHBlcjsKIAogCS8qCiAJICogVG8g c3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9jb21taXQvY2hh bmdlCkBAIC0xMjIyLDYgKzEyMjgsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9 IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorZGRsX2NiX3dyYXBwZXIo UmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUs CisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUg c3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0 eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxfY2IgPT0gTlVMTCkK KwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRl eHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJk ZGwiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNr LmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5h cmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250 ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBz ZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndy aXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK KwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFs IHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxfY2IoY3R4LCB0eG4s IG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9z aXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZv aWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCmluZGV4IGZhMWI2NDFhMmIu LjkyZjVmOTM1N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv bG9naWNhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dp Y2FsZnVuY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNs dWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMzg4LDMgKzM4OSwyNiBAQCBwZ19sb2dpY2FsX2VtaXRf bWVzc2FnZV90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogYnl0ZWEgYW5kIHRleHQgYXJlIGNv bXBhdGlibGUgKi8KIAlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X21lc3NhZ2VfYnl0ZWEoZmNpbmZv KTsKIH0KKworLyoKKyAqIFNRTCBmdW5jdGlvbiBmb3Igd3JpdGluZyBsb2dpY2FsIGRlY29kaW5n IERETCBtZXNzYWdlIGludG8gV0FMLgorICovCitEYXR1bQorcGdfbG9naWNhbF9lbWl0X2RkbF9t ZXNzYWdlX2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqcHJlZml4ID0gdGV4 dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlPaWQJCQlyZWxpZCA9IFBHX0dF VEFSR19PSUQoMSk7CisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlID0gUEdfR0VUQVJHX0lO VDE2KDIpOworCWNoYXIJICAgKmRhdGEgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRf UFAoMykpOworCVhMb2dSZWNQdHIJbHNuOworCisJbHNuID0gTG9nTG9naWNhbERETE1lc3NhZ2Uo cHJlZml4LCByZWxpZCwgY21kdHlwZSwgZGF0YSwgc3RybGVuKGRhdGEpKTsKKwlQR19SRVRVUk5f TFNOKGxzbik7Cit9CisKK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfdGV4dChQ R19GVU5DVElPTl9BUkdTKQoreworCS8qIGJ5dGVhIGFuZCB0ZXh0IGFyZSBjb21wYXRpYmxlICov CisJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRlYShmY2luZm8pOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXggZDQ4Y2Q0 YzU5MC4uOTljNjA4ZDAzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21l c29uLmJ1aWxkCkBAIC0yLDYgKzIsNyBAQAogCiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAg ICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAorICAnZGRsbWVzc2FnZS5jJywKICAgJ2RlY29kZS5j JywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggNTRlZTgyNGU2Yy4uOWE3ZGM5 ZTQwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVy YnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3QuaCIKQEAgLTUxNiw2ICs1MTcsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBm cmVlKGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoK KwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5n ZS0+ZGF0YS5kZGwucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gTlVMTDsK KwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFu Z2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gTlVM TDsKKwkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CiAJCQlpZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hh bmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODk0LDYgKzkwMywzNiBAQCBSZW9y ZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAl9CiB9CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMgcXVldWVk IHRvIGJlIHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1 ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJ CQkJIFhMb2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJ UmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29u dGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2Ut PmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw7CisJY2hhbmdlLT5kYXRhLmRkbC5w cmVmaXggPSBwc3RyZHVwKHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCA9IHJlbGlk OworCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRk bC5tZXNzYWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdl ID0gcGFsbG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGwubWVzc2Fn ZSwgbWVzc2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShy YiwgeGlkLCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNO IG9yZGVyaW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCkBAIC0y MDAyLDYgKzIwNDEsMjEgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVmZmVy ICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UpOwogfQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVmZmVyUHJvY2Vz c1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHZv aWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBi b29sIHN0cmVhbWluZykKK3sKKwlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJY2hh bmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQljaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJY2hh bmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUs CisJCQljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworfQorCiAvKgogICogRnVuY3Rpb24gdG8g c3RvcmUgdGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJl bnQKICAqIHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5kaW5n IHRoZSBuZXh0IHN0cmVhbS4KQEAgLTIzODIsNiArMjQzNiwxMCBAQCBSZW9yZGVyQnVmZmVyUHJv Y2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlS ZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJ CQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQkJCVJl b3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOwor CQkJCQlicmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElP TjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2FsbHkgKi8K IAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0YS5pbnZh bC5uaW52YWxpZGF0aW9ucywKQEAgLTM4MjEsNiArMzg3OSwzOSBAQCBSZW9yZGVyQnVmZmVyU2Vy aWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNoYW5n ZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNp emUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisK KwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsK KwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihT aXplKTsKKwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJ ZGF0YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0No YW5nZSk7CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJ CQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJ CS8qIHdyaXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6 ZSAqLworCQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJ ZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRs LnJlbGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1j cHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwgc2l6ZW9mKERlcGFyc2VkQ29tbWFu ZFR5cGUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFu Z2UtPmRhdGEuZGRsLnByZWZpeCwgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3Np emU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJ CQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6 ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2Ut PmRhdGEuZGRsLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXpl KTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplOworCiAJCQkJYnJl YWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAg LTQxMzUsNiArNDIyNiwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSArCiAJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKTsKIAorCQkJ CWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJ CQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgpICsg MTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3Np emUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNp emVvZihEZXBhcnNlZENvbW1hbmRUeXBlKTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00NDEyLDYgKzQ1MTIsMzMgQEAg UmVvcmRlckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJ CWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJ CX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJCXBy ZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9z aXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJ CW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5 cGUsIGRhdGEsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXpl b2YoaW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxv YyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRs LnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRs LnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3Np emU7CisKKwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNp emVvZihTaXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0 QWxsb2MocmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVz c2FnZV9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAor CQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4 IDZiOGMxN2JiNGMuLmRhZjE3MzAyNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9y bWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNiw2ICsy Niw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kc194bG9nLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L21lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJy bWdyZGVzYy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggYi9z cmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCA0NjNiY2I2N2M1Li5hYmNiZTk3NTkz IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NPTU1J VF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21t aXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCBy ZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBn ZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwg Z2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1l c3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVu dGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJNX0xP R0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVkbywg bG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBO VUxMLCBsb2dpY2FsZGRsX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDdhOWQ4 NDYzMDMuLmY1ZDFiMDEwMWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTEwMDQsNiAr MTEwMDQsMTQgQEAKICAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X21lc3NhZ2UnLCBwcm92 b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICd1JywKICAgcHJvcmV0dHlwZSA9PiAncGdf bHNuJywgcHJvYXJndHlwZXMgPT4gJ2Jvb2wgdGV4dCBieXRlYScsCiAgIHByb3NyYyA9PiAncGdf bG9naWNhbF9lbWl0X21lc3NhZ2VfYnl0ZWEnIH0sCit7IG9pZCA9PiAnMzgxMycsIGRlc2NyID0+ ICdlbWl0IGEgdGV4dHVhbCBsb2dpY2FsIGRlY29kaW5nIG1lc3NhZ2UnLAorICBwcm9uYW1lID0+ ICdwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3Bh cmFsbGVsID0+ICd1JywKKyAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4g J2Jvb2wgdGV4dCB0ZXh0JywKKyAgcHJvc3JjID0+ICdwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3Nh Z2VfdGV4dCcgfSwKK3sgb2lkID0+ICczODE0JywgZGVzY3IgPT4gJ2VtaXQgYSBiaW5hcnkgbG9n aWNhbCBkZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X2Rk bF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHBy b3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHJlZ2NsYXNzIGludDQg dGV4dCcsCisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhJyB9 LAogCiAjIGV2ZW50IHRyaWdnZXJzCiB7IG9pZCA9PiAnMzU2NicsIGRlc2NyID0+ICdsaXN0IG9i amVjdHMgZHJvcHBlZCBieSB0aGUgY3VycmVudCBjb21tYW5kJywKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43N2Rm NmVhMTFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVz c2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVzc2Fn ZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKyNk ZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5o IgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVh ZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBmb3Ig a2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIERl cGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BTdGFy dCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RDcmVh dGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAqIEdl bmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0eXBl ZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJZGJJZDsJCQkvKiBk YXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJcHJlZml4X3NpemU7CS8qIGxlbmd0 aCBvZiBwcmVmaXggaW5jbHVkaW5nIG51bGwgdGVybWluYXRvciAqLworCU9pZAkJCXJlbGlkOwkJ CS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsJLyog dHlwZSBvZiBzcWwgY29tbWFuZCAqLworCVNpemUJCW1lc3NhZ2Vfc2l6ZTsJLyogc2l6ZSBvZiB0 aGUgbWVzc2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10ZXJtaW5h dGVkIHByZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNzYWdlW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisKKyNkZWZp bmUgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRsX21lc3Nh Z2UsIG1lc3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVzc2FnZShj b25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl LAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXplKTsKKwor LyogUk1HUiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgwMAordm9p ZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3ZvaWQJCWxv Z2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQp OworY29uc3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDE0ZmE5MjFhYjQuLmM5YWM3MDhkMzIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lk IGhlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29k ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBl eHRlcm4gdm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsX2RlY29kZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIGV4 dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggMmQ4OWQyNjU4Ni4uNWVkNWU2YTdi YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOSw2ICs5LDcg QEAKICNpZm5kZWYgT1VUUFVUX1BMVUdJTl9ICiAjZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCIKIAogc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC05 MCw2ICs5MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3Ry dWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlTaXplIG1lc3NhZ2Vf c2l6ZSwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxlZCBm b3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQg KCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9y aWdpbi4KICAqLwpAQCAtMjIxLDYgKzIzNCw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdp bkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2lj YWxEZWNvZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNz YWdlX2NiOworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsX2NiOwogCUxvZ2ljYWxEZWNv ZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNo dXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaAppbmRleCBmNmM0ZGQ3NWRiLi43YjZhNjMzMWJiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMv bm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAi dXRpbHMvcmVsY2FjaGUuaCIKQEAgLTY0LDYgKzY2LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJC dWZmZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVS X0JVRkZFUl9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FH RSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzOCw2ICsxNDEsMTYgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1z ZzsKIAorCQkvKiBEREwgKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJ CVNpemUJCW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxp ZDsKKwkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJfQkJCWRkbDsKKwogCQkvKiBO ZXcgc25hcHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJ CVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC00NTEsNiArNDY0LDE2IEBAIHR5cGVkZWYgdm9pZCAo KlJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQlj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2Fn ZSk7CiAKKy8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lk ICgqUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJ CQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkg ICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisKIC8qIGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQg KCpSZW9yZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJ CQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01NjcsNiArNTkwLDcgQEAgc3RydWN0 IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5j YXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3Nh Z2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsOwogCiAJLyoKIAkg KiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQg cHJlcGFyZSB0aW1lLgpAQCAtNjY1LDYgKzY4OSw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZm ZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJ CQkJCQkJICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0 cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2Fn ZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJR dWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRy IGxzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwK KwkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVy QnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0 X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGlt ZSwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwotLSAKMi4z NC4xCgo= --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v61-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581ty3 RnJvbSA4OGQwYmIzODc4NmJiOTE0NTUxNTE4ZDgwMWU0ZGRmZWJiYWNhOTlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMTMgSmFuIDIwMjMgMTA6NDE6MDQgKzA1MzAKU3ViamVjdDogW1BBVENIIHY2MSA0Lzdd IEludHJvZHVjZSB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIHRlc3QgbW9kdWxlLgoKVGhp cyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBmb3VyIHRlc3Rp bmcgZ29hbHMgZm9yIHRoZSBEREwgZGVwYXJzZXI6CjEuIFRlc3QgdGhhdCB0aGUgZ2VuZXJhdGVk IEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCjIuIFRlc3QgdGhhdCB0aGUg cmUtZm9ybWVkIERETCBjb21tYW5kIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMy4gVGVz dCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0 aGUgb3JpZ2luYWwgY29tbWFuZCBieSBjb21wYXJpbmcKICAgdGhlIHJlc3VsdHMgb2YgcGdfZHVt cCwgdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAxIGFuZCAyLgo0LiBUZXN0IHRoYXQgbmV3IERETCBz eW50YXggaXMgaGFuZGxlZCBieSB0aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmluZyBhbmQgZGVw YXJpbmcgRERMIGNvbW1hbmRzCiAgIHJhbiBieSBwZ19yZWdyZXNzLgoKMSBhbmQgMiBpcyB0ZXN0 ZWQgd2l0aCBTUUwgdGVzdHMsIGJ5IHByaW50aW5nIHRoZSBkZXBhcnNlZCBKU09OIGJsb2IgYW5k IHRoZSByZS1mb3JtZWQgY29tbWFuZC4KCkdvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3 b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKCkdvYWwgNCBpcyB0ZXN0ZWQg d2l0aCBUQVAgZnJhbWV3b3JrIGFuZCBwZ19yZWdyZXNzIGluIDAwMl9yZWdyZXNzX3Rlc3RzLnBs LCB0aGUgZXhlY3V0aW9uIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgd2ls bCBmYWlsIGR1ZSB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVwYXJzZXIuCi0t LQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZSAgICAgICB8ICAgNCArCiAu Li4vbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgfCAgNDQgKysrKwog Li4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgICAgICAgIHwgIDIyICsrCiAu Li4vZXhwZWN0ZWQvYWdncmVnYXRlLm91dCAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogLi4u L2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0ICAgICAgICAgICAgIHwgICA2ICsKIC4uLi9l eHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCAgICAgICAgICAgICAgICB8ICAyMiArKwogLi4uL2V4 cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgICAgICAgICAgICAgICAgIHwgIDM2ICsrKwogLi4uL2V4 cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0ICAgICAgICAgICAgIHwgIDE4ICsrCiAuLi4vdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkICAgICAgfCAgNDIgKysrKwogLi4uL3Nx bC9hZ2dyZWdhdGUuc3FsICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIC4uLi9zcWwv Y3JlYXRlX2V4dGVuc2lvbi5zcWwgICAgICAgICAgICAgICAgICB8ICAgNSArCiAuLi4vc3FsL2Ny ZWF0ZV9zY2hlbWEuc3FsICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKysKIC4uLi9zcWwvY3Jl YXRlX3RhYmxlLnNxbCAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogLi4uL3NxbC90ZXN0 X2RkbF9kZXBhcnNlLnNxbCAgICAgICAgICAgICAgICAgIHwgIDIwICsrCiAuLi4vdC8wMDFfY29t cGFyZV9kdW1wZWRfcmVzdWx0cy5wbCAgICAgICAgICAgfCAxODEgKysrKysrKysrKysrKysrCiAu Li4vdC8wMDJfcmVncmVzc190ZXN0cy5wbCAgICAgICAgICAgICAgICAgICAgfCAyMDcgKysrKysr KysrKysrKysrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsICAgICAg ICAgfCAgIDkgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jICAgICAgICAgICAgICAg IHwgIDU5ICsrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wgICAgICAg ICAgfCAgIDQgKwogMjAgZmlsZXMgY2hhbmdlZCwgNzI3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0 aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdh dGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9j cmVhdGVfc2NoZW1hLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FnZ3Jl Z2F0ZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3Nj aGVtYS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBh cnNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9y ZWdyZXNzX3Rlc3RzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGM2MjljYmUzODMuLmMyNzJjNjRhMjAgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfY29weV9jYWxs YmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKIAkJICB0ZXN0X2RkbF9kZXBhcnNlIFwK KwkJICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgXAogCQkgIHRlc3RfZXh0ZW5zaW9ucyBcCiAJ CSAgdGVzdF9naW5wb3N0aW5nbGlzdCBcCiAJCSAgdGVzdF9pbnRlZ2Vyc2V0IFwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVkY2IzZmY5NzIKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9sb2cv CisvcmVzdWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjVkNWE5ZTg2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ0IEBACisjLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisjCisj IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCisjCisj LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCisKK01PRFVMRVMgPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MK K1BHRklMRURFU0MgPSAidGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0 aW5nIGZvciBEREwgZGVwYXJzaW5nIgorCitFWFRFTlNJT04gPSB0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MKK0RBVEEgPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwKKworIyB0ZXN0 X2RkbF9kZXBhcnNlIG11c3QgYmUgZmlyc3QKK1JFR1JFU1MgPSB0ZXN0X2RkbF9kZXBhcnNlIFwK KwljcmVhdGVfZXh0ZW5zaW9uIFwKKwljcmVhdGVfc2NoZW1hIFwKKwljcmVhdGVfdGFibGUgXAor CWFnZ3JlZ2F0ZQorCitleHBvcnQgUkVHUkVTUworCitFWFRSQV9JTlNUQUxMID0gY29udHJpYi9w Z19zdGF0X3N0YXRlbWVudHMKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdf Q09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykK K2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQo dG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2Rpcikv Y29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworUkVHUkVTU19TSExJQj0kKGFic190 b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQg UkVHUkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvUkVBRE1FLm1kIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmNjMjUxOTg5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKQEAgLTAsMCArMSwyMiBAQAorIyBUZXN0aW5nIGhh cm5lc3MgZm9yIERETCBkZXBhcnNlcgorCisjIyBUZXN0aW5nIGdvYWxzCisKK0RETCBEZXBhcnNl ciBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBlbmNvZGUgdGhlIG9yaWdpbmFsIERETCBjb21tYW5k IHRvIGEgSlNPTiBzdHJpbmcsIHRoZW4gZGVjb2RlIGl0IHRvIGEgZnVsbHkgc2NoZW1hLXF1YWxp ZmllZCBEREwgY29tbWFuZCB3aGljaCBpcyBzdXBwb3NlZCB0byBoYXZlIHRoZSBzYW1lIGVmZmVj dCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZC4gVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFj aGlldmUgdGhlIGZvbGxvd2luZyBmb3VyIHRlc3RpbmcgZm9yIHRoZSBEREwgZGVwYXJzZXI6CisK KzEuIFRlc3QgdGhhdCB0aGUgZ2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBT UUwgdGVzdHMuCisyLiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBpcyBleHBl Y3RlZCB1c2luZyBTUUwgdGVzdHMuCiszLiBUZXN0CXRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29t bWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kCisgICBieSBj b21wYXJpbmcJdGhlIHJlc3VsdHMgb2YgcGdfZHVtcCwJdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAx IGFuZCAyLgorNC4gVGVzdAl0aGF0IG5ldyBEREwgc3ludGF4IGlzIGhhbmRsZWQgYnkgdGhlIERE TCBkZXBhcnNlciBieSBjYXB0dXJpbmcgYW5kIGRlcGFyaW5nCisgICBEREwgY29tbWFuZHMJcmFu IGJ5IHBnX3JlZ3Jlc3MuCisKKzEgYW5kIDIgaXMgdGVzdGVkIHdpdGggU1FMIHRlc3RzLCBieSBu b3RpY2luZyB0aGUgZGVwYXJzZWQgSlNPTiBibG9iIGFuZCB0aGUgcmUtZm9ybWVkIGNvbW1hbmQu CisKK0dvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVf ZHVtcGVkX3Jlc3VsdHMucGwKKworR29hbCA0IGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsg YW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVzdHMucGwKKworIyMgVXNhZ2UKKworUnVu IGBtYWtlIGNoZWNrYCwgaXQgd2lsbCBydW4gdGhlIFNRTCB0ZXN0cyBmaXJzdCwgdGhlbiBpdCB3 aWxsIHJ1biB0aGUgVEFQIHRlc3RzLiBUaGUgZXhlY3V0aW9uIG9mIDAwMl9yZWdyZXNzX3Rlc3Rz LnBsIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgd2lsbCBmYWlsIGR1ZSB0 byB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVwYXJzZXIuCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dy ZWdhdGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvYWdncmVnYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5lOTM5NWQwNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlLm91dApAQCAtMCwwICsxLDggQEAK K0NSRUFURSBBR0dSRUdBVEUgbmV3YXZnKGludDQpICgKKyAgIHNmdW5jID0gaW50NF9hdmdfYWNj dW0sIHN0eXBlID0gX2ludDgsCisgICBmaW5hbGZ1bmMgPSBpbnQ4X2F2ZywKKyAgIGluaXRjb25k MSA9ICd7MCwwfScKKyk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUg QUdHUkVHQVRFICV7aWRlbnRpdHl9RCAoJXt0eXBlc31zKSAoJXtlbGVtczosIH1zKSIsICJlbGVt cyI6IFt7ImZtdCI6ICJTRlVOQz0le3Byb2NlZHVyZX1EIiwgInByb2NlZHVyZSI6IHsib2JqbmFt ZSI6ICJpbnQ0X2F2Z19hY2N1bSIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sIHsiZm10 IjogIlNUWVBFPSV7dHlwZX1UIiwgInR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiB0 cnVlLCAidHlwZW5hbWUiOiAiaW50OCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sIHsi Zm10IjogIlNTUEFDRT0le3NwYWNlfW4iLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiRklO QUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJvY2VkdXJlIjogeyJvYmpuYW1lIjogImludDhfYXZn IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgeyJmbXQiOiAiRklOQUxGVU5DX0VYVFJB PSV7dmFsdWV9cyIsICJ2YWx1ZSI6ICJmYWxzZSJ9LCB7ImZtdCI6ICJJTklUQ09ORD0le2luaXR2 YWx9TCIsICJpbml0dmFsIjogInswLDB9In0sIHsiZm10IjogIk1TRlVOQz0le3Byb2NlZHVyZX1E IiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1TVFlQRT0le3R5cGV9VCIsICJwcmVzZW50 IjogZmFsc2V9LCB7ImZtdCI6ICJNU1NQQUNFPSV7c3BhY2V9biIsICJwcmVzZW50IjogZmFsc2V9 LCB7ImZtdCI6ICJNSU5WRlVOQz09JXt0eXBlfVQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQi OiAiTUZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10Ijog Ik1GSU5BTEZVTkNfRVhUUkE9JXt2YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10Ijog Ik1JTklUQ09ORD0le2luaXR2YWx9TCIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJIWVBP VEhFVElDQUw9JXt2YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIlNPUlRPUD0l e29wZXJhdG9yfUQiLCAicHJlc2VudCI6IGZhbHNlfV0sICJ0eXBlcyI6IHsiZm10IjogIiV7ZGly ZWN0OiwgfXMiLCAiZGlyZWN0IjogW3siZm10IjogIiV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1U IiwgIm1vZGUiOiAiIiwgIm5hbWUiOiAiIiwgInR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJy YXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9n In19XX0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJuZXdhdmciLCAic2NoZW1hbmFtZSI6ICJw dWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgQUdHUkVHQVRFIHB1 YmxpYy5uZXdhdmcgKCAgcGdfY2F0YWxvZy5pbnQ0KSAoU0ZVTkM9cGdfY2F0YWxvZy5pbnQ0X2F2 Z19hY2N1bSwgU1RZUEU9cGdfY2F0YWxvZy5pbnQ4W10sIEZJTkFMRlVOQz1wZ19jYXRhbG9nLmlu dDhfYXZnLCBGSU5BTEZVTkNfRVhUUkE9ZmFsc2UsIElOSVRDT05EPSd7MCwwfScpCitEUk9QIEFH R1JFR0FURSBuZXdhdmcoaW50NCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dCBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRl bnNpb24ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA2Y2NjNjJi YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dApAQCAtMCwwICsxLDYgQEAKKy0t LQorLS0tIENSRUFURV9FWFRFTlNJT04KKy0tLQorQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0 YXRlbWVudHM7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgRVhURU5T SU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMiLCAibmFtZSI6ICJw Z19zdGF0X3N0YXRlbWVudHMiLCAib3B0aW9ucyI6IFt7ImZtdCI6ICJTQ0hFTUEgJXtzY2hlbWF9 SSIsICJ0eXBlIjogInNjaGVtYSIsICJzY2hlbWEiOiAicHVibGljIn1dLCAiaWZfbm90X2V4aXN0 cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBFWFRFTlNJT04gIHBn X3N0YXRfc3RhdGVtZW50cyBTQ0hFTUEgcHVibGljCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0 ZV9zY2hlbWEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjFlMDlk YTUxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dApAQCAtMCwwICsxLDIyIEBACist LQorLS0gQ1JFQVRFX1NDSEVNQQorLS0KK0NSRUFURSBTQ0hFTUEgZm9vOworTk9USUNFOiAgZGVw YXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25h bWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRob3JpemF0aW9uIjog eyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQi OiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIi fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGZvbyAKK0NSRUFU RSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXI7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZt dCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXph dGlvbn1zIiwgIm5hbWUiOiAiYmFyIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJ WkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9y aXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIklGIE5PVCBFWElTVFMifQor Tk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBi YXIgCitDUkVBVEUgU0NIRU1BIGJhejsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10Ijog IkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9u fXMiLCAibmFtZSI6ICJiYXoiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJ T04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0 aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBiYXogCistLSBXaWxsIG5vdCBiZSBjcmVhdGVkLCBh bmQgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUKKy0tIGV2ZW50IHRyaWdnZXIKK0NSRUFURSBT Q0hFTUEgSUYgTk9UIEVYSVNUUyBiYXo7CitOT1RJQ0U6ICBzY2hlbWEgImJheiIgYWxyZWFkeSBl eGlzdHMsIHNraXBwaW5nCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRfdGVzdAorICBDUkVBVEUgVEFC TEUgZm9vIChpZCBpbnQpCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUg U0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5h bWUiOiAiZWxlbWVudF90ZXN0IiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFU SU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXph dGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3Jt ZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZWxlbWVudF90ZXN0IAorTk9USUNFOiAgZGVwYXJz ZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31z ICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19t ZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwg InNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVS SVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9 LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAi cHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjog eyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0 YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZt dCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQ QVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlv biI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9l eGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi aWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJh eSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3Rf bnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFs c2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBS RVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJl c3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJB VEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19CitOT1RJQ0U6ICByZS1mb3JtZWQg Y29tbWFuZDogQ1JFQVRFICBUQUJMRSAgZWxlbWVudF90ZXN0LmZvbyAoaWQgcGdfY2F0YWxvZy5p bnQ0IFNUT1JBR0UgcGxhaW4gICAgICkgICAgICAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVf dGFibGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjllZWFhMWNj YzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CkBAIC0wLDAgKzEsMzYgQEAKK0NSRUFU RSBUQUJMRSBzaW1wbGVfdGFibGUoCisgICAgaWQgaW50LAorICAgIG5hbWUgdmFyY2hhcig1KQor KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNl fXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRz OiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0 aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5Ijog eyJvYmpuYW1lIjogInNpbXBsZV90YWJsZSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5o ZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBu dWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAl e29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6 IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUki LCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAi IiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFy dGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNl bnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6 ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0 aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZt dCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJl c3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRl ZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7 InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJw cmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNP TExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJl c3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2Nv bHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0s IHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtj b21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2Vu ZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0 eXBlIjogeyJ0eXBtb2QiOiAiKDUpIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ2 YXJjaGFyIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10Ijog IkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24i OiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVs dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVk IiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRo b2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdl bmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQi OiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBw dWJsaWMuc2ltcGxlX3RhYmxlIChpZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAg LCBuYW1lIHBnX2NhdGFsb2cuInZhcmNoYXIiKDUpIFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUg cGdfY2F0YWxvZy4iZGVmYXVsdCIgICApICAgICAgCistLSBUZXN0IENSRUFURSBJTkRFWCB3aXRo IGFuIElOQ0xVREUgQ0xBVVNFCitDUkVBVEUgVU5JUVVFIElOREVYIGNvdmVyaW5nX2luZGV4IG9u IHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOworTk9USUNFOiAgZGVwYXJzZWQganNv bjogeyJmbXQiOiAiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lm X25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICV7 ZGVmaW5pdGlvbn1zICV7d2l0aH1zICV7dGFibGVzcGFjZX1zICV7d2hlcmVfY2xhdXNlfXMiLCAi bmFtZSI6ICJjb3ZlcmluZ19pbmRleCIsICJ3aXRoIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50 IjogZmFsc2V9LCAidGFibGUiOiB7Im9iam5hbWUiOiAic2ltcGxlX3RhYmxlIiwgInNjaGVtYW5h bWUiOiAicHVibGljIn0sICJ1bmlxdWUiOiAiVU5JUVVFIiwgImluZGV4X2FtIjogImJ0cmVlIiwg ImRlZmluaXRpb24iOiAiKGlkIHBnX2NhdGFsb2cuaW50NF9vcHMpIElOQ0xVREUgKG5hbWUpIiwg InRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFIiwgInByZXNlbnQiOiBmYWxzZX0sICJj b25jdXJyZW50bHkiOiAiIiwgIndoZXJlX2NsYXVzZSI6IHsiZm10IjogIldIRVJFIiwgInByZXNl bnQiOiBmYWxzZX0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogQ1JFQVRFIFVOSVFVRSBJTkRFWCAgIGNvdmVyaW5nX2luZGV4IE9OIHB1YmxpYy5zaW1w bGVfdGFibGUgVVNJTkcgYnRyZWUgKGlkIHBnX2NhdGFsb2cuaW50NF9vcHMpIElOQ0xVREUgKG5h bWUpICAgCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Blcmx5CitDUkVB VEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJTUFSWSBLRVks IGIgdGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9l bGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAl e3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVu dGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5o ZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBu dWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAl e29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6 IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUki LCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAi IiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFy dGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNl bnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6 ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0 aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZt dCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJl c3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRl ZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFt ZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lv biI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1u IjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJm bXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXBy ZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0 ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7 InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJw cmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNP TExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5h bWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAiY29tcHJlc3Np b24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNl bnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVt biI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsi Zm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJjdGx0 MV9hX2NoZWNrIiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogImNoZWNrIiwgImRl ZmluaXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRh bG9nLj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1z IiwgIm5hbWUiOiAiY3RsdDFfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6 ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9XX0KK05PVElD RTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3RsdDEgKGEgcGdf Y2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVs dCIgICAsIGIgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0 YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgY3RsdDFfYV9jaGVjayBDSEVDSyAoKHBnX2Nh dGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMikpLCBDT05TVFJBSU5UIGN0 bHQxX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjog PE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitBTFRFUiBUQUJMRSBj dGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworTk9USUNFOiAgZGVwYXJzZWQg anNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczos IH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9y YWdlIiwgImNvbHVtbiI6ICJhIiwgInN0b3JhZ2UiOiAibWFpbiJ9XSwgImlkZW50aXR5IjogeyJv YmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1m b3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBhIFNF VCBTVE9SQUdFIG1haW4KK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9S QUdFIEVYVEVSTkFMOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtv Ymp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUi LCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFH RSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJiIiwgInN0 b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJz Y2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVS IFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBleHRlcm5hbAor LS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcg QUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21t YW5kCitDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQp OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9 cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6 LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRp b25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7 Im9iam5hbWUiOiAicHJvZHVjdCIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMi OiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAi cHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2Nv bW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9 LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJl c2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndp dGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9u X2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBm YWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lO RyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjog bnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIl e25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259 cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1 bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1v ZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFt ZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50 IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUi LCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24i OiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQi OiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6 IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjog eyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNj aGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAi cHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJD T0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFu YW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNz aW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVz ZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1 bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7 ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAicHJv ZHVjdF9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5 IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGlkKSJ9XX0KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMucHJvZHVjdCAoaWQgcGdfY2F0YWxvZy5p bnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgbmFtZSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRl bmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBwcm9kdWN0 X3BrZXkgUFJJTUFSWSBLRVkgKGlkKSkgICAgICAKK05PVElDRTogIGRlcGFyc2VkIGpzb246IDxO VUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgorQ1JFQVRFIFRBQkxFIG9y ZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludAorUkVGRVJFTkNF UyBwcm9kdWN0IChpZCkpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRF ICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7 dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29t bWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMi LCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAib3JkZXJzIiwgInNjaGVtYW5hbWUiOiAicHVibGlj In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFy ZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04g Q09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0 X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxl c3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0 ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxz ZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMi LCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6 IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFj Y2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRz IjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMg JXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAib3JkZXJfaWQiLCAidHlwZSI6ICJjb2x1bW4i LCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUi OiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6 ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9u IjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJw bGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25f bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0s ICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVz ZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2Nv bHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJwcm9kdWN0X2lkIiwgInR5 cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxz ZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZh dWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAi IiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNv bHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAl e2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21l dGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdB WVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkg JXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJvcmRlcnNfcGtleSIsICJ0eXBlIjogImNvbnN0cmFp bnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZ IChvcmRlcl9pZCkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJM RSAgcHVibGljLm9yZGVycyAob3JkZXJfaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4g ICAgICwgcHJvZHVjdF9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgLCBDT05T VFJBSU5UIG9yZGVyc19wa2V5IFBSSU1BUlkgS0VZIChvcmRlcl9pZCkpICAgICAgCitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVM TD4KK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7 aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMi OiBbeyJmbXQiOiAiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFt ZSI6ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5IiwgInR5cGUiOiAiYWRkIGNvbnN0cmFpbnQiLCAi ZGVmaW5pdGlvbiI6ICJGT1JFSUdOIEtFWSAocHJvZHVjdF9pZCkgUkVGRVJFTkNFUyBwdWJsaWMu cHJvZHVjdChpZCkifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJvcmRlcnMiLCAic2NoZW1h bmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJM RSBwdWJsaWMub3JkZXJzIEFERCBDT05TVFJBSU5UIG9yZGVyc19wcm9kdWN0X2lkX2ZrZXkgRk9S RUlHTiBLRVkgKHByb2R1Y3RfaWQpIFJFRkVSRU5DRVMgcHVibGljLnByb2R1Y3QoaWQpCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC90ZXN0X2RkbF9kZXBhcnNlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmIwZTJiZjI1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9k ZXBhcnNlLm91dApAQCAtMCwwICsxLDE4IEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2Rl cGFyc2VfcmVncmVzczsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3RfZGRsX2RlcGFy c2UoKQorICBSRVRVUk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0UgcGxwZ3NxbCBBUworJCQKK0RF Q0xBUkUKKwlyIHJlY29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7CitCRUdJTgorCUZPUiByIElO IFNFTEVDVCAqIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQorCUxPT1AKKwkJ ZGVwYXJzZWRfanNvbiA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQp OworCQlSQUlTRSBOT1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBkZXBhcnNlZF9qc29uOworCQlS QUlTRSBOT1RJQ0UgJ3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdfY2F0YWxvZy5kZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQgTE9PUDsKK0VORDsKKyQkOwor Q1JFQVRFIEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRsX2NvbW1hbmRfZW5k IEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uN2ExNTJhMjNlMgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxk CkBAIC0wLDAgKzEsNDIgQEAKKyMgRklYTUU6IHByZXZlbnQgaW5zdGFsbCBkdXJpbmcgbWFpbiBp bnN0YWxsLCBidXQgbm90IGR1cmluZyB0ZXN0IDovCisKK3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz c19zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYycsCispCisK K2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nf c291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsK KyAgICAnLS1OQU1FJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICAgJy0tRklMRURF U0MnLCAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBE REwgZGVwYXJzaW5nJyxdKQorZW5kaWYKKwordGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzID0gc2hh cmVkX21vZHVsZSgndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzX3NvdXJjZXMsCisgIGt3YXJnczogcGdfbW9kX2FyZ3MsCispCit0ZXN0cHJlcF90 YXJnZXRzICs9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcworCitpbnN0YWxsX2RhdGEoCisgICd0 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCcsCisgICd0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MtLTEuMC5zcWwnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0ZXN0 cyArPSB7CisgICduYW1lJzogJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICdzZCc6IG1l c29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2Rp cigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ3Rlc3RfZGRsX2RlcGFy c2UnLAorICAgICAgJ2NyZWF0ZV9leHRlbnNpb24nLAorICAgICAgJ2NyZWF0ZV9zY2hlbWEnLAor ICAgICAgJ2NyZWF0ZV90YWJsZScsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAgICAndGVz dHMnOiBbCisgICAgICAndC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCcsCisgICAgXSwK KyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uNTYxYjRlMTIwYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsCkBAIC0wLDAgKzEs NyBAQAorQ1JFQVRFIEFHR1JFR0FURSBuZXdhdmcoaW50NCkgKAorICAgc2Z1bmMgPSBpbnQ0X2F2 Z19hY2N1bSwgc3R5cGUgPSBfaW50OCwKKyAgIGZpbmFsZnVuYyA9IGludDhfYXZnLAorICAgaW5p dGNvbmQxID0gJ3swLDB9JworKTsKKworRFJPUCBBR0dSRUdBVEUgbmV3YXZnKGludDQpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV9leHRlbnNpb24uc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmQyM2U3ZmQ5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKQEAg LTAsMCArMSw1IEBACistLS0KKy0tLSBDUkVBVEVfRVhURU5TSU9OCistLS0KKworQ1JFQVRFIEVY VEVOU0lPTiBwZ19zdGF0X3N0YXRlbWVudHM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTBiMTNmMGE1NQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Nx bC9jcmVhdGVfc2NoZW1hLnNxbApAQCAtMCwwICsxLDE2IEBACistLQorLS0gQ1JFQVRFX1NDSEVN QQorLS0KKworQ1JFQVRFIFNDSEVNQSBmb287CisKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNU UyBiYXI7CisKK0NSRUFURSBTQ0hFTUEgYmF6OworCistLSBXaWxsIG5vdCBiZSBjcmVhdGVkLCBh bmQgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUKKy0tIGV2ZW50IHRyaWdnZXIKK0NSRUFURSBT Q0hFTUEgSUYgTk9UIEVYSVNUUyBiYXo7CisKK0NSRUFURSBTQ0hFTUEgZWxlbWVudF90ZXN0Cisg IENSRUFURSBUQUJMRSBmb28gKGlkIGludCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTk3ZDJmNTRmYgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9j cmVhdGVfdGFibGUuc3FsCkBAIC0wLDAgKzEsMTYgQEAKK0NSRUFURSBUQUJMRSBzaW1wbGVfdGFi bGUoCisgICAgaWQgaW50LAorICAgIG5hbWUgdmFyY2hhcig1KQorKTsKKy0tIFRlc3QgQ1JFQVRF IElOREVYIHdpdGggYW4gSU5DTFVERSBDTEFVU0UKK0NSRUFURSBVTklRVUUgSU5ERVggY292ZXJp bmdfaW5kZXggb24gc2ltcGxlX3RhYmxlIChpZCkgSU5DTFVERSAobmFtZSk7CisKKy0tIFRlc3Qg VGFibGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkKK0NSRUFURSBUQUJMRSBjdGx0MSAo YSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZIEtFWSwgYiB0ZXh0KTsKK0FMVEVS IFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitBTFRFUiBUQUJM RSBjdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKKworLS0gVGVzdCBm b3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFC TEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21tYW5kCitDUkVB VEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRF IFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludAor UkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA4ODlmYTAyZjkKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKQEAgLTAsMCArMSwyMCBAQAorQ1JFQVRFIEVYVEVO U0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNU SU9OIHRlc3RfZGRsX2RlcGFyc2UoKQorICBSRVRVUk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0Ug cGxwZ3NxbCBBUworJCQKK0RFQ0xBUkUKKwlyIHJlY29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7 CitCRUdJTgorCUZPUiByIElOIFNFTEVDVCAqIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29t bWFuZHMoKQorCUxPT1AKKwkJZGVwYXJzZWRfanNvbiA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2Vf dG9fanNvbihyLmNvbW1hbmQpOworCQlSQUlTRSBOT1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBk ZXBhcnNlZF9qc29uOworCQlSQUlTRSBOT1RJQ0UgJ3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdf Y2F0YWxvZy5kZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQg TE9PUDsKK0VORDsKKyQkOworCitDUkVBVEUgRVZFTlQgVFJJR0dFUiB0ZXN0X2RkbF9kZXBhcnNl CitPTiBkZGxfY29tbWFuZF9lbmQgRVhFQ1VURSBQUk9DRURVUkUgdGVzdF9kZGxfZGVwYXJzZSgp OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv dC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjY0YWQzNDk4ZgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2Nv bXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKQEAgLTAsMCArMSwxODEgQEAKK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3M7Cit1c2UgRW52OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBGaWxlOjpC YXNlbmFtZTsKKworc3ViIGV4ZWN1dGVfdGVzdF9jYXNlIHsKKyAgICBteSAkdGVzdF9uYW1lID0g JF9bMF07CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMV07CisgICAgbXkgJHN1Yl9ub2RlID0gJF9b Ml07CisgICAgbXkgJGRibmFtZSA9ICRfWzNdOworICAgIG15ICRvdXRwdXRkaXIgPSAkUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRlcGFyc2UgdGVz dGluZyByZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9w dWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgbXkgJHRlc3RfZmlsZSA9ICIuL3Nx bC8ke3Rlc3RfbmFtZX0uc3FsIjsKKyAgICBteSAkY29udGVudCA9IGRve2xvY2FsKEBBUkdWLCQv KT0kdGVzdF9maWxlOzw+fTsKKworICAgICRwdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRjb250 ZW50KTsKKworICAgICMgcmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBmcm9tIGRlcGFy c2VkIERETHMgb24gcHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAgICRwdWJfbm9k ZSAtPiBwc3FsKCRkYm5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNlX2V4cGFuZF9j b21tYW5kKGRkbCkgfHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBpZCBBU0MpLAor ICAgICAgICBzdGRvdXQgPT4gXCRkZGxfc3FsKTsKKworICAgIHByaW50ICJcbnN0YXJ0IHByaW50 aW5nIHJlLWZvcm1lZCBzcWxcbiI7CisgICAgcHJpbnQgJGRkbF9zcWw7CisgICAgcHJpbnQgIlxu ZW5kIHByaW50aW5nIHJlLWZvcm1lZCBzcWxcbiI7CisgICAgIyBleGVjdXRlIFNRTCBjb21tYW5k cyBvbiBzdWIgbm9kZQorICAgICRzdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRkZGxfc3FsKTsK KworICAgICMgY2xlYW4gdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNsZWFuX2Rl cGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsK KworICAgICMgZHVtcCBmcm9tIHB1YiBub2RlIGFuZCBzdWIgbm9kZQorICAgIG1rZGlyICR7b3V0 cHV0ZGlyfS4iL2R1bXBzIiwgMDc1NTsKKyAgICBteSAkcHViX2R1bXAgPSAke291dHB1dGRpcn0u Ii9kdW1wcy8ke3Rlc3RfbmFtZX1fcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVtcCA9ICR7b3V0 cHV0ZGlyfS4iL2R1bXBzLyR7dGVzdF9uYW1lfV9zdWIuZHVtcCI7CisgICAgc3lzdGVtKCJwZ19k dW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHB1 Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisg ICAgICAgIC4gJHB1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHViIG5vZGUgZmFp bGVkIGluICR7dGVzdF9uYW1lfSI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAg LiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHN1Yl9kdW1wIC4gIiAiCisgICAg ICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHN1Yl9ub2Rl LT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgc3ViIG5vZGUgZmFpbGVkIGluICR7dGVzdF9uYW1l fSI7CisKKyAgICAjIGNvbXBhcmUgZHVtcGVkIHJlc3VsdHMKKyAgICBpcyhzeXN0ZW0oImRpZmYg IgorICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgLiAkc3ViX2R1bXApLCAwLCAiRHVtcGVkIHJl c3VsdHMgZGlmZiBpbiAke3Rlc3RfbmFtZX0iKTsKK30KKworc3ViIGluaXRfbm9kZSB7CisgICAg bXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2RlLT5pbml0OworICAgICMgaW5jcmVh c2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBtYWtlcyB0b28gbG93IGJ5IGRlZmF1 bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X2Nvbm5l Y3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwJyk7CisgICAgcmV0dXJuICRu b2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBd LiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBpbml0 X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9zdWIiOworICAgIHJldHVy biBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNyZWF0ZV9kZXBhcnNlX3Rlc3Rpbmdf cmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRk Ym5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRkYm5hbWUsIHEoCisgICAgICAgIGJl Z2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsK KyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMoaWQgU0VSSUFMIFBSSU1BUlkgS0VZ LCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRkbCB0ZXh0KTsKKworICAgICAgICBj cmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKQorICAgICAgICAgICAg cmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAg ICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAg ICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1h bmRzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBh cnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5jb21tYW5kX3Rh Zywgci5vYmplY3RfaWRlbnRpdHksIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNv bW1hbmQpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQk OworCisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9f anNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3Nx bCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsK KyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZl bnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAg ICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRk bCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVudGl0eSwgcHVibGljLmRlcGFy c2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0X3R5cGUpKTsKKyAgICAgICAg ICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworCisgICAgICAgIGNyZWF0 ZSBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gZGRsX2NvbW1hbmRf ZW5kIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOworCisgICAgICAgIGNyZWF0 ZSBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gc3FsX2Ry b3AgZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisKKyAgICAgICAg Y29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNl c19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0g JF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUgZnVuY3Rpb24gYmVm b3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZlX3BzcWwoJGRibmFt ZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZzsKKyAgICAg ICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7CisgICAgICAgIGRy b3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVw YXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVwYXJzZWRfZGRsczsK KyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICkp OworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZvciAoQG91dCkgewor ICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQorICAgIHJldHVybiB3 YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5kIHN0YXJ0IHB1YiBz dWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInRlc3QiKTsKK215ICRzdWJf bm9kZSA9IGluaXRfc3ViX25vZGUoInRlc3QiKTsKK215ICRkYm5hbWUgPSAicG9zdGdyZXMiOwor JHB1Yl9ub2RlIC0+IHN0YXJ0OworJHN1Yl9ub2RlIC0+IHN0YXJ0OworCisjIGxvYWQgdGVzdCBj YXNlcyBmcm9tIHRoZSByZWdyZXNzaW9uIHRlc3RzCitteSBAcmVncmVzc190ZXN0cyA9IHNwbGl0 IC9ccysvLCAkRU5We1JFR1JFU1N9OworCitmb3JlYWNoKEByZWdyZXNzX3Rlc3RzKSB7CisgICAg bXkgJHRlc3RfbmFtZSA9IHRyaW0oJF8pOworICAgICMgc2tpcCBpZiBpdCdzIHJlZ3Jlc3Npb24g dGVzdCBwcmVwYXJhdGlvbiBvciBlbXB0eSBzdHJpbmcKKyAgICBpZiAoJHRlc3RfbmFtZSBlcSAi IiBvciAkdGVzdF9uYW1lIGVxICJ0ZXN0X2RkbF9kZXBhcnNlIikKKyAgICB7CisgICAgICAgIG5l eHQ7CisgICAgfQorICAgIGV2YWwge2V4ZWN1dGVfdGVzdF9jYXNlKCR0ZXN0X25hbWUsICRwdWJf bm9kZSwgJHN1Yl9ub2RlLCAkZGJuYW1lKTt9OworICAgIGlmICgkQCBuZSAiIikKKyAgICB7Cisg ICAgICAgIGZhaWwoJEApOworICAgIH0KK30KK2Nsb3NlOworCisjIENsb3NlIG5vZGVzCiskcHVi X25vZGUtPnN0b3A7Ciskc3ViX25vZGUtPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDJfcmVn cmVzc190ZXN0cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uM2E4NzVjMzNmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKQEAgLTAsMCArMSwy MDcgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRW52OwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIGV4ZWN1dGVfcmVncmVzc190ZXN0 IHsKKyAgICBteSAkcHViX25vZGUgPSAkX1swXTsKKyAgICBteSAkc3ViX25vZGUgPSAkX1sxXTsK KyAgICBteSAkZGJuYW1lID0gInBvc3RncmVzIjsKKyAgICBteSAkZGxwYXRoICAgID0gZGlybmFt ZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKyAgICBteSAkaW5wdXRkaXIgPSAiLi4vLi4vcmVncmVz cyI7CisgICAgbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2No ZWNrOworCisgICAgIyBzZXQgdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNyZWF0 ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFt ZSk7CisKKyAgICAjIGV4ZWN1dGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIG9uIHB1YiBub2RlCisg ICAgbXkgJHJlZ3Jlc3NfY21kID0gJEVOVntQR19SRUdSRVNTfQorICAgICAgICAuICIgIgorICAg ICAgICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisgICAgICAgIC4gIi0tbWF4LWNvbmN1cnJl bnQtdGVzdHM9MjAgIgorICAgICAgICAuICItLWRibmFtZT0iCisgICAgICAgIC4gJGRibmFtZSAu ICIgIgorICAgICAgICAuICItLXVzZS1leGlzdGluZyAiCisgICAgICAgIC4gIi0taG9zdD0iCisg ICAgICAgIC4gJHB1Yl9ub2RlLT5ob3N0IC4gIiAiCisgICAgICAgIC4gIi0tcG9ydD0iCisgICAg ICAgIC4gJHB1Yl9ub2RlLT5wb3J0IC4gIiAiCisgICAgICAgIC4gIi0taW5wdXRkaXI9JGlucHV0 ZGlyICIKKyAgICAgICAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0ZGlyXCIgIgorICAgICAgICAu ICItLXNjaGVkdWxlPSRpbnB1dGRpci9wYXJhbGxlbF9zY2hlZHVsZSI7CisgICAgcHJpbnQgIlJl Z3Jlc3Npb24gdGVzdCBjb21tYW5kIGlzICRyZWdyZXNzX2NtZCI7CisgICAgbXkgJHJjID0gc3lz dGVtKCRyZWdyZXNzX2NtZCk7CisgICAgaWYgKCRyYyAhPSAwKQorICAgIHsKKyAgICAgICAgIyBJ ZiByZWdyZXNzaW9uIHRlc3QgZmFpbHMsIGR1bXAgb3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZp bGUKKyAgICAgICAgbXkgJGRpZmZzID0gIiR7b3V0cHV0ZGlyfS9yZWdyZXNzaW9uL3JlZ3Jlc3Np b24uZGlmZnMiOworICAgICAgICBpZiAoLWUgJGRpZmZzKQorICAgICAgICB7CisgICAgICAgICAg ICBwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKyAgICAgICAgICAgIHByaW50IHNs dXJwX2ZpbGUoJGRpZmZzKTsKKyAgICAgICAgICAgIHByaW50ICI9PT0gRU9GID09PVxuIjsKKyAg ICAgICAgfQorICAgICAgICBkaWUgIlJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQiOworICAgIH0KKwor ICAgICMgUmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBmcm9tIGRlcGFyc2VkIERETHMg b24gcHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAgICRwdWJfbm9kZSAtPiBwc3Fs KCRkYm5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRk bCkgfHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBpZCBBU0MpLAorICAgICAgICBz dGRvdXQgPT4gXCRkZGxfc3FsKTsKKworICAgICMgRXhlY3V0ZSBTUUwgY29tbWFuZHMgb24gc3Vi IG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkZGRsX3NxbCk7CisKKyAgICAj IENsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjbGVhbl9kZXBhcnNlX3Rl c3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICAj IER1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBta2RpciAke291dHB1dGRpcn0u Ii9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMv cmVncmVzc19wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVt cHMvcmVncmVzc19zdWIuZHVtcCI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAg LiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAg ICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHB1Yl9ub2Rl LT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHViIG5vZGUgZmFpbGVkIjsKKyAgICBzeXN0ZW0o InBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAgICAg LiAkc3ViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1w ICcKKyAgICAgICAgLiAkc3ViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBzdWIgbm9k ZSBmYWlsZWQiOworCisgICAgIyBDb21wYXJlIGR1bXBlZCByZXN1bHRzCisgICAgaXMoc3lzdGVt KCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1Yl9kdW1wKSwgMCwgIkNv bXBhcmluZyBkdW1wZWQgb3V0cHV0Iik7CisKKyAgICAjIENsb3NlIG5vZGVzCisgICAgJHB1Yl9u b2RlLT5zdG9wOworICAgICRzdWJfbm9kZS0+c3RvcDsKK30KKworc3ViIGluaXRfbm9kZSB7Cisg ICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2RlLT5pbml0OworICAgICMgaW5j cmVhc2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBtYWtlcyB0b28gbG93IGJ5IGRl ZmF1bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X2Nv bm5lY3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwJyk7CisgICAgcmV0dXJu ICRub2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRf WzBdLiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBp bml0X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9zdWIiOworICAgIHJl dHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNyZWF0ZV9kZXBhcnNlX3Rlc3Rp bmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15 ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRkYm5hbWUsIHEoCisgICAgICAg IGJlZ2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVz czsKKyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMoaWQgU0VSSUFMIFBSSU1BUlkg S0VZLCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRkbCB0ZXh0KTsKKyAgICAgICAg Y3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCkKKyAgICAgICAgICAg IHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisg ICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdpbgorICAg ICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21t YW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gZGVw YXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIuY29tbWFuZF90 YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oci5j b21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAk JDsKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19q c29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3Fs IGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOwor ICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVu dF90cmlnZ2VyX2Ryb3BwZWRfb2JqZWN0cygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAg ICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRs KSB2YWx1ZXMgKHIub2JqZWN0X3R5cGUsIHIub2JqZWN0X2lkZW50aXR5LCBwdWJsaWMuZGVwYXJz ZV9kcm9wX2RkbChyLm9iamVjdF9pZGVudGl0eSwgci5vYmplY3RfdHlwZSkpOworICAgICAgICAg ICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisgICAgICAgIGNyZWF0ZSBl dmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gZGRsX2NvbW1hbmRfZW5k IGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBjcmVhdGUgZXZl bnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIHNxbF9kcm9wIGV4 ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAgICBjb21taXQ7 CisgICAgKSk7Cit9CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1 Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsK KyAgICAjIERyb3AgdGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBmdW5jdGlvbiBiZWZvcmUgdGFr aW5nIGEgbG9naWNhbCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVfcHNxbCgkZGJuYW1lLHEoCisg ICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9w IGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsKKyAgICAgICAgZHJvcCBmdW5j dGlvbiBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNlX2Ry b3BzX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBhcnNlZF9kZGxzOworICAgICAg ICBEUk9QIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgKSk7Cit9CisK K3N1YiB0cmltIHsKKyAgICBteSBAb3V0ID0gQF87CisgICAgZm9yIChAb3V0KSB7CisgICAgICAg IHMvXlxzKy8vOworICAgICAgICBzL1xzKyQvLzsKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJh eSA/IEBvdXQgOiAkb3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQgc3RhcnQgcHViIHN1YiBub2Rl cworbXkgJHB1Yl9ub2RlID0gaW5pdF9wdWJfbm9kZSgicmVncmVzcyIpOworbXkgJHN1Yl9ub2Rl ID0gaW5pdF9zdWJfbm9kZSgicmVncmVzcyIpOworJHB1Yl9ub2RlIC0+IHN0YXJ0OworJHN1Yl9u b2RlIC0+IHN0YXJ0OworCisjIENvbW1lbnQgdGhlIGV4ZWN1dGlvbiB0ZW1wb3JhcmlseSwgYW4g ZXJyb3IgaW4gZGRsX2RlcGFyc2UuYyB3aWxsIGNhdXNlIHRoZSBkYXRhYmFzZSBleGl0cyBhYm5v cm1hbGx5LCBlcnJvciBzaWduYXR1cmU6CisjCisjIDIwMjItMTItMDMgMjM6MDI6NDQuNzc4IFVU QyBbMTI5MTAyXSBwZ19yZWdyZXNzL3RhYmxlc3BhY2UgTE9HOiAgc3RhdGVtZW50OiBBTFRFUiBU QUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlX3JlbmFtZWQgU0VUIFRBQkxF U1BBQ0UgcGdfZGVmYXVsdDsKKyMgVFJBUDogZmFpbGVkIEFzc2VydCgiSXNBKHN0bXQsIEFsdGVy VGFibGVTdG10KSIpLCBGaWxlOiAiZGRsX2RlcGFyc2UuYyIsIExpbmU6IDMzNzEsIFBJRDogMTI5 MTAyCisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkgcG9zdGdyZXMgW2xvY2FsXSBBTFRF UiBUQUJMRShFeGNlcHRpb25hbENvbmRpdGlvbisweGJiKVsweDU2M2JkNmVhNWIwZF0KKyMgLi4u CisjIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLnNvLjYoKzB4MjlkOTApWzB4N2ZkNmE3NGE2 ZDkwXQorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KF9fbGliY19zdGFydF9tYWlu KzB4ODApWzB4N2ZkNmE3NGE2ZTQwXQorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFpIHBv c3RncmVzIFtsb2NhbF0gQUxURVIgVEFCTEUoX3N0YXJ0KzB4MjUpWzB4NTYzYmQ2NzJmMWU1XQor IyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgc2VydmVyIHByb2Nl c3MgKFBJRCAxMjkxMDIpIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCA2OiBBYm9ydGVkCisjIDIw MjItMTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBERVRBSUw6ICBGYWlsZWQgcHJvY2Vz cyB3YXMgcnVubmluZzogQUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVncmVzc190Ymxz cGFjZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIDIwMjItMTItMDMgMjM6 MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICB0ZXJtaW5hdGluZyBhbnkgb3RoZXIgYWN0aXZl IHNlcnZlciBwcm9jZXNzZXMKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTEgVVRDIFsxMjkwNThd IExPRzogIHNodXR0aW5nIGRvd24gYmVjYXVzZSByZXN0YXJ0X2FmdGVyX2NyYXNoIGlzIG9mZgor IyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MiBVVEMgWzEyOTA1OF0gTE9HOiAgZGF0YWJhc2Ugc3lz dGVtIGlzIHNodXQgZG93bgorCisjIGV2YWwge2V4ZWN1dGVfcmVncmVzc190ZXN0KCRwdWJfbm9k ZSwgJHN1Yl9ub2RlKTt9OworIyBpZiAoJEAgbmUgIiIpCisjIHsKKyMgICAgIGZhaWwoJEApOwor IyB9CisKKyMgQ2xvc2Ugbm9kZXMKKyRwdWJfbm9kZS0+c3RvcDsKKyRzdWJfbm9kZS0+c3RvcDsK KworcGFzcygicmVncmVzc3Npb24gdGVzdCBwYXNzZWQiKTsKKworZG9uZV90ZXN0aW5nKCk7Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3Fs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjE0MDcwY2Q1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwKQEAg LTAsMCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYg c2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJ T04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mi IHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gZGVwYXJzZV9kcm9w X2RkbChJTiBvYmppZGVudGl0eSB0ZXh0LAorICAgIElOIG9iamVjdHR5cGUgdGV4dCkKKyAgUkVU VVJOUyB0ZXh0IElNTVVUQUJMRSBTVFJJQ1QKKyAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VB R0UgQzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mu YyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJk Njk5MmJkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpAQCAtMCwwICsxLDU5IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCisgKgkJU3Vw cG9ydCBmdW5jdGlvbnMgZm9yIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgbW9kdWxlCisg KgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJub2Rlcy9leGVj bm9kZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorI2luY2x1ZGUgInRj b3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidGNv cC9kZGxfZGVwYXJzZS5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9OX0lORk9f VjEoZGVwYXJzZV9kcm9wX2RkbCk7CisKKy8qCisgKiBHaXZlbiBvYmplY3RfaWRlbnRpdHkgYW5k IG9iamVjdF90eXBlIG9mIGRyb3BwZWQgb2JqZWN0LCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0 aW9uIG9mIERST1AgY29tbWFuZC4KKyAqLworRGF0dW0KK2RlcGFyc2VfZHJvcF9kZGwoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpvYmppZGVudGl0eSA9IFBHX0dFVEFSR19URVhUX1Ao MCk7CisJY29uc3QgY2hhcgkgICAqb2JqaWRlbnRpdHlfc3RyID0gdGV4dF90b19jc3RyaW5nKG9i amlkZW50aXR5KTsKKwl0ZXh0CSAgICpvYmplY3R0eXBlID0gUEdfR0VUQVJHX1RFWFRfUCgxKTsK Kwljb25zdCBjaGFyCSAgICpvYmplY3R0eXBlX3N0ciA9IHRleHRfdG9fY3N0cmluZyhvYmplY3R0 eXBlKTsKKworCWNoYXIJCSAgICpjb21tYW5kOworCisJLy8gY29uc3RyYWludCBpcyBwYXJ0IG9m IGFsdGVyIHRhYmxlIGNvbW1hbmQsIG5vIG5lZWQgdG8gZHJvcCBpbiBEUk9QIGNvbW1hbmQKKwlp ZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAidGFibGUgY29uc3RyYWludCIpID09IDApIHsKKwkJ UEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRv YXN0IHRhYmxlIikgPT0gMCkgeworCQlvYmplY3R0eXBlX3N0ciA9ICJ0YWJsZSI7CisJfSAgZWxz ZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZGVmYXVsdCB2YWx1ZSIpID09IDApIHsKKwkJ UEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgIm9w ZXJhdG9yIG9mIGFjY2VzcyBtZXRob2QiKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJ fSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJmdW5jdGlvbiBvZiBhY2Nlc3MgbWV0 aG9kIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9i amVjdHR5cGVfc3RyLCAidGFibGUgY29sdW1uIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgp OworCX0KKworCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmppZGVudGl0eV9zdHIs IG9iamVjdHR5cGVfc3RyLCBEUk9QX0NBU0NBREUpOworCisJaWYgKGNvbW1hbmQpCisJCVBHX1JF VFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxM KCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz LmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi5hMWY5MzRlNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRy b2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgRERMIGRlcGFyc2Ug cmVncmVzcyBmZWF0dXJlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFt ZSA9ICckbGliZGlyL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycKK3JlbG9jYXRhYmxlID0gdHJ1 ZQotLSAKMi4zNC4xCgo= --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v61-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581tw2 RnJvbSAwMDdiOTlkODc4ZGExOTNmYWNmYWY2NTczZWI3YzFhYjNkN2Q1OTgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFNhdCwgNyBKYW4gMjAyMyAwNjoxMTozMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjYx IDMvN10gU3VwcG9ydCBEREwgZGVwYXJzZSBvZiB0aGUgcmVzdCBjb21tYW5kcwoKICAgIENSRUFU RS9EUk9QIEFDQ0VTUyBNRVRIT0QKICAgIENSRUFURS9BTFRFUi9EUk9QIEFHR1JFR0FURQogICAg Q1JFQVRFL0FMVEVSL0RST1AgQ0FTVAogICAgQ1JFQVRFL0FMVEVSL0RST1AgQ09MTEFUSU9OCiAg ICBDT01NRU5UCiAgICBDUkVBVEUvQUxURVIvRFJPUCBDT05WRVJTSU9OCiAgICBBTFRFUiBERUZB VUxUIFBSSVZJTEVHRVMKICAgIENSRUFURS9BTFRFUi9EUk9QIERPTUFJTgogICAgQ1JFQVRFL0FM VEVSL0RST1AgRVhURU5TSU9OCiAgICBDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIERBVEEgV1JB UFBFUgogICAgQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBUQUJMRQogICAgQ1JFQVRFL0FMVEVS IEZVTkNUSU9OL1BST0NFRFVSRQogICAgR1JBTlQKICAgIENSRUFURS9EUk9QIElOREVYCiAgICBD UkVBVEUvQUxURVIvRFJPUCBMQU5HVUFHRQogICAgQ1JFQVRFL0FMVEVSL0RST1AgTUFURVJJQUxJ WkVEIFZJRVcKICAgIENSRUFURS9EUk9QIE9QRVJBVE9SIFtDTEFTUy9GQU1JTFldCiAgICBDUkVB VEUvQUxURVIvRFJPUCBQVUJMSUNBVElPTgogICAgQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCiAg ICBSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCiAgICBSRVZPS0UKICAgIEFMVEVSL0RST1AgUk9V VElORQogICAgQ1JFQVRFL0FMVEVSL0RST1AgUlVMRQogICAgQ1JFQVRFL0FMVEVSL0RST1AgU0NI RU1BCiAgICBTRUNVUklUWSBMQUJFTAogICAgQ1JFQVRFL0FMVEVSL0RST1AgU0VRVUVOQ0UKICAg IENSRUFURS9BTFRFUi9EUk9QIFNFUlZFUgogICAgQ1JFQVRFL0FMVEVSL0RST1AgU1RBVElTVElD UwogICAgQ1JFQVRFL0FMVEVSL0RST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTi9QQVJTRVIv RElDVElPTkFSWS9URU1QTEFURQogICAgQ1JFQVRFL0RST1AgVFJBTlNGT1JNCiAgICBDUkVBVEUv QUxURVIgVFJJR0dFUgogICAgQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQogICAgQ1JFQVRFL0FMVEVS L0RST1AgVVNFUiBNQVBQSU5HCiAgICBDUkVBVEUvQUxURVIvRFJPUCBWSUVXIC0tIE5vdGUgIzQK CihOb3RlICMzKSBSZW1vdmVkIGFuIHVuZGVzaXJhYmxlICdvbicgZnJvbSB0aGUgaWRlbnRpdHkg c3RyaW5nIGZvciBUUkFOU0ZPUk0KaW4gZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cy4gVGhpcyBpcyBu ZWVkZWQgdG8gbWFrZSBkZXBhcnNlIG9mIERST1AKVFJBTlNGT1JNIGNvbW1hbmQgd29yayBzaW5j ZSAnb24nIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50CkRST1AgVFJBTlNGT1JNIHN5bnRh eC4gRm9yIGV4YW1wbGUsIHRoZSBjb3JyZWN0IHN5bnRheCBpcwpEUk9QIFRSQU5TRk9STSB0cmYg Rk9SIElOVCBMQU5HVUFHRSBTUUw7Cmluc3RlYWQgb2YgRFJPUCBUUkFOU0ZPUk0gdHJmIEZPUiBJ TlQgT04gTEFOR1VBR0UgU1FMOwoKKE5vdGUgIzQpIEZvciBWSUVXU1RNVCwgd2UgY3JlYXRlZCBw Z19nZXRfdmlld2RlZl9pbnRlcm5hbCB0byBnZXQgdGhlClNFTEVDVCBxdWVyeSBvZiB0aGUgcGVu ZGluZyBWSUVXU1RNVC4gSW4gdGhlIGNhc2UgdGhhdCB0aGUgQ1JFQVRFIFZJRVcgY29tbWFuZApp cyBzdGlsbCBpbiBwcm9ncmVzcywgd2Ugd291bGQgbmVlZCB0byBzZWFyY2ggdGhlIHN5c3RlbSBj YWNoZSBSVUxFUkVMTkFNRSB0byBnZXQgdGhlCnJld3JpdGUgcnVsZSBvZiB0aGUgdmlldyBhcyBv cHBvc2UgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBpbiBwZ19nZXRfdmlld2RlZl93b3JrZXIo KSwKdGhlIGxhdHRlciB3aWxsIHJldHVybiBlbXB0eSByZXN1bHQuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYyB8IDYzOTQgKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogMSBmaWxlIGNoYW5nZWQsIDYzMzMgaW5zZXJ0aW9ucygrKSwgNjEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKaW5kZXggNDNlZWM3ZDEzNS4uNmM2NzU1NjA5YiAx MDA3NTUKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0xNTEsNiArMTUxLDcgQEAgYm9vbAkJ dmVyYm9zZSA9IHRydWU7CiAKIHN0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpOwogc3RhdGljIHZvaWQgYXBwZW5k X2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUpOwor c3RhdGljIHZvaWQgYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBmbG9hdDggdmFsdWUpOwogc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOwogc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpOwogc3RhdGlj IGNoYXIgKmFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10KTsKQEAgLTE2MCwxMCArMTYxLDE0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9zdHJp bmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKm5hbWUsCiBzdGF0 aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qs CiAJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIs CiAJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rpb25HZXREZWZh dWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CiBzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChP YmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOwogc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKTsKK3N0YXRpYyBPYmpUcmVl ICpuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpOwogc3RhdGljIE9iakVs ZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKIHN0YXRpYyBPYmpUcmVlICpu ZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgT2JqVHJl ZSAqbmV3X29ianRyZWUoY2hhciAqZm10KTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29i amVjdChjaGFyICp2YWx1ZSk7CiBzdGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9y ZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBw Z19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCiAJCQkJCQkJCQkgY2hhciAq KmluZGV4X2FtLApAQCAtMTc4LDggKzE4MywxOCBAQCBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wbwog CQkJCQkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMp Owogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBj aGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNl X0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfQWdncmVnYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAq ZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCQkJCQkgT2JqZWN0QWRkcmVz cyBmcm9tQ29sbGlkKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0 b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUsIE9iamVjdEFkZHJlc3MgY29waWVkKTsKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10 ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25h cnkoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVm aW5lKTsKIAogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBi b29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlh YmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CiBzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pOwogc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOwog CkBAIC0xODgsNiArMjAzLDcgQEAgc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9D eWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGEKIHN0YXRpYyBpbmxp bmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfTWludmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsK IHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNl X1NlcV9Pd25lZEJ5KE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChGb3JtX3BnX3NlcXVlbmNlX2RhdGEg c2VxZGF0YSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOwogc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9BcyhEZWZFbGVtICplbGVtKTsKQEAgLTIwMyw2ICsyMTks OCBAQCBzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKIHN0 YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3Qg KnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJICAgYm9vbCB0eXBlZCwg Ym9vbCBjb21wb3NpdGUpOwogCitzdGF0aWMgY2hhciAqRG9tYWluR2V0RGVmYXVsdChIZWFwVHVw bGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spOworCiAvKgogICogQXBwZW5kIHByZXNlbnQgYXMg ZmFsc2UgdG8gYSB0cmVlLgogICovCkBAIC0yMTIsNiArMjMwLDI0IEBAIGFwcGVuZF9ub3RfcHJl c2VudChPYmpUcmVlICp0cmVlKQogCWFwcGVuZF9ib29sX29iamVjdCh0cmVlLCAicHJlc2VudCIs IGZhbHNlKTsKIH0KIAorLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVl LgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hh cgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9 IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFt ID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUu Zmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwog LyoKICAqIEFwcGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVlLgogICovCkBAIC00MjMs NiArNDU5LDM0IEBAIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1 Yl9mbXQsIGNoYXIgKiBvYmplY3RfbmFtZSwKIAlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwg cGFyYW0pOwogfQogCisvKgorICogQXBwZW5kIGEgTlVMTC1vci1xdW90ZWQtbGl0ZXJhbCBjbGF1 c2UuICBVc2VmdWwgZm9yIENPTU1FTlQgYW5kIFNFQ1VSSVRZCisgKiBMQUJFTC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogJXtudWxsfXMgJXtsaXRlcmFsfXMKKyAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9saXRlcmFsX29yX251bGwoT2JqVHJlZSAqcGFyZW50LCBjaGFyICplbGVtbmFtZSwg Y2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqdG9wOworCU9ialRyZWUgICAgKnBhcnQ7CisK Kwl0b3AgPSBuZXdfb2JqdHJlZSgiIik7CisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCJOVUxMIiwg MSwKKwkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgIXZhbHVlKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0b3AsICIle251bGx9cyIsIHBhcnQpOworCisJcGFydCA9IG5ld19vYmp0cmVl X1ZBKCIiLCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5cGVCb29sLCB2YWx1ZSAhPSBOVUxM KTsKKworCWlmICh2YWx1ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFydCwgIiV7dmFsdWV9 TCIsICJ2YWx1ZSIsIHZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle2xpdGVy YWx9cyIsIHBhcnQpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocGFyZW50LCBlbGVtbmFtZSwg dG9wKTsKK30KKwogLyoKICAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2Vw dCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KICAqIHNlcGFyYXRlbHk6CkBAIC01 MjUsNiArNTg5LDMxIEBAIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIg dHlwZW1vZCwKIAlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwogfQogCisvKgorICogUmV0dXJuIHRo ZSBkZWZhdWx0IHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9m CisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25H ZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2RlZGVmczsK KwlMaXN0CSAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlub2RlZGVm cyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMp KTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZh dWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJ Tm9kZQkgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBwZW5kKHN0 cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNlKSk7CisJ fQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKIC8qCiAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCiAgKi8KQEAgLTcx NCw2ICs4MDMsNTcgQEAgbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlw bW9kKQogCQkJCQkJICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwZV9hcnJheSk7CiB9CiAK Ky8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lm aWVkIGJ5IFJvbGVTcGVjIG5vZGUuCisgKiBTcGVjaWFsIHZhbHVlcyBzdWNoIGFzIFJPTEVTUEVD X0NVUlJFTlRfVVNFUiBhcmUgZXhwYW5kZWQgdG8gdGhlaXIgZmluYWwKKyAqIG5hbWVzLgorICov CitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNw ZWMpCit7CisJY2hhcgkgICAqcm9sZXR5cGU7CisKKwlpZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9M RVNQRUNfUFVCTElDKQorCQlyb2xldHlwZSA9IGdldF9yb2xlc3BlY19uYW1lKHNwZWMpOworCWVs c2UKKwkJcm9sZXR5cGUgPSBwc3RyZHVwKCIiKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQShO VUxMLCAyLAorCQkJCQkJICAiaXNfcHVibGljIiwgT2JqVHlwZUJvb2wsIHNwZWMtPnJvbGV0eXBl ID09IFJPTEVTUEVDX1BVQkxJQywKKwkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywg cm9sZXR5cGUpOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywg d2l0aCByb2xlIHNwZWNpZmllZCBieSBPSUQuIChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1 c2UgInB1YmxpYyIpLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9s ZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpUcmVlICAgICpyb2xlOworCisJaWYgKHJvbGVvaWQg IT0gQUNMX0lEX1BVQkxJQykKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJICAgKnJv bGVfbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRH ZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBPSUQgJXUiLCBy b2xlb2lkKTsKKworCQlyb2xlX25hbWUgPSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNU UlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCXJvbGUgPSBuZXdfb2JqdHJlZV9WQSgiJXtyb2xl bmFtZX1JIiwgMSwKKwkJCQkJCQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAo cm9sZV9uYW1lKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCWVsc2UKKwkJ cm9sZSA9IG5ld19vYmp0cmVlX1ZBKCIle3JvbGVuYW1lfUkiLCAxLAorCQkJCQkJCSAgInJvbGVu YW1lIiwgT2JqVHlwZVN0cmluZywgInB1YmxpYyIpOworCisJcmV0dXJuIHJvbGU7Cit9CisKIC8q CiAgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVz IC0tIHZhcmFyZ3MgdmVyc2lvbi4KICAqCkBAIC03OTEsNiArOTMxLDIyIEBAIG5ld19vYmp0cmVl X1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKQogCXJldHVybiB0cmVlOwogfQogCisvKgor ICogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdC4KKyAqLworc3RhdGljIE9iakVsZW0gKgor bmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisK KwlBc3NlcnQodmFsdWUpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5V TEwpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30K KwogLyoKICAqIFByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9i alRyZWUgaW50byB0aGUgb3V0cHV0IHBhcnNlCiAgKiBzdGF0ZS4KQEAgLTE5MzQsNiArMjA5MCw4 MyBAQCBkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCiAJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7CiB9CiAKKy8qCisg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBPV05FRCBCWSAle293bmVyfUQKKyAqLworc3RhdGljIE9iakVsZW0gKgorZGVw YXJzZV9TZXFfT3duZWRCeShPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlP YmpUcmVlICAgICpyZXQgPSBOVUxMOworCVJlbGF0aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBz Y2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVhcFR1cGxlCXR1cGxlOworCisJZGVwUmVs ID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5L ZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25S ZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRf b2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElk R2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1f cGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEs CisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRl cFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5 cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pKSkKKwl7CisJCU9pZAkJCW93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJ CU9ialRyZWUgICAgKnRtcF9vYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9 IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNpZGVy IEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBl ICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xh c3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0t PnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+ cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZv YmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9u SWQsIG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiYXR0cm5hbWUi LCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZ ICV7b3duZXJ9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQi LAorCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2JqZWN0LCB0bXBfb2JqKTsKKwl9CisKKwlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1w dHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBh bnl0aGluZy4KKwkgKi8KKwlpZiAoIXJldCkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBl biAuLi4gKi8KKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDMs CisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3du ZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2Up OworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKIC8qCiAgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KICAqCkBAIC0zNDgyLDk2ICszNzE1LDYxMzUg QEAgZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNo YXIgKm9iamVjdHR5cGUsCiB9CiAKIC8qCi0gKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBj b21tYW5kcy4KKyAqIERlcGFyc2UgYW4gQWx0ZXJDb2xsYXRpb25TdG10IChBTFRFUiBDT0xMQVRJ T04pCiAgKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQg aW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICogR2l2ZW4gYSBjb2xsYXRpb24gT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRF UiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTgogICovCiBzdGF0aWMgT2Jq VHJlZSAqCi1kZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK2Rl cGFyc2VfQWx0ZXJDb2xsYXRpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCiB7Ci0J T2lkCQkJb2JqZWN0SWQ7Ci0JTm9kZQkgICAqcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwlIZWFwVHVwbGUJY29sVHVwOworCUZvcm1fcGdfY29sbGF0aW9uIGNvbEZvcm07CiAKLQlBc3Nl cnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUpOworCWNvbFR1cCA9IFNlYXJjaFN5c0NhY2hlMShD T0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xs YXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29sRm9ybSA9IChGb3JtX3BnX2NvbGxh dGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CiAKLQlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsK LQlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MTEFUSU9OICV7aWRlbnRpdHl9TyBSRUZSRVNIIFZFUlNJT04i LCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5h bWVTdHIoY29sRm9ybS0+Y29sbG5hbWUpKSk7CiAKLQlpZiAoY21kLT5pbl9leHRlbnNpb24gJiYg KG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQotCQlyZXR1cm4g TlVMTDsKKwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKIAotCS8qIFRoaXMgc3dpdGNoIG5lZWRz IHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KLQlz d2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKLQl7Ci0JCWNhc2UgVF9DcmVhdGVTZXFTdG10Ogot CQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwly ZXR1cm4gcmV0OworfQogCi0JCWNhc2UgVF9DcmVhdGVTdG10OgotCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5n IHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVTRVQgQUxM CisgKiBPUgorICogU0VUICV7c2V0X25hbWV9SSBUTyAle3NldF92YWx1ZX1zCisgKiBPUgorICog UkVTRVQgJXtzZXRfbmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRnVuY3Rp b25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQorewor CU9ialRyZWUgICAgKnJldDsKIAotCQljYXNlIFRfSW5kZXhTdG10OgotCQkJcmV0dXJuIGRlcGFy c2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCWlmIChraW5kID09IFZBUl9SRVNF VF9BTEwpCisJCXJldCA9IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwllbHNlIGlmIChraW5k ID09IFZBUl9TRVRfVkFMVUUpCisJeworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7c2V0 X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOwog Ci0JCWRlZmF1bHQ6Ci0JCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVw YXJzZSBjb21tYW5kOiAlZCIsCi0JCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJCS8q CisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQgaGVuY2Ug bXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09wdGlvbkZs YWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJUTyAle3NldF92YWx1ZX1zIiwgInNldF92YWx1ZSIsIHZhbHVlKTsKKwkJZWxzZQor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9TCIsICJzZXRfdmFs dWUiLCB2YWx1ZSk7CiAJfQorCWVsc2UKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFU0VUICV7 c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUp OwogCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKLSAqIFdvcmtob3JzZSB0 byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlv blN0bXQgKEFMVEVSIEZVTkNUSU9OL1JPVVRJTkUvUFJPQ0VEVVJFKQorICoKKyAqIEdpdmVuIGEg ZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXg6CisgKiBBTFRFUiBGVU5DVElPTi9ST1VUSU5FL1BST0NFRFVSRSAle3NpZ25h dHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKICAqLwotY2hhciAqCi1kZXBhcnNlX3V0aWxpdHlfY29t bWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQorc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlckZ1bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQogewotCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOwotCU1lbW9yeUNvbnRl eHQgb2xkY3h0OwotCU1lbW9yeUNvbnRleHQgdG1wY3h0OwotCU9ialRyZWUgICAgKnRyZWU7Ci0J Y2hhcgkgICAqY29tbWFuZCA9IE5VTEw7Ci0JU3RyaW5nSW5mb0RhdGEgc3RyOworCUFsdGVyRnVu Y3Rpb25TdG10ICpub2RlID0gKEFsdGVyRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqc2lnbjsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlG b3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJTGlzdAkgICAqcGFyYW1zID0gTklMOworCUxpc3QJICAg KmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qIEdldCB0 aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwg b2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJ aWYgKHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfUFJPQ0VEVVJFKQorCQlyZXQgPSBuZXdf b2JqdHJlZSgiQUxURVIgUFJPQ0VEVVJFIik7CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZShu b2RlLT5vYmp0eXBlID09IE9CSkVDVF9ST1VUSU5FID8KKwkJCQkJCSAgIkFMVEVSIFJPVVRJTkUi IDogIkFMVEVSIEZVTkNUSU9OIik7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9u ZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCi0JICogdG8g YXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZSwg YnV0Ci0JICogYWxsb2NhdGUgdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcu CisJICogQUxURVIgRlVOQ1RJT04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4g dXNlIGNhdGFsb2cgdG8gZ2V0CisJICogaW5wdXQgdHlwZSBPaWRzLgogCSAqLwotCWluaXRTdHJp bmdJbmZvKCZzdHIpOwotCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKLQkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKLQkJCQkJCQkJICAgQUxMT0NT RVRfREVGQVVMVF9NSU5TSVpFLAotCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpF LAotCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOwotCW9sZGN4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJv bmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZh bHVlc1tpXSwgLTEpKTsKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9 RCAoJXthcmd1bWVudHM6LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAiYXJndW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJh bXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtzaWduYXR1cmV9cyIsIHNpZ24p OworCisJZm9yZWFjaChjZWxsLCBub2RlLT5hY3Rpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVm ZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmogPSBO VUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5IikgPT0gMCkK KwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShzdHJWYWwoZGVmZWwtPmFyZykpOworCQllbHNlIGlm IChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBP TiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKwkJZWxz ZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VjdXJpdHkiKSA9PSAwKQorCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZ IERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAibGVha3Byb29mIikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShi b29sVmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJMRUFLUFJPT0YiIDogIk5PVCBMRUFLUFJP T0YiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09IDApCisJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJ ImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJCQl0 bXBfb2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJCWlmIChkZWZHZXROdW1lcmljKGRlZmVs KSA9PSAwKQorCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRfZmxvYXRfb2JqZWN0KHRtcF9vYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXRO dW1lcmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi c2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNl dFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlh YmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10 LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAwKQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsK KworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUIik7CisKKwkJCUFzc2VydChwcm9j Rm9ybS0+cHJvc3VwcG9ydCk7CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUg c3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVk IGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlw ZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIl e25hbWV9cyIsICJuYW1lIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zv cm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJ CQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9 CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUEFSQUxMRUwgJXt2YWx1ZX1zIiwgMSwKKwkJCQkJ CQkJCSJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChkZWZlbC0+YXJnKSk7CisKKwkJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJ YXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJ UmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYW4gQWx0ZXJPYmplY3RTY2hlbWFTdG10IChBTFRFUiAuLi4gU0VUIFNDSEVNQSBjb21t YW5kKQorICoKKyAqIEdpdmVuIHRoZSBvYmplY3QgYWRkcmVzcyBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBh bHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAlcyAle2lkZW50 aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAq cGFyc2V0cmVlLAorCQkJCQkJCSAgT2JqZWN0QWRkcmVzcyBvbGRfc2NoZW1hKQoreworCUFsdGVy T2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0 cmVlOworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld19zY2hlbWEgPSBub2RlLT5u ZXdzY2hlbWE7CisJY2hhcgkgICAqb2xkX3NjaG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CiAKIAkv KgotCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxl dXRpbHMuYyBmdW5jdGlvbmFsaXR5Ci0JICogdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9m IGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLCB3ZSB3YW50Ci0JICogYWxsIG9iamVjdCBu YW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIiB0bwot CSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJh dGhlciB0aGFuIGluamVjdAotCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBv dmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKLQkgKiBwbGFjZSwgd2UgZG8gaXQgY2Vu dHJhbGx5IGhlcmUuCisJICogU2luY2UgdGhlIGNvbW1hbmQgaGFzIGFscmVhZHkgdGFrZW4gcGxh Y2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZgorCSAqIGNhdGFsb2dzLCBnZXRPYmplY3RJZGVu dGl0eSByZXR1cm5zIHRoZSBvYmplY3QgbmFtZSB3aXRoIHRoZSBhbHJlYWR5CisJICogY2hhbmdl ZCBzY2hlbWEuICBUaGUgb3V0cHV0IG9mIG91ciBkZXBhcnNpbmcgbXVzdCByZXR1cm4gdGhlIG9y aWdpbmFsCisJICogc2NoZW1hIG5hbWUsIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBu YW1lIG9mZiB0aGUgaWRlbnRpdHkKKwkgKiBzdHJpbmcgYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVv dGVkIHNjaGVtYSBuYW1lLgorCSAqCisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2Fu IHdlIGRvIGJldHRlcj8KIAkgKi8KLQlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBh dGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOwotCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsK LQlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKLQlvdmVycmlkZVBhdGgtPmFkZFRl bXAgPSB0cnVlOwotCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKwlpZGVu dGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisJb2xkX3NjaG5hbWUg PSBnZXRfbmFtZXNwYWNlX25hbWUob2xkX3NjaGVtYS5vYmplY3RJZCk7CisJaWYgKCFvbGRfc2No bmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNjaGVtYSB3aXRo IE9JRCAldSIsCisJCQkgb2xkX3NjaGVtYS5vYmplY3RJZCk7CisKKwlpZGVudCA9IHBzcHJpbnRm KCIlcyVzIiwgcXVvdGVfaWRlbnRpZmllcihvbGRfc2NobmFtZSksCisJCQkJCSBpZGVudGl0eSAr IHN0cmxlbihxdW90ZV9pZGVudGlmaWVyKG5ld19zY2hlbWEpKSk7CisKKwlyZXR1cm4gbmV3X29i anRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7bmV3 c2NoZW1hfUkiLCAzLAorCQkJCQkJICAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUsIGZhbHNlKSwKKwkJCQkJCSAgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJCQkgICJuZXdzY2hlbWEiLCBPYmpU eXBlU3RyaW5nLCBuZXdfc2NoZW1hKTsKK30KIAotCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7Cisv KgorICogRGVwYXJzZSBhIEdSQU5UL1JFVk9LRSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBHUkFOVCAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2dGFy Z2V0OiwgfXMgVE8gJXtncmFudGVlczosIH1zCisgKiAle2dyYW50X29wdGlvbn1zIEdSQU5URUQg QlkgJXtyb2xlbmFtZX1zCisgKiAJCU9SCisgKiBSRVZPS0UgJXtwcml2aWxlZ2VzOiwgfXMgT04i ICV7b2JqdHlwZX1zICV7cHJpdnRhcmdldDosIH1zCisgKiBGUk9NICV7Z3JhbnRlZXM6LCB9cyAl e2dyYW50X29wdGlvbn1zICV7Y2FzY2FkZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfR3JhbnRTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICpp c3RtdDsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCU9pZAkJCWNsYXNzSWQ7CisJT2JqVHJlZSAgICAqdG1wOwogCi0Jc3dpdGNo IChjbWQtPnR5cGUpCisJLyogRG9uJ3QgZGVwYXJzZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdo aWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0 dXJuIE5VTEw7CisKKwlpc3RtdCA9IGNtZC0+ZC5ncmFudC5pc3RtdDsKKworCS8qCisJICogSWYg dGhlcmUgYXJlIG5vIG9iamVjdHMgZnJvbSAiQUxMIC4uLiBJTiBTQ0hFTUEiIHRvIGJlIGdyYW50 ZWQsIHRoZW4KKwkgKiBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChpc3RtdC0+b2JqZWN0cyA9 PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChpc3RtdC0+b2JqdHlwZSkKIAl7Ci0J CWNhc2UgU0NUX1NpbXBsZToKLQkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7 CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JK RUNUX1NFUVVFTkNFOgorCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAkJCWJyZWFr OwotCQljYXNlIFNDVF9BbHRlclRhYmxlOgotCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJSZWxhdGlv bihjbWQpOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlj bGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CiAJCQlicmVhazsKLQkJY2FzZSBTQ1RfQ3JlYXRlVGFi bGVBczoKLQkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCWNhc2Ug T0JKRUNUX0ZEVzoKKwkJCWNsYXNzSWQgPSBGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklkOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJY2xhc3NJZCA9IEZv cmVpZ25TZXJ2ZXJSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9O OgorCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQlj bGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9M QU5HVUFHRToKKwkJCWNsYXNzSWQgPSBMYW5ndWFnZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJ Y2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQljbGFzc0lkID0gTGFyZ2VPYmplY3RSZWxhdGlv bklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCWNsYXNzSWQgPSBOYW1l c3BhY2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQlj YXNlIE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJY2xhc3NJZCA9IEludmFsaWRPaWQ7CisJCQllbG9n KEVSUk9SLCAiZ2xvYmFsIG9iamVjdHMgbm90IHN1cHBvcnRlZCIpOworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQiLCBpc3RtdC0+ b2JqdHlwZSk7CisJfQorCisJLyogR1JBTlQgVE8gb3IgUkVWT0tFIEZST00gKi8KKwlyZXQgPSBu ZXdfb2JqdHJlZShpc3RtdC0+aXNfZ3JhbnQgPyAiR1JBTlQiIDogIlJFVk9LRSIpOworCisJLyog QnVpbGQgYSBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3JhbnQvcmV2b2tlICovCisJaWYgKGlzdG10 LT5hbGxfcHJpdnMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiQUxMIFBSSVZJTEVHRVMiKTsK KwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVsc2UK Kwl7CisJCWNoYXIgKnByaXY7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9JTlNFUlQp CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0lOU0VSVCk7 CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0K KwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1NFTEVDVCkKKwkJeworCQkJcHJpdiA9IChj aGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfU0VMRUNUKTsKKwkJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfVVBEQVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9VUERBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9ERUxFVEUp CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0RFTEVURSk7 CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0K KwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSVU5DQVRFKQorCQl7CisJCQlwcml2ID0g KGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9UUlVOQ0FURSk7CisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZp bGVnZV90b19zdHJpbmcoQUNMX1JFRkVSRU5DRVMpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAm IEFDTF9UUklHR0VSKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5n KEFDTF9UUklHR0VSKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0 KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfRVhFQ1VURSkKKwkJ eworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfRVhFQ1VURSk7CisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VTQUdFKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9VU0FHRSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX0NSRUFURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmlu ZyhBQ0xfQ1JFQVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0 KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFX1RFTVAp CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURV9U RU1QKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsK KwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ09OTkVDVCkKKwkJeworCQkJcHJp diA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfQ09OTkVDVCk7CisJCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10 LT5wcml2aWxlZ2VzICYgQUNMX01BSU5UQUlOKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2 aWxlZ2VfdG9fc3RyaW5nKEFDTF9NQUlOVEFJTik7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKworCQlpZiAoIWlzdG10LT5pc19ncmFudCAm JiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtn cmFudF9vcHRpb259cyIsICJncmFudF9vcHRpb24iLAorCQkJCQkJCQkgaXN0bXQtPmdyYW50X29w dGlvbiA/ICJHUkFOVCBPUFRJT04gRk9SIiA6ICIiKTsKKworCQlpZiAoaXN0bXQtPmNvbF9wcml2 cyAhPSBOSUwpCisJCXsKKwkJCUxpc3RDZWxsICAgKm9jZWxsOworCisJCQlmb3JlYWNoKG9jZWxs LCBpc3RtdC0+Y29sX3ByaXZzKQorCQkJeworCQkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3Qo b2NlbGwpOworCQkJCUxpc3QJICAgKmNvbHMgPSBOSUw7CisKKwkJCQlmb3JlYWNoKGNlbGwsIHBy aXYtPmNvbHMpCisJCQkJeworCQkJCQlTdHJpbmcJICAgKmNvbG5hbWUgPSBsZmlyc3Rfbm9kZShT dHJpbmcsIGNlbGwpOworCisJCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsCisJCQkJCQkJCSAgIG5l d19zdHJpbmdfb2JqZWN0KHN0clZhbChjb2xuYW1lKSkpOworCQkJCX0KKworCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCIoJXtjb2xzOiwgfXMpICV7cHJpdn1zIiwgMiwKKwkJCQkJCQkJCSAiY29s cyIsIE9ialR5cGVBcnJheSwgY29scywKKwkJCQkJCQkJCSAicHJpdiIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkgIHByaXYtPnByaXZfbmFtZSA/IHByaXYtPnByaXZfbmFtZSA6ICJBTEwgUFJJ VklMRUdFUyIpOworCisJCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJCQl9CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3ByaXZp bGVnZXM6LCB9cyBPTiIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtv Ymp0eXBlfXMiLCAib2JqdHlwZSIsCisJCQkJCQkgKGNoYXIgKilzdHJpbmdpZnlfb2JqdHlwZShp c3RtdC0+b2JqdHlwZSwgdHJ1ZSkpOworCisJLyogVGFyZ2V0IG9iamVjdHMuICBXZSB1c2Ugb2Jq ZWN0IGlkZW50aXRpZXMgaGVyZSAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3Rt dC0+b2JqZWN0cykKKwl7CisJCU9pZAkJCW9iamlkID0gbGZpcnN0X29pZChjZWxsKTsKKwkJT2Jq ZWN0QWRkcmVzcyBhZGRyOworCisJCWFkZHIuY2xhc3NJZCA9IGNsYXNzSWQ7CisJCWFkZHIub2Jq ZWN0SWQgPSBvYmppZDsKKwkJYWRkci5vYmplY3RTdWJJZCA9IDA7CisKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIiV7aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJIGdldE9iamVjdElkZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHJldCwgIiV7cHJpdnRhcmdldDosIH1zIiwgbGlzdCk7CisKKwlhcHBlbmRf Zm9ybWF0X3N0cmluZyhyZXQsIGlzdG10LT5pc19ncmFudCA/ICJUTyIgOiAiRlJPTSIpOworCisJ LyogTGlzdCBvZiBncmFudGVlcyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3Rt dC0+Z3JhbnRlZXMpCisJeworCQlPaWQJCQlncmFudGVlID0gbGZpcnN0X29pZChjZWxsKTsKKwor CQl0bXAgPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChncmFudGVlKTsKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICIle2dyYW50ZWVzOiwgfXMiLCBsaXN0KTsKKworCS8qIFRoZSB3b3JkaW5nIG9m IHRoZSBncmFudCBvcHRpb24gaXMgdmFyaWFibGUgLi4uICovCisJaWYgKGlzdG10LT5pc19ncmFu dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtncmFudF9vcHRpb259cyIsICJncmFu dF9vcHRpb24iLAorCQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8gIldJVEggR1JBTlQgT1BU SU9OIiA6ICIiKTsKKworCWlmIChpc3RtdC0+Z3JhbnRvcl91aWQpCisJeworCQlIZWFwVHVwbGUJ cm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShpc3RtdC0+Z3JhbnRvcl91aWQpKTsKKwkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igcm9sZSB3aXRoIE9JRCAldSIsCisJCQkJIGlzdG10LT5ncmFudG9yX3VpZCk7 CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0 dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkdSQU5URUQgQlkg JXtyb2xlbmFtZX1zIiwKKwkJCQkJCQkgInJvbGVuYW1lIiwgcm9sZW5hbWUpOworCQlSZWxlYXNl U3lzQ2FjaGUocm9sdHVwKTsKKwl9CisKKwlpZiAoIWlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiJXtjYXNjYWRlfXMiLCAiY2FzY2FkZSIsCisJCQkJCQkJIGlz dG10LT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUgPyAiQ0FTQ0FERSIgOiAiIik7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9wZXJhdG9yU3RtdCAoQUxURVIg T1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICoKKyAqIEdpdmVuIGFuIG9wZXJhdG9yIE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TFRFUiBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1U KQorICogU0VUICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVh cFR1cGxlCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRlck9wZXJhdG9y U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUZvcm1fcGdfb3BlcmF0b3Ig b3ByRm9ybTsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwlv cHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ b3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcHJGb3Jt LT5vcHJuYW1lKSkpOworCisJLyogTEVGVEFSRyAqLworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIoJXtsZWZ0X3R5cGV9VCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJ ZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIoJXtsZWZ0X3R5cGV9cyIsICJsZWZ0 X3R5cGUiLCAiTk9ORSIpOworCisJLyogUklHSFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChv cHJGb3JtLT5vcHJsZWZ0KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiLCAle3JpZ2h0 X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0 LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAg ICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wX29i aiA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAw KQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJ CQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJCQlpZiAoT2lkSXNW YWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2Jq LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3Qp KTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1 cmV9cyIsICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKwkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImpvaW4iKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1zIiwgInByb2NlZHVyZSIsCisJCQkJCQkJCQkg Ik5PTkUiKTsKKwkJfQorCisJCUFzc2VydCh0bXBfb2JqKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiU0VUICgle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo b3ByVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9Q RVJBVE9SIEZBTUlMWSBBREQvRFJPUCBjb21tYW5kLgorICoKKyAqIEdpdmVuIHRoZSBDb2xsZWN0 ZWRDb21tYW5kLCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIEFsdGVyCisgKiBP cGVyYXRvciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBPUEVSQVRP UiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AgJXtpdGVtczos fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9wRmFtaWx5KENvbGxlY3Rl ZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJQWx0ZXJPcEZhbWlseVN0bXQg KnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJSGVhcFR1cGxl CWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5JTDsK KwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyogRG9uJ3QgZGVwYXJzZSBTUUwgY29tbWFuZHMgZ2Vu ZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChjbWQtPmluX2V4dGVuc2lv bikKKwkJcmV0dXJuIE5VTEw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQs CisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkgY21kLT5k Lm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkg R0VUU1RSVUNUKGZ0cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1Ig RkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwgMiwKKwkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZG b3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFt ZSkpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJ Zm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1i ZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJLyoK KwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJh dG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCQkibnVtIiwg T2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBu YW1lOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNE cm9wKQorCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7b3BlcmF0b3J9TyIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVjdCkpOworCisJCS8qIEFkZCB0aGUgdHlwZXMgKi8K KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIigle2x0eXBlfVQsIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+bGVmdHR5cGUsIC0xKSk7CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcF9vYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAv IEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3Rt dC0+aXNEcm9wKQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQor CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsICJwdXJwb3Nl IiwKKwkJCQkJCQkJCSAiRk9SIFNFQVJDSCIpOworCQkJZWxzZQorCQkJeworCQkJCU9ialRyZWUg ICAgKm9yZGVyYnlfb2JqOworCisJCQkJb3JkZXJieV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRk9S IE9SREVSIEJZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkJCQkJCSJvcGZhbWlseSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv ckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQlvcGVyLT5zb3J0ZmFtaWx5KSk7 CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwgb3JkZXJi eV9vYmopOworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2Nl ZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2Jq VHJlZSAgICAqdG1wX29iajsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9O ICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsIDMsCisJCQkJCQkJCSJudW0iLCBPYmpU eXBlSW50ZWdlciwgcHJvYy0+bnVtYmVyLAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJ CQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlw ZShwcm9jLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyoKKwkJICogQWRkIHRoZSBmdW5jdGlvbiBu YW1lIGFuZCBhcmcgdHlwZXM7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlCisJCSAqIHRoaXMK KwkJICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsK KwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJ TGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkJIHByb2MtPm9i amVjdCk7CisJCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsK KworCQkJcHJvYXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9y IChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUg ICAgKmFyZzsKKworCQkJCWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ld LCAtMSk7CisJCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3Qo YXJnKSk7CisJCQl9CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Z1bmN0 aW9ufUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9u YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsK KworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wX29iaiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIikiKTsKKworCQkJUmVsZWFzZVN5c0NhY2hlKHByb2NU dXApOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHJldCwgIkRST1AiKTsKKwllbHNlCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIkFERCIp OworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYW4gQWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICoKKyAqIEdp dmVuIHRoZSBvYmplY3QgYWRkcmVzcyBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgT1dORVIgVE8g JXtuZXdvd25lcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPd25lclN0 bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPd25l clN0bXQgKm5vZGUgPSAoQWx0ZXJPd25lclN0bXQgKikgcGFyc2V0cmVlOworCisJcmV0dXJuIG5l d19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fXMgT1dORVIgVE8gJXtu ZXdvd25lcn1JIiwgMywKKwkJCQkJCSAgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ ICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlLCBmYWxzZSksCisJCQkJCQkgICJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGdldE9iamVjdElkZW50aXR5KCZhZGRy ZXNzLCBmYWxzZSksCisJCQkJCQkgICJuZXdvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg IGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5ld293bmVyKSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IGFuIEFsdGVyU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJz ZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFNF UVVFTkNFICV7aWRlbnRpdHl9RCAle2RlZmluaXRpb246IH1zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVl bmNlX2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1 cGxlCXNlcXR1cGxlOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3Rt dCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4g b3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7 IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChhbHRlclNlcVN0bXQtPmZvcl9pZGVudGl0 eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmpl Y3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJ CQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1 ZW5jZSB3aXRoIE9JRCAgJXUiLCBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2Vx dWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFT dG10ICopIHBhcnNldHJlZSktPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVtID0gKERl ZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07CisKKwkJaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfQ2FjaGUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0s IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBp ZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChl bGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUs ICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxZGF0 YSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfT3duZWRCeShvYmplY3RJZCwgZmFsc2UpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImFzIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX0FzKGVsZW0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzZXF1ZW5j ZSBvcHRpb24gJXMiLCBlbGVtLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IG5ld2VsbSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNFUVVFTkNFICV7 aWRlbnRpdHl9RCAle2RlZmluaXRpb246IH1zIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRf cmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbGF0aW9uKSksCisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1zKTsK KworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhbiBBbHRlclR5cGVTdG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEg cGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBU WVBFICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiB9cykKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQorewor CUFsdGVyVHlwZVN0bXQgKmFsdGVyVHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKSBjbWQ7 CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlCXR5 cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hl MShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0 eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBH RVRTVFJVQ1QodHlwVHVwKTsKKworCWZvcmVhY2gocGwsIGFsdGVyVHlwZVNldFN0bXQtPm9wdGlv bnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChwbCk7CisJ CU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Rv cmFnZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3RvcmFnZSh0eXBGb3JtKTsK KwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzZW5kIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TZW5kKHR5cEZv cm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX2luIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfSW4odHlwRm9ybSk7CisJCWlmIChzdHJjbXAo ZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9UeXBtb2RfT3V0KHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi YW5hbHl6ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfQW5hbHl6ZSh0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1YnNjcmlwdCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KHR5cEZvcm0pOworCQllbHNlCisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR5 cFR1cCk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1E IFNFVCAoJXtkZWZpbml0aW9uOiB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJICBvYmplY3RJZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2Jq VHlwZUFycmF5LCBlbGVtcyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0 bXQgKENSRUFURSBUWVBFIEFTKQorICoKKyAqIEdpdmVuIGEgQ29tcG9zaXRlIHR5cGUgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyAoJXtjb2x1bW5zOiwgfXMpCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ29tcG9zaXRlVHlwZVN0bXQgKm5vZGUgPSAoQ29tcG9zaXRl VHlwZVN0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBl IHR5cGZvcm07CisJUmVsYXRpb24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlz dAkgICAqdGFibGVlbHRzID0gTklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQg b3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR5cHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHlwdHVwKTsKKwl0eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50 eXByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4 dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlv bkdldFJlbGlkKHR5cGVyZWwpKTsKKworCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50 cyh0eXBlcmVsLCBub2RlLT5jb2xkZWZsaXN0LCBkcGNvbnRleHQsCisJCQkJCQkJCQkgIGZhbHNl LAkvKiBub3QgdHlwZWQgKi8KKwkJCQkJCQkJCSAgdHJ1ZSk7CS8qIGNvbXBvc2l0ZSB0eXBlICov CisKKwl0YWJsZV9jbG9zZSh0eXBlcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCVJlbGVhc2VTeXND YWNoZSh0eXB0dXApOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lk ZW50aXR5fUQgQVMgKCV7Y29sdW1uczosIH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVs YXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgdGFi bGVlbHRzKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVDb252ZXJzaW9uU3RtdAorICoK KyAqIEdpdmVuIGEgY29udmVyc2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZF UlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MCisgKiBGUk9NICV7 ZnVuY3Rpb259RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNvbnZlcnNp b24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlCWNvblR1cDsK KwlSZWxhdGlvbgljb252cmVsOworCUZvcm1fcGdfY29udmVyc2lvbiBjb25Gb3JtOworCU9ialRy ZWUgICAgKnJldDsKKworCWNvbnZyZWwgPSB0YWJsZV9vcGVuKENvbnZlcnNpb25SZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCWNvblR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQo Y29udnJlbCwgQW51bV9wZ19jb252ZXJzaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChjb25UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgY29udmVyc2lvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb25Gb3JtID0gKEZvcm1f cGdfY29udmVyc2lvbikgR0VUU1RSVUNUKGNvblR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJj ZX1MIFRPICV7ZGVzdH1MIEZST00gJXtmdW5jdGlvbn1EIiwgNSwKKwkJCQkJCSAgImRlZmF1bHQi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBjb25Gb3JtLT5jb25kZWZhdWx0ID8gIkRFRkFVTFQi IDogIiIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg ICBOYW1lU3RyKGNvbkZvcm0tPmNvbm5hbWUpKSwKKwkJCQkJCSAgInNvdXJjZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgIChjaGFyICopcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25m b3JlbmNvZGluZyksCisJCQkJCQkgICJkZXN0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgKGNo YXIgKilwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5jb2RpbmcpLAorCQkJCQkJ ICAiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIGNvbkZvcm0tPmNv bnByb2MpKTsKKworCXRhYmxlX2Nsb3NlKGNvbnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUg VFlQRSBBUyBFTlVNKQorICoKKyAqIEdpdmVuIGEgRW51bSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUg VFlQRSAle2lkZW50aXR5fUQgQVMgRU5VTSAoJXt2YWx1ZXM6LCB9TCkKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlDcmVhdGVFbnVtU3RtdCAqbm9kZSA9IChDcmVhdGVFbnVtU3RtdCAqKSBwYXJz ZXRyZWU7CisJTGlzdAkgICAqdmFsdWVzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlm b3JlYWNoKGNlbGwsIG5vZGUtPnZhbHMpCisJCXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBuZXdf c3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKSkpKTsKKworCXJl dHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIEVOVU0gKCV7 dmFsdWVzOiwgfUwpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJ ZCksCisJCQkJCQkgICJ2YWx1ZXMiLCBPYmpUeXBlQXJyYXksIHZhbHVlcyk7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlRXh0ZW5zaW9uU3RtdAorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lv biBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAl e29wdGlvbnM6IH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0ZW5z aW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRlbnNp b25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0 aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJZXh0VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9u IGV4dEZvcm07CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlz dENlbGwgICAqY2VsbDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3Rf Ynlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJZXh0Rm9y bSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwkvKiBMaXN0IG9m IG9wdGlvbnMgKi8KKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVt ICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQt PmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQorCQl7CisJCQkvKiBTa2lwIHRoaXMgb25lOyB3ZSBh ZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxz ZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9i alR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmco b3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0 LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQgdGhlIFNDSEVNQSBvcHRpb24gKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2NoZW1hfUkiLCAyLAorCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJCQkgInNjaGVtYSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4dEZvcm0tPmV4dG5hbWVzcGFjZSkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCXRhYmxlX2Nsb3NlKHBn X2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle29wdGlvbnM6IH1z IiwgMywKKwkJCQkJCSAgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBu b2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgICJuYW1l IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0bmFtZSwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpU eXBlQXJyYXksIGxpc3QpOworfQorCisvKgorICogSWYgYSBjb2x1bW4gbmFtZSBpcyBzcGVjaWZp ZWQsIGFkZCBhbiBlbGVtZW50IGZvciBpdDsgb3RoZXJ3aXNlIGl0J3MgYQorICogdGFibGUtbGV2 ZWwgb3B0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Zkd09wdGlvbnMoTGlz dCAqb3B0aW9ucywgY2hhciAqY29sbmFtZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlpZiAo Y29sbmFtZSkKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IiwgMSwKKwkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIGNvbG5hbWUpOworCWVsc2UK KwkJcmV0ID0gbmV3X29ianRyZWUoIk9QVElPTlMiKTsKKworCWlmIChvcHRpb25zICE9IE5JTCkK Kwl7CisJCUxpc3QJICAgKm9wdG91dCA9IE5JTDsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlm b3JlYWNoKGNlbGwsIG9wdGlvbnMpCisJCXsKKwkJCURlZkVsZW0gICAgKmVsZW07CisJCQlPYmpU cmVlICAgICpvcHQ7CisKKwkJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJ CXN3aXRjaCAoZWxlbS0+ZGVmYWN0aW9uKQorCQkJeworCQkJCWNhc2UgREVGRUxFTV9VTlNQRUM6 CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJ CQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJ CQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0 U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6 ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fU0VUOgorCQkJCQlvcHQg PSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJ CSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFs dWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmco ZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNF Iik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9BREQ6CisJCQkJCW9wdCA9IG5ld19v Ymp0cmVlX1ZBKCJBREQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJl bCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6 CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJ CQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0RST1A6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVl X1ZBKCJEUk9QICV7bGFiZWx9SSIsIDEsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJp bmcsIGVsZW0tPmRlZm5hbWUpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBkZWYgYWN0aW9uICVkIiwgZWxlbS0+ZGVmYWN0aW9uKTsKKwkJCQkJ b3B0ID0gTlVMTDsKKwkJCX0KKworCQkJb3B0b3V0ID0gbGFwcGVuZChvcHRvdXQsIG5ld19vYmpl Y3Rfb2JqZWN0KG9wdCkpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtv cHRpb246ICx9cykiLCBvcHRvdXQpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChy ZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGZHdTdG10 IChDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYW4gRkRXIE9JRCBh bmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICog cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JICV7aGFuZGxlcn1z ICV7dmFsaWRhdG9yfXMgJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZUZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlRmR3U3RtdCAqbm9kZSA9IChDcmVhdGVGZHdTdG10ICopIHBhcnNldHJlZTsKKwlI ZWFwVHVwbGUJZmR3VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsK KwlSZWxhdGlvbglyZWw7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwor CXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVS T0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBmb3JlaWduLWRhdGEgd3JhcHBlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJ ZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVw KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIg JXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1l U3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsKKworCS8qIEFkZCBIQU5ETEVSIGNsYXVzZSAqLworCWlm ICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHdoYW5kbGVyKSkKKwkJdG1wID0gbmV3X29ianRyZWUo Ik5PIEhBTkRMRVIiKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExF UiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle2hhbmRsZXJ9cyIsIHRtcCk7CisKKwkvKiBBZGQgVkFMSURBVE9S IGNsYXVzZSAqLworCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKQorCQl0 bXAgPSBuZXdfb2JqdHJlZSgiTk8gVkFMSURBVE9SIik7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2Nl ZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRh dG9yKSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dmFsaWRhdG9yfXMiLCB0 bXApOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zk d09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1 cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRmR3U3RtdCAoQUxURVIgRk9SRUlHTiBEQVRB IFdSQVBQRVIpCisgKgorICogR2l2ZW4gYW4gRkRXIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRl ciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBGT1JFSUdOIERBVEEg V1JBUFBFUiAle2lkZW50aXR5fUkgJXtmZHdfb3B0aW9uczogfXMgJXtnZW5lcmljX29wdGlvbnN9 RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRmR3U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZkd1N0bXQgKm5vZGUgPSAoQWx0ZXJGZHdT dG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZmR3VHVwOworCUZvcm1fcGdfZm9yZWlnbl9k YXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxhdGlvbglyZWw7CisJT2JqVHJlZSAgICAqcmV0Owor CUxpc3QJICAgKmZkd19vcHRpb25zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZWwg PSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwK KwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9y ZWlnbi1kYXRhIHdyYXBwZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZkd0Zv cm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVu dGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZk d0Zvcm0tPmZkd25hbWUpKTsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRv IHNlZSB3aGF0IGNoYW5nZWQsIGJ1dCB1c2UgY2F0YWxvZyBhcyBhCisJICogYmFzaXMgZm9yIG5l dyB2YWx1ZXMuCisJICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJewor CQlEZWZFbGVtICAgICplbGVtOworCQlPYmpUcmVlICAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJz dChjZWxsKTsKKworCQlpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIp ID09IDApCisJCXsKKwkJCS8qIGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCQkJaWYgKCFPaWRJc1Zh bGlkKGZkd0Zvcm0tPmZkd2hhbmRsZXIpKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBIQU5E TEVSIik7CisJCQllbHNlCisJCQl7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIg JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIpKTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFw cGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBp ZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAidmFsaWRhdG9yIikgPT0gMCkKKwkJewor CQkJLyogYWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3Jt LT5mZHd2YWxpZGF0b3IpKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBWQUxJREFUT1IiKTsK KwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJv Y2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVu ZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwl9CisKKwkvKiBB ZGQgSEFORExFUi9WQUxJREFUT1IgaWYgc3BlY2lmaWVkICovCisJYXBwZW5kX2FycmF5X29iamVj dChyZXQsICIle2Zkd19vcHRpb25zOiB9cyIsIGZkd19vcHRpb25zKTsKKworCS8qIEFkZCBhbiBP UFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtn ZW5lcmljX29wdGlvbnN9RCIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJl bCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIENSRUFURSBUWVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdpdmVuIGEgUmFuZ2Ug dHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIFJBTkdFICgle2RlZmlu aXRpb246LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVSYW5nZVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqdG1wOwor CUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1 cGxlCXJhbmdlVHVwOworCUZvcm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtl eVsxXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdl UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAor CQkJCUFudW1fcGdfcmFuZ2Vfcm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBG X09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0 YWJsZV9iZWdpbnNjYW4ocGdfcmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJ CSAgTlVMTCwgMSwga2V5KTsKKworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcmFuZ2Ugd2l0aCB0eXBlIE9JRCAldSIsCisJCQkgb2JqZWN0SWQp OworCisJcmFuZ2VGb3JtID0gKEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisK KwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEUgPSAle3R5cGV9 RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlIiwKKwkJCQkJ CSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLCByYW5nZUZvcm0tPnJuZ3N1YnR5cGUpKTsKKwlkZWZpbml0aW9u ID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNV QlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3Vib3BjKSkK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX09QQ0xBU1MgPSAle29wY2xhc3N9 RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3BjbGFzcyIsCisJCQkJ CQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9wZXJhdG9yQ2xhc3NSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VG b3JtLT5ybmdzdWJvcGMpKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogQ09MTEFUSU9OICovCisJaWYgKE9pZElz VmFsaWQocmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJCQkJICJjb2xsYXRpb24iLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSk7CisJCWRlZmlu aXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0K KworCS8qIENBTk9OSUNBTCAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY2Fub25p Y2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQU5PTklDQUwgPSAle2Nhbm9uaWNh bH1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYW5vbmljYWwiLAor CQkJCQkJCSAiY2Fub25pY2FsIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5n ZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9u LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlp ZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIlNVQlRZUEVfRElGRiA9ICV7c3VidHlwZV9kaWZmfUQiLCAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGVfZGlmZiIsCisJCQkJCQkJICJzdWJ0eXBl X2RpZmYiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3Vi ZGlmZikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3Nl KHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIFJBTkdFICgle2RlZmluaXRpb246LCB9cykiLCAy LAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImRl ZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGRlZmluaXRpb24pOworfQorCisvKgorICogRGVwYXJz ZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGFuIGVudW0gT0lEIGFuZCBhIHBhcnNl IHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVFlQRSAl e2lkZW50aXR5fUQgQUREIFZBTFVFICV7aWZfbm90X2V4aXN0c31zICV7dmFsdWV9TAorICogJXth ZnRlcl9vcl9iZWZvcmV9cyAle25laWdoYm9yfUwKKyAqIAlPUgorICogQUxURVIgVFlQRSAle2lk ZW50aXR5fUQgUkVOQU1FIFZBTFVFICV7dmFsdWV9TCBUTyAle25ld3ZhbHVlfUwKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUFsdGVyRW51bVN0bXQgKm5vZGUgPSAoQWx0ZXJFbnVtU3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIFRZUEUgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCWlmICghbm9kZS0+b2xkVmFsKQorCXsKKwkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiQUREIFZBTFVFIik7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7aWZfbm90X2V4aXN0c31zIiwgImlmX25vdF9leGlzdHMiLAorCQkJCQkJ CSBub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt2YWx1ZX1MIiwgInZhbHVlIiwgbm9kZS0+bmV3 VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFsTmVpZ2hib3IpCisJCXsKKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7YWZ0ZXJfb3JfYmVmb3JlfXMiLAorCQkJCQkJCQkgImFmdGVyX29y X2JlZm9yZSIsCisJCQkJCQkJCSBub2RlLT5uZXdWYWxJc0FmdGVyID8gIkFGVEVSIiA6ICJCRUZP UkUiKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bmVpZ2hib3J9TCIsICJuZWln aGJvciIsCisJCQkJCQkJCSBub2RlLT5uZXdWYWxOZWlnaGJvcik7CisJCX0KKwl9CisJZWxzZQor CXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiUkVOQU1FIFZBTFVFICV7dmFsdWV9TCBU TyIsICJ2YWx1ZSIsCisJCQkJCQkJIG5vZGUtPm9sZFZhbCk7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7bmV3dmFsdWV9TCIsICJuZXd2YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisJfQor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFeHRlbnNpb25TdG10 IChBTFRFUiBFWFRFTlNJT04gLi4gVVBEQVRFIFRPIFZFUlNJT04pCisgKgorICogR2l2ZW4gYW4g ZXh0ZW5zaW9uIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIEFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUkgVVBEQVRFICV7b3B0aW9u czogfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFeHRlbnNpb25TdG10ICpu b2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0 ZW5zaW9uOworCUhlYXBUdXBsZQlleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsK KwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCURlZkVsZW0gICAgKmRfbmV3X3ZlcnNpb24gPSBOVUxMOworCisJcGdfZXh0ZW5zaW9u ID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4 dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4 dGVuc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9J RCAldSIsCisJCQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdF VFNUUlVDVChleHRUdXApOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJ RGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJj bXAob3B0LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQlPYmpUcmVlICAg ICp0bXA7CisKKwkJCWlmIChkX25ld192ZXJzaW9uKQorCQkJCWVsb2coRVJST1IsICJjb25mbGlj dGluZyBvciByZWR1bmRhbnQgb3B0aW9ucyBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJ CQkJIG9iamVjdElkKTsKKworCQkJZF9uZXdfdmVyc2lvbiA9IG9wdDsKKworCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBk ZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0 aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRVhURU5TSU9OICV7aWRlbnRpdHl9SSBVUERBVEUgJXtvcHRpb25zOiB9cyIsIDIsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihleHRGb3JtLT5leHRuYW1lKSwK KwkJCQkJCSAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShw Z19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhbiBBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAoQUxURVIgRVhURU5TSU9O IGV4dCBBREQvRFJPUCBvYmplY3QpCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIEVY VEVOU0lPTiAle2V4dGlkZW50aXR5fUkgQUREL0RST1AgJXtvYmppZGVudGl0eX1zCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJCSAgIE9iamVjdEFkZHJlc3Mgb2JqZWN0 QWRkcmVzcykKK3sKKwlBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqbm9kZSA9IChBbHRlckV4 dGVuc2lvbkNvbnRlbnRzU3RtdCAqKSBwYXJzZXRyZWU7CisKKwlBc3NlcnQobm9kZS0+YWN0aW9u ID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAtMSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEo IkFMVEVSIEVYVEVOU0lPTiAle2V4dGlkZW50aXR5fUkgJXtleHRvcHRpb259cyAle2V4dG9ianR5 cGV9cyAle29iamlkZW50aXR5fXMiLCA0LAorCQkJCQkJICAiZXh0aWRlbnRpdHkiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5leHRuYW1lLAorCQkJCQkJICAiZXh0b3B0aW9uIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSAgbm9kZS0+YWN0aW9uID09ICsxID8gIkFERCIgOiAiRFJPUCIsCisJCQkJCQkg ICJleHRvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqdHlwZSwgZmFsc2UpLAorCQkJCQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmb2JqZWN0QWRkcmVzcywgZmFsc2UpKTsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlQ2FzdFN0bXQuCisgKgorICogR2l2ZW4gYSBz ZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0 eXBlfVQpICV7bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChDcmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRyZWU7CisJ UmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVwbGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nhc3QgY2Fz dEZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKmNvbnRleHQ7CisKKwljYXN0cmVs ID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljYXN0VHVw ID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXN0cmVsLCBBbnVtX3BnX2Nhc3Rfb2lkLCBv YmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNhc3RUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsK KwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVwKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0 eXBlfVQpIiwgMiwKKwkJCQkJCSAic291cmNldHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCSAi dGFyZ2V0dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUo Y2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9kZS0+aW5vdXQpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMiLCAibWVjaGFuaXNtIiwKKwkJCQkJ CQkgIldJVEggSU5PVVQiKTsKKwllbHNlIGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMiLCAibWVjaGFuaXNtIiwKKwkJCQkJ CQkgIldJVEhPVVQgRlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlPYmpUcmVlICAgICp0bXBfb2Jq OworCQlTdHJpbmdJbmZvRGF0YSBmdW5jOworCQlIZWFwVHVwbGUJZnVuY1R1cDsKKwkJRm9ybV9w Z19wcm9jIGZ1bmNGb3JtOworCQlpbnQJCQlpOworCisJCWZ1bmNUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoUFJPQ09JRCwgY2FzdEZvcm0tPmNhc3RmdW5jKTsKKwkJZnVuY0Zvcm0gPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QoZnVuY1R1cCk7CisKKwkJaW5pdFN0cmluZ0luZm8oJmZ1bmMpOworCQlh cHBlbmRTdHJpbmdJbmZvKCZmdW5jLCAiJXMoIiwKKwkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRl bnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJ CQkJCQkJCQkJTmFtZVN0cihmdW5jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZm9yIChpID0gMDsgaSA8 IGZ1bmNGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlpZiAoaSAhPSAwKQorCQkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnLCcpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5j LCAnKScpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nh c3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkJImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcs IGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMi LCB0bXBfb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNo IChub2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRl eHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVO VDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VS Q0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQp OworCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJfQorCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y29udGV4dH1zIiwgImNvbnRleHQiLCBjb250ZXh0KTsK KworCXRhYmxlX2Nsb3NlKGNhc3RyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgc3RhdGVt ZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMg JXtpbl9zY2hlbWF9cyAle2Zvcl9yb2xlc31zICV7Z3JhbnR9cworICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10KENvbGxlY3RlZENvbW1hbmQg KmNtZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQg KnN0bXQgPSAoQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJ TGlzdAkgICAqcm9sZXMgPSBOSUw7CisJTGlzdAkgICAqc2NoZW1hcyA9IE5JTDsKKwlMaXN0CSAg ICpncmFudGVlczsKKwlMaXN0CSAgICpwcml2czsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRy ZWUgICAgKnRtcDsKKwlPYmpUcmVlICAgICpncmFudDsKKwljaGFyCSAgICpvYmp0eXBlOworCisJ cmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyIpOworCisJLyogU2Nh biB0aGUgcGFyc2Ugbm9kZSB0byBkaWcgb3V0IHRoZSBGT1IgUk9MRSBhbmQgSU4gU0NIRU1BIGNs YXVzZXMgKi8KKwlmb3JlYWNoKGNlbGwsIHN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAg ICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCUxpc3RDZWxsICAgKmNlbGwyOwor CisJCUFzc2VydChJc0Eob3B0LCBEZWZFbGVtKSk7CisJCUFzc2VydChJc0Eob3B0LT5hcmcsIExp c3QpKTsKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJyb2xlcyIpID09IDApCisJCXsKKwkJ CWZvcmVhY2goY2VsbDIsIChMaXN0ICopIG9wdC0+YXJnKQorCQkJeworCQkJCVJvbGVTcGVjICAg KnJvbGVzcGVjID0gbGZpcnN0KGNlbGwyKTsKKwkJCQlPYmpUcmVlICAgICpvYmogPSBuZXdfb2Jq dHJlZV9mb3Jfcm9sZXNwZWMocm9sZXNwZWMpOworCisJCQkJcm9sZXMgPSBsYXBwZW5kKHJvbGVz LCBuZXdfb2JqZWN0X29iamVjdChvYmopKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChzdHJjbXAo b3B0LT5kZWZuYW1lLCAic2NoZW1hcyIpID09IDApCisJCXsKKwkJCWZvcmVhY2goY2VsbDIsIChM aXN0ICopIG9wdC0+YXJnKQorCQkJeworCQkJCVN0cmluZwkgICAqdmFsID0gbGZpcnN0X25vZGUo U3RyaW5nLCBjZWxsMik7CisKKwkJCQlzY2hlbWFzID0gbGFwcGVuZChzY2hlbWFzLCBuZXdfc3Ry aW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCQkJfQorCQl9CisJfQorCisJLyogQWRkIHRoZSBJ TiBTQ0hFTUEgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiSU4gU0NIRU1B Iik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle3NjaGVtYXM6LCB9SSIsIHNjaGVtYXMp OworCWlmIChzY2hlbWFzID09IE5JTCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpbl9zY2hlbWF9cyIsIHRtcCk7CisKKwkvKiBBZGQg dGhlIEZPUiBST0xFIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIkZPUiBS T0xFIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle3JvbGVzOiwgfVIiLCByb2xlcyk7 CisJaWYgKHJvbGVzID09IE5JTCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtmb3Jfcm9sZXN9cyIsIHRtcCk7CisKKwkvKgorCSAqIEFk ZCB0aGUgR1JBTlQgc3ViY29tbWFuZAorCSAqIFZlcmJvc2Ugc3ludGF4CisJICogR1JBTlQgJXtw cml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9cyBUTyAle2dyYW50ZWVzOiwgfVIgJXtncmFudF9v cHRpb259cworCSAqIG9yCisJICogUkVWT0tFICV7Z3JhbnRfb3B0aW9ufXMgJXtwcml2aWxlZ2Vz OiwgfXMgT04gJXt0YXJnZXR9cyBGUk9NICV7Z3JhbnRlZXM6LCB9UgorCSAqLworCWlmIChzdG10 LT5hY3Rpb24tPmlzX2dyYW50KQorCQlncmFudCA9IG5ld19vYmp0cmVlKCJHUkFOVCIpOworCWVs c2UKKwl7CisJCWdyYW50ID0gbmV3X29ianRyZWUoIlJFVk9LRSIpOworCisJCS8qIEFkZCB0aGUg R1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgUkVWT0tFIHN1YmNvbW1hbmQgKi8KKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkdSQU5UIE9QVElPTiBGT1IiLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9i alR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdyYW50X29wdGlvbik7CisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRpb259cyIsIHRtcCk7CisJfQorCisJ LyoKKwkgKiBBZGQgdGhlIHByaXZpbGVnZXMgbGlzdC4gIFRoaXMgdXNlcyB0aGUgcGFyc2VyIHN0 cnVjdCwgYXMgb3Bwb3NlZCB0bworCSAqIHRoZSBJbnRlcm5hbEdyYW50IGZvcm1hdCB1c2VkIGJ5 IEdSQU5ULiAgVGhlcmUgYXJlIGVub3VnaCBvdGhlcgorCSAqIGRpZmZlcmVuY2VzIHRoYXQgdGhp cyBkb2Vzbid0IHNlZW0gd29ydGggaW1wcm92aW5nLgorCSAqLworCWlmIChzdG10LT5hY3Rpb24t PnByaXZpbGVnZXMgPT0gTklMKQorCQlwcml2cyA9IGxpc3RfbWFrZTEobmV3X3N0cmluZ19vYmpl Y3QoIkFMTCBQUklWSUxFR0VTIikpOworCWVsc2UKKwl7CisJCXByaXZzID0gTklMOworCisJCWZv cmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzKQorCQl7CisJCQlBY2Nlc3NQcml2 ICpwcml2ID0gbGZpcnN0KGNlbGwpOworCisJCQlBc3NlcnQocHJpdi0+Y29scyA9PSBOSUwpOwor CQkJcHJpdnMgPSBsYXBwZW5kKHByaXZzLCBuZXdfc3RyaW5nX29iamVjdChwcml2LT5wcml2X25h bWUpKTsKKwkJfQorCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQsICIle3ByaXZpbGVn ZXM6LCB9cyIsIHByaXZzKTsKKworCXN3aXRjaCAoY21kLT5kLmRlZnByaXZzLm9ianR5cGUpCisJ eworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCW9ianR5cGUgPSAiVEFCTEVTIjsKKwkJCWJyZWFr OworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCW9ianR5cGUgPSAiRlVOQ1RJT05TIjsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJb2JqdHlwZSA9ICJST1VUSU5FUyI7 CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlvYmp0eXBlID0gIlNFUVVF TkNFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCW9ianR5cGUgPSAiVFlQ RVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCW9ianR5cGUgPSAiU0NI RU1BUyI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9C SkVDVCB2YWx1ZSAlZCBmb3IgZGVmYXVsdCBwcml2aWxlZ2VzIiwgY21kLT5kLmRlZnByaXZzLm9i anR5cGUpOworCX0KKworCS8qIEFkZCB0aGUgdGFyZ2V0IG9iamVjdCB0eXBlICovCisJYXBwZW5k X3N0cmluZ19vYmplY3QoZ3JhbnQsICJPTiAle3RhcmdldH1zIiwgInRhcmdldCIsIG9ianR5cGUp OworCisJLyogQWRkIHRoZSBncmFudGVlIGxpc3QgKi8KKwlncmFudGVlcyA9IE5JTDsKKwlmb3Jl YWNoKGNlbGwsIHN0bXQtPmFjdGlvbi0+Z3JhbnRlZXMpCisJeworCQlSb2xlU3BlYyAgICpzcGVj ID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqb2JqID0gbmV3X29i anRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpOworCisJCWdyYW50ZWVzID0gbGFwcGVuZChncmFudGVl cywgbmV3X29iamVjdF9vYmplY3Qob2JqKSk7CisJfQorCisJaWYgKHN0bXQtPmFjdGlvbi0+aXNf Z3JhbnQpCisJeworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiVE8gJXtncmFudGVlczos IH1SIiwgZ3JhbnRlZXMpOworCisJCS8qIEFkZCB0aGUgV0lUSCBHUkFOVCBPUFRJT04gY2xhdXNl IGZvciBHUkFOVCBzdWJjb21tYW5kICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIEdS QU5UIE9QVElPTiIsIDEsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJ IHN0bXQtPmFjdGlvbi0+Z3JhbnRfb3B0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoZ3Jh bnQsICIle2dyYW50X29wdGlvbn1zIiwgdG1wKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYXJyYXlf b2JqZWN0KGdyYW50LCAiRlJPTSAle2dyYW50ZWVzOiwgfVIiLCBncmFudGVlcyk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2dyYW50fXMiLCBncmFudCk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRFIERPTUFJTgorICoKKyAqIEdpdmVuIGEg ZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1U ICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKyAqICV7Y29sbGF0aW9ufXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVEb21haW4oT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJ SGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwlMaXN0CSAgICpjb25z dHJhaW50czsKKwljaGFyCSAgICpkZWZ2YWw7CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEo VFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAl e3R5cGV9VCAle25vdF9udWxsfXMiLCAzLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBv YmplY3RJZCksCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJhc2V0eXBlLAorCQkJCQkJCQkJCQkgIHR5cEZvcm0t PnR5cHR5cG1vZCksCisJCQkJCQkgIm5vdF9udWxsIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSB0 eXBGb3JtLT50eXBub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCWNvbnN0cmFpbnRzID0g b2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lkLCBvYmplY3RJZCk7CisJaWYgKGNvbnN0 cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJZWxzZQorCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEsCisJCQkJCQkJCSJlbGVtZW50cyIsIE9ialR5cGVB cnJheSwgY29uc3RyYWludHMpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29uc3Ry YWludHN9cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7 CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUg ICAgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlv bik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle25hbWV9RCIsIGNvbGxuYW1l KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXtjb2xsYXRpb259cyIsIHRtcF9vYmopOworCisJZGVmdmFsID0g RG9tYWluR2V0RGVmYXVsdCh0eXBUdXAsIHRydWUpOworCWlmIChkZWZ2YWwpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIkRFRkFVTFQgJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnZh bCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisgKgor ICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICoKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBG VU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zCisgKiBMQU5HVUFH RSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGlsaXR5 fXMKKyAqICV7cGFyYWxsZWxfc2FmZXR5fXMgJXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2Vj dXJpdHlfZGVmaW5lcn1zCisgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9v cHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKyAqICV7c3ltYm9sfUwKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsK KwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbiA9 IE5VTEw7CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRlZmF1bHRzOworCUxpc3QJICAg KnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFibGVfcGFyYW1zID0gTlVMTDsK KwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJSGVhcFR1cGxl CWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkgICAqdHJmdHlwZXM7CisJRm9y bV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWludAkJCXR5cG51bTsKKwlpbnQJ CQludHlwZXM7CisJaW50CQkJcGFyYW1jb3VudCA9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRl cnMpOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlpc2Z1bmN0aW9uOworCisJLyogR2V0IHRoZSBw Z19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmpl Y3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVj dElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKwor CS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAg PSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zvcm0tPnByb2xhbmcpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJ bGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoK KwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBj b3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3Jj IG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlz bnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0 aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJp bmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4g Ki8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJ CSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJ cHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0g PT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOwor CX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMiLCAxLAor CQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNl ID8gIk9SIFJFUExBQ0UiIDogIiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3Vt ZW50cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJICogZnVuY3Rpb24n cyBwZ19wcm9jIGVudHJ5LiAgSWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdAor CSAqIGxlbmd0aCwgdGhlcmUgYXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBl eHRyYWN0IHRoZSB0eXBlCisJICogT0lEIGZyb20gcHJvYXJndHlwZXM7IG90aGVyd2lzZSB3ZSBu ZWVkIHRvIGRlY29kZSBwcm9hbGxhcmd0eXBlcywgd2hpY2gKKwkgKiBpcyBhIGJpdCBtb3JlIGlu dm9sdmVkLgorCSAqLworCXR5cGFycmF5ID0gcGFsbG9jKHBhcmFtY291bnQgKiBzaXplb2YoT2lk KSk7CisJaWYgKHBhcmFtY291bnQgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJeworCQlEYXR1bQkJ YWxsdHlwZXM7CisJCURhdHVtCSAgICp2YWx1ZXM7CisJCWJvb2wJICAgKm51bGxzOworCQlpbnQJ CQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1 cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FsbGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJ aWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHByb2FsbGFyZ3R5cGVzLCBtb3JlIG51 bWJlciBvZiBwYXJhbWV0ZXJzIHRoYW4gYXJncyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJ CQkJIG9iamVjdElkKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFs bHR5cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywg Jm51bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBwYXJhbWNvdW50KQorCQkJZWxvZyhF UlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAoaSA9IDA7IGkgPCBw YXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJZWxzZQor CXsKKwkJZm9yIChpID0gMDsgaSA8IHBhcmFtY291bnQ7IGkrKykKKwkJCXR5cGFycmF5W2ldID0g cHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJl IGFyZSBhbnkgZGVmYXVsdCBleHByZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVz c2lvbgorCSAqIGFzIGEgbGlzdCBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFy Z3VtZW50LgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NU dXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlp ZiAoIWlzbnVsbCkKKwl7CisJCWRlZmF1bHRzID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdl dFRleHRQKHRtcGRhdHVtKSk7CisJCWN1cmRlZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQor CWVsc2UKKwl7CisJCWRlZmF1bHRzID0gTklMOworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8q CisJICogTm93IGl0ZXJhdGUgb3ZlciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgcGFyc2UgdHJlZSB0 byBjcmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7 CisJdHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlG dW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlICAgICpwYXJhbV9vYmo7CisJCU9ialRyZWUgICAgKmRlZmF1bHR2YWw7 CisJCU9ialRyZWUgICAgKm5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0 ZXIgaW5kaWNhdGVzIHRoZSBlbmQgb2YgaW5wdXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93 aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2YgdGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRo ZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4g dGhlIGxpc3Qgc28gdGhhdCB3ZQorCQkgKiBjYW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0 eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUp CisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNlbGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJ CSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJhbWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlw ZX1UCisJCSAqICV7ZGVmYXVsdH1zCisJCSAqLworCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9W QSgiJXttb2RlfXMiLCAxLAorCQkJCQkJCQkgICJtb2RlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJPVVQiIDoKKwkJCQkJCQkJICBw YXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJCQkJCQkJCSAgcGFy YW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ICJWQVJJQURJQyIgOgorCQkJCQkJCQkg ICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lvbiBvZiAibmFtZSIg b2NjdXJzIGhlcmUgKi8KKwkJbmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHBhcmFtLT5u YW1lKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7bmFtZX1JIiwgIm5hbWUiLCBw YXJhbS0+bmFtZSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KG5hbWUsICIl e25hbWV9SSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KG5hbWUpOworCQl9CisKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlkZWZhdWx0 dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlkKHBhcmFt LT5kZWZleHByKSkKKwkJeworCQkJY2hhcgkgICAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9PSBO VUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIpOwor CQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChkZWZh dWx0dmFsLCAiJXt2YWx1ZX1zIiwgInZhbHVlIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChk ZWZhdWx0cywgY3VyZGVmKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQoZGVm YXVsdHZhbCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAiJXt0eXBlfVQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZh dWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3Qo cGFyYW1fb2JqKSk7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5 fUQiLCAxLAorCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CW9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCWFw cGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBwYXJhbXMpOwor CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwlpc2Z1bmN0aW9uID0gKHBy b2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsKKworCWlmIChpc2Z1bmN0aW9u KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJGVU5DVElPTiAle3NpZ25hdHVyZX1zIiwg dG1wX29iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJQUk9DRURVUkUg JXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCisJLyoKKwkgKiBBIHJldHVybiB0eXBlIGNhbiBh ZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBbU0VUT0ZdIHNvbWVfdHlwZSwKKwkgKiBv ciBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2FuIHRlbGwgdGhlIHNlY29uZCBmb3JtIGJl Y2F1c2Ugd2Ugc2F3CisJICogYSB0YWJsZSBwYXJhbSBhYm92ZSB3aGlsZSBzY2FubmluZyB0aGUg YXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVfcGFyYW1zID09IE5VTEwpCisJeworCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJCSJyZXR1cm5fZm9ybSIsIE9i alR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAi JXtzZXRvZn1zIiwgInNldG9mIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNldCA/ICJTRVRP RiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3JldHR5cGV9VCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9yZXR0eXBlLCAtMSkp OworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9IE5JTDsKKwkJT2JqVHJlZSAg ICAqcGFyYW1fb2JqOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUiLCAxLAor CQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJZm9yICg7 IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5wYXJhbWV0 ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSBs Zmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7 bmFtZX1JICV7dHlwZX1UIiwgMiwKKwkJCQkJCQkJCSAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBw YXJhbS0+bmFtZSwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ ICBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJCQlyZXR0 eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOwor CQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7cmV0dHlwZXM6LCB9cyki LCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wX29iaik7CisKKwkvKiBUUkFO U0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlRSQU5TRk9STSIpOwor CisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVzKTsKKwlmb3Ig KGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEpKTsKKwkJdHlwZXMg PSBsYXBwZW5kKHR5cGVzLCB0bXBfb2JqKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVuZF9h cnJheV9vYmplY3QodG1wX29iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcF9vYmopOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwgImxhbmd1YWdlIiwKKwkJCQkJCSBOYW1l U3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwl7CisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7d2luZG93fXMiLCAid2luZG93IiwKKwkJCQkJCQkgcHJv Y0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAiV0lORE9XIiA6ICIiKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt2b2xhdGlsaXR5fXMiLCAidm9sYXRpbGl0eSIsCisJ CQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9WT0xBVElMRSA/CisJ CQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJP Vk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJMRSIgOiAiSU1NVVRBQkxFIik7CisKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtwYXJhbGxlbF9zYWZldHl9cyIsCisJCQkJCQkJ ICJwYXJhbGxlbF9zYWZldHkiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJP UEFSQUxMRUxfU0FGRSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHByb2NG b3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkgIlBB UkFMTEVMIFJFU1RSSUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7bGVha3Byb29mfXMiLCAibGVha3Byb29mIiwKKwkJCQkJCQkgcHJv Y0Zvcm0tPnByb2xlYWtwcm9vZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICIle3N0cmljdH1zIiwgInN0cmljdCIsCisJCQkJCQkJIHByb2NGb3JtLT5w cm9pc3N0cmljdCA/CisJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJ CQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle3NlY3VyaXR5X2RlZmluZXJ9cyIsCisJCQkJCQkJICJzZWN1cml0eV9kZWZpbmVyIiwK KwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJICJTRUNVUklUWSBERUZJTkVS IiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJ CQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJCQlwcm9jRm9ybS0+cHJv Y29zdCkpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiUk9XUyIpOworCQlpZiAocHJvY0Zv cm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJZWxz ZQorCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBfb2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+ cHJvcm93cyk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cm93c31zIiwgdG1wX29i aik7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlm IChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbXSA9IHsgSU5U RVJOQUxPSUQgfTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0 IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9v a3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMiLCAibmFtZSIsCisJCQkJCQkJCSBnZW5lcmF0ZV9m dW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUws IGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQ Ul9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtzdXBwb3J0fXMiLCB0bXBfb2Jq KTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAg ICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9 IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIJICAgKnZhbHVlID0gRXh0 cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0Z1bmN0 aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQkJc2V0cyA9IGxhcHBl bmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQl9CisJfQorCWFwcGVuZF9h cnJheV9vYmplY3QocmV0LCAiJXtzZXRfb3B0aW9uczogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0 aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworCSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09J RCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3Byb3NxbGJvZHksICZpc251bGwpOworCWlmIChwcm9j Rm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFnZUlkICYmICFpc251bGwpCisJeworCQlTdHJpbmdJ bmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9u X3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAi JXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJIGJ1Zi5kYXRhKTsKKwl9CisJ ZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFT ICV7ZGVmaW5pdGlvbn1MIiwgImRlZmluaXRpb24iLCBzb3VyY2UpOworCWVsc2UKKwl7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7b2JqZmlsZX1MIiwgIm9iamZpbGUiLCBwcm9i aW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIsICV7c3ltYm9sfUwiLCAic3ltYm9s Iiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5 c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD UkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAl e3R5cGV9VCBVU0lORworICogJXthbW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczosIH1z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRk cmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUJb3BjVHVwOworCUhlYXBUdXBsZQlvcGZUdXA7CisJ Rm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUxpc3QJICAgKmxpc3Q7CisJ TGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVy YXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24p CisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQg JXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3Bj VHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+ b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIs IG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1Qob3BmVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1Ig Q0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HICV7 YW1uYW1lfUkiLCA0LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSksCisJCQkJCQkgImRlZmF1bHQiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2RlZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwK KwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJp bmcsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCkpOworCisJLyoKKwkgKiBBZGQgdGhl IEZBTUlMWSBjbGF1c2UsIGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNl IGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBpdCBleHBhbmQgdG8gZW1wdHkgYmVjYXVz ZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0 ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkZBTUlMWSAl e29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCSJvcGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSkpOworCisJaWYgKHN0cmNtcChOYW1l U3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSA9PSAwICYm CisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9PSBvcGNGb3JtLT5vcGNuYW1lc3BhY2UpCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7b3BmYW1pbHl9cyIsIHRtcF9vYmopOworCisJLyoKKwkgKiBBZGQgdGhlIGluaXRpYWwgaXRl bSBsaXN0LiAgTm90ZSB3ZSBhbHdheXMgYWRkIHRoZSBTVE9SQUdFIGNsYXVzZSwgZXZlbgorCSAq IHdoZW4gaXQgaXMgaW1wbGljaXQgaW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQuCisJICovCisJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1w X29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShPaWRJc1ZhbGlk KG9wY0Zvcm0tPm9wY2tleXR5cGUpID8KKwkJCQkJCQkJCQkJICBvcGNGb3JtLT5vcGNrZXl0eXBl IDogb3BjRm9ybS0+b3BjaW50eXBlLAorCQkJCQkJCQkJCQkgIC0xKSk7CisJbGlzdCA9IGxpc3Rf bWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJl ZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3Jz KQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBl fVQsICV7cnR5cGV9VCkiLCA0LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIG9wZXIt Pm51bWJlciwKKwkJCQkJCQkJIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCW9wZXItPm9iamVjdCksCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJCSJy dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXIt PnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIg QlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCAicHVycG9zZSIsCisJ CQkJCQkJCSAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnRtcF9v YmoyOworCisJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJGT1IgT1JERVIgQlkgJXtvcGZhbWls eX1EIik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqMiwgIm9wZmFtaWx5IiwKKwkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZhbWlseVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwgdG1wX29iajIpOworCQl9CisKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCS8q IEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNt ZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0g bGZpcnN0KGNlbGwpOworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9wZ19wcm9jIHByb2NG b3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsK KwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVj dElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j VHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUg d2l0aCBPSUQgJXUiLAorCQkJCSBwcm9jLT5vYmplY3QpOworCQlwcm9jRm9ybSA9IChGb3JtX3Bn X3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLCA0 LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJ Imx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJv Yy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSksCisJCQkJCQkJCSJm dW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihwcm9jRm9y bS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJewor CQkJT2JqVHJlZSAgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9h cmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVj dF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAi KCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3R5cGVzOiwgfVQiLCBh cmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIikiKTsKKworCQlSZWxl YXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiQVMg JXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwlSZWxl YXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlT3BGYW1pbHlTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQorICoKKyAqIEdp dmVuIGEgb3BlcmF0b3IgZmFtaWx5IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7 aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVh cFR1cGxlCW9wZlR1cDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZG b3JtOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCU9ialRyZWUgICAgKnJldDsKKworCW9wZlR1cCA9 IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlh bVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5v cGZtZXRob2QpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJ CQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNU KGFtVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZ ICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5v cGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpLAor CQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFkZCBjb21tb24gY2xhdXNlcyB0byBDcmVhdGVQ b2xpY3kgb3IgQWx0ZXJQb2xpY3kgZGVwYXJzZSBvYmplY3RzLgorICovCitzdGF0aWMgdm9pZAor YWRkX3BvbGljeV9jbGF1c2VzKE9ialRyZWUgKnJldCwgT2lkIHBvbGljeU9pZCwgTGlzdCAqcm9s ZXMsIGJvb2wgZG9fcXVhbCwKKwkJCQkgICBib29sIGRvX3dpdGhfY2hlY2spCit7CisJUmVsYXRp b24JcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCUhlYXBUdXBsZQlwb2xUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBvbFJlbCwg QW51bV9wZ19wb2xpY3lfb2lkLCBwb2xpY3lPaWQpOworCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07 CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSB3aXRoIE9JRCAldSIsIHBvbGljeU9pZCk7CisKKwlw b2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCS8qIEFkZCB0 aGUgIk9OIHRhYmxlIiBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPTiAl e3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisKKwkvKgorCSAq IEFkZCB0aGUgIlRPIHJvbGUiIGNsYXVzZSwgaWYgYW55LiAgSW4gdGhlIENSRUFURSBjYXNlLCBp dCBhbHdheXMKKwkgKiBjb250YWlucyBhdCBsZWFzdCBQVUJMSUMsIGJ1dCBpbiB0aGUgQUxURVIg Y2FzZSBpdCBtaWdodCBiZSBlbXB0eS4KKwkgKi8KKwlpZiAocm9sZXMpCisJeworCQlMaXN0CSAg ICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwgcm9s ZXMpCisJCXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwp OworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3Qo bmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudChyZXQpOworCisJLyogQWRkIHRoZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLwor CWlmIChkb19xdWFsKQorCXsKKwkJRGF0dW0JCWRlcGFyc2VkOworCQlEYXR1bQkJc3RvcmVkZXhw cjsKKwkJYm9vbAkJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVw LCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9s UmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCBwb2xx dWFsIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBE aXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xy ZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlVTSU5HICgle2V4cHJlc3Npb259 cykiLCAiZXhwcmVzc2lvbiIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQp KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCS8qIEFkZCB0aGUg V0lUSCBDSEVDSyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb193aXRoX2NoZWNrKQorCXsKKwkJ RGF0dW0JCWRlcGFyc2VkOworCQlEYXR1bQkJc3RvcmVkZXhwcjsKKwkJYm9vbAkJaXNudWxsOwor CisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2x3 aXRoY2hlY2ssCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsK KwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHBvbHdpdGhjaGVjayBleHByZXNz aW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rp b25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJXSVRIIENIRUNLICgle2V4cHJlc3Npb259cykiLAor CQkJCQkJCSAiZXhwcmVzc2lvbiIsIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJlbGF0aW9uX2Nsb3NlKHBv bFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVQb2xp Y3lTdG10IChDUkVBVEUgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9saWN5IE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVBvbGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlUG9saWN5U3RtdCAqbm9kZSA9IChDcmVhdGVQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBPTElDWSAl e2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnBvbGljeV9uYW1lKTsKKworCS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRf cG9saWN5X2NsYXVzZXMocmV0LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsIG5vZGUtPnF1YWwgIT0g TlVMTCwKKwkJCQkJICAgbm9kZS0+d2l0aF9jaGVjayAhPSBOVUxMKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJQb2xpY3lTdG10IChBTFRFUiBQT0xJQ1kpCisg KgorICogR2l2ZW4gYSBwb2xpY3kgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSBvZiB0aGUgQUxURVIg UE9MSUNZIGNvbW1hbmQsIHJldHVybgorICogYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFs dGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFBPTElDWSAle2lk ZW50aXR5fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclBvbGljeVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJQb2xpY3lTdG10ICpub2Rl ID0gKEFsdGVyUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8q IEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocmV0LCBv YmplY3RJZCwgbm9kZS0+cm9sZXMsIG5vZGUtPnF1YWwgIT0gTlVMTCwKKwkJCQkJICAgbm9kZS0+ d2l0aF9jaGVjayAhPSBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlU2NoZW1hU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JF QVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cwor Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10ICpub2RlID0gKENyZWF0 ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICphdXRoOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtuYW1lfUkiLCAyLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIs CisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnNjaGVtYW5hbWUg PyBub2RlLT5zY2hlbWFuYW1lIDogIiIpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJ WkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChh dXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJICJhdXRob3JpemF0aW9uX3Jv bGUiLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5hdXRocm9sZSkpOworCWVsc2UK Kwl7CisJCWFwcGVuZF9udWxsX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIp OworCQlhcHBlbmRfbm90X3ByZXNlbnQoYXV0aCk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0aWMg Y2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAsIGJvb2wgbWlzc2luZ19v aykKK3sKKwlEYXR1bQkJZGVmOworCU5vZGUJICAgKmRlZnZhbDsKKwljaGFyCSAgICpkZWZzdHI7 CisJYm9vbAkJaXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1 cCwgQW51bV9wZ190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJCQkgICZpc251bGwpOworCWlmIChp c251bGwpCisJeworCQlpZiAoIW1pc3Npbmdfb2spCisJCQllbG9nKEVSUk9SLCAiZG9tYWluIFwi JXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSIsCisJCQkJTmFtZVN0cigoKEZvcm1f cGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkpLT50eXBuYW1lKSk7CisJCWVsc2UKKwkJCXJldHVy biBOVUxMOworCX0KKworCWRlZnZhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5n KGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIE5VTEwgLyogZHBj b250ZXh0PyAqLyAsCisJCQkJCQkJCWZhbHNlLCBmYWxzZSk7CisKKwlyZXR1cm4gZGVmc3RyOwor fQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyRG9tYWluU3RtdC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQKKyAqIE9SCisg KiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUICV7ZGVmYXVsdH1zCisgKiBP UgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIE5PVCBOVUxMCisgKiBPUgorICog QUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwKKyAqIE9SCisgKiBBTFRFUiBE T01BSU4gJXtpZGVudGl0eX1EIEFERCBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMgJXtk ZWZpbml0aW9ufXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgQ09O U1RSQUlOVCBJRiBFWElTVFMgJXtjb25zdHJhaW50X25hbWV9cyAle2Nhc2NhZGV9cworICogT1IK KyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0 cmFpbnRfbmFtZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEb21haW5T dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJT2JqZWN0QWRkcmVzcyBj b25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUgPSAoQWx0ZXJEb21haW5T dG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZvcm1fcGdfdHlwZSBkb21G b3JtOworCU9ialRyZWUgICAgKnJldDsKKworCWRvbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGRvbVR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApOworCisJ c3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkvKiBTRVQgREVGQVVM VCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxMKQorCQkJCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgREVGQVVMVCIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZhdWx0IiwKKwkJ CQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5h bWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCAle2RlZmF1bHR9cyIs IDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFt ZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJIERvbWFpbkdldERlZmF1bHQoZG9tVHVwLCBmYWxzZSkpOworCQkJYnJl YWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJPUCBOT1QgTlVMTCAqLworCQkJcmV0ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTCIsIDIsCisJ CQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJ CQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICAgTmFt ZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJLyog U0VUIE5PVCBOVUxMICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7 aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFr OworCQljYXNlICdDJzoKKwkJCS8qCisJCQkgKiBBREQgQ09OU1RSQUlOVC4gIE9ubHkgQ0hFQ0sg Y29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieQorCQkJICogZG9tYWlucworCQkJICovCisJCQly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBBREQgQ09OU1RS QUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zIiwgNCwKKwkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9t Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9iamVjdElkKSwKKwkJCQkJ CQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJh aW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0cmFpbnRBZGRyLm9iamVjdElkKSk7CisJCQlicmVh azsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJREFURSBDT05TVFJBSU5UICovCisJCQkvKgorCQkJ ICogUHJvY2VzcyBzdWJ0eXBlPXNwZWNpZmljIG9wdGlvbnMuIFZhbGlkYXRpb24gYSBjb25zdHJh aW50CisJCQkgKiByZXF1aXJlcyBpdHMgbmFtZS4KKwkJCSAqLworCQkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgVkFMSURBVEUgQ09OU1RSQUlOVCAle2Nv bnN0cmFpbnRfbmFtZX1zIiwgMywKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZh bGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCSAi Y29uc3RyYWludF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmFtZSk7CisJCQlicmVhazsK KwkJY2FzZSAnWCc6CisJCQl7CisJCQkJT2JqVHJlZSAgICAqdG1wX29iajsKKworCQkJCS8qIERS T1AgQ09OU1RSQUlOVCAqLworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgJXtjb25zdHJhaW50X25hbWV9 cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb25zdHJhaW50 IiwKKwkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ CQkJTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCQkJImNvbnN0cmFpbnRfbmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5hbWUpOworCisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLCBu b2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCisJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXtjYXNjYWRlfXMiLCB0bXBfb2JqKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3VidHlwZSAlYyIsIG5vZGUtPnN1YnR5cGUp OworCX0KKworCS8qIERvbmUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoZG9tVHVwKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RhdHNTdG10LgorICoKKyAqIEdp dmVuIGEgc3RhdGlzdGljcyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFNUQVRJU1RJQ1MgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EIE9OICV7ZXhwcjosIH1zIEZST00gJXtzdGF0X3RhYmxlX2lkZW50 aXR5fUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdGF0aXN0aWNzU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdGF0c1N0bXQgKm5v ZGUgPSAoQ3JlYXRlU3RhdHNTdG10ICopIHBhcnNldHJlZTsKKwlGb3JtX3BnX3N0YXRpc3RpY19l eHQgc3RhdGZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQl0dXA7CisJRGF0dW0J CWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlMaXN0CSAgICpzdGF0ZXhwcnMgPSBOSUw7CisKKwl0 dXAgPSBTZWFyY2hTeXNDYWNoZTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCisJ c3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1QodHVwKTsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU1RBVElTVElDUyAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0 Zm9ybS0+c3R4bmFtZSkpKTsKKworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFNUQVRFWFRPSUQs IHR1cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eGV4cHJzLAorCQkJCQkJCSZpc251bGwpOwor CWlmICghaXNudWxsKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisJCVJlbGF0aW9uCXN0YXRzcmVs OworCQlMaXN0CSAgICpjb250ZXh0OworCQlMaXN0CSAgICpleHBycyA9IE5JTDsKKwkJY2hhcgkg ICAqZXhwcnNTdHJpbmc7CisKKwkJc3RhdHNyZWwgPSByZWxhdGlvbl9vcGVuKHN0YXRmb3JtLT5z dHhyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9m b3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdHNyZWwpLAorCQkJCQkJCQkJICBSZWxhdGlv bkdldFJlbGlkKHN0YXRzcmVsKSk7CisKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKGRhdHVtKTsKKwkJZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcp OworCisJCWZvcmVhY2gobGMsIGV4cHJzKQorCQl7CisJCQlOb2RlCSAgICpleHByID0gKE5vZGUg KikgbGZpcnN0KGxjKTsKKwkJCWNoYXIJICAgKnN0YXRleHByOworCisJCQlzdGF0ZXhwciA9IGRl cGFyc2VfZXhwcmVzc2lvbihleHByLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCQkJc3RhdGV4 cHJzID0gbGFwcGVuZChzdGF0ZXhwcnMsIG5ld19zdHJpbmdfb2JqZWN0KHN0YXRleHByKSk7CisJ CX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIk9OICV7ZXhwcjosIH1zIiwgc3RhdGV4 cHJzKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCQlyZWxhdGlvbl9jbG9zZShzdGF0c3JlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhU T0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhrZXlzLAorCQkJCQkJCSZpc251bGwp OworCWlmICghaXNudWxsKQorCXsKKwkJaW50CQkJa2V5bm87CisJCWNoYXIJICAgKmF0dG5hbWU7 CisJCUxpc3QJICAgKnN0YXRjb2xzID0gTklMOworCQlpbnQydmVjdG9yICppbmRvcHRpb247CisK KwkJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGRhdHVtKTsKKwor CQlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpbmRvcHRpb24tPmRpbTE7IGtleW5vKyspCisJCXsK KwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShzdGF0Zm9ybS0+c3R4cmVsaWQsIGluZG9wdGlvbi0+ dmFsdWVzW2tleW5vXSwKKwkJCQkJCQkJICBmYWxzZSk7CisJCQlzdGF0Y29scyA9IGxhcHBlbmQo c3RhdGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGF0dG5hbWUpKTsKKwkJfQorCisJCWlmIChpbmRv cHRpb24tPmRpbTEpCisJCXsKKwkJCS8qIEFwcGVuZCBhICcsJyBpZiBzdGF0ZXhwcnMgaXMgcHJl c2VudCBlbHNlIGFwcGVuZCAnT04nICovCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e2NvbW1hfXMiLCAiY29tbWEiLAorCQkJCQkJCQkgc3RhdGV4cHJzID8gIiwiIDogIk9OIik7CisJ CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Y29sczosIH1zIiwgc3RhdGNvbHMpOworCQl9 CisJfQorCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiRlJPTSAle3N0YXRfdGFibGVfaWRl bnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGdldF9yZWxfbmFtZXNw YWNlKHN0YXRmb3JtLT5zdHhyZWxpZCksCisJCQkJCQkJCQkJCQkgIGdldF9yZWxfbmFtZShzdGF0 Zm9ybS0+c3R4cmVsaWQpKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IChDUkVB VEUgU0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBh bHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgU0VSVkVSICV7 aWRlbnRpdHl9SSAle3R5cGV9cyAle3ZlcnNpb259cyBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2Zk d31JCisgKiAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKm5vZGUgPSAoQ3JlYXRlRm9yZWlnblNlcnZl clN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNFUlZFUiAle2lkZW50aXR5fUkiLCAx LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5hbWUpOwor CisJLyogQWRkIGEgVFlQRSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJU WVBFIik7CisJaWYgKG5vZGUtPnNlcnZlcnR5cGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgIiV7dHlwZX1MIiwgInR5cGUiLCBub2RlLT5zZXJ2ZXJ0eXBlKTsKKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dHlwZX1z IiwgdG1wKTsKKworCS8qIEFkZCBhIFZFUlNJT04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZSgiVkVSU0lPTiIpOworCWlmIChub2RlLT52ZXJzaW9uKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle3ZlcnNpb259TCIsICJ2ZXJzaW9uIiwgbm9kZS0+dmVyc2lvbik7 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle3ZlcnNpb259cyIsIHRtcCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICJGT1JFSUdOIERBVEEgV1JBUFBFUiAle2Zkd31JIiwgImZkdyIsCisJCQkJCQkgbm9kZS0+ZmR3 bmFtZSk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2Vf RmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhbiBBbHRlckZvcmVpZ25TZXJ2ZXJTdG10IChBTFRFUiBTRVJWRVIpCisg KgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkgJXt2 ZXJzaW9ufXMgJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyRm9yZWlnblNlcnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAqbm9kZSA9IChBbHRlckZvcmVpZ25TZXJ2ZXJT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICp0bXA7CisKKwkvKiBBZGQgYSBWRVJTSU9O IGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIlZFUlNJT04iKTsKKwlpZiAo bm9kZS0+aGFzX3ZlcnNpb24gJiYgbm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXt2ZXJzaW9ufUwiLCAidmVyc2lvbiIsIG5vZGUtPnZlcnNpb24pOworCWVsc2Ug aWYgKG5vZGUtPmhhc192ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJ2ZXJz aW9uIiwgInZlcnNpb24iLCAiTlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkg JXt2ZXJzaW9ufXMgJXtnZW5lcmljX29wdGlvbnN9cyIsIDMsCisJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5hbWUsCisJCQkJCQkgICJ2ZXJzaW9uIiwgT2Jq VHlwZU9iamVjdCwgdG1wLAorCQkJCQkJICAiZ2VuZXJpY19vcHRpb25zIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSAgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVQTGFuZ1N0bXQuCisgKgorICogR2l2ZW4gYSBsYW5n dWFnZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7dHJ1c3RlZH1zIExBTkdVQUdF ICV7aWRlbnRpdHl9cyBIQU5ETEVSICV7aGFuZGxlcn1ECisgKiAle2lubGluZX1zICV7dmFsaWRh dG9yfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVMYW5nU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVQTGFuZ1N0bXQgKm5vZGUgPSAo Q3JlYXRlUExhbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wOworCUhlYXBUdXBsZQlsYW5nVHVwOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zv cm07CisKKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsCisJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RS VUNUKGxhbmdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxh Y2V9cyAle3RydXN0ZWR9cyBMQU5HVUFHRSAle2lkZW50aXR5fXMiLCAzLAorCQkJCQkJICJvcl9y ZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExB Q0UiIDogIiIsCisJCQkJCQkgInRydXN0ZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGxhbmdG b3JtLT5sYW5wbHRydXN0ZWQgPyAiVFJVU1RFRCIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5wbG5hbWUpOworCisJaWYgKG5vZGUtPnBsaGFuZGxlciAhPSBO SUwpCisJeworCQkvKiBBZGQgdGhlIEhBTkRMRVIgY2xhdXNlICovCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIkhBTkRMRVIgJXtoYW5kbGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGxhbmdG b3JtLT5sYW5wbGNhbGxmb2lkKSk7CisKKwkJLyogQWRkIHRoZSBJTkxJTkUgY2xhdXNlLCBpZiBh bnkgKi8KKwkJdG1wID0gbmV3X29ianRyZWUoIklOTElORSIpOworCQlpZiAoT2lkSXNWYWxpZChs YW5nRm9ybS0+bGFuaW5saW5lKSkKKwkJeworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtoYW5kbGVyX25hbWV9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFuaW5saW5l KSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7aW5saW5lfXMiLCB0bXApOworCisJCS8qIEFkZCB0aGUgVkFM SURBVE9SIGNsYXVzZSwgaWYgYW55ICovCisJCXRtcCA9IG5ld19vYmp0cmVlKCJWQUxJREFUT1Ii KTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0tPmxhbnZhbGlkYXRvcikpCisJCXsKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFuZGxlcl9uYW1lfUQiLAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkgbGFuZ0Zvcm0tPmxhbnZhbGlkYXRvcikpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3ZhbGlkYXRv cn1zIiwgdG1wKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKENSRUFU RSBGT1JFSUdOIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIENSRUFURSBGT1JFSUdOIFRBQkxFICV7aWZf bm90X2V4aXN0c31zICV7aWRlbnRpdHl9RAorICogWygle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7 aW5oZXJpdHN9cworICogIHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fUQgKCV7dHlw ZWRfdGFibGVfZWxlbWVudHM6LCB9cykgJXtwYXJ0aXRpb25fYm91bmR9c10KKyAqIFNFUlZFUiAl e3NlcnZlcn1JICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVGb3JlaWduVGFibGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKnN0bXQgPSAoQ3JlYXRlRm9yZWlnblRhYmxl U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVl ICAgICpjcmVhdGVTdG10OworCU9ialRyZWUgICAgKnRtcG9iajsKKwlMaXN0CSAgICp0YWJsZWVs dHMgPSBOSUw7CisKKwljcmVhdGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBGT1JFSUdOIFRB QkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtpZl9ub3RfZXhp c3RzfXMiLCAiaWZfbm90X2V4aXN0cyIsCisJCQkJCQkgc3RtdC0+YmFzZS5pZl9ub3RfZXhpc3Rz ID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2Vf Y29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJ b2JqZWN0SWQpOworCWlmIChzdG10LT5iYXNlLnBhcnRib3VuZCkKKwl7CisJCS8qIFBhcnRpdGlv bmVkIHRhYmxlICovCisJCUxpc3QJICAgKnBhcmVudHM7CisJCU9iakVsZW0gICAgKmVsZW07CisK KwkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJZWxlbSA9IChP YmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCUFzc2VydChsaXN0X2xlbmd0aChwYXJl bnRzKSA9PSAxKTsKKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFSVElU SU9OIE9GIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFyZW50 X2lkZW50aXR5fUQiLAorCQkJCQkJCQkJCSBlbGVtLT52YWx1ZS5vYmplY3QpOworCisJCXRhYmxl ZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgc3RtdC0+YmFzZS50YWJsZUVs dHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUsIC8qIHR5cGVkIHRhYmxlICovCisJCQkJ CQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWlu Q29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIiIpOworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29i amVjdCh0bXBvYmosICIoJXtlbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3R5cGVkX3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCisJCS8qCisJ CSAqIEFkZCB0aGUgcGFydGl0aW9uX2JvdW5kX3NwZWMsIGkuZS4gdGhlIEZPUiBWQUxVRVMgY2xh dXNlLgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRi b3VuZCBpbiB0aGUgcGFyc2V0cmVlCisJCSAqIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFs IHBhcnRib3VuZCBleHByZXNzaW9uIHdoaWNoIGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1l ZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlv bl9ib3VuZH1zIiwgInBhcnRpdGlvbl9ib3VuZCIsCisJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0 aW9uQm91bmQob2JqZWN0SWQpKTsKKworCQkvKiBObyBQQVJUSVRJT04gQlkgY2xhdXNlIGZvciBD UkVBVEUgRk9SRUlHTiBUQUJMRSAqLworCX0KKwllbHNlCisJeworCQl0YWJsZWVsdHMgPSBkZXBh cnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIHN0bXQtPmJhc2UudGFibGVFbHRzLCBkcGNvbnRl eHQsCisJCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJ CSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0 cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVs dHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0bXQsICIoJXt0YWJsZV9lbGVtZW50 czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNy ZWF0ZVN0bXQsICIoKSIpOworCisJCS8qCisJCSogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRp b24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJKiBwYXJlbnRzIGZyb20g dGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRoYXQgbWF5IGxhY2sgdGhlIGFjdHVhbAorCQkqIHF1 YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWlu ZyB0bworCQkqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFy c2Ugbm9kZSwgaXQgc2VlbXMKKwkJKiBtb3JlIGFjY3VyYXRlIGFuZCBjb252ZW5pZW50IHRvIGdy YWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIklO SEVSSVRTIik7CisJCWlmIChzdG10LT5iYXNlLmluaFJlbGF0aW9ucyAhPSBOSUwpCisJCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiLCBkZXBhcnNlX0luaFJl bGF0aW9ucyhvYmplY3RJZCkpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdCh0 bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIik7CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2Jq KTsKKwkJfQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtpbmhlcml0c31z IiwgdG1wb2JqKTsKKwl9CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiU0VS VkVSICV7c2VydmVyfUkiLCAic2VydmVyIiwgc3RtdC0+c2VydmVybmFtZSk7CisKKwkvKiBhZGQg YW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMo c3RtdC0+b3B0aW9ucywgTlVMTCkpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBEZWZpbmVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25kYXJ5T2Jq KQoreworCURlZmluZVN0bXQgKmRlZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNldHJlZTsKKwor CXN3aXRjaCAoZGVmaW5lLT5raW5kKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJ cmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9BZ2dyZWdhdGUob2JqZWN0SWQsIGRlZmluZSk7CisK KwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9D b2xsYXRpb24ob2JqZWN0SWQsIGRlZmluZSwgc2Vjb25kYXJ5T2JqKTsKKworCQljYXNlIE9CSkVD VF9PUEVSQVRPUjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Iob2JqZWN0 SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJu IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlP YmopOworCisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJCXJldHVybiBkZXBhcnNlX0Rl ZmluZVN0bXRfVFNEaWN0aW9uYXJ5KG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNU X1RTUEFSU0VSOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihvYmplY3RJ ZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJcmV0dXJuIGRlcGFy c2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JK RUNUX1RZUEU6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUob2JqZWN0SWQsIGRl ZmluZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qg a2luZDogJWQiLCBkZWZpbmUtPmtpbmQpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgor ICogRm9ybSBhbiBPYmpFbGVtIHRvIGJlIHVzZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQgaW4gYW4g YWdncmVnYXRlIGFyZ3VtZW50CisgKiBsaXN0CisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2Zvcm1f YWdnX2FyZ3VtZW50KGludCBpZHgsIGNoYXIgKm1vZGVzLCBjaGFyICoqbmFtZXMsIE9pZCAqdHlw ZXMpCit7CisJT2JqVHJlZQkgICAqYXJnOworCisJYXJnID0gbmV3X29ianRyZWUoIiIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoYXJnLCAiJXttb2RlfXMiLCAibW9kZSIsCisJCQkJCQkgKG1v ZGVzICYmIG1vZGVzW2lkeF0gPT0gJ3YnKSA/ICJWQVJJQURJQyIgOiAiIik7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QoYXJnLCAiJXtuYW1lfXMiLCAibmFtZSIsIG5hbWVzID8gbmFtZXNbaWR4XSA6 ICIiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhcmcsICIle3R5cGV9VCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUodHlwZXNbaWR4XSwgLTEpKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChhcmcpOworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBB R0dSRUdBVEUpCisgKgorICogR2l2ZW4gYSBhZ2dyZWdhdGUgT0lELCByZXR1cm4gYW4gT2JqVHJl ZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgQUdHUkVHQVRFICV7aWRlbnRpdHl9RCgle3R5cGVzfXMpICgle2VsZW1zOiwg fXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9BZ2dyZWdhdGUo T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgYWdnVHVw OworCUhlYXBUdXBsZSAgIHByb2NUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlEYXR1bQkJaW5pdHZhbDsKKwlib29sCQlpc251bGw7 CisJRm9ybV9wZ19hZ2dyZWdhdGUgYWdnOworCUZvcm1fcGdfcHJvYyBwcm9jOworCUZvcm1fcGdf b3BlcmF0b3Igb3A7CisJSGVhcFR1cGxlCXR1cDsKKworCWFnZ1R1cCA9IFNlYXJjaFN5c0NhY2hl MShBR0dGTk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChhZ2dUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YWdncmVnYXRlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWFnZyA9IChGb3JtX3BnX2FnZ3Jl Z2F0ZSkgR0VUU1RSVUNUKGFnZ1R1cCk7CisKKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIE9iamVjdElkR2V0RGF0dW0oYWdnLT5hZ2dmbm9pZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkgYWdnLT5hZ2dmbm9pZCk7CisJcHJvYyA9IChG b3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZSgi Q1JFQVRFIEFHR1JFR0FURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRl bnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2MtPnByb25hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihwcm9jLT5wcm9uYW1lKSkpOworCisJLyoKKwkg KiBBZGQgdGhlIGFyZ3VtZW50IGxpc3QuICBUaGVyZSBhcmUgdGhyZWUgY2FzZXMgdG8gY29uc2lk ZXI6CisJICoKKwkgKiAxLiBubyBhcmd1bWVudHMsIGluIHdoaWNoIGNhc2UgdGhlIHNpZ25hdHVy ZSBpcyAoKikuCisJICoKKwkgKiAyLiBOb3QgYW4gb3JkZXJlZC1zZXQgYWdncmVnYXRlLiAgSW4g dGhpcyBjYXNlIHRoZXJlJ3Mgb25lIG9yIG1vcmUKKwkgKiBhcmd1bWVudHMuCisJICoKKwkgKiAz LiBPcmRlcmVkLXNldCBhZ2dyZWdhdGVzLiBUaGVzZSBoYXZlIHplcm8gb3IgbW9yZSBkaXJlY3Qg YXJndW1lbnRzLCBhbmQKKwkgKiBvbmUgb3IgbW9yZSBvcmRlcmVkIGFyZ3VtZW50cy4KKwkgKgor CSAqIFdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgZGVmYXVsdCB2YWx1ZXMgb3IgdGFibGUgcGFy YW1ldGVycywgYW5kIHRoZQorCSAqIG9ubHkgbW9kZSB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIg aXMgVkFSSUFESUMuCisJICovCisKKwlpZiAocHJvYy0+cHJvbmFyZ3MgPT0gMCkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3Qoc3RtdCwgIigle3R5cGVzfXMpIiwgInR5cGVzIiwgIioiKTsKKwllbHNl IGlmICghQUdHS0lORF9JU19PUkRFUkVEX1NFVChhZ2ctPmFnZ2tpbmQpKQorCXsKKwkJaW50CQkJ aTsKKwkJaW50CQkJbmFyZ3M7CisJCU9pZAkJICAgKnR5cGVzOworCQljaGFyCSAgICptb2RlczsK KwkJY2hhcgkgICoqbmFtZXM7CisKKwkJbmFyZ3MgPSBnZXRfZnVuY19hcmdfaW5mbyhwcm9jVHVw LCAmdHlwZXMsICZuYW1lcywgJm1vZGVzKTsKKworCQkvKiBvbmx5IGRpcmVjdCBhcmd1bWVudHMg aW4gdGhpcyBjYXNlICovCisJCWxpc3QgPSBOSUw7CisJCWZvciAoaSA9IDA7IGkgPCBuYXJnczsg aSsrKQorCQl7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBmb3JtX2FnZ19hcmd1bWVudChpLCBt b2RlcywgbmFtZXMsIHR5cGVzKSk7CisJCX0KKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtk aXJlY3Q6LCB9cyIsIDEsCisJCQkJCQkJICJkaXJlY3QiLCBPYmpUeXBlQXJyYXksIGxpc3QpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiKCV7dHlwZXN9cykiLCB0bXApOworCX0KKwll bHNlCisJeworCQlpbnQJCQlpOworCQlpbnQJCQluYXJnczsKKwkJT2lkCQkgICAqdHlwZXM7CisJ CWNoYXIJICAgKm1vZGVzOworCQljaGFyCSAgKipuYW1lczsKKworCQluYXJncyA9IGdldF9mdW5j X2FyZ19pbmZvKHByb2NUdXAsICZ0eXBlcywgJm5hbWVzLCAmbW9kZXMpOworCisJCS8qIGRpcmVj dCBhcmd1bWVudHMgLi4uICovCisJCWxpc3QgPSBOSUw7CisJCWZvciAoaSA9IDA7IGkgPCBhZ2ct PmFnZ251bWRpcmVjdGFyZ3M7IGkrKykKKwkJeworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgZm9y bV9hZ2dfYXJndW1lbnQoaSwgbW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQl9CisJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCIle2RpcmVjdDosIH1zIiwgMSwKKwkJCQkJCQkgImRpcmVjdCIsIE9ialR5 cGVBcnJheSwgbGlzdCk7CisKKwkJLyoKKwkJICogLi4uIGFuZCBhZ2dyZWdhdGVkIGFyZ3VtZW50 cy4gIElmIHRoZSBsYXN0IGRpcmVjdCBhcmd1bWVudCBpcworCQkgKiBWQVJJQURJQywgd2UgbmVl ZCB0byByZXBlYXQgaXQgaGVyZSByYXRoZXIgdGhhbiBzZWFyY2hpbmcgZm9yIG1vcmUKKwkJICog YXJndW1lbnRzLiAgKFNlZSBhZ2dyX2FyZ3MgcHJvZHVjdGlvbiBpbiBncmFtLnkgZm9yIGFuIGV4 cGxhbmF0aW9uLikKKwkJICovCisJCWlmIChtb2RlcyAmJiBtb2Rlc1thZ2ctPmFnZ251bWRpcmVj dGFyZ3MgLSAxXSA9PSAndicpCisJCXsKKwkJCWxpc3QgPSBsaXN0X21ha2UxKGZvcm1fYWdnX2Fy Z3VtZW50KGFnZy0+YWdnbnVtZGlyZWN0YXJncyAtIDEsCisJCQkJCQkJCQkJCQltb2RlcywgbmFt ZXMsIHR5cGVzKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlsaXN0ID0gTklMOworCQkJZm9yIChp ID0gYWdnLT5hZ2dudW1kaXJlY3RhcmdzOyBpIDwgbmFyZ3M7IGkrKykKKwkJCXsKKwkJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBmb3JtX2FnZ19hcmd1bWVudChpLCBtb2RlcywgbmFtZXMsIHR5cGVz KSk7CisJCQl9CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICJPUkRFUiBCWSAle2Fn Z3JlZ2F0ZWQ6LCB9cyIsIGxpc3QpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIo JXt0eXBlc31zKSIsIHRtcCk7CisJfQorCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAq LworCWxpc3QgPSBOSUw7CisKKwkvKiBTRlVOQyAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJT RlVOQz0le3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwgYWdnLT5hZ2d0cmFuc2ZuKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBTVFlQRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVFlQ RT0le3R5cGV9VCIsIDEsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKGFnZy0+YWdndHJhbnN0eXBlLCAtMSkpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1NQQUNFICovCisJaWYg KGFnZy0+YWdndHJhbnNzcGFjZSAhPSAwKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNT UEFDRT0le3NwYWNlfW4iLCAxLAorCQkJCQkJCSAic3BhY2UiLCBPYmpUeXBlSW50ZWdlciwgYWdn LT5hZ2d0cmFuc3NwYWNlKTsKKwl9CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIlNT UEFDRT0le3NwYWNlfW4iKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBm YWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogRklOQUxGVU5DICovCisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dmaW5hbGZuKSkK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIiwgMSwKKwkJ CQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgYWdnLT5h Z2dmaW5hbGZuKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIkZJTkFMRlVOQz0l e3Byb2NlZHVyZX1EIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIEZJTkFMRlVOQ19FWFRSQSAqLworCWlmIChhZ2ctPmFnZ2ZpbmFsZXh0cmEpCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJGSU5BTEZVTkNfRVhUUkE9JXt2YWx1ZX1zIiwgMSwKKwkJCQkJ CQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgInRydWUiKTsKKwllbHNlCisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJGSU5BTEZVTkNfRVhUUkE9JXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkgInZhbHVl IiwgT2JqVHlwZVN0cmluZywgImZhbHNlIik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJTklUQ09ORCAqLworCWluaXR2YWwgPSBTeXNDYWNo ZUdldEF0dHIoQUdHRk5PSUQsIGFnZ1R1cCwKKwkJCQkJCQkgIEFudW1fcGdfYWdncmVnYXRlX2Fn Z2luaXR2YWwsCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiSU5JVENP TkQ9Iik7CisJaWYgKCFpc251bGwpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUQ09ORD0l e2luaXR2YWx9TCIsIDEsCisJCQkJCQkJICJpbml0dmFsIiwgT2JqVHlwZVN0cmluZywgVGV4dERh dHVtR2V0Q1N0cmluZyhpbml0dmFsKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUo IklOSVRDT05EPSV7aW5pdHZhbH1MIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIE1TRlVOQyAqLworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbXRyYW5z Zm4pKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTVNGVU5DPSV7cHJvY2VkdXJlfUQiLCAxLAor CQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIGFnZy0+YWdnbXRyYW5zZm4pKTsK KwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiTVNGVU5DPSV7cHJvY2VkdXJlfUQiKTsK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTVNUWVBFICov CisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dtdHJhbnN0eXBlKSkKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIk1TVFlQRT0le3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVj dCwgbmV3X29ianRyZWVfZm9yX3R5cGUoYWdnLT5hZ2dtdHJhbnN0eXBlLCAtMSkpOworCWVsc2UK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJNU1RZUEU9JXt0eXBlfVQiKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTVNTUEFDRSAqLworCWlmIChhZ2ct PmFnZ210cmFuc3NwYWNlICE9IDApCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNU1NQQUNFPSV7 c3BhY2V9biIsIDEsCisJCQkJCQkJICJzcGFjZSIsIE9ialR5cGVJbnRlZ2VyLGFnZy0+YWdnbXRy YW5zc3BhY2UpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJNU1NQQUNFPSV7c3Bh Y2V9biIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBN SU5WRlVOQyAqLworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbWludnRyYW5zZm4pKQorCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiTUlOVkZVTkM9JXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgYWdnLT5hZ2dtaW52dHJhbnNmbikpOwor CWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJNSU5WRlVOQz09JXt0eXBlfVQiKTsKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTUZJTkFMRlVOQyAq LworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbWZpbmFsZm4pKQorCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiTUZJTkFMRlVOQz0le3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgYWdnLT5hZ2dtZmluYWxmbikpOworCWVs c2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJNRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiKTsK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTUZJTkFMRlVO Q19FWFRSQSAqLworCWlmIChhZ2ctPmFnZ21maW5hbGV4dHJhKQorCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiTUZJTkFMRlVOQ19FWFRSQT0le3ZhbHVlfXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBP YmpUeXBlU3RyaW5nLCAidHJ1ZSIpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJN RklOQUxGVU5DX0VYVFJBPSV7dmFsdWV9cyIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAi cHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBNSU5JVENPTkQgKi8KKwlpbml0dmFsID0gU3lzQ2FjaGVHZXRB dHRyKEFHR0ZOT0lELCBhZ2dUdXAsCisJCQkJCQkJICBBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dtaW5p dHZhbCwKKwkJCQkJCQkgICZpc251bGwpOworCWlmICghaXNudWxsKQorCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiTUlOSVRDT05EPSV7aW5pdHZhbH1MIiwgMSwKKwkJCQkJCQkgImluaXR2YWwiLCBP YmpUeXBlU3RyaW5nLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGluaXR2YWwpKTsKKwllbHNlCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZSgiTUlOSVRDT05EPSV7aW5pdHZhbH1MIik7CisJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhZUE9USEVUSUNBTCAqLworCWlm IChhZ2ctPmFnZ2tpbmQgPT0gQUdHS0lORF9IWVBPVEhFVElDQUwpCisJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJIWVBPVEhFVElDQUw9JXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkgInZhbHVlIiwgT2Jq VHlwZVN0cmluZywgInRydWUiKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSFlQ T1RIRVRJQ0FMPSV7dmFsdWV9cyIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBTT1JUT1AgKi8KKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ3NvcnRvcCkp CisJeworCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShh Z2ctPmFnZ3NvcnRvcCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIGFn Zy0+YWdnc29ydG9wKTsKKwkJb3AgPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKHR1cCk7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTT1JUT1A9JXtvcGVyYXRvcn1EIiwgMSwKKwkJCQkJ CQkgIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKG9wLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wLT5vcHJu YW1lKSkpOworCisJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCX0KKwllbHNlCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZSgiU09SVE9QPSV7b3BlcmF0b3J9RCIpOworCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBEb25lIHdpdGggdGhlIGRlZmluaXRpb24gY2xh dXNlICovCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0 KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUoYWdnVHVw KTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENS RUFURSBDT0xMQVRJT04pCisgKgorICogR2l2ZW4gYSBjb2xsYXRpb24gT0lELCByZXR1cm4gYW4g T2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCBGUk9NICV7ZnJvbV9pZGVu dGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVm aW5lU3RtdF9Db2xsYXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJ CQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVh cFR1cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCURhdHVtCQlkYXR1 bTsKKwlib29sCQlpc251bGw7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXAp OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1E IiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBO YW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJaWYgKE9pZElzVmFsaWQoZnJvbUNvbGxp ZC5vYmplY3RJZCkpCisJeworCQlPaWQJCQljb2xsaWQgPSBmcm9tQ29sbGlkLm9iamVjdElkOwor CQlIZWFwVHVwbGUJdHA7CisJCUZvcm1fcGdfY29sbGF0aW9uIGZyb21Db2xGb3JtOworCisJCS8q CisJCSAqIENSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZST00gZXhpc3RpbmdfY29sbGF0 aW9uOworCQkgKi8KKwkJdHAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXRE YXR1bShjb2xsaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBjb2xs aWQpOworCisJCWZyb21Db2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHAp OworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZST00gJXtmcm9tX2lkZW50aXR5fUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZnJvbUNvbEZvcm0tPmNvbGxuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGZyb21Db2xGb3JtLT5jb2xsbmFtZSkpKTsK KworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwkvKiBMT0NBTEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxpY3Vsb2NhbGUsICZpc251 bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxPQ0FMRT0l e2xvY2FsZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsb2NhbGUi LAorCQkJCQkJCSAibG9jYWxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVz IiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ09MTEFURSAqLworCWRhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29s bGNvbGxhdGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkxDX0NPTExBVEU9JXtjb2xsYXRlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImNvbGxhdGUiLAorCQkJCQkJCSAiY29sbGF0ZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8q IExDX0NUWVBFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBB bnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NUWVBFPSV7Y3R5cGV9TCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3R5cGUiLAorCQkJCQkJCSAiY3R5cGUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRh dHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwkvKiBQUk9WSURFUiAqLworCWlmIChjb2xGb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3By b3ZpZGVyfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVy IiwKKwkJCQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYo IiVzIiwgImljdSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJfQorCWVsc2UgaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklE RVJfTElCQykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVy fUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJ CQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwg ImxpYmMiKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCX0KKworCS8qIERFVEVSTUlOSVNUSUMgKi8KKwlpZiAoY29sRm9ybS0+Y29sbGlzZGV0ZXJt aW5pc3RpYykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERVRFUk1JTklTVElDPSV7ZGV0 ZXJtaW5pc3RpY31MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZXRl cm1pbmlzdGljIiwKKwkJCQkJCQkgImRldGVybWluaXN0aWMiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCSBwc3ByaW50ZigiJXMiLCAidHJ1ZSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNp b24sICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IlZFUlNJT049JXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInZlcnNpb24iLAorCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ IHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJh eV9vYmplY3QocmV0LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUo Y29sVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3Rt dCAoQ1JFQVRFIE9QRVJBVE9SKQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENS RUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJT2JqVHJlZSAgICAqcmV0Owor CU9ialRyZWUgICAgKnRtcF9vYmo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX29w ZXJhdG9yIG9wckZvcm07CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJV Q1Qob3ByVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtp ZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQiLCAyLAor CQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkicHJv Y2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJb3ByRm9ybS0+b3ByY29kZSkp OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwor CS8qIExFRlRBUkcgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwK KwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNW YWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwg IiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVm dCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBSSUdIVEFS RyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRBUkc9IiwgMSwKKwkJCQkJCQki Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBl fVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEp KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBDT01NVVRBVE9SICov CisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkJImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3ByY29tKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7b3Blcn1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIk5FR0FUT1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0 b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+ b3BybmVnYXRlKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogUkVT VFJJQ1QgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJ CQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCWlmIChPaWRJc1ZhbGlk KG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEpPSU4gKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9w ckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkv KiBIQVNIRVMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJ CQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9w cmNhbmhhc2gpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtl bGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EICV7ZWxlbXM6 LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlP YmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7 CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3Bn X3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVw KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQiLCAx LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cih0eXBGb3JtLT50eXBuYW1lKSkpOworCisJLyogU2hlbGwgdHlwZXMuICovCisJaWYgKCF0eXBG b3JtLT50eXBpc2RlZmluZWQpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5Q VVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKElOUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiLAorCQkJCQkJICJwcm9jZWR1 cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VU UFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIk9VVFBVVD0le3Byb2NlZHVyZX1EIiwgMiwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIsCisJCQkJCQkgInByb2Nl ZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkp OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog UkVDRUlWRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlw Rm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJT RU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX0lOICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBUWVBNT0RfT1VUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFlaRSAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXAp OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog SU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlwRm9ybS0+dHlwbGVuID09IC0xKQorCQl0bXAgPSBu ZXdfb2JqdHJlZSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiKTsKKwllbHNlCisJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5 cGxlbiIsIE9ialR5cGVJbnRlZ2VyLCB0eXBGb3JtLT50eXBsZW4pOworCisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVNTRURCWVZBTFVFICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBU1NFREJZVkFMVUUiLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1ZSIpOworCWlmICghdHlwRm9ybS0+dHlw Ynl2YWwpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJlc2Vu dCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0Y2gg KHR5cEZvcm0tPnR5cGFsaWduKQorCXsKKwkJY2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0YWxv Zy5mbG9hdDgiOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFsb2cu aW50NCI7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQy IjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hhciI7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdubWVu dCAlYyIsIHR5cEZvcm0tPnR5cGFsaWduKTsKKwl9CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSV7YWxpZ259cyIsIDIsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiLAorCQkJCQkJICJhbGlnbiIsIE9ialR5cGVT dHJpbmcsIHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBTVE9SQUdFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9JXtz dG9yYWdlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIs CisJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF90eXBlX3N0b3Jh Z2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiQ0FURUdPUlk9JXtjYXRlZ29yeX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImNhdGVnb3J5IiwKKwkJCQkJCSAiY2F0ZWdvcnkiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVnb3J5KSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQUkVGRVJSRUQgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGlzcHJlZmVycmVk KQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFRkFVTFQgKi8KKwlkZmx0ID0gU3lzQ2FjaGVH ZXRBdHRyKFRZUEVPSUQsIHR5cFR1cCwKKwkJCQkJCSAgIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0 LAorCQkJCQkJICAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFRkFVTFQ9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlZmF1bHQiKTsKKwlpZiAoIWlz bnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVs dCIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVMRU1F TlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVsZW1lbnQiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wLCAiZWxlbSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGVs ZW0sIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFTElNSVRFUiAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJTUlURVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImRlbGltaXRlciIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwg IiV7ZGVsaW19TCIsICJkZWxpbSIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlw ZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUQUJMRT0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0YWJsZSIpOworCWlm ICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJ UmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtp ZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf RGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJ CQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sKKwlIZWFwVHVwbGUJdHNjVHVwOworCUhlYXBU dXBsZQl0c3BUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlGb3Jt X3BnX3RzX2NvbmZpZyB0c2NGb3JtOworCUZvcm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisJTGlz dAkgICAqbGlzdCA9IE5JTDsKKworCXRzY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0NPTkZJR09J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 c2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFy Y2ggY29uZmlndXJhdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzY0Zvcm0g PSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNUUlVDVCh0c2NUdXApOworCisJdHNwVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKHRzY0Zvcm0tPmNmZ3Bh cnNlcikpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyICV1IiwKKwkJCSB0c2NG b3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVD VCh0c3BUdXApOworCisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlLiAgSWYgd2Ug aGF2ZSBDT1BZJ2VkIGFuIGV4aXN0aW5nIGNvbmZpZywgYWRkCisJICogYSBDT1BZIGNsYXVzZTsg b3RoZXJ3aXNlIGFkZCBhIFBBUlNFUiBjbGF1c2UuCisJICovCisJLyogQ09QWSAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjb3B5Iik7CisJaWYgKE9pZElzVmFsaWQoY29waWVkLm9iamVjdElkKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGll ZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVJTRVIgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9iamVjdElkID09IEludmFsaWRP aWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFyc2VyfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VS QVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3Jt LT5jZmduYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkp LAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUodHNwVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgc3RhdGVtZW50Lgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRl bnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Rl ZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJ SGVhcFR1cGxlCXRzcFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKworCXRz cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNU KHRzcFR1cCk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogU1RBUlQg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkgInByb2NlZHVyZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tF TiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0le3Byb2NlZHVyZX1EIiwgMiwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImdldHRva2VuIiwKKwkJCQkJCSAicHJv Y2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4p KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IEVORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJlbmQiLAorCQkJCQkJICJwcm9jZWR1cmUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVT ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSV7cHJvY2VkdXJlfUQiLCAyLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4dHlwZXMiLAorCQkJCQkJICJwcm9j ZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBl KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBIRUFETElORSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0c3BGb3JtLT5wcnNoZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg VEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZv cm0tPnByc25hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJ UmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1lbnQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9 RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0 bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhl YXBUdXBsZQl0c2RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlM aXN0CSAgICpsaXN0ID0gTklMOworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlG b3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJ Q1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQg c2VhcmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3Jt ID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKworCisJLyogQWRkIHRo ZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIFRFTVBMQVRFICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0 ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dGVtcGxhdGV9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTVGVtcGxhdGVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5kaWN0dGVtcGxhdGUpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qCisJICogb3B0aW9ucy4gIFhYWCB0 aGlzIGlzIGEgcHJldHR5IHVzZWxlc3MgcmVwcmVzZW50YXRpb24sIGJ1dCB3ZSBjYW4ndCBkbwor CSAqIGJldHRlciB3aXRob3V0IG1vcmUgdHNfY2FjaGUuYyBjb29wZXJhdGlvbiAuLi4KKwkgKi8K KwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAg QW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1w ID0gbmV3X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXAsICIle29wdGlvbnN9cyIsICJvcHRpb25zIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0 cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBP YmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUg c3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0gg VEVNUExBVEUgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c3RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfdHNfdGVtcGxh dGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1RFTVBMQVRFT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzdFR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCB0 ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzdEZvcm0gPSAoRm9ybV9w Z190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRp b24gY2xhdXNlICovCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElz VmFsaWQodHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiTEVYSVpFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAibGV4aXplIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHRzdEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIo dHN0Rm9ybS0+dG1wbG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3Qp OworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBzdGF0ZW1lbnQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04g JXtpZGVudGl0eX1EIEFERCBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7 ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFU SU9OICV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkcgJXtpZl9leGlzdHN9cworICogRk9SICV7dG9r ZW50eXBlfUkKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRl bnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGlj dGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9O ICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9 RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAorICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKyAqIEZPUiAle3Rva2VudHlw ZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1E CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10 KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKm5v ZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICopIGNtZC0+cGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIg VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIpOworCisJLyogRGV0ZXJtaW5lIHRoZSBmb3JtYXQg c3RyaW5nIGFwcHJvcHJpYXRlIHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+ a2luZCkKKwl7CisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lk LAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJ ZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CXRtcCA9IG5ld19vYmp0cmVlKCJJRiBFWElTVFMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJf VFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCWNhc2UgQUxURVJfVFNDT05GSUdf UkVQTEFDRV9ESUNUOgorCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9L RU46CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgQUxURVIgTUFQ UElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2Nm Zy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNz Lm9iamVjdElkKSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBBZGQgdGhlIGFmZmVjdGVkIHRva2Vu IGxpc3QsIGZvciBzdWJjb21tYW5kcyB0aGF0IGhhdmUgb25lICovCisJaWYgKG5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9U U0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRF Ul9UU0NPTkZJR19EUk9QX01BUFBJTkcpCisJeworCQlmb3JlYWNoKGNlbGwsIG5vZGUtPnRva2Vu dHlwZSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChs Zmlyc3QoY2VsbCkpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiRk9SICV7dG9rZW50 eXBlOiwgfUkiLCBsaXN0KTsKKwl9CisKKwkvKiBBZGQgZnVydGhlciBzdWJjb21tYW5kLXNwZWNp ZmljIGVsZW1lbnRzICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01B UFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZP Ul9UT0tFTikKKwl7CisJCS8qIEFERCBNQVBQSU5HIGFuZCBBTFRFUiBNQVBQSU5HIEZPUiBuZWVk IGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgKi8KKwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsg aSA8IGNtZC0+ZC5hdHNjZmcubmRpY3RzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKmRpY3Rf b2JqOworCisJCQlkaWN0X29iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rp b25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbaV0p OworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KGRp Y3Rfb2JqKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJXSVRIICV7ZGljdGlv bmFyaWVzOiwgfUQiLCBsaXN0KTsKKwl9CisJZWxzZSBpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9U U0NPTkZJR19SRVBMQUNFX0RJQ1QgfHwKKwkJCSBub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklH X1JFUExBQ0VfRElDVF9GT1JfVE9LRU4pCisJeworCQkvKiBUaGUgUkVQTEFDRSBmb3JtcyB3YW50 IG9sZCBhbmQgbmV3IGRpY3Rpb25hcmllcyAqLworCQlBc3NlcnQoY21kLT5kLmF0c2NmZy5uZGlj dHMgPT0gMik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFUExBQ0UgJXtvbGRfZGlj dGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlv bmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbMF0p KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiV0lUSCAle25ld19kaWN0aW9uYXJ5fUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGljdElkc1sxXSkpOworCX0KKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIFRFWFQgU0VBUkNIIERJ Q1RJT05BUlkgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBURVhU IFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXA7CisJRGF0dW0JCW9wdGlvbnM7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwli b29sCQlpc251bGw7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9y bTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgd2l0 aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkg R0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBsaXN0IGFj Y29yZGluZyB0byB0aGUgcGdfdHNfZGljdCBkaWN0aW5pdG9wdGlvbgorCSAqIGNvbHVtbgorCSAq LworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJ ICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0 bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgIm9wdGlvbnMiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRD U3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJ ZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAl e2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkp LAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBkZWZpbml0aW9uKTsKKworCVJl bGVhc2VTeXNDYWNoZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXBhcnNl X1ZpZXdTdG10CisgKgkJZGVwYXJzZSBhIFZpZXdTdG10CisgKgorICogR2l2ZW4gYSB2aWV3IE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtpZGVu dGl0eX1EIEFTICV7cXVlcnl9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1ZpZXdT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVZpZXdTdG10ICAgKm5vZGUg PSAoVmlld1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbgly ZWxhdGlvbjsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMg JXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtpZGVudGl0eX1EIEFTICV7cXVlcnl9cyIsIDQsCisJCQkJ CQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAi T1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVu Y2UpLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAicXVlcnki LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHBnX2dldF92aWV3ZGVmX2ludGVybmFsKG9iamVjdElk KSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBDUkVBVEUgTWF0ZXJpYWxpemVkIFZpZXcgc3Rh dGVtZW50LCBpdCBpcyBhIHZhcmlhbnQgb2YKKyAqIENyZWF0ZVRhYmxlQXNTdG10CisgKgorICog Tm90ZSB0aGF0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTyBjYW4gYWxzbyBiZSBkZXBhcnNl ZCBieQorICogZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdCB0byByZW1vdmUgdGhlIFNFTEVDVCBJ TlRPIGNsYXVzZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVu Y2V9cyBbTUFURVJJQUxJWkVEIFZJRVcgfCBUQUJMRV0gJXtpZl9ub3RfZXhpc3RzfXMKKyAqIAkJ JXtpZGVudGl0eX1EICV7Y29sdW1uc31zIFsle29uX2NvbW1pdH1zXSAle3RhYmxlc3BhY2V9cwor ICogIAkJQVMgJXtxdWVyeX1zICV7d2l0aF9ub19kYXRhfXMiCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXRfdmFuaWxsYShPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUYWJsZUFzU3RtdCAqbm9kZSA9IChDcmVhdGVUYWJsZUFz U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXA7CisJT2JqVHJlZSAgICAqdG1wMjsKKwljaGFyCSAgICpmbXQ7CisJTGlzdAkgICAqbGlz dCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyogUmVqZWN0IHVuc3VwcG9ydGVkIGNh c2UgcmlnaHQgYXdheS4gKi8KKwlpZiAoKChRdWVyeSAqKSAobm9kZS0+cXVlcnkpKS0+Y29tbWFu ZFR5cGUgPT0gQ01EX1VUSUxJVFkpCisJCWVsb2coRVJST1IsICJ1bmltcGxlbWVudGVkIGRlcGFy c2Ugb2YgQ1JFQVRFIFRBQkxFIEFTIEVYRUNVVEUiKTsKKworCS8qCisJICogTm90ZSB0aGF0IElO U0VSVCBJTlRPIGlzIGRlcGFyc2VkIGFzIENSRUFURSBUQUJMRSBBUy4gIFRoZXkgYXJlCisJICog ZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgc3lub255bXMgc28gdGhlcmUgaXMgbm8gaGFybSBmcm9t IHRoaXMuCisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX01BVFZJRVcpCisJCWZt dCA9ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIE1BVEVSSUFMSVpFRCBWSUVXICV7aWZfbm90X2V4 aXN0c31zICV7aWRlbnRpdHl9RCI7CisJZWxzZQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVu Y2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiOworCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihub2RlLT5pbnRvLT5yZWwtPnJlbHBlcnNpc3Rl bmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9k ZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCS8qIENPTFVN TlMgY2xhdXNlICovCisJaWYgKG5vZGUtPmludG8tPmNvbE5hbWVzKQorCXsKKwkJZm9yZWFjaChj ZWxsLCBub2RlLT5pbnRvLT5jb2xOYW1lcykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19z dHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIigle2NvbHVtbnM6LCB9SSkiLCAxLAorCQkJCQkJCSAiY29sdW1ucyIsIE9ialR5cGVB cnJheSwgbGlzdCk7CisJfQorCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJ CQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7Y29sdW1uc31zIiwgdG1wKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLwor CXRtcCA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5pbnRvLT5hY2Nlc3NNZXRo b2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFj Y2Vzc19tZXRob2QiLAorCQkJCQkJCSBub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpOworCWVsc2UK Kwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXthY2Nlc3NfbWV0aG9kfXMiLCB0bXApOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZSgiV0lUSCIpOworCWxpc3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUt PmludG8tPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmly c3QoY2VsbCk7CisKKwkJdG1wMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChs aXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wKTsKKworCS8qIE9OIENPTU1JVCBjbGF1c2Uu ICBDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgZG9lc24ndCBoYXZlIG9uZSAqLworCWlmIChub2Rl LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtvbl9jb21taXR9cyIsCisJCQkJCQkJIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+aW50 by0+b25Db21taXQpKTsKKworCS8qIFRBQkxFU1BBQ0UgY2xhdXNlICovCisJdG1wID0gbmV3X29i anRyZWUoIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiKTsKKwlpZiAobm9kZS0+aW50by0+dGFi bGVTcGFjZU5hbWUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1z IiwgInRhYmxlc3BhY2UiLAorCQkJCQkJCSBub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFtZSk7CisJ ZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1JIik7CisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3RhYmxlc3BhY2V9cyIsIHRtcCk7CisKKwkvKiBBZGQgdGhlIHF1ZXJ5ICovCisJQXNzZXJ0 KElzQShub2RlLT5xdWVyeSwgUXVlcnkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJB UyAle3F1ZXJ5fXMiLCAicXVlcnkiLAorCQkJCQkJIHBnX2dldF9xdWVyeWRlZigoUXVlcnkgKikg bm9kZS0+cXVlcnksIGZhbHNlKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNl bnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5pbnRvLT5za2lwRGF0YSA/IHRydWUgOiBm YWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRt cCk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBU UklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7Y29uc3Ry YWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9SIH1zIE9OCisgKiAl e3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cyBGT1IgRUFD SAorICogJXtmb3JfZWFjaH1zICV7d2hlbn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0 ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBs ZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3Qg PSBOSUw7CisJTGlzdAkgICAqZXZlbnRzOworCWNoYXIJICAgKnRyaWd0aW1pbmc7CisKKwlwZ190 cmlnZ2VyID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1f cGdfdHJpZ2dlcl9vaWQsIG9iamVjdElkKTsKKwl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIp IEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCXRyaWd0aW1pbmcgPSBub2RlLT50aW1pbmcgPT0gVFJJ R0dFUl9UWVBFX0JFRk9SRSA/ICJCRUZPUkUiIDoKKwkJbm9kZS0+dGltaW5nID09IFRSSUdHRVJf VFlQRV9BRlRFUiA/ICJBRlRFUiIgOgorCQlub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lO U1RFQUQgPyAiSU5TVEVBRCBPRiIgOgorCQlOVUxMOworCWlmICghdHJpZ3RpbWluZykKKwkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmlnZ2VyIHRpbWluZyB0eXBlICVkIiwgbm9kZS0+dGlt aW5nKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJ R0dFUiAle25hbWV9SSAle3RpbWV9cyIsIDMsCisJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIiwKKwkJCQkJCSAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnRyaWduYW1lLAorCQkJCQkJICJ0aW1lIiwgT2Jq VHlwZVN0cmluZywgdHJpZ3RpbWluZyk7CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZlbnRzIHRo YXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7IGluCisJICog bW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwg YnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3 ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYgKG5vZGUt PmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRz LCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklH R0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19v YmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1RSVU5D QVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5D QVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJ aWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50 cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU9i alRyZWUgICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAgICpjb2xz ID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBv YmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2luZCIgZWxl bWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1 dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZB KCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAidXBkYXRl X29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJCQljaGFy CSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVu ZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9h cnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRz ID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQor CWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRy ZWUoIkZST00iKTsKKwlpZiAodHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVl ICAgICpyZWw7CisKKwkJcmVsID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7ZnJvbV90YWJsZX1zIiwgdG1wX29iaik7CisKKwlpZiAobm9kZS0+ZGVmZXJyYWJs ZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUi KSk7CisJaWYgKG5vZGUtPmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJldCwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIkZPUiBFQUNIICV7Zm9yX2VhY2h9cyIsICJmb3JfZWFjaCIsCisJCQkJ CQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBfb2JqID0gbmV3X29i anRyZWUoIldIRU4iKTsKKwlpZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndo ZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0g ZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxh dGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVs b2coRVJST1IsICJudWxsIHRncXVhbCBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3Ry KHRyaWdGb3JtLT50Z25hbWUpKTsKKworCQl3aGVuQ2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHRE YXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwg Iigle2NsYXVzZX1zKSIsICJjbGF1c2UiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xh dXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJ ICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVufXMiLCB0bXBfb2JqKTsKKworCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCQkiZnVuY25hbWUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlz dCA9IE5JTDsKKwl0Z25hcmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAw KQorCXsKKwkJYnl0ZWEJICAgKnRnYXJnczsKKwkJY2hhcgkgICAqYXJnc3RyOworCQlib29sCQlp c251bGw7CisJCWludAkJCWZpbmR4OworCQlpbnQJCQlsZW50Z2FyZ3M7CisJCWNoYXIJICAgKnA7 CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJ CQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNj cihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJ ZWxvZyhFUlJPUiwgIm51bGwgdGdhcmdzIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJIE5hbWVT dHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJn cyk7CisJCWxlbnRnYXJncyA9IFZBUlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFy Z3N0cjsKKwkJZm9yIChmaW5keCA9IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJewor CQkJc2l6ZV90CQl0bGVuOworCisJCQkvKiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2Rp bmcgaXMgY29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+ PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXJndW1lbnQg c3RyaW5nICglcykgZm9yIHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkJIGFyZ3N0ciwgTmFtZVN0cih0 cmlnRm9ybS0+dGduYW1lKSk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KHApKTsKKworCQkJcCArPSB0bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcF9vYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAi JXthcmdzOiwgfUwiLCBsaXN0KTsJLyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcodG1wX29iaiwgIikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkVYRUNV VEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cyIsIHRtcF9vYmopOworCisJdGFibGVfY2xvc2UocGdf dHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlVXNlck1hcHBpbmdTdG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoK KyAqIEdpdmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LAorICogcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNF UiBNQVBQSU5HIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBVU0VS IE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2Vy TWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbgly ZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWln blNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9u SWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBj YXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBh bmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBP SUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcp IEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2Vy dmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAl e3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJ CSAicm9sZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQo Zm9ybS0+dW11c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5z ZXJ2ZXJuYW1lLAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNl U3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdp dmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1S IFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJV c2VyTWFwcGluZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJV c2VyTWFwcGluZ1N0bXQgKm5vZGUgPSAoQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVl OworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZv cm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVs ID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZl IHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNl YXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK KworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2 ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1J ICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJz ZXJ2ZXIiLCBPYmpUeXBlU3RyaW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVy aWNfb3B0aW9ucyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5v ZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhbiBBbHRlclN0YXRzU3RtdCAoQUxURVIgU1RBVElTVElDUykKKyAqCisgKiBHaXZlbiBh IGFsdGVyIHN0YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNF VCBTVEFUSVNUSUNTICV7dGFyZ2V0fW4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclN0YXRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0 YXRzU3RtdCAqbm9kZSA9IChBbHRlclN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07 CisKKwlpZiAoIW5vZGUtPnN0eHN0YXR0YXJnZXQpCisJCXJldHVybiBOVUxMOworCisJLyogTG9v a3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZyAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRF WFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGlj IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0 aWNfZXh0KSBHRVRTVFJVQ1QodHApOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTVEFU SVNUSUNTICV7aWRlbnRpdHl9RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1uIiwgMiwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRm b3JtLT5zdHhuYW1lKSksCisJCQkJCQkgInRhcmdldCIsIE9ialR5cGVJbnRlZ2VyLCBub2RlLT5z dHhzdGF0dGFyZ2V0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJ WkVEIFZJRVcpCisgKgorICogR2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2Vu dGluZyB0aGUgcmVmcmVzaCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUZS RVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EICV7d2l0 aF9ub19kYXRhfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmll d1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdT dG10ICpub2RlID0gKFJlZnJlc2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZS RVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EIiwgMiwK KwkJCQkJCSAiY29uY3VycmVudGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25j dXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERB VEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJ CQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRy dWUgOiBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9 cyIsIHRtcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0 bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFBPTElDWSAl e2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRU UklCVVRFICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisgKiBPUgorICog QUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQgUkVOQU1FIENPTFVNTiAl e2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5 fXMgUkVOQU1FIFRPICUle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5 fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SQorICogT1IK KyAqIEFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBP UgorICogQUxURVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAl e25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7 aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVl KQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJ LyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUg b3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5j ZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRo ZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJv bQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEg bmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRo ZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdh eS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9U QUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQlj YXNlIE9CSkVDVF9WSUVXOgorCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hl bWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5B TUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAor CQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5taXNz aW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJ CQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpLAorCQkJCQkJCQkgIm5ld25hbWUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JK RUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcG9sVHVwOworCQkJCUZvcm1fcGdfcG9s aWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9saWN5OworCQkJCVNjYW5LZXlEYXRhIGtl eTsKKwkJCQlTeXNTY2FuRGVzYyBzY2FuOworCisJCQkJcGdfcG9saWN5ID0gcmVsYXRpb25fb3Bl bihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCVNjYW5LZXlJbml0KCZr ZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xpY3ksIFBvbGljeU9pZEluZGV4SWQsIHRy dWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwkJCQlwb2xUdXAgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQkJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1IiwK KwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5 KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQ T0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGljeW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1F IFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJCQkJ CQkJCSAicG9saWN5bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+c3VibmFt ZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIHBvbEZvcm0tPnBvbHJlbGlkKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2Fu KTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9 CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNUX0NP TFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlv bik7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRS SUJVVEUgJXtjb2xuYW1lfUkiLCAyLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJ CQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSksCisJCQkJCQkJCQkgImNvbG5hbWUi LCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMiLCAxLAorCQkJCQkJCQkJICJvYmp0 eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5y ZWxhdGlvblR5cGUsIGZhbHNlKSk7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1 cHBvcnQgSUYgRVhJU1RTICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NP TFVNTikKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZl9leGlzdHN9cyIsCisJ CQkJCQkJCQkJICJpZl9leGlzdHMiLAorCQkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklG IEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJ CQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICJSRU5BTUUgQ09MVU1OICV7Y29sbmFtZX1JIiwKKwkJCQkJCQkJCSAi Y29sbmFtZSIsIG5vZGUtPnN1Ym5hbWUpOworCQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJUTyAle25ld25hbWV9SSIsICJuZXduYW1lIiwKKwkJCQkJCQkJIG5vZGUtPm5ld25h bWUpOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwKKwkJCQkJCQkJCQkJCQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKwor CQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQlj YXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJeworCQkJCWNoYXIJICAgKmlkZW50OworCQkJCUhlYXBU dXBsZQlwcm9jdHVwOworCQkJCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICpp ZGVudGl0eTsKKworCQkJCUFzc2VydChJc0Eobm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykp OworCQkJCWlkZW50aXR5ID0gKChPYmplY3RXaXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpu YW1lOworCisJCQkJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJ CSAgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsK KwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCQkJ CS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Igb3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8KKwkJ CQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwKKwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVu dGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJ CQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9wcm9j ZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElkLCB0cnVlKSk7CisKKwkJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAle25ld25h bWV9SSIsIDMsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0 dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJ CQlIZWFwVHVwbGUJb3BjVHVwOworCQkJCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxp c3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAq b3BjbmFtZTsKKworCQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElk R2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChv cGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BjbGFz cyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQlvcGNGb3Jt ID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwkJCQlvbGRuYW1lcyA9 IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBEZWNv bnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9s ZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhvZH1z IFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZh bHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkJCQkgIG9wY25hbWUpLAorCQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkg Im5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VT eXNDYWNoZShvcGNUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1J TFk6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9wZlR1cDsKKwkJCQlIZWFwVHVwbGUJYW1UdXA7CisJ CQkJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCQkJCUZvcm1fcGdfYW0JYW1Gb3JtOworCQkJ CUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkg ICAqb3BmbmFtZTsKKworCQkJCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwg YWRkcmVzcy5vYmplY3RJZCk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJ CQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkg d2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAo Rm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJj aFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsK KwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkJCQkg b3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJV Q1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2Rl LT5vYmplY3QsIDEpOworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJ CURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZuYW1l KTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50 aXR5fUQgVVNJTkcgJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAor CQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlf b2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9y bS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBvcGZuYW1lKSwKKwkJCQkJCQkJCSAi aW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+ YW1uYW1lKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25h bWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUo b3BmVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAl e25ld25hbWV9SSIsIDIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5zdWJuYW1lLAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXdu YW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJY2FzZSBPQkpFQ1RfTEFO R1VBR0U6CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQljYXNlIE9CSkVDVF9QVUJM SUNBVElPTjoKKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJICJvYmp0eXBlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5 cGUsIGZhbHNlKSwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CSBzdHJWYWwoY2FzdE5vZGUoU3RyaW5nLCBub2RlLT5vYmplY3QpKSwKKwkJCQkJCQkJICJuZXdu YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNl IE9CSkVDVF9SVUxFOgorCQkJeworCQkJCUhlYXBUdXBsZQlyZXdyVHVwOworCQkJCUZvcm1fcGdf cmV3cml0ZSByZXdyRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19yZXdyaXRlOworCisJCQkJcGdfcmV3 cml0ZSA9IHJlbGF0aW9uX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQkJcmV3clR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfcmV3cml0ZSwgQW51 bV9wZ19yZXdyaXRlX29pZCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0gPSAoRm9y bV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAl e25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgInJ1bGVuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19yZXdy aXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf VFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdn ZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIg PSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ CXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmpl Y3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0 cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lk ZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAidHJpZ2dlcm5h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRncmVsaWQpLAor CQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJ CQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJ YnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQljYXNlIE9CSkVDVF9TVEFUSVNU SUNfRVhUOgorCQljYXNlIE9CSkVDVF9UWVBFOgorCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgor CQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJY2Fz ZSBPQkpFQ1RfVFNQQVJTRVI6CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCWNhc2UgT0JK RUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJCVJl bGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7CisJ CQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9IGNh c3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7CisKKwkJCQkvKiBPYnRhaW4gb2JqZWN0IHR1cGxl ICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NT aGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxv ZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCQkJLyogT2J0YWluIG5hbWVzcGFjZSAqLworCQkJCUFudW1fbmFtZXNwYWNlID0g Z2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJlc3MuY2xhc3NJZCk7CisJCQkJb2JqbnNw ID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1lc3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0 aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOworCQkJCWlmIChpc251bGwpCisJCQkJCWVs b2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNlIik7CisKKwkJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25h bWV9SSIsIDMsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZhbChs bGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlck9iamVjdERlcGVuZHNTdG10IChBTFRF UiAuLi4gREVQRU5EUyBPTiAuLi4pLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBJ TkRFWCAle2lkZW50aXR5fUQgJXtub31zIERFUEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1J CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5vZGUg PSAoQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0 ID0gTlVMTDsKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJ CU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXF1YWxpZmllZCA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCSBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9u LCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBJTkRF WCAle2lkZW50aXR5fUQgJXtub31zIERFUEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1JIiwg MywKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwgcXVhbGlmaWVkLAorCQkJCQkJ CSAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDogIiIs CisJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgc3RyVmFsKG5vZGUtPmV4dG5hbWUp KTsKKwl9CisJZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVw YXJzZSBjb21tYW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIGRlcGFyc2VfQ3JlYXRlUHVibGljYXRp b25TdG10IGFuZCBkZXBhcnNlX0FsdGVyUHVibGljYXRpb25TdG10LgorICovCitzdGF0aWMgdm9p ZAorZGVwYXJzZV9QdWJsaWNhdGlvbk9iamVjdHMoTGlzdCAqcmVscywgTGlzdCAqc2NoZW1hcywK KwkJCQkJCSAgIExpc3QgKipwdWJyZWxzLCBMaXN0ICoqcHVic2NoZW1hcykKK3sKKwlMaXN0Q2Vs bCAgICpsYzE7CisJTGlzdENlbGwgICAqbGMyOworCisJKnB1YnJlbHMgPSBOSUw7CisJKnB1YnNj aGVtYXMgPSBOSUw7CisKKwlmb3JlYWNoKGxjMSwgcmVscykKKwl7CisJCU9ialRyZWUgICAgKnRt cF9yZWw7CisJCUxpc3QJICAgKmNvbGxpc3QgPSBOSUw7CisJCVJlbGF0aW9uCXJlbGF0aW9uOwor CisJCXB1YmxpY2F0aW9uX3JlbCAqcHViX3JlbCA9IChwdWJsaWNhdGlvbl9yZWwgKikgbGZpcnN0 KGxjMSk7CisKKwkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKHB1Yl9yZWwtPnJlbGlkLCBBY2Nl c3NTaGFyZUxvY2spOworCisJCXRtcF9yZWwgPSBuZXdfb2JqdHJlZV9WQSgiJXt0YWJsZW5hbWV9 RCIsIDEsCisJCQkJCQkJCSAidGFibGVuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSk7CisKKwkJ aWYgKHB1Yl9yZWwtPmNvbHVtbkxpc3QpCisJCXsKKwkJCWZvcmVhY2gobGMyLCBwdWJfcmVsLT5j b2x1bW5MaXN0KQorCQkJCWNvbGxpc3QgPSBsYXBwZW5kKGNvbGxpc3QsCisJCQkJCQkJCSAgbmV3 X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdChsYzIpKSkpOworCisJCQlhcHBlbmRfYXJyYXlf b2JqZWN0KHRtcF9yZWwsICIoJXtjb2xzOiwgfXMpIiwgY29sbGlzdCk7CisJCX0KKworCQlpZiAo cHViX3JlbC0+d2hlcmVDbGF1c2UpCisJCXsKKwkJCUxpc3QJICAgKmNvbnRleHQ7CisJCQljaGFy CSAgICp3aGVyZUNsYXVzZTsKKworCQkJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJCSAgcHViX3JlbC0+cmVs aWQpOworCisJCQkvKiBEZXBhcnNlIHRoZSBleHByZXNzaW9uICovCisJCQl3aGVyZUNsYXVzZSA9 CisJCQkJZGVwYXJzZV9leHByZXNzaW9uKHB1Yl9yZWwtPndoZXJlQ2xhdXNlLCBjb250ZXh0LCBm YWxzZSwgZmFsc2UpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfcmVsLCAiV0hFUkUg JXt3aGVyZX1zIiwgIndoZXJlIiwgd2hlcmVDbGF1c2UpOworCQl9CisKKwkJcmVsYXRpb25fY2xv c2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJKnB1YnJlbHMgPSBsYXBwZW5kKCpw dWJyZWxzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfcmVsKSk7CisJfQorCisJZm9yZWFjaChsYzEs IHNjaGVtYXMpCisJCSogcHVic2NoZW1hcyA9IGxhcHBlbmQoKnB1YnNjaGVtYXMsCisJCQkJCQkJ ICAgbmV3X3N0cmluZ19vYmplY3QoZ2V0X25hbWVzcGFjZV9uYW1lKGxmaXJzdF9vaWQobGMxKSkp KTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgUFVCTElDQVRJT04gc3RhdGVtZW50Lgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgUFVCTElDQVRJT04gJXtpZGVudGl0eX1z IEZPUiBBTEwgVEFCTEVTIFdJVEggKCV7d2l0aDosIH1zKQorICoJT1IKKyAqIENSRUFURSBQVUJM SUNBVElPTiAle2lkZW50aXR5fXMgRk9SIFRBQkxFICV7dGFibGVzOiwgfXMgV0lUSCAoJXt3aXRo OiwgfXMpCisgKglPUgorICogQ1JFQVRFIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBGT1IgVEFC TEVTIElOIFNDSEVNQSAle3NjaGVtYXM6LCB9cworICogV0lUSCAoJXt3aXRoOiwgfXMpCisgKglP UgorICogQ1JFQVRFIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBGT1IgVEFCTEUgJXt0YWJsZXM6 LCB9cywKKyAqIFRBQkxFUyBJTiBTQ0hFTUEgJXtzY2hlbWFzOiwgfXMgV0lUSCAoJXt3aXRoOiwg fXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUHVibGljYXRpb25TdG10 KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZCA9IGNtZC0+ZC5jcmVh dGVwdWIuYWRkcmVzcy5vYmplY3RJZDsKKwlDcmVhdGVQdWJsaWNhdGlvblN0bXQgKm5vZGUgPSAo Q3JlYXRlUHVibGljYXRpb25TdG10ICopIGNtZC0+cGFyc2V0cmVlOworCU9ialRyZWUgICAgKmNy ZWF0ZVB1YjsKKwlIZWFwVHVwbGUJcHVidHVwOworCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9y bTsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdAkgICAq cmVsbGlzdCA9IE5JTDsKKwlMaXN0CSAgICpzY2hsaXN0ID0gTklMOworCisJLyogRG9uJ3QgZGVw YXJzZSBzcWwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLwor CWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGaW5kIHRoZSBw Z19wdWJsaWNhdGlvbiBlbnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiAq LworCXB1YnR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNBVElPTk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwdWJ0dXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHVibGljYXRpb24gd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKworCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VU U1RSVUNUKHB1YnR1cCk7CisJcHViZm9ybS0+b2lkID0gcHViZm9ybS0+b2lkOworCisJY3JlYXRl UHViID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQVUJMSUNBVElPTiAle2lkZW50aXR5fXMiLCAx LAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgTmFtZVN0 cihwdWJmb3JtLT5wdWJuYW1lKSk7CisKKwkvKiBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiAq LworCWlmIChwdWJmb3JtLT5wdWJhbGx0YWJsZXMpCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNy ZWF0ZVB1YiwgIkZPUiBBTEwgVEFCTEVTIik7CisJZWxzZQorCXsKKwkJZGVwYXJzZV9QdWJsaWNh dGlvbk9iamVjdHMoY21kLT5kLmNyZWF0ZXB1Yi5yZWxzLAorCQkJCQkJCQkgICBjbWQtPmQuY3Jl YXRlcHViLnNjaGVtYXMsCisJCQkJCQkJCSAgICZyZWxsaXN0LCAmc2NobGlzdCk7CisKKwkJLyog QXBwZW5kIHRoZSBwdWJsaWNhdGlvbiB0YWJsZXMgKi8KKwkJaWYgKHJlbGxpc3QpCisJCQlhcHBl bmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVB1YiwgIkZPUiBUQUJMRSAle3RhYmxlczosIH1zIiwgcmVs bGlzdCk7CisKKwkJLyogQXBwZW5kIHRoZSBwdWJsaWNhdGlvbiBzY2hlbWFzICovCisJCWlmIChz Y2hsaXN0KQorCQl7CisJCQlpZiAocmVsbGlzdCkKKwkJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhj cmVhdGVQdWIsICIsIFRBQkxFUyBJTiBTQ0hFTUEiKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfZm9y bWF0X3N0cmluZyhjcmVhdGVQdWIsICJGT1IgVEFCTEVTIElOIFNDSEVNQSIpOworCisJCQlhcHBl bmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVB1YiwgIiV7c2NoZW1hczosIH1zIiwgc2NobGlzdCk7CisJ CX0KKwl9CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9u cykKKwl7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZF bGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0bXBfb2JqID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwg ZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVQdWIsICJXSVRIICgle3dpdGg6 LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShwdWJ0dXApOworCXJldHVybiBjcmVh dGVQdWI7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQUxURVIgUFVCTElDQVRJT04gc3RhdGVtZW50 LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50aXR5 fXMgQUREfERST1B8U0VUIFRBQkxFICV7dGFibGVzOiwgfXMKKyAqIAlPUgorICogQUxURVIgUFVC TElDQVRJT04gJXtpZGVudGl0eX1zIEFERHxEUk9QfFNFVCBUQUJMRVMgSU4gU0NIRU1BICV7c2No ZW1hczosIH1zCisgKglPUgorICogQUxURVIgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIEFERHxE Uk9QfFNFVCBUQUJMRSAle3RhYmxlczosIH1zLAorICogVEFCTEVTIElOIFNDSEVNQSAle3NjaGVt YXM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUHVibGljYXRpb25T dG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZCA9IGNtZC0+ZC5j cmVhdGVwdWIuYWRkcmVzcy5vYmplY3RJZDsKKwlBbHRlclB1YmxpY2F0aW9uU3RtdCAqbm9kZSA9 IChBbHRlclB1YmxpY2F0aW9uU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICph bHRlcnB1YjsKKwlIZWFwVHVwbGUJcHVidHVwOworCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9y bTsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3QJICAgKnJlbGxpc3QgPSBOSUw7CisJTGlzdAkg ICAqc2NobGlzdCA9IE5JTDsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1hbmRzIGdlbmVy YXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24p CisJCXJldHVybiBOVUxMOworCisJLyogRmluZCB0aGUgcGdfcHVibGljYXRpb24gZW50cnkgYW5k IG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb24gKi8KKwlwdWJ0dXAgPSBTZWFyY2hTeXND YWNoZTEoUFVCTElDQVRJT05PSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocHVidHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHB1YmxpY2F0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHVi Zm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QocHVidHVwKTsKKworCXB1YmZv cm0tPm9pZCA9IHB1YmZvcm0tPm9pZDsKKworCWFsdGVycHViID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgTmFtZVN0cihwdWJmb3JtLT5wdWJuYW1lKSk7CisKKwlp ZiAobm9kZS0+b3B0aW9ucykKKwl7CisJCS8qIFNFVCBvcHRpb24gKi8KKwkJTGlzdAkgICAqbGlz dCA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJCXsKKwkJCU9ialRy ZWUgICAgKnRtcF9vYmo7CisJCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCX0KKwor CQkvKiBBcHBlbmQgdGhlIHB1YmxpY2F0aW9uIG9wdGlvbnMgKi8KKwkJYXBwZW5kX2FycmF5X29i amVjdChhbHRlcnB1YiwgIlNFVCAoJXtvcHRpb25zOiwgfXMpIiwgbGlzdCk7CisKKwkJUmVsZWFz ZVN5c0NhY2hlKHB1YnR1cCk7CisJCXJldHVybiBhbHRlcnB1YjsKKwl9CisKKwlpZiAobm9kZS0+ YWN0aW9uID09IEFQX0FkZE9iamVjdHMpCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVycHVi LCAiQUREIik7CisJZWxzZSBpZiAobm9kZS0+YWN0aW9uID09IEFQX0Ryb3BPYmplY3RzKQorCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlcnB1YiwgIkRST1AiKTsKKwllbHNlCisJCWFwcGVuZF9m b3JtYXRfc3RyaW5nKGFsdGVycHViLCAiU0VUIik7CisKKwlkZXBhcnNlX1B1YmxpY2F0aW9uT2Jq ZWN0cyhjbWQtPmQuYWx0ZXJwdWIucmVscywgY21kLT5kLmFsdGVycHViLnNjaGVtYXMsCisJCQkJ CQkJICAgJnJlbGxpc3QsICZzY2hsaXN0KTsKKworCS8qIEFwcGVuZCB0aGUgcHVibGljYXRpb24g dGFibGVzICovCisJaWYgKHJlbGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJwdWIs ICJUQUJMRSAle3RhYmxlczosIH1zIiwgcmVsbGlzdCk7CisKKwlpZiAoc2NobGlzdCkKKwl7CisJ CWlmIChjbWQtPmQuY3JlYXRlcHViLnJlbHMpCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRl cnB1YiwgIiwgVEFCTEVTIElOIFNDSEVNQSIpOworCQllbHNlCisJCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyhhbHRlcnB1YiwgIlRBQkxFUyBJTiBTQ0hFTUEiKTsKKworCQkvKiBBcHBlbmQgdGhlIHB1 YmxpY2F0aW9uIHNjaGVtYXMgKi8KKwkJYXBwZW5kX2FycmF5X29iamVjdChhbHRlcnB1YiwgIiV7 c2NoZW1hczosIH1zIiwgc2NobGlzdCk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHB1YnR1cCk7 CisJcmV0dXJuIGFsdGVycHViOworfQorCisvKgorICogRGVwYXJzZSBhIFJ1bGVTdG10IChDUkVB VEUgUlVMRSkuCisgKgorICogR2l2ZW4gYSBydWxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBydWxl IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBSVUxFICV7b3JfcmVw bGFjZX1zICV7aWRlbnRpdHl9SSBBUyBPTiAle2V2ZW50fXMgVE8gJXt0YWJsZX1ECisgKiAle3do ZXJlX2NsYXVzZX1zIERPICV7aW5zdGVhZH1zICV7YWN0aW9uczosIH1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfUnVsZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJUnVsZVN0bXQgICAqbm9kZSA9IChSdWxlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlSZWxhdGlvbglwZ19yZXdyaXRlOworCUZv cm1fcGdfcmV3cml0ZSByZXdyRm9ybTsKKwlIZWFwVHVwbGUJcmV3clR1cDsKKwlTeXNTY2FuRGVz YyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlEYXR1bQkJZXZfcXVhbDsKKwlEYXR1bQkJZXZf YWN0aW9uczsKKwlib29sCQlpc251bGw7CisJY2hhcgkgICAqcXVhbDsKKwlMaXN0CSAgICphY3Rp b25zOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAg ICpldmVudF9zdHI7CisKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfcmV3 cml0ZV9vaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdf cmV3cml0ZSwgUmV3cml0ZU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5 KTsKKwlyZXdyVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocmV3clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy ZXdyaXRlIHJ1bGUgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJld3JGb3JtID0g KEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJZXZlbnRfc3RyID0gbm9k ZS0+ZXZlbnQgPT0gQ01EX1NFTEVDVCA/ICJTRUxFQ1QiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01E X1VQREFURSA/ICJVUERBVEUiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01EX0RFTEVURSA/ICJERUxF VEUiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01EX0lOU0VSVCA/ICJJTlNFUlQiIDogTlVMTDsKKwlB c3NlcnQoZXZlbnRfc3RyICE9IE5VTEwpOworCisJZXZfcXVhbCA9IGhlYXBfZ2V0YXR0cihyZXdy VHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfcXVhbCwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3Io cGdfcmV3cml0ZSksICZpc251bGwpOworCWV2X2FjdGlvbnMgPSBoZWFwX2dldGF0dHIocmV3clR1 cCwgQW51bV9wZ19yZXdyaXRlX2V2X2FjdGlvbiwKKwkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3Io cGdfcmV3cml0ZSksICZpc251bGwpOworCisJcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoZXZfcXVh bCwgZXZfYWN0aW9ucywgJnF1YWwsICZhY3Rpb25zKTsKKworCXRtcCA9IG5ld19vYmp0cmVlKCIi KTsKKwlpZiAocXVhbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiV0hFUkUgJXtjbGF1 c2V9cyIsICJjbGF1c2UiLCBxdWFsKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3Qo dG1wLCAiV0hFUkUgJXtjbGF1c2V9cyIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9 CisKKwlpZiAoYWN0aW9ucyA9PSBOSUwpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJp bmdfb2JqZWN0KCJOT1RISU5HIikpOworCWVsc2UKKwl7CisJCWZvcmVhY2goY2VsbCwgYWN0aW9u cykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KGxmaXJzdChjZWxs KSkpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUlVMRSAle29yX3JlcGxh Y2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RCAle3doZXJlX2Ns YXVzZX1zIERPICV7aW5zdGVhZH1zICV7YWN0aW9uczosIH1zIiwgNywKKwkJCQkJCSAib3JfcmVw bGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNF IiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnJ1bGVuYW1l LAorCQkJCQkJICJldmVudCIsIE9ialR5cGVTdHJpbmcsIGV2ZW50X3N0ciwKKwkJCQkJCSAidGFi bGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJ CQkJCQkgIndoZXJlX2NsYXVzZSIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAiaW5zdGVh ZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJB TFNPIiwKKwkJCQkJCSAiYWN0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9y bVN0bXQgKENSRUFURSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBh bmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICog cmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVFJBTlNGT1JNIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5h bWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkKKyAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAl e3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTgorICogJXtzaWduYXR1cmVfdG9mfXMg KQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3JtU3RtdCAqbm9k ZSA9IChDcmVhdGVUcmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqc2lnbmF0dXJlOworCUhlYXBUdXBsZQl0cmZUdXA7CisJSGVhcFR1cGxl CWxhbmdUdXA7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ190cmFuc2Zvcm0gdHJmRm9y bTsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsK KwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAg PSBTZWFyY2hTeXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0 cmZGb3JtID0gKEZvcm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVwKTsKKworCS8qIEdl dCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoTEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig bGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRyZmxhbmcpOworCWxhbmdGb3Jt ID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1l fUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJ CQkJICJ0eXBlbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmZGb3JtLT50cmZ0eXBl KSwKKwkJCQkJCSAibGFuZ3VhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIobGFu Z0Zvcm0tPmxhbm5hbWUpKTsKKworCS8qIERlcGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVtZW50X2xp c3QgKi8KKwlpZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSkKKwl7CisJCUxpc3QJ ICAgKnBhcmFtcyA9IE5JTDsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBG Uk9NIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJm Rm9ybS0+dHJmZnJvbXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAl dSIsCisJCQkJIHRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3By b2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRv ZXMgbm90IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZQorCQkgKiBjYXRh bG9nIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJv Y0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKwor CQkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJCSAg InR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJv Y0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQo cGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVy ZSA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwK KwkJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ CQlOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBP YmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiKEZS T00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsCisJCQkJCQkJIHNpZ25hdHVyZSk7 CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJaWYgKE9pZElzVmFsaWQodHJmRm9y bS0+dHJmdG9zcWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qIEFwcGVu ZCBhICcsJyBpZiB0cmZmcm9tc3FsIGlzIHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsIE9pZElzVmFsaWQodHJmRm9ybS0+dHJmZnJvbXNxbCkg PyAiLCIgOiAiKCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZV TkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+ dHJmdG9zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJ CSB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RS VUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hh bmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0 IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJv bmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqcGFyYW1fb2JqID0gbmV3X29ianRyZWUo IiIpOworCisJCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJ CQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMg PSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJCX0KKwor CQlzaWduYXR1cmUgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czos IH1zKSIsIDIsCisJCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CSAgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJCQkJTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpLAorCQkJCQkJCQkgICAiYXJn dW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIlRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwKKwkJCQkJCQkg c2lnbmF0dXJlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKworCWFwcGVuZF9m b3JtYXRfc3RyaW5nKHJldCwgIikiKTsKKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlS ZWxlYXNlU3lzQ2FjaGUodHJmVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIENvbW1lbnRTdG10IHdoZW4gaXQgcGVydGFpbnMgdG8gYSBjb25zdHJhaW50LgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDT01NRU5UIE9OIENPTlNUUkFJTlQgJXtpZGVudGl0eX1zIE9O IFtET01BSU5dICV7cGFyZW50b2JqfXMgSVMgJXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9Db21tZW50T25Db25zdHJhaW50U210KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNvbW1lbnRTdG10ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbnN0clR1cDsKKwlGb3JtX3Bn X2NvbnN0cmFpbnQgY29uc3RyRm9ybTsKKwlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwlBc3NlcnQo bm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCB8fCBub2RlLT5vYmp0eXBlID09 IE9CSkVDVF9ET01DT05TVFJBSU5UKTsKKworCWNvbnN0clR1cCA9IFNlYXJjaFN5c0NhY2hlMShD T05TVFJPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uc3RyVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0cmFpbnQgd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdF VFNUUlVDVChjb25zdHJUdXApOworCisJaWYgKE9pZElzVmFsaWQoY29uc3RyRm9ybS0+Y29ucmVs aWQpKQorCQlPYmplY3RBZGRyZXNzU2V0KGFkZHIsIFJlbGF0aW9uUmVsYXRpb25JZCwgY29uc3Ry Rm9ybS0+Y29ucmVsaWQpOworCWVsc2UKKwkJT2JqZWN0QWRkcmVzc1NldChhZGRyLCBUeXBlUmVs YXRpb25JZCwgY29uc3RyRm9ybS0+Y29udHlwaWQpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkNPTU1FTlQgT04gQ09OU1RSQUlOVCAle2lkZW50aXR5fXMgT04gJXtkb21haW59cyAle3BhcmVu dG9ian1zIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKE5h bWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSkpLAorCQkJCQkJICJkb21haW4iLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UKSA/ICJE T01BSU4iIDogIiIsCisJCQkJCQkgInBhcmVudG9iaiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg Z2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisKKwkvKiBBZGQgdGhlIGNvbW1lbnQg Y2xhdXNlICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIs IG5vZGUtPmNvbW1lbnQpOworCisJUmVsZWFzZVN5c0NhY2hlKGNvbnN0clR1cCk7CisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ29tbWVudFN0bXQgKENPTU1FTlQgT04gLi4u KS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY29t bWVudCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDT01NRU5UIE9OICV7b2Jq dHlwZX1zICV7aWRlbnRpdHl9cyBJUyAle2NvbW1lbnR9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NvbW1lbnRTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNvbW1lbnRTdG10ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisKKwkvKgorCSAqIENvbnN0 cmFpbnRzIGFyZSBzdWZmaWNpZW50bHkgZGlmZmVyZW50IHRoYXQgaXQgaXMgZWFzaWVyIHRvIGhh bmRsZSB0aGVtCisJICogc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBP QkpFQ1RfRE9NQ09OU1RSQUlOVCB8fAorCQlub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05T VFJBSU5UKQorCXsKKwkJQXNzZXJ0KGFkZHJlc3MuY2xhc3NJZCA9PSBDb25zdHJhaW50UmVsYXRp b25JZCk7CisJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRPbkNvbnN0cmFpbnRTbXQoYWRkcmVzcy5v YmplY3RJZCwgcGFyc2V0cmVlKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVO VCBPTiAle29ianR5cGV9cyIsIDEsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJIChjaGFyICopIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSk7 CisKKwkvKgorCSAqIEFkZCB0aGUgb2JqZWN0IGlkZW50aXR5IGNsYXVzZS4gIEZvciB6ZXJvIGFy Z3VtZW50IGFnZ3JlZ2F0ZXMgd2UgbmVlZAorCSAqIHRvIGFkZCB0aGUgKCopIGJpdDsgaW4gYWxs IG90aGVyIGNhc2VzIHdlIGNhbiBqdXN0IHVzZQorCSAqIGdldE9iamVjdElkZW50aXR5LgorCSAq CisJICogWFhYIHNob3VsZG4ndCB3ZSBpbnN0ZWFkIGZpeCB0aGUgb2JqZWN0IGlkZW50aXRpZXMg Zm9yIHplcm8tYXJndW1lbnQKKwkgKiBhZ2dyZWdhdGVzPworCSAqLworCWlmIChub2RlLT5vYmp0 eXBlID09IE9CSkVDVF9BR0dSRUdBVEUpCisJeworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9y bV9wZ19wcm9jIHByb2NGb3JtOworCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCWlmICghSGVhcFR1cGxl SXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJcHJv Y0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisJCWlmIChwcm9jRm9y bS0+cHJvbmFyZ3MgPT0gMCkKKwkJCWlkZW50aXR5ID0gcHNwcmludGYoIiVzKCopIiwKKwkJCQkJ CQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2NGb3Jt LT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKHByb2NGb3JtLT5wcm9u YW1lKSkpOworCQllbHNlCisJCQlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNz LCBmYWxzZSk7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJZWxzZQorCQlpZGVu dGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICIle2lkZW50aXR5fXMiLCAiaWRlbnRpdHkiLCBpZGVudGl0eSk7CisK KwkvKiBBZGQgdGhlIGNvbW1lbnQgY2xhdXNlOyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBxdW90 ZWQgbGl0ZXJhbC4gKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7Y29tbWVu dH1zIiwgbm9kZS0+Y29tbWVudCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIFNlY0xhYmVsU3RtdCAoU0VDVVJJVFkgTEFCRUwpCisgKgorICogR2l2ZW4gdGhlIE9iamVj dEFkZHJlc3Mgb2YgdGhlIHRhcmdldCBvYmplY3QgYW5kIHRoZSBwYXJzZSB0cmVlIG9mIHRoZQor ICogU0VDVVJJVFkgTEFCRUwgY29tbWFuZCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5n IHRoZSBTRUNVUklUWSBMQUJFTAorICogY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogU0VDVVJJVFkgTEFCRUwgRk9SICV7cHJvdmlkZXJ9cyBPTiAle29iamVjdF90eXBlX25hbWV9 cyAle2lkZW50aXR5fXMgSVMgJXtsYWJlbH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfU2VjTGFiZWxTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQor eworCVNlY0xhYmVsU3RtdCAqbm9kZSA9IChTZWNMYWJlbFN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKnJldDsKKworCUFzc2VydChub2RlLT5wcm92aWRlcik7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiU0VDVVJJVFkgTEFCRUwgRk9SICV7cHJvdmlkZXJ9cyBPTiAle29ianR5cGV9 cyAle2lkZW50aXR5fXMiLCAzLAorCQkJCQkJICJwcm92aWRlciIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPnByb3ZpZGVyLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBz dHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSksCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSk7CisK KwkvKiBBZGQgdGhlIGxhYmVsIGNsYXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVvdGVk IGxpdGVyYWwuICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2xhYmVsfXMi LCBub2RlLT5sYWJlbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENy ZWF0ZUFtU3RtdCAoQ1JFQVRFIEFDQ0VTUyBNRVRIT0QpLgorICoKKyAqIEdpdmVuIGFuIGFjY2Vz cyBtZXRob2QgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh bgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBBQ0NFU1MgTUVUSE9EIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBBQ0NFU1MgTUVUSE9EICV7aWRl bnRpdHl9SSBUWVBFICV7YW1fdHlwZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVBbVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQlhbVR1cDsKKwlGb3JtX3Bn X2FtCWFtRm9ybTsKKwljaGFyCSAgICphbXR5cGU7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0NhY2hl MShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nl c3MgbWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJYW1Gb3JtID0gKEZvcm1f cGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlzd2l0Y2ggKGFtRm9ybS0+YW10eXBlKQorCXsK KwkJY2FzZSAnaSc6CisJCQlhbXR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgJ3Qn OgorCQkJYW10eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgImludmFsaWQgdHlwZSAlYyBmb3IgYWNjZXNzIG1ldGhvZCIsIGFtRm9ybS0+YW10eXBl KTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgJXtp ZGVudGl0eX1JIFRZUEUgJXthbV90eXBlfXMgSEFORExFUiAle2hhbmRsZXJ9RCIsIDMsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+YW1u YW1lKSwKKwkJCQkJCSAiYW1fdHlwZSIsIE9ialR5cGVTdHJpbmcsIGFtdHlwZSwKKwkJCQkJCSAi aGFuZGxlciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIGFtRm9ybS0+YW1oYW5kbGVy KSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xv dy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0 ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVl OworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNt ZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElk OworCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9D cmVhdGVFeHRlbnNpb25TdG10KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBu ZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICov CisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRfQWx0ZXJDb2xsYXRp b25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJDb2xsYXRpb24ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRG9tYWluU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Fs dGVyRG9tYWluU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCSAgIGNtZC0+ZC5z aW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJF eHRlbnNpb25Db250ZW50c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkg IGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNp b25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZkd1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9B bHRlckZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRm9yZWln blNlcnZlclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0FsdGVyRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0FsdGVyT2JqZWN0RGVwZW5kc1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRlcGVu ZFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1h U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2lt cGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJIGNtZC0+ ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck93 bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Fs dGVyUG9saWN5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclN0 YXRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyU3RhdHNTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclRTRGljdGlvbmFyeVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclVzZXJNYXBwaW5nU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCisJCWNhc2UgVF9Db21tZW50U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRTdG10 KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ29tcG9zaXRl VHlwZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQW1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlQW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVDYXN0 U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVDb252ZXJzaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZUNvbnZlcnNpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZURvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVEb21haW4ob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBF TlVNICovCisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZUV4dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZUZkd1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGZHdTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGb3JlaWduU2VydmVyU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CisJCWNhc2UgVF9DcmVhdGVGdW5jdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVG dW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlT3BGYW1pbHlT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVBMYW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0 ZUxhbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10OiAvKiBDUkVBVEUgVFlQRSBBUyBSQU5H RSAqLworCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU2Vx U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0YXRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0 ZVN0YXRpc3RpY3NTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZUZvcmVpZ25UYWJsZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZVRhYmxlQXNTdG10OgkvKiBDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgKi8KKwkJCXJldHVy biBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0NyZWF0ZVRyYW5zZm9ybVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVh dGVUcmFuc2Zvcm1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVU cmlnU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0RlZmluZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElkLCBw YXJzZXRyZWUsCisJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwor CQljYXNlIFRfSW5kZXhTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX1JlbmFtZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1w bGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUnVsZVN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfVmlld1N0 bXQ6CQkvKiBDUkVBVEUgVklFVyAqLworCQkJcmV0dXJuIGRlcGFyc2VfVmlld1N0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1NlY0xhYmVsU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX1NlY0xhYmVsU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNl IGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwly ZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVk Q29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRD b21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAq b3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCU1lbW9yeUNvbnRleHQgdG1w Y3h0OworCU9ialRyZWUgICAgKnRyZWU7CisJY2hhcgkgICAqY29tbWFuZCA9IE5VTEw7CisJU3Ry aW5nSW5mb0RhdGEgc3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkg dGhlIGRlcGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lk IGhhdmluZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAor CSAqIGFsbG9jYXRlIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAq LworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX0lOSVRTSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJv dXRpbmVzIHVuZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rp b25hbGl0eQorCSAqIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4g IEluIHN1Y2ggcmVzdWx0cywgd2Ugd2FudAorCSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVh bGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIgdG8KKwkgKiBlbnZpcm9ubWVu dHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmpl Y3QKKwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNo IHBhdGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgor CSAqLworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5 Q29udGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+ YWRkQ2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVz aE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2Vf bW9kZTsKKworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJ dHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFND VF9BbHRlclRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJSZWxhdGlvbihjbWQpOworCQkJ YnJlYWs7CisJCWNhc2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNt ZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBh cnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJP cEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFr OworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BD bGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlckRlZmF1bHRQcml2aWxl Z2VzOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQoY21kKTsK KwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVQdWJsaWNhdGlvbjoKKwkJCXRyZWUgPSBkZXBh cnNlX0NyZWF0ZVB1YmxpY2F0aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0Fs dGVyUHVibGljYXRpb246CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uU3RtdChj bWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVw YXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoY21kKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0 OgogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQt PnR5cGUpOwotLSAKMi4zNC4xCgo= --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v61-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581u15 RnJvbSA4M2U3Mjc3MTYyZTdiNmQzNDZlMTBlYzJhNTdlMGVhZWM5N2UzNTlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMTMgSmFuIDIwMjMgMTA6NDY6MzkgKzA1MzAKU3ViamVjdDogW1BBVENIIHY2MSA2Lzdd 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 YW5kcy9ldmVudF90cmlnZ2VyLmMgICAgICAgICAgfCAzODYgKysrKysrKysrKysrKystCiBzcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAyODAgKysrKysrKysr LS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAxMCAr LQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYyAgfCAzNTggKysrKysr KysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICB8 ICA0OSArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0 MyArKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgIDIw ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAyNDAg KysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAg fCAxOTAgKysrKysrLQogc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYyAgICAgICAgICAgICAgICAg ICAgIHwgIDI2ICstCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgICAg ICAgfCAgMTUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgICAgICAgICAg ICB8ICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAg fCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwg IDQwICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgfCAg IDIgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgICAgICAgICAgIHwgIDEw ICstCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgNDQg Ky0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAxMiAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgIDggKwog c3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgIHwgIDE3ICstCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgIHwgIDE1ICstCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgIHwgIDEyICsKIHNyYy9pbmNs dWRlL3Rjb3AvY21kdGFnLmggICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1 ZGUvdGNvcC9jbWR0YWdsaXN0LmggICAgICAgICAgICAgICAgIHwgMzg2ICsrKysrKystLS0tLS0t LQogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgICAgICAgICAgIHwgIDEwICsK IHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgICAgICAgICB8ICAyMCArLQog c3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICAzICstCiAu Li4vZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgfCAgIDcgKwogLi4u L3NxbC9jcmVhdGVfdGFibGUuc3FsICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgIHwgNDIwICsrKysrKysrLS0t LS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsICAgICB8IDQ2 NSArKysrKysrKysrKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgICAgICAgICB8ICAgNiArCiA0MCBmaWxlcyBjaGFuZ2VkLCAyNjQzIGluc2VydGlvbnMoKyks IDQ4NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMKaW5kZXggOTU3MWM2NjlmNy4uYzllYTU4Y2FkZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDggQEAgR2V0UHVibGljYXRpb24o T2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5wdWJ1cGRh dGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAlw dWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwlwdWIt PnB1YmFjdGlvbnMucHViZGRsX2FsbCA9IHB1YmZvcm0tPnB1YmRkbF9hbGw7CisJcHViLT5wdWJh Y3Rpb25zLnB1YmRkbF90YWJsZSA9IHB1YmZvcm0tPnB1YmRkbF90YWJsZTsKIAlwdWItPnB1YnZp YXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYwppbmRleCBkNmM2ZDUxNGYzLi43N2RjYjljOWRiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NyZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25h bWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21t YW5kcy9jcmVhdGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNp bmNsdWRlICJjb21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBj cmVhdGVfY3Rhc19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJ U3RvcmVWaWV3UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsK IAkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICog RmlyZSB0aGUgdHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUg dGFibGUgc28KKwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQg dGhlIG5ld2x5IGNyZWF0ZWQgdGFibGUKKwkJICogaW4gdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJ CSAqLworCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9S ZWxhdGlvbkFkZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDQ0NzJlMjhkNzEuLmQ3YTk1ZjVjNjAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTM3LDggKzM3LDExIEBACiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGls aXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVw YXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTkyLDcgKzk1LDggQEAgQ3JlYXRl RXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJaWYgKHN0cmNtcChzdG10 LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2 ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAmJgotCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAi dGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9y ZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93 cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBldmVudCBuYW1lIFwiJXNcIiIs CkBAIC0xMTgsNyArMTIyLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0 bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFnIGxpc3QsIGlmIGFueS4gKi8KIAlpZiAoKHN0cmNt cChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpID09IDAgfHwKIAkJIHN0cmNt cChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSA9PSAwIHx8Ci0JCSBzdHJjbXAo c3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwKQorCQkgc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRh YmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkmJiB0YWdzICE9IE5VTEwpCiAJCXZhbGlkYXRlX2Rk bF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNlIGlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAi dGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTU0NCw3ICs1NDksOCBAQCBFdmVudFRyaWdnZXJDb21t b25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENyZWF0ZUNvbW1hbmRUYWcocGFy c2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5kU3RhcnQgfHwKIAkJCWV2ZW50 ID09IEVWVF9ERExDb21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBFVlRfU1FMRHJvcCkKKwkJCWV2 ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRfVGFibGVJbml0V3JpdGUpCiAJ CXsKIAkJCWlmICghY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhkYmd0YWcpKQogCQkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNcIiIsIEdldENvbW1hbmRUYWdO YW1lKGRiZ3RhZykpOwpAQCAtODI3LDYgKzgzMywxNDEgQEAgRXZlbnRUcmlnZ2VyVGFibGVSZXdy aXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKQogCUNvbW1hbmRD b3VudGVySW5jcmVtZW50KCk7CiB9CiAKKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlU3RhcnQKKyAqICAgICBQcmVwYXJlIHRvIHJlY2VpdmUgZGF0YSBvbiBhbiBDUkVBVEUgVEFC TEUgQVMvU0VMRVQgSU5UTyBjb21tYW5kIGFib3V0CisgKiAgICAgdG8gYmUgZXhlY3V0ZWQuCisg Ki8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVl KQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7 CisJQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKilwYXJzZXRy ZWU7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNv bGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAor CQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQor CQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVk Q29tbWFuZCkpOworCisJY29tbWFuZC0+dHlwZSA9IChzdG10LT5vYmp0eXBlID09IE9CSkVDVF9U QUJMRSkgPyBTQ1RfQ3JlYXRlVGFibGVBcyA6IFNDVF9TaW1wbGU7CisJY29tbWFuZC0+aW5fZXh0 ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0g SW52YWxpZE9iamVjdEFkZHJlc3M7CisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVM TDsKKwljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwljb21t YW5kLT5wYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOworCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZUVuZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxFIEFT L1NFTEVDVCBJTlRPIGNvbW1hbmQuCisgKgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29uc2lk ZXJpbmcgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9ydGVk IHBhcnR3YXkgdGhyb3VnaC4gIFByb2JhYmx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0RU9T dWJYYWN0X0V2ZW50VHJpZ2dlcnMoKSB0byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRUcmln Z2VyVGFibGVJbml0V3JpdGVFbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUNvbGxlY3Rl ZENvbW1hbmQgKnBhcmVudDsKKwlDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdDsKKworCS8qIGlnbm9y ZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxl ZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXN0 bXQgPSAgKENyZWF0ZVRhYmxlQXNTdG10ICopY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJy ZW50Q29tbWFuZC0+cGFyc2V0cmVlOworCisJaWYgKHN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RB QkxFKQorCXsKKwkJcGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZC0+cGFyZW50OworCisJCXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQpOworCisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQg PSBwYXJlbnQ7CisJfQorCWVsc2UKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4 dCk7CisKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5zaW1w bGUuYWRkcmVzcyA9IGFkZHJlc3M7CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFu ZExpc3QgPQorCQkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0 LAorCQkJCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsKKworCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9Cit9CisKKy8qCisgKiBGaXJlIHRhYmxl X2luaXRfcmV3cml0ZSB0cmlnZ2Vycy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0 V3JpdGUoTm9kZSAqcmVhbF9jcmVhdGUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0 CSAgICpydW5saXN0OworCUV2ZW50VHJpZ2dlckRhdGEgdHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29t bWFuZCAqY29tbWFuZDsKKworCS8qCisJICogU2VlIEV2ZW50VHJpZ2dlckRETENvbW1hbmRTdGFy dCBmb3IgYSBkaXNjdXNzaW9uIGFib3V0IHdoeSBldmVudAorCSAqIHRyaWdnZXJzIGFyZSBkaXNh YmxlZCBpbiBzaW5nbGUgdXNlciBtb2RlLgorCSAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIp CisJCXJldHVybjsKKworCS8qCisJICogQWxzbyBkbyBub3RoaW5nIGlmIG91ciBzdGF0ZSBpc24n dCBzZXQgdXAsIHdoaWNoIGl0IHdvbid0IGJlIGlmIHRoZXJlCisJICogd2VyZW4ndCBhbnkgcmVs ZXZhbnQgZXZlbnQgdHJpZ2dlcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IERETAorCSAq IGNvbW1hbmQuICBUaGlzIHRlc3QgbWlnaHQgdGhlcmVmb3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBp dCdzCisJICogKm5lY2Vzc2FyeSosIGJlY2F1c2UgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWln aHQgZmluZCB0cmlnZ2VycyB0aGF0CisJICogZGlkbid0IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBj b21tYW5kIHN0YXJ0ZWQuCisJICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJ CXJldHVybjsKKworCS8qIERvIG5vdGhpbmcgaWYgbm8gY29tbWFuZCB3YXMgY29sbGVjdGVkLiAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0 dXJuOworCisJY29tbWFuZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQ7CisKKwlydW5saXN0ID0gRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0 cmVlLAorCQkJCQkJCQkJICBFVlRfVGFibGVJbml0V3JpdGUsCisJCQkJCQkJCQkgICJ0YWJsZV9p bml0X3dyaXRlIiwKKwkJCQkJCQkJCSAgJnRyaWdkYXRhKTsKKwlpZiAocnVubGlzdCA9PSBOSUwp CisJCXJldHVybjsKKworCS8qIFNldCB0aGUgcmVhbCBDcmVhdGVUYWJsZSBzdGF0bWVudCBhbmQg b2JqZWN0IGFkZHJlc3MgKi8KKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSByZWFsX2Ny ZWF0ZTsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhl IHRyaWdnZXJzLiAqLworCUV2ZW50VHJpZ2dlckludm9rZShydW5saXN0LCAmdHJpZ2RhdGEpOwor CisJLyogQ2xlYW51cC4gKi8KKwlsaXN0X2ZyZWUocnVubGlzdCk7CisKKwkvKgorCSAqIE1ha2Ug c3VyZSBhbnl0aGluZyB0aGUgZXZlbnQgdHJpZ2dlcnMgZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0 aGUgbWFpbgorCSAqIGNvbW1hbmQuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsK K30KKwogLyoKICAqIEludm9rZSBlYWNoIGV2ZW50IHRyaWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50 IHRyaWdnZXJzLgogICovCkBAIC0xMTA4LDcgKzEyNDksOCBAQCB0cmFja0Ryb3BwZWRPYmplY3Rz TmVlZGVkKHZvaWQpCiAJICovCiAJcmV0dXJuIChFdmVudENhY2hlTG9va3VwKEVWVF9TUUxEcm9w KSAhPSBOSUwpIHx8CiAJCShFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZVJld3JpdGUpICE9IE5J TCkgfHwKLQkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5JTCk7CisJ CShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAhPSBOSUwpIHx8CisJCShFdmVu dENhY2hlTG9va3VwKEVWVF9UYWJsZUluaXRXcml0ZSkgIT0gTklMKTsKIH0KIAogLyoKQEAgLTE0 OTksNiArMTY0MSw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRy ZWUpCiAKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25J ZDsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1h bmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxl LnN1YmNtZHMgPSBOSUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRy ZWUpOwogCkBAIC0xNTMyLDcgKzE2NzUsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQo T2lkIG9iamVjdElkKQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29k ZSBuZWVkcyB0byBoYW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2Vy Q29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJl c3MpCitFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9i amVjdEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xk Y3h0OwogCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTUyLDEyICsxNjk1LDE0MCBA QCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+ cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAlj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3Vi Y21kcyA9CiAJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3h0KTsKIH0KIAorLyoKKyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0CisgKgkJ U2F2ZSBkYXRhIGFib3V0IGEgc2luZ2xlIHBhcnQgb2YgYW4gQUxURVIgVFlQRS4KKyAqCisgKiBB TFRFUiBUQUJMRSBjYW4gaGF2ZSBtdWx0aXBsZSBzdWJjb21tYW5kcyB3aGljaCBtaWdodCBpbmNs dWRlIERST1AgQ09MVU1OCisgKiBjb21tYW5kIGFuZCBBTFRFUiBUWVBFIHJlZmVycmluZyB0aGUg ZHJvcCBjb2x1bW4gaW4gVVNJTkcgZXhwcmVzc2lvbi4KKyAqIEFzIHRoZSBkcm9wcGVkIGNvbHVt biBjYW5ub3QgYmUgYWNjZXNzZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBEUk9QIENPTFVNTiwK KyAqIGEgc3BlY2lhbCB0cmlnZ2VyIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGlzIGNhc2UgYmVm b3JlIHRoZSBkcm9wIGNvbHVtbiBpcworICogZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJp Z2dlckFsdGVyVHlwZVN0YXJ0KEFsdGVyVGFibGVDbWQgKnN1YmNtZCwgUmVsYXRpb24gcmVsKQor eworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CisJ Q29sdW1uRGVmICAqZGVmOworCVJlbGF0aW9uCWF0dHJlbGF0aW9uOworCUhlYXBUdXBsZQloZWFw VHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dFR1cDsKKwlBdHRyTnVtYmVyCWF0dG51bTsKKwlP YmplY3RBZGRyZXNzIGFkZHJlc3M7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250 ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xs ZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJU YWJsZUNtZCkpOworCUFzc2VydChzdWJjbWQtPnN1YnR5cGUgPT0gQVRfQWx0ZXJDb2x1bW5UeXBl KTsKKwlBc3NlcnQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCAhPSBO VUxMKTsKKwlBc3NlcnQoT2lkSXNWYWxpZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJl bnRDb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpKTsKKworCWRlZiA9IChDb2x1bW5EZWYg Kikgc3ViY21kLT5kZWY7CisJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOworCisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsK KworCW5ld3N1YiA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQVRTdWJjbWQpKTsKKwluZXdzdWIt PnBhcnNldHJlZSA9IChOb2RlICopY29weU9iamVjdChzdWJjbWQpOworCisJYXR0cmVsYXRpb24g PSB0YWJsZV9vcGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ LyogTG9vayB1cCB0aGUgdGFyZ2V0IGNvbHVtbiAqLworCWhlYXBUdXAgPSBTZWFyY2hTeXNDYWNo ZUNvcHlBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoaGVhcFR1cCkpIC8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZXJl cG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiksCisJCQkJ ZXJybXNnKCJjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIs CisJCQkJCSAgIHN1YmNtZC0+bmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpOwor CWF0dFR1cCA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGhlYXBUdXApOworCWF0dG51 bSA9IGF0dFR1cC0+YXR0bnVtOworCisJT2JqZWN0QWRkcmVzc1N1YlNldChhZGRyZXNzLCBSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSk7CisJ aGVhcF9mcmVldHVwbGUoaGVhcFR1cCk7CisJdGFibGVfY2xvc2UoYXR0cmVsYXRpb24sIFJvd0V4 Y2x1c2l2ZUxvY2spOworCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CisKKwlpZiAoZGVmLT5y YXdfZGVmYXVsdCkKKwl7CisJCWNoYXIJICAgKmRlZmV4cHI7CisKKwkJZGVmZXhwciA9IG5vZGVU b1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJbmV3c3ViLT51c2luZ2V4cHIgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJ CQkJCQkJCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCX0KKwllbHNlCisJCW5ld3N1Yi0+dXNpbmdleHBy ID0gTlVMTDsKKworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQu YWx0ZXJUYWJsZS5zdWJjbWRzID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyQWx0ZXJU eXBlRW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBBTFRFUiBUWVBFIGNvbW1hbmQsIGFuZCBh ZGQgaXQgdG8gY29tbWFuZCBsaXN0LgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVF bmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKK3sK KwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUxp c3RDZWxsICAgKmNlbGw7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCUFsdGVyVGFibGVDbWQg KmFsdHN1YmNtZCA9IChBbHRlclRhYmxlQ21kICopc3ViY21kOworCisJLyogaWdub3JlIGlmIGV2 ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJ aWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJY21kID0gY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChJc0Eoc3Vi Y21kLCBBbHRlclRhYmxlQ21kKSk7CisJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKwlBc3NlcnQoT2lk SXNWYWxpZChjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJZm9yZWFjaChjZWxsLCBj bWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9 IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKmNv bGxjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKworCQlpZiAoY29sbGNt ZC0+c3VidHlwZSA9PSBhbHRzdWJjbWQtPnN1YnR5cGUgJiYKKwkJCWFkZHJlc3MuY2xhc3NJZCA9 PSBzdWItPmFkZHJlc3MuY2xhc3NJZCAmJgorCQkJYWRkcmVzcy5vYmplY3RJZCA9PSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0U3ViSWQgPT0gc3ViLT5hZGRyZXNz Lm9iamVjdFN1YklkKQorCQl7CisJCQljbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3Jp dGU7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJbmV3c3ViID0gcGFsbG9jKHNp emVvZihDb2xsZWN0ZWRBVFN1YmNtZCkpOworCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CisJ bmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CisKKwljbWQtPmQuYWx0ZXJU YWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CisJY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IGxh cHBlbmQoY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVu ZAogICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQUxURVIgVEFCTEUgY29tbWFuZCwgYW5kIGFkZCBp dCB0byBjb21tYW5kIGxpc3QuCkBAIC0xNzEwLDYgKzE5ODEsMTA1IEBAIEV2ZW50VHJpZ2dlckNv bGxlY3RDcmVhdGVPcENsYXNzKENyZWF0ZU9wQ2xhc3NTdG10ICpzdG10LCBPaWQgb3Bjb2lkLAog CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogfQogCisvKgorICogRXZlbnRUcmlnZ2Vy Q29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uCisgKgkJU2F2ZSBkYXRhIGFib3V0IGEgQ1JFQVRFIFBV QkxJQ0FUSU9OIGNvbW1hbmQgYmVpbmcgZXhlY3V0ZWQKKyAqLwordm9pZAorRXZlbnRUcmlnZ2Vy Q29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKKwkJ CQkJCQkJCSBPaWQgcHViaWQsIExpc3QgKnJlbGF0aW9ucywKKwkJCQkJCQkJCSBMaXN0ICpzY2hl bWFzKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1h bmQ7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250 ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xs ZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9IHBhbGxv YzAoc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKwljb21tYW5kLT50eXBlID0gU0NUX0NyZWF0 ZVB1YmxpY2F0aW9uOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lv bjsKKwlPYmplY3RBZGRyZXNzU2V0KGNvbW1hbmQtPmQuY3JlYXRlcHViLmFkZHJlc3MsCisJCQkJ CSBQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1YmlkKTsKKwljb21tYW5kLT5wYXJzZXRyZWUgPSAo Tm9kZSAqKSBjb3B5T2JqZWN0KHN0bXQpOworCisJZm9yZWFjaChsYywgcmVsYXRpb25zKQorCXsK KwkJUHVibGljYXRpb25UYWJsZSAqcHViX3JlbCA9IChQdWJsaWNhdGlvblRhYmxlICopIGxmaXJz dChsYyk7CisKKwkJcHVibGljYXRpb25fcmVsICphZGRyZWwgPSAocHVibGljYXRpb25fcmVsICop IHBhbGxvYyhzaXplb2YocHVibGljYXRpb25fcmVsKSk7CisKKwkJUmVsYXRpb24JcmVsID0gdGFi bGVfb3BlbnJ2KHB1Yl9yZWwtPnJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWFkZHJl bC0+cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCWFkZHJlbC0+d2hlcmVDbGF1c2Ug PSBjb3B5T2JqZWN0KHB1Yl9yZWwtPndoZXJlQ2xhdXNlKTsKKwkJYWRkcmVsLT5jb2x1bW5MaXN0 ID0gbGlzdF9jb3B5X2RlZXAocHViX3JlbC0+Y29sdW1ucyk7CisJCWNvbW1hbmQtPmQuY3JlYXRl cHViLnJlbHMgPSBsYXBwZW5kKGNvbW1hbmQtPmQuY3JlYXRlcHViLnJlbHMsIGFkZHJlbCk7CisJ CXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKKwljb21tYW5kLT5kLmNy ZWF0ZXB1Yi5zY2hlbWFzID0gbGlzdF9jb3B5KHNjaGVtYXMpOworCisJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCA9CisJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jb21tYW5kTGlzdCwgY29tbWFuZCk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclB1YmxpY2F0aW9uCisg KgkJU2F2ZSBkYXRhIGFib3V0IGEgQUxURVIgUFVCTElDQVRJT04gY29tbWFuZCBiZWluZyBleGVj dXRlZAorICovCit2b2lkCitFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJQdWJsaWNhdGlvbihBbHRl clB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgT2lkIHB1YmlkLAorCQkJCQkJCQkJTGlzdCAqcmVsYXRp b25zLCBMaXN0ICpzY2hlbWFzKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3Rl ZENvbW1hbmQgKmNvbW1hbmQ7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBpZ25vcmUgaWYgZXZl bnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlp ZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJ Y29tbWFuZCA9IHBhbGxvYzAoc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKwljb21tYW5kLT50 eXBlID0gU0NUX0FsdGVyUHVibGljYXRpb247CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3Jl YXRpbmdfZXh0ZW5zaW9uOworCU9iamVjdEFkZHJlc3NTZXQoY29tbWFuZC0+ZC5hbHRlcnB1Yi5h ZGRyZXNzLAorCQkJCQkgUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJpZCk7CisJY29tbWFuZC0+ cGFyc2V0cmVlID0gKE5vZGUgKikgY29weU9iamVjdChzdG10KTsKKworCWZvcmVhY2gobGMsIHJl bGF0aW9ucykKKwl7CisJCVB1YmxpY2F0aW9uVGFibGUgKnB1Yl9yZWwgPSAoUHVibGljYXRpb25U YWJsZSAqKSBsZmlyc3QobGMpOworCisJCXB1YmxpY2F0aW9uX3JlbCAqYWRkcmVsID0gKHB1Ymxp Y2F0aW9uX3JlbCAqKSBwYWxsb2Moc2l6ZW9mKHB1YmxpY2F0aW9uX3JlbCkpOworCisJCVJlbGF0 aW9uCXJlbCA9IHRhYmxlX29wZW5ydihwdWJfcmVsLT5yZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCQlhZGRyZWwtPnJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCQlhZGRyZWwt PndoZXJlQ2xhdXNlID0gY29weU9iamVjdChwdWJfcmVsLT53aGVyZUNsYXVzZSk7CisJCWFkZHJl bC0+Y29sdW1uTGlzdCA9IGxpc3RfY29weV9kZWVwKHB1Yl9yZWwtPmNvbHVtbnMpOworCQljb21t YW5kLT5kLmFsdGVycHViLnJlbHMgPSBsYXBwZW5kKGNvbW1hbmQtPmQuYWx0ZXJwdWIucmVscywg YWRkcmVsKTsKKwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKworCWNv bW1hbmQtPmQuYWx0ZXJwdWIuc2NoZW1hcyA9IGxpc3RfY29weShzY2hlbWFzKTsKKworCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QgPQorCQlsYXBwZW5kKGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QsIGNvbW1hbmQpOworCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7Cit9CisKIC8qCiAgKiBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUU0Nv bmZpZwogICoJCVNhdmUgZGF0YSBhYm91dCBhbiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFU SU9OIGNvbW1hbmQgYmVpbmcKQEAgLTE4MjYsNiArMjE5Niw4IEBAIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNz OgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKIAkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6 CisJCQljYXNlIFNDVF9DcmVhdGVQdWJsaWNhdGlvbjoKKwkJCWNhc2UgU0NUX0FsdGVyUHVibGlj YXRpb246CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlw ZTsKQEAgLTE4NDUsNiArMjIxNywxMCBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQ R19GVU5DVElPTl9BUkdTKQogCQkJCQkJYWRkciA9IGNtZC0+ZC5hdHNjZmcuYWRkcmVzczsKIAkJ CQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKQogCQkJCQkJYWRkciA9 IGNtZC0+ZC5jdGFzLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQ3Jl YXRlUHVibGljYXRpb24pCisJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZXB1Yi5hZGRyZXNzOwor CQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyUHVibGljYXRpb24pCisJCQkJCQlh ZGRyID0gY21kLT5kLmFsdGVycHViLmFkZHJlc3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4g b2JqZWN0IHdhcyBkcm9wcGVkIGluIHRoZSBzYW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCBmNGJhNTcyNjk3Li40ZWUxZmJlZDhh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMzgsMTAgKzM4LDEy IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiZnVu Y2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5j cy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jbGF1c2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNp bmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRl ICJ1dGlscy9hcnJheS5oIgpAQCAtODIsMjEgKzg0LDI2IEBAIHN0YXRpYyB2b2lkIFB1YmxpY2F0 aW9uRHJvcFNjaGVtYXMoT2lkIHB1YmlkLCBMaXN0ICpzY2hlbWFzLCBib29sIG1pc3Npbmdfb2sp Owogc3RhdGljIHZvaWQKIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkJICBMaXN0ICpvcHRpb25zLAorCQkJCQkJICBib29sIGZvcl9hbGxfdGFibGVz LAogCQkJCQkJICBib29sICpwdWJsaXNoX2dpdmVuLAogCQkJCQkJICBQdWJsaWNhdGlvbkFjdGlv bnMgKnB1YmFjdGlvbnMsCiAJCQkJCQkgIGJvb2wgKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 X2dpdmVuLAotCQkJCQkJICBib29sICpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKKwkJCQkJ CSAgYm9vbCAqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJCQkgIGJvb2wgKmRkbF90 eXBlX2dpdmVuKQogewogCUxpc3RDZWxsICAgKmxjOwogCiAJKnB1Ymxpc2hfZ2l2ZW4gPSBmYWxz ZTsKIAkqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4gPSBmYWxzZTsKKwkqZGRsX3R5 cGVfZ2l2ZW4gPSBmYWxzZTsKIAogCS8qIGRlZmF1bHRzICovCiAJcHViYWN0aW9ucy0+cHViaW5z ZXJ0ID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlvbnMt PnB1YmRlbGV0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCXB1 YmFjdGlvbnMtPnB1YmRkbF9hbGwgPSBmYWxzZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGxfdGFibGUg PSBmYWxzZTsKIAkqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBh cnNlIG9wdGlvbnMgKi8KQEAgLTEyMyw3ICsxMzAsNyBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gZmFs c2U7CiAKIAkJCSpwdWJsaXNoX2dpdmVuID0gdHJ1ZTsKLQkJCXB1Ymxpc2ggPSBkZWZHZXRTdHJp bmcoZGVmZWwpOworCQkJcHVibGlzaCA9IHBzdHJkdXAoZGVmR2V0U3RyaW5nKGRlZmVsKSk7CiAK IAkJCWlmICghU3BsaXRJZGVudGlmaWVyU3RyaW5nKHB1Ymxpc2gsICcsJywgJnB1Ymxpc2hfbGlz dCkpCiAJCQkJZXJlcG9ydChFUlJPUiwKQEAgLTE1OCw2ICsxNjUsNTIgQEAgcGFyc2VfcHVibGlj YXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkqcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3RfZ2l2ZW4gPSB0cnVlOwogCQkJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g ZGVmR2V0Qm9vbGVhbihkZWZlbCk7CiAJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAiZGRsIikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqZGRsX2xldmVsOworCQkJTGlzdAkg ICAqZGRsX2xpc3Q7CisJCQlMaXN0Q2VsbCAgICpsYzM7CisKKwkJCWlmICgqZGRsX3R5cGVfZ2l2 ZW4pCisJCQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CisKKwkJCWlm ICghZm9yX2FsbF90YWJsZXMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coIkRETCByZXBsaWNhdGlvbiBpcyBv bmx5IHN1cHBvcnRlZCBpbiBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiIpKSk7CisJCQkvKgor CQkJICogSWYgZGRsIG9wdGlvbiB3YXMgZ2l2ZW4gb25seSB0aGUgZXhwbGljaXRseSBsaXN0ZWQg ZGRsIHR5cGVzCisJCQkgKiBzaG91bGQgYmUgcHVibGlzaGVkLgorCQkJICovCisJCQlwdWJhY3Rp b25zLT5wdWJkZGxfYWxsID0gZmFsc2U7CisJCQlwdWJhY3Rpb25zLT5wdWJkZGxfdGFibGUgPSBm YWxzZTsKKworCQkJKmRkbF90eXBlX2dpdmVuID0gdHJ1ZTsKKwkJCWRkbF9sZXZlbCA9IGRlZkdl dFN0cmluZyhkZWZlbCk7CisKKwkJCWlmICghU3BsaXRJZGVudGlmaWVyU3RyaW5nKGRkbF9sZXZl bCwgJywnLCAmZGRsX2xpc3QpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGxpc3Qgc3ludGF4 IGZvciBcImRkbFwiIG9wdGlvbiIpKSk7CisKKwkJCS8qIFByb2Nlc3MgdGhlIG9wdGlvbiBsaXN0 LiAqLworCQkJZm9yZWFjaChsYzMsIGRkbF9saXN0KQorCQkJeworCQkJCWNoYXIJICAgKnB1Ymxp c2hfb3B0ID0gKGNoYXIgKikgbGZpcnN0KGxjMyk7CisKKwkJCQlpZiAoc3RyY21wKHB1Ymxpc2hf b3B0LCAiYWxsIikgPT0gMCkKKwkJCQl7CisJCQkJCXB1YmFjdGlvbnMtPnB1YmRkbF9hbGwgPSB0 cnVlOworCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfdGFibGUgPSB0cnVlOworCQkJCX0KKwkJCQll bHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJ0YWJsZSIpID09IDApCisJCQkJCXB1YmFjdGlv bnMtPnB1YmRkbF90YWJsZSA9IHRydWU7CisJCQkJZWxzZQorCQkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkgZXJybXNnKCJ1 bnJlY29nbml6ZWQgXCJkZGxcIiB2YWx1ZTogXCIlc1wiIiwgcHVibGlzaF9vcHQpKSk7CisJCQl9 CisJCX0KIAkJZWxzZQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLApAQCAtNTk5LDE0ICs2NTIsNTcgQEAgY2hlY2tfc2ltcGxlX3Jvd2ZpbHRl cl9leHByKE5vZGUgKm5vZGUsIFBhcnNlU3RhdGUgKnBzdGF0ZSkKIAlyZXR1cm4gY2hlY2tfc2lt cGxlX3Jvd2ZpbHRlcl9leHByX3dhbGtlcihub2RlLCBwc3RhdGUpOwogfQogCisvKgorICogSGVs cGVyIGZ1bmN0aW9uIHRvIHRyYW5mb3JtIGEgd2hlcmUgY2xhdXNlLgorICoKKyAqIEFsc28gY2hl Y2sgdGhlIHB1YmxpY2F0aW9uIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbiBhbmQgdGhyb3cgYW4gZXJy b3IgaWYKKyAqIGFueXRoaW5nIG5vdCBwZXJtaXR0ZWQgb3IgdW5leHBlY3RlZCBpcyBlbmNvdW50 ZXJlZC4KKyAqLworc3RhdGljIE5vZGUgKgorR2V0VHJhbnNmb3JtV2hlcmVDbGF1c2VzKGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCSBOb2RlICp3aGVy ZUNsYXVzZSwgYm9vbCBjaGVja19leHByKQoreworCU5vZGUJICAgKnRyYW5zZm9ybWVkV2hlcmVD bGF1c2UgPSBOVUxMOworCVBhcnNlTmFtZXNwYWNlSXRlbSAqbnNpdGVtOworCVBhcnNlU3RhdGUg KnBzdGF0ZTsKKworCS8qCisJICogQSBmcmVzaCBwc3RhdGUgaXMgcmVxdWlyZWQgc28gdGhhdCB3 ZSBvbmx5IGhhdmUgInRoaXMiIHRhYmxlIGluIGl0cworCSAqIHJhbmdldGFibGUKKwkgKi8KKwlw c3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUoTlVMTCk7CisJcHN0YXRlLT5wX3NvdXJjZXRleHQgPSBx dWVyeVN0cmluZzsKKwluc2l0ZW0gPSBhZGRSYW5nZVRhYmxlRW50cnlGb3JSZWxhdGlvbihwc3Rh dGUsIHJlbGF0aW9uLAorCQkJCQkJCQkJCSAgIEFjY2Vzc1NoYXJlTG9jaywgTlVMTCwKKwkJCQkJ CQkJCQkgICBmYWxzZSwgZmFsc2UpOworCWFkZE5TSXRlbVRvUXVlcnkocHN0YXRlLCBuc2l0ZW0s IGZhbHNlLCB0cnVlLCB0cnVlKTsKKworCXRyYW5zZm9ybWVkV2hlcmVDbGF1c2UgPSB0cmFuc2Zv cm1XaGVyZUNsYXVzZShwc3RhdGUsCisJCQkJCQkJCQkJCQkgIGNvcHlPYmplY3Qod2hlcmVDbGF1 c2UpLAorCQkJCQkJCQkJCQkJICBFWFBSX0tJTkRfV0hFUkUsCisJCQkJCQkJCQkJCQkgICJQVUJM SUNBVElPTiBXSEVSRSIpOworCisJLyogRml4IHVwIGNvbGxhdGlvbiBpbmZvcm1hdGlvbiAqLwor CWFzc2lnbl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCB0cmFuc2Zvcm1lZFdoZXJlQ2xhdXNlKTsK KworCS8qCisJICogV2UgYWxsb3cgb25seSBzaW1wbGUgZXhwcmVzc2lvbnMgaW4gcm93IGZpbHRl cnMuIFNlZQorCSAqIGNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhwcl93YWxrZXIuCisJICovCisJ aWYgKGNoZWNrX2V4cHIpCisJCWNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhwcih0cmFuc2Zvcm1l ZFdoZXJlQ2xhdXNlLCBwc3RhdGUpOworCisJZnJlZV9wYXJzZXN0YXRlKHBzdGF0ZSk7CisKKwly ZXR1cm4gdHJhbnNmb3JtZWRXaGVyZUNsYXVzZTsKK30KKwogLyoKICAqIFRyYW5zZm9ybSB0aGUg cHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBmb3IgYWxsIHRoZSByZWxhdGlvbnMgaW4gdGhl IGxpc3QsCiAgKiBlbnN1cmluZyBpdCBpcyBjb2VyY2VkIHRvIGJvb2xlYW4gYW5kIG5lY2Vzc2Fy eSBjb2xsYXRpb24gaW5mb3JtYXRpb24gaXMKICAqIGFkZGVkIGlmIHJlcXVpcmVkLCBhbmQgYWRk IGEgbmV3IG5zaXRlbS9SVEUgZm9yIHRoZSBhc3NvY2lhdGVkIHJlbGF0aW9uIHRvCiAgKiB0aGUg UGFyc2VTdGF0ZSdzIG5hbWVzcGFjZSBsaXN0LgogICoKLSAqIEFsc28gY2hlY2sgdGhlIHB1Ymxp Y2F0aW9uIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbiBhbmQgdGhyb3cgYW4gZXJyb3IgaWYKLSAqIGFu eXRoaW5nIG5vdCBwZXJtaXR0ZWQgb3IgdW5leHBlY3RlZCBpcyBlbmNvdW50ZXJlZC4KICAqLwog c3RhdGljIHZvaWQKIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nLApAQCAtNjE2LDkgKzcxMiw3IEBAIFRyYW5zZm9ybVB1YldoZXJl Q2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCiAJZm9yZWFj aChsYywgdGFibGVzKQogCXsKLQkJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07Ci0JCU5vZGUJ ICAgKndoZXJlY2xhdXNlID0gTlVMTDsKLQkJUGFyc2VTdGF0ZSAqcHN0YXRlOworCiAJCVB1Ymxp Y2F0aW9uUmVsSW5mbyAqcHJpID0gKFB1YmxpY2F0aW9uUmVsSW5mbyAqKSBsZmlyc3QobGMpOwog CiAJCWlmIChwcmktPndoZXJlQ2xhdXNlID09IE5VTEwpCkBAIC02MzgsMzggKzczMiwzOCBAQCBU cmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0 cmluZywKIAkJCQkJIGVycmRldGFpbCgiV0hFUkUgY2xhdXNlIGNhbm5vdCBiZSB1c2VkIGZvciBh IHBhcnRpdGlvbmVkIHRhYmxlIHdoZW4gJXMgaXMgZmFsc2UuIiwKIAkJCQkJCQkgICAicHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QiKSkpOwogCi0JCS8qCi0JCSAqIEEgZnJlc2ggcHN0YXRlIGlz IHJlcXVpcmVkIHNvIHRoYXQgd2Ugb25seSBoYXZlICJ0aGlzIiB0YWJsZSBpbiBpdHMKLQkJICog cmFuZ2V0YWJsZQotCQkgKi8KLQkJcHN0YXRlID0gbWFrZV9wYXJzZXN0YXRlKE5VTEwpOwotCQlw c3RhdGUtPnBfc291cmNldGV4dCA9IHF1ZXJ5U3RyaW5nOwotCQluc2l0ZW0gPSBhZGRSYW5nZVRh YmxlRW50cnlGb3JSZWxhdGlvbihwc3RhdGUsIHByaS0+cmVsYXRpb24sCi0JCQkJCQkJCQkJCSAg IEFjY2Vzc1NoYXJlTG9jaywgTlVMTCwKLQkJCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlKTsKLQkJ YWRkTlNJdGVtVG9RdWVyeShwc3RhdGUsIG5zaXRlbSwgZmFsc2UsIHRydWUsIHRydWUpOworCQlw cmktPndoZXJlQ2xhdXNlID0gR2V0VHJhbnNmb3JtV2hlcmVDbGF1c2VzKHF1ZXJ5U3RyaW5nLCBw cmktPnJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCXByaS0+d2hlcmVDbGF1c2UsIHRydWUpOworCX0K K30KIAotCQl3aGVyZWNsYXVzZSA9IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKLQkJCQkJ CQkJCQkgICBjb3B5T2JqZWN0KHByaS0+d2hlcmVDbGF1c2UpLAotCQkJCQkJCQkJCSAgIEVYUFJf S0lORF9XSEVSRSwKLQkJCQkJCQkJCQkgICAiUFVCTElDQVRJT04gV0hFUkUiKTsKKy8qCisgKiBU cmFuc2Zvcm0gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gZm9yIGFsbCB0aGUgcmVs YXRpb25zIGluIHRoZSBsaXN0LAorICogZW5zdXJpbmcgaXQgaXMgY29lcmNlZCB0byBib29sZWFu IGFuZCBuZWNlc3NhcnkgY29sbGF0aW9uIGluZm9ybWF0aW9uIGlzCisgKiBhZGRlZCBpZiByZXF1 aXJlZCwgYW5kIGFkZCBhIG5ldyBuc2l0ZW0vUlRFIGZvciB0aGUgYXNzb2NpYXRlZCByZWxhdGlv biB0bworICogdGhlIFBhcnNlU3RhdGUncyBuYW1lc3BhY2UgbGlzdC4KKyAqLworc3RhdGljIHZv aWQKK1RyYW5zZm9ybVB1YlRhYmxlV2hlcmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3QgY2hh ciAqcXVlcnlTdHJpbmcpCit7CisJTGlzdENlbGwgICAqbGM7CiAKLQkJLyogRml4IHVwIGNvbGxh dGlvbiBpbmZvcm1hdGlvbiAqLwotCQlhc3NpZ25fZXhwcl9jb2xsYXRpb25zKHBzdGF0ZSwgd2hl cmVjbGF1c2UpOworCWZvcmVhY2gobGMsIHRhYmxlcykKKwl7CisJCVB1YmxpY2F0aW9uVGFibGUg KnByaSA9IChQdWJsaWNhdGlvblRhYmxlICopIGxmaXJzdChsYyk7CisJCVJlbGF0aW9uCXJlbDsK IAotCQkvKgotCQkgKiBXZSBhbGxvdyBvbmx5IHNpbXBsZSBleHByZXNzaW9ucyBpbiByb3cgZmls dGVycy4gU2VlCi0JCSAqIGNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhwcl93YWxrZXIuCi0JCSAq LwotCQljaGVja19zaW1wbGVfcm93ZmlsdGVyX2V4cHIod2hlcmVjbGF1c2UsIHBzdGF0ZSk7CisJ CWlmIChwcmktPndoZXJlQ2xhdXNlID09IE5VTEwpCisJCQljb250aW51ZTsKIAotCQlmcmVlX3Bh cnNlc3RhdGUocHN0YXRlKTsKKwkJcmVsID0gdGFibGVfb3BlbnJ2KHByaS0+cmVsYXRpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CiAKLQkJcHJpLT53aGVyZUNsYXVzZSA9IHdoZXJlY2xhdXNlOworCQlw cmktPndoZXJlQ2xhdXNlID0gR2V0VHJhbnNmb3JtV2hlcmVDbGF1c2VzKHF1ZXJ5U3RyaW5nLCBy ZWwsCisJCQkJCQkJCQkJCQkJcHJpLT53aGVyZUNsYXVzZSwgZmFsc2UpOworCQl0YWJsZV9jbG9z ZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CiAJfQogfQogCi0KIC8qCiAgKiBHaXZlbiBhIGxpc3Qg b2YgdGFibGVzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIHRvIGEgcHVibGljYXRpb24sCiAg KiB2ZXJpZnkgdGhhdCB0aGV5IGZ1bGZpbGwgdGhlIG5lY2Vzc2FyeSBwcmVjb25kaXRpb25zLCBu YW1lbHk6IG5vIHRhYmxlcwpAQCAtNzI4LDYgKzgyMiw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29s dW1uTGlzdChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJsZXMsCiAJfQogfQogCisvKgorICogQ3Jl YXRlIGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgorICov CitzdGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVudG5h bWUsIENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmplY3RB ZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJaTsKKwlM aXN0CSAgICp0YWdzID0gTklMOworCU9pZAkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRkcmVzcyBy ZWZlcmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCXRy aWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJdHJpZ2dlcl9mdW5jX25hbWVbTkFNRURB VEFMRU5dOworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2Rl cGFyc2VfdHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVm aXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2Rl KENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2Yo dHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJCSBldmVudG5hbWUsIHB1Ym9p ZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFt ZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1lKTsKKworCWRkbF90cmlnZ2Vy LT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRu YW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1l KHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29tbWFuZHM7IGkrKykK Kwl7CisJCVN0cmluZwkgICAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENvbW1hbmRUYWdO YW1lKGNvbW1hbmRzW2ldKSkpOworCisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQor CisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWci LCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dl cihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBh cyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0aGUgcHVibGljYXRpb24uCisJICovCisJT2JqZWN0 QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lk KTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZwdWJhZGRyZXNzLCBERVBFTkRF TkNZX0lOVEVSTkFMKTsKK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8K QEAgLTc0MSw2ICs4ODIsNyBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3B1 YmxpY2F0aW9uXTsKIAlIZWFwVHVwbGUJdHVwOwogCWJvb2wJCXB1Ymxpc2hfZ2l2ZW47CisJYm9v bAkJZGRsX3R5cGVfZ2l2ZW47CiAJUHVibGljYXRpb25BY3Rpb25zIHB1YmFjdGlvbnM7CiAJYm9v bAkJcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW47CiAJYm9vbAkJcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3Q7CkBAIC03ODEsOSArOTIzLDExIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCiAJcGFyc2Vf cHVibGljYXRpb25fb3B0aW9ucyhwc3RhdGUsCiAJCQkJCQkJICBzdG10LT5vcHRpb25zLAorCQkJ CQkJCSAgc3RtdC0+Zm9yX2FsbF90YWJsZXMsCiAJCQkJCQkJICAmcHVibGlzaF9naXZlbiwgJnB1 YmFjdGlvbnMsCiAJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4sCi0J CQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCQkJCQkJCSAgJnB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJCSAgJmRkbF90eXBlX2dpdmVuKTsKIAogCXB1Ym9p ZCA9IEdldE5ld09pZFdpdGhJbmRleChyZWwsIFB1YmxpY2F0aW9uT2JqZWN0SW5kZXhJZCwKIAkJ CQkJCQkJQW51bV9wZ19wdWJsaWNhdGlvbl9vaWQpOwpAQCAtNzk4LDYgKzk0MiwxMCBAQCBDcmVh dGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq c3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2YWx1ZXNbQW51 bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF9h bGwgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbF9hbGwpOworCXZhbHVl c1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0KKwlCb29sR2V0RGF0dW0o cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCk7CiAKQEAgLTg1OCw2ICsxMDA2LDUzIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQogCisJVHJhbnNm b3JtUHViVGFibGVXaGVyZUNsYXVzZXMocmVsYXRpb25zLCBwc3RhdGUtPnBfc291cmNldGV4dCk7 CisJRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uKHN0bXQsIHB1Ym9pZCwgcmVs YXRpb25zLCBzY2hlbWFpZGxpc3QpOworCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dl ciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICovCisJaWYgKHB1 YmFjdGlvbnMucHViZGRsX3RhYmxlIHx8IHB1YmFjdGlvbnMucHViZGRsX2FsbCkKKwl7CisJCUNv bW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1h bmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisJCUNvbW1h bmRUYWcJaW5pdF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJ CUNNRFRBR19TRUxFQ1RfSU5UTworCQl9OworCQlpbnQgbmNvbW1hbmRzID0gMDsKKwkJQ29tbWFu ZFRhZyAqZW5kX2NvbW1hbmRzOworCisJCWlmIChwdWJhY3Rpb25zLnB1YmRkbF9hbGwpCisJCQll bmRfY29tbWFuZHMgPSBHZXRDb21tYW5kVGFnc0ZvckRETFJlcGwoJm5jb21tYW5kcyk7CisJCWVs c2UgaWYgKHB1YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQl7CisJCQluY29tbWFuZHMgPSAzOwor CQkJZW5kX2NvbW1hbmRzID0gcGFsbG9jMChuY29tbWFuZHMgKiBzaXplb2YoQ29tbWFuZFRhZykp OworCQkJZW5kX2NvbW1hbmRzWzBdID0gQ01EVEFHX0NSRUFURV9UQUJMRTsKKwkJCWVuZF9jb21t YW5kc1sxXSA9IENNRFRBR19BTFRFUl9UQUJMRTsKKwkJCWVuZF9jb21tYW5kc1syXSA9IENNRFRB R19EUk9QX1RBQkxFOworCQl9CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZl bnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFu ZF9lbmQiLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbmNvbW1hbmRzLCBteXNlbGYsIHB1Ym9p ZCk7CisJCXBmcmVlKGVuZF9jb21tYW5kcyk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFu ZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIo ImRkbF9jb21tYW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yo c3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJs ZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dl cigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yo cmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRh YmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRU cmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5n dGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQ dWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC04ODIsNiArMTA3Nyw3IEBAIEFs dGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlv blN0bXQgKnN0bXQsCiAJYm9vbAkJcmVwbGFjZXNbTmF0dHNfcGdfcHVibGljYXRpb25dOwogCURh dHVtCQl2YWx1ZXNbTmF0dHNfcGdfcHVibGljYXRpb25dOwogCWJvb2wJCXB1Ymxpc2hfZ2l2ZW47 CisJYm9vbAkJZGRsX3R5cGVfZ2l2ZW47CiAJUHVibGljYXRpb25BY3Rpb25zIHB1YmFjdGlvbnM7 CiAJYm9vbAkJcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW47CiAJYm9vbAkJcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3Q7CkBAIC04OTAsMTEgKzEwODYsMTUgQEAgQWx0ZXJQdWJsaWNh dGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3Rt dCwKIAlMaXN0CSAgICpyb290X3JlbGlkcyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpsYzsKIAorCXB1 YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1cCk7CisKIAlwYXJzZV9w dWJsaWNhdGlvbl9vcHRpb25zKHBzdGF0ZSwKIAkJCQkJCQkgIHN0bXQtPm9wdGlvbnMsCisJCQkJ CQkJICBwdWJmb3JtLT5wdWJhbGx0YWJsZXMsCiAJCQkJCQkJICAmcHVibGlzaF9naXZlbiwgJnB1 YmFjdGlvbnMsCiAJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4sCi0J CQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCQkJCQkJCSAgJnB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJCSAgJmRkbF90eXBlX2dpdmVuKTsKIAogCXB1YmZv cm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1cCk7CiAKQEAgLTk5Niw2ICsx MTk2LDEyIEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25f cHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsK IAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1ZTsK KworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxsIC0gMV0gPSBCb29sR2V0 RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfYWxsKTsKKwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNh dGlvbl9wdWJkZGxfYWxsIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0 aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsX3Rh YmxlKTsKKwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfdGFibGUgLSAxXSA9 IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuKQpAQCAt MTM4MCw2ICsxNTg2LDggQEAgQWx0ZXJQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFs dGVyUHVibGljYXRpb25TdG10ICpzdG10KQogCVJlbGF0aW9uCXJlbDsKIAlIZWFwVHVwbGUJdHVw OwogCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybTsKKwlMaXN0CSAgICpyZWxhdGlvbnMgPSBO SUw7CisJTGlzdAkgICAqc2NoZW1haWRsaXN0ID0gTklMOwogCiAJcmVsID0gdGFibGVfb3BlbihQ dWJsaWNhdGlvblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCkBAIC0xNDAzLDggKzE2 MTEsNiBAQCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNh dGlvblN0bXQgKnN0bXQpCiAJCUFsdGVyUHVibGljYXRpb25PcHRpb25zKHBzdGF0ZSwgc3RtdCwg cmVsLCB0dXApOwogCWVsc2UKIAl7Ci0JCUxpc3QJICAgKnJlbGF0aW9ucyA9IE5JTDsKLQkJTGlz dAkgICAqc2NoZW1haWRsaXN0ID0gTklMOwogCQlPaWQJCQlwdWJpZCA9IHB1YmZvcm0tPm9pZDsK IAogCQlPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUs ICZyZWxhdGlvbnMsCkBAIC0xNDM2LDYgKzE2NDIsMTAgQEAgQWx0ZXJQdWJsaWNhdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10KQogCQlBbHRlclB1Ymxp Y2F0aW9uU2NoZW1hcyhzdG10LCB0dXAsIHNjaGVtYWlkbGlzdCk7CiAJfQogCisJVHJhbnNmb3Jt UHViVGFibGVXaGVyZUNsYXVzZXMocmVsYXRpb25zLCBwc3RhdGUtPnBfc291cmNldGV4dCk7CisJ RXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyUHVibGljYXRpb24oc3RtdCwgcHViZm9ybS0+b2lkLCBy ZWxhdGlvbnMsCisJCQkJCQkJCQkJc2NoZW1haWRsaXN0KTsKKwogCS8qIENsZWFudXAuICovCiAJ aGVhcF9mcmVldHVwbGUodHVwKTsKIAl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAxZmJkYWQ0YjY0Li5mYmFmNzM5MWY0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNDY2NSw2ICs0NjY1LDkgQEAgQVRQcmVwQ21k KExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAogCQkJY21k ID0gQVRQYXJzZVRyYW5zZm9ybUNtZCh3cXVldWUsIHRhYiwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxv Y2ttb2RlLAogCQkJCQkJCQkJICBBVF9QQVNTX1VOU0VULCBjb250ZXh0KTsKIAkJCUFzc2VydChj bWQgIT0gTlVMTCk7CisKKwkJCUV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KGNtZCwgcmVsKTsK KwogCQkJLyogUGVyZm9ybXMgb3duIHJlY3Vyc2lvbiAqLwogCQkJQVRQcmVwQWx0ZXJDb2x1bW5U eXBlKHdxdWV1ZSwgdGFiLCByZWwsIHJlY3Vyc2UsIHJlY3Vyc2luZywgY21kLAogCQkJCQkJCQkg IGxvY2ttb2RlLCBjb250ZXh0KTsKQEAgLTQ5MzYsNiArNDkzOSw3IEBAIEFURXhlY0NtZChMaXN0 ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiB7CiAJT2JqZWN0QWRkcmVzcyBhZGRy ZXNzID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CiAJUmVsYXRpb24JcmVsID0gdGFiLT5yZWw7CisJ Ym9vbAkJY29tbWFuZENvbGxlY3RlZCA9IGZhbHNlOwogCiAJc3dpdGNoIChjbWQtPnN1YnR5cGUp CiAJewpAQCAtNTA1OSw2ICs1MDYzLDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwKIAkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CS8qIEFMVEVSIENP TFVNTiBUWVBFICovCiAJCQkvKiBwYXJzZSB0cmFuc2Zvcm1hdGlvbiB3YXMgZG9uZSBlYXJsaWVy ICovCiAJCQlhZGRyZXNzID0gQVRFeGVjQWx0ZXJDb2x1bW5UeXBlKHRhYiwgcmVsLCBjbWQsIGxv Y2ttb2RlKTsKKwkJCUV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZCgoTm9kZSAqKSBjbWQsIGFkZHJl c3MsIHRhYi0+cmV3cml0ZSk7CisJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCWJyZWFr OwogCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CS8qIEFMVEVSIENPTFVNTiBP UFRJT05TICovCiAJCQlhZGRyZXNzID0KQEAgLTUyMzEsOCArNTIzNyw4IEBAIEFURXhlY0NtZChM aXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJLyoKIAkgKiBSZXBvcnQgdGhl IHN1YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBldmVudCB0cmlnZ2Vycy4KIAkgKi8KLQlpZiAoY21k KQotCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFk ZHJlc3MpOworCWlmIChjbWQgJiYgIWNvbW1hbmRDb2xsZWN0ZWQpCisJCUV2ZW50VHJpZ2dlckNv bGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRl KTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4 dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX3V0aWxjbWQuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMK aW5kZXggZjkyMThmNDhhYS4uOGI1M2I0MzVhZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX3V0aWxjbWQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNt ZC5jCkBAIC0xMzkyLDYgKzEzOTIsNyBAQCBleHBhbmRUYWJsZUxpa2VDbGF1c2UoUmFuZ2VWYXIg KmhlYXBSZWwsIFRhYmxlTGlrZUNsYXVzZSAqdGFibGVfbGlrZV9jbGF1c2UpCiAJCWF0Y21kLT5j bWRzID0gYXRzdWJjbWRzOwogCQlhdGNtZC0+b2JqdHlwZSA9IE9CSkVDVF9UQUJMRTsKIAkJYXRj bWQtPm1pc3Npbmdfb2sgPSBmYWxzZTsKKwkJYXRjbWQtPnRhYmxlX2xpa2UgPSB0cnVlOwogCQly ZXN1bHQgPSBsY29ucyhhdGNtZCwgcmVzdWx0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGQzNjgwZTliYjUuLmI3OWRkZDhjZGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQCBvdmVy cmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogT0JKUyA9IFwKIAlhcHBs eXBhcmFsbGVsd29ya2VyLm8gXAogCWRkbG1lc3NhZ2UubyBcCisJZGRsdHJpZ2dlci5vIFwKIAlk ZWNvZGUubyBcCiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uM2NhZDQ2OTAzMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCkBAIC0wLDAgKzEsMzU4IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBkZGx0cmlnZ2VyLmMKKyAqCSAgTG9naWNhbCBEREwgbWVzc2Fn ZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCisgKgorICogTk9URVMKKyAqCisgKiBEZXBhcnNl IHRoZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2lsaXN0Lmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCisKK2V4dGVybiBFdmVudFRyaWdnZXJRdWVyeVN0YXRlICpjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGU7CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQg bG9nIGl0IHByaW9yIHRvCisgKiBleGVjdXRpb24uIEN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIERS T1AgVEFCTEUgY29tbWFuZAorICogc28gdGhhdCBjYXRhbG9nIGNhbiBiZSBhY2Nlc3NlZCBiZWZv cmUgYmVpbmcgZGVsZXRlZC4KKyAqIFRoaXMgaXMgdG8gY2hlY2sgaWYgdGhlIHRhYmxlIGlzIHBh cnQgb2YgdGhlIHB1YmxpY2F0aW9uCisgKiBvciBub3QuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlv bl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRU cmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJY2hhcgkgICAqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9w IHRhYmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlEcm9wU3RtdCAgICpzdG10OworCUxpc3RDZWxsICAg KmNlbGwxOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9n KEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2Rh dGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJc3RtdCA9IChEcm9w U3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJLyogRXh0cmFjdCB0aGUgcmVsaWQgZnJv bSB0aGUgcGFyc2UgdHJlZSAqLworCWZvcmVhY2goY2VsbDEsIHN0bXQtPm9iamVjdHMpCisJewor CQljaGFyCQlyZWxwZXJzaXN0OworCQlOb2RlCSAgICpvYmplY3QgPSBsZmlyc3QoY2VsbDEpOwor CQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwor CQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRyZXNzKHN0bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJ CQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxhdGlvbiwKKwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNp dmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOworCisJCS8qIE9iamVjdCBkb2VzIG5vdCBleGlzdCwg bm90aGluZyB0byBkbyAqLworCQlpZiAoIXJlbGF0aW9uKQorCQkJY29udGludWU7CisKKwkJcmVs cGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJLyoK KwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5l cmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQKKwkJICog dGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhl IFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUgbWVzc2Fn ZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3Qg IT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNl IiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJCQkgY29tbWFu ZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9uKQorCQkJdGFibGVfY2xv c2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUKKyAqCisgKiBE ZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0Rh dHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwljaGFyCSAg ICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkK KwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKwor CWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlBc3Nl cnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOworCisJcmVscGVyc2lzdCA9IGdl dF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJLyoKKwkg KiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxl IGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdh bCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBj YW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRo aXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dH RUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQg Y3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3QgIT0gUkVMUEVSU0lT VEVOQ0VfVEVNUCkKKwl7CisJCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9n IGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCQlqc29uX3N0cmluZyA9IGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCWlmIChqc29uX3N0cmluZyAh PSBOVUxMKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJU YWJsZS5vYmplY3RJZCwgRENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJCSBqc29uX3N0cmluZywgc3Ry bGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0LiBUaGlz IGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY29tbWFu ZCBidXQgYmVmb3JlIHRoZQorICogdHJhbnNhY3Rpb24gY29tbWl0cy4KKyAqLworRGF0dW0KK3B1 YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ TGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlcglpdGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUg dHlwZTsKKwlPaWQJCQlyZWxpZDsKKwljaGFyCQlyZWxraW5kOworCisJaWYgKCFDQUxMRURfQVNf RVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50 IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3QgPSBSRUxQRVJTSVNURU5D RV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IGxmaXJzdChsYyk7CisJCWNo YXIJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBiZWVuIGhhbmRsZWQg aW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0ZXJUYWJsZS5yZXdy aXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJlbmFtZVN0bXQgKikgY21k LT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5hbWVTdG10ICYmIHJlbmFtZVN0bXQtPnJlbGF0aW9u VHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBP QkpFQ1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY21kLT50eXBlID09IFND VF9TaW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJ ZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKQor CQl7CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkOworCQkJdHlwZSA9IERD VF9UYWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogT25seSBTQ1RfU2ltcGxlIGZv ciBub3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCQkJ dHlwZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5k KHJlbGlkKTsKKwkJaWYgKHJlbGtpbmQpCisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0 ZW5jZShyZWxpZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNv bW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJ ICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVy ZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0 byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGlu Y29taW5nIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkg Ki8KKwkJaWYgKHJlbHBlcnNpc3QgIT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJLyoK KwkJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRl Y29kaW5nIG9mIHRoZQorCQkJICogc2FtZS4KKwkJCSAqLworCQkJanNvbl9zdHJpbmcgPSBkZXBh cnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQkJaWYgKGpzb25fc3RyaW5nICE9 IE5VTEwpCisJCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCByZWxpZCwgdHlwZSwg anNvbl9zdHJpbmcsCisJCQkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCQl9CisJ fQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+U1FM RHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2JqOworCQlEcm9wU3Rt dCAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwkJY2hhcgkgICAqY29t bWFuZDsKKwkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlOworCQljb25zdCBjaGFyICp0bXB0 eXBlOworCQlPYmplY3RDbGFzcwlvYmpjbGFzczsKKwkJT2JqZWN0QWRkcmVzcyBvYmphZGRyOwor CisJCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlz dG10ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkJb2JqID0gc2xpc3Rf Y29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3VyKTsKKwkJb2JqYWRkciA9IG9i ai0+YWRkcmVzczsKKwkJb2JqY2xhc3MgPSBnZXRPYmplY3RDbGFzcygmb2JqYWRkcik7CisKKwkJ aWYgKHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09IDApCisJCQljbWR0eXBlID0g RENUX1RhYmxlRHJvcEVuZDsKKwkJZWxzZSBpZiAob2JqY2xhc3MgPT0gT0NMQVNTX1NDSEVNQSB8 fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BFUkFUT1IgfHwKKwkJCQkgb2JqY2xhc3MgPT0g T0NMQVNTX09QQ0xBU1MgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX09QRkFNSUxZIHx8CisJ CQkJIG9iamNsYXNzID09IE9DTEFTU19DQVNUIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19U WVBFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UUklHR0VSIHx8CisJCQkJIG9iamNsYXNz ID09IE9DTEFTU19DT05WRVJTSU9OIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19QT0xJQ1kg fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1JFV1JJVEUgfHwKKwkJCQkgb2JqY2xhc3MgPT0g T0NMQVNTX0VYVEVOU0lPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfRkRXIHx8CisJCQkJ IG9iamNsYXNzID09IE9DTEFTU19UU0NPTkZJRyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1Nf VFNESUNUIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU1RFTVBMQVRFIHx8CisJCQkJIG9i amNsYXNzID09IE9DTEFTU19UU1BBUlNFUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVFJB TlNGT1JNIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GT1JFSUdOX1NFUlZFUiB8fAorCQkJ CSBvYmpjbGFzcyA9PSBPQ0xBU1NfQ09MTEFUSU9OIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFT U19VU0VSX01BUFBJTkcgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0xBTkdVQUdFIHx8CisJ CQkJIG9iamNsYXNzID09IE9DTEFTU19TVEFUSVNUSUNfRVhUIHx8CisJCQkJIG9iamNsYXNzID09 IE9DTEFTU19BTSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfUFVCTElDQVRJT04gfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24gdGFibGUiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAidmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZ1 bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAibWF0ZXJpYWxp emVkIHZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1 cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJyb3V0aW5lIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiYWdncmVnYXRlIikgPT0gMCkKKwkJ CWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJLyog Q2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24gZGF0YSB3cmFwcGVyICovCisJ CWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24tZGF0YSB3cmFwcGVyIiwgMjAp ID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJmb3JlaWduIGRhdGEgd3JhcHBlciIp OworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIHRt cHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisKKwkJLyogQ2hhbmdl IHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3MgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChv YmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVjdCIsCisJCQkJCQkgc3RybGVuKCJzdGF0 aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgic3RhdGlz dGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRp dHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisKKwkJLyoK KwkJICogT2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJlIG1vZGlmaWVkIHRvIG1ha2UgdGhlIGRy b3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4gb24gc2VydmVyIDxzZXJ2ZXJuYW1lPiBU TyAgOiBmb3IgPHJvbGU+IHNlcnZlcgorCQkgKiA8c2VydmVybmFtZT4KKwkJICoKKwkJICovCisJ CWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidXNlciBtYXBwaW5nIiwgMTIpID09 IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsKKworCQkJdG1wdHlwZSA9IHBhbGxvYyhz dHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJCW9uX3NlcnZlciA9IHN0cnN0cihvYmot Pm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJCXNwcmludGYoKGNoYXIgKikgdG1wdHlw ZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikgdG1wdHlwZSwgb2JqLT5vYmppZGVudGl0 eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7CisJCQlzdHJjYXQoKGNoYXIgKikgdG1w dHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQo dG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsK KwkJfQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmpp ZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsK KworCQlpZiAoY29tbWFuZCkKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgb2Jq LT5hZGRyZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNv bW1hbmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKwor CisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVt CitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwljaGFyCSAg ICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkK KwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKwor CWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0 KGNtZCk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxl LmFkZHJlc3Mub2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBm b3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUu CisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMg c28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRl cmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0 byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5n CisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICov CisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50 ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwg bG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0g ZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcg IT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxl LmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBz dHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2Fs LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCBkNWFm YWU5ZDkwLi5jODU5N2M2NWZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwpAQCAtOTUsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRp YyB2b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Ym9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg bWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9k ZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICAgaW50IG5yZWxhdGlv bnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpOwog CkBAIC0yNDAsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRf cGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29tbWl0X2NiICE9IE5V TEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9IE5VTEwpIHx8CiAJ CShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAorCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2RkbF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAgLTI1Nyw2ICsyNjMsNyBAQCBTdGFy dHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJl b3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5y ZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyOwogCWN0eC0+ cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyOworCWN0 eC0+cmVvcmRlci0+c3RyZWFtX2RkbCA9IHN0cmVhbV9kZGxfY2Jfd3JhcHBlcjsKIAljdHgtPnJl b3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAK QEAgLTE1ODEsNiArMTU4OCw0OCBAQCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorc3RyZWFtX2RkbF9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZp eCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUg bWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9y Q2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsK KworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3Nl ZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChj dHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYg KGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyog UHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0 ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJlYW1fZGRsIjsKKwlzdGF0 ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9 IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQg KikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsK KwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBz dGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0 eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0 ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxs IGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbF9jYihjdHgsIHR4biwgbWVz c2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXpl LCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9y X2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZvaWQK IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29u LmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAppbmRl eCA5OWM2MDhkMDNmLi4wNWU3NzU2OTdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbWVzb24uYnVpbGQKQEAgLTMsNiArMyw3IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0gZmls ZXMoCiAgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGRsbWVzc2FnZS5jJywKKyAgJ2Rk bHRyaWdnZXIuYycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwu YycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggM2E5ZDUzYTYx ZS4uZGU4NzRjMmNkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpA QCAtNjYzLDYgKzY2Myw0NyBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAlwcV9zZW5kYnl0ZXMob3V0 LCBtZXNzYWdlLCBzeik7CiB9CiAKKy8qCisgKiBSZWFkIERETCBNRVNTQUdFIGZyb20gc3RyZWFt CisgKi8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2RkbChTdHJpbmdJbmZvIGluLCBYTG9nUmVj UHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAq c3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJZmxhZ3MgPSBwcV9nZXRtc2dp bnQoaW4sIDEpOworCWlmIChmbGFncyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVk IGZsYWdzICV1IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3MpOworCisJKmxzbiA9IHBxX2dldG1zZ2lu dDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRt c2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOwor CisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQor ICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91dCwgWExvZ1JlY1B0 ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICpt ZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisKKwlwcV9zZW5kYnl0ZShvdXQsIExPR0lD QUxfUkVQX01TR19EREwpOworCisJcHFfc2VuZGludDgob3V0LCBmbGFncyk7CisJcHFfc2VuZGlu dDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwgcHJlZml4KTsKKwlwcV9zZW5kaW50 MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOworfQorCiAvKgog ICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhlIG91dHB1dCBzdHJlYW0uCiAgKi8K QEAgLTEyNDQsNiArMTI4NSw4IEBAIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBN c2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAiVFlQRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NBR0UiOworCQljYXNlIExPR0lDQUxfUkVQX01TR19E REw6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBB UkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBBUkUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19Q UkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYwppbmRleCA5YTdkYzllNDA0Li5mZDRkMWJiODBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMjA0OCwxMiArMjA0OCwyMCBA QCBzdGF0aWMgaW5saW5lIHZvaWQKIFJlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZl ckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKIHsKLQlyYi0+ZGRsKHJiLCB0eG4sIGNo YW5nZS0+bHNuLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCi0JCQljaGFuZ2UtPmRhdGEu ZGRsLnJlbGlkLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAotCQkJY2hhbmdlLT5kYXRh LmRkbC5tZXNzYWdlX3NpemUsCi0JCQljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworCWlmIChz dHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkJ CSAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLnJl bGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJCQkJCSAgY2hhbmdl LT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3Nh Z2UpOworCWVsc2UKKwkJcmItPmRkbChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJICAgY2hh bmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsCisJ CQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRk bC5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA3OWNkYTM5 NDQ1Li45YmZkYzZlZDVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKQEAgLTE2Niw2ICsxNjYsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg Im5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNp bmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlv bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIu aCIKQEAgLTE5MCw3ICsxOTEsMTAgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2lu Y2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2lu Y2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNs dWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2NhdGNhY2hlLmgiCkBAIC0zMjMzLDYgKzMyMzcsMjM4IEBAIGFwcGx5X2hhbmRsZV90 cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyoK KyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENSRUFURSBUQUJMRSBBUyBhbmQgU0VMRUNUIElOVE8K KyAqIHRvIG5vdCBwb3B1bGF0ZSBkYXRhIGZyb20gdGhlIHNvdXJjZSB0YWJsZSBvbiB0aGUgc3Vi c2NyaWJlci4KKyAqIEFsbG93IHRoZSBkYXRhIHRvIGJlIHJlcGxpY2F0ZWQgdGhyb3VnaCBJTlNF UlRzIG9uIHRoZSBwdWJsaXNoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwcmVwcm9jZXNzX2NyZWF0 ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwor CWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJc3dp dGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JFQVRFX1RBQkxFX0FTOgorCQlj YXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlDcmVhdGVUYWJsZUFzU3RtdCAqY2Fz dG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoY2Fz dG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZv cmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29u c2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVi bGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmludG8tPnNraXBEYXRhID0g dHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdfU0VMRUNUOgorCQkJ eworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29tbWFuZC0+c3RtdDsK KworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJ ICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJ CQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10LT5pbnRvQ2xhdXNl LT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAq CisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgTEFCRUwgY29tbWFu ZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNo YW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2 aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1Ymxp Y2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpj b21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhciAgICpydiA9IE5V TEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxpZE9pZDsKKwlD cmVhdGVTdG10ICpjc3RtdDsKKwljaGFyCSAgICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCSAg ICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2Rl ICopIGNvbW1hbmQpOworCWNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29tbWFuZC0+c3RtdDsKKwly diA9IGNzdG10LT5yZWxhdGlvbjsKKworCWlmIChjb21tYW5kVGFnID09IENNRFRBR19DUkVBVEVf VEFCTEUpCisJeworCQljc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCXJ2 ID0gY3N0bXQtPnJlbGF0aW9uOworCX0KKwllbHNlCisJeworCQlyZXR1cm47CisJfQorCisJaWYg KCFydikKKwkJcmV0dXJuOworCisJc2NoZW1hbmFtZSA9IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5h bWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChzY2hlbWFuYW1lICE9IE5VTEwpCisJCXJlbG5hbWVz cGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5hbWUsIGZhbHNlKTsKKworCWlmIChyZWxu YW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJcmVsaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChyZWxu YW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UKKwkJcmVsaWQgPSBSZWxuYW1lR2V0UmVsaWQocmVs bmFtZSk7CisKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCisJeworCQlBZGRTdWJzY3JpcHRpb25S ZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVMX1NUQVRF X1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVCVUcxLAor CQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3JpcHRpb24g XCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCX0K K30KKworLyoKKyAqIEhhbmRsZSBEREwgcmVwbGljYXRpb24gbWVzc2FnZXMuCisgKi8KK3N0YXRp YyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyCWxz bjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNoYXIJICAgKm1lc3NhZ2UgPSBOVUxM OworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJl ZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVj ZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVi dWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2lj YWxyZXBfcmVhZF9kZGwocywgJmxzbiwgJnByZWZpeCwgJnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3 ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVnaW5fcmVwbGljYXRpb25fc3Rl cCgpOworCisJZGRsX2NvbW1hbmQgPSBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhtZXNzYWdl KTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsKKworCS8qIERlc3ROb25lIGZv ciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIo RGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQp OworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVlX2xpc3QpCisJeworCQlMaXN0 CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdDsKKwkJUmF3U3Rt dCAgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJzZXRyZWVfaXRlbSk7CisJCUNv bW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRl eHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJc25hcHNob3Rfc2V0ID0gZmFs c2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7 CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNv bW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUg ZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVf dGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2Ug YW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChhbmFseXplX3Jl cXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7CisJCX0KKwor CQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1s aXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBh cmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9j b250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJ CQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlz dCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJ CQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJ cGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1h bmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFy c2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNo b3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0 cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcg aW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJlIHBhc3Npbmcg aGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVl X2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLwor CQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9j b21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJ CQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVy cyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25h cHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQg Zm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJ CQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVy LAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERE TCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRk ZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJs ZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29u dGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9w YXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1 Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KIAogLyoKICAqIExv Z2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBkaXNwYXRjaGVyLgpAQCAtMzI5OCw2 ICszNTM0LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJl YWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMOgorCQkJYXBwbHlfaGFuZGxlX2RkbChz KTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKIAkJ CWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDE5YzEwYzAyOGYuLmQzNjFjMmNm NDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAt NTQsNiArNTQsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpw cmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZv aWQgcGdvdXRwdXRfZGRsKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVv cmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25z dCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBi b29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAog CQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRf YmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU3LDYg KzI2Miw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpj YikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9 IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsK KwljYi0+ZGRsX2NiID0gcGdvdXRwdXRfZGRsOwogCWNiLT5jb21taXRfY2IgPSBwZ291dHB1dF9j b21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9iZWdpbl9wcmVw YXJlX3R4bjsKQEAgLTI3Myw2ICsyNzksNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1 dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ291dHB1dF9z dHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwog CWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9k ZGxfY2IgPSBwZ291dHB1dF9kZGw7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBnb3V0cHV0 X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBjb21taXQg Ki8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFyZV90eG47 CkBAIC00MjcsNiArNDM0LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1Z2luIHVz ZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRfUExVR0lO X0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAogCS8qCiAJ ICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6YXRpb24u CkBAIC01MDcsNiArNTE1LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1YmxpY2F0 aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEtPmRlbGV0 ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJQ2FjaGVS ZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkgIHB1Ymxp Y2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzODUsOSArMTM5NCwyMiBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJVHVw bGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3Qg PSBOVUxMOworCWJvb2wJCXRhYmxlX3Jld3JpdGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNh dGlvbl9wcm9ncmVzcyhjdHgsIGZhbHNlKTsKIAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMs IHdlIG1pZ2h0IG5lZWQgdG8gcmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRh YmxlIHB1Ymxpc2hlcyByZXdyaXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxh dGlvbiBoZXJlCisJICogYW5kIGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYg KHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1 ZTsKKwkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+ cmVscmV3cml0ZSk7CisJCXRhcmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVi bGlzaGFibGVfcmVsYXRpb24ocmVsYXRpb24pKQogCQlyZXR1cm47CiAKQEAgLTE0MjEsNiArMTQ0 MywxMyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2Ug ZG9uJ3QgcHVibGlzaCB0YWJsZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUg cmV3cml0ZSBkZGwKKwkgKiBtZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFy ZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCXJldHVybjsKKwogCS8qIEF2b2lk IGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5nIGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICov CiAJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDUw LDggKzE0NzksOCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIg Ki8KLQkJCWlmICghcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xv dCwgcmVsZW50cnksCi0JCQkJCQkJCQkgJmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUg JiYKKwkJCQkhcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwg cmVsZW50cnksICZhY3Rpb24pKQogCQkJCWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ3MSw4ICsxNTAw LDE5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1heWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxh dGlvbiwgcmVsZW50cnkpOwogCiAJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVl KTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwg bmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKwor CQkJLyoKKwkJCSAqIENvbnZlcnQgdGhlIHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRo YXQgdGhlIHN1YnNjcmliZXIKKwkJCSAqIGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRv IG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmli ZXIgaXMgY29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9n aWNhbHJlcF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJ CU5VTEwsIG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVt bnMpOworCQkJZWxzZQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQs IHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+ Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKQEAgLTE2MDQsNiArMTY0NCw5IEBA IHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJYW5jZXN0b3IgPSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRl KQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkKTsKIAlNZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7 CkBAIC0xNzIyLDYgKzE3NjUsMTM4IEBAIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUo Y3R4LCB0cnVlKTsKIH0KIAorLyoKKyAqIFNlbmQgdGhlIGRlY29kZWQgRERMIG92ZXIgd2lyZS4K KyAqLworc3RhdGljIHZvaWQKK3Bnb3V0cHV0X2RkbChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwK KwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1 dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRl OworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5v dXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVJlbGF0 aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsKKworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2Ug RENUX1RhYmxlRHJvcFN0YXJ0OgorCisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRo ZSByZWxpZCB0byBhIGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBh cnQgb2YgYSBwdWJsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4KKwkJCSAq IFdlIG5lZWQgdGhpcyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25n ZXIgYmUKKwkJCSAqIHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRy b3AgaXMgZm9yIGEgcmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3Qs IGFuZCBvbmx5IHRoZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQly ZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxh dGlvbik7CisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7 CisKKwkJCWlmIChyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCQkJZGF0YS0+ ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQp OworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCXJldHVybjsKKworCQljYXNlIERD VF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5kZWxldGVkX3Jl bGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxldGVkX3Jl bGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBEQ1RfVGFibGVBbHRlcjoKKworCQkJLyoKKwkJCSAqIEZvciB0YWJs ZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UKKwkJ CSAqIHRvIHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNF UlQgdG8KKwkJCSAqIFVQREFURSBhbmQgc2VuZCB0aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0 aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5 cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2Yg dHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRl IGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudAorCQkJICogYW1vbmcgcHVibGlzaGVyIGFu ZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4KKwkJCSAqIHN1YnNj cmliZXIgd2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVu LAorCQkJICogd2UgbmVlZCB0byBsZXQgdGhlIHN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2lu YWwgcmV3cml0ZSBkZGwKKwkJCSAqIHRvIHJld3JpdGUgYWxsIHRoZSBkYXRhIGF0IGZpcnN0Lgor CQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291 bGQgYmUgZGlmZmVyZW50CisJCQkgKiBhbW9uZyBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVl IHRvIGRpZmZlcmVudAorCQkJICogZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZyByZXdy aXRlKSwgc28gd2UgbmVlZCB0bworCQkJICogcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMg dG8ga2VlcCB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdl IGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyCisJCQkgKiBvbmx5 IHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFu ZAorCQkJICogdXNlIHRoZSB1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUg cmVzdCBkYXRhLgorCQkJICogQmVzaWRlcywgd2UgbWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0 ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZQorCQkJICogb2YgcmV3cml0ZSBkZGwsIGZvciBleGFtcGxl LCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZworCQkJICogcmV3cml0ZSBjaGFuZ2VzIGZv ciBBTFRFUiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZQorCQkJICogdGFibGUg ZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0 aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3NlcnQocmVsYXRpb24pOworCisJCQlyZWxl bnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkg KiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBv ciB0aGUKKwkJCSAqIGRkbCBuZWVkIHRvIGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRp b24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHx8 CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVsaWQpCisJCQl7CisJCQkJUmVs YXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKwor CQljYXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlv bihyZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQly ZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICgh cmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQkJeworCQkJCVJlbGF0aW9uQ2xv c2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBE Q1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUpOworCQkJ YnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLworCWlmICh0 eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2VuZF9iZWdp bihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKKwls b2dpY2FscmVwX3dyaXRlX2RkbChjdHgtPm91dCwKKwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJ CQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJCQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdp bldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVsYXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVs YXRpb24pOworfQorCiAvKgogICogUmV0dXJuIHRydWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRl ZCB3aXRoIGFuIG9yaWdpbiBhbmQgdGhlIHVzZXIgaGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5n ZXMgdGhhdCBkb24ndCBoYXZlIGFuIG9yaWdpbiwgZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMjAyMiw3 ICsyMTk3LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRp b24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3Ry ZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnkt PnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9 IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZGxfYWxsID0gZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxl ID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9 IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJz dGF0ZSkpOwpAQCAtMjA4MCw2ICsyMjU2LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0 RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVw ZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJ ZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlv bnMucHViZGRsX2FsbCA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUg PSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVi dWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjE5Myw2ICsyMzcxLDggQEAgZ2V0X3JlbF9zeW5j X2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnkt PnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJ ZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7 CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRkbF9hbGw7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9 IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGU7CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQg dG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMgYi9zcmMvYmFja2VuZC90Y29wL2NtZHRhZy5j CmluZGV4IDRiZDcxM2EwYjQuLmNlMDljNWYyMzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rj b3AvY21kdGFnLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYwpAQCAtMjYsMTAgKzI2 LDExIEBAIHR5cGVkZWYgc3RydWN0IENvbW1hbmRUYWdCZWhhdmlvcgogCWNvbnN0IGJvb2wJdGFi bGVfcmV3cml0ZV9vazsKIAljb25zdCBib29sCWRpc3BsYXlfcm93Y291bnQ7CS8qIHNob3VsZCB0 aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYmUKIAkJCQkJCQkJCSAqIHNob3duIGluIHRoZSBj b21tYW5kIGNvbXBsZXRpb24gc3RyaW5nICovCisJY29uc3QgYm9vbAlkZGxfcmVwbGljYXRpb25f b2s7CiB9IENvbW1hbmRUYWdCZWhhdmlvcjsKIAotI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1l LCBldnRyZ29rLCByd3Jvaywgcm93Y250KSBcCi0JeyBuYW1lLCAodWludDgpIChzaXplb2YobmFt ZSkgLSAxKSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCB9LAorI2RlZmluZSBQR19DTURUQUcodGFn LCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2spIFwKKwl7IG5hbWUsICh1 aW50OCkgKHNpemVvZihuYW1lKSAtIDEpLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBs b2sgfSwKIAogc3RhdGljIGNvbnN0IENvbW1hbmRUYWdCZWhhdmlvciB0YWdfYmVoYXZpb3JbQ09N TUFORF9UQUdfTkVYVFRBR10gPSB7CiAjaW5jbHVkZSAidGNvcC9jbWR0YWdsaXN0LmgiCkBAIC01 Nyw2ICs1OCwyMSBAQCBHZXRDb21tYW5kVGFnTmFtZUFuZExlbihDb21tYW5kVGFnIGNvbW1hbmRU YWcsIFNpemUgKmxlbikKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLm5hbWU7CiB9 CiAKK0NvbW1hbmRUYWcgKgorR2V0Q29tbWFuZFRhZ3NGb3JERExSZXBsKGludCAqbmNvbW1hbmRz KQoreworCUNvbW1hbmRUYWcgKmRkbHJlcGxfY29tbWFuZHMgPSBwYWxsb2MwKENPTU1BTkRfVEFH X05FWFRUQUcgKiBzaXplb2YoQ29tbWFuZFRhZykpOworCSpuY29tbWFuZHMgPSAwOworCisJZm9y KGludCBpID0gMDsgaSA8IENPTU1BTkRfVEFHX05FWFRUQUc7IGkrKykKKwl7CisJCWlmICh0YWdf YmVoYXZpb3JbaV0uZGRsX3JlcGxpY2F0aW9uX29rKQorCQkJZGRscmVwbF9jb21tYW5kc1soKm5j b21tYW5kcykrK10gPSAoQ29tbWFuZFRhZykgaTsKKwl9CisKKwlyZXR1cm4gZGRscmVwbF9jb21t YW5kczsKK30KKwogYm9vbAogY29tbWFuZF90YWdfZGlzcGxheV9yb3djb3VudChDb21tYW5kVGFn IGNvbW1hbmRUYWcpCiB7CkBAIC03NSw2ICs5MSwxMiBAQCBjb21tYW5kX3RhZ190YWJsZV9yZXdy aXRlX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZykKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1h bmRUYWddLnRhYmxlX3Jld3JpdGVfb2s7CiB9CiAKK2Jvb2wKK2NvbW1hbmRfdGFnX2RkbF9yZXBs aWNhdGlvbl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCit7CisJcmV0dXJuIHRhZ19iZWhhdmlv cltjb21tYW5kVGFnXS5kZGxfcmVwbGljYXRpb25fb2s7Cit9CisKIC8qCiAgKiBTZWFyY2ggQ29t bWFuZFRhZyBieSBuYW1lCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAxZTgzY2ZlMzkzLi4zYjg0MDAz ZTcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDExIEBAIFByb2Nlc3NVdGlsaXR5 U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVhdGVU YWJsZUFzU3RtdDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNldHJl ZSk7CiAJCQkJYWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRhYmxl QXNTdG10ICopIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMpOwor CQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJlc3MpOworCQkJCWNvbW1hbmRD b2xsZWN0ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdT dG10OgpAQCAtMTgzNSwxNCArMTgzOCwyMCBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCiAJCQljYXNlIFRfQ3JlYXRlUHVibGljYXRpb25TdG10OgogCQkJCWFkZHJl c3MgPSBDcmVhdGVQdWJsaWNhdGlvbihwc3RhdGUsIChDcmVhdGVQdWJsaWNhdGlvblN0bXQgKikg cGFyc2V0cmVlKTsKKworCQkJCS8qCisJCQkJICogQ3JlYXRlUHVibGljYXRpb24gY2FsbHMgRXZl bnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uCisJCQkJICogZGlyZWN0bHkKKwkJCQkg Ki8KKwkJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBU X0FsdGVyUHVibGljYXRpb25TdG10OgogCQkJCUFsdGVyUHVibGljYXRpb24ocHN0YXRlLCAoQWx0 ZXJQdWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVlKTsKIAogCQkJCS8qCi0JCQkJICogQWx0ZXJQ dWJsaWNhdGlvbiBjYWxscyBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZAotCQkJCSAq IGRpcmVjdGx5CisJCQkJICogQWx0ZXJQdWJsaWNhdGlvbiBjYWxscyBFdmVudFRyaWdnZXJDb2xs ZWN0U2ltcGxlQ29tbWFuZCBhbmQKKwkJCQkgKiBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJQdWJs aWNhdGlvbiBkaXJlY3RseQogCQkJCSAqLwogCQkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwog CQkJCWJyZWFrOwpAQCAtMjI0OSw2ICsyMjU4LDggQEAgc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0 VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpCiAJCQlyZXR1cm4gIlBPTElDWSI7CiAJCWNhc2Ug T0JKRUNUX1BST0NFRFVSRToKIAkJCXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJY2FzZSBPQkpFQ1Rf UFVCTElDQVRJT046CisJCQlyZXR1cm4gIlBVQkxJQ0FUSU9OIjsKIAkJY2FzZSBPQkpFQ1RfUk9M RToKIAkJCXJldHVybiAiUk9MRSI7CiAJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvZXZ0Y2FjaGUuYwppbmRleCAxZjVlN2ViNGM2Li5mMmE5ZjVkY2MyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dl ckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAo ZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3 cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09 IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGQxNzFjZmNmMmYuLjVmOGZiMDQ0 ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTY5MCw2ICs1NjkwLDggQEAg UmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRp b25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJm b3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZv cm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJm b3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGxfYWxsIHw9IHB1 YmZvcm0tPnB1YmRkbF9hbGw7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9 IHB1YmZvcm0tPnB1YmRkbF90YWJsZTsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1u cyByZWZlcmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK aW5kZXggMmMwYTk2OTk3Mi4uMTQ0ZmY1ZWY0MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zOTQ5LDYgKzM5 NDksOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlv bnMpCiAJaW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9w dWJ0cnVuY2F0ZTsKKwlpbnQJCQlpX3B1YmRkbF9hbGw7CisJaW50CQkJaV9wdWJkZGxfdGFibGU7 CiAJaW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTY0LDIz ICszOTY2LDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1Ymxp Y2F0aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGlj YXRpb25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxNjAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJ CQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwg cC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgor CQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJk ZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsX2FsbCwgcC5wdWJkZGxfdGFibGUsIHAucHVi dmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChm b3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJ CQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0 LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZp YXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0 ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsX2FsbCwgZmFs c2UgYXMgcC5wdWJkZGxfdGFibGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJP TSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJ CQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFT IHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1 YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1 YmRkbF9hbGwsIGZhbHNlIGFzIHAucHViZGRsX3RhYmxlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIK IAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1 ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwpAQCAtMzk5Niw2ICszOTk4 LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25z KQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVwZGF0ZSIpOwogCWlfcHViZGVs ZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlfcHVidHJ1bmNhdGUgPSBQUWZu dW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbF9hbGwgPSBQUWZudW1iZXIocmVz LCAicHViZGRsX2FsbCIpOworCWlfcHViZGRsX3RhYmxlID0gUFFmbnVtYmVyKHJlcywgInB1YmRk bF90YWJsZSIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7 CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykp OwpAQCAtNDAxOSw2ICs0MDIzLDEwIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBp bnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVi ZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3Ry Y21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQiKSA9PSAwKTsKKwkJcHVi aW5mb1tpXS5wdWJkZGxfYWxsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVi ZGRsX2FsbCksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsX3RhYmxlID0KKwkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsX3RhYmxlKSwgInQiKSA9PSAwKTsKIAkJ cHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlf cHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwOTgsNyArNDEwNiwyOSBAQCBkdW1wUHVi bGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQog CQlmaXJzdCA9IGZhbHNlOwogCX0KIAotCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wn Jyk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7CisKKwlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwgIiwgZGRsID0gJyIpOworCWZpcnN0ID0gdHJ1ZTsKKwlpZiAocHViaW5m by0+cHViZGRsX2FsbCkKKwl7CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJhbGwiKTsK KwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKKwlpZiAocHViaW5mby0+cHViZGRsX3RhYmxlKQorCXsK KwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKwor CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgInRhYmxlIik7CisJCWZpcnN0ID0gZmFsc2U7 CisJfQorCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICInIik7CiAKIAlpZiAocHViaW5m by0+cHVidmlhcm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggZTdjYmQ4ZDdlZC4u ZTMyNjc0MGRhMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MTksNiArNjE5LDggQEAgdHlwZWRlZiBzdHJ1 Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7 CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsX2FsbDsKKwlib29sCQlwdWJkZGxf dGFibGU7CiAJYm9vbAkJcHVidmlhcm9vdDsKIH0gUHVibGljYXRpb25JbmZvOwogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90 LzAwMl9wZ19kdW1wLnBsCmluZGV4IDJlZWVmMmE0NzguLjE2YjRkYWY0ZWEgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90 LzAwMl9wZ19kdW1wLnBsCkBAIC0yNDg0LDcgKzI0ODQsNyBAQCBteSAldGVzdHMgPSAoCiAJCWNy ZWF0ZV9vcmRlciA9PiA1MCwKIAkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgUFVCTElDQVRJT04g cHViMTsnLAogCQlyZWdleHAgICAgICAgPT4gcXIvXgotCQkJXFFDUkVBVEUgUFVCTElDQVRJT04g cHViMSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUsIHRydW5jYXRlJyk7 XEUKKwkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQs IHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScsIGRkbCA9ICcnKTtcRQogCQkJL3htLAogCQlsaWtl ID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKIAl9LApAQCAtMjQ5 Myw5ICsyNDkzLDkgQEAgbXkgJXRlc3RzID0gKAogCQljcmVhdGVfb3JkZXIgPT4gNTAsCiAJCWNy ZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIKIAkJCQkJCSBGT1IgQUxMIFRB QkxFUwotCQkJCQkJIFdJVEggKHB1Ymxpc2ggPSBcJ1wnKTsnLAorCQkJCQkJIFdJVEggKHB1Ymxp c2ggPSBcJ1wnLCBkZGwgPSBcJ1wnKTsnLAogCQlyZWdleHAgPT4gcXIvXgotCQkJXFFDUkVBVEUg UFVCTElDQVRJT04gcHViMiBGT1IgQUxMIFRBQkxFUyBXSVRIIChwdWJsaXNoID0gJycpO1xFCisJ CQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2gg PSAnJywgZGRsID0gJycpO1xFCiAJCQkveG0sCiAJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0 aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAogCX0sCkBAIC0yNTA0LDcgKzI1MDQsNyBAQCBteSAldGVz dHMgPSAoCiAJCWNyZWF0ZV9vcmRlciA9PiA1MCwKIAkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUg UFVCTElDQVRJT04gcHViMzsnLAogCQlyZWdleHAgICAgICAgPT4gcXIvXgotCQkJXFFDUkVBVEUg UFVCTElDQVRJT04gcHViMyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUs IHRydW5jYXRlJyk7XEUKKwkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjMgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScsIGRkbCA9ICcnKTtcRQogCQkJ L3htLAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwK IAl9LApAQCAtMjUxMyw3ICsyNTEzLDcgQEAgbXkgJXRlc3RzID0gKAogCQljcmVhdGVfb3JkZXIg PT4gNTAsCiAJCWNyZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjQ7JywKIAkJ cmVnZXhwICAgICAgID0+IHFyL14KLQkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjQgV0lUSCAo cHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJCQlcUUNS RUFURSBQVUJMSUNBVElPTiBwdWI0IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRl bGV0ZSwgdHJ1bmNhdGUnLCBkZGwgPSAnJyk7XEUKIAkJCS94bSwKIAkJbGlrZSA9PiB7ICVmdWxs X3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCiAJfSwKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggYzhhMGJi N2IzYS4uNzgzMmVmMDRjYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysr IGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYxNjIsNyArNjE2Miw3IEBAIGxpc3RQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBH cmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRp YyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0 cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChwc2V0LnN2ZXJzaW9u IDwgMTAwMDAwKQogCXsKQEAgLTYxNzksMTMgKzYxNzksMjMgQEAgbGlzdFB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCSAgIlNF TEVDVCBwdWJuYW1lIEFTIFwiJXNcIixcbiIKIAkJCQkJICAiICBwZ19jYXRhbG9nLnBnX2dldF91 c2VyYnlpZChwdWJvd25lcikgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YmFsbHRhYmxlcyBB UyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHViaW5zZXJ0IEFTIFwiJXNcIixcbiIKLQkJCQkJICAi ICBwdWJ1cGRhdGUgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YmRlbGV0ZSBBUyBcIiVzXCIi LAorCQkJCQkgICIgIHB1YmFsbHRhYmxlcyBBUyBcIiVzXCIiLAogCQkJCQkgIGdldHRleHRfbm9v cCgiTmFtZSIpLAogCQkJCQkgIGdldHRleHRfbm9vcCgiT3duZXIiKSwKLQkJCQkJICBnZXR0ZXh0 X25vb3AoIkFsbCB0YWJsZXMiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSk7 CisJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsX2FsbCBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0 ZXh0X25vb3AoIkFsbCBERExzIikpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJ ICAiLFxuICBwdWJkZGxfdGFibGUgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJU YWJsZSBERExzIikpOworCX0KKwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIsXG4g IHB1Ymluc2VydCBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcHVidXBkYXRlIEFTIFwiJXNcIixc biIKKwkJCQkJICAiICBwdWJkZWxldGUgQVMgXCIlc1wiIiwKIAkJCQkJICBnZXR0ZXh0X25vb3Ao Ikluc2VydHMiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIlVwZGF0ZXMiKSwKIAkJCQkJICBnZXR0 ZXh0X25vb3AoIkRlbGV0ZXMiKSk7CkBAIC02MTk3LDcgKzYyMDcsNiBAQCBsaXN0UHVibGljYXRp b25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJ CQkgICIsXG4gIHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9ub29wKCJW aWEgcm9vdCIpKTsKLQogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJP TSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAtNjI4Nyw2ICs2Mjk2LDcgQEAg ZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpy ZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJv b2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNv bnRlbnQgY29udDsKQEAgLTYzMDMsMTMgKzYzMTMsMTkgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVuY2F0ZSA9IChwc2V0LnN2ZXJzaW9u ID49IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNldC5zdmVyc2lvbiA+PSAxMzAwMDAp OworCWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKTsKIAogCWluaXRQUUV4 cEJ1ZmZlcigmYnVmKTsKIAogCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCSAgIlNFTEVD VCBvaWQsIHB1Ym5hbWUsXG4iCiAJCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfdXNlcmJ5aWQo cHVib3duZXIpIEFTIG93bmVyLFxuIgotCQkJCQkgICIgIHB1YmFsbHRhYmxlcywgcHViaW5zZXJ0 LCBwdWJ1cGRhdGUsIHB1YmRlbGV0ZSIpOworCQkJCQkgICIgIHB1YmFsbHRhYmxlcyIpOworCWlm IChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAiLCBw dWJkZGxfYWxsLCBwdWJkZGxfdGFibGUiKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAor CQkJCQkJICIsICBwdWJpbnNlcnQsIHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CiAJaWYgKGhhc19w dWJ0cnVuY2F0ZSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVi dHJ1bmNhdGUiKTsKQEAgLTYzNjcsNiArNjM4Myw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJ CQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzICs9IDI7CiAKIAkJaW5pdFBR RXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGlj YXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc0LDYgKzYzOTIsMTEgQEAgZGVzY3JpYmVQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZj b250LCBnZXR0ZXh0X25vb3AoIk93bmVyIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFk ZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJBbGwgdGFibGVzIiksIHRydWUsIGFsaWduKTsK KwkJaWYgKGhhc19wdWJkZGwpCisJCXsKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdl dHRleHRfbm9vcCgiQWxsIERETHMiKSwgdHJ1ZSwgYWxpZ24pOworCQkJcHJpbnRUYWJsZUFkZEhl YWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUYWJsZSBERExzIiksIHRydWUsIGFsaWduKTsKKwkJ fQogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkluc2VydHMiKSwg dHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3Ao IlVwZGF0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBn ZXR0ZXh0X25vb3AoIkRlbGV0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwpAQCAtNjM5MSw2ICs2NDE0LDEx IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRh YmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwog CQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2 YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJewor CQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2Us IGZhbHNlKTsKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwg MTApLCBmYWxzZSwgZmFsc2UpOworCQl9CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGY1ZDFiMDEwMWIuLjUwMTNkMDQyYzAgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE5MDUsNCArMTE5MDUsMTYgQEAKIHsgb2lkID0+ICc0NjQz JywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFu ZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlw ZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVw YXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdn ZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgZW5kJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9k ZGxfY29tbWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZv ciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25f ZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXIn LAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBm b3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJp Z2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIg Zm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1Ymxp Y2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3Ry aWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX3RhYmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmgKaW5kZXggNmVjYWEyYTAxZS4uZDYzNmRjY2RjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uaApAQCAtNTQsNiArNTQsMTIgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0 LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5nZXMg YXJlIHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7CisK KwkvKiB0cnVlIGlmIGFsbCBzdXBwb3J0ZWQgZGRscyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJ cHViZGRsX2FsbDsKKworCS8qIHRydWUgaWYgdGFibGUgZGRscyBhcmUgcHVibGlzaGVkICovCisJ Ym9vbAkJcHViZGRsX3RhYmxlOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyogLS0t LS0tLS0tLS0tLS0tLQpAQCAtNzIsNiArNzgsOCBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlv bkFjdGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1 YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbF9hbGw7CisJYm9vbAkJcHViZGRsX3RhYmxlOwogfSBQ dWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDQ4YzY1ZWY1M2MuLmJhYWUxZGM1NDQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTk0LDYgKzk0LDEwIEBAIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9p ZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl U3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5p dFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7 CisKIGV4dGVybiBib29sIEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gYm9v bCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpOwpAQCAtMTEwLDcgKzExNCwxMiBAQCBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNz IGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAq cGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQg b2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJj bWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJ CQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0 ZSk7CisKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KEFsdGVyVGFibGVD bWQgKnN1YmNtZCwgUmVsYXRpb24gcmVsKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVy VHlwZUVuZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCSBi b29sIHJld3JpdGUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lk KTsKIAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQg KmlzdG10KTsKQEAgLTEyMCw2ICsxMjksMTIgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyT3BGYW0oQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQsCiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJDb2xsZWN0Q3JlYXRlT3BDbGFzcyhDcmVhdGVPcENsYXNzU3RtdCAqc3RtdCwKIAkJ CQkJCQkJCQkJIE9pZCBvcGNvaWQsIExpc3QgKm9wZXJhdG9ycywKIAkJCQkJCQkJCQkJIExpc3Qg KnByb2NlZHVyZXMpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1Ymxp Y2F0aW9uKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKKwkJCQkJCQkJCQkJCSBPaWQgcHVi aWQsIExpc3QgKnJlbGF0aW9ucywKKwkJCQkJCQkJCQkJCSBMaXN0ICpzY2hlbWFzKTsKK2V4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclB1YmxpY2F0aW9uKEFsdGVyUHVibGljYXRp b25TdG10ICpzdG10LAorCQkJCQkJCQkJCQkJT2lkIHB1YmlkLCBMaXN0ICpyZWxhdGlvbnMsCisJ CQkJCQkJCQkJCQlMaXN0ICpzY2hlbWFzKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxl Y3RBbHRlclRTQ29uZmlnKEFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqc3RtdCwKIAkJCQkJCQkJ CQkJIE9pZCBjZmdJZCwgT2lkICpkaWN0SWRzLCBpbnQgbmRpY3RzKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckNvbGxlY3RBbHRlckRlZlByaXZzKEFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10 ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90 by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggMGVhMmRm NTA4OC4uNWZiM2JhYWViMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgK QEAgLTY2LDYgKzY2LDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNB TF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAog CUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19EREwgPSAn TCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBf TVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdL JywKQEAgLTI0Niw2ICsyNDcsOSBAQCBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5j YXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3Rh cnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5m byBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSBib29s IHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91 dCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6 LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRs KFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6 ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNv bHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChT dHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRl eCA1ZWQ1ZTZhN2JjLi40NGJhZjQwNzIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0 X3BsdWdpbi5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBPVVRQVVRfUExVR0lOX0gKICNkZWZp bmUgT1VUUFVUX1BMVUdJTl9ICiAKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogCiBzdHJ1Y3QgTG9naWNh bERlY29kaW5nQ29udGV4dDsKQEAgLTIxNCw2ICsyMTMsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9n aWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgKIAkJCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQkJICBjb25z dCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNh bCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25z LgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAo c3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAor CQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBT aXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwog LyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3Mg dHJhbnNhY3Rpb25zLgogICovCkBAIC0yNTMsNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0 cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9j b21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7 CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dp Y2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxfY2I7CiAJTG9naWNhbERlY29k ZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxs YmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0Lmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IGI0YTgwMTU0MDMuLmEy Y2Y5OWI0ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBA QCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247 CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOwor CUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAljaGFyCQlzdHJlYW1p bmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVy LmgKaW5kZXggN2I2YTYzMzFiYi4uNjE3ZjZhM2UzZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaApAQCAtNTQwLDYgKzU0MCwxNyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBz dHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpS ZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1 ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJ CQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJl Zml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25z dCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVy ZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0IpICgKIAkJ CQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC02MTAsNiArNjIxLDcgQEAgc3RydWN0 IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1p dDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVy QnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJl YW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVD QiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9j bWR0YWcuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmgKaW5kZXggMWU3NTE0ZGNmZi4uMDc2 YzI3ZTY0MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaAorKysgYi9zcmMv aW5jbHVkZS90Y29wL2NtZHRhZy5oCkBAIC0xNiw3ICsxNiw3IEBACiAvKiBidWZmZXIgc2l6ZSBy ZXF1aXJlZCBmb3IgY29tbWFuZCBjb21wbGV0aW9uIHRhZ3MgKi8KICNkZWZpbmUgQ09NUExFVElP Tl9UQUdfQlVGU0laRQk2NAogCi0jZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ss IHJ3cm9rLCByb3djbnQpIFwKKyNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywg cndyb2ssIHJvd2NudCwgZGRscmVwbG9rKSBcCiAJdGFnLAogCiB0eXBlZGVmIGVudW0gQ29tbWFu ZFRhZwpAQCAtNTMsOSArNTMsMTEgQEAgQ29weVF1ZXJ5Q29tcGxldGlvbihRdWVyeUNvbXBsZXRp b24gKmRzdCwgY29uc3QgUXVlcnlDb21wbGV0aW9uICpzcmMpCiBleHRlcm4gdm9pZCBJbml0aWFs aXplUXVlcnlDb21wbGV0aW9uKFF1ZXJ5Q29tcGxldGlvbiAqcWMpOwogZXh0ZXJuIGNvbnN0IGNo YXIgKkdldENvbW1hbmRUYWdOYW1lKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gY29u c3QgY2hhciAqR2V0Q29tbWFuZFRhZ05hbWVBbmRMZW4oQ29tbWFuZFRhZyBjb21tYW5kVGFnLCBT aXplICpsZW4pOworZXh0ZXJuIENvbW1hbmRUYWcgKkdldENvbW1hbmRUYWdzRm9yRERMUmVwbChp bnQgKm5jb21tYW5kcyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19kaXNwbGF5X3Jvd2NvdW50 KENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19ldmVudF90 cmlnZ2VyX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3Rh Z190YWJsZV9yZXdyaXRlX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CitleHRlcm4gYm9vbCBj b21tYW5kX3RhZ19kZGxfcmVwbGljYXRpb25fb2soQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4 dGVybiBDb21tYW5kVGFnIEdldENvbW1hbmRUYWdFbnVtKGNvbnN0IGNoYXIgKmNvbW1hbmRuYW1l KTsKIGV4dGVybiBTaXplIEJ1aWxkUXVlcnlDb21wbGV0aW9uU3RyaW5nKGNoYXIgKmJ1ZmYsIGNv bnN0IFF1ZXJ5Q29tcGxldGlvbiAqcWMsCiAJCQkJCQkJCQkgICBib29sIG5hbWVvbmx5KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oIGIvc3JjL2luY2x1ZGUvdGNv cC9jbWR0YWdsaXN0LmgKaW5kZXggZTczOGFjMWMwOS4uMThiNjllNGJiMyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0 YWdsaXN0LmgKQEAgLTIzLDE5NiArMjMsMTk2IEBACiAgKiB0ZXh0dWFsIG5hbWUsIHNvIHRoYXQg d2UgY2FuIGJzZWFyY2ggb24gaXQ7IHNlZSBHZXRDb21tYW5kVGFnRW51bSgpLgogICovCiAKLS8q IHN5bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUsIGV2ZW50X3RyaWdnZXJfb2ssIHRhYmxlX3Jld3Jp dGVfb2ssIHJvd2NvdW50ICovCi1QR19DTURUQUcoQ01EVEFHX1VOS05PV04sICI/Pz8iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BQ0NFU1NfTUVUSE9ELCAi QUxURVIgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQUxURVJfQUdHUkVHQVRFLCAiQUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DQVNULCAiQUxURVIgQ0FTVCIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09MTEFUSU9OLCAiQUxURVIgQ09MTEFU SU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT05TVFJB SU5ULCAiQUxURVIgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfQ09OVkVSU0lPTiwgIkFMVEVSIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RBVEFCQVNFLCAiQUxURVIgREFUQUJBU0Ui LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ERUZBVUxUX1BS SVZJTEVHRVMsICJBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RPTUFJTiwgIkFMVEVSIERPTUFJTiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRVZFTlRfVFJJR0dFUiwgIkFMVEVS IEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9FWFRFTlNJT04sICJBTFRFUiBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQUxURVIgRk9SRUlH TiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX0ZPUkVJR05fVEFCTEUsICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GVU5DVElPTiwgIkFMVEVSIEZVTkNUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9JTkRFWCwgIkFMVEVS IElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQU5H VUFHRSwgIkFMVEVSIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19BTFRFUl9MQVJHRV9PQkpFQ1QsICJBTFRFUiBMQVJHRSBPQkpFQ1QiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX01BVEVSSUFMSVpFRF9WSUVXLCAiQUxU RVIgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQUxURVJfT1BFUkFUT1IsICJBTFRFUiBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsICJBTFRFUiBPUEVSQVRPUiBD TEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFU T1JfRkFNSUxZLCAiQUxURVIgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9QT0xJQ1ksICJBTFRFUiBQT0xJQ1kiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwgIkFMVEVSIFBST0NF RFVSRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUFVCTElD QVRJT04sICJBTFRFUiBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfUk9MRSwgIkFMVEVSIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9ST1VUSU5FLCAiQUxURVIgUk9VVElORSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUlVMRSwgIkFMVEVSIFJVTEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NDSEVNQSwgIkFMVEVS IFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VR VUVOQ0UsICJBTFRFUiBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfU0VSVkVSLCAiQUxURVIgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVEFUSVNUSUNTLCAiQUxURVIgU1RBVElTVElDUyIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1VCU0NSSVBUSU9OLCAi QUxURVIgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19BTFRFUl9UQUJMRSwgIkFMVEVSIFRBQkxFIiwgdHJ1ZSwgdHJ1ZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RBQkxFU1BBQ0UsICJBTFRFUiBUQUJMRVNQQUNF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFS Q0hfQ09ORklHVVJBVElPTiwgIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJ T05BUlksICJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9QQVJTRVIsICJBTFRFUiBURVhU IFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RSQU5TRk9STSwgIkFM VEVSIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxU RVJfVFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywgIkFMVEVSIFVTRVIgTUFQUElORyIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVklFVywgIkFMVEVS IFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FOQUxZWkUsICJB TkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQkVHSU4sICJC RUdJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NBTEwsICJDQUxM IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNI RUNLUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRSwg IkNMT1NFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VS U09SLCAiQ0xPU0UgQ1VSU09SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DTFVTVEVSLCAiQ0xVU1RFUiIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NPTU1FTlQsICJDT01NRU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NSVQsICJDT01NSVQiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFS RUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT1BZLCAiQ09QWSIs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09QWV9GUk9NLCAiQ09QWSBG Uk9NIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FDQ0VT U19NRVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dSRUdBVEUiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DQVNULCAiQ1JFQVRFIENB U1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJ T04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfQ09OU1RSQUlOVCwgIkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwgIkNSRUFURSBDT05W RVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfREFU QUJBU0UsICJDUkVBVEUgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfRE9NQUlOLCAiQ1JFQVRFIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VWRU5UX1RSSUdHRVIsICJDUkVBVEUgRVZFTlQg VFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9F WFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJDUkVBVEUgRk9SRUlHTiBE QVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9GVU5DVElPTiwgIkNSRUFURSBGVU5DVElPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JF QVRFIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf TEFOR1VBR0UsICJDUkVBVEUgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJB VE9SLCAiQ1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFks ICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwgIkNSRUFURSBQUk9DRURVUkUi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9QVUJMSUNBVElP TiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX1JPTEUsICJDUkVBVEUgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9ST1VUSU5FLCAiQ1JFQVRFIFJPVVRJTkUiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxFLCAiQ1JFQVRFIFJVTEUi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TQ0hFTUEsICJD UkVBVEUgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NSRUFURV9TRVJWRVIsICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1RBVElTVElDUywgIkNSRUFURSBTVEFU SVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1VC U0NSSVBUSU9OLCAiQ1JFQVRFIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFLCAiQ1JFQVRFIFRBQkxFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVfQVMsICJDUkVBVEUgVEFCTEUg QVMiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRVNQ QUNFLCAiQ1JFQVRFIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkNSRUFURSBURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNSRUFURSBURVhUIFNFQVJDSCBESUNU SU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVY VF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAi Q1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfVFJBTlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9STSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIsICJDUkVBVEUgVFJJ R0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUs ICJDUkVBVEUgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1VTRVJfTUFQUElORywgIkNSRUFURSBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJERUFMTE9DQVRFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURV9BTEwsICJE RUFMTE9DQVRFIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RF Q0xBUkVfQ1VSU09SLCAiREVDTEFSRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19ERUxFVEUsICJERUxFVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19D TURUQUcoQ01EVEFHX0RJU0NBUkQsICJESVNDQVJEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRElTQ0FSRF9BTEwsICJESVNDQVJEIEFMTCIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9TRVFVRU5DRVMs ICJESVNDQVJEIFNFUVVFTkNFUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RJU0NBUkRfVEVNUCwgIkRJU0NBUkQgVEVNUCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19EUk9QX0FDQ0VTU19NRVRIT0QsICJEUk9QIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQUdHUkVHQVRFLCAiRFJPUCBBR0dS RUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ0FTVCwg IkRST1AgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9D T0xMQVRJT04sICJEUk9QIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9DT05TVFJBSU5ULCAiRFJPUCBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTlZFUlNJT04sICJEUk9QIENPTlZFUlNJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfREFUQUJBU0Us ICJEUk9QIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf RFJPUF9ET01BSU4sICJEUk9QIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9FVkVOVF9UUklHR0VSLCAiRFJPUCBFVkVOVCBUUklHR0VSIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9FWFRFTlNJT04sICJEUk9QIEVY VEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JF SUdOX0RBVEFfV1JBUFBFUiwgIkRST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9UQUJMRSwgIkRST1AgRk9S RUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9G VU5DVElPTiwgIkRST1AgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfSU5ERVgsICJEUk9QIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX0xBTkdVQUdFLCAiRFJPUCBMQU5HVUFHRSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9NQVRFUklBTElaRURfVklFVywgIkRST1Ag TUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfT1BFUkFUT1IsICJEUk9QIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLCAiRFJPUCBPUEVSQVRPUiBDTEFTUyIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1J TFksICJEUk9QIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9PV05FRCwgIkRST1AgT1dORUQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfUE9MSUNZLCAiRFJPUCBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUFJPQ0VEVVJFLCAiRFJPUCBQUk9DRURVUkUi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUFVCTElDQVRJT04s ICJEUk9QIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19EUk9QX1JPTEUsICJEUk9QIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19EUk9QX1JPVVRJTkUsICJEUk9QIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfUlVMRSwgIkRST1AgUlVMRSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TQ0hFTUEsICJEUk9QIFNDSEVNQSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVFVRU5DRSwgIkRST1AgU0VR VUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU0VSVkVS LCAiRFJPUCBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfU1RBVElTVElDUywgIkRST1AgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9TVUJTQ1JJUFRJT04sICJEUk9QIFNVQlNDUklQVElPTiIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJMRSwgIkRST1AgVEFC TEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEVTUEFD RSwgIkRST1AgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkRST1AgVEVYVCBTRUFSQ0ggQ09O RklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9U RVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiRFJPUCBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNF UiwgIkRST1AgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiRFJPUCBURVhUIFNFQVJDSCBU RU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UUkFO U0ZPUk0sICJEUk9QIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9UUklHR0VSLCAiRFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX1RZUEUsICJEUk9QIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVVNFUl9NQVBQSU5HLCAiRFJPUCBVU0VSIE1BUFBJ TkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVklFVywgIkRS T1AgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRVhFQ1VURSwg IkVYRUNVVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19FWFBMQUlO LCAiRVhQTEFJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0ZFVENI LCAiRkVUQ0giLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0dSQU5ULCAi R1JBTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0dSQU5UX1JPTEUs ICJHUkFOVCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfSU1Q T1JUX0ZPUkVJR05fU0NIRU1BLCAiSU1QT1JUIEZPUkVJR04gU0NIRU1BIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19JTlNFUlQsICJJTlNFUlQiLCBmYWxzZSwgZmFsc2Us IHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0xJU1RFTiwgIkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0xPQUQsICJMT0FEIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfTE9DS19UQUJMRSwgIkxPQ0sgVEFCTEUiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19NRVJHRSwgIk1FUkdFIiwgZmFsc2UsIGZhbHNl LCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKLVBHX0NNRFRBRyhDTURUQUdfTk9USUZZLCAiTk9USUZZIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfUFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFX1RSQU5TQUNUSU9OLCAiUFJFUEFSRSBUUkFO U0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFQVNTSUdO X09XTkVELCAiUkVBU1NJR04gT1dORUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLCAiUkVGUkVTSCBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVJTkRFWCwgIlJF SU5ERVgiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUxFQVNFLCAi UkVMRUFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFU0VULCAi UkVTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRVZPS0UsICJS RVZPS0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFVk9LRV9ST0xF LCAiUkVWT0tFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19S T0xMQkFDSywgIlJPTExCQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfUk9MTEJBQ0tfUFJFUEFSRUQsICJST0xMQkFDSyBQUkVQQVJFRCIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NBVkVQT0lOVCwgIlNBVkVQT0lOVCIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFQ1VSSVRZX0xBQkVMLCAiU0VDVVJJVFkg TEFCRUwiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVCwgIlNF TEVDVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9L RVlfU0hBUkUsICJTRUxFQ1QgRk9SIEtFWSBTSEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfTk9fS0VZX1VQREFURSwgIlNFTEVDVCBGT1IgTk8g S0VZIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVD VF9GT1JfU0hBUkUsICJTRUxFQ1QgRk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9VUERBVEUsICJTRUxFQ1QgRk9SIFVQREFURSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9JTlRPLCAiU0VMRUNU IElOVE8iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFVCwgIlNFVCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFVF9DT05TVFJBSU5UUywg IlNFVCBDT05TVFJBSU5UUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X1NIT1csICJTSE9XIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU1RB UlRfVFJBTlNBQ1RJT04sICJTVEFSVCBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX1RSVU5DQVRFX1RBQkxFLCAiVFJVTkNBVEUgVEFCTEUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19VTkxJU1RFTiwgIlVOTElTVEVOIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfVVBEQVRFLCAiVVBEQVRFIiwg ZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19WQUNVVU0sICJWQUNVVU0iLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorLyogc3ltYm9sIG5hbWUsIHRleHR1YWwgbmFtZSwgZXZlbnRf dHJpZ2dlcl9vaywgdGFibGVfcmV3cml0ZV9vaywgcm93Y291bnQsIGRkbHJlcGxvayAqLworUEdf Q01EVEFHKENNRFRBR19VTktOT1dOLCAiPz8/IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0FDQ0VTU19NRVRIT0QsICJBTFRFUiBBQ0NFU1MgTUVU SE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJf QUdHUkVHQVRFLCAiQUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9DQVNULCAiQUxURVIgQ0FTVCIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09MTEFUSU9OLCAiQUxURVIgQ09M TEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9DT05TVFJBSU5ULCAiQUxURVIgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sICJBTFRFUiBDT05WRVJTSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9EQVRB QkFTRSwgIkFMVEVSIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX0RFRkFVTFRfUFJJVklMRUdFUywgIkFMVEVSIERFRkFVTFQgUFJJ VklMRUdFUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfRE9NQUlOLCAiQUxURVIgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9FVkVOVF9UUklHR0VSLCAiQUxURVIgRVZFTlQgVFJJR0dFUiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9FWFRF TlNJT04sICJBTFRFUiBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQUxURVIgRk9SRUlHTiBE QVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0ZPUkVJR05fVEFCTEUsICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GVU5DVElPTiwgIkFMVEVSIEZV TkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9JTkRFWCwgIkFMVEVSIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19BTFRFUl9MQU5HVUFHRSwgIkFMVEVSIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQVJHRV9PQkpFQ1QsICJBTFRF UiBMQVJHRSBPQkpFQ1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19BTFRFUl9NQVRFUklBTElaRURfVklFVywgIkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXIiwg dHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9S LCAiQUxURVIgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLCAiQUxURVIgT1BFUkFUT1IgQ0xBU1MiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZB TUlMWSwgIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUE9MSUNZLCAiQUxURVIgUE9MSUNZIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QUk9DRURVUkUsICJBTFRF UiBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX1BVQkxJQ0FUSU9OLCAiQUxURVIgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRFUiBST0xFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPVVRJTkUs ICJBTFRFUiBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19BTFRFUl9SVUxFLCAiQUxURVIgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU0NIRU1BLCAiQUxURVIgU0NIRU1BIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVFVRU5DRSwgIkFMVEVS IFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19B TFRFUl9TRVJWRVIsICJBTFRFUiBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFUSVNUSUNTIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVUJTQ1JJUFRJ T04sICJBTFRFUiBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUsICJBTFRFUiBUQUJM RSIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UQUJM RVNQQUNFLCAiQUxURVIgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQUxURVIg VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkFMVEVSIFRFWFQg U0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQgU0VBUkNIIFBBUlNF UiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVY VF9TRUFSQ0hfVEVNUExBVEUsICJBTFRFUiBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJBTlNGT1JNLCAiQUxU RVIgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfVFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1 ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywgIkFM VEVSIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfVklFVywgIkFMVEVSIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FOQUxZWkUsICJBTkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0JFR0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNIRUNLUE9J TlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0Us ICJDTE9TRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19D TE9TRV9DVVJTT1IsICJDTE9TRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xVU1RFUiwgIkNM VVNURVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09N TUVOVCwgIkNPTU1FTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NPTU1JVCwgIkNPTU1JVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFSRUQiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09QWSwgIkNPUFkiLCBmYWxzZSwg ZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT1BZX0ZST00sICJDT1BZIEZS T00iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X0FDQ0VTU19NRVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dS RUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFU RV9DQVNULCAiQ1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OU1RSQUlOVCwgIkNS RUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFCQVNFLCAiQ1JFQVRF IERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9ET01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNSRUFURSBFVkVOVCBU UklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NS RUFURV9FWFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJDUkVB VEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFCTEUi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9GVU5D VElPTiwgIkNSRUFURSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTEFOR1VBR0UsICJDUkVBVEUgTEFO R1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFU RV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SLCAiQ1JF QVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1J TFksICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwgIkNS RUFURSBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPTEUsICJDUkVBVEUgUk9M RSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf Uk9VVElORSwgIkNSRUFURSBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JVTEUsICJDUkVBVEUgUlVMRSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NDSEVNQSwgIkNSRUFURSBTQ0hF TUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9T RVFVRU5DRSwgIkNSRUFURSBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NFUlZFUiwgIkNSRUFURSBTRVJWRVIiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TVEFUSVNUSUNTLCAiQ1JF QVRFIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9TVUJTQ1JJUFRJT04sICJDUkVBVEUgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFLCAiQ1JFQVRF IFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfVEFCTEVfQVMsICJDUkVBVEUgVEFCTEUgQVMiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVTUEFDRSwgIkNSRUFURSBUQUJMRVNQQUNF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9U RVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9U RVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NF QVJDSF9QQVJTRVIsICJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfVEVNUExBVEUs ICJDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9UUkFOU0ZPUk0sICJDUkVBVEUgVFJBTlNGT1JNIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJJR0dF UiwgIkNSRUFURSBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfVFlQRSwgIkNSRUFURSBUWVBFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVVNFUl9NQVBQSU5HLCAiQ1JFQVRFIFVTRVIg TUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1ZJRVcsICJDUkVBVEUgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfREVBTExPQ0FURSwgIkRFQUxMT0NBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURV9BTEwsICJERUFMTE9DQVRFIEFM TCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ERUNMQVJF X0NVUlNPUiwgIkRFQ0xBUkUgQ1VSU09SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0RFTEVURSwgIkRFTEVURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkQsICJESVNDQVJEIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfQUxMLCAiRElTQ0FSRCBBTEwi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9Q TEFOUywgIkRJU0NBUkQgUExBTlMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfRElTQ0FSRF9TRVFVRU5DRVMsICJESVNDQVJEIFNFUVVFTkNFUyIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1RFTVAsICJE SVNDQVJEIFRFTVAiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfRE8sICJETyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX0FDQ0VTU19NRVRIT0QsICJEUk9QIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQUdHUkVHQVRFLCAiRFJPUCBBR0dS RUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf Q0FTVCwgIkRST1AgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9DT0xMQVRJT04sICJEUk9QIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9DT05TVFJBSU5ULCAiRFJPUCBDT05TVFJB SU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9D T05WRVJTSU9OLCAiRFJPUCBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSIsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0RPTUFJTiwgIkRST1Ag RE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9Q X0VWRU5UX1RSSUdHRVIsICJEUk9QIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9FWFRFTlNJT04sICJEUk9QIEVYVEVOU0lP TiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JF SUdOX0RBVEFfV1JBUFBFUiwgIkRST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9UQUJMRSwgIkRS T1AgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9GVU5DVElPTiwgIkRST1AgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfSU5ERVgsICJEUk9QIElOREVYIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0xBTkdVQUdFLCAiRFJP UCBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9NQVRFUklBTElaRURfVklFVywgIkRST1AgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1IsICJEUk9Q IE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX09QRVJBVE9SX0NMQVNTLCAiRFJPUCBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksICJEUk9Q IE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9PV05FRCwgIkRST1AgT1dORUQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1BPTElDWSwgIkRST1AgUE9MSUNZIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1BST0NFRFVSRSwgIkRST1Ag UFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX1BVQkxJQ0FUSU9OLCAiRFJPUCBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ST0xFLCAiRFJPUCBST0xFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUk9VVElORSwgIkRST1Ag Uk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJP UF9SVUxFLCAiRFJPUCBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX1NDSEVNQSwgIkRST1AgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUVVFTkNFLCAiRFJPUCBTRVFVRU5DRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVJWRVIsICJE Uk9QIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9TVEFUSVNUSUNTLCAiRFJPUCBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NVQlNDUklQVElPTiwgIkRST1AgU1VCU0NSSVBU SU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9U QUJMRSwgIkRST1AgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0RST1BfVEFCTEVTUEFDRSwgIkRST1AgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJR1VS QVRJT04sICJEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwg IkRST1AgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsICJEUk9QIFRFWFQgU0VB UkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9URVhUX1NFQVJDSF9URU1QTEFURSwgIkRST1AgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVFJBTlNGT1JN LCAiRFJPUCBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0RST1BfVFJJR0dFUiwgIkRST1AgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UWVBFLCAiRFJPUCBUWVBFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1VTRVJfTUFQUElORywgIkRS T1AgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19EUk9QX1ZJRVcsICJEUk9QIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0VYRUNVVEUsICJFWEVDVVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0VYUExBSU4sICJFWFBMQUlOIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0ZFVENILCAiRkVUQ0giLCBmYWxzZSwg ZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19HUkFOVCwgIkdSQU5UIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19HUkFOVF9ST0xFLCAiR1JB TlQgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19J TVBPUlRfRk9SRUlHTl9TQ0hFTUEsICJJTVBPUlQgRk9SRUlHTiBTQ0hFTUEiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0lOU0VSVCwgIklOU0VSVCIsIGZhbHNl LCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xJU1RFTiwgIkxJU1RFTiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19MT0FELCAiTE9B RCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19MT0NLX1RB QkxFLCAiTE9DSyBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19NRVJHRSwgIk1FUkdFIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfTU9WRSwgIk1PVkUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19OT1RJRlksICJOT1RJRlkiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfUFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUFJFUEFSRV9UUkFOU0FDVElPTiwgIlBSRVBB UkUgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfUkVBU1NJR05fT1dORUQsICJSRUFTU0lHTiBPV05FRCIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLCAi UkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfUkVJTkRFWCwgIlJFSU5ERVgiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVMRUFTRSwgIlJFTEVBU0UiLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVTRVQsICJSRVNFVCIsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRVZPS0UsICJSRVZPS0UiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX1JFVk9LRV9ST0xFLCAi UkVWT0tFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfUk9MTEJBQ0ssICJST0xMQkFDSyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19ST0xMQkFDS19QUkVQQVJFRCwgIlJPTExCQUNLIFBSRVBBUkVEIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NBVkVQT0lOVCwgIlNB VkVQT0lOVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19T RUNVUklUWV9MQUJFTCwgIlNFQ1VSSVRZIExBQkVMIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1QsICJTRUxFQ1QiLCBmYWxzZSwgZmFsc2UsIHRydWUs IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX0tFWV9TSEFSRSwgIlNFTEVDVCBG T1IgS0VZIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX1NFTEVDVF9GT1JfTk9fS0VZX1VQREFURSwgIlNFTEVDVCBGT1IgTk8gS0VZIFVQREFURSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9S X1NIQVJFLCAiU0VMRUNUIEZPUiBTSEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX1VQREFURSwgIlNFTEVDVCBGT1IgVVBEQVRFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9JTlRP LCAiU0VMRUNUIElOVE8iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19TRVQsICJTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfU0VUX0NPTlNUUkFJTlRTLCAiU0VUIENPTlNUUkFJTlRTIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NIT1csICJTSE9XIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NUQVJUX1RSQU5TQUNUSU9OLCAiU1RB UlQgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfVFJVTkNBVEVfVEFCTEUsICJUUlVOQ0FURSBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19VTkxJU1RFTiwgIlVOTElTVEVOIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIs IGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1ZBQ1VVTSwgIlZB Q1VVTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCmlu ZGV4IDljMjU0OWM5NGMuLjk5YmY5YWVkNzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av ZGRsX2RlcGFyc2UuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTE0 LDYgKzE0LDE2IEBACiAKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogCisvKgor ICogUmVwcmVzZW50IHRoZSBwdWJsaWNhdGlvbiByZWxhdGlvbiBmb3IgZGVwYXJzaW5nLgorICov Cit0eXBlZGVmIHN0cnVjdCBwdWJsaWNhdGlvbl9yZWwKK3sKKwlPaWQJCQlyZWxpZDsJCQkvKiBy ZWxhdGlvbiBpZCAqLworCU5vZGUJICAgKndoZXJlQ2xhdXNlOwkvKiByb3cgZmlsdGVyICovCisJ TGlzdAkgICAqY29sdW1uTGlzdDsJCS8qIGNvbHVtbiBsaXN0ICovCit9IHB1YmxpY2F0aW9uX3Jl bDsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1h bmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZGRsX2pz b25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2Ryb3BfY29t bWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDFmY2EyMjdmMDUuLjljNjAzMWFlMDggMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2lu Y2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMzAsNyArMzAsOSBAQCB0eXBlZGVmIGVu dW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlT Q1RfQ3JlYXRlT3BDbGFzcywKIAlTQ1RfQWx0ZXJUU0NvbmZpZywKLQlTQ1RfQ3JlYXRlVGFibGVB cworCVNDVF9DcmVhdGVUYWJsZUFzLAorCVNDVF9DcmVhdGVQdWJsaWNhdGlvbiwKKwlTQ1RfQWx0 ZXJQdWJsaWNhdGlvbgogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTkwLDYgKzky LDIyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJCUxpc3QJICAgKnByb2Nl ZHVyZXM7CiAJCX0JCQljcmVhdGVvcGM7CiAKKwkJLyogQ1JFQVRFIFBVQkxJQ0FUSU9OICovCisJ CXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlMaXN0CSAgICpyZWxz OworCQkJTGlzdAkgICAqc2NoZW1hczsKKwkJfQkJCWNyZWF0ZXB1YjsKKworCQkvKiBBTFRFUiBQ VUJMSUNBVElPTiAqLworCQlzdHJ1Y3QgYWx0ZXJwdWIKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBh ZGRyZXNzOworCQkJTGlzdAkgICAqcmVsczsKKwkJCUxpc3QJICAgKnNjaGVtYXM7CisJCX0JCQlh bHRlcnB1YjsKKwogCQkvKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIEFERC9BTFRF Ui9EUk9QIE1BUFBJTkcgKi8KIAkJc3RydWN0CiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2V2dGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCmluZGV4IGQz NDAwMjY1MTguLjkxZDRiZGQ2YjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNh Y2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaApAQCAtMjIsNyArMjIsOCBA QCB0eXBlZGVmIGVudW0KIAlFVlRfRERMQ29tbWFuZFN0YXJ0LAogCUVWVF9ERExDb21tYW5kRW5k LAogCUVWVF9TUUxEcm9wLAotCUVWVF9UYWJsZVJld3JpdGUKKwlFVlRfVGFibGVSZXdyaXRlLAor CUVWVF9UYWJsZUluaXRXcml0ZQogfSBFdmVudFRyaWdnZXJFdmVudDsKIAogdHlwZWRlZiBzdHJ1 Y3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CmluZGV4IDllZWFhMWNjYzEu LjhlNmZmYTk4OTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dApAQCAt MjAsNiArMjAsMTMgQEAgTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1 YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRQogQUxURVIgVEFCTEUgY3RsdDEg QUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7CiBOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwg fXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3Jh Z2UiLCAiY29sdW1uIjogImIiLCAic3RvcmFnZSI6ICJleHRlcm5hbCJ9XSwgImlkZW50aXR5Ijog eyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CiBOT1RJQ0U6ICBy ZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBi IFNFVCBTVE9SQUdFIGV4dGVybmFsCitDUkVBVEUgVEFCTEUgY3RsdDFfbGlrZSAoTElLRSBjdGx0 MSBJTkNMVURJTkcgQUxMKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFU RSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgl e3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2Nv bW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1z IiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxX2xpa2UiLCAic2NoZW1hbmFtZSI6ICJw dWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIs ICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6 ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9j b21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7 dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBl cnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6 IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRp b259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0 aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNl LCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxl bWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3Jh Z2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0 fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJhIiwgInR5cGUiOiAiY29sdW1uIiwg ImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjog InRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAi REVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6 IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0 IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAibWFpbiIsICJj b21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUki LCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0 ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFs c2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9 cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMg JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAiY29sdW1uIiwgImNv bHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRl eHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVG QVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsi Zm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZXJuYWwiLCAi Y29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJh dGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZh bHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFt ZSI6ICJjdGx0MV9hX2NoZWNrIiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogImNo ZWNrIiwgImRlZmluaXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRP UihwZ19jYXRhbG9nLj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm aW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfbGlrZV9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWlu dCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkg KGEpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1Ymxp Yy5jdGx0MV9saWtlIChhIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIG1haW4gIENPTExBVEUgcGdf Y2F0YWxvZy4iZGVmYXVsdCIgICAsIGIgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZXJuYWwg IENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgY3RsdDFfYV9jaGVj ayBDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMikp LCBDT05TVFJBSU5UIGN0bHQxX2xpa2VfcGtleSBQUklNQVJZIEtFWSAoYSkpICAgICAgCitOT1RJ Q0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8 TlVMTD4KK05PVElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVk IGNvbW1hbmQ6IDxOVUxMPgogLS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRs ZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkg UkVGRVJFTkNFUyBzdWJjb21tYW5kCiBDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1B UlkgS0VZLCBuYW1lIHRleHQpOwogTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JF QVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQg KCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25f Y29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNl fXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAicHJvZHVjdCIsICJzY2hlbWFuYW1lIjogInB1 YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwg InBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10Ijog Ik9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2Nv bW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0 YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVy c2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50Ijog ZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlv bn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRo b2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVt ZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFn ZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9 cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwg ImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjog ImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAi REVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6 IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxh aW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21l dGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAi Z2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2Vu dCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xz dG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVm YXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAi ZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4 dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlv bn1zIiwgIm5hbWUiOiAicHJvZHVjdF9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250 eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGlkKSJ9XX0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Nx bC9jcmVhdGVfdGFibGUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKaW5kZXggOTk3ZDJmNTRmYi4uMWM1ZjBjMjA2YSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV90YWJsZS5zcWwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKQEAgLTksNiArOSw3IEBAIENSRUFURSBVTklR VUUgSU5ERVggY292ZXJpbmdfaW5kZXggb24gc2ltcGxlX3RhYmxlIChpZCkgSU5DTFVERSAobmFt ZSk7CiBDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJ TUFSWSBLRVksIGIgdGV4dCk7CiBBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQg U1RPUkFHRSBNQUlOOwogQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JB R0UgRVhURVJOQUw7CitDUkVBVEUgVEFCTEUgY3RsdDFfbGlrZSAoTElLRSBjdGx0MSBJTkNMVURJ TkcgQUxMKTsKIAogLS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4g YSBmb2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJF TkNFUyBzdWJjb21tYW5kCiBDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZ LCBuYW1lIHRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3Fs Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKaW5kZXggOGZjNjJjZWJk Mi4uZDhhZmZhZTY5OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3Fs Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CkBAIC02MTk0LDkg KzYxOTQsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3MpCiAKIFxkUnAgIm5vLnN1Y2gucHVi bGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCiAoMCByb3dzKQog CiBcZFJzICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQKaW5kZXggNDI3Zjg3ZWEwNy4uYjIzMTdlNzliZSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBAQCBFUlJP UjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnViX3h4eCBX SVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92aS4uLgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorIHRlc3RwdWJfZGVm YXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgU0VUIChw dWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAg ICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g dGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHVi X2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRkaW5n IHRhYmxlcwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiAt LSBzaG91bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9u CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTk5 LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8g ZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50 ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBU QUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VU IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTIz LDEwICsxMjMsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEZPUiBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y X3RibF9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QsIFRBQkxFIHB1Yl90ZXN0 LnRlc3RwdWJfbm9wazsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHVi X2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90 ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xMzUsMTAgKzEzNSwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgdGFi bGUgb2YgdGhlIHNhbWUgc2NoZW1hIHRvIHRoZSBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEFERCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25v cGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTQ3LDEw ICsxNDcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRy b3AgdGhlIHRhYmxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBEUk9QIFRB QkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTYx LDEwICsxNjEsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3QgcGFy dCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0byBz Y2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNF VCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBE RExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAKQEAg LTE4NiwxMCArMTg2LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0YWJs ZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogKDEg cm93KQogCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKQEAgLTIwMSwxOSArMjAxLDE5IEBAIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMworICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCiAKIFxk UnArIHRlc3RwdWI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgog CkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsK IC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRo ZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBUQUJM RSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjUyLDEwICsyNTIs MTAgQEAgQUxURVIgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElPTiB0ZXN0cHVi X3BhcnRlZDE7CiBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlKTsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CiBUYWJsZXM6 CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjg0LDEwICsyODQsMTAgQEAgU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8 PiAndGVzdCcgQU5EIGQgPCA1KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVS RSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMwMCwxMCArMzAwLDEwIEBA IFRhYmxlczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJf cmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnArIHRlc3RwdWI1Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1 CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMu dGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkK QEAgLTMxOSwxMCArMzE5LDEwIEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMzAs MTAgKzMzMCwxMCBAQCBUYWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQg dGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4g MzAwIEFORCBlIDwgNTAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFORCAoZSA8IDUwMCkpCiAK QEAgLTM2NiwxMCArMzY2LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsK IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRBQkxFIHRlc3RwdWJfcmZf dGJsMSwgT05MWSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkpIFdJVEggKHB1Ymxpc2gg PSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9z eW50YXgxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfc3ludGF4MQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90Ymwx IgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM3OSwx MCArMzc5LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVz dHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVi bGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0 cHViX3N5bnRheDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX3N5bnRheDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJFICho IDwgOTk5KQpAQCAtNDk3LDEwICs0OTcsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2 IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMjsKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMiwgVEFC TEUgdGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiBXSEVSRSAoaSA8IDk5KTsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAidGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiIgV0hFUkUgKGkgPCA5OSkK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC03MTQsMTAgKzcxNCwxMCBAQCBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRl Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVz dHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfdGJsNSIgKGEpCiAKQEAgLTg5MSwxMCArODkxLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHVi X3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMp KTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmls dGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmls dGVycwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Ym90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFs bCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9m aWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTA5OSwxMCArMTA5OSwxMCBAQCBF UlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1Ymxp Y2F0aW9uICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGJs IEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2Zv cnRibCIgYWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHVi X3RibDEiCkBAIC0xMTQwLDEwICsxMTQwLDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1 Yl9mb3J0YmwiCiAKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpA QCAtMTIyMSwxMCArMTIyMSwxMCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Np b24gRlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3Bh cnRlZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVs dAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9k ZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNh dGlvbgpAQCAtMTIzNCwyMCArMTIzNCwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVi bGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1Ymxp Y2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRl c3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9u cworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwdWJfZm9vIHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykK IAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsK IFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICBOYW1lICAg ICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8 IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDEgcm93KQog CiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBAIC0xMjYzLDE5ICsxMjYzLDE5IEBAIENS RUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsKIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVtYSBG T1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwogXGRS cCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTI4OSw0NCArMTI4OSw0 NCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4g U0NIRU1BICJDVVJSRU5UX1NDSEVNQSIsIENVUgogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ydGFibGUgRk9SIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAg ICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIK IAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJD VVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTM2MCwxMCArMTM2MCwxMCBAQCBF UlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9Q IFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xMzcxLDIwICsxMzcxLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5h bWluZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24K IEFMVEVSIFNDSEVNQSBwdWJfdGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRS cCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIiCiAKIEFMVEVSIFND SEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1 YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM5MiwxMCArMTM5MiwxMCBAQCBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MDQs MTAgKzE0MDQsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1h OwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDE2LDEwICsxNDE2 LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRVJST1I6ICBzY2hlbWEg InB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWIxX2Zv cnNjaGVtYSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0 MjcsMTAgKzE0MjcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0 aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJP UCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxs IERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAK QEAgLTE0MzgsMTAgKzE0MzgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qy OwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5vdCBwYXJ0IG9m IHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQ0OSwyOSAr MTQ0OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwog RVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsK IFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0t IGFsdGVyIHB1YmxpY2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90 ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0ODAs MTAgKzE0ODAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1h OwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDkyLDEwICsxNDky LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRlIHNj aGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxs IERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAK QEAgLTE1NzQsMTggKzE1NzQsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1In OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgog KDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8 IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU5 NSwyMCArMTU5NSwyMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWFfZm9y dGFibGUgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBUQQogQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVzdDIudGJsMSwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBB bGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNGJjNGZmMjIx MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScsIGRk bCA9ICdhbGwnKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgU1VCU0NSSVBUSU9OIG15c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0 cicgUFVCTElDQVRJT04gbXlwdWI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgc3luY2hyb25pemVkIHRo ZSB0YWJsZS4KKyMgVGhpcyBwcmV2ZW50cyBBTFRFUiBUQUJMRSBjb21tYW5kIGJlbG93IGZyb20g YmVpbmcgZXhlY3V0ZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9uaXphdGlvbi4KKyRub2RlX3N1YnNj cmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICJTRUxFQ1QgQ09VTlQoMSkg PSAwIEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBzciBXSEVSRSBzci5zcnN1YnN0YXRlIE5PVCBJ TiAoJ3MnLCAncicpIEFORCBzci5zcnJlbGlkID0gJ3Rlc3RfcmVwJzo6cmVnY2xhc3MiCispOwor CisjIFRlc3QgQUxURVIgVEFCTEUgQURECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUREIGM0IGludDsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDIsICdkYXRhMicsIDIsIDIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgYzQgPSAyOyIpOwor aXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBBREQgcmVwbGljYXRlZCcpOworCisj IFRlc3QgQUxURVIgVEFCTEUgRFJPUAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIERST1AgYzQ7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF9yZXAgd2hlcmUgaWQgPSAy OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdGVzdF9yZXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVw IERST1AgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgVFlQRQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVw IEFMVEVSIHZhbHVlIFRZUEUgdmFyY2hhciIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMywgJ2RhdGEzJywgJzMn KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIHZhbHVlID0gJzMnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gVFlQRSByZXBsaWNhdGVkJyk7CisKKyMg VGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBoYXZlIHRo ZSBkZWZhdWx0IHZhbHVlIGFmdGVyIHRoZSBkaXJlY3QgaW5zZXJ0IHRvIHN1YnNjcmliZXIgbm9k ZS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0 ZXN0X3JlcCBBTFRFUiBDT0xVTU4gdmFsdWUgU0VUIERFRkFVTFQgJ2ZvbyciKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg0LCAnZGF0 YTQnKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCB2YWx1ZSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNDsiKTsKK2lzKCRyZXN1 bHQsICdmb28nLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgU0VUIERFRkFVTFQgcmVwbGljYXRlZCcp OworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBERUZBVUxUCisjIENoZWNrIGlmIHdl IGRvbid0IGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgcHJldmlvdXNseSBkZWZpbmVkLgorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIENPTFVNTiB2YWx1ZSBEUk9QIERFRkFVTFQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNSwgJ2RhdGE1Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIERFRkFVTFQgcmVwbGljYXRlZCcpOworCisj IFRlc3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMCisjIFJlbW92ZSB0aGUgZXhpc3Rp bmcgcmVjb3JkIHRoYXQgY29udGFpbnMgbnVsbCB2YWx1ZSBmaXJzdC4KK215ICgkc3Rkb3V0LCAk c3RkZXJyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRF IEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIFNFVCBOT1Qg TlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZB TFVFUyAoNiwgJ2RhdGE2Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkg ICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3Rk ZXJyID1+IC9FUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uIFwidmFsdWVcIiBvZiByZWxhdGlv biBcInRlc3RfcmVwXCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTCI7CisKKyMg VGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIE5PVCBOVUxMCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgRFJP UCBOT1QgTlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyMgSW5zZXJ0IHNhbWUgZGF0YSB0aGF0IGhhcyBOVUxMIHZhbHVlLiBUaGlzIGZhaWxlZCBi ZWZvcmUgYnV0IG5vdyBzaG91bGQgc3VjY2VlZC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsi KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA2OyIpOworaXMoJHJl c3VsdCwgcSh0KSwgIkFMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgTk9UIE5VTEwgcmVwbGljYXRl ZCIpOworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIFVOTE9HR0VECiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIFVOTE9HR0VE OycpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZB TFVFUyAoNywgJ2RhdGE3JywgJzcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNzsiKTsK K2lzKCRyZXN1bHQsIHFxKDApLCAnQUxURVIgdGVzdF9yZXAgU0VUIFVOTE9HR0VEIHJlcGxpY2F0 ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgTE9HR0VEOycp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoOCwgJ2RhdGE4JywgJzgnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gODsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgU0VUIExPR0dFRCByZXBsaWNhdGVkJyk7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgYW5kIERNTCBjaGFuZ2VzCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoYSBpbnQsIGIgdmFyY2hh cik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSB0bXAgaXMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDEsICdhJyki KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgdmFsdWVzICgyLCAnYicpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgyKSwgJ0RN TCBDaGFuZ2VzIHRvIHRtcCBhcmUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElOSEVSSVRTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDIgKGMzIGludCkgSU5IRVJJVFMgKHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMiBWQUxVRVMgKDEsICdhJywg MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDInOyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSU5IRVJJVFMgaXMgcmVwbGljYXRlZCcpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gdG1wMjsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIHNvbWUg ZGF0YSB0byBpbmhlcml0ZWQgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMiIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIExJS0UKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wMyAoYzMgaW50LCBMSUtFIHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMyBWQUxVRVMgKDEsIDEsICdhJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDMnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgTElLRSByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJv bSB0bXAzOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnQgc29tZSBkYXRhIHRvIGEgdGFi bGUgZGVmaW5lZCB3aXRoIExJS0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMyIpOworCisjIFRlc3QgRFJPUCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMCksICdUQUJMRSB0bXAgaXMgZHJvcHBlZCcpOworCisjIFRlc3QgQ1JFQVRFIFVOTE9H R0VEIFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3Rh YmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JF QVRFIFVOTE9HR0VEIFRBQkxFIGlzIHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2luc2VydGluZyBkYXRhIHRvIHVubG9n Z2VkIHRhYmxlIGlzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgSUYgTk9UIEVYSVNUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgZGF0 YSB0byBhIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5P VCBFWElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRlIGEgdGFibGUKKyMgd2hlbiB3ZSBo YXZlIHRoZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlciBpbiBhZHZhbmNlLCBhbmQgaWYgd2Ugc3Vj Y2VlZAorIyBpbiByZXBsaWNhdGluZyBjaGFuZ2VzLikKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU UyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3Jl YXRlIGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZlIHRoZSB0YWJsZSBvbiB0aGUgcHVibGlzaGVyLCBi dXQgbm90IG9uIHRoZSBzdWJzY3JpYmVyLikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAo aWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBD UkVBVEUgVEFCTEUgd2l0aCBjb2xsYXRlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAobmFtZSB0ZXh0IENPTExBVEUgXCJDXCIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBW QUxVRVMgKCdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb2xsYXRpb25fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdI RVJFIHRhYmxlX25hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKEMpLCAnQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3 aXRoIG5hbWVkIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgQ09OU1RSQUlOVCBcIm11c3QgYmUgYmlnZ2Vy IHRoYW4gMTBcIiBDSEVDSyAoaWQgPiAxMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xh dGVzIGNoZWNrIGNvbnN0cmFpbnQgIm11c3QgYmUgYmlnZ2VyIHRoYW4gMTAiLworICBvciBkaWUg ImZhaWxlZCB0byByZXBsaWNhdGUgbmFtZWQgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7 Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCB2YXJpb3VzIHR5cGVzIG9mIGNvbnN0cmFp bnRzLgorIyBOT1QgTlVMTCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgTk9UIE5VTEwp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7 IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRl cnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG51 bGwgdmFsdWUgaW4gY29sdW1uICJuYW1lIiBvZiByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBub3Qt bnVsbCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgbm9uIG51bGwg Y29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgTlVMTCBjb25zdHJhaW50Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50LCBuYW1lIHRleHQgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5hbWUgSVMgTlVMTCBGUk9NIHRtcDsi KTsKK2lzKCRyZXN1bHQsIHFxKHQpLCAiQ1JFQVRFIFRBQkxFIHdpdGggTlVMTCBjb25zdHJhaW50 IHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcCIpOworCisjIENIRUNLIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIHByb2R1Y3Rf YW1lIHRleHQsIHByaWNlIGludCBDSEVDSyAocHJpY2UgPiAwKSk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJywgLTEwMCk7IiwKKwkJ CQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJ CQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cg Zm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9wcmljZV9j aGVjayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBDSEVDSyBjb25zdHJhaW50IjsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKworIyBERUZBVUxUCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgREVGQVVMVCAnZm9vJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIG5hbWUgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShmb28pLCAiQ1JFQVRFIFRBQkxF IHdpdGggZGVmYXVsdCB2YWx1ZSByZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBVTklRVUUgY29uc3RyYWlu dAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAgKGlkIGludCBVTklRVUUpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0 ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9pZF9rZXkiLworICBvciBkaWUgImZhaWxlZCB0byBy ZXBsaWNhdGUgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgUFJJTUFSWSBL RVkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwg J2JhcicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+ IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJS T1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBf cGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBwcmltYXJ5IGtleSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgRVhDTFVERQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBjaXJjbGVzIChjIGNpcmNsZSwgRVhDTFVERSBVU0lO RyBnaXN0IChjIFdJVEggJiYpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+Jzo6Y2lyY2xl KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVT ICgnPCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhj bHVzaW9uIGNvbnN0cmFpbnQgImNpcmNsZXNfY19leGNsIi8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIEVYQ0xVREUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgY2lyY2xlcyIpOworCisjIFJFRkVSRU5D RVMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg cHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1Y3QgVkFMVUVTICgx LCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gcHJvZHVjdCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBpbnQg UFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50IFJFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKSIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gb3JkZXJzIFZBTFVFUyAoMSwgMTAp IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRl cnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGlu c2VydCBvciB1cGRhdGUgb24gdGFibGUgIm9yZGVycyIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29u c3RyYWludCAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBSRUZFUkVOQ0VTIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIG9yZGVycyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgcHJvZHVjdCIpOworCisjIERF RkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJh YmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERB VEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBz aG91bGQgZmFpbCBmb3IgSU5JVElBTExZIElNTUVESUFURSh0aGUgZGVmYXVsdCkKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRF IEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKyksIG9uX2Vycm9yX3N0b3AgPT4gMCwg c3RkZXJyID0+IFwkc3RkZXJyLCBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJS T1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBf cGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBERUZFUlJBQkxFIGF0IGNyZWF0 aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcDsiKTsKKworIyBOT1QgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBO T1QgREVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRl cnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+ IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQg InRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIE5PVCBERUZFUlJBQkxF IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBERUZFUlJBQkxFIGFuZCBJTklUSUFMTFkgREVG RVJSRUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQs IG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sg Y2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1 dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIHN1Y2NlZWQgZm9yIElOSVRJQUxMWSBERUZFUlJFRAorJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUg dG1wIFNFVCBpZCA9IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXIn KTsKK0RFTEVURSBGUk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSB3aXRoIHRhYmxlIGNvbnN0cmFpbnQKKyMgV2Ugd2lsbCBzZXQgdHdv IGNoZWNrcyBhbmQgY29uZHVjdCB0d28gaW5zZXJ0cyB0aGF0IHNob3VsZCBmYWlsIHJlc3BlY3Rp dmVseS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBU QUJMRSB0bXAgKHByaWNlIGludCwgZGlzY291bnRlZF9wcmljZSBpbnQsIENIRUNLIChkaXNjb3Vu dGVkX3ByaWNlID4gMCBBTkQgcHJpY2UgPiBkaXNjb3VudGVkX3ByaWNlKSk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxMDAsIDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoZmlyc3QgY29u ZGl0aW9uKSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICg1MCwgMTAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKHNlY29uZCBjb25kaXRpb24p IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBXSVRIIHN0cm9y YWdlX3BhcmFtZXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDgwKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZWxvcHRpb25zIEZST00g cGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0bXAnOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZG91dCA9fiAve2ZpbGxmYWN0b3I9ODB9LworICBvciBkaWUgImZhaWxlZCB0 byByZXBsaWNhdGUgc3RvcmFnZSBvcHRpb24iOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMo JHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgd2l0aCBzdG9yYWdlX3BhcmFtZXRlciByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgVEFCTEVTUEFDRSAoY3JlYXRpbmcg YSB0YWJsZXNwYWNlIGlzIG5vdCByZXBsaWNhdGVkKQorIyBQcmVwYXJlIHRoZSBkaXJlY3Rvcmll cyBmb3IgdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBmaXJzdC4KK215ICgkYmFzZWRpciwg JHRhYmxlc3BhY2VfZGlyKTsKKworJGJhc2VkaXIgPSAkbm9kZV9wdWJsaXNoZXItPmJhc2VkaXI7 CiskdGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3B1YiI7Citta2RpcigkdGFibGVz cGFjZV9kaXIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRVNQQUNFIG15dGJsc3BjIExPQ0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworJGJh c2VkaXIgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2VfZGlyID0gIiRi YXNlZGlyL3RibHNwY19zdWIiOworbWtkaXIgKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRVNQQUNFIG15dGJsc3Bj IExPQ0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBUQUJMRVNQQUNFIG15 dGJsc3BjOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgVEFCTEVTUEFDRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVFlQRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU WVBFIG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFnZSBpbnQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDEsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRB QkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVFlQRSBteXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBFTlVNIFRZUEUKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteWVudW10 eXBlIEFTIEVOVU0gKCduZXcnLCAnb3BlbicsICdjbG9zZWQnKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChzdGF0dXMgbXllbnVtdHlwZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoJ25ldycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShuZXcpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBteWVudW10eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgUkFOR0UgVFlQRQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIGZsb2F0 OF9yYW5nZSBBUyBSQU5HRSAoc3VidHlwZSA9IGZsb2F0OCwgc3VidHlwZV9kaWZmID0gZmxvYXQ4 bWkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHZh bCBmbG9hdDhfcmFuZ2UpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgImluc2VydCBpbnRvIHRtcCB2YWx1ZXMoZmxvYXQ4X3JhbmdlKC0xMi4zNCwgJzEuMTExMTEz ZTMnKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg KiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKFstMTIuMzQsMTExMS4xMTNcKSksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGZsb2F0OF9yYW5nZSIpOworCisjIFRlc3QgQ1JFQVRFIEJB U0UgREFUQSBUWVBFIGFuZCB1c2UgaXQgaW4gdGFibGUgZGVmaW5pdGlvbgorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorQ1JFQVRFIFRZUEUgaW50NDI7CitDUkVBVEUg RlVOQ1RJT04gaW50NDJfaW4oY3N0cmluZykKKyAgIFJFVFVSTlMgaW50NDIKKyAgIEFTICdpbnQ0 aW4nCisgICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIEZVTkNU SU9OIGludDQyX291dChpbnQ0MikKKyAgIFJFVFVSTlMgY3N0cmluZworICAgQVMgJ2ludDRvdXQn CisgICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIFRZUEUgaW50 NDIgKAorICAgaW50ZXJuYWxsZW5ndGggPSA0LAorICAgaW5wdXQgPSBpbnQ0Ml9pbiwKKyAgIG91 dHB1dCA9IGludDQyX291dCwKKyAgIGFsaWdubWVudCA9IGludDQsCisgICBkZWZhdWx0ID0gNDIs CisgICBwYXNzZWRieXZhbHVlCispOworQ1JFQVRFIFRBQkxFIHRtcCAoZjEgaW50NDIpOworSU5T RVJUIElOVE8gdG1wIERFRkFVTFQgVkFMVUVTOworIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDQy KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgaW50NDIgY2FzY2FkZSIpOworCitwYXNzICJE REwgcmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmliZXItPnN0b3A7 Ciskbm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCA1OTYyZDYxOTU4Li43MTFiNTU0Njk4IDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtNTU5LDYgKzU1OSw3IEBAIERlZkVsZW1BY3Rpb24KIERlZmF1bHRBQ0xJ bmZvCiBEZWZpbmVTdG10CiBEZWxldGVTdG10CitEZXBhcnNlZENvbW1hbmRUeXBlCiBEZXBlbmRl bmN5R2VuZXJhdG9yCiBEZXBlbmRlbmN5R2VuZXJhdG9yRGF0YQogRGVwZW5kZW5jeVR5cGUKQEAg LTE0MzksNiArMTQ0MCw4IEBAIExvZ2ljYWxEZWNvZGVCZWdpblByZXBhcmVDQgogTG9naWNhbERl Y29kZUNoYW5nZUNCCiBMb2dpY2FsRGVjb2RlQ29tbWl0Q0IKIExvZ2ljYWxEZWNvZGVDb21taXRQ cmVwYXJlZENCCitMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCCitMb2dpY2FsRGVjb2RlU3RyZWFt RERMTWVzc2FnZUNCCiBMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQgogTG9naWNhbERlY29k ZUZpbHRlclByZXBhcmVDQgogTG9naWNhbERlY29kZU1lc3NhZ2VDQgpAQCAtMjI5Myw2ICsyMjk2 LDggQEAgUmVvcmRlckJ1ZmZlckNoYW5nZQogUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUKIFJlb3Jk ZXJCdWZmZXJDb21taXRDQgogUmVvcmRlckJ1ZmZlckNvbW1pdFByZXBhcmVkQ0IKK1Jlb3JkZXJC dWZmZXJERExNZXNzYWdlQ0IKK1Jlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0IKIFJlb3Jk ZXJCdWZmZXJEaXNrQ2hhbmdlCiBSZW9yZGVyQnVmZmVySXRlclRYTkVudHJ5CiBSZW9yZGVyQnVm ZmVySXRlclRYTlN0YXRlCkBAIC0zNTkzLDYgKzM1OTgsNyBAQCBwdGhyZWFkX211dGV4X3QKIHB0 aHJlYWRfb25jZV90CiBwdGhyZWFkX3QKIHB0cmRpZmZfdAorcHVibGljYXRpb25fcmVsCiBwdWxs X3Zhcl9jbGF1c2VfY29udGV4dAogcHVsbF92YXJhdHRub3NfY29udGV4dAogcHVsbF92YXJub3Nf Y29udGV4dAotLSAKMi4zNC4xCgo= --000000000000ebc24105f21f6934 Content-Type: text/x-patch; charset="US-ASCII"; name="v61-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v61-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcu581u36 RnJvbSBiYzBkMTZkM2E2YTZhYWJhODBkZDVlODdiZjRmZjM1OGMzNzg5OGQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFNhdCwgNyBKYW4gMjAyMyAwMDo0MDoyNCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjYx IDcvN10gRG9jdW1lbnQgRERMIHJlcGxpY2F0aW9uIGFuZCBEREwgZGVwYXJzZXIuCgotLS0KIGRv Yy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgfCAxMDU1ICsrKysrKysrKysrKysr KysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMDU1IGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21s L2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCA1NGY0OGJlODdmLi4yMzBlOGQ3YWMyIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE0MzcsNiArMTQzNywxMDYx IEBAIHRlc3Rfc3ViPSMgU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBpZDsKIAogIDwvc2VjdDE+ CiAKKyA8c2VjdDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tZGRsIj4KKyAgPHRpdGxlPkRETCBS ZXBsaWNhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgIERhdGEgRGVmaW5pdGlvbiBDb21tYW5k cyAoRERMcykgY2FuIGJlIHJlcGxpY2F0ZWQgdXNpbmcgbG9naWNhbCByZXBsaWNhdGlvbi4KKyAg ICBXaGlsZSBlbmFibGVkIHRoaXMgZmVhdHVyZSBhdXRvbWF0aWNhbGx5IHJlcGxpY2F0ZXMgc3Vw cG9ydGVkIERETCBjb21tYW5kcworICAgIHRoYXQgYXJlIHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBv biBhIHB1Ymxpc2hlciB0byBhIHN1YnNjcmliZXIuIFRoaXMgaXMKKyAgICBlc3BlY2lhbGx5IHVz ZWZ1bCBpZiB5b3UgaGF2ZSBsb3RzIHNjaGVtYSBjaGFuZ2VzIG92ZXIgdGltZSB0aGF0IG5lZWQg cmVwbGljYXRpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBGb3IgZXhhbXBsZSwgd2hl biBlbmFibGVkIGEgQ1JFQVRFIFRBQkxFIGNvbW1hbmQgZXhlY3V0ZWQgb24gdGhlIHB1Ymxpc2hl ciBnZXRzCisgICAgV0FMLWxvZ2dlZCwgYW5kIGZvcndhcmRlZCB0byB0aGUgc3Vic2NyaWJlciB0 byByZXBsYXk7IGEgc3Vic2VxdWVudCAiQUxURVIKKyAgICBTVUJTQ1JJUFRJT04gLi4uIFJFRlJF U0ggUFVCTElDQVRJT04iIGlzIHJ1biBvbiB0aGUgc3Vic2NyaWVyIGRhdGFiYXNlIHNvIGFueQor ICAgIGZvbGxvd2luZyBETUwgY2hhbmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNh dGVkIHdpdGhvdXQgYSBoaXRjaC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIERETCByZXBs aWNhdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBpdCBjYW4gYmUgZW5hYmxlZCBhdCBkaWZm ZXJlbnQgbGV2ZWxzCisgICAgdXNpbmcgdGhlIGRkbCBQVUJMSUNBVElPTiBvcHRpb24uIFRoaXMg b3B0aW9uIGN1cnJlbnRseSBoYXMgdHdvIGxldmVscyBhbmQgYXJlCisgICAgb25seSBhbGxvd2Vk IHRvIGJlIHNldCBpZiB0aGUgUFVCTElDQVRJT04gaXMgRk9SIEFMTCBUQUJMRVMuCisgIDwvcGFy YT4KKworICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAg ICAgICBhbGw6IHRoaXMgb3B0aW9uIGVuYWJsZXMgcmVwbGljYXRpb24gb2YgYWxsIHN1cHBvcnRl ZCBEREwgY29tbWFuZHMuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKworICAgIDxs aXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICB0YWJsZTogdGhpcyBvcHRpb24gZW5hYmxl cyByZXBsaWNhdGlvbiBvZiBUYWJsZSBEREwgY29tbWFuZHMsCisgICAgICAgIHdoaWNoIGluY2x1 ZGU6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENSRUFURS9BTFRFUi9EUk9QIFRBQkxFCisgICAg ICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBDUkVBVEUgVEFCTEUgQVMK KyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgIDwv aXRlbWl6ZWRsaXN0PgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6 ZWRsaXN0PgorCisgIDxzZWN0MiBpZD0iZGRsLXJlcGxpY2F0aW9uLW9wdGlvbi1leGFtcGxlcyI+ CisgICAgPHRpdGxlPkV4YW1wbGVzIC0gU2V0dXAgRERMIFJlcGxpY2F0aW9uIG9uIHRoZSBQdWJs aXNoZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBDcmVhdGUgYSBuZXcgcHVibGljYXRp b24gd2l0aCBhbGwgZGRsIHJlcGxpY2F0aW9uIGVuYWJsZWQ6Cis8cHJvZ3JhbWxpc3Rpbmc+CitD UkVBVEUgUFVCTElDQVRJT04gbXlwdWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAoZGRsID0gJ2FsbCcp OworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEVuYWJsZSB0 YWJsZSBkZGwgcmVwbGljYXRpb24gZm9yIGFuIGV4aXN0aW5nIFB1YmxpY2F0aW9uOgorPHByb2dy YW1saXN0aW5nPgorQUxURVIgUFVCTElDQVRJT04gbXlwdWIgU0VUIChkZGwgPSAndGFibGUnKTsK KzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJk ZGwtcmVwbGljYXRpb24tc3VwcG9ydGVkLWNvbW1hbmRzIj4KKyAgICA8dGl0bGU+U3VwcG9ydGVk IERETCBjb21tYW5kczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBEREwgY29tbWFu ZHMgc3VwcG9ydGVkIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIGFyZSBsaXN0ZWQgaW4gdGhlIGZv bGxvd2luZworICAgICAgbWF0cml4LiBOb3RlIHRoYXQgZ2xvYmFsIGNvbW1hbmRzIGNhbiBiZSBl eGVjdXRlZCBhdCBhbnkgZGF0YWJhc2UgYW5kIGFyZSBjdXJyZW50bHkKKyAgICAgIG5vdCBzdXBw b3J0ZWQgZm9yIHJlcGxpY2F0aW9uLCBnbG9iYWwgY29tbWFuZHMgaW5jbHVkZSBST0xFIHN0YXRl bWVudHMsIERhdGFiYXNlCisgICAgICBzdGF0ZW1lbnRzLCBUYWJsZVNwYWNlIHN0YXRlbWVudHMg YW5kIHNvbWUgb2YgdGhlIEdyYW50U3RtdC9SZXZva2VTdG10IGlmIHRoZSB0YXJnZXQKKyAgICAg IG9iamVjdCBpcyBhIGdsb2JhbCBvYmplY3QuCisgICAgPC9wYXJhPgorCisgICAgPHRhYmxlIGlk PSJkZGwtcmVwbGljYXRpb24tYnktY29tbWFuZC10YWciPgorICAgICAgPHRpdGxlPkRETCBSZXBs aWNhdGlvbiBTdXBwb3J0IGJ5IENvbW1hbmQgVGFnPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29s cz0iMyI+CisgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSIyKiIvPgor ICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wyIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgICAg PGNvbHNwZWMgY29sbmFtZT0iY29sMyIgY29sd2lkdGg9IjEqIi8+CisgICAgICA8dGhlYWQ+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PkNvbW1hbmQgVGFnPC9lbnRyeT4KKyAgICAgICAg PGVudHJ5PkZvciBSZXBsaWNhdGlvbjwvZW50cnk+CisgICAgICAgIDxlbnRyeT5Ob3RlczwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQUdHUkVH QVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkFMVEVSIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQ09MTEFUSU9OPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIENPTlZFUlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgREFUQUJBU0U8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+QUxURVIgREVGQVVMVCBQUklWSUxFR0VTPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIERPTUFJ TjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBFVkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEVYVEVO U0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5B TFRFUiBGT1JFSUdOIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEZVTkNUSU9OPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIElOREVYPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIExBTkdVQUdFPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IExBUkdFIE9CSkVDVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5BTFRFUiBPUEVSQVRPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUiBDTEFTUzwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUE9MSUNZPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIFBST0NFRFVSRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQVUJMSUNBVElPTjwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5BTFRFUiBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFJPVVRJTkU8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+QUxURVIgUlVMRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0NIRU1BPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNFUlZFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBTVEFU SVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNVQlNDUklQVElPTjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBT WVNURU08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEFCTEVTUEFD RTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVYVCBTRUFS Q0ggUEFSU0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIFRSQU5TRk9STTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUUklHR0VSPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIFRZUEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVVNFUiBNQVBQSU5HPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFM VEVSIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+QU5BTFlaRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5CRUdJTjwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5DQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkNIRUNLUE9JTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0xPU0U8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+Q0xPU0UgQ1VSU09SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNMT1NFIENVUlNPUiBBTEw8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ Q0xVU1RFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5DT01NRU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPTU1JVDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5DT01NSVQgUFJFUEFSRUQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09QWTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT1BZIEZST008 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIEFDQ0VTUyBNRVRIT0Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEFHR1JF R0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ09MTEFUSU9O PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBDT05TVFJBSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT05WRVJT SU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBEQVRBQkFTRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRE9NQUlO PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBFVkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBFWFRF TlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkNSRUFURSBGT1JFSUdOIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBGVU5DVElPTjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DUkVBVEUgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIExBTkdVQUdFPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkNSRUFURSBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgT1BFUkFUT1I8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q1JFQVRFIE9QRVJBVE9SIENMQVNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBPUEVSQVRP UiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFBPTElDWTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUFJP Q0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBQVUJMSUNBVElPTjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUg Uk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUlVMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0NIRU1BPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkNSRUFURSBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0VSVkVSPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNSRUFURSBTVEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTVUJTQ1JJUFRJT048 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUQUJMRSBBUzwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DUkVBVEUgVEFCTEVTUEFDRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0gg Q09ORklHVVJBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBU RVhUIFNFQVJDSCBURU1QTEFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVFJBTlNGT1JNPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkNSRUFURSBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUWVBFPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNS RUFURSBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFZJRVc8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+REVB TExPQ0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUFMTE9DQVRFIEFMTDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUNMQVJFIENV UlNPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E SVNDQVJEIEFMTDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEIFBMQU5TPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQg U0VRVUVOQ0VTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQgVEVNUDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ETzwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIEFDQ0VTUyBNRVRIT0Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBBR0dSRUdBVEU8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+RFJPUCBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQ09MTEFUSU9OPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgQ09OU1RSQUlOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIENPTlZFUlNJT048L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBEQVRBQkFTRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIERPTUFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEVWRU5U IFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBFWFRFTlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBGT1JF SUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBGVU5DVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag TEFOR1VBR0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIE9QRVJBVE9SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgT1BFUkFUT1IgQ0xBU1M8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBPUEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBPV05FRDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFBPTElDWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFBST0NFRFVSRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFBV QkxJQ0FUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFJPVVRJTkU8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+RFJPUCBSVUxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU0NIRU1BPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRST1AgU0VRVUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTRVJWRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBT VEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU1VCU0NSSVBUSU9OPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag VEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUQUJMRVNQQUNFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEVYVCBT RUFSQ0ggQ09ORklHVVJBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRFWFQgU0VBUkNIIERJQ1RJT05B Ulk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+RFJPUCBURVhUIFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBU RVhUIFNFQVJDSCBURU1QTEFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRSQU5TRk9STTwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUWVBFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVVNF UiBNQVBQSU5HPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5FWEVDVVRFPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkVYUExBSU48L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RkVUQ0g8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+R1JBTlQ8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+R1JBTlQgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5JTVBPUlQgRk9SRUlHTiBTQ0hFTUE8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+SU5TRVJUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkxJU1RFTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5MT0FEPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkxPQ0sgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TUVSR0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TU9WRTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5OT1RJRlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UFJFUEFSRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5QUkVQQVJFIFRSQU5T QUNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPlJFQVNTSUdOIE9XTkVEPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFRlJFU0ggTUFU RVJJQUxJWkVEIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVJTkRFWDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUxFQVNFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPlJFU0VUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFVk9LRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRVZPS0UgUk9M RTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5ST0xMQkFDSzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ST0xMQkFDSyBQUkVQQVJFRDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5TQVZFUE9JTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+U0VDVVJJVFkgTEFCRUw8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ U0VUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPlNFVCBDT05TVFJBSU5UUzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TSE9XPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPlNUQVJUIFRSQU5TQUNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlVOTElTVEVOPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlVQ REFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5WQUNVVU08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgIDwvdGFibGU+Cisg IDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJkZGwtcmVwbGljYXRpb24tZGRsLWRlcGFyc2VyIj4K KyAgICA8dGl0bGU+RERMIERlcGFyc2VyPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBE REwgZGVwYXJzZXIgdXRpbGl0eSBpcyBpbnZva2VkIGR1cmluZyB0aGUgcmVwbGljYXRpb24gb2Yg RERMcy4gVGhlIERETAorICAgICAgZGVwYXJzZXIgaXMgY2FwYWJsZSBvZiBjb252ZXJ0aW5nIGEg RERMIGNvbW1hbmQgaW50byBmb3JtYXR0ZWQgSlNPTiBibG9iLCB3aXRoCisgICAgICB0aGUgbmVj ZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHJlY29uc3RydWN0IHRoZSBEREwgY29tbWFuZHMgYXQgdGhl IGRlc3RpbmF0aW9uLiBUaGUKKyAgICAgIGJlbmVmaXQgb2YgdXNpbmcgdGhlIGRlcGFyc2VyIG91 dHB1dCBjb21wYXJlZCB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJpbmcKKyAgICAgIGluY2x1 ZGVzOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgRXZlcnkgZGF0YWJhc2Ugb2JqZWN0IGluIHRoZSBkZXBhcnNl ZCBvdXRwdXQgaXMgc2NoZW1hLXF1YWxpZmllZCwgc28gdGhhdAorICAgICAgICAgICAgdGhlcmUg YXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdl cy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHN0cnVjdHVyZWQgSlNP TiBhbmQgdGhlIGZvcm1hdHRlZCBvdXRwdXQgbWFrZXMgaXQgcG9zc2libGUgZm9yCisgICAgICAg ICAgICBtYWNoaW5lIGVkaXRpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgc3Vic2NyaWJl ciBpcyBvbiBhIGRpZmZlcmVudAorICAgICAgICAgICAgUEcgdmVyc2lvbiBhbmQgaGFzIGNlcnRh aW4gRERMIHN5bnRheCBkaWZmZXJlbmNlcyB3aGljaCBuZWVkIHRvIGJlCisgICAgICAgICAgICBy ZXNvbHZlZCBiZWZvcmUgYXBwbHkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3Rp dGVtPgorCisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4K KyAgICAgIFRoZSBEREwgZGVwYXJzZXIgZXhwb3NlcyB0d28gU1FMIGZ1bmN0aW9uczoKKyAgICAg IDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgIGRkbF9kZXBhcnNlX3RvX2pzb246IGdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCBm cm9tIGV2ZW50IHRyaWdnZXIsCisgICAgICAgICAgICByZXR1cm5zIGEgSlNPTiByZXByZXNlbnRh dGlvbiBvZiBpdC4gVGhlIGNvbW1hbmQgaXMgZXhwYW5kZWQgZnVsbHkKKyAgICAgICAgICAgIHNv IHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlIGZhY2Ugb2Ygc2VhcmNo X3BhdGgKKyAgICAgICAgICAgIGNoYW5nZXMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgIDxpdGVtaXplZGxpc3Q+ CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kOiBFeHBhbmQgSlNPTiBmb3JtYXQgRERMIGdlbmVyYXRlZCBi eQorICAgICAgICAgICAgZGRsX2RlcGFyc2VfdG9fanNvbiB0byBhIHBsYWluIERETCBjb21tYW5k LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6 ZWRsaXN0PgorICAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKworIDwvc2VjdDE+CisKICA8c2VjdDEg aWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tY29uZmxpY3RzIj4KICAgPHRpdGxlPkNvbmZsaWN0czwv dGl0bGU+CiAKLS0gCjIuMzQuMQoK --000000000000ebc24105f21f6934--