Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vXvxD-009aoy-04 for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Dec 2025 06:33:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vXvxC-00066o-01 for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Dec 2025 06:33:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vXvxA-00066g-3C for pgsql-hackers@lists.postgresql.org; Tue, 23 Dec 2025 06:33:06 +0000 Received: from mail-oi1-x22c.google.com ([2607:f8b0:4864:20::22c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vXvx9-0028lI-2b for pgsql-hackers@lists.postgresql.org; Tue, 23 Dec 2025 06:33:04 +0000 Received: by mail-oi1-x22c.google.com with SMTP id 5614622812f47-4558f9682efso3028094b6e.3 for ; Mon, 22 Dec 2025 22:33:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766471583; x=1767076383; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=DjiW65CjoGFGnNRS+27Bd2Zjj4bTz5fTOQJnFleANMk=; b=j2KJPxV7pQ8qgPUz9EO9hzyzrc9Oee4cKYF1ua5lXifYJjofsr88fqyltFwHBNtBW2 cKv55NX4UAF3b3YobyhCBZV6MxNbiMMFKhmGBFTvtvpEjHF+9YUgzHUEdXY+wS/mt5oL nbFa5alB6Y4oiALxK7g1WaxnGn/MyAfrDDKkpzKYNoTrMH/dMYrTTM0sb1+bbxtyddfG sYCIH+cMCK3ltOA1JJ4aAdD5uUL1u1HvPVSouboPLYb2liKQsQEAAMEKjER4aSTAggh9 wivSWADRpoevYjvlj7NVOe0KVfkOkQ3gG0SUjznbkuJh9cbBfhqQR4ERKLhT06JNVJ0e zP8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766471583; x=1767076383; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=DjiW65CjoGFGnNRS+27Bd2Zjj4bTz5fTOQJnFleANMk=; b=w5bkVzl1KM5DPddA2okOiqJVNEq8I2ZerWuXeVYbpet68fJGzyGVzDP71mvDBGXj2E duqjbEdDXHxRwl4DzsImYKm08Qj+MvRBdFFpOJh32LfEx2ZywEWgZJtH9z0tzHXl2Jmw TRTzIZUeX1Vh3S7GmSNES90Zb+mm9206weubwgBpZ0SsyYDZ6qx8l8i2ORUNo40/HxcZ EAP+x+TUkkqV5ugTLL8wXByr3AvAkJlY1M97TlanmpGJKJUOUdxano4URoy4iT2OTif8 xdxW/f0qTmtW1YldjS83/C2U5tyHa5y4x3qi/oYDz/Jj0vPeC/5/TwaZllmNJy9pDsmy OPpw== X-Forwarded-Encrypted: i=1; AJvYcCVK5avbTXypXfMD7cHN4jeyTafrWXN2it6sTdt2BuKNkUnlilcRJdgN1Cb1LvaeDrUxpnRO84+gaegTxJTc@lists.postgresql.org X-Gm-Message-State: AOJu0YxIa1yoWVPNdZNCBleu60S0fr7oeOwq1eXIVF8dcpq/HJUnOyGl IVHtaEYgrVbflzF7UaN43xqj+dsob85L48RxQUEf75HX9I5TLNTm/GDhTykTReJ0FtvwhGliwwG Uj+I+dXa8HKk+ck4aOlwRNQKUfhZ+a80= X-Gm-Gg: AY/fxX54SU2NeU8v7/K76R6j5rB2O1TTPrWDzusGVtZEv/mFpcePGcqNkDX9xpdSGqL gEfl2J7kwp1bT9gtd3wy+N//K43nDnmpLCgg7JfudpnNhxVhQeL84XaXAE7Cgrho9ZpNl/9/GRe AJ9qLFK/wJrft6MsQT6mwNwa9SqgxvNFPPnIhi8lWG7GXq94svT+QVJqMuCRDBT7mlysomL0PEc Ykbo16zLCiCtggwbsao/DJoGGzphHhXLnheQBw/+WiahvWsZSlLMIODfdpUTNmi6KnBhlOp4A== X-Google-Smtp-Source: AGHT+IEcIeEpyrbyNzfm7DCOagppgXxbsW/BDqS7OGD0rZm2M93naesMSU8fX/t1DRtZKPE6fDw8VAHmdLgsvGy45pc= X-Received: by 2002:a05:6808:1b07:b0:450:760b:cc8d with SMTP id 5614622812f47-457b202f698mr5587609b6e.29.1766471582793; Mon, 22 Dec 2025 22:33:02 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Shlok Kyal Date: Tue, 23 Dec 2025 12:02:49 +0530 X-Gm-Features: AQt7F2pgT_lFFUAvUPRS1yR7TEY7vV6kcSuWBotW8Ld3uzp2ChpvQ0CLJ2t-n2g Message-ID: Subject: Re: Skipping schema changes in publication To: Peter Smith Cc: shveta malik , Amit Kapila , vignesh C , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000032dafc064698b7ae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000032dafc064698b7ae Content-Type: text/plain; charset="UTF-8" On Mon, 22 Dec 2025 at 11:37, Peter Smith wrote: > > Hi Shlok. > > Some review comments for patch v33-0001 (code part) > > ====== > src/backend/catalog/pg_publication.c > > GetPublicationRelationsInternal: > > 1. > Static function names should be snake_case. > > ~~~ > > GetPublicationIncludedRelations: > > 2. > +/* > + * Return the list of relation OIDs for a publication. > + * > + * For a FOR TABLE publication, this returns the list of relations explicitly > + * included in the publication. > + * > + * Publications declared with FOR ALL TABLES or FOR ALL SEQUENCES should use > + * GetAllPublicationRelations() to obtain the complete set of tables covered by > + * the publication. > + */ > +List * > +GetPublicationIncludedRelations(Oid pubid, PublicationPartOpt pub_partopt) > +{ > + Assert(!GetPublication(pubid)->alltables); > + > + return GetPublicationRelationsInternal(pubid, pub_partopt, false); > +} > > Why isn't the Assert also saying something about puballsequences, as > mentioned in the function comment? > I reported a similar kind of issue in HEAD in [1]. As per the latest discussion, I understood that it is ok to call this function for ALL SEQUENCES. I have updated the comment. > ~~~ > > GetAllPublicationRelations: > > 3. > + * root partitioned tables. The list also excludes tables that are > + * explicitly excluded via the EXCEPT TABLE clause of the publication > + * identified by pubid. Neither of these rules applies to FOR ALL SEQUENCES > + * publications. > > 3. > It seems wrong to say "FOR ALL SEQUENCES" ... that seems to assume the > "FOR ALL SEQUENCES" and "FOR ALL TABLES" cannot co-exist. Did you mean > "Neither of ... to published sequences"? > I have modified the comment. > ~ > > 4. > -GetAllPublicationRelations(char relkind, bool pubviaroot) > +GetAllPublicationRelations(Oid pubid, char relkind, bool pubviaroot) > > There are tricky rules about relation vs sequences and the > publish_via_partition_root parameter value. It would be better if you > encapsulate all this within this function. Specifically, it would be > simpler if you passed the 'Publication' arg instead of the pubid. Then > you can get the pubviaroot value from that (within the function) > instead of passing around "fake" values of false when you are looking > at RELKIND_SEQUENCE. > ====== > src/backend/commands/publicationcmds.c > > ObjectsInAllPublicationToOids: > > 5. > + foreach_ptr(PublicationAllObjSpec, puballobj, puballobjspec_list) > + { > + if (puballobj->pubobjtype != PUBLICATION_ALL_TABLES) > + continue; > + > + foreach_ptr(PublicationObjSpec, pubobj, puballobj->except_tables) > + { > + pubobj->pubtable->except = true; > + *rels = lappend(*rels, pubobj->pubtable); > + } > + } > > I think it's tidier to code this like below: > > if (puballobj->pubobjtype == PUBLICATION_ALL_TABLES) > { > foreach_ptr... > } > > ~~~ > > pub_contains_invalid_column: > > 6. > bool > pub_contains_invalid_column(Oid pubid, Relation relation, List *ancestors, > bool pubviaroot, char pubgencols_type, > - bool *invalid_column_list, > - bool *invalid_gen_col) > + bool *invalid_column_list, bool *invalid_gen_col) > > Why does this change even exist at all in this patch? This change is not required. I have reverted it. > > ~~~ > > CreatePublication: > > 7. > + /* > + * If the publication is for ALL TABLES and 'relations' is not empty, it > + * indicates that some relations should be excluded from the publication. > + * Add those excluded relations to the publication with 'prexcept' set to > + * true. Otherwise, 'relations' contains the list of relations to be > + * explicitly included in the publication. > + */ > + if (relations != NIL) > + { > + List *rels; > + > + rels = OpenTableList(relations); > + TransformPubWhereClauses(rels, pstate->p_sourcetext, > + publish_via_partition_root); > + > + CheckPubRelationColumnList(stmt->pubname, rels, > + schemaidlist != NIL, > + publish_via_partition_root); > + > + PublicationAddTables(puboid, rels, true, NULL); > + CloseTableList(rels); > + } > + > > The comment and the code don't match. The comment is talking about > rules for FOR ALL TABLES, but puballtables is not part of any > condition here (??). Was all this supposed to be within the "if > (stmt->for_all_tables)" code block? > For both ALL TABLES publication and non-ALL TABLES publication we need the same code block. Setting of prexcept flag will be handled in PublicationAddTables. This comment clarifies what the list 'relations' would mean for ALL TABLES publication and non-ALL TABLES publication > ====== > src/bin/pg_dump/pg_dump.c > > 8. > - "SELECT tableoid, oid, prpubid, prrelid, " > + "SELECT tableoid, oid, prpubid, prrelid,\n" > "pg_catalog.pg_get_expr(prqual, prrelid) AS prrelqual, " > "(CASE\n" > " WHEN pr.prattrs IS NOT NULL THEN\n" > @@ -4868,6 +4929,9 @@ getPublicationTables(Archive *fout, TableInfo > tblinfo[], int numTables) > " WHERE attrelid = pr.prrelid AND attnum = prattrs[s])\n" > " ELSE NULL END) prattrs " > "FROM pg_catalog.pg_publication_rel pr"); > + if (fout->remoteVersion >= 190000) > + appendPQExpBufferStr(query, " WHERE prexcept = false"); > > 8a > Isn't it better to qualify everything here with the alias 'pr'? > It is an existing code. So I prefer not to modify it in this patch. I have added the alias for the column added by this patch. > ~ > > 8b. > Also "WHERE NOT pr.prexcept;" might be more conssitent with other code > I saw in describe.c > > ====== > src/bin/pg_dump/pg_dump.h > > 9. > PublishGencolsType pubgencols_type; > + SimplePtrList excepttbls; > } PublicationInfo; > > How about "tables instead of "tbls" (e.g. "excepttables" or > "except_tables") here? That would also be more consistent with the > other puballtables member. > > ====== > src/test/regress/sql/publication.sql > > 10. > RESET client_min_messages; > \dRp+ testpub3 > \dRp+ testpub4 > +\dRp+ testpub5 > +\dRp+ testpub6 > +\dRp+ testpub7 > > > I feel it would be better to keep each \dRp+ together with the test it > belongs to, rather than have a bunch of different tests which are then > followed by a bunch of different \dRp+. Note: this same comment > applies to other place of places -- not just here. Check everywhere > you do \dRp+ > I have addressed the remaining comments, did some cosmetic changes and addressed the comment shared by Shveta in [2]. [1]: https://www.postgresql.org/message-id/CAA4eK1+rnjBOvkiQC2r4LuTwuje653iVPPAXcmJZXPpKvsNbOQ@mail.gmail.com [2]: https://www.postgresql.org/message-id/CAJpy0uCf5tXvqyVS3GQzU9J5HdSLAxX6Lxt1UKY4HJ8qnimCAw%40mail.gmail.com Thanks, Shlok Kyal --00000000000032dafc064698b7ae Content-Type: application/octet-stream; name="v34-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v34-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mji7jkce0 RnJvbSA1N2NiNDEwODA5ODkwNzc2NTNlZDMxODU5MTJhY2VkYmU4MTcxYzk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgOSBEZWMgMjAyNSAyMjo0MToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjM0 XSBTa2lwIHB1Ymxpc2hpbmcgdGhlIHRhYmxlcyBzcGVjaWZpZWQgaW4gRVhDRVBUIFRBQkxFLgoK QSBuZXcgIkVYQ0VQVCBUQUJMRSIgY2xhdXNlIGZvciBDUkVBVEUgUFVCTElDQVRJT04gYWxsb3dz IG9uZSBvciBtb3JlCnRhYmxlcyB0byBiZSBleGNsdWRlZC4gVGhlIHB1Ymxpc2hlciB3aWxsIG5v dCBzZW5kIHRoZSBkYXRhIG9mIGV4Y2x1ZGVkCnRhYmxlcyB0byB0aGUgc3Vic2NyaWJlci4KClRo ZSBuZXcgc3ludGF4IGFsbG93cyBzcGVjaWZ5aW5nIGV4Y2x1ZGVkIHJlbGF0aW9ucyB3aGVuIGNy ZWF0aW5nIGEKcHVibGljYXRpb24uIEZvciBleGFtcGxlOgpDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHQxLHQyKTsKCkEgbmV3IGNvbHVtbiAicHJl eGNlcHQiIGlzIGFkZGVkIHRvIHRhYmxlICJwZ19wdWJsaWNhdGlvbl9yZWwiLCB0byBmbGFnCnRo ZSByZWxhdGlvbnMgdGhhdCB0aGUgdXNlciB3YW50cyB0byBleGNsdWRlIGZyb20gdGhlIHB1Ymxp Y2F0aW9ucy4KCnBnX2R1bXAgaXMgdXBkYXRlZCB0byBpZGVudGlmeSBhbmQgZHVtcCB0aGUgZXhj bHVkZWQgdGFibGVzIG9mIHRoZSBwdWJsaWNhdGlvbnMuCgpUaGUgcHNxbCBcZCBmYW1pbHkgb2Yg Y29tbWFuZHMgY2FuIG5vdyBkaXNwbGF5IGV4Y2x1ZGVkIHRhYmxlcy4KCkJ1bXAgY2F0YWxvZyB2 ZXJzaW9uLgotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAg ICB8ICAxMCArCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAg fCAgIDYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgICB8 ICA1NSArKysrLQogZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sICAgICAgICAgICAgICAg IHwgICA4ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgICAg fCAxNTYgKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRz LmMgICAgICAgIHwgMTA2ICsrKysrKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAg ICAgICAgICAgICAgICAgfCAgMzMgKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jICAgfCAgMjIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAg ICAgICAgICAgICAgIHwgIDY0ICsrKysrCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwg ICAgICAgICAgICAgIHwgIDMwICsrKwogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDg3ICsrKysrKy0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4u YyAgICAgICAgICAgICAgICB8ICAxMiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oICAgICAgICAgIHwgIDEzICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uX3JlbC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAg ICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0ICAgICB8ICA3NyArKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9u LnNxbCAgICAgICAgICB8ICAzNCArKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWls ZCAgICAgICAgICAgICB8ICAgMSArCiAuLi4vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxl LnBsICAgICAgICAgfCAyMTkgKysrKysrKysrKysrKysrKysrCiAyMiBmaWxlcyBjaGFuZ2VkLCA4 NTEgaW5zZXJ0aW9ucygrKSwgMTEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRh bG9ncy5zZ21sCmluZGV4IDJmYzYzNDQyOTgwLi45ZTg0NzE1MmI0NCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwK QEAgLTY1ODEsNiArNjU4MSwxNiBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRl cmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICAgICAgaWYg dGhlcmUgaXMgbm8gcHVibGljYXRpb24gcXVhbGlmeWluZyBjb25kaXRpb24uPC9wYXJhPjwvZW50 cnk+CiAgICAgIDwvcm93PgogCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxv Z190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgPHN0 cnVjdGZpZWxkPnByZXhjZXB0PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAg IDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRydWUgaWYgdGhlIHJlbGF0aW9uIGlzIGV4 Y2x1ZGVkIGZyb20gdGhlIHB1YmxpY2F0aW9uLiBTZWUKKyAgICAgICA8bGluayBsaW5rZW5kPSJz cWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1zLWZvci1leGNlcHQtdGFibGUiPjxsaXRlcmFsPkVY Q0VQVCBUQUJMRTwvbGl0ZXJhbD48L2xpbms+LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAg IDwvcm93PgorCiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9l bnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVs ZD5wcmF0dHJzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50MnZlY3RvcjwvdHlwZT4KZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwv bG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IGIzZmFhYTY3NWVmLi5iYTQ1NGI3OGNiYyAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCkBAIC0xMTYsNyArMTE2LDExIEBA CiAgICA8bGl0ZXJhbD5GT1IgVEFCTEVTIElOIFNDSEVNQTwvbGl0ZXJhbD4sIDxsaXRlcmFsPkZP UiBBTEwgVEFCTEVTPC9saXRlcmFsPiwKICAgIG9yIDxsaXRlcmFsPkZPUiBBTEwgU0VRVUVOQ0VT PC9saXRlcmFsPi4gVW5saWtlIHRhYmxlcywgc2VxdWVuY2VzIGNhbiBiZQogICAgc3luY2hyb25p emVkIGF0IGFueSB0aW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCi0gICA8eHJlZiBsaW5r ZW5kPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXNlcXVlbmNlcyIvPi4KKyAgIDx4cmVmIGxpbmtlbmQ9 ImxvZ2ljYWwtcmVwbGljYXRpb24tc2VxdWVuY2VzIi8+LiBXaGVuIGEgcHVibGljYXRpb24gaXMK KyAgIGNyZWF0ZWQgd2l0aCA8bGl0ZXJhbD5GT1IgQUxMIFRBQkxFUzwvbGl0ZXJhbD4sIHRhYmxl cyBjYW4gYmUgZXhwbGljaXRseQorICAgZXhjbHVkZWQgZnJvbSBwdWJsaWNhdGlvbiB1c2luZyB0 aGUKKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJhbXMtZm9yLWV4 Y2VwdC10YWJsZSI+PGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPjwvbGluaz4KKyAgIGNs YXVzZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfcHVibGljYXRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1Ymxp Y2F0aW9uLnNnbWwKaW5kZXggNzVhNTA4YmViZmEuLjc3YmNhMjFjZTkyIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTMyLDEyICszMiwxNiBAQCBDUkVBVEUg UFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2Vh YmxlPgogCiA8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGlj YXRpb25fYWxsX29iamVjdDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIAotICAg IEFMTCBUQUJMRVMKKyAgICBBTEwgVEFCTEVTIFsgRVhDRVBUIFsgVEFCTEUgXSAoIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leGNlcHRfdGFibGVfb2JqZWN0PC9yZXBsYWNlYWJsZT4g WywgLi4uIF0gKSBdCiAgICAgQUxMIFNFUVVFTkNFUwogCiA8cGhyYXNlPmFuZCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfYW5kX2NvbHVtbnM8L3JlcGxhY2VhYmxlPiBpczo8 L3BocmFzZT4KIAogICAgIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50 YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkgXSBbIFdIRVJFICgg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiAp IF0KKworPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4Y2VwdF90 YWJsZV9vYmplY3Q8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworICAgIFsgT05MWSBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAq IF0KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApAQCAtMTY0LDcgKzE2OCw4IEBA IENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwv cmVwbGFjZWFibGU+CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIE1hcmtzIHRo ZSBwdWJsaWNhdGlvbiBhcyBvbmUgdGhhdCByZXBsaWNhdGVzIGNoYW5nZXMgZm9yIGFsbCB0YWJs ZXMgaW4KLSAgICAgIHRoZSBkYXRhYmFzZSwgaW5jbHVkaW5nIHRhYmxlcyBjcmVhdGVkIGluIHRo ZSBmdXR1cmUuCisgICAgICB0aGUgZGF0YWJhc2UsIGluY2x1ZGluZyB0YWJsZXMgY3JlYXRlZCBp biB0aGUgZnV0dXJlLiBUYWJsZXMgbGlzdGVkIGluCisgICAgICBFWENFUFQgVEFCTEUgYXJlIGV4 Y2x1ZGVkIGZyb20gdGhlIHB1YmxpY2F0aW9uLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRl bT4KICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtMTg0LDYgKzE4OSwzNSBAQCBDUkVBVEUgUFVCTElD QVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgog ICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeSBp ZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3ItZXhjZXB0LXRhYmxlIj4KKyAgICA8 dGVybT48bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBUaGlzIGNsYXVzZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHRh YmxlcyB0byBiZSBleGNsdWRlZCBmcm9tIHRoZQorICAgICAgcHVibGljYXRpb24uCisgICAgIDwv cGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBGb3IgaW5oZXJpdGVkIHRhYmxlcywgaWYgPGxpdGVy YWw+T05MWTwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkIGJlZm9yZSB0aGUKKyAgICAgIHRhYmxlIG5h bWUsIG9ubHkgdGhhdCB0YWJsZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gSWYK KyAgICAgIDxsaXRlcmFsPk9OTFk8L2xpdGVyYWw+IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSB0YWJs ZSBhbmQgYWxsIGl0cyBkZXNjZW5kYW50CisgICAgICB0YWJsZXMgKGlmIGFueSkgYXJlIGV4Y2x1 ZGVkLiBPcHRpb25hbGx5LCA8bGl0ZXJhbD4qPC9saXRlcmFsPiBjYW4gYmUKKyAgICAgIHNwZWNp ZmllZCBhZnRlciB0aGUgdGFibGUgbmFtZSB0byBleHBsaWNpdGx5IGluZGljYXRlIHRoYXQgZGVz Y2VuZGFudAorICAgICAgdGFibGVzIGFyZSBleGNsdWRlZC4gVGhpcyBkb2VzIG5vdCBhcHBseSB0 byBhIHBhcnRpdGlvbmVkIHRhYmxlLCBob3dldmVyLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJh PgorICAgICAgRm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgd2hlbiA8bGl0ZXJhbD5wdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdDwvbGl0ZXJhbD4KKyAgICAgIGlzIHNldCB0byA8bGl0ZXJhbD50cnVl PC9saXRlcmFsPiwgc3BlY2lmeWluZyBhIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgaW4KKyAgICAg IDxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJhbD4gZXhjbHVkZXMgaXQgYW5kIGFsbCBpdHMg cGFydGl0aW9ucyBmcm9tCisgICAgICByZXBsaWNhdGlvbi4gU3BlY2lmeWluZyBhIGxlYWYgcGFy dGl0aW9uIGhhcyBubyBlZmZlY3QsIGFzIGl0cyBjaGFuZ2VzIGFyZQorICAgICAgc3RpbGwgcmVw bGljYXRlZCB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUuIFdoZW4KKyAgICAgIDxsaXRl cmFsPnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PC9saXRlcmFsPiBpcyBzZXQgdG8KKyAgICAg IDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPiwgc3BlY2lmeWluZyBhIHJvb3QgcGFydGl0aW9uZWQg dGFibGUgaGFzIG5vCisgICAgICBlZmZlY3QsIGFzIGNoYW5nZXMgYXJlIHJlcGxpY2F0ZWQgdmlh IHRoZSBsZWFmIHBhcnRpdGlvbnMuIFNwZWNpZnlpbmcgYQorICAgICAgbGVhZiBwYXJ0aXRpb24g ZXhjbHVkZXMgb25seSB0aGF0IHBhcnRpdGlvbiBmcm9tIHJlcGxpY2F0aW9uLgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVu dHJ5IGlkPSJzcWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1zLXdpdGgiPgogICAgIDx0ZXJtPjxs aXRlcmFsPldJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25f cGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICk8L2xpdGVyYWw+PC90ZXJtPgogICAgIDxs aXN0aXRlbT4KQEAgLTQ4Nyw2ICs1MjEsMjMgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIGFsbF9zZXF1 ZW5jZXMgRk9SIEFMTCBTRVFVRU5DRVM7CiAgICBhbGwgc2VxdWVuY2VzIGZvciBzeW5jaHJvbml6 YXRpb246CiA8cHJvZ3JhbWxpc3Rpbmc+CiBDUkVBVEUgUFVCTElDQVRJT04gYWxsX3RhYmxlc19z ZXF1ZW5jZXMgRk9SIEFMTCBUQUJMRVMsIEFMTCBTRVFVRU5DRVM7Cis8L3Byb2dyYW1saXN0aW5n PgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IHB1 Ymxpc2hlcyBhbGwgY2hhbmdlcyBpbiBhbGwgdGFibGVzIGV4Y2VwdAorICAgPHN0cnVjdG5hbWU+ dXNlcnM8L3N0cnVjdG5hbWU+IGFuZCA8c3RydWN0bmFtZT5kZXBhcnRtZW50czwvc3RydWN0bmFt ZT46Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgUFVCTElDQVRJT04gYWxsX3RhYmxlc19leGNl cHQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh1c2VycywgZGVwYXJ0bWVudHMpOworPC9wcm9ncmFt bGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQ3JlYXRlIGEgcHVibGljYXRpb24g dGhhdCBwdWJsaXNoZXMgYWxsIHNlcXVlbmNlcyBmb3Igc3luY2hyb25pemF0aW9uLCBhbmQKKyAg IGFsbCBjaGFuZ2VzIGluIGFsbCB0YWJsZXMgZXhjZXB0IDxzdHJ1Y3RuYW1lPnVzZXJzPC9zdHJ1 Y3RuYW1lPiBhbmQKKyAgIDxzdHJ1Y3RuYW1lPmRlcGFydG1lbnRzPC9zdHJ1Y3RuYW1lPjoKKzxw cm9ncmFtbGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiBhbGxfc2VxdWVuY2VzX3RhYmxlc19l eGNlcHQgRk9SIEFMTCBTRVFVRU5DRVMsIEFMTCBUQUJMRVMgRVhDRVBUICh1c2VycywgZGVwYXJ0 bWVudHMpOwogPC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L3BzcWwtcmVmLnNnbWwKaW5kZXggZjU2YzcwMjYzZTAuLmM4ZmNiMTI2YzhiIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sCkBAIC0xMzAxLDcgKzEzMDEsOCBAQCBTRUxFQ1QgJDEgXHBhcnNlIHN0bXQx CiAgICAgICAgIHNwZWNpYWwgYXR0cmlidXRlcyBzdWNoIGFzIDxsaXRlcmFsPk5PVCBOVUxMPC9s aXRlcmFsPiBvciBkZWZhdWx0cy4KICAgICAgICAgQXNzb2NpYXRlZCBpbmRleGVzLCBjb25zdHJh aW50cywgcnVsZXMsIGFuZCB0cmlnZ2VycyBhcmUKICAgICAgICAgYWxzbyBzaG93bi4gIEZvciBm b3JlaWduIHRhYmxlcywgdGhlIGFzc29jaWF0ZWQgZm9yZWlnbgotICAgICAgICBzZXJ2ZXIgaXMg c2hvd24gYXMgd2VsbC4KKyAgICAgICAgc2VydmVyIGlzIHNob3duIGFzIHdlbGwuIEZvciBhIHRh YmxlLCB0aGUgYXNzb2NpYXRlZCBwdWJsaWNhdGlvbnMgYW5kCisgICAgICAgIHRoZSBwdWJsaWNh dGlvbnMgZnJvbSB3aGljaCB0aGUgdGFibGUgaXMgZXhjbHVkZWQgYXJlIGFsc28gc2hvd24uCiAg ICAgICAgICg8cXVvdGU+TWF0Y2hpbmcgdGhlIHBhdHRlcm48L3F1b3RlPiBpcyBkZWZpbmVkIGlu CiAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+IGJlbG93LikKICAg ICAgICAgPC9wYXJhPgpAQCAtMjEwMyw4ICsyMTA0LDkgQEAgU0VMRUNUICQxIFxwYXJzZSBzdG10 MQogICAgICAgICBsaXN0ZWQuCiAgICAgICAgIElmIDxsaXRlcmFsPng8L2xpdGVyYWw+IGlzIGFw cGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIHRoZSByZXN1bHRzCiAgICAgICAgIGFyZSBkaXNw bGF5ZWQgaW4gZXhwYW5kZWQgbW9kZS4KLSAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJhbD4g aXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgdGhlIHRhYmxlcyBhbmQKLSAgICAgICAg c2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwdWJsaWNhdGlvbiBhcmUgc2hvd24gYXMgd2Vs bC4KKyAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNv bW1hbmQgbmFtZSwgdGhlIHRhYmxlcywKKyAgICAgICAgZXhjbHVkZWQgdGFibGVzLCBhbmQgc2No ZW1hcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwdWJsaWNhdGlvbiBhcmUgc2hvd24KKyAgICAgICAg YXMgd2VsbC4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92 YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggN2FhM2Yx Nzk5MjQuLmM5MmZmOTI4ODc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBA IC0zNjYsMTEgKzM2NiwyNSBAQCBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBw dWJvaWQsIExpc3QgKmFuY2VzdG9ycywgaW50ICphbmNlc3Rvcl9sZXZlbAogCWZvcmVhY2gobGMs IGFuY2VzdG9ycykKIAl7CiAJCU9pZAkJCWFuY2VzdG9yID0gbGZpcnN0X29pZChsYyk7Ci0JCUxp c3QJICAgKmFwdWJpZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3Rvcik7CisJCUxp c3QJICAgKmFwdWJpZHMgPSBOSUw7CisJCUxpc3QJICAgKmFleGNlcHRwdWJpZHMgPSBOSUw7CiAJ CUxpc3QJICAgKmFzY2hlbWFQdWJpZHMgPSBOSUw7CiAKKwkJR2V0UmVsYXRpb25QdWJsaWNhdGlv bnMoYW5jZXN0b3IsICZhcHViaWRzLCAmYWV4Y2VwdHB1Ymlkcyk7CisKIAkJbGV2ZWwrKzsKIAor CQkvKgorCQkgKiBUaGlzIHN0ZXAgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIGtl cHQgdG8gYWxsb3cgc2tpcHBpbmcKKwkJICogdGhlIGFuY2VzdG9yIGlmIGl0IGlzIHBhcnQgb2Yg dGhlIHB1YmxpY2F0aW9uJ3MgRVhDRVBUIFRBQkxFIGxpc3QsCisJCSAqIGF2b2lkaW5nIGFuIGV4 cGVuc2l2ZSBzY2hlbWEtbWFwcGluZyBjaGVjayBsYXRlci4KKwkJICovCisJCWlmIChsaXN0X21l bWJlcl9vaWQoYWV4Y2VwdHB1YmlkcywgcHVib2lkKSkKKwkJeworCQkJbGlzdF9mcmVlKGFleGNl cHRwdWJpZHMpOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAobGlzdF9tZW1iZXJfb2lkKGFw dWJpZHMsIHB1Ym9pZCkpCiAJCXsKIAkJCXRvcG1vc3RfcmVsaWQgPSBhbmNlc3RvcjsKQEAgLTM5 MSw2ICs0MDUsNyBAQCBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBwdWJvaWQs IExpc3QgKmFuY2VzdG9ycywgaW50ICphbmNlc3Rvcl9sZXZlbAogCQl9CiAKIAkJbGlzdF9mcmVl KGFwdWJpZHMpOworCQlsaXN0X2ZyZWUoYWV4Y2VwdHB1Ymlkcyk7CiAJCWxpc3RfZnJlZShhc2No ZW1hUHViaWRzKTsKIAl9CiAKQEAgLTQ2Niw2ICs0ODEsMjYgQEAgcHVibGljYXRpb25fYWRkX3Jl bGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCBwdWItPm5hbWUpKSk7CiAJfQogCisJLyoKKwkg KiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBwYXJ0aXRpb24gaXMgZXhjbHVkZWQgYnkgRVhDRVBU IFRBQkxFIHdoaWxlCisJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLgorCSAq LworCWlmIChwdWItPmFsbHRhYmxlcyAmJiBwdWItPnB1YnZpYXJvb3QgJiYgcHJpLT5leGNlcHQg JiYKKwkJdGFyZ2V0cmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJKGVycm1zZygicGFydGl0aW9uIFwiJXNcIiBtaWdodCBiZSByZXBsaWNhdGVkIGFz IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCAidHJ1ZSIpKSk7CisKKwkvKgorCSAqIEhhbmRsZSB0 aGUgY2FzZSB3aGVyZSBhIHBhcnRpdGlvbmVkIHRhYmxlIGlzIGV4Y2x1ZGVkIGJ5IEVYQ0VQVCBU QUJMRQorCSAqIHdoaWxlIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UuCisJICov CisJaWYgKHB1Yi0+YWxsdGFibGVzICYmICFwdWItPnB1YnZpYXJvb3QgJiYgcHJpLT5leGNlcHQg JiYKKwkJdGFyZ2V0cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSkKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coInBhcnRpdGlvbmVkIHRhYmxl IFwiJXNcIiBtaWdodCBiZSByZXBsaWNhdGVkIGFzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IGlzIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCAi ZmFsc2UiKSkpOworCiAJY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJlbCk7 CiAKIAkvKiBWYWxpZGF0ZSBhbmQgdHJhbnNsYXRlIGNvbHVtbiBuYW1lcyBpbnRvIGEgQml0bWFw c2V0IG9mIGF0dG51bXMuICovCkBAIC00ODIsNiArNTE3LDggQEAgcHVibGljYXRpb25fYWRkX3Jl bGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJCU9iamVjdElkR2V0 RGF0dW0ocHViaWQpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnJlbGlkIC0g MV0gPQogCQlPYmplY3RJZEdldERhdHVtKHJlbGlkKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNh dGlvbl9yZWxfcHJleGNlcHQgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwcmktPmV4Y2VwdCk7CiAK IAkvKiBBZGQgcXVhbGlmaWNhdGlvbnMsIGlmIGF2YWlsYWJsZSAqLwogCWlmIChwcmktPndoZXJl Q2xhdXNlICE9IE5VTEwpCkBAIC03NDksMzggKzc4Niw1OCBAQCBwdWJsaWNhdGlvbl9hZGRfc2No ZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLCBib29sIGlmX25vdF9leGlzdHMpCiAJcmV0dXJu IG15c2VsZjsKIH0KIAotLyogR2V0cyBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgZm9yIGEgcmVs YXRpb24gKi8KLUxpc3QgKgotR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlkKQorLyoK KyAqIEdldCB0aGUgbGlzdCBvZiBwdWJsaWNhdGlvbiBvaWRzIGFzc29jaWF0ZWQgd2l0aCBhIHNw ZWNpZmllZCByZWxhdGlvbi4KKyAqCisgKiBQYXJhbWV0ZXIgJ3B1YmlkcycgcmV0dXJucyB0aGUg T0lEcyBvZiB0aGUgcHVibGljYXRpb25zIHRoZSByZWxhdGlvbiBpcyBwYXJ0CisgKiBvZi4gUGFy YW1ldGVyICdleGNlcHRfcHViaWRzJyByZXR1cm5zIHRoZSBPSURzIG9mIHB1YmxpY2F0aW9ucyB0 aGUgcmVsYXRpb24KKyAqIGlzIGV4Y2x1ZGVkIGZyb20uCisgKgorICogVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRydWUgaWYgdGhlIHJlbGF0aW9uIGlzIHBhcnQgb2YgYW55IHB1YmxpY2F0aW9uLgor ICovCitib29sCitHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVsaWQsIExpc3QgKipwdWJp ZHMsIExpc3QgKipleGNlcHRfcHViaWRzKQogewotCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKIAlD YXRDTGlzdCAgICpwdWJyZWxsaXN0OwotCWludAkJCWk7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsK IAogCS8qIEZpbmQgYWxsIHB1YmxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGF0aW9u LiAqLwogCXB1YnJlbGxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKFBVQkxJQ0FUSU9OUkVMTUFQ LAogCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKLQlmb3IgKGkgPSAwOyBpIDwg cHVicmVsbGlzdC0+bl9tZW1iZXJzOyBpKyspCisJZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJyZWxs aXN0LT5uX21lbWJlcnM7IGkrKykKIAl7CiAJCUhlYXBUdXBsZQl0dXAgPSAmcHVicmVsbGlzdC0+ bWVtYmVyc1tpXS0+dHVwbGU7Ci0JCU9pZAkJCXB1YmlkID0gKChGb3JtX3BnX3B1YmxpY2F0aW9u X3JlbCkgR0VUU1RSVUNUKHR1cCkpLT5wcnB1YmlkOworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3Jl bCBwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOworCQlP aWQJCQlwdWJpZCA9IHB1YnJlbC0+cHJwdWJpZDsKIAotCQlyZXN1bHQgPSBsYXBwZW5kX29pZChy ZXN1bHQsIHB1YmlkKTsKKwkJaWYgKHB1YnJlbC0+cHJleGNlcHQpCisJCXsKKwkJCWlmIChleGNl cHRfcHViaWRzKQorCQkJCSpleGNlcHRfcHViaWRzID0gbGFwcGVuZF9vaWQoKmV4Y2VwdF9wdWJp ZHMsIHB1YmlkKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwdWJpZHMpCisJCQkJKnB1Ymlk cyA9IGxhcHBlbmRfb2lkKCpwdWJpZHMsIHB1YmlkKTsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJfQog CX0KIAogCVJlbGVhc2VTeXNDYWNoZUxpc3QocHVicmVsbGlzdCk7CiAKLQlyZXR1cm4gcmVzdWx0 OworCXJldHVybiBmb3VuZDsKIH0KIAogLyoKLSAqIEdldHMgbGlzdCBvZiByZWxhdGlvbiBvaWRz IGZvciBhIHB1YmxpY2F0aW9uLgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsaXN0 IG9mIHJlbGF0aW9uIE9JRHMgZm9yIGEgcHVibGljYXRpb24uCiAgKgotICogVGhpcyBzaG91bGQg b25seSBiZSB1c2VkIEZPUiBUQUJMRSBwdWJsaWNhdGlvbnMsIHRoZSBGT1IgQUxMIFRBQkxFUy9T RVFVRU5DRVMKLSAqIHNob3VsZCB1c2UgR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoKS4KKyAq IElmIGV4Y2VwdF9mbGFnIGlzIHRydWUsIHJldHVybnMgdGhlIGxpc3Qgb2YgcmVsYXRpb25zIGV4 Y2x1ZGVkIGZyb20gdGhlCisgKiBwdWJsaWNhdGlvbjsgb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBs aXN0IG9mIHJlbGF0aW9ucyBpbmNsdWRlZCBpbiB0aGUKKyAqIHB1YmxpY2F0aW9uLgogICovCi1M aXN0ICoKLUdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0 T3B0IHB1Yl9wYXJ0b3B0KQorc3RhdGljIExpc3QgKgorZ2V0X3B1YmxpY2F0aW9uX3JlbGF0aW9u c19pbnRlcm5hbChPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKKwkJ CQkJCQkJICAgYm9vbCBleGNlcHRfZmxhZykKIHsKIAlMaXN0CSAgICpyZXN1bHQ7CiAJUmVsYXRp b24JcHVicmVsc3JlbDsKQEAgLTgwNSw4ICs4NjIsMTAgQEAgR2V0UHVibGljYXRpb25SZWxhdGlv bnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCiAJCUZvcm1fcGdf cHVibGljYXRpb25fcmVsIHB1YnJlbDsKIAogCQlwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlv bl9yZWwpIEdFVFNUUlVDVCh0dXApOwotCQlyZXN1bHQgPSBHZXRQdWJQYXJ0aXRpb25PcHRpb25S ZWxhdGlvbnMocmVzdWx0LCBwdWJfcGFydG9wdCwKLQkJCQkJCQkJCQkJCXB1YnJlbC0+cHJyZWxp ZCk7CisKKwkJaWYgKGV4Y2VwdF9mbGFnID09IHB1YnJlbC0+cHJleGNlcHQpCisJCQlyZXN1bHQg PSBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMocmVzdWx0LCBwdWJfcGFydG9wdCwKKwkJ CQkJCQkJCQkJCQlwdWJyZWwtPnBycmVsaWQpOwogCX0KIAogCXN5c3RhYmxlX2VuZHNjYW4oc2Nh bik7CkBAIC04MTksNiArODc4LDM2IEBAIEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJp ZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQogCXJldHVybiByZXN1bHQ7CiB9CiAK Ky8qCisgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBmb3IgYSBwdWJsaWNhdGlv bi4KKyAqCisgKiBGb3IgYSBGT1IgVEFCTEUgcHVibGljYXRpb24sIHRoaXMgcmV0dXJucyB0aGUg bGlzdCBvZiByZWxhdGlvbnMgZXhwbGljaXRseQorICogaW5jbHVkZWQgaW4gdGhlIHB1YmxpY2F0 aW9uLgorICoKKyAqIFB1YmxpY2F0aW9ucyBkZWNsYXJlZCB3aXRoIEZPUiBBTEwgVEFCTEVTIHNo b3VsZCB1c2UKKyAqIEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKCkgdG8gb2J0YWluIHRoZSBj b21wbGV0ZSBzZXQgb2YgdGFibGVzIGNvdmVyZWQgYnkKKyAqIHRoZSBwdWJsaWNhdGlvbi4KKyAq LworTGlzdCAqCitHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVi bGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQoreworCUFzc2VydCghR2V0UHVibGljYXRpb24o cHViaWQpLT5hbGx0YWJsZXMpOworCisJcmV0dXJuIGdldF9wdWJsaWNhdGlvbl9yZWxhdGlvbnNf aW50ZXJuYWwocHViaWQsIHB1Yl9wYXJ0b3B0LCBmYWxzZSk7Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIGxpc3Qgb2YgcmVsYXRpb24gT0lEcyBleGNsdWRlZCBmcm9tIGEgcHVibGljYXRpb24uCisg KiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb25z LgorICovCitMaXN0ICoKK0dldFB1YmxpY2F0aW9uRXhjbHVkZWRSZWxhdGlvbnMoT2lkIHB1Ymlk LCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCit7CisJQXNzZXJ0KEdldFB1YmxpY2F0 aW9uKHB1YmlkKS0+YWxsdGFibGVzKTsKKworCXJldHVybiBnZXRfcHVibGljYXRpb25fcmVsYXRp b25zX2ludGVybmFsKHB1YmlkLCBwdWJfcGFydG9wdCwgdHJ1ZSk7Cit9CisKIC8qCiAgKiBHZXRz IGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBmb3IgcHVibGljYXRpb25zIG1hcmtlZCBhcyBGT1Ig QUxMIFRBQkxFUy4KICAqLwpAQCAtODY0LDE4ICs5NTMsMjkgQEAgR2V0QWxsVGFibGVzUHVibGlj YXRpb25zKHZvaWQpCiAgKiBwYXJ0aXRpb25lZCB0YWJsZXMsIHdlIG11c3QgZXhjbHVkZSBwYXJ0 aXRpb25zIGluIGZhdm9yIG9mIGluY2x1ZGluZyB0aGUKICAqIHJvb3QgcGFydGl0aW9uZWQgdGFi bGVzLiBUaGlzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIEZPUiBBTEwgU0VRVUVOQ0VTCiAgKiBwdWJs aWNhdGlvbi4KKyAqCisgKiBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiwgdGhlIGxpc3QgZXhj bHVkZXMgdGhlIHRhYmxlcyB0aGF0IGFyZSBleHBsaWNpdGx5CisgKiBtZW50aW9uZWQgaW4gRVhD RVBUIFRBQkxFIGNsYXVzZS4KICAqLwogTGlzdCAqCi1HZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9u cyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCkKK0dldEFsbFB1YmxpY2F0aW9uUmVsYXRp b25zKFB1YmxpY2F0aW9uICpwdWIsIGNoYXIgcmVsa2luZCkKIHsKIAlSZWxhdGlvbgljbGFzc1Jl bDsKIAlTY2FuS2V5RGF0YSBrZXlbMV07CiAJVGFibGVTY2FuRGVzYyBzY2FuOwogCUhlYXBUdXBs ZQl0dXBsZTsKIAlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisJTGlzdAkgICAqZXhjZXB0bGlzdCA9 IE5JTDsKKwlib29sCQlwdWJ2aWFyb290ID0gcHViLT5wdWJ2aWFyb290OworCU9pZAkJCXB1Ymlk ID0gcHViLT5vaWQ7CiAKIAlBc3NlcnQoIShyZWxraW5kID09IFJFTEtJTkRfU0VRVUVOQ0UgJiYg cHVidmlhcm9vdCkpOwogCisJaWYgKHJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTikKKwkJZXhj ZXB0bGlzdCA9IEdldFB1YmxpY2F0aW9uRXhjbHVkZWRSZWxhdGlvbnMocHViaWQsIHB1YnZpYXJv b3QgPworCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0FMTCA6CisJCQkJCQkJCQkJCQkJ IFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisKIAljbGFzc1JlbCA9IHRhYmxlX29wZW4oUmVsYXRp b25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJU2NhbktleUluaXQoJmtleVswXSwK QEAgLTg5MSw3ICs5OTEsOCBAQCBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtp bmQsIGJvb2wgcHVidmlhcm9vdCkKIAkJT2lkCQkJcmVsaWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJ aWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNzKHJlbGlkLCByZWxGb3JtKSAmJgotCQkJIShyZWxGb3Jt LT5yZWxpc3BhcnRpdGlvbiAmJiBwdWJ2aWFyb290KSkKKwkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0 aXRpb24gJiYgcHVidmlhcm9vdCkgJiYKKwkJCSFsaXN0X21lbWJlcl9vaWQoZXhjZXB0bGlzdCwg cmVsaWQpKQogCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJfQogCkBA IC05MTIsNyArMTAxMyw4IEBAIEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKGNoYXIgcmVsa2lu ZCwgYm9vbCBwdWJ2aWFyb290KQogCQkJT2lkCQkJcmVsaWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJ CWlmIChpc19wdWJsaXNoYWJsZV9jbGFzcyhyZWxpZCwgcmVsRm9ybSkgJiYKLQkJCQkhcmVsRm9y bS0+cmVsaXNwYXJ0aXRpb24pCisJCQkJIXJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmCisJCQkJ IWxpc3RfbWVtYmVyX29pZChleGNlcHRsaXN0LCByZWxpZCkpCiAJCQkJcmVzdWx0ID0gbGFwcGVu ZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJCX0KIApAQCAtMTE2OCwxNyArMTI3MCwxNyBAQCBwZ19n ZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkgKiB0aG9zZS4gT3Ro ZXJ3aXNlLCBnZXQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGl0c2VsZi4KIAkJCSAqLwogCQkJaWYg KHB1Yl9lbGVtLT5hbGx0YWJsZXMpCi0JCQkJcHViX2VsZW1fdGFibGVzID0gR2V0QWxsUHVibGlj YXRpb25SZWxhdGlvbnMoUkVMS0lORF9SRUxBVElPTiwKLQkJCQkJCQkJCQkJCQkJCSBwdWJfZWxl bS0+cHVidmlhcm9vdCk7CisJCQkJcHViX2VsZW1fdGFibGVzID0gR2V0QWxsUHVibGljYXRpb25S ZWxhdGlvbnMocHViX2VsZW0sCisJCQkJCQkJCQkJCQkJCQkgUkVMS0lORF9SRUxBVElPTik7CiAJ CQllbHNlCiAJCQl7CiAJCQkJTGlzdAkgICAqcmVsaWRzLAogCQkJCQkJICAgKnNjaGVtYXJlbGlk czsKIAotCQkJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQs Ci0JCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3QgPwotCQkJCQkJCQkJCQkJIFBVQkxJ Q0FUSU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9MRUFGKTsK KwkJCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1Yl9lbGVtLT5v aWQsCisJCQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCA/CisJCQkJCQkJCQkJCQkJ CSBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFS VF9MRUFGKTsKIAkJCQlzY2hlbWFyZWxpZHMgPSBHZXRBbGxTY2hlbWFQdWJsaWNhdGlvblJlbGF0 aW9ucyhwdWJfZWxlbS0+b2lkLAogCQkJCQkJCQkJCQkJCQkJCXB1Yl9lbGVtLT5wdWJ2aWFyb290 ID8KIAkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgpAQCAtMTM2Nyw3ICsx NDY5LDcgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNlcyhQR19GVU5DVElPTl9BUkdTKQog CQlwdWJsaWNhdGlvbiA9IEdldFB1YmxpY2F0aW9uQnlOYW1lKHB1Ym5hbWUsIGZhbHNlKTsKIAog CQlpZiAocHVibGljYXRpb24tPmFsbHNlcXVlbmNlcykKLQkJCXNlcXVlbmNlcyA9IEdldEFsbFB1 YmxpY2F0aW9uUmVsYXRpb25zKFJFTEtJTkRfU0VRVUVOQ0UsIGZhbHNlKTsKKwkJCXNlcXVlbmNl cyA9IEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmxpY2F0aW9uLCBSRUxLSU5EX1NFUVVF TkNFKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzZXF1ZW5jZXM7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggYTE5ODM1MDg5NTAuLjg0YTNkOTVlYThhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMTcwLDYgKzE3MCwzMCBA QCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAl9CiB9CiAK Ky8qCisgKiBDb252ZXJ0IHRoZSBQdWJsaWNhdGlvbk9ialNwZWMgbGlzdCB3aGljaCBpcyBwYXJ0 IG9mCisgKiBQdWJsaWNhdGlvbkFsbE9ialNwZWNUeXBlIGxpc3QgaW50byBQdWJsaWNhdGlvblRh YmxlIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitPYmplY3RzSW5BbGxQdWJsaWNhdGlvblRvT2lk cyhMaXN0ICpwdWJhbGxvYmpzcGVjX2xpc3QsCisJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUs IExpc3QgKipyZWxzKQoreworCWlmICghcHViYWxsb2Jqc3BlY19saXN0KQorCQlyZXR1cm47CisK Kwlmb3JlYWNoX3B0cihQdWJsaWNhdGlvbkFsbE9ialNwZWMsIHB1YmFsbG9iaiwgcHViYWxsb2Jq c3BlY19saXN0KQorCXsKKwkJaWYgKHB1YmFsbG9iai0+cHVib2JqdHlwZSA9PSBQVUJMSUNBVElP Tl9BTExfVEFCTEVTKQorCQl7CisJCQlmb3JlYWNoX3B0cihQdWJsaWNhdGlvbk9ialNwZWMsIHB1 Ym9iaiwgcHViYWxsb2JqLT5leGNlcHRfdGFibGVzKQorCQkJeworCQkJCXB1Ym9iai0+cHVidGFi bGUtPmV4Y2VwdCA9IHRydWU7CisJCQkJKnJlbHMgPSBsYXBwZW5kKCpyZWxzLCBwdWJvYmotPnB1 YnRhYmxlKTsKKwkJCX0KKwkJfQorCX0KK30KKwogLyoKICAqIENvbnZlcnQgdGhlIFB1YmxpY2F0 aW9uT2JqU3BlY1R5cGUgbGlzdCBpbnRvIHNjaGVtYSBvaWQgbGlzdCBhbmQKICAqIFB1YmxpY2F0 aW9uVGFibGUgbGlzdC4KQEAgLTE5Myw3ICsyMTcsMTIgQEAgT2JqZWN0c0luUHVibGljYXRpb25U b09pZHMoTGlzdCAqcHVib2Jqc3BlY19saXN0LCBQYXJzZVN0YXRlICpwc3RhdGUsCiAKIAkJc3dp dGNoIChwdWJvYmotPnB1Ym9ianR5cGUpCiAJCXsKKwkJCWNhc2UgUFVCTElDQVRJT05PQkpfRVhD RVBUX1RBQkxFOgorCQkJCXB1Ym9iai0+cHVidGFibGUtPmV4Y2VwdCA9IHRydWU7CisJCQkJKnJl bHMgPSBsYXBwZW5kKCpyZWxzLCBwdWJvYmotPnB1YnRhYmxlKTsKKwkJCQlicmVhazsKIAkJCWNh c2UgUFVCTElDQVRJT05PQkpfVEFCTEU6CisJCQkJcHVib2JqLT5wdWJ0YWJsZS0+ZXhjZXB0ID0g ZmFsc2U7CiAJCQkJKnJlbHMgPSBsYXBwZW5kKCpyZWxzLCBwdWJvYmotPnB1YnRhYmxlKTsKIAkJ CQlicmVhazsKIAkJCWNhc2UgUFVCTElDQVRJT05PQkpfVEFCTEVTX0lOX1NDSEVNQToKQEAgLTUx NCw4ICs1NDMsOCBAQCBJbnZhbGlkYXRlUHViUmVsU3luY0NhY2hlKE9pZCBwdWJpZCwgYm9vbCBw dWJhbGx0YWJsZXMpCiAJCSAqIGEgdGFyZ2V0LiBIb3dldmVyLCBXQUwgcmVjb3JkcyBmb3IgVFJV TkNBVEUgc3BlY2lmeSBib3RoIGEgcm9vdCBhbmQKIAkJICogaXRzIGxlYXZlcy4KIAkJICovCi0J CXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAotCQkJCQkJCQkJCSBQVUJM SUNBVElPTl9QQVJUX0FMTCk7CisJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxh dGlvbnMocHViaWQsCisJCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9BTEwpOwogCQlzY2hl bWFyZWxpZHMgPSBHZXRBbGxTY2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJpZCwKIAkJCQkJ CQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9BTEwpOwogCkBAIC05MjUsMTQgKzk1NCw4IEBAIENy ZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10 ICpzdG10KQogCiAJLyogQXNzb2NpYXRlIG9iamVjdHMgd2l0aCB0aGUgcHVibGljYXRpb24uICov CiAJaWYgKHN0bXQtPmZvcl9hbGxfdGFibGVzKQotCXsKLQkJLyoKLQkJICogSW52YWxpZGF0ZSBy ZWxjYWNoZSBzbyB0aGF0IHB1YmxpY2F0aW9uIGluZm8gaXMgcmVidWlsdC4gU2VxdWVuY2VzCi0J CSAqIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcmVxdWlyZSBpbnZhbGlkYXRpb24sIGFzIHJlcGxpY2Eg aWRlbnRpdHkKLQkJICogY2hlY2tzIGRvbid0IGFwcGx5IHRvIHRoZW0uCi0JCSAqLwotCQlDYWNo ZUludmFsaWRhdGVSZWxjYWNoZUFsbCgpOwotCX0KKwkJT2JqZWN0c0luQWxsUHVibGljYXRpb25U b09pZHMoc3RtdC0+cHVib2JqZWN0cywgcHN0YXRlLCAmcmVsYXRpb25zKTsKKwogCWVsc2UgaWYg KCFzdG10LT5mb3JfYWxsX3NlcXVlbmNlcykKIAl7CiAJCU9iamVjdHNJblB1YmxpY2F0aW9uVG9P aWRzKHN0bXQtPnB1Ym9iamVjdHMsIHBzdGF0ZSwgJnJlbGF0aW9ucywKQEAgLTk0NCwyMiArOTY3 LDYgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNh dGlvblN0bXQgKnN0bXQpCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklM RUdFKSwKIAkJCQkJZXJybXNnKCJtdXN0IGJlIHN1cGVydXNlciB0byBjcmVhdGUgRk9SIFRBQkxF UyBJTiBTQ0hFTUEgcHVibGljYXRpb24iKSk7CiAKLQkJaWYgKHJlbGF0aW9ucyAhPSBOSUwpCi0J CXsKLQkJCUxpc3QJICAgKnJlbHM7Ci0KLQkJCXJlbHMgPSBPcGVuVGFibGVMaXN0KHJlbGF0aW9u cyk7Ci0JCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCi0JCQkJCQkJCQkgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwotCi0JCQlDaGVja1B1 YlJlbGF0aW9uQ29sdW1uTGlzdChzdG10LT5wdWJuYW1lLCByZWxzLAotCQkJCQkJCQkJICAgc2No ZW1haWRsaXN0ICE9IE5JTCwKLQkJCQkJCQkJCSAgIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKLQotCQkJUHVibGljYXRpb25BZGRUYWJsZXMocHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsK LQkJCUNsb3NlVGFibGVMaXN0KHJlbHMpOwotCQl9Ci0KIAkJaWYgKHNjaGVtYWlkbGlzdCAhPSBO SUwpCiAJCXsKIAkJCS8qCkBAIC05NzEsOCArOTc4LDM3IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQog CisJLyoKKwkgKiBJZiB0aGUgcHVibGljYXRpb24gaXMgZm9yIEFMTCBUQUJMRVMgYW5kICdyZWxh dGlvbnMnIGlzIG5vdCBlbXB0eSwgaXQKKwkgKiBpbmRpY2F0ZXMgdGhhdCBzb21lIHJlbGF0aW9u cyBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uCisJICogQWRkIHRob3Nl IGV4Y2x1ZGVkIHJlbGF0aW9ucyB0byB0aGUgcHVibGljYXRpb24gd2l0aCAncHJleGNlcHQnIHNl dCB0bworCSAqIHRydWUuIE90aGVyd2lzZSwgJ3JlbGF0aW9ucycgY29udGFpbnMgdGhlIGxpc3Qg b2YgcmVsYXRpb25zIHRvIGJlCisJICogZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgcHVibGlj YXRpb24uCisJICovCisJaWYgKHJlbGF0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpyZWxz OworCisJCXJlbHMgPSBPcGVuVGFibGVMaXN0KHJlbGF0aW9ucyk7CisJCVRyYW5zZm9ybVB1Yldo ZXJlQ2xhdXNlcyhyZWxzLCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJCQkJCQkJIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290KTsKKworCQlDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChzdG10 LT5wdWJuYW1lLCByZWxzLAorCQkJCQkJCQkgICBzY2hlbWFpZGxpc3QgIT0gTklMLAorCQkJCQkJ CQkgICBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisKKwkJUHVibGljYXRpb25BZGRUYWJs ZXMocHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKKwkJQ2xvc2VUYWJsZUxpc3QocmVscyk7CisJ fQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCWlmIChzdG10LT5m b3JfYWxsX3RhYmxlcykKKwl7CisJCS8qIEludmFsaWRhdGUgcmVsY2FjaGUgc28gdGhhdCBwdWJs aWNhdGlvbiBpbmZvIGlzIHJlYnVpbHQuICovCisJCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQWxs KCk7CisJfQorCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlv bklkLCBwdWJvaWQsIDApOwogCiAJaWYgKHdhbF9sZXZlbCAhPSBXQUxfTEVWRUxfTE9HSUNBTCkK QEAgLTEwNDAsOCArMTA3Niw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCUxvY2tEYXRhYmFzZU9iamVj dChQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1YmZvcm0tPm9pZCwgMCwKIAkJCQkJCSAgIEFjY2Vz c1NoYXJlTG9jayk7CiAKLQkJcm9vdF9yZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhw dWJmb3JtLT5vaWQsCi0JCQkJCQkJCQkJCSAgUFVCTElDQVRJT05fUEFSVF9ST09UKTsKKwkJcm9v dF9yZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwK KwkJCQkJCQkJCQkJCQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAKIAkJZm9yZWFjaChsYywg cm9vdF9yZWxpZHMpCiAJCXsKQEAgLTExNjAsOCArMTE5Niw4IEBAIEFsdGVyUHVibGljYXRpb25P cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJ CSAqIHRyZWVzLCBub3QganVzdCB0aG9zZSBleHBsaWNpdGx5IG1lbnRpb25lZCBpbiB0aGUgcHVi bGljYXRpb24uCiAJCSAqLwogCQlpZiAocm9vdF9yZWxpZHMgPT0gTklMKQotCQkJcmVsaWRzID0g R2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLAotCQkJCQkJCQkJCQkgUFVCTElD QVRJT05fUEFSVF9BTEwpOworCQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0 aW9ucyhwdWJmb3JtLT5vaWQsCisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsK IAkJZWxzZQogCQl7CiAJCQkvKgpAQCAtMTI0Niw4ICsxMjgyLDggQEAgQWx0ZXJQdWJsaWNhdGlv blRhYmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJUHVi bGljYXRpb25Ecm9wVGFibGVzKHB1YmlkLCByZWxzLCBmYWxzZSk7CiAJZWxzZQkJCQkJCS8qIEFQ X1NldE9iamVjdHMgKi8KIAl7Ci0JCUxpc3QJICAgKm9sZHJlbGlkcyA9IEdldFB1YmxpY2F0aW9u UmVsYXRpb25zKHB1YmlkLAotCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JPT1QpOwor CQlMaXN0CSAgICpvbGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1 YmlkLAorCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAJCUxpc3QJICAg KmRlbHJlbHMgPSBOSUw7CiAJCUxpc3RDZWxsICAgKm9sZGxjOwogCkBAIC0xMzQ4LDYgKzEzODQs NyBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBI ZWFwVHVwbGUgdHVwLAogCQkJCW9sZHJlbCA9IHBhbGxvY19vYmplY3QoUHVibGljYXRpb25SZWxJ bmZvKTsKIAkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVMTDsKIAkJCQlvbGRyZWwtPmNvbHVt bnMgPSBOSUw7CisJCQkJb2xkcmVsLT5leGNlcHQgPSBmYWxzZTsKIAkJCQlvbGRyZWwtPnJlbGF0 aW9uID0gdGFibGVfb3BlbihvbGRyZWxpZCwKIAkJCQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOwogCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRlbHJlbHMsIG9sZHJlbCk7CkBAIC0x Mzk4LDcgKzE0MzUsOCBAQCBBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1YmxpY2F0aW9u U3RtdCAqc3RtdCwKIAkJTGlzdENlbGwgICAqbGM7CiAJCUxpc3QJICAgKnJlbG9pZHM7CiAKLQkJ cmVsb2lkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwgUFVCTElDQVRJ T05fUEFSVF9ST09UKTsKKwkJcmVsb2lkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlv bnMocHViZm9ybS0+b2lkLAorCQkJCQkJCQkJCQkJICBQVUJMSUNBVElPTl9QQVJUX1JPT1QpOwog CiAJCWZvcmVhY2gobGMsIHJlbG9pZHMpCiAJCXsKQEAgLTE3NjEsNiArMTc5OSw3IEBAIE9wZW5U YWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsLT5yZWxhdGlvbiA9IHJlbDsKIAkJcHVi X3JlbC0+d2hlcmVDbGF1c2UgPSB0LT53aGVyZUNsYXVzZTsKIAkJcHViX3JlbC0+Y29sdW1ucyA9 IHQtPmNvbHVtbnM7CisJCXB1Yl9yZWwtPmV4Y2VwdCA9IHQtPmV4Y2VwdDsKIAkJcmVscyA9IGxh cHBlbmQocmVscywgcHViX3JlbCk7CiAJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgbXly ZWxpZCk7CiAKQEAgLTE4MzMsNiArMTg3Miw3IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVz KQogCiAJCQkJLyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxpc3QgZnJvbSBwYXJlbnQgKi8KIAkJ CQlwdWJfcmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKKwkJCQlwdWJfcmVsLT5leGNlcHQgPSB0 LT5leGNlcHQ7CiAJCQkJcmVscyA9IGxhcHBlbmQocmVscywgcHViX3JlbCk7CiAJCQkJcmVsaWRz ID0gbGFwcGVuZF9vaWQocmVsaWRzLCBjaGlsZHJlbGlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwppbmRleCA2YjFhMDBlZDQ3Ny4uM2VhOTVhZTFhMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCkBAIC04Njg3LDcgKzg2ODcsNyBAQCBBVEV4ZWNTZXRFeHByZXNzaW9uKEFsdGVyZWRU YWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLAogCSAqIGV4 cHJlc3Npb25zLgogCSAqLwogCWlmIChhdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRF RF9WSVJUVUFMICYmCi0JCUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQo cmVsKSkgIT0gTklMKQorCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhSZWxhdGlvbkdldFJlbGlk KHJlbCksIE5VTEwsIE5VTEwpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSAvIFNF VCBFWFBSRVNTSU9OIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt bnMgaW4gdGFibGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiIpLApAQCAtMTg4ODIs NyArMTg4ODIsNyBAQCBBVFByZXBDaGFuZ2VQZXJzaXN0ZW5jZShBbHRlcmVkVGFibGVJbmZvICp0 YWIsIFJlbGF0aW9uIHJlbCwgYm9vbCB0b0xvZ2dlZCkKIAkgKiBVTkxPR0dFRCwgYXMgVU5MT0dH RUQgdGFibGVzIGNhbid0IGJlIHB1Ymxpc2hlZC4KIAkgKi8KIAlpZiAoIXRvTG9nZ2VkICYmCi0J CUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSkgIT0gTklMKQor CQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhSZWxhdGlvbkdldFJlbGlkKHJlbCksIE5VTEwsIE5V TEwpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9J Tl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJCSBlcnJtc2coImNhbm5vdCBjaGFuZ2UgdGFibGUg XCIlc1wiIHRvIHVubG9nZ2VkIGJlY2F1c2UgaXQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIiwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55CmluZGV4IDI4ZjRlMTFlMzBmLi5iY2YwYmM1N2FhNCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBA IC00NTUsNiArNDU1LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNo YXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQlUcmlnZ2VyVHJh bnNpdGlvbnMgVHJpZ2dlclJlZmVyZW5jaW5nCiAJCQkJdmFjdXVtX3JlbGF0aW9uX2xpc3Qgb3B0 X3ZhY3V1bV9yZWxhdGlvbl9saXN0CiAJCQkJZHJvcF9vcHRpb25fbGlzdCBwdWJfb2JqX2xpc3Qg cHViX2FsbF9vYmpfdHlwZV9saXN0CisJCQkJcHViX2V4Y2VwdF9vYmpfbGlzdCBvcHRfcHViX2V4 Y2VwdF9jbGF1c2UKIAogJXR5cGUgPHJldGNsYXVzZT4gcmV0dXJuaW5nX2NsYXVzZQogJXR5cGUg PG5vZGU+CXJldHVybmluZ19vcHRpb24KQEAgLTU5Miw2ICs1OTMsNyBAQCBzdGF0aWMgTm9kZSAq bWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9k ZSAqcXVlcnkpOwogJXR5cGUgPG5vZGU+CXZhcl92YWx1ZSB6b25lX3ZhbHVlCiAldHlwZSA8cm9s ZXNwZWM+IGF1dGhfaWRlbnQgUm9sZVNwZWMgb3B0X2dyYW50ZWRfYnkKICV0eXBlIDxwdWJsaWNh dGlvbm9iamVjdHNwZWM+IFB1YmxpY2F0aW9uT2JqU3BlYworJXR5cGUgPHB1YmxpY2F0aW9ub2Jq ZWN0c3BlYz4gUHVibGljYXRpb25FeGNlcHRPYmpTcGVjCiAldHlwZSA8cHVibGljYXRpb25hbGxv YmplY3RzcGVjPiBQdWJsaWNhdGlvbkFsbE9ialNwZWMKIAogJXR5cGUgPGtleXdvcmQ+IHVucmVz ZXJ2ZWRfa2V5d29yZCB0eXBlX2Z1bmNfbmFtZV9rZXl3b3JkCkBAIC0xMDc4Nyw3ICsxMDc4OSw3 IEBAIEFsdGVyT3duZXJTdG10OiBBTFRFUiBBR0dSRUdBVEUgYWdncmVnYXRlX3dpdGhfYXJndHlw ZXMgT1dORVIgVE8gUm9sZVNwZWMKICAqCiAgKiBwdWJfYWxsX29ial90eXBlIGlzIG9uZSBvZjoK ICAqCi0gKgkJVEFCTEVTCisgKgkJVEFCTEVTIFtFWENFUFQgW1RBQkxFXSAoIHRhYmxlIFssIC4u Ll0gKV0KICAqCQlTRVFVRU5DRVMKICAqCiAgKiBDUkVBVEUgUFVCTElDQVRJT04gRk9SIHB1Yl9v YmogWywgLi4uXSBbV0lUSCBvcHRpb25zXQpAQCAtMTA4MTMsNiArMTA4MTUsNyBAQCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQ6CiAJCQkJCUNyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqbiA9IG1ha2VOb2Rl KENyZWF0ZVB1YmxpY2F0aW9uU3RtdCk7CiAKIAkJCQkJbi0+cHVibmFtZSA9ICQzOworCQkJCQlu LT5wdWJvYmplY3RzID0gJDU7CiAJCQkJCXByZXByb2Nlc3NfcHViX2FsbF9vYmp0eXBlX2xpc3Qo JDUsICZuLT5mb3JfYWxsX3RhYmxlcywKIAkJCQkJCQkJCQkJCQkmbi0+Zm9yX2FsbF9zZXF1ZW5j ZXMsCiAJCQkJCQkJCQkJCQkJeXlzY2FubmVyKTsKQEAgLTEwODUzLDYgKzEwODU2LDcgQEAgUHVi bGljYXRpb25PYmpTcGVjOgogCQkJCQkkJC0+cHVidGFibGUtPnJlbGF0aW9uID0gJDI7CiAJCQkJ CSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQzOwogCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xh dXNlID0gJDQ7CisJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOwogCQkJCX0KIAkJCXwgVEFCTEVTIElO X1AgU0NIRU1BIENvbElkCiAJCQkJewpAQCAtMTA5MjgsMTEgKzEwOTMyLDE5IEBAIHB1Yl9vYmpf bGlzdDoJUHVibGljYXRpb25PYmpTcGVjCiAJCQkJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0K IAk7CiAKK29wdF9wdWJfZXhjZXB0X2NsYXVzZToKKwkJCUVYQ0VQVCBvcHRfdGFibGUgJygnIHB1 Yl9leGNlcHRfb2JqX2xpc3QgJyknCXsgJCQgPSAkNDsgfQorCQkJfCAvKkVNUFRZKi8JCQkJCQkJ CQkJeyAkJCA9IE5JTDsgfQorCQk7CisKIFB1YmxpY2F0aW9uQWxsT2JqU3BlYzoKLQkJCQlBTEwg VEFCTEVTCisJCQkJQUxMIFRBQkxFUyBvcHRfcHViX2V4Y2VwdF9jbGF1c2UKIAkJCQkJewogCQkJ CQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbkFsbE9ialNwZWMpOwogCQkJCQkJJCQtPnB1Ym9i anR5cGUgPSBQVUJMSUNBVElPTl9BTExfVEFCTEVTOworCQkJCQkJJCQtPmV4Y2VwdF90YWJsZXMg PSAkMzsKKwkJCQkJCWlmKCQkLT5leGNlcHRfdGFibGVzICE9IE5VTEwpCisJCQkJCQkJcHJlcHJv Y2Vzc19wdWJvYmpfbGlzdCgkJC0+ZXhjZXB0X3RhYmxlcywgeXlzY2FubmVyKTsKIAkJCQkJCSQk LT5sb2NhdGlvbiA9IEAxOwogCQkJCQl9CiAJCQkJfCBBTEwgU0VRVUVOQ0VTCkBAIC0xMDk0OSw2 ICsxMDk2MSwyMyBAQCBwdWJfYWxsX29ial90eXBlX2xpc3Q6CVB1YmxpY2F0aW9uQWxsT2JqU3Bl YwogCQkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CiAJOwogCitQdWJsaWNhdGlvbkV4Y2Vw dE9ialNwZWM6CisJCQkgcmVsYXRpb25fZXhwcgorCQkJCXsKKwkJCQkJJCQgPSBtYWtlTm9kZShQ dWJsaWNhdGlvbk9ialNwZWMpOworCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JK X0VYQ0VQVF9UQUJMRTsKKwkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25U YWJsZSk7CisJCQkJCSQkLT5wdWJ0YWJsZS0+ZXhjZXB0ID0gdHJ1ZTsKKwkJCQkJJCQtPnB1YnRh YmxlLT5yZWxhdGlvbiA9ICQxOworCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKKwkJCQl9CisJOwor CitwdWJfZXhjZXB0X29ial9saXN0OiBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKKwkJCQkJeyAk JCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IHB1Yl9leGNlcHRfb2JqX2xpc3QgJywnIFB1Ymxp Y2F0aW9uRXhjZXB0T2JqU3BlYworCQkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJOwog CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdv dXRwdXQvcGdvdXRwdXQuYwppbmRleCA3ODc5OThhYmI4YS4uODgxNzRiZDI5OWEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMjA4NCw3ICsyMDg0 LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVs YXRpb24pCiAJaWYgKCFlbnRyeS0+cmVwbGljYXRlX3ZhbGlkKQogCXsKIAkJT2lkCQkJc2NoZW1h SWQgPSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7Ci0JCUxpc3QJICAgKnB1YmlkcyA9IEdldFJl bGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKKwkJTGlzdAkgICAqcHViaWRzID0gTklMOworCQlM aXN0CSAgICpleGNlcHRwdWJpZHMgPSBOSUw7CiAKIAkJLyoKIAkJICogV2UgZG9uJ3QgYWNxdWly ZSBhIGxvY2sgb24gdGhlIG5hbWVzcGFjZSBzeXN0ZW0gdGFibGUgYXMgd2UgYnVpbGQKQEAgLTIw OTksNiArMjEwMCw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJl bGF0aW9uIHJlbGF0aW9uKQogCQljaGFyCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHJlbGlk KTsKIAkJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9ucyA9IE5JTDsKIAorCQlHZXRSZWxhdGlvblB1 YmxpY2F0aW9ucyhyZWxpZCwgJnB1YmlkcywgJmV4Y2VwdHB1Ymlkcyk7CisKIAkJLyogUmVsb2Fk IHB1YmxpY2F0aW9ucyBpZiBuZWVkZWQgYmVmb3JlIHVzZS4gKi8KIAkJaWYgKCFwdWJsaWNhdGlv bnNfdmFsaWQpCiAJCXsKQEAgLTIyMDUsOSArMjIwOCwyMSBAQCBnZXRfcmVsX3N5bmNfZW50cnko UEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQlpZiAocHViLT5wdWJ2 aWFyb290ICYmIGFtX3BhcnRpdGlvbikKIAkJCQl7CiAJCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9 IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKKwkJCQkJaW50CQkJbGV2ZWwgPSAwOwor CisJCQkJCWZvcmVhY2hfb2lkKGFuY2VzdG9yLCBhbmNlc3RvcnMpCisJCQkJCXsKKwkJCQkJCUxp c3QJICAgKmFleGNlcHRwdWJpZHMgPSBOSUw7CiAKLQkJCQkJcHViX3JlbGlkID0gbGxhc3Rfb2lk KGFuY2VzdG9ycyk7Ci0JCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3Jz KTsKKwkJCQkJCWxldmVsKys7CisJCQkJCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3Rv ciwgTlVMTCwgJmFleGNlcHRwdWJpZHMpOworCisJCQkJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChh ZXhjZXB0cHViaWRzLCBwdWItPm9pZCkpCisJCQkJCQl7CisJCQkJCQkJcHViX3JlbGlkID0gYW5j ZXN0b3I7CisJCQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsZXZlbDsKKwkJCQkJCX0KKwkJCQkJfQog CQkJCX0KIAkJCX0KIApAQCAtMjMyMiw2ICsyMzM3LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBH T3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAKIAkJbGlzdF9mcmVlKHB1Ymlk cyk7CiAJCWxpc3RfZnJlZShzY2hlbWFQdWJpZHMpOworCQlsaXN0X2ZyZWUoZXhjZXB0cHViaWRz KTsKIAkJbGlzdF9mcmVlKHJlbF9wdWJsaWNhdGlvbnMpOwogCiAJCWVudHJ5LT5yZXBsaWNhdGVf dmFsaWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggMmQwY2I3YmNm ZDQuLmJjNWY5NDk1OTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU3OTMs NyArNTc5Myw5IEBAIFJlbGF0aW9uR2V0RXhjbHVzaW9uSW5mbyhSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLAogdm9pZAogUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlv biwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogewotCUxpc3QJICAgKnB1Ym9pZHM7CisJTGlz dAkgICAqcHVib2lkcyA9IE5JTDsKKwlMaXN0CSAgICpleGNlcHRwdWJvaWRzID0gTklMOworCUxp c3QJICAgKmFsbHRhYmxlc3B1Ym9pZHM7CiAJTGlzdENlbGwgICAqbGM7CiAJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CiAJT2lkCQkJc2NoZW1haWQ7CkBAIC01ODMxLDcgKzU4MzMsNyBAQCBSZWxhdGlv bkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2Mg KnB1YmRlc2MpCiAJcHViZGVzYy0+Z2VuY29sc192YWxpZF9mb3JfZGVsZXRlID0gdHJ1ZTsKIAog CS8qIEZldGNoIHRoZSBwdWJsaWNhdGlvbiBtZW1iZXJzaGlwIGluZm8uICovCi0JcHVib2lkcyA9 IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKKwlHZXRSZWxhdGlvblB1YmxpY2F0aW9u cyhyZWxpZCwgJnB1Ym9pZHMsICZleGNlcHRwdWJvaWRzKTsKIAlzY2hlbWFpZCA9IFJlbGF0aW9u R2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKIAlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29p ZChwdWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKIApAQCAtNTg0Mywx NiArNTg0NSwyNSBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0 aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCWZvcmVhY2gobGMsIGFuY2VzdG9ycykK IAkJewogCQkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCUxpc3QJICAgKmFu Y2VzdG9yX3B1Ym9pZHMgPSBOSUw7CisJCQlMaXN0CSAgICphbmNlc3Rvcl9leGNlcHRwdWJvaWRz ID0gTklMOwogCi0JCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAot CQkJCQkJCQkJCQkgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IpKTsKKwkJCUdldFJl bGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yLCAmYW5jZXN0b3JfcHVib2lkcywKKwkJCQkJCQkJ CSZhbmNlc3Rvcl9leGNlcHRwdWJvaWRzKTsKKworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3Vu aXF1ZV9vaWQocHVib2lkcywgYW5jZXN0b3JfcHVib2lkcyk7CiAJCQlzY2hlbWFpZCA9IGdldF9y ZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKIAkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVf b2lkKHB1Ym9pZHMsCiAJCQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQp KTsKKwkJCWV4Y2VwdHB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKGV4Y2VwdHB1Ym9p ZHMsCisJCQkJCQkJCQkJCQkgICBhbmNlc3Rvcl9leGNlcHRwdWJvaWRzKTsKIAkJfQogCX0KLQlw dWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRBbGxUYWJsZXNQdWJs aWNhdGlvbnMoKSk7CiAKKwlhbGx0YWJsZXNwdWJvaWRzID0gR2V0QWxsVGFibGVzUHVibGljYXRp b25zKCk7CisJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJCQkJ CQkJCSBsaXN0X2RpZmZlcmVuY2Vfb2lkKGFsbHRhYmxlc3B1Ym9pZHMsCisJCQkJCQkJCQkJCQkJ CSBleGNlcHRwdWJvaWRzKSk7CiAJZm9yZWFjaChsYywgcHVib2lkcykKIAl7CiAJCU9pZAkJCXB1 YmlkID0gbGZpcnN0X29pZChsYyk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAyN2Y2YmUzZjBmOC4uMDAyMWE0 OGE3YjYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNDYzNCw5ICs0NjM0LDQ4IEBAIGdldFB1YmxpY2F0aW9u cyhBcmNoaXZlICpmb3V0KQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFy b290KSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJnZW5jb2xzX3R5cGUgPQogCQkJKihQ UWdldHZhbHVlKHJlcywgaSwgaV9wdWJnZW5jb2xzKSk7CisJCXB1YmluZm9baV0uZXhjZXB0X3Rh YmxlcyA9IChTaW1wbGVQdHJMaXN0KQorCQl7CisJCQlOVUxMLCBOVUxMCisJCX07CiAKIAkJLyog RGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCiAJCXNlbGVjdER1bXBhYmxlT2Jq ZWN0KCYocHViaW5mb1tpXS5kb2JqKSwgZm91dCk7CisKKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gMTkwMDAwKQorCQl7CisJCQlpbnQJCQludGJsczsKKwkJCVBHcmVzdWx0ICAgKnJlc190 YmxzOworCisJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVy KHF1ZXJ5LAorCQkJCQkJCSAgIlNFTEVDVCBwcnJlbGlkXG4iCisJCQkJCQkJICAiRlJPTSBwZ19j YXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbFxuIgorCQkJCQkJCSAgIldIRVJFIHBycHViaWQgPSAl dSBhbmQgcHJleGNlcHQgPSB0cnVlIiwKKwkJCQkJCQkgIHB1YmluZm9baV0uZG9iai5jYXRJZC5v aWQpOworCisJCQlyZXNfdGJscyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwg UEdSRVNfVFVQTEVTX09LKTsKKworCQkJbnRibHMgPSBQUW50dXBsZXMocmVzX3RibHMpOworCQkJ aWYgKG50YmxzID09IDApCisJCQkJY29udGludWU7CisKKwkJCWZvciAoaW50IGogPSAwOyBqIDwg bnRibHM7IGorKykKKwkJCXsKKwkJCQlPaWQJCQlwcnJlbGlkOworCQkJCVRhYmxlSW5mbyAgKnRi aW5mbzsKKworCQkJCXBycmVsaWQgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXNfdGJscywgaiwgMCkp OworCisJCQkJdGJpbmZvID0gZmluZFRhYmxlQnlPaWQocHJyZWxpZCk7CisJCQkJaWYgKHRiaW5m byA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKworCQkJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQo JnB1YmluZm9baV0uZXhjZXB0X3RhYmxlcywgdGJpbmZvKTsKKwkJCX0KKworCQkJUFFjbGVhcihy ZXNfdGJscyk7CisJCX0KIAl9CiAKIGNsZWFudXA6CkBAIC00Njc2LDcgKzQ3MTUsMjggQEAgZHVt cFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5m bykKIAlpZiAocHViaW5mby0+cHViYWxsdGFibGVzICYmIHB1YmluZm8tPnB1YmFsbHNlcXVlbmNl cykKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJMRVMsIEFMTCBT RVFVRU5DRVMiKTsKIAllbHNlIGlmIChwdWJpbmZvLT5wdWJhbGx0YWJsZXMpCisJeworCQlib29s CQlmaXJzdF90YmwgPSB0cnVlOworCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIEZP UiBBTEwgVEFCTEVTIik7CisKKwkJLyogSW5jbHVkZSBleGNlcHRpb24gdGFibGVzIGlmIHRoZSBw dWJsaWNhdGlvbiBoYXMgRVhDRVBUIFRBQkxFcyAqLworCQlmb3IgKFNpbXBsZVB0ckxpc3RDZWxs ICpjZWxsID0gcHViaW5mby0+ZXhjZXB0X3RhYmxlcy5oZWFkOyBjZWxsOyBjZWxsID0gY2VsbC0+ bmV4dCkKKwkJeworCQkJVGFibGVJbmZvICAqdGJpbmZvID0gKFRhYmxlSW5mbyAqKSBjZWxsLT5w dHI7CisKKwkJCWlmIChmaXJzdF90YmwpCisJCQl7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIgRVhDRVBUIFRBQkxFICgiKTsKKwkJCQlmaXJzdF90YmwgPSBmYWxzZTsKKwkJCX0K KwkJCWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7CisJCQlhcHBl bmRQUUV4cEJ1ZmZlcihxdWVyeSwgIk9OTFkgJXMiLCBmbXRRdWFsaWZpZWREdW1wYWJsZSh0Ymlu Zm8pKTsKKwkJfQorCQlpZiAoIWZpcnN0X3RibCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiKSIpOworCX0KIAllbHNlIGlmIChwdWJpbmZvLT5wdWJhbGxzZXF1ZW5jZXMpCiAJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIEZPUiBBTEwgU0VRVUVOQ0VTIik7CiAKQEAgLTQ4 NTYsNiArNDkxNiw3IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxl SW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAKIAkvKiBDb2xsZWN0IGFsbCBwdWJsaWNh dGlvbiBtZW1iZXJzaGlwIGluZm8uICovCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUw MDAwKQorCXsKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1Qg dGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwgIgogCQkJCQkJCSAicGdfY2F0YWxvZy5w Z19nZXRfZXhwcihwcnF1YWwsIHBycmVsaWQpIEFTIHBycmVscXVhbCwgIgpAQCAtNDg2OCw2ICs0 OTI5LDkgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRi bGluZm9bXSwgaW50IG51bVRhYmxlcykKIAkJCQkJCQkgIiAgICAgIFdIRVJFIGF0dHJlbGlkID0g cHIucHJyZWxpZCBBTkQgYXR0bnVtID0gcHJhdHRyc1tzXSlcbiIKIAkJCQkJCQkgIiAgRUxTRSBO VUxMIEVORCkgcHJhdHRycyAiCiAJCQkJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRp b25fcmVsIHByIik7CisJCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE5MDAwMCkKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIFdIRVJFIE5PVCBwci5wcmV4Y2VwdCIpOworCX0K IAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHRh Ymxlb2lkLCBvaWQsIHBycHViaWQsIHBycmVsaWQsICIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDcyYTAwZTFi YzIwLi5hMTllNzdkMTQ5ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02NzYsNiArNjc2LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YnRydW5jYXRlOwogCWJvb2wJCXB1 YnZpYXJvb3Q7CiAJUHVibGlzaEdlbmNvbHNUeXBlIHB1YmdlbmNvbHNfdHlwZTsKKwlTaW1wbGVQ dHJMaXN0IGV4Y2VwdF90YWJsZXM7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3Qv MDAyX3BnX2R1bXAucGwKaW5kZXggZTMzYWE5NWY2ZmYuLmEzZmNmM2MyYjBhIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbApAQCAtMzE3MCw2ICszMTcwLDM2IEBAIG15ICV0ZXN0cyA9ICgKIAkJ bGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCiAJfSwKIAor CSdDUkVBVEUgUFVCTElDQVRJT04gcHViOCcgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNTAsCisJ CWNyZWF0ZV9zcWwgPT4KKwkJICAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjggRk9SIEFMTCBUQUJM RVMgRVhDRVBUIChkdW1wX3Rlc3QudGVzdF90YWJsZSk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJ CVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjggRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChP TkxZIGR1bXBfdGVzdC50ZXN0X3RhYmxlKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUsIHRydW5jYXRlJyk7XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMs IHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCisJfSwKKworCSdDUkVBVEUgUFVCTElDQVRJT04g cHViOScgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNTAsCisJCWNyZWF0ZV9zcWwgPT4KKwkJICAn Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjkgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChkdW1w X3Rlc3QudGVzdF90YWJsZSwgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3RhYmxlKTsnLAorCQlyZWdl eHAgPT4gcXIvXgorCQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgQUxMIFRBQkxFUyBF WENFUFQgVEFCTEUgKE9OTFkgZHVtcF90ZXN0LnRlc3RfdGFibGUsIE9OTFkgZHVtcF90ZXN0LnRl c3Rfc2Vjb25kX3RhYmxlKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUs IHRydW5jYXRlJyk7XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25f cG9zdF9kYXRhID0+IDEsIH0sCisJfSwKKworCSdDUkVBVEUgUFVCTElDQVRJT04gcHViMTAnID0+ IHsKKwkJY3JlYXRlX29yZGVyID0+IDkyLAorCQljcmVhdGVfc3FsID0+CisJCSAgJ0NSRUFURSBQ VUJMSUNBVElPTiBwdWIxMCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKGR1bXBfdGVzdC50 ZXN0X2luaGVyaXRhbmNlX3BhcmVudCk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1YjEwIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSBkdW1w X3Rlc3QudGVzdF9pbmhlcml0YW5jZV9wYXJlbnQsIE9OTFkgZHVtcF90ZXN0LnRlc3RfaW5oZXJp dGFuY2VfY2hpbGQpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1 bmNhdGUnKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0 X2RhdGEgPT4gMSwgfSwKKwl9LAorCiAJJ0NSRUFURSBTVUJTQ1JJUFRJT04gc3ViMScgPT4gewog CQljcmVhdGVfb3JkZXIgPT4gNTAsCiAJCWNyZWF0ZV9zcWwgPT4gJ0NSRUFURSBTVUJTQ1JJUFRJ T04gc3ViMQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYwppbmRleCAzNmYyNDUwMjg0Mi4uOGNkNzNiM2FkNTMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBA IC0zMDczLDE3ICszMDczLDM0IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIg KnNjaGVtYW5hbWUsCiAJCQkJCQkJCSAgIiAgICAgICAgICBXSEVSRSBhdHRyZWxpZCA9IHByLnBy cmVsaWQgQU5EIGF0dG51bSA9IHByYXR0cnNbc10pXG4iCiAJCQkJCQkJCSAgIiAgICAgICAgRUxT RSBOVUxMIEVORCkgIgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24g cFxuIgotCQkJCQkJCQkgICIgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwg cHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCi0JCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19jYXRh bG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSBwci5wcnJlbGlkXG4iCi0JCQkJCQkJCSAgIldIRVJF IHByLnBycmVsaWQgPSAnJXMnXG4iCisJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKKwkJCQkJCQkJICAiCQlK T0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIKKwkJCQkJ CQkJICAiV0hFUkUgcHIucHJyZWxpZCA9ICclcydcbiIsCisJCQkJCQkJCSAgb2lkLCBvaWQsIG9p ZCk7CisKKwkJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZidWYsICIgQU5EIE5PVCBwci5wcmV4Y2VwdFxuIik7CisKKwkJCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCQkgICJVTklPTlxuIgogCQkJCQkJCQkgICJTRUxFQ1Qg cHVibmFtZVxuIgotCQkJCQkJCQkgICIgICAgICwgTlVMTFxuIgotCQkJCQkJCQkgICIgICAgICwg TlVMTFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgog CQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgotCQkJCQkJCQkg ICJXSEVSRSBwLnB1YmFsbHRhYmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJs aXNoYWJsZSgnJXMnKVxuIgotCQkJCQkJCQkgICJPUkRFUiBCWSAxOyIsCi0JCQkJCQkJCSAgb2lk LCBvaWQsIG9pZCwgb2lkKTsKKwkJCQkJCQkJICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5EIHBn X2NhdGFsb2cucGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUoJyVzJylcbiIsCisJCQkJCQkJCSAg b2lkKTsKKworCQkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJCSAgIiAgICAgQU5EIE5PVCBFWElTVFMgKFxuIgorCQkJ CQkJCQkJICAiCQlTRUxFQ1QgMVxuIgorCQkJCQkJCQkJICAiCQlGUk9NIHBnX2NhdGFsb2cucGdf cHVibGljYXRpb25fcmVsIHByXG4iCisJCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19j bGFzcyBwY1xuIgorCQkJCQkJCQkJICAiCQlPTiBwci5wcnJlbGlkID0gcGMub2lkXG4iCisJCQkJ CQkJCQkgICIJCVdIRVJFIHByLnBycmVsaWQgPSAnJXMnIEFORCBwci5wcnB1YmlkID0gcC5vaWQp XG4iLAorCQkJCQkJCQkJICBvaWQpOworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1Ziwg Ik9SREVSIEJZIDE7Iik7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0zMTM0LDYgKzMxNTEsMzUg QEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCVBR Y2xlYXIocmVzdWx0KTsKIAkJfQogCisJCS8qIFByaW50IHB1YmxpY2F0aW9uIHRoZSByZWxhdGlv biBpcyBleGNsdWRlZCBleHBsaWNpdGx5ICovCisJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAw MCkKKwkJeworCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkgICJTRUxFQ1QgcHVi bmFtZVxuIgorCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCisJ CQkJCQkJICAiSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBwLm9pZCA9 IHByLnBycHViaWRcbiIKKwkJCQkJCQkgICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xuIEFORCBw ci5wcmV4Y2VwdFxuIgorCQkJCQkJCSAgIk9SREVSIEJZIDE7Iiwgb2lkKTsKKworCQkJcmVzdWx0 ID0gUFNRTGV4ZWMoYnVmLmRhdGEpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZ290byBlcnJvcl9y ZXR1cm47CisJCQllbHNlCisJCQkJdHVwbGVzID0gUFFudHVwbGVzKHJlc3VsdCk7CisKKwkJCWlm ICh0dXBsZXMgPiAwKQorCQkJCXByaW50VGFibGVBZGRGb290ZXIoJmNvbnQsIF8oIkV4Y2VwdCBQ dWJsaWNhdGlvbnM6IikpOworCisJCQkvKiBNaWdodCBiZSBhbiBlbXB0eSBzZXQgLSB0aGF0J3Mg b2sgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZXM7IGkrKykKKwkJCXsKKwkJCQlwcmludGZQ UUV4cEJ1ZmZlcigmYnVmLCAiICAgIFwiJXNcIiIsIFBRZ2V0dmFsdWUocmVzdWx0LCBpLCAwKSk7 CisKKwkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CisJCQl9CisJCQlQ UWNsZWFyKHJlc3VsdCk7CisJCX0KKwogCQkvKgogCQkgKiBJZiB2ZXJib3NlLCBwcmludCBOT1Qg TlVMTCBjb25zdHJhaW50cy4KIAkJICovCkBAIC02NzUzLDggKzY3OTksMTIgQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJCQkgICIgICAgIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25fcmVsIHByXG4iCiAJCQkJCQkJICAiV0hFUkUgYy5yZWxuYW1lc3Bh Y2UgPSBuLm9pZFxuIgogCQkJCQkJCSAgIiAgQU5EIGMub2lkID0gcHIucHJyZWxpZFxuIgotCQkJ CQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iCi0JCQkJCQkJICAiT1JERVIgQlkgMSwy IiwgcHViaWQpOworCQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iLCBwdWJpZCk7 CisKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLCAiICBBTkQgTk9UIHByLnByZXhjZXB0XG4iKTsKKworCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwgIk9SREVSIEJZIDEsMiIpOwogCQkJaWYgKCFhZGRGb290ZXJUb1B1YmxpY2F0aW9u RGVzYygmYnVmLCBfKCJUYWJsZXM6IiksIGZhbHNlLCAmY29udCkpCiAJCQkJZ290byBlcnJvcl9y ZXR1cm47CiAKQEAgLTY3NzIsNiArNjgyMiwyMyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25z dCBjaGFyICpwYXR0ZXJuKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCX0KIAkJfQorCQll bHNlCisJCXsKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCXsKKwkJCQkvKiBH ZXQgdGhlIGV4Y2x1ZGVkIHRhYmxlcyBmb3IgdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbiAqLwor CQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCSAgIlNFTEVDVCBjb25jYXQoYy5y ZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZSwgJy4nLCBjLnJlbG5hbWUpXG4iCisJCQkJCQkJCSAg IkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4iCisJCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19j YXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIKKwkJ CQkJCQkJICAiV0hFUkUgcHIucHJwdWJpZCA9ICclcydcbiIKKwkJCQkJCQkJICAiICBBTkQgcHIu cHJleGNlcHRcbiIKKwkJCQkJCQkJICAiT1JERVIgQlkgMSIsIHB1YmlkKTsKKwkJCQlpZiAoIWFk ZEZvb3RlclRvUHVibGljYXRpb25EZXNjKCZidWYsIF8oIkV4Y2VwdCB0YWJsZXM6IiksCisJCQkJ CQkJCQkJCQl0cnVlLCAmY29udCkpCisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJfQorCQl9 CiAKIAkJcHJpbnRUYWJsZSgmY29udCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2Zp bGUpOwogCQlwcmludFRhYmxlQ2xlYW51cCgmY29udCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvdGFiLWNvbXBsZXRlLmluLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5k ZXggYWIyNzEyMjE2YjUuLjk3YzM0Mzc5NTU2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFi LWNvbXBsZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0z NjU3LDcgKzM2NTcsMTcgQEAgbWF0Y2hfcHJldmlvdXNfd29yZHMoaW50IHBhdHRlcm5faWQsCiAJ ZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1Ii LCAiQUxMIikpCiAJCUNPTVBMRVRFX1dJVEgoIlRBQkxFUyIsICJTRVFVRU5DRVMiKTsKIAllbHNl IGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJB TEwiLCAiVEFCTEVTIikpCi0JCUNPTVBMRVRFX1dJVEgoIldJVEggKCIpOworCQlDT01QTEVURV9X SVRIKCJFWENFUFQgVEFCTEUgKCIsICJXSVRIICgiKTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVB VEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVY Q0VQVCIpKQorCQlDT01QTEVURV9XSVRIKCJUQUJMRSAoIik7CisJZWxzZSBpZiAoTWF0Y2hlcygi Q1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIs ICJFWENFUFQiLCAiVEFCTEUiKSkKKwkJQ09NUExFVEVfV0lUSCgiKCIpOworCWVsc2UgaWYgKE1h dGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIsICJU QUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxFIiwgIigiKSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFf UVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVzKTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVB VEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVY Q0VQVCIsICJUQUJMRSIsICIoIiwgTWF0Y2hBbnlOKSAmJiBlbmRzX3dpdGgocHJldl93ZCwgJywn KSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVz KTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwg IkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIsICIoIiwgTWF0Y2hBbnlO KSAmJiAhZW5kc193aXRoKHByZXZfd2QsICcsJykpCisJCUNPTVBMRVRFX1dJVEgoIikiKTsKIAll bHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIs ICJUQUJMRVMiKSkKIAkJQ09NUExFVEVfV0lUSCgiSU4gU0NIRU1BIik7CiAJZWxzZSBpZiAoTWF0 Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiVEFCTEUiLCBN YXRjaEFueSkgJiYgIWVuZHNfd2l0aChwcmV2X3dkLCAnLCcpKQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCmluZGV4IDIyZjQ4YmI4OTc1Li5iZDA5NDExM2M3YSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtMTQ2LDE0ICsxNDYsMTYgQEAgdHlwZWRlZiBzdHJ1 Y3QgUHVibGljYXRpb25SZWxJbmZvCiAJUmVsYXRpb24JcmVsYXRpb247CiAJTm9kZQkgICAqd2hl cmVDbGF1c2U7CiAJTGlzdAkgICAqY29sdW1uczsKKwlib29sCQlleGNlcHQ7CiB9IFB1YmxpY2F0 aW9uUmVsSW5mbzsKIAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbihPaWQgcHVi aWQpOwogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFy ICpwdWJuYW1lLCBib29sIG1pc3Npbmdfb2spOwotZXh0ZXJuIExpc3QgKkdldFJlbGF0aW9uUHVi bGljYXRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gYm9vbCBHZXRSZWxhdGlvblB1YmxpY2F0aW9u cyhPaWQgcmVsaWQsIExpc3QgKipwdWJpZHMsIExpc3QgKipleGNlcHRfcHViaWRzKTsKIAogLyot LS0tLS0tLS0KLSAqIEV4cGVjdGVkIHZhbHVlcyBmb3IgcHViX3BhcnRvcHQgcGFyYW1ldGVyIG9m IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKCksCisgKiBFeHBlY3RlZCB2YWx1ZXMgZm9yIHB1Yl9w YXJ0b3B0IHBhcmFtZXRlciBvZgorICogR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucygp LCBhbmQgR2V0UHVibGljYXRpb25FeGNsdWRlZFJlbGF0aW9ucygpLAogICogd2hpY2ggYWxsb3dz IGNhbGxlcnMgdG8gc3BlY2lmeSB3aGljaCBwYXJ0aXRpb25zIG9mIHBhcnRpdGlvbmVkIHRhYmxl cwogICogbWVudGlvbmVkIGluIHRoZSBwdWJsaWNhdGlvbiB0aGV5IGV4cGVjdCB0byBzZWUuCiAg KgpAQCAtMTY4LDkgKzE3MCwxMiBAQCB0eXBlZGVmIGVudW0gUHVibGljYXRpb25QYXJ0T3B0CiAJ UFVCTElDQVRJT05fUEFSVF9BTEwsCiB9IFB1YmxpY2F0aW9uUGFydE9wdDsKIAotZXh0ZXJuIExp c3QgKkdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0 IHB1Yl9wYXJ0b3B0KTsKK2V4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRp b25zKE9pZCBwdWJpZCwKKwkJCQkJCQkJCQkJIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9w dCk7CitleHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25FeGNsdWRlZFJlbGF0aW9ucyhPaWQgcHVi aWQsCisJCQkJCQkJCQkJCSBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpOwogZXh0ZXJu IExpc3QgKkdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucyh2b2lkKTsKLWV4dGVybiBMaXN0ICpHZXRB bGxQdWJsaWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCk7Citl eHRlcm4gTGlzdCAqR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUHVibGljYXRpb24gKnB1Yiwg Y2hhciByZWxraW5kKTsKIGV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvblNjaGVtYXMoT2lkIHB1 YmlkKTsKIGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQdWJsaWNhdGlvbnMoT2lkIHNjaGVtYWlkKTsK IGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgc2NoZW1haWQs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAppbmRleCA5MmNjMzZkZmRm Ni4uZTdkN2YzYmE4NWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb25fcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwu aApAQCAtMzEsNiArMzEsNyBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uX3JlbCw2MTA2LFB1Ymxp Y2F0aW9uUmVsUmVsYXRpb25JZCkKIAlPaWQJCQlvaWQ7CQkJLyogb2lkICovCiAJT2lkCQkJcHJw dWJpZCBCS0lfTE9PS1VQKHBnX3B1YmxpY2F0aW9uKTsgLyogT2lkIG9mIHRoZSBwdWJsaWNhdGlv biAqLwogCU9pZAkJCXBycmVsaWQgQktJX0xPT0tVUChwZ19jbGFzcyk7CS8qIE9pZCBvZiB0aGUg cmVsYXRpb24gKi8KKwlib29sCQlwcmV4Y2VwdCBCS0lfREVGQVVMVChmKTsJLyogZXhjbHVkZSB0 aGUgcmVsYXRpb24gKi8KIAogI2lmZGVmCUNBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVu Z3RoIGZpZWxkcyBzdGFydCBoZXJlICovCiAJcGdfbm9kZV90cmVlIHBycXVhbDsJCS8qIHF1YWxp ZmljYXRpb25zICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggYmM3YWRiYTRhMGYuLmNhMTA1 NTA1MWY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC00Mjk5LDYgKzQyOTksNyBAQCB0eXBl ZGVmIHN0cnVjdCBQdWJsaWNhdGlvblRhYmxlCiAJUmFuZ2VWYXIgICAqcmVsYXRpb247CQkvKiBy ZWxhdGlvbiB0byBiZSBwdWJsaXNoZWQgKi8KIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsJLyogcXVh bGlmaWNhdGlvbnMgKi8KIAlMaXN0CSAgICpjb2x1bW5zOwkJLyogTGlzdCBvZiBjb2x1bW5zIGlu IGEgcHVibGljYXRpb24gdGFibGUgKi8KKwlib29sCQlleGNlcHQ7CQkJLyogZXhjbHVkZSB0aGUg cmVsYXRpb24gKi8KIH0gUHVibGljYXRpb25UYWJsZTsKIAogLyoKQEAgLTQzMDcsNiArNDMwOCw3 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKIHR5cGVkZWYgZW51bSBQdWJsaWNh dGlvbk9ialNwZWNUeXBlCiB7CiAJUFVCTElDQVRJT05PQkpfVEFCTEUsCQkvKiBBIHRhYmxlICov CisJUFVCTElDQVRJT05PQkpfRVhDRVBUX1RBQkxFLAkvKiBBIHRhYmxlIHRvIGJlIGV4Y2x1ZGVk ICovCiAJUFVCTElDQVRJT05PQkpfVEFCTEVTX0lOX1NDSEVNQSwJLyogQWxsIHRhYmxlcyBpbiBz Y2hlbWEgKi8KIAlQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5fQ1VSX1NDSEVNQSwJLyogQWxsIHRh YmxlcyBpbiBmaXJzdCBlbGVtZW50IG9mCiAJCQkJCQkJCQkJCSAqIHNlYXJjaF9wYXRoICovCkBA IC00MzM1LDYgKzQzMzcsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFsbE9ialNwZWMK IHsKIAlOb2RlVGFnCQl0eXBlOwogCVB1YmxpY2F0aW9uQWxsT2JqVHlwZSBwdWJvYmp0eXBlOwkv KiB0eXBlIG9mIHRoaXMgcHVibGljYXRpb24gb2JqZWN0ICovCisJTGlzdAkgICAqZXhjZXB0X3Rh YmxlczsJLyogTGlzdCBvZiB0YWJsZXMgdG8gYmUgZXhjbHVkZWQgKi8KIAlQYXJzZUxvYwlsb2Nh dGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiB9IFB1YmxpY2F0 aW9uQWxsT2JqU3BlYzsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dAppbmRleCBlNzJkMTMwODk2Ny4uMzAwNzNmNTk3MDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0yMTMsMzMgKzIxMyw4OCBAQCBOb3QtbnVsbCBjb25z dHJhaW50czoKICByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IG5vbmUg ICAgICAgICAgICAgIHwgZgogKDEgcm93KQogCi1EUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKLURS T1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRl c3RwdWJfZm9yc2NoZW1hLCB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hOwotQ1JFQVRFIFRBQkxFIHRl c3RwdWJfdGJsMyAoYSBpbnQpOwotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsM2EgKGIgdGV4dCkg SU5IRVJJVFMgKHRlc3RwdWJfdGJsMyk7CiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJP Uic7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsK LUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7 CistLSBFeGNsdWRlIHRhYmxlcyB1c2luZyBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRh YmxlbGlzdCkKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0 YWJsZSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsMSwgdGVzdHB1Yl90 YmwyKTsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFs bHRhYmxlc19leGNlcHR0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8 IGYKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCisgICAgInB1Ymxp Yy50ZXN0cHViX3RibDIiCisKKy0tIEV4Y2x1ZGUgdGFibGVzIHVzaW5nIEZPUiBBTEwgVEFCTEVT IEVYQ0VQVCAodGFibGVsaXN0KQorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFi bGVzX2V4Y2VwdHRhYmxlMSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHRlc3RwdWJfdGJsMSk7Citc ZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXNf ZXhjZXB0dGFibGUxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFs bCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBH ZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhj ZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKKwogUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKK0RST1AgVEFCTEUgdGVzdHB1Yl90YmwyOworRFJPUCBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEs IHRlc3RwdWJfZm9yX3RibF9zY2hlbWEsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxl LCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTE7CitDUkVBVEUgVEFCTEUgdGVzdHB1 Yl90YmxfcGFyZW50IChhIGludCk7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfY2hpbGQgKGIg dGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsX3BhcmVudCk7CitTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRl c3RwdWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWIzCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMwogICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMg fCBWaWEgcm9vdCAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAicHVibGlj LnRlc3RwdWJfdGJsMyIKLSAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCisgICAgInB1YmxpYy50 ZXN0cHViX3RibF9jaGlsZCIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKIAorQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsX3BhcmVu dDsKIFxkUnArIHRlc3RwdWI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAogICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBu b25lICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAicHVibGljLnRlc3RwdWJfdGJsMyIK KyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKIAotRFJPUCBUQUJMRSB0ZXN0cHViX3Ri bDMsIHRlc3RwdWJfdGJsM2E7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzLCB0ZXN0cHViNDsK Ky0tIEV4Y2x1ZGUgcGFyZW50IHRhYmxlLCBvbWl0dGluZyBib3RoIG9mICdPTkxZJyBhbmQgJyon CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxF ICh0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1 CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29s dW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxlczoK KyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJwdWJsaWMudGVzdHB1Yl90Ymxf cGFyZW50IgorCistLSBFWENFUFQgd2l0aCBhc3RlcmlzazogZXhjbHVkZSB0YWJsZSBhbmQgYWxs IGRlc2NlbmRhbnRzCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIEFMTCBUQUJMRVMg RVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibF9wYXJlbnQgKik7CitcZFJwKyB0ZXN0cHViNgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg QWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitF eGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl90YmxfY2hpbGQiCisgICAgInB1Ymxp Yy50ZXN0cHViX3RibF9wYXJlbnQiCisKKy0tIEVYQ0VQVCB3aXRoIE9OTFk6IGV4Y2x1ZGUgdGFi bGUgYnV0IG5vdCBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI3IEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSB0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsg dGVzdHB1YjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI3CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAg ICAgICAgIHwgZgorRXhjZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVu dCIKKworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0RST1AgVEFCTEUgdGVzdHB1Yl90Ymxf cGFyZW50LCB0ZXN0cHViX3RibF9jaGlsZDsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjMsIHRl c3RwdWI0LCB0ZXN0cHViNSwgdGVzdHB1YjYsIHRlc3RwdWI3OwogLS0tIFRlc3RzIGZvciBwdWJs aWNhdGlvbnMgd2l0aCBTRVFVRU5DRVMKIENSRUFURSBTRVFVRU5DRSByZWdyZXNzX3B1Yl9zZXEw OwogQ1JFQVRFIFNFUVVFTkNFIHB1Yl90ZXN0LnJlZ3Jlc3NfcHViX3NlcTE7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggMDAzOTBhZWNkNDcuLjkyMGRhNTM2MGFkIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMDUsMjAgKzEwNSwzOCBAQCBTRUxF Q1QgcHVibmFtZSwgcHViYWxsdGFibGVzIEZST00gcGdfcHVibGljYXRpb24gV0hFUkUgcHVibmFt ZSA9ICd0ZXN0cHViX2ZvcmFsbAogXGQrIHRlc3RwdWJfdGJsMgogXGRScCsgdGVzdHB1Yl9mb3Jh bGx0YWJsZXMKIAorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworLS0gRXhjbHVk ZSB0YWJsZXMgdXNpbmcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0YWJsZWxpc3QpCitD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUgRk9SIEFM TCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibDEsIHRlc3RwdWJfdGJsMik7CitcZFJw KyB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZQorLS0gRXhjbHVkZSB0YWJsZXMgdXNp bmcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0YWJsZWxpc3QpCitDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAo dGVzdHB1Yl90YmwxKTsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMQor CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7Ci1E Uk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxlLCB0 ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYTsKK0RST1AgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2No ZW1hLCB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0 YWJsZSwgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxOwogCi1DUkVBVEUgVEFCTEUg dGVzdHB1Yl90YmwzIChhIGludCk7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzYSAoYiB0ZXh0 KSBJTkhFUklUUyAodGVzdHB1Yl90YmwzKTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9wYXJl bnQgKGEgaW50KTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9jaGlsZCAoYiB0ZXh0KSBJTkhF UklUUyAodGVzdHB1Yl90YmxfcGFyZW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VS Uk9SJzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90Ymwz OwotQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJs MzsKLVJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWIzCitDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50Owog XGRScCsgdGVzdHB1YjQKKy0tIEV4Y2x1ZGUgcGFyZW50IHRhYmxlLCBvbWl0dGluZyBib3RoIG9m ICdPTkxZJyBhbmQgJyonCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJM RVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjUKKy0t IEVYQ0VQVCB3aXRoIGFzdGVyaXNrOiBleGNsdWRlIHRhYmxlIGFuZCBhbGwgZGVzY2VuZGFudHMK K0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUg KHRlc3RwdWJfdGJsX3BhcmVudCAqKTsKK1xkUnArIHRlc3RwdWI2CistLSBFWENFUFQgd2l0aCBP TkxZOiBleGNsdWRlIHRhYmxlIGJ1dCBub3QgZGVzY2VuZGFudHMKK0NSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViNyBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9OTFkgdGVzdHB1Yl90Ymxf cGFyZW50KTsKK1xkUnArIHRlc3RwdWI3CiAKLURST1AgVEFCTEUgdGVzdHB1Yl90YmwzLCB0ZXN0 cHViX3RibDNhOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1YjQ7CitSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOworRFJPUCBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQsIHRlc3Rw dWJfdGJsX2NoaWxkOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViMywgdGVzdHB1YjQsIHRlc3Rw dWI1LCB0ZXN0cHViNiwgdGVzdHB1Yjc7CiAKIC0tLSBUZXN0cyBmb3IgcHVibGljYXRpb25zIHdp dGggU0VRVUVOQ0VTCiBDUkVBVEUgU0VRVUVOQ0UgcmVncmVzc19wdWJfc2VxMDsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi9tZXNvbi5idWlsZAppbmRleCA4NWQxMGE4OTk5NC4uYjhlNWM1NGMzMTQgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vbWVzb24uYnVpbGQKQEAgLTQ2LDYgKzQ2LDcgQEAgdGVzdHMgKz0gewogICAgICAg J3QvMDM0X3RlbXBvcmFsLnBsJywKICAgICAgICd0LzAzNV9jb25mbGljdHMucGwnLAogICAgICAg J3QvMDM2X3NlcXVlbmNlcy5wbCcsCisgICAgICAndC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3Rh YmxlLnBsJywKICAgICAgICd0LzEwMF9idWdzLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5w bCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUu cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJhNTNhYWU3ZmJlCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2Vz X2V4Y2VwdF90YWJsZS5wbApAQCAtMCwwICsxLDIxOSBAQAorCisjIENvcHlyaWdodCAoYykgMjAy MS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIExvZ2ljYWwg cmVwbGljYXRpb24gdGVzdHMgZm9yIEVYQ0VQVCBUQUJMRSBwdWJsaWNhdGlvbnMKK3VzZSBzdHJp Y3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIEluaXRpYWxpemUg cHVibGlzaGVyIG5vZGUKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0 cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworIyBJbml0 aWFsaXplIHN1YnNjcmliZXIgbm9kZQorbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFy dDsKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBF WENFUFQgVEFCTEUgdGVzdCBjYXNlcyBmb3Igbm9ybWFsIHRhYmxlcworIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDcmVhdGUgc2NoZW1hcyBhbmQgdGFi bGVzIG9uIHB1Ymxpc2hlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVz JywgcXEoCisJQ1JFQVRFIFNDSEVNQSBzY2gxOworCUNSRUFURSBUQUJMRSBzY2gxLnRhYjEgQVMg U0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBBUyBhOworKSk7CisKKyMgQ3JlYXRlIHNjaGVt YXMgYW5kIHRhYmxlcyBvbiBzdWJzY3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFNDSEVNQSBzY2gxOworCUNSRUFURSBUQUJMRSBz Y2gxLnRhYjEgKGEgaW50KTsKKykpOworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KK215 ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1l PXBvc3RncmVzJzsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3NjaGVtYSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFC TEUgKHNjaDEudGFiMSkiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3NjaGVtYSBDT05ORUNUSU9OICck cHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfc2NoZW1hIgorKTsKKworIyBX YWl0IGZvciBpbml0aWFsIHRhYmxlIHN5bmMgdG8gZmluaXNoCiskbm9kZV9zdWJzY3JpYmVyLT53 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsCisJJ3RhcF9zdWJfc2No ZW1hJyk7CisKKyMgQ2hlY2sgdGhlIHRhYmxlIGRhdGEgZG9lcyBub3Qgc3luYyBmb3IgZXhjbHVk ZWQgdGFibGUKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIGNvdW50KCopLCBtaW4oYSksIG1heChhKSBGUk9NIHNjaDEudGFiMSIp OworaXMoJHJlc3VsdCwgcXEoMHx8KSwKKwknY2hlY2sgdGhlcmUgaXMgbm8gaW5pdGlhbCBkYXRh IGNvcGllZCBmb3IgdGhlIGV4Y2x1ZGVkIHRhYmxlJyk7CisKKyMgVmVyaWZ5IHRoYXQgZGF0YSBp bnNlcnRlZCB0byB0aGUgZXhjbHVkZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQuCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnRhYjEg VkFMVUVTKGdlbmVyYXRlX3NlcmllcygxMSwyMCkpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgndGFwX3N1Yl9zY2hlbWEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKiksIG1pbihhKSwg bWF4KGEpIEZST00gc2NoMS50YWIxIik7CitpcygkcmVzdWx0LCBxcSgwfHwpLCAnY2hlY2sgcmVw bGljYXRlZCBpbnNlcnRzIG9uIHN1YnNjcmliZXInKTsKKworIyBjbGVhbnVwCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3Nj aGVtYSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNV QlNDUklQVElPTiB0YXBfc3ViX3NjaGVtYSIpOworCisjID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisjIEVYQ0VQVCBUQUJMRSB0ZXN0IGNhc2VzIGZvciBwYXJ0 aXRpb25lZCB0YWJsZXMKKyMgQ2hlY2sgYmVoYXZpb3Igb2YgRVhDRVBUIFRBQkxFIHdpdGggcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qgb24gYQorIyBwYXJ0aXRpb25lZCB0YWJsZSBhbmQgaXRz IHBhcnRpdGlvbnMuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisjIFNldHVwIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBwYXJ0aXRpb25zIG9uIHRoZSBwdWJs aXNoZXIgdGhhdCBtYXAgdG8gbm9ybWFsCisjIHRhYmxlcyBvbiB0aGUgc3Vic2NyaWJlcgorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxF IHNjaDEudDEoYSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShhKTsKKwlDUkVBVEUgVEFCTEUgc2No MS5wYXJ0MSBQQVJUSVRJT04gT0Ygc2NoMS50MSBGT1IgVkFMVUVTIEZST00gKDApIFRPICg1KTsK KwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0MiBQQVJUSVRJT04gT0Ygc2NoMS50MSBGT1IgVkFMVUVT IEZST00gKDYpIFRPICgxMCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAor CSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSBzY2gxLnQxKGEgaW50KTsKKwlDUkVBVEUg VEFCTEUgc2NoMS5wYXJ0MShhIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDIoYSBpbnQp OworKSk7CisKKyMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQxKSB3aXRoIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290ID0gZmFsc2UKKyMgRXhjbHVkaW5nIGEgcGFydGl0aW9uIHdoaWxlIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UgcHJldmVudHMKKyMgcmVwbGljYXRpb24gb2Yg cm93cyBpbnNlcnRlZCBpbnRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBmb3IgdGhhdCBwYXJ0aWN1 bGFyCisjIHBhcnRpdGlvbi4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMg RVhDRVBUIFRBQkxFIChzY2gxLnBhcnQxKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IGZhbHNlKTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMSksICg2KTsKKykpOwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJ UFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElD QVRJT04gdGFwX3B1Yl9wYXJ0IgorKTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNj cmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxV RVMgKDIpLCAoNyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9z dWJfcGFydCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVj ayByb3dzIG9uIHBhcnRpdGlvbmVkIHRhYmxlJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MSIpOwor aXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gZXhjbHVkZWQgcGFydGl0aW9uJyk7CisK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoICRyZXN1bHQsIHFxKDYKKzcpLCAnY2hlY2sgcm93 cyBvbiBvdGhlciBwYXJ0aXRpb24nKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlRSVU5DQVRFIHNjaDEudDEiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0 OyIpOworCisjIEVYQ0VQVCBUQUJMRSAoc2NoMS50MSkgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCA9IGZhbHNlCisjIEV4Y2x1ZGluZyB0aGUgcGFydGl0aW9uZWQgdGFibGUgc3RpbGwg YWxsb3dzIHJvd3MgaW5zZXJ0ZWQgaW50byB0aGUKKyMgcGFydGl0aW9uZWQgdGFibGUgdG8gYmUg cmVwbGljYXRlZCB2aWEgaXRzIHBhcnRpdGlvbnMuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IEZP UiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoc2NoMS50MSkgV0lUSCAocHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSBmYWxzZSk7CisJSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDEpLCAo Nik7CispKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVB VEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5z dHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0 X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YXBfc3ViX3BhcnQnKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHNj aDEudDEgVkFMVUVTICgyKSwgKDcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCd0YXBfc3ViX3BhcnQnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnQxIik7CitpcygkcmVzdWx0LCBx cSgpLCAnY2hlY2sgcm93cyBvbiBwYXJ0aXRpb25lZCB0YWJsZScpOworCiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEu cGFydDEiKTsKK2lzKCAkcmVzdWx0LCBxcSgxCisyKSwgJ2NoZWNrIHJvd3Mgb24gZmlyc3QgcGFy dGl0aW9uJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoICRyZXN1bHQsIHFxKDYKKzcp LCAnY2hlY2sgcm93cyBvbiBzZWNvbmQgcGFydGl0aW9uJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBzY2gxLnQxIik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9O IHRhcF9wdWJfcGFydDsiKTsKKworIyBFWENFUFQgVEFCTEUgKHNjaDEudDEpIHdpdGggcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCisjIFdoZW4gdGhlIHBhcnRpdGlvbmVkIHRhYmxl IGlzIGV4Y2x1ZGVkIGFuZCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlLAorIyBu byByb3dzIGZyb20gdGhlIHRhYmxlIG9yIGl0cyBwYXJ0aXRpb25zIGFyZSByZXBsaWNhdGVkLgor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBV QkxJQ0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEu dDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwlJTlNFUlQgSU5UTyBzY2gx LnQxIFZBTFVFUyAoMSksICg2KTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IgorKTsKKyRub2Rl X3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwg J3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoNyk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEi KTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHBhcnRpdGlvbmVkIHRhYmxlJyk7 CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIEZST00gc2NoMS5wYXJ0MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mg b24gZmlyc3QgcGFydGl0aW9uJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoJHJlc3Vs dCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gc2Vjb25kIHBhcnRpdGlvbicpOworCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgc2NoMS50MSIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9w YXJ0Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJM SUNBVElPTiB0YXBfcHViX3BhcnQ7Iik7CisKKyMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQxKSB3 aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorIyBXaGVuIGEgcGFydGl0aW9u IGlzIGV4Y2x1ZGVkIGJ1dCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlLAorIyBy b3dzIHB1Ymxpc2hlZCB0aHJvdWdoIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBjYW4gc3RpbGwgYmUg cmVwbGljYXRlZC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFx KAorCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBU IFRBQkxFIChzY2gxLnBhcnQxKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJ SU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDEpLCAoNikKKykpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9w YXJ0IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9w YXJ0IgorKTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRu b2RlX3B1Ymxpc2hlciwgJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoNyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCisk cmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgKiBGUk9NIHNjaDEudDEgT1JERVIgQlkgYSIpOworaXMoICRyZXN1bHQsIHFxKDEKKzIKKzYK KzcpLCAnY2hlY2sgcm93cyBvbiBwYXJ0aXRpb25lZCB0YWJsZScpOworCiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEu cGFydDEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIGV4Y2x1ZGVkIHBhcnRp dGlvbicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDIiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVj ayByb3dzIG9uIG90aGVyIHBhcnRpdGlvbicpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdm YXN0Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7 Ci0tIAoyLjM0LjEKCg== --00000000000032dafc064698b7ae--