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 1rKypg-005P6Z-1n for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Jan 2024 10:50:44 +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 1rKype-004XXK-AM for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Jan 2024 10:50:42 +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 1rKypd-004XX2-Jc for pgsql-hackers@lists.postgresql.org; Wed, 03 Jan 2024 10:50:42 +0000 Received: from mail-ua1-x933.google.com ([2607:f8b0:4864:20::933]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rKypa-00DWNa-VM for pgsql-hackers@postgresql.org; Wed, 03 Jan 2024 10:50:40 +0000 Received: by mail-ua1-x933.google.com with SMTP id a1e0cc1a2514c-7cd42bc0f1dso1001025241.1 for ; Wed, 03 Jan 2024 02:50:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704279038; x=1704883838; 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=OzEON19Vcfdy+fbBeEP+8bwX8de1Kp6TGNxgvb5U3nc=; b=PnZb73EURxoyQl9rKZMMas6HKgjC1hqWTvVzwV5o4xEJxmCHcGxgFLHOovbEVgK/tJ OaJSbmpQcEOWyjDLpX5LHite/gIEaO8P/29qPDSfzKST3nWnItOpKvLQ8QRVfNymL8WQ sR6bG6n0AHRH9t2V1mWF+m/r9euS21GjK+UM36mM7yjOF4qi89aqEn7WRuqUdIkVWOq2 F8kgQw3qEWMP6dCKC5Y0v7GPiccPfyWzzCL4Lx3b19GWTkQW+e19jCZZZ7ZvkEgyKhdV 0keev9DbKJx1A+94IKITdaCI7ZpL436JXCxK4ZjsGdMC0WmLdlzMlrU6DqzZdEv43LZY nDFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704279038; x=1704883838; 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=OzEON19Vcfdy+fbBeEP+8bwX8de1Kp6TGNxgvb5U3nc=; b=XOgZdx4QBC1T7c0mWHB9fHdPtjhKSxmiSJu+dVcYR3t3zB3iNGEQclBpdJZP2EIewK 36lrnqSw/wvNqEReOaxD4YNp1GNaZhKRT79/uMvVH1ynQvX55xipflM6S0f5hmz8YFN/ SWeyNOR31DZM9ZicPeBLScSOy9+HEWIfLXH50SQAqqYYNUKfREbofK5qRANNh5d/UWIn F78B+fKyYGbMMR7hnhSimoYAmDVxpOEg8seuTb6m5jnyDD1MbjIqUZTP7LEJEmcPAkDh Zjnj1dfxy/cZTbH/pbbQ4xoE6b+JZA9nVwzSyZ1TiQpwoDfeNWLddjP0BMFVWr2EpPWf SgfQ== X-Gm-Message-State: AOJu0Yy1jlKzQtcNO/1BNOpgBfZZww3tB7Fpn5TRF7+J69pO/7YuRql0 z22OwFNOMT0iCznClg2yzcxAQ1kiVt1sfRsZqqU= X-Google-Smtp-Source: AGHT+IHt8hBRS7q+x9t2/AOO35RGJFhynqUx7MNjKPdljgsi3cyPq7NfhyAvDtbOAN3Q3g5LneXWBfHodG9v5WjEYzk= X-Received: by 2002:a05:6102:3f15:b0:467:2232:552b with SMTP id k21-20020a0561023f1500b004672232552bmr5968884vsv.18.1704279037786; Wed, 03 Jan 2024 02:50:37 -0800 (PST) MIME-Version: 1.0 References: <202312071051.cpxujwos4tlj@alvherre.pgsql> <20231208173014.2qycwc6kjqf6zlck@awork3.anarazel.de> In-Reply-To: From: jian he Date: Wed, 3 Jan 2024 18:50:26 +0800 Message-ID: Subject: Re: remaining sql/json patches To: Amit Langote Cc: Andres Freund , Alvaro Herrera , Erik Rijkers , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000a59bc3060e086228" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a59bc3060e086228 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 22, 2023 at 9:01=E2=80=AFPM jian he wrote: > > Hi > > + /* FALLTHROUGH */ > + case JTC_EXISTS: > + case JTC_FORMATTED: > + { > + Node *je; > + CaseTestExpr *param =3D makeNode(CaseTestExpr); > + > + param->collation =3D InvalidOid; > + param->typeId =3D cxt->contextItemTypid; > + param->typeMod =3D -1; > + > + if (rawc->wrapper !=3D JSW_NONE && > + rawc->quotes !=3D JS_QUOTES_UNSPEC) > + ereport(ERROR, > + (errcode(ERRCODE_SYNTAX_ERROR), > + errmsg("cannot use WITH WRAPPER clause for formatted colunmns" > + " without also specifying OMIT/KEEP QUOTES"), > + parser_errposition(pstate, rawc->location))); > > typo, should be "formatted columns". > I suspect people will be confused with the meaning of "formatted column". > maybe we can replace this part:"cannot use WITH WRAPPER clause for > formatted column" > to > "SQL/JSON WITH WRAPPER behavior must not be specified when FORMAT > clause is used" > > SELECT * FROM JSON_TABLE(jsonb '"world"', '$' COLUMNS (item text > FORMAT JSON PATH '$' with wrapper KEEP QUOTES)); > ERROR: cannot use WITH WRAPPER clause for formatted colunmns without > also specifying OMIT/KEEP QUOTES > LINE 1: ...T * FROM JSON_TABLE(jsonb '"world"', '$' COLUMNS (item text ..= . > ^ > this error is misleading, since now I am using WITH WRAPPER clause for > formatted columns and specified KEEP QUOTES. > Hi. still based on v33. JSON_TABLE: I also refactor parse_jsontable.c error reporting, now the error message will be consistent with json_query. now you can specify wrapper freely as long as you don't specify wrapper and quote at the same time. overall, json_table behavior is more consistent with json_query and json_va= lue. I also added some tests. +void +ExecEvalJsonCoercion(ExprState *state, ExprEvalStep *op, + ExprContext *econtext) +{ + JsonCoercion *coercion =3D op->d.jsonexpr_coercion.coercion; + ErrorSaveContext *escontext =3D op->d.jsonexpr_coercion.escontext; + Datum res =3D *op->resvalue; + bool resnull =3D *op->resnull; + + if (coercion->via_populate) + { + void *cache =3D op->d.jsonexpr_coercion.json_populate_type_cache; + + *op->resvalue =3D json_populate_type(res, JSONBOID, + coercion->targettype, + coercion->targettypmod, + &cache, + econtext->ecxt_per_query_memory, + op->resnull, (Node *) escontext); + } + else if (coercion->via_io) + { + FmgrInfo *input_finfo =3D op->d.jsonexpr_coercion.input_finfo; + Oid typioparam =3D op->d.jsonexpr_coercion.typioparam; + char *val_string =3D resnull ? NULL : + JsonbUnquote(DatumGetJsonbP(res)); + + (void) InputFunctionCallSafe(input_finfo, val_string, typioparam, + coercion->targettypmod, + (Node *) escontext, + op->resvalue); + } via_populate, via_io should be mutually exclusive. your patch, in some cases, both (coercion->via_io) and (coercion->via_populate) are true. (we can use elog find out). I refactor coerceJsonFuncExprOutput, so now it will be mutually exclusive. I also add asserts to it. By default, json_query keeps quotes, json_value omit quotes. However, json_table will be transformed to json_value or json_query based on certain criteria, that means we need to explicitly set the JsonExpr->omit_quotes in the function transformJsonFuncExpr for case JSON_QUERY_OP and JSON_VALUE_OP. We need to know the QUOTE behavior in the function ExecEvalJsonCoercion. Because for ExecEvalJsonCoercion, the coercion datum source can be a scalar string item, scalar items means RETURNING clause is dependent on QUOTE behavior. keep quotes, omit quotes the results are different. consider JSON_QUERY(jsonb'{"rec": "[1,2]"}', '$.rec' returning int4range omit quotes= ); and JSON_QUERY(jsonb'{"rec": "[1,2]"}', '$.rec' returning int4range omit quotes= ); to make sure ExecEvalJsonCoercion can distinguish keep and omit quotes, I added a bool keep_quotes to struct JsonCoercion. (maybe there is a more simple way, so far, that's what I come up with). the keep_quotes value will be settled in the function transformJsonFuncExpr= . After refactoring, in ExecEvalJsonCoercion, keep_quotes is true then call JsonbToCString, else call JsonbUnquote. example: SELECT JSON_QUERY(jsonb'{"rec": "{1,2,3}"}', '$.rec' returning int[] omit quotes); without my changes, return NULL with my changes: {1,2,3} JSON_VALUE: main changes: --- a/src/test/regress/expected/jsonb_sqljson.out +++ b/src/test/regress/expected/jsonb_sqljson.out @@ -301,7 +301,11 @@ SELECT JSON_VALUE(jsonb '"2017-02-20"', '$' RETURNING date) + 9; -- Test NULL checks execution in domain types CREATE DOMAIN sqljsonb_int_not_null AS int NOT NULL; SELECT JSON_VALUE(jsonb 'null', '$' RETURNING sqljsonb_int_not_null); -ERROR: domain sqljsonb_int_not_null does not allow null values + json_value +------------ + +(1 row) + I think the change is correct, given `SELECT JSON_VALUE(jsonb 'null', '$' RETURNING int4range);` returns NULL. I also attached a test.sql, without_patch.out (apply v33 only), with_patch.out (my changes based on v33). So you can see the difference after applying the patch, in case, my wording is not clear. --000000000000a59bc3060e086228 Content-Type: application/octet-stream; name="v1-0001-refactor-ExecInitJsonExpr.no-cfnot" Content-Disposition: attachment; filename="v1-0001-refactor-ExecInitJsonExpr.no-cfnot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxncjlr0 RnJvbSBmZDdiY2JjMTM5NmFiZWRkZjcyNzZjMTBhN2UxMmY3OGJiYmY1NGI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMyBKYW4gMjAyNCAxNToyNDoyNSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg MS80XSBsZXQgcmVzdWx0X2NvZXJjaW9uIGRlY2lkZSB3ZSBuZWVkIGluaXQgY29lcmNpb24gcmVs YXRlcmQgY29kZQogcmVzdWx0X2NvZXJjaW9uIHNob3VsZCBiZSB0aGUgb25seSBmYWN0b3IgZGVj aWRlIHdlIG5lZWQgaW5pdCBqc29uIGNvZXJjaW9uIG9yIG5vdC4KIHF1b3RlIGJlaGF2aW9yIHJl bGF0aW9uIHdpdGggY29lcmNpb24gc2hvdWxkIGJlIGRlY2lkZSBpbiBmdW5jdGlvbiB0cmFuc2Zv cm1Kc29uRnVuY0V4cHIuCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgfCAy ICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYwppbmRleCAxYWZlY2QwOS4uOTYxYjljOTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHIuYwpAQCAtNDI5Miw3ICs0MjkyLDcgQEAgRXhlY0luaXRKc29uRXhwcihKc29uRXhw ciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJICogbm9kZXMuCiAJICovCiAJanNlc3RhdGUt PmVzY29udGV4dC50eXBlID0gVF9FcnJvclNhdmVDb250ZXh0OwotCWlmIChqZXhwci0+cmVzdWx0 X2NvZXJjaW9uIHx8IGpleHByLT5vbWl0X3F1b3RlcykKKwlpZiAoamV4cHItPnJlc3VsdF9jb2Vy Y2lvbikKIAl7CiAJCWpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID0KIAkJCUV4 ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwKLS0g CjIuMzQuMQoK --000000000000a59bc3060e086228 Content-Type: application/octet-stream; name="v1-0002-refactor-QUOTE-behavior-for-json_query.no-cfbot" Content-Disposition: attachment; filename="v1-0002-refactor-QUOTE-behavior-for-json_query.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxncjlx1 RnJvbSAyMDgxZTQ0N2FlNTE2Y2ZkMDVlYzRkZjdlZDVlMjM3NzNkZWNkMjYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMyBKYW4gMjAyNCAxODoyNjoxMyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjIg Mi8yXSByZWZhY3RvciBRVU9URSBiZWhhdmlvciBmb3IganNvbl9xdWVyeSAKCiBXZSBuZWVkIHRv IGtub3cgdGhlIFFVT1RFIGJlaGF2aW9yIGluIHRoZSBmdW5jdGlvbiBFeGVjRXZhbEpzb25Db2Vy Y2lvbi4gCiBiZWNhdXNlIGZvciBFeGVjRXZhbEpzb25Db2VyY2lvbiwgdGhlIGNvZXJjaW9uIGRh dHVtIHNvdXJjZSBjYW4gYmUgc2NhbGFyIHN0cmluZyBpdGVtcy4KIHNjYWxhciBzdHJpbmcgaXRl bXMgaW4ganNvbmIgaGF2ZSB0aGUgZG91YmxlIHF1b3RlcyBzdXJyb3VuZGluZyBpdCwgeW91IG1h eQoga2VlcCBpdCBvciBvbWl0IGl0LiB0byBtYWtlIHN1cmUgRXhlY0V2YWxKc29uQ29lcmNpb24g Y2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4KIGtlZXAgb3Igb21pdCBxdW90ZXMsIEkgYWRkZWQgYSBi b29sIGtlZXBfcXVvdGVzIHRvIHN0cnVjdCBKc29uQ29lcmNpb24uIEFmdGVyCiByZWZhY3Rvcmlu ZywgaW4gZnVuY3Rpb24gRXhlY0V2YWxKc29uQ29lcmNpb24sIGtlZXBfcXVvdGVzIGNhbGwKIEpz b25iVG9DU3RyaW5nLCBvbWl0X3F1b3RlcyBjYWxsIEpzb25iVW5xdW90ZS4gYWxzbyB3ZSBjYW4g b25seSBjaG9vc2UgCiBjb2VyY2lvbi0+dmlhX2lvIHwgY29lcmNpb24tPnZpYV9wb3B1bGF0ZSwg SSBhZGQgdHdvIGFzc2VydGlvbnMgdG8gZW5mb3JjZQogaXQuCgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgICAgICAgfCA0MyArKysrKysrKysrKy0tLS0tCiBzcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jICAgICAgICAgICAgIHwgMTggKysrKystLQogc3Jj L2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAgICAgICAgICAgICB8ICAzICstCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IHwgNTUgKysrKysrKysrKysrKysr KysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCAgICAgIHwgMTUg KysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDExNSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCA2OTk2NjRmYi4uNWQw NzUwNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNDUyMyw4ICs0 NTIzLDM3IEBAIEV4ZWNFdmFsSnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFs U3RlcCAqb3AsCiAJRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0ID0gb3AtPmQuanNvbmV4cHJf Y29lcmNpb24uZXNjb250ZXh0OwogCURhdHVtCQlyZXMgPSAqb3AtPnJlc3ZhbHVlOwogCWJvb2wJ CXJlc251bGwgPSAqb3AtPnJlc251bGw7CisJSnNvbmIJCSpqYiA9IE5VTEw7CiAKLQlpZiAoY29l cmNpb24tPnZpYV9wb3B1bGF0ZSkKKwkvKiBjaG9vc2Ugb25lLCBlaXRoZXIgdmlhX2lvIG9yIHZp YV9wb3B1bGF0ZSAqLworCUFzc2VydCghKGNvZXJjaW9uLT52aWFfaW8gJiYgY29lcmNpb24tPnZp YV9wb3B1bGF0ZSkpOworCUFzc2VydCghKCFjb2VyY2lvbi0+dmlhX2lvICYmICFjb2VyY2lvbi0+ dmlhX3BvcHVsYXRlKSk7CisKKwlpZiAocmVzbnVsbCkKKwl7CisJCSpvcC0+cmVzdmFsdWUgPSAo RGF0dW0pIDA7CisJCXJldHVybjsKKwl9CisJamIgPSBEYXR1bUdldEpzb25iUChyZXMpOworCisJ Lyogc2NhbGFyIGl0ZW0gc2hvdWxkIGNvZXJjZSB2aWFfaW8gKi8KKwlpZiAoY29lcmNpb24tPnZp YV9pbyB8fCAoSkJfUk9PVF9JU19BUlJBWShqYikgJiYgSkJfUk9PVF9JU19TQ0FMQVIoamIpKSkK Kwl7CisJCUZtZ3JJbmZvICAgKmlucHV0X2ZpbmZvID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24u aW5wdXRfZmluZm87CisJCU9pZAkJCXR5cGlvcGFyYW0gPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lv bi50eXBpb3BhcmFtOworCQljaGFyICAgCQkqdmFsX3N0cmluZzsKKworCQlpZiAoY29lcmNpb24t PmtlZXBfcXVvdGVzKQorCQkJdmFsX3N0cmluZyA9IEpzb25iVG9DU3RyaW5nKE5VTEwsICZqYi0+ cm9vdCwgVkFSU0laRShqYikpOworCQllbHNlCisJCQl2YWxfc3RyaW5nID0gSnNvbmJVbnF1b3Rl KGpiKTsKKworCQkodm9pZCkgSW5wdXRGdW5jdGlvbkNhbGxTYWZlKGlucHV0X2ZpbmZvLCB2YWxf c3RyaW5nLCB0eXBpb3BhcmFtLAorCQkJCQkJCQkJIGNvZXJjaW9uLT50YXJnZXR0eXBtb2QsCisJ CQkJCQkJCQkgKE5vZGUgKikgZXNjb250ZXh0LAorCQkJCQkJCQkJIG9wLT5yZXN2YWx1ZSk7CisJ fQorCWVsc2UgaWYgKGNvZXJjaW9uLT52aWFfcG9wdWxhdGUpCiAJewogCQl2b2lkICpjYWNoZSA9 IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmpzb25fcG9wdWxhdGVfdHlwZV9jYWNoZTsKIApAQCAt NDUzNSwxOCArNDU2NCw2IEBAIEV4ZWNFdmFsSnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJCQkJICAgZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5 X21lbW9yeSwKIAkJCQkJCQkJCQkgICBvcC0+cmVzbnVsbCwgKE5vZGUgKikgZXNjb250ZXh0KTsK IAl9Ci0JZWxzZSBpZiAoY29lcmNpb24tPnZpYV9pbykKLQl7Ci0JCUZtZ3JJbmZvICAgKmlucHV0 X2ZpbmZvID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24uaW5wdXRfZmluZm87Ci0JCU9pZAkJCXR5 cGlvcGFyYW0gPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi50eXBpb3BhcmFtOwotCQljaGFyICAg KnZhbF9zdHJpbmcgPSByZXNudWxsID8gTlVMTCA6Ci0JCQlKc29uYlVucXVvdGUoRGF0dW1HZXRK c29uYlAocmVzKSk7Ci0KLQkJKHZvaWQpIElucHV0RnVuY3Rpb25DYWxsU2FmZShpbnB1dF9maW5m bywgdmFsX3N0cmluZywgdHlwaW9wYXJhbSwKLQkJCQkJCQkJCSBjb2VyY2lvbi0+dGFyZ2V0dHlw bW9kLAotCQkJCQkJCQkJIChOb2RlICopIGVzY29udGV4dCwKLQkJCQkJCQkJCSBvcC0+cmVzdmFs dWUpOwotCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9l eHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGU0NzRlMDY0Li42 MDI3YjM0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC00MzIxLDYgKzQzMjEsNyBAQCB0 cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1 bmMpCiAJCQlicmVhazsKIAogCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQkvKiBieSBkZWZhdWx0 LCBqc29uX3F1ZXJ5IGtlZXAgcXVvdGVzLiAqLwogCQkJanNleHByLT53cmFwcGVyID0gZnVuYy0+ d3JhcHBlcjsKIAkJCWpzZXhwci0+b21pdF9xdW90ZXMgPSAoZnVuYy0+cXVvdGVzID09IEpTX1FV T1RFU19PTUlUKTsKIApAQCAtNDMzMyw2ICs0MzM0LDEyIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhw cihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCX0KIAkJCWpzZXhw ci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0ZSwganNl eHByKTsKIAorCQkJaWYgKGpzZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCQkJeworCQkJCUpzb25D b2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIGpzZXhwci0+cmVzdWx0X2NvZXJj aW9uOworCQkJCWlmICghanNleHByLT5vbWl0X3F1b3RlcykKKwkJCQkJY29lcmNpb24tPmtlZXBf cXVvdGVzID0gdHJ1ZTsKKwkJCX0KIAkJCWlmIChmdW5jLT5vbl9lbXB0eSkKIAkJCQlqc2V4cHIt Pm9uX2VtcHR5ID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwKIAkJCQkJCQkJCQkJCQkJ IGZ1bmMtPm9uX2VtcHR5LApAQCAtNDQyMCwxMCArNDQyNyw2IEBAIHRyYW5zZm9ybUpzb25FeHBy Q29tbW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAogCiAJanNleHBy LT5mb3JtYXQgPSBmdW5jLT5jb250ZXh0X2l0ZW0tPmZvcm1hdDsKIAotCS8qIEJvdGggc2V0IGlu IHRoZSBjYWxsZXIuICovCi0JanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBOVUxMOwotCWpzZXhw ci0+b21pdF9xdW90ZXMgPSBmYWxzZTsKLQogCXBhdGhzcGVjID0gdHJhbnNmb3JtRXhwclJlY3Vy c2UocHN0YXRlLCBmdW5jLT5wYXRoc3BlYyk7CiAKIAlqc2V4cHItPnBhdGhfc3BlYyA9CkBAIC00 NTEzLDYgKzQ1MTYsMTMgQEAgY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBz dGF0ZSwgSnNvbkV4cHIgKmpzZXhwcikKIAkJY29lcmNpb24tPnZpYV9wb3B1bGF0ZSA9CiAJCQlj b2VyY2lvbi0+dmlhX3BvcHVsYXRlIHx8IGpzZXhwci0+d3JhcHBlciAhPSBKU1dfTk9ORTsKIAor CQkvKgorCQkgKiBhZnRlciBtYWtlSnNvbkNvZXJjaW9uLCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3 aGVyZQorCQkgKiBib3RoIHZpYV9pbyBhbmQgdmlhX3BvcHVsYXRlIHdpbGwgYmUgdHJ1ZS4KKwkJ ICogd2UgY2FuIG9ubHkgY2hvb3NlIG9uZS4gd2UgY2hvb3NlIHZpYV9wb3B1bGF0ZS4KKwkJICov CisJCWlmIChjb2VyY2lvbi0+dmlhX3BvcHVsYXRlKQorCQkJY29lcmNpb24tPnZpYV9pbyA9IGZh bHNlOwogCQlyZXR1cm4gKE5vZGUgKikgY29lcmNpb247CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5o CmluZGV4IDE5MmMxNDFiLi4wMzdhZjkxYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTE3NDQs NiArMTc0NCw3IEBAIHR5cGVkZWYgc3RydWN0IEpzb25Db2VyY2lvbgogCWJvb2wJCXZpYV9wb3B1 bGF0ZTsJLyogY29lcmNlIHJlc3VsdCB1c2luZyBqc29uX3BvcHVsYXRlX3R5cGUoKT8gKi8KIAli b29sCQl2aWFfaW87CQkJLyogY29lcmNlIHJlc3VsdCB1c2luZyB0eXBlIGlucHV0IGZ1bmN0aW9u PyAqLwogCU9pZAkJCWNvbGxhdGlvbjsJCS8qIGNvbGxhdGlvbiBmb3IgY29lcmNpb24gdmlhIEkv TyBvciBwb3B1bGF0ZSAqLworCWJvb2wJCWtlZXBfcXVvdGVzOwkvKiBrZWVwIHF1b3RlcyBvciBu b3QuIHNlZSBFeGVjRXZhbEpzb25Db2VyY2lvbiAgKi8KIH0gSnNvbkNvZXJjaW9uOwogCiAvKgpA QCAtMTg1Miw3ICsxODUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHIKIAkvKiBXUkFQUEVS IHNwZWNpZmljYXRpb24gZm9yIEpTT05fUVVFUlkgKi8KIAlKc29uV3JhcHBlciB3cmFwcGVyOwog Ci0JLyogS0VFUCBvciBPTUlUIFFVT1RFUyBmb3Igc2luZ2xldG9uIHNjYWxhcnMgcmV0dXJuZWQg YnkgSlNPTl9RVUVSWSgpICovCisJLyogS0VFUCBvciBPTUlUIFFVT1RFUyBmb3Igc2luZ2xldG9u IHNjYWxhcnMgcmV0dXJuZWQgYnkgSlNPTl9RVUVSWSgpIG9yIEpTT05fVkFMVUUoKSAqLwogCWJv b2wJCW9taXRfcXVvdGVzOwogCiAJLyogT3JpZ2luYWwgSnNvbkZ1bmNFeHByJ3MgbG9jYXRpb24g Ki8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0CmluZGV4IGVm NTJlNGNlLi5lMDYxM2NjMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q c29uYl9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3Nx bGpzb24ub3V0CkBAIC02NDMsNiArNjQzLDM3IEBAIFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKICBbMV0KICgxIHJvdykKIAor LS0gdGVzdCBRVU9URVMgYmVoYXZpb3IuCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6 ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7CisganNv bl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHsxLDIsM30KKygxIHJvdykKKworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10g a2VlcCBxdW90ZXMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1 cm5pbmcgaW50W10ga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworRVJST1I6ICBtYWxmb3Jt ZWQgYXJyYXkgbGl0ZXJhbDogIiJ7MSwyLDN9IiIKK0RFVEFJTDogIEFycmF5IHZhbHVlIG11c3Qg c3RhcnQgd2l0aCAieyIgb3IgZGltZW5zaW9uIGluZm9ybWF0aW9uLgorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgcmV0dXJuaW5nIGludDRyYW5nZSBv bWl0IHF1b3Rlcyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLDMpCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIHJl dHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0i fScsICckLnJlYycgCXJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJy b3IpOworRVJST1I6ICBtYWxmb3JtZWQgcmFuZ2UgbGl0ZXJhbDogIiJbMSwyXSIiCitERVRBSUw6 ICBNaXNzaW5nIGxlZnQgcGFyZW50aGVzaXMgb3IgYnJhY2tldC4KIFNFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbXScsICckWypdJyk7CiAganNvbl9xdWVyeSAKIC0tLS0tLS0tLS0tLQpAQCAtODMy LDYgKzg2MywyNCBAQCBGUk9NCiAgNCB8IDQgfCBbNF0KICgyNSByb3dzKQogCistLSByZWNvcmQg dHlwZSByZXR1cm5pbmcgd2l0aCBxdW90ZXMgYmVoYXZpb3IuCitDUkVBVEUgVFlQRSBjb21wX2Fi YyBBUyAoYSB0ZXh0LCBiIGludCwgYyB0aW1lc3RhbXApOworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgY29t cF9hYmMgb21pdCBxdW90ZXMpOworICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChhYmMsNDIsIlRodSBK YW4gMDIgMDA6MDA6MDAgMjAwMyIpCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i J3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBf YWJjIGtlZXAgcXVvdGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMyki fScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9y KTsKK0VSUk9SOiAgbWFsZm9ybWVkIHJlY29yZCBsaXRlcmFsOiAiIihhYmMsNDIsMDEuMDIuMjAw MykiIgorREVUQUlMOiAgTWlzc2luZyBsZWZ0IHBhcmVudGhlc2lzLgorRFJPUCBUWVBFIGNvbXBf YWJjOwogLS0gRXh0ZW5zaW9uOiByZWNvcmQgdHlwZXMgcmV0dXJuaW5nCiBDUkVBVEUgVFlQRSBz cWxqc29uYl9yZWMgQVMgKGEgaW50LCB0IHRleHQsIGpzIGpzb24sIGpiIGpzb25iLCBqc2EganNv bltdKTsKIENSRUFURSBUWVBFIHNxbGpzb25iX3JlY2EgQVMgKHJlY2Egc3FsanNvbmJfcmVjW10p OwpAQCAtOTAyLDcgKzk1MSwxMSBAQCBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0n LCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKICgxIHJvdykKIAogU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25i X2ludF9ub3RfbnVsbCk7Ci1FUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9l cyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgICAg ICAgICAgIAorKDEgcm93KQorCiAtLSBUZXN0IHRpbWVzdGFtcHR6IHBhc3NpbmcgYW5kIG91dHB1 dAogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFt cHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMpOwogICAgICAgICAganNvbl9xdWVy eSAgICAgICAgICAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpz b24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKaW5kZXggODFk NDVlOTMuLmJjMDI4Mzk4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9z cWxqc29uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbApA QCAtMTkzLDYgKzE5MywxNCBAQCBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJ VEggQ09ORElUSU9OQUwgV1JBUFBFUiBPTUlUIFFVT1RFUyk7CiBTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzFdJywgJyQnIFdJVEhPVVQgV1JBUFBFUiBPTUlUIFFVT1RFUyk7CiBTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEhPVVQgV1JBUFBFUiBLRUVQIFFVT1RFUyk7CiAK Ky0tIHRlc3QgUVVPVEVTIGJlaGF2aW9yLgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMi OiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10gb21pdCBxdW90ZXMpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5p bmcgaW50W10ga2VlcCBxdW90ZXMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAi ezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10ga2VlcCBxdW90ZXMgZXJyb3Igb24g ZXJyb3IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJl YycgcmV0dXJuaW5nIGludDRyYW5nZSBvbWl0IHF1b3Rlcyk7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50NHJhbmdlIGtlZXAg cXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5y ZWMnIAlyZXR1cm5pbmcgaW50NHJhbmdlIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKKwog U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nKTsKIFNFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbXScsICckWypdJyBOVUxMIE9OIEVNUFRZKTsKIFNFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbXScsICckWypdJyBFTVBUWSBPTiBFTVBUWSk7CkBAIC0yNDQsNiArMjUyLDEzIEBAIEZS T00KIAlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeCwKIAlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeTsK IAorLS0gcmVjb3JkIHR5cGUgcmV0dXJuaW5nIHdpdGggcXVvdGVzIGJlaGF2aW9yLgorQ1JFQVRF IFRZUEUgY29tcF9hYmMgQVMgKGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1wKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycg cmV0dXJuaW5nIGNvbXBfYWJjIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i J3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBf YWJjIGtlZXAgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMs NDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVz IGVycm9yIG9uIGVycm9yKTsKK0RST1AgVFlQRSBjb21wX2FiYzsKKwogLS0gRXh0ZW5zaW9uOiBy ZWNvcmQgdHlwZXMgcmV0dXJuaW5nCiBDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWMgQVMgKGEgaW50 LCB0IHRleHQsIGpzIGpzb24sIGpiIGpzb25iLCBqc2EganNvbltdKTsKIENSRUFURSBUWVBFIHNx bGpzb25iX3JlY2EgQVMgKHJlY2Egc3FsanNvbmJfcmVjW10pOwotLSAKMi4zNC4xCgo= --000000000000a59bc3060e086228 Content-Type: application/octet-stream; name="v1-0004-refactor-json_table-wrapper-and-quotes-behavior.no-cfbot" Content-Disposition: attachment; filename="v1-0004-refactor-json_table-wrapper-and-quotes-behavior.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxncjlz3 RnJvbSBkZjBlMjU3NTQ5MWUxMzEwNmVjMDI2ODVlZmIwNjgxMTY4Y2VmY2FlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMyBKYW4gMjAyNCAxNjoxOTozMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg NC80XSByZWZhY3RvciBqc29uX3RhYmxlIHdyYXBwZXIgYW5kIHF1b3RlcyBiZWhhdmlvci4KCkFm dGVyIHJlZmFjdG9yLCBxdW90ZXMsIHdyYXBwZXIgYmVoYXZpb3Igd2lsbCBjb25zaXN0ZW50IHdp dGgganNvbl92YWx1ZSwganNvbl9xdWVyeS4KV0lUSCBXUkFQUEVSIGFuZCBRVU9URVMgYmVoYXZp b3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgaWYgYm90aCBvY2N1cnMsIHRoZW4gcmFpc2UgYSBl cnJvciwKYWxzbyBtYWtlIHRoZSBlcnJvciBtZXNzYWdlIGNvbnNpc3RlbnQgd2l0aCBqc29uX3F1 ZXJ5LgpJZiB3cmFwcGVyIGlzIG5vdCBub25lLCB0aGVuIG1ha2UgdGhlIGpzb25fdGFibGUgY29s dW1uIHR5cGUgdG8gSlRDX0ZPUk1BVFRFRCwKc28gdW5kZXIgdGhlIGhvb2QsIGl0IHdpbGwgY2Fs bCBqc29uX3F1ZXJ5LCBub3QganNvbl92YWx1ZS4KSSBhbHNvIGFkZCBzb21lIHRlc3RzIHRvIGl0 LgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYyAgICAgICAgfCAyMSAr KystLS0tLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0 IHwgMzQgKysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9z cWxqc29uLnNxbCAgICAgIHwgIDUgKystCiAzIGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMo KyksIDI1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9qc29udGFibGUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwppbmRl eCBlZTkxMjNjMy4uNjJkZGE0YWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9qc29udGFibGUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRhYmxlLmMK QEAgLTQ3OCwyMCArNDc4LDggQEAgYXBwZW5kSnNvblRhYmxlQ29sdW1ucyhKc29uVGFibGVQYXJz ZUNvbnRleHQgKiBjeHQsIExpc3QgKmNvbHVtbnMpCiAJCQkJICogRm9yIHNjYWxhciBjb2x1bW5z LCByZXF1aXJlIGFuIGV4cGxpY2l0IEZPUk1BVCBKU09OIGNsYXVzZQogCQkJCSAqIHRvIGdldCB0 aGUgc3BlY2lmaWVkIFdSQVBQRVIgYW5kIFFVT1RFUyBiZWhhdmlvci4KIAkJCQkgKi8KLQkJCQlp ZiAodHlwZUlzQ29tcG9zaXRlKHR5cGlkKSkKKwkJCQlpZiAodHlwZUlzQ29tcG9zaXRlKHR5cGlk KSB8fCByYXdjLT53cmFwcGVyICE9IEpTV19OT05FKQogCQkJCQlyYXdjLT5jb2x0eXBlID0gSlRD X0ZPUk1BVFRFRDsKLQkJCQllbHNlIGlmIChyYXdjLT53cmFwcGVyICE9IEpTV19OT05FKQotCQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK LQkJCQkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgZm9yIHNjYWxh ciBjb2x1bW5zIgotCQkJCQkJCQkJIiB3aXRob3V0IGFsc28gc3BlY2lmeWluZyBGT1JNQVQgY2xh dXNlIiksCi0JCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJhd2MtPmxvY2F0aW9u KSkpOwotCQkJCWVsc2UgaWYgKHJhd2MtPnF1b3RlcyAhPSBKU19RVU9URVNfVU5TUEVDKQotCQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK LQkJCQkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIE9NSVQvS0VFUCBRVU9URVMgY2xhdXNlIGZvciBz Y2FsYXIgY29sdW1ucyIKLQkJCQkJCQkJCSIgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgRk9STUFU IGNsYXVzZSIpLAotCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5sb2Nh dGlvbikpKTsKIAogCQkJCS8qIEZBTExUSFJPVUdIICovCiAJCQljYXNlIEpUQ19FWElTVFM6CkBA IC01MDcsMTAgKzQ5NSw5IEBAIGFwcGVuZEpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VD b250ZXh0ICogY3h0LCBMaXN0ICpjb2x1bW5zKQogCQkJCQlpZiAocmF3Yy0+d3JhcHBlciAhPSBK U1dfTk9ORSAmJgogCQkJCQkJcmF3Yy0+cXVvdGVzICE9IEpTX1FVT1RFU19VTlNQRUMpCiAJCQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK LQkJCQkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgZm9yIGZvcm1h dHRlZCBjb2x1bm1ucyIKLQkJCQkJCQkJCSIgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgT01JVC9L RUVQIFFVT1RFUyIpLAotCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5s b2NhdGlvbikpKTsKKwkJCQkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ CQkJCWVycm1zZygiU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmll ZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkIiksCisJCQkJCQkJCXBhcnNlcl9lcnJwb3NpdGlv bihwc3RhdGUsIHJhd2MtPmxvY2F0aW9uKSk7CiAKIAkJCQkJamUgPSB0cmFuc2Zvcm1Kc29uVGFi bGVDb2x1bW4ocmF3YywgKE5vZGUgKikgcGFyYW0sCiAJCQkJCQkJCQkJCQkgIE5JTCwgZXJyb3JP bkVycm9yKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3Fs anNvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0Cmlu ZGV4IGY2YTJjMWZjLi5jMDRhMmUwOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qc29uYl9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iX3NxbGpzb24ub3V0CkBAIC0xNDk5LDI4ICsxNDk5LDQ4IEBAIFNFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbmIgRVhJU1RTIFBBVEggJyQu YScpKTsKIEVSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb25iCiBMSU5FIDE6 IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBq c29uYiBFWC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KLS0tIEpTT05fVEFCTEU6IFdSQVBQRVIvUVVPVEVTIGNsYXVzZXMg b24gc2NhbGFyIGNvbHVtbnMgZG9uJ3Qgd29yayB3aXRob3V0IGFuCistLSBKU09OX1RBQkxFOiBX UkFQUEVSL1FVT1RFUyBiZWhhdmlvcgogLS0gZXhwbGljaXQgRk9STUFUIGNsYXVzZQogU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4 dCBQQVRIICckJyBLRUVQIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7Ci1FUlJPUjogIGNhbm5v dCB1c2UgT01JVC9LRUVQIFFVT1RFUyBjbGF1c2UgZm9yIHNjYWxhciBjb2x1bW5zIHdpdGhvdXQg YWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UKLUxJTkUgMTogLi4uVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgLi4uCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgor ICBpdGVtICAgCistLS0tLS0tLS0KKyAid29ybGQiCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAn JCcgT01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOworIGl0ZW0gIAorLS0tLS0tLQorIHdv cmxkCisoMSByb3cpCisKIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIics ICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgS0VFUCBRVU9URVMg T04gU0NBTEFSIFNUUklORykpOwogICBpdGVtICAgCiAtLS0tLS0tLS0KICAid29ybGQiCiAoMSBy b3cpCiAKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xV TU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgT01JVCBRVU9URVMgT04gU0NBTEFS IFNUUklORykpOworIGl0ZW0gIAorLS0tLS0tLQorIHdvcmxkCisoMSByb3cpCisKIFNFTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQg UEFUSCAnJCcgV0lUSCBXUkFQUEVSKSk7Ci1FUlJPUjogIGNhbm5vdCB1c2UgV0lUSCBXUkFQUEVS IGNsYXVzZSBmb3Igc2NhbGFyIGNvbHVtbnMgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgRk9STUFU IGNsYXVzZQotTElORSAxOiAuLi5UICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywg JyQnIENPTFVNTlMgKGl0ZW0gdGV4dCAuLi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICBpdGVtICAgIAorLS0tLS0tLS0t LS0KKyBbIndvcmxkIl0KKygxIHJvdykKKwogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBX SVRIIFdSQVBQRVIpKTsKICAgIGl0ZW0gICAgCiAtLS0tLS0tLS0tLQogIFsid29ybGQiXQogKDEg cm93KQogCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09M VU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RFUykpOworRVJS T1I6ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4g V0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogLi4uVCAqIEZST00gSlNPTl9UQUJMRShqc29u YiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgLi4uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogLS0gSlNPTl9U QUJMRTogbmVzdGVkIHBhdGhzIGFuZCBwbGFucwogLS0gU2hvdWxkIGZhaWwgKEpTT05fVEFCTEUg Y29sdW1ucyBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aAogLS0gc3BlY2lmaWNhdGlvbnMg aWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJf c3FsanNvbi5zcWwKaW5kZXggYmMwMjgzOTguLjZmNWQ5MWRiIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qc29uYl9zcWxqc29uLnNxbApAQCAtNTQ5LDEyICs1NDksMTUgQEAgU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBjaGFyKDMpIEVYSVNUUyBQQVRI ICckLmEnKSkKIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEganNvbiBFWElTVFMgUEFUSCAnJC5hJykpOwogU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uYiBFWElTVFMgUEFUSCAnJC5hJykpOwog Ci0tLSBKU09OX1RBQkxFOiBXUkFQUEVSL1FVT1RFUyBjbGF1c2VzIG9uIHNjYWxhciBjb2x1bW5z IGRvbid0IHdvcmsgd2l0aG91dCBhbgorLS0gSlNPTl9UQUJMRTogV1JBUFBFUi9RVU9URVMgYmVo YXZpb3IKIC0tIGV4cGxpY2l0IEZPUk1BVCBjbGF1c2UKIFNFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgS0VFUCBR VU9URVMgT04gU0NBTEFSIFNUUklORykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBPTUlUIFFVT1RFUyBP TiBTQ0FMQVIgU1RSSU5HKSk7CiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3Js ZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIEtFRVAgUVVP VEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAn IndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgT01J VCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOwogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIIFdSQVBQ RVIpKTsKIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xV TU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgV0lUSCBXUkFQUEVSKSk7CitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0 ZXh0IFBBVEggJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RFUykpOwogCiAtLSBKU09OX1RBQkxF OiBuZXN0ZWQgcGF0aHMgYW5kIHBsYW5zCiAKLS0gCjIuMzQuMQoK --000000000000a59bc3060e086228 Content-Type: application/octet-stream; name="v1-0003-refactor-the-QUOTE-behavior-for-json_value.no-cfbot" Content-Disposition: attachment; filename="v1-0003-refactor-the-QUOTE-behavior-for-json_value.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxncjly2 RnJvbSBiNDg0NTdlN2FhOTg0YmE0NGM5ZGFhYjNlZjI5NTk5NDQ1NTI4ZDEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMyBKYW4gMjAyNCAxNjoxMTozOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg My80XSByZWZhY3RvciB0aGUgUVVPVEUgYmVoYXZpb3IgZm9yIGpzb25fdmFsdWUuCgpCeSBkZWZh dWx0LCBqc29uX3ZhbHVlLCB0aGUgUVVPVEVTIGJlaGF2aW9yIGlzIG5vdCBhbGxvd2VkLgpIb3dl dmVyLCBpbiBtYW55IGNhc2VzLCBqc29uX3RhYmxlIHdpbGwgdHJhbnNmb3JtIHRvIGpzb25fdmFs dWUuCmpzb25fdGFibGUgY2FuIHNwZWNpZnkgcXVvdGVzIGJlaGF2aW9yIGZyZWVseS4KVG8gY29v cmRpbmF0ZSB3aXRoIGpzb25fdGFibGUgcXVvdGVzIGJlaGF2aW9yLApmb3IganNvbl92YWx1ZSwg d2Ugc2V0IHRoZSBkZWZhdWx0IHRvIG9taXRfcXVvdGVzLCBpZiBzcGVjaWZpZWQga2VlcCBRVU9U RQp2aWEganNvbl90YWJsZSAsIHdlIGNhbiBzZXQga2VlcF9xdW90ZXMgdG8gdHJ1ZS4KLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgICAgIHwgMTYgKysrKysrKysr Ky0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICAgICAgICB8IDI2ICsr KysrKysrKysrKysrKysrKy0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxq c29uLm91dCB8IDEyICsrKysrKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygr KSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRl eCA1ZDA3NTA0My4uYTY2NzA1N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YwpAQCAtNDQwOCw2ICs0NDA4LDcgQEAgRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpzb25i VmFsdWUgKml0ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAogCWJvb2wJCXZpYV9leHByOwog CWludAkJCWp1bXBfdG87CiAJSnNvbmJWYWx1ZQlidWY7CisJY2hhcgkJKnN0cjsKIAogCWlmIChp dGVtLT50eXBlID09IGpidkJpbmFyeSAmJiBKc29uQ29udGFpbmVySXNTY2FsYXIoaXRlbS0+dmFs LmJpbmFyeS5kYXRhKSkKIAl7CkBAIC00NDMzLDkgKzQ0MzQsMTggQEAgRXhlY1ByZXBhcmVKc29u SXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAog CQljYXNlIGpidlN0cmluZzoKIAkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltK c29uSXRlbVR5cGVTdHJpbmddOwogCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1w c1tKc29uSXRlbVR5cGVTdHJpbmddOwotCQkJKnJlc3ZhbHVlID0KLQkJCQlQb2ludGVyR2V0RGF0 dW0oY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAotCQkJCQkJ CQlpdGVtLT52YWwuc3RyaW5nLmxlbikpOworCQkJLyogaWYgd2Uga2VlcF9xdW90ZXMsIHRoZW4g d2UgbmVlZCBkb3VibGUtcXVvdGUgaXQuICovCisJCQlpZiAoIWpzZXN0YXRlLT5qc2V4cHItPm9t aXRfcXVvdGVzKQorCQkJeworCQkJCXN0ciA9IHBzcHJpbnRmKCJcIiVzXCIiLCBpdGVtLT52YWwu c3RyaW5nLnZhbCk7CisJCQkJKnJlc3ZhbHVlID0KKwkJCQkJUG9pbnRlckdldERhdHVtKGNzdHJp bmdfdG9fdGV4dF93aXRoX2xlbihzdHIsCisJCQkJCQkJCQlpdGVtLT52YWwuc3RyaW5nLmxlbisy KSk7CisJCQl9CisJCQllbHNlCisJCQkJKnJlc3ZhbHVlID0KKwkJCQkJUG9pbnRlckdldERhdHVt KGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihpdGVtLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkJ CWl0ZW0tPnZhbC5zdHJpbmcubGVuKSk7CiAJCQlicmVhazsKIAogCQljYXNlIGpidk51bWVyaWM6 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2V4cHIuYwppbmRleCA2MDI3YjM0ZS4uZTdhYmM0NTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX2V4cHIuYwpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBOb2RlICpjb2VyY2VK c29uRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIsCiAJCQkJCQkJY29uc3QgSnNv blJldHVybmluZyAqcmV0dXJuaW5nKTsKIHN0YXRpYyBKc29uQ29lcmNpb24gKm1ha2VKc29uQ29l cmNpb24oY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKIHN0YXRpYyBMaXN0ICpJbml0 SnNvbkl0ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBKc29uUmV0dXJuaW5n ICpyZXR1cm5pbmcsCi0JCQkJCQkJCSAgIE9pZCBjb250ZXh0SXRlbVR5cGVJZCk7CisJCQkJCQkJ CSAgIE9pZCBjb250ZXh0SXRlbVR5cGVJZCwgYm9vbCBrZWVwX3F1b3Rlcyk7CiBzdGF0aWMgSnNv bkJlaGF2aW9yICp0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u QmVoYXZpb3IgKmJlaGF2aW9yLAogCQkJCQkJCQkJCSAgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVs dF9iZWhhdmlvciwKIAkJCQkJCQkJCQkgICBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpOwpAQCAt NDM1MSw2ICs0MzUxLDcgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCQkJYnJlYWs7CiAKIAkJY2FzZSBKU09OX1ZBTFVFX09Q OgorCQkJanNleHByLT5vbWl0X3F1b3RlcyA9IChmdW5jLT5xdW90ZXMgIT0gSlNfUVVPVEVTX0tF RVApOwogCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCiAJCQl7 CiAJCQkJLyogTWFrZSBKU09OX1ZBTFVFIHJldHVybiB0ZXh0IGJ5IGRlZmF1bHQgKi8KQEAgLTQz NTksNiArNDM2MCwxOSBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRl LCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQl9CiAJCQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbiA9 IGNvZXJjZUpzb25GdW5jRXhwck91dHB1dChwc3RhdGUsIGpzZXhwcik7CiAKKwkJCS8qCisJCQkg KiBKU09OX1ZBTFVFX09QIG5vdCBhbGxvd2VkIHRvIHNwZWNpZnkgcXVvdGVzIGJlaGF2aW9yLgor CQkJICogQnkgZGVmYXVsdCBpdCBvbWl0IHF1b3Rlcy4KKwkJCSAqIEhvd2V2ZXIgSlNPTl9UQUJM RV9PUCB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvIEpTT05fVkFMVUVfT1AgaW4gc29tZSBjYXNlcywK KwkJCSAqIEpTT05fVEFCTEVfT1AgY2FuIHNwZWNpZnkga2VlcC9vbWl0IHF1b3Rlcy4KKwkJCSAq IFNvIGhlcmUgd2UgbmVlZCBhZGp1c3QgaXQuCisJCQkqLworCQkJaWYgKGpzZXhwci0+cmVzdWx0 X2NvZXJjaW9uKQorCQkJeworCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJj aW9uICopIGpzZXhwci0+cmVzdWx0X2NvZXJjaW9uOworCQkJCWlmICghanNleHByLT5vbWl0X3F1 b3RlcykKKwkJCQkJY29lcmNpb24tPmtlZXBfcXVvdGVzID0gdHJ1ZTsKKwkJCX0KIAkJCS8qCiAJ CQkgKiBJbml0aWFsaXplIGV4cHJlc3Npb25zIHRvIGNvZXJjZSB0aGUgc2NhbGFyIHZhbHVlIHJl dHVybmVkCiAJCQkgKiBieSBKc29uUGF0aFZhbHVlKCkgdG8gdGhlICJyZXR1cm5pbmciIHR5cGUu CkBAIC00MzY2LDcgKzQzODAsNyBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAq cHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQlpZiAoanNleHByLT5yZXN1bHRfY29lcmNp b24pCiAJCQkJanNleHByLT5pdGVtX2NvZXJjaW9ucyA9CiAJCQkJCUluaXRKc29uSXRlbUNvZXJj aW9ucyhwc3RhdGUsIGpzZXhwci0+cmV0dXJuaW5nLAotCQkJCQkJCQkJCSAgZXhwclR5cGUoanNl eHByLT5mb3JtYXR0ZWRfZXhwcikpOworCQkJCQkJCQkJCSAgZXhwclR5cGUoanNleHByLT5mb3Jt YXR0ZWRfZXhwciksICFqc2V4cHItPm9taXRfcXVvdGVzKTsKIAogCQkJaWYgKGZ1bmMtPm9uX2Vt cHR5KQogCQkJCWpzZXhwci0+b25fZW1wdHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRl LApAQCAtNDYyNyw3ICs0NjQxLDcgQEAgY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRl LCBOb2RlICpleHByLCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCiAgKi8KIHN0YXRp YyBMaXN0ICoKIEluaXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0 IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKLQkJCQkJICBPaWQgY29udGV4dEl0ZW1UeXBlSWQp CisJCQkJCSAgT2lkIGNvbnRleHRJdGVtVHlwZUlkLCBib29sIGtlZXBfcXVvdGVzKQogewogCUxp c3QJICAgKml0ZW1fY29lcmNpb25zID0gTklMOwogCWludAkJCWk7CkBAIC00Njc3LDYgKzQ2OTEs MTIgQEAgSW5pdEpzb25JdGVtQ29lcmNpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNv blJldHVybmluZyAqcmV0dXJuaW5nLAogCiAJCWl0ZW1fY29lcmNpb24tPml0ZW1fdHlwZSA9IGl0 ZW1fdHlwZXNbaV0uaXRlbV90eXBlOwogCQlpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiA9IGNvZXJj ZUpzb25FeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nKTsKKwkJaWYgKGl0ZW1fY29lcmNpb24t PmNvZXJjaW9uKQorCQl7CisJCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gKEpzb25Db2VyY2lv biAqKSBpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbjsKKwkJCWlmIChrZWVwX3F1b3RlcykKKwkJCQlj b2VyY2lvbi0+a2VlcF9xdW90ZXMgPSB0cnVlOworCQl9CiAJCWl0ZW1fY29lcmNpb25zID0gbGFw cGVuZChpdGVtX2NvZXJjaW9ucywgaXRlbV9jb2VyY2lvbik7CiAJfQogCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dAppbmRleCBlMDYxM2NjMi4uZjZhMmMxZmMg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dApAQCAtMzAx LDcgKzMwMSwxMSBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjIwMTctMDItMjAiJywgJyQn IFJFVFVSTklORyBkYXRlKSArIDk7CiAtLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBk b21haW4gdHlwZXMKIENSRUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBO T1QgTlVMTDsKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBz cWxqc29uYl9pbnRfbm90X251bGwpOwotRVJST1I6ICBkb21haW4gc3FsanNvbmJfaW50X25vdF9u dWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICAgICAgICAgICAKKygxIHJvdykKKwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CiBF UlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2 YWx1ZXMKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxq c29uYl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKQEAg LTMxMyw3ICszMTcsMTEgQEAgU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAgJyQuYScgUkVU VVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIgT04KICgxIHJvdykKIAogU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9u b3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOwotRVJST1I6ICBk b21haW4gc3FsanNvbmJfaW50X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKwogQ1JFQVRF IFRZUEUgcmFpbmJvdyBBUyBFTlVNICgncmVkJywgJ29yYW5nZScsICd5ZWxsb3cnLCAnZ3JlZW4n LCAnYmx1ZScsICdwdXJwbGUnKTsKIENSRUFURSBET01BSU4gcmdiIEFTIHJhaW5ib3cgQ0hFQ0sg KFZBTFVFIElOICgncmVkJywgJ2dyZWVuJywgJ2JsdWUnKSk7CiBTRUxFQ1QgSlNPTl9WQUxVRSgn InB1cnBsZSInOjpqc29uYiwgJ2xheCAkWypdJyBSRVRVUk5JTkcgcmdiKTsKLS0gCjIuMzQuMQoK --000000000000a59bc3060e086228 Content-Type: application/sql; name="test.sql" Content-Disposition: attachment; filename="test.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxncvys4 CkRST1AgVFlQRSBJRiBFWElTVFMgamJwb3AgQ0FTQ0FERTsKQ1JFQVRFIFRZUEUgamJwb3AgQVMg KGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1wKTsKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJy ZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgamJwb3Agb21p dCBxdW90ZXMpOwpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICIoYWJjLDQyLDAxLjAy LjIwMDMpIn0nLCAnJC5yZWMnIHJldHVybmluZyBqYnBvcCBrZWVwIHF1b3Rlcyk7ClNFTEVDVCBK U09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycg cmV0dXJuaW5nIGpicG9wIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKU0VMRUNUIEpTT05f UVVFUlkoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10g b21pdCBxdW90ZXMpOwpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0n LCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3Rlcyk7ClNFTEVDVCBKU09OX1FVRVJZ KGpzb25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgcmV0dXJuaW5nIGludFtdIGtlZXAg cXVvdGVzIGVycm9yIG9uIGVycm9yKTsKClNFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjog WzEsMiwzXX0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7ClNFTEVDVCBK U09OX1FVRVJZKGpzb25iJ3sicmVjIjogWzEsMiwzXX0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRb XSBrZWVwIHF1b3Rlcyk7CgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9 JywgJyQucmVjJyByZXR1cm5pbmcgaW50NHJhbmdlIG9taXQgcXVvdGVzKTsKU0VMRUNUIEpTT05f UVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgcmV0dXJuaW5nIGludDRyYW5n ZSBrZWVwIHF1b3Rlcyk7ClNFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0n LCAnJC5yZWMnIAlyZXR1cm5pbmcgaW50NHJhbmdlIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9y KTsKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgcmV0 dXJuaW5nIGludDRyYW5nZSk7ClNFTEVDVCBKU09OX1FVRVJZKGpzb25iICcid29ybGQiJywgJyQn IHJldHVybmluZyB0ZXh0IFdJVEggV1JBUFBFUik7CgpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo anNvbmIgJyIxMiInLCAnJCcgQ09MVU1OUyAoaXRlbSBudW1lcmljIGZvcm1hdCBqc29uIFBBVEgg JyQnIEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsKU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0gbnVtZXJpYyBmb3JtYXQganNvbiBQ QVRIICckJyBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7ClNFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnIjEyIicsICckJyBDT0xVTU5TIChpdGVtIG51bWVyaWMgUEFUSCAnJCcg S0VFUCBRVU9URVMgKSk7ClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIjEyIicsICck JyBDT0xVTU5TIChpdGVtIG51bWVyaWMgUEFUSCAnJCcgS0VFUCBRVU9URVMgZXJyb3Igb24gZXJy b3IpKTsKU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMg KGl0ZW0gbnVtZXJpYyBQQVRIICckJyBPTUlUIFFVT1RFUyApKTsKClNFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYid7InJlYyI6IFsxLDIsM119JywgJyQucmVjJyBDT0xVTU5TKHYxIGludFtd IAlwYXRoICckJyBrZWVwIHF1b3RlcykpOwpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIn eyJyZWMiOiBbMSwyLDNdfScsICckLnJlYycgQ09MVU1OUyh2MSBpbnRbXSAJcGF0aCAnJCcga2Vl cCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpKTsKU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i J3sicmVjIjogWzEsMiwzXX0nLCAnJC5yZWMnIENPTFVNTlModjEgaW50W10gCXBhdGggJyQnIG9t aXQgcXVvdGVzKSk7CgpTRUxFQ1QgKiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEs Ml0ifScsICckLnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBGT1JNQVQgSlNPTiBwYXRoICckJyBr ZWVwIHF1b3RlcykpOwpTRUxFQ1QgKiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEs Ml0ifScsICckLnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBGT1JNQVQgSlNPTiBwYXRoICckJyBv bWl0IHF1b3RlcykpOwpTRUxFQ1QgKiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEs Ml0ifScsICckLnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBwYXRoICckJyBrZWVwIHF1b3Rlcykp OwpTRUxFQ1QgKiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJl YycgQ09MVU1OUyh2IGludDRyYW5nZSBwYXRoICckJyBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJv cikpOwpTRUxFQ1QgKiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICck LnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBwYXRoICckJyBvbWl0IHF1b3RlcykpOwpTRUxFQ1Qg KiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQucmVjJyBDT0xV TU5TKHYgaW50W10gcGF0aCAnJCcgIG9taXQgcXVvdGVzKSk7ClNFTEVDVCAqIGZyb20gSlNPTl9U QUJMRShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIENPTFVNTlModiBpbnRbXSBw YXRoICckJyAga2VlcCBxdW90ZXMpKTsKU0VMRUNUICogZnJvbSBKU09OX1RBQkxFKGpzb25iJ3si cmVjIjogInsxLDIsM30ifScsICckLnJlYycgQ09MVU1OUyh2IGludFtdIHBhdGggJyQnICBrZWVw IHF1b3RlcyBlcnJvciBvbiBlcnJvcikpOwpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIHRleHQgRVhJU1RTIFBBVEggJyQuYScga2VlcCBxdW90ZXMp KTsKU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSB0 ZXh0IEVYSVNUUyBQQVRIICckLmEnIG9taXQgcXVvdGVzKSk7ClNFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgV0lU SCBXUkFQUEVSKSk7Cg== --000000000000a59bc3060e086228 Content-Type: application/octet-stream; name="without_patch.out" Content-Disposition: attachment; filename="without_patch.out" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxnd4zf5 RFJPUCBUWVBFIElGIEVYSVNUUyBqYnBvcCBDQVNDQURFOwpEUk9QIFRZUEUKQ1JFQVRFIFRZUEUg amJwb3AgQVMgKGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1wKTsKQ1JFQVRFIFRZUEUKU0VMRUNU IEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVj JyByZXR1cm5pbmcgamJwb3Agb21pdCBxdW90ZXMpOwoganNvbl9xdWVyeSAKLS0tLS0tLS0tLS0t CiAKKDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0MiwwMS4w Mi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgamJwb3Aga2VlcCBxdW90ZXMpOwoganNvbl9x dWVyeSAKLS0tLS0tLS0tLS0tCiAKKDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJy ZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgamJwb3Aga2Vl cCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOwpFUlJPUjogIGNhbm5vdCBjYWxsIHBvcHVsYXRlX2Nv bXBvc2l0ZSBvbiBhIHNjYWxhcgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwy LDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7CiBqc29uX3F1ZXJ5 IAotLS0tLS0tLS0tLS0KIAooMSByb3cpCgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6 ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3Rlcyk7CiBqc29u X3F1ZXJ5IAotLS0tLS0tLS0tLS0KIAooMSByb3cpCgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7 InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3RlcyBl cnJvciBvbiBlcnJvcik7CkVSUk9SOiAgZXhwZWN0ZWQgSlNPTiBhcnJheQpTRUxFQ1QgSlNPTl9R VUVSWShqc29uYid7InJlYyI6IFsxLDIsM119JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10gb21p dCBxdW90ZXMpOwoganNvbl9xdWVyeSAKLS0tLS0tLS0tLS0tCiB7MSwyLDN9CigxIHJvdykKClNF TEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogWzEsMiwzXX0nLCAnJC5yZWMnIHJldHVybmlu ZyBpbnRbXSBrZWVwIHF1b3Rlcyk7CiBqc29uX3F1ZXJ5IAotLS0tLS0tLS0tLS0KIHsxLDIsM30K KDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJl YycgcmV0dXJuaW5nIGludDRyYW5nZSBvbWl0IHF1b3Rlcyk7CiBqc29uX3F1ZXJ5IAotLS0tLS0t LS0tLS0KIFsxLDMpCigxIHJvdykKClNFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsx LDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMpOwoganNvbl9x dWVyeSAKLS0tLS0tLS0tLS0tCiBbMSwzKQooMSByb3cpCgpTRUxFQ1QgSlNPTl9RVUVSWShqc29u Yid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyAJcmV0dXJuaW5nIGludDRyYW5nZSBrZWVwIHF1 b3RlcyBlcnJvciBvbiBlcnJvcik7CiBqc29uX3F1ZXJ5IAotLS0tLS0tLS0tLS0KIFsxLDMpCigx IHJvdykKClNFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5yZWMn IHJldHVybmluZyBpbnQ0cmFuZ2UpOwoganNvbl9xdWVyeSAKLS0tLS0tLS0tLS0tCiBbMSwzKQoo MSByb3cpCgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnIndvcmxkIicsICckJyByZXR1cm5pbmcg dGV4dCBXSVRIIFdSQVBQRVIpOwoganNvbl9xdWVyeSAKLS0tLS0tLS0tLS0tCiBbIndvcmxkIl0K KDEgcm93KQoKU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVN TlMgKGl0ZW0gbnVtZXJpYyBmb3JtYXQganNvbiBQQVRIICckJyBLRUVQIFFVT1RFUyBPTiBTQ0FM QVIgU1RSSU5HKSk7CkVSUk9SOiAgY2Fubm90IHVzZSBKU09OIGZvcm1hdCB3aXRoIG5vbi1zdHJp bmcgb3V0cHV0IHR5cGVzCkxJTkUgMTogLi4uU09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENP TFVNTlMgKGl0ZW0gbnVtZXJpYyBmb3JtYXQganNvLi4uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeClNFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnIjEyIicsICckJyBDT0xVTU5TIChpdGVtIG51bWVyaWMgZm9ybWF0IGpz b24gUEFUSCAnJCcgT01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOwpFUlJPUjogIGNhbm5v dCB1c2UgSlNPTiBmb3JtYXQgd2l0aCBub24tc3RyaW5nIG91dHB1dCB0eXBlcwpMSU5FIDE6IC4u LlNPTl9UQUJMRShqc29uYiAnIjEyIicsICckJyBDT0xVTU5TIChpdGVtIG51bWVyaWMgZm9ybWF0 IGpzby4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyIxMiInLCAnJCcg Q09MVU1OUyAoaXRlbSBudW1lcmljIFBBVEggJyQnIEtFRVAgUVVPVEVTICkpOwpFUlJPUjogIGNh bm5vdCB1c2UgT01JVC9LRUVQIFFVT1RFUyBjbGF1c2UgZm9yIHNjYWxhciBjb2x1bW5zIHdpdGhv dXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UKTElORSAxOiAuLi5MRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0gbnVtZXIuLi4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0g bnVtZXJpYyBQQVRIICckJyBLRUVQIFFVT1RFUyBlcnJvciBvbiBlcnJvcikpOwpFUlJPUjogIGNh bm5vdCB1c2UgT01JVC9LRUVQIFFVT1RFUyBjbGF1c2UgZm9yIHNjYWxhciBjb2x1bW5zIHdpdGhv dXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UKTElORSAxOiAuLi5MRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0gbnVtZXIuLi4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0g bnVtZXJpYyBQQVRIICckJyBPTUlUIFFVT1RFUyApKTsKRVJST1I6ICBjYW5ub3QgdXNlIE9NSVQv S0VFUCBRVU9URVMgY2xhdXNlIGZvciBzY2FsYXIgY29sdW1ucyB3aXRob3V0IGFsc28gc3BlY2lm eWluZyBGT1JNQVQgY2xhdXNlCkxJTkUgMTogLi4uTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29u YiAnIjEyIicsICckJyBDT0xVTU5TIChpdGVtIG51bWVyLi4uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeClNFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYid7InJlYyI6IFsxLDIsM119JywgJyQucmVjJyBDT0xVTU5TKHYxIGlu dFtdIAlwYXRoICckJyBrZWVwIHF1b3RlcykpOwogICB2MSAgICAKLS0tLS0tLS0tCiB7MSwyLDN9 CigxIHJvdykKClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYid7InJlYyI6IFsxLDIsM119 JywgJyQucmVjJyBDT0xVTU5TKHYxIGludFtdIAlwYXRoICckJyBrZWVwIHF1b3RlcyBlcnJvciBv biBlcnJvcikpOwogICB2MSAgICAKLS0tLS0tLS0tCiB7MSwyLDN9CigxIHJvdykKClNFTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYid7InJlYyI6IFsxLDIsM119JywgJyQucmVjJyBDT0xVTU5T KHYxIGludFtdIAlwYXRoICckJyBvbWl0IHF1b3RlcykpOwogICB2MSAgICAKLS0tLS0tLS0tCiB7 MSwyLDN9CigxIHJvdykKClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7InJlYyI6ICJb MSwyXSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50NHJhbmdlIEZPUk1BVCBKU09OIHBhdGggJyQn IGtlZXAgcXVvdGVzKSk7CkVSUk9SOiAgY2Fubm90IHVzZSBKU09OIGZvcm1hdCB3aXRoIG5vbi1z dHJpbmcgb3V0cHV0IHR5cGVzCkxJTkUgMTogLi4ubmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJl YycgQ09MVU1OUyh2IGludDRyYW5nZSBGT1JNQVQgSlNPLi4uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeClNFTEVDVCAqIGZyb20g SlNPTl9UQUJMRShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50 NHJhbmdlIEZPUk1BVCBKU09OIHBhdGggJyQnIG9taXQgcXVvdGVzKSk7CkVSUk9SOiAgY2Fubm90 IHVzZSBKU09OIGZvcm1hdCB3aXRoIG5vbi1zdHJpbmcgb3V0cHV0IHR5cGVzCkxJTkUgMTogLi4u bmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBGT1JNQVQg SlNPLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7InJlYyI6ICJbMSwy XSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50NHJhbmdlIHBhdGggJyQnIGtlZXAgcXVvdGVzKSk7 CkVSUk9SOiAgY2Fubm90IHVzZSBPTUlUL0tFRVAgUVVPVEVTIGNsYXVzZSBmb3Igc2NhbGFyIGNv bHVtbnMgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgRk9STUFUIGNsYXVzZQpMSU5FIDE6IC4uLk9O X1RBQkxFKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIENPTFVNTlModiBpbnQ0cmFu Zy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgpTRUxFQ1QgKiBmcm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEsMl0i fScsICckLnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBwYXRoICckJyBrZWVwIHF1b3RlcyBlcnJv ciBvbiBlcnJvcikpOwpFUlJPUjogIGNhbm5vdCB1c2UgT01JVC9LRUVQIFFVT1RFUyBjbGF1c2Ug Zm9yIHNjYWxhciBjb2x1bW5zIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UK TElORSAxOiAuLi5PTl9UQUJMRShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyBDT0xV TU5TKHYgaW50NHJhbmcuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF4KU0VMRUNUICogZnJvbSBKU09OX1RBQkxFKGpzb25iJ3si cmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIENPTFVNTlModiBpbnQ0cmFuZ2UgcGF0aCAnJCcgb21p dCBxdW90ZXMpKTsKRVJST1I6ICBjYW5ub3QgdXNlIE9NSVQvS0VFUCBRVU9URVMgY2xhdXNlIGZv ciBzY2FsYXIgY29sdW1ucyB3aXRob3V0IGFsc28gc3BlY2lmeWluZyBGT1JNQVQgY2xhdXNlCkxJ TkUgMTogLi4uT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgQ09MVU1O Uyh2IGludDRyYW5nLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7InJl YyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIENPTFVNTlModiBpbnRbXSBwYXRoICckJyAgb21pdCBx dW90ZXMpKTsKIHYgCi0tLQogCigxIHJvdykKClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29u Yid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIENPTFVNTlModiBpbnRbXSBwYXRoICckJyAg a2VlcCBxdW90ZXMpKTsKIHYgCi0tLQogCigxIHJvdykKClNFTEVDVCAqIGZyb20gSlNPTl9UQUJM RShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIENPTFVNTlModiBpbnRbXSBwYXRo ICckJyAga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpKTsKRVJST1I6ICBleHBlY3RlZCBKU09O IGFycmF5ClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMg KGEgdGV4dCBFWElTVFMgUEFUSCAnJC5hJyBrZWVwIHF1b3RlcykpOwpFUlJPUjogIHN5bnRheCBl cnJvciBhdCBvciBuZWFyICJrZWVwIgpMSU5FIDE6IC4uLnNvbmIgJyJhIicsICckJyBDT0xVTU5T IChhIHRleHQgRVhJU1RTIFBBVEggJyQuYScga2VlcCBxdW90ZS4uLgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIHRleHQgRVhJU1RTIFBB VEggJyQuYScgb21pdCBxdW90ZXMpKTsKRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAi b21pdCIKTElORSAxOiAuLi5zb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSB0ZXh0IEVYSVNUUyBQ QVRIICckLmEnIG9taXQgcXVvdGUuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIIFdSQVBQ RVIpKTsKRVJST1I6ICBjYW5ub3QgdXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgZm9yIHNjYWxhciBj b2x1bW5zIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UKTElORSAxOiAuLi5U ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4 dCAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4K --000000000000a59bc3060e086228 Content-Type: application/octet-stream; name="with_patch.out" Content-Disposition: attachment; filename="with_patch.out" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqxnd4zh6 RFJPUCBUWVBFIElGIEVYSVNUUyBqYnBvcCBDQVNDQURFOwpOT1RJQ0U6ICB0eXBlICJqYnBvcCIg ZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nCkRST1AgVFlQRQpDUkVBVEUgVFlQRSBqYnBvcCBBUyAo YSB0ZXh0LCBiIGludCwgYyB0aW1lc3RhbXApOwpDUkVBVEUgVFlQRQpTRUxFQ1QgSlNPTl9RVUVS WShqc29uYid7InJlYyI6ICIoYWJjLDQyLDAxLjAyLjIwMDMpIn0nLCAnJC5yZWMnIHJldHVybmlu ZyBqYnBvcCBvbWl0IHF1b3Rlcyk7CiAgICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAoYWJjLDQyLCIyMDAzLTAxLTAyIDAwOjAw OjAwIikKKDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0Miww MS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgamJwb3Aga2VlcCBxdW90ZXMpOwoganNv bl9xdWVyeSAKLS0tLS0tLS0tLS0tCiAKKDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIn eyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgamJwb3Ag a2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOwpFUlJPUjogIG1hbGZvcm1lZCByZWNvcmQgbGl0 ZXJhbDogIiIoYWJjLDQyLDAxLjAyLjIwMDMpIiIKREVUQUlMOiAgTWlzc2luZyBsZWZ0IHBhcmVu dGhlc2lzLgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5y ZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7CiBqc29uX3F1ZXJ5IAotLS0tLS0tLS0t LS0KIHsxLDIsM30KKDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiezEs MiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10ga2VlcCBxdW90ZXMpOwoganNvbl9xdWVy eSAKLS0tLS0tLS0tLS0tCiAKKDEgcm93KQoKU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMi OiAiezEsMiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10ga2VlcCBxdW90ZXMgZXJyb3Ig b24gZXJyb3IpOwpFUlJPUjogIG1hbGZvcm1lZCBhcnJheSBsaXRlcmFsOiAiInsxLDIsM30iIgpE RVRBSUw6ICBBcnJheSB2YWx1ZSBtdXN0IHN0YXJ0IHdpdGggInsiIG9yIGRpbWVuc2lvbiBpbmZv cm1hdGlvbi4KU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiBbMSwyLDNdfScsICckLnJl YycgcmV0dXJuaW5nIGludFtdIG9taXQgcXVvdGVzKTsKIGpzb25fcXVlcnkgCi0tLS0tLS0tLS0t LQogezEsMiwzfQooMSByb3cpCgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6IFsxLDIs M119JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10ga2VlcCBxdW90ZXMpOwoganNvbl9xdWVyeSAK LS0tLS0tLS0tLS0tCiB7MSwyLDN9CigxIHJvdykKClNFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3si cmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Ugb21pdCBxdW90ZXMp OwoganNvbl9xdWVyeSAKLS0tLS0tLS0tLS0tCiBbMSwzKQooMSByb3cpCgpTRUxFQ1QgSlNPTl9R VUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50NHJhbmdl IGtlZXAgcXVvdGVzKTsKIGpzb25fcXVlcnkgCi0tLS0tLS0tLS0tLQogCigxIHJvdykKClNFTEVD VCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIAlyZXR1cm5pbmcg aW50NHJhbmdlIGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKRVJST1I6ICBtYWxmb3JtZWQg cmFuZ2UgbGl0ZXJhbDogIiJbMSwyXSIiCkRFVEFJTDogIE1pc3NpbmcgbGVmdCBwYXJlbnRoZXNp cyBvciBicmFja2V0LgpTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9Jywg JyQucmVjJyByZXR1cm5pbmcgaW50NHJhbmdlKTsKIGpzb25fcXVlcnkgCi0tLS0tLS0tLS0tLQog CigxIHJvdykKClNFTEVDVCBKU09OX1FVRVJZKGpzb25iICcid29ybGQiJywgJyQnIHJldHVybmlu ZyB0ZXh0IFdJVEggV1JBUFBFUik7CiBqc29uX3F1ZXJ5IAotLS0tLS0tLS0tLS0KIFsid29ybGQi XQooMSByb3cpCgpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyIxMiInLCAnJCcgQ09M VU1OUyAoaXRlbSBudW1lcmljIGZvcm1hdCBqc29uIFBBVEggJyQnIEtFRVAgUVVPVEVTIE9OIFND QUxBUiBTVFJJTkcpKTsKRVJST1I6ICBjYW5ub3QgdXNlIEpTT04gZm9ybWF0IHdpdGggbm9uLXN0 cmluZyBvdXRwdXQgdHlwZXMKTElORSAxOiAuLi5TT05fVEFCTEUoanNvbmIgJyIxMiInLCAnJCcg Q09MVU1OUyAoaXRlbSBudW1lcmljIGZvcm1hdCBqc28uLi4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0gbnVtZXJpYyBmb3JtYXQg anNvbiBQQVRIICckJyBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7CkVSUk9SOiAgY2Fu bm90IHVzZSBKU09OIGZvcm1hdCB3aXRoIG5vbi1zdHJpbmcgb3V0cHV0IHR5cGVzCkxJTkUgMTog Li4uU09OX1RBQkxFKGpzb25iICciMTIiJywgJyQnIENPTFVNTlMgKGl0ZW0gbnVtZXJpYyBmb3Jt YXQganNvLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBeClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIjEyIicsICck JyBDT0xVTU5TIChpdGVtIG51bWVyaWMgUEFUSCAnJCcgS0VFUCBRVU9URVMgKSk7CiBpdGVtIAot LS0tLS0KICAgICAKKDEgcm93KQoKU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciMTIi JywgJyQnIENPTFVNTlMgKGl0ZW0gbnVtZXJpYyBQQVRIICckJyBLRUVQIFFVT1RFUyBlcnJvciBv biBlcnJvcikpOwpFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIG51bWVyaWM6 ICIiMTIiIgpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyIxMiInLCAnJCcgQ09MVU1O UyAoaXRlbSBudW1lcmljIFBBVEggJyQnIE9NSVQgUVVPVEVTICkpOwogaXRlbSAKLS0tLS0tCiAg IDEyCigxIHJvdykKClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYid7InJlYyI6IFsxLDIs M119JywgJyQucmVjJyBDT0xVTU5TKHYxIGludFtdIAlwYXRoICckJyBrZWVwIHF1b3RlcykpOwog ICB2MSAgICAKLS0tLS0tLS0tCiB7MSwyLDN9CigxIHJvdykKClNFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYid7InJlYyI6IFsxLDIsM119JywgJyQucmVjJyBDT0xVTU5TKHYxIGludFtdIAlw YXRoICckJyBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcikpOwogICB2MSAgICAKLS0tLS0tLS0t CiB7MSwyLDN9CigxIHJvdykKClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYid7InJlYyI6 IFsxLDIsM119JywgJyQucmVjJyBDT0xVTU5TKHYxIGludFtdIAlwYXRoICckJyBvbWl0IHF1b3Rl cykpOwogICB2MSAgICAKLS0tLS0tLS0tCiB7MSwyLDN9CigxIHJvdykKClNFTEVDVCAqIGZyb20g SlNPTl9UQUJMRShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50 NHJhbmdlIEZPUk1BVCBKU09OIHBhdGggJyQnIGtlZXAgcXVvdGVzKSk7CkVSUk9SOiAgY2Fubm90 IHVzZSBKU09OIGZvcm1hdCB3aXRoIG5vbi1zdHJpbmcgb3V0cHV0IHR5cGVzCkxJTkUgMTogLi4u bmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgQ09MVU1OUyh2IGludDRyYW5nZSBGT1JNQVQg SlNPLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7InJlYyI6ICJbMSwy XSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50NHJhbmdlIEZPUk1BVCBKU09OIHBhdGggJyQnIG9t aXQgcXVvdGVzKSk7CkVSUk9SOiAgY2Fubm90IHVzZSBKU09OIGZvcm1hdCB3aXRoIG5vbi1zdHJp bmcgb3V0cHV0IHR5cGVzCkxJTkUgMTogLi4ubmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycg Q09MVU1OUyh2IGludDRyYW5nZSBGT1JNQVQgSlNPLi4uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeClNFTEVDVCAqIGZyb20gSlNP Tl9UQUJMRShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50NHJh bmdlIHBhdGggJyQnIGtlZXAgcXVvdGVzKSk7CiB2IAotLS0KIAooMSByb3cpCgpTRUxFQ1QgKiBm cm9tIEpTT05fVEFCTEUoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgQ09MVU1OUyh2 IGludDRyYW5nZSBwYXRoICckJyBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcikpOwpFUlJPUjog IG1hbGZvcm1lZCByYW5nZSBsaXRlcmFsOiAiIlsxLDJdIiIKREVUQUlMOiAgTWlzc2luZyBsZWZ0 IHBhcmVudGhlc2lzIG9yIGJyYWNrZXQuClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7 InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyBDT0xVTU5TKHYgaW50NHJhbmdlIHBhdGggJyQnIG9t aXQgcXVvdGVzKSk7CiAgIHYgICAKLS0tLS0tLQogWzEsMykKKDEgcm93KQoKU0VMRUNUICogZnJv bSBKU09OX1RBQkxFKGpzb25iJ3sicmVjIjogInsxLDIsM30ifScsICckLnJlYycgQ09MVU1OUyh2 IGludFtdIHBhdGggJyQnICBvbWl0IHF1b3RlcykpOwogICAgdiAgICAKLS0tLS0tLS0tCiB7MSwy LDN9CigxIHJvdykKClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7InJlYyI6ICJ7MSwy LDN9In0nLCAnJC5yZWMnIENPTFVNTlModiBpbnRbXSBwYXRoICckJyAga2VlcCBxdW90ZXMpKTsK IHYgCi0tLQogCigxIHJvdykKClNFTEVDVCAqIGZyb20gSlNPTl9UQUJMRShqc29uYid7InJlYyI6 ICJ7MSwyLDN9In0nLCAnJC5yZWMnIENPTFVNTlModiBpbnRbXSBwYXRoICckJyAga2VlcCBxdW90 ZXMgZXJyb3Igb24gZXJyb3IpKTsKRVJST1I6ICBtYWxmb3JtZWQgYXJyYXkgbGl0ZXJhbDogIiJ7 MSwyLDN9IiIKREVUQUlMOiAgQXJyYXkgdmFsdWUgbXVzdCBzdGFydCB3aXRoICJ7IiBvciBkaW1l bnNpb24gaW5mb3JtYXRpb24uClNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywg JyQnIENPTFVNTlMgKGEgdGV4dCBFWElTVFMgUEFUSCAnJC5hJyBrZWVwIHF1b3RlcykpOwpFUlJP UjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICJrZWVwIgpMSU5FIDE6IC4uLnNvbmIgJyJhIics ICckJyBDT0xVTU5TIChhIHRleHQgRVhJU1RTIFBBVEggJyQuYScga2VlcCBxdW90ZS4uLgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgpTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIHRl eHQgRVhJU1RTIFBBVEggJyQuYScgb21pdCBxdW90ZXMpKTsKRVJST1I6ICBzeW50YXggZXJyb3Ig YXQgb3IgbmVhciAib21pdCIKTElORSAxOiAuLi5zb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSB0 ZXh0IEVYSVNUUyBQQVRIICckLmEnIG9taXQgcXVvdGUuLi4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICck JyBXSVRIIFdSQVBQRVIpKTsKICAgaXRlbSAgICAKLS0tLS0tLS0tLS0KIFsid29ybGQiXQooMSBy b3cpCgo= --000000000000a59bc3060e086228--