Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rB2uR-009FMd-Fx for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Dec 2023 01:10:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rB2uP-00DoY4-1K for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Dec 2023 01:10:33 +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.94.2) (envelope-from ) id 1rB2uO-00DoXw-LR for pgsql-hackers@lists.postgresql.org; Thu, 07 Dec 2023 01:10:32 +0000 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rB2uH-00ATc2-D3 for pgsql-hackers@postgresql.org; Thu, 07 Dec 2023 01:10:32 +0000 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-5d279bcce64so1123447b3.3 for ; Wed, 06 Dec 2023 17:10:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joeconway.com; s=google; t=1701911424; x=1702516224; darn=postgresql.org; h=in-reply-to:autocrypt:references:cc:to:from:content-language :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=fri9GPTQLbuWDlXC4IasH0Xt8ZHjMxHW4a17uGwKzu8=; b=f03Xj3NdszTH1xyUHfDrTfbX1fT2xYB4VV+7WilGGPG1AAgyvM040/2tgViSAE77Ta pmqH5KEBqbvqSRwsopSFQ4TJJNZewMYpzlMLhamN2KKKq7ESO9JX3uYwfnxIzdsINeP4 J4RA/Ie1CG5LZKZZ0AiGNxEKFJrKL1fuxUzOMwU5CmqsxOhtwsTDpwxgcKWvCTA6pRnF woGLXPNTfnnezlam5/o3ipvnhCeFNGgLTnY3INOUQmDS7WY1yZvrbbjeYclAy+3iJ1hf Gx25fZDfrETmp9Kws4awR9j6y+bEGKereEjekvXqlVeg0uDiAzMPiZrp/WPhOOajF2NS ae2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701911424; x=1702516224; h=in-reply-to:autocrypt:references:cc:to:from:content-language :subject:user-agent:mime-version:date:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=fri9GPTQLbuWDlXC4IasH0Xt8ZHjMxHW4a17uGwKzu8=; b=r/wHrZcC2JgleTxxCMLce/0y5wawZmdyO0dEArEq/HTiYUO9ggl0MTswZpvLpVIZFc k0zZ84dIV0L7OTHS5NCV0ilWAiOKCr4hyzOCqr4fJVIR7KpbCM5aFjSKu/x+cuDP5ASO bIrfFEh05IjfjrZCYmwzMzL9ZBkXKrdU+XGLi8yZDclAObu79Wzb3Fy9607tMIOfRxW4 kd/Vl9VVfTkTFlC7SDbpwa9xFLODWVoeve6EH68qOCUM8cyctRaodiqtb+xIlj+WUUzj l6cAB7IjcdPHvYLbbHtK8T4/KVepD/Ex6iTwo3hUdcfrHYDGbQ58BuKpgqXXpwFmI64v ttxQ== X-Gm-Message-State: AOJu0YzF3oXYfx72WXwwcg/MCx4G9KDlY0TkNoY9s5thM3Ahpizhmk5M fAkaPEOcS6h5PjnLK6M/zR2Cog== X-Google-Smtp-Source: AGHT+IFVz1ft6uIv5KyhnOfymmynTnyz9iZROhwDJF+gR8bdsjk23r9fjI2t65eqZURDtK0q13tPXg== X-Received: by 2002:a81:6d45:0:b0:5ae:c0f2:cd42 with SMTP id i66-20020a816d45000000b005aec0f2cd42mr1735199ywc.43.1701911423699; Wed, 06 Dec 2023 17:10:23 -0800 (PST) Received: from [192.168.4.41] (162-239-31-113.lightspeed.dybhfl.sbcglobal.net. [162.239.31.113]) by smtp.gmail.com with ESMTPSA id z6-20020a81c206000000b0059bcadded9dsm41311ywc.116.2023.12.06.17.10.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 06 Dec 2023 17:10:22 -0800 (PST) Content-Type: multipart/mixed; boundary="------------DxCvL9pYkiUvyPC0OOlX2ine" Message-ID: <4162f7f7-6fd6-4720-98e2-89f80e3de2ed@joeconway.com> Date: Wed, 6 Dec 2023 20:10:21 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Emitting JSON to file using COPY TO Content-Language: en-US From: Joe Conway To: Daniel Verite , Andrew Dunstan Cc: Davin Shearer , PostgreSQL-development References: <8620df11-96e4-4ca3-8f3c-33a479260961@joeconway.com> Autocrypt: addr=mail@joeconway.com; keydata= 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 In-Reply-To: <8620df11-96e4-4ca3-8f3c-33a479260961@joeconway.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------DxCvL9pYkiUvyPC0OOlX2ine Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/6/23 18:09, Joe Conway wrote: > On 12/6/23 14:47, Joe Conway wrote: >> On 12/6/23 13:59, Daniel Verite wrote: >>> Andrew Dunstan wrote: >>> >>>> IMNSHO, we should produce either a single JSON >>>> document (the ARRAY case) or a series of JSON documents, one per row >>>> (the LINES case). >>> >>> "COPY Operations" in the doc says: >>> >>> " The backend sends a CopyOutResponse message to the frontend, followed >>> by zero or more CopyData messages (always one per row), followed by >>> CopyDone". >>> >>> In the ARRAY case, the first messages with the copyjsontest >>> regression test look like this (tshark output): >>> >>> PostgreSQL >>> Type: CopyOut response >>> Length: 13 >>> Format: Text (0) >>> Columns: 3 >>> Format: Text (0) >>> PostgreSQL >>> Type: Copy data >>> Length: 6 >>> Copy data: 5b0a >>> PostgreSQL >>> Type: Copy data >>> Length: 76 >>> Copy data: >>> 207b226964223a312c226631223a226c696e652077697468205c2220696e2069743a2031… >>> >>> The first Copy data message with contents "5b0a" does not qualify >>> as a row of data with 3 columns as advertised in the CopyOut >>> message. Isn't that a problem? >> >> >> Is it a real problem, or just a bit of documentation change that I missed? >> >> Anything receiving this and looking for a json array should know how to >> assemble the data correctly despite the extra CopyData messages. > > Hmm, maybe the real problem here is that Columns do not equal "3" for > the json mode case -- that should really say "1" I think, because the > row is not represented as 3 columns but rather 1 json object. > > Does that sound correct? > > Assuming yes, there is still maybe an issue that there are two more > "rows" that actual output rows (the "[" and the "]"), but maybe those > are less likely to cause some hazard? The attached should fix the CopyOut response to say one column. I.e. it ought to look something like: PostgreSQL Type: CopyOut response Length: 13 Format: Text (0) Columns: 1 Format: Text (0) PostgreSQL Type: Copy data Length: 6 Copy data: 5b0a PostgreSQL Type: Copy data Length: 76 Copy data: [...] -- Joe Conway PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------DxCvL9pYkiUvyPC0OOlX2ine Content-Type: text/x-patch; charset=UTF-8; name="copyto_json.007.diff" Content-Disposition: attachment; filename="copyto_json.007.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZi9jb3B5LnNnbWwKaW5kZXggMThlY2M2OS4uODkxNWZiMyAxMDA2NDQKKioqIGEvZG9j L3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNn bWwKKioqKioqKioqKioqKioqIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+dGEKKioqIDQzLDQ4ICoqKioKLS0tIDQzLDQ5IC0tLS0KICAgICAgRk9SQ0VfUVVPVEUg eyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFj ZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgICBGT1JDRV9OT1RfTlVMTCB7ICggPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywg Li4uXSApIHwgKiB9CiAgICAgIEZPUkNFX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQor ICAgICBGT1JDRV9BUlJBWSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29s ZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgICBFTkNPRElORyAnPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmVuY29kaW5nX25hbWU8L3JlcGxhY2VhYmxlPicKICA8L3N5bm9wc2lz PgogICA8L3JlZnN5bm9wc2lzZGl2PgoqKioqKioqKioqKioqKiogQ09QWSB7IDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YQoqKiogMjA2LDIxNCAqKioqCi0tLSAyMDcsMjIw IC0tLS0KICAgICAgICBTZWxlY3RzIHRoZSBkYXRhIGZvcm1hdCB0byBiZSByZWFkIG9yIHdy aXR0ZW46CiAgICAgICAgPGxpdGVyYWw+dGV4dDwvbGl0ZXJhbD4sCiAgICAgICAgPGxpdGVy YWw+Y3N2PC9saXRlcmFsPiAoQ29tbWEgU2VwYXJhdGVkIFZhbHVlcyksCisgICAgICAgPGxp dGVyYWw+anNvbjwvbGl0ZXJhbD4gKEphdmFTY3JpcHQgT2JqZWN0IE5vdGF0aW9uKSwKICAg ICAgICBvciA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+LgogICAgICAgIFRoZSBkZWZhdWx0 IGlzIDxsaXRlcmFsPnRleHQ8L2xpdGVyYWw+LgogICAgICAgPC9wYXJhPgorICAgICAgPHBh cmE+CisgICAgICAgVGhlIDxsaXRlcmFsPmpzb248L2xpdGVyYWw+IG9wdGlvbiBpcyBhbGxv d2VkIG9ubHkgaW4KKyAgICAgICA8Y29tbWFuZD5DT1BZIFRPPC9jb21tYW5kPi4KKyAgICAg IDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KICAKKioq KioqKioqKioqKioqIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGEK KioqIDM3MiwzNzcgKioqKgotLS0gMzc4LDM5NiAtLS0tCiAgICAgICA8L3BhcmE+CiAgICAg IDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+Rk9SQ0VfQVJSQVk8L2xpdGVyYWw+PC90ZXJtPgor ICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBGb3JjZSBvdXRwdXQgb2Yg c3F1YXJlIGJyYWNrZXRzIGFzIGFycmF5IGRlY29yYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcK KyAgICAgICBhbmQgZW5kIG9mIG91dHB1dCwgYW5kIGNvbW1hcyBiZXR3ZWVuIHRoZSByb3dz LiBJdCBpcyBhbGxvd2VkIG9ubHkgaW4KKyAgICAgICA8Y29tbWFuZD5DT1BZIFRPPC9jb21t YW5kPiwgYW5kIG9ubHkgd2hlbiB1c2luZworICAgICAgIDxsaXRlcmFsPkpTT048L2xpdGVy YWw+IGZvcm1hdC4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0 ZXJhbD4uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0 ZW50cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+PGxpdGVyYWw+RU5D T0RJTkc8L2xpdGVyYWw+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IGNmYWQ0N2Iu LjIzYjU3MGYgMTAwNjQ0CioqKiBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwotLS0g Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKioqKioqKioqKioqKioqIFByb2Nlc3ND b3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCioqKiA0MTksNDI0ICoqKioKLS0tIDQx OSw0MjUgLS0tLQogIAlib29sCQlmb3JtYXRfc3BlY2lmaWVkID0gZmFsc2U7CiAgCWJvb2wJ CWZyZWV6ZV9zcGVjaWZpZWQgPSBmYWxzZTsKICAJYm9vbAkJaGVhZGVyX3NwZWNpZmllZCA9 IGZhbHNlOworIAlib29sCQlmb3JjZV9hcnJheV9zcGVjaWZpZWQgPSBmYWxzZTsKICAJTGlz dENlbGwgICAqb3B0aW9uOwogIAogIAkvKiBTdXBwb3J0IGV4dGVybmFsIHVzZSBmb3Igb3B0 aW9uIHNhbml0eSBjaGVja2luZyAqLwoqKioqKioqKioqKioqKiogUHJvY2Vzc0NvcHlPcHRp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKKioqIDQ0Myw0NDggKioqKgotLS0gNDQ0LDQ1MSAt LS0tCiAgCQkJCSAvKiBkZWZhdWx0IGZvcm1hdCAqLyA7CiAgCQkJZWxzZSBpZiAoc3RyY21w KGZtdCwgImNzdiIpID09IDApCiAgCQkJCW9wdHNfb3V0LT5jc3ZfbW9kZSA9IHRydWU7Cisg CQkJZWxzZSBpZiAoc3RyY21wKGZtdCwgImpzb24iKSA9PSAwKQorIAkJCQlvcHRzX291dC0+ anNvbl9tb2RlID0gdHJ1ZTsKICAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAiYmluYXJ5Iikg PT0gMCkKICAJCQkJb3B0c19vdXQtPmJpbmFyeSA9IHRydWU7CiAgCQkJZWxzZQoqKioqKioq KioqKioqKiogUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKKioqIDU0 MCw1NDUgKioqKgotLS0gNTQzLDU1NSAtLS0tCiAgCQkJCQkJCQlkZWZlbC0+ZGVmbmFtZSks CiAgCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZmVsLT5sb2NhdGlvbikp KTsKICAJCX0KKyAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImZvcmNlX2Fy cmF5IikgPT0gMCkKKyAJCXsKKyAJCQlpZiAoZm9yY2VfYXJyYXlfc3BlY2lmaWVkKQorIAkJ CQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKKyAJCQlmb3JjZV9h cnJheV9zcGVjaWZpZWQgPSB0cnVlOworIAkJCW9wdHNfb3V0LT5mb3JjZV9hcnJheSA9IGRl ZkdldEJvb2xlYW4oZGVmZWwpOworIAkJfQogIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAiY29udmVydF9zZWxlY3RpdmVseSIpID09IDApCiAgCQl7CiAgCQkJLyoKKioq KioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCioq KiA1OTgsNjAzICoqKioKLS0tIDYwOCw2MjUgLS0tLQogIAkJCQkoZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCiAgCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IERFRkFVTFQg aW4gQklOQVJZIG1vZGUiKSkpOwogIAorIAlpZiAob3B0c19vdXQtPmpzb25fbW9kZSkKKyAJ eworIAkJaWYgKGlzX2Zyb20pCisgCQkJZXJlcG9ydChFUlJPUiwKKyAJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJCQkJCSBlcnJtc2coImNhbm5v dCB1c2UgSlNPTiBtb2RlIGluIENPUFkgRlJPTSIpKSk7CisgCX0KKyAJZWxzZSBpZiAob3B0 c19vdXQtPmZvcmNlX2FycmF5KQorIAkJZXJlcG9ydChFUlJPUiwKKyAJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorIAkJCQkgZXJybXNnKCJDT1BZIEZP UkNFX0FSUkFZIHJlcXVpcmVzIEpTT04gbW9kZSIpKSk7CisgCiAgCS8qIFNldCBkZWZhdWx0 cyBmb3Igb21pdHRlZCBvcHRpb25zICovCiAgCWlmICghb3B0c19vdXQtPmRlbGltKQogIAkJ b3B0c19vdXQtPmRlbGltID0gb3B0c19vdXQtPmNzdl9tb2RlID8gIiwiIDogIlx0IjsKKioq KioqKioqKioqKioqIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCioq KiA2NjcsNjcyICoqKioKLS0tIDY4OSw2OTkgLS0tLQogIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAgCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5 IEhFQURFUiBpbiBCSU5BUlkgbW9kZSIpKSk7CiAgCisgCWlmIChvcHRzX291dC0+anNvbl9t b2RlICYmIG9wdHNfb3V0LT5oZWFkZXJfbGluZSkKKyAJCWVyZXBvcnQoRVJST1IsCisgCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJCQkJIGVycm1z ZygiY2Fubm90IHNwZWNpZnkgSEVBREVSIGluIEpTT04gbW9kZSIpKSk7CisgCiAgCS8qIENo ZWNrIHF1b3RlICovCiAgCWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmIG9wdHNfb3V0LT5x dW90ZSAhPSBOVUxMKQogIAkJZXJlcG9ydChFUlJPUiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMK aW5kZXggYzY2YTA0Ny4uZTA2ODIyOSAxMDA2NDQKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weXRvLmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKioqKioq KioqKioqKioqCioqKiAyOCwzMyAqKioqCi0tLSAyOCwzNCAtLS0tCiAgI2luY2x1ZGUgImV4 ZWN1dG9yL2V4ZWNkZXNjLmgiCiAgI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAg I2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisgI2luY2x1ZGUgImZ1bmNhcGkuaCIK ICAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQu aCIKICAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKioqKioqKioqKioqKioqCioqKiAzNyw0 MiAqKioqCi0tLSAzOCw0NCAtLS0tCiAgI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRs ZXIuaCIKICAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogICNpbmNsdWRlICJ0Y29wL3Rjb3Bw cm90LmgiCisgI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICAjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCiAgI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAgI2luY2x1ZGUgInV0 aWxzL3BhcnRjYWNoZS5oIgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QKKioqIDEx MiwxMTcgKioqKgotLS0gMTE0LDEyMSAtLS0tCiAgLyogTk9URTogdGhlcmUncyBhIGNvcHkg b2YgdGhpcyBpbiBjb3B5ZnJvbXBhcnNlLmMgKi8KICBzdGF0aWMgY29uc3QgY2hhciBCaW5h cnlTaWduYXR1cmVbMTFdID0gIlBHQ09QWVxuXDM3N1xyXG5cMCI7CiAgCisgLyogbmVlZCBk ZWxpbWl0ZXIgdG8gc3RhcnQgbmV4dCBqc29uIGFycmF5IGVsZW1lbnQgKi8KKyBzdGF0aWMg Ym9vbCBqc29uX3Jvd19kZWxpbV9uZWVkZWQgPSBmYWxzZTsKICAKICAvKiBub24tZXhwb3J0 IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KICBzdGF0aWMgdm9pZCBFbmRDb3B5KENvcHlUb1N0 YXRlIGNzdGF0ZSk7CioqKioqKioqKioqKioqKiBTZW5kQ29weUJlZ2luKENvcHlUb1N0YXRl IGNzdGF0ZSkKKioqIDE0NiwxNTQgKioqKgogIAogIAlwcV9iZWdpbm1lc3NhZ2UoJmJ1Ziwg UHFNc2dfQ29weU91dFJlc3BvbnNlKTsKICAJcHFfc2VuZGJ5dGUoJmJ1ZiwgZm9ybWF0KTsJ Lyogb3ZlcmFsbCBmb3JtYXQgKi8KISAJcHFfc2VuZGludDE2KCZidWYsIG5hdHRzKTsKISAJ Zm9yIChpID0gMDsgaSA8IG5hdHRzOyBpKyspCiEgCQlwcV9zZW5kaW50MTYoJmJ1ZiwgZm9y bWF0KTsgLyogcGVyLWNvbHVtbiBmb3JtYXRzICovCiAgCXBxX2VuZG1lc3NhZ2UoJmJ1Zik7 CiAgCWNzdGF0ZS0+Y29weV9kZXN0ID0gQ09QWV9GUk9OVEVORDsKICB9Ci0tLSAxNTAsMTY5 IC0tLS0KICAKICAJcHFfYmVnaW5tZXNzYWdlKCZidWYsIFBxTXNnX0NvcHlPdXRSZXNwb25z ZSk7CiAgCXBxX3NlbmRieXRlKCZidWYsIGZvcm1hdCk7CS8qIG92ZXJhbGwgZm9ybWF0ICov CiEgCWlmICghY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKISAJewohIAkJcHFfc2VuZGludDE2 KCZidWYsIG5hdHRzKTsKISAJCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQohIAkJCXBx X3NlbmRpbnQxNigmYnVmLCBmb3JtYXQpOyAvKiBwZXItY29sdW1uIGZvcm1hdHMgKi8KISAJ fQohIAllbHNlCiEgCXsKISAJCS8qCiEgCQkgKiBKU09OIG1vZGUgaXMgYWx3YXlzIG9uZSBu b24tYmluYXJ5IGNvbHVtbgohIAkJICovCiEgCQlwcV9zZW5kaW50MTYoJmJ1ZiwgMSk7CiEg CQlwcV9zZW5kaW50MTYoJmJ1ZiwgMCk7CiEgCX0KICAJcHFfZW5kbWVzc2FnZSgmYnVmKTsK ICAJY3N0YXRlLT5jb3B5X2Rlc3QgPSBDT1BZX0ZST05URU5EOwogIH0KKioqKioqKioqKioq KioqIERvQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0ZSkKKioqIDc1OSw3NjQgKioqKgotLS0g Nzc0LDc4MSAtLS0tCiAgCQl0dXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihjc3RhdGUtPnJl bCk7CiAgCWVsc2UKICAJCXR1cERlc2MgPSBjc3RhdGUtPnF1ZXJ5RGVzYy0+dHVwRGVzYzsK KyAJQmxlc3NUdXBsZURlc2ModHVwRGVzYyk7CisgCiAgCW51bV9waHlzX2F0dHJzID0gdHVw RGVzYy0+bmF0dHM7CiAgCWNzdGF0ZS0+b3B0cy5udWxsX3ByaW50X2NsaWVudCA9IGNzdGF0 ZS0+b3B0cy5udWxsX3ByaW50OwkvKiBkZWZhdWx0ICovCiAgCioqKioqKioqKioqKioqKiBE b0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCioqKiA4NDUsODUwICoqKioKLS0tIDg2Miw4 ODEgLS0tLQogIAogIAkJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKICAJCX0KKyAKKyAJ CS8qCisgCQkgKiBJZiBKU09OIGhhcyBiZWVuIHJlcXVlc3RlZCwgYW5kIEZPUkNFX0FSUkFZ IGhhcyBiZWVuIHNwZWNpZmllZCBzZW5kCisgCQkgKiB0aGUgb3BlbmluZyBicmFja2V0Lgor IAkJICovCisgCQlpZiAoY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKKyAJCXsKKyAJCQlpZiAo Y3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5KQorIAkJCXsKKyAJCQkJQ29weVNlbmRDaGFyKGNz dGF0ZSwgJ1snKTsKKyAJCQkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOworIAkJCX0KKyAJ CQlqc29uX3Jvd19kZWxpbV9uZWVkZWQgPSBmYWxzZTsKKyAJCX0KICAJfQogIAogIAlpZiAo Y3N0YXRlLT5yZWwpCioqKioqKioqKioqKioqKiBEb0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3Rh dGUpCioqKiA4OTIsODk3ICoqKioKLS0tIDkyMyw5MzkgLS0tLQogIAkJQ29weVNlbmRFbmRP ZlJvdyhjc3RhdGUpOwogIAl9CiAgCisgCS8qCisgCSAqIElmIEpTT04gaGFzIGJlZW4gcmVx dWVzdGVkLCBhbmQgRk9SQ0VfQVJSQVkgaGFzIGJlZW4gc3BlY2lmaWVkIHNlbmQgdGhlCisg CSAqIGNsb3NpbmcgYnJhY2tldC4KKyAJICovCisgCWlmIChjc3RhdGUtPm9wdHMuanNvbl9t b2RlICYmCisgCQljc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisgCXsKKyAJCUNvcHlTZW5k Q2hhcihjc3RhdGUsICddJyk7CisgCQlDb3B5U2VuZEVuZE9mUm93KGNzdGF0ZSk7CisgCX0K KyAKICAJTWVtb3J5Q29udGV4dERlbGV0ZShjc3RhdGUtPnJvd2NvbnRleHQpOwogIAogIAlp ZiAoZmVfY29weSkKKioqKioqKioqKioqKioqIERvQ29weVRvKENvcHlUb1N0YXRlIGNzdGF0 ZSkKKioqIDkwNiw5MTYgKioqKgogIHN0YXRpYyB2b2lkCiAgQ29weU9uZVJvd1RvKENvcHlU b1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAgewotIAlib29sCQluZWVk X2RlbGltID0gZmFsc2U7Ci0gCUZtZ3JJbmZvICAgKm91dF9mdW5jdGlvbnMgPSBjc3RhdGUt Pm91dF9mdW5jdGlvbnM7CiAgCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKLSAJTGlzdENl bGwgICAqY3VyOwotIAljaGFyCSAgICpzdHJpbmc7CiAgCiAgCU1lbW9yeUNvbnRleHRSZXNl dChjc3RhdGUtPnJvd2NvbnRleHQpOwogIAlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGNzdGF0ZS0+cm93Y29udGV4dCk7Ci0tLSA5NDgsOTU0IC0tLS0KKioqKioqKioq KioqKioqIENvcHlPbmVSb3dUbyhDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlVGEKKioqIDky MSw5NzQgKioqKgogIAkJQ29weVNlbmRJbnQxNihjc3RhdGUsIGxpc3RfbGVuZ3RoKGNzdGF0 ZS0+YXR0bnVtbGlzdCkpOwogIAl9CiAgCiEgCS8qIE1ha2Ugc3VyZSB0aGUgdHVwbGUgaXMg ZnVsbHkgZGVjb25zdHJ1Y3RlZCAqLwohIAlzbG90X2dldGFsbGF0dHJzKHNsb3QpOwohIAoh IAlmb3JlYWNoKGN1ciwgY3N0YXRlLT5hdHRudW1saXN0KQogIAl7CiEgCQlpbnQJCQlhdHRu dW0gPSBsZmlyc3RfaW50KGN1cik7CiEgCQlEYXR1bQkJdmFsdWUgPSBzbG90LT50dHNfdmFs dWVzW2F0dG51bSAtIDFdOwohIAkJYm9vbAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFth dHRudW0gLSAxXTsKICAKISAJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKISAJCXsKISAJ CQlpZiAobmVlZF9kZWxpbSkKISAJCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgY3N0YXRlLT5v cHRzLmRlbGltWzBdKTsKISAJCQluZWVkX2RlbGltID0gdHJ1ZTsKISAJCX0KICAKISAJCWlm IChpc251bGwpCiEgCQl7CiEgCQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQohIAkJCQlD b3B5U2VuZFN0cmluZyhjc3RhdGUsIGNzdGF0ZS0+b3B0cy5udWxsX3ByaW50X2NsaWVudCk7 CiEgCQkJZWxzZQohIAkJCQlDb3B5U2VuZEludDMyKGNzdGF0ZSwgLTEpOwohIAkJfQohIAkJ ZWxzZQogIAkJewogIAkJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKICAJCQl7CiEgCQkJ CXN0cmluZyA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0gLSAx XSwKISAJCQkJCQkJCQkJCXZhbHVlKTsKISAJCQkJaWYgKGNzdGF0ZS0+b3B0cy5jc3ZfbW9k ZSkKISAJCQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0YXRlLCBzdHJpbmcsCiEgCQkJCQkJ CQkJCWNzdGF0ZS0+b3B0cy5mb3JjZV9xdW90ZV9mbGFnc1thdHRudW0gLSAxXSwKISAJCQkJ CQkJCQkJbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KSA9PSAxKTsKICAJCQkJZWxz ZQohIAkJCQkJQ29weUF0dHJpYnV0ZU91dFRleHQoY3N0YXRlLCBzdHJpbmcpOwogIAkJCX0K ICAJCQllbHNlCiAgCQkJewohIAkJCQlieXRlYQkgICAqb3V0cHV0Ynl0ZXM7CiAgCiEgCQkJ CW91dHB1dGJ5dGVzID0gU2VuZEZ1bmN0aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0g LSAxXSwKISAJCQkJCQkJCQkJCSAgIHZhbHVlKTsKISAJCQkJQ29weVNlbmRJbnQzMihjc3Rh dGUsIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwohIAkJCQlDb3B5U2VuZERh dGEoY3N0YXRlLCBWQVJEQVRBKG91dHB1dGJ5dGVzKSwKISAJCQkJCQkJIFZBUlNJWkUob3V0 cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwogIAkJCX0KICAJCX0KICAJfQogIAogIAlDb3B5U2Vu ZEVuZE9mUm93KGNzdGF0ZSk7CiAgCi0tLSA5NTksMTA0MiAtLS0tCiAgCQlDb3B5U2VuZElu dDE2KGNzdGF0ZSwgbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KSk7CiAgCX0KICAK ISAJaWYgKCFjc3RhdGUtPm9wdHMuanNvbl9tb2RlKQogIAl7CiEgCQlib29sCQluZWVkX2Rl bGltID0gZmFsc2U7CiEgCQlGbWdySW5mbyAgICpvdXRfZnVuY3Rpb25zID0gY3N0YXRlLT5v dXRfZnVuY3Rpb25zOwohIAkJTGlzdENlbGwgICAqY3VyOwohIAkJY2hhcgkgICAqc3RyaW5n OwogIAohIAkJLyogTWFrZSBzdXJlIHRoZSB0dXBsZSBpcyBmdWxseSBkZWNvbnN0cnVjdGVk ICovCiEgCQlzbG90X2dldGFsbGF0dHJzKHNsb3QpOwogIAohIAkJZm9yZWFjaChjdXIsIGNz dGF0ZS0+YXR0bnVtbGlzdCkKICAJCXsKKyAJCQlpbnQJCQlhdHRudW0gPSBsZmlyc3RfaW50 KGN1cik7CisgCQkJRGF0dW0JCXZhbHVlID0gc2xvdC0+dHRzX3ZhbHVlc1thdHRudW0gLSAx XTsKKyAJCQlib29sCQlpc251bGwgPSBzbG90LT50dHNfaXNudWxsW2F0dG51bSAtIDFdOwor IAogIAkJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKICAJCQl7CiEgCQkJCWlmIChuZWVk X2RlbGltKQohIAkJCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgY3N0YXRlLT5vcHRzLmRlbGlt WzBdKTsKISAJCQkJbmVlZF9kZWxpbSA9IHRydWU7CiEgCQkJfQohIAohIAkJCWlmIChpc251 bGwpCiEgCQkJewohIAkJCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCiEgCQkJCQlDb3B5 U2VuZFN0cmluZyhjc3RhdGUsIGNzdGF0ZS0+b3B0cy5udWxsX3ByaW50X2NsaWVudCk7CiAg CQkJCWVsc2UKISAJCQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCAtMSk7CiAgCQkJfQogIAkJ CWVsc2UKICAJCQl7CiEgCQkJCWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKISAJCQkJewoh IAkJCQkJc3RyaW5nID0gT3V0cHV0RnVuY3Rpb25DYWxsKCZvdXRfZnVuY3Rpb25zW2F0dG51 bSAtIDFdLAohIAkJCQkJCQkJCQkJCXZhbHVlKTsKISAJCQkJCWlmIChjc3RhdGUtPm9wdHMu Y3N2X21vZGUpCiEgCQkJCQkJQ29weUF0dHJpYnV0ZU91dENTVihjc3RhdGUsIHN0cmluZywK ISAJCQkJCQkJCQkJCWNzdGF0ZS0+b3B0cy5mb3JjZV9xdW90ZV9mbGFnc1thdHRudW0gLSAx XSwKISAJCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkgPT0gMSk7 CiEgCQkJCQllbHNlCiEgCQkJCQkJQ29weUF0dHJpYnV0ZU91dFRleHQoY3N0YXRlLCBzdHJp bmcpOwohIAkJCQl9CiEgCQkJCWVsc2UKISAJCQkJewohIAkJCQkJYnl0ZWEJICAgKm91dHB1 dGJ5dGVzOwogIAohIAkJCQkJb3V0cHV0Ynl0ZXMgPSBTZW5kRnVuY3Rpb25DYWxsKCZvdXRf ZnVuY3Rpb25zW2F0dG51bSAtIDFdLAohIAkJCQkJCQkJCQkJCSAgIHZhbHVlKTsKISAJCQkJ CUNvcHlTZW5kSW50MzIoY3N0YXRlLCBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNa KTsKISAJCQkJCUNvcHlTZW5kRGF0YShjc3RhdGUsIFZBUkRBVEEob3V0cHV0Ynl0ZXMpLAoh IAkJCQkJCQkJIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwohIAkJCQl9CiAg CQkJfQogIAkJfQogIAl9CisgCWVsc2UKKyAJeworIAkJRGF0dW0JCXJvd2RhdGEgPSBFeGVj RmV0Y2hTbG90SGVhcFR1cGxlRGF0dW0oc2xvdCk7CisgCQlTdHJpbmdJbmZvCXJlc3VsdDsK KyAKKyAJCXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7CisgCQljb21wb3NpdGVfdG9fanNv bihyb3dkYXRhLCByZXN1bHQsIGZhbHNlKTsKKyAKKyAJCWlmIChqc29uX3Jvd19kZWxpbV9u ZWVkZWQgJiYKKyAJCQljc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisgCQl7CisgCQkJQ29w eVNlbmRDaGFyKGNzdGF0ZSwgJywnKTsKKyAJCX0KKyAJCWVsc2UgaWYgKGNzdGF0ZS0+b3B0 cy5mb3JjZV9hcnJheSkKKyAJCXsKKyAJCQkvKiBmaXJzdCByb3cgbmVlZHMgbm8gZGVsaW1p dGVyICovCisgCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJyAnKTsKKyAJCQlqc29uX3Jvd19k ZWxpbV9uZWVkZWQgPSB0cnVlOworIAkJfQorIAorIAkJQ29weVNlbmREYXRhKGNzdGF0ZSwg cmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbik7CisgCX0KICAKICAJQ29weVNlbmRFbmRPZlJv dyhjc3RhdGUpOwogIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBi L3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggZDYzMWFjOC4uZTY3ODlkNyAxMDA2 NDQKKioqIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQotLS0gYi9zcmMvYmFja2VuZC9w YXJzZXIvZ3JhbS55CioqKioqKioqKioqKioqKiBjb3B5X29wdF9pdGVtOgoqKiogMzQwOCwz NDEzICoqKioKLS0tIDM0MDgsMzQxNyAtLS0tCiAgCQkJCXsKICAJCQkJCSQkID0gbWFrZURl ZkVsZW0oImZvcm1hdCIsIChOb2RlICopIG1ha2VTdHJpbmcoImNzdiIpLCBAMSk7CiAgCQkJ CX0KKyAJCQl8IEpTT04KKyAJCQkJeworIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9ybWF0 IiwgKE5vZGUgKikgbWFrZVN0cmluZygianNvbiIpLCBAMSk7CisgCQkJCX0KICAJCQl8IEhF QURFUl9QCiAgCQkJCXsKICAJCQkJCSQkID0gbWFrZURlZkVsZW0oImhlYWRlciIsIChOb2Rl ICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7CioqKioqKioqKioqKioqKiBjb3B5X29wdF9p dGVtOgoqKiogMzQ0OCwzNDUzICoqKioKLS0tIDM0NTIsMzQ2MSAtLS0tCiAgCQkJCXsKICAJ CQkJCSQkID0gbWFrZURlZkVsZW0oImVuY29kaW5nIiwgKE5vZGUgKikgbWFrZVN0cmluZygk MiksIEAxKTsKICAJCQkJfQorIAkJCXwgRk9SQ0UgQVJSQVkKKyAJCQkJeworIAkJCQkJJCQg PSBtYWtlRGVmRWxlbSgiZm9yY2VfYXJyYXkiLCAoTm9kZSAqKSBtYWtlQm9vbGVhbih0cnVl KSwgQDEpOworIAkJCQl9CiAgCQk7CiAgCiAgLyogVGhlIGZvbGxvd2luZyBleGlzdCBmb3Ig YmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnkgb2xkIHZlcnNpb25zICovCioqKioq KioqKioqKioqKiBjb3B5X2dlbmVyaWNfb3B0X2VsZW06CioqKiAzNDkwLDM0OTUgKioqKgot LS0gMzQ5OCwzNTA3IC0tLS0KICAJCQkJewogIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgkMSwg JDIsIEAxKTsKICAJCQkJfQorIAkJCXwgRk9STUFUX0xBIGNvcHlfZ2VuZXJpY19vcHRfYXJn CisgCQkJCXsKKyAJCQkJCSQkID0gbWFrZURlZkVsZW0oImZvcm1hdCIsICQyLCBAMSk7Cisg CQkJCX0KICAJCTsKICAKICBjb3B5X2dlbmVyaWNfb3B0X2FyZzoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bi5jCmluZGV4IDcxYWU1M2YuLmNiNDMxMWUgMTAwNjQ0CioqKiBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uLmMKLS0tIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwoqKioq KioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgSnNvbkFnZ1N0YXRlCioqKiA4Myw5MCAqKioq CiAgCUpzb25VbmlxdWVCdWlsZGVyU3RhdGUgdW5pcXVlX2NoZWNrOwogIH0gSnNvbkFnZ1N0 YXRlOwogIAotIHN0YXRpYyB2b2lkIGNvbXBvc2l0ZV90b19qc29uKERhdHVtIGNvbXBvc2l0 ZSwgU3RyaW5nSW5mbyByZXN1bHQsCi0gCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9mZWVkcyk7 CiAgc3RhdGljIHZvaWQgYXJyYXlfZGltX3RvX2pzb24oU3RyaW5nSW5mbyByZXN1bHQsIGlu dCBkaW0sIGludCBuZGltcywgaW50ICpkaW1zLAogIAkJCQkJCQkgIERhdHVtICp2YWxzLCBi b29sICpudWxscywgaW50ICp2YWxjb3VudCwKICAJCQkJCQkJICBKc29uVHlwZUNhdGVnb3J5 IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQsCi0tLSA4Myw4OCAtLS0tCioqKioqKioqKioq KioqKiBhcnJheV90b19qc29uX2ludGVybmFsKERhdHVtIGFycmF5LCBTdHJpCioqKiA0OTAs NDk3ICoqKioKICAKICAvKgogICAqIFR1cm4gYSBjb21wb3NpdGUgLyByZWNvcmQgaW50byBK U09OLgogICAqLwohIHN0YXRpYyB2b2lkCiAgY29tcG9zaXRlX3RvX2pzb24oRGF0dW0gY29t cG9zaXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwgYm9vbCB1c2VfbGluZV9mZWVkcykKICB7CiAg CUhlYXBUdXBsZUhlYWRlciB0ZDsKLS0tIDQ4OCw0OTYgLS0tLQogIAogIC8qCiAgICogVHVy biBhIGNvbXBvc2l0ZSAvIHJlY29yZCBpbnRvIEpTT04uCisgICogRXhwb3J0ZWQgc28gQ09Q WSBUTyBjYW4gdXNlIGl0LgogICAqLwohIHZvaWQKICBjb21wb3NpdGVfdG9fanNvbihEYXR1 bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LCBib29sIHVzZV9saW5lX2ZlZWRzKQog IHsKICAJSGVhcFR1cGxlSGVhZGVyIHRkOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCmluZGV4IGYyY2Nh MGIuLjk3ODk5YjYgMTAwNjQ0CioqKiBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAot LS0gYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKKioqKioqKioqKioqKioqIHR5cGVk ZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25zCioqKiA0Myw0OCAqKioqCi0tLSA0Myw0OSAt LS0tCiAgCWJvb2wJCWJpbmFyeTsJCQkvKiBiaW5hcnkgZm9ybWF0PyAqLwogIAlib29sCQlm cmVlemU7CQkJLyogZnJlZXplIHJvd3Mgb24gbG9hZGluZz8gKi8KICAJYm9vbAkJY3N2X21v ZGU7CQkvKiBDb21tYSBTZXBhcmF0ZWQgVmFsdWUgZm9ybWF0PyAqLworIAlib29sCQlqc29u X21vZGU7CQkvKiBKU09OIGZvcm1hdD8gKi8KICAJQ29weUhlYWRlckNob2ljZSBoZWFkZXJf bGluZTsJLyogaGVhZGVyIGxpbmU/ICovCiAgCWNoYXIJICAgKm51bGxfcHJpbnQ7CQkvKiBO VUxMIG1hcmtlciBzdHJpbmcgKHNlcnZlciBlbmNvZGluZyEpICovCiAgCWludAkJCW51bGxf cHJpbnRfbGVuOyAvKiBsZW5ndGggb2Ygc2FtZSAqLwoqKioqKioqKioqKioqKiogdHlwZWRl ZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlvbnMKKioqIDYxLDY2ICoqKioKLS0tIDYyLDY4IC0t LS0KICAJTGlzdAkgICAqZm9yY2VfbnVsbDsJCS8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzICov CiAgCWJvb2wJCWZvcmNlX251bGxfYWxsOyAvKiBGT1JDRV9OVUxMICo/ICovCiAgCWJvb2wJ ICAgKmZvcmNlX251bGxfZmxhZ3M7CS8qIHBlci1jb2x1bW4gQ1NWIEZOIGZsYWdzICovCisg CWJvb2wJCWZvcmNlX2FycmF5OwkvKiBhZGQgSlNPTiBhcnJheSBkZWNvcmF0aW9ucyAqLwog IAlib29sCQljb252ZXJ0X3NlbGVjdGl2ZWx5OwkvKiBkbyBzZWxlY3RpdmUgYmluYXJ5IGNv bnZlcnNpb24/ICovCiAgCUxpc3QJICAgKmNvbnZlcnRfc2VsZWN0OyAvKiBsaXN0IG9mIGNv bHVtbiBuYW1lcyAoY2FuIGJlIE5JTCkgKi8KICB9IENvcHlGb3JtYXRPcHRpb25zOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv anNvbi5oCmluZGV4IGYwN2U4MmMuLmJhZGM1YTYgMTAwNjQ0CioqKiBhL3NyYy9pbmNsdWRl L3V0aWxzL2pzb24uaAotLS0gYi9zcmMvaW5jbHVkZS91dGlscy9qc29uLmgKKioqKioqKioq KioqKioqCioqKiAxNywyMiAqKioqCi0tLSAxNywyNCAtLS0tCiAgI2luY2x1ZGUgImxpYi9z dHJpbmdpbmZvLmgiCiAgCiAgLyogZnVuY3Rpb25zIGluIGpzb24uYyAqLworIGV4dGVybiB2 b2lkIGNvbXBvc2l0ZV90b19qc29uKERhdHVtIGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1 bHQsCisgCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9mZWVkcyk7CiAgZXh0ZXJuIHZvaWQgZXNj YXBlX2pzb24oU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKnN0cik7CiAgZXh0ZXJuIGNo YXIgKkpzb25FbmNvZGVEYXRlVGltZShjaGFyICpidWYsIERhdHVtIHZhbHVlLCBPaWQgdHlw aWQsCiAgCQkJCQkJCQljb25zdCBpbnQgKnR6cCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j b3B5Lm91dAppbmRleCBiNDgzNjVlLi4zMTkxM2Y2IDEwMDY0NAoqKiogYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0Ci0tLSBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29weS5vdXQKKioqKioqKioqKioqKioqIGNvcHkgY29weXRlc3QzIHRvIHN0ZG91dCBj c3YgaGVhZGVyOwoqKiogNDIsNDcgKioqKgotLS0gNDIsMTE3IC0tLS0KICBjMSwiY29sIHdp dGggLCBjb21tYSIsImNvbCB3aXRoICIiIHF1b3RlIgogIDEsYSwxCiAgMixiLDIKKyAtLS0g dGVzdCBjb3B5aW5nIGluIEpTT04gbW9kZSB3aXRoIHZhcmlvdXMgc3R5bGVzCisgY29weSBj b3B5dGVzdCB0byBzdGRvdXQganNvbjsKKyB7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xy XG5kZWYiLCJmaWxsZXIiOjF9CisgeyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYi LCJmaWxsZXIiOjJ9CisgeyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxl ciI6M30KKyB7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIs ImZpbGxlciI6NH0KKyBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOwor IHsic3R5bGUiOiJET1MiLCJ0ZXN0IjoiYWJjXHJcbmRlZiIsImZpbGxlciI6MX0KKyB7InN0 eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZpbGxlciI6Mn0KKyB7InN0eWxlIjoi TWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQorIHsic3R5bGUiOiJlc2NcXGFw ZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmlsbGVyIjo0fQorIGNvcHkgY29weXRl c3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkpOworIFsKKyAgeyJzdHls ZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorICx7InN0eWxlIjoi VW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZpbGxlciI6Mn0KKyAseyJzdHlsZSI6Ik1hYyIs InRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KKyAseyJzdHlsZSI6ImVzY1xcYXBlIiwi dGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CisgXQorIGNvcHkgY29weXRl c3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7CisgWworICB7 InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYiLCJmaWxsZXIiOjF9CisgLHsic3R5 bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQorICx7InN0eWxlIjoi TWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQorICx7InN0eWxlIjoiZXNjXFxh cGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KKyBdCisgY29weSBj b3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSBmYWxzZSk7Cisg eyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorIHsic3R5 bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQorIHsic3R5bGUiOiJN YWMiLCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9CisgeyJzdHlsZSI6ImVzY1xcYXBl IiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CisgLS0gRXJyb3IKKyBj b3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGhlYWRlcik7CisgRVJST1I6 ICBjYW5ub3Qgc3BlY2lmeSBIRUFERVIgaW4gSlNPTiBtb2RlCisgLS0gZW1iZWRkZWQgZXNj YXBlZCBjaGFyYWN0ZXJzCisgY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0ICgKKyAg ICAgaWQgYmlnc2VyaWFsLAorICAgICBmMSB0ZXh0LAorICAgICBmMiB0aW1lc3RhbXB0eik7 CisgaW5zZXJ0IGludG8gY29weWpzb250ZXN0CisgICBzZWxlY3QgZy5pLAorICAgICAgICAg IENBU0UgV0hFTiBnLmkgJSAyID0gMCBUSEVOCisgICAgICAgICAgICAnbGluZSB3aXRoICcn IGluIGl0OiAnIHx8IGcuaTo6dGV4dAorICAgICAgICAgIEVMU0UKKyAgICAgICAgICAgICds aW5lIHdpdGggIiBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgICBFTkQsCisgICAg ICAgICAgJ01vbiBGZWIgMTAgMTc6MzI6MDEgMTk5NyBQU1QnCisgICBmcm9tIGdlbmVyYXRl X3NlcmllcygxLDUpIGFzIGcoaSk7CisgaW5zZXJ0IGludG8gY29weWpzb250ZXN0IChmMSkg dmFsdWVzCisgKEUnYWFhXCJiYmInOjp0ZXh0KSwKKyAoRSdhYWFcXGJiYic6OnRleHQpLAor IChFJ2FhYVwvYmJiJzo6dGV4dCksCisgKEUnYWFhXGJiYmInOjp0ZXh0KSwKKyAoRSdhYWFc ZmJiYic6OnRleHQpLAorIChFJ2FhYVxuYmJiJzo6dGV4dCksCisgKEUnYWFhXHJiYmInOjp0 ZXh0KSwKKyAoRSdhYWFcdGJiYic6OnRleHQpOworIGNvcHkgY29weWpzb250ZXN0IHRvIHN0 ZG91dCBqc29uOworIHsiaWQiOjEsImYxIjoibGluZSB3aXRoIFwiIGluIGl0OiAxIiwiZjIi OiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KKyB7ImlkIjoyLCJmMSI6ImxpbmUgd2l0 aCAnIGluIGl0OiAyIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KKyB7Imlk IjozLCJmMSI6ImxpbmUgd2l0aCBcIiBpbiBpdDogMyIsImYyIjoiMTk5Ny0wMi0xMFQxNzoz MjowMS0wODowMCJ9CisgeyJpZCI6NCwiZjEiOiJsaW5lIHdpdGggJyBpbiBpdDogNCIsImYy IjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9CisgeyJpZCI6NSwiZjEiOiJsaW5lIHdp dGggXCIgaW4gaXQ6IDUiLCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6MDAifQorIHsi aWQiOjEsImYxIjoiYWFhXCJiYmIiLCJmMiI6bnVsbH0KKyB7ImlkIjoyLCJmMSI6ImFhYVxc YmJiIiwiZjIiOm51bGx9CisgeyJpZCI6MywiZjEiOiJhYWEvYmJiIiwiZjIiOm51bGx9Cisg eyJpZCI6NCwiZjEiOiJhYWFcYmJiYiIsImYyIjpudWxsfQorIHsiaWQiOjUsImYxIjoiYWFh XGZiYmIiLCJmMiI6bnVsbH0KKyB7ImlkIjo2LCJmMSI6ImFhYVxuYmJiIiwiZjIiOm51bGx9 CisgeyJpZCI6NywiZjEiOiJhYWFccmJiYiIsImYyIjpudWxsfQorIHsiaWQiOjgsImYxIjoi YWFhXHRiYmIiLCJmMiI6bnVsbH0KICBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5dGVzdDQgKAog IAljMSBpbnQsCiAgCSJjb2xuYW1lIHdpdGggdGFiOiAJIiB0ZXh0KTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weS5zcWwKaW5kZXggNDNkMmU5MC4uNGI3NjU0MSAxMDA2NDQKKioqIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weS5zcWwKLS0tIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5z cWwKKioqKioqKioqKioqKioqIHRoaXMgaXMganVzdCBhIGxpbmUgZnVsbCBvZiBqdW5rIHRo YXQgd28KKioqIDU0LDU5ICoqKioKLS0tIDU0LDEwMSAtLS0tCiAgCiAgY29weSBjb3B5dGVz dDMgdG8gc3Rkb3V0IGNzdiBoZWFkZXI7CiAgCisgLS0tIHRlc3QgY29weWluZyBpbiBKU09O IG1vZGUgd2l0aCB2YXJpb3VzIHN0eWxlcworIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IGpz b247CisgCisgY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKKyAKKyBj b3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5KTsKKyAK KyBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IHRy dWUpOworIAorIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2Vf YXJyYXkgZmFsc2UpOworIAorIC0tIEVycm9yCisgY29weSBjb3B5dGVzdCB0byBzdGRvdXQg KGZvcm1hdCBqc29uLCBoZWFkZXIpOworIAorIC0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFj dGVycworIGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVzdCAoCisgICAgIGlkIGJpZ3Nl cmlhbCwKKyAgICAgZjEgdGV4dCwKKyAgICAgZjIgdGltZXN0YW1wdHopOworIAorIGluc2Vy dCBpbnRvIGNvcHlqc29udGVzdAorICAgc2VsZWN0IGcuaSwKKyAgICAgICAgICBDQVNFIFdI RU4gZy5pICUgMiA9IDAgVEhFTgorICAgICAgICAgICAgJ2xpbmUgd2l0aCAnJyBpbiBpdDog JyB8fCBnLmk6OnRleHQKKyAgICAgICAgICBFTFNFCisgICAgICAgICAgICAnbGluZSB3aXRo ICIgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAgICAgICAgRU5ELAorICAgICAgICAgICdN b24gRmViIDEwIDE3OjMyOjAxIDE5OTcgUFNUJworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MSw1KSBhcyBnKGkpOworIAorIGluc2VydCBpbnRvIGNvcHlqc29udGVzdCAoZjEpIHZhbHVl cworIChFJ2FhYVwiYmJiJzo6dGV4dCksCisgKEUnYWFhXFxiYmInOjp0ZXh0KSwKKyAoRSdh YWFcL2JiYic6OnRleHQpLAorIChFJ2FhYVxiYmJiJzo6dGV4dCksCisgKEUnYWFhXGZiYmIn Ojp0ZXh0KSwKKyAoRSdhYWFcbmJiYic6OnRleHQpLAorIChFJ2FhYVxyYmJiJzo6dGV4dCks CisgKEUnYWFhXHRiYmInOjp0ZXh0KTsKKyAKKyBjb3B5IGNvcHlqc29udGVzdCB0byBzdGRv dXQganNvbjsKKyAKICBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5dGVzdDQgKAogIAljMSBpbnQs CiAgCSJjb2xuYW1lIHdpdGggdGFiOiAJIiB0ZXh0KTsK --------------DxCvL9pYkiUvyPC0OOlX2ine--