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 1rrGL0-00GX2B-NE for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Apr 2024 12:00:31 +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 1rrGKz-00FjAL-FJ for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Apr 2024 12:00:29 +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.94.2) (envelope-from ) id 1rrGKy-00FjAD-TW for pgsql-hackers@lists.postgresql.org; Mon, 01 Apr 2024 12:00:29 +0000 Received: from mail-vs1-xe33.google.com ([2607:f8b0:4864:20::e33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rrGKs-007bob-3h for pgsql-hackers@postgresql.org; Mon, 01 Apr 2024 12:00:27 +0000 Received: by mail-vs1-xe33.google.com with SMTP id ada2fe7eead31-476bb6b964bso1337485137.1 for ; Mon, 01 Apr 2024 05:00:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711972822; x=1712577622; darn=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=fRJzrokq8kkCLZ+QCmHunckgAX/ZC33uOcI+4f2ziYM=; b=Blnx9D/43ddeakA7Nxe89n1ZA8P3yurb44cin1sVDQeNUAHZqS2U9jN+Ar0efPo0X2 ckWWlKcSkPw3vVogMcyZFDukfox4UNrDGgqS4fO0KxUCqsD9a6VYR5FX49nWifiSSaHx scEWXH7HT3AzqbXArFiEa8b9K/y0TOgkNGFzVM14THbKpy6TvyLTXuEbrMIuxouG0ASc BZraDZY4xW8zfm2HGktLGeZx5xPOOECpDrLcs4ZQw8JcoeF2vOxjtPOJRsHw0j7tER5C 64XWnjVYXh1hwaKkcBC1SdGp4bAMiHLILWdCAik1Vww2n5kYSi4ytW3Bn6onHN2WpBry q0tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711972822; x=1712577622; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fRJzrokq8kkCLZ+QCmHunckgAX/ZC33uOcI+4f2ziYM=; b=QYMqV9iVwdaH9VsRx0vJPg1s0wPQQBxUB8ZtUwPjjB52YG+aw4cztYKkopHviXQodY 7AgXpVLNS38rtODtQHO2SjGkcpQOP4MCivQx1sIru9BiF89hVDpkjh2z50dYBDnukPFv cRGn3KhGRhalSvbhL8U5+LCbKKYZoUqJM8kARiQShzs8uKXcrznrFNh9EhkKAwe1qAeJ NaHzOza+vCgx5ujm4sjzYi3HgPS89D3DvcdXwIrTORmw9qcVGlToPVlTf9EBB/p7xu0p QxX0eB7wOtefJHP1RnPh6gsUHPUykeuRAgzD3nKVkUlDWpihkqLygIUcgwo3SiVIOOXu Ilpg== X-Forwarded-Encrypted: i=1; AJvYcCW9CDLvdhS0qF/nMzKmEFPxWy7gbEKcNK6wlVv4oKTmhMHpnjvnomun07cfikUffB+aaVJeB0D4XsSy0muioy3v1MF6fDkt0qv5Q076 X-Gm-Message-State: AOJu0YyEbvvHxOEhDhwFBI+TDUFC7kY47YUfHH2XgCjkLnkSs+fheBwc uWMHXZbAGd5r/JKj2w36HekcHXWtrw4VOIbFCiJJkyWVL+alX9QU87fNKsll01S5S7IOv6YO1My N+eWhH21Sj8lGsk3VDFGWEhNsqqM= X-Google-Smtp-Source: AGHT+IE4i0oL1bzV28QAR486GFiuU7lX12bingQ7Q1Ej0Gr+ewTL8C2Nesw63YQOt/dS7vNloqrri6A5UvDRzc7ochM= X-Received: by 2002:a05:6102:6d6:b0:478:7f28:795e with SMTP id m22-20020a05610206d600b004787f28795emr1526197vsg.25.1711972822246; Mon, 01 Apr 2024 05:00:22 -0700 (PDT) MIME-Version: 1.0 References: <8620df11-96e4-4ca3-8f3c-33a479260961@joeconway.com> <4162f7f7-6fd6-4720-98e2-89f80e3de2ed@joeconway.com> <153b71b8-b6fb-4930-aaff-a7334cb3f6d6@joeconway.com> <8ef5f5d6-38db-4624-8eef-2d96c9eba9d4@joeconway.com> In-Reply-To: From: jian he Date: Mon, 1 Apr 2024 20:00:11 +0800 Message-ID: Subject: Re: Emitting JSON to file using COPY TO To: Joe Conway Cc: "Andrey M. Borodin" , Dean Rasheed , Daniel Verite , Andrew Dunstan , Davin Shearer , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000ef8839061507bb61" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ef8839061507bb61 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Mar 9, 2024 at 9:13=E2=80=AFAM jian he wrote: > > On Sat, Mar 9, 2024 at 2:03=E2=80=AFAM Joe Conway wr= ote: > > > > On 3/8/24 12:28, Andrey M. Borodin wrote: > > > Hello everyone! > > > > > > Thanks for working on this, really nice feature! > > > > > >> On 9 Jan 2024, at 01:40, Joe Conway wrote: > > >> > > >> Thanks -- will have a look > > > > > > Joe, recently folks proposed a lot of patches in this thread that see= m like diverted from original way of implementation. > > > As an author of CF entry [0] can you please comment on which patch ve= rsion needs review? > > > > > > I don't know if I agree with the proposed changes, but I have also been > > waiting to see how the parallel discussion regarding COPY extensibility > > shakes out. > > > > And there were a couple of issues found that need to be tracked down. > > > > Additionally I have had time/availability challenges recently. > > > > Overall, chances seem slim that this will make it into 17, but I have > > not quite given up hope yet either. > > Hi. > summary changes I've made in v9 patches at [0] > > meta: rebased. Now you need to use `git apply` or `git am`, previously > copyto_json.007.diff, you need to use GNU patch. > > > at [1], Dean Rasheed found some corner cases when the returned slot's > tts_tupleDescriptor > from > ` > ExecutorRun(cstate->queryDesc, ForwardScanDirection, 0, true); > processed =3D ((DR_copy *) cstate->queryDesc->dest)->processed; > ` > cannot be used for composite_to_json. > generally DestReceiver->rStartup is to send the TupleDesc to the DestRece= iver, > The COPY TO DestReceiver's rStartup function is copy_dest_startup, > however copy_dest_startup is a no-op. > That means to make the final TupleDesc of COPY TO (FORMAT JSON) > operation bullet proof, > we need to copy the tupDesc from CopyToState's queryDesc. > This only applies to when the COPY TO source is a query (example: > copy (select 1) to stdout), not a table. > The above is my interpretation. > trying to simplify the explanation. first refer to the struct DestReceiver. COPY TO (FORMAT JSON), we didn't send the preliminary Tupdesc to the DestReceiver via the rStartup function pointer within struct _DestReceiver. `CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)` the slot is the final slot returned via query execution. but we cannot use the tupdesc (slot->tts_tupleDescriptor) to do composite_to_json. because the final return slot Tupdesc may change during the query execution= . so we need to copy the tupDesc from CopyToState's queryDesc. aslo rebased, now we can apply it cleanly. --000000000000ef8839061507bb61 Content-Type: text/x-patch; charset="US-ASCII"; name="v10-0001-introduce-json-format-for-COPY-TO-operation.patch" Content-Disposition: attachment; filename="v10-0001-introduce-json-format-for-COPY-TO-operation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lugwe1r40 RnJvbSAxN2Q5ZjM3NjViYjc0ZDg2M2UyMjlhZmVkNTlhZjdkZDkyM2Y1Mzc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMSBBcHIgMjAyNCAxOTo0Nzo0MCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEw IDEvMl0gaW50cm9kdWNlIGpzb24gZm9ybWF0IGZvciBDT1BZIFRPIG9wZXJhdGlvbi4gIGpzb24K IGZvcm1hdCBpcyBvbmx5IGFsbG93ZWQgaW4gQ09QWSBUTyBvcGVyYXRpb24uICBhbHNvIGNhbm5v dCBiZSB1c2VkIHdpdGggaGVhZGVyCiBvcHRpb24uCgogZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQUx2ZlVrQnhUWXk1dVdQRlZ3cGtfN2lpMnpnVDA3dDNkLXlSX2N5NHNmcnJMVSUz RGtjZyU0MG1haWwuZ21haWwuY29tCiBkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzZh MDQ2MjhkLTBkNTMtNDFkOS05ZTM1LTVhOGRjMzAyYzM0Y0Bqb2Vjb253YXkuY29tCi0tLQogZG9j L3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgICAgICAgICB8ICAgNSArKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jICAgICAgICB8ICAxMyArKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0 by5jICAgICAgfCAxMjUgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkgICAgICAgICAgfCAgIDggKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29uLmMgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oICAgICAgICAgICB8ICAgMiArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IHwgIDU0ICsrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsICAgICAgfCAgMzggKysrKysrKysrCiA5IGZpbGVzIGNo YW5nZWQsIDIwOCBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sCmlu ZGV4IDMzY2U3YzRlLi5hZGQ4NGRiYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5 LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKQEAgLTIxOCw5ICsyMTgsMTQg QEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBs YWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgICAgU2VsZWN0cyB0aGUgZGF0YSBmb3JtYXQg dG8gYmUgcmVhZCBvciB3cml0dGVuOgogICAgICAgPGxpdGVyYWw+dGV4dDwvbGl0ZXJhbD4sCiAg ICAgICA8bGl0ZXJhbD5jc3Y8L2xpdGVyYWw+IChDb21tYSBTZXBhcmF0ZWQgVmFsdWVzKSwKKyAg ICAgIDxsaXRlcmFsPmpzb248L2xpdGVyYWw+IChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbiks CiAgICAgICBvciA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+LgogICAgICAgVGhlIGRlZmF1bHQg aXMgPGxpdGVyYWw+dGV4dDwvbGl0ZXJhbD4uCiAgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+Cisg ICAgICBUaGUgPGxpdGVyYWw+anNvbjwvbGl0ZXJhbD4gb3B0aW9uIGlzIGFsbG93ZWQgb25seSBp bgorICAgICAgPGNvbW1hbmQ+Q09QWSBUTzwvY29tbWFuZD4uCisgICAgIDwvcGFyYT4KICAgICA8 L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCBmNzVl MWQ3MC4uMDJmMTZkOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKQEAgLTQ5Nyw2ICs0OTcsOCBAQCBQcm9j ZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCSAvKiBkZWZhdWx0IGZvcm1h dCAqLyA7CiAJCQllbHNlIGlmIChzdHJjbXAoZm10LCAiY3N2IikgPT0gMCkKIAkJCQlvcHRzX291 dC0+Y3N2X21vZGUgPSB0cnVlOworCQkJZWxzZSBpZiAoc3RyY21wKGZtdCwgImpzb24iKSA9PSAw KQorCQkJCW9wdHNfb3V0LT5qc29uX21vZGUgPSB0cnVlOwogCQkJZWxzZSBpZiAoc3RyY21wKGZt dCwgImJpbmFyeSIpID09IDApCiAJCQkJb3B0c19vdXQtPmJpbmFyeSA9IHRydWU7CiAJCQllbHNl CkBAIC03NDAsNiArNzQyLDExIEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBl cnJtc2coImNhbm5vdCBzcGVjaWZ5IEhFQURFUiBpbiBCSU5BUlkgbW9kZSIpKSk7CiAKKwlpZiAo b3B0c19vdXQtPmpzb25fbW9kZSAmJiBvcHRzX291dC0+aGVhZGVyX2xpbmUpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJ CSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IEhFQURFUiBpbiBKU09OIG1vZGUiKSkpOworCiAJLyog Q2hlY2sgcXVvdGUgKi8KIAlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+cXVv dGUgIT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTgxNyw2ICs4MjQsMTIgQEAgUHJvY2Vz c0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJDT1BZIEZSRUVaRSBjYW5ub3Qg YmUgdXNlZCB3aXRoIENPUFkgVE8iKSkpOwogCisJLyogQ2hlY2sganNvbiBmb3JtYXQgICovCisJ aWYgKG9wdHNfb3V0LT5qc29uX21vZGUgJiYgaXNfZnJvbSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygi Y2Fubm90IHVzZSBKU09OIG1vZGUgaW4gQ09QWSBGUk9NIikpKTsKKwogCWlmIChvcHRzX291dC0+ ZGVmYXVsdF9wcmludCkKIAl7CiAJCWlmICghaXNfZnJvbSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5k ZXggYWU4YjJlMzYuLmZlMmViMjQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAtMjQsNiArMjQs NyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNkZXNjLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgorI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9y bWF0LmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKQEAgLTMxLDYgKzMyLDcgQEAKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgpAQCAtMTM5LDkgKzE0MSwyMCBAQCBTZW5kQ29weUJlZ2luKENvcHlUb1N0YXRlIGNzdGF0 ZSkKIAogCXBxX2JlZ2lubWVzc2FnZSgmYnVmLCBQcU1zZ19Db3B5T3V0UmVzcG9uc2UpOwogCXBx X3NlbmRieXRlKCZidWYsIGZvcm1hdCk7CS8qIG92ZXJhbGwgZm9ybWF0ICovCi0JcHFfc2VuZGlu dDE2KCZidWYsIG5hdHRzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKLQkJcHFfc2Vu ZGludDE2KCZidWYsIGZvcm1hdCk7IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLworCWlmICghY3N0 YXRlLT5vcHRzLmpzb25fbW9kZSkKKwl7CisJCXBxX3NlbmRpbnQxNigmYnVmLCBuYXR0cyk7CisJ CWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCQkJcHFfc2VuZGludDE2KCZidWYsIGZvcm1h dCk7IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBK U09OIG1vZGUgaXMgYWx3YXlzIG9uZSBub24tYmluYXJ5IGNvbHVtbgorCQkgKi8KKwkJcHFfc2Vu ZGludDE2KCZidWYsIDEpOworCQlwcV9zZW5kaW50MTYoJmJ1ZiwgMCk7CisJfQogCXBxX2VuZG1l c3NhZ2UoJmJ1Zik7CiAJY3N0YXRlLT5jb3B5X2Rlc3QgPSBDT1BZX0ZST05URU5EOwogfQpAQCAt OTAxLDExICs5MTQsNyBAQCBEb0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiBzdGF0aWMgdm9p ZAogQ29weU9uZVJvd1RvKENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp CiB7Ci0JYm9vbAkJbmVlZF9kZWxpbSA9IGZhbHNlOwotCUZtZ3JJbmZvICAgKm91dF9mdW5jdGlv bnMgPSBjc3RhdGUtPm91dF9mdW5jdGlvbnM7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owot CUxpc3RDZWxsICAgKmN1cjsKLQljaGFyCSAgICpzdHJpbmc7CiAKIAlNZW1vcnlDb250ZXh0UmVz ZXQoY3N0YXRlLT5yb3djb250ZXh0KTsKIAlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGNzdGF0ZS0+cm93Y29udGV4dCk7CkBAIC05MTYsNTMgKzkyNSw4OSBAQCBDb3B5T25lUm93 VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIAkJQ29weVNlbmRJ bnQxNihjc3RhdGUsIGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCkpOwogCX0KIAotCS8q IE1ha2Ugc3VyZSB0aGUgdHVwbGUgaXMgZnVsbHkgZGVjb25zdHJ1Y3RlZCAqLwotCXNsb3RfZ2V0 YWxsYXR0cnMoc2xvdCk7Ci0KLQlmb3JlYWNoKGN1ciwgY3N0YXRlLT5hdHRudW1saXN0KQorCWlm ICghY3N0YXRlLT5vcHRzLmpzb25fbW9kZSkKIAl7Ci0JCWludAkJCWF0dG51bSA9IGxmaXJzdF9p bnQoY3VyKTsKLQkJRGF0dW0JCXZhbHVlID0gc2xvdC0+dHRzX3ZhbHVlc1thdHRudW0gLSAxXTsK LQkJYm9vbAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKKwkJYm9vbAkJ bmVlZF9kZWxpbSA9IGZhbHNlOworCQlGbWdySW5mbyAgICpvdXRfZnVuY3Rpb25zID0gY3N0YXRl LT5vdXRfZnVuY3Rpb25zOworCQlMaXN0Q2VsbCAgICpjdXI7CisJCWNoYXIJICAgKnN0cmluZzsK IAotCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCi0JCXsKLQkJCWlmIChuZWVkX2RlbGltKQot CQkJCUNvcHlTZW5kQ2hhcihjc3RhdGUsIGNzdGF0ZS0+b3B0cy5kZWxpbVswXSk7Ci0JCQluZWVk X2RlbGltID0gdHJ1ZTsKLQkJfQorCQkvKiBNYWtlIHN1cmUgdGhlIHR1cGxlIGlzIGZ1bGx5IGRl Y29uc3RydWN0ZWQgKi8KKwkJc2xvdF9nZXRhbGxhdHRycyhzbG90KTsKIAotCQlpZiAoaXNudWxs KQotCQl7Ci0JCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCi0JCQkJQ29weVNlbmRTdHJpbmco Y3N0YXRlLCBjc3RhdGUtPm9wdHMubnVsbF9wcmludF9jbGllbnQpOwotCQkJZWxzZQotCQkJCUNv cHlTZW5kSW50MzIoY3N0YXRlLCAtMSk7Ci0JCX0KLQkJZWxzZQorCQlmb3JlYWNoKGN1ciwgY3N0 YXRlLT5hdHRudW1saXN0KQogCQl7CisJCQlpbnQJCQlhdHRudW0gPSBsZmlyc3RfaW50KGN1cik7 CisJCQlEYXR1bQkJdmFsdWUgPSBzbG90LT50dHNfdmFsdWVzW2F0dG51bSAtIDFdOworCQkJYm9v bAkJaXNudWxsID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKKwogCQkJaWYgKCFjc3Rh dGUtPm9wdHMuYmluYXJ5KQogCQkJewotCQkJCXN0cmluZyA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgm b3V0X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKLQkJCQkJCQkJCQkJdmFsdWUpOwotCQkJCWlmIChj c3RhdGUtPm9wdHMuY3N2X21vZGUpCi0JCQkJCUNvcHlBdHRyaWJ1dGVPdXRDU1YoY3N0YXRlLCBz dHJpbmcsCi0JCQkJCQkJCQkJY3N0YXRlLT5vcHRzLmZvcmNlX3F1b3RlX2ZsYWdzW2F0dG51bSAt IDFdKTsKKwkJCQlpZiAobmVlZF9kZWxpbSkKKwkJCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgY3N0 YXRlLT5vcHRzLmRlbGltWzBdKTsKKwkJCQluZWVkX2RlbGltID0gdHJ1ZTsKKwkJCX0KKworCQkJ aWYgKGlzbnVsbCkKKwkJCXsKKwkJCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJCQkJCUNv cHlTZW5kU3RyaW5nKGNzdGF0ZSwgY3N0YXRlLT5vcHRzLm51bGxfcHJpbnRfY2xpZW50KTsKIAkJ CQllbHNlCi0JCQkJCUNvcHlBdHRyaWJ1dGVPdXRUZXh0KGNzdGF0ZSwgc3RyaW5nKTsKKwkJCQkJ Q29weVNlbmRJbnQzMihjc3RhdGUsIC0xKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlieXRl YQkgICAqb3V0cHV0Ynl0ZXM7CisJCQkJaWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQorCQkJCXsK KwkJCQkJc3RyaW5nID0gT3V0cHV0RnVuY3Rpb25DYWxsKCZvdXRfZnVuY3Rpb25zW2F0dG51bSAt IDFdLAorCQkJCQkJCQkJCQkJdmFsdWUpOworCQkJCQlpZiAoY3N0YXRlLT5vcHRzLmNzdl9tb2Rl KQorCQkJCQkJQ29weUF0dHJpYnV0ZU91dENTVihjc3RhdGUsIHN0cmluZywKKwkJCQkJCQkJCQkJ Y3N0YXRlLT5vcHRzLmZvcmNlX3F1b3RlX2ZsYWdzW2F0dG51bSAtIDFdKTsKKwkJCQkJZWxzZQor CQkJCQkJQ29weUF0dHJpYnV0ZU91dFRleHQoY3N0YXRlLCBzdHJpbmcpOworCQkJCX0KKwkJCQll bHNlCisJCQkJeworCQkJCQlieXRlYQkgICAqb3V0cHV0Ynl0ZXM7CiAKLQkJCQlvdXRwdXRieXRl cyA9IFNlbmRGdW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCi0JCQkJCQkJ CQkJCSAgIHZhbHVlKTsKLQkJCQlDb3B5U2VuZEludDMyKGNzdGF0ZSwgVkFSU0laRShvdXRwdXRi eXRlcykgLSBWQVJIRFJTWik7Ci0JCQkJQ29weVNlbmREYXRhKGNzdGF0ZSwgVkFSREFUQShvdXRw dXRieXRlcyksCi0JCQkJCQkJIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOworCQkJ CQlvdXRwdXRieXRlcyA9IFNlbmRGdW5jdGlvbkNhbGwoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0g MV0sCisJCQkJCQkJCQkJCQkgICB2YWx1ZSk7CisJCQkJCUNvcHlTZW5kSW50MzIoY3N0YXRlLCBW QVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKKwkJCQkJQ29weVNlbmREYXRhKGNzdGF0 ZSwgVkFSREFUQShvdXRwdXRieXRlcyksCisJCQkJCQkJCSBWQVJTSVpFKG91dHB1dGJ5dGVzKSAt IFZBUkhEUlNaKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CisJZWxzZQorCXsKKwkJRGF0dW0JCXJv d2RhdGE7CisJCVN0cmluZ0luZm8JcmVzdWx0OworCisJCS8qCisJCSAqIGlmIHRoZSBDT1BZIFRP IGNvbW1hbmQncyBzb3VyY2UgZGF0YSBpcyBmcm9tIGEgcXVlcnksIG5vdCBhIHRhYmxlLAorCQkg KiB0aGVuIHdlIG5lZWQgdG8gY29weSB0aGUgVHVwbGVEZXNjIGZyb20gdGhlIGNzdGF0ZS0+cXVl cnlEZXNjLgorCQkgKiBiZWNhdXNlIHJldHVybmluZyBzbG90J3MgVHVwbGVEZXNjIG1heSBjaGFu Z2UgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbiwKKwkJICogYnV0IGNvbXBvc2l0ZV90b19qc29uIHJl cXVpcmVzIGNvcnJlY3QgVHVwbGVEZXNjLgorCQkgKiBzbyB3ZSBuZWVkIGNvcHkgZnJvbSBjc3Rh dGUtPnF1ZXJ5RGVzYyB0byBtYWtlIGl0IGJ1bGxldCBwcm9vZi4KKwkJKi8KKwkJaWYoIWNzdGF0 ZS0+cmVsKQorCQl7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHNsb3QtPnR0c190dXBsZURlc2Ny aXB0b3ItPm5hdHRzOyBpKyspCisJCQl7CisJCQkJbWVtY3B5KFR1cGxlRGVzY0F0dHIoc2xvdC0+ dHRzX3R1cGxlRGVzY3JpcHRvciwgaSksCisJCQkJCSAgIFR1cGxlRGVzY0F0dHIoY3N0YXRlLT5x dWVyeURlc2MtPnR1cERlc2MsIGkpLAorCQkJCQkgICAxICogc2l6ZW9mKEZvcm1EYXRhX3BnX2F0 dHJpYnV0ZSkpOworCQkJfQorCQkJQmxlc3NUdXBsZURlc2Moc2xvdC0+dHRzX3R1cGxlRGVzY3Jp cHRvcik7CisJCX0KKwkJcm93ZGF0YSA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGVEYXR1bShzbG90 KTsKKwkJcmVzdWx0ID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJY29tcG9zaXRlX3RvX2pzb24ocm93 ZGF0YSwgcmVzdWx0LCBmYWxzZSk7CisKKwkJQ29weVNlbmREYXRhKGNzdGF0ZSwgcmVzdWx0LT5k YXRhLCByZXN1bHQtPmxlbik7CisJfQogCiAJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueQppbmRleCBmMWFmNjE0Ny4uZDVjY2RmMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMzQ0Miw2 ICszNDQyLDEwIEBAIGNvcHlfb3B0X2l0ZW06CiAJCQkJewogCQkJCQkkJCA9IG1ha2VEZWZFbGVt KCJmb3JtYXQiLCAoTm9kZSAqKSBtYWtlU3RyaW5nKCJjc3YiKSwgQDEpOwogCQkJCX0KKwkJCXwg SlNPTgorCQkJCXsKKwkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9ybWF0IiwgKE5vZGUgKikgbWFr ZVN0cmluZygianNvbiIpLCBAMSk7CisJCQkJfQogCQkJfCBIRUFERVJfUAogCQkJCXsKIAkJCQkJ JCQgPSBtYWtlRGVmRWxlbSgiaGVhZGVyIiwgKE5vZGUgKikgbWFrZUJvb2xlYW4odHJ1ZSksIEAx KTsKQEAgLTM1MjQsNiArMzUyOCwxMCBAQCBjb3B5X2dlbmVyaWNfb3B0X2VsZW06CiAJCQkJewog CQkJCQkkJCA9IG1ha2VEZWZFbGVtKCQxLCAkMiwgQDEpOwogCQkJCX0KKwkJCXwgRk9STUFUX0xB IGNvcHlfZ2VuZXJpY19vcHRfYXJnCisJCQl7CisJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9ybWF0 IiwgJDIsIEAxKTsKKwkJCX0KIAkJOwogCiBjb3B5X2dlbmVyaWNfb3B0X2FyZzoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbi5jCmluZGV4IGQ3MTlhNjFmLi5mYWJkNGU2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCkBAIC04 Myw4ICs4Myw2IEBAIHR5cGVkZWYgc3RydWN0IEpzb25BZ2dTdGF0ZQogCUpzb25VbmlxdWVCdWls ZGVyU3RhdGUgdW5pcXVlX2NoZWNrOwogfSBKc29uQWdnU3RhdGU7CiAKLXN0YXRpYyB2b2lkIGNv bXBvc2l0ZV90b19qc29uKERhdHVtIGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsCi0JCQkJ CQkJICBib29sIHVzZV9saW5lX2ZlZWRzKTsKIHN0YXRpYyB2b2lkIGFycmF5X2RpbV90b19qc29u KFN0cmluZ0luZm8gcmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMsIGludCAqZGltcywKIAkJCQkJ CQkgIERhdHVtICp2YWxzLCBib29sICpudWxscywgaW50ICp2YWxjb3VudCwKIAkJCQkJCQkgIEpz b25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LCBPaWQgb3V0ZnVuY29pZCwKQEAgLTUwNyw4ICs1MDUs OSBAQCBhcnJheV90b19qc29uX2ludGVybmFsKERhdHVtIGFycmF5LCBTdHJpbmdJbmZvIHJlc3Vs dCwgYm9vbCB1c2VfbGluZV9mZWVkcykKIAogLyoKICAqIFR1cm4gYSBjb21wb3NpdGUgLyByZWNv cmQgaW50byBKU09OLgorICogRXhwb3J0ZWQgc28gQ09QWSBUTyBjYW4gdXNlIGl0LgogICovCi1z dGF0aWMgdm9pZAordm9pZAogY29tcG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBTdHJp bmdJbmZvIHJlc3VsdCwgYm9vbCB1c2VfbGluZV9mZWVkcykKIHsKIAlIZWFwVHVwbGVIZWFkZXIg dGQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb3B5LmgKaW5kZXggMTQxZmQ0OGQuLmZmNmVjYzdhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29w eS5oCkBAIC02Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlGb3JtYXRPcHRpb25zCiAJ Ym9vbAkJYmluYXJ5OwkJCS8qIGJpbmFyeSBmb3JtYXQ/ICovCiAJYm9vbAkJZnJlZXplOwkJCS8q IGZyZWV6ZSByb3dzIG9uIGxvYWRpbmc/ICovCiAJYm9vbAkJY3N2X21vZGU7CQkvKiBDb21tYSBT ZXBhcmF0ZWQgVmFsdWUgZm9ybWF0PyAqLworCWJvb2wJCWpzb25fbW9kZTsJCS8qIEpTT04gZm9y bWF0PyAqLwogCUNvcHlIZWFkZXJDaG9pY2UgaGVhZGVyX2xpbmU7CS8qIGhlYWRlciBsaW5lPyAq LwogCWNoYXIJICAgKm51bGxfcHJpbnQ7CQkvKiBOVUxMIG1hcmtlciBzdHJpbmcgKHNlcnZlciBl bmNvZGluZyEpICovCiAJaW50CQkJbnVsbF9wcmludF9sZW47IC8qIGxlbmd0aCBvZiBzYW1lICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uLmggYi9zcmMvaW5jbHVkZS91dGls cy9qc29uLmgKaW5kZXggNmQ3ZjFiMzguLmQ1NjMxMTcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9qc29uLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCkBAIC0xNyw2ICsx Nyw4IEBACiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKIAogLyogZnVuY3Rpb25zIGluIGpz b24uYyAqLworZXh0ZXJuIHZvaWQgY29tcG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9zaXRlLCBT dHJpbmdJbmZvIHJlc3VsdCwKKwkJCQkJCQkgIGJvb2wgdXNlX2xpbmVfZmVlZHMpOwogZXh0ZXJu IHZvaWQgZXNjYXBlX2pzb24oU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKnN0cik7CiBleHRl cm4gY2hhciAqSnNvbkVuY29kZURhdGVUaW1lKGNoYXIgKmJ1ZiwgRGF0dW0gdmFsdWUsIE9pZCB0 eXBpZCwKIAkJCQkJCQkJY29uc3QgaW50ICp0enApOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5v dXQKaW5kZXggYjQ4MzY1ZWMuLjBjNWFkZTQ3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NvcHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5v dXQKQEAgLTQyLDYgKzQyLDYwIEBAIGNvcHkgY29weXRlc3QzIHRvIHN0ZG91dCBjc3YgaGVhZGVy OwogYzEsImNvbCB3aXRoICwgY29tbWEiLCJjb2wgd2l0aCAiIiBxdW90ZSIKIDEsYSwxCiAyLGIs MgorLS0tIHRlc3QgY29weWluZyBpbiBKU09OIG1vZGUgd2l0aCB2YXJpb3VzIHN0eWxlcworY29w eSBjb3B5dGVzdCB0byBzdGRvdXQganNvbjsKK3sic3R5bGUiOiJET1MiLCJ0ZXN0IjoiYWJjXHJc bmRlZiIsImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmls bGVyIjoyfQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KK3si c3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmlsbGVyIjo0fQor Y29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKK3sic3R5bGUiOiJET1MiLCJ0 ZXN0IjoiYWJjXHJcbmRlZiIsImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4IiwidGVzdCI6ImFi Y1xuZGVmIiwiZmlsbGVyIjoyfQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZp bGxlciI6M30KK3sic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwi ZmlsbGVyIjo0fQorLS0gRXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNv biwgaGVhZGVyKTsKK0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgSEVBREVSIGluIEpTT04gbW9kZQor LS0gRXJyb3IKK2NvcHkgY29weXRlc3QgZnJvbSBzdGRvdXQgKGZvcm1hdCBqc29uKTsKK0VSUk9S OiAgY2Fubm90IHVzZSBKU09OIG1vZGUgaW4gQ09QWSBGUk9NCistLSBlbWJlZGRlZCBlc2NhcGVk IGNoYXJhY3RlcnMKK2NyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVzdCAoCisgICAgaWQgYmln c2VyaWFsLAorICAgIGYxIHRleHQsCisgICAgZjIgdGltZXN0YW1wdHopOworaW5zZXJ0IGludG8g Y29weWpzb250ZXN0CisgIHNlbGVjdCBnLmksCisgICAgICAgICBDQVNFIFdIRU4gZy5pICUgMiA9 IDAgVEhFTgorICAgICAgICAgICAnbGluZSB3aXRoICcnIGluIGl0OiAnIHx8IGcuaTo6dGV4dAor ICAgICAgICAgRUxTRQorICAgICAgICAgICAnbGluZSB3aXRoICIgaW4gaXQ6ICcgfHwgZy5pOjp0 ZXh0CisgICAgICAgICBFTkQsCisgICAgICAgICAnTW9uIEZlYiAxMCAxNzozMjowMSAxOTk3IFBT VCcKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBhcyBnKGkpOworaW5zZXJ0IGludG8gY29w eWpzb250ZXN0IChmMSkgdmFsdWVzCisoRSdhYWFcImJiYic6OnRleHQpLAorKEUnYWFhXFxiYmIn Ojp0ZXh0KSwKKyhFJ2FhYVwvYmJiJzo6dGV4dCksCisoRSdhYWFcYmJiYic6OnRleHQpLAorKEUn YWFhXGZiYmInOjp0ZXh0KSwKKyhFJ2FhYVxuYmJiJzo6dGV4dCksCisoRSdhYWFccmJiYic6OnRl eHQpLAorKEUnYWFhXHRiYmInOjp0ZXh0KTsKK2NvcHkgY29weWpzb250ZXN0IHRvIHN0ZG91dCBq c29uOworeyJpZCI6MSwiZjEiOiJsaW5lIHdpdGggXCIgaW4gaXQ6IDEiLCJmMiI6IjE5OTctMDIt MTBUMTc6MzI6MDEtMDg6MDAifQoreyJpZCI6MiwiZjEiOiJsaW5lIHdpdGggJyBpbiBpdDogMiIs ImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9Cit7ImlkIjozLCJmMSI6ImxpbmUgd2l0 aCBcIiBpbiBpdDogMyIsImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9Cit7ImlkIjo0 LCJmMSI6ImxpbmUgd2l0aCAnIGluIGl0OiA0IiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMyOjAxLTA4 OjAwIn0KK3siaWQiOjUsImYxIjoibGluZSB3aXRoIFwiIGluIGl0OiA1IiwiZjIiOiIxOTk3LTAy LTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjEsImYxIjoiYWFhXCJiYmIiLCJmMiI6bnVsbH0K K3siaWQiOjIsImYxIjoiYWFhXFxiYmIiLCJmMiI6bnVsbH0KK3siaWQiOjMsImYxIjoiYWFhL2Ji YiIsImYyIjpudWxsfQoreyJpZCI6NCwiZjEiOiJhYWFcYmJiYiIsImYyIjpudWxsfQoreyJpZCI6 NSwiZjEiOiJhYWFcZmJiYiIsImYyIjpudWxsfQoreyJpZCI6NiwiZjEiOiJhYWFcbmJiYiIsImYy IjpudWxsfQoreyJpZCI6NywiZjEiOiJhYWFccmJiYiIsImYyIjpudWxsfQoreyJpZCI6OCwiZjEi OiJhYWFcdGJiYiIsImYyIjpudWxsfQogY3JlYXRlIHRlbXAgdGFibGUgY29weXRlc3Q0ICgKIAlj MSBpbnQsCiAJImNvbG5hbWUgd2l0aCB0YWI6IAkiIHRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29weS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbApp bmRleCA0M2QyZTkwNi4uZGE2YjBiMGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NvcHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCkBAIC01NCw2ICs1 NCw0NCBAQCB0aGlzIGlzIGp1c3QgYSBsaW5lIGZ1bGwgb2YganVuayB0aGF0IHdvdWxkIGVycm9y IG91dCBpZiBwYXJzZWQKIAogY29weSBjb3B5dGVzdDMgdG8gc3Rkb3V0IGNzdiBoZWFkZXI7CiAK Ky0tLSB0ZXN0IGNvcHlpbmcgaW4gSlNPTiBtb2RlIHdpdGggdmFyaW91cyBzdHlsZXMKK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IGpzb247CisKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3Jt YXQganNvbik7CisKKy0tIEVycm9yCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpz b24sIGhlYWRlcik7CistLSBFcnJvcgorY29weSBjb3B5dGVzdCBmcm9tIHN0ZG91dCAoZm9ybWF0 IGpzb24pOworCistLSBlbWJlZGRlZCBlc2NhcGVkIGNoYXJhY3RlcnMKK2NyZWF0ZSB0ZW1wIHRh YmxlIGNvcHlqc29udGVzdCAoCisgICAgaWQgYmlnc2VyaWFsLAorICAgIGYxIHRleHQsCisgICAg ZjIgdGltZXN0YW1wdHopOworCitpbnNlcnQgaW50byBjb3B5anNvbnRlc3QKKyAgc2VsZWN0IGcu aSwKKyAgICAgICAgIENBU0UgV0hFTiBnLmkgJSAyID0gMCBUSEVOCisgICAgICAgICAgICdsaW5l IHdpdGggJycgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAgICAgICBFTFNFCisgICAgICAgICAg ICdsaW5lIHdpdGggIiBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgIEVORCwKKyAgICAg ICAgICdNb24gRmViIDEwIDE3OjMyOjAxIDE5OTcgUFNUJworICBmcm9tIGdlbmVyYXRlX3Nlcmll cygxLDUpIGFzIGcoaSk7CisKK2luc2VydCBpbnRvIGNvcHlqc29udGVzdCAoZjEpIHZhbHVlcwor KEUnYWFhXCJiYmInOjp0ZXh0KSwKKyhFJ2FhYVxcYmJiJzo6dGV4dCksCisoRSdhYWFcL2JiYic6 OnRleHQpLAorKEUnYWFhXGJiYmInOjp0ZXh0KSwKKyhFJ2FhYVxmYmJiJzo6dGV4dCksCisoRSdh YWFcbmJiYic6OnRleHQpLAorKEUnYWFhXHJiYmInOjp0ZXh0KSwKKyhFJ2FhYVx0YmJiJzo6dGV4 dCk7CisKK2NvcHkgY29weWpzb250ZXN0IHRvIHN0ZG91dCBqc29uOworCiBjcmVhdGUgdGVtcCB0 YWJsZSBjb3B5dGVzdDQgKAogCWMxIGludCwKIAkiY29sbmFtZSB3aXRoIHRhYjogCSIgdGV4dCk7 CgpiYXNlLWNvbW1pdDogN2FhMDBmMTM2MGUwYzY5MzhmZGYzMmQzZmJiOGI4NDdiNjA5OGI4OAot LSAKMi4zNC4xCgo= --000000000000ef8839061507bb61 Content-Type: text/x-patch; charset="US-ASCII"; name="v10-0002-Add-option-force_array-for-COPY-TO-JSON-fomrat.patch" Content-Disposition: attachment; filename="v10-0002-Add-option-force_array-for-COPY-TO-JSON-fomrat.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lugwe1r81 RnJvbSBjOTM5MjYyZjYyNjZjZWEzODc2MWFhODljYzZiYjQ5NWI4ZDM4Y2NiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMSBBcHIgMjAyNCAxOTo1MzoxMCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEw IDIvMl0gQWRkIG9wdGlvbiBmb3JjZV9hcnJheSBmb3IgQ09QWSBUTyBKU09OIGZvbXJhdAoKZm9y Y2VfYXJyYXkgb3B0aW9uIG9ubHkgYXBwbHkgdG8gQ09QWSBUTyBvcGVyYXRpb24gd2l0aCBKU09O IGZvcm1hdC4KbWFrZSBhZGQgb3BlbmluZyBicmFja2V0cyBhbmQgY2xvc2UgYnJhY2tldHMgZm9y IHRoZSB3aG9sZSBqc29uIG91dHB1dC4KYWxzbywgc2VwYXJhdGUgZWFjaCBqc29uIHJlY29yZCB3 aXRoIGEgY29tbWEuCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FMdmZVa0J4VFl5 NXVXUEZWd3BrXzdpaTJ6Z1QwN3QzZC15Ul9jeTRzZnJyTFUlM0RrY2clNDBtYWlsLmdtYWlsLmNv bQpkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzZhMDQ2MjhkLTBkNTMtNDFkOS05ZTM1 LTVhOGRjMzAyYzM0Y0Bqb2Vjb253YXkuY29tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNn bWwgICAgICAgICB8IDE0ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 LmMgICAgICAgIHwgMTcgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHl0by5jICAgICAgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29weS5oICAgICAgICB8ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29weS5vdXQgfCAyNCArKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvcHkuc3FsICAgICAgfCAgOSArKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgOTQg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXggYWRkODRkYmIuLmY0MTAwY2JhIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm L2NvcHkuc2dtbApAQCAtNDMsNiArNDMsNyBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAg Rk9SQ0VfUVVPVEUgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFt ZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgIEZPUkNFX05PVF9OVUxMIHsgKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBb LCAuLi5dICkgfCAqIH0KICAgICBGT1JDRV9OVUxMIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgfCAqIH0KKyAgICBG T1JDRV9BUlJBWSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBs YWNlYWJsZT4gXQogICAgIE9OX0VSUk9SICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ ZXJyb3JfYWN0aW9uPC9yZXBsYWNlYWJsZT4nCiAgICAgRU5DT0RJTkcgJzxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5lbmNvZGluZ19uYW1lPC9yZXBsYWNlYWJsZT4nCiAgICAgTE9HX1ZF UkJPU0lUWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bW9kZTwvcmVwbGFjZWFibGU+ CkBAIC0zOTAsNiArMzkxLDE5IEBAIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFibGUKICAgICA8L2xpc3Rp dGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+ PGxpdGVyYWw+Rk9SQ0VfQVJSQVk8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBGb3JjZSBvdXRwdXQgb2Ygc3F1YXJlIGJyYWNrZXRzIGFzIGFycmF5 IGRlY29yYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgIGFuZCBlbmQgb2Ygb3V0cHV0LCBh bmQgY29tbWFzIGJldHdlZW4gdGhlIHJvd3MuIEl0IGlzIGFsbG93ZWQgb25seSBpbgorICAgICAg PGNvbW1hbmQ+Q09QWSBUTzwvY29tbWFuZD4sIGFuZCBvbmx5IHdoZW4gdXNpbmcKKyAgICAgIDxs aXRlcmFsPkpTT048L2xpdGVyYWw+IGZvcm1hdC4gVGhlIGRlZmF1bHQgaXMKKyAgICAgIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5P Tl9FUlJPUjwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmlu ZGV4IDAyZjE2ZDllLi4yZmZkNjk3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwpAQCAtNDczLDYgKzQ3Myw3 IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJYm9vbAkJaGVhZGVy X3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCW9uX2Vycm9yX3NwZWNpZmllZCA9IGZhbHNlOwog CWJvb2wJCWxvZ192ZXJib3NpdHlfc3BlY2lmaWVkID0gZmFsc2U7CisJYm9vbAkJZm9yY2VfYXJy YXlfc3BlY2lmaWVkID0gZmFsc2U7CiAJTGlzdENlbGwgICAqb3B0aW9uOwogCiAJLyogU3VwcG9y dCBleHRlcm5hbCB1c2UgZm9yIG9wdGlvbiBzYW5pdHkgY2hlY2tpbmcgKi8KQEAgLTYyNyw2ICs2 MjgsMTMgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJ ZGVmZWwtPmRlZm5hbWUpLAogCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGRlZmVs LT5sb2NhdGlvbikpKTsKIAkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJm b3JjZV9hcnJheSIpID09IDApCisJCXsKKwkJCWlmIChmb3JjZV9hcnJheV9zcGVjaWZpZWQpCisJ CQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CisJCQlmb3JjZV9hcnJh eV9zcGVjaWZpZWQgPSB0cnVlOworCQkJb3B0c19vdXQtPmZvcmNlX2FycmF5ID0gZGVmR2V0Qm9v bGVhbihkZWZlbCk7CisJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAib25f ZXJyb3IiKSA9PSAwKQogCQl7CiAJCQlpZiAob25fZXJyb3Jfc3BlY2lmaWVkKQpAQCAtODMwLDYg KzgzOCwxNSBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJjYW5u b3QgdXNlIEpTT04gbW9kZSBpbiBDT1BZIEZST00iKSkpOwogCisJaWYgKCFvcHRzX291dC0+anNv bl9tb2RlICYmIG9wdHNfb3V0LT5mb3JjZV9hcnJheSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiQ09Q WSBGT1JDRV9BUlJBWSByZXF1aXJlcyBKU09OIG1vZGUiKSkpOworCWlmICghb3B0c19vdXQtPmpz b25fbW9kZSAmJiBmb3JjZV9hcnJheV9zcGVjaWZpZWQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIkNP UFkgRk9SQ0VfQVJSQVkgb25seSBhdmFpbGFibGUgaW4gSlNPTiBtb2RlIikpKTsKKwogCWlmIChv cHRzX291dC0+ZGVmYXVsdF9wcmludCkKIAl7CiAJCWlmICghaXNfZnJvbSkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eXRvLmMKaW5kZXggZmUyZWIyNDQuLjhlNGVkYjZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAt ODEsNiArODEsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5VG9TdGF0ZURhdGEKIAlMaXN0CSAgICph dHRudW1saXN0OwkJLyogaW50ZWdlciBsaXN0IG9mIGF0dG51bXMgdG8gY29weSAqLwogCWNoYXIJ ICAgKmZpbGVuYW1lOwkJLyogZmlsZW5hbWUsIG9yIE5VTEwgZm9yIFNURE9VVCAqLwogCWJvb2wJ CWlzX3Byb2dyYW07CQkvKiBpcyAnZmlsZW5hbWUnIGEgcHJvZ3JhbSB0byBwb3Blbj8gKi8KKwli b29sCQlqc29uX3Jvd19kZWxpbV9uZWVkZWQ7CS8qIG5lZWQgZGVsaW1pdGVyIHRvIHN0YXJ0IG5l eHQganNvbiBhcnJheSBlbGVtZW50ICovCiAJY29weV9kYXRhX2Rlc3RfY2IgZGF0YV9kZXN0X2Ni OyAvKiBmdW5jdGlvbiBmb3Igd3JpdGluZyBkYXRhICovCiAKIAlDb3B5Rm9ybWF0T3B0aW9ucyBv cHRzOwpAQCAtODUzLDYgKzg1NCwxNiBAQCBEb0NvcHlUbyhDb3B5VG9TdGF0ZSBjc3RhdGUpCiAK IAkJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKIAkJfQorCQkvKgorCQkgKiBJZiBKU09OIGhh cyBiZWVuIHJlcXVlc3RlZCwgYW5kIEZPUkNFX0FSUkFZIGhhcyBiZWVuIHNwZWNpZmllZCBzZW5k CisJCSAqIHRoZSBvcGVuaW5nIGJyYWNrZXQuCisJCSovCisJCWlmIChjc3RhdGUtPm9wdHMuanNv bl9tb2RlICYmIGNzdGF0ZS0+b3B0cy5mb3JjZV9hcnJheSkKKwkJeworCQkJQ29weVNlbmRDaGFy KGNzdGF0ZSwgJ1snKTsKKwkJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKKwkJfQorCiAJfQog CiAJaWYgKGNzdGF0ZS0+cmVsKQpAQCAtOTAwLDYgKzkxMSwxNSBAQCBEb0NvcHlUbyhDb3B5VG9T dGF0ZSBjc3RhdGUpCiAJCUNvcHlTZW5kRW5kT2ZSb3coY3N0YXRlKTsKIAl9CiAKKwkvKgorCSAq IElmIEpTT04gaGFzIGJlZW4gcmVxdWVzdGVkLCBhbmQgRk9SQ0VfQVJSQVkgaGFzIGJlZW4gc3Bl Y2lmaWVkIHNlbmQgdGhlCisJICogY2xvc2luZyBicmFja2V0LgorCSovCisJaWYgKGNzdGF0ZS0+ b3B0cy5qc29uX21vZGUgJiYgY3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5KQorCXsKKwkJQ29weVNl bmRDaGFyKGNzdGF0ZSwgJ10nKTsKKwkJQ29weVNlbmRFbmRPZlJvdyhjc3RhdGUpOworCX0KIAlN ZW1vcnlDb250ZXh0RGVsZXRlKGNzdGF0ZS0+cm93Y29udGV4dCk7CiAKIAlpZiAoZmVfY29weSkK QEAgLTEwMDYsNiArMTAyNiwxNSBAQCBDb3B5T25lUm93VG8oQ29weVRvU3RhdGUgY3N0YXRlLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCkKIAkJcmVzdWx0ID0gbWFrZVN0cmluZ0luZm8oKTsKIAkJY29t cG9zaXRlX3RvX2pzb24ocm93ZGF0YSwgcmVzdWx0LCBmYWxzZSk7CiAKKwkJaWYgKGNzdGF0ZS0+ anNvbl9yb3dfZGVsaW1fbmVlZGVkICYmIGNzdGF0ZS0+b3B0cy5mb3JjZV9hcnJheSkKKwkJCUNv cHlTZW5kQ2hhcihjc3RhdGUsICcsJyk7CisJCWVsc2UgaWYgKGNzdGF0ZS0+b3B0cy5mb3JjZV9h cnJheSkKKwkJeworCQkJLyogZmlyc3Qgcm93IG5lZWRzIG5vIGRlbGltaXRlciAqLworCQkJQ29w eVNlbmRDaGFyKGNzdGF0ZSwgJyAnKTsKKwkJCWNzdGF0ZS0+anNvbl9yb3dfZGVsaW1fbmVlZGVk ID0gdHJ1ZTsKKwkJfQorCiAJCUNvcHlTZW5kRGF0YShjc3RhdGUsIHJlc3VsdC0+ZGF0YSwgcmVz dWx0LT5sZW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5o IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCmluZGV4IGZmNmVjYzdhLi5mNzZmZThmYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NvcHkuaApAQCAtODEsNiArODEsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5Rm9y bWF0T3B0aW9ucwogCUxpc3QJICAgKmZvcmNlX251bGw7CQkvKiBsaXN0IG9mIGNvbHVtbiBuYW1l cyAqLwogCWJvb2wJCWZvcmNlX251bGxfYWxsOyAvKiBGT1JDRV9OVUxMICo/ICovCiAJYm9vbAkg ICAqZm9yY2VfbnVsbF9mbGFnczsJLyogcGVyLWNvbHVtbiBDU1YgRk4gZmxhZ3MgKi8KKwlib29s CQlmb3JjZV9hcnJheTsJLyogYWRkIEpTT04gYXJyYXkgZGVjb3JhdGlvbnMgKi8KIAlib29sCQlj b252ZXJ0X3NlbGVjdGl2ZWx5OwkvKiBkbyBzZWxlY3RpdmUgYmluYXJ5IGNvbnZlcnNpb24/ICov CiAJQ29weU9uRXJyb3JDaG9pY2Ugb25fZXJyb3I7IC8qIHdoYXQgdG8gZG8gd2hlbiBlcnJvciBo YXBwZW5lZCAqLwogCUNvcHlMb2dWZXJib3NpdHlDaG9pY2UgbG9nX3ZlcmJvc2l0eTsJLyogdmVy Ym9zaXR5IG9mIGxvZ2dlZCBtZXNzYWdlcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQK aW5kZXggMGM1YWRlNDcuLjc4MTI3NjhjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NvcHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQK QEAgLTU5LDYgKzU5LDMwIEBAIEVSUk9SOiAgY2Fubm90IHNwZWNpZnkgSEVBREVSIGluIEpTT04g bW9kZQogLS0gRXJyb3IKIGNvcHkgY29weXRlc3QgZnJvbSBzdGRvdXQgKGZvcm1hdCBqc29uKTsK IEVSUk9SOiAgY2Fubm90IHVzZSBKU09OIG1vZGUgaW4gQ09QWSBGUk9NCistLUVycm9yCitjb3B5 IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGNzdiwgZm9yY2VfYXJyYXkgZmFsc2UpOworRVJS T1I6ICBDT1BZIEZPUkNFX0FSUkFZIG9ubHkgYXZhaWxhYmxlIGluIEpTT04gbW9kZQorY29weSBj b3B5dGVzdCBmcm9tIHN0ZGluIChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7CitFUlJP UjogIGNhbm5vdCB1c2UgSlNPTiBtb2RlIGluIENPUFkgRlJPTQorY29weSBjb3B5dGVzdCB0byBz dGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSk7CitbCisgeyJzdHlsZSI6IkRPUyIsInRl c3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorLHsic3R5bGUiOiJVbml4IiwidGVzdCI6ImFi Y1xuZGVmIiwiZmlsbGVyIjoyfQorLHsic3R5bGUiOiJNYWMiLCJ0ZXN0IjoiYWJjXHJkZWYiLCJm aWxsZXIiOjN9CisseyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIi LCJmaWxsZXIiOjR9CitdCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZv cmNlX2FycmF5IHRydWUpOworWworIHsic3R5bGUiOiJET1MiLCJ0ZXN0IjoiYWJjXHJcbmRlZiIs ImZpbGxlciI6MX0KKyx7InN0eWxlIjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZpbGxlciI6 Mn0KKyx7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQorLHsic3R5 bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmlsbGVyIjo0fQorXQor Y29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSBmYWxzZSk7 Cit7InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYiLCJmaWxsZXIiOjF9Cit7InN0eWxl IjoiVW5peCIsInRlc3QiOiJhYmNcbmRlZiIsImZpbGxlciI6Mn0KK3sic3R5bGUiOiJNYWMiLCJ0 ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9Cit7InN0eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0Ijoi YVxcclxcXHJcXFxuXFxuYiIsImZpbGxlciI6NH0KIC0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFj dGVycwogY3JlYXRlIHRlbXAgdGFibGUgY29weWpzb250ZXN0ICgKICAgICBpZCBiaWdzZXJpYWws CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvcHkuc3FsCmluZGV4IGRhNmIwYjBhLi5mNjg1MTkzYiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weS5zcWwKQEAgLTY0LDYgKzY0LDE1IEBAIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3Jt YXQganNvbiwgaGVhZGVyKTsKIC0tIEVycm9yCiBjb3B5IGNvcHl0ZXN0IGZyb20gc3Rkb3V0IChm b3JtYXQganNvbik7CiAKKy0tRXJyb3IKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQg Y3N2LCBmb3JjZV9hcnJheSBmYWxzZSk7Citjb3B5IGNvcHl0ZXN0IGZyb20gc3RkaW4gKGZvcm1h dCBqc29uLCBmb3JjZV9hcnJheSB0cnVlKTsKKworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZv cm1hdCBqc29uLCBmb3JjZV9hcnJheSk7CisKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3Jt YXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7CisKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChm b3JtYXQganNvbiwgZm9yY2VfYXJyYXkgZmFsc2UpOwogLS0gZW1iZWRkZWQgZXNjYXBlZCBjaGFy YWN0ZXJzCiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5anNvbnRlc3QgKAogICAgIGlkIGJpZ3Nlcmlh bCwKLS0gCjIuMzQuMQoK --000000000000ef8839061507bb61--