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 1wB7tT-000lFw-1r for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 09:11:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wB7tP-00Aq9P-1m for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 09:11:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wB7tP-00Aq9G-0N for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 09:11:12 +0000 Received: from mail-ua1-x92e.google.com ([2607:f8b0:4864:20::92e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wB7tN-00000000KMo-28yk for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 09:11:11 +0000 Received: by mail-ua1-x92e.google.com with SMTP id a1e0cc1a2514c-954997c9014so701742241.3 for ; Fri, 10 Apr 2026 02:11:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775812267; cv=none; d=google.com; s=arc-20240605; b=I1acXUnxHerg3Vji1k8Dh5L3+NSTiJRNHx0A+9wm/9rs2Go9pC2m+eaYfcDq5i2f9x Qwh2HMeQl1/AEDzzEtdtc4ElaVl5jvG1mfszpmgQONHJfr8ErXmq2hMXmE395XMzNU6v Bw6Nn/6yDZFxTMMi7y8PvLHz2xhx3eTDJvJlwwMJ0SligRBomLjxUllICaEFkclH+hgo QIwTY1aYrC68R8WGnAB5dQQC4NH7LkuiEQTSx/TqRKPjZgypkUO0VlJ1mJENsr1LBRM7 nadIfhBF8iYOjQZTT4TO59CNPKGb+691KDkJ0vqsKNkB5EeV0bXw33gLw0Kuvhc81qi2 zd1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=lHSb8hS17F8CQPhb9CoeWm2ty+oeDFdtBwyDQA34mio=; fh=PDhzRmLFhJQgKl2kpY6iqaoiggk+rKjB8rXL7ERgOws=; b=kip3ckeSL5Ya+V3HAr2S7WuzNUu/ofaAfccI39AVZf9rZ0LemAXDxWtngLH+UPkazX peEvIUJwJvZ79u3V13DRhfDwWneA3Wpp1qrk1ZiUtPWjw5ZF13oh9B1Hcndwksct5rQS jtfhV0ea1WImKyGL/CiBIC2Na6AyE01J3zJGOwmC3paH45RWMZLfUZixAIe9L63roWjT H9AMU/leg7n3+RGc7hmYE7fZAnO36sK8SriYjrwwgjTG0emWTnl8buSDI8IlWOrjxvIO OS8uyC7o41qZ+8D4Q620XwxAb/VmTw8skUIRsPp6ciNBhlT5BSEsQeS5hU+WWm1unWu2 gwfw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775812267; x=1776417067; 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=lHSb8hS17F8CQPhb9CoeWm2ty+oeDFdtBwyDQA34mio=; b=pP172PrYdZraoOHGPvNCvIeWzSt+QQ8XyWm6h/V+apnFjMBwyApzrha+TF5IHITwrl QBieDnEw8St9d9OynPDr637PRc33S7nB+SBQ6v8EhI/jR42zyjUmgoQk1NcaFuhBWfEo l8cyp5UaSkkJRj92q7eUH5q8qOqdEs9CmGCOjjnWlPETUrSbcrnzU6Gtcvq4JYAAtnfa UM7DCxPeUpm/amI/NOzWEAruCFz+LEPPYY4VtAsIMZsYBC4zpuy4yUUa9y9r44ohpYA7 6GjlGfRLAgPFA016ggoCEo3CMTkcqtId9nx+A+cphtCPcmDk5KtnGSMetrFKauLxy1/c pQBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775812267; x=1776417067; 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=lHSb8hS17F8CQPhb9CoeWm2ty+oeDFdtBwyDQA34mio=; b=ac4rXvtm9ZMtp/BjqI+Xgc9uM5pkj7iSD3TomqNDr3F1MDMHyWrmdU1a9zTm1Nxri9 MTzrg/5LXQ6n5NCs73iTWQ/+UhQWMvjcDeRZrwVxl5hD7cIbsmV6RJ+zcA68zPtFAnWt c3J3gTkUY6FXzXb/Fzy1zg4AKt1rX7X9gK42TgWDL02dIGhvfIacTC7uaRB8qahXhL6w JEm+qONVDydvhzNwVoV0fkjNkKajR6blSD7fav4T4Mr/rWfQj6rl1jaOOAnYPVp512NY bh1Dbd8Nia7yaGaWylxoPu6he2G4peYsfD4Kkvf/46T23uIvHyCZJcmFWnSfoiS3tMpF MZTA== X-Gm-Message-State: AOJu0YwUNxHN0RqhgvRcDxt3LBRm+9MkZTRPvsf8oYv0R2VmJO4rtefc yuuHTj3KW3tOwhvQfyp1j8VpVjGbC3pawqby8ScJve99pK+LSc6Rzxgj0WX0CEAIXfcI0CbNzUs tG9ljYlkftlzjjf0/u0StA/saVS4u7lAvFJmtNpNqBg== X-Gm-Gg: AeBDiesU3502p6gfpidkEYF7xgpEvHgOjLEtsrQTGenOaVEygQXqAArsv+ZKCfMLiqW nBaC7BLogcNycy0vETk0dBuKcHyAkDvNTml6AT7OPhoQMG2NIJuP7w2QSbHkzcJQZuVAvg9z3nC e2Pymcwy9v7/olnFp7UvY3uFSoI4grnQ5hgxdkZbsEgRT1X/ymWMNcO0N3v0esl6baE9LZhO24G suuP6CsApoSP+mdvQjvGTPQJRenpPU/PjH2hUYOw5kw/HwyXHc1bGnE/uI7mLBlZS/gf+6KvyF8 gN4UA84QJ+dr2lWR0nilec+k4htB2aPfh8TKvkIHytNa6VRCOGCvB3qT0UPHmZMKxTMbksb/Koo j7vgBML0y+IeIqkUayCvx4oliaq5Wd8+lmML1MSUc7A9f1XO/oFKT6QDxYtCTn5pvqgAJWPdCh1 oKdBeMR0M9WeA8y1Teh6scEA== X-Received: by 2002:a05:6102:f87:b0:605:8280:5e6b with SMTP id ada2fe7eead31-60a00634989mr971839137.16.1775812267168; Fri, 10 Apr 2026 02:11:07 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Fri, 10 Apr 2026 17:10:30 +0800 X-Gm-Features: AQROBzA6hLq7nxNSDWcXTgyXrfb2ic1Hj7R77e_KMzB9fc0hfDKs_AFGkI5hJ90 Message-ID: Subject: Re: FOR PORTION OF does not recompute GENERATED STORED columns that depend on the range column To: SATYANARAYANA NARLAPURAM Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000005f77ec064f17833d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005f77ec064f17833d Content-Type: text/plain; charset="UTF-8" Hi. ExecUpdate->ExecUpdateEpilogue->ExecForPortionOfLeftovers In ExecForPortionOfLeftovers, we have """ if (!resultRelInfo->ri_forPortionOf) { /* * If we don't have a ForPortionOfState yet, we must be a partition * child being hit for the first time. Make a copy from the root, with * our own tupleTableSlot. We do this lazily so that we don't pay the * price of unused partitions. */ ForPortionOfState *leafState = makeNode(ForPortionOfState); } """ We reached the end of ExecUpdate, and then suddenly initialized resultRelInfo->ri_forPortionOf. That seems wrong; we should initialize resultRelInfo->ri_forPortionOf earlier so other places can use that information, such as ForPortionOfState->fp_rangeAttno. We can initialize ForPortionOfState right after ExecModifyTable: """ /* If it's not the same as last time, we need to locate the rel */ if (resultoid != node->mt_lastResultOid) resultRelInfo = ExecLookupResultRelByOid(node, resultoid, false, true); """ In ExecForPortionOfLeftovers, we should use ForPortionOfState more and ForPortionOfExpr less. (ForPortionOfExpr and ForPortionOfState share some overlapping information; maybe we can eliminate some common fields or put ForPortionOfExpr into ForPortionOfState). As noted in [1], the FOR PORTION OF column is physically modified, even though we didn't require explicit UPDATE privileges, we failed to track this column in ExecGetUpdatedCols and ExecGetExtraUpdatedCols. This omission directly impacts the ExecInsertIndexTuples -> index_unchanged_by_update -> ExecGetExtraUpdatedCols execution path. We should ensure ExecGetExtraUpdatedCols also accounts for this column. Otherwise, we need a clearer explanation for why index_unchanged_by_update can safely ignore a column that is being physically modified. I have added regression test cases for CREATE TRIGGER UPDATE OF column_name. The attached patch also addressed the table inheritance issue in https://postgr.es/m/CAHg+QDcsXsUVaZ+JwM02yDRQEi=cL_rTH_ROLDYgOx004sQu7A@mail.gmail.com I've combined all these changes into a single patch for now, as they seem closely related. [1]: https://postgr.es/m/CACJufxHALFKca5SMn5DNnbrX2trPamVL6napn_nm35p15yw+rg@mail.gmail.com -- jian https://www.enterprisedb.com/ --0000000000005f77ec064f17833d Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-FOR-PORTION-OF-UPDATE-misc.patch" Content-Disposition: attachment; filename="v2-0001-FOR-PORTION-OF-UPDATE-misc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnsoqgue0 RnJvbSAxNWMyMWI4Mjk4N2RkOTA0OThjZGRiOTJjOTQ5MzQzMjIzNTQ0ZTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTAgQXByIDIwMjYgMTc6MDE6MTIgKzA4MDAKU3ViamVjdDogW1BBVENIIHYy IDEvMV0gRk9SIFBPUlRJT04gT0YgVVBEQVRFIG1pc2MKCldlIHJlYWNoZWQgdGhlIGVuZCBvZiBF eGVjVXBkYXRlLCBhbmQgdGhlbiBzdWRkZW5seSBpbml0aWFsaXplZApyZXN1bHRSZWxJbmZvLT5y aV9mb3JQb3J0aW9uT2YuICBUaGF0IHNlZW1zIHdyb25nOyB3ZSBzaG91bGQgaW5pdGlhbGl6ZQpy ZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YgZWFybGllciBzbyBvdGhlciBwbGFjZXMgY2Fu IHVzZSB0aGF0IGluZm9ybWF0aW9uLApzdWNoIGFzIEZvclBvcnRpb25PZlN0YXRlLT5mcF9yYW5n ZUF0dG5vLgoKcmVmYWN0b3IgRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycywgYWRkIGZ1bmN0aW9u IEV4ZWNJbml0Rm9yUG9ydGlvbk9mLgpGaXggRk9SIFBPUlRJT04gT0YgVVBEQVRFIG1vZGlmaWVk IGNvbHVtbiBhbmQgdGFibGUgaW5oZXJpdGVuY2UgaXNzdWUuCgpGb3IgVVBEQVRFIC4uLiBGT1Ig UE9SVElPTiBPRiwgdGhlIHJhbmdlIGNvbHVtbiBpcyBhY3R1YWxseSBiZWluZyBtb2RpZmllZAoo bmFycm93ZWQgdmlhIGludGVyc2VjdGlvbiksIGJ1dCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdXBk YXRlZENvbHMgYmVjYXVzZSB0aGUKdXNlciBkb2VzIG5vdCBuZWVkIFVQREFURSBwZXJtaXNzaW9u IG9uIGl0LiBTbyB3ZSBuZWVkIHRvIGFkZCBpdCB0bwpyaV9leHRyYVVwZGF0ZWRDb2xzLgoKZGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUhnK1FEY2Q9dDY5Z0xmOXlRZXhPMDdFSjJt eDBaNzBORkhvNmg5NFgxRURBPWhNMGdAbWFpbC5nbWFpbC5jb20KZGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQUhnK1FEY3NYc1VWYVorSndNMDJ5RFJRRWk9Y0xfclRIX1JPTERZZ094 MDA0c1F1N0FAbWFpbC5nbWFpbC5jb20KY29tbWl0ZmVzdCBlbnRyeTogaHR0cHM6Ly9jb21taXRm ZXN0LnBvc3RncmVzcWwub3JnL3BhdGNoLwotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNV dGlscy5jICAgICAgICAgICAgIHwgIDIyICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1v ZGlmeVRhYmxlLmMgICAgICAgfCAxNDggKysrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0IHwgMTIzICsrKysrKysrKysrKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yuc3FsICAgICAgfCAgODQgKysrKysrKysr KysKIDUgZmlsZXMgY2hhbmdlZCwgMzM2IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggMWViNmI5ZjFmNDAuLjVkZjdmMmVkZjg1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjVXRpbHMuYwpAQCAtMTQzMCw3ICsxNDMwLDI5IEBAIEV4ZWNHZXRF eHRyYVVwZGF0ZWRDb2xzKFJlc3VsdFJlbEluZm8gKnJlbGluZm8sIEVTdGF0ZSAqZXN0YXRlKQog ewogCS8qIENvbXB1dGUgdGhlIGluZm8gaWYgd2UgZGlkbid0IGFscmVhZHkgKi8KIAlpZiAoIXJl bGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHNfdmFsaWQpCisJeworCQlpZiAocmVsaW5mby0+cmlf Zm9yUG9ydGlvbk9mKQorCQl7CisJCQlNZW1vcnlDb250ZXh0IG9sZENvbnRleHQ7CisKKwkJCUF0 dHJOdW1iZXIJcmFuZ2VBdHRubyA9IHJlbGluZm8tPnJpX2ZvclBvcnRpb25PZi0+ZnBfcmFuZ2VB dHRubzsKKworCQkJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlc3RhdGUtPmVz X3F1ZXJ5X2N4dCk7CisKKwkJCS8qCisJCQkgKiBGb3IgVVBEQVRFIC4uLiBGT1IgUE9SVElPTiBP RiwgdGhlIHJhbmdlIGNvbHVtbiBpcyBhY3R1YWxseQorCQkJICogYmVpbmcgbW9kaWZpZWQgKG5h cnJvd2VkIHZpYSBpbnRlcnNlY3Rpb24pLCBidXQgaXQgaXMgbm90CisJCQkgKiBpbmNsdWRlZCBp biB1cGRhdGVkQ29scyBiZWNhdXNlIHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgVVBEQVRFCisJCQkg KiBwZXJtaXNzaW9uIG9uIGl0LiBTbyB3ZSBuZWVkIHRvIGFkZCBpdCB0byByaV9leHRyYVVwZGF0 ZWRDb2xzCisJCQkgKi8KKwkJCXJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHMgPQorCQkJCWJt c19hZGRfbWVtYmVyKHJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHMsIHJhbmdlQXR0bm8gLSBG aXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKworCQkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZENvbnRleHQpOworCQl9CisKIAkJRXhlY0luaXRHZW5lcmF0ZWQocmVsaW5mbywg ZXN0YXRlLCBDTURfVVBEQVRFKTsKKwl9CiAJcmV0dXJuIHJlbGluZm8tPnJpX2V4dHJhVXBkYXRl ZENvbHM7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggZWYy YTZiYzZlOWQuLjI1NDgwOWQ3ZmRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYwpAQCAtMTk3LDYgKzE5Nyw4IEBAIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY01lcmdl Tm90TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiBzdGF0aWMgdm9pZCBFeGVj U2V0dXBUcmFuc2l0aW9uQ2FwdHVyZVN0YXRlKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVT dGF0ZSAqZXN0YXRlKTsKIHN0YXRpYyB2b2lkIGZpcmVCU1RyaWdnZXJzKE1vZGlmeVRhYmxlU3Rh dGUgKm5vZGUpOwogc3RhdGljIHZvaWQgZmlyZUFTVHJpZ2dlcnMoTW9kaWZ5VGFibGVTdGF0ZSAq bm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjSW5pdEZvclBvcnRpb25PZihNb2RpZnlUYWJsZVN0YXRl ICptdHN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJIFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8pOwogCiAKIC8qCkBAIC00NzUsNiArNDc3LDIxIEBAIEV4ZWNJbml0R2VuZXJhdGVk KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJZWxzZQogCQl1cGRhdGVkQ29scyA9IE5V TEw7CiAKKwkvKgorCSAqIEZvciBVUERBVEUgLi4uIEZPUiBQT1JUSU9OIE9GLCB0aGUgcmFuZ2Ug Y29sdW1uIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQKKwkgKiAobmFycm93ZWQgdmlhIGludGVyc2Vj dGlvbiksIGJ1dCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdXBkYXRlZENvbHMKKwkgKiBiZWNhdXNl IHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgVVBEQVRFIHBlcm1pc3Npb24gb24gaXQuICBXZSBtdXN0 CisJICogYWNjb3VudCBmb3IgaXQgaGVyZSBzbyB0aGF0IGdlbmVyYXRlZCBjb2x1bW5zIHJlZmVy ZW5jaW5nIHRoZSByYW5nZQorCSAqIGNvbHVtbiBhcmUgcmVjb21wdXRlZC4KKwkgKi8KKwlpZiAo cmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mKQorCXsKKwkJQXR0ck51bWJlcglyYW5nZUF0 dG5vID0gcmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5vOworCisJ CXVwZGF0ZWRDb2xzID0gYm1zX2FkZF9tZW1iZXIoYm1zX2NvcHkodXBkYXRlZENvbHMpLAorCQkJ CQkJCQkJIHJhbmdlQXR0bm8gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsK Kwl9CisKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGJ1aWx0 IGluIHRoZSBwZXItcXVlcnkgbWVtb3J5CiAJICogY29udGV4dCBzbyB0aGV5J2xsIHN1cnZpdmUg dGhyb3VnaG91dCB0aGUgcXVlcnkuCkBAIC0xNDA4LDcgKzE0MjUsNiBAQCBFeGVjRm9yUG9ydGlv bk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAlNb2RpZnlUYWJsZVN0 YXRlICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsKIAlNb2RpZnlUYWJsZSAqbm9kZSA9IChN b2RpZnlUYWJsZSAqKSBtdHN0YXRlLT5wcy5wbGFuOwogCUZvclBvcnRpb25PZkV4cHIgKmZvclBv cnRpb25PZiA9IChGb3JQb3J0aW9uT2ZFeHByICopIG5vZGUtPmZvclBvcnRpb25PZjsKLQlBdHRy TnVtYmVyCXJhbmdlQXR0bm87CiAJRGF0dW0JCW9sZFJhbmdlOwogCVR5cGVDYWNoZUVudHJ5ICp0 eXBjYWNoZTsKIAlGb3JQb3J0aW9uT2ZTdGF0ZSAqZnBvU3RhdGU7CkBAIC0xNDIyLDM3ICsxNDM4 LDEwIEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250 ZXh0LAogCVJldHVyblNldEluZm8gcnNpOwogCWJvb2wJCWRpZEluaXQgPSBmYWxzZTsKIAlib29s CQlzaG91bGRGcmVlID0gZmFsc2U7CisJUmVzdWx0UmVsSW5mbyAqcm9vdFJlbEluZm8gPSBtdHN0 YXRlLT5yb290UmVzdWx0UmVsSW5mbzsKIAogCUxPQ0FMX0ZDSU5GTyhmY2luZm8sIDIpOwogCi0J aWYgKCFyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YpCi0JewotCQkvKgotCQkgKiBJZiB3 ZSBkb24ndCBoYXZlIGEgRm9yUG9ydGlvbk9mU3RhdGUgeWV0LCB3ZSBtdXN0IGJlIGEgcGFydGl0 aW9uCi0JCSAqIGNoaWxkIGJlaW5nIGhpdCBmb3IgdGhlIGZpcnN0IHRpbWUuIE1ha2UgYSBjb3B5 IGZyb20gdGhlIHJvb3QsIHdpdGgKLQkJICogb3VyIG93biB0dXBsZVRhYmxlU2xvdC4gV2UgZG8g dGhpcyBsYXppbHkgc28gdGhhdCB3ZSBkb24ndCBwYXkgdGhlCi0JCSAqIHByaWNlIG9mIHVudXNl ZCBwYXJ0aXRpb25zLgotCQkgKi8KLQkJRm9yUG9ydGlvbk9mU3RhdGUgKmxlYWZTdGF0ZSA9IG1h a2VOb2RlKEZvclBvcnRpb25PZlN0YXRlKTsKLQotCQlpZiAoIW10c3RhdGUtPnJvb3RSZXN1bHRS ZWxJbmZvKQotCQkJZWxvZyhFUlJPUiwgIm5vIHJvb3QgcmVsYXRpb24gYnV0IHJpX2ZvclBvcnRp b25PZiBpcyB1bmluaXRpYWxpemVkIik7Ci0KLQkJZnBvU3RhdGUgPSBtdHN0YXRlLT5yb290UmVz dWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mOwotCQlBc3NlcnQoZnBvU3RhdGUpOwotCi0JCWxl YWZTdGF0ZS0+ZnBfcmFuZ2VOYW1lID0gZnBvU3RhdGUtPmZwX3JhbmdlTmFtZTsKLQkJbGVhZlN0 YXRlLT5mcF9yYW5nZVR5cGUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VUeXBlOwotCQlsZWFmU3RhdGUt PmZwX3JhbmdlQXR0bm8gPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VBdHRubzsKLQkJbGVhZlN0YXRlLT5m cF90YXJnZXRSYW5nZSA9IGZwb1N0YXRlLT5mcF90YXJnZXRSYW5nZTsKLQkJbGVhZlN0YXRlLT5m cF9MZWZ0b3ZlciA9IGZwb1N0YXRlLT5mcF9MZWZ0b3ZlcjsKLQkJLyogRWFjaCBwYXJ0aXRpb24g bmVlZHMgYSBzbG90IG1hdGNoaW5nIGl0cyB0dXBsZSBkZXNjcmlwdG9yICovCi0JCWxlYWZTdGF0 ZS0+ZnBfRXhpc3RpbmcgPQotCQkJdGFibGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+cmlf UmVsYXRpb25EZXNjLAotCQkJCQkJCSAgJm10c3RhdGUtPnBzLnN0YXRlLT5lc190dXBsZVRhYmxl KTsKLQotCQlyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YgPSBsZWFmU3RhdGU7Ci0JfQog CWZwb1N0YXRlID0gcmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mOwogCW9sZHR1cGxlU2xv dCA9IGZwb1N0YXRlLT5mcF9FeGlzdGluZzsKIAlsZWZ0b3ZlclNsb3QgPSBmcG9TdGF0ZS0+ZnBf TGVmdG92ZXI7CkBAIC0xNDc1LDE5ICsxNDY0LDE4IEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3Zl cnMoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCiAJLyoKIAkgKiBHZXQgdGhlIG9sZCBy YW5nZSBvZiB0aGUgcmVjb3JkIGJlaW5nIHVwZGF0ZWQvZGVsZXRlZC4gTXVzdCByZWFkIHdpdGgK LQkgKiB0aGUgYXR0bm8gb2YgdGhlIGxlYWYgcGFydGl0aW9uIGJlaW5nIHVwZGF0ZWQuCisJICog dGhlIGF0dG5vIG9mIHRoZSBsZWFmIHBhcnRpdGlvbiBiZWluZyB1cGRhdGVkLCBubyBuZWVkIGRv IHRoaXMgZm9yCisJICogdGFibGUgaW5oZXJpdGVuY2UuCiAJICovCi0KLQlyYW5nZUF0dG5vID0g Zm9yUG9ydGlvbk9mLT5yYW5nZVZhci0+dmFyYXR0bm87Ci0JaWYgKHJlc3VsdFJlbEluZm8tPnJp X1Jvb3RSZXN1bHRSZWxJbmZvKQorCWlmIChyb290UmVsSW5mbyAmJgorCQlyb290UmVsSW5mby0+ cmlfUmVsYXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSkKIAkJbWFwID0gRXhlY0dldENoaWxkVG9Sb290TWFwKHJlc3VsdFJlbEluZm8pOwotCWlm IChtYXAgIT0gTlVMTCkKLQkJcmFuZ2VBdHRubyA9IG1hcC0+YXR0ck1hcC0+YXR0bnVtc1tyYW5n ZUF0dG5vIC0gMV07CisKIAlzbG90X2dldGFsbGF0dHJzKG9sZHR1cGxlU2xvdCk7CiAKLQlpZiAo b2xkdHVwbGVTbG90LT50dHNfaXNudWxsW3JhbmdlQXR0bm8gLSAxXSkKKwlpZiAob2xkdHVwbGVT bG90LT50dHNfaXNudWxsW2Zwb1N0YXRlLT5mcF9yYW5nZUF0dG5vIC0gMV0pCiAJCWVsb2coRVJS T1IsICJmb3VuZCBhIE5VTEwgcmFuZ2UgaW4gYSB0ZW1wb3JhbCB0YWJsZSIpOwotCW9sZFJhbmdl ID0gb2xkdHVwbGVTbG90LT50dHNfdmFsdWVzW3JhbmdlQXR0bm8gLSAxXTsKKwlvbGRSYW5nZSA9 IG9sZHR1cGxlU2xvdC0+dHRzX3ZhbHVlc1tmcG9TdGF0ZS0+ZnBfcmFuZ2VBdHRubyAtIDFdOwog CiAJLyoKIAkgKiBHZXQgdGhlIHJhbmdlJ3MgdHlwZSBjYWNoZSBlbnRyeS4gVGhpcyBpcyB3b3J0 aCBjYWNoaW5nIGZvciB0aGUgd2hvbGUKQEAgLTE1MjQsMTEgKzE1MTIsMTUgQEAgRXhlY0ZvclBv cnRpb25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJZmNpbmZvLT5h cmdzWzFdLmlzbnVsbCA9IGZhbHNlOwogCiAJLyoKLQkgKiBJZiB0aGVyZSBhcmUgcGFydGl0aW9u cywgd2UgbXVzdCBpbnNlcnQgaW50byB0aGUgcm9vdCB0YWJsZSwgc28gd2UgZ2V0Ci0JICogdHVw bGUgcm91dGluZy4gV2UgYWxyZWFkeSBzZXQgdXAgbGVmdG92ZXJTbG90IHdpdGggdGhlIHJvb3Qg dHVwbGUKLQkgKiBkZXNjcmlwdG9yLgorCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIHdlIGlu c2VydCBpbnRvIHRoZSByb290IHRhYmxlIHRvIGVuYWJsZSB0dXBsZQorCSAqIHJvdXRpbmcsIGFu ZCBsZWZ0b3ZlclNsb3QgaXMgY29uZmlndXJlZCB3aXRoIHRoZSByb290J3MgdHVwbGUKKwkgKiBk ZXNjcmlwdG9yLiBIb3dldmVyLCBmb3IgdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFuY2UsIG5v IG5lZWQgdHVwbGUKKwkgKiByb3V0aW5nIGFuZCBqdXN0IGluc2VydCBkaXJlY3RseSBpbnRvIHRo ZSBjaGlsZCB0YWJsZSB0byBwcmVzZXJ2ZQorCSAqIGNoaWxkLXNwZWNpZmljIGNvbHVtbnMuIElu IHRoYXQgY2FzZSwgbGVmdG92ZXJTbG90IHVzZXMgdGhlIGNoaWxkJ3MKKwkgKiAocmVzdWx0UmVs SW5mbykgdHVwbGUgZGVzY3JpcHRvci4KIAkgKi8KLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfUm9v dFJlc3VsdFJlbEluZm8pCisJaWYgKHJvb3RSZWxJbmZvICYmCisJCXJvb3RSZWxJbmZvLT5yaV9S ZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxF KQogCQlyZXN1bHRSZWxJbmZvID0gcmVzdWx0UmVsSW5mby0+cmlfUm9vdFJlc3VsdFJlbEluZm87 CiAKIAkvKgpAQCAtMTU4NSw4ICsxNTc3LDkgQEAgRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhN b2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCQlkaWRJbml0ID0gdHJ1ZTsKIAkJfQogCi0J CWxlZnRvdmVyU2xvdC0+dHRzX3ZhbHVlc1tmb3JQb3J0aW9uT2YtPnJhbmdlVmFyLT52YXJhdHRu byAtIDFdID0gbGVmdG92ZXI7Ci0JCWxlZnRvdmVyU2xvdC0+dHRzX2lzbnVsbFtmb3JQb3J0aW9u T2YtPnJhbmdlVmFyLT52YXJhdHRubyAtIDFdID0gZmFsc2U7CisJCWxlZnRvdmVyU2xvdC0+dHRz X3ZhbHVlc1tyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YtPmZwX3JhbmdlQXR0bm8gLSAx XSA9IGxlZnRvdmVyOworCQlsZWZ0b3ZlclNsb3QtPnR0c19pc251bGxbcmVzdWx0UmVsSW5mby0+ cmlfZm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5vIC0gMV0gPSBmYWxzZTsKKwogCQlFeGVjTWF0 ZXJpYWxpemVTbG90KGxlZnRvdmVyU2xvdCk7CiAKIAkJLyoKQEAgLTQ3NjEsNiArNDc1NCwxOCBA QCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJCQkJCQkJCQkJCSBmYWxz ZSwgdHJ1ZSk7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgRm9yUG9ydGlv bk9mU3RhdGUgeWV0LCB3ZSBtdXN0IGJlIGEgcGFydGl0aW9uCisJCSAqIGNoaWxkIGJlaW5nIGhp dCBmb3IgdGhlIGZpcnN0IHRpbWUuIE1ha2UgYSBjb3B5IGZyb20gdGhlIHJvb3QsIHdpdGgKKwkJ ICogb3VyIG93biB0dXBsZVRhYmxlU2xvdC4gV2UgZG8gdGhpcyBsYXppbHkgc28gdGhhdCB3ZSBk b24ndCBwYXkgdGhlCisJCSAqIHByaWNlIG9mIHVudXNlZCBwYXJ0aXRpb25zLgorCQkgKi8KKwkJ aWYgKCgoKE1vZGlmeVRhYmxlICopIGNvbnRleHQubXRzdGF0ZS0+cHMucGxhbiktPmZvclBvcnRp b25PZikgJiYKKwkJCSFyZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2YpCisJCXsKKwkJCUV4 ZWNJbml0Rm9yUG9ydGlvbk9mKGNvbnRleHQubXRzdGF0ZSwgZXN0YXRlLCByZXN1bHRSZWxJbmZv KTsKKwkJfQorCiAJCS8qCiAJCSAqIElmIHJlc3VsdFJlbEluZm8tPnJpX3VzZXNGZHdEaXJlY3RN b2RpZnkgaXMgdHJ1ZSwgYWxsIHdlIG5lZWQgdG8gZG8KIAkJICogaGVyZSBpcyBjb21wdXRlIHRo ZSBSRVRVUk5JTkcgZXhwcmVzc2lvbnMuCkBAIC01ODQ0LDMgKzU4NDksNjAgQEAgRXhlY1JlU2Nh bk1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpCiAJICovCiAJZWxvZyhFUlJPUiwg IkV4ZWNSZVNjYW5Nb2RpZnlUYWJsZSBpcyBub3QgaW1wbGVtZW50ZWQiKTsKIH0KKworc3RhdGlj IHZvaWQKK0V4ZWNJbml0Rm9yUG9ydGlvbk9mKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVT dGF0ZSAqZXN0YXRlLCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvKQoreworCU1lbW9yeUNv bnRleHQgb2xkY3h0OworCUZvclBvcnRpb25PZlN0YXRlICpsZWFmU3RhdGU7CisJVHVwbGVDb252 ZXJzaW9uTWFwICptYXAgPSBOVUxMOworCVJlc3VsdFJlbEluZm8gKnJvb3RSZWxJbmZvID0gbXRz dGF0ZS0+cm9vdFJlc3VsdFJlbEluZm87CisKKwlGb3JQb3J0aW9uT2ZTdGF0ZSAqZnBvU3RhdGUg PSBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mby0+cmlfZm9yUG9ydGlvbk9mOworCisJLyoKKwkg KiBGb3IgdHJhZGl0aW9uYWwgdGFibGUgaW5oZXJpdGFuY2UsIHdlIGluc2VydCBkaXJlY3RseSBp bnRvIHRoaXMKKwkgKiByZXN1bHRSZWxJbmZvOyBubyB0dXBsZSByb3V0aW5nIHRvIHRoZSBwYXJl bnQgaXMgcmVxdWlyZWQuCisJICovCisJaWYgKHJvb3RSZWxJbmZvICYmCisJCXJvb3RSZWxJbmZv LT5yaV9SZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQltYXAgPSBFeGVjR2V0Q2hpbGRUb1Jvb3RNYXAocmVzdWx0UmVsSW5mbyk7CisK KwkvKiBUaGluZ3MgYnVpbHQgaGVyZSBoYXZlIHRvIGxhc3QgZm9yIHRoZSBxdWVyeSBkdXJhdGlv bi4gKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9j eHQpOworCisJbGVhZlN0YXRlID0gbWFrZU5vZGUoRm9yUG9ydGlvbk9mU3RhdGUpOworCisJaWYg KCFtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbykKKwkJZWxvZyhFUlJPUiwgIm5vIHJvb3QgcmVs YXRpb24gYnV0IHJpX2ZvclBvcnRpb25PZiBpcyB1bmluaXRpYWxpemVkIik7CisKKwlsZWFmU3Rh dGUtPmZwX3JhbmdlTmFtZSA9IGZwb1N0YXRlLT5mcF9yYW5nZU5hbWU7CisJbGVhZlN0YXRlLT5m cF9yYW5nZVR5cGUgPSBmcG9TdGF0ZS0+ZnBfcmFuZ2VUeXBlOworCisJaWYgKG1hcCkKKwkJbGVh ZlN0YXRlLT5mcF9yYW5nZUF0dG5vID0gbWFwLT5hdHRyTWFwLT5hdHRudW1zW2Zwb1N0YXRlLT5m cF9yYW5nZUF0dG5vIC0gMV07CisJZWxzZQorCQlsZWFmU3RhdGUtPmZwX3JhbmdlQXR0bm8gPSBm cG9TdGF0ZS0+ZnBfcmFuZ2VBdHRubzsKKworCWxlYWZTdGF0ZS0+ZnBfdGFyZ2V0UmFuZ2UgPSBm cG9TdGF0ZS0+ZnBfdGFyZ2V0UmFuZ2U7CisKKwlpZiAocm9vdFJlbEluZm8gJiYKKwkJcm9vdFJl bEluZm8tPnJpX1JlbGF0aW9uRGVzYy0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEUpCisJeworCQlsZWFmU3RhdGUtPmZwX0xlZnRvdmVyID0KKwkJCUV4ZWNJbml0 RXh0cmFUdXBsZVNsb3QobXRzdGF0ZS0+cHMuc3RhdGUsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0 RGVzY3IocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjKSwKKwkJCQkJCQkJICAgJlRUU09w c1ZpcnR1YWwpOworCX0KKwllbHNlCisJCWxlYWZTdGF0ZS0+ZnBfTGVmdG92ZXIgPSBmcG9TdGF0 ZS0+ZnBfTGVmdG92ZXI7CisKKwkvKiBFYWNoIHBhcnRpdGlvbiBuZWVkcyBhIHNsb3QgbWF0Y2hp bmcgaXRzIHR1cGxlIGRlc2NyaXB0b3IgKi8KKwlsZWFmU3RhdGUtPmZwX0V4aXN0aW5nID0KKwkJ dGFibGVfc2xvdF9jcmVhdGUocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJ ICAmbXRzdGF0ZS0+cHMuc3RhdGUtPmVzX3R1cGxlVGFibGUpOworCisJcmVzdWx0UmVsSW5mby0+ cmlfZm9yUG9ydGlvbk9mID0gbGVhZlN0YXRlOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDEzMzU5MTgwZDI1Li41M2MxMzgzMTBk YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTQ3Nyw3ICs0NzcsOCBAQCB0eXBlZGVmIHN0cnVj dCBGb3JQb3J0aW9uT2ZTdGF0ZQogCU5vZGVUYWcJCXR5cGU7CiAKIAljaGFyCSAgICpmcF9yYW5n ZU5hbWU7CS8qIHRoZSBjb2x1bW4gbmFtZWQgaW4gRk9SIFBPUlRJT04gT0YgKi8KLQlPaWQJCQlm cF9yYW5nZVR5cGU7CS8qIHRoZSB0eXBlIG9mIHRoZSBGT1IgUE9SVElPTiBPRiBleHByZXNzaW9u ICovCisJT2lkCQkJZnBfcmFuZ2VUeXBlOwkvKiB0aGUgYmFzZSB0eXBlIChub3QgZG9tYWluKSBv ZiB0aGUgRk9SCisJCQkJCQkJCSAqIFBPUlRJT04gT0YgZXhwcmVzc2lvbiAqLwogCWludAkJCWZw X3JhbmdlQXR0bm87CS8qIHRoZSBhdHRubyBvZiB0aGUgcmFuZ2UgY29sdW1uICovCiAJRGF0dW0J CWZwX3RhcmdldFJhbmdlOyAvKiB0aGUgcmFuZ2UvbXVsdGlyYW5nZSBmcm9tIEZPUiBQT1JUSU9O IE9GICovCiAJVHlwZUNhY2hlRW50cnkgKmZwX2xlZnRvdmVyc3R5cGNhY2hlOwkvKiB0eXBlIGNh Y2hlIGVudHJ5IG9mIHRoZSByYW5nZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zv cl9wb3J0aW9uX29mLm91dAppbmRleCAzMWY3NzJjNzIzZC4uNDQwNWU4OGM5Y2MgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CkBAIC0xMzY1LDYgKzEz NjUsOSBAQCAkJDsKIENSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfc3RtdAogICBCRUZPUkUgSU5T RVJUIE9SIFVQREFURSBPUiBERUxFVEUgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAogICBGT1IgRUFD SCBTVEFURU1FTlQgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7 CitDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3N0bXQxCisgIEJFRk9SRSBVUERBVEUgT0YgdmFs aWRfYXQgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAorICBGT1IgRUFDSCBTVEFURU1FTlQgRVhFQ1VU RSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CiBDUkVBVEUgVFJJR0dFUiBm cG9fYWZ0ZXJfaW5zZXJ0X3N0bXQKICAgQUZURVIgSU5TRVJUIE9OIGZvcl9wb3J0aW9uX29mX3Rl c3QKICAgRk9SIEVBQ0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihm YWxzZSwgZmFsc2UpOwpAQCAtMTM3OCw2ICsxMzgxLDkgQEAgQ1JFQVRFIFRSSUdHRVIgZnBvX2Fm dGVyX2RlbGV0ZV9zdG10CiBDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdwogICBCRUZPUkUg SU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAogICBGT1Ig RUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CitD UkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdzEKKyAgQkVGT1JFIFVQREFURSBPRiB2YWxpZF9h dCBPTiBmb3JfcG9ydGlvbl9vZl90ZXN0CisgIEZPUiBFQUNIIFJPVyBFWEVDVVRFIFBST0NFRFVS RSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKIENSRUFURSBUUklHR0VSIGZwb19hZnRlcl9p bnNlcnRfcm93CiAgIEFGVEVSIElOU0VSVCBPTiBmb3JfcG9ydGlvbl9vZl90ZXN0CiAgIEZPUiBF QUNIIFJPVyBFWEVDVVRFIFBST0NFRFVSRSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKQEAg LTEzOTQsOSArMTQwMCwxNSBAQCBVUERBVEUgZm9yX3BvcnRpb25fb2ZfdGVzdAogTk9USUNFOiAg ZnBvX2JlZm9yZV9zdG10OiBCRUZPUkUgVVBEQVRFIFNUQVRFTUVOVDoKIE5PVElDRTogICAgb2xk OiA8TlVMTD4KIE5PVElDRTogICAgbmV3OiA8TlVMTD4KK05PVElDRTogIGZwb19iZWZvcmVfc3Rt dDE6IEJFRk9SRSBVUERBVEUgU1RBVEVNRU5UOgorTk9USUNFOiAgICBvbGQ6IDxOVUxMPgorTk9U SUNFOiAgICBuZXc6IDxOVUxMPgogTk9USUNFOiAgZnBvX2JlZm9yZV9yb3c6IEJFRk9SRSBVUERB VEUgUk9XOgogTk9USUNFOiAgICBvbGQ6IFsyMDE5LTAxLTAxLDIwMzAtMDEtMDEpCiBOT1RJQ0U6 ICAgIG5ldzogWzIwMjEtMDEtMDEsMjAyMi0wMS0wMSkKK05PVElDRTogIGZwb19iZWZvcmVfcm93 MTogQkVGT1JFIFVQREFURSBST1c6CitOT1RJQ0U6ICAgIG9sZDogWzIwMTktMDEtMDEsMjAzMC0w MS0wMSkKK05PVElDRTogICAgbmV3OiBbMjAyMS0wMS0wMSwyMDIyLTAxLTAxKQogTk9USUNFOiAg ZnBvX2JlZm9yZV9zdG10OiBCRUZPUkUgSU5TRVJUIFNUQVRFTUVOVDoKIE5PVElDRTogICAgb2xk OiA8TlVMTD4KIE5PVElDRTogICAgbmV3OiA8TlVMTD4KQEAgLTIwOTcsNCArMjEwOSwxMTUgQEAg U0VMRUNUICogRlJPTSB0ZW1wb3JhbF9wYXJ0aXRpb25lZF81IE9SREVSIEJZIGlkLCB2YWxpZF9h dDsKICg0IHJvd3MpCiAKIERST1AgVEFCTEUgdGVtcG9yYWxfcGFydGl0aW9uZWQ7CistLSBVUERB VEUgRk9SIFBPUlRJT04gT0Ygd2l0aCBnZW5lcmF0ZWQgc3RvcmVkIGNvbHVtbnMKKy0tIFRoZSBn ZW5lcmF0ZWQgY29sdW1uIGRlcGVuZHMgb24gdGhlIHJhbmdlIGNvbHVtbiwgc28gaXQgbXVzdCBi ZQorLS0gcmVjb21wdXRlZCB3aGVuIEZPUiBQT1JUSU9OIE9GIG5hcnJvd3MgdGhlIHJhbmdlLgor Q1JFQVRFIFRBQkxFIGZwb19nZW5lcmF0ZWQgKAorICBpZCBpbnQsCisgIHZhbGlkX2F0IGludDRy YW5nZSwKKyAgcmFuZ2VfbGVuIGludCBHRU5FUkFURUQgQUxXQVlTIEFTICh1cHBlcih2YWxpZF9h dCkgLSBsb3dlcih2YWxpZF9hdCkpIFNUT1JFRCwKKyAgcmFuZ2VfbGVudiBpbnQgR0VORVJBVEVE IEFMV0FZUyBBUyAodXBwZXIodmFsaWRfYXQpIC0gbG93ZXIodmFsaWRfYXQpKQorKTsKK0lOU0VS VCBJTlRPIGZwb19nZW5lcmF0ZWQgKGlkLCB2YWxpZF9hdCkgVkFMVUVTICgxLCAnWzEwLDEwMCkn KTsKK1NFTEVDVCAqIEZST00gZnBvX2dlbmVyYXRlZCBPUkRFUiBCWSB2YWxpZF9hdDsKKyBpZCB8 IHZhbGlkX2F0IHwgcmFuZ2VfbGVuIHwgcmFuZ2VfbGVudiAKKy0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0KKyAgMSB8IFsxMCwxMDApIHwgICAgICAgIDkwIHwgICAgICAg ICA5MAorKDEgcm93KQorCitDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdzEKKyAgQkVGT1JF IFVQREFURSBPRiB2YWxpZF9hdCBPTiBmcG9fZ2VuZXJhdGVkCisgIEZPUiBFQUNIIFJPVyBFWEVD VVRFIFBST0NFRFVSRSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKK0NSRUFURSBUUklHR0VS IGZwb19iZWZvcmVfcm93MgorICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZwb19nZW5l cmF0ZWQKKyAgRk9SIEVBQ0ggU1RBVEVNRU5UIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dl cihmYWxzZSwgZmFsc2UpOworLS0gQWZ0ZXIgdGhlIEZPUiBQT1JUSU9OIE9GIChGUE8pIHVwZGF0 ZSwgYWxsIHRocmVlIHJlc3VsdGluZyByb3dzCistLSAobGVmdG92ZXItYmVmb3JlLCB1cGRhdGVk LCBhbmQgbGVmdG92ZXItYWZ0ZXIpIG11c3QgY29udGFpbiB0aGUgY29ycmVjdAorLS0gdmFsdWVz IGZvciByYW5nZV9sZW4gYW5kIHJhbmdlX2xlbnYuCistLSBUcmlnZ2VycyBmcG9fYmVmb3JlX3Jv dzEgYW5kIGZwb19iZWZvcmVfcm93MiBzaG91bGQgYWxzbyBiZSBmaXJlZC4KK1VQREFURSBmcG9f Z2VuZXJhdGVkCisgIEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZST00gMzAgVE8gNzAKKyAgU0VU IGlkID0gMjsKK05PVElDRTogIGZwb19iZWZvcmVfcm93MjogQkVGT1JFIFVQREFURSBTVEFURU1F TlQ6CitOT1RJQ0U6ICAgIG9sZDogPE5VTEw+CitOT1RJQ0U6ICAgIG5ldzogPE5VTEw+CitOT1RJ Q0U6ICBmcG9fYmVmb3JlX3JvdzE6IEJFRk9SRSBVUERBVEUgUk9XOgorTk9USUNFOiAgICBvbGQ6 IFsxMCwxMDApCitOT1RJQ0U6ICAgIG5ldzogWzMwLDcwKQorU0VMRUNUICogRlJPTSBmcG9fZ2Vu ZXJhdGVkIE9SREVSIEJZIHZhbGlkX2F0OworIGlkIHwgdmFsaWRfYXQgfCByYW5nZV9sZW4gfCBy YW5nZV9sZW52IAorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorICAx IHwgWzEwLDMwKSAgfCAgICAgICAgMjAgfCAgICAgICAgIDIwCisgIDIgfCBbMzAsNzApICB8ICAg ICAgICA0MCB8ICAgICAgICAgNDAKKyAgMSB8IFs3MCwxMDApIHwgICAgICAgIDMwIHwgICAgICAg ICAzMAorKDMgcm93cykKKworLS0gQWxzbyB0ZXN0IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHRo YXQgcmVmZXJlbmNlcyBib3RoIGEgU0VUIGNvbHVtbgorLS0gYW5kIHRoZSByYW5nZSBjb2x1bW4u CitEUk9QIFRBQkxFIGZwb19nZW5lcmF0ZWQ7CitDUkVBVEUgVEFCTEUgZnBvX2dlbmVyYXRlZCAo CisgIGlkIGludCwKKyAgdmFsaWRfYXQgaW50NHJhbmdlLAorICBpZF9wbHVzX2xlbiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAoaWQgKyB1cHBlcih2YWxpZF9hdCkgLSBsb3dlcih2YWxpZF9hdCkp IFNUT1JFRCwKKyAgaWRfcGx1c19sZW52IGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpZCArIHVw cGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkKKyk7CitJTlNFUlQgSU5UTyBmcG9fZ2Vu ZXJhdGVkIChpZCwgdmFsaWRfYXQpIFZBTFVFUyAoMSwgJ1sxMCwxMDApJyk7CitTRUxFQ1QgKiBG Uk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9hdCB8IGlk X3BsdXNfbGVuIHwgaWRfcGx1c19sZW52IAorLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0KKyAgMSB8IFsxMCwxMDApIHwgICAgICAgICAgOTEgfCAgICAgICAgICAg OTEKKygxIHJvdykKKworVVBEQVRFIGZwb19nZW5lcmF0ZWQKKyAgRk9SIFBPUlRJT04gT0YgdmFs aWRfYXQgRlJPTSAzMCBUTyA3MAorICBTRVQgaWQgPSAyOworU0VMRUNUICogRlJPTSBmcG9fZ2Vu ZXJhdGVkIE9SREVSIEJZIHZhbGlkX2F0OworIGlkIHwgdmFsaWRfYXQgfCBpZF9wbHVzX2xlbiB8 IGlkX3BsdXNfbGVudiAKKy0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tCisgIDEgfCBbMTAsMzApICB8ICAgICAgICAgIDIxIHwgICAgICAgICAgIDIxCisgIDIgfCBb MzAsNzApICB8ICAgICAgICAgIDQyIHwgICAgICAgICAgIDQyCisgIDEgfCBbNzAsMTAwKSB8ICAg ICAgICAgIDMxIHwgICAgICAgICAgIDMxCisoMyByb3dzKQorCitEUk9QIFRBQkxFIGZwb19nZW5l cmF0ZWQ7CistLSBVUERBVEUgRk9SIFBPUlRJT04gT0Ygd2l0aCB0YWJsZSBpbmhlcml0YW5jZQor LS0gTGVmdG92ZXIgcm93cyBtdXN0IHN0YXkgaW4gdGhlIGNoaWxkIHRhYmxlLCBwcmVzZXJ2aW5n IGNoaWxkLXNwZWNpZmljIGNvbHVtbnMuCitDUkVBVEUgVEFCTEUgZnBvX2luaF9wYXJlbnQgKAor ICBpZCBpbnQ0cmFuZ2UsCisgIHZhbGlkX2F0IGRhdGVyYW5nZSwKKyAgbmFtZSB0ZXh0CispOwor Q1JFQVRFIFRBQkxFIGZwb19pbmhfY2hpbGQgKAorICBkZXNjcmlwdGlvbiB0ZXh0CispIElOSEVS SVRTIChmcG9faW5oX3BhcmVudCk7CitJTlNFUlQgSU5UTyBmcG9faW5oX2NoaWxkIChpZCwgdmFs aWRfYXQsIG5hbWUsIGRlc2NyaXB0aW9uKSBWQUxVRVMKKyAgKCdbMSwyKScsICdbMjAxOC0wMS0w MSwyMDE5LTAxLTAxKScsICdvbmUnLCAnaW5pdGlhbCcpOworLS0gVXBkYXRlIHRhcmdldHMgdGhl IHBhcmVudDsgdGhlIG1hdGNoaW5nIHJvdyBsaXZlcyBpbiB0aGUgY2hpbGQuCitVUERBVEUgZnBv X2luaF9wYXJlbnQgRk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAxOC0wNC0wMScgVE8g JzIwMTgtMTAtMDEnCisgIFNFVCBuYW1lID0gJ29uZV4xJzsKKy0tIEFsbCB0aHJlZSByb3dzIHNo b3VsZCBiZSBpbiB0aGUgY2hpbGQsIHdpdGggZGVzY3JpcHRpb24gcHJlc2VydmVkLgorU0VMRUNU IHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9NIGZwb19pbmhfcGFyZW50IE9SREVSIEJZIHZhbGlk X2F0OworICAgdGFibGVvaWQgICAgfCAgaWQgICB8ICAgICAgICB2YWxpZF9hdCAgICAgICAgIHwg bmFtZSAgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0KKyBmcG9faW5oX2NoaWxkIHwgWzEsMikgfCBbMjAxOC0wMS0wMSwyMDE4LTA0LTAx KSB8IG9uZQorIGZwb19pbmhfY2hpbGQgfCBbMSwyKSB8IFsyMDE4LTA0LTAxLDIwMTgtMTAtMDEp IHwgb25lXjEKKyBmcG9faW5oX2NoaWxkIHwgWzEsMikgfCBbMjAxOC0xMC0wMSwyMDE5LTAxLTAx KSB8IG9uZQorKDMgcm93cykKKworU0VMRUNUICogRlJPTSBmcG9faW5oX2NoaWxkIE9SREVSIEJZ IHZhbGlkX2F0OworICBpZCAgIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lICB8IGRl c2NyaXB0aW9uIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tLQorIFsxLDIpIHwgWzIwMTgtMDEtMDEsMjAxOC0wNC0wMSkgfCBvbmUgICB8IGlu aXRpYWwKKyBbMSwyKSB8IFsyMDE4LTA0LTAxLDIwMTgtMTAtMDEpIHwgb25lXjEgfCBpbml0aWFs CisgWzEsMikgfCBbMjAxOC0xMC0wMSwyMDE5LTAxLTAxKSB8IG9uZSAgIHwgaW5pdGlhbAorKDMg cm93cykKKworLS0gTm8gcm93cyBzaG91bGQgaGF2ZSBsZWFrZWQgaW50byB0aGUgcGFyZW50Lgor U0VMRUNUICogRlJPTSBPTkxZIGZwb19pbmhfcGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworIGlk IHwgdmFsaWRfYXQgfCBuYW1lIAorLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKwor RFJPUCBUQUJMRSBmcG9faW5oX3BhcmVudCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBmcG9faW5oX2NoaWxkCiBSRVNFVCBkYXRlc3R5bGU7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlvbl9vZi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9mb3JfcG9ydGlvbl9vZi5zcWwKaW5kZXggZDQwNjJhY2YxZDEuLjk1ZWZhNjQwMzg5IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JfcG9ydGlvbl9vZi5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yuc3FsCkBAIC05MTMsNiArOTEzLDEw IEBAIENSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfc3RtdAogICBCRUZPUkUgSU5TRVJUIE9SIFVQ REFURSBPUiBERUxFVEUgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAogICBGT1IgRUFDSCBTVEFURU1F TlQgRVhFQ1VURSBQUk9DRURVUkUgZHVtcF90cmlnZ2VyKGZhbHNlLCBmYWxzZSk7CiAKK0NSRUFU RSBUUklHR0VSIGZwb19iZWZvcmVfc3RtdDEKKyAgQkVGT1JFIFVQREFURSBPRiB2YWxpZF9hdCBP TiBmb3JfcG9ydGlvbl9vZl90ZXN0CisgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NF RFVSRSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKKwogQ1JFQVRFIFRSSUdHRVIgZnBvX2Fm dGVyX2luc2VydF9zdG10CiAgIEFGVEVSIElOU0VSVCBPTiBmb3JfcG9ydGlvbl9vZl90ZXN0CiAg IEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NFRFVSRSBkdW1wX3RyaWdnZXIoZmFsc2Us IGZhbHNlKTsKQEAgLTkzMSw2ICs5MzUsMTAgQEAgQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV9y b3cKICAgQkVGT1JFIElOU0VSVCBPUiBVUERBVEUgT1IgREVMRVRFIE9OIGZvcl9wb3J0aW9uX29m X3Rlc3QKICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxz ZSwgZmFsc2UpOwogCitDUkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdzEKKyAgQkVGT1JFIFVQ REFURSBPRiB2YWxpZF9hdCBPTiBmb3JfcG9ydGlvbl9vZl90ZXN0CisgIEZPUiBFQUNIIFJPVyBF WEVDVVRFIFBST0NFRFVSRSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKKwogQ1JFQVRFIFRS SUdHRVIgZnBvX2FmdGVyX2luc2VydF9yb3cKICAgQUZURVIgSU5TRVJUIE9OIGZvcl9wb3J0aW9u X29mX3Rlc3QKICAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihm YWxzZSwgZmFsc2UpOwpAQCAtMTM2NSw0ICsxMzczLDgwIEBAIFNFTEVDVCAqIEZST00gdGVtcG9y YWxfcGFydGl0aW9uZWRfNSBPUkRFUiBCWSBpZCwgdmFsaWRfYXQ7CiAKIERST1AgVEFCTEUgdGVt cG9yYWxfcGFydGl0aW9uZWQ7CiAKKy0tIFVQREFURSBGT1IgUE9SVElPTiBPRiB3aXRoIGdlbmVy YXRlZCBzdG9yZWQgY29sdW1ucworLS0gVGhlIGdlbmVyYXRlZCBjb2x1bW4gZGVwZW5kcyBvbiB0 aGUgcmFuZ2UgY29sdW1uLCBzbyBpdCBtdXN0IGJlCistLSByZWNvbXB1dGVkIHdoZW4gRk9SIFBP UlRJT04gT0YgbmFycm93cyB0aGUgcmFuZ2UuCitDUkVBVEUgVEFCTEUgZnBvX2dlbmVyYXRlZCAo CisgIGlkIGludCwKKyAgdmFsaWRfYXQgaW50NHJhbmdlLAorICByYW5nZV9sZW4gaW50IEdFTkVS QVRFRCBBTFdBWVMgQVMgKHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0KSkgU1RPUkVE LAorICByYW5nZV9sZW52IGludCBHRU5FUkFURUQgQUxXQVlTIEFTICh1cHBlcih2YWxpZF9hdCkg LSBsb3dlcih2YWxpZF9hdCkpCispOworSU5TRVJUIElOVE8gZnBvX2dlbmVyYXRlZCAoaWQsIHZh bGlkX2F0KSBWQUxVRVMgKDEsICdbMTAsMTAwKScpOworCitTRUxFQ1QgKiBGUk9NIGZwb19nZW5l cmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CisKK0NSRUFURSBUUklHR0VSIGZwb19iZWZvcmVfcm93 MQorICBCRUZPUkUgVVBEQVRFIE9GIHZhbGlkX2F0IE9OIGZwb19nZW5lcmF0ZWQKKyAgRk9SIEVB Q0ggUk9XIEVYRUNVVEUgUFJPQ0VEVVJFIGR1bXBfdHJpZ2dlcihmYWxzZSwgZmFsc2UpOworCitD UkVBVEUgVFJJR0dFUiBmcG9fYmVmb3JlX3JvdzIKKyAgQkVGT1JFIFVQREFURSBPRiB2YWxpZF9h dCBPTiBmcG9fZ2VuZXJhdGVkCisgIEZPUiBFQUNIIFNUQVRFTUVOVCBFWEVDVVRFIFBST0NFRFVS RSBkdW1wX3RyaWdnZXIoZmFsc2UsIGZhbHNlKTsKKworLS0gQWZ0ZXIgdGhlIEZPUiBQT1JUSU9O IE9GIChGUE8pIHVwZGF0ZSwgYWxsIHRocmVlIHJlc3VsdGluZyByb3dzCistLSAobGVmdG92ZXIt YmVmb3JlLCB1cGRhdGVkLCBhbmQgbGVmdG92ZXItYWZ0ZXIpIG11c3QgY29udGFpbiB0aGUgY29y cmVjdAorLS0gdmFsdWVzIGZvciByYW5nZV9sZW4gYW5kIHJhbmdlX2xlbnYuCistLSBUcmlnZ2Vy cyBmcG9fYmVmb3JlX3JvdzEgYW5kIGZwb19iZWZvcmVfcm93MiBzaG91bGQgYWxzbyBiZSBmaXJl ZC4KK1VQREFURSBmcG9fZ2VuZXJhdGVkCisgIEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZST00g MzAgVE8gNzAKKyAgU0VUIGlkID0gMjsKKworU0VMRUNUICogRlJPTSBmcG9fZ2VuZXJhdGVkIE9S REVSIEJZIHZhbGlkX2F0OworCistLSBBbHNvIHRlc3Qgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4g dGhhdCByZWZlcmVuY2VzIGJvdGggYSBTRVQgY29sdW1uCistLSBhbmQgdGhlIHJhbmdlIGNvbHVt bi4KK0RST1AgVEFCTEUgZnBvX2dlbmVyYXRlZDsKK0NSRUFURSBUQUJMRSBmcG9fZ2VuZXJhdGVk ICgKKyAgaWQgaW50LAorICB2YWxpZF9hdCBpbnQ0cmFuZ2UsCisgIGlkX3BsdXNfbGVuIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIChpZCArIHVwcGVyKHZhbGlkX2F0KSAtIGxvd2VyKHZhbGlkX2F0 KSkgU1RPUkVELAorICBpZF9wbHVzX2xlbnYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlkICsg dXBwZXIodmFsaWRfYXQpIC0gbG93ZXIodmFsaWRfYXQpKQorKTsKKworSU5TRVJUIElOVE8gZnBv X2dlbmVyYXRlZCAoaWQsIHZhbGlkX2F0KSBWQUxVRVMgKDEsICdbMTAsMTAwKScpOworU0VMRUNU ICogRlJPTSBmcG9fZ2VuZXJhdGVkIE9SREVSIEJZIHZhbGlkX2F0OworCitVUERBVEUgZnBvX2dl bmVyYXRlZAorICBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NIDMwIFRPIDcwCisgIFNFVCBp ZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGZwb19nZW5lcmF0ZWQgT1JERVIgQlkgdmFsaWRfYXQ7CitE Uk9QIFRBQkxFIGZwb19nZW5lcmF0ZWQ7CisKKworLS0gVVBEQVRFIEZPUiBQT1JUSU9OIE9GIHdp dGggdGFibGUgaW5oZXJpdGFuY2UKKy0tIExlZnRvdmVyIHJvd3MgbXVzdCBzdGF5IGluIHRoZSBj aGlsZCB0YWJsZSwgcHJlc2VydmluZyBjaGlsZC1zcGVjaWZpYyBjb2x1bW5zLgorQ1JFQVRFIFRB QkxFIGZwb19pbmhfcGFyZW50ICgKKyAgaWQgaW50NHJhbmdlLAorICB2YWxpZF9hdCBkYXRlcmFu Z2UsCisgIG5hbWUgdGV4dAorKTsKK0NSRUFURSBUQUJMRSBmcG9faW5oX2NoaWxkICgKKyAgZGVz Y3JpcHRpb24gdGV4dAorKSBJTkhFUklUUyAoZnBvX2luaF9wYXJlbnQpOworSU5TRVJUIElOVE8g ZnBvX2luaF9jaGlsZCAoaWQsIHZhbGlkX2F0LCBuYW1lLCBkZXNjcmlwdGlvbikgVkFMVUVTCisg ICgnWzEsMiknLCAnWzIwMTgtMDEtMDEsMjAxOS0wMS0wMSknLCAnb25lJywgJ2luaXRpYWwnKTsK KworLS0gVXBkYXRlIHRhcmdldHMgdGhlIHBhcmVudDsgdGhlIG1hdGNoaW5nIHJvdyBsaXZlcyBp biB0aGUgY2hpbGQuCitVUERBVEUgZnBvX2luaF9wYXJlbnQgRk9SIFBPUlRJT04gT0YgdmFsaWRf YXQgRlJPTSAnMjAxOC0wNC0wMScgVE8gJzIwMTgtMTAtMDEnCisgIFNFVCBuYW1lID0gJ29uZV4x JzsKKworLS0gQWxsIHRocmVlIHJvd3Mgc2hvdWxkIGJlIGluIHRoZSBjaGlsZCwgd2l0aCBkZXNj cmlwdGlvbiBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00gZnBv X2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CitTRUxFQ1QgKiBGUk9NIGZwb19pbmhfY2hp bGQgT1JERVIgQlkgdmFsaWRfYXQ7CistLSBObyByb3dzIHNob3VsZCBoYXZlIGxlYWtlZCBpbnRv IHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIE9OTFkgZnBvX2luaF9wYXJlbnQgT1JERVIgQlkg dmFsaWRfYXQ7CisKK0RST1AgVEFCTEUgZnBvX2luaF9wYXJlbnQgQ0FTQ0FERTsKKwogUkVTRVQg ZGF0ZXN0eWxlOwotLSAKMi4zNC4xCgo= --0000000000005f77ec064f17833d--