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 1rFs4U-00CXgF-52 for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Dec 2023 08:36:55 +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 1rFs4Q-00A8x0-9y for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Dec 2023 08:36:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rFs4P-00A8vj-Ib for pgsql-hackers@lists.postgresql.org; Wed, 20 Dec 2023 08:36:49 +0000 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rFs4L-00CvoK-ED for pgsql-hackers@postgresql.org; Wed, 20 Dec 2023 08:36:49 +0000 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-5c690c3d113so4143526a12.1 for ; Wed, 20 Dec 2023 00:36:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703061403; x=1703666203; 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=HI6RfHt6yw4uYH2uLDtSTR2IJC313Ionil3dycOkaWE=; b=WM1z5rAttl6U7yZZNyqFWgQafwN5hOwQ19/2BcK4oi+6UyUhsMXp5LfBl4br3ILh/j KrNLYdCSqZQZncGQl+WPqki1cMaXo6OF1G/zqG1Tm6DFOs3q17P6DWOGJGEygEWOEAKy ABkjIm+dDB69rwq7KF/fpgPhsRRYwdAlWCBBlRCZRoGP/zeiYPunVBlp6+TTwrZqsWof n8yLauRTt+EGdB2GedwYseWZniPztfLN5RMkCKn2Nrn4ZcczLz3udtt58REAJxaJGW98 IMmbi0cdNLWrtVF3Vih8HGchae2gFNVdASTZCbioF6YZestACRhhu8N3z5KTTj8d/XI1 JDPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703061403; x=1703666203; 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=HI6RfHt6yw4uYH2uLDtSTR2IJC313Ionil3dycOkaWE=; b=jO7HTf/hkX3bL2CQkL6ZMPrdzD2lvdW3NfSTvp+01CHdqquVEjPWOCgZW4xPf8qgsf G3U+UlU4bTMVIiYl5tlVqcb5lP344V5u9axl38e+bWI0QfZFMOZD3tIl1u+wHU6364ZL RPWpV5EF145RuVgH54nZryjWikCSkD3I8kelMjau4xpPDrQ/OXHQQ8vZ1xQgHepWcIaS 9zDrohoZHW30vh2CpGNXgfG8yynVf720lClc3lnJ02WgUr/OAXJwTkhyg6e06cu9xjpS fYxjSbqKELxiJ8luhmyZi+dV6iQnceuplP189/Nbc6c6kF3jiBvlKCccznPYZTcWTDoq oS7w== X-Gm-Message-State: AOJu0YySfquAvuAkjL/qerPP5ZZ2zmmsHK+AllQsWzV7k/+UOGWWs6Zp bccRgIj3nS4ci6q/t8jfCgB5y82F7rbEloz7jjA= X-Google-Smtp-Source: AGHT+IE9L4IhVRjnwEoUnf7GWzTw25dFScJ/q+uLhBbmTfQA9q3PMKQ3FFlG97HYxgP/mvpbURNrR4XBAwTr6F3ejaA= X-Received: by 2002:a05:6a21:718b:b0:193:fba6:7342 with SMTP id wq11-20020a056a21718b00b00193fba67342mr10228539pzb.82.1703061402800; Wed, 20 Dec 2023 00:36:42 -0800 (PST) MIME-Version: 1.0 References: <202312071051.cpxujwos4tlj@alvherre.pgsql> <20231208173014.2qycwc6kjqf6zlck@awork3.anarazel.de> In-Reply-To: From: Amit Langote Date: Wed, 20 Dec 2023 17:36:25 +0900 Message-ID: Subject: Re: remaining sql/json patches To: Andres Freund Cc: Alvaro Herrera , Erik Rijkers , jian he , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000f29f71060cece141" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f29f71060cece141 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 14, 2023 at 5:04=E2=80=AFPM Amit Langote wrote: > On Sat, Dec 9, 2023 at 2:30=E2=80=AFAM Andres Freund = wrote: > > On 2023-12-07 21:07:59 +0900, Amit Langote wrote: > > > From 38b53297b2d435d5cebf78c1f81e4748fed6c8b6 Mon Sep 17 00:00:00 200= 1 > > > From: Amit Langote > > > Date: Wed, 22 Nov 2023 13:18:49 +0900 > > > Subject: [PATCH v30 2/5] Add soft error handling to populate_record_f= ield() > > > > > > An uncoming patch would like the ability to call it from the > > > executor for some SQL/JSON expression nodes and ask to suppress any > > > errors that may occur. > > > > > > This commit does two things mainly: > > > > > > * It modifies the various interfaces internal to jsonfuncs.c to pass > > > the ErrorSaveContext around. > > > > > > * Make necessary modifications to handle the cases where the > > > processing is aborted partway through various functions that take > > > an ErrorSaveContext when a soft error occurs. > > > > > > Note that the above changes are only intended to suppress errors in > > > the functions in jsonfuncs.c, but not those in any external functions > > > that the functions in jsonfuncs.c in turn call, such as those from > > > arrayfuncs.c. It is assumed that the various populate_* functions > > > validate the data before passing those to external functions. > > > > > > Discussion: https://postgr.es/m/CA+HiwqE4XTdfb1nW=3DOjoy_tQSRhYt-q_kb= 6i5d4xcKyrLC1Nbg@mail.gmail.com > > > > The code here is getting substantially more verbose / less readable. I= wonder > > if there's something more general that could be improved to make this l= ess > > painful? > > Hmm, I can't think of anything short of a rewrite of the code under > populate_record_field() so that any error-producing code is well > isolated or adding a variant/wrapper with soft-error handling > capabilities. I'll give this some more thought, though I'm happy to > hear ideas. I looked at this and wasn't able to come up with alternative takes that are better in terms of the verbosity/readability. I'd still want to hear if someone well-versed in the json(b) code has any advice. I also looked at some commits touching src/backend/utils/adt/json* files to add soft error handling and I can't help but notice that those commits look not very different from this. For example, commits c60c9bad, 50428a30 contain changes like: @@ -454,7 +474,11 @@ parse_array_element(JsonLexContext *lex, JsonSemAction *sem) return result; if (aend !=3D NULL) - (*aend) (sem->semstate, isnull); + { + result =3D (*aend) (sem->semstate, isnull); + if (result !=3D JSON_SUCCESS) + return result; + } Attached updated patches addressing jian he's comments, some minor fixes, and commit message updates. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0002-Add-json_populate_type-with-support-for-soft-err.patch" Content-Disposition: attachment; filename="v33-0002-Add-json_populate_type-with-support-for-soft-err.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikize1 RnJvbSBkOGY5Y2YzZmYxOGU5YTMwNDU3NTA3ZmQ3ZTNhN2U2YmNjZDg3M2YzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjIgTm92IDIwMjMgMTM6MTg6NDkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz MyAyLzhdIEFkZCBqc29uX3BvcHVsYXRlX3R5cGUoKSB3aXRoIHN1cHBvcnQgZm9yIHNvZnQgZXJy b3IKIGhhbmRsaW5nCgpUaGUgbmV3IGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGV4dHJhY3QgYSB2 YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUKYW5kIHJldHVybiBhcyBhIERhdHVtIGZyb20gYSBn aXZlbiBqc29uYiB2YWx1ZSBwYXNzZWQgaW4gYXMgYSBEYXR1bS4KSXRzIGltcGxlbWVudGF0aW9u IHVzZXMgdGhlIGV4aXN0aW5nIHBvcHVsYXRlX3JlY29yZF9maWVsZCgpLCB0aG91Z2gKaXQgaGFz IGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydCBzb2Z0IGhhbmRsaW5nIG9mIGVycm9ycy4KClRvIHRo YXQgZW5kLCBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoKSBhbmQgdmFyaW91cyBwb3B1bGF0ZV8qIHVu ZGVybGluZ3MKbm93IGdldCBhIG5ldyBOb2RlICplc2NvbnRleHQgcGFyYW1ldGVyLiAgVGhleSBo YXZlIGFsc28gYmVlbiBtb2RpZmllZAp0byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHRoZSBwcm9j ZXNzaW5nIGluIGEgZ2l2ZW4gZnVuY3Rpb24gbmVlZHMgdG8KYmUgYWJvcnRlZCBwYXJ0d2F5IHRo cm91Z2ggd2hlbiBzb2Z0IGVycm9ycyBhcmUgcmVwb3J0ZWQuCgpOb3RlIHRoYXQgdGhlIGFib3Zl IGNoYW5nZXMgYXJlIG9ubHkgaW50ZW5kZWQgdG8gc3VwcHJlc3MgZXJyb3JzIGluCnRoZSBmdW5j dGlvbnMgaW4ganNvbmZ1bmNzLmMsIGJ1dCBub3QgdGhvc2UgaW4gYW55IGV4dGVybmFsIGZ1bmN0 aW9ucwp0aGF0IHRoZSBmdW5jdGlvbnMgaW4ganNvbmZ1bmNzLmMgaW4gdHVybiBtYXkgY2FsbCwg c3VjaCBhcyB0aG9zZSBmcm9tCmFycmF5ZnVuY3MuYy4gIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUg dmFyaW91cyBwb3B1bGF0ZV8qIGZ1bmN0aW9ucwp2YWxpZGF0ZSB0aGUgZGF0YSBiZWZvcmUgcGFz c2luZyB0aG9zZSB0byBleHRlcm5hbCBmdW5jdGlvbnMuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL0NBK0hpd3FFNFhUZGZiMW5XPU9qb3lfdFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxD MU5iZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3Mu YyB8IDM3MyArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxz L2pzb25mdW5jcy5oICAgICB8ICAgNiArCiAyIGZpbGVzIGNoYW5nZWQsIDMwMiBpbnNlcnRpb25z KCspLCA3NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKaW5kZXggYWEz N2M0MDFlNS4uYjRjNzllNDU2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwpAQCAtMjY1 LDYgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IFBvcHVsYXRlQXJyYXlDb250ZXh0CiAJaW50CQkg ICAqZGltczsJCQkvKiBkaW1lbnNpb25zICovCiAJaW50CQkgICAqc2l6ZXM7CQkJLyogY3VycmVu dCBkaW1lbnNpb24gY291bnRlcnMgKi8KIAlpbnQJCQluZGltczsJCQkvKiBudW1iZXIgb2YgZGlt ZW5zaW9ucyAqLworCU5vZGUJICAgKmVzY29udGV4dDsJCS8qIEZvciBzb2Z0LWVycm9yIGhhbmRs aW5nICovCiB9IFBvcHVsYXRlQXJyYXlDb250ZXh0OwogCiAvKiBzdGF0ZSBmb3IgcG9wdWxhdGVf YXJyYXlfanNvbigpICovCkBAIC0zODksNyArMzkwLDggQEAgc3RhdGljIEpzb25QYXJzZUVycm9y VHlwZSBlbGVtZW50c19hcnJheV9lbGVtZW50X2VuZCh2b2lkICpzdGF0ZSwgYm9vbCBpc251bGwp Owogc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSBlbGVtZW50c19zY2FsYXIodm9pZCAqc3RhdGUs IGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSk7CiAKIC8qIHR1cm4gYSBqc29u IG9iamVjdCBpbnRvIGEgaGFzaCB0YWJsZSAqLwotc3RhdGljIEhUQUIgKmdldF9qc29uX29iamVj dF9hc19oYXNoKGNoYXIgKmpzb24sIGludCBsZW4sIGNvbnN0IGNoYXIgKmZ1bmNuYW1lKTsKK3N0 YXRpYyBIVEFCICpnZXRfanNvbl9vYmplY3RfYXNfaGFzaChjaGFyICpqc29uLCBpbnQgbGVuLCBj b25zdCBjaGFyICpmdW5jbmFtZSwKKwkJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCiAvKiBz ZW1hbnRpYyBhY3Rpb25zIGZvciBwb3B1bGF0ZV9hcnJheV9qc29uICovCiBzdGF0aWMgSnNvblBh cnNlRXJyb3JUeXBlIHBvcHVsYXRlX2FycmF5X29iamVjdF9zdGFydCh2b2lkICpfc3RhdGUpOwpA QCAtNDMxLDM3ICs0MzMsNDIgQEAgc3RhdGljIERhdHVtIHBvcHVsYXRlX3JlY29yZF93b3JrZXIo RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGNvbnN0IGNoYXIgKmZ1bmNuYW0KIC8qIGhlbHBlciBm dW5jdGlvbnMgZm9yIHBvcHVsYXRlX3JlY29yZFtzZXRdICovCiBzdGF0aWMgSGVhcFR1cGxlSGVh ZGVyIHBvcHVsYXRlX3JlY29yZChUdXBsZURlc2MgdHVwZGVzYywgUmVjb3JkSU9EYXRhICoqcmVj b3JkX3AsCiAJCQkJCQkJCQkgICBIZWFwVHVwbGVIZWFkZXIgZGVmYXVsdHZhbCwgTWVtb3J5Q29u dGV4dCBtY3h0LAotCQkJCQkJCQkJICAgSnNPYmplY3QgKm9iaik7CisJCQkJCQkJCQkgICBKc09i amVjdCAqb2JqLCBOb2RlICplc2NvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3JlY29yZF90eXBl X2Zyb21fYXJndW1lbnQoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJCQkJCQkJICBjb25z dCBjaGFyICpmdW5jbmFtZSwKIAkJCQkJCQkJCQkgIFBvcHVsYXRlUmVjb3JkQ2FjaGUgKmNhY2hl KTsKIHN0YXRpYyB2b2lkIGdldF9yZWNvcmRfdHlwZV9mcm9tX3F1ZXJ5KEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAogCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZnVuY25hbWUsCiAJCQkJCQkJCQkg ICBQb3B1bGF0ZVJlY29yZENhY2hlICpjYWNoZSk7Ci1zdGF0aWMgdm9pZCBKc1ZhbHVlVG9Kc09i amVjdChKc1ZhbHVlICpqc3YsIEpzT2JqZWN0ICpqc28pOworc3RhdGljIGJvb2wgSnNWYWx1ZVRv SnNPYmplY3QoSnNWYWx1ZSAqanN2LCBKc09iamVjdCAqanNvLCBOb2RlICplc2NvbnRleHQpOwog c3RhdGljIERhdHVtIHBvcHVsYXRlX2NvbXBvc2l0ZShDb21wb3NpdGVJT0RhdGEgKmlvLCBPaWQg dHlwaWQsCiAJCQkJCQkJCWNvbnN0IGNoYXIgKmNvbG5hbWUsIE1lbW9yeUNvbnRleHQgbWN4dCwK LQkJCQkJCQkJSGVhcFR1cGxlSGVhZGVyIGRlZmF1bHR2YWwsIEpzVmFsdWUgKmpzdiwgYm9vbCBp c251bGwpOwotc3RhdGljIERhdHVtIHBvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBP aWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2KTsKKwkJCQkJCQkJSGVhcFR1cGxl SGVhZGVyIGRlZmF1bHR2YWwsIEpzVmFsdWUgKmpzdiwgYm9vbCAqaXNudWxsLAorCQkJCQkJCQlO b2RlICplc2NvbnRleHQpOworc3RhdGljIERhdHVtIHBvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0Rh dGEgKmlvLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2LAorCQkJCQkJCSBi b29sICppc251bGwsIE5vZGUgKmVzY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmVwYXJlX2NvbHVt bl9jYWNoZShDb2x1bW5JT0RhdGEgKmNvbHVtbiwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCiAJ CQkJCQkJCSBNZW1vcnlDb250ZXh0IG1jeHQsIGJvb2wgbmVlZF9zY2FsYXIpOwogc3RhdGljIERh dHVtIHBvcHVsYXRlX3JlY29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwgT2lkIHR5cGlkLCBp bnQzMiB0eXBtb2QsCiAJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbG5hbWUsIE1lbW9yeUNvbnRl eHQgbWN4dCwgRGF0dW0gZGVmYXVsdHZhbCwKLQkJCQkJCQkJICAgSnNWYWx1ZSAqanN2LCBib29s ICppc251bGwpOworCQkJCQkJCQkgICBKc1ZhbHVlICpqc3YsIGJvb2wgKmlzbnVsbCwgTm9kZSAq ZXNjb250ZXh0KTsKIHN0YXRpYyBSZWNvcmRJT0RhdGEgKmFsbG9jYXRlX3JlY29yZF9pbmZvKE1l bW9yeUNvbnRleHQgbWN4dCwgaW50IG5jb2x1bW5zKTsKIHN0YXRpYyBib29sIEpzT2JqZWN0R2V0 RmllbGQoSnNPYmplY3QgKm9iaiwgY2hhciAqZmllbGQsIEpzVmFsdWUgKmpzdik7CiBzdGF0aWMg dm9pZCBwb3B1bGF0ZV9yZWNvcmRzZXRfcmVjb3JkKFBvcHVsYXRlUmVjb3Jkc2V0U3RhdGUgKnN0 YXRlLCBKc09iamVjdCAqb2JqKTsKLXN0YXRpYyB2b2lkIHBvcHVsYXRlX2FycmF5X2pzb24oUG9w dWxhdGVBcnJheUNvbnRleHQgKmN0eCwgY2hhciAqanNvbiwgaW50IGxlbik7Ci1zdGF0aWMgdm9p ZCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgSnNv bmJWYWx1ZSAqamJ2LAorc3RhdGljIGJvb2wgcG9wdWxhdGVfYXJyYXlfanNvbihQb3B1bGF0ZUFy cmF5Q29udGV4dCAqY3R4LCBjaGFyICpqc29uLCBpbnQgbGVuKTsKK3N0YXRpYyBib29sIHBvcHVs YXRlX2FycmF5X2RpbV9qc29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBKc29uYlZhbHVl ICpqYnYsCiAJCQkJCQkJCQkgaW50IG5kaW0pOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlf cmVwb3J0X2V4cGVjdGVkX2FycmF5KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGlt KTsKLXN0YXRpYyB2b2lkIHBvcHVsYXRlX2FycmF5X2Fzc2lnbl9uZGltcyhQb3B1bGF0ZUFycmF5 Q29udGV4dCAqY3R4LCBpbnQgbmRpbXMpOwotc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlfY2hl Y2tfZGltZW5zaW9uKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKTsKLXN0YXRp YyB2b2lkIHBvcHVsYXRlX2FycmF5X2VsZW1lbnQoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwg aW50IG5kaW0sIEpzVmFsdWUgKmpzdik7CitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9hcnJheV9hc3Np Z25fbmRpbXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW1zKTsKK3N0YXRpYyBi b29sIHBvcHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihQb3B1bGF0ZUFycmF5Q29udGV4dCAq Y3R4LCBpbnQgbmRpbSk7CitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9hcnJheV9lbGVtZW50KFBvcHVs YXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltLCBKc1ZhbHVlICpqc3YpOwogc3RhdGljIERh dHVtIHBvcHVsYXRlX2FycmF5KEFycmF5SU9EYXRhICphaW8sIGNvbnN0IGNoYXIgKmNvbG5hbWUs Ci0JCQkJCQkJTWVtb3J5Q29udGV4dCBtY3h0LCBKc1ZhbHVlICpqc3YpOworCQkJCQkJCU1lbW9y eUNvbnRleHQgbWN4dCwgSnNWYWx1ZSAqanN2LAorCQkJCQkJCWJvb2wgKmlzbnVsbCwKKwkJCQkJ CQlOb2RlICplc2NvbnRleHQpOwogc3RhdGljIERhdHVtIHBvcHVsYXRlX2RvbWFpbihEb21haW5J T0RhdGEgKmlvLCBPaWQgdHlwaWQsIGNvbnN0IGNoYXIgKmNvbG5hbWUsCi0JCQkJCQkJIE1lbW9y eUNvbnRleHQgbWN4dCwgSnNWYWx1ZSAqanN2LCBib29sIGlzbnVsbCk7CisJCQkJCQkJIE1lbW9y eUNvbnRleHQgbWN4dCwgSnNWYWx1ZSAqanN2LCBib29sIGlzbnVsbCwKKwkJCQkJCQkgTm9kZSAq ZXNjb250ZXh0KTsKIAogLyogZnVuY3Rpb25zIHN1cHBvcnRpbmcganNvbmJfZGVsZXRlLCBqc29u Yl9zZXQgYW5kIGpzb25iX2NvbmNhdCAqLwogc3RhdGljIEpzb25iVmFsdWUgKkl0ZXJhdG9yQ29u Y2F0KEpzb25iSXRlcmF0b3IgKippdDEsIEpzb25iSXRlcmF0b3IgKippdDIsCkBAIC0yNDg0LDE0 ICsyNDkxLDE1IEBAIHBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShQb3B1bGF0 ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSkKIAlpZiAobmRpbSA8PSAwKQogCXsKIAkJaWYg KGN0eC0+Y29sbmFtZSkKLQkJCWVyZXBvcnQoRVJST1IsCisJCQllcnJzYXZlKGN0eC0+ZXNjb250 ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiks CiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gYXJyYXkiKSwKIAkJCQkJIGVycmhpbnQoIlNl ZSB0aGUgdmFsdWUgb2Yga2V5IFwiJXNcIi4iLCBjdHgtPmNvbG5hbWUpKSk7CiAJCWVsc2UKLQkJ CWVyZXBvcnQoRVJST1IsCisJCQllcnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gYXJyYXkiKSkpOworCQlyZXR1cm47CiAJfQogCWVsc2UKIAl7CkBAIC0yNTA2 LDIyICsyNTE0LDI4IEBAIHBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShQb3B1 bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSkKIAkJCWFwcGVuZFN0cmluZ0luZm8oJmlu ZGljZXMsICJbJWRdIiwgY3R4LT5zaXplc1tpXSk7CiAKIAkJaWYgKGN0eC0+Y29sbmFtZSkKLQkJ CWVyZXBvcnQoRVJST1IsCisJCQllcnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gYXJyYXkiKSwKIAkJCQkJIGVycmhpbnQoIlNlZSB0aGUgYXJyYXkgZWxlbWVu dCAlcyBvZiBrZXkgXCIlc1wiLiIsCiAJCQkJCQkJIGluZGljZXMuZGF0YSwgY3R4LT5jb2xuYW1l KSkpOwogCQllbHNlCi0JCQllcmVwb3J0KEVSUk9SLAorCQkJZXJyc2F2ZShjdHgtPmVzY29udGV4 dCwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAog CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIGFycmF5IiksCiAJCQkJCSBlcnJoaW50KCJTZWUg dGhlIGFycmF5IGVsZW1lbnQgJXMuIiwKIAkJCQkJCQkgaW5kaWNlcy5kYXRhKSkpOworCQlyZXR1 cm47CiAJfQogfQogCi0vKiBzZXQgdGhlIG51bWJlciBvZiBkaW1lbnNpb25zIG9mIHRoZSBwb3B1 bGF0ZWQgYXJyYXkgd2hlbiBpdCBiZWNvbWVzIGtub3duICovCi1zdGF0aWMgdm9pZAorLyoKKyAq IFZhbGlkYXRlIGFuZCBzZXQgbmRpbXMgZm9yIHBvcHVsYXRpbmcgYW4gYXJyYXkgd2l0aCBzb21l CisgKiBwb3B1bGF0ZV9hcnJheV8qKCkgZnVuY3Rpb24uCisgKgorICogUmV0dXJucyBmYWxzZSBp ZiB0aGUgaW5wdXQgKG5kaW1zKSBpcyBlcnJvbmVvdXMuCisgKi8KK3N0YXRpYyBib29sCiBwb3B1 bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5k aW1zKQogewogCWludAkJCWk7CkBAIC0yNTI5LDcgKzI1NDMsMTIgQEAgcG9wdWxhdGVfYXJyYXlf YXNzaWduX25kaW1zKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltcykKIAlBc3Nl cnQoY3R4LT5uZGltcyA8PSAwKTsKIAogCWlmIChuZGltcyA8PSAwKQorCXsKIAkJcG9wdWxhdGVf YXJyYXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5KGN0eCwgbmRpbXMpOworCQkvKiBHZXR0aW5nIGhl cmUgbWVhbnMgdGhlIGVycm9yIHdhcyByZXBvcnRlZCBzb2Z0bHkuICovCisJCUFzc2VydChTT0ZU X0VSUk9SX09DQ1VSUkVEKGN0eC0+ZXNjb250ZXh0KSk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAK IAljdHgtPm5kaW1zID0gbmRpbXM7CiAJY3R4LT5kaW1zID0gcGFsbG9jKHNpemVvZihpbnQpICog bmRpbXMpOwpAQCAtMjUzNywxMCArMjU1NiwxNiBAQCBwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRp bXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW1zKQogCiAJZm9yIChpID0gMDsg aSA8IG5kaW1zOyBpKyspCiAJCWN0eC0+ZGltc1tpXSA9IC0xOwkJLyogZGltZW5zaW9ucyBhcmUg dW5rbm93biB5ZXQgKi8KKworCXJldHVybiB0cnVlOwogfQogCi0vKiBjaGVjayB0aGUgcG9wdWxh dGVkIHN1YmFycmF5IGRpbWVuc2lvbiAqLwotc3RhdGljIHZvaWQKKy8qCisgKiBDaGVjayB0aGUg cG9wdWxhdGVkIHN1YmFycmF5IGRpbWVuc2lvbgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgdGhl IGlucHV0IChuZGltcykgaXMgZXJyb25lb3VzLgorICovCitzdGF0aWMgYm9vbAogcG9wdWxhdGVf YXJyYXlfY2hlY2tfZGltZW5zaW9uKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGlt KQogewogCWludAkJCWRpbSA9IGN0eC0+c2l6ZXNbbmRpbV07IC8qIGN1cnJlbnQgZGltZW5zaW9u IGNvdW50ZXIgKi8KQEAgLTI1NDgsMjEgKzI1NzMsMzEgQEAgcG9wdWxhdGVfYXJyYXlfY2hlY2tf ZGltZW5zaW9uKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKQogCWlmIChjdHgt PmRpbXNbbmRpbV0gPT0gLTEpCiAJCWN0eC0+ZGltc1tuZGltXSA9IGRpbTsJLyogYXNzaWduIGRp bWVuc2lvbiBpZiBub3QgeWV0IGtub3duICovCiAJZWxzZSBpZiAoY3R4LT5kaW1zW25kaW1dICE9 IGRpbSkKLQkJZXJlcG9ydChFUlJPUiwKKwkJZXJyc2F2ZShjdHgtPmVzY29udGV4dCwKIAkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJIGVycm1z ZygibWFsZm9ybWVkIEpTT04gYXJyYXkiKSwKIAkJCQkgZXJyZGV0YWlsKCJNdWx0aWRpbWVuc2lv bmFsIGFycmF5cyBtdXN0IGhhdmUgIgogCQkJCQkJICAgInN1Yi1hcnJheXMgd2l0aCBtYXRjaGlu ZyBkaW1lbnNpb25zLiIpKSk7CiAKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIGFuIGVycm9yLiAqLwor CWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKGN0eC0+ZXNjb250ZXh0KSkKKwkJcmV0dXJuIGZhbHNl OworCiAJLyogcmVzZXQgdGhlIGN1cnJlbnQgYXJyYXkgZGltZW5zaW9uIHNpemUgY291bnRlciAq LwogCWN0eC0+c2l6ZXNbbmRpbV0gPSAwOwogCiAJLyogaW5jcmVtZW50IHRoZSBwYXJlbnQgZGlt ZW5zaW9uIGNvdW50ZXIgaWYgaXQgaXMgYSBuZXN0ZWQgc3ViLWFycmF5ICovCiAJaWYgKG5kaW0g PiAwKQogCQljdHgtPnNpemVzW25kaW0gLSAxXSsrOworCisJcmV0dXJuIHRydWU7CiB9CiAKLXN0 YXRpYyB2b2lkCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBhcnJheSBlbGVtZW50IHZhbHVl IHdhcyBzdWNjZXNzZnVsbHkgZXh0cmFjdGVkIGZyb20ganN2CisgKiBhbmQgYWRkZWQgdG8gY3R4 LT5hc3RhdGUuICBGYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGVuIGRvaW5nIHNvLgorICov CitzdGF0aWMgYm9vbAogcG9wdWxhdGVfYXJyYXlfZWxlbWVudChQb3B1bGF0ZUFycmF5Q29udGV4 dCAqY3R4LCBpbnQgbmRpbSwgSnNWYWx1ZSAqanN2KQogewogCURhdHVtCQllbGVtZW50OwpAQCAt MjU3MywxMyArMjYwOCwxOCBAQCBwb3B1bGF0ZV9hcnJheV9lbGVtZW50KFBvcHVsYXRlQXJyYXlD b250ZXh0ICpjdHgsIGludCBuZGltLCBKc1ZhbHVlICpqc3YpCiAJCQkJCQkJCQljdHgtPmFpby0+ ZWxlbWVudF90eXBlLAogCQkJCQkJCQkJY3R4LT5haW8tPmVsZW1lbnRfdHlwbW9kLAogCQkJCQkJ CQkJTlVMTCwgY3R4LT5tY3h0LCBQb2ludGVyR2V0RGF0dW0oTlVMTCksCi0JCQkJCQkJCQlqc3Ys ICZlbGVtZW50X2lzbnVsbCk7CisJCQkJCQkJCQlqc3YsICZlbGVtZW50X2lzbnVsbCwgY3R4LT5l c2NvbnRleHQpOworCS8qIE5vdGhpbmcgdG8gZG8gb24gYW4gZXJyb3IuICovCisJaWYgKFNPRlRf RVJST1JfT0NDVVJSRUQoY3R4LT5lc2NvbnRleHQpKQorCQlyZXR1cm4gZmFsc2U7CiAKIAlhY2N1 bUFycmF5UmVzdWx0KGN0eC0+YXN0YXRlLCBlbGVtZW50LCBlbGVtZW50X2lzbnVsbCwKIAkJCQkJ IGN0eC0+YWlvLT5lbGVtZW50X3R5cGUsIGN0eC0+YWN4dCk7CiAKIAlBc3NlcnQobmRpbSA+IDAp OwogCWN0eC0+c2l6ZXNbbmRpbSAtIDFdKys7CQkvKiBpbmNyZW1lbnQgY3VycmVudCBkaW1lbnNp b24gY291bnRlciAqLworCisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIGpzb24gb2JqZWN0IHN0YXJ0 IGhhbmRsZXIgZm9yIHBvcHVsYXRlX2FycmF5X2pzb24oKSAqLwpAQCAtMjU5MCw5ICsyNjMwLDE3 IEBAIHBvcHVsYXRlX2FycmF5X29iamVjdF9zdGFydCh2b2lkICpfc3RhdGUpCiAJaW50CQkJbmRp bSA9IHN0YXRlLT5sZXgtPmxleF9sZXZlbDsKIAogCWlmIChzdGF0ZS0+Y3R4LT5uZGltcyA8PSAw KQotCQlwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoc3RhdGUtPmN0eCwgbmRpbSk7CisJewor CQlpZiAoIXBvcHVsYXRlX2FycmF5X2Fzc2lnbl9uZGltcyhzdGF0ZS0+Y3R4LCBuZGltKSkKKwkJ CXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworCX0KIAllbHNlIGlmIChuZGltIDwgc3Rh dGUtPmN0eC0+bmRpbXMpCisJewogCQlwb3B1bGF0ZV9hcnJheV9yZXBvcnRfZXhwZWN0ZWRfYXJy YXkoc3RhdGUtPmN0eCwgbmRpbSk7CisJCS8qIEdldHRpbmcgaGVyZSBtZWFucyB0aGUgZXJyb3Ig d2FzIHJlcG9ydGVkIHNvZnRseS4gKi8KKwkJQXNzZXJ0KFNPRlRfRVJST1JfT0NDVVJSRUQoc3Rh dGUtPmN0eC0+ZXNjb250ZXh0KSk7CisJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOwor CX0KIAogCXJldHVybiBKU09OX1NVQ0NFU1M7CiB9CkBAIC0yNjA2LDEwICsyNjU0LDE3IEBAIHBv cHVsYXRlX2FycmF5X2FycmF5X2VuZCh2b2lkICpfc3RhdGUpCiAJaW50CQkJbmRpbSA9IHN0YXRl LT5sZXgtPmxleF9sZXZlbDsKIAogCWlmIChjdHgtPm5kaW1zIDw9IDApCi0JCXBvcHVsYXRlX2Fy cmF5X2Fzc2lnbl9uZGltcyhjdHgsIG5kaW0gKyAxKTsKKwl7CisJCWlmICghcG9wdWxhdGVfYXJy YXlfYXNzaWduX25kaW1zKGN0eCwgbmRpbSArIDEpKQorCQkJcmV0dXJuIEpTT05fU0VNX0FDVElP Tl9GQUlMRUQ7CisJfQogCiAJaWYgKG5kaW0gPCBjdHgtPm5kaW1zKQotCQlwb3B1bGF0ZV9hcnJh eV9jaGVja19kaW1lbnNpb24oY3R4LCBuZGltKTsKKwl7CisJCS8qIFJlcG9ydCBpZiBhbiBlcnJv ciBvY2N1cnJlZC4gKi8KKwkJaWYgKCFwb3B1bGF0ZV9hcnJheV9jaGVja19kaW1lbnNpb24oY3R4 LCBuZGltKSkKKwkJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworCX0KIAogCXJldHVy biBKU09OX1NVQ0NFU1M7CiB9CkBAIC0yNjY3LDcgKzI3MjIsOSBAQCBwb3B1bGF0ZV9hcnJheV9l bGVtZW50X2VuZCh2b2lkICpfc3RhdGUsIGJvb2wgaXNudWxsKQogCQkJCQkJCQlzdGF0ZS0+ZWxl bWVudF9zdGFydCkgKiBzaXplb2YoY2hhcik7CiAJCX0KIAotCQlwb3B1bGF0ZV9hcnJheV9lbGVt ZW50KGN0eCwgbmRpbSwgJmpzdik7CisJCS8qIFJlcG9ydCBpZiBhbiBlcnJvciBvY2N1cnJlZC4g Ki8KKwkJaWYgKCFwb3B1bGF0ZV9hcnJheV9lbGVtZW50KGN0eCwgbmRpbSwgJmpzdikpCisJCQly ZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKIAl9CiAKIAlyZXR1cm4gSlNPTl9TVUNDRVNT OwpAQCAtMjY4Miw5ICsyNzM5LDE3IEBAIHBvcHVsYXRlX2FycmF5X3NjYWxhcih2b2lkICpfc3Rh dGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSkKIAlpbnQJCQluZGltID0g c3RhdGUtPmxleC0+bGV4X2xldmVsOwogCiAJaWYgKGN0eC0+bmRpbXMgPD0gMCkKLQkJcG9wdWxh dGVfYXJyYXlfYXNzaWduX25kaW1zKGN0eCwgbmRpbSk7CisJeworCQlpZiAoIXBvcHVsYXRlX2Fy cmF5X2Fzc2lnbl9uZGltcyhjdHgsIG5kaW0pKQorCQkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisJfQogCWVsc2UgaWYgKG5kaW0gPCBjdHgtPm5kaW1zKQorCXsKIAkJcG9wdWxhdGVf YXJyYXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5KGN0eCwgbmRpbSk7CisJCS8qIEdldHRpbmcgaGVy ZSBtZWFucyB0aGUgZXJyb3Igd2FzIHJlcG9ydGVkIHNvZnRseS4gKi8KKwkJQXNzZXJ0KFNPRlRf RVJST1JfT0NDVVJSRUQoY3R4LT5lc2NvbnRleHQpKTsKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElP Tl9GQUlMRUQ7CisJfQogCiAJaWYgKG5kaW0gPT0gY3R4LT5uZGltcykKIAl7CkBAIC0yNjk3LDgg KzI3NjIsMTIgQEAgcG9wdWxhdGVfYXJyYXlfc2NhbGFyKHZvaWQgKl9zdGF0ZSwgY2hhciAqdG9r ZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKQogCXJldHVybiBKU09OX1NVQ0NFU1M7CiB9CiAK LS8qIHBhcnNlIGEganNvbiBhcnJheSBhbmQgcG9wdWxhdGUgYXJyYXkgKi8KLXN0YXRpYyB2b2lk CisvKgorICogUGFyc2UgYSBqc29uIGFycmF5IGFuZCBwb3B1bGF0ZSBhcnJheQorICoKKyAqIFJl dHVybnMgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gcGFyc2luZy4KKyAqLworc3RhdGlj IGJvb2wKIHBvcHVsYXRlX2FycmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgY2hh ciAqanNvbiwgaW50IGxlbikKIHsKIAlQb3B1bGF0ZUFycmF5U3RhdGUgc3RhdGU7CkBAIC0yNzE2 LDE5ICsyNzg1LDI1IEBAIHBvcHVsYXRlX2FycmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRleHQg KmN0eCwgY2hhciAqanNvbiwgaW50IGxlbikKIAlzZW0uYXJyYXlfZWxlbWVudF9lbmQgPSBwb3B1 bGF0ZV9hcnJheV9lbGVtZW50X2VuZDsKIAlzZW0uc2NhbGFyID0gcG9wdWxhdGVfYXJyYXlfc2Nh bGFyOwogCi0JcGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KHN0YXRlLmxleCwgJnNlbSk7Ci0KLQkv KiBudW1iZXIgb2YgZGltZW5zaW9ucyBzaG91bGQgYmUgYWxyZWFkeSBrbm93biAqLwotCUFzc2Vy dChjdHgtPm5kaW1zID4gMCAmJiBjdHgtPmRpbXMpOworCWlmIChwZ19wYXJzZV9qc29uX29yX2Vy cnNhdmUoc3RhdGUubGV4LCAmc2VtLCBjdHgtPmVzY29udGV4dCkpCisJeworCQkvKiBudW1iZXIg b2YgZGltZW5zaW9ucyBzaG91bGQgYmUgYWxyZWFkeSBrbm93biAqLworCQlBc3NlcnQoY3R4LT5u ZGltcyA+IDAgJiYgY3R4LT5kaW1zKTsKKwl9CiAKIAlmcmVlSnNvbkxleENvbnRleHQoc3RhdGUu bGV4KTsKKworCXJldHVybiAhU09GVF9FUlJPUl9PQ0NVUlJFRChjdHgtPmVzY29udGV4dCk7CiB9 CiAKIC8qCiAgKiBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoKSAtLSBJdGVyYXRlIHJlY3Vyc2l2 ZWx5IHRocm91Z2gganNvbmIgc3ViLWFycmF5CiAgKgkJZWxlbWVudHMgYW5kIGFjY3VtdWxhdGUg cmVzdWx0IHVzaW5nIGdpdmVuIEFycmF5QnVpbGRTdGF0ZS4KKyAqCisgKiBSZXR1cm5zIGZhbHNl IGlmIHdlIHJldHVybiBwYXJ0d2F5IHRocm91Z2ggYmVjYXVzZSBvZiBhbiBlcnJvciBpbiBhCisg KiBzdWJyb3V0aW5lLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGJvb2wKIHBvcHVsYXRlX2Fy cmF5X2RpbV9qc29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCAvKiBjb250ZXh0ICovCiAJ CQkJCQkgSnNvbmJWYWx1ZSAqamJ2LAkvKiBqc29uYiBzdWItYXJyYXkgKi8KIAkJCQkJCSBpbnQg bmRpbSkJLyogY3VycmVudCBkaW1lbnNpb24gKi8KQEAgLTI3NDEsMTAgKzI4MTYsMTQgQEAgcG9w dWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIC8qIGNvbnRl eHQgKi8KIAogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CiAKLQlpZiAoamJ2LT50eXBlICE9IGpidkJp bmFyeSB8fCAhSnNvbkNvbnRhaW5lcklzQXJyYXkoamJjKSkKKwlpZiAoamJ2LT50eXBlICE9IGpi dkJpbmFyeSB8fCAhSnNvbkNvbnRhaW5lcklzQXJyYXkoamJjKSB8fAorCQlKc29uQ29udGFpbmVy SXNTY2FsYXIoamJjKSkKKwl7CiAJCXBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJh eShjdHgsIG5kaW0gLSAxKTsKLQotCUFzc2VydCghSnNvbkNvbnRhaW5lcklzU2NhbGFyKGpiYykp OworCQkvKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGVycm9yIHdhcyByZXBvcnRlZCBzb2Z0bHku ICovCisJCUFzc2VydChTT0ZUX0VSUk9SX09DQ1VSUkVEKGN0eC0+ZXNjb250ZXh0KSk7CisJCXJl dHVybiBmYWxzZTsKKwl9CiAKIAlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGpiYyk7CiAKQEAgLTI3 NjMsNyArMjg0MiwxMCBAQCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNv bnRleHQgKmN0eCwgLyogY29udGV4dCAqLwogCQkgKHRvayA9PSBXSkJfRUxFTSAmJgogCQkgICh2 YWwudHlwZSAhPSBqYnZCaW5hcnkgfHwKIAkJICAgIUpzb25Db250YWluZXJJc0FycmF5KHZhbC52 YWwuYmluYXJ5LmRhdGEpKSkpKQotCQlwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoY3R4LCBu ZGltKTsKKwl7CisJCWlmICghcG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKGN0eCwgbmRpbSkp CisJCQlyZXR1cm4gZmFsc2U7CisJfQogCiAJanN2LmlzX2pzb24gPSBmYWxzZTsKIAlqc3YudmFs Lmpzb25iID0gJnZhbDsKQEAgLTI3NzYsMTYgKzI4NTgsMjEgQEAgcG9wdWxhdGVfYXJyYXlfZGlt X2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIC8qIGNvbnRleHQgKi8KIAkJICogaXQg aXMgbm90IHRoZSBpbm5lcm1vc3QgZGltZW5zaW9uLgogCQkgKi8KIAkJaWYgKGN0eC0+bmRpbXMg PiAwICYmIG5kaW0gPj0gY3R4LT5uZGltcykKLQkJCXBvcHVsYXRlX2FycmF5X2VsZW1lbnQoY3R4 LCBuZGltLCAmanN2KTsKKwkJeworCQkJaWYgKCFwb3B1bGF0ZV9hcnJheV9lbGVtZW50KGN0eCwg bmRpbSwgJmpzdikpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CiAJCWVsc2UKIAkJewogCQkJLyog cG9wdWxhdGUgY2hpbGQgc3ViLWFycmF5ICovCi0JCQlwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIo Y3R4LCAmdmFsLCBuZGltICsgMSk7CisJCQlpZiAoIXBvcHVsYXRlX2FycmF5X2RpbV9qc29uYihj dHgsICZ2YWwsIG5kaW0gKyAxKSkKKwkJCQlyZXR1cm4gZmFsc2U7CiAKIAkJCS8qIG51bWJlciBv ZiBkaW1lbnNpb25zIHNob3VsZCBiZSBhbHJlYWR5IGtub3duICovCiAJCQlBc3NlcnQoY3R4LT5u ZGltcyA+IDAgJiYgY3R4LT5kaW1zKTsKIAotCQkJcG9wdWxhdGVfYXJyYXlfY2hlY2tfZGltZW5z aW9uKGN0eCwgbmRpbSk7CisJCQlpZiAoIXBvcHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihj dHgsIG5kaW0pKQorCQkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCXRvayA9IEpzb25iSXRlcmF0 b3JOZXh0KCZpdCwgJnZhbCwgdHJ1ZSk7CkBAIC0yNzk2LDE0ICsyODgzLDIyIEBAIHBvcHVsYXRl X2FycmF5X2RpbV9qc29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCAvKiBjb250ZXh0ICov CiAJLyogZnJlZSBpdGVyYXRvciwgaXRlcmF0aW5nIHVudGlsIFdKQl9ET05FICovCiAJdG9rID0g SnNvbmJJdGVyYXRvck5leHQoJml0LCAmdmFsLCB0cnVlKTsKIAlBc3NlcnQodG9rID09IFdKQl9E T05FICYmICFpdCk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogcmVjdXJzaXZlbHkgcG9wdWxh dGUgYW4gYXJyYXkgZnJvbSBqc29uL2pzb25iICovCisvKgorICogUmVjdXJzaXZlbHkgcG9wdWxh dGUgYW4gYXJyYXkgZnJvbSBqc29uL2pzb25iCisgKgorICogKmlzbnVsbCBpcyBzZXQgdG8gdHJ1 ZSBpZiBhbiBlcnJvciBpcyByZXBvcnRlZCBkdXJpbmcgcGFyc2luZy4KKyAqLwogc3RhdGljIERh dHVtCiBwb3B1bGF0ZV9hcnJheShBcnJheUlPRGF0YSAqYWlvLAogCQkJICAgY29uc3QgY2hhciAq Y29sbmFtZSwKIAkJCSAgIE1lbW9yeUNvbnRleHQgbWN4dCwKLQkJCSAgIEpzVmFsdWUgKmpzdikK KwkJCSAgIEpzVmFsdWUgKmpzdiwKKwkJCSAgIGJvb2wgKmlzbnVsbCwKKwkJCSAgIE5vZGUgKmVz Y29udGV4dCkKIHsKIAlQb3B1bGF0ZUFycmF5Q29udGV4dCBjdHg7CiAJRGF0dW0JCXJlc3VsdDsK QEAgLTI4MTgsMTQgKzI5MTMsMjcgQEAgcG9wdWxhdGVfYXJyYXkoQXJyYXlJT0RhdGEgKmFpbywK IAljdHgubmRpbXMgPSAwOwkJCQkvKiB1bmtub3duIHlldCAqLwogCWN0eC5kaW1zID0gTlVMTDsK IAljdHguc2l6ZXMgPSBOVUxMOworCWN0eC5lc2NvbnRleHQgPSBlc2NvbnRleHQ7CiAKIAlpZiAo anN2LT5pc19qc29uKQotCQlwb3B1bGF0ZV9hcnJheV9qc29uKCZjdHgsIGpzdi0+dmFsLmpzb24u c3RyLAotCQkJCQkJCWpzdi0+dmFsLmpzb24ubGVuID49IDAgPyBqc3YtPnZhbC5qc29uLmxlbgot CQkJCQkJCTogc3RybGVuKGpzdi0+dmFsLmpzb24uc3RyKSk7CisJeworCQkvKiBSZXR1cm4gbnVs bCBpZiBhbiBlcnJvciB3YXMgZm91bmQuICovCisJCWlmICghcG9wdWxhdGVfYXJyYXlfanNvbigm Y3R4LCBqc3YtPnZhbC5qc29uLnN0ciwKKwkJCQkJCQkJIGpzdi0+dmFsLmpzb24ubGVuID49IDAg PyBqc3YtPnZhbC5qc29uLmxlbgorCQkJCQkJCQkgOiBzdHJsZW4oanN2LT52YWwuanNvbi5zdHIp KSkKKwkJeworCQkJKmlzbnVsbCA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJ fQogCWVsc2UKIAl7Ci0JCXBvcHVsYXRlX2FycmF5X2RpbV9qc29uYigmY3R4LCBqc3YtPnZhbC5q c29uYiwgMSk7CisJCS8qIFJldHVybiBudWxsIGlmIGFuIGVycm9yIHdhcyBmb3VuZC4gKi8KKwkJ aWYgKCFwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoJmN0eCwganN2LT52YWwuanNvbmIsIDEpKQor CQl7CisJCQkqaXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KIAkJY3R4 LmRpbXNbMF0gPSBjdHguc2l6ZXNbMF07CiAJfQogCkBAIC0yODQzLDExICsyOTUxLDE2IEBAIHBv cHVsYXRlX2FycmF5KEFycmF5SU9EYXRhICphaW8sCiAJcGZyZWUoY3R4LnNpemVzKTsKIAlwZnJl ZShsYnMpOwogCisJKmlzbnVsbCA9IGZhbHNlOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp YyB2b2lkCi1Kc1ZhbHVlVG9Kc09iamVjdChKc1ZhbHVlICpqc3YsIEpzT2JqZWN0ICpqc28pCisv KgorICogUmV0dXJucyBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnMsIHByb3ZpZGVkIGVzY29udGV4 dCBwb2ludHMgdG8gYW4KKyAqIEVycm9yU2F2ZUNvbnRleHQuCisgKi8KK3N0YXRpYyBib29sCitK c1ZhbHVlVG9Kc09iamVjdChKc1ZhbHVlICpqc3YsIEpzT2JqZWN0ICpqc28sIE5vZGUgKmVzY29u dGV4dCkKIHsKIAlqc28tPmlzX2pzb24gPSBqc3YtPmlzX2pzb247CiAKQEAgLTI4NTksNyArMjk3 Miw5IEBAIEpzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUgKmpzdiwgSnNPYmplY3QgKmpzbykKIAkJ CQkJCQkJCWpzdi0+dmFsLmpzb24ubGVuID49IDAKIAkJCQkJCQkJCT8ganN2LT52YWwuanNvbi5s ZW4KIAkJCQkJCQkJCTogc3RybGVuKGpzdi0+dmFsLmpzb24uc3RyKSwKLQkJCQkJCQkJCSJwb3B1 bGF0ZV9jb21wb3NpdGUiKTsKKwkJCQkJCQkJCSJwb3B1bGF0ZV9jb21wb3NpdGUiLAorCQkJCQkJ CQkJZXNjb250ZXh0KTsKKwkJQXNzZXJ0KGpzby0+dmFsLmpzb25faGFzaCAhPSBOVUxMIHx8IFNP RlRfRVJST1JfT0NDVVJSRUQoZXNjb250ZXh0KSk7CiAJfQogCWVsc2UKIAl7CkBAIC0yODc3LDcg KzI5OTIsNyBAQCBKc1ZhbHVlVG9Kc09iamVjdChKc1ZhbHVlICpqc3YsIEpzT2JqZWN0ICpqc28p CiAJCQlpc19zY2FsYXIgPSBJc0FKc29uYlNjYWxhcihqYnYpIHx8CiAJCQkJKGpidi0+dHlwZSA9 PSBqYnZCaW5hcnkgJiYKIAkJCQkgSnNvbkNvbnRhaW5lcklzU2NhbGFyKGpidi0+dmFsLmJpbmFy eS5kYXRhKSk7Ci0JCQllcmVwb3J0KEVSUk9SLAorCQkJZXJyc2F2ZShlc2NvbnRleHQsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgaXNfc2Nh bGFyCiAJCQkJCSA/IGVycm1zZygiY2Fubm90IGNhbGwgJXMgb24gYSBzY2FsYXIiLApAQCAtMjg4 Niw2ICszMDAxLDggQEAgSnNWYWx1ZVRvSnNPYmplY3QoSnNWYWx1ZSAqanN2LCBKc09iamVjdCAq anNvKQogCQkJCQkJCSAgInBvcHVsYXRlX2NvbXBvc2l0ZSIpKSk7CiAJCX0KIAl9CisKKwlyZXR1 cm4gIVNPRlRfRVJST1JfT0NDVVJSRUQoZXNjb250ZXh0KTsKIH0KIAogLyogYWNxdWlyZSBvciB1 cGRhdGUgY2FjaGVkIHR1cGxlIGRlc2NyaXB0b3IgZm9yIGEgY29tcG9zaXRlIHR5cGUgKi8KQEAg LTI5MTIsNyArMzAyOSwxMiBAQCB1cGRhdGVfY2FjaGVkX3R1cGRlc2MoQ29tcG9zaXRlSU9EYXRh ICppbywgTWVtb3J5Q29udGV4dCBtY3h0KQogCX0KIH0KIAotLyogcmVjdXJzaXZlbHkgcG9wdWxh dGUgYSBjb21wb3NpdGUgKHJvdyB0eXBlKSB2YWx1ZSBmcm9tIGpzb24vanNvbmIgKi8KKy8qCisg KiBSZWN1cnNpdmVseSBwb3B1bGF0ZSBhIGNvbXBvc2l0ZSAocm93IHR5cGUpIHZhbHVlIGZyb20g anNvbi9qc29uYgorICoKKyAqIFJldHVybnMgbnVsbCBpZiBhbiBlcnJvciBvY2N1cnMgaW4gYSBz dWJyb3V0aW5lLCBwcm92aWRlZCBlc2NvbnRleHQgcG9pbnRzCisgKiB0byBhbiBFcnJvclNhdmVD b250ZXh0LgorICovCiBzdGF0aWMgRGF0dW0KIHBvcHVsYXRlX2NvbXBvc2l0ZShDb21wb3NpdGVJ T0RhdGEgKmlvLAogCQkJCSAgIE9pZCB0eXBpZCwKQEAgLTI5MjAsMTQgKzMwNDIsMTUgQEAgcG9w dWxhdGVfY29tcG9zaXRlKENvbXBvc2l0ZUlPRGF0YSAqaW8sCiAJCQkJICAgTWVtb3J5Q29udGV4 dCBtY3h0LAogCQkJCSAgIEhlYXBUdXBsZUhlYWRlciBkZWZhdWx0dmFsLAogCQkJCSAgIEpzVmFs dWUgKmpzdiwKLQkJCQkgICBib29sIGlzbnVsbCkKKwkJCQkgICBib29sICppc251bGwsCisJCQkJ ICAgTm9kZSAqZXNjb250ZXh0KQogewogCURhdHVtCQlyZXN1bHQ7CiAKIAkvKiBhY3F1aXJlL3Vw ZGF0ZSBjYWNoZWQgdHVwbGUgZGVzY3JpcHRvciAqLwogCXVwZGF0ZV9jYWNoZWRfdHVwZGVzYyhp bywgbWN4dCk7CiAKLQlpZiAoaXNudWxsKQorCWlmICgqaXNudWxsKQogCQlyZXN1bHQgPSAoRGF0 dW0pIDA7CiAJZWxzZQogCXsKQEAgLTI5MzUsMTEgKzMwNTgsMjEgQEAgcG9wdWxhdGVfY29tcG9z aXRlKENvbXBvc2l0ZUlPRGF0YSAqaW8sCiAJCUpzT2JqZWN0CWpzbzsKIAogCQkvKiBwcmVwYXJl IGlucHV0IHZhbHVlICovCi0JCUpzVmFsdWVUb0pzT2JqZWN0KGpzdiwgJmpzbyk7CisJCWlmICgh SnNWYWx1ZVRvSnNPYmplY3QoanN2LCAmanNvLCBlc2NvbnRleHQpKQorCQl7CisJCQkqaXNudWxs ID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KIAogCQkvKiBwb3B1bGF0ZSByZXN1 bHRpbmcgcmVjb3JkIHR1cGxlICovCiAJCXR1cGxlID0gcG9wdWxhdGVfcmVjb3JkKGlvLT50dXBk ZXNjLCAmaW8tPnJlY29yZF9pbywKLQkJCQkJCQkJZGVmYXVsdHZhbCwgbWN4dCwgJmpzbyk7CisJ CQkJCQkJCWRlZmF1bHR2YWwsIG1jeHQsICZqc28sIGVzY29udGV4dCk7CisKKwkJaWYgKFNPRlRf RVJST1JfT0NDVVJSRUQoZXNjb250ZXh0KSkKKwkJeworCQkJKmlzbnVsbCA9IHRydWU7CisJCQly ZXR1cm4gKERhdHVtKSAwOworCQl9CiAJCXJlc3VsdCA9IEhlYXBUdXBsZUhlYWRlckdldERhdHVt KHR1cGxlKTsKIAogCQlKc09iamVjdEZyZWUoJmpzbyk7CkBAIC0yOTUxLDE0ICszMDg0LDIwIEBA IHBvcHVsYXRlX2NvbXBvc2l0ZShDb21wb3NpdGVJT0RhdGEgKmlvLAogCSAqIG5vdywgd2UgY2Fu IHRlbGwgYnkgY29tcGFyaW5nIHR5cGlkIHRvIGJhc2VfdHlwaWQuKQogCSAqLwogCWlmICh0eXBp ZCAhPSBpby0+YmFzZV90eXBpZCAmJiB0eXBpZCAhPSBSRUNPUkRPSUQpCi0JCWRvbWFpbl9jaGVj ayhyZXN1bHQsIGlzbnVsbCwgdHlwaWQsICZpby0+ZG9tYWluX2luZm8sIG1jeHQpOworCQlkb21h aW5fY2hlY2socmVzdWx0LCAqaXNudWxsLCB0eXBpZCwgJmlvLT5kb21haW5faW5mbywgbWN4dCk7 CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0vKiBwb3B1bGF0ZSBub24tbnVsbCBzY2FsYXIgdmFs dWUgZnJvbSBqc29uL2pzb25iIHZhbHVlICovCisvKgorICogUG9wdWxhdGUgbm9uLW51bGwgc2Nh bGFyIHZhbHVlIGZyb20ganNvbi9qc29uYiB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zIG51bGwgaWYg YW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgY2FsbCB0byB0eXBlIGlucHV0IGZ1bmN0aW9uLAor ICogcHJvdmlkZWQgZXNjb250ZXh0IGlzIHZhbGlkLgorICovCiBzdGF0aWMgRGF0dW0KLXBvcHVs YXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNW YWx1ZSAqanN2KQorcG9wdWxhdGVfc2NhbGFyKFNjYWxhcklPRGF0YSAqaW8sIE9pZCB0eXBpZCwg aW50MzIgdHlwbW9kLCBKc1ZhbHVlICpqc3YsCisJCQkJYm9vbCAqaXNudWxsLCBOb2RlICplc2Nv bnRleHQpCiB7CiAJRGF0dW0JCXJlczsKIAljaGFyCSAgICpzdHIgPSBOVUxMOwpAQCAtMzAyOSw3 ICszMTY4LDEyIEBAIHBvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlwaWQs IGludDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2KQogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBqc29uYiB0eXBlOiAlZCIsIChpbnQpIGpidi0+dHlwZSk7CiAJfQogCi0JcmVzID0gSW5wdXRG dW5jdGlvbkNhbGwoJmlvLT50eXBpb2Z1bmMsIHN0ciwgaW8tPnR5cGlvcGFyYW0sIHR5cG1vZCk7 CisJaWYgKCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmlvLT50eXBpb2Z1bmMsIHN0ciwgaW8tPnR5 cGlvcGFyYW0sIHR5cG1vZCwKKwkJCQkJCQkgICBlc2NvbnRleHQsICZyZXMpKQorCXsKKwkJcmVz ID0gKERhdHVtKSAwOworCQkqaXNudWxsID0gdHJ1ZTsKKwl9CiAKIAkvKiBmcmVlIHRlbXBvcmFy eSBidWZmZXIgKi8KIAlpZiAoc3RyICE9IGpzb24pCkBAIC0zMDQ0LDcgKzMxODgsOCBAQCBwb3B1 bGF0ZV9kb21haW4oRG9tYWluSU9EYXRhICppbywKIAkJCQljb25zdCBjaGFyICpjb2xuYW1lLAog CQkJCU1lbW9yeUNvbnRleHQgbWN4dCwKIAkJCQlKc1ZhbHVlICpqc3YsCi0JCQkJYm9vbCBpc251 bGwpCisJCQkJYm9vbCBpc251bGwsCisJCQkJTm9kZSAqZXNjb250ZXh0KQogewogCURhdHVtCQly ZXM7CiAKQEAgLTMwNTUsOCArMzIwMCw4IEBAIHBvcHVsYXRlX2RvbWFpbihEb21haW5JT0RhdGEg KmlvLAogCQlyZXMgPSBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoaW8tPmJhc2VfaW8sCiAJCQkJCQkJ CQlpby0+YmFzZV90eXBpZCwgaW8tPmJhc2VfdHlwbW9kLAogCQkJCQkJCQkJY29sbmFtZSwgbWN4 dCwgUG9pbnRlckdldERhdHVtKE5VTEwpLAotCQkJCQkJCQkJanN2LCAmaXNudWxsKTsKLQkJQXNz ZXJ0KCFpc251bGwpOworCQkJCQkJCQkJanN2LCAmaXNudWxsLCBlc2NvbnRleHQpOworCQlBc3Nl cnQoIWlzbnVsbCB8fCBTT0ZUX0VSUk9SX09DQ1VSUkVEKGVzY29udGV4dCkpOwogCX0KIAogCWRv bWFpbl9jaGVjayhyZXMsIGlzbnVsbCwgdHlwaWQsICZpby0+ZG9tYWluX2luZm8sIG1jeHQpOwpA QCAtMzE2MCw3ICszMzA1LDggQEAgcG9wdWxhdGVfcmVjb3JkX2ZpZWxkKENvbHVtbklPRGF0YSAq Y29sLAogCQkJCQkgIE1lbW9yeUNvbnRleHQgbWN4dCwKIAkJCQkJICBEYXR1bSBkZWZhdWx0dmFs LAogCQkJCQkgIEpzVmFsdWUgKmpzdiwKLQkJCQkJICBib29sICppc251bGwpCisJCQkJCSAgYm9v bCAqaXNudWxsLAorCQkJCQkgIE5vZGUgKmVzY29udGV4dCkKIHsKIAlUeXBlQ2F0CQl0eXBjYXQ7 CiAKQEAgLTMxOTMsMTAgKzMzMzksMTIgQEAgcG9wdWxhdGVfcmVjb3JkX2ZpZWxkKENvbHVtbklP RGF0YSAqY29sLAogCXN3aXRjaCAodHlwY2F0KQogCXsKIAkJY2FzZSBUWVBFQ0FUX1NDQUxBUjoK LQkJCXJldHVybiBwb3B1bGF0ZV9zY2FsYXIoJmNvbC0+c2NhbGFyX2lvLCB0eXBpZCwgdHlwbW9k LCBqc3YpOworCQkJcmV0dXJuIHBvcHVsYXRlX3NjYWxhcigmY29sLT5zY2FsYXJfaW8sIHR5cGlk LCB0eXBtb2QsIGpzdiwKKwkJCQkJCQkJICAgaXNudWxsLCBlc2NvbnRleHQpOwogCiAJCWNhc2Ug VFlQRUNBVF9BUlJBWToKLQkJCXJldHVybiBwb3B1bGF0ZV9hcnJheSgmY29sLT5pby5hcnJheSwg Y29sbmFtZSwgbWN4dCwganN2KTsKKwkJCXJldHVybiBwb3B1bGF0ZV9hcnJheSgmY29sLT5pby5h cnJheSwgY29sbmFtZSwgbWN4dCwganN2LAorCQkJCQkJCQkgIGlzbnVsbCwgZXNjb250ZXh0KTsK IAogCQljYXNlIFRZUEVDQVRfQ09NUE9TSVRFOgogCQljYXNlIFRZUEVDQVRfQ09NUE9TSVRFX0RP TUFJTjoKQEAgLTMyMDUsMTEgKzMzNTMsMTIgQEAgcG9wdWxhdGVfcmVjb3JkX2ZpZWxkKENvbHVt bklPRGF0YSAqY29sLAogCQkJCQkJCQkJICBEYXR1bUdldFBvaW50ZXIoZGVmYXVsdHZhbCkKIAkJ CQkJCQkJCSAgPyBEYXR1bUdldEhlYXBUdXBsZUhlYWRlcihkZWZhdWx0dmFsKQogCQkJCQkJCQkJ ICA6IE5VTEwsCi0JCQkJCQkJCQkgIGpzdiwgKmlzbnVsbCk7CisJCQkJCQkJCQkgIGpzdiwgaXNu dWxsLAorCQkJCQkJCQkJICBlc2NvbnRleHQpOwogCiAJCWNhc2UgVFlQRUNBVF9ET01BSU46CiAJ CQlyZXR1cm4gcG9wdWxhdGVfZG9tYWluKCZjb2wtPmlvLmRvbWFpbiwgdHlwaWQsIGNvbG5hbWUs IG1jeHQsCi0JCQkJCQkJCSAgIGpzdiwgKmlzbnVsbCk7CisJCQkJCQkJCSAgIGpzdiwgKmlzbnVs bCwgZXNjb250ZXh0KTsKIAogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCB0eXBlIGNhdGVnb3J5ICclYyciLCB0eXBjYXQpOwpAQCAtMzIxNyw2ICszMzY2LDYyIEBAIHBv cHVsYXRlX3JlY29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwKIAl9CiB9CiAKKy8qCisgKiBQ b3B1bGF0ZSBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiBzcGVjaWZpZWQgdHlwZSBmcm9tIGEgZ2l2 ZW4ganNvbi9qc29uYgorICogdmFsdWUgJ2pzb25fdmFsJy4gICdjYWNoZScgaXMgY2FsbGVyLXNw ZWNpZmllZCBwb2ludGVyIHRvIHNhdmUgdGhlCisgKiBDb2x1bW5JT0RhdGEgdGhhdCB3aWxsIGJl IGluaXRpYWxpemVkIG9uIHRoZSAxc3QgY2FsbCBhbmQgdGhlbiByZXVzZWQKKyAqIGR1cmluZyBh bnkgc3Vic2VxdWVudCBjYWxscy4gICdtY3h0JyBnaXZlcyB0aGUgbWVtb3J5IGNvbnRleHQgdG8g YWxsb2NhdGUKKyAqIHRoZSBDb2x1bW5JT0RhdGEgYW5kIGFueSBvdGhlciBzdWJzaWRpYXJ5IG1l bW9yeSBpbi4gICdlc2NvbnRleHQnLAorICogaWYgbm90IE5VTEwsIHRlbGxzIHRoYXQgYW55IGVy cm9ycyB0aGF0IG9jY3VyIHNob3VsZCBiZSBoYW5kbGVkIHNvZnRseS4KKyAqLworRGF0dW0KK2pz b25fcG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwKKwkJCQkgICBP aWQgdHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkgICB2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRl eHQgbWN4dCwKKwkJCQkgICBib29sICppc251bGwsCisJCQkJICAgTm9kZSAqZXNjb250ZXh0KQor eworCUpzVmFsdWUJCWpzdiA9IHswfTsKKwlKc29uYlZhbHVlCWpidjsKKworCWpzdi5pc19qc29u ID0ganNvbl90eXBlID09IEpTT05PSUQ7CisKKwlpZiAoKmlzbnVsbCkKKwl7CisJCWlmIChqc3Yu aXNfanNvbikKKwkJCWpzdi52YWwuanNvbi5zdHIgPSBOVUxMOworCQllbHNlCisJCQlqc3YudmFs Lmpzb25iID0gTlVMTDsKKwl9CisJZWxzZSBpZiAoanN2LmlzX2pzb24pCisJeworCQl0ZXh0CSAg ICpqc29uID0gRGF0dW1HZXRUZXh0UFAoanNvbl92YWwpOworCisJCWpzdi52YWwuanNvbi5zdHIg PSBWQVJEQVRBX0FOWShqc29uKTsKKwkJanN2LnZhbC5qc29uLmxlbiA9IFZBUlNJWkVfQU5ZX0VY SERSKGpzb24pOworCQlqc3YudmFsLmpzb24udHlwZSA9IEpTT05fVE9LRU5fSU5WQUxJRDsgLyog bm90IHVzZWQgaW4KKwkJCQkJCQkJCQkJCSAqIHBvcHVsYXRlX2NvbXBvc2l0ZSgpICovCisJfQor CWVsc2UKKwl7CisJCUpzb25iCSAgICpqc29uYiA9IERhdHVtR2V0SnNvbmJQKGpzb25fdmFsKTsK KworCQlqc3YudmFsLmpzb25iID0gJmpidjsKKworCQkvKiBmaWxsIGJpbmFyeSBqc29uYiB2YWx1 ZSBwb2ludGluZyB0byBqYiAqLworCQlqYnYudHlwZSA9IGpidkJpbmFyeTsKKwkJamJ2LnZhbC5i aW5hcnkuZGF0YSA9ICZqc29uYi0+cm9vdDsKKwkJamJ2LnZhbC5iaW5hcnkubGVuID0gVkFSU0la RShqc29uYikgLSBWQVJIRFJTWjsKKwl9CisKKwlpZiAoKmNhY2hlID09IE5VTEwpCisJCSpjYWNo ZSA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8obWN4dCwgc2l6ZW9mKENvbHVtbklPRGF0YSkpOwor CisJcmV0dXJuIHBvcHVsYXRlX3JlY29yZF9maWVsZCgqY2FjaGUsIHR5cGlkLCB0eXBtb2QsIE5V TEwsIG1jeHQsCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0dW0oTlVMTCksICZqc3YsIGlzbnVsbCwK KwkJCQkJCQkJIGVzY29udGV4dCk7Cit9CisKIHN0YXRpYyBSZWNvcmRJT0RhdGEgKgogYWxsb2Nh dGVfcmVjb3JkX2luZm8oTWVtb3J5Q29udGV4dCBtY3h0LCBpbnQgbmNvbHVtbnMpCiB7CkBAIC0z MjY2LDcgKzM0NzEsOCBAQCBwb3B1bGF0ZV9yZWNvcmQoVHVwbGVEZXNjIHR1cGRlc2MsCiAJCQkJ UmVjb3JkSU9EYXRhICoqcmVjb3JkX3AsCiAJCQkJSGVhcFR1cGxlSGVhZGVyIGRlZmF1bHR2YWws CiAJCQkJTWVtb3J5Q29udGV4dCBtY3h0LAotCQkJCUpzT2JqZWN0ICpvYmopCisJCQkJSnNPYmpl Y3QgKm9iaiwKKwkJCQlOb2RlICplc2NvbnRleHQpCiB7CiAJUmVjb3JkSU9EYXRhICpyZWNvcmQg PSAqcmVjb3JkX3A7CiAJRGF0dW0JICAgKnZhbHVlczsKQEAgLTMzNTgsNyArMzU2NCw4IEBAIHBv cHVsYXRlX3JlY29yZChUdXBsZURlc2MgdHVwZGVzYywKIAkJCQkJCQkJCQkgIG1jeHQsCiAJCQkJ CQkJCQkJICBudWxsc1tpXSA/IChEYXR1bSkgMCA6IHZhbHVlc1tpXSwKIAkJCQkJCQkJCQkgICZm aWVsZCwKLQkJCQkJCQkJCQkgICZudWxsc1tpXSk7CisJCQkJCQkJCQkJICAmbnVsbHNbaV0sCisJ CQkJCQkJCQkJICBlc2NvbnRleHQpOwogCX0KIAogCXJlcyA9IGhlYXBfZm9ybV90dXBsZSh0dXBk ZXNjLCB2YWx1ZXMsIG51bGxzKTsKQEAgLTM0NDUsNiArMzY1Miw3IEBAIHBvcHVsYXRlX3JlY29y ZF93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLAog CUpzVmFsdWUJCWpzdiA9IHswfTsKIAlIZWFwVHVwbGVIZWFkZXIgcmVjOwogCURhdHVtCQlyZXR0 dXBsZTsKKwlib29sCQlpc251bGw7CiAJSnNvbmJWYWx1ZQlqYnY7CiAJTWVtb3J5Q29udGV4dCBm bm1jeHQgPSBmY2luZm8tPmZsaW5mby0+Zm5fbWN4dDsKIAlQb3B1bGF0ZVJlY29yZENhY2hlICpj YWNoZSA9IGZjaW5mby0+ZmxpbmZvLT5mbl9leHRyYTsKQEAgLTM1MzEsOCArMzczOSwxMSBAQCBw b3B1bGF0ZV9yZWNvcmRfd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBjb25zdCBjaGFy ICpmdW5jbmFtZSwKIAkJamJ2LnZhbC5iaW5hcnkubGVuID0gVkFSU0laRShqYikgLSBWQVJIRFJT WjsKIAl9CiAKKwlpc251bGwgPSBmYWxzZTsKIAlyZXR0dXBsZSA9IHBvcHVsYXRlX2NvbXBvc2l0 ZSgmY2FjaGUtPmMuaW8uY29tcG9zaXRlLCBjYWNoZS0+YXJndHlwZSwKLQkJCQkJCQkJICBOVUxM LCBmbm1jeHQsIHJlYywgJmpzdiwgZmFsc2UpOworCQkJCQkJCQkgIE5VTEwsIGZubWN4dCwgcmVj LCAmanN2LCAmaXNudWxsLAorCQkJCQkJCQkgIE5VTEwpOworCUFzc2VydCghaXNudWxsKTsKIAog CVBHX1JFVFVSTl9EQVRVTShyZXR0dXBsZSk7CiB9CkBAIC0zNTQwLDEwICszNzUxLDEzIEBAIHBv cHVsYXRlX3JlY29yZF93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGNvbnN0IGNoYXIg KmZ1bmNuYW1lLAogLyoKICAqIGdldF9qc29uX29iamVjdF9hc19oYXNoCiAgKgotICogZGVjb21w b3NlIGEganNvbiBvYmplY3QgaW50byBhIGhhc2ggdGFibGUuCisgKiBEZWNvbXBvc2VzIGEganNv biBvYmplY3QgaW50byBhIGhhc2ggdGFibGUuCisgKgorICogUmV0dXJucyB0aGUgaGFzaCB0YWJs ZSBpZiB0aGUganNvbiBpcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBOVUxMIG90aGVyd2lzZS4KICAq Lwogc3RhdGljIEhUQUIgKgotZ2V0X2pzb25fb2JqZWN0X2FzX2hhc2goY2hhciAqanNvbiwgaW50 IGxlbiwgY29uc3QgY2hhciAqZnVuY25hbWUpCitnZXRfanNvbl9vYmplY3RfYXNfaGFzaChjaGFy ICpqc29uLCBpbnQgbGVuLCBjb25zdCBjaGFyICpmdW5jbmFtZSwKKwkJCQkJCU5vZGUgKmVzY29u dGV4dCkKIHsKIAlIQVNIQ1RMCQljdGw7CiAJSFRBQgkgICAqdGFiOwpAQCAtMzU3Miw3ICszNzg2 LDExIEBAIGdldF9qc29uX29iamVjdF9hc19oYXNoKGNoYXIgKmpzb24sIGludCBsZW4sIGNvbnN0 IGNoYXIgKmZ1bmNuYW1lKQogCXNlbS0+b2JqZWN0X2ZpZWxkX3N0YXJ0ID0gaGFzaF9vYmplY3Rf ZmllbGRfc3RhcnQ7CiAJc2VtLT5vYmplY3RfZmllbGRfZW5kID0gaGFzaF9vYmplY3RfZmllbGRf ZW5kOwogCi0JcGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KHN0YXRlLT5sZXgsIHNlbSk7CisJaWYg KCFwZ19wYXJzZV9qc29uX29yX2VycnNhdmUoc3RhdGUtPmxleCwgc2VtLCBlc2NvbnRleHQpKQor CXsKKwkJaGFzaF9kZXN0cm95KHN0YXRlLT5oYXNoKTsKKwkJdGFiID0gTlVMTDsKKwl9CiAKIAlm cmVlSnNvbkxleENvbnRleHQoc3RhdGUtPmxleCk7CiAKQEAgLTM3NDMsNyArMzk2MSw4IEBAIHBv cHVsYXRlX3JlY29yZHNldF9yZWNvcmQoUG9wdWxhdGVSZWNvcmRzZXRTdGF0ZSAqc3RhdGUsIEpz T2JqZWN0ICpvYmopCiAJCQkJCQkJICAmY2FjaGUtPmMuaW8uY29tcG9zaXRlLnJlY29yZF9pbywK IAkJCQkJCQkgIHN0YXRlLT5yZWMsCiAJCQkJCQkJICBjYWNoZS0+Zm5fbWN4dCwKLQkJCQkJCQkg IG9iaik7CisJCQkJCQkJICBvYmosCisJCQkJCQkJICBOVUxMKTsKIAogCS8qIGlmIGl0J3MgZG9t YWluIG92ZXIgY29tcG9zaXRlLCBjaGVjayBkb21haW4gY29uc3RyYWludHMgKi8KIAlpZiAoY2Fj aGUtPmMudHlwY2F0ID09IFRZUEVDQVRfQ09NUE9TSVRFX0RPTUFJTikKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNz LmgKaW5kZXggMWM2ZDJiZTAyNS4uMWY4YjJiOTRjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvanNvbmZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKQEAg LTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgSlNPTkZVTkNTX0gKIAogI2luY2x1ZGUgImNvbW1vbi9q c29uYXBpLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29u Yi5oIgogCiAvKgpAQCAtODcsNSArODgsMTAgQEAgZXh0ZXJuIERhdHVtIGRhdHVtX3RvX2pzb24o RGF0dW0gdmFsLCBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwKIGV4dGVybiBEYXR1bSBkYXR1 bV90b19qc29uYihEYXR1bSB2YWwsIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LAogCQkJCQkJ CU9pZCBvdXRmdW5jb2lkKTsKIGV4dGVybiBEYXR1bSBqc29uYl9mcm9tX3RleHQodGV4dCAqanMs IGJvb2wgdW5pcXVlX2tleXMpOworZXh0ZXJuIERhdHVtIGpzb25fcG9wdWxhdGVfdHlwZShEYXR1 bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwKKwkJCQkgICBPaWQgdHlwaWQsIGludDMyIHR5cG1v ZCwKKwkJCQkgICB2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRleHQgbWN4dCwKKwkJCQkgICBib29s ICppc251bGwsCisJCQkJICAgTm9kZSAqZXNjb250ZXh0KTsKIAogI2VuZGlmCi0tIAoyLjM1LjMK Cg== --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0005-Add-a-jsonpath-support-function-jspIsMutable.patch" Content-Disposition: attachment; filename="v33-0005-Add-a-jsonpath-support-function-jspIsMutable.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikizj4 RnJvbSBjZWIwNDA0YzFmZTljZTZkZDRkMWUwMjc0MjRjYmE2ZTAzNzMxMDU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTQgRGVjIDIwMjMgMTQ6NDE6MjcgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz MyA1LzhdIEFkZCBhIGpzb25wYXRoIHN1cHBvcnQgZnVuY3Rpb24ganNwSXNNdXRhYmxlCgpUaGlz IHdpbGwgYmUgdXNlZCBpbiB0aGUgcGxhbm5lciBjaGFuZ2VzIG9mIHRoZSBzdWJzZXF1ZW50IGNv bW1pdCB0bwphZGQgU1FML0pTT04gcXVlcnkgZnVuY3Rpb25zLgoKRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNL eXJMQzFOYmdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0 dGluZy5jIHwgIDQ0ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyAgIHwg MjU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS91dGlscy9mb3Jt YXR0aW5nLmggICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAgICAg fCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAzMDUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0dGluZy5jCmluZGV4IGQxNzY3MjNkOTUuLjVkM2MwMWY0MWYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNDQyNiw2ICs0NDI2LDUwIEBAIHBhcnNlX2RhdGV0aW1l KHRleHQgKmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9pZCBjb2xsaWQsIGJvb2wgc3RyaWN0LAogCX0K IH0KIAorLyoKKyAqIFBhcnNlcyB0aGUgZGF0ZXRpbWUgZm9ybWF0IHN0cmluZyBpbiAnZm10X3N0 cicgYW5kIHJldHVybnMgdHJ1ZSBpZiBpdAorICogY29udGFpbnMgYSB0aW1lem9uZSBzcGVjaWZp ZXIsIGZhbHNlIGlmIG5vdC4KKyAqLworYm9vbAorZGF0ZXRpbWVfZm9ybWF0X2hhc190eihjb25z dCBjaGFyICpmbXRfc3RyKQoreworCWJvb2wJCWluY2FjaGU7CisJaW50CQkJZm10X2xlbiA9IHN0 cmxlbihmbXRfc3RyKTsKKwlpbnQJCQlyZXN1bHQ7CisJRm9ybWF0Tm9kZSAqZm9ybWF0OworCisJ aWYgKGZtdF9sZW4gPiBEQ0hfQ0FDSEVfU0laRSkKKwl7CisJCS8qCisJCSAqIEFsbG9jYXRlIG5l dyBtZW1vcnkgaWYgZm9ybWF0IHBpY3R1cmUgaXMgYmlnZ2VyIHRoYW4gc3RhdGljIGNhY2hlCisJ CSAqIGFuZCBkbyBub3QgdXNlIGNhY2hlIChjYWxsIHBhcnNlciBhbHdheXMpCisJCSAqLworCQlp bmNhY2hlID0gZmFsc2U7CisKKwkJZm9ybWF0ID0gKEZvcm1hdE5vZGUgKikgcGFsbG9jKChmbXRf bGVuICsgMSkgKiBzaXplb2YoRm9ybWF0Tm9kZSkpOworCisJCXBhcnNlX2Zvcm1hdChmb3JtYXQs IGZtdF9zdHIsIERDSF9rZXl3b3JkcywKKwkJCQkJIERDSF9zdWZmLCBEQ0hfaW5kZXgsIERDSF9G TEFHLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogVXNlIGNhY2hlIGJ1ZmZlcnMK KwkJICovCisJCURDSENhY2hlRW50cnkgKmVudCA9IERDSF9jYWNoZV9mZXRjaChmbXRfc3RyLCBm YWxzZSk7CisKKwkJaW5jYWNoZSA9IHRydWU7CisJCWZvcm1hdCA9IGVudC0+Zm9ybWF0OworCX0K KworCXJlc3VsdCA9IERDSF9kYXRldGltZV90eXBlKGZvcm1hdCk7CisKKwlpZiAoIWluY2FjaGUp CisJCXBmcmVlKGZvcm1hdCk7CisKKwlyZXR1cm4gcmVzdWx0ICYgRENIX1pPTkVEOworfQorCiAv KgogICogZG9fdG9fdGltZXN0YW1wOiBzaGFyZWQgY29kZSBmb3IgdG9fdGltZXN0YW1wIGFuZCB0 b19kYXRlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYwppbmRleCBjNWJhM2I3ZjFkLi4xN2Rk NDNiOTIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYwpAQCAtNjgsNyArNjgsOSBAQAogI2lu Y2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mb3JtYXR0aW5nLmgiCiAj aW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAKQEAg LTExMTAsMyArMTExMiwyNjAgQEAganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJdGVtICp2 LCBKc29uUGF0aEl0ZW0gKmZyb20sIEpzb25QYXRoSXRlbSAqdG8sCiAKIAlyZXR1cm4gdHJ1ZTsK IH0KKworLyogU1FML0pTT04gZGF0YXR5cGUgc3RhdHVzOiAqLworZW51bSBKc29uUGF0aERhdGF0 eXBlU3RhdHVzCit7CisJanBkc05vbkRhdGVUaW1lLAkJCS8qIG51bGwsIGJvb2wsIG51bWVyaWMs IHN0cmluZywgYXJyYXksIG9iamVjdCAqLworCWpwZHNVbmtub3duRGF0ZVRpbWUsCQkvKiB1bmtu b3duIGRhdGV0aW1lIHR5cGUgKi8KKwlqcGRzRGF0ZVRpbWVab25lZCwJCQkvKiB0aW1ldHosIHRp bWVzdGFtcHR6ICovCisJanBkc0RhdGVUaW1lTm9uWm9uZWQsCQkvKiB0aW1lLCB0aW1lc3RhbXAs IGRhdGUgKi8KK307CisKKy8qIENvbnRleHQgZm9yIGpzcElzTXV0YWJsZVdhbGtlcigpICovCitz dHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dAoreworCUxpc3QJICAgKnZhcm5hbWVzOwkJLyog bGlzdCBvZiB2YXJpYWJsZSBuYW1lcyAqLworCUxpc3QJICAgKnZhcmV4cHJzOwkJLyogbGlzdCBv ZiB2YXJpYWJsZSBleHByZXNzaW9ucyAqLworCWVudW0gSnNvblBhdGhEYXRhdHlwZVN0YXR1cyBj dXJyZW50OyAvKiBzdGF0dXMgb2YgQCBpdGVtICovCisJYm9vbAkJbGF4OwkJCS8qIGpzb25wYXRo IGlzIGxheCBvciBzdHJpY3QgKi8KKwlib29sCQltdXRhYmxlOwkJLyogcmVzdWx0aW5nIG11dGFi aWxpdHkgc3RhdHVzICovCit9OworCitzdGF0aWMgZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVz IGpzcElzTXV0YWJsZVdhbGtlcihKc29uUGF0aEl0ZW0gKmpwaSwKKwkJCQkJCQkJCQkJCQkgIHN0 cnVjdCBKc29uUGF0aE11dGFibGVDb250ZXh0ICpjeHQpOworCisvKgorICogRnVuY3Rpb24gdG8g Y2hlY2sgd2hldGhlciBqc29ucGF0aCBleHByZXNzaW9uIGlzIG11dGFibGUgdG8gYmUgdXNlZCBp biB0aGUKKyAqIHBsYW5uZXIgZnVuY3Rpb24gY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9ucygpLgor ICovCitib29sCitqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZhcm5hbWVzLCBM aXN0ICp2YXJleHBycykKK3sKKwlzdHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dCBjeHQ7CisJ SnNvblBhdGhJdGVtIGpwaTsKKworCWN4dC52YXJuYW1lcyA9IHZhcm5hbWVzOworCWN4dC52YXJl eHBycyA9IHZhcmV4cHJzOworCWN4dC5jdXJyZW50ID0ganBkc05vbkRhdGVUaW1lOworCWN4dC5s YXggPSAocGF0aC0+aGVhZGVyICYgSlNPTlBBVEhfTEFYKSAhPSAwOworCWN4dC5tdXRhYmxlID0g ZmFsc2U7CisKKwlqc3BJbml0KCZqcGksIHBhdGgpOworCSh2b2lkKSBqc3BJc011dGFibGVXYWxr ZXIoJmpwaSwgJmN4dCk7CisKKwlyZXR1cm4gY3h0Lm11dGFibGU7Cit9CisKKy8qCisgKiBSZWN1 cnNpdmUgd2Fsa2VyIGZvciBqc3BJc011dGFibGUoKQorICovCitzdGF0aWMgZW51bSBKc29uUGF0 aERhdGF0eXBlU3RhdHVzCitqc3BJc011dGFibGVXYWxrZXIoSnNvblBhdGhJdGVtICpqcGksIHN0 cnVjdCBKc29uUGF0aE11dGFibGVDb250ZXh0ICpjeHQpCit7CisJSnNvblBhdGhJdGVtIG5leHQ7 CisJZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzIHN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsK KworCXdoaWxlICghY3h0LT5tdXRhYmxlKQorCXsKKwkJSnNvblBhdGhJdGVtIGFyZzsKKwkJZW51 bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzIGxlZnRTdGF0dXM7CisJCWVudW0gSnNvblBhdGhEYXRh dHlwZVN0YXR1cyByaWdodFN0YXR1czsKKworCQlzd2l0Y2ggKGpwaS0+dHlwZSkKKwkJeworCQkJ Y2FzZSBqcGlSb290OgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBqcGlDdXJyZW50OgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBk c05vbkRhdGVUaW1lKTsKKwkJCQlzdGF0dXMgPSBjeHQtPmN1cnJlbnQ7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UganBpRmlsdGVyOgorCQkJCXsKKwkJCQkJZW51bSBKc29uUGF0aERhdGF0eXBlU3Rh dHVzIHByZXZTdGF0dXMgPSBjeHQtPmN1cnJlbnQ7CisKKwkJCQkJY3h0LT5jdXJyZW50ID0gc3Rh dHVzOworCQkJCQlqc3BHZXRBcmcoanBpLCAmYXJnKTsKKwkJCQkJanNwSXNNdXRhYmxlV2Fsa2Vy KCZhcmcsIGN4dCk7CisKKwkJCQkJY3h0LT5jdXJyZW50ID0gcHJldlN0YXR1czsKKwkJCQkJYnJl YWs7CisJCQkJfQorCisJCQljYXNlIGpwaVZhcmlhYmxlOgorCQkJCXsKKwkJCQkJaW50MzIJCWxl bjsKKwkJCQkJY29uc3QgY2hhciAqbmFtZSA9IGpzcEdldFN0cmluZyhqcGksICZsZW4pOworCQkJ CQlMaXN0Q2VsbCAgICpsYzE7CisJCQkJCUxpc3RDZWxsICAgKmxjMjsKKworCQkJCQlBc3NlcnQo c3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisKKwkJCQkJZm9yYm90aChsYzEsIGN4dC0+dmFy bmFtZXMsIGxjMiwgY3h0LT52YXJleHBycykKKwkJCQkJeworCQkJCQkJU3RyaW5nCSAgICp2YXJu YW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBsYzEpOworCQkJCQkJTm9kZQkgICAqdmFyZXhwciA9 IGxmaXJzdChsYzIpOworCisJCQkJCQlpZiAoc3RybmNtcCh2YXJuYW1lLT5zdmFsLCBuYW1lLCBs ZW4pKQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCQlzd2l0Y2ggKGV4cHJUeXBlKHZhcmV4cHIp KQorCQkJCQkJeworCQkJCQkJCWNhc2UgREFURU9JRDoKKwkJCQkJCQljYXNlIFRJTUVPSUQ6CisJ CQkJCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZU5v blpvbmVkOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgVElNRVRaT0lEOgorCQkJCQkJ CWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZVpvbmVk OworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXN0YXR1cyA9IGpw ZHNOb25EYXRlVGltZTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWJyZWFrOwor CQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBqcGlFcXVhbDoKKwkJCWNhc2Ug anBpTm90RXF1YWw6CisJCQljYXNlIGpwaUxlc3M6CisJCQljYXNlIGpwaUdyZWF0ZXI6CisJCQlj YXNlIGpwaUxlc3NPckVxdWFsOgorCQkJY2FzZSBqcGlHcmVhdGVyT3JFcXVhbDoKKwkJCQlBc3Nl cnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJanNwR2V0TGVmdEFyZyhqcGksICZh cmcpOworCQkJCWxlZnRTdGF0dXMgPSBqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKwor CQkJCWpzcEdldFJpZ2h0QXJnKGpwaSwgJmFyZyk7CisJCQkJcmlnaHRTdGF0dXMgPSBqc3BJc011 dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKworCQkJCS8qCisJCQkJICogQ29tcGFyaXNvbiBvZiBk YXRldGltZSB0eXBlIHdpdGggZGlmZmVyZW50IHRpbWV6b25lIHN0YXR1cworCQkJCSAqIGlzIG11 dGFibGUuCisJCQkJICovCisJCQkJaWYgKGxlZnRTdGF0dXMgIT0ganBkc05vbkRhdGVUaW1lICYm CisJCQkJCXJpZ2h0U3RhdHVzICE9IGpwZHNOb25EYXRlVGltZSAmJgorCQkJCQkobGVmdFN0YXR1 cyA9PSBqcGRzVW5rbm93bkRhdGVUaW1lIHx8CisJCQkJCSByaWdodFN0YXR1cyA9PSBqcGRzVW5r bm93bkRhdGVUaW1lIHx8CisJCQkJCSBsZWZ0U3RhdHVzICE9IHJpZ2h0U3RhdHVzKSkKKwkJCQkJ Y3h0LT5tdXRhYmxlID0gdHJ1ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlOb3Q6CisJCQlj YXNlIGpwaUlzVW5rbm93bjoKKwkJCWNhc2UganBpRXhpc3RzOgorCQkJY2FzZSBqcGlQbHVzOgor CQkJY2FzZSBqcGlNaW51czoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7 CisJCQkJanNwR2V0QXJnKGpwaSwgJmFyZyk7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcs IGN4dCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpQW5kOgorCQkJY2FzZSBqcGlPcjoKKwkJ CWNhc2UganBpQWRkOgorCQkJY2FzZSBqcGlTdWI6CisJCQljYXNlIGpwaU11bDoKKwkJCWNhc2Ug anBpRGl2OgorCQkJY2FzZSBqcGlNb2Q6CisJCQljYXNlIGpwaVN0YXJ0c1dpdGg6CisJCQkJQXNz ZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWpzcEdldExlZnRBcmcoanBpLCAm YXJnKTsKKwkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKwkJCQlqc3BHZXRSaWdo dEFyZyhqcGksICZhcmcpOworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCQkJ CWJyZWFrOworCisJCQljYXNlIGpwaUluZGV4QXJyYXk6CisJCQkJZm9yIChpbnQgaSA9IDA7IGkg PCBqcGktPmNvbnRlbnQuYXJyYXkubmVsZW1zOyBpKyspCisJCQkJeworCQkJCQlKc29uUGF0aEl0 ZW0gZnJvbTsKKwkJCQkJSnNvblBhdGhJdGVtIHRvOworCisJCQkJCWlmIChqc3BHZXRBcnJheVN1 YnNjcmlwdChqcGksICZmcm9tLCAmdG8sIGkpKQorCQkJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZ0 bywgY3h0KTsKKworCQkJCQlqc3BJc011dGFibGVXYWxrZXIoJmZyb20sIGN4dCk7CisJCQkJfQor CQkJCS8qIEZBTExUSFJPVUdIICovCisKKwkJCWNhc2UganBpQW55QXJyYXk6CisJCQkJaWYgKCFj eHQtPmxheCkKKwkJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCWJyZWFrOworCisJ CQljYXNlIGpwaUFueToKKwkJCQlpZiAoanBpLT5jb250ZW50LmFueWJvdW5kcy5maXJzdCA+IDAp CisJCQkJCXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBq cGlEYXRldGltZToKKwkJCQlpZiAoanBpLT5jb250ZW50LmFyZykKKwkJCQl7CisJCQkJCWNoYXIJ ICAgKnRlbXBsYXRlOworCisJCQkJCWpzcEdldEFyZyhqcGksICZhcmcpOworCQkJCQlpZiAoYXJn LnR5cGUgIT0ganBpU3RyaW5nKQorCQkJCQl7CisJCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRp bWU7CisJCQkJCQlicmVhazsJLyogdGhlcmUgd2lsbCBiZSBydW50aW1lIGVycm9yICovCisJCQkJ CX0KKworCQkJCQl0ZW1wbGF0ZSA9IGpzcEdldFN0cmluZygmYXJnLCBOVUxMKTsKKwkJCQkJaWYg KGRhdGV0aW1lX2Zvcm1hdF9oYXNfdHoodGVtcGxhdGUpKQorCQkJCQkJc3RhdHVzID0ganBkc0Rh dGVUaW1lWm9uZWQ7CisJCQkJCWVsc2UKKwkJCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZU5vblpv bmVkOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlzdGF0dXMgPSBqcGRzVW5rbm93bkRh dGVUaW1lOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlMaWtlUmVnZXg6CisJCQkJ QXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWpzcEluaXRCeUJ1ZmZlcigm YXJnLCBqcGktPmJhc2UsIGpwaS0+Y29udGVudC5saWtlX3JlZ2V4LmV4cHIpOworCQkJCWpzcElz TXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCQkJCWJyZWFrOworCisJCQkJLyogbGl0ZXJhbHMg Ki8KKwkJCWNhc2UganBpTnVsbDoKKwkJCWNhc2UganBpU3RyaW5nOgorCQkJY2FzZSBqcGlOdW1l cmljOgorCQkJY2FzZSBqcGlCb29sOgorCQkJCS8qIGFjY2Vzc29ycyAqLworCQkJY2FzZSBqcGlL ZXk6CisJCQljYXNlIGpwaUFueUtleToKKwkJCQkvKiBzcGVjaWFsIGl0ZW1zICovCisJCQljYXNl IGpwaVN1YnNjcmlwdDoKKwkJCWNhc2UganBpTGFzdDoKKwkJCQkvKiBpdGVtIG1ldGhvZHMgKi8K KwkJCWNhc2UganBpVHlwZToKKwkJCWNhc2UganBpU2l6ZToKKwkJCWNhc2UganBpQWJzOgorCQkJ Y2FzZSBqcGlGbG9vcjoKKwkJCWNhc2UganBpQ2VpbGluZzoKKwkJCWNhc2UganBpRG91YmxlOgor CQkJY2FzZSBqcGlLZXlWYWx1ZToKKwkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJ YnJlYWs7CisJCX0KKworCQlpZiAoIWpzcEdldE5leHQoanBpLCAmbmV4dCkpCisJCQlicmVhazsK KworCQlqcGkgPSAmbmV4dDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0 dGluZy5oCmluZGV4IDBjYWQzYTI3MDkuLjlhOWFlOTc1NGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2Zvcm1hdHRpbmcuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5n LmgKQEAgLTI5LDUgKzI5LDYgQEAgZXh0ZXJuIGNoYXIgKmFzY19pbml0Y2FwKGNvbnN0IGNoYXIg KmJ1ZmYsIHNpemVfdCBuYnl0ZXMpOwogZXh0ZXJuIERhdHVtIHBhcnNlX2RhdGV0aW1lKHRleHQg KmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9pZCBjb2xsaWQsIGJvb2wgc3RyaWN0LAogCQkJCQkJCU9p ZCAqdHlwaWQsIGludDMyICp0eXBtb2QsIGludCAqdHosCiAJCQkJCQkJc3RydWN0IE5vZGUgKmVz Y29udGV4dCk7CitleHRlcm4gYm9vbCBkYXRldGltZV9mb3JtYXRfaGFzX3R6KGNvbnN0IGNoYXIg KmZtdF9zdHIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25w YXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCmluZGV4IDhjY2Y5NGY3YjQuLmEw ZTUyOGI5NTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAtMTg1LDYgKzE4NSw3IEBAIGV4dGVybiBi b29sIGpzcEdldEJvb2woSnNvblBhdGhJdGVtICp2KTsKIGV4dGVybiBjaGFyICpqc3BHZXRTdHJp bmcoSnNvblBhdGhJdGVtICp2LCBpbnQzMiAqbGVuKTsKIGV4dGVybiBib29sIGpzcEdldEFycmF5 U3Vic2NyaXB0KEpzb25QYXRoSXRlbSAqdiwgSnNvblBhdGhJdGVtICpmcm9tLAogCQkJCQkJCQkg SnNvblBhdGhJdGVtICp0bywgaW50IGkpOworZXh0ZXJuIGJvb2wganNwSXNNdXRhYmxlKEpzb25Q YXRoICpwYXRoLCBMaXN0ICp2YXJuYW1lcywgTGlzdCAqdmFyZXhwcnMpOwogCiBleHRlcm4gY29u c3QgY2hhciAqanNwT3BlcmF0aW9uTmFtZShKc29uUGF0aEl0ZW1UeXBlIHR5cGUpOwogCi0tIAoy LjM1LjMKCg== --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0001-Add-soft-error-handling-to-some-expression-nodes.patch" Content-Disposition: attachment; filename="v33-0001-Add-soft-error-handling-to-some-expression-nodes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikiz30 RnJvbSBiY2Q3NWViZWQ4ZjQzMmE4MWMxM2I3ZjJhNzkyZmMzNDM5MmFjMjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjIgTm92IDIwMjMgMTM6MTg6MzkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz MyAxLzhdIEFkZCBzb2Z0IGVycm9yIGhhbmRsaW5nIHRvIHNvbWUgZXhwcmVzc2lvbiBub2RlcwpN SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgK Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBhZGp1c3RzIHRoZSBDb2VyY2VW aWFJTyBhbmQgQ29lcmNlVG9Eb21haW4gZXhwcmVzc2lvbiBldmFsdWF0aW9uCmNvZGUgdG8gaGFu ZGxlIGVycm9ycyBzb2Z0bHkuCgpGb3IgQ29lcmNlVmlhSW8sIHRoaXMgYWRkcyBhIG5ldyBFeHBy RXZhbFN0ZXAgb3Bjb2RlCkVFT1BfSU9DT0VSQ0VfU0FGRSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQg aW4gdGhlIG5ldyBhY2NvbXBhbnlpbmcKZnVuY3Rpb24gRXhlY0V2YWxDb2VyY2VWaWFJT1NhZmUo KS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbQpFRU9QX0lPQ09FUkNFJ3MgaW5saW5lIGltcGxl bWVudGF0aW9uIGlzIHRoYXQgdGhlIGlucHV0IGZ1bmN0aW9uCnJlY2VpdmVzIGFuIEVycm9yU2F2 ZUNvbnRleHQgdmlhIHRoZSBmdW5jdGlvbidzCkZ1bmN0aW9uQ2FsbEluZm8uY29udGV4dCwgd2hp Y2ggaXQgY2FuIHVzZSB0byBoYW5kbGUgZXJyb3JzIHNvZnRseS4KCkZvciBDb2VyY2VUb0RvbWFp biwgdGhpcyBzaW1wbHkgZW50YWlscyByZXBsYWNpbmcgdGhlIGVyZXBvcnQoKSBpbgpFeGVjRXZh bENvbnN0cmFpbnROb3ROdWxsKCkgYW5kIEV4ZWNFdmFsQ29uc3RyYWludENoZWNrKCkgYnkKZXJy c2F2ZSgpIHBhc3NpbmcgaXQgdGhlIEVycm9yU2F2ZUNvbnRleHQgcGFzc2VkIGluIHRoZSBleHBy ZXNzaW9uJ3MKRXhwckV2YWxTdGVwLgoKSW4gYm90aCBjYXNlcywgdGhlIEVycm9yU2F2ZUNvbnRl eHQgdG8gYmUgdXNlZCBpcyBwYXNzZWQgYnkgc2V0dGluZwpFeHByU3RhdGUuZXNjb250ZXh0IHRv IHBvaW50IHRvIGl0IGJlZm9yZSBjYWxsaW5nIEV4ZWNJbml0RXhwclJlYygpCm9uIHRoZSBleHBy ZXNzaW9uIHRyZWUgd2hvc2UgZXJyb3JzIGFyZSB0byBiZSBzdXBwcmVzc2VkLgoKTm90ZSB0aGF0 IG5vIGNhbGwgc2l0ZSBvZiBFeGVjSW5pdEV4cHJSZWMoKSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRo aXMKY29tbWl0LCBzbyB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgVGhpcyBpcyBpbnRl bmRlZCBmb3IKaW1wbGVtZW50aW5nIG5ldyBTUUwvSlNPTiBleHByZXNzaW9uIG5vZGVzIGluIGZ1 dHVyZSBjb21taXRzLgoKUmV2aWV3ZWQtYnk6IMOBbHZhcm8gSGVycmVyYQpSZXZpZXdlZC1ieTog QW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhU ZGZiMW5XPU9qb3lfdFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQot LS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAgfCAgOCArKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgfCA3NCArKysrKysrKysrKysrKysrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jICAgfCAgNiArKysK IHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyAgfCAgMSArCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgIHwgIDQgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oICAgICAgICAgfCAgNyArKysKIDYgZmlsZXMgY2hhbmdlZCwgOTcgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCAyYzYyYjBj OWM4Li4zNGJkMjEwMmI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTE1NjMsNyArMTU2 MywxMCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJ CQkgKiBXZSBkb24ndCBjaGVjayBwZXJtaXNzaW9ucyBoZXJlIGFzIGEgdHlwZSdzIGlucHV0L291 dHB1dAogCQkJCSAqIGZ1bmN0aW9uIGFyZSBhc3N1bWVkIHRvIGJlIGV4ZWN1dGFibGUgYnkgZXZl cnlvbmUuCiAJCQkJICovCi0JCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0lPQ09FUkNFOworCQkJ CWlmIChzdGF0ZS0+ZXNjb250ZXh0ID09IE5VTEwpCisJCQkJCXNjcmF0Y2gub3Bjb2RlID0gRUVP UF9JT0NPRVJDRTsKKwkJCQllbHNlCisJCQkJCXNjcmF0Y2gub3Bjb2RlID0gRUVPUF9JT0NPRVJD RV9TQUZFOwogCiAJCQkJLyogbG9va3VwIHRoZSBzb3VyY2UgdHlwZSdzIG91dHB1dCBmdW5jdGlv biAqLwogCQkJCXNjcmF0Y2guZC5pb2NvZXJjZS5maW5mb19vdXQgPSBwYWxsb2MwKHNpemVvZihG bWdySW5mbykpOwpAQCAtMTU5OSw2ICsxNjAyLDggQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5v ZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJZmNpbmZvX2luLT5hcmdzWzJdLnZhbHVlID0gSW50 MzJHZXREYXR1bSgtMSk7CiAJCQkJZmNpbmZvX2luLT5hcmdzWzJdLmlzbnVsbCA9IGZhbHNlOwog CisJCQkJZmNpbmZvX2luLT5jb250ZXh0ID0gKE5vZGUgKikgc3RhdGUtPmVzY29udGV4dDsKKwog CQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIAkJCQlicmVhazsKIAkJCX0K QEAgLTMzMDYsNiArMzMxMSw3IEBAIEV4ZWNJbml0Q29lcmNlVG9Eb21haW4oRXhwckV2YWxTdGVw ICpzY3JhdGNoLCBDb2VyY2VUb0RvbWFpbiAqY3Rlc3QsCiAJLyogd2UnbGwgYWxsb2NhdGUgd29y a3NwYWNlIG9ubHkgaWYgbmVlZGVkICovCiAJc2NyYXRjaC0+ZC5kb21haW5jaGVjay5jaGVja3Zh bHVlID0gTlVMTDsKIAlzY3JhdGNoLT5kLmRvbWFpbmNoZWNrLmNoZWNrbnVsbCA9IE5VTEw7CisJ c2NyYXRjaC0+ZC5kb21haW5jaGVjay5lc2NvbnRleHQgPSBzdGF0ZS0+ZXNjb250ZXh0OwogCiAJ LyoKIAkgKiBFdmFsdWF0ZSBhcmd1bWVudCAtIGl0J3MgZmluZSB0byBkaXJlY3RseSBzdG9yZSBp dCBpbnRvIHJlc3YvcmVzbnVsbCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmlu ZGV4IDI0YzJiNjBjNjIuLmQ1ZGI5NjQ0NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVTdWJwbGFu LmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAgLTQ1Miw2 ICs0NTMsNyBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAq ZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJJiZDQVNFX0VFT1BfQ0FTRV9URVNUVkFMLAogCQkm JkNBU0VfRUVPUF9NQUtFX1JFQURPTkxZLAogCQkmJkNBU0VfRUVPUF9JT0NPRVJDRSwKKwkJJiZD QVNFX0VFT1BfSU9DT0VSQ0VfU0FGRSwKIAkJJiZDQVNFX0VFT1BfRElTVElOQ1QsCiAJCSYmQ0FT RV9FRU9QX05PVF9ESVNUSU5DVCwKIAkJJiZDQVNFX0VFT1BfTlVMTElGLApAQCAtMTIwNSw2ICsx MjA3LDEyIEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICpl Y29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNF KEVFT1BfSU9DT0VSQ0VfU0FGRSkKKwkJeworCQkJRXhlY0V2YWxDb2VyY2VWaWFJT1NhZmUoc3Rh dGUsIG9wKTsKKwkJCUVFT19ORVhUKCk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0RJU1RJTkNU KQogCQl7CiAJCQkvKgpAQCAtMjUxMCw2ICsyNTE4LDY4IEBAIEV4ZWNFdmFsUGFyYW1FeHRlcm4o RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0 KQogCQkJIGVycm1zZygibm8gdmFsdWUgZm91bmQgZm9yIHBhcmFtZXRlciAlZCIsIHBhcmFtSWQp KSk7CiB9CiAKKy8qCisgKiBFdmFsdWF0ZSBhIENvZXJjZVZpYUlPIG5vZGUgaW4gc29mdC1lcnJv ciBtb2RlLgorICoKKyAqIFRoZSBzb3VyY2UgdmFsdWUgaXMgaW4gb3AncyByZXN1bHQgdmFyaWFi bGUuCisgKi8KK3ZvaWQKK0V4ZWNFdmFsQ29lcmNlVmlhSU9TYWZlKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3ApCit7CisJY2hhcgkgICAqc3RyOworCisJLyogY2FsbCBvdXRwdXQg ZnVuY3Rpb24gKHNpbWlsYXIgdG8gT3V0cHV0RnVuY3Rpb25DYWxsKSAqLworCWlmICgqb3AtPnJl c251bGwpCisJeworCQkvKiBvdXRwdXQgZnVuY3Rpb25zIGFyZSBub3QgY2FsbGVkIG9uIG51bGxz ICovCisJCXN0ciA9IE5VTEw7CisJfQorCWVsc2UKKwl7CisJCUZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvX291dDsKKworCQlmY2luZm9fb3V0ID0gb3AtPmQuaW9jb2VyY2UuZmNpbmZvX2RhdGFfb3V0 OworCQlmY2luZm9fb3V0LT5hcmdzWzBdLnZhbHVlID0gKm9wLT5yZXN2YWx1ZTsKKwkJZmNpbmZv X291dC0+YXJnc1swXS5pc251bGwgPSBmYWxzZTsKKworCQlmY2luZm9fb3V0LT5pc251bGwgPSBm YWxzZTsKKwkJc3RyID0gRGF0dW1HZXRDU3RyaW5nKEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm9f b3V0KSk7CisKKwkJLyogT3V0cHV0RnVuY3Rpb25DYWxsIGFzc3VtZXMgcmVzdWx0IGlzbid0IG51 bGwgKi8KKwkJQXNzZXJ0KCFmY2luZm9fb3V0LT5pc251bGwpOworCX0KKworCS8qIGNhbGwgaW5w dXQgZnVuY3Rpb24gKHNpbWlsYXIgdG8gSW5wdXRGdW5jdGlvbkNhbGwpICovCisJaWYgKCFvcC0+ ZC5pb2NvZXJjZS5maW5mb19pbi0+Zm5fc3RyaWN0IHx8IHN0ciAhPSBOVUxMKQorCXsKKwkJRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm9faW47CisKKwkJZmNpbmZvX2luID0gb3AtPmQuaW9jb2VyY2Uu ZmNpbmZvX2RhdGFfaW47CisJCWZjaW5mb19pbi0+YXJnc1swXS52YWx1ZSA9IFBvaW50ZXJHZXRE YXR1bShzdHIpOworCQlmY2luZm9faW4tPmFyZ3NbMF0uaXNudWxsID0gKm9wLT5yZXNudWxsOwor CQkvKiBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cyBhcmUgYWxyZWFkeSBzZXQgdXAgKi8KKwor CQkvKiBFcnJvclNhdmVDb250ZXh0IG11c3QgYmUgcHJlc2VudC4gKi8KKwkJQXNzZXJ0KElzQShm Y2luZm9faW4tPmNvbnRleHQsIEVycm9yU2F2ZUNvbnRleHQpKTsKKworCQlmY2luZm9faW4tPmlz bnVsbCA9IGZhbHNlOworCQkqb3AtPnJlc3ZhbHVlID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5m b19pbik7CisKKwkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoZmNpbmZvX2luLT5jb250ZXh0KSkK KwkJeworCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0p IDA7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBTaG91bGQgZ2V0IG51bGwgcmVzdWx0IGlmIGFu ZCBvbmx5IGlmIHN0ciBpcyBOVUxMICovCisJCWlmIChzdHIgPT0gTlVMTCkKKwkJCUFzc2VydCgq b3AtPnJlc251bGwpOworCQllbHNlCisJCQlBc3NlcnQoISpvcC0+cmVzbnVsbCk7CisJfQorfQor CiAvKgogICogRXZhbHVhdGUgYSBTUUxWYWx1ZUZ1bmN0aW9uIGV4cHJlc3Npb24uCiAgKi8KQEAg LTM3MzAsNyArMzgwMCw3IEBAIHZvaWQKIEV4ZWNFdmFsQ29uc3RyYWludE5vdE51bGwoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKIHsKIAlpZiAoKm9wLT5yZXNudWxsKQotCQll cmVwb3J0KEVSUk9SLAorCQllcnJzYXZlKChOb2RlICopIG9wLT5kLmRvbWFpbmNoZWNrLmVzY29u dGV4dCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX05PVF9OVUxMX1ZJT0xBVElPTiksCiAJCQkJIGVy cm1zZygiZG9tYWluICVzIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzIiwKIAkJCQkJCWZvcm1h dF90eXBlX2JlKG9wLT5kLmRvbWFpbmNoZWNrLnJlc3VsdHR5cGUpKSwKQEAgLTM3NDUsNyArMzgx NSw3IEBAIEV4ZWNFdmFsQ29uc3RyYWludENoZWNrKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFs U3RlcCAqb3ApCiB7CiAJaWYgKCEqb3AtPmQuZG9tYWluY2hlY2suY2hlY2tudWxsICYmCiAJCSFE YXR1bUdldEJvb2woKm9wLT5kLmRvbWFpbmNoZWNrLmNoZWNrdmFsdWUpKQotCQllcmVwb3J0KEVS Uk9SLAorCQllcnJzYXZlKChOb2RlICopIG9wLT5kLmRvbWFpbmNoZWNrLmVzY29udGV4dCwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0NIRUNLX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZygidmFsdWUg Zm9yIGRvbWFpbiAlcyB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50IFwiJXNcIiIsCiAJCQkJCQlm b3JtYXRfdHlwZV9iZShvcC0+ZC5kb21haW5jaGVjay5yZXN1bHR0eXBlKSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xs dm0vbGx2bWppdF9leHByLmMKaW5kZXggYTNhMDg3NmJmZi4uODE4NTZhOWRjNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTE0MzEsNiArMTQzMSwxMiBAQCBsbHZtX2NvbXBp bGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQlicmVhazsKIAkJCQl9CiAKKwkJCWNhc2Ug RUVPUF9JT0NPRVJDRV9TQUZFOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZh bENvZXJjZVZpYUlPU2FmZSIsCisJCQkJCQkJCXZfc3RhdGUsIG9wKTsKKwkJCQlMTFZNQnVpbGRC cihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOworCiAJCQljYXNlIEVFT1BfRElT VElOQ1Q6CiAJCQljYXNlIEVFT1BfTk9UX0RJU1RJTkNUOgogCQkJCXsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfdHlwZXMuYwppbmRleCA3OTE5MDJmZjFmLi4zYTRiZTA5ZTUwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKKysrIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xNjIsNiArMTYyLDcgQEAgdm9pZAkgICAqcmVm ZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxSb3csCiAJRXhlY0V2YWxSb3dOb3ROdWxs LAogCUV4ZWNFdmFsUm93TnVsbCwKKwlFeGVjRXZhbENvZXJjZVZpYUlPU2FmZSwKIAlFeGVjRXZh bFNRTFZhbHVlRnVuY3Rpb24sCiAJRXhlY0V2YWxTY2FsYXJBcnJheU9wLAogCUV4ZWNFdmFsSGFz aGVkU2NhbGFyQXJyYXlPcCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IDA0ODU3M2MyYmMu LmM0ZmQ5MzMxNTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgK KysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMTYsNiArMTYsNyBAQAog CiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rl cy5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogCiAvKiBmb3J3YXJkIHJlZmVyZW5j ZXMgdG8gYXZvaWQgY2lyY3VsYXJpdHkgKi8KIHN0cnVjdCBFeHByRXZhbFN0ZXA7CkBAIC0xNjgs NiArMTY5LDcgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAogCS8qIGV2YWx1YXRlIGFzc29y dGVkIHNwZWNpYWwtcHVycG9zZSBleHByZXNzaW9uIHR5cGVzICovCiAJRUVPUF9JT0NPRVJDRSwK KwlFRU9QX0lPQ09FUkNFX1NBRkUsCiAJRUVPUF9ESVNUSU5DVCwKIAlFRU9QX05PVF9ESVNUSU5D VCwKIAlFRU9QX05VTExJRiwKQEAgLTU0Nyw2ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHBy RXZhbFN0ZXAKIAkJCWJvb2wJICAgKmNoZWNrbnVsbDsKIAkJCS8qIE9JRCBvZiBkb21haW4gdHlw ZSAqLwogCQkJT2lkCQkJcmVzdWx0dHlwZTsKKwkJCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4 dDsKIAkJfQkJCWRvbWFpbmNoZWNrOwogCiAJCS8qIGZvciBFRU9QX0NPTlZFUlRfUk9XVFlQRSAq LwpAQCAtNzc2LDYgKzc3OSw3IEBAIGV4dGVybiB2b2lkIEV4ZWNFdmFsUGFyYW1FeGVjKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJICBFeHByQ29udGV4dCAqZWNv bnRleHQpOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxQYXJhbUV4dGVybihFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQpOworZXh0 ZXJuIHZvaWQgRXhlY0V2YWxDb2VyY2VWaWFJT1NhZmUoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbFNRTFZhbHVlRnVuY3Rpb24oRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEN1cnJl bnRPZkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9p ZCBFeGVjRXZhbE5leHRWYWx1ZUV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDVkN2YxN2RlZTAuLjZhNzExOGQzMDAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2lu Y2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgorI2luY2x1 ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcmFtcy5oIgogI2luY2x1 ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgpAQCAt MTI5LDYgKzEzMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKIAogCURhdHVtCSAgICpp bm5lcm1vc3RfZG9tYWludmFsOwogCWJvb2wJICAgKmlubmVybW9zdF9kb21haW5udWxsOworCisJ LyoKKwkgKiBGb3IgZXhwcmVzc2lvbiBub2RlcyB0aGF0IHN1cHBvcnQgc29mdCBlcnJvcnMuICBT aG91bGQgYmUgc2V0IHRvIE5VTEwKKwkgKiBiZWZvcmUgY2FsbGluZyBFeGVjSW5pdEV4cHJSZWMo KSBpZiB0aGUgY2FsbGVyIHdhbnRzIGVycm9ycyB0aHJvd24uCisJICovCisJRXJyb3JTYXZlQ29u dGV4dCAqZXNjb250ZXh0OwogfSBFeHByU3RhdGU7CiAKIAotLSAKMi4zNS4zCgo= --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0004-Add-jsonpath_exec-APIs-to-use-in-SQL-JSON-query-.patch" Content-Disposition: attachment; filename="v33-0004-Add-jsonpath_exec-APIs-to-use-in-SQL-JSON-query-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikizi3 RnJvbSA5MTliMWZjNjU1MTE3N2ViMDNkM2I4NjQ5ZjBkNWE1OGFkYTViNTM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMTIgRGVjIDIwMjMgMTg6MjE6MTkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz MyA0LzhdIEFkZCBqc29ucGF0aF9leGVjIEFQSXMgdG8gdXNlIGluIFNRTC9KU09OIHF1ZXJ5CiBm dW5jdGlvbnMKClRoaXMgYWRkcyBKc29uUGF0aEV4aXN0cygpLCBKc29uUGF0aFF1ZXJ5KCksIEpz b25QYXRoVmFsdWUoKSB0aGF0CmFyZSB3cmFwcGVycyBvdmVyIGV4ZWN1dGVKc29uUGF0aCgpIHRv IGltcGxlbWVudCBTUUwvSlNPTiBmdW5jdGlvbnMKSlNPTl9FWElTVFMoKSwgSlNPTl9RVUVSWSgp LCBhbmQgSlNPTl9WQUxVRSgpLCByZXNwZWN0aXZlbHkuICBUaG9zZQpmdW5jdGlvbnMgdGhlbXNl bHZlcyB3aWxsIGJlIGFkZGVkIGluIGEgc3Vic2VxdWVudCBjb21taXQgYWxvbmcgd2l0aAp0aGUg bmVjZXNzYXJ5IHBhcnNlci9wbGFubmVyL2V4ZWN1dG9yIHN1cHBvcnQuCgpUaGlzIGFsc28gaW50 cm9kdWNlcyBhIG5ldyBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZSBmb3IgdGhlIGV4ZWN1dG9yCmlt cGxlbWVudGF0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBiZSBhYmxlIHRvIHBhc3MgdGhlIHZh bHVlcwpvZiB0aGUgdmFyaWFibGVzIHVzZWQgaW4ganNvbnBhdGggdGhhdCBhcmUgc2VwYXJhdGVs eSBldmFsdWF0ZWQKYnkgdGhlIGV4ZWN1dG9yLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFOYmdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5j IHwgMzIyICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaCAgICAgICAgIHwgIDExICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAg ICAgICAgfCAgMjMgKysKIDMgZmlsZXMgY2hhbmdlZCwgMzU2IGluc2VydGlvbnMoKykKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCBjYTA5NWY4NDRjLi4yZWQwNTliY2I0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTIzMiw2ICsyMzIsMTIg QEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29sUmVzdWx0KEpzb25QYXRoRXhl Y0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkgICBKc29uUGF0aEl0ZW0gKmpzcCwgSnNvblZhbHVl TGlzdCAqZm91bmQsIEpzb25QYXRoQm9vbCByZXMpOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhJ dGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCQkJCQkJ CUpzb25iVmFsdWUgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpHZXRKc29uUGF0aFZhcih2 b2lkICpjeHQsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJCQkJCQkgIEpzb25i VmFsdWUgKmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVjdElkKTsKK3N0YXRpYyBpbnQgQ291bnRK c29uUGF0aFZhcnModm9pZCAqY3h0KTsKK3N0YXRpYyB2b2lkIEpzb25JdGVtRnJvbURhdHVtKERh dHVtIHZhbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJICBKc29uYlZhbHVlICpy ZXMpOworc3RhdGljIHZvaWQgSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0oSnNvbmJWYWx1ZSAq amJ2LCBEYXR1bSBudW0pOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhWYXJpYWJsZShKc29uUGF0 aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCUpzb25QYXRoSXRlbSAqdmFyaWFibGUsIEpzb25i VmFsdWUgKnZhbHVlKTsKIHN0YXRpYyBpbnQgY291bnRWYXJpYWJsZXNGcm9tSnNvbmIodm9pZCAq dmFyc0pzb25iKTsKQEAgLTIxMzYsNiArMjE0MiwxNTUgQEAgZ2V0SnNvblBhdGhJdGVtKEpzb25Q YXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCX0KIH0KIAorLyoKKyAq IFJldHVybnMgdGhlIGNvbXB1dGVkIHZhbHVlIG9mIGEgSlNPTiBwYXRoIHZhcmlhYmxlIHdpdGgg Z2l2ZW4gbmFtZS4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorR2V0SnNvblBhdGhWYXIodm9p ZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCSAgIEpzb25iVmFsdWUg KmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVjdElkKQoreworCUpzb25QYXRoVmFyaWFibGUgKnZh ciA9IE5VTEw7CisJTGlzdAkgICAqdmFycyA9IGN4dDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlKc29u YlZhbHVlICpyZXN1bHQ7CisJaW50CQkJaWQgPSAxOworCisJZm9yZWFjaChsYywgdmFycykKKwl7 CisJCUpzb25QYXRoVmFyaWFibGUgKmN1cnZhciA9IGxmaXJzdChsYyk7CisKKwkJaWYgKCFzdHJu Y21wKGN1cnZhci0+bmFtZSwgdmFyTmFtZSwgdmFyTmFtZUxlbikpCisJCXsKKwkJCXZhciA9IGN1 cnZhcjsKKwkJCWJyZWFrOworCQl9CisKKwkJaWQrKzsKKwl9CisKKwlpZiAodmFyID09IE5VTEwp CisJeworCQkqYmFzZU9iamVjdElkID0gLTE7CisJCXJldHVybiBOVUxMOworCX0KKworCXJlc3Vs dCA9IHBhbGxvYyhzaXplb2YoSnNvbmJWYWx1ZSkpOworCWlmICh2YXItPmlzbnVsbCkKKwl7CisJ CSpiYXNlT2JqZWN0SWQgPSAwOworCQlyZXN1bHQtPnR5cGUgPSBqYnZOdWxsOworCX0KKwllbHNl CisJCUpzb25JdGVtRnJvbURhdHVtKHZhci0+dmFsdWUsIHZhci0+dHlwaWQsIHZhci0+dHlwbW9k LCByZXN1bHQpOworCisJKmJhc2VPYmplY3QgPSAqcmVzdWx0OworCSpiYXNlT2JqZWN0SWQgPSBp ZDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK0NvdW50SnNvblBhdGhWYXJz KHZvaWQgKmN4dCkKK3sKKwlMaXN0ICp2YXJzID0gKExpc3QgKikgY3h0OworCisJcmV0dXJuIGxp c3RfbGVuZ3RoKHZhcnMpOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIEpzb25iVmFsdWUgdG8g cGFzcyB0byBqc29ucGF0aCBleGVjdXRvciBmcm9tIGdpdmVuCisgKiBkYXR1bSB2YWx1ZSBvZiB0 aGUgc3BlY2lmaWVkIHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCitKc29uSXRlbUZyb21EYXR1bShE YXR1bSB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBKc29uYlZhbHVlICpyZXMpCit7CisJ c3dpdGNoICh0eXBpZCkKKwl7CisJCWNhc2UgQk9PTE9JRDoKKwkJCXJlcy0+dHlwZSA9IGpidkJv b2w7CisJCQlyZXMtPnZhbC5ib29sZWFuID0gRGF0dW1HZXRCb29sKHZhbCk7CisJCQlicmVhazsK KwkJY2FzZSBOVU1FUklDT0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCB2 YWwpOworCQkJYnJlYWs7CisJCWNhc2UgSU5UMk9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJp Y0RhdHVtKHJlcywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQyX251bWVyaWMsIHZhbCkpOworCQkJ YnJlYWs7CisJCWNhc2UgSU5UNE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJl cywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ0X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJ CWNhc2UgSU5UOE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJlcywgRGlyZWN0 RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJCWNhc2UgRkxP QVQ0T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJlY3RGdW5jdGlv bkNhbGwxKGZsb2F0NF9udW1lcmljLCB2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIEZMT0FUOE9J RDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJlcywgRGlyZWN0RnVuY3Rpb25DYWxs MShmbG9hdDhfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSBURVhUT0lEOgorCQlj YXNlIFZBUkNIQVJPSUQ6CisJCQlyZXMtPnR5cGUgPSBqYnZTdHJpbmc7CisJCQlyZXMtPnZhbC5z dHJpbmcudmFsID0gVkFSREFUQV9BTlkodmFsKTsKKwkJCXJlcy0+dmFsLnN0cmluZy5sZW4gPSBW QVJTSVpFX0FOWV9FWEhEUih2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgREFURU9JRDoKKwkJY2Fz ZSBUSU1FT0lEOgorCQljYXNlIFRJTUVUWk9JRDoKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCWNh c2UgVElNRVNUQU1QVFpPSUQ6CisJCQlyZXMtPnR5cGUgPSBqYnZEYXRldGltZTsKKwkJCXJlcy0+ dmFsLmRhdGV0aW1lLnZhbHVlID0gdmFsOworCQkJcmVzLT52YWwuZGF0ZXRpbWUudHlwaWQgPSB0 eXBpZDsKKwkJCXJlcy0+dmFsLmRhdGV0aW1lLnR5cG1vZCA9IHR5cG1vZDsKKwkJCXJlcy0+dmFs LmRhdGV0aW1lLnR6ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEpTT05CT0lEOgorCQkJeworCQkJ CUpzb25iVmFsdWUgKmpidiA9IHJlczsKKwkJCQlKc29uYgkgICAqamIgPSBEYXR1bUdldEpzb25i UCh2YWwpOworCisJCQkJaWYgKEpzb25Db250YWluZXJJc1NjYWxhcigmamItPnJvb3QpKQorCQkJ CXsKKwkJCQkJYm9vbAkJcmVzdWx0IFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKworCQkJCQly ZXN1bHQgPSBKc29uYkV4dHJhY3RTY2FsYXIoJmpiLT5yb290LCBqYnYpOworCQkJCQlBc3NlcnQo cmVzdWx0KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlKc29uYkluaXRCaW5hcnkoamJ2LCBqYik7 CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgSlNPTk9JRDoKKwkJCXsKKwkJCQl0ZXh0CSAgICp0 eHQgPSBEYXR1bUdldFRleHRQKHZhbCk7CisJCQkJY2hhcgkgICAqc3RyID0gdGV4dF90b19jc3Ry aW5nKHR4dCk7CisJCQkJSnNvbmIJICAgKmpiOworCisJCQkJamIgPSBEYXR1bUdldEpzb25iUChE aXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLAorCQkJCQkJCQkJCQkJCQlDU3RyaW5nR2V0RGF0 dW0oc3RyKSkpOworCQkJCXBmcmVlKHN0cik7CisKKwkJCQlKc29uSXRlbUZyb21EYXR1bShKc29u YlBHZXREYXR1bShqYiksIEpTT05CT0lELCAtMSwgcmVzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ ZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiY291bGQgbm90IGNvbnZlcnQgdmFsdWUg b2YgdHlwZSAlcyB0byBqc29ucGF0aCIsCisJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0eXBpZCkp KTsKKwl9Cit9CisKKy8qIEluaXRpYWxpemUgbnVtZXJpYyB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBk YXR1bSAqLworc3RhdGljIHZvaWQKK0pzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKEpzb25iVmFs dWUgKmpidiwgRGF0dW0gbnVtKQoreworCWpidi0+dHlwZSA9IGpidk51bWVyaWM7CisJamJ2LT52 YWwubnVtZXJpYyA9IERhdHVtR2V0TnVtZXJpYyhudW0pOworfQorCiAvKgogICogR2V0IHRoZSB2 YWx1ZSBvZiB2YXJpYWJsZSBwYXNzZWQgdG8ganNvbnBhdGggZXhlY3V0b3IKICAqLwpAQCAtMjg2 NCwzICszMDE5LDE3MCBAQCBjb21wYXJlRGF0ZXRpbWUoRGF0dW0gdmFsMSwgT2lkIHR5cGlkMSwg RGF0dW0gdmFsMiwgT2lkIHR5cGlkMiwKIAogCXJldHVybiBEYXR1bUdldEludDMyKERpcmVjdEZ1 bmN0aW9uQ2FsbDIoY21wZnVuYywgdmFsMSwgdmFsMikpOwogfQorCisvKgorICogRXhlY3V0b3It Y2FsbGFibGUgSlNPTl9FWElTVFMgaW1wbGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIE5VTEwg aW5zdGVhZCBvZiB0aHJvd2luZyBlcnJvcnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVMTCwgc2V0dGlu ZworICogKmVycm9yIHRvIHRydWUuCisgKi8KK2Jvb2wKK0pzb25QYXRoRXhpc3RzKERhdHVtIGpi LCBKc29uUGF0aCAqanAsIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKQoreworCUpzb25QYXRoRXhl Y1Jlc3VsdCByZXM7CisKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsCisJCQkJCQkg IEdldEpzb25QYXRoVmFyLCBDb3VudEpzb25QYXRoVmFycywKKwkJCQkJCSAgRGF0dW1HZXRKc29u YlAoamIpLCAhZXJyb3IsIE5VTEwsIHRydWUpOworCisJQXNzZXJ0KGVycm9yIHx8ICFqcGVySXNF cnJvcihyZXMpKTsKKworCWlmIChlcnJvciAmJiBqcGVySXNFcnJvcihyZXMpKQorCQkqZXJyb3Ig PSB0cnVlOworCisJcmV0dXJuIHJlcyA9PSBqcGVyT2s7Cit9CisKKy8qCisgKiBFeGVjdXRvci1j YWxsYWJsZSBKU09OX1FVRVJZIGltcGxlbWVudGF0aW9uCisgKgorICogUmV0dXJucyBOVUxMIGlu c3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzIGlmICdlcnJvcicgaXMgbm90IE5VTEwsIHNldHRpbmcK KyAqICplcnJvciB0byB0cnVlLiAgKmVtcHR5IGlzIHNldCB0byB0cnVlIGlmIG5vIG1hdGNoIGlz IGZvdW5kLgorICovCitEYXR1bQorSnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpw LCBKc29uV3JhcHBlciB3cmFwcGVyLCBib29sICplbXB0eSwKKwkJCSAgYm9vbCAqZXJyb3IsIExp c3QgKnZhcnMpCit7CisJSnNvbmJWYWx1ZSAqc2luZ2xldG9uOworCWJvb2wJCXdyYXA7CisJSnNv blZhbHVlTGlzdCBmb3VuZCA9IHswfTsKKwlKc29uUGF0aEV4ZWNSZXN1bHQgcmVzOworCWludAkJ CWNvdW50OworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLAorCQkJCQkJICBHZXRK c29uUGF0aFZhciwgQ291bnRKc29uUGF0aFZhcnMsCisJCQkJCQkgIERhdHVtR2V0SnNvbmJQKGpi KSwgIWVycm9yLCAmZm91bmQsIHRydWUpOworCUFzc2VydChlcnJvciB8fCAhanBlcklzRXJyb3Io cmVzKSk7CisJaWYgKGVycm9yICYmIGpwZXJJc0Vycm9yKHJlcykpCisJeworCQkqZXJyb3IgPSB0 cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwkvKiBX UkFQIG9yIG5vdD8gKi8KKwljb3VudCA9IEpzb25WYWx1ZUxpc3RMZW5ndGgoJmZvdW5kKTsKKwlz aW5nbGV0b24gPSBjb3VudCA+IDAgPyBKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQpIDogTlVMTDsK KwlpZiAoc2luZ2xldG9uID09IE5VTEwpCisJCXdyYXAgPSBmYWxzZTsKKwllbHNlIGlmICh3cmFw cGVyID09IEpTV19OT05FKQorCQl3cmFwID0gZmFsc2U7CisJZWxzZSBpZiAod3JhcHBlciA9PSBK U1dfVU5DT05ESVRJT05BTCkKKwkJd3JhcCA9IHRydWU7CisJZWxzZSBpZiAod3JhcHBlciA9PSBK U1dfQ09ORElUSU9OQUwpCisJCXdyYXAgPSBjb3VudCA+IDEgfHwKKwkJCUlzQUpzb25iU2NhbGFy KHNpbmdsZXRvbikgfHwKKwkJCShzaW5nbGV0b24tPnR5cGUgPT0gamJ2QmluYXJ5ICYmCisJCQkg SnNvbkNvbnRhaW5lcklzU2NhbGFyKHNpbmdsZXRvbi0+dmFsLmJpbmFyeS5kYXRhKSk7CisJZWxz ZQorCXsKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqc29uIHdyYXBwZXIgJWQiLCB3cmFw cGVyKTsKKwkJd3JhcCA9IGZhbHNlOworCX0KKworCWlmICh3cmFwKQorCQlyZXR1cm4gSnNvbmJQ R2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIod3JhcEl0ZW1zSW5BcnJheSgmZm91bmQpKSk7CisK KwkvKiBObyB3cmFwcGluZyBtZWFucyBvbmx5IG9uZSBpdGVtIGlzIGV4cGVjdGVkLiAqLworCWlm IChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJ CQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX01PUkVfVEhBTl9PTkVfU1FMX0pTT05fSVRFTSksCisJCQkJIGVycm1zZygiSlNP TiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9RVUVSWSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBp dGVtIHdpdGhvdXQgd3JhcHBlciIpLAorCQkJCSBlcnJoaW50KCJVc2UgV0lUSCBXUkFQUEVSIGNs YXVzZSB0byB3cmFwIFNRTC9KU09OIGl0ZW0gc2VxdWVuY2UgaW50byBhcnJheS4iKSkpOworCX0K KworCWlmIChzaW5nbGV0b24pCisJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9K c29uYihzaW5nbGV0b24pKTsKKworCSplbXB0eSA9IHRydWU7CisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KKworLyoKKyAqIEV4ZWN1dG9yLWNhbGxhYmxlIEpTT05fVkFMVUUgaW1w bGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIE5VTEwgaW5zdGVhZCBvZiB0aHJvd2luZyBlcnJv cnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVMTCwgc2V0dGluZworICogKmVycm9yIHRvIHRydWUuICAq ZW1wdHkgaXMgc2V0IHRvIHRydWUgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCisgKi8KK0pzb25iVmFs dWUgKgorSnNvblBhdGhWYWx1ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwg Ym9vbCAqZXJyb3IsIExpc3QgKnZhcnMpCit7CisJSnNvbmJWYWx1ZSAqcmVzOworCUpzb25WYWx1 ZUxpc3QgZm91bmQgPSB7MH07CisJSnNvblBhdGhFeGVjUmVzdWx0IGpwZXIgUEdfVVNFRF9GT1Jf QVNTRVJUU19PTkxZOworCWludAkJCWNvdW50OworCisJanBlciA9IGV4ZWN1dGVKc29uUGF0aChq cCwgdmFycywgR2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJCQkJICAgRGF0 dW1HZXRKc29uYlAoamIpLAorCQkJCQkJICAgIWVycm9yLCAmZm91bmQsIHRydWUpOworCisJQXNz ZXJ0KGVycm9yIHx8ICFqcGVySXNFcnJvcihqcGVyKSk7CisKKwlpZiAoZXJyb3IgJiYganBlcklz RXJyb3IoanBlcikpCisJeworCQkqZXJyb3IgPSB0cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJY291bnQgPSBKc29uVmFsdWVMaXN0TGVuZ3RoKCZmb3VuZCk7 CisKKwkqZW1wdHkgPSAoY291bnQgPT0gMCk7CisKKwlpZiAoKmVtcHR5KQorCQlyZXR1cm4gTlVM TDsKKworCS8qIEpTT05fVkFMVUUgZXhwZWN0cyB0byBnZXQgb25seSBzaW5nbGV0b25zLiAqLwor CWlmIChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9NT1JFX1RIQU5fT05FX1NRTF9KU09OX0lURU0pLAorCQkJCSBlcnJtc2coIkpTT04g cGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2Nh bGFyIGl0ZW0iKSkpOworCX0KKworCXJlcyA9IEpzb25WYWx1ZUxpc3RIZWFkKCZmb3VuZCk7CisJ aWYgKHJlcy0+dHlwZSA9PSBqYnZCaW5hcnkgJiYgSnNvbkNvbnRhaW5lcklzU2NhbGFyKHJlcy0+ dmFsLmJpbmFyeS5kYXRhKSkKKwkJSnNvbmJFeHRyYWN0U2NhbGFyKHJlcy0+dmFsLmJpbmFyeS5k YXRhLCByZXMpOworCisJLyogSlNPTl9WQUxVRSBleHBlY3RzIHRvIGdldCBvbmx5IHNjYWxhcnMu ICovCisJaWYgKCFJc0FKc29uYlNjYWxhcihyZXMpKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJ CQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fU0NBTEFSX1JFUVVJUkVEKSwKKwkJCQkg ZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09OX1ZBTFVFIHNob3VsZCByZXR1cm4g c2luZ2xldG9uIHNjYWxhciBpdGVtIikpKTsKKwl9CisKKwlpZiAocmVzLT50eXBlID09IGpidk51 bGwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgK aW5kZXggYmI5MzBhZmI1Mi4uNDgwZWMzMmFkYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTE1 NzYsNiArMTU3NiwxNyBAQCB0eXBlZGVmIGVudW0gSnNvbkZvcm1hdFR5cGUKIAkJCQkJCQkJICog anNvbmIgKi8KIH0gSnNvbkZvcm1hdFR5cGU7CiAKKy8qCisgKiBKc29uV3JhcHBlciAtCisgKgkJ cmVwcmVzZW50YXRpb24gb2YgV1JBUFBFUiBjbGF1c2UgZm9yIEpzb25QYXRoUXVlcnkoKQorICov Cit0eXBlZGVmIGVudW0gSnNvbldyYXBwZXIKK3sKKwlKU1dfTk9ORSwKKwlKU1dfQ09ORElUSU9O QUwsCisJSlNXX1VOQ09ORElUSU9OQUwsCit9IEpzb25XcmFwcGVyOworCiAvKgogICogSnNvbkZv cm1hdCAtCiAgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBGT1JNQVQgY2xhdXNlCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNv bnBhdGguaAppbmRleCBmMDE4MWUwNDVmLi44Y2NmOTRmN2I0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9qc29ucGF0aC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgK QEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJub2Rlcy9w Z19saXN0LmgiCisjaW5jbHVkZSAibm9kZXMvcHJpbW5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbmIuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTI2MSw0ICsyNjIsMjYgQEAgZXh0ZXJuIGJv b2wganNwQ29udmVydFJlZ2V4RmxhZ3ModWludDMyIHhmbGFncywgaW50ICpyZXN1bHQsCiAJCQkJ CQkJCSBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKIAogCisvKgorICogRXZhbHVhdGlvbiBvZiBq c29ucGF0aAorICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxlIHBhc3NlZCBpbnRvIGpzb25wYXRo LiAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZQoreworCWNoYXIJICAgKm5hbWU7 CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlEYXR1bQkJdmFsdWU7CisJYm9vbAkJ aXNudWxsOworfSBKc29uUGF0aFZhcmlhYmxlOworCisKKy8qIFNRTC9KU09OIGl0ZW0gKi8KK2V4 dGVybiBib29sIEpzb25QYXRoRXhpc3RzKERhdHVtIGpiLCBKc29uUGF0aCAqcGF0aCwgYm9vbCAq ZXJyb3IsIExpc3QgKnZhcnMpOworZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnkoRGF0dW0gamIs IEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKKwkJCQkJCSAgIGJvb2wgKmVtcHR5 LCBib29sICplcnJvciwgTGlzdCAqdmFycyk7CitleHRlcm4gSnNvbmJWYWx1ZSAqSnNvblBhdGhW YWx1ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwKKwkJCQkJCQkJIGJvb2wg KmVycm9yLCBMaXN0ICp2YXJzKTsKKwogI2VuZGlmCi0tIAoyLjM1LjMKCg== --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0003-Refactor-code-used-by-jsonpath-executor-to-fetch.patch" Content-Disposition: attachment; filename="v33-0003-Refactor-code-used-by-jsonpath-executor-to-fetch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikizg2 RnJvbSBlMDkyNjM4NmRlZTBhYmRmYjk0ODgxMjMxNTM3YzgzMGY0YjI0MjJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxNzowNjoxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMz IDMvOF0gUmVmYWN0b3IgY29kZSB1c2VkIGJ5IGpzb25wYXRoIGV4ZWN1dG9yIHRvIGZldGNoCiB2 YXJpYWJsZXMKCkN1cnJlbnRseSwgZ2V0SnNvblBhdGhWYXJpYWJsZSgpIGRpcmVjdGx5IGV4dHJh Y3RzIGEgbmFtZWQKdmFyaWFibGUva2V5IGZyb20gdGhlIHNvdXJjZSBKc29uYiB2YWx1ZS4gIFRo aXMgY29tbWl0IHB1dHMgdGhhdApsb2dpYyBpbnRvIGEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVk IGJ5IGdldEpzb25QYXRoVmFyaWFibGUoKS4KT3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBj YWxsYmFjayBtYXkgYWNjZXB0IGRpZmZlcmVudCBmb3JtcwpvZiB0aGUgc291cmNlIHZhbHVlKHMp LCBmb3IgZXhhbXBsZSwgYSBMaXN0IG9mIHZhbHVlcyBwYXNzZWQgZnJvbQpvdXRzaWRlIGpzb25w YXRoX2V4ZWMuYy4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUU0WFRk ZmIxblc9T2pveV90UVNSaFl0LXFfa2I2aTVkNHhjS3lyTEMxTmJnQG1haWwuZ21haWwuY29tCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyB8IDEzMiArKysrKysrKysr KysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDkyIGluc2VydGlvbnMoKyksIDQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9l eGVjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCmluZGV4IDJkMDU5 OWI0YWEuLmNhMDk1Zjg0NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aF9leGVjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwpA QCAtODcsMTIgKzg3LDE3IEBAIHR5cGVkZWYgc3RydWN0IEpzb25CYXNlT2JqZWN0SW5mbwogCWlu dAkJCWlkOwogfSBKc29uQmFzZU9iamVjdEluZm87CiAKK3R5cGVkZWYgSnNvbmJWYWx1ZSAqKCpK c29uUGF0aFZhckNhbGxiYWNrKSAodm9pZCAqdmFycywgY2hhciAqdmFyTmFtZSwgaW50IHZhck5h bWVMZW4sCisJCQkJCQkJCQkJCUpzb25iVmFsdWUgKmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVj dElkKTsKK3R5cGVkZWYgaW50ICgqSnNvblBhdGhDb3VudFZhcnNDYWxsYmFjaykgKHZvaWQgKnZh cnMpOworCiAvKgogICogQ29udGV4dCBvZiBqc29ucGF0aCBleGVjdXRpb24uCiAgKi8KIHR5cGVk ZWYgc3RydWN0IEpzb25QYXRoRXhlY0NvbnRleHQKIHsKLQlKc29uYgkgICAqdmFyczsJCQkvKiB2 YXJpYWJsZXMgdG8gc3Vic3RpdHV0ZSBpbnRvIGpzb25wYXRoICovCisJdm9pZAkgICAqdmFyczsJ CQkvKiB2YXJpYWJsZXMgdG8gc3Vic3RpdHV0ZSBpbnRvIGpzb25wYXRoICovCisJSnNvblBhdGhW YXJDYWxsYmFjayBnZXRWYXI7CiAJSnNvbmJWYWx1ZSAqcm9vdDsJCQkvKiBmb3IgJCBldmFsdWF0 aW9uICovCiAJSnNvbmJWYWx1ZSAqY3VycmVudDsJCS8qIGZvciBAIGV2YWx1YXRpb24gKi8KIAlK c29uQmFzZU9iamVjdEluZm8gYmFzZU9iamVjdDsJLyogImJhc2Ugb2JqZWN0IiBmb3IgLmtleXZh bHVlKCkKQEAgLTE3NCw3ICsxNzksOSBAQCB0eXBlZGVmIEpzb25QYXRoQm9vbCAoKkpzb25QYXRo UHJlZGljYXRlQ2FsbGJhY2spIChKc29uUGF0aEl0ZW0gKmpzcCwKIAkJCQkJCQkJCQkJCSAgIHZv aWQgKnBhcmFtKTsKIHR5cGVkZWYgTnVtZXJpYyAoKkJpbmFyeUFyaXRobUZ1bmMpIChOdW1lcmlj IG51bTEsIE51bWVyaWMgbnVtMiwgYm9vbCAqZXJyb3IpOwogCi1zdGF0aWMgSnNvblBhdGhFeGVj UmVzdWx0IGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwgSnNvbmIgKnZhcnMsCitzdGF0 aWMgSnNvblBhdGhFeGVjUmVzdWx0IGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwgdm9p ZCAqdmFycywKKwkJCQkJCQkJCQkgIEpzb25QYXRoVmFyQ2FsbGJhY2sgZ2V0VmFyLAorCQkJCQkJ CQkJCSAgSnNvblBhdGhDb3VudFZhcnNDYWxsYmFjayBjb3VudFZhcnMsCiAJCQkJCQkJCQkJICBK c29uYiAqanNvbiwgYm9vbCB0aHJvd0Vycm9ycywKIAkJCQkJCQkJCQkgIEpzb25WYWx1ZUxpc3Qg KnJlc3VsdCwgYm9vbCB1c2VUeik7CiBzdGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGV4ZWN1dGVJ dGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKQEAgLTIyNiw3ICsyMzMsMTIgQEAgc3RhdGlj IEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29sUmVzdWx0KEpzb25QYXRoRXhlY0NvbnRleHQg KmN4dCwKIHN0YXRpYyB2b2lkIGdldEpzb25QYXRoSXRlbShKc29uUGF0aEV4ZWNDb250ZXh0ICpj eHQsIEpzb25QYXRoSXRlbSAqaXRlbSwKIAkJCQkJCQlKc29uYlZhbHVlICp2YWx1ZSk7CiBzdGF0 aWMgdm9pZCBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKLQkJ CQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmIgKnZhcnMsIEpzb25iVmFsdWUgKnZh bHVlKTsKKwkJCQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmJWYWx1ZSAqdmFsdWUp Oworc3RhdGljIGludCBjb3VudFZhcmlhYmxlc0Zyb21Kc29uYih2b2lkICp2YXJzSnNvbmIpOwor c3RhdGljIEpzb25iVmFsdWUgKmdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIodm9pZCAqdmFy c0pzb25iLCBjaGFyICp2YXJOYW1lLAorCQkJCQkJCQkJCQkJaW50IHZhck5hbWVMZW4sCisJCQkJ CQkJCQkJCQlKc29uYlZhbHVlICpiYXNlT2JqZWN0LAorCQkJCQkJCQkJCQkJaW50ICpiYXNlT2Jq ZWN0SWQpOwogc3RhdGljIGludAlKc29uYkFycmF5U2l6ZShKc29uYlZhbHVlICpqYik7CiBzdGF0 aWMgSnNvblBhdGhCb29sIGV4ZWN1dGVDb21wYXJpc29uKEpzb25QYXRoSXRlbSAqY21wLCBKc29u YlZhbHVlICpsdiwKIAkJCQkJCQkJCSAgSnNvbmJWYWx1ZSAqcnYsIHZvaWQgKnApOwpAQCAtMjg0 LDcgKzI5Niw5IEBAIGpzb25iX3BhdGhfZXhpc3RzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBib29sIHR6KQogCQlzaWxlbnQgPSBQR19HRVRBUkdfQk9PTCgzKTsKIAl9CiAKLQly ZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGpiLCAhc2lsZW50LCBOVUxMLCB0eik7CisJ cmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBnZXRKc29uUGF0aFZhcmlhYmxlRnJvbUpz b25iLAorCQkJCQkJICBjb3VudFZhcmlhYmxlc0Zyb21Kc29uYiwKKwkJCQkJCSAgamIsICFzaWxl bnQsIE5VTEwsIHR6KTsKIAogCVBHX0ZSRUVfSUZfQ09QWShqYiwgMCk7CiAJUEdfRlJFRV9JRl9D T1BZKGpwLCAxKTsKQEAgLTMzOSw3ICszNTMsOSBAQCBqc29uYl9wYXRoX21hdGNoX2ludGVybmFs KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIHR6KQogCQlzaWxlbnQgPSBQR19HRVRBUkdf Qk9PTCgzKTsKIAl9CiAKLQkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBqYiwgIXNp bGVudCwgJmZvdW5kLCB0eik7CisJKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgZ2V0 SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYiwKKwkJCQkJCSAgIGNvdW50VmFyaWFibGVzRnJvbUpz b25iLAorCQkJCQkJICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOwogCiAJUEdfRlJFRV9JRl9D T1BZKGpiLCAwKTsKIAlQR19GUkVFX0lGX0NPUFkoanAsIDEpOwpAQCAtNDE3LDcgKzQzMyw5IEBA IGpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wg dHopCiAJCXZhcnMgPSBQR19HRVRBUkdfSlNPTkJfUF9DT1BZKDIpOwogCQlzaWxlbnQgPSBQR19H RVRBUkdfQk9PTCgzKTsKIAotCQkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBqYiwg IXNpbGVudCwgJmZvdW5kLCB0eik7CisJCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMs IGdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkJICAgY291bnRWYXJpYWJsZXNG cm9tSnNvbmIsCisJCQkJCQkJICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOwogCiAJCWZ1bmNj dHgtPnVzZXJfZmN0eCA9IEpzb25WYWx1ZUxpc3RHZXRMaXN0KCZmb3VuZCk7CiAKQEAgLTQ2NCw3 ICs0ODIsOSBAQCBqc29uYl9wYXRoX3F1ZXJ5X2FycmF5X2ludGVybmFsKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLCBib29sIHR6KQogCUpzb25iCSAgICp2YXJzID0gUEdfR0VUQVJHX0pTT05CX1Ao Mik7CiAJYm9vbAkJc2lsZW50ID0gUEdfR0VUQVJHX0JPT0woMyk7CiAKLQkodm9pZCkgZXhlY3V0 ZUpzb25QYXRoKGpwLCB2YXJzLCBqYiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CisJKHZvaWQpIGV4 ZWN1dGVKc29uUGF0aChqcCwgdmFycywgZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYiwKKwkJ CQkJCSAgIGNvdW50VmFyaWFibGVzRnJvbUpzb25iLAorCQkJCQkJICAgamIsICFzaWxlbnQsICZm b3VuZCwgdHopOwogCiAJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIod3JhcEl0 ZW1zSW5BcnJheSgmZm91bmQpKSk7CiB9CkBAIC00OTUsNyArNTE1LDkgQEAganNvbmJfcGF0aF9x dWVyeV9maXJzdF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCB0eikKIAlK c29uYgkgICAqdmFycyA9IFBHX0dFVEFSR19KU09OQl9QKDIpOwogCWJvb2wJCXNpbGVudCA9IFBH X0dFVEFSR19CT09MKDMpOwogCi0JKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgamIs ICFzaWxlbnQsICZmb3VuZCwgdHopOworCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMs IGdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkgICBjb3VudFZhcmlhYmxlc0Zy b21Kc29uYiwKKwkJCQkJCSAgIGpiLCAhc2lsZW50LCAmZm91bmQsIHR6KTsKIAogCWlmIChKc29u VmFsdWVMaXN0TGVuZ3RoKCZmb3VuZCkgPj0gMSkKIAkJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJW YWx1ZVRvSnNvbmIoSnNvblZhbHVlTGlzdEhlYWQoJmZvdW5kKSkpOwpAQCAtNTIyLDYgKzU0NCw5 IEBAIGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfdHooUEdfRlVOQ1RJT05fQVJHUykKICAqCiAgKiAn cGF0aCcgLSBqc29ucGF0aCB0byBiZSBleGVjdXRlZAogICogJ3ZhcnMnIC0gdmFyaWFibGVzIHRv IGJlIHN1YnN0aXR1dGVkIHRvIGpzb25wYXRoCisgKiAnZ2V0VmFyJyAtIGNhbGxiYWNrIHVzZWQg YnkgZ2V0SnNvblBhdGhWYXJpYWJsZSgpIHRvIGV4dHJhY3QgdmFyaWFibGVzIGZyb20KKyAqCQkn dmFycycKKyAqICdjb3VudFZhcnMnIC0gY2FsbGJhY2sgdG8gY291bnQgdGhlIG51bWJlciBvZiBq c29ucGF0aCB2YXJpYWJsZXMgaW4gJ3ZhcnMnCiAgKiAnanNvbicgLSB0YXJnZXQgZG9jdW1lbnQg Zm9yIGpzb25wYXRoIGV2YWx1YXRpb24KICAqICd0aHJvd0Vycm9ycycgLSB3aGV0aGVyIHdlIHNo b3VsZCB0aHJvdyBzdXBwcmVzc2libGUgZXJyb3JzCiAgKiAncmVzdWx0JyAtIGxpc3QgdG8gc3Rv cmUgcmVzdWx0IGl0ZW1zIGludG8KQEAgLTUzNyw4ICs1NjIsMTAgQEAganNvbmJfcGF0aF9xdWVy eV9maXJzdF90eihQR19GVU5DVElPTl9BUkdTKQogICogSW4gb3RoZXIgY2FzZSBpdCB0cmllcyB0 byBmaW5kIGFsbCB0aGUgc2F0aXNmaWVkIHJlc3VsdCBpdGVtcy4KICAqLwogc3RhdGljIEpzb25Q YXRoRXhlY1Jlc3VsdAotZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRoLCBKc29uYiAqdmFy cywgSnNvbmIgKmpzb24sIGJvb2wgdGhyb3dFcnJvcnMsCi0JCQkJSnNvblZhbHVlTGlzdCAqcmVz dWx0LCBib29sIHVzZVR6KQorZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRoLCB2b2lkICp2 YXJzLCBKc29uUGF0aFZhckNhbGxiYWNrIGdldFZhciwKKwkJCQlKc29uUGF0aENvdW50VmFyc0Nh bGxiYWNrIGNvdW50VmFycywKKwkJCQlKc29uYiAqanNvbiwgYm9vbCB0aHJvd0Vycm9ycywgSnNv blZhbHVlTGlzdCAqcmVzdWx0LAorCQkJCWJvb2wgdXNlVHopCiB7CiAJSnNvblBhdGhFeGVjQ29u dGV4dCBjeHQ7CiAJSnNvblBhdGhFeGVjUmVzdWx0IHJlczsKQEAgLTU1MCwyMiArNTc3LDE2IEBA IGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwgSnNvbmIgKnZhcnMsIEpzb25iICpqc29u LCBib29sIHRocm93RXJyb3JzLAogCWlmICghSnNvbmJFeHRyYWN0U2NhbGFyKCZqc29uLT5yb290 LCAmamJ2KSkKIAkJSnNvbmJJbml0QmluYXJ5KCZqYnYsIGpzb24pOwogCi0JaWYgKHZhcnMgJiYg IUpzb25Db250YWluZXJJc09iamVjdCgmdmFycy0+cm9vdCkpCi0JewotCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCSBl cnJtc2coIlwidmFyc1wiIGFyZ3VtZW50IGlzIG5vdCBhbiBvYmplY3QiKSwKLQkJCQkgZXJyZGV0 YWlsKCJKc29ucGF0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBlbmNvZGVkIGFzIGtleS12YWx1ZSBw YWlycyBvZiBcInZhcnNcIiBvYmplY3QuIikpKTsKLQl9Ci0KIAljeHQudmFycyA9IHZhcnM7CisJ Y3h0LmdldFZhciA9IGdldFZhcjsKIAljeHQubGF4TW9kZSA9IChwYXRoLT5oZWFkZXIgJiBKU09O UEFUSF9MQVgpICE9IDA7CiAJY3h0Lmlnbm9yZVN0cnVjdHVyYWxFcnJvcnMgPSBjeHQubGF4TW9k ZTsKIAljeHQucm9vdCA9ICZqYnY7CiAJY3h0LmN1cnJlbnQgPSAmamJ2OwogCWN4dC5iYXNlT2Jq ZWN0LmpiYyA9IE5VTEw7CiAJY3h0LmJhc2VPYmplY3QuaWQgPSAwOwotCWN4dC5sYXN0R2VuZXJh dGVkT2JqZWN0SWQgPSB2YXJzID8gMiA6IDE7CisJLyogMSArIG51bWJlciBvZiBiYXNlIG9iamVj dHMgaW4gdmFycyAqLworCWN4dC5sYXN0R2VuZXJhdGVkT2JqZWN0SWQgPSAxICsgY291bnRWYXJz KHZhcnMpOwogCWN4dC5pbm5lcm1vc3RBcnJheVNpemUgPSAtMTsKIAljeHQudGhyb3dFcnJvcnMg PSB0aHJvd0Vycm9yczsKIAljeHQudXNlVHogPSB1c2VUejsKQEAgLTIxMDgsNyArMjEyOSw3IEBA IGdldEpzb25QYXRoSXRlbShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAq aXRlbSwKIAkJCQkJCQkJCQkJCSAmdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKIAkJCWJyZWFrOwog CQljYXNlIGpwaVZhcmlhYmxlOgotCQkJZ2V0SnNvblBhdGhWYXJpYWJsZShjeHQsIGl0ZW0sIGN4 dC0+dmFycywgdmFsdWUpOworCQkJZ2V0SnNvblBhdGhWYXJpYWJsZShjeHQsIGl0ZW0sIHZhbHVl KTsKIAkJCXJldHVybjsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpz b25wYXRoIGl0ZW0gdHlwZSIpOwpAQCAtMjEyMCw0MiArMjE0MSw3MyBAQCBnZXRKc29uUGF0aEl0 ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0sCiAgKi8KIHN0 YXRpYyB2b2lkCiBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwg SnNvblBhdGhJdGVtICp2YXJpYWJsZSwKLQkJCQkJSnNvbmIgKnZhcnMsIEpzb25iVmFsdWUgKnZh bHVlKQorCQkJCQlKc29uYlZhbHVlICp2YWx1ZSkKIHsKIAljaGFyCSAgICp2YXJOYW1lOwogCWlu dAkJCXZhck5hbWVMZW5ndGg7Ci0JSnNvbmJWYWx1ZQl0bXA7CisJSnNvbmJWYWx1ZQliYXNlT2Jq ZWN0OworCWludAkJCWJhc2VPYmplY3RJZDsKIAlKc29uYlZhbHVlICp2OwogCi0JaWYgKCF2YXJz KQotCXsKLQkJdmFsdWUtPnR5cGUgPSBqYnZOdWxsOwotCQlyZXR1cm47Ci0JfQotCiAJQXNzZXJ0 KHZhcmlhYmxlLT50eXBlID09IGpwaVZhcmlhYmxlKTsKIAl2YXJOYW1lID0ganNwR2V0U3RyaW5n KHZhcmlhYmxlLCAmdmFyTmFtZUxlbmd0aCk7Ci0JdG1wLnR5cGUgPSBqYnZTdHJpbmc7Ci0JdG1w LnZhbC5zdHJpbmcudmFsID0gdmFyTmFtZTsKLQl0bXAudmFsLnN0cmluZy5sZW4gPSB2YXJOYW1l TGVuZ3RoOwogCi0JdiA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcigmdmFycy0+cm9vdCwg SkJfRk9CSkVDVCwgJnRtcCk7CisJaWYgKGN4dC0+dmFycyA9PSBOVUxMIHx8CisJCSh2ID0gY3h0 LT5nZXRWYXIoY3h0LT52YXJzLCB2YXJOYW1lLCB2YXJOYW1lTGVuZ3RoLAorCQkJCQkJICZiYXNl T2JqZWN0LCAmYmFzZU9iamVjdElkKSkgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coImNvdWxkIG5v dCBmaW5kIGpzb25wYXRoIHZhcmlhYmxlIFwiJXNcIiIsCisJCQkJCQlwbnN0cmR1cCh2YXJOYW1l LCB2YXJOYW1lTGVuZ3RoKSkpKTsKIAotCWlmICh2KQorCWlmIChiYXNlT2JqZWN0SWQgPiAwKQog CXsKIAkJKnZhbHVlID0gKnY7Ci0JCXBmcmVlKHYpOworCQlzZXRCYXNlT2JqZWN0KGN4dCwgJmJh c2VPYmplY3QsIGJhc2VPYmplY3RJZCk7CiAJfQotCWVsc2UKK30KKworc3RhdGljIGludAorY291 bnRWYXJpYWJsZXNGcm9tSnNvbmIodm9pZCAqdmFyc0pzb25iKQoreworCUpzb25iCSAgICp2YXJz ID0gdmFyc0pzb25iOworCisJaWYgKHZhcnMgJiYgIUpzb25Db250YWluZXJJc09iamVjdCgmdmFy cy0+cm9vdCkpCiAJewogCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfVU5E RUZJTkVEX09CSkVDVCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IGZpbmQganNvbnBhdGggdmFy aWFibGUgXCIlc1wiIiwKLQkJCQkJCXBuc3RyZHVwKHZhck5hbWUsIHZhck5hbWVMZW5ndGgpKSkp OworCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJy bXNnKCJcInZhcnNcIiBhcmd1bWVudCBpcyBub3QgYW4gb2JqZWN0IiksCisJCQkJZXJyZGV0YWls KCJKc29ucGF0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBlbmNvZGVkIGFzIGtleS12YWx1ZSBwYWly cyBvZiBcInZhcnNcIiBvYmplY3QuIikpOwogCX0KIAotCUpzb25iSW5pdEJpbmFyeSgmdG1wLCB2 YXJzKTsKLQlzZXRCYXNlT2JqZWN0KGN4dCwgJnRtcCwgMSk7CisJLyogY291bnQgb2YgYmFzZSBv YmplY3RzICovCisJcmV0dXJuIHZhcnMgPyAxIDogMDsKK30KKworc3RhdGljIEpzb25iVmFsdWUg KgorZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYih2b2lkICp2YXJzSnNvbmIsIGNoYXIgKnZh ck5hbWUsIGludCB2YXJOYW1lTGVuZ3RoLAorCQkJCQkJCSBKc29uYlZhbHVlICpiYXNlT2JqZWN0 LCBpbnQgKmJhc2VPYmplY3RJZCkKK3sKKwlKc29uYgkgICAqdmFycyA9IHZhcnNKc29uYjsKKwlK c29uYlZhbHVlCXRtcDsKKwlKc29uYlZhbHVlICpyZXN1bHQ7CisKKwl0bXAudHlwZSA9IGpidlN0 cmluZzsKKwl0bXAudmFsLnN0cmluZy52YWwgPSB2YXJOYW1lOworCXRtcC52YWwuc3RyaW5nLmxl biA9IHZhck5hbWVMZW5ndGg7CisKKwlyZXN1bHQgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWlu ZXIoJnZhcnMtPnJvb3QsIEpCX0ZPQkpFQ1QsICZ0bXApOworCisJaWYgKHJlc3VsdCA9PSBOVUxM KQorCXsKKwkJKmJhc2VPYmplY3RJZCA9IC0xOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkqYmFz ZU9iamVjdElkID0gMTsKKwlKc29uYkluaXRCaW5hcnkoYmFzZU9iamVjdCwgdmFycyk7CisKKwly ZXR1cm4gcmVzdWx0OwogfQogCiAvKioqKioqKioqKioqKioqKiBTdXBwb3J0IGZ1bmN0aW9ucyBm b3IgSnNvblBhdGggZXhlY3V0aW9uICoqKioqKioqKioqKioqKioqLwotLSAKMi4zNS4zCgo= --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0006-Add-jsonb-support-function-JsonbUnquote.patch" Content-Disposition: attachment; filename="v33-0006-Add-jsonb-support-function-JsonbUnquote.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikizk5 RnJvbSAyMWEzZDdlMDNhZDIxYzNmOWFkOTNkMTVjNmRmYWFkNGRkMzU2OTlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTQgRGVjIDIwMjMgMTU6MTI6MjcgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz MyA2LzhdIEFkZCBqc29uYiBzdXBwb3J0IGZ1bmN0aW9uIEpzb25iVW5xdW90ZSgpCgpBcyB0aGUg bmFtZSBzYXlzLCBpdCdzIGludGVuZGVkIHRvIGV4dHJhY3QgYSBzY2FsYXIgc3RyaW5nIHZhbHVl CndpdGggYW55IHF1b3RlcyByZW1vdmVkLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFOYmdAbWFp bC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyB8IDMxICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggICAg IHwgIDEgKwogMiBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bmIuYwppbmRleCA2ZjQ0NWY1YzJiLi5lNWRjYTQ2Yjk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpA QCAtMjE2MywzICsyMTYzLDM0IEBAIGpzb25iX2Zsb2F0OChQR19GVU5DVElPTl9BUkdTKQogCiAJ UEdfUkVUVVJOX0RBVFVNKHJldFZhbHVlKTsKIH0KKworLyoKKyAqIENvbnZlcnQganNvbmIgdG8g YSBDLXN0cmluZyBzdHJpcHBpbmcgcXVvdGVzIGZyb20gc2NhbGFyIHN0cmluZ3MuCisgKi8KK2No YXIgKgorSnNvbmJVbnF1b3RlKEpzb25iICpqYikKK3sKKwlpZiAoSkJfUk9PVF9JU19TQ0FMQVIo amIpKQorCXsKKwkJSnNvbmJWYWx1ZQl2OworCisJCSh2b2lkKSBKc29uYkV4dHJhY3RTY2FsYXIo JmpiLT5yb290LCAmdik7CisKKwkJaWYgKHYudHlwZSA9PSBqYnZTdHJpbmcpCisJCQlyZXR1cm4g cG5zdHJkdXAodi52YWwuc3RyaW5nLnZhbCwgdi52YWwuc3RyaW5nLmxlbik7CisJCWVsc2UgaWYg KHYudHlwZSA9PSBqYnZCb29sKQorCQkJcmV0dXJuIHBzdHJkdXAodi52YWwuYm9vbGVhbiA/ICJ0 cnVlIiA6ICJmYWxzZSIpOworCQllbHNlIGlmICh2LnR5cGUgPT0gamJ2TnVtZXJpYykKKwkJCXJl dHVybiBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJ CQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0odi52YWwubnVtZXJpYykpKTsKKwkJZWxzZSBp ZiAodi50eXBlID09IGpidk51bGwpCisJCQlyZXR1cm4gcHN0cmR1cCgibnVsbCIpOworCQllbHNl CisJCXsKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNvbmIgdmFsdWUgdHlwZSAlZCIs IHYudHlwZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwllbHNlCisJCXJldHVybiBKc29u YlRvQ1N0cmluZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKK30KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCmlu ZGV4IGFkZGM5YjYwOGUuLjYxM2Q1OTUzZjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L2pzb25iLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaApAQCAtNDIyLDYgKzQyMiw3 IEBAIGV4dGVybiBjaGFyICpKc29uYlRvQ1N0cmluZyhTdHJpbmdJbmZvIG91dCwgSnNvbmJDb250 YWluZXIgKmluLAogCQkJCQkJCWludCBlc3RpbWF0ZWRfbGVuKTsKIGV4dGVybiBjaGFyICpKc29u YlRvQ1N0cmluZ0luZGVudChTdHJpbmdJbmZvIG91dCwgSnNvbmJDb250YWluZXIgKmluLAogCQkJ CQkJCQkgIGludCBlc3RpbWF0ZWRfbGVuKTsKK2V4dGVybiBjaGFyICpKc29uYlVucXVvdGUoSnNv bmIgKmpiKTsKIGV4dGVybiBib29sIEpzb25iRXh0cmFjdFNjYWxhcihKc29uYkNvbnRhaW5lciAq amJjLCBKc29uYlZhbHVlICpyZXMpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKkpzb25iVHlwZU5hbWUo SnNvbmJWYWx1ZSAqdmFsKTsKIAotLSAKMi4zNS4zCgo= --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0007-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v33-0007-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikizl6 RnJvbSBjODMzNDAxNjk5MDA0MzcwNjQzYzVkNjgxMmEwYWJmN2I2YThiODc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgNSBEZWMgMjAyMyAxNDozMzoyNSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMz IDcvOF0gU1FML0pTT04gcXVlcnkgZnVuY3Rpb25zCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQt VHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIGludHJvZHVjZXMgdGhlIFNRTC9KU09OIGZ1bmN0aW9ucyBmb3IgcXVlcnlp bmcgSlNPTiBkYXRhIHVzaW5nCmpzb25wYXRoIGV4cHJlc3Npb25zLiBUaGUgZnVuY3Rpb25zIGFy ZToKCkpTT05fRVhJU1RTKCkKSlNPTl9RVUVSWSgpCkpTT05fVkFMVUUoKQoKSlNPTl9FWElTVFMo KSB0ZXN0cyBpZiB0aGUganNvbnBhdGggZXhwcmVzc2lvbiBhcHBsaWVkIHRvIHRoZSBqc29uYgp2 YWx1ZSB5aWVsZHMgYW55IHZhbHVlcy4KCkpTT05fVkFMVUUoKSBtdXN0IHJldHVybiBhIHNpbmds ZSB2YWx1ZSwgYW5kIGFuIGVycm9yIG9jY3VycyBpZiBpdAp0cmllcyB0byByZXR1cm4gbXVsdGlw bGUgdmFsdWVzLgoKSlNPTl9RVUVSWSgpIG11c3QgcmV0dXJuIGEganNvbiBvYmplY3Qgb3IgYXJy YXksIGFuZCB0aGVyZSBhcmUKdmFyaW91cyBXUkFQUEVSIG9wdGlvbnMgZm9yIGhhbmRsaW5nIHNj YWxhciBvciBtdWx0aS12YWx1ZSByZXN1bHRzLgpCb3RoIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIG9w dGlvbnMgZm9yIGhhbmRsaW5nIEVNUFRZIGFuZCBFUlJPUgpjb25kaXRpb25zLgoKQWxsIG9mIHRo ZXNlIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24ganNvbmIuIFRoZSB3b3JrYXJvdW5kIGZvciBu b3cKaXMgdG8gY2FzdCB0aGUgYXJndW1lbnQgdG8ganNvbmIuCgpBdXRob3I6IE5pa2l0YSBHbHVr aG92IDxuLmdsdWhvdkBwb3N0Z3Jlc3Byby5ydT4KQXV0aG9yOiBUZW9kb3IgU2lnYWV2IDx0ZW9k b3JAc2lnYWV2LnJ1PgpBdXRob3I6IE9sZWcgQmFydHVub3YgPG9iYXJ0dW5vdkBnbWFpbC5jb20+ CkF1dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KQXV0aG9y OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KQXV0aG9yOiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpBdXRob3I6IFBldGVyIEVpc2VudHJhdXQgPHBl dGVyQGVpc2VudHJhdXQub3JnPgpBdXRob3I6IGppYW4gaGUgPGppYW4udW5pdmVyc2FsaXR5QGdt YWlsLmNvbT4KClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVy KSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3YsIFBhdmVsIFN0ZWh1bGUsIEFuZHJl dyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhpbWFuc2h1IFVwYWRoeWF5YSwgRGFu aWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnksIMOBbHZhcm8gSGVycmVyYSwKamlhbiBoZSwg QW50b24gQS4gTWVsbmlrb3YsIE5pa2l0YSBNYWxha2hvdiwgUGV0ZXIgRWlzZW50cmF1dAoKRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBiYjkzNS0wMTU4LTc4YTctMDhiNS05MDQ4 ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8y MDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFsYXAzLmFuYXJhemVsLmRlCkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2ItYWE2Ni1mMjMwLTNkNmQtNzM0ODE3ZjA5 OTVkJTQwcG9zdGdyZXNxbC5vcmcKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStI aXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFOYmdAbWFpbC5nbWFp bC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwg IDE1MSArKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCAgICAgICAgfCAg IDEyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgICAgICAgIHwgIDM0 NCArKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgICAgIHwg IDM2MyArKysrKystCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgICAgICAg IHwgIDE0MCArKysKIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyAgICAgICAg fCAgICAzICsKIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgICAgfCAg IDE4ICsKIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAgICAgICAgICAgICAgfCAgMjQw ICsrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgIHwgICAg MyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgICB8ICAgMTkg Kwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgICAgICAgICB8ICAxODEgKysr LQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICAgICAgICB8ICA2MjAgKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyAgICAgICAgICAgfCAg IDE1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAgICAgfCAgMTM2 ICsrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICAgICAgICB8ICAgMjQg Ky0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgfCAgIDg2ICsr CiBzcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgIHwgICAgMiArCiBz cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgIHwgICA0NyArCiBzcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgICAgIHwgIDE2MyArKysKIHNyYy9p bmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgICAgICAgICAgICAgfCAgIDExICsKIHNyYy9pbnRl cmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIgICAgfCAgIDI4ICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvanNvbl9zcWxqc29uLm91dCAgfCAgIDE4ICsKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQgfCAxMDI2ICsrKysrKysrKysrKysrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgfCAgICAyICstCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsICAgICAgIHwgICAxMSArCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCAgICAgIHwgIDMzNSArKysrKysKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgfCAgIDE3ICsKIDI3IGZp bGVzIGNoYW5nZWQsIDM5ODAgaW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3NxbGpzb24ub3V0CiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29u Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25fc3FsanNv bi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxq c29uLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sCmluZGV4IDIwZGEzZWQwMzMuLjc5NjJhOGExYTQgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMTgx NTYsNiArMTgxNTYsMTU3IEBAICQuKiA/IChAIGxpa2VfcmVnZXggIl5cXGQrJCIpCiA8L3Byb2dy YW1saXN0aW5nPgogICAgIDwvcGFyYT4KICAgIDwvc2VjdDM+CisKKyAgIDxzZWN0MyBpZD0ic3Fs anNvbi1xdWVyeS1mdW5jdGlvbnMiPgorICAgIDx0aXRsZT5TUUwvSlNPTiBRdWVyeSBGdW5jdGlv bnM8L3RpdGxlPgorICA8cGFyYT4KKyAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1zcWxqc29u LXF1ZXJ5aW5nIi8+IGRldGFpbHMgdGhlIFNRTC9KU09OCisgICBmdW5jdGlvbnMgdGhhdCBjYW4g YmUgdXNlZCB0byBxdWVyeSBKU09OIGRhdGEuCisgIDwvcGFyYT4KKworICA8bm90ZT4KKyAgIDxw YXJhPgorICAgIFNRTC9KU09OIHBhdGggZXhwcmVzc2lvbiBjYW4gY3VycmVudGx5IG9ubHkgYWNj ZXB0IHZhbHVlcyBvZiB0aGUKKyAgICA8dHlwZT5qc29uYjwvdHlwZT4gdHlwZSwgc28gaXQgbWln aHQgYmUgbmVjZXNzYXJ5IHRvIGNhc3QgdGhlCisgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRl bTwvcmVwbGFjZWFibGU+IGFyZ3VtZW50IG9mIHRoZXNlIGZ1bmN0aW9ucyB0bworICAgIDx0eXBl Pmpzb25iPC90eXBlPi4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDx0YWJsZSBpZD0iZnVu Y3Rpb25zLXNxbGpzb24tcXVlcnlpbmciPgorICAgPHRpdGxlPlNRTC9KU09OIFF1ZXJ5IEZ1bmN0 aW9uczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgIDx0aGVhZD4KKyAgICAgPHJv dz4KKyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5j X3NpZ25hdHVyZSI+CisgICAgICAgIEZ1bmN0aW9uIHNpZ25hdHVyZQorICAgICAgIDwvcGFyYT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIEV4YW1wbGUocykKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAg ICA8L3Jvdz4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgPHJvdz4KKyAgICAgIDxl bnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+ CisgICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+anNvbl9leGlzdHM8L3ByaW1hcnk+PC9pbmRl eHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29uX2V4aXN0czwvZnVuY3Rpb24+ICgKKyAgICAg ICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+ cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5H PC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFT PC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFs PiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVy YWw+VFJVRTwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gfDxsaXRlcmFsPiBV TktOT1dOPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB9IDxsaXRlcmFsPk9O IEVSUk9SPC9saXRlcmFsPiA8L29wdGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CisgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgU1FML0pTT04gPHJlcGxhY2VhYmxlPnBh dGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+CisgICAgICAgIGFwcGxpZWQgdG8gdGhlIDxyZXBs YWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUKKyAgICAgICAgPHJl cGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT5zIHlpZWxkcyBhbnkgaXRlbXMuCisgICAgICAg IFRoZSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNpZmllcyB3aGF0IGlz IHJldHVybmVkIGlmCisgICAgICAgIGFuIGVycm9yIG9jY3VyczsgdGhlIGRlZmF1bHQgaXMgdG8g cmV0dXJuIDxsaXRlcmFsPkZBTFNFPC9saXRlcmFsPi4KKyAgICAgICAgTm90ZSB0aGF0IGlmIHRo ZSA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgaXMg PGxpdGVyYWw+c3RyaWN0PC9saXRlcmFsPiwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkIGlmIGl0IHlp ZWxkcyBubyBpdGVtcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxs aXRlcmFsPmpzb25fZXhpc3RzKGpzb25iICd7ImtleTEiOiBbMSwyLDNdfScsICdzdHJpY3QgJC5r ZXkxWypdID8gKEAgPiAyKScpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+dDwvcmV0 dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJh bD5qc29uX2V4aXN0cyhqc29uYiAneyJhIjogWzEsMiwzXX0nLCAnbGF4ICQuYVs1XScgRVJST1Ig T04gRVJST1IpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+ZjwvcmV0dXJudmFsdWU+ CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX2V4 aXN0cyhqc29uYiAneyJhIjogWzEsMiwzXX0nLCAnc3RyaWN0ICQuYVs1XScgRVJST1IgT04gRVJS T1IpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+RVJST1I6ICBqc29ucGF0aCBhcnJh eSBzdWJzY3JpcHQgaXMgb3V0IG9mIGJvdW5kczwvcmV0dXJudmFsdWU+CisgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVu Y190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5k ZXh0ZXJtPjxwcmltYXJ5Pmpzb25fcXVlcnk8L3ByaW1hcnk+PC9pbmRleHRlcm0+CisgICAgICAg IDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4gKAorICAgICAgICA8cmVwbGFjZWFibGU+ Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248 L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IHsgPHJl cGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBs YWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFs Pjwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRl cmFsPiA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0 ZXJhbD5GT1JNQVQgSlNPTjwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5FTkNPRElORyBV VEY4PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAg ICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+V0lUSE9VVDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5XSVRI PC9saXRlcmFsPiB7IDxsaXRlcmFsPkNPTkRJVElPTkFMPC9saXRlcmFsPiB8IDxvcHRpb25hbD48 bGl0ZXJhbD5VTkNPTkRJVElPTkFMPC9saXRlcmFsPjwvb3B0aW9uYWw+IH0gfSA8b3B0aW9uYWw+ IDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFsPiA8bGl0ZXJhbD5XUkFQUEVSPC9s aXRlcmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+S0VFUDwv bGl0ZXJhbD4gfCA8bGl0ZXJhbD5PTUlUPC9saXRlcmFsPiB9IDxsaXRlcmFsPlFVT1RFUzwvbGl0 ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5PTiBTQ0FMQVIgU1RSSU5HPC9saXRlcmFsPiA8L29w dGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8 L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwvbGl0 ZXJhbD4geyA8b3B0aW9uYWw+IDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFsPiB8 IDxsaXRlcmFsPk9CSkVDVDwvbGl0ZXJhbD4gfSB8IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+ IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8bGl0ZXJhbD5PTiBFTVBU WTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVS Uk9SPC9saXRlcmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8 L2xpdGVyYWw+IHsgPG9wdGlvbmFsPiA8bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRpb25h bD4gfCA8bGl0ZXJhbD5PQkpFQ1Q8L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRl cmFsPiA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04g RVJST1I8L2xpdGVyYWw+IDwvb3B0aW9uYWw+KQorICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIDxy ZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB0byB0aGUKKyAgICAgICAg PHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+IHVzaW5nIHRoZQorICAgICAg ICA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPnMuCisgICAgICAgIFRoaXMgZnVuY3Rp b24gbXVzdCByZXR1cm4gYSBKU09OIHN0cmluZywgc28gaWYgdGhlIHBhdGggZXhwcmVzc2lvbgor ICAgICAgICByZXR1cm5zIG11bHRpcGxlIFNRTC9KU09OIGl0ZW1zLCB5b3UgbXVzdCB3cmFwIHRo ZSByZXN1bHQgdXNpbmcgdGhlCisgICAgICAgIDxsaXRlcmFsPldJVEggV1JBUFBFUjwvbGl0ZXJh bD4gY2xhdXNlLiBJZiB0aGUgd3JhcHBlciBpcworICAgICAgICA8bGl0ZXJhbD5VTkNPTkRJVElP TkFMPC9saXRlcmFsPiwgYW4gYXJyYXkgd3JhcHBlciB3aWxsIGFsd2F5cworICAgICAgICBiZSBh cHBsaWVkLCBldmVuIGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhbHJlYWR5IGEgc2luZ2xlIEpT T04gb2JqZWN0CisgICAgICAgIG9yIGFuIGFycmF5LCBidXQgaWYgaXQgaXMgPGxpdGVyYWw+Q09O RElUSU9OQUw8L2xpdGVyYWw+LCBpdCB3aWxsIG5vdCBiZQorICAgICAgICBhcHBsaWVkIHRvIGEg c2luZ2xlIGFycmF5IG9yIG9iamVjdC4gPGxpdGVyYWw+VU5DT05ESVRJT05BTDwvbGl0ZXJhbD4K KyAgICAgICAgaXMgdGhlIGRlZmF1bHQuICBJZiB0aGUgcmVzdWx0IGlzIGEgc2NhbGFyIHN0cmlu ZywgYnkgZGVmYXVsdCB0aGUgdmFsdWUKKyAgICAgICAgcmV0dXJuZWQgd2lsbCBoYXZlIHN1cnJv dW5kaW5nIHF1b3RlcyBtYWtpbmcgaXQgYSB2YWxpZCBKU09OIHZhbHVlLAorICAgICAgICB3aGlj aCBjYW4gYmUgbWFkZSBleHBsaWNpdCBieSBzcGVjaWZ5aW5nIDxsaXRlcmFsPktFRVAgUVVPVEVT PC9saXRlcmFsPi4KKyAgICAgICAgQ29udmVyc2VseSwgcXVvdGVzIGNhbiBiZSBvbWl0dGVkIGJ5 IHNwZWNpZnlpbmcgPGxpdGVyYWw+T01JVCBRVU9URVM8L2xpdGVyYWw+LgorICAgICAgICBUaGUg cmV0dXJuZWQgPHJlcGxhY2VhYmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IGhhcyB0aGUgc2Ft ZSBzZW1hbnRpY3MKKyAgICAgICAgYXMgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBsaWtlIDxm dW5jdGlvbj5qc29uX29iamVjdGFnZzwvZnVuY3Rpb24+OworICAgICAgICB0aGUgZGVmYXVsdCBy ZXR1cm5lZCB0eXBlIGlzIDx0eXBlPmpzb25iPC90eXBlPi4KKyAgICAgICAgVGhlIDxsaXRlcmFs Pk9OIEVNUFRZPC9saXRlcmFsPiBjbGF1c2Ugc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBpZiB0aGUK KyAgICAgICAgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHlpZWxk cyBubyB2YWx1ZSBhdCBhbGw7IHRoZQorICAgICAgICBkZWZhdWx0IHdoZW4gPGxpdGVyYWw+T04g RU1QVFk8L2xpdGVyYWw+IGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gcmV0dXJuIGEKKyAgICAgICAg bnVsbCB2YWx1ZS4gIFRoZSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNp ZmllcyB0aGUgYmVoYXZpb3IKKyAgICAgICAgaWYgYW4gZXJyb3Igb2NjdXJzIGFzIGEgcmVzdWx0 IG9mIDx0eXBlPmpzb25wYXRoPC90eXBlPiBldmFsdWF0aW9uCisgICAgICAgIChpbmNsdWRpbmcg Y2FzdCB0byB0aGUgb3V0cHV0IHR5cGUpIG9yIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mCisgICAg ICAgIDxsaXRlcmFsPk9OIEVNUFRZPC9saXRlcmFsPiBiZWhhdmlvciAodGhhdCB3YXMgY2F1c2Vk IGJ5IGVtcHR5IHJlc3VsdCBvZgorICAgICAgICA8dHlwZT5qc29ucGF0aDwvdHlwZT4gZXZhbHVh dGlvbik7IHRoZSBkZWZhdWx0IHdoZW4KKyAgICAgICAgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVy YWw+IGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gcmV0dXJuIGEgbnVsbCB2YWx1ZS4KKyAgICAgICA8 L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fcXVlcnkoanNvbmIg J1sxLFsyLDNdLG51bGxdJywgJ2xheCAkWypdWzFdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIp PC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+WzNdPC9yZXR1cm52YWx1ZT4KKyAgICAg IDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSBy b2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAg ICAgIDxpbmRleHRlcm0+PHByaW1hcnk+anNvbl92YWx1ZTwvcHJpbWFyeT48L2luZGV4dGVybT4K KyAgICAgICAgPGZ1bmN0aW9uPmpzb25fdmFsdWU8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxyZXBs YWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lO RzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5B UzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25h bD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJh bD5SRVRVUk5JTkc8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8L2xpdGVy YWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFs PiA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRU1Q VFk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5F UlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkRFRkFV TFQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8bGl0 ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25hbD4pCisgICAgICAgPC9wYXJhPgorICAg ICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisg ICAgICAgIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB0byB0aGUK KyAgICAgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+IHVzaW5nIHRo ZQorICAgICAgICA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFsdWU8 L3JlcGxhY2VhYmxlPnMuIFRoZQorICAgICAgICBleHRyYWN0ZWQgdmFsdWUgbXVzdCBiZSBhIHNp bmdsZSA8YWNyb255bT5TUUwvSlNPTjwvYWNyb255bT4gc2NhbGFyCisgICAgICAgIGl0ZW0uIEZv ciByZXN1bHRzIHRoYXQgYXJlIG9iamVjdHMgb3IgYXJyYXlzLCB1c2UgdGhlCisgICAgICAgIDxm dW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4gZnVuY3Rpb24gaW5zdGVhZC4KKyAgICAgICAg VGhlIHJldHVybmVkIDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiBoYXMgdGhl IHNhbWUgc2VtYW50aWNzCisgICAgICAgIGFzIGZvciBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgbGlr ZSA8ZnVuY3Rpb24+anNvbl9vYmplY3RhZ2c8L2Z1bmN0aW9uPi4KKyAgICAgICAgVGhlIGRlZmF1 bHQgcmV0dXJuZWQgdHlwZSBpcyA8dHlwZT50ZXh0PC90eXBlPi4KKyAgICAgICAgVGhlIDxsaXRl cmFsPk9OIEVSUk9SPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+Cisg ICAgICAgIGNsYXVzZXMgaGF2ZSBzaW1pbGFyIHNlbWFudGljcyBhcyBtZW50aW9uZWQgaW4gdGhl IGRlc2NyaXB0aW9uIG9mCisgICAgICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4u CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3Zh bHVlKGpzb25iICciMTIzLjQ1IicsICckJyBSRVRVUk5JTkcgZmxvYXQpPC9saXRlcmFsPgorICAg ICAgICA8cmV0dXJudmFsdWU+MTIzLjQ1PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fdmFsdWUoanNvbmIgJyIwMzowNCAy MDE1LTAyLTAxIicsICckLmRhdGV0aW1lKCJISDI0Ok1JJm5ic3A7WVlZWS1NTS1ERCIpJyBSRVRV Uk5JTkcgZGF0ZSk8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT4yMDE1LTAyLTAxPC9y ZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRl cmFsPmpzb25fdmFsdWUoanNvbmIgJ1sxLDJdJywgJ3N0cmljdCAkWypdJyBERUZBVUxUIDkgT04g RVJST1IpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+OTwvcmV0dXJudmFsdWU+Cisg ICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdy b3VwPgorICA8L3RhYmxlPgorCisgICA8L3NlY3QzPgogICA8L3NlY3QyPgogIDwvc2VjdDE+CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dAppbmRleCA4MGM0MGVhZjU3Li43NTk4YmQ4 ZjIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKKysr IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CkBAIC01NDgsMTUgKzU0OCwx NSBAQCBUODExCUJhc2ljIFNRTC9KU09OIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwkJCVlFUwogVDgx MglTUUwvSlNPTjogSlNPTl9PQkpFQ1RBR0cJCQlZRVMJCiBUODEzCVNRTC9KU09OOiBKU09OX0FS UkFZQUdHIHdpdGggT1JERVIgQlkJCQlZRVMJCiBUODE0CUNvbG9uIGluIEpTT05fT0JKRUNUIG9y IEpTT05fT0JKRUNUQUdHCQkJWUVTCQotVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVyYXRv cnMJCQlOTwkKK1Q4MjEJQmFzaWMgU1FML0pTT04gcXVlcnkgb3BlcmF0b3JzCQkJWUVTCQogVDgy MglTUUwvSlNPTjogSVMgSlNPTiBXSVRIIFVOSVFVRSBLRVlTIHByZWRpY2F0ZQkJCVlFUwkKLVQ4 MjMJU1FML0pTT046IFBBU1NJTkcgY2xhdXNlCQkJTk8JCitUODIzCVNRTC9KU09OOiBQQVNTSU5H IGNsYXVzZQkJCVlFUwkKIFQ4MjQJSlNPTl9UQUJMRTogc3BlY2lmaWMgUExBTiBjbGF1c2UJCQlO TwkKLVQ4MjUJU1FML0pTT046IE9OIEVNUFRZIGFuZCBPTiBFUlJPUiBjbGF1c2VzCQkJTk8JCi1U ODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBpbiBPTiBFUlJPUiBvciBPTiBFTVBUWSBjbGF1 c2VzCQkJTk8JCitUODI1CVNRTC9KU09OOiBPTiBFTVBUWSBhbmQgT04gRVJST1IgY2xhdXNlcwkJ CVlFUwkKK1Q4MjYJR2VuZXJhbCB2YWx1ZSBleHByZXNzaW9uIGluIE9OIEVSUk9SIG9yIE9OIEVN UFRZIGNsYXVzZXMJCQlZRVMJCiBUODI3CUpTT05fVEFCTEU6IHNpYmxpbmcgTkVTVEVEIENPTFVN TlMgY2xhdXNlcwkJCU5PCQotVDgyOAlKU09OX1FVRVJZCQkJTk8JCi1UODI5CUpTT05fUVVFUlk6 IGFycmF5IHdyYXBwZXIgb3B0aW9ucwkJCU5PCQorVDgyOAlKU09OX1FVRVJZCQkJWUVTCQorVDgy OQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZRVMJCiBUODMwCUVuZm9yY2lu ZyB1bmlxdWUga2V5cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlZRVMJCiBU ODMxCVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHN0cmljdCBtb2RlCQkJWUVTCQogVDgzMglTUUwv SlNPTiBwYXRoIGxhbmd1YWdlOiBpdGVtIG1ldGhvZAkJCVlFUwkKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jCmluZGV4IDM0YmQyMTAyYjUuLjFhZmVjZDA5NzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIu YwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9qc29uZnVuY3MuaCIKKyNpbmNsdWRl ICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKQEAgLTg4LDYgKzg5LDEyIEBAIHN0YXRpYyB2b2lkIEV4 ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUs CiAJCQkJCQkJCSAgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIEFnZ1N0YXRlUGVyVHJhbnMgcGVy dHJhbnMsCiAJCQkJCQkJCSAgaW50IHRyYW5zbm8sIGludCBzZXRubywgaW50IHNldG9mZiwgYm9v bCBpc2hhc2gsCiAJCQkJCQkJCSAgYm9vbCBudWxsY2hlY2spOworc3RhdGljIHZvaWQgRXhlY0lu aXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCQkJIERh dHVtICpyZXN2LCBib29sICpyZXNudWxsLAorCQkJCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gp Oworc3RhdGljIGludCBFeGVjSW5pdEpzb25FeHByQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwg Tm9kZSAqY29lcmNpb24sCisJCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0LAorCQkJ CQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKTsKIAogCiAvKgpAQCAtMjQxNiw2ICsyNDIz LDE0IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJ CWJyZWFrOwogCQkJfQogCisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAg ICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCBub2RlKTsKKworCQkJCUV4ZWNJbml0SnNvbkV4 cHIoamV4cHIsIHN0YXRlLCByZXN2LCByZXNudWxsLCAmc2NyYXRjaCk7CisJCQkJYnJlYWs7CisJ CQl9CisKIAkJY2FzZSBUX051bGxUZXN0OgogCQkJewogCQkJCU51bGxUZXN0ICAgKm50ZXN0ID0g KE51bGxUZXN0ICopIG5vZGU7CkBAIC00MTg0LDMgKzQxOTksMzMyIEBAIEV4ZWNCdWlsZFBhcmFt U2V0RXF1YWwoVHVwbGVEZXNjIGRlc2MsCiAKIAlyZXR1cm4gc3RhdGU7CiB9CisKKy8qCisgKiBQ dXNoIHN0ZXBzIHRvIGV2YWx1YXRlIGEgSnNvbkV4cHIgYW5kIGl0cyB2YXJpb3VzIHN1YnNpZGlh cnkgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjSW5pdEpzb25FeHByKEpzb25F eHByICpqZXhwciwgRXhwclN0YXRlICpzdGF0ZSwKKwkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJl c251bGwsCisJCQkJIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCkKK3sKKwlKc29uRXhwclN0YXRlICpq c2VzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEpzb25FeHByU3RhdGUpKTsKKwlKc29uRXhwclBvc3RF dmFsU3RhdGUgKnBvc3RfZXZhbCA9ICZqc2VzdGF0ZS0+cG9zdF9ldmFsOworCUxpc3RDZWxsICAg KmFyZ2V4cHJsYzsKKwlMaXN0Q2VsbCAgICphcmduYW1lbGM7CisJTGlzdAkgICAqanVtcHNfaWZf c2tpcCA9IE5JTDsKKwlMaXN0CSAgICpqdW1wc190b19jb2VyY2VfZmluaXNoID0gTklMOworCUxp c3QJICAgKmp1bXBzX3RvX2VuZCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlFeHByRXZhbFN0 ZXAgKmFzOworCisJanNlc3RhdGUtPmpzZXhwciA9IGpleHByOworCisJLyoKKwkgKiBFdmFsdWF0 ZSBmb3JtYXR0ZWRfZXhwciBzdG9yaW5nIHRoZSByZXN1bHQgaW50bworCSAqIGpzZXN0YXRlLT5m b3JtYXR0ZWRfZXhwci4KKwkgKi8KKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZv cm1hdHRlZF9leHByLCBzdGF0ZSwKKwkJCQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci52YWx1 ZSwKKwkJCQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci5pc251bGwpOworCisJLyogU3RlcHMg dG8ganVtcCB0byBlbmQgaWYgZm9ybWF0dGVkX2V4cHIgZXZhbHVhdGVzIHRvIE5VTEwgKi8KKwlz Y3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pVTVBfSUZfTlVMTDsKKwlzY3JhdGNoLT5yZXNudWxsID0g JmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci5pc251bGw7CisJc2NyYXRjaC0+ZC5qdW1wLmp1bXBk b25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCWp1bXBzX2lmX3NraXAgPSBsYXBwZW5kX2ludChq dW1wc19pZl9za2lwLCBzdGF0ZS0+c3RlcHNfbGVuKTsKKwlFeHByRXZhbFB1c2hTdGVwKHN0YXRl LCBzY3JhdGNoKTsKKworCS8qCisJICogRXZhbHVhdGUgcGF0aHNwZWMgZXhwcmVzc2lvbiBzdG9y aW5nIHRoZSByZXN1bHQgaW50bworCSAqIGpzZXN0YXRlLT5wYXRoc3BlYy4KKwkgKi8KKwlFeGVj SW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPnBhdGhfc3BlYywgc3RhdGUsCisJCQkJCSZqc2Vz dGF0ZS0+cGF0aHNwZWMudmFsdWUsCisJCQkJCSZqc2VzdGF0ZS0+cGF0aHNwZWMuaXNudWxsKTsK KworCS8qIFN0ZXBzIHRvIEpVTVAgdG8gZW5kIGlmIHBhdGhzcGVjIGV2YWx1YXRlcyB0byBOVUxM ICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05VTEw7CisJc2NyYXRjaC0+cmVz bnVsbCA9ICZqc2VzdGF0ZS0+cGF0aHNwZWMuaXNudWxsOworCXNjcmF0Y2gtPmQuanVtcC5qdW1w ZG9uZSA9IC0xOwkvKiBzZXQgYmVsb3cgKi8KKwlqdW1wc19pZl9za2lwID0gbGFwcGVuZF9pbnQo anVtcHNfaWZfc2tpcCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJRXhwckV2YWxQdXNoU3RlcChzdGF0 ZSwgc2NyYXRjaCk7CisKKwkvKiBTdGVwcyB0byBjb21wdXRlIFBBU1NJTkcgYXJncy4gKi8KKwlq c2VzdGF0ZS0+YXJncyA9IE5JTDsKKwlmb3Jib3RoKGFyZ2V4cHJsYywgamV4cHItPnBhc3Npbmdf dmFsdWVzLAorCQkJYXJnbmFtZWxjLCBqZXhwci0+cGFzc2luZ19uYW1lcykKKwl7CisJCUV4cHIJ ICAgKmFyZ2V4cHIgPSAoRXhwciAqKSBsZmlyc3QoYXJnZXhwcmxjKTsKKwkJU3RyaW5nCSAgICph cmduYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBhcmduYW1lbGMpOworCQlKc29uUGF0aFZhcmlh YmxlICp2YXIgPSBwYWxsb2Moc2l6ZW9mKCp2YXIpKTsKKworCQl2YXItPm5hbWUgPSBhcmduYW1l LT5zdmFsOworCQl2YXItPnR5cGlkID0gZXhwclR5cGUoKE5vZGUgKikgYXJnZXhwcik7CisJCXZh ci0+dHlwbW9kID0gZXhwclR5cG1vZCgoTm9kZSAqKSBhcmdleHByKTsKKworCQlFeGVjSW5pdEV4 cHJSZWMoKEV4cHIgKikgYXJnZXhwciwgc3RhdGUsICZ2YXItPnZhbHVlLCAmdmFyLT5pc251bGwp OworCisJCWpzZXN0YXRlLT5hcmdzID0gbGFwcGVuZChqc2VzdGF0ZS0+YXJncywgdmFyKTsKKwl9 CisKKwkvKiBTdGVwIGZvciBKc29uUGF0aCogZXZhbHVhdGlvbjsgc2VlIEV4ZWNFdmFsSnNvbkV4 cHJQYXRoKCkuICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9QQVRIOworCXNj cmF0Y2gtPnJlc3ZhbHVlID0gcmVzdjsKKwlzY3JhdGNoLT5yZXNudWxsID0gcmVzbnVsbDsKKwlz Y3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7CisJRXhwckV2YWxQdXNoU3Rl cChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIFN0ZXAgdG8ganVtcCB0byBlbmQgd2hlbiB0 aGVyZSdzIG5laXRoZXIgYW4gZXJyb3Igd2hlbiBldmFsdWF0aW5nCisJICogSnNvblBhdGgqIG5v ciBhbnkgbmVlZCB0byBjb2VyY2UgdGhlIHJlc3VsdCBiZWNhdXNlIGl0J3MgYWxyZWFkeQorCSAq IG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4KKwkgKi8KKwlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pV TVA7CisJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCWp1 bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xlbik7 CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIFN0ZXBzIHRv IGNvZXJjZSB0aGUgcmVzdWx0IHZhbHVlIGNvbXB1dGVkIGJ5IEVFT1BfSlNPTkVYUFJfUEFUSC4K KwkgKiBUbyBoYW5kbGUgY29lcmNpb24gZXJyb3JzIHNvZnRseSwgdXNlIHRoZSBmb2xsb3dpbmcg RXJyb3JTYXZlQ29udGV4dAorCSAqIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb2VyY2lvbiBleHBy ZXNzaW9ucywgaW5jbHVkaW5nIGFueSBKc29uQ29lcmNpb24KKwkgKiBub2Rlcy4KKwkgKi8KKwlq c2VzdGF0ZS0+ZXNjb250ZXh0LnR5cGUgPSBUX0Vycm9yU2F2ZUNvbnRleHQ7CisJaWYgKGpleHBy LT5yZXN1bHRfY29lcmNpb24gfHwgamV4cHItPm9taXRfcXVvdGVzKQorCXsKKwkJanNlc3RhdGUt Pmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24gPQorCQkJRXhlY0luaXRKc29uRXhwckNvZXJjaW9u KHN0YXRlLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLAorCQkJCQkJCQkJIGpleHByLT5vbl9lcnJv ci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUiA/CisJCQkJCQkJCQkgJmpzZXN0YXRlLT5l c2NvbnRleHQgOiBOVUxMLAorCQkJCQkJCQkJIHJlc3YsIHJlc251bGwpOworCQkvKiBKdW1wIHRv IENPRVJDSU9OX0ZJTklTSC4gKi8KKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJCWp1bXBzX3Rv X2NvZXJjZV9maW5pc2ggPSBsYXBwZW5kX2ludChqdW1wc190b19jb2VyY2VfZmluaXNoLAorCQkJ CQkJCQkJCQkgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNj cmF0Y2gpOworCX0KKwllbHNlCisJCWpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9u ID0gLTE7CisKKwkvKiBTdGVwcyBmb3IgY29lcmNpbmcgSnNvbkl0ZW1UeXBlIHZhbHVlcyByZXR1 cm5lZCBieSBKc29uUGF0aFZhbHVlKCkuICovCisJaWYgKGpleHByLT5pdGVtX2NvZXJjaW9ucykK Kwl7CisJCS8qCisJCSAqIEhlcmUgd2UgY3JlYXRlIHRoZSBzdGVwcyBmb3IgZWFjaCBKc29uSXRl bVR5cGUgdHlwZSdzIGNvZXJjaW9uCisJCSAqIGV4cHJlc3Npb24gYW5kIGFsc28gc3RvcmUgYSBm bGFnIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gaXMKKwkJICogYSBKc29uQ29lcmNpb24gbm9kZS4g IEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbigpIGNhbGxlZCBieQorCQkgKiBFeGVjRXZhbEpz b25FeHByUGF0aCgpIHdpbGwgbWFwIGEgZ2l2ZW4gSnNvbmJWYWx1ZSByZXR1cm5lZCBieQorCQkg KiBKc29uUGF0aFZhbHVlKCkgdG8gaXRzICBKc29uSXRlbVR5cGUncyBleHByZXNzaW9uJ3Mgc3Rl cCBhZGRyZXNzCisJCSAqIGFuZCB0aGUgZmxhZyBieSBpbmRleGluZyB0aGUgZm9sbG93aW5nIGFy cmF5cyB3aXRoIEpzb25JdGVtVHlwZQorCQkgKiBlbnVtIHZhbHVlLgorCQkgKi8KKwkJanNlc3Rh dGUtPm51bV9pdGVtX2NvZXJjaW9ucyA9IGxpc3RfbGVuZ3RoKGpleHByLT5pdGVtX2NvZXJjaW9u cyk7CisJCWpzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHMgPSAoaW50ICopCisJCQlw YWxsb2MoanNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyAqIHNpemVvZihpbnQpKTsKKwkJanNl c3RhdGUtPml0ZW1fY29lcmNpb25fdmlhX2V4cHIgPSAoYm9vbCAqKQorCQkJcGFsbG9jMChqc2Vz dGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zICogc2l6ZW9mKGJvb2wpKTsKKwkJZm9yZWFjaChsYywg amV4cHItPml0ZW1fY29lcmNpb25zKQorCQl7CisJCQlKc29uSXRlbUNvZXJjaW9uICppdGVtX2Nv ZXJjaW9uID0gbGZpcnN0KGxjKTsKKwkJCU5vZGUgKmNvZXJjaW9uID0gaXRlbV9jb2VyY2lvbi0+ Y29lcmNpb247CisKKwkJCWpzZXN0YXRlLT5pdGVtX2NvZXJjaW9uX3ZpYV9leHByW2l0ZW1fY29l cmNpb24tPml0ZW1fdHlwZV0gPQorCQkJCShjb2VyY2lvbiAhPSBOVUxMICYmICFJc0EoY29lcmNp b24sIEpzb25Db2VyY2lvbikpOworCQkJanNlc3RhdGUtPmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1w c1tpdGVtX2NvZXJjaW9uLT5pdGVtX3R5cGVdID0KKwkJCQlFeGVjSW5pdEpzb25FeHByQ29lcmNp b24oc3RhdGUsIGNvZXJjaW9uLAorCQkJCQkJCQkJCSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9 IEpTT05fQkVIQVZJT1JfRVJST1IgPworCQkJCQkJCQkJCSAmanNlc3RhdGUtPmVzY29udGV4dCA6 IE5VTEwsCisJCQkJCQkJCQkJIHJlc3YsIHJlc251bGwpOworCisJCQkvKiBKdW1wIHRvIENPRVJD SU9OX0ZJTklTSC4gKi8KKwkJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJCXNjcmF0 Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQgYmVsb3cgKi8KKwkJCWp1bXBzX3RvX2Nv ZXJjZV9maW5pc2ggPSBsYXBwZW5kX2ludChqdW1wc190b19jb2VyY2VfZmluaXNoLAorCQkJCQkJ CQkJCQkJIHN0YXRlLT5zdGVwc19sZW4pOworCQkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2Ny YXRjaCk7CisJCX0KKwl9CisKKwkvKgorCSAqIEFkZCBzdGVwIHRvIHJlc2V0IHRoZSBFcnJvclNh dmVDb250ZXh0IGFuZCBzZXQgZXJyb3IgZmxhZyBpZiB0aGUKKwkgKiBjb2VyY2lvbiBzdGVwcyBl bmNvdW50ZXJlZCBhbiBlcnJvciBidXQgd2FzIG5vdCB0aHJvd24gYmVjYXVzZSBvZiB0aGUKKwkg KiBPTiBFUlJPUiBiZWhhdmlvci4KKwkgKi8KKwlpZiAoamV4cHItPnJlc3VsdF9jb2VyY2lvbiB8 fCBqZXhwci0+aXRlbV9jb2VyY2lvbnMpCisJeworCQlmb3JlYWNoKGxjLCBqdW1wc190b19jb2Vy Y2VfZmluaXNoKQorCQl7CisJCQlhcyA9ICZzdGF0ZS0+c3RlcHNbbGZpcnN0X2ludChsYyldOwor CQkJYXMtPmQuanVtcC5qdW1wZG9uZSA9IHN0YXRlLT5zdGVwc19sZW47CisJCX0KKworCQlzY3Jh dGNoLT5vcGNvZGUgPSBFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSDsKKwkJc2NyYXRjaC0+ ZC5qc29uZXhwci5qc2VzdGF0ZSA9IGpzZXN0YXRlOworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRl LCBzY3JhdGNoKTsKKwl9CisKKwlqc2VzdGF0ZS0+anVtcF9lbXB0eSA9IGpzZXN0YXRlLT5qdW1w X2Vycm9yID0gLTE7CisKKwkvKgorCSAqIFN0ZXAgdG8gaGFuZGxlIE9OIEVSUk9SIGJlaGF2aW9y cy4gIFRoaXMgaGFuZGxlcyBib3RoIHRoZSBlcnJvcnMKKwkgKiB0aGF0IG9jY3VyIGR1cmluZyBF RU9QX0pTT05FWFBSX1BBVEggZXZhbHVhdGlvbiBhbmQgc3Vic2VxdWVudCBjb2VyY2lvbgorCSAq IGV2YWx1YXRpb24uCisJICovCisJaWYgKGpleHByLT5vbl9lcnJvciAmJgorCQlqZXhwci0+b25f ZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1IpCisJeworCQlqc2VzdGF0ZS0+anVt cF9lcnJvciA9IHN0YXRlLT5zdGVwc19sZW47CisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVN UF9JRl9OT1RfVFJVRTsKKworCQkvKgorCQkgKiBwb3N0X2V2YWwuZXJyb3IgaXMgc2V0IGJ5IEV4 ZWNFdmFsSnNvbkV4cHJQYXRoKCkgYW5kCisJCSAqIEV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNo KCkuCisJCSAqLworCQlzY3JhdGNoLT5yZXN2YWx1ZSA9ICZwb3N0X2V2YWwtPmVycm9yLnZhbHVl OworCQlzY3JhdGNoLT5yZXNudWxsID0gJnBvc3RfZXZhbC0+ZXJyb3IuaXNudWxsOworCQlzY3Jh dGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJCWp1bXBzX3RvX2Vu ZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJCS8qIFN0ZXBzIHRvIGV2YWx1YXRlIHRo ZSBPTiBFUlJPUiBleHByZXNzaW9uICovCisJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhw ci0+b25fZXJyb3ItPmV4cHIsCisJCQkJCQlzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwkJLyog U3RlcHMgdG8gY29lcmNlIHRoZSBPTiBFUlJPUiBleHByZXNzaW9uIGlmIG5lZWRlZCAqLworCQko dm9pZCkgRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKHN0YXRlLAorCQkJCQkJCQkJCShOb2RlICop IGpleHByLT5vbl9lcnJvci0+Y29lcmNpb24sCisJCQkJCQkJCQkJTlVMTCwJLyogdGhyb3cgZXJy b3JzICovCisJCQkJCQkJCQkJcmVzdiwgcmVzbnVsbCk7CisKKwkJanVtcHNfdG9fZW5kID0gbGFw cGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJc2NyYXRjaC0+b3Bj b2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsKKwkJRXhw ckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJfQorCisJLyogU3RlcCB0byBoYW5kbGUg T04gRU1QVFkgYmVoYXZpb3JzLiAqLworCWlmIChqZXhwci0+b25fZW1wdHkgIT0gTlVMTCAmJgor CQlqZXhwci0+b25fZW1wdHktPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1IpCisJeworCQlq c2VzdGF0ZS0+anVtcF9lbXB0eSA9IHN0YXRlLT5zdGVwc19sZW47CisKKwkJc2NyYXRjaC0+b3Bj b2RlID0gRUVPUF9KVU1QX0lGX05PVF9UUlVFOworCQlzY3JhdGNoLT5yZXN2YWx1ZSA9ICZwb3N0 X2V2YWwtPmVtcHR5LnZhbHVlOworCQlzY3JhdGNoLT5yZXNudWxsID0gJnBvc3RfZXZhbC0+ZW1w dHkuaXNudWxsOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93 ICovCisJCWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0 ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJCS8qIFN0 ZXBzIHRvIGV2YWx1YXRlIHRoZSBPTiBFTVBUWSBleHByZXNzaW9uICovCisJCUV4ZWNJbml0RXhw clJlYygoRXhwciAqKSBqZXhwci0+b25fZW1wdHktPmV4cHIsCisJCQkJCQlzdGF0ZSwgcmVzdiwg cmVzbnVsbCk7CisKKwkJLyogU3RlcHMgdG8gY29lcmNlIHRoZSBPTiBFTVBUWSBleHByZXNzaW9u IGlmIG5lZWRlZCAqLworCQkodm9pZCkgRXhlY0luaXRKc29uRXhwckNvZXJjaW9uKHN0YXRlLAor CQkJCQkJCQkJCShOb2RlICopIGpleHByLT5vbl9lbXB0eS0+Y29lcmNpb24sCisJCQkJCQkJCQkJ TlVMTCwJLyogdGhyb3cgZXJyb3JzICovCisJCQkJCQkJCQkJcmVzdiwgcmVzbnVsbCk7CisKKwkJ c2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUg PSAtMTsJLyogc2V0IGJlbG93ICovCisJCWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBz X3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNj cmF0Y2gpOworCX0KKworCWlmIChqc2VzdGF0ZS0+anVtcF9lcnJvciA8IDAgJiYganNlc3RhdGUt Pmp1bXBfZW1wdHkgPCAwKQorCXsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJCWp1bXBzX3Rv X2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4 cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCS8qIFJldHVybiBOVUxMIHdo ZW4gZWl0aGVyIGZvcm1hdHRlZF9leHByIG9yIHBhdGhzcGVjIGlzIE5VTEwuICovCisJZm9yZWFj aChsYywganVtcHNfaWZfc2tpcCkKKwl7CisJCWFzID0gJnN0YXRlLT5zdGVwc1tsZmlyc3RfaW50 KGxjKV07CisJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3RlcHNfbGVuOworCX0KKwlz Y3JhdGNoLT5vcGNvZGUgPSBFRU9QX0NPTlNUOworCXNjcmF0Y2gtPnJlc3ZhbHVlID0gcmVzdjsK KwlzY3JhdGNoLT5yZXNudWxsID0gcmVzbnVsbDsKKwlzY3JhdGNoLT5kLmNvbnN0dmFsLnZhbHVl ID0gKERhdHVtKSAwOworCXNjcmF0Y2gtPmQuY29uc3R2YWwuaXNudWxsID0gdHJ1ZTsKKwlFeHBy RXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCS8qIEp1bXAgdG8gY29lcmNlIHRoZSBO VUxMIHVzaW5nIHJlc3VsdF9jb2VyY2lvbiBpcyBwcmVzZW50LiAqLworCWlmIChqc2VzdGF0ZS0+ anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwKQorCXsKKwkJc2NyYXRjaC0+b3Bjb2RlID0g RUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSBqc2VzdGF0ZS0+anVtcF9l dmFsX3Jlc3VsdF9jb2VyY2lvbjsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7 CisJfQorCisJZm9yZWFjaChsYywganVtcHNfdG9fZW5kKQorCXsKKwkJYXMgPSAmc3RhdGUtPnN0 ZXBzW2xmaXJzdF9pbnQobGMpXTsKKwkJYXMtPmQuanVtcC5qdW1wZG9uZSA9IHN0YXRlLT5zdGVw c19sZW47CisJfQorCisJanNlc3RhdGUtPmp1bXBfZW5kID0gc3RhdGUtPnN0ZXBzX2xlbjsKK30K KworLyogSW5pdGlhbGl6ZSBvbmUgSnNvbkNvZXJjaW9uIGZvciBleGVjdXRpb24uICovCitzdGF0 aWMgaW50CitFeGVjSW5pdEpzb25FeHByQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgTm9kZSAq Y29lcmNpb24sCisJCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0LAorCQkJCQkJIERh dHVtICpyZXN2LCBib29sICpyZXNudWxsKQoreworCWludAkJCWp1bXBfZXZhbF9jb2VyY2lvbjsK KwlEYXR1bQkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZXZhbDsKKwlib29sCSAgICpzYXZlX2lubmVy bW9zdF9jYXNlbnVsbDsKKwlFcnJvclNhdmVDb250ZXh0ICpzYXZlX2VzY29udGV4dDsKKworCWlm IChjb2VyY2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlqdW1wX2V2YWxfY29lcmNpb24g PSBzdGF0ZS0+c3RlcHNfbGVuOworCWlmIChJc0EoY29lcmNpb24sIEpzb25Db2VyY2lvbikpCisJ eworCQlFeHByRXZhbFN0ZXAgc2NyYXRjaCA9IHswfTsKKwkJT2lkCQkJdHlwaW5wdXQ7CisJCUZt Z3JJbmZvICAgKmZpbmZvOworCQlPaWQJCQl0eXBpb3BhcmFtOworCisJCWdldFR5cGVJbnB1dElu Zm8oKChKc29uQ29lcmNpb24gKikgY29lcmNpb24pLT50YXJnZXR0eXBlLAorCQkJCQkJICZ0eXBp bnB1dCwgJnR5cGlvcGFyYW0pOworCQlmaW5mbyA9IHBhbGxvYzAoc2l6ZW9mKEZtZ3JJbmZvKSk7 CisJCWZtZ3JfaW5mbyh0eXBpbnB1dCwgZmluZm8pOworCisJCXNjcmF0Y2gub3Bjb2RlID0gRUVP UF9KU09ORVhQUl9DT0VSQ0lPTjsKKwkJc2NyYXRjaC5yZXN2YWx1ZSA9IHJlc3Y7CisJCXNjcmF0 Y2gucmVzbnVsbCA9IHJlc251bGw7CisJCXNjcmF0Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5jb2Vy Y2lvbiA9IChKc29uQ29lcmNpb24gKikgY29lcmNpb247CisJCXNjcmF0Y2guZC5qc29uZXhwcl9j b2VyY2lvbi5pbnB1dF9maW5mbyA9IGZpbmZvOworCQlzY3JhdGNoLmQuanNvbmV4cHJfY29lcmNp b24udHlwaW9wYXJhbSA9IHR5cGlvcGFyYW07CisJCXNjcmF0Y2guZC5qc29uZXhwcl9jb2VyY2lv bi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGUgPSBOVUxMOworCQlzY3JhdGNoLmQuanNvbmV4cHJf Y29lcmNpb24uZXNjb250ZXh0ID0gZXNjb250ZXh0OworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRl LCAmc2NyYXRjaCk7CisJCXJldHVybiBqdW1wX2V2YWxfY29lcmNpb247CisJfQorCisJLyogUHVz aCBzdGVwKHMpIHRvIGNvbXB1dGUgY3N0YXRlLT5jb2VyY2lvbi4gKi8KKwlzYXZlX2lubmVybW9z dF9jYXNldmFsID0gc3RhdGUtPmlubmVybW9zdF9jYXNldmFsOworCXNhdmVfaW5uZXJtb3N0X2Nh c2VudWxsID0gc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbDsKKwlzYXZlX2VzY29udGV4dCA9IHN0 YXRlLT5lc2NvbnRleHQ7CisKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSByZXN2OworCXN0 YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNudWxsOworCXN0YXRlLT5lc2NvbnRleHQgPSBl c2NvbnRleHQ7CisKKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgY29lcmNpb24sIHN0YXRlLCBy ZXN2LCByZXNudWxsKTsKKworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbCA9IHNhdmVfaW5uZXJt b3N0X2Nhc2V2YWw7CisJc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbCA9IHNhdmVfaW5uZXJtb3N0 X2Nhc2VudWxsOworCXN0YXRlLT5lc2NvbnRleHQgPSBzYXZlX2VzY29udGV4dDsKKworCXJldHVy biBqdW1wX2V2YWxfY29lcmNpb247Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YwppbmRleCBkNWRiOTY0NDRjLi40M2Y2MWY1ODc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHBySW50ZXJwLmMKQEAgLTczLDggKzczLDggQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgog I2luY2x1ZGUgInV0aWxzL2V4cGFuZGVkcmVjb3JkLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5o IgotI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNzLmgi CisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFt cC5oIgpAQCAtMTgxLDYgKzE4MSwxMCBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxp bmUgdm9pZCBFeGVjQWdnUGxhaW5UcmFuc0J5UmVmKEFnZ1N0YXRlICphZ2dzdGF0ZQogCQkJCQkJ CQkJCQkJCQkJICBBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwLAogCQkJCQkJCQkJCQkJCQkJICBF eHByQ29udGV4dCAqYWdnY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJCSAgaW50IHNldG5vKTsKK3N0 YXRpYyB2b2lkIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZhbHVlICppdGVtLCBK c29uRXhwclN0YXRlICpqc2VzdGF0ZSwKKwkJCQkJCQlib29sIHRocm93X2Vycm9yLAorCQkJCQkJ CWludCAqanVtcF9ldmFsX2l0ZW1fY29lcmNpb24sCisJCQkJCQkJRGF0dW0gKnJlc3ZhbHVlLCBi b29sICpyZXNudWxsKTsKIAogLyoKICAqIFNjYWxhckFycmF5T3BFeHBySGFzaEVudHJ5CkBAIC00 ODIsNiArNDg2LDkgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX1hNTEVYUFIsCiAJCSYm Q0FTRV9FRU9QX0pTT05fQ09OU1RSVUNUT1IsCiAJCSYmQ0FTRV9FRU9QX0lTX0pTT04sCisJCSYm Q0FTRV9FRU9QX0pTT05FWFBSX1BBVEgsCisJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX0NPRVJDSU9O LAorCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0gsCiAJCSYmQ0FTRV9FRU9Q X0FHR1JFRiwKIAkJJiZDQVNFX0VFT1BfR1JPVVBJTkdfRlVOQywKIAkJJiZDQVNFX0VFT1BfV0lO RE9XX0ZVTkMsCkBAIC0xNTUxLDYgKzE1NTgsMjggQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRl ICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCQlFRU9fTkVY VCgpOwogCQl9CiAKKwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9QQVRIKQorCQl7CisJCQkvKiB0 b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFRU9fSlVNUChF eGVjRXZhbEpzb25FeHByUGF0aChzdGF0ZSwgb3AsIGVjb250ZXh0KSk7CisJCX0KKworCQlFRU9f Q0FTRShFRU9QX0pTT05FWFBSX0NPRVJDSU9OKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3Ig YW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFeGVjRXZhbEpzb25Db2VyY2lvbihzdGF0 ZSwgb3AsIGVjb250ZXh0KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQorCisJCUVFT19DQVNFKEVF T1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNIKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3Ig YW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFeGVjRXZhbEpzb25Db2VyY2lvbkZpbmlz aChzdGF0ZSwgb3ApOworCisJCQlFRU9fTkVYVCgpOworCQl9CisKIAkJRUVPX0NBU0UoRUVPUF9B R0dSRUYpCiAJCXsKIAkJCS8qCkBAIC00MjA4LDYgKzQyMzcsMzM4IEBAIEV4ZWNFdmFsSnNvbklz UHJlZGljYXRlKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCiAJKm9wLT5yZXN2 YWx1ZSA9IEJvb2xHZXREYXR1bShyZXMpOwogfQogCisvKgorICogUGVyZm9ybXMgSnNvblBhdGh7 RXhpc3RzfFF1ZXJ5fFZhbHVlfSgpIGZvciBnaXZlbiBjb250ZXh0IGl0ZW0gYW5kIEpTT04KKyAq IHBhdGguCisgKgorICogUmVzdWx0IGlzIHNldCBpbiAqb3AtPnJlc3ZhbHVlIGFuZCAqb3AtPnJl c251bGwuICBSZXR1cm4gdmFsdWUgaXMgdGhlCisgKiBzdGVwIGFkZHJlc3MgdG8gYmUgcGVyZm9y bWVkIG5leHQuCisgKgorICogT24gcmV0dXJuLCBKc29uRXhwclBvc3RFdmFsU3RhdGUgaXMgcG9w dWxhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBkZXRhaWxzOgorICoJLSBlcnJvci52YWx1ZTogdHJ1 ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgSnNvblBhdGggZXZhbHVhdGlvbgorICoJLSBl bXB0eS52YWx1ZTogdHJ1ZSBpZiBKc29uUGF0aHtRdWVyeXxWYWx1ZX0oKSBmb3VuZCBubyBtYXRj aGluZyBpdGVtCisgKgorICogTm8gcmV0dXJuIGlmIHRoZSBPTiBFUlJPUi9FTVBUWSBiZWhhdmlv ciBpcyBFUlJPUi4KKyAqLworaW50CitFeGVjRXZhbEpzb25FeHByUGF0aChFeHByU3RhdGUgKnN0 YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAorCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KQorewor CUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CisJSnNv bkV4cHJQb3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAmanNlc3RhdGUtPnBvc3RfZXZhbDsKKwlK c29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5qc2V4cHI7CisJRGF0dW0JCWl0ZW07CisJSnNv blBhdGggICAqcGF0aDsKKwlib29sCQl0aHJvd19lcnJvciA9IGpleHByLT5vbl9lcnJvci0+YnR5 cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUjsKKwlib29sCQllcnJvciA9IGZhbHNlLAorCQkJCWVt cHR5ID0gZmFsc2U7CisJLyogTWlnaHQgZ2V0IG92ZXJyaWRkZW4gZm9yIEpTT05fVkFMVUVfT1Ag YnkgYW4gcGVyLWl0ZW0gY29lcmNpb24uICovCisJaW50CQkJanVtcF9ldmFsX2NvZXJjaW9uID0g anNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247CisKKwlpdGVtID0ganNlc3RhdGUt PmZvcm1hdHRlZF9leHByLnZhbHVlOworCXBhdGggPSBEYXR1bUdldEpzb25QYXRoUChqc2VzdGF0 ZS0+cGF0aHNwZWMudmFsdWUpOworCisJLyogUmVzZXQgSnNvbkV4cHJQb3N0RXZhbFN0YXRlIGZv ciB0aGlzIGV2YWx1YXRpb24uICovCisJbWVtc2V0KHBvc3RfZXZhbCwgMCwgc2l6ZW9mKCpwb3N0 X2V2YWwpKTsKKwlzd2l0Y2ggKGpleHByLT5vcCkKKwl7CisJCWNhc2UgSlNPTl9FWElTVFNfT1A6 CisJCQl7CisJCQkJYm9vbAkJZXhpc3RzID0gSnNvblBhdGhFeGlzdHMoaXRlbSwgcGF0aCwKKwkJ CQkJCQkJCQkJCQkhdGhyb3dfZXJyb3IgPyAmZXJyb3IgOiBOVUxMLAorCQkJCQkJCQkJCQkJCWpz ZXN0YXRlLT5hcmdzKTsKKworCQkJCWlmICghZXJyb3IpCisJCQkJeworCQkJCQkqb3AtPnJlc3Zh bHVlID0gQm9vbEdldERhdHVtKGV4aXN0cyk7CisJCQkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOwor CQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9RVUVSWV9PUDoKKwkJCSpvcC0+ cmVzdmFsdWUgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53cmFwcGVyLCAmZW1w dHksCisJCQkJCQkJCQkJICAhdGhyb3dfZXJyb3IgPyAmZXJyb3IgOiBOVUxMLAorCQkJCQkJCQkJ CSAganNlc3RhdGUtPmFyZ3MpOworCisJCQlpZiAoIWVycm9yICYmICFlbXB0eSkKKwkJCQkqb3At PnJlc251bGwgPSAoRGF0dW1HZXRQb2ludGVyKCpvcC0+cmVzdmFsdWUpID09IE5VTEwpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJeworCQkJCUpzb25iVmFsdWUgKmpi diA9IEpzb25QYXRoVmFsdWUoaXRlbSwgcGF0aCwgJmVtcHR5LAorCQkJCQkJCQkJCQkJIXRocm93 X2Vycm9yID8gJmVycm9yIDogTlVMTCwKKwkJCQkJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKKwor CQkJCWlmIChqYnYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIFdpbGwgYmUgY29lcmNlZCB3aXRo IHJlc3VsdF9jb2VyY2lvbi4gKi8KKwkJCQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJ CQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoIWVycm9yICYmICFl bXB0eSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IHR5 cGUgaXMganNvbihiKSwgdXNlCisJCQkJCSAqIHJlc3VsdF9jb2VyY2lvbiB0byBkbyB0aGUgY29l cmNpb24uCisJCQkJCSAqLworCQkJCQlpZiAoamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gSlNP Tk9JRCB8fAorCQkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gSlNPTkJPSUQpCisJCQkJ CXsKKwkJCQkJCSpvcC0+cmVzdmFsdWUgPSBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29u YihqYnYpKTsKKwkJCQkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOworCQkJCQl9CisJCQkJCWVsc2UK KwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEVsc2UsIHVzZSBvbmUgb2YgdGhlIGl0ZW1fY29l cmNpb25zLgorCQkJCQkJICoKKwkJCQkJCSAqIEVycm9yIG91dCBpZiBubyBjYXN0IGV4cHJlc3Np b24gZXhpc3RzLgorCQkJCQkJICovCisJCQkJCQlFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24o amJ2LCBqc2VzdGF0ZSwgdGhyb3dfZXJyb3IsCisJCQkJCQkJCQkJCQkJJmp1bXBfZXZhbF9jb2Vy Y2lvbiwKKwkJCQkJCQkJCQkJCQlvcC0+cmVzdmFsdWUsIG9wLT5yZXNudWxsKTsKKwkJCQkJfQor CQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBTUUwvSlNPTiBleHByZXNzaW9uIG9wICVkIiwgamV4cHItPm9wKTsKKwkJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZW1wdHkpCisJeworCQlpZiAoamV4cHItPm9uX2VtcHR5 KQorCQl7CisJCQlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VS Uk9SKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfTk9fU1FMX0pT T05fSVRFTSksCisJCQkJCQllcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0iKSk7CisJCQllbHNlCisJ CQkJcG9zdF9ldmFsLT5lbXB0eS52YWx1ZSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKworCQkJQXNz ZXJ0KGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDApOworCQkJcmV0dXJuIGpzZXN0YXRlLT5qdW1w X2VtcHR5OworCQl9CisJCWVsc2UgaWYgKGpleHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9C RUhBVklPUl9FUlJPUikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9O T19TUUxfSlNPTl9JVEVNKSwKKwkJCQkJZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpOworCQll bHNlCisJCQlwb3N0X2V2YWwtPmVycm9yLnZhbHVlID0gQm9vbEdldERhdHVtKHRydWUpOworCisJ CSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisKKwkJ QXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDApOworCQlyZXR1cm4ganNlc3RhdGUtPmp1 bXBfZXJyb3I7CisJfQorCisJaWYgKGVycm9yKQorCXsKKwkJQXNzZXJ0KCF0aHJvd19lcnJvciAm JiBqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKTsKKwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkg MDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJcG9zdF9ldmFsLT5lcnJvci52YWx1ZSA9IEJv b2xHZXREYXR1bSh0cnVlKTsKKwkJcmV0dXJuIGpzZXN0YXRlLT5qdW1wX2Vycm9yOworCX0KKwor CS8qIEVsc2UgcmV0dXJuIHRoZSBjb2VyY2lvbiBzdGVwIGFkZHJlc3Mgb3IgdGhlIGFkZHJlc3Mg dG8gc2tpcCB0byBlbmQuICovCisJcmV0dXJuIGp1bXBfZXZhbF9jb2VyY2lvbiA+PSAwID8ganVt cF9ldmFsX2NvZXJjaW9uIDoganNlc3RhdGUtPmp1bXBfZW5kOworfQorCisvKgorICogU2VsZWN0 cyBhIGNvZXJjaW9uIGZvciBhIGdpdmVuIEpzb25iVmFsdWUgYmFzZWQgb24gaXRzIHR5cGUuCisg KgorICogT24gcmV0dXJuLCAqcmVzdmFsdWUgYW5kICpyZXNudWxsIGFyZSBzZXQgdG8gdGhlIHZh bHVlIGV4dHJhY3RlZCBmcm9tIHRoZQorICogSnNvbmJWYWx1ZSBhbmQgKmp1bXBfZXZhbF9pdGVt X2NvZXJjaW9uIGlzIHNldCB0byB0aGUgc3RlcCBhZGRyZXNzIG9mIHRoZQorICogY29lcmNpb24g ZXhwcmVzc2lvbi4KKyAqCisgKiBJZiB0aGUgZm91bmQgZXhwcmVzc2lvbiBpcyBhIEpzb25Db2Vy Y2lvbiBub2RlIHRoYXQgbWVhbnMgdGhlIHBhcnNlcgorICogZGlkbnQnIGZpbmQgYSBjYXN0IHRv IGRvIHRoZSBjb2VyY2lvbiwgc28gdGhyb3cgYW4gZXJyb3IgaWYgdGhlCisgKiBPTiBFUlJPUiBi ZWhhdmlvciBzYXlzIHRvIGRvIHNvLgorICovCitzdGF0aWMgdm9pZAorRXhlY1ByZXBhcmVKc29u SXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLAor CQkJCQkJCWJvb2wgdGhyb3dfZXJyb3IsCisJCQkJCQkJaW50ICpqdW1wX2V2YWxfaXRlbV9jb2Vy Y2lvbiwKKwkJCQkJCQlEYXR1bSAqcmVzdmFsdWUsIGJvb2wgKnJlc251bGwpCit7CisJaW50CQkg ICAqZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzID0ganNlc3RhdGUtPmV2YWxfaXRlbV9jb2VyY2lv bl9qdW1wczsKKwlib29sCSAgICppdGVtX2NvZXJjaW9uX3ZpYV9leHByID0ganNlc3RhdGUtPml0 ZW1fY29lcmNpb25fdmlhX2V4cHI7CisJYm9vbAkJdmlhX2V4cHI7CisJaW50CQkJanVtcF90bzsK KwlKc29uYlZhbHVlCWJ1ZjsKKworCWlmIChpdGVtLT50eXBlID09IGpidkJpbmFyeSAmJiBKc29u Q29udGFpbmVySXNTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhKSkKKwl7CisJCWJvb2wJaXNf c2NhbGFyIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKworCQlpc19zY2FsYXIgPSBKc29uYkV4 dHJhY3RTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhLCAmYnVmKTsKKwkJaXRlbSA9ICZidWY7 CisJCUFzc2VydChpc19zY2FsYXIpOworCX0KKworCSpyZXNudWxsID0gZmFsc2U7CisKKwkvKiBn ZXQgY29lcmNpb24gc3RhdGUgcmVmZXJlbmNlIGFuZCBkYXR1bSBvZiB0aGUgY29ycmVzcG9uZGlu ZyBTUUwgdHlwZSAqLworCXN3aXRjaCAoaXRlbS0+dHlwZSkKKwl7CisJCWNhc2UgamJ2TnVsbDoK KwkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5cGVOdWxsXTsK KwkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlTnVsbF07 CisJCQkqcmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCQkqcmVzbnVsbCA9IHRydWU7CisJCQlicmVh azsKKworCQljYXNlIGpidlN0cmluZzoKKwkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFf ZXhwcltKc29uSXRlbVR5cGVTdHJpbmddOworCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lv bl9qdW1wc1tKc29uSXRlbVR5cGVTdHJpbmddOworCQkJKnJlc3ZhbHVlID0KKwkJCQlQb2ludGVy R2V0RGF0dW0oY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAor CQkJCQkJCQlpdGVtLT52YWwuc3RyaW5nLmxlbikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZO dW1lcmljOgorCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9leHByW0pzb25JdGVtVHlw ZU51bWVyaWNdOworCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRl bVR5cGVOdW1lcmljXTsKKwkJCSpyZXN2YWx1ZSA9IE51bWVyaWNHZXREYXR1bShpdGVtLT52YWwu bnVtZXJpYyk7CisJCQlicmVhazsKKworCQljYXNlIGpidkJvb2w6CisJCQl2aWFfZXhwciA9IGl0 ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlQm9vbGVhbl07CisJCQlqdW1wX3RvID0g ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZUJvb2xlYW5dOworCQkJKnJlc3Zh bHVlID0gQm9vbEdldERhdHVtKGl0ZW0tPnZhbC5ib29sZWFuKTsKKwkJCWJyZWFrOworCisJCWNh c2UgamJ2RGF0ZXRpbWU6CisJCQkqcmVzdmFsdWUgPSBpdGVtLT52YWwuZGF0ZXRpbWUudmFsdWU7 CisJCQlzd2l0Y2ggKGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCkKKwkJCXsKKwkJCQljYXNlIERB VEVPSUQ6CisJCQkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5 cGVEYXRlXTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRl bVR5cGVEYXRlXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1FT0lEOgorCQkJCQl2aWFfZXhw ciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGltZV07CisJCQkJCWp1bXBf dG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlVGltZV07CisJCQkJCWJy ZWFrOworCQkJCWNhc2UgVElNRVRaT0lEOgorCQkJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25f dmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGltZXR6XTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9j b2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVUaW1ldHpdOworCQkJCQlicmVhazsKKwkJCQljYXNl IFRJTUVTVEFNUE9JRDoKKwkJCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9leHByW0pz b25JdGVtVHlwZVRpbWVzdGFtcF07CisJCQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25f anVtcHNbSnNvbkl0ZW1UeXBlVGltZXN0YW1wXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1F U1RBTVBUWk9JRDoKKwkJCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9leHByW0pzb25J dGVtVHlwZVRpbWVzdGFtcHR6XTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9q dW1wc1tKc29uSXRlbVR5cGVUaW1lc3RhbXB0el07CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6 CisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIGRhdGV0aW1lIHR5cGUgb2lkICV1 IiwKKwkJCQkJCSBpdGVtLT52YWwuZGF0ZXRpbWUudHlwaWQpOworCQkJfQorCQkJYnJlYWs7CisK KwkJY2FzZSBqYnZBcnJheToKKwkJY2FzZSBqYnZPYmplY3Q6CisJCWNhc2UgamJ2QmluYXJ5Ogor CQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9leHByW0pzb25JdGVtVHlwZUNvbXBvc2l0 ZV07CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZUNv bXBvc2l0ZV07CisJCQkqcmVzdmFsdWUgPSBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29u YihpdGVtKSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQganNvbmIgdmFsdWUgdHlwZSAlZCIsIGl0ZW0tPnR5cGUpOworCX0KKworCS8qIElmIHRo ZSBleHByZXNzaW9uIGlzIGEgSnNvbkNvZXJjaW9uLCB0aHJvdyBhbiBlcnJvci4gKi8KKwlpZiAo anVtcF90byA+PSAwICYmICF2aWFfZXhwcikKKwl7CisJCWlmICh0aHJvd19lcnJvcikKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9TUUxfSlNPTl9JVEVNX0NBTk5PVF9C RV9DQVNUX1RPX1RBUkdFVF9UWVBFKSwKKwkJCQkJZXJybXNnKCJTUUwvSlNPTiBpdGVtIGNhbm5v dCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlIikpOworCisJCSpyZXN2YWx1ZSA9IChEYXR1bSkgMDsK KwkJKnJlc251bGwgPSB0cnVlOworCX0KKworCSpqdW1wX2V2YWxfaXRlbV9jb2VyY2lvbiA9IGp1 bXBfdG87Cit9CisKKy8qCisgKiBDb2VyY2UgYSBqc29uYiB2YWx1ZSBwcm9kdWNlZCBieSBFeGVj RXZhbEpzb25FeHByUGF0aCgpIG9yIGFuIE9OIEVSUk9SIC8KKyAqIEVNUFRZIGJlaGF2aW9yIGV4 cHJlc3Npb24gdG8gdGhlIHRhcmdldCB0eXBlIGJ5IGVpdGhlciBjYWxsaW5nCisgKiBqc29uX3Bv cHVsYXRlX3R5cGUoKSBvciB0aGUgdHlwZSdzIGlucHV0IGZ1bmN0aW9uLgorICoKKyAqIEFueSBz b2Z0IGVycm9ycyB0aGF0IG9jY3VyIHdpbGwgYmUgY2hlY2tlZCBieSBFRU9QX0pTT05FWFBSX0NP RVJDSU9OX0ZJTklTSAorICogdGhhdCB3aWxsIHJ1biByaWdodCBhZnRlciB0aGlzLgorICovCit2 b2lkCitFeGVjRXZhbEpzb25Db2VyY2lvbihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLAorCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCUpzb25Db2VyY2lvbiAqY29l cmNpb24gPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5jb2VyY2lvbjsKKwlFcnJvclNhdmVDb250 ZXh0ICplc2NvbnRleHQgPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5lc2NvbnRleHQ7CisJRGF0 dW0JCXJlcyA9ICpvcC0+cmVzdmFsdWU7CisJYm9vbAkJcmVzbnVsbCA9ICpvcC0+cmVzbnVsbDsK KworCWlmIChjb2VyY2lvbi0+dmlhX3BvcHVsYXRlKQorCXsKKwkJdm9pZCAqY2FjaGUgPSBvcC0+ ZC5qc29uZXhwcl9jb2VyY2lvbi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGU7CisKKwkJKm9wLT5y ZXN2YWx1ZSA9IGpzb25fcG9wdWxhdGVfdHlwZShyZXMsIEpTT05CT0lELAorCQkJCQkJCQkJCSAg IGNvZXJjaW9uLT50YXJnZXR0eXBlLAorCQkJCQkJCQkJCSAgIGNvZXJjaW9uLT50YXJnZXR0eXBt b2QsCisJCQkJCQkJCQkJICAgJmNhY2hlLAorCQkJCQkJCQkJCSAgIGVjb250ZXh0LT5lY3h0X3Bl cl9xdWVyeV9tZW1vcnksCisJCQkJCQkJCQkJICAgb3AtPnJlc251bGwsIChOb2RlICopIGVzY29u dGV4dCk7CisJfQorCWVsc2UgaWYgKGNvZXJjaW9uLT52aWFfaW8pCisJeworCQlGbWdySW5mbyAg ICppbnB1dF9maW5mbyA9IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmlucHV0X2ZpbmZvOworCQlP aWQJCQl0eXBpb3BhcmFtID0gb3AtPmQuanNvbmV4cHJfY29lcmNpb24udHlwaW9wYXJhbTsKKwkJ Y2hhciAgICp2YWxfc3RyaW5nID0gcmVzbnVsbCA/IE5VTEwgOgorCQkJSnNvbmJVbnF1b3RlKERh dHVtR2V0SnNvbmJQKHJlcykpOworCisJCSh2b2lkKSBJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoaW5w dXRfZmluZm8sIHZhbF9zdHJpbmcsIHR5cGlvcGFyYW0sCisJCQkJCQkJCQkgY29lcmNpb24tPnRh cmdldHR5cG1vZCwKKwkJCQkJCQkJCSAoTm9kZSAqKSBlc2NvbnRleHQsCisJCQkJCQkJCQkgb3At PnJlc3ZhbHVlKTsKKwl9Cit9CisKKy8qCisgKiBDaGVja3MgaWYgdGhlIGNvZXJjaW9uIGV2YWx1 YXRpb24gbGVkIHRvIGFuIGVycm9yLiAgSWYgYW4gZXJyb3IgZGlkIG9jY3VyLAorICogdGhpcyBz ZXRzIHBvc3RfZXZhbC0+ZXJyb3IgdG8gdHJpZ2dlciB0aGUgc3Vic2VxdWVudCBPTiBFUlJPUiBo YW5kbGluZworICogc3RlcHMuCisgKi8KK3ZvaWQKK0V4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNo KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCit7CisJSnNvbkV4cHJTdGF0ZSAq anNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwci5qc2VzdGF0ZTsKKworCWlmIChTT0ZUX0VSUk9SX09D Q1VSUkVEKCZqc2VzdGF0ZS0+ZXNjb250ZXh0KSkKKwl7CisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0 dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisJCWpzZXN0YXRlLT5wb3N0X2V2YWwuZXJy b3IudmFsdWUgPSBCb29sR2V0RGF0dW0odHJ1ZSk7CisKKwkJLyoKKwkJICogQWxzbyBtYWtlIEVy cm9yU2F2ZUNvbnRleHQgcmVhZHkgZm9yIHRoZSBuZXh0IHJvdy4gIFNpbmNlIHdlIG5ldmVyCisJ CSAqIHNldCBkZXRhaWxzX3dhbnRlZCwgd2UgZG9uJ3QgbmVlZCB0byBhbHNvIHJlc2V0IGVycm9y X2RhdGEsIHdoaWNoCisJCSAqIHdvdWxkIGJlIE5VTEwgYW55d2F5LgorCQkgKi8KKwkJQXNzZXJ0 KCFqc2VzdGF0ZS0+ZXNjb250ZXh0LmRldGFpbHNfd2FudGVkICYmCisJCQkgICBqc2VzdGF0ZS0+ ZXNjb250ZXh0LmVycm9yX2RhdGEgPT0gTlVMTCk7CisJCWpzZXN0YXRlLT5lc2NvbnRleHQuZXJy b3Jfb2NjdXJyZWQgPSBmYWxzZTsKKwl9Cit9CiAKIC8qCiAgKiBFeGVjRXZhbEdyb3VwaW5nRnVu YwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgYi9zcmMv YmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwppbmRleCA4MTg1NmE5ZGM3Li4xNjhjN2U3 M2IxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysg Yi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwpAQCAtMTkzMCw2ICsxOTMwLDE0 NiBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCUxMVk1CdWlsZEJy KGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgRUVPUF9KU09O RVhQUl9QQVRIOgorCQkJCXsKKwkJCQkJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBvcC0+ZC5q c29uZXhwci5qc2VzdGF0ZTsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0OworCisJCQkJCS8qCisJ CQkJCSAqIENhbGwgRXhlY0V2YWxKc29uRXhwclBhdGgoKS4gIEl0IHJldHVybnMgdGhlIGFkZHJl c3Mgb2YKKwkJCQkJICogdGhlIHN0ZXAgdG8gcGVyZm9ybSBuZXh0LgorCQkJCQkgKi8KKwkJCQkJ dl9yZXQgPSBidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhlY0V2YWxKc29uRXhwclBhdGgiLAor CQkJCQkJCQkJCQl2X3N0YXRlLCBvcCwgdl9lY29udGV4dCk7CisKKwkJCQkJLyoKKwkJCQkJICog QnVpbGQgYSBzd2l0Y2ggdG8gbWFwIHRoZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIGEKKwkJCQkJ ICogcnVudGltZSB2YWx1ZSBvZiB0aGUgc3RlcCBhZGRyZXNzIHRvIHBlcmZvcm0gbmV4dCwgdG8K KwkJCQkJICogZWl0aGVyIGp1bXBfZW1wdHksIGp1bXBfZXJyb3IsIG9yIHRoZSBjb2VyY2lvbgor CQkJCQkgKiBleHByZXNzaW9uLgorCQkJCQkgKi8KKwkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2Vt cHR5ID49IDAgfHwKKwkJCQkJCWpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDAgfHwKKwkJCQkJCWpz ZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID49IDAgfHwKKwkJCQkJCWpzZXN0YXRl LT5udW1faXRlbV9jb2VyY2lvbnMgPiAwKQorCQkJCQl7CisJCQkJCQlpbnQJCQlpOworCQkJCQkJ TExWTVZhbHVlUmVmIHZfanVtcF9lbXB0eTsKKwkJCQkJCUxMVk1WYWx1ZVJlZiB2X2p1bXBfZXJy b3I7CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9qdW1wX2NvZXJjaW9uOworCQkJCQkJTExWTVZhbHVl UmVmIHZfc3dpdGNoOworCQkJCQkJTExWTUJhc2ljQmxvY2tSZWYgCWJfZG9uZSwKKwkJCQkJCQkJ CQkJYl9lbXB0eSwKKwkJCQkJCQkJCQkJYl9lcnJvciwKKwkJCQkJCQkJCQkJYl9yZXN1bHRfY29l cmNpb24sCisJCQkJCQkJCQkJICAgKmJfaXRlbV9jb2VyY2lvbnMgPSBOVUxMOworCisJCQkJCQli X2VtcHR5ID0KKwkJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJ CQkJCQkgICJvcC4lZC5qc29uZXhwcl9lbXB0eSIsIG9wbm8pOworCQkJCQkJYl9lcnJvciA9CisJ CQkJCQkJbF9iYl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkJICAib3Au JWQuanNvbmV4cHJfZXJyb3IiLCBvcG5vKTsKKwkJCQkJCWJfcmVzdWx0X2NvZXJjaW9uID0KKwkJ CQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCQkgICJvcC4l ZC5qc29uZXhwcl9yZXN1bHRfY29lcmNpb24iLCBvcG5vKTsKKwkJCQkJCWlmIChqc2VzdGF0ZS0+ bnVtX2l0ZW1fY29lcmNpb25zID4gMCkKKwkJCQkJCXsKKwkJCQkJCQliX2l0ZW1fY29lcmNpb25z ID0gcGFsbG9jKHNpemVvZihMTFZNQmFzaWNCbG9ja1JlZikgKgorCQkJCQkJCQkJCQkJCSAganNl c3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyk7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IGpzZXN0 YXRlLT5udW1faXRlbV9jb2VyY2lvbnM7IGkrKykKKwkJCQkJCQl7CisJCQkJCQkJCWJfaXRlbV9j b2VyY2lvbnNbaV0gPQorCQkJCQkJCQkJbF9iYl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0s CisJCQkJCQkJCQkJCQkgICJvcC4lZC5qc29uZXhwcl9pdGVtX2NvZXJjaW9uLiVkIiwKKwkJCQkJ CQkJCQkJCSAgb3BubywgaSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJYl9kb25lID0KKwkJ CQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCQkgICJvcC4l ZC5qc29uZXhwcl9kb25lIiwgb3Bubyk7CisKKwkJCQkJCXZfc3dpdGNoID0gTExWTUJ1aWxkU3dp dGNoKGIsCisJCQkJCQkJCQkJCQkgICB2X3JldCwKKwkJCQkJCQkJCQkJCSAgIGJfZG9uZSwKKwkJ CQkJCQkJCQkJCSAgIGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgKyAzKTsKKwkJCQkJCS8q IFJldHVybmVkIGpzZXN0YXRlLT5qdW1wX2VtcHR5PyAqLworCQkJCQkJaWYgKGpzZXN0YXRlLT5q dW1wX2VtcHR5ID49IDApCisJCQkJCQl7CisJCQkJCQkJdl9qdW1wX2VtcHR5ID0gbF9pbnQzMl9j b25zdChsYywganNlc3RhdGUtPmp1bXBfZW1wdHkpOworCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dp dGNoLCB2X2p1bXBfZW1wdHksIGJfZW1wdHkpOworCQkJCQkJfQorCQkJCQkJLyogUmV0dXJuZWQg anNlc3RhdGUtPmp1bXBfZXJyb3I/ICovCisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZXJyb3Ig Pj0gMCkKKwkJCQkJCXsKKwkJCQkJCQl2X2p1bXBfZXJyb3IgPSBsX2ludDMyX2NvbnN0KGxjLCBq c2VzdGF0ZS0+anVtcF9lcnJvcik7CisJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVt cF9lcnJvciwgYl9lcnJvcik7CisJCQkJCQl9CisJCQkJCQkvKiBSZXR1cm5lZCBqc2VzdGF0ZS0+ anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbj8gKi8KKwkJCQkJCWlmIChqc2VzdGF0ZS0+anVtcF9l dmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwKQorCQkJCQkJeworCQkJCQkJCXZfanVtcF9jb2VyY2lv biA9IGxfaW50MzJfY29uc3QobGMsIGpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9u KTsKKwkJCQkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwgdl9qdW1wX2NvZXJjaW9uLCBiX3Jlc3Vs dF9jb2VyY2lvbik7CisJCQkJCQl9CisJCQkJCQkvKiBSZXR1cm5lZCBvbmUgb2YganNlc3RhdGUt PmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tdPyAqLworCQkJCQkJZm9yIChpID0gMDsgaSA8IGpz ZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnM7IGkrKykKKwkJCQkJCXsKKwkJCQkJCQlpZiAoanNl c3RhdGUtPmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tpXSA+PSAwKQorCQkJCQkJCXsKKwkJCQkJ CQkJdl9qdW1wX2NvZXJjaW9uID0gbF9pbnQzMl9jb25zdChsYywganNlc3RhdGUtPmV2YWxfaXRl bV9jb2VyY2lvbl9qdW1wc1tpXSk7CisJCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCB2X2p1 bXBfY29lcmNpb24sIGJfaXRlbV9jb2VyY2lvbnNbaV0pOworCQkJCQkJCX0KKwkJCQkJCX0KKwor CQkJCQkJLyogT04gRU1QVFkgY29kZSAqLworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5k KGIsIGJfZW1wdHkpOworCQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDApCisJCQkJ CQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3NbanNlc3RhdGUtPmp1bXBfZW1wdHldKTsKKwkJCQkJ CWVsc2UKKwkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJsZShiKTsKKwkJCQkJCS8qIE9OIEVSUk9S IGNvZGUgKi8KKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2Vycm9yKTsKKwkJ CQkJCWlmIChqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKQorCQkJCQkJCUxMVk1CdWlsZEJyKGIs IG9wYmxvY2tzW2pzZXN0YXRlLT5qdW1wX2Vycm9yXSk7CisJCQkJCQllbHNlCisJCQkJCQkJTExW TUJ1aWxkVW5yZWFjaGFibGUoYik7CisJCQkJCQkvKiByZXN1bHRfY29lcmNpb24gY29kZSAqLwor CQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIsIGJfcmVzdWx0X2NvZXJjaW9uKTsKKwkJ CQkJCWlmIChqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwKQorCQkJCQkJ CUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW2pzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJj aW9uXSk7CisJCQkJCQllbHNlCisJCQkJCQkJTExWTUJ1aWxkVW5yZWFjaGFibGUoYik7CisJCQkJ CQkvKiBpdGVtIGNvZXJjaW9uIGNvZGUgYmxvY2tzICovCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwg anNlc3RhdGUtPm51bV9pdGVtX2NvZXJjaW9uczsgaSsrKQorCQkJCQkJeworCQkJCQkJCUxMVk1Q b3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2l0ZW1fY29lcmNpb25zW2ldKTsKKwkJCQkJCQlpZiAo anNlc3RhdGUtPmV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tpXSA+PSAwKQorCQkJCQkJCQlMTFZN QnVpbGRCcihiLCBvcGJsb2Nrc1tqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW2ld XSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJsZShiKTsKKwkJCQkJ CX0KKworCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIsIGJfZG9uZSk7CisJCQkJCX0K KworCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCQlicmVhazsK KwkJCQl9CisKKwkJCWNhc2UgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTjoKKwkJCQlidWlsZF9FdmFs WEZ1bmMoYiwgbW9kLCAiRXhlY0V2YWxKc29uQ29lcmNpb24iLAorCQkJCQkJCQkJdl9zdGF0ZSwg b3AsIHZfZWNvbnRleHQpOworCisJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFd KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSDoK KwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2gi LAorCQkJCQkJCQl2X3N0YXRlLCBvcCk7CisKKwkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tv cG5vICsgMV0pOworCQkJCWJyZWFrOworCiAJCQljYXNlIEVFT1BfQUdHUkVGOgogCQkJCXsKIAkJ CQkJTExWTVZhbHVlUmVmIHZfYWdnbm87CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2 bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMK aW5kZXggM2E0YmUwOWU1MC4uZGVhOWI0Yzg0OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0 L2xsdm0vbGx2bWppdF90eXBlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRf dHlwZXMuYwpAQCAtMTcyLDYgKzE3Miw5IEBAIHZvaWQJICAgKnJlZmVyZW5jZWRfZnVuY3Rpb25z W10gPQogCUV4ZWNFdmFsWG1sRXhwciwKIAlFeGVjRXZhbEpzb25Db25zdHJ1Y3RvciwKIAlFeGVj RXZhbEpzb25Jc1ByZWRpY2F0ZSwKKwlFeGVjRXZhbEpzb25Db2VyY2lvbiwKKwlFeGVjRXZhbEpz b25Db2VyY2lvbkZpbmlzaCwKKwlFeGVjRXZhbEpzb25FeHByUGF0aCwKIAlNYWtlRXhwYW5kZWRP YmplY3RSZWFkT25seUludGVybmFsLAogCXNsb3RfZ2V0bWlzc2luZ2F0dHJzLAogCXNsb3RfZ2V0 c29tZWF0dHJzX2ludCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggODllNzdhZGJjNy4uZDYzMzZh MGMwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTg1Nyw2ICs4NTcsMjQgQEAgbWFrZUpzb25W YWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIgKmZvcm1hdHRlZF9leHByLAogCXJldHVybiBq dmU7CiB9CiAKKy8qCisgKiBtYWtlSnNvbkJlaGF2aW9yIC0KKyAqCSAgY3JlYXRlcyBhIEpzb25C ZWhhdmlvciBub2RlCisgKi8KK0pzb25CZWhhdmlvciAqCittYWtlSnNvbkJlaGF2aW9yKEpzb25C ZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZXhwciwgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiwKKwkJ CQkgaW50IGxvY2F0aW9uKQoreworCUpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSBtYWtlTm9kZShK c29uQmVoYXZpb3IpOworCisJYmVoYXZpb3ItPmJ0eXBlID0gdHlwZTsKKwliZWhhdmlvci0+ZXhw ciA9IGV4cHI7CisJYmVoYXZpb3ItPmNvZXJjaW9uID0gY29lcmNpb247CisJYmVoYXZpb3ItPmxv Y2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1cm4gYmVoYXZpb3I7Cit9CisKIC8qCiAgKiBtYWtl SnNvbktleVZhbHVlIC0KICAqCSAgY3JlYXRlcyBhIEpzb25LZXlWYWx1ZSBub2RlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jCmluZGV4IGMwM2Y0ZjIzZTIuLjU1NDg4OWNiN2MgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5j cy5jCkBAIC0yMzQsNiArMjM0LDMzIEBAIGV4cHJUeXBlKGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNh c2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQl0eXBlID0gQk9PTE9JRDsKIAkJCWJyZWFrOworCQlj YXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJY29uc3QgSnNvbkV4cHIgKmpleHByID0gKGNvbnN0 IEpzb25FeHByICopIGV4cHI7CisKKwkJCQl0eXBlID0gamV4cHItPnJldHVybmluZy0+dHlwaWQ7 CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJCQl7CisJCQkJY29u c3QgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChjb25zdCBKc29uQ29lcmNpb24gKikgZXhwcjsK KworCQkJCXR5cGUgPSBjb2VyY2lvbi0+dGFyZ2V0dHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ Y2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQl0eXBlID0gZXhwclR5cGUoKChKc29uSXRlbUNv ZXJjaW9uICopIGV4cHIpLT5jb2VyY2lvbik7CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhh dmlvcjoKKwkJCXsKKwkJCQljb25zdCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gKGNvbnN0IEpz b25CZWhhdmlvciAqKSBleHByOworCisJCQkJaWYgKGJlaGF2aW9yLT5jb2VyY2lvbikKKwkJCQkJ dHlwZSA9IGV4cHJUeXBlKChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7CisJCQkJZWxzZQor CQkJCQl0eXBlID0gZXhwclR5cGUoYmVoYXZpb3ItPmV4cHIpOworCQkJCWJyZWFrOworCQkJfQog CQljYXNlIFRfTnVsbFRlc3Q6CiAJCQl0eXBlID0gQk9PTE9JRDsKIAkJCWJyZWFrOwpAQCAtNDkx LDggKzUxOCwzMiBAQCBleHByVHlwbW9kKGNvbnN0IE5vZGUgKmV4cHIpCiAJCQlyZXR1cm4gKChj b25zdCBTUUxWYWx1ZUZ1bmN0aW9uICopIGV4cHIpLT50eXBtb2Q7CiAJCWNhc2UgVF9Kc29uVmFs dWVFeHByOgogCQkJcmV0dXJuIGV4cHJUeXBtb2QoKE5vZGUgKikgKChjb25zdCBKc29uVmFsdWVF eHByICopIGV4cHIpLT5mb3JtYXR0ZWRfZXhwcik7Ci0JCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JF eHByOgotCQkJcmV0dXJuICgoY29uc3QgSnNvbkNvbnN0cnVjdG9yRXhwciAqKSBleHByKS0+cmV0 dXJuaW5nLT50eXBtb2Q7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQljb25zdCBKc29u RXhwciAqamV4cHIgPSAoY29uc3QgSnNvbkV4cHIgKikgZXhwcjsKKworCQkJCXJldHVybiBqZXhw ci0+cmV0dXJuaW5nLT50eXBtb2Q7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25Db2Vy Y2lvbjoKKwkJCXsKKwkJCQljb25zdCBKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gKGNvbnN0IEpz b25Db2VyY2lvbiAqKSBleHByOworCisJCQkJcmV0dXJuIGNvZXJjaW9uLT50YXJnZXR0eXBtb2Q7 CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQlyZXR1cm4g ZXhwclR5cG1vZCgoKEpzb25JdGVtQ29lcmNpb24gKikgZXhwciktPmNvZXJjaW9uKTsKKwkJY2Fz ZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQljb25zdCBKc29uQmVoYXZpb3IgKmJlaGF2aW9y ID0gKGNvbnN0IEpzb25CZWhhdmlvciAqKSBleHByOworCisJCQkJaWYgKGJlaGF2aW9yLT5jb2Vy Y2lvbikKKwkJCQkJcmV0dXJuIGV4cHJUeXBtb2QoKE5vZGUgKikgYmVoYXZpb3ItPmNvZXJjaW9u KTsKKwkJCQllbHNlCisJCQkJCXJldHVybiBleHByVHlwbW9kKGJlaGF2aW9yLT5leHByKTsKKwkJ CX0KKwkJCWJyZWFrOwogCQljYXNlIFRfQ29lcmNlVG9Eb21haW46CiAJCQlyZXR1cm4gKChjb25z dCBDb2VyY2VUb0RvbWFpbiAqKSBleHByKS0+cmVzdWx0dHlwbW9kOwogCQljYXNlIFRfQ29lcmNl VG9Eb21haW5WYWx1ZToKQEAgLTk2OSw2ICsxMDIwLDM0IEBAIGV4cHJDb2xsYXRpb24oY29uc3Qg Tm9kZSAqZXhwcikKIAkJCS8qIElTIEpTT04ncyByZXN1bHQgaXMgYm9vbGVhbiAuLi4gKi8KIAkJ CWNvbGwgPSBJbnZhbGlkT2lkOwkvKiAuLi4gc28gaXQgaGFzIG5vIGNvbGxhdGlvbiAqLwogCQkJ YnJlYWs7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCWNvbGwgPSBleHByQ29sbGF0aW9uKCgoSnNv bkV4cHIgKikgZXhwciktPnJlc3VsdF9jb2VyY2lvbik7CisJCQlicmVhazsKKwkJY2FzZSBUX0pz b25Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gKEpzb25Db2Vy Y2lvbiAqKSBleHByOworCisJCQkJaWYgKGNvZXJjaW9uLT52aWFfaW8gfHwgY29lcmNpb24tPnZp YV9wb3B1bGF0ZSkKKwkJCQkJY29sbCA9IGNvZXJjaW9uLT5jb2xsYXRpb247CisJCQkJZWxzZQor CQkJCQljb2xsID0gSW52YWxpZE9pZDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkl0 ZW1Db2VyY2lvbjoKKwkJCWNvbGwgPSBleHByQ29sbGF0aW9uKCgoSnNvbkl0ZW1Db2VyY2lvbiAq KSBleHByKS0+Y29lcmNpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJ CQl7CisJCQkJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IChKc29uQmVoYXZpb3IgKikgZXhwcjsK KworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCisJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9u KChOb2RlICopIGJlaGF2aW9yLT5jb2VyY2lvbik7CisJCQkJZWxzZSBpZiAoYmVoYXZpb3ItPmV4 cHIpCisJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKGJlaGF2aW9yLT5leHByKTsKKwkJCQllbHNl CisJCQkJCWNvbGwgPSBJbnZhbGlkT2lkOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxs VGVzdDoKIAkJCS8qIE51bGxUZXN0J3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4uICovCiAJCQljb2xs ID0gSW52YWxpZE9pZDsJLyogLi4uIHNvIGl0IGhhcyBubyBjb2xsYXRpb24gKi8KQEAgLTEyMDUs NiArMTI4NCw0MiBAQCBleHByU2V0Q29sbGF0aW9uKE5vZGUgKmV4cHIsIE9pZCBjb2xsYXRpb24p CiAJCWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0 aW9uKSk7IC8qIHJlc3VsdCBpcyBhbHdheXMgYm9vbGVhbiAqLwogCQkJYnJlYWs7CisJCWNhc2Ug VF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29uRXhwciAqKSBl eHByOworCisJCQkJaWYgKGpleHByLT5yZXN1bHRfY29lcmNpb24pCisJCQkJCWV4cHJTZXRDb2xs YXRpb24oKE5vZGUgKikgamV4cHItPnJlc3VsdF9jb2VyY2lvbiwgY29sbGF0aW9uKTsKKwkJCQll bHNlCisJCQkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsgLyogcmVzdWx0IGlzIGFs d2F5cyBhCisJCQkJCQkJCQkJCQkJICoganNvbltiXSB0eXBlICovCisJCQl9CisJCQlicmVhazsK KwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQl7CisJCQkJSnNvbkl0ZW1Db2VyY2lvbiAq aXRlbV9jb2VyY2lvbiA9IChKc29uSXRlbUNvZXJjaW9uICopIGV4cHI7CisKKwkJCQlpZiAoaXRl bV9jb2VyY2lvbi0+Y29lcmNpb24pCisJCQkJCWV4cHJTZXRDb2xsYXRpb24oaXRlbV9jb2VyY2lv bi0+Y29lcmNpb24sIGNvbGxhdGlvbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25D b2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gKEpzb25Db2VyY2lv biAqKSBleHByOworCisJCQkJY29lcmNpb24tPmNvbGxhdGlvbiA9IGNvbGxhdGlvbjsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlv ciAqYmVoYXZpb3IgPSAoSnNvbkJlaGF2aW9yICopIGV4cHI7CisKKwkJCQlpZiAoYmVoYXZpb3It PmV4cHIpCisJCQkJCWV4cHJTZXRDb2xsYXRpb24oYmVoYXZpb3ItPmV4cHIsIGNvbGxhdGlvbik7 CisJCQkJaWYgKGJlaGF2aW9yLT5jb2VyY2lvbikKKwkJCQkJZXhwclNldENvbGxhdGlvbigoTm9k ZSAqKSBiZWhhdmlvci0+Y29lcmNpb24sIGNvbGxhdGlvbik7CisJCQl9CisJCQlicmVhazsKIAkJ Y2FzZSBUX051bGxUZXN0OgogCQkJLyogTnVsbFRlc3QncyByZXN1bHQgaXMgYm9vbGVhbiAuLi4g Ki8KIAkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsgLyogLi4uIHNvIG5ldmVyIHNl dCBhIGNvbGxhdGlvbiAqLwpAQCAtMTUwOCw2ICsxNjIzLDE4IEBAIGV4cHJMb2NhdGlvbihjb25z dCBOb2RlICpleHByKQogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJbG9jID0gKChjb25z dCBKc29uSXNQcmVkaWNhdGUgKikgZXhwciktPmxvY2F0aW9uOwogCQkJYnJlYWs7CisJCWNhc2Ug VF9Kc29uRXhwcjoKKwkJCXsKKwkJCQljb25zdCBKc29uRXhwciAqanNleHByID0gKGNvbnN0IEpz b25FeHByICopIGV4cHI7CisKKwkJCQkvKiBjb25zaWRlciBib3RoIGZ1bmN0aW9uIG5hbWUgYW5k IGxlZnRtb3N0IGFyZyAqLworCQkJCWxvYyA9IGxlZnRtb3N0TG9jKGpzZXhwci0+bG9jYXRpb24s CisJCQkJCQkJCSAgZXhwckxvY2F0aW9uKGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpKTsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJbG9jID0gZXhwckxvY2F0aW9u KCgoSnNvbkJlaGF2aW9yICopIGV4cHIpLT5leHByKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfTnVs bFRlc3Q6CiAJCQl7CiAJCQkJY29uc3QgTnVsbFRlc3QgKm5leHByID0gKGNvbnN0IE51bGxUZXN0 ICopIGV4cHI7CkBAIC0yMjYwLDYgKzIzODcsNDUgQEAgZXhwcmVzc2lvbl90cmVlX3dhbGtlcl9p bXBsKE5vZGUgKm5vZGUsCiAJCQlicmVhazsKIAkJY2FzZSBUX0pzb25Jc1ByZWRpY2F0ZToKIAkJ CXJldHVybiBXQUxLKCgoSnNvbklzUHJlZGljYXRlICopIG5vZGUpLT5leHByKTsKKwkJY2FzZSBU X0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHByICopIG5v ZGU7CisKKwkJCQlpZiAoV0FMSyhqZXhwci0+Zm9ybWF0dGVkX2V4cHIpKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+cmVzdWx0X2NvZXJjaW9uKSkKKwkJCQkJcmV0dXJu IHRydWU7CisJCQkJaWYgKFdBTEsoamV4cHItPml0ZW1fY29lcmNpb25zKSkKKwkJCQkJcmV0dXJu IHRydWU7CisJCQkJaWYgKFdBTEsoamV4cHItPnBhc3NpbmdfdmFsdWVzKSkKKwkJCQkJcmV0dXJu IHRydWU7CisJCQkJLyogd2UgYXNzdW1lIHdhbGtlciBkb2Vzbid0IGNhcmUgYWJvdXQgcGFzc2lu Z19uYW1lcyAqLworCQkJCWlmIChXQUxLKGpleHByLT5vbl9lbXB0eSkpCisJCQkJCXJldHVybiB0 cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5vbl9lcnJvcikpCisJCQkJCXJldHVybiB0cnVlOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJCQlicmVhazsKKwkJY2Fz ZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQl7CisJCQkJSnNvbkl0ZW1Db2VyY2lvbiAgICppdGVt X2NvZXJjaW9uID0gKEpzb25JdGVtQ29lcmNpb24gKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGl0 ZW1fY29lcmNpb24tPmNvZXJjaW9uKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVh azsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29uQmVoYXZpb3IgICAqYmVo YXZpb3IgPSAoSnNvbkJlaGF2aW9yICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhiZWhhdmlvci0+ ZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGJlaGF2aW9yLT5jb2VyY2lv bikpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVz dDoKIAkJCXJldHVybiBXQUxLKCgoTnVsbFRlc3QgKikgbm9kZSktPmFyZyk7CiAJCWNhc2UgVF9C b29sZWFuVGVzdDoKQEAgLTMyNTksNiArMzQyNSw0NiBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRv cl9pbXBsKE5vZGUgKm5vZGUsCiAKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0K KwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25F eHByICopIG5vZGU7CisJCQkJSnNvbkV4cHIgICAqbmV3bm9kZTsKKworCQkJCUZMQVRDT1BZKG5l d25vZGUsIGpleHByLCBKc29uRXhwcik7CisJCQkJTVVUQVRFKG5ld25vZGUtPnBhdGhfc3BlYywg amV4cHItPnBhdGhfc3BlYywgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+Zm9ybWF0dGVk X2V4cHIsIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9k ZS0+cmVzdWx0X2NvZXJjaW9uLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLCBOb2RlICopOworCQkJ CU1VVEFURShuZXdub2RlLT5pdGVtX2NvZXJjaW9ucywgamV4cHItPml0ZW1fY29lcmNpb25zLCBM aXN0ICopOworCQkJCU1VVEFURShuZXdub2RlLT5wYXNzaW5nX3ZhbHVlcywgamV4cHItPnBhc3Np bmdfdmFsdWVzLCBMaXN0ICopOworCQkJCS8qIGFzc3VtZSBtdXRhdG9yIGRvZXMgbm90IGNhcmUg YWJvdXQgcGFzc2luZ19uYW1lcyAqLworCQkJCU1VVEFURShuZXdub2RlLT5vbl9lbXB0eSwgamV4 cHItPm9uX2VtcHR5LCBKc29uQmVoYXZpb3IgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPm9uX2Vy cm9yLCBqZXhwci0+b25fZXJyb3IsIEpzb25CZWhhdmlvciAqKTsKKwkJCQlyZXR1cm4gKE5vZGUg KikgbmV3bm9kZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJ cmV0dXJuIChOb2RlICopIGNvcHlPYmplY3Qobm9kZSk7CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJj aW9uOgorCQkJeworCQkJCUpzb25JdGVtQ29lcmNpb24gICAqaXRlbV9jb2VyY2lvbiA9IChKc29u SXRlbUNvZXJjaW9uICopIG5vZGU7CisJCQkJSnNvbkl0ZW1Db2VyY2lvbiAgICpuZXdub2RlOwor CisJCQkJRkxBVENPUFkobmV3bm9kZSwgaXRlbV9jb2VyY2lvbiwgSnNvbkl0ZW1Db2VyY2lvbik7 CisJCQkJTVVUQVRFKG5ld25vZGUtPmNvZXJjaW9uLCBpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiwg Tm9kZSAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJCWJyZWFrOwor CQljYXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlvciAgICpiZWhhdmlv ciA9IChKc29uQmVoYXZpb3IgKikgbm9kZTsKKwkJCQlKc29uQmVoYXZpb3IgICAqbmV3bm9kZTsK KworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGJlaGF2aW9yLCBKc29uQmVoYXZpb3IpOworCQkJCU1V VEFURShuZXdub2RlLT5leHByLCBiZWhhdmlvci0+ZXhwciwgTm9kZSAqKTsKKwkJCQlNVVRBVEUo bmV3bm9kZS0+Y29lcmNpb24sIGJlaGF2aW9yLT5jb2VyY2lvbiwgSnNvbkNvZXJjaW9uICopOwor CQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9O dWxsVGVzdDoKIAkJCXsKIAkJCQlOdWxsVGVzdCAgICpudGVzdCA9IChOdWxsVGVzdCAqKSBub2Rl OwpAQCAtMzk0NSw2ICs0MTUxLDM2IEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwo Tm9kZSAqbm9kZSwKIAkJCWJyZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJcmV0 dXJuIFdBTEsoKChKc29uSXNQcmVkaWNhdGUgKikgbm9kZSktPmV4cHIpOworCQljYXNlIFRfSnNv bkFyZ3VtZW50OgorCQkJcmV0dXJuIFdBTEsoKChKc29uQXJndW1lbnQgKikgbm9kZSktPnZhbCk7 CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQl7CisJCQkJSnNvbkZ1bmNFeHByICpqZmUgPSAo SnNvbkZ1bmNFeHByICopIG5vZGU7CisKKwkJCQlpZiAoV0FMSyhqZmUtPmNvbnRleHRfaXRlbSkp CisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpmZS0+cGF0aHNwZWMpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZmUtPnBhc3NpbmcpKQorCQkJCQlyZXR1cm4gdHJ1 ZTsKKwkJCQlpZiAoamZlLT5vdXRwdXQgJiYgV0FMSyhqZmUtPm91dHB1dCkpCisJCQkJCXJldHVy biB0cnVlOworCQkJCWlmIChqZmUtPm9uX2VtcHR5KQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoamZlLT5vbl9lcnJvcikKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJ Y2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29uQmVoYXZpb3IgKmpiID0gKEpzb25C ZWhhdmlvciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoamItPmV4cHIpKQorCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQlpZiAoV0FMSyhqYi0+Y29lcmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CX0KKwkJCWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQlyZXR1cm4gV0FMSygoKE51bGxU ZXN0ICopIG5vZGUpLT5hcmcpOwogCQljYXNlIFRfQm9vbGVhblRlc3Q6CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwppbmRleCAyMjYzNWQyOTI3Li5lOGM1ZTUyZmNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTQ4NzksNyArNDg3OSw4IEBAIGNvc3Rf cXVhbF9ldmFsX3dhbGtlcihOb2RlICpub2RlLCBjb3N0X3F1YWxfZXZhbF9jb250ZXh0ICpjb250 ZXh0KQogCQkJIElzQShub2RlLCBTUUxWYWx1ZUZ1bmN0aW9uKSB8fAogCQkJIElzQShub2RlLCBY bWxFeHByKSB8fAogCQkJIElzQShub2RlLCBDb2VyY2VUb0RvbWFpbikgfHwKLQkJCSBJc0Eobm9k ZSwgTmV4dFZhbHVlRXhwcikpCisJCQkgSXNBKG5vZGUsIE5leHRWYWx1ZUV4cHIpIHx8CisJCQkg SXNBKG5vZGUsIEpzb25FeHByKSkKIAl7CiAJCS8qIFRyZWF0IGFsbCB0aGVzZSBhcyBoYXZpbmcg Y29zdCAxICovCiAJCWNvbnRleHQtPnRvdGFsLnBlcl90dXBsZSArPSBjcHVfb3BlcmF0b3JfY29z dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCA1MDdjMTAxNjYxLi4wNjI5 N2IwMzkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC01Myw2ICs1Myw3 IEBACiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgi CiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKQEAgLTQxNyw2ICs0MTgsMjQgQEAgY29udGFp bl9tdXRhYmxlX2Z1bmN0aW9uc193YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJ LyogQ2hlY2sgYWxsIHN1Ym5vZGVzICovCiAJfQogCisJaWYgKElzQShub2RlLCBKc29uRXhwcikp CisJeworCQlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCBub2RlKTsKKwkJ Q29uc3QJICAgKmNuc3Q7CisKKwkJaWYgKCFJc0EoamV4cHItPnBhdGhfc3BlYywgQ29uc3QpKQor CQkJcmV0dXJuIHRydWU7CisKKwkJY25zdCA9IGNhc3ROb2RlKENvbnN0LCBqZXhwci0+cGF0aF9z cGVjKTsKKworCQlBc3NlcnQoY25zdC0+Y29uc3R0eXBlID09IEpTT05QQVRIT0lEKTsKKwkJaWYg KGNuc3QtPmNvbnN0aXNudWxsKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXJldHVybiBqc3BJc011 dGFibGUoRGF0dW1HZXRKc29uUGF0aFAoY25zdC0+Y29uc3R2YWx1ZSksCisJCQkJCQkJamV4cHIt PnBhc3NpbmdfbmFtZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcyk7CisJfQorCiAJaWYgKElzQShu b2RlLCBTUUxWYWx1ZUZ1bmN0aW9uKSkKIAl7CiAJCS8qIGFsbCB2YXJpYW50cyBvZiBTUUxWYWx1 ZUZ1bmN0aW9uIGFyZSBzdGFibGUgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9n cmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDYzZjE3MmUxNzUuLjhkNWUw NzQ3OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNjUxLDEwICs2NTEsMTggQEAgc3RhdGljIE5vZGUgKm1h a2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUg KnF1ZXJ5KTsKIAkJCQlqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0CiAJCQkJanNvbl9uYW1lX2Fu ZF92YWx1ZQogCQkJCWpzb25fYWdncmVnYXRlX2Z1bmMKKwkJCQlqc29uX2FyZ3VtZW50CisJCQkJ anNvbl9iZWhhdmlvcgogJXR5cGUgPGxpc3Q+CWpzb25fbmFtZV9hbmRfdmFsdWVfbGlzdAogCQkJ CWpzb25fdmFsdWVfZXhwcl9saXN0CiAJCQkJanNvbl9hcnJheV9hZ2dyZWdhdGVfb3JkZXJfYnlf Y2xhdXNlX29wdAotJXR5cGUgPGl2YWw+CWpzb25fcHJlZGljYXRlX3R5cGVfY29uc3RyYWludAor CQkJCWpzb25fYXJndW1lbnRzCisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJanNv bl9wYXNzaW5nX2NsYXVzZV9vcHQKKyV0eXBlIDxpdmFsPglqc29uX2JlaGF2aW9yX3R5cGUKKwkJ CQlqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnQKKwkJCQlqc29uX3F1b3Rlc19jbGF1c2Vf b3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9yCiAldHlwZSA8Ym9vbGVhbj4JanNvbl9rZXlf dW5pcXVlbmVzc19jb25zdHJhaW50X29wdAogCQkJCWpzb25fb2JqZWN0X2NvbnN0cnVjdG9yX251 bGxfY2xhdXNlX29wdAogCQkJCWpzb25fYXJyYXlfY29uc3RydWN0b3JfbnVsbF9jbGF1c2Vfb3B0 CkBAIC02OTUsNyArNzAzLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0 KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlDQUNIRSBDQUxM IENBTExFRCBDQVNDQURFIENBU0NBREVEIENBU0UgQ0FTVCBDQVRBTE9HX1AgQ0hBSU4gQ0hBUl9Q CiAJQ0hBUkFDVEVSIENIQVJBQ1RFUklTVElDUyBDSEVDSyBDSEVDS1BPSU5UIENMQVNTIENMT1NF CiAJQ0xVU1RFUiBDT0FMRVNDRSBDT0xMQVRFIENPTExBVElPTiBDT0xVTU4gQ09MVU1OUyBDT01N RU5UIENPTU1FTlRTIENPTU1JVAotCUNPTU1JVFRFRCBDT01QUkVTU0lPTiBDT05DVVJSRU5UTFkg Q09ORklHVVJBVElPTiBDT05GTElDVAorCUNPTU1JVFRFRCBDT01QUkVTU0lPTiBDT05DVVJSRU5U TFkgQ09ORElUSU9OQUwgQ09ORklHVVJBVElPTiBDT05GTElDVAogCUNPTk5FQ1RJT04gQ09OU1RS QUlOVCBDT05TVFJBSU5UUyBDT05URU5UX1AgQ09OVElOVUVfUCBDT05WRVJTSU9OX1AgQ09QWQog CUNPU1QgQ1JFQVRFIENST1NTIENTViBDVUJFIENVUlJFTlRfUAogCUNVUlJFTlRfQ0FUQUxPRyBD VVJSRU5UX0RBVEUgQ1VSUkVOVF9ST0xFIENVUlJFTlRfU0NIRU1BCkBAIC03MDYsOCArNzE0LDgg QEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExp c3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlERVRBQ0ggRElDVElPTkFSWSBESVNBQkxFX1Ag RElTQ0FSRCBESVNUSU5DVCBETyBET0NVTUVOVF9QIERPTUFJTl9QCiAJRE9VQkxFX1AgRFJPUAog Ci0JRUFDSCBFTFNFIEVOQUJMRV9QIEVOQ09ESU5HIEVOQ1JZUFRFRCBFTkRfUCBFTlVNX1AgRVND QVBFIEVWRU5UIEVYQ0VQVAotCUVYQ0xVREUgRVhDTFVESU5HIEVYQ0xVU0lWRSBFWEVDVVRFIEVY SVNUUyBFWFBMQUlOIEVYUFJFU1NJT04KKwlFQUNIIEVMU0UgRU1QVFlfUCBFTkFCTEVfUCBFTkNP RElORyBFTkNSWVBURUQgRU5EX1AgRU5VTV9QIEVSUk9SX1AgRVNDQVBFCisJRVZFTlQgRVhDRVBU IEVYQ0xVREUgRVhDTFVESU5HIEVYQ0xVU0lWRSBFWEVDVVRFIEVYSVNUUyBFWFBMQUlOIEVYUFJF U1NJT04KIAlFWFRFTlNJT04gRVhURVJOQUwgRVhUUkFDVAogCiAJRkFMU0VfUCBGQU1JTFkgRkVU Q0ggRklMVEVSIEZJTkFMSVpFIEZJUlNUX1AgRkxPQVRfUCBGT0xMT1dJTkcgRk9SCkBAIC03MjIs MTAgKzczMCwxMCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAq cmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCUlOTkVSX1AgSU5PVVQgSU5Q VVRfUCBJTlNFTlNJVElWRSBJTlNFUlQgSU5TVEVBRCBJTlRfUCBJTlRFR0VSCiAJSU5URVJTRUNU IElOVEVSVkFMIElOVE8gSU5WT0tFUiBJUyBJU05VTEwgSVNPTEFUSU9OCiAKLQlKT0lOIEpTT04g SlNPTl9BUlJBWSBKU09OX0FSUkFZQUdHIEpTT05fT0JKRUNUIEpTT05fT0JKRUNUQUdHCi0JSlNP Tl9TQ0FMQVIgSlNPTl9TRVJJQUxJWkUKKwlKT0lOIEpTT04gSlNPTl9BUlJBWSBKU09OX0FSUkFZ QUdHIEpTT05fRVhJU1RTIEpTT05fT0JKRUNUIEpTT05fT0JKRUNUQUdHCisJSlNPTl9RVUVSWSBK U09OX1NDQUxBUiBKU09OX1NFUklBTElaRSBKU09OX1ZBTFVFCiAKLQlLRVkgS0VZUworCUtFRVAg S0VZIEtFWVMKIAogCUxBQkVMIExBTkdVQUdFIExBUkdFX1AgTEFTVF9QIExBVEVSQUxfUAogCUxF QURJTkcgTEVBS1BST09GIExFQVNUIExFRlQgTEVWRUwgTElLRSBMSU1JVCBMSVNURU4gTE9BRCBM T0NBTApAQCAtNzM5LDcgKzc0Nyw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1Nl bGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJTk9UIE5P VEhJTkcgTk9USUZZIE5PVE5VTEwgTk9XQUlUIE5VTExfUCBOVUxMSUYKIAlOVUxMU19QIE5VTUVS SUMKIAotCU9CSkVDVF9QIE9GIE9GRiBPRkZTRVQgT0lEUyBPTEQgT04gT05MWSBPUEVSQVRPUiBP UFRJT04gT1BUSU9OUyBPUgorCU9CSkVDVF9QIE9GIE9GRiBPRkZTRVQgT0lEUyBPTEQgT01JVCBP TiBPTkxZIE9QRVJBVE9SIE9QVElPTiBPUFRJT05TIE9SCiAJT1JERVIgT1JESU5BTElUWSBPVEhF UlMgT1VUX1AgT1VURVJfUAogCU9WRVIgT1ZFUkxBUFMgT1ZFUkxBWSBPVkVSUklESU5HIE9XTkVE IE9XTkVSCiAKQEAgLTc0OCw3ICs3NTYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZp ZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVBP U0lUSU9OIFBSRUNFRElORyBQUkVDSVNJT04gUFJFU0VSVkUgUFJFUEFSRSBQUkVQQVJFRCBQUklN QVJZCiAJUFJJT1IgUFJJVklMRUdFUyBQUk9DRURVUkFMIFBST0NFRFVSRSBQUk9DRURVUkVTIFBS T0dSQU0gUFVCTElDQVRJT04KIAotCVFVT1RFCisJUVVPVEUgUVVPVEVTCiAKIAlSQU5HRSBSRUFE IFJFQUwgUkVBU1NJR04gUkVDSEVDSyBSRUNVUlNJVkUgUkVGX1AgUkVGRVJFTkNFUyBSRUZFUkVO Q0lORwogCVJFRlJFU0ggUkVJTkRFWCBSRUxBVElWRV9QIFJFTEVBU0UgUkVOQU1FIFJFUEVBVEFC TEUgUkVQTEFDRSBSRVBMSUNBCkBAIC03NTksNyArNzY3LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VS ZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKIAlTRVFVRU5DRSBTRVFVRU5DRVMKIAlTRVJJQUxJWkFCTEUgU0VSVkVSIFNFU1NJT04g U0VTU0lPTl9VU0VSIFNFVCBTRVRTIFNFVE9GIFNIQVJFIFNIT1cKIAlTSU1JTEFSIFNJTVBMRSBT S0lQIFNNQUxMSU5UIFNOQVBTSE9UIFNPTUUgU1FMX1AgU1RBQkxFIFNUQU5EQUxPTkVfUAotCVNU QVJUIFNUQVRFTUVOVCBTVEFUSVNUSUNTIFNURElOIFNURE9VVCBTVE9SQUdFIFNUT1JFRCBTVFJJ Q1RfUCBTVFJJUF9QCisJU1RBUlQgU1RBVEVNRU5UIFNUQVRJU1RJQ1MgU1RESU4gU1RET1VUIFNU T1JBR0UgU1RPUkVEIFNUUklDVF9QIFNUUklOR19QIFNUUklQX1AKIAlTVUJTQ1JJUFRJT04gU1VC U1RSSU5HIFNVUFBPUlQgU1lNTUVUUklDIFNZU0lEIFNZU1RFTV9QIFNZU1RFTV9VU0VSCiAKIAlU QUJMRSBUQUJMRVMgVEFCTEVTQU1QTEUgVEFCTEVTUEFDRSBURU1QIFRFTVBMQVRFIFRFTVBPUkFS WSBURVhUX1AgVEhFTgpAQCAtNzY3LDcgKzc3NSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJz aXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7 CiAJVFJFQVQgVFJJR0dFUiBUUklNIFRSVUVfUAogCVRSVU5DQVRFIFRSVVNURUQgVFlQRV9QIFRZ UEVTX1AKIAotCVVFU0NBUEUgVU5CT1VOREVEIFVOQ09NTUlUVEVEIFVORU5DUllQVEVEIFVOSU9O IFVOSVFVRSBVTktOT1dOCisJVUVTQ0FQRSBVTkJPVU5ERUQgVU5DT05ESVRJT05BTCBVTkNPTU1J VFRFRCBVTkVOQ1JZUFRFRCBVTklPTiBVTklRVUUgVU5LTk9XTgogCVVOTElTVEVOIFVOTE9HR0VE IFVOVElMIFVQREFURSBVU0VSIFVTSU5HCiAKIAlWQUNVVU0gVkFMSUQgVkFMSURBVEUgVkFMSURB VE9SIFZBTFVFX1AgVkFMVUVTIFZBUkNIQVIgVkFSSUFESUMgVkFSWUlORwpAQCAtMTU3NjYsNiAr MTU3NzQsNjMgQEAgZnVuY19leHByX2NvbW1vbl9zdWJleHByOgogCQkJCQluLT5sb2NhdGlvbiA9 IEAxOwogCQkJCQkkJCA9IChOb2RlICopIG47CiAJCQkJfQorCQkJfCBKU09OX1FVRVJZICcoJwor CQkJCWpzb25fdmFsdWVfZXhwciAnLCcgYV9leHByIGpzb25fcGFzc2luZ19jbGF1c2Vfb3B0CisJ CQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAorCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgor CQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQK KwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkZ1bmNFeHByICpuID0gbWFrZU5vZGUoSnNvbkZ1bmNF eHByKTsKKworCQkJCQluLT5vcCA9IEpTT05fUVVFUllfT1A7CisJCQkJCW4tPmNvbnRleHRfaXRl bSA9IChKc29uVmFsdWVFeHByICopICQzOworCQkJCQluLT5wYXRoc3BlYyA9ICQ1OworCQkJCQlu LT5wYXNzaW5nID0gJDY7CisJCQkJCW4tPm91dHB1dCA9IChKc29uT3V0cHV0ICopICQ3OworCQkJ CQluLT53cmFwcGVyID0gJDg7CisJCQkJCW4tPnF1b3RlcyA9ICQ5OworCQkJCQluLT5vbl9lbXB0 eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRpYWwoJDEwKTsKKwkJCQkJbi0+b25fZXJyb3IgPSAo SnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDEwKTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJ CQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgSlNPTl9FWElTVFMgJygnCisJCQkJanNv bl92YWx1ZV9leHByICcsJyBhX2V4cHIganNvbl9wYXNzaW5nX2NsYXVzZV9vcHQKKwkJCQlqc29u X2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkZ1bmNFeHByICpu ID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKworCQkJCQluLT5vcCA9IEpTT05fRVhJU1RTX09Q OworCQkJCQluLT5jb250ZXh0X2l0ZW0gPSAoSnNvblZhbHVlRXhwciAqKSAkMzsKKwkJCQkJbi0+ cGF0aHNwZWMgPSAkNTsKKwkJCQkJbi0+cGFzc2luZyA9ICQ2OworCQkJCQluLT5vdXRwdXQgPSBO VUxMOworCQkJCQluLT5vbl9lbXB0eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRpYWwoJDcpOwor CQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29uZCgkNyk7CisJCQkJCW4t PmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEpTT05f VkFMVUUgJygnCisJCQkJanNvbl92YWx1ZV9leHByICcsJyBhX2V4cHIganNvbl9wYXNzaW5nX2Ns YXVzZV9vcHQKKwkJCQlqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlv cl9jbGF1c2Vfb3B0CisJCQknKScKKwkJCQl7CisJCQkJCUpzb25GdW5jRXhwciAqbiA9IG1ha2VO b2RlKEpzb25GdW5jRXhwcik7CisKKwkJCQkJbi0+b3AgPSBKU09OX1ZBTFVFX09QOworCQkJCQlu LT5jb250ZXh0X2l0ZW0gPSAoSnNvblZhbHVlRXhwciAqKSAkMzsKKwkJCQkJbi0+cGF0aHNwZWMg PSAkNTsKKwkJCQkJbi0+cGFzc2luZyA9ICQ2OworCQkJCQluLT5vdXRwdXQgPSAoSnNvbk91dHB1 dCAqKSAkNzsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQ4 KTsKKwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDgpOworCQkJ CQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQogCQkJOwog CiAKQEAgLTE2NDkyLDYgKzE2NTU3LDcwIEBAIG9wdF9hc3ltbWV0cmljOiBBU1lNTUVUUklDCiAJ CTsKIAogLyogU1FML0pTT04gc3VwcG9ydCAqLworanNvbl9wYXNzaW5nX2NsYXVzZV9vcHQ6CisJ CQlQQVNTSU5HIGpzb25fYXJndW1lbnRzCQkJCQl7ICQkID0gJDI7IH0KKwkJCXwgLypFTVBUWSov CQkJCQkJCQl7ICQkID0gTklMOyB9CisJCTsKKworanNvbl9hcmd1bWVudHM6CisJCQlqc29uX2Fy Z3VtZW50CQkJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBqc29uX2FyZ3VtZW50 cyAnLCcganNvbl9hcmd1bWVudAkJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCQk7CisKK2pz b25fYXJndW1lbnQ6CisJCQlqc29uX3ZhbHVlX2V4cHIgQVMgQ29sTGFiZWwKKwkJCXsKKwkJCQlK c29uQXJndW1lbnQgKm4gPSBtYWtlTm9kZShKc29uQXJndW1lbnQpOworCisJCQkJbi0+dmFsID0g KEpzb25WYWx1ZUV4cHIgKikgJDE7CisJCQkJbi0+bmFtZSA9ICQzOworCQkJCSQkID0gKE5vZGUg KikgbjsKKwkJCX0KKwkJOworCisvKiBBUlJBWSBpcyBhIG5vaXNlIHdvcmQgKi8KK2pzb25fd3Jh cHBlcl9iZWhhdmlvcjoKKwkJCSAgV0lUSE9VVCBXUkFQUEVSCQkJCQl7ICQkID0gSlNXX05PTkU7 IH0KKwkJCXwgV0lUSE9VVCBBUlJBWQlXUkFQUEVSCQkJCXsgJCQgPSBKU1dfTk9ORTsgfQorCQkJ fCBXSVRIIFdSQVBQRVIJCQkJCQl7ICQkID0gSlNXX1VOQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lU SCBBUlJBWSBXUkFQUEVSCQkJCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQkJfCBXSVRI IENPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIJeyAkJCA9IEpTV19DT05ESVRJT05BTDsgfQorCQkJ fCBXSVRIIFVOQ09ORElUSU9OQUwgQVJSQVkgV1JBUFBFUgl7ICQkID0gSlNXX1VOQ09ORElUSU9O QUw7IH0KKwkJCXwgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSCQkJeyAkJCA9IEpTV19DT05ESVRJ T05BTDsgfQorCQkJfCBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUgkJeyAkJCA9IEpTV19VTkNP TkRJVElPTkFMOyB9CisJCQl8IC8qIGVtcHR5ICovCQkJCQkJeyAkJCA9IEpTV19OT05FOyB9CisJ CTsKKworanNvbl9iZWhhdmlvcjoKKwkJCURFRkFVTFQgYV9leHByCisJCQkJeyAkJCA9IChOb2Rl ICopIG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9ERUZBVUxULCAkMiwgTlVMTCwgQDEp OyB9CisJCQl8IGpzb25fYmVoYXZpb3JfdHlwZQorCQkJCXsgJCQgPSAoTm9kZSAqKSBtYWtlSnNv bkJlaGF2aW9yKCQxLCBOVUxMLCBOVUxMLCBAMSk7IH0KKwkJOworCitqc29uX2JlaGF2aW9yX3R5 cGU6CisJCQlFUlJPUl9QCQl7ICQkID0gSlNPTl9CRUhBVklPUl9FUlJPUjsgfQorCQkJfCBOVUxM X1AJeyAkJCA9IEpTT05fQkVIQVZJT1JfTlVMTDsgfQorCQkJfCBUUlVFX1AJeyAkJCA9IEpTT05f QkVIQVZJT1JfVFJVRTsgfQorCQkJfCBGQUxTRV9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX0ZBTFNF OyB9CisJCQl8IFVOS05PV04JeyAkJCA9IEpTT05fQkVIQVZJT1JfVU5LTk9XTjsgfQorCQkJfCBF TVBUWV9QIEFSUkFZCXsgJCQgPSBKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOyB9CisJCQl8IEVN UFRZX1AgT0JKRUNUX1AJeyAkJCA9IEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOyB9CisJCQkv KiBub24tc3RhbmRhcmQsIGZvciBPcmFjbGUgY29tcGF0aWJpbGl0eSBvbmx5ICovCisJCQl8IEVN UFRZX1AJeyAkJCA9IEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVk7IH0KKwkJOworCitqc29uX2Jl aGF2aW9yX2NsYXVzZV9vcHQ6CisJCQlqc29uX2JlaGF2aW9yIE9OIEVNUFRZX1AKKwkJCQl7ICQk ID0gbGlzdF9tYWtlMigkMSwgTlVMTCk7IH0KKwkJCXwganNvbl9iZWhhdmlvciBPTiBFUlJPUl9Q CisJCQkJeyAkJCA9IGxpc3RfbWFrZTIoTlVMTCwgJDEpOyB9CisJCQl8IGpzb25fYmVoYXZpb3Ig T04gRU1QVFlfUCBqc29uX2JlaGF2aW9yIE9OIEVSUk9SX1AKKwkJCQl7ICQkID0gbGlzdF9tYWtl MigkMSwgJDQpOyB9CisJCQl8IC8qIEVNUFRZICovCisJCQkJeyAkJCA9IGxpc3RfbWFrZTIoTlVM TCwgTlVMTCk7IH0KKwkJOworCiBqc29uX3ZhbHVlX2V4cHI6CiAJCQlhX2V4cHIganNvbl9mb3Jt YXRfY2xhdXNlX29wdAogCQkJewpAQCAtMTY1MzYsNiArMTY2NjUsMTQgQEAganNvbl9mb3JtYXRf Y2xhdXNlX29wdDoKIAkJCQl9CiAJCTsKIAoranNvbl9xdW90ZXNfY2xhdXNlX29wdDoKKwkJCUtF RVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkdfUAkJeyAkJCA9IEpTX1FVT1RFU19LRUVQOyB9CisJ CQl8IEtFRVAgUVVPVEVTCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19LRUVQOyB9CisJCQl8IE9NSVQg UVVPVEVTIE9OIFNDQUxBUiBTVFJJTkdfUAl7ICQkID0gSlNfUVVPVEVTX09NSVQ7IH0KKwkJCXwg T01JVCBRVU9URVMJCQkJCQl7ICQkID0gSlNfUVVPVEVTX09NSVQ7IH0KKwkJCXwgLyogRU1QVFkg Ki8JCQkJCQl7ICQkID0gSlNfUVVPVEVTX1VOU1BFQzsgfQorCQk7CisKIGpzb25fcmV0dXJuaW5n X2NsYXVzZV9vcHQ6CiAJCQlSRVRVUk5JTkcgVHlwZW5hbWUganNvbl9mb3JtYXRfY2xhdXNlX29w dAogCQkJCXsKQEAgLTE3MTUyLDYgKzE3Mjg5LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJ fCBDT01NSVQKIAkJCXwgQ09NTUlUVEVECiAJCQl8IENPTVBSRVNTSU9OCisJCQl8IENPTkRJVElP TkFMCiAJCQl8IENPTkZJR1VSQVRJT04KIAkJCXwgQ09ORkxJQ1QKIAkJCXwgQ09OTkVDVElPTgpA QCAtMTcxODgsMTAgKzE3MzI2LDEyIEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgRE9VQkxF X1AKIAkJCXwgRFJPUAogCQkJfCBFQUNICisJCQl8IEVNUFRZX1AKIAkJCXwgRU5BQkxFX1AKIAkJ CXwgRU5DT0RJTkcKIAkJCXwgRU5DUllQVEVECiAJCQl8IEVOVU1fUAorCQkJfCBFUlJPUl9QCiAJ CQl8IEVTQ0FQRQogCQkJfCBFVkVOVAogCQkJfCBFWENMVURFCkBAIC0xNzI0MSw2ICsxNzM4MSw3 IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgSU5TVEVBRAogCQkJfCBJTlZPS0VSCiAJCQl8 IElTT0xBVElPTgorCQkJfCBLRUVQCiAJCQl8IEtFWQogCQkJfCBLRVlTCiAJCQl8IExBQkVMCkBA IC0xNzI4Nyw2ICsxNzQyOCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgT0ZGCiAJCQl8 IE9JRFMKIAkJCXwgT0xECisJCQl8IE9NSVQKIAkJCXwgT1BFUkFUT1IKIAkJCXwgT1BUSU9OCiAJ CQl8IE9QVElPTlMKQEAgLTE3MzE3LDYgKzE3NDU5LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgog CQkJfCBQUk9HUkFNCiAJCQl8IFBVQkxJQ0FUSU9OCiAJCQl8IFFVT1RFCisJCQl8IFFVT1RFUwog CQkJfCBSQU5HRQogCQkJfCBSRUFECiAJCQl8IFJFQVNTSUdOCkBAIC0xNzM3Niw2ICsxNzUxOSw3 IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJfCBTVE9SRUQKIAkJCXwg U1RSSUNUX1AKKwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJfCBTVUJTQ1JJUFRJT04K IAkJCXwgU1VQUE9SVApAQCAtMTczOTgsNiArMTc1NDIsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6 CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09NTUlUVEVECisJCQl8IFVO Q09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5LTk9XTgogCQkJfCBVTkxJU1RF TgpAQCAtMTc0NTgsMTAgKzE3NjAzLDEzIEBAIGNvbF9uYW1lX2tleXdvcmQ6CiAJCQl8IEpTT04K IAkJCXwgSlNPTl9BUlJBWQogCQkJfCBKU09OX0FSUkFZQUdHCisJCQl8IEpTT05fRVhJU1RTCiAJ CQl8IEpTT05fT0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCisJCQl8IEpTT05fUVVFUlkKIAkJ CXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9WQUxVRQogCQkJ fCBMRUFTVAogCQkJfCBOQVRJT05BTAogCQkJfCBOQ0hBUgpAQCAtMTc2OTQsNiArMTc4NDIsNyBA QCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IENPTU1JVFRFRAogCQkJfCBDT01QUkVTU0lPTgog CQkJfCBDT05DVVJSRU5UTFkKKwkJCXwgQ09ORElUSU9OQUwKIAkJCXwgQ09ORklHVVJBVElPTgog CQkJfCBDT05GTElDVAogCQkJfCBDT05ORUNUSU9OCkBAIC0xNzc0NiwxMSArMTc4OTUsMTMgQEAg YmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBEUk9QCiAJCQl8IEVBQ0gKIAkJCXwgRUxTRQorCQkJ fCBFTVBUWV9QCiAJCQl8IEVOQUJMRV9QCiAJCQl8IEVOQ09ESU5HCiAJCQl8IEVOQ1JZUFRFRAog CQkJfCBFTkRfUAogCQkJfCBFTlVNX1AKKwkJCXwgRVJST1JfUAogCQkJfCBFU0NBUEUKIAkJCXwg RVZFTlQKIAkJCXwgRVhDTFVERQpAQCAtMTc4MjAsMTAgKzE3OTcxLDE0IEBAIGJhcmVfbGFiZWxf a2V5d29yZDoKIAkJCXwgSlNPTgogCQkJfCBKU09OX0FSUkFZCiAJCQl8IEpTT05fQVJSQVlBR0cK KwkJCXwgSlNPTl9FWElTVFMKIAkJCXwgSlNPTl9PQkpFQ1QKIAkJCXwgSlNPTl9PQkpFQ1RBR0cK KwkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBKU09OX1NFUklBTElaRQor CQkJfCBKU09OX1ZBTFVFCisJCQl8IEtFRVAKIAkJCXwgS0VZCiAJCQl8IEtFWVMKIAkJCXwgTEFC RUwKQEAgLTE3ODg0LDYgKzE4MDM5LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBPRkYK IAkJCXwgT0lEUwogCQkJfCBPTEQKKwkJCXwgT01JVAogCQkJfCBPTkxZCiAJCQl8IE9QRVJBVE9S CiAJCQl8IE9QVElPTgpAQCAtMTc5MjEsNiArMTgwNzcsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6 CiAJCQl8IFBST0dSQU0KIAkJCXwgUFVCTElDQVRJT04KIAkJCXwgUVVPVEUKKwkJCXwgUVVPVEVT CiAJCQl8IFJBTkdFCiAJCQl8IFJFQUQKIAkJCXwgUkVBTApAQCAtMTc5ODksNiArMTgxNDYsNyBA QCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IFNUT1JBR0UKIAkJCXwgU1RPUkVECiAJCQl8IFNU UklDVF9QCisJCQl8IFNUUklOR19QCiAJCQl8IFNUUklQX1AKIAkJCXwgU1VCU0NSSVBUSU9OCiAJ CQl8IFNVQlNUUklORwpAQCAtMTgwMjMsNiArMTgxODEsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6 CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09NTUlUVEVECisJCQl8IFVO Q09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5JUVVFCiAJCQl8IFVOS05PV04K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDY0YzU4MmMzNDQuLjc0NTVkODRiZmIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jv aWRzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1dGlscy94bWwu aCIKQEAgLTkwLDYgKzkxLDIyIEBAIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uUGFyc2VFeHBy KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblBhcnNlRXhwciAqZXhwcik7CiBzdGF0aWMgTm9kZSAq dHJhbnNmb3JtSnNvblNjYWxhckV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uU2NhbGFyRXhw ciAqZXhwcik7CiBzdGF0aWMgTm9kZSAqdHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VT dGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJCUpzb25TZXJpYWxpemVFeHByICpleHByKTsKK3N0YXRp YyBOb2RlICp0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVu Y0V4cHIgKnApOworc3RhdGljIEpzb25FeHByICp0cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKKwkJCQkJCQkJCQkgY29uc3QgY2hh ciAqY29uc3RydWN0TmFtZSk7CitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Kc29uUGFzc2luZ0FyZ3Mo UGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1lLAorCQkJCQkJCQkJ IEpzb25Gb3JtYXRUeXBlIGZvcm1hdCwgTGlzdCAqYXJncywKKwkJCQkJCQkJCSBMaXN0ICoqcGFz c2luZ192YWx1ZXMsIExpc3QgKipwYXNzaW5nX25hbWVzKTsKK3N0YXRpYyBOb2RlICpjb2VyY2VK c29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRXhwciAqanNleHByKTsK K3N0YXRpYyBPaWQJSnNvbkZ1bmNFeHByRGVmYXVsdFJldHVyblR5cGUoSnNvbkV4cHIgKmpzZXhw cik7CitzdGF0aWMgTm9kZSAqY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2Rl ICpleHByLAorCQkJCQkJCWNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZyk7CitzdGF0aWMg SnNvbkNvZXJjaW9uICptYWtlSnNvbkNvZXJjaW9uKGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVy bmluZyk7CitzdGF0aWMgTGlzdCAqSW5pdEpzb25JdGVtQ29lcmNpb25zKFBhcnNlU3RhdGUgKnBz dGF0ZSwgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAorCQkJCQkJCQkgICBPaWQgY29u dGV4dEl0ZW1UeXBlSWQpOworc3RhdGljIEpzb25CZWhhdmlvciAqdHJhbnNmb3JtSnNvbkJlaGF2 aW9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkJlaGF2aW9yICpiZWhhdmlvciwKKwkJCQkJCQkJ CQkgICBKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3IsCisJCQkJCQkJCQkJICAgSnNv blJldHVybmluZyAqcmV0dXJuaW5nKTsKIHN0YXRpYyBOb2RlICptYWtlX3Jvd19jb21wYXJpc29u X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLAogCQkJCQkJCQkJTGlzdCAqbGFy Z3MsIExpc3QgKnJhcmdzLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2Vfcm93X2Rp c3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLApAQCAtMzUzLDYgKzM3 MCwxMCBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4 cHIpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihwc3RhdGUsIChKc29u U2VyaWFsaXplRXhwciAqKSBleHByKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9Kc29uRnVuY0V4 cHI6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIocHN0YXRlLCAoSnNvbkZ1bmNF eHByICopIGV4cHIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCS8qIHNob3VsZCBub3Qg cmVhY2ggaGVyZSAqLwogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVk IiwgKGludCkgbm9kZVRhZyhleHByKSk7CkBAIC0zMjI5LDcgKzMyNTAsNyBAQCBtYWtlSnNvbkJ5 dGVhVG9UZXh0Q29udmVyc2lvbihOb2RlICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQsIGludCBs b2NhdGlvbikKIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1lLAogCQkJCQkgICBKc29uVmFsdWVF eHByICp2ZSwgSnNvbkZvcm1hdFR5cGUgZGVmYXVsdF9mb3JtYXQsCi0JCQkJCSAgIE9pZCB0YXJn ZXR0eXBlKQorCQkJCQkgICBPaWQgdGFyZ2V0dHlwZSwgYm9vbCBpc2FyZykKIHsKIAlOb2RlCSAg ICpleHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSB2ZS0+cmF3X2V4 cHIpOwogCU5vZGUJICAgKnJhd2V4cHI7CkBAIC0zMjYxLDYgKzMyODIsNDEgQEAgdHJhbnNmb3Jt SnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVjdE5h bWUsCiAJCWVsc2UKIAkJCWZvcm1hdCA9IHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlOwogCX0KKwll bHNlIGlmIChpc2FyZykKKwl7CisJCS8qCisJCSAqIFNwZWNpYWwgdHJlYXRtZW50IGZvciBQQVNT SU5HIGFyZ3VtZW50cy4KKwkJICoKKwkJICogUGFzcyB0eXBlcyBzdXBwb3J0ZWQgYnkgR2V0SnNv blBhdGhWYXIoKSAvCisJCSAqIEpzb25JdGVtRnJvbURhdHVtKCkgZGlyZWN0bHkgd2l0aG91dCBj b252ZXJ0aW5nIHRvIGpzb25bYl0uCisJCSAqLworCQlzd2l0Y2ggKGV4cHJ0eXBlKQorCQl7CisJ CQljYXNlIEJPT0xPSUQ6CisJCQljYXNlIE5VTUVSSUNPSUQ6CisJCQljYXNlIElOVDJPSUQ6CisJ CQljYXNlIElOVDRPSUQ6CisJCQljYXNlIElOVDhPSUQ6CisJCQljYXNlIEZMT0FUNE9JRDoKKwkJ CWNhc2UgRkxPQVQ4T0lEOgorCQkJY2FzZSBURVhUT0lEOgorCQkJY2FzZSBWQVJDSEFST0lEOgor CQkJY2FzZSBEQVRFT0lEOgorCQkJY2FzZSBUSU1FT0lEOgorCQkJY2FzZSBUSU1FVFpPSUQ6CisJ CQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJcmV0dXJu IGV4cHI7CisKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHR5cGNhdGVnb3J5ID09IFRZUENBVEVHT1JZ X1NUUklORykKKwkJCQkJcmV0dXJuIGV4cHI7CisJCQkJLyogZWxzZSBjb252ZXJ0IGFyZ3VtZW50 IHRvIGpzb25bYl0gdHlwZSAqLworCQkJCWJyZWFrOworCQl9CisKKwkJZm9ybWF0ID0gZGVmYXVs dF9mb3JtYXQ7CisJfQogCWVsc2UgaWYgKGV4cHJ0eXBlID09IEpTT05PSUQgfHwgZXhwcnR5cGUg PT0gSlNPTkJPSUQpCiAJCWZvcm1hdCA9IEpTX0ZPUk1BVF9ERUZBVUxUOyAvKiBkbyBub3QgZm9y bWF0IGpzb25bYl0gdHlwZXMgKi8KIAllbHNlCkBAIC0zMjcyLDcgKzMzMjgsMTIgQEAgdHJhbnNm b3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVj dE5hbWUsCiAJCU5vZGUJICAgKmNvZXJjZWQ7CiAJCWJvb2wJCW9ubHlfYWxsb3dfY2FzdCA9IE9p ZElzVmFsaWQodGFyZ2V0dHlwZSk7CiAKLQkJaWYgKCFvbmx5X2FsbG93X2Nhc3QgJiYKKwkJLyoK KwkJICogUEFTU0lORyBhcmdzIGFyZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkgYnkgR2V0SnNvblBh dGhWYXIoKSAvCisJCSAqIEpzb25JdGVtRnJvbURhdHVtKCkuCisJCSAqLworCQlpZiAoIWlzYXJn ICYmCisJCQkhb25seV9hbGxvd19jYXN0ICYmCiAJCQlleHBydHlwZSAhPSBCWVRFQU9JRCAmJiB0 eXBjYXRlZ29yeSAhPSBUWVBDQVRFR09SWV9TVFJJTkcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQllcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLApAQCAtMzQyNSw2ICszNDg2LDEx IEBAIHRyYW5zZm9ybUpzb25PdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBKc29uT3V0 cHV0ICpvdXRwdXQsCiAJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCQkJZXJybXNnKCJyZXR1cm5pbmcgU0VUT0YgdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiBT UUwvSlNPTiBmdW5jdGlvbnMiKSk7CiAKKwlpZiAoZ2V0X3R5cHR5cGUocmV0LT50eXBpZCkgPT0g VFlQVFlQRV9QU0VVRE8pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJyZXR1cm5pbmcgcHNldWRvLXR5cGVz IGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVuY3Rpb25zIikpOworCiAJaWYgKHJldC0+ Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfREVGQVVMVCkKIAkJLyogYXNzaWduIEpT T05CIGZvcm1hdCB3aGVuIHJldHVybmluZyBqc29uYiwgb3IgSlNPTiBmb3JtYXQgb3RoZXJ3aXNl ICovCiAJCXJldC0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9CkBAIC0zNjIxLDcgKzM2ODcsNyBAQCB0 cmFuc2Zvcm1Kc29uT2JqZWN0Q29uc3RydWN0b3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uT2Jq ZWN0Q29uc3RydWN0b3IgKmN0b3IpCiAJCQlOb2RlCSAgICp2YWwgPSB0cmFuc2Zvcm1Kc29uVmFs dWVFeHByKHBzdGF0ZSwgIkpTT05fT0JKRUNUKCkiLAogCQkJCQkJCQkJCQkJCSBrdi0+dmFsdWUs CiAJCQkJCQkJCQkJCQkJIEpTX0ZPUk1BVF9ERUZBVUxULAotCQkJCQkJCQkJCQkJCSBJbnZhbGlk T2lkKTsKKwkJCQkJCQkJCQkJCQkgSW52YWxpZE9pZCwgZmFsc2UpOwogCiAJCQlhcmdzID0gbGFw cGVuZChhcmdzLCBrZXkpOwogCQkJYXJncyA9IGxhcHBlbmQoYXJncywgdmFsKTsKQEAgLTM4MDgs NyArMzg3NCw3IEBAIHRyYW5zZm9ybUpzb25PYmplY3RBZ2coUGFyc2VTdGF0ZSAqcHN0YXRlLCBK c29uT2JqZWN0QWdnICphZ2cpCiAJdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUs ICJKU09OX09CSkVDVEFHRygpIiwKIAkJCQkJCQkJIGFnZy0+YXJnLT52YWx1ZSwKIAkJCQkJCQkJ IEpTX0ZPUk1BVF9ERUZBVUxULAotCQkJCQkJCQkgSW52YWxpZE9pZCk7CisJCQkJCQkJCSBJbnZh bGlkT2lkLCBmYWxzZSk7CiAJYXJncyA9IGxpc3RfbWFrZTIoa2V5LCB2YWwpOwogCiAJcmV0dXJu aW5nID0gdHJhbnNmb3JtSnNvbkNvbnN0cnVjdG9yT3V0cHV0KHBzdGF0ZSwgYWdnLT5jb25zdHJ1 Y3Rvci0+b3V0cHV0LApAQCAtMzg2NCw5ICszOTMwLDggQEAgdHJhbnNmb3JtSnNvbkFycmF5QWdn KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkFycmF5QWdnICphZ2cpCiAJT2lkCQkJYWdnZm5vaWQ7 CiAJT2lkCQkJYWdndHlwZTsKIAotCWFyZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRl LCAiSlNPTl9BUlJBWUFHRygpIiwKLQkJCQkJCQkJIGFnZy0+YXJnLAotCQkJCQkJCQkgSlNfRk9S TUFUX0RFRkFVTFQsIEludmFsaWRPaWQpOworCWFyZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIo cHN0YXRlLCAiSlNPTl9BUlJBWUFHRygpIiwgYWdnLT5hcmcsCisJCQkJCQkJCSBKU19GT1JNQVRf REVGQVVMVCwgSW52YWxpZE9pZCwgZmFsc2UpOwogCiAJcmV0dXJuaW5nID0gdHJhbnNmb3JtSnNv bkNvbnN0cnVjdG9yT3V0cHV0KHBzdGF0ZSwgYWdnLT5jb25zdHJ1Y3Rvci0+b3V0cHV0LAogCQkJ CQkJCQkJCQkgICBsaXN0X21ha2UxKGFyZykpOwpAQCAtMzkxMyw5ICszOTc4LDggQEAgdHJhbnNm b3JtSnNvbkFycmF5Q29uc3RydWN0b3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQXJyYXlDb25z dHJ1Y3RvciAqY3RvcikKIAkJewogCQkJSnNvblZhbHVlRXhwciAqanN2YWwgPSBjYXN0Tm9kZShK c29uVmFsdWVFeHByLCBsZmlyc3QobGMpKTsKIAkJCU5vZGUJICAgKnZhbCA9IHRyYW5zZm9ybUpz b25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTl9BUlJBWSgpIiwKLQkJCQkJCQkJCQkJCQkganN2YWws Ci0JCQkJCQkJCQkJCQkJIEpTX0ZPUk1BVF9ERUZBVUxULAotCQkJCQkJCQkJCQkJCSBJbnZhbGlk T2lkKTsKKwkJCQkJCQkJCQkJCQkganN2YWwsIEpTX0ZPUk1BVF9ERUZBVUxULAorCQkJCQkJCQkJ CQkJCSBJbnZhbGlkT2lkLCBmYWxzZSk7CiAKIAkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIHZhbCk7 CiAJCX0KQEAgLTQwNzQsNyArNDEzOCw3IEBAIHRyYW5zZm9ybUpzb25QYXJzZUV4cHIoUGFyc2VT dGF0ZSAqcHN0YXRlLCBKc29uUGFyc2VFeHByICpqc2V4cHIpCiAJCSAqIGZ1bmN0aW9uLWxpa2Ug Q0FTVHMuCiAJCSAqLwogCQlhcmcgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgIkpT T04oKSIsIGpzZXhwci0+ZXhwciwKLQkJCQkJCQkJCSBKU19GT1JNQVRfSlNPTiwgcmV0dXJuaW5n LT50eXBpZCk7CisJCQkJCQkJCQkgSlNfRk9STUFUX0pTT04sIHJldHVybmluZy0+dHlwaWQsIGZh bHNlKTsKIAl9CiAKIAlyZXR1cm4gbWFrZUpzb25Db25zdHJ1Y3RvckV4cHIocHN0YXRlLCBKU0NU T1JfSlNPTl9QQVJTRSwgbGlzdF9tYWtlMShhcmcpLCBOVUxMLApAQCAtNDExOSw3ICs0MTgzLDcg QEAgdHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uU2Vy aWFsaXplRXhwciAqZXhwcikKIAlOb2RlCSAgICphcmcgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHBy KHBzdGF0ZSwgIkpTT05fU0VSSUFMSVpFKCkiLAogCQkJCQkJCQkJCQkgZXhwci0+ZXhwciwKIAkJ CQkJCQkJCQkJIEpTX0ZPUk1BVF9KU09OLAotCQkJCQkJCQkJCQkgSW52YWxpZE9pZCk7CisJCQkJ CQkJCQkJCSBJbnZhbGlkT2lkLCBmYWxzZSk7CiAKIAlpZiAoZXhwci0+b3V0cHV0KQogCXsKQEAg LTQxNTMsMyArNDIxNyw1MzUgQEAgdHJhbnNmb3JtSnNvblNlcmlhbGl6ZUV4cHIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBKc29uU2VyaWFsaXplRXhwciAqZXhwcikKIAlyZXR1cm4gbWFrZUpzb25Db25z dHJ1Y3RvckV4cHIocHN0YXRlLCBKU0NUT1JfSlNPTl9TRVJJQUxJWkUsIGxpc3RfbWFrZTEoYXJn KSwKIAkJCQkJCQkJICAgTlVMTCwgcmV0dXJuaW5nLCBmYWxzZSwgZmFsc2UsIGV4cHItPmxvY2F0 aW9uKTsKIH0KKworLyoKKyAqIFRyYW5zZm9ybSBKU09OX1ZBTFVFLCBKU09OX1FVRVJZLCBKU09O X0VYSVNUUyBmdW5jdGlvbnMgaW50byBhIEpzb25FeHByIG5vZGUuCisgKi8KK3N0YXRpYyBOb2Rl ICoKK3RyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhw ciAqZnVuYykKK3sKKwlKc29uRXhwciAgICpqc2V4cHIgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZ1 bmNfbmFtZSA9IE5VTEw7CisKKwlzd2l0Y2ggKGZ1bmMtPm9wKQorCXsKKwkJY2FzZSBKU09OX0VY SVNUU19PUDoKKwkJCWZ1bmNfbmFtZSA9ICJKU09OX0VYSVNUUyI7CisJCQlicmVhazsKKwkJY2Fz ZSBKU09OX1FVRVJZX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fUVVFUlkiOworCQkJYnJlYWs7 CisJCWNhc2UgSlNPTl9WQUxVRV9PUDoKKwkJCWZ1bmNfbmFtZSA9ICJKU09OX1ZBTFVFIjsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSnNvbkZ1bmNFeHBy IG9wIik7CisJCQlicmVhazsKKwl9CisKKwkvKiBPbmx5IGFsbG93IEZPUk1BVCBzcGVjaWZpY2F0 aW9uIGZvciBKU09OX1FVRVJZKCkuICovCisJaWYgKGZ1bmMtPm91dHB1dCAmJiBmdW5jLT5vcCAh PSBKU09OX1FVRVJZX09QKQorCXsKKwkJSnNvbkZvcm1hdCAqZm9ybWF0ID0gZnVuYy0+b3V0cHV0 LT5yZXR1cm5pbmctPmZvcm1hdDsKKworCQlpZiAoZm9ybWF0LT5mb3JtYXRfdHlwZSAhPSBKU19G T1JNQVRfREVGQVVMVCB8fAorCQkJZm9ybWF0LT5lbmNvZGluZyAhPSBKU19FTkNfREVGQVVMVCkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAor CQkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5IEZPUk1BVCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9m ICVzKCkiLAorCQkJCQkJICAgZnVuY19uYW1lKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwgZm9ybWF0LT5sb2NhdGlvbikpOworCX0KKworCWlmIChmdW5jLT5vcCA9PSBKU09OX1FV RVJZX09QICYmCisJCWZ1bmMtPndyYXBwZXIgIT0gSlNXX05PTkUgJiYgZnVuYy0+cXVvdGVzICE9 IEpTX1FVT1RFU19VTlNQRUMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJZXJybXNnKCJTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVz dCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQiKSwKKwkJCQlwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCBmdW5jLT5sb2NhdGlvbikpOworCisKKwlqc2V4cHIgPSB0 cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihwc3RhdGUsIGZ1bmMsIGZ1bmNfbmFtZSk7CisKKwlzd2l0 Y2ggKGZ1bmMtPm9wKQorCXsKKwkJY2FzZSBKU09OX0VYSVNUU19PUDoKKwkJCWlmICghT2lkSXNW YWxpZChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpKQorCQkJeworCQkJCWpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCA9IEJPT0xPSUQ7CisJCQkJanNleHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0x OworCQkJfQorCisJCQlqc2V4cHItPm9uX2Vycm9yID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBz dGF0ZSwgZnVuYy0+b25fZXJyb3IsCisJCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfRkFMU0Us CisJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug SlNPTl9RVUVSWV9PUDoKKwkJCWpzZXhwci0+d3JhcHBlciA9IGZ1bmMtPndyYXBwZXI7CisJCQlq c2V4cHItPm9taXRfcXVvdGVzID0gKGZ1bmMtPnF1b3RlcyA9PSBKU19RVU9URVNfT01JVCk7CisK KwkJCWlmICghT2lkSXNWYWxpZChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpKQorCQkJeworCQkJ CUpzb25SZXR1cm5pbmcgKnJldCA9IGpzZXhwci0+cmV0dXJuaW5nOworCisJCQkJcmV0LT50eXBp ZCA9IEpzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKGpzZXhwcik7CisJCQkJcmV0LT50eXBt b2QgPSAtMTsKKwkJCX0KKwkJCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1 bmNFeHByT3V0cHV0KHBzdGF0ZSwganNleHByKTsKKworCQkJaWYgKGZ1bmMtPm9uX2VtcHR5KQor CQkJCWpzZXhwci0+b25fZW1wdHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLAorCQkJ CQkJCQkJCQkJCQkgZnVuYy0+b25fZW1wdHksCisJCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9S X05VTEwsCisJCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlqc2V4cHItPm9u X2Vycm9yID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJyb3IsCisJ CQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkganNleHByLT5y ZXR1cm5pbmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJaWYgKCFP aWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCisJCQl7CisJCQkJLyogTWFrZSBK U09OX1ZBTFVFIHJldHVybiB0ZXh0IGJ5IGRlZmF1bHQgKi8KKwkJCQlqc2V4cHItPnJldHVybmlu Zy0+dHlwaWQgPSBURVhUT0lEOworCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsK KwkJCX0KKwkJCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0 cHV0KHBzdGF0ZSwganNleHByKTsKKworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgZXhwcmVzc2lv bnMgdG8gY29lcmNlIHRoZSBzY2FsYXIgdmFsdWUgcmV0dXJuZWQKKwkJCSAqIGJ5IEpzb25QYXRo VmFsdWUoKSB0byB0aGUgInJldHVybmluZyIgdHlwZS4KKwkJCSAqLworCQkJaWYgKGpzZXhwci0+ cmVzdWx0X2NvZXJjaW9uKQorCQkJCWpzZXhwci0+aXRlbV9jb2VyY2lvbnMgPQorCQkJCQlJbml0 SnNvbkl0ZW1Db2VyY2lvbnMocHN0YXRlLCBqc2V4cHItPnJldHVybmluZywKKwkJCQkJCQkJCQkg IGV4cHJUeXBlKGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpKTsKKworCQkJaWYgKGZ1bmMtPm9uX2Vt cHR5KQorCQkJCWpzZXhwci0+b25fZW1wdHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRl LAorCQkJCQkJCQkJCQkJCQkgZnVuYy0+b25fZW1wdHksCisJCQkJCQkJCQkJCQkJCSBKU09OX0JF SEFWSU9SX05VTEwsCisJCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlqc2V4 cHItPm9uX2Vycm9yID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJy b3IsCisJCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkganNl eHByLT5yZXR1cm5pbmcpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJpbnZhbGlkIEpzb25GdW5jRXhwciBvcCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChO b2RlICopIGpzZXhwcjsKK30KKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBKU09OX1ZBTFVFLCBK U09OX1FVRVJZLCBKU09OX0VYSVNUUyB0cmFuc2Zvcm1hdGlvbgorICogaW50byBhIEpzb25FeHBy IG5vZGUuCisgKi8KK3N0YXRpYyBKc29uRXhwciAqCit0cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKKwkJCQkJCWNvbnN0IGNoYXIg KmNvbnN0cnVjdE5hbWUpCit7CisJSnNvbkV4cHIgICAqanNleHByID0gbWFrZU5vZGUoSnNvbkV4 cHIpOworCU5vZGUJICAgKnBhdGhzcGVjOworCisJanNleHByLT5sb2NhdGlvbiA9IGZ1bmMtPmxv Y2F0aW9uOworCWpzZXhwci0+b3AgPSBmdW5jLT5vcDsKKwlqc2V4cHItPmZvcm1hdHRlZF9leHBy ID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsIGNvbnN0cnVjdE5hbWUsCisJCQkJCQkJ CQkJCQkJZnVuYy0+Y29udGV4dF9pdGVtLAorCQkJCQkJCQkJCQkJCUpTX0ZPUk1BVF9KU09OLAor CQkJCQkJCQkJCQkJCUludmFsaWRPaWQsIGZhbHNlKTsKKworCWlmIChleHByVHlwZShqc2V4cHIt PmZvcm1hdHRlZF9leHByKSAhPSBKU09OQk9JRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIiVzKCkgaXMg bm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZSIsCisJCQkJCSAgIGNvbnN0cnVj dE5hbWUpLAorCQkJCWVycmhpbnQoIlRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYiIp LAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihqc2V4cHItPmZv cm1hdHRlZF9leHByKSkpOworCisJanNleHByLT5mb3JtYXQgPSBmdW5jLT5jb250ZXh0X2l0ZW0t PmZvcm1hdDsKKworCS8qIEJvdGggc2V0IGluIHRoZSBjYWxsZXIuICovCisJanNleHByLT5yZXN1 bHRfY29lcmNpb24gPSBOVUxMOworCWpzZXhwci0+b21pdF9xdW90ZXMgPSBmYWxzZTsKKworCXBh dGhzcGVjID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCBmdW5jLT5wYXRoc3BlYyk7CisK Kwlqc2V4cHItPnBhdGhfc3BlYyA9CisJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIHBh dGhzcGVjLCBleHByVHlwZShwYXRoc3BlYyksCisJCQkJCQkJICBKU09OUEFUSE9JRCwgLTEsCisJ CQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwgQ09FUkNFX0lNUExJQ0lUX0NBU1QsCisJCQkJCQkJ ICBleHByTG9jYXRpb24ocGF0aHNwZWMpKTsKKwlpZiAoIWpzZXhwci0+cGF0aF9zcGVjKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAor CQkJCSBlcnJtc2coIkpTT04gcGF0aCBleHByZXNzaW9uIG11c3QgYmUgb2YgdHlwZSAlcywgbm90 IG9mIHR5cGUgJXMiLAorCQkJCQkJImpzb25wYXRoIiwgZm9ybWF0X3R5cGVfYmUoZXhwclR5cGUo cGF0aHNwZWMpKSksCisJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlv bihwYXRoc3BlYykpKSk7CisKKwkvKgorCSAqIFRyYW5zZm9ybSBhbmQgY29lcmNlIHRvIGpzb25b Yl0gcGFzc2luZyBhcmd1bWVudHMsIHdob3NlIGZvcm1hdCBpcworCSAqIGRldGVybWluZWQgYnkg Y29udGV4dCBpdGVtIHR5cGUuCisJICovCisJdHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKHBzdGF0 ZSwgY29uc3RydWN0TmFtZSwKKwkJCQkJCQkgZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhw cikgPT0gSlNPTkJPSUQgPworCQkJCQkJCSBKU19GT1JNQVRfSlNPTkIgOiBKU19GT1JNQVRfSlNP TiwKKwkJCQkJCQkgZnVuYy0+cGFzc2luZywKKwkJCQkJCQkgJmpzZXhwci0+cGFzc2luZ192YWx1 ZXMsCisJCQkJCQkJICZqc2V4cHItPnBhc3NpbmdfbmFtZXMpOworCisJanNleHByLT5yZXR1cm5p bmcgPSB0cmFuc2Zvcm1Kc29uT3V0cHV0KHBzdGF0ZSwgZnVuYy0+b3V0cHV0LCBmYWxzZSk7CisK KwkvKiBKU09OX1FVRVJZIHN1cHBvcnRzIHNwZWNpZnlpbmcgRk9STUFUIGV4cGxpY2l0bHkuICov CisJaWYgKGZ1bmMtPm9wICE9IEpTT05fUVVFUllfT1ApCisJeworCQlqc2V4cHItPnJldHVybmlu Zy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxUOworCQlqc2V4cHItPnJl dHVybmluZy0+Zm9ybWF0LT5lbmNvZGluZyA9IEpTX0VOQ19ERUZBVUxUOworCX0KKworCXJldHVy biBqc2V4cHI7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gYSBKU09OIFBBU1NJTkcgY2xhdXNlLgor ICovCitzdGF0aWMgdm9pZAordHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKFBhcnNlU3RhdGUgKnBz dGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwKKwkJCQkJCSBKc29uRm9ybWF0VHlwZSBm b3JtYXQsIExpc3QgKmFyZ3MsCisJCQkJCQkgTGlzdCAqKnBhc3NpbmdfdmFsdWVzLCBMaXN0ICoq cGFzc2luZ19uYW1lcykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCSpwYXNzaW5nX3ZhbHVlcyA9 IE5JTDsKKwkqcGFzc2luZ19uYW1lcyA9IE5JTDsKKworCWZvcmVhY2gobGMsIGFyZ3MpCisJewor CQlKc29uQXJndW1lbnQgKmFyZyA9IGNhc3ROb2RlKEpzb25Bcmd1bWVudCwgbGZpcnN0KGxjKSk7 CisJCU5vZGUJICAgKmV4cHIgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgY29uc3Ry dWN0TmFtZSwKKwkJCQkJCQkJCQkJCSAgYXJnLT52YWwsIGZvcm1hdCwKKwkJCQkJCQkJCQkJCSAg SW52YWxpZE9pZCwgdHJ1ZSk7CisKKwkJKnBhc3NpbmdfdmFsdWVzID0gbGFwcGVuZCgqcGFzc2lu Z192YWx1ZXMsIGV4cHIpOworCQkqcGFzc2luZ19uYW1lcyA9IGxhcHBlbmQoKnBhc3NpbmdfbmFt ZXMsIG1ha2VTdHJpbmcoYXJnLT5uYW1lKSk7CisJfQorfQorCisvKgorICogQ3JlYXRlIGFuIGV4 cHJlc3Npb24gdG8gY29lcmNlIHRoZSBvdXRwdXQgb2YgSlNPTl9WQUxVRSgpIC8gSlNPTl9RVUVS WSgpCisgKiB0byB0aGUgb3V0cHV0IHR5cGUsIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIE5vZGUg KgorY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIg KmpzZXhwcikKK3sKKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcgPSBqc2V4cHItPnJldHVybmlu ZzsKKwlOb2RlCSAgICpjb250ZXh0X2l0ZW0gPSBqc2V4cHItPmZvcm1hdHRlZF9leHByOworCWlu dAkJCWRlZmF1bHRfdHlwbW9kOworCU9pZAkJCWRlZmF1bHRfdHlwaWQ7CisKKwlBc3NlcnQocmV0 dXJuaW5nKTsKKworCS8qCisJICogRm9yIEpTT05fUVVFUlksIHVzZSBhIEpzb25Db2VyY2lvbiBu b2RlIHRvIGltcGxlbWVudCB0aGUgc3BlY2lmaWVkCisJICogUVVPVEVTIG9yIFdSQVBQRVIgYmVo YXZpb3IuCisJICovCisJaWYgKGpzZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCAmJgorCQkoanNl eHByLT5vbWl0X3F1b3RlcyB8fCBqc2V4cHItPndyYXBwZXIgIT0gSlNXX05PTkUpKQorCXsKKwkJ SnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IG1ha2VKc29uQ29lcmNpb24ocmV0dXJuaW5nKTsKKwor CQljb2VyY2lvbi0+dmlhX2lvID0gY29lcmNpb24tPnZpYV9pbyB8fCBqc2V4cHItPm9taXRfcXVv dGVzOworCQljb2VyY2lvbi0+dmlhX3BvcHVsYXRlID0KKwkJCWNvZXJjaW9uLT52aWFfcG9wdWxh dGUgfHwganNleHByLT53cmFwcGVyICE9IEpTV19OT05FOworCisJCXJldHVybiAoTm9kZSAqKSBj b2VyY2lvbjsKKwl9CisKKwlkZWZhdWx0X3R5cGlkID0gSnNvbkZ1bmNFeHByRGVmYXVsdFJldHVy blR5cGUoanNleHByKTsKKwlkZWZhdWx0X3R5cG1vZCA9IC0xOworCWlmIChyZXR1cm5pbmctPnR5 cGlkICE9IGRlZmF1bHRfdHlwaWQgfHwKKwkJcmV0dXJuaW5nLT50eXBtb2QgIT0gZGVmYXVsdF90 eXBtb2QpCisJeworCQkvKgorCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBwbGFj ZWhvbGRlciB0byBwYXNzIHRoZSByZXN1bHQgb2YKKwkJICogZXZhbHVhdGluZyB0aGUgSlNPTl9W QUxVRS9RVUVSWSBqc29ucGF0aCBleHByZXNzaW9uIGFzIGlucHV0IHRvIHRoZQorCQkgKiBjb2Vy Y2lvbiBleHByZXNzaW9uLgorCQkgKi8KKwkJQ2FzZVRlc3RFeHByICpwbGFjZWhvbGRlciA9IG1h a2VOb2RlKENhc2VUZXN0RXhwcik7CisKKwkJcGxhY2Vob2xkZXItPnR5cGVJZCA9IGV4cHJUeXBl KGNvbnRleHRfaXRlbSk7CisJCXBsYWNlaG9sZGVyLT50eXBlTW9kID0gZXhwclR5cG1vZChjb250 ZXh0X2l0ZW0pOworCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihjb250 ZXh0X2l0ZW0pOworCisJCUFzc2VydChwbGFjZWhvbGRlci0+dHlwZUlkID09IGRlZmF1bHRfdHlw aWQpOworCQlBc3NlcnQocGxhY2Vob2xkZXItPnR5cGVNb2QgPT0gZGVmYXVsdF90eXBtb2QpOwor CisJCXJldHVybiBjb2VyY2VKc29uRXhwcihwc3RhdGUsIChOb2RlICopIHBsYWNlaG9sZGVyLCBy ZXR1cm5pbmcpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm5zIHRoZSBkZWZh dWx0IHR5cGUgZm9yIGEgZ2l2ZW4gSnNvbkV4cHIgZm9yIGEgZ2l2ZW4gSnNvbkZvcm1hdC4gKi8K K3N0YXRpYyBPaWQKK0pzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKEpzb25FeHByICpqc2V4 cHIpCit7CisJSnNvbkZvcm1hdCAqZm9ybWF0ID0ganNleHByLT5mb3JtYXQ7CisJTm9kZQkgICAq Y29udGV4dF9pdGVtID0ganNleHByLT5mb3JtYXR0ZWRfZXhwcjsKKworCUFzc2VydChmb3JtYXQp OworCWlmIChmb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9KU09OQikKKwkJcmV0dXJu IEpTT05CT0lEOworCWVsc2UgaWYgKGZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0RF RkFVTFQgJiYKKwkJCSBleHByVHlwZShjb250ZXh0X2l0ZW0pID09IEpTT05CT0lEKQorCQlyZXR1 cm4gSlNPTkJPSUQ7CisKKwlyZXR1cm4gSlNPTk9JRDsKK30KKworLyoKKyAqIFJldHVybnMgYSBK c29uQ29lcmNpb24gbm9kZSB0byBjb2VyY2UgYSBqc29uYi12YWx1ZWQgZXhwcmVzc2lvbiB0byB0 aGUKKyAqIHRhcmdldCB0eXBlIGdpdmVuIGJ5ICdyZXR1cm5pbmcnIHVzaW5nIGVpdGhlciBqc29u X3BvcHVsYXRlX3R5cGUoKSBvcgorICogYnkgdXNpbmcgdGhlIHRhcmdldCB0eXBlJ3MgaW5wdXQg ZnVuY3Rpb24uCisgKgorICogTkI6IGlkZWFsbHkgdGhpcyBzaG91bGQgYmUgaW4gbWFrZWZ1bmNz LmMsIGJ1dCBpdCdzIG5vdCBnaXZlbiB0aGF0IGl0CisgKiBjb250YWlucyBzb21lIG5vbi10cml2 aWFsIGxvZ2ljLgorICovCitzdGF0aWMgSnNvbkNvZXJjaW9uICoKK21ha2VKc29uQ29lcmNpb24o Y29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKQoreworCUpzb25Db2VyY2lvbiAqY29lcmNp b24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOworCWNoYXIJCXR5cHR5cGU7CisKKwljb2VyY2lv bi0+dGFyZ2V0dHlwZSA9IHJldHVybmluZy0+dHlwaWQ7CisJY29lcmNpb24tPnRhcmdldHR5cG1v ZCA9IHJldHVybmluZy0+dHlwbW9kOworCisJdHlwdHlwZSA9IGdldF90eXB0eXBlKHJldHVybmlu Zy0+dHlwaWQpOworCWlmIChyZXR1cm5pbmctPnR5cGlkID09IFJFQ09SRE9JRCB8fAorCQl0eXB0 eXBlID09IFRZUFRZUEVfQ09NUE9TSVRFIHx8CisJCXR5cHR5cGUgPT0gVFlQVFlQRV9ET01BSU4g fHwKKwkJdHlwZV9pc19hcnJheShyZXR1cm5pbmctPnR5cGlkKSkKKwkJY29lcmNpb24tPnZpYV9w b3B1bGF0ZSA9IHRydWU7CisJZWxzZQorCQljb2VyY2lvbi0+dmlhX2lvID0gdHJ1ZTsKKworCXJl dHVybiBjb2VyY2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBhIEpzb25Db2VyY2lvbiBub2RlIHRv OgorICoKKyAqIAktIGNvZXJjZSBleHByZXNzaW9uIHRvIHRoZSBvdXRwdXQgcmV0dXJuaW5nIHR5 cGUsIG9yCisgKiAJLSBjb2VyY2UgdXNpbmcganNvbl9wb3B1bGF0ZV90eXBlKCkgaWYgcmV0dXJu aW5nIHR5cGUgcmVxdWlyZXMgaXQsIG9yCisgKiAJLSBjb2VyY2UgdmlhIEkvTy4KKyAqLworc3Rh dGljIE5vZGUgKgorY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHBy LCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCit7CisJTm9kZQkgICAqY29lcmNlZF9l eHByOworCisJY29lcmNlZF9leHByID0gY29lcmNlSnNvbkZ1bmNFeHByKHBzdGF0ZSwgZXhwciwg cmV0dXJuaW5nLCBmYWxzZSk7CisJaWYgKGNvZXJjZWRfZXhwcikKKwl7CisJCWlmIChjb2VyY2Vk X2V4cHIgPT0gZXhwcikKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gY29lcmNlZF9leHByOwor CX0KKworCXJldHVybiAoTm9kZSAqKSBtYWtlSnNvbkNvZXJjaW9uKHJldHVybmluZyk7Cit9CisK Ky8qCisgKiBJbml0aWFsaXplIEpzb25Db2VyY2lvbiBub2RlcyBmb3IgY29lcmNpbmcgYSBnaXZl biBKU09OIGl0ZW0gdmFsdWUgcHJvZHVjZWQKKyAqIGJ5IEpTT05fVkFMVUUgdG8gdGhlIHRhcmdl dCAicmV0dXJuaW5nIiB0eXBlOyBhbHNvIHNlZQorICogRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJj aW9uKCkuCisgKi8KK3N0YXRpYyBMaXN0ICoKK0luaXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0 YXRlICpwc3RhdGUsIGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKKwkJCQkJICBPaWQg Y29udGV4dEl0ZW1UeXBlSWQpCit7CisJTGlzdAkgICAqaXRlbV9jb2VyY2lvbnMgPSBOSUw7CisJ aW50CQkJaTsKKwlPaWQJCQl0eXBlb2lkOworCXN0cnVjdAorCXsKKwkJSnNvbkl0ZW1UeXBlIGl0 ZW1fdHlwZTsKKwkJT2lkCQl0eXBlb2lkOworCX0JCWl0ZW1fdHlwZXNbXSA9CisJeworCQl7SnNv bkl0ZW1UeXBlTnVsbCwgVU5LTk9XTk9JRH0sCisJCXtKc29uSXRlbVR5cGVTdHJpbmcsIFRFWFRP SUR9LAorCQl7SnNvbkl0ZW1UeXBlTnVtZXJpYywgTlVNRVJJQ09JRH0sCisJCXtKc29uSXRlbVR5 cGVCb29sZWFuLCBCT09MT0lEfSwKKwkJe0pzb25JdGVtVHlwZURhdGUsIERBVEVPSUR9LAorCQl7 SnNvbkl0ZW1UeXBlVGltZSwgVElNRU9JRH0sCisJCXtKc29uSXRlbVR5cGVUaW1ldHosIFRJTUVU Wk9JRH0sCisJCXtKc29uSXRlbVR5cGVUaW1lc3RhbXAsIFRJTUVTVEFNUE9JRH0sCisJCXtKc29u SXRlbVR5cGVUaW1lc3RhbXB0eiwgVElNRVNUQU1QVFpPSUR9LAorCQl7SnNvbkl0ZW1UeXBlQ29t cG9zaXRlLCBjb250ZXh0SXRlbVR5cGVJZH0sCisJCXtKc29uSXRlbVR5cGVJbnZhbGlkLCBJbnZh bGlkT2lkfQorCX07CisKKwlmb3IgKGkgPSAwOyBPaWRJc1ZhbGlkKHR5cGVvaWQgPSBpdGVtX3R5 cGVzW2ldLnR5cGVvaWQpOyBpKyspCisJeworCQlOb2RlCSAgICpleHByOworCQlKc29uSXRlbUNv ZXJjaW9uICppdGVtX2NvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkl0ZW1Db2VyY2lvbik7CisKKwkJ aWYgKHR5cGVvaWQgPT0gVU5LTk9XTk9JRCkKKwkJeworCQkJZXhwciA9IChOb2RlICopIG1ha2VO dWxsQ29uc3QoVU5LTk9XTk9JRCwgLTEsIEludmFsaWRPaWQpOworCQl9CisJCWVsc2UKKwkJewor CQkJQ2FzZVRlc3RFeHByICpwbGFjZWhvbGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisK KwkJCS8qCisJCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBwbGFjZWhvbGRlciB0 byBwYXNzIHRoZSByZXN1bHQgb2YKKwkJCSAqIEpTT05fVkFMVUUganNvbnBhdGggZXhwcmVzc2lv biB0byB0aGUgY29lcmNpb24gZnVuY3Rpb24uCisJCQkgKi8KKwkJCXBsYWNlaG9sZGVyLT50eXBl SWQgPSBpdGVtX3R5cGVzW2ldLnR5cGVvaWQ7CisJCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IC0x OworCQkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisKKwkJCWV4cHIgPSAo Tm9kZSAqKSBwbGFjZWhvbGRlcjsKKwkJfQorCisJCWl0ZW1fY29lcmNpb24tPml0ZW1fdHlwZSA9 IGl0ZW1fdHlwZXNbaV0uaXRlbV90eXBlOworCQlpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbiA9IGNv ZXJjZUpzb25FeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nKTsKKwkJaXRlbV9jb2VyY2lvbnMg PSBsYXBwZW5kKGl0ZW1fY29lcmNpb25zLCBpdGVtX2NvZXJjaW9uKTsKKwl9CisKKwlyZXR1cm4g aXRlbV9jb2VyY2lvbnM7Cit9CisKKy8qCisgKiBSZXR1cm5zIGNvbnN0YW50IHZhbHVlcyB0byBi ZSByZXR1cm5lZCB0byB0aGUgdXNlciBmb3IgdmFyaW91cworICogbm9uLUVSUk9SIE9OIEVSUk9S L0VNUFRZIGJlaGF2aW9ycy4KKyAqCisgKiBOb3RlIHRoYXQgSlNPTl9CRUhBVklPUl9ERUZBVUxU IGV4cHJlc3Npb24gaXMgaGFuZGxlZCBieSB0aGUKKyAqIGNhbGxlciBzZXBhcmF0ZWx5LgorICov CitzdGF0aWMgTm9kZSAqCitHZXRKc29uQmVoYXZpb3JDb25zdEV4cHIoSnNvbkJlaGF2aW9yVHlw ZSBidHlwZSwgaW50IGxvY2F0aW9uKQoreworCURhdHVtCXZhbCA9IChEYXR1bSkgMDsKKwlPaWQJ CXR5cGlkID0gSlNPTkJPSUQ7CisJaW50CQlsZW4gPSAtMTsKKwlib29sCWlzYnl2YWwgPSBmYWxz ZTsKKwlib29sCWlzbnVsbCA9IGZhbHNlOworCUNvbnN0ICAqY29uOworCisJc3dpdGNoIChidHlw ZSkKKwl7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWToKKwkJCXZhbCA9IERpcmVj dEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIENTdHJpbmdHZXREYXR1bSgiW10iKSk7CisJCQlicmVh azsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOgorCQkJdmFsID0gRGlyZWN0 RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgQ1N0cmluZ0dldERhdHVtKCJ7fSIpKTsKKwkJCWJyZWFr OworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9UUlVFOgorCQkJdmFsID0gQm9vbEdldERhdHVtKHRy dWUpOworCQkJdHlwaWQgPSBCT09MT0lEOworCQkJbGVuID0gc2l6ZW9mKGJvb2wpOworCQkJaXNi eXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfRkFMU0U6CisJ CQl2YWwgPSBCb29sR2V0RGF0dW0oZmFsc2UpOworCQkJdHlwaWQgPSBCT09MT0lEOworCQkJbGVu ID0gc2l6ZW9mKGJvb2wpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNl IEpTT05fQkVIQVZJT1JfTlVMTDoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX1VOS05PV046CisJCWNh c2UgSlNPTl9CRUhBVklPUl9FTVBUWToKKwkJCXZhbCA9IChEYXR1bSkgMDsKKwkJCWlzbnVsbCA9 IHRydWU7CisJCQl0eXBpZCA9IElOVDRPSUQ7CisJCQlsZW4gPSBzaXplb2YoaW50MzIpOworCQkJ aXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfREVGQVVM VDoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VSUk9SOgorCQkJLyogQWx3YXlzIGhhbmRsZWQgaW4g dGhlIGNhbGxlci4gKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIsIGJ0 eXBlKTsKKwkJCWJyZWFrOworCX0KKworCWNvbiA9IG1ha2VDb25zdCh0eXBpZCwgLTEsIEludmFs aWRPaWQsIGxlbiwgdmFsLCBpc251bGwsIGlzYnl2YWwpOworCWNvbi0+bG9jYXRpb24gPSBsb2Nh dGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBjb247Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gYSBK U09OIEJFSEFWSU9SIGNsYXVzZS4KKyAqLworc3RhdGljIEpzb25CZWhhdmlvciAqCit0cmFuc2Zv cm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9y LAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvciwKKwkJCQkJICBKc29u UmV0dXJuaW5nICpyZXR1cm5pbmcpCit7CisJSnNvbkJlaGF2aW9yVHlwZSBiZWhhdmlvcl90eXBl ID0gZGVmYXVsdF9iZWhhdmlvcjsKKwlOb2RlCSAgICpleHByID0gTlVMTDsKKwlKc29uQ29lcmNp b24gKmNvZXJjaW9uID0gTlVMTDsKKwlpbnQJCQlsb2NhdGlvbiA9IC0xOworCisJaWYgKGJlaGF2 aW9yKQorCXsKKwkJYmVoYXZpb3JfdHlwZSA9IGJlaGF2aW9yLT5idHlwZTsKKwkJbG9jYXRpb24g PSBiZWhhdmlvci0+bG9jYXRpb247CisJCWlmIChiZWhhdmlvcl90eXBlID09IEpTT05fQkVIQVZJ T1JfREVGQVVMVCkKKwkJCWV4cHIgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIGJlaGF2 aW9yLT5leHByKTsKKwl9CisKKwlpZiAoZXhwciA9PSBOVUxMICYmIGJlaGF2aW9yX3R5cGUgIT0g SlNPTl9CRUhBVklPUl9FUlJPUikKKwkJZXhwciA9IAlHZXRKc29uQmVoYXZpb3JDb25zdEV4cHIo YmVoYXZpb3JfdHlwZSwgbG9jYXRpb24pOworCisJaWYgKGV4cHIpCisJeworCQlOb2RlICAgKmNv ZXJjZWRfZXhwciA9IGV4cHI7CisJCWJvb2wJaXNudWxsID0gKElzQShleHByLCBDb25zdCkgJiYg KChDb25zdCAqKSBleHByKS0+Y29uc3Rpc251bGwpOworCisJCS8qCisJCSAqIENvZXJjZSBOVUxM cyBhbmQgImRlZmF1bHQiICh0aGF0IGlzLCBub3Qgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyKQorCQkg KiBqc29uYi12YWx1ZWQgZXhwcmVzc2lvbnMgdXNpbmcgYSBKc29uQ29lcmNpb24gbm9kZS4KKwkJ ICoKKwkJICogRm9yIG90aGVyICh1c2VyLXNwZWNpZmllZCkgbm9uLU5VTEwgdmFsdWVzLCB0cnkg dG8gZmluZCBhIGNhc3QKKwkJICogYW5kIGVycm9yIG91dCBpZiBvbmUgaXMgbm90IGZvdW5kLgor CQkgKi8KKwkJaWYgKGlzbnVsbCB8fAorCQkJKGV4cHJUeXBlKGV4cHIpID09IEpTT05CT0lEICYm CisJCQkgYmVoYXZpb3JfdHlwZSA9PSBkZWZhdWx0X2JlaGF2aW9yKSkKKwkJCWNvZXJjaW9uID0g bWFrZUpzb25Db2VyY2lvbihyZXR1cm5pbmcpOworCQllbHNlCisJCQljb2VyY2VkX2V4cHIgPQor CQkJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIGV4cHIsIGV4cHJUeXBlKGV4cHIpLAor CQkJCQkJCQkJICByZXR1cm5pbmctPnR5cGlkLCByZXR1cm5pbmctPnR5cG1vZCwKKwkJCQkJCQkJ CSAgQ09FUkNJT05fRVhQTElDSVQsIENPRVJDRV9FWFBMSUNJVF9DQVNULAorCQkJCQkJCQkJICBl eHByTG9jYXRpb24oKE5vZGUgKikgYmVoYXZpb3IpKTsKKworCQlpZiAoY29lcmNlZF9leHByID09 IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NP RVJDRSksCisJCQkJCWVycm1zZygiY2Fubm90IGNhc3QgYmVoYXZpb3IgZXhwcmVzc2lvbiBvZiB0 eXBlICVzIHRvICVzIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKGV4cHJUeXBlKGV4cHIpKSwK KwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKHJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJCSAgIHBh cnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkpOworCQllbHNlCisJ CQlleHByID0gY29lcmNlZF9leHByOworCX0KKworCXJldHVybiBtYWtlSnNvbkJlaGF2aW9yKGJl aGF2aW9yX3R5cGUsIGV4cHIsIGNvZXJjaW9uLCBsb2NhdGlvbik7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdGFyZ2V0LmMKaW5kZXggM2JjNjJhYzNiYS4uOGY4MTYyNGY5NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV90YXJnZXQuYwpAQCAtMTk4OSw2ICsxOTg5LDIxIEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5h bChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCS8qIG1ha2UgSlNPTl9BUlJBWUFHRyBhY3Qg bGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KIAkJCSpuYW1lID0gImpzb25fYXJyYXlhZ2ciOwog CQkJcmV0dXJuIDI7CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQkvKiBtYWtlIFNRTC9KU09O IGZ1bmN0aW9ucyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KKwkJCXN3aXRjaCAoKChK c29uRnVuY0V4cHIgKikgbm9kZSktPm9wKQorCQkJeworCQkJCWNhc2UgSlNPTl9FWElTVFNfT1A6 CisJCQkJCSpuYW1lID0gImpzb25fZXhpc3RzIjsKKwkJCQkJcmV0dXJuIDI7CisJCQkJY2FzZSBK U09OX1FVRVJZX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3F1ZXJ5IjsKKwkJCQkJcmV0dXJuIDI7 CisJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3ZhbHVlIjsKKwkJ CQkJcmV0dXJuIDI7CisJCQl9CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCBlZDdmNDBmMDUzLi5hMTc0NWM4OWZmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC00NzYsNiArNDc2LDggQEAgc3RhdGljIHZv aWQgZ2V0X2NvbnN0X2V4cHIoQ29uc3QgKmNvbnN0dmFsLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQsCiAJCQkJCQkgICBpbnQgc2hvd3R5cGUpOwogc3RhdGljIHZvaWQgZ2V0X2NvbnN0X2NvbGxh dGlvbihDb25zdCAqY29uc3R2YWwsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMg dm9pZCBnZXRfanNvbl9mb3JtYXQoSnNvbkZvcm1hdCAqZm9ybWF0LCBTdHJpbmdJbmZvIGJ1Zik7 CitzdGF0aWMgdm9pZCBnZXRfanNvbl9yZXR1cm5pbmcoSnNvblJldHVybmluZyAqcmV0dXJuaW5n LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBib29sIGpzb25fZm9ybWF0X2J5X2RlZmF1bHQp Owogc3RhdGljIHZvaWQgZ2V0X2pzb25fY29uc3RydWN0b3IoSnNvbkNvbnN0cnVjdG9yRXhwciAq Y3RvciwKIAkJCQkJCQkJIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGlj aXQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25fY29uc3RydWN0b3Jfb3B0aW9ucyhKc29uQ29uc3Ry dWN0b3JFeHByICpjdG9yLApAQCAtNTE4LDYgKzUyMCw4IEBAIHN0YXRpYyBjaGFyICpnZW5lcmF0 ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3Rv X3RleHQoY2hhciAqc3RyKTsKIHN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJl bGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSBy ZWxvcHRpb25zKTsKK3N0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRoX3Nw ZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkgICBib29sIHNob3dpbXBsaWNp dCk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZ ICIpCiAKQEAgLTgzMDAsNiArODMwNCw3IEBAIGlzU2ltcGxlTm9kZShOb2RlICpub2RlLCBOb2Rl ICpwYXJlbnROb2RlLCBpbnQgcHJldHR5RmxhZ3MpCiAJCWNhc2UgVF9XaW5kb3dGdW5jOgogCQlj YXNlIFRfRnVuY0V4cHI6CiAJCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgorCQljYXNlIFRf SnNvbkV4cHI6CiAJCQkvKiBmdW5jdGlvbi1saWtlOiBuYW1lKC4uKSBvciBuYW1lWy4uXSAqLwog CQkJcmV0dXJuIHRydWU7CiAKQEAgLTg0NzEsNiArODQ3Niw3IEBAIGlzU2ltcGxlTm9kZShOb2Rl ICpub2RlLCBOb2RlICpwYXJlbnROb2RlLCBpbnQgcHJldHR5RmxhZ3MpCiAJCQkJY2FzZSBUX0dy b3VwaW5nRnVuYzoJLyogb3duIHBhcmVudGhlc2VzICovCiAJCQkJY2FzZSBUX1dpbmRvd0Z1bmM6 CS8qIG93biBwYXJlbnRoZXNlcyAqLwogCQkJCWNhc2UgVF9DYXNlRXhwcjoJLyogb3RoZXIgc2Vw YXJhdG9ycyAqLworCQkJCWNhc2UgVF9Kc29uRXhwcjoJLyogb3duIHBhcmVudGhlc2VzICovCiAJ CQkJCXJldHVybiB0cnVlOwogCQkJCWRlZmF1bHQ6CiAJCQkJCXJldHVybiBmYWxzZTsKQEAgLTg1 ODYsNiArODU5Miw2NCBAQCBnZXRfcnVsZV9leHByX3BhcmVuKE5vZGUgKm5vZGUsIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCwKIAkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn KScpOwogfQogCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fYmVoYXZpb3IoSnNvbkJlaGF2aW9yICpi ZWhhdmlvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAorCQkJCSAgY29uc3QgY2hhciAqb24p Cit7CisJLyoKKwkgKiBUaGUgb3JkZXIgb2YgYXJyYXkgZWxlbWVudHMgbXVzdCBjb3JyZXNwb25k IHRvIHRoZSBvcmRlciBvZgorCSAqIEpzb25CZWhhdmlvclR5cGUgbWVtYmVycy4KKwkgKi8KKwlj b25zdCBjaGFyICpiZWhhdmlvcl9uYW1lc1tdID0KKwl7CisJCSIgTlVMTCIsCisJCSIgRVJST1Ii LAorCQkiIEVNUFRZIiwKKwkJIiBUUlVFIiwKKwkJIiBGQUxTRSIsCisJCSIgVU5LTk9XTiIsCisJ CSIgRU1QVFkgQVJSQVkiLAorCQkiIEVNUFRZIE9CSkVDVCIsCisJCSIgREVGQVVMVCAiCisJfTsK KworCWlmICgoaW50KSBiZWhhdmlvci0+YnR5cGUgPCAwIHx8IGJlaGF2aW9yLT5idHlwZSA+PSBs ZW5ndGhvZihiZWhhdmlvcl9uYW1lcykpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIGpzb24gYmVo YXZpb3IgdHlwZTogJWQiLCBiZWhhdmlvci0+YnR5cGUpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhjb250ZXh0LT5idWYsIGJlaGF2aW9yX25hbWVzW2JlaGF2aW9yLT5idHlwZV0pOworCisJ aWYgKGJlaGF2aW9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0RFRkFVTFQpCisJCWdldF9ydWxl X2V4cHIoYmVoYXZpb3ItPmV4cHIsIGNvbnRleHQsIGZhbHNlKTsKKworCWFwcGVuZFN0cmluZ0lu Zm8oY29udGV4dC0+YnVmLCAiIE9OICVzIiwgb24pOworfQorCisvKgorICogZ2V0X2pzb25fZXhw cl9vcHRpb25zCisgKgorICogUGFyc2UgYmFjayBjb21tb24gb3B0aW9ucyBmb3IgSlNPTl9RVUVS WSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMuCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl9l eHByX29wdGlvbnMoSnNvbkV4cHIgKmpzZXhwciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAor CQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvcikKK3sKKwlpZiAoanNleHBy LT5vcCA9PSBKU09OX1FVRVJZX09QKQorCXsKKwkJaWYgKGpzZXhwci0+d3JhcHBlciA9PSBKU1df Q09ORElUSU9OQUwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBXSVRIIENP TkRJVElPTkFMIFdSQVBQRVIiKTsKKwkJZWxzZSBpZiAoanNleHByLT53cmFwcGVyID09IEpTV19V TkNPTkRJVElPTkFMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgV0lUSCBV TkNPTkRJVElPTkFMIFdSQVBQRVIiKTsKKworCQlpZiAoanNleHByLT5vbWl0X3F1b3RlcykKKwkJ CWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiIE9NSVQgUVVPVEVTIik7CisJfQorCisJ aWYgKGpzZXhwci0+b25fZW1wdHkgJiYganNleHByLT5vbl9lbXB0eS0+YnR5cGUgIT0gZGVmYXVs dF9iZWhhdmlvcikKKwkJZ2V0X2pzb25fYmVoYXZpb3IoanNleHByLT5vbl9lbXB0eSwgY29udGV4 dCwgIkVNUFRZIik7CisKKwlpZiAoanNleHByLT5vbl9lcnJvciAmJiBqc2V4cHItPm9uX2Vycm9y LT5idHlwZSAhPSBkZWZhdWx0X2JlaGF2aW9yKQorCQlnZXRfanNvbl9iZWhhdmlvcihqc2V4cHIt Pm9uX2Vycm9yLCBjb250ZXh0LCAiRVJST1IiKTsKK30KIAogLyogLS0tLS0tLS0tLQogICogZ2V0 X3J1bGVfZXhwcgkJCS0gUGFyc2UgYmFjayBhbiBleHByZXNzaW9uCkBAIC05NzQ1LDYgKzk4MDks NyBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwK IAkJCX0KIAkJCWJyZWFrOwogCisKIAkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6CiAJCQl7CiAJCQkJ SnNvblZhbHVlRXhwciAqanZlID0gKEpzb25WYWx1ZUV4cHIgKikgbm9kZTsKQEAgLTk3OTQsNiAr OTg1OSw2NCBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlK c29uRXhwciAgICpqZXhwciA9IChKc29uRXhwciAqKSBub2RlOworCisJCQkJc3dpdGNoIChqZXhw ci0+b3ApCisJCQkJeworCQkJCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICJKU09OX0VYSVNUUygiKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIEpTT05fUVVFUllfT1A6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIkpT T05fUVVFUlkoIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1ZBTFVFKCIpOworCQkJCQkJYnJl YWs7CisJCQkJfQorCisJCQkJZ2V0X3J1bGVfZXhwcihqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIGNv bnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiwgIik7CisKKwkJCQlnZXRfanNvbl9wYXRoX3NwZWMoamV4cHItPnBhdGhfc3BlYywgY29udGV4 dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJCWlmIChqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCQkJ eworCQkJCQlMaXN0Q2VsbCAgICpsYzEsCisJCQkJCQkJICAgKmxjMjsKKwkJCQkJYm9vbAkJbmVl ZGNvbW1hID0gZmFsc2U7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgUEFT U0lORyAiKTsKKworCQkJCQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJ CQkJbGMyLCBqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCQkJCXsKKwkJCQkJCWlmIChuZWVkY29t bWEpCisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQkJCQkJbmVl ZGNvbW1hID0gdHJ1ZTsKKworCQkJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAqKSBsZmlyc3QobGMy KSwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi IEFTICVzIiwKKwkJCQkJCQkJCQkgKChTdHJpbmcgKikgbGZpcnN0X25vZGUoU3RyaW5nLCBsYzEp KS0+c3ZhbCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoamV4cHItPm9wICE9IEpTT05fRVhJ U1RTX09QIHx8CisJCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQkJ CWdldF9qc29uX3JldHVybmluZyhqZXhwci0+cmV0dXJuaW5nLCBjb250ZXh0LT5idWYsCisJCQkJ CQkJCQkgICBqZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCk7CisKKwkJCQlnZXRfanNvbl9leHBy X29wdGlvbnMoamV4cHIsIGNvbnRleHQsCisJCQkJCQkJCQkgIGpleHByLT5vcCAhPSBKU09OX0VY SVNUU19PUCA/CisJCQkJCQkJCQkgIEpTT05fQkVIQVZJT1JfTlVMTCA6CisJCQkJCQkJCQkgIEpT T05fQkVIQVZJT1JfRkFMU0UpOworCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIp Iik7CisJCQl9CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdDoKIAkJCXsKIAkJCQljaGFyCSAg ICpzZXA7CkBAIC05OTE3LDYgKzEwMDQwLDcgQEAgbG9va3NfbGlrZV9mdW5jdGlvbihOb2RlICpu b2RlKQogCQljYXNlIFRfTWluTWF4RXhwcjoKIAkJY2FzZSBUX1NRTFZhbHVlRnVuY3Rpb246CiAJ CWNhc2UgVF9YbWxFeHByOgorCQljYXNlIFRfSnNvbkV4cHI6CiAJCQkvKiB0aGVzZSBhcmUgYWxs IGFjY2VwdGVkIGJ5IGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwciAqLwogCQkJcmV0dXJuIHRydWU7 CiAJCWRlZmF1bHQ6CkBAIC0xMDc4Niw2ICsxMDkxMCwxOCBAQCBnZXRfY29uc3RfY29sbGF0aW9u KENvbnN0ICpjb25zdHZhbCwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogCX0KIH0KIAorLyoK KyAqIGdldF9qc29uX3BhdGhfc3BlYwkJLSBQYXJzZSBiYWNrIGEgSlNPTiBwYXRoIHNwZWNpZmlj YXRpb24KKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRoX3Nw ZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJaWYg KElzQShwYXRoX3NwZWMsIENvbnN0KSkKKwkJZ2V0X2NvbnN0X2V4cHIoKENvbnN0ICopIHBhdGhf c3BlYywgY29udGV4dCwgLTEpOworCWVsc2UKKwkJZ2V0X3J1bGVfZXhwcihwYXRoX3NwZWMsIGNv bnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisKIC8qCiAgKiBnZXRfanNvbl9mb3JtYXQJCQktIFBh cnNlIGJhY2sgYSBKc29uRm9ybWF0IG5vZGUKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5k ZXggYzRmZDkzMzE1NC4uYTE0YTQ4ODM1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0y NDAsNiArMjQwLDkgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX1hNTEVYUFIsCiAJ RUVPUF9KU09OX0NPTlNUUlVDVE9SLAogCUVFT1BfSVNfSlNPTiwKKwlFRU9QX0pTT05FWFBSX1BB VEgsCisJRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiwKKwlFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJ TklTSCwKIAlFRU9QX0FHR1JFRiwKIAlFRU9QX0dST1VQSU5HX0ZVTkMsCiAJRUVPUF9XSU5ET1df RlVOQywKQEAgLTY5Miw2ICs2OTUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJ CQlKc29uSXNQcmVkaWNhdGUgKnByZWQ7CS8qIG9yaWdpbmFsIGV4cHJlc3Npb24gbm9kZSAqLwog CQl9CQkJaXNfanNvbjsKIAorCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9QQVRIICovCisJCXN0cnVj dAorCQl7CisJCQlzdHJ1Y3QgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CisJCX0JCQlqc29uZXhw cjsKKworCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiAqLworCQlzdHJ1Y3QKKwkJewor CQkJSnNvbkNvZXJjaW9uICAgKmNvZXJjaW9uOworCQkJRm1nckluZm8JICAgKmlucHV0X2ZpbmZv OworCQkJT2lkCQkJCXR5cGlvcGFyYW07CisJCQl2b2lkCQkgICAqanNvbl9wb3B1bGF0ZV90eXBl X2NhY2hlOworCQkJRXJyb3JTYXZlQ29udGV4dCAqZXNjb250ZXh0OworCQl9CQkJanNvbmV4cHJf Y29lcmNpb247CiAJfQkJCWQ7CiB9IEV4cHJFdmFsU3RlcDsKIApAQCAtNzU1LDcgKzc3Myw2IEBA IHR5cGVkZWYgc3RydWN0IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogCWludAkJCW5hcmdzOwog fSBKc29uQ29uc3RydWN0b3JFeHByU3RhdGU7CiAKLQogLyogZnVuY3Rpb25zIGluIGV4ZWNFeHBy LmMgKi8KIGV4dGVybiB2b2lkIEV4cHJFdmFsUHVzaFN0ZXAoRXhwclN0YXRlICplcywgY29uc3Qg RXhwckV2YWxTdGVwICpzKTsKIApAQCAtODA5LDYgKzgyNiwxMSBAQCBleHRlcm4gdm9pZCBFeGVj RXZhbFhtbEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4g dm9pZCBFeGVjRXZhbEpzb25Db25zdHJ1Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0 ZXAgKm9wLAogCQkJCQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4 ZWNFdmFsSnNvbklzUHJlZGljYXRlKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3Ap OworZXh0ZXJuIHZvaWQJRXhlY0V2YWxKc29uQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwKKwkJCQkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCk7CitleHRlcm4g dm9pZAlFeGVjRXZhbEpzb25Db2VyY2lvbkZpbmlzaChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wKTsKK2V4dGVybiBpbnQgRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsK IGV4dGVybiB2b2lkIEV4ZWNFdmFsR3JvdXBpbmdGdW5jKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJF dmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxTdWJQbGFuKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKaW5kZXggNmE3MTE4ZDMwMC4uYWY2YWFiNGJiMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKQEAgLTEwMDgsNiArMTAwOCw5MiBAQCB0eXBlZGVmIHN0cnVjdCBEb21haW5Db25z dHJhaW50U3RhdGUKIAlFeHByU3RhdGUgICpjaGVja19leHByc3RhdGU7CS8qIGNoZWNrX2V4cHIn cyBldmFsIHN0YXRlLCBvciBOVUxMICovCiB9IERvbWFpbkNvbnN0cmFpbnRTdGF0ZTsKIAorLyoK KyAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiBKc29uUGF0aCogZXZhbHVhdGlvbi4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHJQb3N0RXZhbFN0YXRlCit7CisJLyogRGlkIEpz b25QYXRoKiBldmFsdWF0aW9uIGNhdXNlIGFuIGVycm9yPyAqLworCU51bGxhYmxlRGF0dW0JZXJy b3I7CisKKwkvKiBJcyB0aGUgcmVzdWx0IG9mIEpzb25QYXRoKiBldmFsdWF0aW9uIGVtcHR5PyAq LworCU51bGxhYmxlRGF0dW0JZW1wdHk7CisKKwkvKgorCSAqIEV4ZWNFdmFsSnNvbkV4cHJQYXRo KCkgd2lsbCBzZXQgdGhpcyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgc3RlcCB0bworCSAqIHVzZSB0 byBjb2VyY2UgdGhlIHJlc3VsdCBvZiBKc29uUGF0aCogZXZhbHVhdGlvbiB0byB0aGUgUkVUVVJO SU5HIHR5cGUuCisJICogQWxzbyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHBvc3NpYmxlIHN0ZXAg YWRkcmVzc2VzIHRoYXQgdGhpcyBjb3VsZCBiZQorCSAqIHNldCB0byBpbiB0aGUgZGVmaW5pdGlv biBvZiBKc29uRXhwclN0YXRlLgorCSAqLworCWludAkJCWp1bXBfZXZhbF9jb2VyY2lvbjsKK30g SnNvbkV4cHJQb3N0RXZhbFN0YXRlOworCisvKiBTdGF0ZSBmb3IgZXZhbHVhdGluZyBhIEpzb25F eHByLCB0b28gYmlnIHRvIGlubGluZSAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHJTdGF0ZQor eworCS8qIG9yaWdpbmFsIGV4cHJlc3Npb24gbm9kZSAqLworCUpzb25FeHByICAgKmpzZXhwcjsK KworCS8qIHZhbHVlL2lzbnVsbCBmb3IgZm9ybWF0dGVkX2V4cHIgKi8KKwlOdWxsYWJsZURhdHVt IGZvcm1hdHRlZF9leHByOworCisJLyogdmFsdWUvaXNudWxsIGZvciBwYXRoc3BlYyAqLworCU51 bGxhYmxlRGF0dW0gcGF0aHNwZWM7CisKKwkvKiBKc29uUGF0aFZhcmlhYmxlIGVudHJpZXMgZm9y IHBhc3NpbmdfdmFsdWVzICovCisJTGlzdAkgICAqYXJnczsKKworCS8qCisJICogUGVyLXJvdyBy ZXN1bHQgc3RhdHVzIGluZm8gcG9wdWxhdGVkIGJ5IEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkKKwkg KiBhbmQgRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goKS4KKwkgKi8KKwlKc29uRXhwclBvc3RF dmFsU3RhdGUgcG9zdF9ldmFsOworCisJLyoKKwkgKiBBZGRyZXNzZXMgb2YgdGhlIHN0ZXBzIHRo YXQgaW1wbGVtZW50cyB0aGUgbm9uLUVSUk9SIHZhcmlhbnQgb2YgT04gRU1QVFkKKwkgKiBhbmQg T04gRVJST1IgYmVoYXZpb3JzLCByZXNwZWN0aXZlbHkuCisJICovCisJaW50CQkJanVtcF9lbXB0 eTsKKwlpbnQJCQlqdW1wX2Vycm9yOworCisJLyoKKwkgKiBBZGRyZXNzZXMgb2Ygc3RlcHMgdG8g cGVyZm9ybSB0aGUgY29lcmNpb24gb2YgdGhlIEpzb25QYXRoKiByZXN1bHQgdmFsdWUKKwkgKiB0 byB0aGUgUkVUVVJOSU5HIHR5cGUuICBFYWNoIGFkZHJlc3MgcG9pbnRzIHRvIGVpdGhlciAxKSBh IHNwZWNpYWwKKwkgKiBFRU9QX0pTT05FWFBSX0NPRVJDSU9OIHN0ZXAgdGhhdCBoYW5kbGVzIGNv ZXJjaW9uIHVzaW5nIHRoZSBSRVRVUk5JTkcKKwkgKiB0eXBlJ3MgaW5wdXQgZnVuY3Rpb24gb3Ig YnkgdXNpbmcganNvbl92aWFfcG9wdWxhdGUoKSwgb3IgMikgYW4KKwkgKiBleHByZXNzaW9uIHN1 Y2ggYXMgQ29lcmNlVmlhSU8uICBJdCBtYXkgYmUgLTEgaWYgbm8gY29lcmNpb24gaXMKKwkgKiBu ZWNlc3NhcnkuCisJICoKKwkgKiBqdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uIHBvaW50cyB0byB0 aGUgc3RlcCB0byBldmFsdWF0ZSB0aGUgY29lcmNpb24KKwkgKiBnaXZlbiBpbiBKc29uRXhwci5y ZXN1bHRfY29lcmNpb24uCisJICovCisJaW50CQkJanVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbjsK KworCS8qIEp1bXAgdG8gZW5kIHRvIHNraXAgYWxsIHRoZSBzdGVwcyBhZnRlciBFRU9QX0pTT05F WFBSX1BBVEguICovCisJaW50CQkJanVtcF9lbmQ7CisKKwkvKiBldmFsX2l0ZW1fY29lcmNpb25f anVtcHMgaXMgYW4gYXJyYXkgb2YgbnVtX2l0ZW1fY29lcmNpb25zIGVsZW1lbnRzCisJICogZWFj aCBjb250YWluaW5nIGEgc3RlcCBhZGRyZXNzIHRvIGV2YWx1YXRlIHRoZSBjb2VyY2lvbiBmcm9t IGEgdmFsdWUgb2YKKwkgKiB0aGUgZ2l2ZW4gSnNvbkl0ZW1UeXBlIHRvIHRoZSBSRVRVUk5JTkcg dHlwZSwgb3IgLTEgaWYgbm8gY29lcmNpb24gaXMKKwkgKiBuZWNlc3NhcnkuICBpdGVtX2NvZXJj aW9uX3ZpYV9leHByIGlzIGFuIGFycmF5IG9mIGJvb2xlYW4gZmxhZ3Mgb2YgdGhlCisJICogc2Ft ZSBsZW5ndGggdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBlYWNoIHZhbGlkIHN0ZXAgYWRkcmVzcyBp biB0aGUKKwkgKiBldmFsX2l0ZW1fY29lcmNpb25fanVtcHMgYXJyYXkgcG9pbnRzIHRvIGFuIGV4 cHJlc3Npb24gb3IgYQorCSAqIEVFT1BfSlNPTkVYUFJfQ09FUkNJT04gc3RlcC4gIEV4ZWNFdmFs SnNvbkV4cHJQYXRoKCkgd2lsbCBjYXVzZSBhbgorCSAqIGVycm9yIGlmIGl0J3MgdGhlIGxhdHRl ciwgYmVjYXVzZSB0aGF0IG1vZGUgb2YgY29lcmNpb24gaXMgbm90CisJICogc3VwcG9ydGVkIGZv ciBhbGwgSnNvbkl0ZW1UeXBlcy4KKwkgKi8KKwlpbnQJCQludW1faXRlbV9jb2VyY2lvbnM7CisJ aW50CQkgICAqZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzOworCWJvb2wJICAgKml0ZW1fY29lcmNp b25fdmlhX2V4cHI7CisKKwkvKgorCSAqIEZvciBwYXNzaW5nIHdoZW4gaW5pdGlhbGl6aW5nIGEg RUVPUF9JT0NPRVJDRV9TQUZFIHN0ZXAgZm9yIGFueQorCSAqIENvZXJjZVZpYUlPIG5vZGVzIGlu IHRoZSBleHByZXNzaW9uIHRoYXQgbXVzdCBiZSBldmFsdWF0ZWQgaW4gYW4KKwkgKiBlcnJvci1z YWZlIG1hbm5lci4KKwkgKi8KKwlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dDsKK30gSnNvbkV4 cHJTdGF0ZTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQkgRXhlY3V0b3IgU3RhdGUgVHJlZXMKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvbWFrZWZ1bmNzLmgKaW5kZXggYWNhMGVlNTRkZi4uMWFjM2MxZjUwOSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFr ZWZ1bmNzLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBleHRlcm4gSnNvbkZvcm1hdCAqbWFrZUpzb25G b3JtYXQoSnNvbkZvcm1hdFR5cGUgdHlwZSwgSnNvbkVuY29kaW5nIGVuY29kaW5nLAogCQkJCQkJ CQkgIGludCBsb2NhdGlvbik7CiBleHRlcm4gSnNvblZhbHVlRXhwciAqbWFrZUpzb25WYWx1ZUV4 cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIgKmZvcm1hdHRlZF9leHByLAogCQkJCQkJCQkJCUpzb25G b3JtYXQgKmZvcm1hdCk7CitleHRlcm4gSnNvbkJlaGF2aW9yICptYWtlSnNvbkJlaGF2aW9yKEpz b25CZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZXhwciwKKwkJCQkgSnNvbkNvZXJjaW9uICpjb2Vy Y2lvbiwgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBOb2RlICptYWtlSnNvbktleVZhbHVlKE5vZGUg KmtleSwgTm9kZSAqdmFsdWUpOwogZXh0ZXJuIE5vZGUgKm1ha2VKc29uSXNQcmVkaWNhdGUoTm9k ZSAqZXhwciwgSnNvbkZvcm1hdCAqZm9ybWF0LAogCQkJCQkJCQkgSnNvblZhbHVlVHlwZSBpdGVt X3R5cGUsIGJvb2wgdW5pcXVlX2tleXMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggZTQ5NDMw OWRhOC4uYzI5ZjI5OTJkOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTY5Miw2ICsxNjky LDIzIEBAIHR5cGVkZWYgc3RydWN0IFRyaWdnZXJUcmFuc2l0aW9uCiAKIC8qIE5vZGVzIGZvciBT UUwvSlNPTiBzdXBwb3J0ICovCiAKKy8qCisgKiBKc29uUXVvdGVzIC0KKyAqCQlyZXByZXNlbnRh dGlvbiBvZiBbS0VFUHxPTUlUXSBRVU9URVMgY2xhdXNlIGZvciBKU09OX1FVRVJZKCkKKyAqLwor dHlwZWRlZiBlbnVtIEpzb25RdW90ZXMKK3sKKwlKU19RVU9URVNfVU5TUEVDLAkJCS8qIHVuc3Bl Y2lmaWVkICovCisJSlNfUVVPVEVTX0tFRVAsCQkJCS8qIEtFRVAgUVVPVEVTICovCisJSlNfUVVP VEVTX09NSVQsCQkJCS8qIE9NSVQgUVVPVEVTICovCit9IEpzb25RdW90ZXM7CisKKy8qCisgKiBK c29uUGF0aFNwZWMgLQorICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gcGF0aCBjb25zdGFudAor ICovCit0eXBlZGVmIGNoYXIgKkpzb25QYXRoU3BlYzsKKwogLyoKICAqIEpzb25PdXRwdXQgLQog ICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gb3V0cHV0IGNsYXVzZSAoUkVUVVJOSU5HIHR5cGUg W0ZPUk1BVCBmb3JtYXRdKQpAQCAtMTcwMyw2ICsxNzIwLDM2IEBAIHR5cGVkZWYgc3RydWN0IEpz b25PdXRwdXQKIAlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmc7CS8qIFJFVFVSTklORyBGT1JNQVQg Y2xhdXNlIGFuZCB0eXBlIE9pZHMgKi8KIH0gSnNvbk91dHB1dDsKIAorLyoKKyAqIEpzb25Bcmd1 bWVudCAtCisgKgkJcmVwcmVzZW50YXRpb24gb2YgYXJndW1lbnQgZnJvbSBKU09OIFBBU1NJTkcg Y2xhdXNlCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25Bcmd1bWVudAoreworCU5vZGVUYWcJCXR5 cGU7CisJSnNvblZhbHVlRXhwciAqdmFsOwkJCS8qIGFyZ3VtZW50IHZhbHVlIGV4cHJlc3Npb24g Ki8KKwljaGFyCSAgICpuYW1lOwkJCS8qIGFyZ3VtZW50IG5hbWUgKi8KK30gSnNvbkFyZ3VtZW50 OworCisvKgorICogSnNvbkZ1bmNFeHByIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0 aW9uIG9mIEpTT04gZnVuY3Rpb24gZXhwcmVzc2lvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNv bkZ1bmNFeHByCit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uRXhwck9wCW9wOwkJCQkvKiBleHBy ZXNzaW9uIHR5cGUgKi8KKwlKc29uVmFsdWVFeHByICpjb250ZXh0X2l0ZW07CS8qIGNvbnRleHQg aXRlbSBleHByZXNzaW9uICovCisJTm9kZQkgICAqcGF0aHNwZWM7CQkvKiBKU09OIHBhdGggc3Bl Y2lmaWNhdGlvbiBleHByZXNzaW9uICovCisJTGlzdAkgICAqcGFzc2luZzsJCS8qIGxpc3Qgb2Yg UEFTU0lORyBjbGF1c2UgYXJndW1lbnRzLCBpZiBhbnkgKi8KKwlKc29uT3V0cHV0ICpvdXRwdXQ7 CQkJLyogb3V0cHV0IGNsYXVzZSwgaWYgc3BlY2lmaWVkICovCisJSnNvbkJlaGF2aW9yICpvbl9l bXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCisJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJ CS8qIE9OIEVSUk9SIGJlaGF2aW9yICovCisJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8qIGFycmF5 IHdyYXBwZXIgYmVoYXZpb3IgKEpTT05fUVVFUlkgb25seSkgKi8KKwlKc29uUXVvdGVzCXF1b3Rl czsJCQkvKiBvbWl0IG9yIGtlZXAgcXVvdGVzPyAoSlNPTl9RVUVSWSBvbmx5KSAqLworCWludAkJ CWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNv bkZ1bmNFeHByOworCiAvKgogICogSnNvbktleVZhbHVlIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJl cHJlc2VudGF0aW9uIG9mIEpTT04gb2JqZWN0IGtleS12YWx1ZSBwYWlyIGZvcgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaAppbmRleCA0ODBlYzMyYWRjLi5iMTIwYzZiODE4IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMu aApAQCAtMTU1Miw2ICsxNTUyLDE3IEBAIHR5cGVkZWYgc3RydWN0IFhtbEV4cHIKIAlpbnQJCQls b2NhdGlvbjsKIH0gWG1sRXhwcjsKIAorLyoKKyAqIEpzb25FeHByT3AgLQorICoJCWVudW1lcmF0 aW9uIG9mIEpTT04gZnVuY3Rpb25zIHVzaW5nIEpTT04gcGF0aAorICovCit0eXBlZGVmIGVudW0g SnNvbkV4cHJPcAoreworCUpTT05fVkFMVUVfT1AsCQkJCS8qIEpTT05fVkFMVUUoKSAqLworCUpT T05fUVVFUllfT1AsCQkJCS8qIEpTT05fUVVFUlkoKSAqLworCUpTT05fRVhJU1RTX09QLAkJCQkv KiBKU09OX0VYSVNUUygpICovCit9IEpzb25FeHByT3A7CisKIC8qCiAgKiBKc29uRW5jb2Rpbmcg LQogICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gRU5DT0RJTkcgY2xhdXNlCkBAIC0xNTg3LDYg KzE1OTgsMjYgQEAgdHlwZWRlZiBlbnVtIEpzb25XcmFwcGVyCiAJSlNXX1VOQ09ORElUSU9OQUws CiB9IEpzb25XcmFwcGVyOwogCisvKgorICogSnNvbkJlaGF2aW9yVHlwZSAtCisgKgkJZW51bWVy YXRpb24gb2YgYmVoYXZpb3IgdHlwZXMgdXNlZCBpbiBKU09OIE9OIC4uLiBCRUhBVklPUiBjbGF1 c2UKKyAqCisgKiAJCUlmIGVudW0gbWVtYmVycyBhcmUgcmVvcmRlcmVkLCBnZXRfanNvbl9iZWhh dmlvcigpIGZyb20gcnVsZXV0aWxzLmMKKyAqIAkJbXVzdCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5 LgorICovCit0eXBlZGVmIGVudW0gSnNvbkJlaGF2aW9yVHlwZQoreworCUpTT05fQkVIQVZJT1Jf TlVMTCA9IDAsCisJSlNPTl9CRUhBVklPUl9FUlJPUiwKKwlKU09OX0JFSEFWSU9SX0VNUFRZLAor CUpTT05fQkVIQVZJT1JfVFJVRSwKKwlKU09OX0JFSEFWSU9SX0ZBTFNFLAorCUpTT05fQkVIQVZJ T1JfVU5LTk9XTiwKKwlKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZLAorCUpTT05fQkVIQVZJT1Jf RU1QVFlfT0JKRUNULAorCUpTT05fQkVIQVZJT1JfREVGQVVMVCwKK30gSnNvbkJlaGF2aW9yVHlw ZTsKKwogLyoKICAqIEpzb25Gb3JtYXQgLQogICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gRk9S TUFUIGNsYXVzZQpAQCAtMTY4MSw2ICsxNzEyLDEzOCBAQCB0eXBlZGVmIHN0cnVjdCBKc29uSXNQ cmVkaWNhdGUKIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1 bmtub3duICovCiB9IEpzb25Jc1ByZWRpY2F0ZTsKIAorLyoKKyAqIEpzb25Db2VyY2lvbgorICoJ CUluZm9ybWF0aW9uIGFib3V0IGNvZXJjaW5nIGEgU1FML0pTT04gdmFsdWUgdG8gdGhlIHNwZWNp ZmllZAorICoJCXR5cGUKKyAqCisgKiBBIG5vZGUgb2YgdGhpcyB0eXBlIGlzIGNyZWF0ZWQgaWYg dGhlIHBhcnNlciBjYW5ub3QgZmluZCBhIGNhc3QgZXhwcmVzc2lvbgorICogdXNpbmcgY29lcmNl X3R5cGUoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkNvZXJjaW9uCit7CisJTm9kZVRhZwkJ dHlwZTsKKworCU9pZAkJCXRhcmdldHR5cGU7CisJaW50MzIJCXRhcmdldHR5cG1vZDsKKwlib29s CQl2aWFfcG9wdWxhdGU7CS8qIGNvZXJjZSByZXN1bHQgdXNpbmcganNvbl9wb3B1bGF0ZV90eXBl KCk/ICovCisJYm9vbAkJdmlhX2lvOwkJCS8qIGNvZXJjZSByZXN1bHQgdXNpbmcgdHlwZSBpbnB1 dCBmdW5jdGlvbj8gKi8KKwlPaWQJCQljb2xsYXRpb247CQkvKiBjb2xsYXRpb24gZm9yIGNvZXJj aW9uIHZpYSBJL08gb3IgcG9wdWxhdGUgKi8KK30gSnNvbkNvZXJjaW9uOworCisvKgorICogSnNv bkl0ZW1UeXBlCisgKgkJUG9zc2libGUgdHlwZXMgZm9yIHNjYWxhciB2YWx1ZXMgcmV0dXJuZWQg YnkgSlNPTl9WQUxVRSgpCisgKgorICogVGhlIGNvbW1lbnQgbmV4dCB0byBlYWNoIGl0ZW0gdHlw ZSBtZW50aW9ucyB0aGUgY29ycmVzcG9uZGluZworICogSnNvbmJWYWx1ZS5qYnZUeXBlLgorICov Cit0eXBlZGVmIGVudW0gSnNvbkl0ZW1UeXBlCit7CisJSnNvbkl0ZW1UeXBlTnVsbCwJCS8qIGpi dk51bGwgKi8KKwlKc29uSXRlbVR5cGVTdHJpbmcsCQkvKiBqYnZTdHJpbmcgKi8KKwlKc29uSXRl bVR5cGVOdW1lcmljLAkvKiBqYnZOdW1lcmljICovCisJSnNvbkl0ZW1UeXBlQm9vbGVhbiwJLyog amJ2Qm9vbCAqLworCUpzb25JdGVtVHlwZURhdGUsCQkvKiBqYnZEYXRldGltZTogREFURU9JRCAq LworCUpzb25JdGVtVHlwZVRpbWUsCQkvKiBqYnZEYXRldGltZTogVElNRU9JRCAqLworCUpzb25J dGVtVHlwZVRpbWV0eiwJCS8qIGpidkRhdGV0aW1lOiBUSU1FVFpPSUQgKi8KKwlKc29uSXRlbVR5 cGVUaW1lc3RhbXAsCS8qIGpidkRhdGV0aW1lOiBUSU1FU1RBTVBPSUQgKi8KKwlKc29uSXRlbVR5 cGVUaW1lc3RhbXB0eiwvKiBqYnZEYXRldGltZTogVElNRVNUQU1QVFpPSUQgKi8KKwlKc29uSXRl bVR5cGVDb21wb3NpdGUsCS8qIGpidkFycmF5LCBqYnZPYmplY3QsIGpidkJpbmFyeSAqLworCUpz b25JdGVtVHlwZUludmFsaWQsCit9IEpzb25JdGVtVHlwZTsKKworLyoKKyAqIEpzb25JdGVtQ29l cmNpb24KKyAqCQlDb2VyY2lvbiBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gSnNvbkl0ZW1UeXBl CisgKgorICogSWYgbm90IE5VTEwsICdjb2VyY2lvbicgZ2l2ZW4gdGhlIGV4cHJlc3Npb24gbm9k ZSB0byBjb252ZXJ0IGEgc2NhbGFyIHZhbHVlCisgKiBleHRyYWN0ZWQgZnJvbSBhIEpzb25iVmFs dWUgb2YgdGhlIGdpdmVuIHR5cGUgdG8gdGhlIHRhcmdldCB0eXBlIGdpdmVuIGJ5CisgKiBKc29u RXhwci5yZXR1cm5pbmcuICBOVUxMIG1lYW5zIHRoZSBjb2VyY2lvbiBpcyB1bm5lY2Vzc2FyeS4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkl0ZW1Db2VyY2lvbgoreworCU5vZGVUYWcJCXR5cGU7 CisKKwlKc29uSXRlbVR5cGUgaXRlbV90eXBlOworCU5vZGUJICAgKmNvZXJjaW9uOworfSBKc29u SXRlbUNvZXJjaW9uOworCisvKgorICogSnNvbkJlaGF2aW9yCisgKgkJSW5mb3JtYXRpb24gYWJv dXQgT04gRVJST1IgLyBPTiBFTVBUWSBiZWhhdmlvcnMgb2YgSlNPTl9WQUxVRSgpLAorICoJCUpT T05fUVVFUlkoKSwgYW5kIEpTT05fRVhJU1RTKCkKKyAqCisgKiAnZXhwcicgaXMgdGhlIGV4cHJl c3Npb24gdG8gZW1pdCB3aGVuIGEgZ2l2ZW4gYmVoYXZpb3IgKEVNUFRZIG9yIEVSUk9SKQorICog b2NjdXJzIG9uIGV2YWx1YXRpbmcgdGhlIFNRTC9KU09OIHF1ZXJ5IGZ1bmN0aW9uLiAgJ2NvZXJj aW9uJyBpcyBzZXQKKyAqIGlmICdleHByJyBpc24ndCBhbHJlYWR5IG9mIHRoZSBleHBlY3RlZCB0 YXJnZXQgdHlwZSBnaXZlbiBieQorICogSnNvbkV4cHIucmV0dXJuaW5nLgorICovCit0eXBlZGVm IHN0cnVjdCBKc29uQmVoYXZpb3IKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJSnNvbkJlaGF2aW9y VHlwZSBidHlwZTsKKwlOb2RlCSAgICpleHByOworCUpzb25Db2VyY2lvbiAqY29lcmNpb247CQkv KiB0byBjb2VyY2UgYmVoYXZpb3IgZXhwcmVzc2lvbiB3aGVuIHRoZXJlIGlzCisJCQkJCQkJCSAq IG5vIGNhc3QgdG8gdGhlIHRhcmdldCB0eXBlICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tl biBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uQmVoYXZpb3I7CisKKy8qCisg KiBKc29uRXhwciAtCisgKgkJVHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9WQUxV RSgpLCBKU09OX1FVRVJZKCksIGFuZAorICoJCUpTT05fRVhJU1RTKCkKKyAqLwordHlwZWRlZiBz dHJ1Y3QgSnNvbkV4cHIKK3sKKwlFeHByCQl4cHI7CisKKwkvKiBKU09OXyogZnVuY3Rpb24gaWRl bnRpZmllciAqLworCUpzb25FeHByT3AJb3A7CisKKwkvKiBqc29uKGIpLXZhbHVlZCBleHByZXNz aW9uIHRvIHF1ZXJ5ICovCisJTm9kZQkgICAqZm9ybWF0dGVkX2V4cHI7CisKKwkvKiBGb3JtYXQg b2YgdGhlIGFib3ZlIGV4cHJlc3Npb24gbmVlZGVkIGJ5IHJ1bGV1dGlscy5jICovCisJSnNvbkZv cm1hdCAqZm9ybWF0OworCisJLyoganNvcGF0aC12YWx1ZWQgZXhwcmVzc2lvbiBjb250YWluaW5n IHRoZSBxdWVyeSBwYXR0ZXJuICovCisJTm9kZQkgICAqcGF0aF9zcGVjOworCisJLyogRXhwZWN0 ZWQgdHlwZS9mb3JtYXQgb2YgdGhlIG91dHB1dC4gKi8KKwlKc29uUmV0dXJuaW5nICpyZXR1cm5p bmc7CisKKwkvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgUEFTU0lORyBhcmd1bWVudCBleHByZXNz aW9ucyAqLworCUxpc3QJICAgKnBhc3NpbmdfbmFtZXM7CisJTGlzdAkgICAqcGFzc2luZ192YWx1 ZXM7CisKKwkvKiBVc2Utc3BlY2lmaWVkIG9yIGRlZmF1bHQgT04gRU1QVFkgYW5kIE9OIEVSUk9S IGJlaGF2aW9ycyAqLworCUpzb25CZWhhdmlvciAqb25fZW1wdHk7CisJSnNvbkJlaGF2aW9yICpv bl9lcnJvcjsKKworCS8qCisJICogRXhwcmVzc2lvbiB0byBjb252ZXJ0IHRoZSByZXN1bHQgb2Yg SlNPTl8qIGZ1bmN0aW9uIHRvIHRoZQorCSAqIFJFVFVSTklORyB0eXBlCisJICovCisJTm9kZQkg ICAqcmVzdWx0X2NvZXJjaW9uOworCisJLyoKKwkgKiBMaXN0IG9mIGV4cHJlc3Npb25zIGZvciBj b2VyY2luZyBKU09OX1ZBTFVFKCkgcmVzdWx0IHZhbHVlcywgY29udGFpbmluZworCSAqIG9uZSBl bGVtZW50IGZvciBldmVyeSBKc29uSXRlbVR5cGUuCisJICovCisJTGlzdAkgICAqaXRlbV9jb2Vy Y2lvbnM7CisKKwkvKiBXUkFQUEVSIHNwZWNpZmljYXRpb24gZm9yIEpTT05fUVVFUlkgKi8KKwlK c29uV3JhcHBlciB3cmFwcGVyOworCisJLyogS0VFUCBvciBPTUlUIFFVT1RFUyBmb3Igc2luZ2xl dG9uIHNjYWxhcnMgcmV0dXJuZWQgYnkgSlNPTl9RVUVSWSgpICovCisJYm9vbAkJb21pdF9xdW90 ZXM7CisKKwkvKiBPcmlnaW5hbCBKc29uRnVuY0V4cHIncyBsb2NhdGlvbiAqLworCWludAkJCWxv Y2F0aW9uOworfSBKc29uRXhwcjsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICogTnVsbFRlc3QK ICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVk ZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggNTk4NGRjZmE0Yi4uMDk1NGQ5ZmM3YiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9r d2xpc3QuaApAQCAtOTMsNiArOTMsNyBAQCBQR19LRVlXT1JEKCJjb21taXQiLCBDT01NSVQsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbW1pdHRlZCIsIENP TU1JVFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29t cHJlc3Npb24iLCBDT01QUkVTU0lPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgiY29uY3VycmVudGx5IiwgQ09OQ1VSUkVOVExZLCBUWVBFX0ZVTkNfTkFNRV9L RVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiY29uZGl0aW9uYWwiLCBDT05ESVRJT05B TCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29uZmlndXJh dGlvbiIsIENPTkZJR1VSQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoImNvbmZsaWN0IiwgQ09ORkxJQ1QsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoImNvbm5lY3Rpb24iLCBDT05ORUNUSU9OLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0xNDcsMTEgKzE0OCwxMyBAQCBQR19LRVlXT1JEKCJkb3Vi bGUiLCBET1VCTEVfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgiZHJvcCIsIERST1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImVhY2giLCBFQUNILCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJlbHNlIiwgRUxTRSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdP UkQoImVtcHR5IiwgRU1QVFlfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgiZW5hYmxlIiwgRU5BQkxFX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoImVuY29kaW5nIiwgRU5DT0RJTkcsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuY3J5cHRlZCIsIEVOQ1JZUFRFRCwgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5kIiwgRU5EX1AsIFJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbnVtIiwgRU5VTV9QLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJlcnJvciIsIEVSUk9SX1AsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVzY2FwZSIsIEVTQ0FQ RSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZXZlbnQiLCBF VkVOVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZXhjZXB0 IiwgRVhDRVBULCBSRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKQEAgLTIzMywxMCArMjM2LDE0 IEBAIFBHX0tFWVdPUkQoImpvaW4iLCBKT0lOLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgianNvbiIsIEpTT04sIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX2FycmF5IiwgSlNPTl9BUlJBWSwgQ09MX05BTUVfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fYXJyYXlhZ2ciLCBKU09OX0FSUkFZ QUdHLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9leGlz dHMiLCBKU09OX0VYSVNUUywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImpzb25fb2JqZWN0IiwgSlNPTl9PQkpFQ1QsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJqc29uX29iamVjdGFnZyIsIEpTT05fT0JKRUNUQUdHLCBDT0xfTkFN RV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl9xdWVyeSIsIEpTT05fUVVF UlksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX3NjYWxh ciIsIEpTT05fU0NBTEFSLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgianNvbl9zZXJpYWxpemUiLCBKU09OX1NFUklBTElaRSwgQ09MX05BTUVfS0VZV09SRCwgQkFS RV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fdmFsdWUiLCBKU09OX1ZBTFVFLCBDT0xfTkFNRV9L RVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgia2VlcCIsIEtFRVAsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImtleSIsIEtFWSwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2V5cyIsIEtFWVMsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImxhYmVsIiwgTEFCRUwsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTMwMiw2ICszMDksNyBAQCBQR19LRVlXT1JEKCJv ZmYiLCBPRkYsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9m ZnNldCIsIE9GRlNFVCwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJv aWRzIiwgT0lEUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi b2xkIiwgT0xELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJv bWl0IiwgT01JVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi b24iLCBPTiwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJvbmx5Iiwg T05MWSwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm9wZXJhdG9y IiwgT1BFUkFUT1IsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTM0NCw2ICsz NTIsNyBAQCBQR19LRVlXT1JEKCJwcm9jZWR1cmVzIiwgUFJPQ0VEVVJFUywgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicHJvZ3JhbSIsIFBST0dSQU0sIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInB1YmxpY2F0aW9uIiwgUFVC TElDQVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInF1 b3RlIiwgUVVPVEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQo InF1b3RlcyIsIFFVT1RFUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgicmFuZ2UiLCBSQU5HRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgicmVhZCIsIFJFQUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoInJlYWwiLCBSRUFMLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAt NDE0LDYgKzQyMyw3IEBAIFBHX0tFWVdPUkQoInN0ZG91dCIsIFNURE9VVCwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3RvcmFnZSIsIFNUT1JBR0UsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN0b3JlZCIsIFNUT1JFRCwg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3RyaWN0IiwgU1RS SUNUX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInN0cmlu ZyIsIFNUUklOR19QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJzdHJpcCIsIFNUUklQX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoInN1YnNjcmlwdGlvbiIsIFNVQlNDUklQVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3Vic3RyaW5nIiwgU1VCU1RSSU5HLCBDT0xfTkFNRV9L RVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtNDQ5LDYgKzQ1OSw3IEBAIFBHX0tFWVdPUkQoInR5cGVz IiwgVFlQRVNfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi dWVzY2FwZSIsIFVFU0NBUEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoInVuYm91bmRlZCIsIFVOQk9VTkRFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgidW5jb21taXR0ZWQiLCBVTkNPTU1JVFRFRCwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgidW5jb25kaXRpb25hbCIsIFVOQ09ORElU SU9OQUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuZW5j cnlwdGVkIiwgVU5FTkNSWVBURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoInVuaW9uIiwgVU5JT04sIFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdf S0VZV09SRCgidW5pcXVlIiwgVU5JUVVFLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJhaWxlciBiL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIKaW5kZXggNDM1YzEzOWVjMi4u YjJhYTQ0ZjM2ZCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcu dHJhaWxlcgorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCkBA IC02NTEsNiArNjUxLDM0IEBAIHZhcl90eXBlOglzaW1wbGVfdHlwZQogCQkJJCQudHlwZV9pbmRl eCA9IG1tX3N0cmR1cCgiLTEiKTsKIAkJCSQkLnR5cGVfc2l6ZW9mID0gTlVMTDsKIAkJfQorCQl8 IFNUUklOR19QCisJCXsKKwkJCWlmIChJTkZPUk1JWF9NT0RFKQorCQkJeworCQkJCS8qIEluIElu Zm9ybWl4IG1vZGUsICJzdHJpbmciIGlzIGF1dG9tYXRpY2FsbHkgYSB0eXBlZGVmICovCisJCQkJ JCQudHlwZV9lbnVtID0gRUNQR3Rfc3RyaW5nOworCQkJCSQkLnR5cGVfc3RyID0gbW1fc3RyZHVw KCJjaGFyIik7CisJCQkJJCQudHlwZV9kaW1lbnNpb24gPSBtbV9zdHJkdXAoIi0xIik7CisJCQkJ JCQudHlwZV9pbmRleCA9IG1tX3N0cmR1cCgiLTEiKTsKKwkJCQkkJC50eXBlX3NpemVvZiA9IE5V TEw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogT3RoZXJ3aXNlLCBsZWdhbCBvbmx5IGlm IHVzZXIgdHlwZWRlZidlZCBpdCAqLworCQkJCXN0cnVjdCB0eXBlZGVmcyAqdGhpcyA9IGdldF90 eXBlZGVmKCJzdHJpbmciLCBmYWxzZSk7CisKKwkJCQkkJC50eXBlX3N0ciA9ICh0aGlzLT50eXBl LT50eXBlX2VudW0gPT0gRUNQR3RfdmFyY2hhciB8fCB0aGlzLT50eXBlLT50eXBlX2VudW0gPT0g RUNQR3RfYnl0ZWEpID8gRU1QVFkgOiBtbV9zdHJkdXAodGhpcy0+bmFtZSk7CisJCQkJJCQudHlw ZV9lbnVtID0gdGhpcy0+dHlwZS0+dHlwZV9lbnVtOworCQkJCSQkLnR5cGVfZGltZW5zaW9uID0g dGhpcy0+dHlwZS0+dHlwZV9kaW1lbnNpb247CisJCQkJJCQudHlwZV9pbmRleCA9IHRoaXMtPnR5 cGUtPnR5cGVfaW5kZXg7CisJCQkJaWYgKHRoaXMtPnR5cGUtPnR5cGVfc2l6ZW9mICYmIHN0cmxl bih0aGlzLT50eXBlLT50eXBlX3NpemVvZikgIT0gMCkKKwkJCQkJJCQudHlwZV9zaXplb2YgPSB0 aGlzLT50eXBlLT50eXBlX3NpemVvZjsKKwkJCQllbHNlCisJCQkJCSQkLnR5cGVfc2l6ZW9mID0g Y2F0X3N0cigzLCBtbV9zdHJkdXAoInNpemVvZigiKSwgbW1fc3RyZHVwKHRoaXMtPm5hbWUpLCBt bV9zdHJkdXAoIikiKSk7CisKKwkJCQlzdHJ1Y3RfbWVtYmVyX2xpc3Rbc3RydWN0X2xldmVsXSA9 IEVDUEdzdHJ1Y3RfbWVtYmVyX2R1cCh0aGlzLT5zdHJ1Y3RfbWVtYmVyX2xpc3QpOworCQkJfQor CQl9CiAJCXwgSU5URVJWQUwgZWNwZ19pbnRlcnZhbAogCQl7CiAJCQkkJC50eXBlX2VudW0gPSBF Q1BHdF9pbnRlcnZhbDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bl9zcWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbl9zcWxqc29uLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNGQ1Y2M3NGUzCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3NxbGpzb24ub3V0 CkBAIC0wLDAgKzEsMTggQEAKKy0tIEpTT05fRVhJU1RTCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVM TCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VSUk9SOiAgSlNPTl9FWElTVFMoKSBpcyBub3QgeWV0IGlt cGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCBKU09OX0VYSVNUUyhO VUxMIEZPUk1BVCBKU09OLCAnJCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorSElO VDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgorLS0gSlNPTl9WQUxVRQorU0VM RUNUIEpTT05fVkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VSUk9SOiAgSlNPTl9WQUxV RSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUKK0xJTkUgMTogU0VM RUNUIEpTT05fVkFMVUUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgorLS0g SlNPTl9RVUVSWQorU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKK0VS Uk9SOiAgSlNPTl9RVUVSWSgpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBqc29uIHR5 cGUKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVu dCB0byBqc29uYgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9z cWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTJlZjFjNjhkMQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQK QEAgLTAsMCArMSwxMDI2IEBACistLSBKU09OX0VYSVNUUworU0VMRUNUIEpTT05fRVhJU1RTKE5V TEw6Ompzb25iLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKyBqc29uX2V4aXN0cyAK Ky0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09OX09C SkVDVChSRVRVUk5JTkcganNvbmIpLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0t LQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQnKTsKKyBq c29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VY SVNUUyhqc29uYiAnbnVsbCcsICckJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKyBqc29u X2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAnMScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCiso MSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyk7IC0t IEZBTFNFIG9uIGVycm9yCisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1IgT04g RVJST1IpOworRVJST1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBw bGllZCB0byBhbiBvYmplY3QKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckLmEn KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAnW10nLCAnJC5hJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0t LS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1sxLCAiYWFhIiwg eyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJyb3IKKyBqc29uX2V4aXN0 cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4ICQuYScpOworIGpzb25fZXhpc3RzIAorLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7fScs ICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NF TEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJiIjogMSwgImEiOiAyfScsICckLmEnKTsKKyBqc29u X2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAnMScsICckLmEuYicpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYK KygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiB7ImIiOiAxfX0nLCAn JC5hLmInKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NF TEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLmEuYicpOworIGpz b25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJ U1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIDEg QVMgeCk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCkn IFBBU1NJTkcgJzEnIEFTIHgpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygx IHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQu KiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDIgQVMgeSk7CisganNvbl9l eGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMo anNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCAmJiBAIDwgJHkpJyBQQVNT SU5HIDAgQVMgeCwgMSBBUyB5KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCiso MSByb3cpCisKKy0tIGV4dGVuc2lvbjogYm9vbGVhbiBleHByZXNzaW9ucworU0VMRUNUIEpTT05f RVhJU1RTKGpzb25iICcxJywgJyQgPiAyJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicg RVJST1IgT04gRVJST1IpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKworLS0gSlNPTl9WQUxVRQorU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcg aW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgIAorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorIHRydWUKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3Ry dWUnLCAnJCcgUkVUVVJOSU5HIGJvb2wpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcpOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyAxMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKyA/Y29sdW1uPyAKKy0tLS0t LS0tLS0KKyAgICAgIDM1NworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIz JywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMTIz CisoMSByb3cpCisKKy8qIGpzb25iIGJ5dGVhID8/PyAqLworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEyMycsICckJyBSRVRVUk5JTkcgYnl0ZWEgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBT UUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMS4yMycsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEu MjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJO SU5HIGludCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgbnVt ZXJpYyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgIDEuMjMKKygxIHJvdykK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIzIicsICckJyBSRVRVUk5JTkcgaW50IEVS Uk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50 ZWdlcjogIjEuMjMiCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcpOworIGpz b25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBhYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcgY2hhcig1KSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQor IGFhYSAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBS RVRVUk5JTkcgY2hhcigyKSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGFhCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNv bik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbmIpOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gRVJST1IgT04gRVJST1IpOworIGpz b25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb25iIEVSUk9SIE9OIEVSUk9SKTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJyJcImFhYVwiIicsICckJyBSRVRVUk5JTkcganNvbik7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJcImFhYVwiIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnIlwiYWFhXCIiJywgJyQnIFJFVFVSTklORyBqc29uYik7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorICJcImFhYVwiIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGludCk7CisganNvbl92YWx1ZSAKKy0tLS0t LS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZh bGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiYWFhIgorU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQgREVGQVVMVCAxMTEgT04gRVJST1Ip OworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgMTExCisoMSByb3cpCisKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICciMTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgIDM1NworKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnIjIwMTctMDItMjAiJywgJyQnIFJFVFVSTklORyBkYXRlKSArIDk7Cisg ID9jb2x1bW4/ICAKKy0tLS0tLS0tLS0tLQorIDAzLTAxLTIwMTcKKygxIHJvdykKKworLS0gVGVz dCBOVUxMIGNoZWNrcyBleGVjdXRpb24gaW4gZG9tYWluIHR5cGVzCitDUkVBVEUgRE9NQUlOIHNx bGpzb25iX2ludF9ub3RfbnVsbCBBUyBpbnQgTk9UIE5VTEw7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKK0VSUk9S OiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVl cworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25i X2ludF9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9p bnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVM VCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzEnLCAgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxU IDIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAgICAgICAgICAyCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZ IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBk b2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworQ1JFQVRFIFRZUEUgcmFpbmJvdyBBUyBFTlVNICgn cmVkJywgJ29yYW5nZScsICd5ZWxsb3cnLCAnZ3JlZW4nLCAnYmx1ZScsICdwdXJwbGUnKTsKK0NS RUFURSBET01BSU4gcmdiIEFTIHJhaW5ib3cgQ0hFQ0sgKFZBTFVFIElOICgncmVkJywgJ2dyZWVu JywgJ2JsdWUnKSk7CitTRUxFQ1QgSlNPTl9WQUxVRSgnInB1cnBsZSInOjpqc29uYiwgJ2xheCAk WypdJyBSRVRVUk5JTkcgcmdiKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKCcicHVycGxlIic6Ompzb25iLCAnbGF4ICRbKl0nIFJF VFVSTklORyByZ2IgRVJST1IgT04gRVJST1IpOworRVJST1I6ICB2YWx1ZSBmb3IgZG9tYWluIHJn YiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJyZ2JfY2hlY2siCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnW10nLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQnIEVSUk9SIE9OIEVSUk9SKTsK K0VSUk9SOiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0dXJu IHNpbmdsZXRvbiBzY2FsYXIgaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQn KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIEpTT04gcGF0 aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2NhbGFy IGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScpOworIGpzb25fdmFsdWUg CistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEn LCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBqc29ucGF0aCBtZW1iZXIg YWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBvYmplY3QKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgJ2Vycm9yJyBPTiBFUlJPUik7Cisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGVycm9yCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8g U1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJS T1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBERUZBVUxUIDIgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgMiBPTiBFUlJPUik7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRVJST1IpOworIGpzb25fdmFsdWUg CistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJ2xheCAkLmEnIE5VTEwgT04gRU1QVFkgREVGQVVMVCAnMicgT04gRVJST1IpOworIGpzb25f dmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRU1QVFkgREVGQVVMVCAnMycgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIERFRkFVTFQgJzMn IE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgSlNPTiBwYXRo IGV4cHJlc3Npb24gaW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBzY2FsYXIg aXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1sxLDJdJywgJyRbKl0nIERFRkFVTFQgJzAn IE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIgIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBFUlJP UiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVn ZXI6ICIgIgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklO RyBpbnQgREVGQVVMVCAyICsgMyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICAgICAgICAgIDUKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siMSJd JywgJyRbKl0nIFJFVFVSTklORyBpbnQgREVGQVVMVCAyICsgMyBPTiBFUlJPUik7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRk9STUFUIEpTT04pOyAt LSBSRVRVUk5JTkcgRk9STUFUIG5vdCBhbGxvd2VkCitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IEZP Uk1BVCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mIEpTT05fVkFMVUUoKQorTElORSAxOiAuLi5DVCBK U09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU08u Li4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxvd2VkCitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIHJlY29yZCk7CitFUlJP UjogIHJldHVybmluZyBwc2V1ZG8tdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiBTUUwvSlNPTiBm dW5jdGlvbnMKK1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNvbmIgJ3siYSI6IDEsICJi IjogMn0nLAorCQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBBUyB4CisJCVJFVFVSTklORyBp bnQKKwkJREVGQVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxUIC0yIE9OIEVSUk9SCisJKSB5CitG Uk9NCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDIpIHg7CisgeCB8IHkgIAorLS0tKy0tLS0KKyAwIHwg LTIKKyAxIHwgIDIKKyAyIHwgLTEKKygzIHJvd3MpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSk7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorICgxLDIpCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcg cG9pbnQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAy ICknIEFTIGEgUkVUVVJOSU5HIHBvaW50IEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJvdykKKworLS0gVGVzdCBQQVNTSU5HIGFuZCBSRVRV Uk5JTkcgZGF0ZS90aW1lIHR5cGVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICck dHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7 CisgICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFR1ZSBGZWIgMjAgMTg6MzQ6NTYgMjAxOCBQU1QKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4 LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcHR6KTsKKyAgICAg ICAgICBqc29uX3ZhbHVlICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgVHVlIEZlYiAyMCAxODozNDo1NiAyMDE4IFBTVAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEg MTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKKyAgICAgICAganNvbl92 YWx1ZSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFR1ZSBGZWIgMjAgMTg6 MzQ6NTYgMjAxOAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICck dHMnIFBBU1NJTkcgZGF0ZSAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklO RyBkYXRlKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMDItMjEtMjAxOAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZSAn MjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgMTI6MzQ6NTYKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWV0eiAnMjAxOC0wMi0yMSAxMjozNDo1 NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1ldHopOworIGpzb25fdmFsdWUgIAorLS0tLS0tLS0t LS0tLQorIDEyOjM0OjU2KzEwCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXAgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBB UyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKKyAgICAgICAganNvbl92YWx1ZSAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdlZCBGZWIgMjEgMTI6MzQ6NTYgMjAxOAorKDEg cm93KQorCistLSBBbHNvIHRlc3QgUkVUVVJOSU5HIGpzb25bYl0KK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjoz NDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uKTsKKyAgICAgICAgIGpzb25fdmFsdWUgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0 OjU2KzAwOjAwIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICck dHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBS RVRVUk5JTkcganNvbmIpOworICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSBy b3cpCisKKy0tIEpTT05fUVVFUlkKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICckJyksCisJSlNP Tl9RVUVSWShqcywgJyQnIFdJVEhPVVQgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJ VEggQ09ORElUSU9OQUwgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05E SVRJT05BTCBBUlJBWSBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJBWSBX UkFQUEVSKQorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICdudWxsJyksCisJCSgnMTIuMycpLAor CQkoJ3RydWUnKSwKKwkJKCciYWFhIicpLAorCQkoJ1sxLCBudWxsLCAiMiJdJyksCisJCSgneyJh IjogMSwgImIiOiBbMl19JykKKwkpIGZvbyhqcyk7CisgICAgIGpzb25fcXVlcnkgICAgIHwgICAg IGpzb25fcXVlcnkgICAgIHwgICAgIGpzb25fcXVlcnkgICAgIHwgICAgICBqc29uX3F1ZXJ5ICAg ICAgfCAgICAgIGpzb25fcXVlcnkgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG51bGwgICAgICAgICAgICAgICB8IG51bGwgICAgICAg ICAgICAgICB8IFtudWxsXSAgICAgICAgICAgICB8IFtudWxsXSAgICAgICAgICAgICAgIHwgW251 bGxdCisgMTIuMyAgICAgICAgICAgICAgIHwgMTIuMyAgICAgICAgICAgICAgIHwgWzEyLjNdICAg ICAgICAgICAgIHwgWzEyLjNdICAgICAgICAgICAgICAgfCBbMTIuM10KKyB0cnVlICAgICAgICAg ICAgICAgfCB0cnVlICAgICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAgICAgfCBbdHJ1ZV0g ICAgICAgICAgICAgICB8IFt0cnVlXQorICJhYWEiICAgICAgICAgICAgICB8ICJhYWEiICAgICAg ICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICAgIHwgWyJh YWEiXQorIFsxLCBudWxsLCAiMiJdICAgICB8IFsxLCBudWxsLCAiMiJdICAgICB8IFsxLCBudWxs LCAiMiJdICAgICB8IFtbMSwgbnVsbCwgIjIiXV0gICAgIHwgW1sxLCBudWxsLCAiMiJdXQorIHsi YSI6IDEsICJiIjogWzJdfSB8IHsiYSI6IDEsICJiIjogWzJdfSB8IHsiYSI6IDEsICJiIjogWzJd fSB8IFt7ImEiOiAxLCAiYiI6IFsyXX1dIHwgW3siYSI6IDEsICJiIjogWzJdfV0KKyg2IHJvd3Mp CisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScpIEFTICJ1bnNwZWMiLAor CUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSE9VVCBXUkFQUEVSKSBBUyAid2l0aG91 dCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQ RVIpIEFTICJ3aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBV TkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIHVuY29uZCIsCisJSlNPTl9RVUVS WShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIgorRlJPTQor CShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgnW10nKSwKKwkJKCdbbnVsbF0nKSwKKwkJKCdb MTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJdJyksCisJCSgnW1sxLCAyLCAzXV0n KSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScpLAorCQkoJ1sxLCAiMiIsIG51bGwsIFszXV0n KQorCSkgZm9vKGpzKTsKKyAgICAgICB1bnNwZWMgICAgICAgfCAgICAgIHdpdGhvdXQgICAgICAg fCAgICAgIHdpdGggY29uZCAgICAgIHwgICAgIHdpdGggdW5jb25kICAgICAgfCAgICAgICAgIHdp dGggICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgfCAKKyBudWxsICAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgICAg ICAgfCBbbnVsbF0gICAgICAgICAgICAgIHwgW251bGxdICAgICAgICAgICAgICAgfCBbbnVsbF0K KyAxMi4zICAgICAgICAgICAgICAgfCAxMi4zICAgICAgICAgICAgICAgfCBbMTIuM10gICAgICAg ICAgICAgIHwgWzEyLjNdICAgICAgICAgICAgICAgfCBbMTIuM10KKyB0cnVlICAgICAgICAgICAg ICAgfCB0cnVlICAgICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAgICAgIHwgW3RydWVdICAg ICAgICAgICAgICAgfCBbdHJ1ZV0KKyAiYWFhIiAgICAgICAgICAgICAgfCAiYWFhIiAgICAgICAg ICAgICAgfCBbImFhYSJdICAgICAgICAgICAgIHwgWyJhYWEiXSAgICAgICAgICAgICAgfCBbImFh YSJdCisgWzEsIDIsIDNdICAgICAgICAgIHwgWzEsIDIsIDNdICAgICAgICAgIHwgWzEsIDIsIDNd ICAgICAgICAgICB8IFtbMSwgMiwgM11dICAgICAgICAgIHwgW1sxLCAyLCAzXV0KKyB7ImEiOiAx LCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gIHwg W3siYSI6IDEsICJiIjogWzJdfV0gfCBbeyJhIjogMSwgImIiOiBbMl19XQorICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8IFsxLCAiMiIsIG51bGwsIFszXV0gfCBbMSwg IjIiLCBudWxsLCBbM11dICB8IFsxLCAiMiIsIG51bGwsIFszXV0KKyg5IHJvd3MpCisKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCk7CisganNvbl9x dWVyeSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CisganNvbl9x dWVyeSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyBPTiBTQ0FMQVIg U1RSSU5HKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0IE9NSVQg UVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBPTUlUIFFV T1RFUyBPTiBTQ0FMQVIgU1RSSU5HKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgYWFh CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBPTUlUIFFV T1RFUyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0 eXBlIGpzb24KK0RFVEFJTDogIFRva2VuICJhYWEiIGlzIGludmFsaWQuCitDT05URVhUOiAgSlNP TiBkYXRhLCBsaW5lIDE6IGFhYQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQn IFJFVFVSTklORyBqc29uIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUganNvbgorREVUQUlMOiAgVG9rZW4gImFhYSIgaXMg aW52YWxpZC4KK0NPTlRFWFQ6ICBKU09OIGRhdGEsIGxpbmUgMTogYWFhCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQg UVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgXHg2 MTYxNjEKKygxIHJvdykKKworLS0gUVVPVEVTIGJlaGF2aW9yIHNob3VsZCBub3QgYmUgc3BlY2lm aWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6CistLSBTaG91bGQgZmFpbAorU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9URVMpOworRVJST1I6 ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lU SCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScs ICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9URVMpLi4uCisgICAgICAgICAgICAgICBeCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RFUyk7 CitFUlJPUjogIFNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQg d2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZAorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RFUykuLi4KKyAgICAgICAgICAgICAg IF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJT05BTCBX UkFQUEVSIEtFRVAgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVPVEVTIGJlaGF2aW9yIG11 c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkCitMSU5FIDE6IFNF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVS IC4uLgorICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICck JyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgT01JVCBRVU9URVMpOworRVJST1I6ICBTUUwvSlNP TiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVS IGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRI IENPTkRJVElPTkFMIFdSQVBQRVIgLi4uCisgICAgICAgICAgICAgICBeCistLSBTaG91bGQgc3Vj Y2VlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIT1VUIFdSQVBQRVIg T01JVCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMV0KKygxIHJvdykK KworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIT1VUIFdSQVBQRVIgS0VF UCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMV0KKygxIHJvdykKKwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nKTsKKyBqc29uX3F1ZXJ5IAorLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBOVUxMIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBPTiBFTVBU WSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBBUlJBWSBPTiBFTVBUWSk7CisganNv bl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbXScsICckWypdJyBFTVBUWSBPQkpFQ1QgT04gRU1QVFkpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04g RU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAiZW1wdHkiCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBOVUxM IE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVNUFRZIEFSUkFZIE9OIEVSUk9SKTsK K0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywg JyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIG5v IFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJP UiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJP UjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICck WypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpT T05fUVVFUlkgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gaXRlbSB3aXRob3V0IHdyYXBwZXIKK0hJ TlQ6ICBVc2UgV0lUSCBXUkFQUEVSIGNsYXVzZSB0byB3cmFwIFNRTC9KU09OIGl0ZW0gc2VxdWVu Y2UgaW50byBhcnJheS4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBE RUZBVUxUICciZW1wdHkiJyBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor ICJlbXB0eSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQn IFJFVFVSTklORyBqc29uKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCiso MSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcg anNvbiBGT1JNQVQgSlNPTik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5H IGpzb25iKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIgRk9S TUFUIEpTT04pOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykK KworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyB0ZXh0KTsK KyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgY2hhcigxMCkpOworIGpzb25f cXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwgMl0gICAgCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcgY2hhcigzKSk7CisganNvbl9xdWVy eSAKKy0tLS0tLS0tLS0tLQorIFsxLAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04pOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBieXRlYSk7CisgICBqc29uX3F1ZXJ5ICAgCistLS0t LS0tLS0tLS0tLS0tCisgXHg1YjMxMmMyMDMyNWQKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTik7CisgICBq c29uX3F1ZXJ5ICAgCistLS0tLS0tLS0tLS0tLS0tCisgXHg1YjMxMmMyMDMyNWQKKygxIHJvdykK KworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRl YSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworRVJST1I6ICBjYW5ub3QgY2FzdCBiZWhhdmlvciBl eHByZXNzaW9uIG9mIHR5cGUganNvbmIgdG8gYnl0ZWEKK0xJTkUgMTogLi4uIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBUWSBPQkpFLi4uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRl YSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworRVJST1I6ICBjYW5ub3QgY2Fz dCBiZWhhdmlvciBleHByZXNzaW9uIG9mIHR5cGUganNvbmIgdG8gYnl0ZWEKK0xJTkUgMTogLi4u anNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBP QkpFLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJF VFVSTklORyBqc29uIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIHt9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckWypdJyBSRVRVUk5JTkcganNvbmIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKyBqc29uX3F1 ZXJ5IAorLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1szLDRdJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFQ1QgT04gRVJS T1IpOworRVJST1I6ICBjYW5ub3QgY2FzdCBiZWhhdmlvciBleHByZXNzaW9uIG9mIHR5cGUganNv bmIgdG8gYmlnaW50W10KK0xJTkUgMTogLi4uT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0n IFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJyJbMyw0XSInLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkVD VCBPTiBFUlJPUik7CitFUlJPUjogIGNhbm5vdCBjYXN0IGJlaGF2aW9yIGV4cHJlc3Npb24gb2Yg dHlwZSBqc29uYiB0byBiaWdpbnRbXQorTElORSAxOiAuLi5fUVVFUlkoanNvbmIgJyJbMyw0XSIn LCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkUuLi4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBSRVRV R05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxvd2VkCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn WzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGFueWFycmF5IEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7 CitFUlJPUjogIHJldHVybmluZyBwc2V1ZG8tdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiBTUUwv SlNPTiBmdW5jdGlvbnMKK1NFTEVDVAorCXgsIHksCisJSlNPTl9RVUVSWSgKKwkJanNvbmIgJ1sx LDIsMyw0LDUsbnVsbF0nLAorCQknJFsqXSA/IChAID49ICR4ICYmIEAgPD0gJHkpJworCQlQQVNT SU5HIHggQVMgeCwgeSBBUyB5CisJCVdJVEggQ09ORElUSU9OQUwgV1JBUFBFUgorCQlFTVBUWSBB UlJBWSBPTiBFTVBUWQorCSkgbGlzdAorRlJPTQorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB4LAor CWdlbmVyYXRlX3NlcmllcygwLCA0KSB5OworIHggfCB5IHwgICAgIGxpc3QgICAgIAorLS0tKy0t LSstLS0tLS0tLS0tLS0tLQorIDAgfCAwIHwgW10KKyAwIHwgMSB8IFsxXQorIDAgfCAyIHwgWzEs IDJdCisgMCB8IDMgfCBbMSwgMiwgM10KKyAwIHwgNCB8IFsxLCAyLCAzLCA0XQorIDEgfCAwIHwg W10KKyAxIHwgMSB8IFsxXQorIDEgfCAyIHwgWzEsIDJdCisgMSB8IDMgfCBbMSwgMiwgM10KKyAx IHwgNCB8IFsxLCAyLCAzLCA0XQorIDIgfCAwIHwgW10KKyAyIHwgMSB8IFtdCisgMiB8IDIgfCBb Ml0KKyAyIHwgMyB8IFsyLCAzXQorIDIgfCA0IHwgWzIsIDMsIDRdCisgMyB8IDAgfCBbXQorIDMg fCAxIHwgW10KKyAzIHwgMiB8IFtdCisgMyB8IDMgfCBbM10KKyAzIHwgNCB8IFszLCA0XQorIDQg fCAwIHwgW10KKyA0IHwgMSB8IFtdCisgNCB8IDIgfCBbXQorIDQgfCAzIHwgW10KKyA0IHwgNCB8 IFs0XQorKDI1IHJvd3MpCisKKy0tIEV4dGVuc2lvbjogcmVjb3JkIHR5cGVzIHJldHVybmluZwor Q1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0LCBqcyBqc29uLCBqYiBq c29uYiwganNhIGpzb25bXSk7CitDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWNhIEFTIChyZWNhIHNx bGpzb25iX3JlY1tdKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAi Zm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIi LCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKKyAg ICAgICAgICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICgxLGFh YSwiWzEsICIiMiIiLCB7fV0iLCJ7IiJ4IiI6IFsxLCAiIjIiIiwge31dfSIsKQorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAi YWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsi YSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjIEVSUk9SIE9OIEVSUk9SKTsK K0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImEiCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwg ImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9 XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpz b25iICd7ImpzYSI6ICBbeyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMiOiB7fX0s IDEyM119JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2EpOworICAgICAgICAgdW5u ZXN0ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAxLCAiYiI6IFsi Zm9vIl19CisgeyJhIjogMiwgImMiOiB7fX0KKyAxMjMKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZS T00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7InJlY2EiOiBbeyJhIjogMSwgInQiOiBbImZv byIsIFtdXX0sIHsiYSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XX0nLCAnJCcgUkVUVVJOSU5HIHNx bGpzb25iX3JlY2EpKS5yZWNhKTsKKyBhIHwgICAgICB0ICAgICAgfCBqcyB8ICAgICBqYiAgICAg fCBqc2EgCistLS0rLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLSstLS0tLQorIDEgfCBb ImZvbyIsIFtdXSB8ICAgIHwgICAgICAgICAgICB8IAorIDIgfCAgICAgICAgICAgICB8ICAgIHwg W3t9LCB0cnVlXSB8IAorKDIgcm93cykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEi OiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsi eCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBqc29ucGF0 aCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsx LCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFsw XScgUkVUVVJOSU5HIGpzb25wYXRoIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgc3ludGF4IGVy cm9yIGF0IG9yIG5lYXIgInsiIG9mIGpzb25wYXRoIGlucHV0CistLSBFeHRlbnNpb246IGFycmF5 IHR5cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiMyJd JywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOworICBqc29uX3F1ZXJ5ICAK Ky0tLS0tLS0tLS0tLS0tCisgezEsMixOVUxMLDN9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMSwyLG51bGwsImEiXScsICckWypdJyBSRVRVUk5JTkcgaW50W10gV0lUSCBX UkFQUEVSIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9y IHR5cGUgaW50ZWdlcjogImEiCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCJh Il0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CisganNvbl9xdWVyeSAK Ky0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdChKU09OX1FV RVJZKGpzb25iICdbeyJhIjogMSwgInQiOiBbImZvbyIsIFtdXX0sIHsiYSI6IDIsICJqYiI6IFt7 fSwgdHJ1ZV19XScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjW10pKTsKKyBhIHwgICAgICB0 ICAgICAgfCBqcyB8ICAgICBqYiAgICAgfCBqc2EgCistLS0rLS0tLS0tLS0tLS0tLSstLS0tKy0t LS0tLS0tLS0tLSstLS0tLQorIDEgfCBbImZvbyIsIFtdXSB8ICAgIHwgICAgICAgICAgICB8IAor IDIgfCAgICAgICAgICAgICB8ICAgIHwgW3t9LCB0cnVlXSB8IAorKDIgcm93cykKKworLS0gRXh0 ZW5zaW9uOiBkb21haW4gdHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn eyJhIjogMX0nLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKKyBqc29u X3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25v dF9udWxsKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBh bGxvdyBudWxsIHZhbHVlcworLS0gVGVzdCB0aW1lc3RhbXB0eiBwYXNzaW5nIGFuZCBvdXRwdXQK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0 eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKKyAgICAgICAgIGpzb25fcXVlcnkg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAy OjM0OjU2KzAwOjAwIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcs ICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0 cyBSRVRVUk5JTkcganNvbik7CisgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygx IHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRp bWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb25i KTsKKyAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAwIgorKDEgcm93KQorCistLSBUZXN0 IGNvbnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJhaW50cyAoCisJanMg dGV4dCwKKwlpIGludCwKKwl4IGpzb25iIERFRkFVTFQgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0n LCAnJFsqXScgV0lUSCBXUkFQUEVSKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50 MQorCQlDSEVDSyAoanMgSVMgSlNPTikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWlu dDIKKwkJQ0hFQ0sgKEpTT05fRVhJU1RTKGpzOjpqc29uYiwgJyQuYScgUEFTU0lORyBpICsgNSBB UyBpbnQsIGk6OnRleHQgQVMgdHh0LCBhcnJheVsxLDIsM10gYXMgYXJyKSkKKwlDT05TVFJBSU5U IHRlc3RfanNvbmJfY29uc3RyYWludDMKKwkJQ0hFQ0sgKEpTT05fVkFMVUUoanM6Ompzb25iLCAn JC5hJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJzEyJyBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikg PiBpKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50NAorCQlDSEVDSyAoSlNPTl9R VUVSWShqczo6anNvbmIsICckLmEnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpF Q1QgT04gRVJST1IpIDwganNvbmIgJ1sxMF0nKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25z dHJhaW50NQorCQlDSEVDSyAoSlNPTl9RVUVSWShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBj aGFyKDUpIE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9OIEVNUFRZKSA+ICAnYScgQ09MTEFURSAi QyIpCispOworXGQgdGVzdF9qc29uYl9jb25zdHJhaW50cworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0X2pzb25iX2NvbnN0cmFpbnRz IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisganMgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAg ICAgICAgIHwgCisgaSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisg eCAgICAgIHwganNvbmIgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgSlNPTl9RVUVSWSgnWzEs IDJdJzo6anNvbmIsICckWypdJyBSRVRVUk5JTkcganNvbmIgV0lUSCBVTkNPTkRJVElPTkFMIFdS QVBQRVIpCitDaGVjayBjb25zdHJhaW50czoKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MSIg Q0hFQ0sgKGpzIElTIEpTT04pCisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDIiIENIRUNLIChK U09OX0VYSVNUUyhqczo6anNvbmIsICckLiJhIicgUEFTU0lORyBpICsgNSBBUyBpbnQsIGk6OnRl eHQgQVMgdHh0LCBBUlJBWVsxLCAyLCAzXSBBUyBhcnIpKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0 cmFpbnQzIiBDSEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGlu dGVnZXIgREVGQVVMVCAxMiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBpKQorICAgICJ0ZXN0 X2pzb25iX2NvbnN0cmFpbnQ0IiBDSEVDSyAoSlNPTl9RVUVSWShqczo6anNvbmIsICckLiJhIicg UkVUVVJOSU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpFQ1QgT04g RVJST1IpIDwgJ1sxMF0nOjpqc29uYikKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50NSIgQ0hF Q0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBjaGFyYWN0ZXIoNSkg T01JVCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gKCdhJzo6YnBjaGFyIENPTExBVEUg IkMiKSkKKworU0VMRUNUIGNoZWNrX2NsYXVzZQorRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY2hl Y2tfY29uc3RyYWludHMKK1dIRVJFIGNvbnN0cmFpbnRfbmFtZSBMSUtFICd0ZXN0X2pzb25iX2Nv bnN0cmFpbnQlJworT1JERVIgQlkgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2NsYXVzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKEpTT05fUVVFUlkoKGpz KTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGNoYXJhY3Rlcig1KSBPTUlUIFFVT1RFUyBFTVBU WSBBUlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpicGNoYXIgQ09MTEFURSAiQyIpKQorIChKU09OX1FV RVJZKChqcyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBqc29uYiBXSVRIIENPTkRJVElPTkFM IFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8ICdbMTBdJzo6anNvbmIpCisgKEpTT05f VkFMVUUoKGpzKTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgREVGQVVMVCAxMiBP TiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBpKQorIChqcyBJUyBKU09OKQorIEpTT05fRVhJU1RT KChqcyk6Ompzb25iLCAnJC4iYSInIFBBU1NJTkcgKGkgKyA1KSBBUyBpbnQsIChpKTo6dGV4dCBB UyB0eHQsIEFSUkFZWzEsIDIsIDNdIEFTIGFycikKKyg1IHJvd3MpCisKK1NFTEVDVCBwZ19nZXRf ZXhwcihhZGJpbiwgYWRyZWxpZCkKK0ZST00gcGdfYXR0cmRlZgorV0hFUkUgYWRyZWxpZCA9ICd0 ZXN0X2pzb25iX2NvbnN0cmFpbnRzJzo6cmVnY2xhc3MKK09SREVSIEJZIDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBKU09OX1FVRVJZKCdbMSwg Ml0nOjpqc29uYiwgJyRbKl0nIFJFVFVSTklORyBqc29uYiBXSVRIIFVOQ09ORElUSU9OQUwgV1JB UFBFUikKKygxIHJvdykKKworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxV RVMgKCcnLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29u c3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWlu dDEiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoLCAxLCBbMSwgMl0pLgorSU5TRVJU IElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcxJywgMSk7CitFUlJPUjogIG5l dyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQyIgorREVUQUlMOiAgRmFpbGluZyBy b3cgY29udGFpbnMgKDEsIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzIFZBTFVFUyAoJ1tdJyk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0 X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25i X2NvbnN0cmFpbnQyIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKFtdLCBudWxsLCBb MSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImIi OiAxfScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25z dHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50 MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICh7ImIiOiAxfSwgMSwgWzEsIDJdKS4K K0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgneyJhIjogMX0nLCAx KTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDMiCitERVRB SUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoeyJhIjogMX0sIDEsIFsxLCAyXSkuCitJTlNFUlQg SU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDd9JywgMSk7CitFUlJP UjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1IgorREVUQUlMOiAgRmFp bGluZyByb3cgY29udGFpbnMgKHsiYSI6IDd9LCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVz dF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKK0VSUk9SOiAgbmV3 IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNr IGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDQiCitERVRBSUw6ICBGYWlsaW5nIHJv dyBjb250YWlucyAoeyJhIjogMTB9LCAxLCBbMSwgMl0pLgorRFJPUCBUQUJMRSB0ZXN0X2pzb25i X2NvbnN0cmFpbnRzOworLS0gVGVzdCBtdXRhYmlsaWx5IG9mIHF1ZXJ5IGZ1bmN0aW9ucworQ1JF QVRFIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eShqcyBqc29uYik7CitDUkVBVEUgSU5ERVgg T04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJCcpKTsKK0NSRUFURSBJ TkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmFbMF0nKSk7 CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5kYXRldGltZSgpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAo SlNPTl9RVUVSWShqcywgJyQuYSA/IChAIDwgJC5kYXRldGltZSgpKScpKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRl dGltZSgpIDwgJC5kYXRldGltZSgpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4 cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQu ZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4 cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1J IFRaSCIpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRl c3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJI SDpNSSIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVgg T04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRp bWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitFUlJP UjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJM RQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywg JyQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFT IHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR5JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0 eiBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgp KTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQg SU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyMzQnOjppbnQgQVMgeCkpOwor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu ZGF0ZXRpbWUoKSA/IChAID09ICR4KScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0VS Uk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRB QkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpz LCAnJC5kYXRldGltZSgiWVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0x NCc6OmRhdGUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAo SlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5H ICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVz c2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25i X211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUo KSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlv bnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJ TkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/ IChALmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4 KSk7CitEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlCmluZGV4IGYwOTg3ZmY1MzcuLjg2NGJmMDRmZTcgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJh bGxlbF9zY2hlZHVsZQpAQCAtMTAzLDcgKzEwMyw3IEBAIHRlc3Q6IHNlbGVjdF92aWV3cyBwb3J0 YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5jeSBndWMgYml0bWFwb3BzIGNvbWJv CiAjIC0tLS0tLS0tLS0KICMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cyAoSlNPTiBy ZWxhdGVkKQogIyAtLS0tLS0tLS0tCi10ZXN0OiBqc29uIGpzb25iIGpzb25fZW5jb2RpbmcganNv bnBhdGgganNvbnBhdGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNvbgordGVzdDoganNv biBqc29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pz b25wYXRoIHNxbGpzb24ganNvbl9zcWxqc29uIGpzb25iX3NxbGpzb24KIAogIyAtLS0tLS0tLS0t CiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2pzb25fc3FsanNvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29u X3NxbGpzb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRmMzBm YTQ2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpz b24uc3FsCkBAIC0wLDAgKzEsMTEgQEAKKy0tIEpTT05fRVhJU1RTCisKK1NFTEVDVCBKU09OX0VY SVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCistLSBKU09OX1ZBTFVFCisKK1NFTEVDVCBK U09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICckJyk7CisKKy0tIEpTT05fUVVFUlkKKworU0VM RUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv anNvbmJfc3FsanNvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NjJiMjAwYWEwZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25i X3NxbGpzb24uc3FsCkBAIC0wLDAgKzEsMzM1IEBACistLSBKU09OX0VYSVNUUworU0VMRUNUIEpT T05fRVhJU1RTKE5VTEw6Ompzb25iLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J1tdJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09OX09CSkVDVChSRVRVUk5JTkcganNv bmIpLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJCcpOworU0VMRUNU IEpTT05fRVhJU1RTKGpzb25iICdudWxsJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAnW10nLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hJyk7CitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScpOyAtLSBGQUxTRSBvbiBl cnJvcgorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIEVSUk9SIE9O IEVSUk9SKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckLmEnKTsKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJ1sxLCAiYWFhIiwgeyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJy b3IKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4 ICQuYScpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7fScsICckLmEnKTsKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAneyJiIjogMSwgImEiOiAyfScsICckLmEnKTsKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJyQuYS5iJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J3siYSI6IHsiYiI6IDF9fScsICckLmEuYicpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7 ImEiOiAxLCAiYiI6IDJ9JywgJyQuYS5iJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAn eyJhIjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAxIEFTIHgpOworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgp JyBQQVNTSU5HICcxJyBBUyB4KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwg ImIiOiAyfScsICckLiogPyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4LCAyIEFT IHkpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/ IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAwIEFTIHgsIDEgQVMgeSk7CisKKy0tIGV4dGVu c2lvbjogYm9vbGVhbiBleHByZXNzaW9ucworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywg JyQgPiAyJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1Ig T04gRVJST1IpOworCistLSBKU09OX1ZBTFVFCisKK1NFTEVDVCBKU09OX1ZBTFVFKE5VTEw6Ompz b25iLCAnJCcpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyk7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgaW50KTsKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ3RydWUnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J3RydWUnLCAnJCcgUkVUVVJOSU5HIGJvb2wpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn MTIzJywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5H IGludCkgKyAyMzQ7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklO RyB0ZXh0KTsKKy8qIGpzb25iIGJ5dGVhID8/PyAqLworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzEyMycsICckJyBSRVRVUk5JTkcgYnl0ZWEgRVJST1IgT04gRVJST1IpOworCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMS4yMycsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4y MycsICckJyBSRVRVUk5JTkcgaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMS4yMyIn LCAnJCcgUkVUVVJOSU5HIG51bWVyaWMpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIz IicsICckJyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyJhYWEiJywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIics ICckJyBSRVRVUk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIGNoYXIoNSkpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywg JyQnIFJFVFVSTklORyBjaGFyKDIpKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIics ICckJyBSRVRVUk5JTkcganNvbik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICck JyBSRVRVUk5JTkcganNvbiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb25iIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICciXCJhYWFcIiInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyJcImFhYVwiIicsICckJyBSRVRVUk5JTkcganNvbmIpOworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBpbnQg REVGQVVMVCAxMTEgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxMjMiJywg JyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjIw MTctMDItMjAiJywgJyQnIFJFVFVSTklORyBkYXRlKSArIDk7CisKKy0tIFRlc3QgTlVMTCBjaGVj a3MgZXhlY3V0aW9uIGluIGRvbWFpbiB0eXBlcworQ1JFQVRFIERPTUFJTiBzcWxqc29uYl9pbnRf bm90X251bGwgQVMgaW50IE5PVCBOVUxMOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIEVSUk9S IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklO RyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9S KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgICckLmEnIFJFVFVSTklORyBzcWxqc29u Yl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICcxJywgICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90 X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0NSRUFURSBUWVBF IHJhaW5ib3cgQVMgRU5VTSAoJ3JlZCcsICdvcmFuZ2UnLCAneWVsbG93JywgJ2dyZWVuJywgJ2Js dWUnLCAncHVycGxlJyk7CitDUkVBVEUgRE9NQUlOIHJnYiBBUyByYWluYm93IENIRUNLIChWQUxV RSBJTiAoJ3JlZCcsICdncmVlbicsICdibHVlJykpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJw bGUiJzo6anNvbmIsICdsYXggJFsqXScgUkVUVVJOSU5HIHJnYik7CitTRUxFQ1QgSlNPTl9WQUxV RSgnInB1cnBsZSInOjpqc29uYiwgJ2xheCAkWypdJyBSRVRVUk5JTkcgcmdiIEVSUk9SIE9OIEVS Uk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQnKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdbXScsICckJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAne30nLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnIEVS Uk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBERUZBVUxUICdlcnJv cicgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJS T1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgRVJS T1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEn LCAnc3RyaWN0ICQuYScgREVGQVVMVCAyIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgMiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBOVUxMIE9OIEVNUFRZIERFRkFVTFQgJzInIE9O IEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQg JzInIE9OIEVNUFRZIERFRkFVTFQgJzMnIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIERFRkFVTFQgJzMnIE9OIEVSUk9SKTsK KworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9S KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICcwJyBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIgIl0nLCAnJFsqXScgUkVUVVJO SU5HIGludCBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIgIl0n LCAnJFsqXScgUkVUVVJOSU5HIGludCBERUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMiAr IDMgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJF VFVSTklORyBpbnQgRk9STUFUIEpTT04pOyAtLSBSRVRVUk5JTkcgRk9STUFUIG5vdCBhbGxvd2Vk CisKKy0tIFJFVFVHTklORyBwc2V1ZG8tdHlwZXMgbm90IGFsbG93ZWQKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgcmVjb3JkKTsKKworU0VMRUNUCisJ eCwKKwlKU09OX1ZBTFVFKAorCQlqc29uYiAneyJhIjogMSwgImIiOiAyfScsCisJCSckLiogPyAo QCA+ICR4KScgUEFTU0lORyB4IEFTIHgKKwkJUkVUVVJOSU5HIGludAorCQlERUZBVUxUIC0xIE9O IEVNUFRZCisJCURFRkFVTFQgLTIgT04gRVJST1IKKwkpIHkKK0ZST00KKwlnZW5lcmF0ZV9zZXJp ZXMoMCwgMikgeDsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJ TkcgcG9pbnQgJyAoMSwgMiApJyBBUyBhKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxs JywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwg MiApJyBBUyBhIFJFVFVSTklORyBwb2ludCBFUlJPUiBPTiBFUlJPUik7CisKKy0tIFRlc3QgUEFT U0lORyBhbmQgUkVUVVJOSU5HIGRhdGUvdGltZSB0eXBlcworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2 ICsxMCcgQVMgdHMpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNT SU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5H IHRpbWVzdGFtcHR6KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFT U0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklO RyB0aW1lc3RhbXApOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNT SU5HIGRhdGUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgZGF0ZSk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZSAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1ldHogJzIwMTgtMDItMjEgMTI6 MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXR6KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXAgJzIwMTgtMDItMjEgMTI6MzQ6NTYg KzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKKworLS0gQWxzbyB0ZXN0IFJFVFVSTklO RyBqc29uW2JdCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcg dGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNv bik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0 YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOwor CistLSBKU09OX1FVRVJZCisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICckJyksCisJSlNPTl9R VUVSWShqcywgJyQnIFdJVEhPVVQgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEgg Q09ORElUSU9OQUwgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05ESVRJ T05BTCBBUlJBWSBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJBWSBXUkFQ UEVSKQorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICdudWxsJyksCisJCSgnMTIuMycpLAorCQko J3RydWUnKSwKKwkJKCciYWFhIicpLAorCQkoJ1sxLCBudWxsLCAiMiJdJyksCisJCSgneyJhIjog MSwgImIiOiBbMl19JykKKwkpIGZvbyhqcyk7CisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICdz dHJpY3QgJFsqXScpIEFTICJ1bnNwZWMiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScg V0lUSE9VVCBXUkFQUEVSKSBBUyAid2l0aG91dCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAk WypdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIpIEFTICJ3aXRoIGNvbmQiLAorCUpTT05fUVVF UlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFT ICJ3aXRoIHVuY29uZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZ IFdSQVBQRVIpIEFTICJ3aXRoIgorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgn W10nKSwKKwkJKCdbbnVsbF0nKSwKKwkJKCdbMTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdb ImFhYSJdJyksCisJCSgnW1sxLCAyLCAzXV0nKSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScp LAorCQkoJ1sxLCAiMiIsIG51bGwsIFszXV0nKQorCSkgZm9vKGpzKTsKKworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9U RVMgT04gU0NBTEFSIFNUUklORyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIE9NSVQgUVVPVEVTIEVSUk9S IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5J TkcganNvbiBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVT IEVSUk9SIE9OIEVSUk9SKTsKKworLS0gUVVPVEVTIGJlaGF2aW9yIHNob3VsZCBub3QgYmUgc3Bl Y2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6CistLSBTaG91bGQgZmFpbAorU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9URVMpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdS QVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBX SVRIIENPTkRJVElPTkFMIFdSQVBQRVIgT01JVCBRVU9URVMpOworLS0gU2hvdWxkIHN1Y2NlZWQK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQg UVVPVEVTKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQ UEVSIEtFRVAgUVVPVEVTKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0n KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBOVUxMIE9OIEVNUFRZKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBPTiBFTVBUWSk7CitT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRU1QVFkgQVJSQVkgT04gRU1QVFkp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVNUFRZIE9CSkVDVCBPTiBF TVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1Q VFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIERFRkFVTFQgJyJlbXB0 eSInIE9OIEVNUFRZKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVS Uk9SIE9OIEVNUFRZIE5VTEwgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1td JywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVNUFRZIEFSUkFZIE9OIEVSUk9SKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBFTVBUWSBPQkpFQ1Qg T04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9O IEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0n LCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRVJST1IpOworCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uYiBGT1JNQVQgSlNPTik7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIHRleHQpOwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBjaGFyKDEwKSk7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGNoYXIoMykp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyB0ZXh0IEZP Uk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5J TkcgYnl0ZWEpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklO RyBieXRlYSBGT1JNQVQgSlNPTik7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpT T04gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwy XScsICckWypdJyBSRVRVUk5JTkcganNvbiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uYiBFTVBUWSBP QkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0n IFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJyJbMyw0XSInLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9C SkVDVCBPTiBFUlJPUik7CisKKy0tIFJFVFVHTklORyBwc2V1ZG8tdHlwZXMgbm90IGFsbG93ZWQK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcgYW55YXJy YXkgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKworU0VMRUNUCisJeCwgeSwKKwlKU09OX1FVRVJZ KAorCQlqc29uYiAnWzEsMiwzLDQsNSxudWxsXScsCisJCSckWypdID8gKEAgPj0gJHggJiYgQCA8 PSAkeSknCisJCVBBU1NJTkcgeCBBUyB4LCB5IEFTIHkKKwkJV0lUSCBDT05ESVRJT05BTCBXUkFQ UEVSCisJCUVNUFRZIEFSUkFZIE9OIEVNUFRZCisJKSBsaXN0CitGUk9NCisJZ2VuZXJhdGVfc2Vy aWVzKDAsIDQpIHgsCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDQpIHk7CisKKy0tIEV4dGVuc2lvbjog cmVjb3JkIHR5cGVzIHJldHVybmluZworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjIEFTIChhIGlu dCwgdCB0ZXh0LCBqcyBqc29uLCBqYiBqc29uYiwganNhIGpzb25bXSk7CitDUkVBVEUgVFlQRSBz cWxqc29uYl9yZWNhIEFTIChyZWNhIHNxbGpzb25iX3JlY1tdKTsKKworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIi LCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJF VFVSTklORyBzcWxqc29uYl9yZWMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAi YSIsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4 IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25i X3JlYyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJh IiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7Ingi OiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJf cmVjKTsKK1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7ImpzYSI6ICBb eyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMiOiB7fX0sIDEyM119JywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2EpOworU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05f UVVFUlkoanNvbmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjog MiwgImpiIjogW3t9LCB0cnVlXX1dfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjYSkpLnJl Y2EpOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0 IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0s ICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIGpzb25wYXRoKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIy Iiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBS RVRVUk5JTkcganNvbnBhdGggRVJST1IgT04gRVJST1IpOworCistLSBFeHRlbnNpb246IGFycmF5 IHR5cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiMyJd JywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDIsbnVsbCwiYSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdS QVBQRVIgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVs bCwiYSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOworU0VMRUNUICog RlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19 LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3Jl Y1tdKSk7CisKKy0tIEV4dGVuc2lvbjogZG9tYWluIHR5cGVzIHJldHVybmluZworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9u b3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRV Uk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKKworLS0gVGVzdCB0aW1lc3RhbXB0eiBwYXNz aW5nIGFuZCBvdXRwdXQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFT U0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKK1NFTEVD VCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0y MSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisKKy0tIFRlc3QgY29uc3Ry YWludHMKKworQ1JFQVRFIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHMgKAorCWpzIHRleHQs CisJaSBpbnQsCisJeCBqc29uYiBERUZBVUxUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRb Kl0nIFdJVEggV1JBUFBFUikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDEKKwkJ Q0hFQ0sgKGpzIElTIEpTT04pCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCisJ CUNIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50 LCBpOjp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNdIGFzIGFycikpCisJQ09OU1RSQUlOVCB0ZXN0 X2pzb25iX2NvbnN0cmFpbnQzCisJCUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwgJyQuYScg UkVUVVJOSU5HIGludCBERUZBVUxUICcxMicgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkK KwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDQKKwkJQ0hFQ0sgKEpTT05fUVVFUlko anM6Ompzb25iLCAnJC5hJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9O IEVSUk9SKSA8IGpzb25iICdbMTBdJykKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWlu dDUKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgY2hhcig1 KSBPTUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAgJ2EnIENPTExBVEUgIkMiKQor KTsKKworXGQgdGVzdF9qc29uYl9jb25zdHJhaW50cworCitTRUxFQ1QgY2hlY2tfY2xhdXNlCitG Uk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jaGVja19jb25zdHJhaW50cworV0hFUkUgY29uc3RyYWlu dF9uYW1lIExJS0UgJ3Rlc3RfanNvbmJfY29uc3RyYWludCUnCitPUkRFUiBCWSAxOworCitTRUxF Q1QgcGdfZ2V0X2V4cHIoYWRiaW4sIGFkcmVsaWQpCitGUk9NIHBnX2F0dHJkZWYKK1dIRVJFIGFk cmVsaWQgPSAndGVzdF9qc29uYl9jb25zdHJhaW50cyc6OnJlZ2NsYXNzCitPUkRFUiBCWSAxOwor CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJycsIDEpOworSU5T RVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcxJywgMSk7CitJTlNFUlQg SU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ1tdJyk7CitJTlNFUlQgSU5UTyB0 ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYiI6IDF9JywgMSk7CitJTlNFUlQgSU5U TyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDF9JywgMSk7CitJTlNFUlQg SU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDd9JywgMSk7CitJTlNF UlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDEwfScsIDEpOwor CitEUk9QIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHM7CisKKy0tIFRlc3QgbXV0YWJpbGls eSBvZiBxdWVyeSBmdW5jdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxpdHko anMganNvbmIpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9R VUVSWShqcywgJyQnKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChK U09OX1FVRVJZKGpzLCAnJC5hWzBdJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKScpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQCA8ICQuZGF0 ZXRpbWUoKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0ZXRpbWUoKSknKSk7CitDUkVB VEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8g KEAuZGF0ZXRpbWUoKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRl dGltZSgiSEg6TUkgVFpIIikgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7CitDUkVBVEUg SU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAu ZGF0ZXRpbWUoIkhIOk1JIikgPCAkLmRhdGV0aW1lKCJZWS1NTS1ERCBISDpNSSIpKScpKTsKK0NS RUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEg PyAoQC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkLmRhdGV0aW1lKCJZWS1NTS1ERCBISDpNSSIp KScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR4JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0 eiBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkeScgUEFTU0lORyAnMTI6MzQnOjp0 aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA8ICR4JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0eiBB UyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyMzQnOjppbnQgQVMgeCkpOworQ1JF QVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0 ZXRpbWUoKSA/IChAID09ICR4KScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0 aW1lKCJZWS1NTS1ERCIpID8gKEAgPT0gJHgpJyBQQVNTSU5HICcyMDIwLTA3LTE0Jzo6ZGF0ZSBB UyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJFsxLCAkLmEgPyAoQC5kYXRldGltZSgpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6 dGltZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJFsxLCAwIHRvICQuYSA/IChALmRhdGV0aW1lKCkgPT0gJHgpXScgUEFTU0lO RyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpID09 ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitEUk9QIFRBQkxFIHRlc3RfanNv bmJfbXV0YWJpbGl0eTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYmE0MTE0OWI4OC4u MjlhZDA0YmFkNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyNTEsNiArMTI1MSw3 IEBAIEpvaW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgorSnNvbkZ1 bmNFeHByCiBKb2luSGFzaEVudHJ5CiBKb2luUGF0aAogSm9pblBhdGhFeHRyYURhdGEKQEAgLTEy NjEsMTggKzEyNjIsMjcgQEAgSnNPYmplY3QKIEpzVmFsdWUKIEpzb25BZ2dDb25zdHJ1Y3Rvcgog SnNvbkFnZ1N0YXRlCitKc29uQXJndW1lbnQKIEpzb25BcnJheUFnZwogSnNvbkFycmF5Q29uc3Ry dWN0b3IKIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IKIEpzb25CYXNlT2JqZWN0SW5mbworSnNv bkJlaGF2aW9yCitKc29uQmVoYXZpb3JUeXBlCitKc29uQ29lcmNpb24KIEpzb25Db25zdHJ1Y3Rv ckV4cHIKIEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogSnNvbkNvbnN0cnVjdG9yVHlwZQogSnNv bkVuY29kaW5nCitKc29uRXhwcgorSnNvbkV4cHJPcAorSnNvbkV4cHJQb3N0RXZhbFN0YXRlCitK c29uRXhwclN0YXRlCiBKc29uRm9ybWF0CiBKc29uRm9ybWF0VHlwZQogSnNvbkhhc2hFbnRyeQog SnNvbklzUHJlZGljYXRlCitKc29uSXRlbVR5cGUKIEpzb25JdGVyYXRlU3RyaW5nVmFsdWVzQWN0 aW9uCiBKc29uS2V5VmFsdWUKIEpzb25MZXhDb250ZXh0CkBAIC0xMjkwLDYgKzEzMDAsNyBAQCBK c29uUGFyc2VDb250ZXh0CiBKc29uUGFyc2VFcnJvclR5cGUKIEpzb25QYXRoCiBKc29uUGF0aEJv b2wKK0pzb25QYXRoRGF0YXR5cGVTdGF0dXMKIEpzb25QYXRoRXhlY0NvbnRleHQKIEpzb25QYXRo RXhlY1Jlc3VsdAogSnNvblBhdGhHaW5BZGRQYXRoSXRlbUZ1bmMKQEAgLTEzMDIsMTAgKzEzMTMs MTUgQEAgSnNvblBhdGhHaW5QYXRoSXRlbQogSnNvblBhdGhJdGVtCiBKc29uUGF0aEl0ZW1UeXBl CiBKc29uUGF0aEtleXdvcmQKK0pzb25QYXRoTXV0YWJsZUNvbnRleHQKIEpzb25QYXRoUGFyc2VJ dGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNrCiBKc29u UGF0aFN0cmluZworSnNvblBhdGhWYXJDYWxsYmFjaworSnNvblBhdGhWYXJpYWJsZQorSnNvblBh dGhWYXJpYWJsZUV2YWxDb250ZXh0CitKc29uUXVvdGVzCiBKc29uUmV0dXJuaW5nCiBKc29uU2Nh bGFyRXhwcgogSnNvblNlbUFjdGlvbgpAQCAtMTMyMiw2ICsxMzM4LDcgQEAgSnNvblZhbHVlRXhw cgogSnNvblZhbHVlTGlzdAogSnNvblZhbHVlTGlzdEl0ZXJhdG9yCiBKc29uVmFsdWVUeXBlCitK c29uV3JhcHBlcgogSnNvbmIKIEpzb25iQWdnU3RhdGUKIEpzb25iQ29udGFpbmVyCi0tIAoyLjM1 LjMKCg== --000000000000f29f71060cece141 Content-Type: application/x-patch; name="v33-0008-JSON_TABLE.patch" Content-Disposition: attachment; filename="v33-0008-JSON_TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqdikizm7 RnJvbSBhNzVjODc2ZmI2NzkyNmYyODkyYWViNmYwODcxYmVjNzE2MGZiNWRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjIgTm92IDIwMjMgMTM6MTk6MDUgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz MyA4LzhdIEpTT05fVEFCTEUKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMg ZmVhdHVyZSBhbGxvd3MganNvbmIgZGF0YSB0byBiZSB0cmVhdGVkIGFzIGEgdGFibGUgYW5kIHRo dXMKdXNlZCBpbiBhIEZST00gY2xhdXNlIGxpa2Ugb3RoZXIgdGFidWxhciBkYXRhLiBEYXRhIGNh biBiZSBzZWxlY3RlZApmcm9tIHRoZSBqc29uYiB1c2luZyBqc29ucGF0aCBleHByZXNzaW9ucywg YW5kIGhvaXN0ZWQgb3V0IG9mIG5lc3RlZApzdHJ1Y3R1cmVzIGluIHRoZSBqc29uYiB0byBmb3Jt IG11bHRpcGxlIHJvd3MsIG1vcmUgb3IgbGVzcyBsaWtlIGFuCm91dGVyIGpvaW4uCgpUaGlzIGFs c28gYWRkcyB0aGUgUExBTiBjbGF1c2VzIGZvciBKU09OX1RBQkxFLCB3aGljaCBhbGxvdyB0aGUg dXNlcgp0byBzcGVjaWZ5IGhvdyBkYXRhIGZyb20gbmVzdGVkIHBhdGhzIGFyZSBqb2luZWQsIGFs bG93aW5nCmNvbnNpZGVyYWJsZSBmcmVlZG9tIGluIHNoYXBpbmcgdGhlIHRhYnVsYXIgb3V0cHV0 IG9mIEpTT05fVEFCTEUuClBMQU4gREVGQVVMVCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0 aGUgZ2xvYmFsIHN0cmF0ZWdpZXMgd2hlbgpkZWFsaW5nIHdpdGggc2libGluZyBvciBjaGlsZCBu ZXN0ZWQgcGF0aHMuIFRoZSBpcyBvZnRlbiBzdWZmaWNpZW50CnRvIGFjaGlldmUgdGhlIG5lY2Vz c2FyeSBnb2FsLCBhbmQgaXMgY29uc2lkZXJhYmx5IHNpbXBsZXIgdGhhbiB0aGUKZnVsbCBQTEFO IGNsYXVzZSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHN0cmF0ZWd5IHRv IGJlCnVzZWQgZm9yIGVhY2ggbmFtZWQgbmVzdGVkIHBhdGguCgpBdXRob3I6IE5pa2l0YSBHbHVr aG92IDxuLmdsdWhvdkBwb3N0Z3Jlc3Byby5ydT4KQXV0aG9yOiBUZW9kb3IgU2lnYWV2IDx0ZW9k b3JAc2lnYWV2LnJ1PgpBdXRob3I6IE9sZWcgQmFydHVub3YgPG9iYXJ0dW5vdkBnbWFpbC5jb20+ CkF1dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KQXV0aG9y OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KQXV0aG9yOiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgoKUmV2aWV3ZXJzIGhhdmUgaW5jbHVkZWQgKGlu IG5vIHBhcnRpY3VsYXIgb3JkZXIpIEFuZHJlcyBGcmV1bmQsIEFsZXhhbmRlcgpLb3JvdGtvdiwg UGF2ZWwgU3RlaHVsZSwgQW5kcmV3IEFsc3VwLCBFcmlrIFJpamtlcnMsIFppaG9uZyBZdSwKSGlt YW5zaHUgVXBhZGh5YXlhLCBEYW5pZWwgR3VzdGFmc3NvbiwgSnVzdGluIFByeXpieSwgw4FsdmFy byBIZXJyZXJhLApqaWFuIGhlCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NkMGJi OTM1LTAxNTgtNzhhNy0wOGI1LTkwNDg4NmRlYWM0YkBwb3N0Z3Jlc3Byby5ydQpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLzIwMjIwNjE2MjMzMTMwLnJwYXJpdmFmaXB0NmRvajNAYWxh cDMuYW5hcmF6ZWwuZGUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9hYmQ5YjgzYi1h YTY2LWYyMzAtM2Q2ZC03MzQ4MTdmMDk5NWQlNDBwb3N0Z3Jlc3FsLm9yZwpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhUZGZiMW5XPU9qb3lfdFFTUmhZdC1xX2tiNmk1 ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgICB8ICA0OTYgKysrKysrKwogc3JjL2JhY2tlbmQvY2F0YWxv Zy9zcWxfZmVhdHVyZXMudHh0ICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgIHwgICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHJJbnRlcnAuYyAgICAgICAgIHwgICAgNiArCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlVGFibGVGdW5jc2Nhbi5jICAgICAgfCAgIDI3ICstCiBzcmMvYmFja2VuZC9ub2Rlcy9t YWtlZnVuY3MuYyAgICAgICAgICAgICAgICAgfCAgIDE5ICsKIHNyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jICAgICAgICAgICAgICAgICB8ICAgMzggKwogc3JjL2JhY2tlbmQvcGFyc2VyL01h a2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55ICAgICAgICAgICAgICAgICAgICAgfCAgMzAwICsrKystCiBzcmMvYmFja2VuZC9wYXJzZXIv bWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9jbGF1c2UuYyAgICAgICAgICAgICB8ICAgMTQgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9leHByLmMgICAgICAgICAgICAgICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2pzb250YWJsZS5jICAgICAgICAgIHwgIDc2NSArKysrKysrKysrKwogc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMgICAgICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3RhcmdldC5jICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jICAgICAgICAgfCAgNTUwICsrKysrKysrCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgICAgICAgICAgfCAgMjc5ICsrKy0KIHNyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2lu Y2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5j bHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAgfCAgIDk1ICsrCiBzcmMvaW5j bHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDU5ICstCiBzcmMvaW5j bHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9pbmNs dWRlL3BhcnNlci9wYXJzZV9jbGF1c2UuaCAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1 ZGUvdXRpbHMvanNvbnBhdGguaCAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW50ZXJm YWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZSAgICAgICAgfCAgICAxICsKIC4uLi90ZXN0L2V4 cGVjdGVkL3NxbC1zcWxqc29uX3F1ZXJ5ZnVuY3MuYyAgICB8ICAxMzIgKysKIC4uLi9leHBlY3Rl ZC9zcWwtc3FsanNvbl9xdWVyeWZ1bmNzLnN0ZGVyciAgICB8ICAgMjAgKwogLi4uL2V4cGVjdGVk L3NxbC1zcWxqc29uX3F1ZXJ5ZnVuY3Muc3Rkb3V0ICAgIHwgICAgMAogc3JjL2ludGVyZmFjZXMv ZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSAgICAgICAgIHwgICAgMSArCiBzcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkICAgICAgfCAgICAxICsKIC4uLi9lY3BnL3Rlc3Qvc3Fs L3NxbGpzb25fcXVlcnlmdW5jcy5wZ2MgICAgICB8ICAgMzIgKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9qc29uX3NxbGpzb24ub3V0ICAgIHwgICAgNiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0ICAgfCAxMTgyICsrKysrKysrKysrKysrKysrCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsICAgICAgICAgfCAgICA0ICsKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsICAgICAgICB8ICA2NzQgKysrKysrKysr Kwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxMyAr CiAzNiBmaWxlcyBjaGFuZ2VkLCA0NzcyIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwt c3FsanNvbl9xdWVyeWZ1bmNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fcXVlcnlmdW5jcy5zdGRlcnIKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25f cXVlcnlmdW5jcy5zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3Bn L3Rlc3Qvc3FsL3NxbGpzb25fcXVlcnlmdW5jcy5wZ2MKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA3OTYyYThhMWE0Li5m OGZhNjgxN2NkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9mdW5jLnNnbWwKQEAgLTE3MjAwLDYgKzE3MjAwLDUwMiBAQCBhcnJheSB3L28gVUs/ IHwgdAogICAgPC90YWJsZT4KICA8L3NlY3QyPgogCisgPHNlY3QyIGlkPSJmdW5jdGlvbnMtc3Fs anNvbi10YWJsZSI+CisgIDx0aXRsZT5KU09OX1RBQkxFPC90aXRsZT4KKyAgPGluZGV4dGVybT4K KyAgIDxwcmltYXJ5Pmpzb25fdGFibGU8L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxw YXJhPgorICAgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9uPiBpcyBhbiBTUUwvSlNPTiBm dW5jdGlvbiB3aGljaAorICAgcXVlcmllcyA8YWNyb255bT5KU09OPC9hY3JvbnltPiBkYXRhCisg ICBhbmQgcHJlc2VudHMgdGhlIHJlc3VsdHMgYXMgYSByZWxhdGlvbmFsIHZpZXcsIHdoaWNoIGNh biBiZSBhY2Nlc3NlZCBhcyBhCisgICByZWd1bGFyIFNRTCB0YWJsZS4gWW91IGNhbiBvbmx5IHVz ZSA8ZnVuY3Rpb24+anNvbl90YWJsZTwvZnVuY3Rpb24+IGluc2lkZSB0aGUKKyAgIDxsaXRlcmFs PkZST008L2xpdGVyYWw+IGNsYXVzZSBvZiBhIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gc3Rh dGVtZW50LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUYWtpbmcgSlNPTiBkYXRhIGFzIGlu cHV0LCA8ZnVuY3Rpb24+anNvbl90YWJsZTwvZnVuY3Rpb24+IHVzZXMKKyAgIGEgcGF0aCBleHBy ZXNzaW9uIHRvIGV4dHJhY3QgYSBwYXJ0IG9mIHRoZSBwcm92aWRlZCBkYXRhIHRoYXQKKyAgIHdp bGwgYmUgdXNlZCBhcyBhIDxmaXJzdHRlcm0+cm93IHBhdHRlcm48L2ZpcnN0dGVybT4gZm9yIHRo ZQorICAgY29uc3RydWN0ZWQgdmlldy4gRWFjaCBTUUwvSlNPTiBpdGVtIGF0IHRoZSB0b3AgbGV2 ZWwgb2YgdGhlIHJvdyBwYXR0ZXJuIHNlcnZlcworICAgYXMgdGhlIHNvdXJjZSBmb3IgYSBzZXBh cmF0ZSByb3cgaW4gdGhlIGNvbnN0cnVjdGVkIHJlbGF0aW9uYWwgdmlldy4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVG8gc3BsaXQgdGhlIHJvdyBwYXR0ZXJuIGludG8gY29sdW1ucywgPGZ1 bmN0aW9uPmpzb25fdGFibGU8L2Z1bmN0aW9uPgorICAgcHJvdmlkZXMgdGhlIDxsaXRlcmFsPkNP TFVNTlM8L2xpdGVyYWw+IGNsYXVzZSB0aGF0IGRlZmluZXMgdGhlCisgICBzY2hlbWEgb2YgdGhl IGNyZWF0ZWQgdmlldy4gRm9yIGVhY2ggY29sdW1uIHRvIGJlIGNvbnN0cnVjdGVkLAorICAgdGhp cyBjbGF1c2UgcHJvdmlkZXMgYSBzZXBhcmF0ZSBwYXRoIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0 ZXMKKyAgIHRoZSByb3cgcGF0dGVybiwgZXh0cmFjdHMgYSBKU09OIGl0ZW0sIGFuZCByZXR1cm5z IGl0IGFzIGEKKyAgIHNlcGFyYXRlIFNRTCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4u IElmIHRoZSByZXF1aXJlZCB2YWx1ZQorICAgaXMgc3RvcmVkIGluIGEgbmVzdGVkIGxldmVsIG9m IHRoZSByb3cgcGF0dGVybiwgaXQgY2FuIGJlIGV4dHJhY3RlZAorICAgdXNpbmcgdGhlIDxsaXRl cmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBzdWJjbGF1c2UuIEpvaW5pbmcgdGhlCisgICBjb2x1 bW5zIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBjYW4gYWRkIG11 bHRpcGxlCisgICBuZXcgcm93cyB0byB0aGUgY29uc3RydWN0ZWQgdmlldy4gU3VjaCByb3dzIGFy ZSBjYWxsZWQKKyAgIDxmaXJzdHRlcm0+Y2hpbGQgcm93czwvZmlyc3R0ZXJtPiwgYXMgb3Bwb3Nl ZCB0byB0aGUgPGZpcnN0dGVybT5wYXJlbnQgcm93PC9maXJzdHRlcm0+CisgICB0aGF0IGdlbmVy YXRlcyB0aGVtLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgcm93cyBwcm9kdWNlZCBi eSA8ZnVuY3Rpb24+SlNPTl9UQUJMRTwvZnVuY3Rpb24+IGFyZSBsYXRlcmFsbHkKKyAgIGpvaW5l ZCB0byB0aGUgcm93IHRoYXQgZ2VuZXJhdGVkIHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBl eHBsaWNpdGx5IGpvaW4KKyAgIHRoZSBjb25zdHJ1Y3RlZCB2aWV3IHdpdGggdGhlIG9yaWdpbmFs IHRhYmxlIGhvbGRpbmcgPGFjcm9ueW0+SlNPTjwvYWNyb255bT4KKyAgIGRhdGEuIE9wdGlvbmFs bHksIHlvdSBjYW4gc3BlY2lmeSBob3cgdG8gam9pbiB0aGUgY29sdW1ucyByZXR1cm5lZAorICAg YnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IHVzaW5nIHRoZSA8bGl0ZXJhbD5QTEFO PC9saXRlcmFsPiBjbGF1c2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEVhY2ggPGxpdGVy YWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IGNsYXVzZSBjYW4gZ2VuZXJhdGUgb25lIG9yIG1vcmUK KyAgIGNvbHVtbnMuIENvbHVtbnMgcHJvZHVjZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+cyBhdCB0aGUKKyAgIHNhbWUgbGV2ZWwgYXJlIGNvbnNpZGVyZWQgdG8gYmUgPGZpcnN0 dGVybT5zaWJsaW5nczwvZmlyc3R0ZXJtPiwKKyAgIHdoaWxlIGEgY29sdW1uIHByb2R1Y2VkIGJ5 IGEgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IGlzCisgICBjb25zaWRlcmVkIHRvIGJl IGEgY2hpbGQgb2YgdGhlIGNvbHVtbiBwcm9kdWNlZCBieSBhCisgICA8bGl0ZXJhbD5ORVNURUQg UEFUSDwvbGl0ZXJhbD4gb3Igcm93IGV4cHJlc3Npb24gYXQgYSBoaWdoZXIgbGV2ZWwuCisgICBT aWJsaW5nIGNvbHVtbnMgYXJlIGFsd2F5cyBqb2luZWQgZmlyc3QuIE9uY2UgdGhleSBhcmUgcHJv Y2Vzc2VkLAorICAgdGhlIHJlc3VsdGluZyByb3dzIGFyZSBqb2luZWQgdG8gdGhlIHBhcmVudCBy b3cuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzeW50YXggaXM6CisgIDwvcGFyYT4K KworPHN5bm9wc2lzPgorSlNPTl9UQUJMRSAoCisgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08 L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ IDxvcHRpb25hbD4gQVMgPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4g PC9vcHRpb25hbD4gPG9wdGlvbmFsPiBQQVNTSU5HIHsgPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBs YWNlYWJsZT4gQVMgPHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25h bD4sIC4uLjwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgIENPTFVNTlMgKCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPiA8b3B0aW9u YWw+LCAuLi48L29wdGlvbmFsPiApCisgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0 ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwvbGl0ZXJhbD4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0 ZXJhbD4gPC9vcHRpb25hbD4KKyAgPG9wdGlvbmFsPgorICAgIFBMQU4gKCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJsZV9wbGFuPC9yZXBsYWNlYWJsZT4gKSB8CisgICAg UExBTiBERUZBVUxUICggeyBJTk5FUiB8IE9VVEVSIH0gPG9wdGlvbmFsPiAsIHsgQ1JPU1MgfCBV TklPTiB9IDwvb3B0aW9uYWw+CisgICAgICAgICAgICAgICAgIHwgeyBDUk9TUyB8IFVOSU9OIH0g PG9wdGlvbmFsPiAsIHsgSU5ORVIgfCBPVVRFUiB9IDwvb3B0aW9uYWw+ICkKKyAgPC9vcHRpb25h bD4KKykKKworPHBocmFzZT4KK3doZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5q c29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxh Y2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+ IDxvcHRpb25hbD4gUEFUSCA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3Jl cGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgV0lUSE9VVCB8IFdJ VEggeyBDT05ESVRJT05BTCB8IDxvcHRpb25hbD5VTkNPTkRJVElPTkFMPC9vcHRpb25hbD4gfSB9 IDxvcHRpb25hbD4gQVJSQVkgPC9vcHRpb25hbD4gV1JBUFBFUiA8L29wdGlvbmFsPgorICAgICAg ICA8b3B0aW9uYWw+IHsgS0VFUCB8IE9NSVQgfSBRVU9URVMgPG9wdGlvbmFsPiBPTiBTQ0FMQVIg U1RSSU5HIDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJP UiB8IE5VTEwgfCBERUZBVUxUIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g fSBPTiBFTVBUWSA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxM IHwgREVGQVVMVCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04gRVJS T1IgPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gRk9STUFUIDxyZXBsYWNlYWJsZT5qc29uX3JlcHJl c2VudGF0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgPG9wdGlvbmFsPiBQQVRIIDxyZXBsYWNl YWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+Cisg ICAgICAgIDxvcHRpb25hbD4geyBXSVRIT1VUIHwgV0lUSCB7IENPTkRJVElPTkFMIHwgPG9wdGlv bmFsPlVOQ09ORElUSU9OQUw8L29wdGlvbmFsPiB9IH0gPG9wdGlvbmFsPiBBUlJBWSA8L29wdGlv bmFsPiBXUkFQUEVSIDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBLRUVQIHwgT01J VCB9IFFVT1RFUyA8b3B0aW9uYWw+IE9OIFNDQUxBUiBTVFJJTkcgPC9vcHRpb25hbD4gPC9vcHRp b25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IEVSUk9SIHwgTlVMTCB8IEVNUFRZIHsgQVJSQVkg fCBPQkpFQ1QgfSB8IERFRkFVTFQgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxl PiB9IE9OIEVNUFRZIDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8IE5V TEwgfCBFTVBUWSB7IEFSUkFZIHwgT0JKRUNUIH0gfCBERUZBVUxUIDxyZXBsYWNlYWJsZT5leHBy ZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IDxyZXBsYWNl YWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiBF WElTVFMgPG9wdGlvbmFsPiBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlv bjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyBFUlJPUiB8 IFRSVUUgfCBGQUxTRSB8IFVOS05PV04gfSBPTiBFUlJPUiA8L29wdGlvbmFsPgorICB8IE5FU1RF RCBQQVRIIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+ IDxvcHRpb25hbD4gQVMgPHJlcGxhY2VhYmxlPnBhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0 aW9uYWw+CisgICAgICAgIENPTFVNTlMgKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48 L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiApCisgIHwgPHJlcGxhY2Vh YmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBGT1IgT1JESU5BTElUWQorPHBocmFzZT4KKzxyZXBsYWNl YWJsZT5qc29uX3RhYmxlX3BsYW48L3JlcGxhY2VhYmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxy ZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4geyBPVVRF UiB8IElOTkVSIH0gPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNl YWJsZT4gPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1h cnk8L3JlcGxhY2VhYmxlPiB7IFVOSU9OIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJp bWFyeTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPi4uLjwvb3B0aW9uYWw+CisgIHwgPHJlcGxh Y2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4geyBDUk9TUyA8cmVw bGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25h bD4uLi48L29wdGlvbmFsPgorPHBocmFzZT4KKzxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5f cHJpbWFyeTwvcmVwbGFjZWFibGU+IGlzOgorPC9waHJhc2U+CisgICAgPHJlcGxhY2VhYmxlPmpz b25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gfCAoIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3Bs YW48L3JlcGxhY2VhYmxlPiApCis8L3N5bm9wc2lzPgorCisgIDxwYXJhPgorICAgRWFjaCBzeW50 YXggZWxlbWVudCBpcyBkZXNjcmliZWQgYmVsb3cgaW4gbW9yZSBkZXRhaWwuCisgIDwvcGFyYT4K KworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PGxpdGVyYWw+PHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFj ZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5B UzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4gPC9v cHRpb25hbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNl YWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFi bGU+dmFybmFtZTwvcmVwbGFjZWFibGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29w dGlvbmFsPjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJh PgorICAgICBUaGUgaW5wdXQgZGF0YSB0byBxdWVyeSwgdGhlIEpTT04gcGF0aCBleHByZXNzaW9u IGRlZmluaW5nIHRoZSBxdWVyeSwKKyAgICAgYW5kIGFuIG9wdGlvbmFsIDxsaXRlcmFsPlBBU1NJ Tkc8L2xpdGVyYWw+IGNsYXVzZSwgd2hpY2ggY2FuIHByb3ZpZGUgZGF0YQorICAgICB2YWx1ZXMg dG8gdGhlIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPi4KKyAgICAg VGhlIHJlc3VsdCBvZiB0aGUgaW5wdXQgZGF0YQorICAgICBldmFsdWF0aW9uIGlzIGNhbGxlZCB0 aGUgPGZpcnN0dGVybT5yb3cgcGF0dGVybjwvZmlyc3R0ZXJtPi4gVGhlIHJvdworICAgICBwYXR0 ZXJuIGlzIHVzZWQgYXMgdGhlIHNvdXJjZSBmb3Igcm93IHZhbHVlcyBpbiB0aGUgY29uc3RydWN0 ZWQgdmlldy4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5DT0xVTU5T PC9saXRlcmFsPiggPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4g PG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVz ZSBkZWZpbmluZyB0aGUgc2NoZW1hIG9mIHRoZQorICAgICBjb25zdHJ1Y3RlZCB2aWV3LiBJbiB0 aGlzIGNsYXVzZSwgeW91IG11c3Qgc3BlY2lmeSBhbGwgdGhlIGNvbHVtbnMKKyAgICAgdG8gYmUg ZmlsbGVkIHdpdGggU1FML0pTT04gaXRlbXMuCisgICAgIFRoZSA8cmVwbGFjZWFibGU+anNvbl90 YWJsZV9jb2x1bW48L3JlcGxhY2VhYmxlPgorICAgICBleHByZXNzaW9uIGhhcyB0aGUgZm9sbG93 aW5nIHN5bnRheCB2YXJpYW50czoKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5u YW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAg ICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25f cGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD48L2xpdGVyYWw+Cisg ICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBJbnNlcnRzIGEg c2luZ2xlIFNRTC9KU09OIGl0ZW0gaW50byBlYWNoIHJvdyBvZgorICAgICB0aGUgc3BlY2lmaWVk IGNvbHVtbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRoZSBwcm92aWRlZCA8bGl0 ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhbmQKKyAgICAgdGhl IGNvbHVtbiBpcyBmaWxsZWQgd2l0aCB0aGUgcHJvZHVjZWQgU1FML0pTT04gaXRlbXMsIG9uZSBm b3IgZWFjaCByb3cuCisgICAgIElmIHRoZSA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNz aW9uIGlzIG9taXR0ZWQsCisgICAgIDxmdW5jdGlvbj5KU09OX1RBQkxFPC9mdW5jdGlvbj4gdXNl cyB0aGUKKyAgICAgPGxpdGVyYWw+JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9s aXRlcmFsPiBwYXRoIGV4cHJlc3Npb24sCisgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5uYW1lPC9y ZXBsYWNlYWJsZT4gaXMgdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1lLgorICAgICBJbiB0aGlzIGNh c2UsIHRoZSBjb2x1bW4gbmFtZSBtdXN0IGNvcnJlc3BvbmQgdG8gb25lIG9mIHRoZQorICAgICBr ZXlzIHdpdGhpbiB0aGUgU1FML0pTT04gaXRlbSBwcm9kdWNlZCBieSB0aGUgcm93IHBhdHRlcm4u CisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIGFkZCA8 bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kCisgICAgIDxsaXRlcmFsPk9OIEVSUk9SPC9s aXRlcmFsPiBjbGF1c2VzIHRvIGRlZmluZSBob3cgdG8gaGFuZGxlIG1pc3NpbmcgdmFsdWVzCisg ICAgIG9yIHN0cnVjdHVyYWwgZXJyb3JzLgorICAgICA8bGl0ZXJhbD5XUkFQUEVSPC9saXRlcmFs PiBhbmQgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFsPiBjbGF1c2VzIGNhbiBvbmx5CisgICAgIGJl IHVzZWQgd2l0aCBKU09OLCBhcnJheSwgYW5kIGNvbXBvc2l0ZSB0eXBlcy4KKyAgICAgVGhlc2Ug Y2xhdXNlcyBoYXZlIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIGZvcgorICAgICA8 ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+anNvbl9xdWVyeTwv ZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxyZXBsYWNlYWJsZT5u YW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJh bD5GT1JNQVQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3JlcHJlc2VudGF0aW9uPC9yZXBs YWNlYWJsZT4KKyAgICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IDxy ZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBHZW5l cmF0ZXMgYSBjb2x1bW4gYW5kIGluc2VydHMgYSBjb21wb3NpdGUgU1FML0pTT04KKyAgICAgaXRl bSBpbnRvIGVhY2ggcm93IG9mIHRoaXMgY29sdW1uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4K KyAgICAgVGhlIHByb3ZpZGVkIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMg ZXZhbHVhdGVkIGFuZAorICAgICB0aGUgY29sdW1uIGlzIGZpbGxlZCB3aXRoIHRoZSBwcm9kdWNl ZCBTUUwvSlNPTiBpdGVtcywgb25lIGZvciBlYWNoIHJvdy4KKyAgICAgSWYgdGhlIDxsaXRlcmFs PlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgb21pdHRlZCwKKyAgICAgPGZ1bmN0aW9uPkpT T05fVEFCTEU8L2Z1bmN0aW9uPiB1c2VzIHRoZQorICAgICA8bGl0ZXJhbD4kLjxyZXBsYWNlYWJs ZT5uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+IHBhdGggZXhwcmVzc2lvbiwKKyAgICAgd2hl cmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQgY29sdW1u IG5hbWUuCisgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvbHVtbiBuYW1lIG11c3QgY29ycmVzcG9u ZCB0byBvbmUgb2YgdGhlCisgICAgIGtleXMgd2l0aGluIHRoZSBTUUwvSlNPTiBpdGVtIHByb2R1 Y2VkIGJ5IHRoZSByb3cgcGF0dGVybi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIE9w dGlvbmFsbHksIHlvdSBjYW4gYWRkIDxsaXRlcmFsPldSQVBQRVI8L2xpdGVyYWw+LCA8bGl0ZXJh bD5RVU9URVM8L2xpdGVyYWw+LAorICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5k IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiBjbGF1c2VzCisgICAgIHRvIGRlZmluZSBhZGRp dGlvbmFsIHNldHRpbmdzIGZvciB0aGUgcmV0dXJuZWQgU1FML0pTT04gaXRlbXMuCisgICAgIFRo ZXNlIGNsYXVzZXMgaGF2ZSB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcworICAgICBm b3IgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0 ZXJtPgorICAgICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxl PnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgIDxsaXRlcmFsPkVYSVNUUzwvbGl0ZXJhbD4gPG9w dGlvbmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3Nw ZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgIDwvdGVybT4KKyAgICA8 bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2VuZXJhdGVzIGEgY29sdW1uIGFuZCBpbnNl cnRzIGEgYm9vbGVhbiBpdGVtIGludG8gZWFjaCByb3cgb2YgdGhpcyBjb2x1bW4uCisgICAgPC9w YXJhPgorICAgIDxwYXJhPgorICAgICBUaGUgcHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJh bD4gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsCisgICAgIGEgY2hlY2sgd2hldGhlciBhbnkgU1FM L0pTT04gaXRlbXMgd2VyZSByZXR1cm5lZCBpcyBkb25lLCBhbmQKKyAgICAgdGhlIGNvbHVtbiBp cyBmaWxsZWQgd2l0aCB0aGUgcmVzdWx0aW5nIGJvb2xlYW4gdmFsdWUsIG9uZSBmb3IgZWFjaCBy b3cuCisgICAgIFRoZSBzcGVjaWZpZWQgPHBhcmFtZXRlcj50eXBlPC9wYXJhbWV0ZXI+IHNob3Vs ZCBoYXZlIGEgY2FzdCBmcm9tIHRoZQorICAgICA8dHlwZT5ib29sZWFuPC90eXBlPi4KKyAgICAg SWYgdGhlIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgb21pdHRlZCwKKyAg ICAgPGZ1bmN0aW9uPkpTT05fVEFCTEU8L2Z1bmN0aW9uPiB1c2VzIHRoZQorICAgICA8bGl0ZXJh bD4kLjxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+IHBhdGggZXhwcmVz c2lvbiwKKyAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUg cHJvdmlkZWQgY29sdW1uIG5hbWUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBPcHRp b25hbGx5LCB5b3UgY2FuIGFkZCA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNlIHRv IGRlZmluZQorICAgICBlcnJvciBiZWhhdmlvci4gIFRoaXMgY2xhdXNlIGhhcyB0aGUgc2FtZSBz eW50YXggYW5kIHNlbWFudGljcyBhcworICAgICBmb3IgPGZ1bmN0aW9uPmpzb25fZXhpc3RzPC9m dW5jdGlvbj4uCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgIDxsaXRlcmFsPk5FU1RF RCBQQVRIPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3Jl cGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ anNvbl9wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICAgIDxsaXRl cmFsPkNPTFVNTlM8L2xpdGVyYWw+ICggPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9y ZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQorICAgIDwvdGVybT4KKyAg ICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgRXh0cmFjdHMgU1FML0pTT04gaXRlbXMg ZnJvbSBuZXN0ZWQgbGV2ZWxzIG9mIHRoZSByb3cgcGF0dGVybiwKKyAgICAgZ2VuZXJhdGVzIG9u ZSBvciBtb3JlIGNvbHVtbnMgYXMgZGVmaW5lZCBieSB0aGUgPGxpdGVyYWw+Q09MVU1OUzwvbGl0 ZXJhbD4KKyAgICAgc3ViY2xhdXNlLCBhbmQgaW5zZXJ0cyB0aGUgZXh0cmFjdGVkIFNRTC9KU09O IGl0ZW1zIGludG8gZWFjaCByb3cgb2YgdGhlc2UgY29sdW1ucy4KKyAgICAgVGhlIDxyZXBsYWNl YWJsZT5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+IGV4cHJlc3Npb24gaW4gdGhlCisg ICAgIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IHN1YmNsYXVzZSB1c2VzIHRoZSBzYW1lIHN5 bnRheCBhcyBpbiB0aGUKKyAgICAgcGFyZW50IDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IGNs YXVzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIDxsaXRlcmFsPk5FU1RF RCBQQVRIPC9saXRlcmFsPiBzeW50YXggaXMgcmVjdXJzaXZlLAorICAgICBzbyB5b3UgY2FuIGdv IGRvd24gbXVsdGlwbGUgbmVzdGVkIGxldmVscyBieSBzcGVjaWZ5aW5nIHNldmVyYWwKKyAgICAg PGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IHN1YmNsYXVzZXMgd2l0aGluIGVhY2ggb3Ro ZXIuCisgICAgIEl0IGFsbG93cyB0byB1bm5lc3QgdGhlIGhpZXJhcmNoeSBvZiBKU09OIG9iamVj dHMgYW5kIGFycmF5cworICAgICBpbiBhIHNpbmdsZSBmdW5jdGlvbiBpbnZvY2F0aW9uIHJhdGhl ciB0aGFuIGNoYWluaW5nIHNldmVyYWwKKyAgICAgPGZ1bmN0aW9uPkpTT05fVEFCTEU8L2Z1bmN0 aW9uPiBleHByZXNzaW9ucyBpbiBhbiBTUUwgc3RhdGVtZW50LgorICAgIDwvcGFyYT4KKworICAg IDxwYXJhPgorICAgICBZb3UgY2FuIHVzZSB0aGUgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gY2xh dXNlIHRvIGRlZmluZSBob3cKKyAgICAgdG8gam9pbiB0aGUgY29sdW1ucyByZXR1cm5lZCBieSA8 bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gY2xhdXNlcy4KKyAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAg IDx0ZXJtPgorICAgICA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkZP UiBPUkRJTkFMSVRZPC9saXRlcmFsPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAg ICA8cGFyYT4KKyAgICAgQWRkcyBhbiBvcmRpbmFsaXR5IGNvbHVtbiB0aGF0IHByb3ZpZGVzIHNl cXVlbnRpYWwgcm93IG51bWJlcmluZy4KKyAgICAgWW91IGNhbiBoYXZlIG9ubHkgb25lIG9yZGlu YWxpdHkgY29sdW1uIHBlciB0YWJsZS4gUm93IG51bWJlcmluZworICAgICBpcyAxLWJhc2VkLiBG b3IgY2hpbGQgcm93cyB0aGF0IHJlc3VsdCBmcm9tIHRoZSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwv bGl0ZXJhbD4KKyAgICAgY2xhdXNlcywgdGhlIHBhcmVudCByb3cgbnVtYmVyIGlzIHJlcGVhdGVk LgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwv dmFyaWFibGVsaXN0PgorCisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4g PHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICA8L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIFRoZSBvcHRpb25hbCA8cmVwbGFjZWFi bGU+anNvbl9wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiBzZXJ2ZXMgYXMgYW4KKyAgICAgaWRlbnRp ZmllciBvZiB0aGUgcHJvdmlkZWQgPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0aW9u PC9yZXBsYWNlYWJsZT4uCisgICAgIFRoZSBwYXRoIG5hbWUgbXVzdCBiZSB1bmlxdWUgYW5kIGRp c3RpbmN0IGZyb20gdGhlIGNvbHVtbiBuYW1lcy4KKyAgICAgV2hlbiB1c2luZyB0aGUgPGxpdGVy YWw+UExBTjwvbGl0ZXJhbD4gY2xhdXNlLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBuYW1lcworICAg ICBmb3IgYWxsIHRoZSBwYXRocywgaW5jbHVkaW5nIHRoZSByb3cgcGF0dGVybi4gRWFjaCBwYXRo IG5hbWUgY2FuIGFwcGVhciBpbgorICAgICB0aGUgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gY2xh dXNlIG9ubHkgb25jZS4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5Q TEFOPC9saXRlcmFsPiAoIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW48L3JlcGxhY2VhYmxl PiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBEZWZp bmVzIGhvdyB0byBqb2luIHRoZSBkYXRhIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRI PC9saXRlcmFsPgorICAgICBjbGF1c2VzIHRvIHRoZSBjb25zdHJ1Y3RlZCB2aWV3LgorICAgIDwv cGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVG8gam9pbiBjb2x1bW5zIHdpdGggcGFyZW50L2NoaWxk IHJlbGF0aW9uc2hpcCwgeW91IGNhbiB1c2U6CisgICAgPC9wYXJhPgorICA8dmFyaWFibGVsaXN0 PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+SU5ORVI8L2xp dGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBV c2UgPGxpdGVyYWw+SU5ORVIgSk9JTjwvbGl0ZXJhbD4sIHNvIHRoYXQgdGhlIHBhcmVudCByb3cK KyAgICAgaXMgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQgaWYgaXQgZG9lcyBub3QgaGF2ZSBhbnkg Y2hpbGQgcm93cworICAgICBhZnRlciBqb2luaW5nIHRoZSBkYXRhIHJldHVybmVkIGJ5IDxsaXRl cmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPi4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8bGl0ZXJhbD5PVVRFUjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor CisgICAgPHBhcmE+CisgICAgIFVzZSA8bGl0ZXJhbD5MRUZUIE9VVEVSIEpPSU48L2xpdGVyYWw+ LCBzbyB0aGF0IHRoZSBwYXJlbnQgcm93CisgICAgIGlzIGFsd2F5cyBpbmNsdWRlZCBpbnRvIHRo ZSBvdXRwdXQgZXZlbiBpZiBpdCBkb2VzIG5vdCBoYXZlIGFueSBjaGlsZCByb3dzCisgICAgIGFm dGVyIGpvaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xp dGVyYWw+LCB3aXRoIE5VTEwgdmFsdWVzCisgICAgIGluc2VydGVkIGludG8gdGhlIGNoaWxkIGNv bHVtbnMgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgdmFsdWVzIGFyZSBtaXNzaW5nLgorICAg IDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcHRpb24gZm9y IGpvaW5pbmcgY29sdW1ucyB3aXRoIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAuCisgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxp c3Q+CisKKyAgICAgPHBhcmE+CisgICAgIFRvIGpvaW4gc2libGluZyBjb2x1bW5zLCB5b3UgY2Fu IHVzZToKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPlVOSU9OPC9saXRlcmFsPgorICAgIDwvdGVybT4K KyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2VuZXJhdGUgb25lIHJvdyBmb3Ig ZWFjaCB2YWx1ZSBwcm9kdWNlZCBieSBlYWNoIG9mIHRoZSBzaWJsaW5nCisgICAgIGNvbHVtbnMu IFRoZSBjb2x1bW5zIGZyb20gdGhlIG90aGVyIHNpYmxpbmdzIGFyZSBzZXQgdG8gbnVsbC4KKyAg ICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uIGZv ciBqb2luaW5nIHNpYmxpbmcgY29sdW1ucy4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8bGl0ZXJhbD5DUk9TUzwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor CisgICAgPHBhcmE+CisgICAgIEdlbmVyYXRlIG9uZSByb3cgZm9yIGVhY2ggY29tYmluYXRpb24g b2YgdmFsdWVzIGZyb20gdGhlIHNpYmxpbmcgY29sdW1ucy4KKyAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAg IDx0ZXJtPgorICAgICA8bGl0ZXJhbD5QTEFOIERFRkFVTFQ8L2xpdGVyYWw+ICggPGxpdGVyYWw+ PHJlcGxhY2VhYmxlPk9VVEVSIHwgSU5ORVI8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCA8cmVw bGFjZWFibGU+VU5JT04gfCBDUk9TUzwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+PC9saXRlcmFs PiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUaGUg dGVybXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluIHJldmVyc2Ugb3JkZXIuIFRoZQorICAgICAg PGxpdGVyYWw+SU5ORVI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPk9VVEVSPC9saXRlcmFsPiBvcHRp b24gZGVmaW5lcyB0aGUKKyAgICAgIGpvaW5pbmcgcGxhbiBmb3IgcGFyZW50L2NoaWxkIGNvbHVt bnMsIHdoaWxlIDxsaXRlcmFsPlVOSU9OPC9saXRlcmFsPiBvcgorICAgICAgPGxpdGVyYWw+Q1JP U1M8L2xpdGVyYWw+IGFmZmVjdHMgam9pbnMgb2Ygc2libGluZyBjb2x1bW5zLiBUaGlzIGZvcm0K KyAgICAgIG9mIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBw bGFuIGZvcgorICAgICAgYWxsIGNvbHVtbnMgYXQgb25jZS4gRXZlbiB0aG91Z2ggdGhlIHBhdGgg bmFtZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgIDxsaXRlcmFsPlBMQU4gREVGQVVM VDwvbGl0ZXJhbD4gZm9ybSwgdG8gY29uZm9ybSB0byB0aGUgU1FML0pTT04gc3RhbmRhcmQKKyAg ICAgIHRoZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgYWxsIHRoZSBwYXRocyBpZiB0aGUgPGxpdGVy YWw+UExBTjwvbGl0ZXJhbD4KKyAgICAgIGNsYXVzZSBpcyB1c2VkLgorICAgICA8L3BhcmE+Cisg ICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+UExBTiBERUZBVUxUPC9saXRlcmFsPiBpcyBzaW1w bGVyIHRoYW4gc3BlY2lmeWluZyBhIGNvbXBsZXRlCisgICAgICA8bGl0ZXJhbD5QTEFOPC9saXRl cmFsPiwgYW5kIGlzIG9mdGVuIGFsbCB0aGF0IGlzIHJlcXVpcmVkIHRvIGdldCB0aGUgZGVzaXJl ZAorICAgICAgb3V0cHV0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFy bGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICA8cGFyYT5FeGFtcGxlczwvcGFyYT4K KworICAgICA8cGFyYT4KKyAgICAgSW4gdGhlc2UgZXhhbXBsZXMgdGhlIGZvbGxvd2luZyBzbWFs bCB0YWJsZSBzdG9yaW5nIHNvbWUgSlNPTiBkYXRhIHdpbGwgYmUgdXNlZDoKKzxwcm9ncmFtbGlz dGluZz4KK0NSRUFURSBUQUJMRSBteV9maWxtcyAoIGpzIGpzb25iICk7CisKK0lOU0VSVCBJTlRP IG15X2ZpbG1zIFZBTFVFUyAoCisneyAiZmF2b3JpdGVzIiA6IFsKKyAgIHsgImtpbmQiIDogImNv bWVkeSIsICJmaWxtcyIgOiBbCisgICAgIHsgInRpdGxlIiA6ICJCYW5hbmFzIiwKKyAgICAgICAi ZGlyZWN0b3IiIDogIldvb2R5IEFsbGVuIn0sCisgICAgIHsgInRpdGxlIiA6ICJUaGUgRGlubmVy IEdhbWUiLAorICAgICAgICJkaXJlY3RvciIgOiAiRnJhbmNpcyBWZWJlciIgfSBdIH0sCisgICB7 ICJraW5kIiA6ICJob3Jyb3IiLCAiZmlsbXMiIDogWworICAgICB7ICJ0aXRsZSIgOiAiUHN5Y2hv IiwKKyAgICAgICAiZGlyZWN0b3IiIDogIkFsZnJlZCBIaXRjaGNvY2siIH0gXSB9LAorICAgeyAi a2luZCIgOiAidGhyaWxsZXIiLCAiZmlsbXMiIDogWworICAgICB7ICJ0aXRsZSIgOiAiVmVydGln byIsCisgICAgICAgImRpcmVjdG9yIiA6ICJBbGZyZWQgSGl0Y2hjb2NrIiB9IF0gfSwKKyAgIHsg ImtpbmQiIDogImRyYW1hIiwgImZpbG1zIiA6IFsKKyAgICAgeyAidGl0bGUiIDogIllvamltYm8i LAorICAgICAgICJkaXJlY3RvciIgOiAiQWtpcmEgS3Vyb3Nhd2EiIH0gXSB9CisgIF0gfScpOwor PC9wcm9ncmFtbGlzdGluZz4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFF1ZXJ5 IHRoZSA8c3RydWN0bmFtZT5teV9maWxtczwvc3RydWN0bmFtZT4gdGFibGUgaG9sZGluZworICAg ICAgc29tZSBKU09OIGRhdGEgYWJvdXQgdGhlIGZpbG1zIGFuZCBjcmVhdGUgYSB2aWV3IHRoYXQK KyAgICAgIGRpc3RyaWJ1dGVzIHRoZSBmaWxtIGdlbnJlLCB0aXRsZSwgYW5kIGRpcmVjdG9yIGJl dHdlZW4gc2VwYXJhdGUgY29sdW1uczoKKzxzY3JlZW4+CitTRUxFQ1QganQuKiBGUk9NCisgbXlf ZmlsbXMsCisgSlNPTl9UQUJMRSAoIGpzLCAnJC5mYXZvcml0ZXNbKl0nIENPTFVNTlMgKAorICAg aWQgRk9SIE9SRElOQUxJVFksCisgICBraW5kIHRleHQgUEFUSCAnJC5raW5kJywKKyAgIE5FU1RF RCBQQVRIICckLmZpbG1zWypdJyBDT0xVTU5TICgKKyAgICAgdGl0bGUgdGV4dCBQQVRIICckLnRp dGxlJywKKyAgICAgZGlyZWN0b3IgdGV4dCBQQVRIICckLmRpcmVjdG9yJykpKSBBUyBqdDsKKy0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLQorIGlk IHwgICBraW5kICAgfCAgICAgICB0aXRsZSAgICAgIHwgICAgZGlyZWN0b3IKKy0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgIHwgY29tZWR5 ICAgfCBCYW5hbmFzICAgICAgICAgIHwgV29vZHkgQWxsZW4KKyAxICB8IGNvbWVkeSAgIHwgVGhl IERpbm5lciBHYW1lICB8IEZyYW5jaXMgVmViZXIKKyAyICB8IGhvcnJvciAgIHwgUHN5Y2hvICAg ICAgICAgICB8IEFsZnJlZCBIaXRjaGNvY2sKKyAzICB8IHRocmlsbGVyIHwgVmVydGlnbyAgICAg ICAgICB8IEFsZnJlZCBIaXRjaGNvY2sKKyA0ICB8IGRyYW1hICAgIHwgWW9qaW1ibyAgICAgICAg ICB8IEFraXJhIEt1cm9zYXdhCisgKDUgcm93cykKKzwvc2NyZWVuPgorICAgICA8L3BhcmE+CisK KyAgICAgPHBhcmE+CisgICAgICBGaW5kIGEgZGlyZWN0b3IgdGhhdCBoYXMgZG9uZSBmaWxtcyBp biB0d28gZGlmZmVyZW50IGdlbnJlczoKKzxzY3JlZW4+CitTRUxFQ1QKKyAgZGlyZWN0b3IxIEFT IGRpcmVjdG9yLCB0aXRsZTEsIGtpbmQxLCB0aXRsZTIsIGtpbmQyCitGUk9NCisgIG15X2ZpbG1z LAorICBKU09OX1RBQkxFICgganMsICckLmZhdm9yaXRlcycgQVMgZmF2cyBDT0xVTU5TICgKKyAg ICBORVNURUQgUEFUSCAnJFsqXScgQVMgZmlsbXMxIENPTFVNTlMgKAorICAgICAga2luZDEgdGV4 dCBQQVRIICckLmtpbmQnLAorICAgICAgTkVTVEVEIFBBVEggJyQuZmlsbXNbKl0nIEFTIGZpbG0x IENPTFVNTlMgKAorICAgICAgICB0aXRsZTEgdGV4dCBQQVRIICckLnRpdGxlJywKKyAgICAgICAg ZGlyZWN0b3IxIHRleHQgUEFUSCAnJC5kaXJlY3RvcicpCisgICAgKSwKKyAgICBORVNURUQgUEFU SCAnJFsqXScgQVMgZmlsbXMyIENPTFVNTlMgKAorICAgICAga2luZDIgdGV4dCBQQVRIICckLmtp bmQnLAorICAgICAgTkVTVEVEIFBBVEggJyQuZmlsbXNbKl0nIEFTIGZpbG0yIENPTFVNTlMgKAor ICAgICAgICB0aXRsZTIgdGV4dCBQQVRIICckLnRpdGxlJywKKyAgICAgICAgZGlyZWN0b3IyIHRl eHQgUEFUSCAnJC5kaXJlY3RvcicKKyAgICAgICkKKyAgICApCisgICApCisgICBQTEFOIChmYXZz IE9VVEVSICgoZmlsbXMxIElOTkVSIGZpbG0xKSBDUk9TUyAoZmlsbXMyIElOTkVSIGZpbG0yKSkp CisgICkgQVMganQKKyBXSEVSRSBraW5kMSA+IGtpbmQyIEFORCBkaXJlY3RvcjEgPSBkaXJlY3Rv cjI7CisKKyAgICAgZGlyZWN0b3IgICAgIHwgdGl0bGUxICB8ICBraW5kMSAgIHwgdGl0bGUyIHwg a2luZDIKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLQorIEFsZnJlZCBIaXRjaGNvY2sgfCBWZXJ0aWdvIHwgdGhyaWxsZXIgfCBQc3ljaG8g fCBob3Jyb3IKKygxIHJvdykKKzwvc2NyZWVuPgorICAgICA8L3BhcmE+CisgIDwvc2VjdDI+CisK ICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1zcWxqc29uLXBhdGgiPgogICA8dGl0bGU+VGhlIFNRTC9K U09OIFBhdGggTGFuZ3VhZ2U8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRh bG9nL3NxbF9mZWF0dXJlcy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50 eHQKaW5kZXggNzU5OGJkOGYyMi4uOTUwMGE4MGY0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2Zl YXR1cmVzLnR4dApAQCAtNTUxLDEwICs1NTEsMTAgQEAgVDgxNAlDb2xvbiBpbiBKU09OX09CSkVD VCBvciBKU09OX09CSkVDVEFHRwkJCVlFUwogVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVy YXRvcnMJCQlZRVMJCiBUODIyCVNRTC9KU09OOiBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMgcHJl ZGljYXRlCQkJWUVTCQogVDgyMwlTUUwvSlNPTjogUEFTU0lORyBjbGF1c2UJCQlZRVMJCi1UODI0 CUpTT05fVEFCTEU6IHNwZWNpZmljIFBMQU4gY2xhdXNlCQkJTk8JCitUODI0CUpTT05fVEFCTEU6 IHNwZWNpZmljIFBMQU4gY2xhdXNlCQkJWUVTCQogVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5k IE9OIEVSUk9SIGNsYXVzZXMJCQlZRVMJCiBUODI2CUdlbmVyYWwgdmFsdWUgZXhwcmVzc2lvbiBp biBPTiBFUlJPUiBvciBPTiBFTVBUWSBjbGF1c2VzCQkJWUVTCQotVDgyNwlKU09OX1RBQkxFOiBz aWJsaW5nIE5FU1RFRCBDT0xVTU5TIGNsYXVzZXMJCQlOTwkKK1Q4MjcJSlNPTl9UQUJMRTogc2li bGluZyBORVNURUQgQ09MVU1OUyBjbGF1c2VzCQkJWUVTCQogVDgyOAlKU09OX1FVRVJZCQkJWUVT CQogVDgyOQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZRVMJCiBUODMwCUVu Zm9yY2luZyB1bmlxdWUga2V5cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlZ RVMJCkBAIC01NjUsNyArNTY1LDcgQEAgVDgzNAlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiB3aWxk Y2FyZCBtZW1iZXIgYWNjZXNzb3IJCQlZRVMKIFQ4MzUJU1FML0pTT04gcGF0aCBsYW5ndWFnZTog ZmlsdGVyIGV4cHJlc3Npb25zCQkJWUVTCQogVDgzNglTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBz dGFydHMgd2l0aCBwcmVkaWNhdGUJCQlZRVMJCiBUODM3CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6 IHJlZ2V4X2xpa2UgcHJlZGljYXRlCQkJWUVTCQotVDgzOAlKU09OX1RBQkxFOiBQTEFOIERFRkFV TFQgY2xhdXNlCQkJTk8JCitUODM4CUpTT05fVEFCTEU6IFBMQU4gREVGQVVMVCBjbGF1c2UJCQlZ RVMJCiBUODM5CUZvcm1hdHRlZCBjYXN0IG9mIGRhdGV0aW1lcyB0by9mcm9tIGNoYXJhY3RlciBz dHJpbmdzCQkJTk8JCiBUODQwCUhleCBpbnRlZ2VyIGxpdGVyYWxzIGluIFNRTC9KU09OIHBhdGgg bGFuZ3VhZ2UJCQlZRVMJCiBUODUxCVNRTC9KU09OOiBvcHRpb25hbCBrZXl3b3JkcyBmb3IgZGVm YXVsdCBzeW50YXgJCQlZRVMJCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggZjFkNzFiYzU0ZS4u OGUzNTUyNTc4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzg5Miw3ICszODkyLDEzIEBA IEV4cGxhaW5UYXJnZXRSZWwoUGxhbiAqcGxhbiwgSW5kZXggcnRpLCBFeHBsYWluU3RhdGUgKmVz KQogCQkJYnJlYWs7CiAJCWNhc2UgVF9UYWJsZUZ1bmNTY2FuOgogCQkJQXNzZXJ0KHJ0ZS0+cnRl a2luZCA9PSBSVEVfVEFCTEVGVU5DKTsKLQkJCW9iamVjdG5hbWUgPSAieG1sdGFibGUiOworCQkJ aWYgKHJ0ZS0+dGFibGVmdW5jKQorCQkJCWlmIChydGUtPnRhYmxlZnVuYy0+ZnVuY3R5cGUgPT0g VEZUX1hNTFRBQkxFKQorCQkJCQlvYmplY3RuYW1lID0gInhtbHRhYmxlIjsKKwkJCQllbHNlCQkJ LyogTXVzdCBiZSBURlRfSlNPTl9UQUJMRSAqLworCQkJCQlvYmplY3RuYW1lID0gImpzb25fdGFi bGUiOworCQkJZWxzZQorCQkJCW9iamVjdG5hbWUgPSBOVUxMOwogCQkJb2JqZWN0dGFnID0gIlRh YmxlIEZ1bmN0aW9uIE5hbWUiOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9WYWx1ZXNTY2FuOgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggNDNmNjFmNTg3Ni4uNjk5NjY0ZmI5 YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC00MzM0LDYgKzQzMzQs MTIgQEAgRXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVw ICpvcCwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIEpTT05fVEFCTEVfT1A6CisJCQlwb3N0 X2V2YWwtPmp1bXBfZXZhbF9jb2VyY2lvbiA9IC0xOworCQkJKm9wLT5yZXN2YWx1ZSA9IGl0ZW07 CisJCQkqb3AtPnJlc251bGwgPSBmYWxzZTsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQll bG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBqZXhw ci0+b3ApOwogCQkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZVRhYmxlRnVuY3NjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1 bmNzY2FuLmMKaW5kZXggYTYwZGNkNDk0My4uMGQ3ZjUxOGFmZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxlRnVuY3NjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMveG1sLmgiCkBAIC0xNjEsOCArMTYyLDkgQEAgRXhlY0luaXRUYWJsZUZ1bmNTY2FuKFRhYmxl RnVuY1NjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXNjYW5zdGF0ZS0+ c3MucHMucXVhbCA9CiAJCUV4ZWNJbml0UXVhbChub2RlLT5zY2FuLnBsYW4ucXVhbCwgJnNjYW5z dGF0ZS0+c3MucHMpOwogCi0JLyogT25seSBYTUxUQUJMRSBpcyBzdXBwb3J0ZWQgY3VycmVudGx5 ICovCi0Jc2NhbnN0YXRlLT5yb3V0aW5lID0gJlhtbFRhYmxlUm91dGluZTsKKwkvKiBPbmx5IFhN TFRBQkxFIGFuZCBKU09OX1RBQkxFIGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5ICovCisJc2NhbnN0 YXRlLT5yb3V0aW5lID0KKwkJdGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSA/ICZYbWxUYWJs ZVJvdXRpbmUgOiAmSnNvbmJUYWJsZVJvdXRpbmU7CiAKIAlzY2Fuc3RhdGUtPnBlclRhYmxlQ3h0 ID0KIAkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LApAQCAtMTgy LDYgKzE4NCwxMCBAQCBFeGVjSW5pdFRhYmxlRnVuY1NjYW4oVGFibGVGdW5jU2NhbiAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUV4ZWNJbml0RXhwckxpc3QodGYtPmNvbGV4 cHJzLCAoUGxhblN0YXRlICopIHNjYW5zdGF0ZSk7CiAJc2NhbnN0YXRlLT5jb2xkZWZleHBycyA9 CiAJCUV4ZWNJbml0RXhwckxpc3QodGYtPmNvbGRlZmV4cHJzLCAoUGxhblN0YXRlICopIHNjYW5z dGF0ZSk7CisJc2NhbnN0YXRlLT5jb2x2YWxleHBycyA9CisJCUV4ZWNJbml0RXhwckxpc3QodGYt PmNvbHZhbGV4cHJzLCAoUGxhblN0YXRlICopIHNjYW5zdGF0ZSk7CisJc2NhbnN0YXRlLT5wYXNz aW5ndmFsZXhwcnMgPQorCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5wYXNzaW5ndmFsZXhwcnMsIChQ bGFuU3RhdGUgKikgc2NhbnN0YXRlKTsKIAogCXNjYW5zdGF0ZS0+bm90bnVsbHMgPSB0Zi0+bm90 bnVsbHM7CiAKQEAgLTM2OSwxNCArMzc1LDE3IEBAIHRmdW5jSW5pdGlhbGl6ZShUYWJsZUZ1bmNT Y2FuU3RhdGUgKnRzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBEYXR1bSBkb2MpCiAJCXJv dXRpbmUtPlNldE5hbWVzcGFjZSh0c3RhdGUsIG5zX25hbWUsIG5zX3VyaSk7CiAJfQogCi0JLyog SW5zdGFsbCB0aGUgcm93IGZpbHRlciBleHByZXNzaW9uIGludG8gdGhlIHRhYmxlIGJ1aWxkZXIg Y29udGV4dCAqLwotCXZhbHVlID0gRXhlY0V2YWxFeHByKHRzdGF0ZS0+cm93ZXhwciwgZWNvbnRl eHQsICZpc251bGwpOwotCWlmIChpc251bGwpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKLQkJCQkgZXJybXNnKCJyb3cgZmls dGVyIGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbnVsbCIpKSk7CisJaWYgKHJvdXRpbmUtPlNldFJv d0ZpbHRlcikKKwl7CisJCS8qIEluc3RhbGwgdGhlIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbiBpbnRv IHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQgKi8KKwkJdmFsdWUgPSBFeGVjRXZhbEV4cHIodHN0 YXRlLT5yb3dleHByLCBlY29udGV4dCwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX05VTExfVkFMVUVfTk9UX0FMTE9XRUQp LAorCQkJCQkgZXJybXNnKCJyb3cgZmlsdGVyIGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbnVsbCIp KSk7CiAKLQlyb3V0aW5lLT5TZXRSb3dGaWx0ZXIodHN0YXRlLCBUZXh0RGF0dW1HZXRDU3RyaW5n KHZhbHVlKSk7CisJCXJvdXRpbmUtPlNldFJvd0ZpbHRlcih0c3RhdGUsIFRleHREYXR1bUdldENT dHJpbmcodmFsdWUpKTsKKwl9CiAKIAkvKgogCSAqIEluc3RhbGwgdGhlIGNvbHVtbiBmaWx0ZXIg ZXhwcmVzc2lvbnMgaW50byB0aGUgdGFibGUgYnVpbGRlciBjb250ZXh0LgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVu Y3MuYwppbmRleCBkNjMzNmEwYzA0Li44ZDJjMTViNWFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwpA QCAtODc1LDYgKzg3NSwyNSBAQCBtYWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlw ZSwgTm9kZSAqZXhwciwgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiwKIAlyZXR1cm4gYmVoYXZpb3I7 CiB9CiAKKy8qCisgKiBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbiAtCisgKgkgICBjcmVhdGVzIGEg am9pbmVkIEpzb25UYWJsZVBsYW4gbm9kZQorICovCitOb2RlICoKK21ha2VKc29uVGFibGVKb2lu ZWRQbGFuKEpzb25UYWJsZVBsYW5Kb2luVHlwZSB0eXBlLCBOb2RlICpwbGFuMSwgTm9kZSAqcGxh bjIsCisJCQkJCQlpbnQgbG9jYXRpb24pCit7CisJSnNvblRhYmxlUGxhbiAqbiA9IG1ha2VOb2Rl KEpzb25UYWJsZVBsYW4pOworCisJbi0+cGxhbl90eXBlID0gSlNUUF9KT0lORUQ7CisJbi0+am9p bl90eXBlID0gdHlwZTsKKwluLT5wbGFuMSA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIHBsYW4x KTsKKwluLT5wbGFuMiA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIHBsYW4yKTsKKwluLT5sb2Nh dGlvbiA9IGxvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIG47Cit9CisKIC8qCiAgKiBtYWtl SnNvbktleVZhbHVlIC0KICAqCSAgY3JlYXRlcyBhIEpzb25LZXlWYWx1ZSBub2RlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jCmluZGV4IDU1NDg4OWNiN2MuLjJkYTFlMmRmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5j cy5jCkBAIC0yNjk3LDYgKzI2OTcsMTAgQEAgZXhwcmVzc2lvbl90cmVlX3dhbGtlcl9pbXBsKE5v ZGUgKm5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJCWlmIChXQUxLKHRmLT5jb2xkZWZleHBy cykpCiAJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKHRmLT5jb2x2YWxleHBycykpCisJ CQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKHRmLT5wYXNzaW5ndmFsZXhwcnMpKQorCQkJ CQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMzc1Nyw2ICsz NzYxLDggQEAgZXhwcmVzc2lvbl90cmVlX211dGF0b3JfaW1wbChOb2RlICpub2RlLAogCQkJCU1V VEFURShuZXdub2RlLT5yb3dleHByLCB0Zi0+cm93ZXhwciwgTm9kZSAqKTsKIAkJCQlNVVRBVEUo bmV3bm9kZS0+Y29sZXhwcnMsIHRmLT5jb2xleHBycywgTGlzdCAqKTsKIAkJCQlNVVRBVEUobmV3 bm9kZS0+Y29sZGVmZXhwcnMsIHRmLT5jb2xkZWZleHBycywgTGlzdCAqKTsKKwkJCQlNVVRBVEUo bmV3bm9kZS0+Y29sdmFsZXhwcnMsIHRmLT5jb2x2YWxleHBycywgTGlzdCAqKTsKKwkJCQlNVVRB VEUobmV3bm9kZS0+cGFzc2luZ3ZhbGV4cHJzLCB0Zi0+cGFzc2luZ3ZhbGV4cHJzLCBMaXN0ICop OwogCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOwogCQkJfQogCQkJYnJlYWs7CkBAIC00MTgx LDYgKzQxODcsMzggQEAgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2Rl LAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFRfSnNvblRhYmxl OgorCQkJeworCQkJCUpzb25UYWJsZSAgKmp0ID0gKEpzb25UYWJsZSAqKSBub2RlOworCisJCQkJ aWYgKFdBTEsoanQtPmNvbnRleHRfaXRlbSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChX QUxLKGp0LT5wYXRoc3BlYykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0LT5w YXNzaW5nKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanQtPmNvbHVtbnMpKQor CQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdC0+b25fZW1wdHkpKQorCQkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdC0+b25fZXJyb3IpKQorCQkJCQlyZXR1cm4gdHJ1ZTsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvblRhYmxlQ29sdW1uOgorCQkJeworCQkJCUpz b25UYWJsZUNvbHVtbiAqanRjID0gKEpzb25UYWJsZUNvbHVtbiAqKSBub2RlOworCisJCQkJaWYg KFdBTEsoanRjLT50eXBlTmFtZSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0 Yy0+b25fZW1wdHkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdGMtPm9uX2Vy cm9yKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVT VEVEICYmIFdBTEsoanRjLT5jb2x1bW5zKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQli cmVhazsKIAkJY2FzZSBUX051bGxUZXN0OgogCQkJcmV0dXJuIFdBTEsoKChOdWxsVGVzdCAqKSBu b2RlKS0+YXJnKTsKIAkJY2FzZSBUX0Jvb2xlYW5UZXN0OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFyc2VyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlCmluZGV4IDQw MWMxNjY4NmMuLjMxNjJhMDFmMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtl ZmlsZQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAg T0JKUyA9IFwKIAlwYXJzZV9lbnIubyBcCiAJcGFyc2VfZXhwci5vIFwKIAlwYXJzZV9mdW5jLm8g XAorCXBhcnNlX2pzb250YWJsZS5vIFwKIAlwYXJzZV9tZXJnZS5vIFwKIAlwYXJzZV9ub2RlLm8g XAogCXBhcnNlX29wZXIubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCA4ZDVlMDc0NzhmLi40YjE3NWVmNjQ5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkKQEAgLTY1MywxNSArNjUzLDMwIEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJCQkJanNvbl9hZ2dyZWdhdGVfZnVuYwogCQkJCWpzb25fYXJndW1lbnQKIAkJCQlqc29u X2JlaGF2aW9yCisJCQkJanNvbl90YWJsZQorCQkJCWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRp b24KKwkJCQlqc29uX3RhYmxlX3BsYW5fY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGVfcGxhbgor CQkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUKKwkJCQlqc29uX3RhYmxlX3BsYW5fb3V0ZXIKKwkJ CQlqc29uX3RhYmxlX3BsYW5faW5uZXIKKwkJCQlqc29uX3RhYmxlX3BsYW5fdW5pb24KKwkJCQlq c29uX3RhYmxlX3BsYW5fY3Jvc3MKKwkJCQlqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQogJXR5cGUg PGxpc3Q+CWpzb25fbmFtZV9hbmRfdmFsdWVfbGlzdAogCQkJCWpzb25fdmFsdWVfZXhwcl9saXN0 CiAJCQkJanNvbl9hcnJheV9hZ2dyZWdhdGVfb3JkZXJfYnlfY2xhdXNlX29wdAogCQkJCWpzb25f YXJndW1lbnRzCiAJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CiAJCQkJanNvbl9wYXNzaW5n X2NsYXVzZV9vcHQKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uX2xpc3QKKyV0eXBl IDxzdHI+CQlqc29uX3RhYmxlX2NvbHVtbl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAog JXR5cGUgPGl2YWw+CWpzb25fYmVoYXZpb3JfdHlwZQogCQkJCWpzb25fcHJlZGljYXRlX3R5cGVf Y29uc3RyYWludAogCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCQlqc29uX3RhYmxlX2Rl ZmF1bHRfcGxhbl9jaG9pY2VzCisJCQkJanNvbl90YWJsZV9kZWZhdWx0X3BsYW5faW5uZXJfb3V0 ZXIKKwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcwogCQkJCWpzb25fd3Jh cHBlcl9iZWhhdmlvcgogJXR5cGUgPGJvb2xlYW4+CWpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3Ry YWludF9vcHQKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKQEAg LTczMSw3ICs3NDYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hh ciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCUlOVEVSU0VDVCBJTlRF UlZBTCBJTlRPIElOVk9LRVIgSVMgSVNOVUxMIElTT0xBVElPTgogCiAJSk9JTiBKU09OIEpTT05f QVJSQVkgSlNPTl9BUlJBWUFHRyBKU09OX0VYSVNUUyBKU09OX09CSkVDVCBKU09OX09CSkVDVEFH RwotCUpTT05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJWkUgSlNPTl9WQUxVRQorCUpT T05fUVVFUlkgSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJWkUgSlNPTl9UQUJMRSBKU09OX1ZBTFVF CiAKIAlLRUVQIEtFWSBLRVlTCiAKQEAgLTc0Miw4ICs3NTcsOCBAQCBzdGF0aWMgTm9kZSAqbWFr ZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAq cXVlcnkpOwogCU1BUFBJTkcgTUFUQ0ggTUFUQ0hFRCBNQVRFUklBTElaRUQgTUFYVkFMVUUgTUVS R0UgTUVUSE9ECiAJTUlOVVRFX1AgTUlOVkFMVUUgTU9ERSBNT05USF9QIE1PVkUKIAotCU5BTUVf UCBOQU1FUyBOQVRJT05BTCBOQVRVUkFMIE5DSEFSIE5FVyBORVhUIE5GQyBORkQgTkZLQyBORktE IE5PIE5PTkUKLQlOT1JNQUxJWkUgTk9STUFMSVpFRAorCU5BTUVfUCBOQU1FUyBOQVRJT05BTCBO QVRVUkFMIE5DSEFSIE5FU1RFRCBORVcgTkVYVCBORkMgTkZEIE5GS0MgTkZLRCBOTworCU5PTkUg Tk9STUFMSVpFIE5PUk1BTElaRUQKIAlOT1QgTk9USElORyBOT1RJRlkgTk9UTlVMTCBOT1dBSVQg TlVMTF9QIE5VTExJRgogCU5VTExTX1AgTlVNRVJJQwogCkBAIC03NTEsOCArNzY2LDggQEAgc3Rh dGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFs aWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlPUkRFUiBPUkRJTkFMSVRZIE9USEVSUyBPVVRfUCBPVVRF Ul9QCiAJT1ZFUiBPVkVSTEFQUyBPVkVSTEFZIE9WRVJSSURJTkcgT1dORUQgT1dORVIKIAotCVBB UkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElBTCBQQVJUSVRJT04gUEFTU0lORyBQQVNTV09S RAotCVBMQUNJTkcgUExBTlMgUE9MSUNZCisJUEFSQUxMRUwgUEFSQU1FVEVSIFBBUlNFUiBQQVJU SUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JEIFBBVEgKKwlQTEFDSU5HIFBMQU4gUExBTlMg UE9MSUNZCiAJUE9TSVRJT04gUFJFQ0VESU5HIFBSRUNJU0lPTiBQUkVTRVJWRSBQUkVQQVJFIFBS RVBBUkVEIFBSSU1BUlkKIAlQUklPUiBQUklWSUxFR0VTIFBST0NFRFVSQUwgUFJPQ0VEVVJFIFBS T0NFRFVSRVMgUFJPR1JBTSBQVUJMSUNBVElPTgogCkBAIC04NzAsMTAgKzg4NSwxMyBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxp YXNlcywgTm9kZSAqcXVlcnkpOwogICogdGhlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVC4gIFRo aXMgYWxsb3dzIHJlc29sdmluZyBjb25mbGljdHMgaW4gdGhlCiAgKiBqc29uX3ByZWRpY2F0ZV90 eXBlX2NvbnN0cmFpbnQgYW5kIGpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKICAq IHByb2R1Y3Rpb25zIChzZWUgY29tbWVudHMgdGhlcmUpLgorICoKKyAqIExpa2UgdGhlIFVOQk9V TkRFRCBQUkVDRURJTkcvRk9MTE9XSU5HIGNhc2UsIE5FU1RFRCBpcyBhc3NpZ25lZCBhIGxvd2Vy CisgKiBwcmVjZWRlbmNlIHRoYW4gUEFUSCB0byBmaXggYW1iaWd1aXR5IGluIHRoZSBqc29uX3Rh YmxlIHByb2R1Y3Rpb24uCiAgKi8KLSVub25hc3NvYwlVTkJPVU5ERUQJCS8qIGlkZWFsbHkgd291 bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8KKyVub25hc3NvYwlVTkJPVU5ERUQg TkVTVEVEIC8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNlZGVuY2UgYXMgSURFTlQgKi8K ICVub25hc3NvYwlJREVOVCBQQVJUSVRJT04gUkFOR0UgUk9XUyBHUk9VUFMgUFJFQ0VESU5HIEZP TExPV0lORyBDVUJFIFJPTExVUAotCQkJU0VUIEtFWVMgT0JKRUNUX1AgU0NBTEFSIFZBTFVFX1Ag V0lUSCBXSVRIT1VUCisJCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FMQVIgVkFMVUVfUCBXSVRIIFdJ VEhPVVQgUEFUSAogJWxlZnQJCU9wIE9QRVJBVE9SCQkvKiBtdWx0aS1jaGFyYWN0ZXIgb3BzIGFu ZCB1c2VyLWRlZmluZWQgb3BlcmF0b3JzICovCiAlbGVmdAkJJysnICctJwogJWxlZnQJCScqJyAn LycgJyUnCkBAIC04OTQsNyArOTEyLDYgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3 U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKICAqIGxl ZnQtYXNzb2NpYXRpdml0eSBhbW9uZyB0aGUgSk9JTiBydWxlcyB0aGVtc2VsdmVzLgogICovCiAl bGVmdAkJSk9JTiBDUk9TUyBMRUZUIEZVTEwgUklHSFQgSU5ORVJfUCBOQVRVUkFMCi0KICUlCiAK IC8qCkBAIC0xMzQyMSw2ICsxMzQzOCwyMSBAQCB0YWJsZV9yZWY6CXJlbGF0aW9uX2V4cHIgb3B0 X2FsaWFzX2NsYXVzZQogCQkJCQkkMi0+YWxpYXMgPSAkNDsKIAkJCQkJJCQgPSAoTm9kZSAqKSAk MjsKIAkJCQl9CisJCQl8IGpzb25fdGFibGUgb3B0X2FsaWFzX2NsYXVzZQorCQkJCXsKKwkJCQkJ SnNvblRhYmxlICAqanQgPSBjYXN0Tm9kZShKc29uVGFibGUsICQxKTsKKworCQkJCQlqdC0+YWxp YXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9CisJCQl8IExBVEVSQUxfUCBq c29uX3RhYmxlIG9wdF9hbGlhc19jbGF1c2UKKwkJCQl7CisJCQkJCUpzb25UYWJsZSAgKmp0ID0g Y2FzdE5vZGUoSnNvblRhYmxlLCAkMik7CisKKwkJCQkJanQtPmFsaWFzID0gJDM7CisJCQkJCWp0 LT5sYXRlcmFsID0gdHJ1ZTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBqdDsKKwkJCQl9CiAJCTsKIAog CkBAIC0xMzk4OCw2ICsxNDAyMCw4IEBAIHhtbHRhYmxlX2NvbHVtbl9vcHRpb25fZWw6CiAJCQkJ eyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKHRy dWUpLCBAMSk7IH0KIAkJCXwgTlVMTF9QCiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3Rf bnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKGZhbHNlKSwgQDEpOyB9CisJCQl8IFBBVEggYl9l eHByCisJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJwYXRoIiwgJDIsIEAxKTsgfQogCQk7CiAKIHht bF9uYW1lc3BhY2VfbGlzdDoKQEAgLTE2NjczLDYgKzE2NzA3LDI0OCBAQCBqc29uX3F1b3Rlc19j bGF1c2Vfb3B0OgogCQkJfCAvKiBFTVBUWSAqLwkJCQkJCXsgJCQgPSBKU19RVU9URVNfVU5TUEVD OyB9CiAJCTsKIAoranNvbl90YWJsZToKKwkJCUpTT05fVEFCTEUgJygnCisJCQkJanNvbl92YWx1 ZV9leHByICcsJyBhX2V4cHIganNvbl9wYXNzaW5nX2NsYXVzZV9vcHQKKwkJCQlDT0xVTU5TICco JyBqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uX2xpc3QgJyknCisJCQkJanNvbl90YWJsZV9w bGFuX2NsYXVzZV9vcHQKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQKKwkJCScpJworCQkJ CXsKKwkJCQkJSnNvblRhYmxlICpuID0gbWFrZU5vZGUoSnNvblRhYmxlKTsKKworCQkJCQluLT5j b250ZXh0X2l0ZW0gPSAoSnNvblZhbHVlRXhwciAqKSAkMzsKKwkJCQkJbi0+cGF0aHNwZWMgPSAk NTsKKwkJCQkJbi0+cGF0aG5hbWUgPSBOVUxMOworCQkJCQluLT5wYXNzaW5nID0gJDY7CisJCQkJ CW4tPmNvbHVtbnMgPSAkOTsKKwkJCQkJbi0+cGxhbiA9IChKc29uVGFibGVQbGFuICopICQxMTsK KwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQxMik7CisJCQkJ CW4tPm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAqKSBsc2Vjb25kKCQxMik7CisJCQkJCW4tPmxv Y2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEpTT05fVEFC TEUgJygnCisJCQkJanNvbl92YWx1ZV9leHByICcsJyBhX2V4cHIgQVMgbmFtZSBqc29uX3Bhc3Np bmdfY2xhdXNlX29wdAorCQkJCUNPTFVNTlMgJygnIGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRp b25fbGlzdCAnKScKKwkJCQlqc29uX3RhYmxlX3BsYW5fY2xhdXNlX29wdAorCQkJCWpzb25fYmVo YXZpb3JfY2xhdXNlX29wdAorCQkJJyknCisJCQkJeworCQkJCQlKc29uVGFibGUgKm4gPSBtYWtl Tm9kZShKc29uVGFibGUpOworCisJCQkJCW4tPmNvbnRleHRfaXRlbSA9IChKc29uVmFsdWVFeHBy ICopICQzOworCQkJCQluLT5wYXRoc3BlYyA9ICQ1OworCQkJCQluLT5wYXRobmFtZSA9ICQ3Owor CQkJCQluLT5wYXNzaW5nID0gJDg7CisJCQkJCW4tPmNvbHVtbnMgPSAkMTE7CisJCQkJCW4tPnBs YW4gPSAoSnNvblRhYmxlUGxhbiAqKSAkMTM7CisJCQkJCW4tPm9uX2VtcHR5ID0gKEpzb25CZWhh dmlvciAqKSBsaW5pdGlhbCgkMTQpOworCQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3Ig KikgbHNlY29uZCgkMTQpOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2Rl ICopIG47CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdDoK KwkJCWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb24KKwkJCQl7ICQkID0gbGlzdF9tYWtlMSgk MSk7IH0KKwkJCXwganNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0ICcsJyBqc29uX3Rh YmxlX2NvbHVtbl9kZWZpbml0aW9uCisJCQkJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCQk7 CisKK2pzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb246CisJCQlDb2xJZCBGT1IgT1JESU5BTElU WQorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29s dW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX0ZPUl9PUkRJTkFMSVRZOworCQkJCQluLT5u YW1lID0gJDE7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsK KwkJCQl9CisJCQl8IENvbElkIFR5cGVuYW1lCisJCQkJanNvbl90YWJsZV9jb2x1bW5fcGF0aF9z cGVjaWZpY2F0aW9uX2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlq c29uX3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQkJ eworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOwor CisJCQkJCW4tPmNvbHR5cGUgPSBKVENfUkVHVUxBUjsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJ CQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19G T1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAk MzsKKwkJCQkJbi0+d3JhcHBlciA9ICQ0OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJzZS1hbmFs eXNpcyEgKi8KKwkJCQkJbi0+cXVvdGVzID0gJDU7IC8qIGRpc2FsbG93ZWQgZHVyaW5nIHBhcnNl LWFuYWx5c2lzISAqLworCQkJCQluLT5vbl9lbXB0eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRp YWwoJDYpOworCQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29uZCgkNik7 CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJ CQl8IENvbElkIFR5cGVuYW1lIGpzb25fZm9ybWF0X2NsYXVzZQorCQkJCWpzb25fdGFibGVfY29s dW1uX3BhdGhfc3BlY2lmaWNhdGlvbl9jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2 aW9yCisJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNl X29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxl Q29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQkJbi0+bmFt ZSA9ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSAoSnNvbkZv cm1hdCAqKSAkMzsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNDsKKwkJCQkJbi0+d3JhcHBlciA9ICQ1 OworCQkJCQluLT5xdW90ZXMgPSAkNjsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9y ICopIGxpbml0aWFsKCQ3KTsKKwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxz ZWNvbmQoJDcpOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47 CisJCQkJfQorCQkJfCBDb2xJZCBUeXBlbmFtZQorCQkJCUVYSVNUUyBqc29uX3RhYmxlX2NvbHVt bl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAorCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNl X29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxl Q29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX0VYSVNUUzsKKwkJCQkJbi0+bmFtZSA9 ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZv cm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCQkJbi0+d3Jh cHBlciA9IEpTV19OT05FOworCQkJCQluLT5xdW90ZXMgPSBKU19RVU9URVNfVU5TUEVDOworCQkJ CQluLT5wYXRoc3BlYyA9ICQ0OworCQkJCQluLT5vbl9lbXB0eSA9IChKc29uQmVoYXZpb3IgKikg bGluaXRpYWwoJDUpOworCQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29u ZCgkNSk7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJ CQl9CisJCQl8IE5FU1RFRCBwYXRoX29wdCBTY29uc3QKKwkJCQlDT0xVTU5TICcoJyBqc29uX3Rh YmxlX2NvbHVtbl9kZWZpbml0aW9uX2xpc3QgJyknCisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1 bW4gKm4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBK VENfTkVTVEVEOworCQkJCQluLT5wYXRoc3BlYyA9ICQzOworCQkJCQluLT5wYXRobmFtZSA9IE5V TEw7CisJCQkJCW4tPmNvbHVtbnMgPSAkNjsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgTkVTVEVEIHBhdGhfb3B0IFNjb25zdCBBUyBu YW1lCisJCQkJQ09MVU1OUyAnKCcganNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0ICcp JworCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29s dW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX05FU1RFRDsKKwkJCQkJbi0+cGF0aHNwZWMg PSAkMzsKKwkJCQkJbi0+cGF0aG5hbWUgPSAkNTsKKwkJCQkJbi0+Y29sdW1ucyA9ICQ4OworCQkJ CQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQk7CisK K3BhdGhfb3B0OgorCQkJUEFUSAorCQkJfCAvKiBFTVBUWSAqLworCQk7CisKK2pzb25fdGFibGVf Y29sdW1uX3BhdGhfc3BlY2lmaWNhdGlvbl9jbGF1c2Vfb3B0OgorCQkJUEFUSCBTY29uc3QJCQkJ CQkJCXsgJCQgPSAkMjsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCQkJCQl7ICQkID0gTlVMTDsgfQor CQk7CisKK2pzb25fdGFibGVfcGxhbl9jbGF1c2Vfb3B0OgorCQkJUExBTiAnKCcganNvbl90YWJs ZV9wbGFuICcpJwkJCXsgJCQgPSAkMzsgfQorCQkJfCBQTEFOIERFRkFVTFQgJygnIGpzb25fdGFi bGVfZGVmYXVsdF9wbGFuX2Nob2ljZXMgJyknCisJCQkJeworCQkJCQlKc29uVGFibGVQbGFuICpu ID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7CisKKwkJCQkJbi0+cGxhbl90eXBlID0gSlNUUF9E RUZBVUxUOworCQkJCQluLT5qb2luX3R5cGUgPSAkNDsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsK KwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgLyogRU1QVFkgKi8JCQkJCQkJeyAk JCA9IE5VTEw7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW46CisJCQlqc29uX3RhYmxlX3BsYW5f c2ltcGxlCisJCQl8IGpzb25fdGFibGVfcGxhbl9vdXRlcgorCQkJfCBqc29uX3RhYmxlX3BsYW5f aW5uZXIKKwkJCXwganNvbl90YWJsZV9wbGFuX3VuaW9uCisJCQl8IGpzb25fdGFibGVfcGxhbl9j cm9zcworCQk7CisKK2pzb25fdGFibGVfcGxhbl9zaW1wbGU6CisJCQluYW1lCisJCQkJeworCQkJ CQlKc29uVGFibGVQbGFuICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7CisKKwkJCQkJbi0+ cGxhbl90eXBlID0gSlNUUF9TSU1QTEU7CisJCQkJCW4tPnBhdGhuYW1lID0gJDE7CisJCQkJCW4t PmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCTsKKworanNv bl90YWJsZV9wbGFuX3ByaW1hcnk6CisJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlCQkJCQkJeyAk JCA9ICQxOyB9CisJCQl8ICcoJyBqc29uX3RhYmxlX3BsYW4gJyknCisJCQkJeworCQkJCQljYXN0 Tm9kZShKc29uVGFibGVQbGFuLCAkMiktPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gJDI7CisJ CQkJfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9vdXRlcjoKKwkJCWpzb25fdGFibGVfcGxhbl9z aW1wbGUgT1VURVJfUCBqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtlSnNv blRhYmxlSm9pbmVkUGxhbihKU1RQSl9PVVRFUiwgJDEsICQzLCBAMSk7IH0KKwkJOworCitqc29u X3RhYmxlX3BsYW5faW5uZXI6CisJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlIElOTkVSX1AganNv bl90YWJsZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4o SlNUUEpfSU5ORVIsICQxLCAkMywgQDEpOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFuX3VuaW9u OgorCQkJanNvbl90YWJsZV9wbGFuX3ByaW1hcnkgVU5JT04ganNvbl90YWJsZV9wbGFuX3ByaW1h cnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUEpfVU5JT04sICQxLCAk MywgQDEpOyB9CisJCQl8IGpzb25fdGFibGVfcGxhbl91bmlvbiBVTklPTiBqc29uX3RhYmxlX3Bs YW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQSl9VTklP TiwgJDEsICQzLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fY3Jvc3M6CisJCQlqc29u X3RhYmxlX3BsYW5fcHJpbWFyeSBDUk9TUyBqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsg JCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQSl9DUk9TUywgJDEsICQzLCBAMSk7IH0K KwkJCXwganNvbl90YWJsZV9wbGFuX2Nyb3NzIENST1NTIGpzb25fdGFibGVfcGxhbl9wcmltYXJ5 CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpTVFBKX0NST1NTLCAkMSwgJDMs IEAxKTsgfQorCQk7CisKK2pzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2ljZXM6CisJCQlqc29u X3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgorCQkJCXsgJCQgPSAkMSB8IEpTVFBKX1VO SU9OOyB9CisJCQl8IGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzCisJCQkJeyAk JCA9ICQxIHwgSlNUUEpfT1VURVI7IH0KKwkJCXwganNvbl90YWJsZV9kZWZhdWx0X3BsYW5faW5u ZXJfb3V0ZXIgJywnIGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzCisJCQkJeyAk JCA9ICQxIHwgJDM7IH0KKwkJCXwganNvbl90YWJsZV9kZWZhdWx0X3BsYW5fdW5pb25fY3Jvc3Mg JywnIGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX2lubmVyX291dGVyCisJCQkJeyAkJCA9ICQxIHwg JDM7IH0KKwkJOworCitqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcjoKKwkJCUlO TkVSX1AJCQkJCQkJCQkJeyAkJCA9IEpTVFBKX0lOTkVSOyB9CisJCQl8IE9VVEVSX1AJCQkJCQkJ CQl7ICQkID0gSlNUUEpfT1VURVI7IH0KKwkJOworCitqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91 bmlvbl9jcm9zczoKKwkJCVVOSU9OCQkJCQkJCQkJCXsgJCQgPSBKU1RQSl9VTklPTjsgfQorCQkJ fCBDUk9TUwkJCQkJCQkJCQl7ICQkID0gSlNUUEpfQ1JPU1M7IH0KKwkJOworCiBqc29uX3JldHVy bmluZ19jbGF1c2Vfb3B0OgogCQkJUkVUVVJOSU5HIFR5cGVuYW1lIGpzb25fZm9ybWF0X2NsYXVz ZV9vcHQKIAkJCQl7CkBAIC0xNzQxMSw2ICsxNzY4Nyw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoK IAkJCXwgTU9WRQogCQkJfCBOQU1FX1AKIAkJCXwgTkFNRVMKKwkJCXwgTkVTVEVECiAJCQl8IE5F VwogCQkJfCBORVhUCiAJCQl8IE5GQwpAQCAtMTc0NDUsNiArMTc3MjIsOCBAQCB1bnJlc2VydmVk X2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgogCQkJfCBQQVNTSU5HCiAJCQl8IFBBU1NXT1JECisJ CQl8IFBBVEgKKwkJCXwgUExBTgogCQkJfCBQTEFOUwogCQkJfCBQT0xJQ1kKIAkJCXwgUFJFQ0VE SU5HCkBAIC0xNzYwOSw2ICsxNzg4OCw3IEBAIGNvbF9uYW1lX2tleXdvcmQ6CiAJCQl8IEpTT05f UVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9U QUJMRQogCQkJfCBKU09OX1ZBTFVFCiAJCQl8IExFQVNUCiAJCQl8IE5BVElPTkFMCkBAIC0xNzk3 Nyw2ICsxODI1Nyw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgSlNPTl9RVUVSWQogCQkJ fCBKU09OX1NDQUxBUgogCQkJfCBKU09OX1NFUklBTElaRQorCQkJfCBKU09OX1RBQkxFCiAJCQl8 IEpTT05fVkFMVUUKIAkJCXwgS0VFUAogCQkJfCBLRVkKQEAgLTE4MDE2LDYgKzE4Mjk3LDcgQEAg YmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBOQVRJT05BTAogCQkJfCBOQVRVUkFMCiAJCQl8IE5D SEFSCisJCQl8IE5FU1RFRAogCQkJfCBORVcKIAkJCXwgTkVYVAogCQkJfCBORkMKQEAgLTE4MDYw LDcgKzE4MzQyLDkgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBQQVJUSVRJT04KIAkJCXwg UEFTU0lORwogCQkJfCBQQVNTV09SRAorCQkJfCBQQVRICiAJCQl8IFBMQUNJTkcKKwkJCXwgUExB TgogCQkJfCBQTEFOUwogCQkJfCBQT0xJQ1kKIAkJCXwgUE9TSVRJT04KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5i dWlsZAppbmRleCA5NDUxN2E3ZjdkLi4wZjBlNGFjN2NhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxk CkBAIC0xMCw2ICsxMCw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ3BhcnNlX2Vu ci5jJywKICAgJ3BhcnNlX2V4cHIuYycsCiAgICdwYXJzZV9mdW5jLmMnLAorICAncGFyc2VfanNv bnRhYmxlLmMnLAogICAncGFyc2VfbWVyZ2UuYycsCiAgICdwYXJzZV9ub2RlLmMnLAogICAncGFy c2Vfb3Blci5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2Uu YyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYwppbmRleCAzMzRiOWI0MmJkLi5h ZmZkODEyNjE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCkBAIC02OTcsNyArNjk3LDEx IEBAIHRyYW5zZm9ybVJhbmdlVGFibGVGdW5jKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUmFuZ2VUYWJs ZUZ1bmMgKnJ0ZikKIAljaGFyCSAgKipuYW1lczsKIAlpbnQJCQljb2xubzsKIAotCS8qIEN1cnJl bnRseSBvbmx5IFhNTFRBQkxFIGlzIHN1cHBvcnRlZCAqLworCS8qCisJICogQ3VycmVudGx5IHdl IG9ubHkgc3VwcG9ydCBYTUxUQUJMRSBoZXJlLiAgU2VlIHRyYW5zZm9ybUpzb25UYWJsZSgpIGZv cgorCSAqIEpTT05fVEFCTEUgc3VwcG9ydC4KKwkgKi8KKwl0Zi0+ZnVuY3R5cGUgPSBURlRfWE1M VEFCTEU7CiAJY29uc3RydWN0TmFtZSA9ICJYTUxUQUJMRSI7CiAJZG9jVHlwZSA9IFhNTE9JRDsK IApAQCAtMTEwNCwxMyArMTEwOCwxNyBAQCB0cmFuc2Zvcm1Gcm9tQ2xhdXNlSXRlbShQYXJzZVN0 YXRlICpwc3RhdGUsIE5vZGUgKm4sCiAJCXJ0ci0+cnRpbmRleCA9IG5zaXRlbS0+cF9ydGluZGV4 OwogCQlyZXR1cm4gKE5vZGUgKikgcnRyOwogCX0KLQllbHNlIGlmIChJc0EobiwgUmFuZ2VUYWJs ZUZ1bmMpKQorCWVsc2UgaWYgKElzQShuLCBSYW5nZVRhYmxlRnVuYykgfHwgSXNBKG4sIEpzb25U YWJsZSkpCiAJewogCQkvKiB0YWJsZSBmdW5jdGlvbiBpcyBsaWtlIGEgcGxhaW4gcmVsYXRpb24g Ki8KIAkJUmFuZ2VUYmxSZWYgKnJ0cjsKIAkJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07CiAK LQkJbnNpdGVtID0gdHJhbnNmb3JtUmFuZ2VUYWJsZUZ1bmMocHN0YXRlLCAoUmFuZ2VUYWJsZUZ1 bmMgKikgbik7CisJCWlmIChJc0EobiwgUmFuZ2VUYWJsZUZ1bmMpKQorCQkJbnNpdGVtID0gdHJh bnNmb3JtUmFuZ2VUYWJsZUZ1bmMocHN0YXRlLCAoUmFuZ2VUYWJsZUZ1bmMgKikgbik7CisJCWVs c2UKKwkJCW5zaXRlbSA9IHRyYW5zZm9ybUpzb25UYWJsZShwc3RhdGUsIChKc29uVGFibGUgKikg bik7CisKIAkJKnRvcF9uc2l0ZW0gPSBuc2l0ZW07CiAJCSpuYW1lc3BhY2UgPSBsaXN0X21ha2Ux KG5zaXRlbSk7CiAJCXJ0ciA9IG1ha2VOb2RlKFJhbmdlVGJsUmVmKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf ZXhwci5jCmluZGV4IDc0NTVkODRiZmIuLmU0NzRlMDY0M2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4 cHIuYwpAQCAtNDIzOCw2ICs0MjM4LDkgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCQljYXNlIEpTT05fVkFMVUVfT1A6CiAJ CQlmdW5jX25hbWUgPSAiSlNPTl9WQUxVRSI7CiAJCQlicmVhazsKKwkJY2FzZSBKU09OX1RBQkxF X09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fVEFCTEUiOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6 CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3AiKTsKIAkJCWJyZWFrOwpA QCAtNDI3NSw2ICs0Mjc4LDQyIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpw c3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQg PSBCT09MT0lEOwogCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsKIAkJCX0KKwkJ CS8qIEpTT05fVEFCTEUoKSBDT0xVTU5TIGNhbiBzcGVjaWZ5IGEgbm9uLWJvb2xlYW4gdHlwZS4g Ki8KKwkJCWVsc2UgaWYgKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCAhPSBCT09MT0lEKQorCQkJ eworCQkJCU5vZGUJICAgKmNvZXJjaW9uX2V4cHI7CisJCQkJQ2FzZVRlc3RFeHByICpwbGFjZWhv bGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisJCQkJaW50CQkJbG9jYXRpb24gPSBleHBy TG9jYXRpb24oKE5vZGUgKikganNleHByKTsKKworCQkJCS8qCisJCQkJICogV2UgYWJ1c2UgQ2Fz ZVRlc3RFeHByIGhlcmUgYXMgcGxhY2Vob2xkZXIgdG8gcGFzcyB0aGUKKwkJCQkgKiByZXN1bHQg b2YgZXZhbHVhdGluZyBKU09OX0VYSVNUUyB0byB0aGUgY29lcmNpb24KKwkJCQkgKiBleHByZXNz aW9uLgorCQkJCSAqLworCQkJCXBsYWNlaG9sZGVyLT50eXBlSWQgPSBCT09MT0lEOworCQkJCXBs YWNlaG9sZGVyLT50eXBlTW9kID0gLTE7CisJCQkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IElu dmFsaWRPaWQ7CisKKwkJCQljb2VyY2lvbl9leHByID0KKwkJCQkJY29lcmNlX3RvX3RhcmdldF90 eXBlKHBzdGF0ZSwgKE5vZGUgKikgcGxhY2Vob2xkZXIsIEJPT0xPSUQsCisJCQkJCQkJCQkJICBq c2V4cHItPnJldHVybmluZy0+dHlwaWQsCisJCQkJCQkJCQkJICBqc2V4cHItPnJldHVybmluZy0+ dHlwbW9kLAorCQkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsCisJCQkJCQkJCQkJICBDT0VS Q0VfSU1QTElDSVRfQ0FTVCwKKwkJCQkJCQkJCQkgIGxvY2F0aW9uKTsKKworCQkJCWlmIChjb2Vy Y2lvbl9leHByID09IE5VTEwpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9DQU5OT1RfQ09FUkNFKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3QgY2FzdCB0eXBl ICVzIHRvICVzIiwKKwkJCQkJCQkJCWZvcm1hdF90eXBlX2JlKEJPT0xPSUQpLAorCQkJCQkJCQkJ Zm9ybWF0X3R5cGVfYmUoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKSksCisJCQkJCQkJIHBhcnNl cl9jb2VyY2lvbl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uLCAoTm9kZSAqKSBqc2V4cHIp KSk7CisKKwkJCQlpZiAoY29lcmNpb25fZXhwciAhPSAoTm9kZSAqKSBwbGFjZWhvbGRlcikKKwkJ CQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2VyY2lvbl9leHByOworCQkJfQorCiAKIAkJ CWpzZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5v bl9lcnJvciwKIAkJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9GQUxTRSwKQEAgLTQzMzIsNiAr NDM3MSwxOSBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u RnVuY0V4cHIgKmZ1bmMpCiAJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5nKTsKIAkJCWJy ZWFrOwogCisJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJCWZ1bmNfbmFtZSA9ICJKU09OX1RBQkxF IjsKKworCQkJanNleHByID0gdHJhbnNmb3JtSnNvbkV4cHJDb21tb24ocHN0YXRlLCBmdW5jLCBm dW5jX25hbWUpOworCQkJanNleHByLT5yZXR1cm5pbmcgPSBtYWtlTm9kZShKc29uUmV0dXJuaW5n KTsKKwkJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JN QVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCWpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCA9IGV4cHJUeXBlKGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpOworCQkJanNleHByLT5yZXR1 cm5pbmctPnR5cG1vZCA9IC0xOworCQkJanNleHByLT5vbl9lcnJvciA9IHRyYW5zZm9ybUpzb25C ZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAorCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFW SU9SX0VNUFRZLAorCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsK KwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSnNvbkZ1bmNFeHByIG9wIik7 CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFi bGUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lZTkxMjNjM2I2Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jCkBAIC0wLDAgKzEsNzY1IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwYXJzZV9qc29udGFibGUuYworICoJICBwYXJzaW5n IG9mIEpTT05fVEFCTEUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29u dGFibGUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2V4 cHIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAi dXRpbHMvanNvbi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisvKiBDb250ZXh0 IGZvciBKU09OX1RBQkxFIHRyYW5zZm9ybWF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFi bGVQYXJzZUNvbnRleHQKK3sKKwlQYXJzZVN0YXRlICpwc3RhdGU7CQkJLyogcGFyc2luZyBzdGF0 ZSAqLworCUpzb25UYWJsZSAgKnRhYmxlOwkJCS8qIHVudHJhbnNmb3JtZWQgbm9kZSAqLworCVRh YmxlRnVuYyAgKnRhYmxlZnVuYzsJCS8qIHRyYW5zZm9ybWVkIG5vZGUJKi8KKwlMaXN0CSAgICpw YXRoTmFtZXM7CQkvKiBsaXN0IG9mIGFsbCBwYXRoIGFuZCBjb2x1bW5zIG5hbWVzICovCisJaW50 CQkJcGF0aE5hbWVJZDsJCS8qIHBhdGggbmFtZSBpZCBjb3VudGVyICovCisJT2lkCQkJY29udGV4 dEl0ZW1UeXBpZDsJLyogdHlwZSBvaWQgb2YgY29udGV4dCBpdGVtIChqc29uL2pzb25iKSAqLwor fQkJCUpzb25UYWJsZVBhcnNlQ29udGV4dDsKKworc3RhdGljIEpzb25UYWJsZVBhcmVudCAqdHJh bnNmb3JtSnNvblRhYmxlQ29sdW1ucyhKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsCisJCQkJ CQkJCQkJCQkgIEpzb25UYWJsZVBsYW4gKnBsYW4sCisJCQkJCQkJCQkJCQkgIExpc3QgKmNvbHVt bnMsCisJCQkJCQkJCQkJCQkgIGNoYXIgKnBhdGhTcGVjLAorCQkJCQkJCQkJCQkJICBjaGFyICoq cGF0aE5hbWUsCisJCQkJCQkJCQkJCQkgIGludCBsb2NhdGlvbik7CisKK3N0YXRpYyBOb2RlICoK K21ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbikKK3sKKwlBX0NvbnN0ICAg ICpuID0gbWFrZU5vZGUoQV9Db25zdCk7CisKKwluLT52YWwubm9kZS50eXBlID0gVF9TdHJpbmc7 CisJbi0+dmFsLnN2YWwuc3ZhbCA9IHN0cjsKKwluLT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisJ cmV0dXJuIChOb2RlICopIG47Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTl9UQUJMRSBjb2x1 bW4KKyAqICAgLSByZWd1bGFyIGNvbHVtbiBpbnRvIEpTT05fVkFMVUUoKQorICogICAtIEZPUk1B VCBKU09OIGNvbHVtbiBpbnRvIEpTT05fUVVFUlkoKQorICogICAtIEVYSVNUUyBjb2x1bW4gaW50 byBKU09OX0VYSVNUUygpCisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUpzb25UYWJsZUNv bHVtbihKc29uVGFibGVDb2x1bW4gKmp0YywgTm9kZSAqY29udGV4dEl0ZW1FeHByLAorCQkJCQkJ IExpc3QgKnBhc3NpbmdBcmdzLCBib29sIGVycm9yT25FcnJvcikKK3sKKwlKc29uRnVuY0V4cHIg KmpmZXhwciA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisJSnNvbk91dHB1dCAqb3V0cHV0ID0g bWFrZU5vZGUoSnNvbk91dHB1dCk7CisJY2hhcgkgICAqcGF0aHNwZWM7CisJSnNvbkZvcm1hdCAq ZGVmYXVsdF9mb3JtYXQ7CisKKwlqZmV4cHItPm9wID0KKwkJanRjLT5jb2x0eXBlID09IEpUQ19S RUdVTEFSID8gSlNPTl9WQUxVRV9PUCA6CisJCWp0Yy0+Y29sdHlwZSA9PSBKVENfRVhJU1RTID8g SlNPTl9FWElTVFNfT1AgOiBKU09OX1FVRVJZX09QOworCWpmZXhwci0+b3V0cHV0ID0gb3V0cHV0 OworCWpmZXhwci0+b25fZW1wdHkgPSBqdGMtPm9uX2VtcHR5OworCWpmZXhwci0+b25fZXJyb3Ig PSBqdGMtPm9uX2Vycm9yOworCWlmIChqZmV4cHItPm9uX2Vycm9yID09IE5VTEwgJiYgZXJyb3JP bkVycm9yKQorCQlqZmV4cHItPm9uX2Vycm9yID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFW SU9SX0VSUk9SLCBOVUxMLAorCQkJCQkJCQkJCQlOVUxMLCAtMSk7CisJamZleHByLT5xdW90ZXMg PSBqdGMtPnF1b3RlczsKKwlqZmV4cHItPndyYXBwZXIgPSBqdGMtPndyYXBwZXI7CisJamZleHBy LT5sb2NhdGlvbiA9IGp0Yy0+bG9jYXRpb247CisKKwlvdXRwdXQtPnR5cGVOYW1lID0ganRjLT50 eXBlTmFtZTsKKwlvdXRwdXQtPnJldHVybmluZyA9IG1ha2VOb2RlKEpzb25SZXR1cm5pbmcpOwor CW91dHB1dC0+cmV0dXJuaW5nLT5mb3JtYXQgPSBqdGMtPmZvcm1hdDsKKworCWRlZmF1bHRfZm9y bWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAt MSk7CisKKwlpZiAoanRjLT5wYXRoc3BlYykKKwkJcGF0aHNwZWMgPSBqdGMtPnBhdGhzcGVjOwor CWVsc2UKKwl7CisJCS8qIENvbnN0cnVjdCBkZWZhdWx0IHBhdGggYXMgJyQuImNvbHVtbl9uYW1l IicgKi8KKwkJU3RyaW5nSW5mb0RhdGEgcGF0aDsKKworCQlpbml0U3RyaW5nSW5mbygmcGF0aCk7 CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcGF0aCwgIiQuIik7CisJCWVzY2FwZV9qc29u KCZwYXRoLCBqdGMtPm5hbWUpOworCisJCXBhdGhzcGVjID0gcGF0aC5kYXRhOworCX0KKworCWpm ZXhwci0+Y29udGV4dF9pdGVtID0JbWFrZUpzb25WYWx1ZUV4cHIoKEV4cHIgKikgY29udGV4dEl0 ZW1FeHByLCBOVUxMLAorCQkJCQkJCQkJCQkgIGRlZmF1bHRfZm9ybWF0KTsKKwlqZmV4cHItPnBh dGhzcGVjID0gbWFrZVN0cmluZ0NvbnN0KHBhdGhzcGVjLCAtMSk7CisJamZleHByLT5wYXRobmFt ZSA9IE5VTEw7CisJamZleHByLT5wYXNzaW5nID0gcGFzc2luZ0FyZ3M7CisKKwlyZXR1cm4gKE5v ZGUgKikgamZleHByOworfQorCitzdGF0aWMgYm9vbAoraXNKc29uVGFibGVQYXRoTmFtZUR1cGxp Y2F0ZShKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQor eworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgY3h0LT5wYXRoTmFtZXMpCisJewor CQlpZiAoIXN0cmNtcChwYXRobmFtZSwgKGNvbnN0IGNoYXIgKikgbGZpcnN0KGxjKSkpCisJCQly ZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJlZ2lzdGVyIHRoZSBj b2x1bW4gbmFtZSBpbiB0aGUgcGF0aCBuYW1lIGxpc3QuICovCitzdGF0aWMgdm9pZAorcmVnaXN0 ZXJKc29uVGFibGVDb2x1bW4oSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LCBjaGFyICpjb2xu YW1lKQoreworCWlmIChpc0pzb25UYWJsZVBhdGhOYW1lRHVwbGljYXRlKGN4dCwgY29sbmFtZSkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfQUxJQVMp LAorCQkJCSBlcnJtc2coImR1cGxpY2F0ZSBKU09OX1RBQkxFIGNvbHVtbiBuYW1lOiAlcyIsIGNv bG5hbWUpLAorCQkJCSBlcnJoaW50KCJKU09OX1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRp c3RpbmN0IGZyb20gb25lIGFub3RoZXIuIikpKTsKKworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVu ZChjeHQtPnBhdGhOYW1lcywgY29sbmFtZSk7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IHJlZ2lzdGVy IGFsbCBuZXN0ZWQgY29sdW1uIG5hbWVzIGluIHRoZSBwYXRoIG5hbWUgbGlzdC4gKi8KK3N0YXRp YyB2b2lkCityZWdpc3RlckFsbEpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VDb250ZXh0 ICogY3h0LCBMaXN0ICpjb2x1bW5zKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChs YywgY29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNvbHVtbiAqanRjID0gY2FzdE5vZGUoSnNvblRh YmxlQ29sdW1uLCBsZmlyc3QobGMpKTsKKworCQlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19ORVNU RUQpCisJCXsKKwkJCWlmIChqdGMtPnBhdGhuYW1lKQorCQkJCXJlZ2lzdGVySnNvblRhYmxlQ29s dW1uKGN4dCwganRjLT5wYXRobmFtZSk7CisKKwkJCXJlZ2lzdGVyQWxsSnNvblRhYmxlQ29sdW1u cyhjeHQsIGp0Yy0+Y29sdW1ucyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlyZWdpc3Rlckpzb25U YWJsZUNvbHVtbihjeHQsIGp0Yy0+bmFtZSk7CisJCX0KKwl9Cit9CisKKy8qIEdlbmVyYXRlIGEg bmV3IHVuaXF1ZSBKU09OX1RBQkxFIHBhdGggbmFtZS4gKi8KK3N0YXRpYyBjaGFyICoKK2dlbmVy YXRlSnNvblRhYmxlUGF0aE5hbWUoSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0KQoreworCWNo YXIJCW5hbWVidWZbMzJdOworCWNoYXIJICAgKm5hbWUgPSBuYW1lYnVmOworCisJZG8KKwl7CisJ CXNucHJpbnRmKG5hbWVidWYsIHNpemVvZihuYW1lYnVmKSwgImpzb25fdGFibGVfcGF0aF8lZCIs CisJCQkJICsrY3h0LT5wYXRoTmFtZUlkKTsKKwl9IHdoaWxlIChpc0pzb25UYWJsZVBhdGhOYW1l RHVwbGljYXRlKGN4dCwgbmFtZSkpOworCisJbmFtZSA9IHBzdHJkdXAobmFtZSk7CisJY3h0LT5w YXRoTmFtZXMgPSBsYXBwZW5kKGN4dC0+cGF0aE5hbWVzLCBuYW1lKTsKKworCXJldHVybiBuYW1l OworfQorCisvKiBDb2xsZWN0IHNpYmxpbmcgcGF0aCBuYW1lcyBmcm9tIHBsYW4gdG8gdGhlIHNw ZWNpZmllZCBsaXN0LiAqLworc3RhdGljIHZvaWQKK2NvbGxlY3RTaWJsaW5nUGF0aHNJbkpzb25U YWJsZVBsYW4oSnNvblRhYmxlUGxhbiAqcGxhbiwgTGlzdCAqKnBhdGhzKQoreworCWlmIChwbGFu LT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1QTEUpCisJCSpwYXRocyA9IGxhcHBlbmQoKnBhdGhzLCBw bGFuLT5wYXRobmFtZSk7CisJZWxzZSBpZiAocGxhbi0+cGxhbl90eXBlID09IEpTVFBfSk9JTkVE KQorCXsKKwkJaWYgKHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9JTk5FUiB8fAorCQkJcGxhbi0+ am9pbl90eXBlID09IEpTVFBKX09VVEVSKQorCQl7CisJCQlBc3NlcnQocGxhbi0+cGxhbjEtPnBs YW5fdHlwZSA9PSBKU1RQX1NJTVBMRSk7CisJCQkqcGF0aHMgPSBsYXBwZW5kKCpwYXRocywgcGxh bi0+cGxhbjEtPnBhdGhuYW1lKTsKKwkJfQorCQllbHNlIGlmIChwbGFuLT5qb2luX3R5cGUgPT0g SlNUUEpfQ1JPU1MgfHwKKwkJCQkgcGxhbi0+am9pbl90eXBlID09IEpTVFBKX1VOSU9OKQorCQl7 CisJCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4tPnBsYW4xLCBwYXRo cyk7CisJCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4tPnBsYW4yLCBw YXRocyk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgSlNPTl9UQUJMRSBq b2luIHR5cGUgJWQiLAorCQkJCSBwbGFuLT5qb2luX3R5cGUpOworCX0KK30KKworLyoKKyAqIFZh bGlkYXRlIGNoaWxkIEpTT05fVEFCTEUgcGxhbiBieSBjaGVja2luZyB0aGF0OgorICogIC0gYWxs IG5lc3RlZCBjb2x1bW5zIGhhdmUgcGF0aCBuYW1lcyBzcGVjaWZpZWQKKyAqICAtIGFsbCBuZXN0 ZWQgY29sdW1ucyBoYXZlIGNvcnJlc3BvbmRpbmcgbm9kZSBpbiB0aGUgc2libGluZyBwbGFuCisg KiAgLSBwbGFuIGRvZXMgbm90IGNvbnRhaW4gZHVwbGljYXRlIG9yIGV4dHJhIG5vZGVzCisgKi8K K3N0YXRpYyB2b2lkCit2YWxpZGF0ZUpzb25UYWJsZUNoaWxkUGxhbihQYXJzZVN0YXRlICpwc3Rh dGUsIEpzb25UYWJsZVBsYW4gKnBsYW4sCisJCQkJCQkgICBMaXN0ICpjb2x1bW5zKQoreworCUxp c3RDZWxsICAgKmxjMTsKKwlMaXN0CSAgICpzaWJsaW5ncyA9IE5JTDsKKwlpbnQJCQluY2hpbGRy ZW4gPSAwOworCisJaWYgKHBsYW4pCisJCWNvbGxlY3RTaWJsaW5nUGF0aHNJbkpzb25UYWJsZVBs YW4ocGxhbiwgJnNpYmxpbmdzKTsKKworCWZvcmVhY2gobGMxLCBjb2x1bW5zKQorCXsKKwkJSnNv blRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4sIGxmaXJzdChsYzEp KTsKKworCQlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19ORVNURUQpCisJCXsKKwkJCUxpc3RDZWxs ICAgKmxjMjsKKwkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJCWlmICghanRjLT5wYXRobmFt ZSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAorCQkJCQkJIGVycm1zZygibmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRh aW4gYW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNhdGlvbiBpZiBhbiBleHBsaWNpdCBQ TEFOIGNsYXVzZSBpcyB1c2VkIiksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwg anRjLT5sb2NhdGlvbikpKTsKKworCQkJLyogZmluZCBuZXN0ZWQgcGF0aCBuYW1lIGluIHRoZSBs aXN0IG9mIHNpYmxpbmcgcGF0aCBuYW1lcyAqLworCQkJZm9yZWFjaChsYzIsIHNpYmxpbmdzKQor CQkJeworCQkJCWlmICgoZm91bmQgPSAhc3RyY21wKGp0Yy0+cGF0aG5hbWUsIGxmaXJzdChsYzIp KSkpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoIWZvdW5kKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNn KCJpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiIpLAorCQkJCQkJIGVycmRldGFpbCgiUGxhbiBub2Rl IGZvciBuZXN0ZWQgcGF0aCAlcyB3YXMgbm90IGZvdW5kIGluIHBsYW4uIiwganRjLT5wYXRobmFt ZSksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwganRjLT5sb2NhdGlvbikpKTsK KworCQkJbmNoaWxkcmVuKys7CisJCX0KKwl9CisKKwlpZiAobGlzdF9sZW5ndGgoc2libGluZ3Mp ID4gbmNoaWxkcmVuKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiIpLAorCQkJ CSBlcnJkZXRhaWwoIlBsYW4gbm9kZSBjb250YWlucyBzb21lIGV4dHJhIG9yIGR1cGxpY2F0ZSBz aWJsaW5nIG5vZGVzLiIpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBwbGFuID8g cGxhbi0+bG9jYXRpb24gOiAtMSkpKTsKK30KKworc3RhdGljIEpzb25UYWJsZUNvbHVtbiAqCitm aW5kTmVzdGVkSnNvblRhYmxlQ29sdW1uKExpc3QgKmNvbHVtbnMsIGNvbnN0IGNoYXIgKnBhdGhu YW1lKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgY29sdW1ucykKKwl7CisJ CUpzb25UYWJsZUNvbHVtbiAqanRjID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1uLCBsZmlyc3Qo bGMpKTsKKworCQlpZiAoanRjLT5jb2x0eXBlID09IEpUQ19ORVNURUQgJiYKKwkJCWp0Yy0+cGF0 aG5hbWUgJiYKKwkJCSFzdHJjbXAoanRjLT5wYXRobmFtZSwgcGF0aG5hbWUpKQorCQkJcmV0dXJu IGp0YzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIE5vZGUgKgordHJhbnNmb3Jt TmVzdGVkSnNvblRhYmxlQ29sdW1uKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgSnNvblRh YmxlQ29sdW1uICpqdGMsCisJCQkJCQkJICAgSnNvblRhYmxlUGxhbiAqcGxhbikKK3sKKwlKc29u VGFibGVQYXJlbnQgKm5vZGU7CisJY2hhcgkgICAqcGF0aG5hbWUgPSBqdGMtPnBhdGhuYW1lOwor CisJbm9kZSA9IHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoY3h0LCBwbGFuLCBqdGMtPmNvbHVt bnMsIGp0Yy0+cGF0aHNwZWMsCisJCQkJCQkJCQkgJnBhdGhuYW1lLCBqdGMtPmxvY2F0aW9uKTsK KworCXJldHVybiAoTm9kZSAqKSBub2RlOworfQorCitzdGF0aWMgTm9kZSAqCittYWtlSnNvblRh YmxlU2libGluZ0pvaW4oYm9vbCBjcm9zcywgTm9kZSAqbG5vZGUsIE5vZGUgKnJub2RlKQorewor CUpzb25UYWJsZVNpYmxpbmcgKmpvaW4gPSBtYWtlTm9kZShKc29uVGFibGVTaWJsaW5nKTsKKwor CWpvaW4tPmxhcmcgPSBsbm9kZTsKKwlqb2luLT5yYXJnID0gcm5vZGU7CisJam9pbi0+Y3Jvc3Mg PSBjcm9zczsKKworCXJldHVybiAoTm9kZSAqKSBqb2luOworfQorCisvKgorICogUmVjdXJzaXZl bHkgdHJhbnNmb3JtIGNoaWxkIEpTT05fVEFCTEUgcGxhbi4KKyAqCisgKiBEZWZhdWx0IHBsYW4g aXMgdHJhbnNmb3JtZWQgaW50byBhIGNyb3NzL3VuaW9uIGpvaW4gb2YgaXRzIG5lc3RlZCBjb2x1 bW5zLgorICogU2ltcGxlIGFuZCBvdXRlci9pbm5lciBwbGFucyBhcmUgdHJhbnNmb3JtZWQgaW50 byBhIEpzb25UYWJsZVBhcmVudCBieQorICogZmluZGluZyBhbmQgdHJhbnNmb3JtaW5nIGNvcnJl c3BvbmRpbmcgbmVzdGVkIGNvbHVtbi4KKyAqIFNpYmxpbmcgcGxhbnMgYXJlIHJlY3Vyc2l2ZWx5 IHRyYW5zZm9ybWVkIGludG8gYSBKc29uVGFibGVTaWJsaW5nLgorICovCitzdGF0aWMgTm9kZSAq Cit0cmFuc2Zvcm1Kc29uVGFibGVDaGlsZFBsYW4oSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0 LCBKc29uVGFibGVQbGFuICpwbGFuLAorCQkJCQkJCUxpc3QgKmNvbHVtbnMpCit7CisJSnNvblRh YmxlQ29sdW1uICpqdGMgPSBOVUxMOworCisJaWYgKCFwbGFuIHx8IHBsYW4tPnBsYW5fdHlwZSA9 PSBKU1RQX0RFRkFVTFQpCisJeworCQkvKiB1bnNwZWNpZmllZCBvciBkZWZhdWx0IHBsYW4gKi8K KwkJTm9kZQkgICAqcmVzID0gTlVMTDsKKwkJTGlzdENlbGwgICAqbGM7CisJCWJvb2wJCWNyb3Nz ID0gcGxhbiAmJiAocGxhbi0+am9pbl90eXBlICYgSlNUUEpfQ1JPU1MpOworCisJCS8qIHRyYW5z Zm9ybSBhbGwgbmVzdGVkIGNvbHVtbnMgaW50byBjcm9zcy91bmlvbiBqb2luICovCisJCWZvcmVh Y2gobGMsIGNvbHVtbnMpCisJCXsKKwkJCUpzb25UYWJsZUNvbHVtbiAqY29sID0gY2FzdE5vZGUo SnNvblRhYmxlQ29sdW1uLCBsZmlyc3QobGMpKTsKKwkJCU5vZGUJICAgKm5vZGU7CisKKwkJCWlm IChjb2wtPmNvbHR5cGUgIT0gSlRDX05FU1RFRCkKKwkJCQljb250aW51ZTsKKworCQkJbm9kZSA9 IHRyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNvbHVtbihjeHQsIGNvbCwgcGxhbik7CisKKwkJCS8q IGpvaW4gdHJhbnNmb3JtZWQgbm9kZSB3aXRoIHByZXZpb3VzIHNpYmxpbmcgbm9kZXMgKi8KKwkJ CXJlcyA9IHJlcyA/IG1ha2VKc29uVGFibGVTaWJsaW5nSm9pbihjcm9zcywgcmVzLCBub2RlKSA6 IG5vZGU7CisJCX0KKworCQlyZXR1cm4gcmVzOworCX0KKwllbHNlIGlmIChwbGFuLT5wbGFuX3R5 cGUgPT0gSlNUUF9TSU1QTEUpCisJeworCQlqdGMgPSBmaW5kTmVzdGVkSnNvblRhYmxlQ29sdW1u KGNvbHVtbnMsIHBsYW4tPnBhdGhuYW1lKTsKKwl9CisJZWxzZSBpZiAocGxhbi0+cGxhbl90eXBl ID09IEpTVFBfSk9JTkVEKQorCXsKKwkJaWYgKHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9JTk5F UiB8fAorCQkJcGxhbi0+am9pbl90eXBlID09IEpTVFBKX09VVEVSKQorCQl7CisJCQlBc3NlcnQo cGxhbi0+cGxhbjEtPnBsYW5fdHlwZSA9PSBKU1RQX1NJTVBMRSk7CisJCQlqdGMgPSBmaW5kTmVz dGVkSnNvblRhYmxlQ29sdW1uKGNvbHVtbnMsIHBsYW4tPnBsYW4xLT5wYXRobmFtZSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlOb2RlCSAgICpub2RlMSA9IHRyYW5zZm9ybUpzb25UYWJsZUNoaWxk UGxhbihjeHQsIHBsYW4tPnBsYW4xLAorCQkJCQkJCQkJCQkJCQkJY29sdW1ucyk7CisJCQlOb2Rl CSAgICpub2RlMiA9IHRyYW5zZm9ybUpzb25UYWJsZUNoaWxkUGxhbihjeHQsIHBsYW4tPnBsYW4y LAorCQkJCQkJCQkJCQkJCQkJY29sdW1ucyk7CisKKwkJCXJldHVybiBtYWtlSnNvblRhYmxlU2li bGluZ0pvaW4ocGxhbi0+am9pbl90eXBlID09IEpTVFBKX0NST1NTLAorCQkJCQkJCQkJCQlub2Rl MSwgbm9kZTIpOworCQl9CisJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgSlNPTl9U QUJMRSBwbGFuIHR5cGUgJWQiLCBwbGFuLT5wbGFuX3R5cGUpOworCisJaWYgKCFqdGMpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCSBl cnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIiksCisJCQkJIGVycmRldGFpbCgiUGF0aCBu YW1lIHdhcyAlcyBub3QgZm91bmQgaW4gbmVzdGVkIGNvbHVtbnMgbGlzdC4iLAorCQkJCQkJICAg cGxhbi0+cGF0aG5hbWUpLAorCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsIHBs YW4tPmxvY2F0aW9uKSkpOworCisJcmV0dXJuIHRyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNvbHVt bihjeHQsIGp0YywgcGxhbik7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdHlwZSBpcyBqc29uL2pz b25iLCBhcnJheSwgb3IgcmVjb3JkLiAqLworc3RhdGljIGJvb2wKK3R5cGVJc0NvbXBvc2l0ZShP aWQgdHlwaWQpCit7CisJY2hhcgkJdHlwdHlwZTsKKworCWlmICh0eXBpZCA9PSBKU09OT0lEIHx8 CisJCXR5cGlkID09IEpTT05CT0lEIHx8CisJCXR5cGlkID09IFJFQ09SRE9JRCB8fAorCQl0eXBl X2lzX2FycmF5KHR5cGlkKSkKKwkJcmV0dXJuIHRydWU7CisKKwl0eXB0eXBlID0gZ2V0X3R5cHR5 cGUodHlwaWQpOworCisJaWYgKHR5cHR5cGUgPT0gVFlQVFlQRV9DT01QT1NJVEUpCisJCXJldHVy biB0cnVlOworCisJaWYgKHR5cHR5cGUgPT0gVFlQVFlQRV9ET01BSU4pCisJCXJldHVybiB0eXBl SXNDb21wb3NpdGUoZ2V0QmFzZVR5cGUodHlwaWQpKTsKKworCXJldHVybiBmYWxzZTsKK30KKwor LyogQXBwZW5kIHRyYW5zZm9ybWVkIG5vbi1uZXN0ZWQgSlNPTl9UQUJMRSBjb2x1bW5zIHRvIHRo ZSBUYWJsZUZ1bmMgbm9kZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZEpzb25UYWJsZUNvbHVtbnMo SnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LCBMaXN0ICpjb2x1bW5zKQoreworCUxpc3RDZWxs ICAgKmNvbDsKKwlQYXJzZVN0YXRlICpwc3RhdGUgPSBjeHQtPnBzdGF0ZTsKKwlKc29uVGFibGUg ICpqdCA9IGN4dC0+dGFibGU7CisJVGFibGVGdW5jICAqdGYgPSBjeHQtPnRhYmxlZnVuYzsKKwli b29sCQlvcmRpbmFsaXR5X2ZvdW5kID0gZmFsc2U7CisJSnNvbkJlaGF2aW9yICpvbl9lcnJvciA9 IGp0LT5vbl9lcnJvcjsKKwlib29sCQllcnJvck9uRXJyb3IgPSBvbl9lcnJvciAmJgorCQlvbl9l cnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUjsKKworCWZvcmVhY2goY29sLCBjb2x1 bW5zKQorCXsKKwkJSnNvblRhYmxlQ29sdW1uICpyYXdjID0gY2FzdE5vZGUoSnNvblRhYmxlQ29s dW1uLCBsZmlyc3QoY29sKSk7CisJCU9pZAkJCXR5cGlkOworCQlpbnQzMgkJdHlwbW9kOworCQlO b2RlCSAgICpjb2xleHByOworCisJCWlmIChyYXdjLT5uYW1lKQorCQl7CisJCQkvKiBtYWtlIHN1 cmUgY29sdW1uIG5hbWVzIGFyZSB1bmlxdWUgKi8KKwkJCUxpc3RDZWxsICAgKmNvbG5hbWU7CisK KwkJCWZvcmVhY2goY29sbmFtZSwgdGYtPmNvbG5hbWVzKQorCQkJCWlmICghc3RyY21wKChjb25z dCBjaGFyICopIGNvbG5hbWUsIHJhd2MtPm5hbWUpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJjb2x1bW4g bmFtZSBcIiVzXCIgaXMgbm90IHVuaXF1ZSIsCisJCQkJCQkJCXJhd2MtPm5hbWUpLAorCQkJCQkJ IHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIHJhd2MtPmxvY2F0aW9uKSkpOworCisJCQl0Zi0+ Y29sbmFtZXMgPSBsYXBwZW5kKHRmLT5jb2xuYW1lcywKKwkJCQkJCQkJICAgbWFrZVN0cmluZyhw c3RyZHVwKHJhd2MtPm5hbWUpKSk7CisJCX0KKworCQkvKgorCQkgKiBEZXRlcm1pbmUgdGhlIHR5 cGUgYW5kIHR5cG1vZCBmb3IgdGhlIG5ldyBjb2x1bW4uIEZPUiBPUkRJTkFMSVRZCisJCSAqIGNv bHVtbnMgYXJlIElOVEVHRVIgYnkgc3RhbmRhcmQ7IHRoZSBvdGhlcnMgYXJlIHVzZXItc3BlY2lm aWVkLgorCQkgKi8KKwkJc3dpdGNoIChyYXdjLT5jb2x0eXBlKQorCQl7CisJCQljYXNlIEpUQ19G T1JfT1JESU5BTElUWToKKwkJCQlpZiAob3JkaW5hbGl0eV9mb3VuZCkKKwkJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJIGVy cm1zZygiY2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIEZPUiBPUkRJTkFMSVRZIGNvbHVtbiIpLAor CQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5sb2NhdGlvbikpKTsKKwkJ CQlvcmRpbmFsaXR5X2ZvdW5kID0gdHJ1ZTsKKwkJCQljb2xleHByID0gTlVMTDsKKwkJCQl0eXBp ZCA9IElOVDRPSUQ7CisJCQkJdHlwbW9kID0gLTE7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSlRD X1JFR1VMQVI6CisJCQkJdHlwZW5hbWVUeXBlSWRBbmRNb2QocHN0YXRlLCByYXdjLT50eXBlTmFt ZSwgJnR5cGlkLCAmdHlwbW9kKTsKKworCQkJCS8qCisJCQkJICogVXNlIGltcGxpY2l0IEZPUk1B VCBKU09OIGZvciBjb21wb3NpdGUgdHlwZXMgKGFycmF5cyBhbmQKKwkJCQkgKiByZWNvcmRzKS4K KwkJCQkgKgorCQkJCSAqIEZvciBzY2FsYXIgY29sdW1ucywgcmVxdWlyZSBhbiBleHBsaWNpdCBG T1JNQVQgSlNPTiBjbGF1c2UKKwkJCQkgKiB0byBnZXQgdGhlIHNwZWNpZmllZCBXUkFQUEVSIGFu ZCBRVU9URVMgYmVoYXZpb3IuCisJCQkJICovCisJCQkJaWYgKHR5cGVJc0NvbXBvc2l0ZSh0eXBp ZCkpCisJCQkJCXJhd2MtPmNvbHR5cGUgPSBKVENfRk9STUFUVEVEOworCQkJCWVsc2UgaWYgKHJh d2MtPndyYXBwZXIgIT0gSlNXX05PTkUpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCB1c2Ug V0lUSCBXUkFQUEVSIGNsYXVzZSBmb3Igc2NhbGFyIGNvbHVtbnMiCisJCQkJCQkJCQkiIHdpdGhv dXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UiKSwKKwkJCQkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKHBzdGF0ZSwgcmF3Yy0+bG9jYXRpb24pKSk7CisJCQkJZWxzZSBpZiAocmF3Yy0+cXVv dGVzICE9IEpTX1FVT1RFU19VTlNQRUMpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCB1c2Ug T01JVC9LRUVQIFFVT1RFUyBjbGF1c2UgZm9yIHNjYWxhciBjb2x1bW5zIgorCQkJCQkJCQkJIiB3 aXRob3V0IGFsc28gc3BlY2lmeWluZyBGT1JNQVQgY2xhdXNlIiksCisJCQkJCQkJIHBhcnNlcl9l cnJwb3NpdGlvbihwc3RhdGUsIHJhd2MtPmxvY2F0aW9uKSkpOworCisJCQkJLyogRkFMTFRIUk9V R0ggKi8KKwkJCWNhc2UgSlRDX0VYSVNUUzoKKwkJCWNhc2UgSlRDX0ZPUk1BVFRFRDoKKwkJCQl7 CisJCQkJCU5vZGUJICAgKmplOworCQkJCQlDYXNlVGVzdEV4cHIgKnBhcmFtID0gbWFrZU5vZGUo Q2FzZVRlc3RFeHByKTsKKworCQkJCQlwYXJhbS0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKwkJ CQkJcGFyYW0tPnR5cGVJZCA9IGN4dC0+Y29udGV4dEl0ZW1UeXBpZDsKKwkJCQkJcGFyYW0tPnR5 cGVNb2QgPSAtMTsKKworCQkJCQlpZiAocmF3Yy0+d3JhcHBlciAhPSBKU1dfTk9ORSAmJgorCQkJ CQkJcmF3Yy0+cXVvdGVzICE9IEpTX1FVT1RFU19VTlNQRUMpCisJCQkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkgZXJybXNn KCJjYW5ub3QgdXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgZm9yIGZvcm1hdHRlZCBjb2x1bm1ucyIK KwkJCQkJCQkJCSIgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgT01JVC9LRUVQIFFVT1RFUyIpLAor CQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5sb2NhdGlvbikpKTsKKwor CQkJCQlqZSA9IHRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbihyYXdjLCAoTm9kZSAqKSBwYXJhbSwK KwkJCQkJCQkJCQkJCSAgTklMLCBlcnJvck9uRXJyb3IpOworCisJCQkJCWNvbGV4cHIgPSB0cmFu c2Zvcm1FeHByKHBzdGF0ZSwgamUsIEVYUFJfS0lORF9GUk9NX0ZVTkNUSU9OKTsKKwkJCQkJYXNz aWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIGNvbGV4cHIpOworCisJCQkJCXR5cGlkID0gZXhw clR5cGUoY29sZXhwcik7CisJCQkJCXR5cG1vZCA9IGV4cHJUeXBtb2QoY29sZXhwcik7CisJCQkJ CWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBKVENfTkVTVEVEOgorCQkJCWNvbnRpbnVlOworCisJ CQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bmtub3duIEpTT05fVEFCTEUgY29sdW1uIHR5 cGU6ICVkIiwgcmF3Yy0+Y29sdHlwZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQl0Zi0+Y29sdHlw ZXMgPSBsYXBwZW5kX29pZCh0Zi0+Y29sdHlwZXMsIHR5cGlkKTsKKwkJdGYtPmNvbHR5cG1vZHMg PSBsYXBwZW5kX2ludCh0Zi0+Y29sdHlwbW9kcywgdHlwbW9kKTsKKwkJdGYtPmNvbGNvbGxhdGlv bnMgPSBsYXBwZW5kX29pZCh0Zi0+Y29sY29sbGF0aW9ucywgZ2V0X3R5cGNvbGxhdGlvbih0eXBp ZCkpOworCQl0Zi0+Y29sdmFsZXhwcnMgPSBsYXBwZW5kKHRmLT5jb2x2YWxleHBycywgY29sZXhw cik7CisJfQorfQorCisvKgorICogQ3JlYXRlIHRyYW5zZm9ybWVkIEpTT05fVEFCTEUgcGFyZW50 IHBsYW4gbm9kZSBieSBhcHBlbmRpbmcgYWxsIG5vbi1uZXN0ZWQKKyAqIGNvbHVtbnMgdG8gdGhl IFRhYmxlRnVuYyBub2RlIGFuZCByZW1lbWJlcmluZyB0aGVpciBpbmRpY2VzIGluIHRoZQorICog Y29sdmFsZXhwcnMgbGlzdC4KKyAqLworc3RhdGljIEpzb25UYWJsZVBhcmVudCAqCittYWtlUGFy ZW50SnNvblRhYmxlTm9kZShKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsIGNoYXIgKnBhdGhT cGVjLCBjaGFyICpwYXRoTmFtZSwKKwkJCQkJCUxpc3QgKmNvbHVtbnMpCit7CisJSnNvblRhYmxl UGFyZW50ICpub2RlID0gbWFrZU5vZGUoSnNvblRhYmxlUGFyZW50KTsKKwlKc29uQmVoYXZpb3Ig Km9uX2Vycm9yID0gY3h0LT50YWJsZS0+b25fZXJyb3I7CisKKwlub2RlLT5wYXRoID0gbWFrZU5v ZGUoSnNvblRhYmxlUGF0aCk7CisJbm9kZS0+cGF0aC0+dmFsdWUgPSBtYWtlQ29uc3QoSlNPTlBB VEhPSUQsIC0xLCBJbnZhbGlkT2lkLCAtMSwKKwkJCQkJCQkJICBEaXJlY3RGdW5jdGlvbkNhbGwx KGpzb25wYXRoX2luLAorCQkJCQkJCQkJCQkJCSAgQ1N0cmluZ0dldERhdHVtKHBhdGhTcGVjKSks CisJCQkJCQkJCSAgZmFsc2UsIGZhbHNlKTsKKwlpZiAocGF0aE5hbWUpCisJCW5vZGUtPnBhdGgt Pm5hbWUgPSBwc3RyZHVwKHBhdGhOYW1lKTsKKworCS8qIHNhdmUgc3RhcnQgb2YgY29sdW1uIHJh bmdlICovCisJbm9kZS0+Y29sTWluID0gbGlzdF9sZW5ndGgoY3h0LT50YWJsZWZ1bmMtPmNvbHZh bGV4cHJzKTsKKworCWFwcGVuZEpzb25UYWJsZUNvbHVtbnMoY3h0LCBjb2x1bW5zKTsKKworCS8q IHNhdmUgZW5kIG9mIGNvbHVtbiByYW5nZSAqLworCW5vZGUtPmNvbE1heCA9IGxpc3RfbGVuZ3Ro KGN4dC0+dGFibGVmdW5jLT5jb2x2YWxleHBycykgLSAxOworCisJbm9kZS0+ZXJyb3JPbkVycm9y ID0gb25fZXJyb3IgJiYgb25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1I7CisK KwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIEpzb25UYWJsZVBhcmVudCAqCit0cmFuc2Zvcm1K c29uVGFibGVDb2x1bW5zKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgSnNvblRhYmxlUGxh biAqcGxhbiwKKwkJCQkJCSAgTGlzdCAqY29sdW1ucywgY2hhciAqcGF0aFNwZWMsIGNoYXIgKipw YXRoTmFtZSwKKwkJCQkJCSAgaW50IGxvY2F0aW9uKQoreworCUpzb25UYWJsZVBhcmVudCAqbm9k ZTsKKwlKc29uVGFibGVQbGFuICpjaGlsZFBsYW47CisJYm9vbAkJZGVmYXVsdFBsYW4gPSAhcGxh biB8fCBwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9ERUZBVUxUOworCisJaWYgKCEqcGF0aE5hbWUp CisJeworCQlpZiAoY3h0LT50YWJsZS0+cGxhbikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBKU09O X1RBQkxFIGV4cHJlc3Npb24iKSwKKwkJCQkJIGVycmRldGFpbCgiSlNPTl9UQUJMRSBjb2x1bW5z IG11c3QgY29udGFpbiAiCisJCQkJCQkJICAgImV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmlj YXRpb24gaWYgIgorCQkJCQkJCSAgICJleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkIiksCisJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsIGxvY2F0aW9uKSkpOworCisJCSpw YXRoTmFtZSA9IGdlbmVyYXRlSnNvblRhYmxlUGF0aE5hbWUoY3h0KTsKKwl9CisKKwlpZiAoZGVm YXVsdFBsYW4pCisJCWNoaWxkUGxhbiA9IHBsYW47CisJZWxzZQorCXsKKwkJLyogdmFsaWRhdGUg cGFyZW50IGFuZCBjaGlsZCBwbGFucyAqLworCQlKc29uVGFibGVQbGFuICpwYXJlbnRQbGFuOwor CisJCWlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9KT0lORUQpCisJCXsKKwkJCWlmIChwbGFu LT5qb2luX3R5cGUgIT0gSlNUUEpfSU5ORVIgJiYKKwkJCQlwbGFuLT5qb2luX3R5cGUgIT0gSlNU UEpfT1VURVIpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIiksCisJ CQkJCQkgZXJyZGV0YWlsKCJFeHBlY3RlZCBJTk5FUiBvciBPVVRFUiBKU09OX1RBQkxFIHBsYW4g bm9kZS4iKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsIHBsYW4tPmxv Y2F0aW9uKSkpOworCisJCQlwYXJlbnRQbGFuID0gcGxhbi0+cGxhbjE7CisJCQljaGlsZFBsYW4g PSBwbGFuLT5wbGFuMjsKKworCQkJQXNzZXJ0KHBhcmVudFBsYW4tPnBsYW5fdHlwZSAhPSBKU1RQ X0pPSU5FRCk7CisJCQlBc3NlcnQocGFyZW50UGxhbi0+cGF0aG5hbWUpOworCQl9CisJCWVsc2UK KwkJeworCQkJcGFyZW50UGxhbiA9IHBsYW47CisJCQljaGlsZFBsYW4gPSBOVUxMOworCQl9CisK KwkJaWYgKHN0cmNtcChwYXJlbnRQbGFuLT5wYXRobmFtZSwgKnBhdGhOYW1lKSkKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVy cm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4iKSwKKwkJCQkJIGVycmRldGFpbCgiUGF0aCBu YW1lIG1pc21hdGNoOiBleHBlY3RlZCAlcyBidXQgJXMgaXMgZ2l2ZW4uIiwKKwkJCQkJCQkgICAq cGF0aE5hbWUsIHBhcmVudFBsYW4tPnBhdGhuYW1lKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihjeHQtPnBzdGF0ZSwgcGxhbi0+bG9jYXRpb24pKSk7CisKKwkJdmFsaWRhdGVKc29uVGFibGVD aGlsZFBsYW4oY3h0LT5wc3RhdGUsIGNoaWxkUGxhbiwgY29sdW1ucyk7CisJfQorCisJLyogdHJh bnNmb3JtIG9ubHkgbm9uLW5lc3RlZCBjb2x1bW5zICovCisJbm9kZSA9IG1ha2VQYXJlbnRKc29u VGFibGVOb2RlKGN4dCwgcGF0aFNwZWMsICpwYXRoTmFtZSwgY29sdW1ucyk7CisKKwlpZiAoY2hp bGRQbGFuIHx8IGRlZmF1bHRQbGFuKQorCXsKKwkJLyogdHJhbnNmb3JtIHJlY3Vyc2l2ZWx5IG5l c3RlZCBjb2x1bW5zICovCisJCW5vZGUtPmNoaWxkID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQ bGFuKGN4dCwgY2hpbGRQbGFuLCBjb2x1bW5zKTsKKwkJaWYgKG5vZGUtPmNoaWxkKQorCQkJbm9k ZS0+b3V0ZXJKb2luID0gIXBsYW4gfHwgKHBsYW4tPmpvaW5fdHlwZSAmIEpTVFBKX09VVEVSKTsK KwkJLyogZWxzZTogZGVmYXVsdCBwbGFuIGNhc2UsIG5vIGNoaWxkcmVuIGZvdW5kICovCisJfQor CisJcmV0dXJuIG5vZGU7Cit9CisKKy8qCisgKiB0cmFuc2Zvcm1Kc29uVGFibGUgLQorICoJCQlU cmFuc2Zvcm0gYSByYXcgSnNvblRhYmxlIGludG8gVGFibGVGdW5jLgorICoKKyAqIFRyYW5zZm9y bSB0aGUgZG9jdW1lbnQtZ2VuZXJhdGluZyBleHByZXNzaW9uLCB0aGUgcm93LWdlbmVyYXRpbmcg ZXhwcmVzc2lvbiwKKyAqIHRoZSBjb2x1bW4tZ2VuZXJhdGluZyBleHByZXNzaW9ucywgYW5kIHRo ZSBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb25zLgorICovCitQYXJzZU5hbWVzcGFjZUl0ZW0gKgor dHJhbnNmb3JtSnNvblRhYmxlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblRhYmxlICpqdCkKK3sK KwlKc29uVGFibGVQYXJzZUNvbnRleHQgY3h0OworCVRhYmxlRnVuYyAgKnRmID0gbWFrZU5vZGUo VGFibGVGdW5jKTsKKwlKc29uRnVuY0V4cHIgKmpmZSA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7 CisJSnNvbkV4cHIgICAqamU7CisJSnNvblRhYmxlUGxhbiAqcGxhbiA9IGp0LT5wbGFuOworCWNo YXIJICAgKnJvb3RQYXRoTmFtZSA9IGp0LT5wYXRobmFtZTsKKwljaGFyCSAgICpyb290UGF0aDsK Kwlib29sCQlpc19sYXRlcmFsOworCisJaWYgKGp0LT5vbl9lbXB0eSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVy cm1zZygiT04gRU1QVFkgbm90IGFsbG93ZWQgaW4gSlNPTl9UQUJMRSIpLAorCQkJCSBwYXJzZXJf ZXJycG9zaXRpb24ocHN0YXRlLAorCQkJCQkJCQkJZXhwckxvY2F0aW9uKChOb2RlICopIGp0LT5v bl9lbXB0eSkpKSk7CisKKwljeHQucHN0YXRlID0gcHN0YXRlOworCWN4dC50YWJsZSA9IGp0Owor CWN4dC50YWJsZWZ1bmMgPSB0ZjsKKwljeHQucGF0aE5hbWVzID0gTklMOworCWN4dC5wYXRoTmFt ZUlkID0gMDsKKworCWlmIChyb290UGF0aE5hbWUpCisJCXJlZ2lzdGVySnNvblRhYmxlQ29sdW1u KCZjeHQsIHJvb3RQYXRoTmFtZSk7CisKKwlyZWdpc3RlckFsbEpzb25UYWJsZUNvbHVtbnMoJmN4 dCwganQtPmNvbHVtbnMpOworCisjaWYgMAkJCQkJCQkvKiBYWFggaXQnIHVuY2xlYXIgZnJvbSB0 aGUgc3RhbmRhcmQgd2hldGhlcgorCQkJCQkJCQkgKiByb290IHBhdGggbmFtZSBpcyBtYW5kYXRv cnkgb3Igbm90ICovCisJaWYgKHBsYW4gJiYgcGxhbi0+cGxhbl90eXBlICE9IEpTVFBfREVGQVVM VCAmJiAhcm9vdFBhdGhOYW1lKQorCXsKKwkJLyogQXNzaWduIHJvb3QgcGF0aCBuYW1lIGFuZCBj cmVhdGUgY29ycmVzcG9uZGluZyBwbGFuIG5vZGUgKi8KKwkJSnNvblRhYmxlUGxhbiAqcm9vdE5v ZGUgPSBtYWtlTm9kZShKc29uVGFibGVQbGFuKTsKKwkJSnNvblRhYmxlUGxhbiAqcm9vdFBsYW4g PSAoSnNvblRhYmxlUGxhbiAqKQorCQkJbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUEpfT1VU RVIsIChOb2RlICopIHJvb3ROb2RlLAorCQkJCQkJCQkJKE5vZGUgKikgcGxhbiwganQtPmxvY2F0 aW9uKTsKKworCQlyb290UGF0aE5hbWUgPSBnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKCZjeHQp OworCisJCXJvb3ROb2RlLT5wbGFuX3R5cGUgPSBKU1RQX1NJTVBMRTsKKwkJcm9vdE5vZGUtPnBh dGhuYW1lID0gcm9vdFBhdGhOYW1lOworCisJCXBsYW4gPSByb290UGxhbjsKKwl9CisjZW5kaWYK KworCWpmZS0+b3AgPSBKU09OX1RBQkxFX09QOworCWpmZS0+Y29udGV4dF9pdGVtID0JanQtPmNv bnRleHRfaXRlbTsKKwlqZmUtPnBhdGhzcGVjID0ganQtPnBhdGhzcGVjOworCWpmZS0+cGF0aG5h bWUgPSBqdC0+cGF0aG5hbWU7CisJamZlLT5wYXNzaW5nID0ganQtPnBhc3Npbmc7CisJamZlLT5v bl9lbXB0eSA9IGp0LT5vbl9lbXB0eTsKKwlqZmUtPm9uX2Vycm9yID0ganQtPm9uX2Vycm9yOwor CWpmZS0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247CisKKwkvKgorCSAqIFdlIG1ha2UgbGF0ZXJh bF9vbmx5IG5hbWVzIG9mIHRoaXMgbGV2ZWwgdmlzaWJsZSwgd2hldGhlciBvciBub3QgdGhlCisJ ICogUmFuZ2VUYWJsZUZ1bmMgaXMgZXhwbGljaXRseSBtYXJrZWQgTEFURVJBTC4gIFRoaXMgaXMg bmVlZGVkIGZvciBTUUwKKwkgKiBzcGVjIGNvbXBsaWFuY2UgYW5kIHNlZW1zIHVzZWZ1bCBvbiBj b252ZW5pZW5jZSBncm91bmRzIGZvciBhbGwKKwkgKiBmdW5jdGlvbnMgaW4gRlJPTS4KKwkgKgor CSAqIChMQVRFUkFMIGNhbid0IG5lc3Qgd2l0aGluIGEgc2luZ2xlIHBzdGF0ZSBsZXZlbCwgc28g d2UgZG9uJ3QgbmVlZAorCSAqIHNhdmUvcmVzdG9yZSBsb2dpYyBoZXJlLikKKwkgKi8KKwlBc3Nl cnQoIXBzdGF0ZS0+cF9sYXRlcmFsX2FjdGl2ZSk7CisJcHN0YXRlLT5wX2xhdGVyYWxfYWN0aXZl ID0gdHJ1ZTsKKworCXRmLT5mdW5jdHlwZSA9IFRGVF9KU09OX1RBQkxFOworCXRmLT5kb2NleHBy ID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIChOb2RlICopIGpmZSwgRVhQUl9LSU5EX0ZST01fRlVO Q1RJT04pOworCisJY3h0LmNvbnRleHRJdGVtVHlwaWQgPSBleHByVHlwZSh0Zi0+ZG9jZXhwcik7 CisKKwlpZiAoIUlzQShqdC0+cGF0aHNwZWMsIEFfQ29uc3QpIHx8CisJCWNhc3ROb2RlKEFfQ29u c3QsIGp0LT5wYXRoc3BlYyktPnZhbC5ub2RlLnR5cGUgIT0gVF9TdHJpbmcpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJ CSBlcnJtc2coIm9ubHkgc3RyaW5nIGNvbnN0YW50cyBzdXBwb3J0ZWQgaW4gSlNPTl9UQUJMRSBw YXRoIHNwZWNpZmljYXRpb24iKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwKKwkJ CQkJCQkJCWV4cHJMb2NhdGlvbihqdC0+cGF0aHNwZWMpKSkpOworCisJcm9vdFBhdGggPSBjYXN0 Tm9kZShBX0NvbnN0LCBqdC0+cGF0aHNwZWMpLT52YWwuc3ZhbC5zdmFsOworCisJdGYtPnBsYW4g PSAoTm9kZSAqKSB0cmFuc2Zvcm1Kc29uVGFibGVDb2x1bW5zKCZjeHQsIHBsYW4sIGp0LT5jb2x1 bW5zLAorCQkJCQkJCQkJCQkJICByb290UGF0aCwgJnJvb3RQYXRoTmFtZSwKKwkJCQkJCQkJCQkJ CSAgZXhwckxvY2F0aW9uKGp0LT5wYXRoc3BlYykpOworCisJLyogQWxzbyBzYXZlIGEgY29weSBv ZiB0aGUgUEFTU0lORyBhcmd1bWVudHMgaW4gdGhlIFRhYmxlRnVuYyBub2RlLiAqLworCWplID0g KEpzb25FeHByICopIHRmLT5kb2NleHByOworCXRmLT5wYXNzaW5ndmFsZXhwcnMgPSBjb3B5T2Jq ZWN0KGplLT5wYXNzaW5nX3ZhbHVlcyk7CisKKwl0Zi0+b3JkaW5hbGl0eWNvbCA9IC0xOwkJLyog dW5kZWZpbmUgb3JkaW5hbGl0eSBjb2x1bW4gbnVtYmVyICovCisJdGYtPmxvY2F0aW9uID0ganQt PmxvY2F0aW9uOworCisJcHN0YXRlLT5wX2xhdGVyYWxfYWN0aXZlID0gZmFsc2U7CisKKwkvKgor CSAqIE1hcmsgdGhlIFJURSBhcyBMQVRFUkFMIGlmIHRoZSB1c2VyIHNhaWQgTEFURVJBTCBleHBs aWNpdGx5LCBvciBpZgorCSAqIHRoZXJlIGFyZSBhbnkgbGF0ZXJhbCBjcm9zcy1yZWZlcmVuY2Vz IGluIGl0LgorCSAqLworCWlzX2xhdGVyYWwgPSBqdC0+bGF0ZXJhbCB8fCBjb250YWluX3ZhcnNf b2ZfbGV2ZWwoKE5vZGUgKikgdGYsIDApOworCisJcmV0dXJuIGFkZFJhbmdlVGFibGVFbnRyeUZv clRhYmxlRnVuYyhwc3RhdGUsCisJCQkJCQkJCQkJICB0ZiwganQtPmFsaWFzLCBpc19sYXRlcmFs LCB0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlv bi5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKaW5kZXggODY0ZWE5YjBk NS4uM2FjN2UxMTNmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKQEAgLTIwNzMs NyArMjA3Myw4IEBAIGFkZFJhbmdlVGFibGVFbnRyeUZvclRhYmxlRnVuYyhQYXJzZVN0YXRlICpw c3RhdGUsCiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKHRmLT5jb2x0eXBtb2RzKSA9PSBsaXN0X2xlbmd0 aCh0Zi0+Y29sbmFtZXMpKTsKIAlBc3NlcnQobGlzdF9sZW5ndGgodGYtPmNvbGNvbGxhdGlvbnMp ID09IGxpc3RfbGVuZ3RoKHRmLT5jb2xuYW1lcykpOwogCi0JcmVmbmFtZSA9IGFsaWFzID8gYWxp YXMtPmFsaWFzbmFtZSA6IHBzdHJkdXAoInhtbHRhYmxlIik7CisJcmVmbmFtZSA9IGFsaWFzID8g YWxpYXMtPmFsaWFzbmFtZSA6CisJCXBzdHJkdXAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJM RSA/ICJ4bWx0YWJsZSIgOiAianNvbl90YWJsZSIpOwogCiAJcnRlLT5ydGVraW5kID0gUlRFX1RB QkxFRlVOQzsKIAlydGUtPnJlbGlkID0gSW52YWxpZE9pZDsKQEAgLTIwOTYsNyArMjA5Nyw3IEBA IGFkZFJhbmdlVGFibGVFbnRyeUZvclRhYmxlRnVuYyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVO Q0UpLAogCQkJCSBlcnJtc2coIiVzIGZ1bmN0aW9uIGhhcyAlZCBjb2x1bW5zIGF2YWlsYWJsZSBi dXQgJWQgY29sdW1ucyBzcGVjaWZpZWQiLAotCQkJCQkJIlhNTFRBQkxFIiwKKwkJCQkJCXRmLT5m dW5jdHlwZSA9PSBURlRfWE1MVEFCTEUgPyAiWE1MVEFCTEUiIDogIkpTT05fVEFCTEUiLAogCQkJ CQkJbGlzdF9sZW5ndGgodGYtPmNvbG5hbWVzKSwgbnVtYWxpYXNlcykpKTsKIAogCXJ0ZS0+ZXJl ZiA9IGVyZWY7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXggOGY4MTYyNGY5Ny4uY2E3 MjI4ZWE0MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisr KyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMjAwMiw2ICsyMDAyLDkg QEAgRmlndXJlQ29sbmFtZUludGVybmFsKE5vZGUgKm5vZGUsIGNoYXIgKipuYW1lKQogCQkJCWNh c2UgSlNPTl9WQUxVRV9PUDoKIAkJCQkJKm5hbWUgPSAianNvbl92YWx1ZSI7CiAJCQkJCXJldHVy biAyOworCQkJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJCQkJKm5hbWUgPSAianNvbl90YWJsZSI7 CisJCQkJCXJldHVybiAyOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCAyZWQwNTliY2I0Li40OWJlOWMwZTdiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTYxLDEwICs2MSwxMiBAQAogCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjRXhwci5oIgogI2luY2x1ZGUgImZ1bmNhcGku aCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgogI2luY2x1ZGUgInJlZ2V4L3JlZ2V4LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9kYXRlLmgiCkBAIC03NSw2ICs3Nyw4IEBACiAjaW5jbHVkZSAidXRp bHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25w YXRoLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1dGlscy92 YXJsZW5hLmgiCiAKQEAgLTE1Nyw2ICsxNjEsNjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvblZhbHVl TGlzdEl0ZXJhdG9yCiAJTGlzdENlbGwgICAqbmV4dDsKIH0gSnNvblZhbHVlTGlzdEl0ZXJhdG9y OwogCisvKiBTdHJ1Y3R1cmVzIGZvciBKU09OX1RBQkxFIGV4ZWN1dGlvbiAgKi8KKwordHlwZWRl ZiBlbnVtIEpzb25UYWJsZVBsYW5TdGF0ZVR5cGUKK3sKKwlKU09OX1RBQkxFX1NDQU5fU1RBVEUg PSAwLAorCUpTT05fVEFCTEVfSk9JTl9TVEFURSwKK30JCQlKc29uVGFibGVQbGFuU3RhdGVUeXBl OworCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQbGFuU3RhdGUKK3sKKwlKc29uVGFibGVQbGFu U3RhdGVUeXBlIHR5cGU7CisKKwlzdHJ1Y3QgSnNvblRhYmxlUGxhblN0YXRlICpwYXJlbnQ7CisJ c3RydWN0IEpzb25UYWJsZVBsYW5TdGF0ZSAqbmVzdGVkOworfQkJCUpzb25UYWJsZVBsYW5TdGF0 ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlU2NhblN0YXRlCit7CisJSnNvblRhYmxlUGxh blN0YXRlIHBsYW47CisKKwlNZW1vcnlDb250ZXh0IG1jeHQ7CisJSnNvblBhdGggICAqcGF0aDsK KwlMaXN0CSAgICphcmdzOworCUpzb25WYWx1ZUxpc3QgZm91bmQ7CisJSnNvblZhbHVlTGlzdEl0 ZXJhdG9yIGl0ZXI7CisJRGF0dW0JCWN1cnJlbnQ7CisJaW50CQkJb3JkaW5hbDsKKwlib29sCQlj dXJyZW50SXNOdWxsOworCWJvb2wJCW91dGVySm9pbjsKKwlib29sCQllcnJvck9uRXJyb3I7CisJ Ym9vbAkJYWR2YW5jZU5lc3RlZDsKKwlib29sCQlyZXNldDsKK30gSnNvblRhYmxlU2NhblN0YXRl OworCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVKb2luU3RhdGUKK3sKKwlKc29uVGFibGVQbGFu U3RhdGUgcGxhbjsKKworCUpzb25UYWJsZVBsYW5TdGF0ZSAqbGVmdDsKKwlKc29uVGFibGVQbGFu U3RhdGUgKnJpZ2h0OworCWJvb2wJCWNyb3NzOworCWJvb2wJCWFkdmFuY2VSaWdodDsKK30gSnNv blRhYmxlSm9pblN0YXRlOworCisvKiByYW5kb20gbnVtYmVyIHRvIGlkZW50aWZ5IEpzb25UYWJs ZUV4ZWNDb250ZXh0ICovCisjZGVmaW5lIEpTT05fVEFCTEVfRVhFQ19DT05URVhUX01BR0lDCQk0 MTgzNTI4NjcKKwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlRXhlY0NvbnRleHQKK3sKKwlpbnQJ CQltYWdpYzsKKwlKc29uVGFibGVTY2FuU3RhdGUgKipjb2xleHByc2NhbnM7CisJSnNvblRhYmxl U2NhblN0YXRlICpyb290OworCWJvb2wJCWVtcHR5OworfQkJCUpzb25UYWJsZUV4ZWNDb250ZXh0 OworCiAvKiBzdHJpY3QvbGF4IGZsYWdzIGlzIGRlY29tcG9zZWQgaW50byBmb3VyIFt1bl13cmFw L2Vycm9yIGZsYWdzICovCiAjZGVmaW5lIGpzcFN0cmljdEFic2Vuc2VPZkVycm9ycyhjeHQpCSgh KGN4dCktPmxheE1vZGUpCiAjZGVmaW5lIGpzcEF1dG9VbndyYXAoY3h0KQkJCQkoKGN4dCktPmxh eE1vZGUpCkBAIC0yNTYsNiArMzE1LDcgQEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBnZXRB cnJheUluZGV4KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQlKc29uUGF0aEl0 ZW0gKmpzcCwgSnNvbmJWYWx1ZSAqamIsIGludDMyICppbmRleCk7CiBzdGF0aWMgSnNvbkJhc2VP YmplY3RJbmZvIHNldEJhc2VPYmplY3QoSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LAogCQkJCQkJ CQkJCUpzb25iVmFsdWUgKmpidiwgaW50MzIgaWQpOworc3RhdGljIHZvaWQgSnNvblZhbHVlTGlz dENsZWFyKEpzb25WYWx1ZUxpc3QgKmp2bCk7CiBzdGF0aWMgdm9pZCBKc29uVmFsdWVMaXN0QXBw ZW5kKEpzb25WYWx1ZUxpc3QgKmp2bCwgSnNvbmJWYWx1ZSAqamJ2KTsKIHN0YXRpYyBpbnQJSnNv blZhbHVlTGlzdExlbmd0aChjb25zdCBKc29uVmFsdWVMaXN0ICpqdmwpOwogc3RhdGljIGJvb2wg SnNvblZhbHVlTGlzdElzRW1wdHkoSnNvblZhbHVlTGlzdCAqanZsKTsKQEAgLTI3Myw2ICszMzMs MzIgQEAgc3RhdGljIEpzb25iVmFsdWUgKndyYXBJdGVtc0luQXJyYXkoY29uc3QgSnNvblZhbHVl TGlzdCAqaXRlbXMpOwogc3RhdGljIGludAljb21wYXJlRGF0ZXRpbWUoRGF0dW0gdmFsMSwgT2lk IHR5cGlkMSwgRGF0dW0gdmFsMiwgT2lkIHR5cGlkMiwKIAkJCQkJCQlib29sIHVzZVR6LCBib29s ICpjYXN0X2Vycm9yKTsKIAorCitzdGF0aWMgSnNvblRhYmxlUGxhblN0YXRlICogSnNvblRhYmxl SW5pdFBsYW5TdGF0ZShKc29uVGFibGVFeGVjQ29udGV4dCAqIGN4dCwKKwkJCQkJCQkJCQkJCSAg IE5vZGUgKnBsYW4sCisJCQkJCQkJCQkJCQkgICBKc29uVGFibGVQbGFuU3RhdGUgKiBwYXJlbnQp Oworc3RhdGljIGJvb2wgSnNvblRhYmxlUGxhbk5leHRSb3coSnNvblRhYmxlUGxhblN0YXRlICog c3RhdGUpOworc3RhdGljIGJvb2wgSnNvblRhYmxlU2Nhbk5leHRSb3coSnNvblRhYmxlU2NhblN0 YXRlICpzY2FuKTsKKworc3RhdGljIHZvaWQgSnNvblRhYmxlSW5pdE9wYXF1ZShUYWJsZUZ1bmNT Y2FuU3RhdGUgKnN0YXRlLCBpbnQgbmF0dHMpOworc3RhdGljIHZvaWQgSnNvblRhYmxlU2V0RG9j dW1lbnQoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgRGF0dW0gdmFsdWUpOworc3RhdGljIGJv b2wgSnNvblRhYmxlRmV0Y2hSb3coVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSk7CitzdGF0aWMg RGF0dW0gSnNvblRhYmxlR2V0VmFsdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgaW50IGNv bG51bSwKKwkJCQkgIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBib29sICppc251bGwpOworc3Rh dGljIHZvaWQgSnNvblRhYmxlRGVzdHJveU9wYXF1ZShUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRl KTsKKworY29uc3QgVGFibGVGdW5jUm91dGluZSBKc29uYlRhYmxlUm91dGluZSA9Cit7CisJSnNv blRhYmxlSW5pdE9wYXF1ZSwKKwlKc29uVGFibGVTZXREb2N1bWVudCwKKwlOVUxMLAorCU5VTEws CisJTlVMTCwKKwlKc29uVGFibGVGZXRjaFJvdywKKwlKc29uVGFibGVHZXRWYWx1ZSwKKwlKc29u VGFibGVEZXN0cm95T3BhcXVlCit9OworCiAvKioqKioqKioqKioqKioqKioqIFVzZXIgaW50ZXJm YWNlIHRvIEpzb25QYXRoIGV4ZWN1dG9yICoqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAt MjY1MSw2ICsyNzM3LDEzIEBAIHNldEJhc2VPYmplY3QoSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0 LCBKc29uYlZhbHVlICpqYnYsIGludDMyIGlkKQogCXJldHVybiBiYXNlT2JqZWN0OwogfQogCitz dGF0aWMgdm9pZAorSnNvblZhbHVlTGlzdENsZWFyKEpzb25WYWx1ZUxpc3QgKmp2bCkKK3sKKwlq dmwtPnNpbmdsZXRvbiA9IE5VTEw7CisJanZsLT5saXN0ID0gTlVMTDsKK30KKwogc3RhdGljIHZv aWQKIEpzb25WYWx1ZUxpc3RBcHBlbmQoSnNvblZhbHVlTGlzdCAqanZsLCBKc29uYlZhbHVlICpq YnYpCiB7CkBAIC0zMTg2LDMgKzMyNzksNDYwIEBAIEpzb25QYXRoVmFsdWUoRGF0dW0gamIsIEpz b25QYXRoICpqcCwgYm9vbCAqZW1wdHksIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKQogCiAJcmV0 dXJuIHJlczsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBKU09OX1RBQkxFIGZ1bmN0 aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBSZXR1cm5zIHByaXZh dGUgZGF0YSBmcm9tIGV4ZWN1dG9yIHN0YXRlLiBFbnN1cmUgdmFsaWRpdHkgYnkgY2hlY2sgd2l0 aAorICogTUFHSUMgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIEpzb25UYWJsZUV4ZWNDb250 ZXh0ICoKK0dldEpzb25UYWJsZUV4ZWNDb250ZXh0KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUs IGNvbnN0IGNoYXIgKmZuYW1lKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpyZXN1bHQ7CisK KwlpZiAoIUlzQShzdGF0ZSwgVGFibGVGdW5jU2NhblN0YXRlKSkKKwkJZWxvZyhFUlJPUiwgIiVz IGNhbGxlZCB3aXRoIGludmFsaWQgVGFibGVGdW5jU2NhblN0YXRlIiwgZm5hbWUpOworCXJlc3Vs dCA9IChKc29uVGFibGVFeGVjQ29udGV4dCAqKSBzdGF0ZS0+b3BhcXVlOworCWlmIChyZXN1bHQt Pm1hZ2ljICE9IEpTT05fVEFCTEVfRVhFQ19DT05URVhUX01BR0lDKQorCQllbG9nKEVSUk9SLCAi JXMgY2FsbGVkIHdpdGggaW52YWxpZCBUYWJsZUZ1bmNTY2FuU3RhdGUiLCBmbmFtZSk7CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisvKiBSZWN1cnNpdmVseSBpbml0aWFsaXplIEpTT05fVEFCTEUg c2NhbiAvIGpvaW4gc3RhdGUgKi8KK3N0YXRpYyBKc29uVGFibGVKb2luU3RhdGUgKgorSnNvblRh YmxlSW5pdEpvaW5TdGF0ZShKc29uVGFibGVFeGVjQ29udGV4dCAqIGN4dCwgSnNvblRhYmxlU2li bGluZyAqcGxhbiwKKwkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICogcGFyZW50KQoreworCUpz b25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9IHBhbGxvYzAoc2l6ZW9mKCpqb2luKSk7CisKKwlqb2lu LT5wbGFuLnR5cGUgPSBKU09OX1RBQkxFX0pPSU5fU1RBVEU7CisJLyogcGFyZW50IGFuZCBuZXN0 ZWQgbm90IHNldC4gKi8KKworCWpvaW4tPmNyb3NzID0gcGxhbi0+Y3Jvc3M7CisJam9pbi0+bGVm dCA9IEpzb25UYWJsZUluaXRQbGFuU3RhdGUoY3h0LCBwbGFuLT5sYXJnLCBwYXJlbnQpOworCWpv aW4tPnJpZ2h0ID0gSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShjeHQsIHBsYW4tPnJhcmcsIHBhcmVu dCk7CisKKwlyZXR1cm4gam9pbjsKK30KKworc3RhdGljIEpzb25UYWJsZVNjYW5TdGF0ZSAqCitK c29uVGFibGVJbml0U2NhblN0YXRlKEpzb25UYWJsZUV4ZWNDb250ZXh0ICogY3h0LCBKc29uVGFi bGVQYXJlbnQgKnBsYW4sCisJCQkJCSAgIEpzb25UYWJsZVBsYW5TdGF0ZSAqIHBhcmVudCwKKwkJ CQkJICAgTGlzdCAqYXJncywgTWVtb3J5Q29udGV4dCBtY3h0KQoreworCUpzb25UYWJsZVNjYW5T dGF0ZSAqc2NhbiA9IHBhbGxvYzAoc2l6ZW9mKCpzY2FuKSk7CisJaW50CQkJaTsKKworCXNjYW4t PnBsYW4udHlwZSA9IEpTT05fVEFCTEVfU0NBTl9TVEFURTsKKwlzY2FuLT5wbGFuLnBhcmVudCA9 IHBhcmVudDsKKworCXNjYW4tPm91dGVySm9pbiA9IHBsYW4tPm91dGVySm9pbjsKKwlzY2FuLT5l cnJvck9uRXJyb3IgPSBwbGFuLT5lcnJvck9uRXJyb3I7CisJc2Nhbi0+cGF0aCA9IERhdHVtR2V0 SnNvblBhdGhQKHBsYW4tPnBhdGgtPnZhbHVlLT5jb25zdHZhbHVlKTsKKwlzY2FuLT5hcmdzID0g YXJnczsKKwlzY2FuLT5tY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKG1jeHQsICJKc29uVGFi bGVFeGVjQ29udGV4dCIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwor CS8qCisJICogU2V0IGFmdGVyIHNldHRpbmdzIHNjYW4tPmFyZ3MgYW5kIHNjYW4tPm1jeHQsIGJl Y2F1c2UgdGhlIHJlY3Vyc2l2ZQorCSAqIGNhbGwgd2FudHMgdG8gdXNlIHRob3NlIHZhbHVlcy4K KwkgKi8KKwlzY2FuLT5wbGFuLm5lc3RlZCA9IHBsYW4tPmNoaWxkID8KKwkJSnNvblRhYmxlSW5p dFBsYW5TdGF0ZShjeHQsIHBsYW4tPmNoaWxkLCAoSnNvblRhYmxlUGxhblN0YXRlICopIHNjYW4p IDoKKwkJTlVMTDsKKworCXNjYW4tPmN1cnJlbnQgPSBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJ c2Nhbi0+Y3VycmVudElzTnVsbCA9IHRydWU7CisKKwlmb3IgKGkgPSBwbGFuLT5jb2xNaW47IGkg PD0gcGxhbi0+Y29sTWF4OyBpKyspCisJCWN4dC0+Y29sZXhwcnNjYW5zW2ldID0gc2NhbjsKKwor CXJldHVybiBzY2FuOworfQorCisvKiBSZWN1cnNpdmVseSBpbml0aWFsaXplIEpTT05fVEFCTEUg c2NhbiBzdGF0ZSAqLworc3RhdGljIEpzb25UYWJsZVBsYW5TdGF0ZSAqCitKc29uVGFibGVJbml0 UGxhblN0YXRlKEpzb25UYWJsZUV4ZWNDb250ZXh0ICogY3h0LCBOb2RlICpwbGFuLAorCQkJCQkg ICBKc29uVGFibGVQbGFuU3RhdGUgKiBwYXJlbnQpCit7CisJSnNvblRhYmxlUGxhblN0YXRlICpz dGF0ZTsKKworCWlmIChJc0EocGxhbiwgSnNvblRhYmxlU2libGluZykpCisJeworCQlKc29uVGFi bGVTaWJsaW5nICpqb2luID0gY2FzdE5vZGUoSnNvblRhYmxlU2libGluZywgcGxhbik7CisKKwkJ c3RhdGUgPSAoSnNvblRhYmxlUGxhblN0YXRlICopCisJCQlKc29uVGFibGVJbml0Sm9pblN0YXRl KGN4dCwgam9pbiwgcGFyZW50KTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlUGFyZW50ICpz Y2FuID0gY2FzdE5vZGUoSnNvblRhYmxlUGFyZW50LCBwbGFuKTsKKwkJSnNvblRhYmxlU2NhblN0 YXRlICpwYXJlbnRfc2NhbiA9IChKc29uVGFibGVTY2FuU3RhdGUgKikgcGFyZW50OworCisJCUFz c2VydChwYXJlbnRfc2Nhbik7CisJCXN0YXRlID0gKEpzb25UYWJsZVBsYW5TdGF0ZSAqKQorCQkJ SnNvblRhYmxlSW5pdFNjYW5TdGF0ZShjeHQsIHNjYW4sIHBhcmVudCwgcGFyZW50X3NjYW4tPmFy Z3MsCisJCQkJCQkJCSAgIHBhcmVudF9zY2FuLT5tY3h0KTsKKwl9CisKKwlyZXR1cm4gc3RhdGU7 Cit9CisKKy8qCisgKiBKc29uVGFibGVJbml0T3BhcXVlCisgKgkJRmlsbCBpbiBUYWJsZUZ1bmNT Y2FuU3RhdGUtPm9wYXF1ZSBmb3IgSnNvblRhYmxlIHByb2Nlc3NvcgorICovCitzdGF0aWMgdm9p ZAorSnNvblRhYmxlSW5pdE9wYXF1ZShUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBpbnQgbmF0 dHMpCit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKmN4dDsKKwlQbGFuU3RhdGUgICpwcyA9ICZz dGF0ZS0+c3MucHM7CisJVGFibGVGdW5jU2NhbiAqdGZzID0gY2FzdE5vZGUoVGFibGVGdW5jU2Nh biwgcHMtPnBsYW4pOworCVRhYmxlRnVuYyAgKnRmID0gdGZzLT50YWJsZWZ1bmM7CisJSnNvblRh YmxlUGFyZW50ICpyb290ID0gY2FzdE5vZGUoSnNvblRhYmxlUGFyZW50LCB0Zi0+cGxhbik7CisJ SnNvbkV4cHIgICAqamUgPSBjYXN0Tm9kZShKc29uRXhwciwgdGYtPmRvY2V4cHIpOworCUxpc3QJ ICAgKmFyZ3MgPSBOSUw7CisKKwljeHQgPSBwYWxsb2MwKHNpemVvZihKc29uVGFibGVFeGVjQ29u dGV4dCkpOworCWN4dC0+bWFnaWMgPSBKU09OX1RBQkxFX0VYRUNfQ09OVEVYVF9NQUdJQzsKKwor CWlmIChzdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzKQorCXsKKwkJTGlzdENlbGwgICAqZXhwcmxjOwor CQlMaXN0Q2VsbCAgICpuYW1lbGM7CisKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHN0YXRlLT5wYXNz aW5ndmFsZXhwcnMpID09CisJCQkgICBsaXN0X2xlbmd0aChqZS0+cGFzc2luZ19uYW1lcykpOwor CQlmb3Jib3RoKGV4cHJsYywgc3RhdGUtPnBhc3Npbmd2YWxleHBycywKKwkJCQluYW1lbGMsIGpl LT5wYXNzaW5nX25hbWVzKQorCQl7CisJCQlFeHByU3RhdGUgICpzdGF0ZSA9IGxmaXJzdF9ub2Rl KEV4cHJTdGF0ZSwgZXhwcmxjKTsKKwkJCVN0cmluZwkgICAqbmFtZSA9IGxmaXJzdF9ub2RlKFN0 cmluZywgbmFtZWxjKTsKKwkJCUpzb25QYXRoVmFyaWFibGUgKnZhciA9IHBhbGxvYyhzaXplb2Yo KnZhcikpOworCisJCQl2YXItPm5hbWUgPSBwc3RyZHVwKG5hbWUtPnN2YWwpOworCQkJdmFyLT50 eXBpZCA9IGV4cHJUeXBlKChOb2RlICopIHN0YXRlLT5leHByKTsKKwkJCXZhci0+dHlwbW9kID0g ZXhwclR5cG1vZCgoTm9kZSAqKSBzdGF0ZS0+ZXhwcik7CisKKwkJCS8qCisJCQkgKiBFdmFsdWF0 ZSB0aGUgZXhwcmVzc2lvbiBhbmQgc2F2ZSB0aGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQgYnkKKwkJ CSAqIEdldEpzb25QYXRoVmFyKCkuCisJCQkgKi8KKwkJCXZhci0+dmFsdWUgPSBFeGVjRXZhbEV4 cHIoc3RhdGUsIHBzLT5wc19FeHByQ29udGV4dCwKKwkJCQkJCQkJCSAgJnZhci0+aXNudWxsKTsK KworCQkJYXJncyA9IGxhcHBlbmQoYXJncywgdmFyKTsKKwkJfQorCX0KKworCWN4dC0+Y29sZXhw cnNjYW5zID0gcGFsbG9jKHNpemVvZihKc29uVGFibGVTY2FuU3RhdGUgKikgKgorCQkJCQkJCSAg IGxpc3RfbGVuZ3RoKHRmLT5jb2x2YWxleHBycykpOworCisJY3h0LT5yb290ID0gSnNvblRhYmxl SW5pdFNjYW5TdGF0ZShjeHQsIHJvb3QsIE5VTEwsIGFyZ3MsCisJCQkJCQkJCQkgICBDdXJyZW50 TWVtb3J5Q29udGV4dCk7CisJc3RhdGUtPm9wYXF1ZSA9IGN4dDsKK30KKworLyogUmVzZXQgc2Nh biBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpdGVtIGxpc3QgKi8KK3N0YXRpYyB2 b2lkCitKc29uVGFibGVSZXNjYW4oSnNvblRhYmxlU2NhblN0YXRlICpzY2FuKQoreworCUpzb25W YWx1ZUxpc3RJbml0SXRlcmF0b3IoJnNjYW4tPmZvdW5kLCAmc2Nhbi0+aXRlcik7CisJc2Nhbi0+ Y3VycmVudCA9IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwlzY2FuLT5jdXJyZW50SXNOdWxsID0g dHJ1ZTsKKwlzY2FuLT5hZHZhbmNlTmVzdGVkID0gZmFsc2U7CisJc2Nhbi0+b3JkaW5hbCA9IDA7 Cit9CisKKy8qIFJlc2V0IGNvbnRleHQgaXRlbSBvZiBhIHNjYW4sIGV4ZWN1dGUgSlNPTiBwYXRo IGFuZCByZXNldCBhIHNjYW4gKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVSZXNldENvbnRleHRJ dGVtKEpzb25UYWJsZVNjYW5TdGF0ZSAqc2NhbiwgRGF0dW0gaXRlbSkKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKKwlKc29uUGF0aEV4ZWNSZXN1bHQgcmVzOworCUpzb25iCSAgICpqcyA9IChK c29uYiAqKSBEYXR1bUdldEpzb25iUChpdGVtKTsKKworCUpzb25WYWx1ZUxpc3RDbGVhcigmc2Nh bi0+Zm91bmQpOworCisJTWVtb3J5Q29udGV4dFJlc2V0T25seShzY2FuLT5tY3h0KTsKKworCW9s ZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzY2FuLT5tY3h0KTsKKworCXJlcyA9IGV4ZWN1 dGVKc29uUGF0aChzY2FuLT5wYXRoLCBzY2FuLT5hcmdzLAorCQkJCQkJICBHZXRKc29uUGF0aFZh ciwgQ291bnRKc29uUGF0aFZhcnMsCisJCQkJCQkgIGpzLCBzY2FuLT5lcnJvck9uRXJyb3IsICZz Y2FuLT5mb3VuZCwKKwkJCQkJCSAgZmFsc2UgLyogRklYTUUgKi8gKTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworCisJaWYgKGpwZXJJc0Vycm9yKHJlcykpCisJeworCQlBc3Nl cnQoIXNjYW4tPmVycm9yT25FcnJvcik7CisJCUpzb25WYWx1ZUxpc3RDbGVhcigmc2Nhbi0+Zm91 bmQpOwkvKiBFTVBUWSBPTiBFUlJPUiBjYXNlICovCisJfQorCisJSnNvblRhYmxlUmVzY2FuKHNj YW4pOworfQorCisvKgorICogSnNvblRhYmxlU2V0RG9jdW1lbnQKKyAqCQlJbnN0YWxsIHRoZSBp bnB1dCBkb2N1bWVudAorICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlU2V0RG9jdW1lbnQoVGFi bGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgRGF0dW0gdmFsdWUpCit7CisJSnNvblRhYmxlRXhlY0Nv bnRleHQgKmN4dCA9CisJCUdldEpzb25UYWJsZUV4ZWNDb250ZXh0KHN0YXRlLCAiSnNvblRhYmxl U2V0RG9jdW1lbnQiKTsKKworCUpzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oY3h0LT5yb290LCB2 YWx1ZSk7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IHJlc2V0IHNjYW4gYW5kIGl0cyBjaGlsZCBub2Rl cyAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZVJlc2NhblJlY3Vyc2l2ZShKc29uVGFibGVQbGFu U3RhdGUgKiBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9KT0lOX1NU QVRFKQorCXsKKwkJSnNvblRhYmxlSm9pblN0YXRlICpqb2luID0gKEpzb25UYWJsZUpvaW5TdGF0 ZSAqKSBzdGF0ZTsKKworCQlKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUoam9pbi0+bGVmdCk7CisJ CUpzb25UYWJsZVJlc2NhblJlY3Vyc2l2ZShqb2luLT5yaWdodCk7CisJCWpvaW4tPmFkdmFuY2VS aWdodCA9IGZhbHNlOworCX0KKwllbHNlCisJeworCQlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4g PSAoSnNvblRhYmxlU2NhblN0YXRlICopIHN0YXRlOworCisJCUFzc2VydChzdGF0ZS0+dHlwZSA9 PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUpOworCQlKc29uVGFibGVSZXNjYW4oc2Nhbik7CisJCWlm IChzY2FuLT5wbGFuLm5lc3RlZCkKKwkJCUpzb25UYWJsZVJlc2NhblJlY3Vyc2l2ZShzY2FuLT5w bGFuLm5lc3RlZCk7CisJfQorfQorCisvKgorICogRmV0Y2ggbmV4dCByb3cgZnJvbSBhIGNyb3Nz L3VuaW9uIGpvaW5lZCBzY2FuLgorICoKKyAqIFJldHVybnMgZmFsc2UgYXQgdGhlIGVuZCBvZiBh IHNjYW4sIHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbAorSnNvblRhYmxlUGxhbk5l eHRSb3coSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJSnNvblRhYmxlSm9pblN0YXRl ICpqb2luOworCisJaWYgKHN0YXRlLT50eXBlID09IEpTT05fVEFCTEVfU0NBTl9TVEFURSkKKwkJ cmV0dXJuIEpzb25UYWJsZVNjYW5OZXh0Um93KChKc29uVGFibGVTY2FuU3RhdGUgKikgc3RhdGUp OworCisJam9pbiA9IChKc29uVGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisJaWYgKGpvaW4tPmFk dmFuY2VSaWdodCkKKwl7CisJCS8qIGZldGNoIG5leHQgaW5uZXIgcm93ICovCisJCWlmIChKc29u VGFibGVQbGFuTmV4dFJvdyhqb2luLT5yaWdodCkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvKiBp bm5lciByb3dzIGFyZSBleGhhdXN0ZWQgKi8KKwkJaWYgKGpvaW4tPmNyb3NzKQorCQkJam9pbi0+ YWR2YW5jZVJpZ2h0ID0gZmFsc2U7IC8qIG5leHQgb3V0ZXIgcm93ICovCisJCWVsc2UKKwkJCXJl dHVybiBmYWxzZTsJCS8qIGVuZCBvZiBzY2FuICovCisJfQorCisJd2hpbGUgKCFqb2luLT5hZHZh bmNlUmlnaHQpCisJeworCQkvKiBmZXRjaCBuZXh0IG91dGVyIHJvdyAqLworCQlib29sCQlsZWZ0 ID0gSnNvblRhYmxlUGxhbk5leHRSb3coam9pbi0+bGVmdCk7CisKKwkJaWYgKGpvaW4tPmNyb3Nz KQorCQl7CisJCQlpZiAoIWxlZnQpCisJCQkJcmV0dXJuIGZhbHNlOwkvKiBlbmQgb2Ygc2NhbiAq LworCisJCQlKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUoam9pbi0+cmlnaHQpOworCisJCQlpZiAo IUpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0KSkKKwkJCQljb250aW51ZTsJCS8qIG5l eHQgb3V0ZXIgcm93ICovCisKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IHRydWU7CS8qIG5leHQg aW5uZXIgcm93ICovCisJCX0KKwkJZWxzZSBpZiAoIWxlZnQpCisJCXsKKwkJCWlmICghSnNvblRh YmxlUGxhbk5leHRSb3coam9pbi0+cmlnaHQpKQorCQkJCXJldHVybiBmYWxzZTsJLyogZW5kIG9m IHNjYW4gKi8KKworCQkJam9pbi0+YWR2YW5jZVJpZ2h0ID0gdHJ1ZTsJLyogbmV4dCBpbm5lciBy b3cgKi8KKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKiBSZWN1 cnNpdmVseSBzZXQgJ3Jlc2V0JyBmbGFnIG9mIHNjYW4gYW5kIGl0cyBjaGlsZCBub2RlcyAqLwor c3RhdGljIHZvaWQKK0pzb25UYWJsZVBsYW5SZXNldChKc29uVGFibGVQbGFuU3RhdGUgKiBzdGF0 ZSkKK3sKKwlpZiAoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9KT0lOX1NUQVRFKQorCXsKKwkJ SnNvblRhYmxlSm9pblN0YXRlICpqb2luID0gKEpzb25UYWJsZUpvaW5TdGF0ZSAqKSBzdGF0ZTsK KworCQlKc29uVGFibGVQbGFuUmVzZXQoam9pbi0+bGVmdCk7CisJCUpzb25UYWJsZVBsYW5SZXNl dChqb2luLT5yaWdodCk7CisJCWpvaW4tPmFkdmFuY2VSaWdodCA9IGZhbHNlOworCX0KKwllbHNl CisJeworCQlKc29uVGFibGVTY2FuU3RhdGUgKnNjYW47CisKKwkJQXNzZXJ0KHN0YXRlLT50eXBl ID09IEpTT05fVEFCTEVfU0NBTl9TVEFURSk7CisJCXNjYW4gPSAoSnNvblRhYmxlU2NhblN0YXRl ICopIHN0YXRlOworCQlzY2FuLT5yZXNldCA9IHRydWU7CisJCXNjYW4tPmFkdmFuY2VOZXN0ZWQg PSBmYWxzZTsKKworCQlpZiAoc2Nhbi0+cGxhbi5uZXN0ZWQpCisJCQlKc29uVGFibGVQbGFuUmVz ZXQoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCX0KK30KKworLyoKKyAqIEZldGNoIG5leHQgcm93IGZy b20gYSBzaW1wbGUgc2NhbiB3aXRoIG91dGVyL2lubmVyIGpvaW5lZCBuZXN0ZWQgc3Vic2NhbnMu CisgKgorICogUmV0dXJucyBmYWxzZSBhdCB0aGUgZW5kIG9mIGEgc2NhbiwgdHJ1ZSBvdGhlcndp c2UuCisgKi8KK3N0YXRpYyBib29sCitKc29uVGFibGVTY2FuTmV4dFJvdyhKc29uVGFibGVTY2Fu U3RhdGUgKnNjYW4pCit7CisJLyogcmVzZXQgY29udGV4dCBpdGVtIGlmIHJlcXVlc3RlZCAqLwor CWlmIChzY2FuLT5yZXNldCkKKwl7CisJCUpzb25UYWJsZVNjYW5TdGF0ZSAqcGFyZW50X3NjYW4g PQorCQkJKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzY2FuLT5wbGFuLnBhcmVudDsKKworCQlBc3Nl cnQocGFyZW50X3NjYW4gJiYgIXBhcmVudF9zY2FuLT5jdXJyZW50SXNOdWxsKTsKKwkJSnNvblRh YmxlUmVzZXRDb250ZXh0SXRlbShzY2FuLCBwYXJlbnRfc2Nhbi0+Y3VycmVudCk7CisJCXNjYW4t PnJlc2V0ID0gZmFsc2U7CisJfQorCisJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQpCisJeworCQkv KiBmZXRjaCBuZXh0IG5lc3RlZCByb3cgKi8KKwkJc2Nhbi0+YWR2YW5jZU5lc3RlZCA9IEpzb25U YWJsZVBsYW5OZXh0Um93KHNjYW4tPnBsYW4ubmVzdGVkKTsKKworCQlpZiAoc2Nhbi0+YWR2YW5j ZU5lc3RlZCkKKwkJCXJldHVybiB0cnVlOworCX0KKworCWZvciAoOzspCisJeworCQkvKiBmZXRj aCBuZXh0IHJvdyAqLworCQlKc29uYlZhbHVlICpqYnYgPSBKc29uVmFsdWVMaXN0TmV4dCgmc2Nh bi0+Zm91bmQsICZzY2FuLT5pdGVyKTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJaWYg KCFqYnYpCisJCXsKKwkJCXNjYW4tPmN1cnJlbnQgPSBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJ CQlzY2FuLT5jdXJyZW50SXNOdWxsID0gdHJ1ZTsKKwkJCXJldHVybiBmYWxzZTsJCS8qIGVuZCBv ZiBzY2FuICovCisJCX0KKworCQkvKiBzZXQgY3VycmVudCByb3cgaXRlbSAqLworCQlvbGRjeHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc2Nhbi0+bWN4dCk7CisJCXNjYW4tPmN1cnJlbnQgPSBK c29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKTsKKwkJc2Nhbi0+Y3VycmVudElz TnVsbCA9IGZhbHNlOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCQlzY2Fu LT5vcmRpbmFsKys7CisKKwkJaWYgKCFzY2FuLT5wbGFuLm5lc3RlZCkKKwkJCWJyZWFrOworCisJ CUpzb25UYWJsZVBsYW5SZXNldChzY2FuLT5wbGFuLm5lc3RlZCk7CisKKwkJc2Nhbi0+YWR2YW5j ZU5lc3RlZCA9IEpzb25UYWJsZVBsYW5OZXh0Um93KHNjYW4tPnBsYW4ubmVzdGVkKTsKKworCQlp ZiAoc2Nhbi0+YWR2YW5jZU5lc3RlZCB8fCBzY2FuLT5vdXRlckpvaW4pCisJCQlicmVhazsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEpzb25UYWJsZUZldGNoUm93CisgKgkJUHJl cGFyZSB0aGUgbmV4dCAiY3VycmVudCIgdHVwbGUgZm9yIHVwY29taW5nIEdldFZhbHVlIGNhbGxz LgorICoJCVJldHVybnMgRkFMU0UgaWYgdGhlIHJvdy1maWx0ZXIgZXhwcmVzc2lvbiByZXR1cm5l ZCBubyBtb3JlIHJvd3MuCisgKi8KK3N0YXRpYyBib29sCitKc29uVGFibGVGZXRjaFJvdyhUYWJs ZUZ1bmNTY2FuU3RhdGUgKnN0YXRlKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQor CQlHZXRKc29uVGFibGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZUZldGNoUm93Iik7CisK KwlpZiAoY3h0LT5lbXB0eSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIEpzb25UYWJsZVNj YW5OZXh0Um93KGN4dC0+cm9vdCk7Cit9CisKKy8qCisgKiBKc29uVGFibGVHZXRWYWx1ZQorICoJ CVJldHVybiB0aGUgdmFsdWUgZm9yIGNvbHVtbiBudW1iZXIgJ2NvbG51bScgZm9yIHRoZSBjdXJy ZW50IHJvdy4KKyAqCisgKiBUaGlzIGxlYWtzIG1lbW9yeSwgc28gYmUgc3VyZSB0byByZXNldCBv ZnRlbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzCisgKiBjYWxsZWQuCisgKi8KK3N0YXRpYyBE YXR1bQorSnNvblRhYmxlR2V0VmFsdWUoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgaW50IGNv bG51bSwKKwkJCQkgIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBib29sICppc251bGwpCit7CisJ SnNvblRhYmxlRXhlY0NvbnRleHQgKmN4dCA9CisJCUdldEpzb25UYWJsZUV4ZWNDb250ZXh0KHN0 YXRlLCAiSnNvblRhYmxlR2V0VmFsdWUiKTsKKwlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBzdGF0 ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisJRXhwclN0YXRlICAqZXN0YXRlID0gbGlzdF9udGgo c3RhdGUtPmNvbHZhbGV4cHJzLCBjb2xudW0pOworCUpzb25UYWJsZVNjYW5TdGF0ZSAqc2NhbiA9 IGN4dC0+Y29sZXhwcnNjYW5zW2NvbG51bV07CisJRGF0dW0JCXJlc3VsdDsKKworCWlmIChzY2Fu LT5jdXJyZW50SXNOdWxsKQkvKiBOVUxMIGZyb20gb3V0ZXIvdW5pb24gam9pbiAqLworCXsKKwkJ cmVzdWx0ID0gKERhdHVtKSAwOworCQkqaXNudWxsID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoZXN0 YXRlKQkJCS8qIHJlZ3VsYXIgY29sdW1uICovCisJeworCQlEYXR1bQkJc2F2ZWRfY2FzZVZhbHVl ID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bTsKKwkJYm9vbAkJc2F2ZWRfY2FzZUlzTnVsbCA9 IGVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxsOworCisJCS8qIFBhc3MgdGhlIHZhbHVlIGZvciBD YXNlVGVzdEV4cHIgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBjb2xleHByICovCisJCWVjb250ZXh0 LT5jYXNlVmFsdWVfZGF0dW0gPSBzY2FuLT5jdXJyZW50OworCQllY29udGV4dC0+Y2FzZVZhbHVl X2lzTnVsbCA9IGZhbHNlOworCisJCXJlc3VsdCA9IEV4ZWNFdmFsRXhwcihlc3RhdGUsIGVjb250 ZXh0LCBpc251bGwpOworCisJCWVjb250ZXh0LT5jYXNlVmFsdWVfZGF0dW0gPSBzYXZlZF9jYXNl VmFsdWU7CisJCWVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxsID0gc2F2ZWRfY2FzZUlzTnVsbDsK Kwl9CisJZWxzZQorCXsKKwkJcmVzdWx0ID0gSW50MzJHZXREYXR1bShzY2FuLT5vcmRpbmFsKTsJ Lyogb3JkaW5hbGl0eSBjb2x1bW4gKi8KKwkJKmlzbnVsbCA9IGZhbHNlOworCX0KKworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qCisgKiBKc29uVGFibGVEZXN0cm95T3BhcXVlCisgKi8KK3N0YXRp YyB2b2lkCitKc29uVGFibGVEZXN0cm95T3BhcXVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUp Cit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKmN4dCA9CisJCUdldEpzb25UYWJsZUV4ZWNDb250 ZXh0KHN0YXRlLCAiSnNvblRhYmxlRGVzdHJveU9wYXF1ZSIpOworCisJLyogbm90IHZhbGlkIGFu eW1vcmUgKi8KKwljeHQtPm1hZ2ljID0gMDsKKworCXN0YXRlLT5vcGFxdWUgPSBOVUxMOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IGExNzQ1Yzg5ZmYuLjQ2ZjQ5YzczNjUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTUyMiw2ICs1MjIsOCBAQCBzdGF0aWMgY2hh ciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0 aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiBzdGF0aWMgdm9pZCBnZXRf anNvbl9wYXRoX3NwZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQs CiAJCQkJCQkJICAgYm9vbCBzaG93aW1wbGljaXQpOworc3RhdGljIHZvaWQgZ2V0X2pzb25fdGFi bGVfY29sdW1ucyhUYWJsZUZ1bmMgKnRmLCBKc29uVGFibGVQYXJlbnQgKm5vZGUsCisJCQkJCQkJ CSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpOwogCiAjZGVm aW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC04 NjI3LDcgKzg2MjksOCBAQCBnZXRfanNvbl9iZWhhdmlvcihKc29uQmVoYXZpb3IgKmJlaGF2aW9y LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAvKgogICogZ2V0X2pzb25fZXhwcl9vcHRpb25z CiAgKgotICogUGFyc2UgYmFjayBjb21tb24gb3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9W QUxVRSwgSlNPTl9FWElTVFMuCisgKiBQYXJzZSBiYWNrIGNvbW1vbiBvcHRpb25zIGZvciBKU09O X1FVRVJZLCBKU09OX1ZBTFVFLCBKU09OX0VYSVNUUyBhbmQKKyAqIEpTT05fVEFCTEUgY29sdW1u cy4KICAqLwogc3RhdGljIHZvaWQKIGdldF9qc29uX2V4cHJfb3B0aW9ucyhKc29uRXhwciAqanNl eHByLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCkBAIC05ODc0LDYgKzk4NzcsOSBAQCBnZXRf cnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJY2Fz ZSBKU09OX1ZBTFVFX09QOgogCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09O X1ZBTFVFKCIpOwogCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBKc29uRXhwciB0eXBlOiAlZCIsIGpleHByLT5vcCk7CisJCQkJCQlicmVh azsKIAkJCQl9CiAKIAkJCQlnZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29u dGV4dCwgc2hvd2ltcGxpY2l0KTsKQEAgLTExMjQwLDE2ICsxMTI0NiwxNCBAQCBnZXRfc3VibGlu a19leHByKFN1YkxpbmsgKnN1YmxpbmssIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKIAogCiAv KiAtLS0tLS0tLS0tCi0gKiBnZXRfdGFibGVmdW5jCQkJLSBQYXJzZSBiYWNrIGEgdGFibGUgZnVu Y3Rpb24KKyAqIGdldF94bWx0YWJsZQkJCS0gUGFyc2UgYmFjayBhIFhNTFRBQkxFIGZ1bmN0aW9u CiAgKiAtLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2b2lkCi1nZXRfdGFibGVmdW5jKFRhYmxlRnVu YyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCitnZXRf eG1sdGFibGUoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNo b3dpbXBsaWNpdCkKIHsKIAlTdHJpbmdJbmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKIAotCS8qIFhN TFRBQkxFIGlzIHRoZSBvbmx5IGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiAgKi8KLQogCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiWE1MVEFCTEUoIik7CiAKIAlpZiAodGYtPm5zX3VyaXMg IT0gTklMKQpAQCAtMTEzNDAsNiArMTEzNDQsMjcxIEBAIGdldF90YWJsZWZ1bmMoVGFibGVGdW5j ICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIAlhcHBl bmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CiB9CiAKKy8qCisgKiBnZXRfanNvbl9uZXN0ZWRf Y29sdW1ucyAtIFBhcnNlIGJhY2sgbmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucworICovCitzdGF0 aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgTm9k ZSAqbm9kZSwKKwkJCQkJCQkgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1w bGljaXQsCisJCQkJCQkJICBib29sIG5lZWRjb21tYSkKK3sKKwlpZiAoSXNBKG5vZGUsIEpzb25U YWJsZVNpYmxpbmcpKQorCXsKKwkJSnNvblRhYmxlU2libGluZyAqbiA9IChKc29uVGFibGVTaWJs aW5nICopIG5vZGU7CisKKwkJZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPmxh cmcsIGNvbnRleHQsIHNob3dpbXBsaWNpdCwKKwkJCQkJCQkJCSAgbmVlZGNvbW1hKTsKKwkJZ2V0 X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPnJhcmcsIGNvbnRleHQsIHNob3dpbXBs aWNpdCwgdHJ1ZSk7CisJfQorCWVsc2UKKwl7CisJCUpzb25UYWJsZVBhcmVudCAqbiA9IGNhc3RO b2RlKEpzb25UYWJsZVBhcmVudCwgbm9kZSk7CisKKwkJaWYgKG5lZWRjb21tYSkKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJywnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQs ICJORVNURUQgUEFUSCAiLCAwLCAwLCAwKTsKKwkJZ2V0X2NvbnN0X2V4cHIobi0+cGF0aC0+dmFs dWUsIGNvbnRleHQsIC0xKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgQVMg JXMiLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsKKwkJZ2V0X2pzb25fdGFibGVf Y29sdW1ucyh0ZiwgbiwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwl9Cit9CisKKy8qCisgKiBn ZXRfanNvbl90YWJsZV9wbGFuIC0gUGFyc2UgYmFjayBhIEpTT05fVEFCTEUgcGxhbgorICovCitz dGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfcGxhbihUYWJsZUZ1bmMgKnRmLCBOb2RlICpub2Rl LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCWJvb2wgcGFyZW50aGVzaXplKQorewor CWlmIChwYXJlbnRoZXNpemUpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1Ziwg JygnKTsKKworCWlmIChJc0Eobm9kZSwgSnNvblRhYmxlU2libGluZykpCisJeworCQlKc29uVGFi bGVTaWJsaW5nICpuID0gKEpzb25UYWJsZVNpYmxpbmcgKikgbm9kZTsKKworCQlnZXRfanNvbl90 YWJsZV9wbGFuKHRmLCBuLT5sYXJnLCBjb250ZXh0LAorCQkJCQkJCUlzQShuLT5sYXJnLCBKc29u VGFibGVTaWJsaW5nKSB8fAorCQkJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBhcmVudCwgbi0+bGFy ZyktPmNoaWxkKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1Ziwgbi0+ Y3Jvc3MgPyAiIENST1NTICIgOiAiIFVOSU9OICIpOworCisJCWdldF9qc29uX3RhYmxlX3BsYW4o dGYsIG4tPnJhcmcsIGNvbnRleHQsCisJCQkJCQkJSXNBKG4tPnJhcmcsIEpzb25UYWJsZVNpYmxp bmcpIHx8CisJCQkJCQkJY2FzdE5vZGUoSnNvblRhYmxlUGFyZW50LCBuLT5yYXJnKS0+Y2hpbGQp OworCX0KKwllbHNlCisJeworCQlKc29uVGFibGVQYXJlbnQgKm4gPSBjYXN0Tm9kZShKc29uVGFi bGVQYXJlbnQsIG5vZGUpOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVm LCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsKKworCQlpZiAobi0+Y2hpbGQpCisJ CXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLAorCQkJCQkJCQkgICBu LT5vdXRlckpvaW4gPyAiIE9VVEVSICIgOiAiIElOTkVSICIpOworCQkJZ2V0X2pzb25fdGFibGVf cGxhbih0Ziwgbi0+Y2hpbGQsIGNvbnRleHQsCisJCQkJCQkJCUlzQShuLT5jaGlsZCwgSnNvblRh YmxlU2libGluZykpOworCQl9CisJfQorCisJaWYgKHBhcmVudGhlc2l6ZSkKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisvKgorICogZ2V0X2pzb25fdGFi bGVfY29sdW1ucyAtIFBhcnNlIGJhY2sgSlNPTl9UQUJMRSBjb2x1bW5zCisgKi8KK3N0YXRpYyB2 b2lkCitnZXRfanNvbl90YWJsZV9jb2x1bW5zKFRhYmxlRnVuYyAqdGYsIEpzb25UYWJsZVBhcmVu dCAqbm9kZSwKKwkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBs aWNpdCkKK3sKKwlTdHJpbmdJbmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKKwlKc29uRXhwciAgICpq ZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCB0Zi0+ZG9jZXhwcik7CisJTGlzdENlbGwgICAqbGNf Y29sbmFtZTsKKwlMaXN0Q2VsbCAgICpsY19jb2x0eXBlOworCUxpc3RDZWxsICAgKmxjX2NvbHR5 cG1vZDsKKwlMaXN0Q2VsbCAgICpsY19jb2x2YWxleHByOworCWludAkJCWNvbG51bSA9IDA7CisK KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJYXBwZW5kQ29udGV4dEtleXdvcmQo Y29udGV4dCwgIkNPTFVNTlMgKCIsIDAsIDAsIDApOworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29u dGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7CisKKwlm b3Jmb3VyKGxjX2NvbG5hbWUsIHRmLT5jb2xuYW1lcywKKwkJCWxjX2NvbHR5cGUsIHRmLT5jb2x0 eXBlcywKKwkJCWxjX2NvbHR5cG1vZCwgdGYtPmNvbHR5cG1vZHMsCisJCQlsY19jb2x2YWxleHBy LCB0Zi0+Y29sdmFsZXhwcnMpCisJeworCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJz dChsY19jb2xuYW1lKSk7CisJCUpzb25FeHByICAgKmNvbGV4cHI7CisJCU9pZAkJCXR5cGlkOwor CQlpbnQzMgkJdHlwbW9kOworCQlib29sCQlvcmRpbmFsaXR5OworCQlKc29uQmVoYXZpb3JUeXBl IGRlZmF1bHRfYmVoYXZpb3I7CisKKwkJdHlwaWQgPSBsZmlyc3Rfb2lkKGxjX2NvbHR5cGUpOwor CQl0eXBtb2QgPSBsZmlyc3RfaW50KGxjX2NvbHR5cG1vZCk7CisJCWNvbGV4cHIgPSBjYXN0Tm9k ZShKc29uRXhwciwgbGZpcnN0KGxjX2NvbHZhbGV4cHIpKTsKKworCQlpZiAoY29sbnVtIDwgbm9k ZS0+Y29sTWluKQorCQl7CisJCQljb2xudW0rKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYg KGNvbG51bSA+IG5vZGUtPmNvbE1heCkKKwkJCWJyZWFrOworCisJCWlmIChjb2xudW0gPiBub2Rl LT5jb2xNaW4pCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisKKwkJY29s bnVtKys7CisKKwkJb3JkaW5hbGl0eSA9ICFjb2xleHByOworCisJCWFwcGVuZENvbnRleHRLZXl3 b3JkKGNvbnRleHQsICIiLCAwLCAwLCAwKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz ICVzIiwgcXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSwKKwkJCQkJCSBvcmRpbmFsaXR5ID8gIkZP UiBPUkRJTkFMSVRZIiA6CisJCQkJCQkgZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKHR5cGlkLCB0 eXBtb2QpKTsKKwkJaWYgKG9yZGluYWxpdHkpCisJCQljb250aW51ZTsKKworCQlpZiAoY29sZXhw ci0+b3AgPT0gSlNPTl9FWElTVFNfT1ApCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCAiIEVYSVNUUyIpOworCQkJZGVmYXVsdF9iZWhhdmlvciA9IEpTT05fQkVIQVZJT1JfRkFM U0U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoY29sZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9P UCkKKwkJCXsKKwkJCQljaGFyCQl0eXBjYXRlZ29yeTsKKwkJCQlib29sCQl0eXBpc3ByZWZlcnJl ZDsKKworCQkJCWdldF90eXBlX2NhdGVnb3J5X3ByZWZlcnJlZCh0eXBpZCwgJnR5cGNhdGVnb3J5 LCAmdHlwaXNwcmVmZXJyZWQpOworCisJCQkJaWYgKHR5cGNhdGVnb3J5ID09IFRZUENBVEVHT1JZ X1NUUklORykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJCQkJICAg Y29sZXhwci0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfSlNPTkIgPworCQkJCQkJ CQkJCSAgICIgRk9STUFUIEpTT05CIiA6ICIgRk9STUFUIEpTT04iKTsKKwkJCX0KKworCQkJZGVm YXVsdF9iZWhhdmlvciA9IEpTT05fQkVIQVZJT1JfTlVMTDsKKwkJfQorCisJCWlmIChqZXhwci0+ b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1IpCisJCQlkZWZhdWx0X2JlaGF2 aW9yID0gSlNPTl9CRUhBVklPUl9FUlJPUjsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIiBQQVRIICIpOworCisJCWdldF9qc29uX3BhdGhfc3BlYyhjb2xleHByLT5wYXRoX3NwZWMs IGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwkJZ2V0X2pzb25fZXhwcl9vcHRpb25zKGNvbGV4 cHIsIGNvbnRleHQsIGRlZmF1bHRfYmVoYXZpb3IpOworCX0KKworCWlmIChub2RlLT5jaGlsZCkK KwkJZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG5vZGUtPmNoaWxkLCBjb250ZXh0 LCBzaG93aW1wbGljaXQsCisJCQkJCQkJCQkgIG5vZGUtPmNvbE1heCA+PSBub2RlLT5jb2xNaW4p OworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVs IC09IFBSRVRUWUlOREVOVF9WQVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAi KSIsIDAsIDAsIDApOworfQorCisvKiAtLS0tLS0tLS0tCisgKiBnZXRfanNvbl90YWJsZQkJCS0g UGFyc2UgYmFjayBhIEpTT05fVEFCTEUgZnVuY3Rpb24KKyAqIC0tLS0tLS0tLS0KKyAqLworc3Rh dGljIHZvaWQKK2dldF9qc29uX3RhYmxlKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJU3RyaW5nSW5mbwlidWYgPSBjb250ZXh0 LT5idWY7CisJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgdGYtPmRvY2V4 cHIpOworCUpzb25UYWJsZVBhcmVudCAqcm9vdCA9IGNhc3ROb2RlKEpzb25UYWJsZVBhcmVudCwg dGYtPnBsYW4pOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1RBQkxFKCIp OworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVs ICs9IFBSRVRUWUlOREVOVF9WQVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAi IiwgMCwgMCwgMCk7CisKKwlnZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29u dGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAi KTsKKworCWdldF9jb25zdF9leHByKHJvb3QtPnBhdGgtPnZhbHVlLCBjb250ZXh0LCAtMSk7CisK KwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50aWZpZXIocm9vdC0+ cGF0aC0+bmFtZSkpOworCisJaWYgKGpleHByLT5wYXNzaW5nX3ZhbHVlcykKKwl7CisJCUxpc3RD ZWxsICAgKmxjMSwKKwkJCQkgICAqbGMyOworCQlib29sCQluZWVkY29tbWEgPSBmYWxzZTsKKwor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVuZENvbnRleHRLZXl3b3Jk KGNvbnRleHQsICJQQVNTSU5HICIsIDAsIDAsIDApOworCisJCWlmIChQUkVUVFlfSU5ERU5UKGNv bnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5ERU5UX1ZBUjsKKwor CQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJbGMyLCBqZXhwci0+cGFz c2luZ192YWx1ZXMpCisJCXsKKwkJCWlmIChuZWVkY29tbWEpCisJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICIsICIpOworCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKworCQkJYXBwZW5kQ29u dGV4dEtleXdvcmQoY29udGV4dCwgIiIsIDAsIDAsIDApOworCisJCQlnZXRfcnVsZV9leHByKChO b2RlICopIGxmaXJzdChsYzIpLCBjb250ZXh0LCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBBUyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoKGxmaXJzdF9ub2RlKFN0 cmluZywgbGMxKSktPnN2YWwpCisJCQkJKTsKKwkJfQorCisJCWlmIChQUkVUVFlfSU5ERU5UKGNv bnRleHQpKQorCQkJY29udGV4dC0+aW5kZW50TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsKKwl9 CisKKwlnZXRfanNvbl90YWJsZV9jb2x1bW5zKHRmLCByb290LCBjb250ZXh0LCBzaG93aW1wbGlj aXQpOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCWFwcGVuZENvbnRleHRL ZXl3b3JkKGNvbnRleHQsICJQTEFOICIsIDAsIDAsIDApOworCWdldF9qc29uX3RhYmxlX3BsYW4o dGYsIChOb2RlICopIHJvb3QsIGNvbnRleHQsIHRydWUpOworCisJaWYgKGpleHByLT5vbl9lcnJv ci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FTVBUWSkKKwkJZ2V0X2pzb25fYmVoYXZpb3IoamV4 cHItPm9uX2Vycm9yLCBjb250ZXh0LCAiRVJST1IiKTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNv bnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRFTlRfVkFSOworCisJ YXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsKK30KKworLyogLS0t LS0tLS0tLQorICogZ2V0X3RhYmxlZnVuYwkJCS0gUGFyc2UgYmFjayBhIHRhYmxlIGZ1bmN0aW9u CisgKiAtLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfdGFibGVmdW5jKFRhYmxlRnVu YyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJ LyogWE1MVEFCTEUgYW5kIEpTT05fVEFCTEUgYXJlIHRoZSBvbmx5IGV4aXN0aW5nIGltcGxlbWVu dGF0aW9ucy4gICovCisKKwlpZiAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSkKKwkJZ2V0 X3htbHRhYmxlKHRmLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCWVsc2UgaWYgKHRmLT5mdW5j dHlwZSA9PSBURlRfSlNPTl9UQUJMRSkKKwkJZ2V0X2pzb25fdGFibGUodGYsIGNvbnRleHQsIHNo b3dpbXBsaWNpdCk7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIGdldF9mcm9tX2NsYXVzZQkJCS0g UGFyc2UgYmFjayBhIEZST00gY2xhdXNlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBhZjZh YWI0YmIxLi40YzM0ZGRiZjAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTk2OCw2ICsxOTY4 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVGdW5jU2NhblN0YXRlCiAJRXhwclN0YXRlICAqcm93 ZXhwcjsJCS8qIHN0YXRlIGZvciByb3ctZ2VuZXJhdGluZyBleHByZXNzaW9uICovCiAJTGlzdAkg ICAqY29sZXhwcnM7CQkvKiBzdGF0ZSBmb3IgY29sdW1uLWdlbmVyYXRpbmcgZXhwcmVzc2lvbiAq LwogCUxpc3QJICAgKmNvbGRlZmV4cHJzOwkvKiBzdGF0ZSBmb3IgY29sdW1uIGRlZmF1bHQgZXhw cmVzc2lvbnMgKi8KKwlMaXN0CSAgICpjb2x2YWxleHByczsJLyogc3RhdGUgZm9yIGNvbHVtbiB2 YWx1ZSBleHByZXNzaW9uICovCisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJzOwkvKiBzdGF0ZSBm b3IgUEFTU0lORyBhcmd1bWVudCBleHByZXNzaW9uICovCiAJTGlzdAkgICAqbnNfbmFtZXM7CQkv KiBzYW1lIGFzIFRhYmxlRnVuYy5uc19uYW1lcyAqLwogCUxpc3QJICAgKm5zX3VyaXM7CQkvKiBs aXN0IG9mIHN0YXRlcyBvZiBuYW1lc3BhY2UgVVJJIGV4cHJzICovCiAJQml0bWFwc2V0ICAqbm90 bnVsbHM7CQkvKiBudWxsYWJpbGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBjb2x1bW4gKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvbWFrZWZ1bmNzLmgKaW5kZXggMWFjM2MxZjUwOS4uZTQzYTYzOWNjNyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFr ZWZ1bmNzLmgKQEAgLTExNCw2ICsxMTQsOCBAQCBleHRlcm4gSnNvblZhbHVlRXhwciAqbWFrZUpz b25WYWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIgKmZvcm1hdHRlZF9leHByLAogCQkJCQkJ CQkJCUpzb25Gb3JtYXQgKmZvcm1hdCk7CiBleHRlcm4gSnNvbkJlaGF2aW9yICptYWtlSnNvbkJl aGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZXhwciwKIAkJCQkgSnNvbkNvZXJj aW9uICpjb2VyY2lvbiwgaW50IGxvY2F0aW9uKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxl Sm9pbmVkUGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgdHlwZSwKKwkJCQkJCQkJCSBOb2RlICpw bGFuMSwgTm9kZSAqcGxhbjIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gTm9kZSAqbWFrZUpzb25L ZXlWYWx1ZShOb2RlICprZXksIE5vZGUgKnZhbHVlKTsKIGV4dGVybiBOb2RlICptYWtlSnNvbklz UHJlZGljYXRlKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwKIAkJCQkJCQkJIEpzb25W YWx1ZVR5cGUgaXRlbV90eXBlLCBib29sIHVuaXF1ZV9rZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o CmluZGV4IGMyOWYyOTkyZDguLjJjOTdlYjdhZWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAg LTE3MDksNiArMTcwOSwxOSBAQCB0eXBlZGVmIGVudW0gSnNvblF1b3RlcwogICovCiB0eXBlZGVm IGNoYXIgKkpzb25QYXRoU3BlYzsKIAorLyoKKyAqIEpzb25UYWJsZUNvbHVtblR5cGUgLQorICoJ CWVudW1lcmF0aW9uIG9mIEpTT05fVEFCTEUgY29sdW1uIHR5cGVzCisgKi8KK3R5cGVkZWYgZW51 bSBKc29uVGFibGVDb2x1bW5UeXBlCit7CisJSlRDX0ZPUl9PUkRJTkFMSVRZLAorCUpUQ19SRUdV TEFSLAorCUpUQ19FWElTVFMsCisJSlRDX0ZPUk1BVFRFRCwKKwlKVENfTkVTVEVELAorfSBKc29u VGFibGVDb2x1bW5UeXBlOworCiAvKgogICogSnNvbk91dHB1dCAtCiAgKgkJcmVwcmVzZW50YXRp b24gb2YgSlNPTiBvdXRwdXQgY2xhdXNlIChSRVRVUk5JTkcgdHlwZSBbRk9STUFUIGZvcm1hdF0p CkBAIC0xNzQxLDYgKzE3NTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBKc29uRnVuY0V4cHIKIAlKc29u RXhwck9wCW9wOwkJCQkvKiBleHByZXNzaW9uIHR5cGUgKi8KIAlKc29uVmFsdWVFeHByICpjb250 ZXh0X2l0ZW07CS8qIGNvbnRleHQgaXRlbSBleHByZXNzaW9uICovCiAJTm9kZQkgICAqcGF0aHNw ZWM7CQkvKiBKU09OIHBhdGggc3BlY2lmaWNhdGlvbiBleHByZXNzaW9uICovCisJY2hhcgkgICAq cGF0aG5hbWU7CQkvKiBwYXRoIG5hbWUsIGlmIGFueSAqLwogCUxpc3QJICAgKnBhc3Npbmc7CQkv KiBsaXN0IG9mIFBBU1NJTkcgY2xhdXNlIGFyZ3VtZW50cywgaWYgYW55ICovCiAJSnNvbk91dHB1 dCAqb3V0cHV0OwkJCS8qIG91dHB1dCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLwogCUpzb25CZWhh dmlvciAqb25fZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAqLwpAQCAtMTc1MCw2ICsxNzY0 LDg3IEBAIHR5cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgogCWludAkJCWxvY2F0aW9uOwkJLyog dG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gSnNvbkZ1bmNFeHByOwogCisv KgorICogSnNvblRhYmxlQ29sdW1uIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9u IG9mIEpTT05fVEFCTEUgY29sdW1uCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZUNvbHVt bgoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvblRhYmxlQ29sdW1uVHlwZSBjb2x0eXBlOwkvKiBj b2x1bW4gdHlwZSAqLworCWNoYXIJICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KKwlUeXBl TmFtZSAgICp0eXBlTmFtZTsJCS8qIGNvbHVtbiB0eXBlIG5hbWUgKi8KKwljaGFyCSAgICpwYXRo c3BlYzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiwgaWYgYW55ICovCisJY2hhcgkgICAqcGF0aG5h bWU7CQkvKiBwYXRoIG5hbWUsIGlmIGFueSAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBK U09OIGZvcm1hdCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpzb25XcmFwcGVyIHdyYXBwZXI7 CQkvKiBXUkFQUEVSIGJlaGF2aW9yIGZvciBmb3JtYXR0ZWQgY29sdW1ucyAqLworCUpzb25RdW90 ZXMJcXVvdGVzOwkJCS8qIG9taXQgb3Iga2VlcCBxdW90ZXMgb24gc2NhbGFyIHN0cmluZ3M/ICov CisJTGlzdAkgICAqY29sdW1uczsJCS8qIG5lc3RlZCBjb2x1bW5zICovCisJSnNvbkJlaGF2aW9y ICpvbl9lbXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCisJSnNvbkJlaGF2aW9yICpvbl9l cnJvcjsJCS8qIE9OIEVSUk9SIGJlaGF2aW9yICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tl biBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uVGFibGVDb2x1bW47CisKKy8q CisgKiBKc29uVGFibGVQbGFuVHlwZSAtCisgKgkJZmxhZ3MgZm9yIEpTT05fVEFCTEUgcGxhbiBu b2RlIHR5cGVzIHJlcHJlc2VudGF0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBKc29uVGFibGVQbGFu VHlwZQoreworCUpTVFBfREVGQVVMVCwKKwlKU1RQX1NJTVBMRSwKKwlKU1RQX0pPSU5FRCwKK30g SnNvblRhYmxlUGxhblR5cGU7CisKKy8qCisgKiBKc29uVGFibGVQbGFuSm9pblR5cGUgLQorICoJ CWZsYWdzIGZvciBKU09OX1RBQkxFIGpvaW4gdHlwZXMgcmVwcmVzZW50YXRpb24KKyAqLwordHlw ZWRlZiBlbnVtIEpzb25UYWJsZVBsYW5Kb2luVHlwZQoreworCUpTVFBKX0lOTkVSID0gMHgwMSwK KwlKU1RQSl9PVVRFUiA9IDB4MDIsCisJSlNUUEpfQ1JPU1MgPSAweDA0LAorCUpTVFBKX1VOSU9O ID0gMHgwOCwKK30gSnNvblRhYmxlUGxhbkpvaW5UeXBlOworCit0eXBlZGVmIHN0cnVjdCBKc29u VGFibGVQbGFuIEpzb25UYWJsZVBsYW47CisKKy8qCisgKiBKc29uVGFibGVQbGFuIC0KKyAqCQl1 bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVEFCTEUgcGxhbiBub2RlCisgKi8K K3N0cnVjdCBKc29uVGFibGVQbGFuCit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uVGFibGVQbGFu VHlwZSBwbGFuX3R5cGU7CS8qIHBsYW4gdHlwZSAqLworCUpzb25UYWJsZVBsYW5Kb2luVHlwZSBq b2luX3R5cGU7CS8qIGpvaW4gdHlwZSAoZm9yIGpvaW5lZCBwbGFuIG9ubHkpICovCisJSnNvblRh YmxlUGxhbiAqcGxhbjE7CQkvKiBmaXJzdCBqb2luZWQgcGxhbiAqLworCUpzb25UYWJsZVBsYW4g KnBsYW4yOwkJLyogc2Vjb25kIGpvaW5lZCBwbGFuICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkv KiBwYXRoIG5hbWUgKGZvciBzaW1wbGUgcGxhbiBvbmx5KSAqLworCWludAkJCWxvY2F0aW9uOwkJ LyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK307CisKKy8qCisgKiBKc29u VGFibGUgLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9UQUJMRQor ICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGUKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25W YWx1ZUV4cHIgKmNvbnRleHRfaXRlbTsJLyogY29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KKwlO b2RlCSAgICpwYXRoc3BlYzsJCS8qIEpTT04gcGF0aCBzcGVjaWZpY2F0aW9uIGV4cHJlc3Npb24g Ki8KKwljaGFyCSAgICpwYXRobmFtZTsJCS8qIHBhdGggbmFtZSwgaWYgYW55ICovCisJTGlzdAkg ICAqcGFzc2luZzsJCS8qIGxpc3Qgb2YgUEFTU0lORyBjbGF1c2UgYXJndW1lbnRzLCBpZiBhbnkg Ki8KKwlMaXN0CSAgICpjb2x1bW5zOwkJLyogbGlzdCBvZiBKc29uVGFibGVDb2x1bW4gKi8KKwlK c29uVGFibGVQbGFuICpwbGFuOwkJLyogam9pbiBwbGFuLCBpZiBzcGVjaWZpZWQgKi8KKwlKc29u QmVoYXZpb3IgICpvbl9lbXB0eTsJLyogT04gRVJST1IgYmVoYXZpb3IgKGVycm9yIGlmIHByZXNl bnQpICovCisJSnNvbkJlaGF2aW9yICAqb25fZXJyb3I7CS8qIE9OIEVSUk9SIGJlaGF2aW9yICov CisJQWxpYXMJICAgKmFsaWFzOwkJCS8qIHRhYmxlIGFsaWFzIGluIEZST00gY2xhdXNlICovCisJ Ym9vbAkJbGF0ZXJhbDsJCS8qIGRvZXMgaXQgaGF2ZSBMQVRFUkFMIHByZWZpeD8gKi8KKwlpbnQJ CQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpz b25UYWJsZTsKKwogLyoKICAqIEpzb25LZXlWYWx1ZSAtCiAgKgkJdW50cmFuc2Zvcm1lZCByZXBy ZXNlbnRhdGlvbiBvZiBKU09OIG9iamVjdCBrZXktdmFsdWUgcGFpciBmb3IKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5v ZGVzLmgKaW5kZXggYjEyMGM2YjgxOC4uMTkyYzE0MWIzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgK QEAgLTk0LDggKzk0LDE0IEBAIHR5cGVkZWYgc3RydWN0IFJhbmdlVmFyCiAJaW50CQkJbG9jYXRp b247CiB9IFJhbmdlVmFyOwogCit0eXBlZGVmIGVudW0gVGFibGVGdW5jVHlwZQoreworCVRGVF9Y TUxUQUJMRSwKKwlURlRfSlNPTl9UQUJMRSwKK30gVGFibGVGdW5jVHlwZTsKKwogLyoKLSAqIFRh YmxlRnVuYyAtIG5vZGUgZm9yIGEgdGFibGUgZnVuY3Rpb24sIHN1Y2ggYXMgWE1MVEFCTEUuCisg KiBUYWJsZUZ1bmMgLSBub2RlIGZvciBhIHRhYmxlIGZ1bmN0aW9uLCBzdWNoIGFzIFhNTFRBQkxF IG9yIEpTT05fVEFCTEUuCiAgKgogICogRW50cmllcyBpbiB0aGUgbnNfbmFtZXMgbGlzdCBhcmUg ZWl0aGVyIFN0cmluZyBub2RlcyBjb250YWluaW5nCiAgKiBsaXRlcmFsIG5hbWVzcGFjZSBuYW1l cywgb3IgTlVMTCBwb2ludGVycyB0byByZXByZXNlbnQgREVGQVVMVC4KQEAgLTEwMyw2ICsxMDks OCBAQCB0eXBlZGVmIHN0cnVjdCBSYW5nZVZhcgogdHlwZWRlZiBzdHJ1Y3QgVGFibGVGdW5jCiB7 CiAJTm9kZVRhZwkJdHlwZTsKKwkvKiBYTUxUQUJMRSBvciBKU09OX1RBQkxFICovCisJVGFibGVG dW5jVHlwZSBmdW5jdHlwZTsKIAkvKiBsaXN0IG9mIG5hbWVzcGFjZSBVUkkgZXhwcmVzc2lvbnMg Ki8KIAlMaXN0CSAgICpuc191cmlzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsK IAkvKiBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyBvciBOVUxMICovCkBAIC0xMjMsOCArMTMxLDE0 IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlRnVuYwogCUxpc3QJICAgKmNvbGV4cHJzOwogCS8qIGxp c3Qgb2YgY29sdW1uIGRlZmF1bHQgZXhwcmVzc2lvbnMgKi8KIAlMaXN0CSAgICpjb2xkZWZleHBy cyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CisJLyogbGlzdCBvZiBjb2x1bW4g dmFsdWUgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpjb2x2YWxleHBycyBwZ19ub2RlX2F0dHIo cXVlcnlfanVtYmxlX2lnbm9yZSk7CisJLyogbGlzdCBvZiBQQVNTSU5HIGFyZ3VtZW50IGV4cHJl c3Npb25zICovCisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJzIHBnX25vZGVfYXR0cihxdWVyeV9q dW1ibGVfaWdub3JlKTsKIAkvKiBudWxsYWJpbGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBjb2x1 bW4gKi8KIAlCaXRtYXBzZXQgICpub3RudWxscyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2ln bm9yZSk7CisJLyogSlNPTl9UQUJMRSBwbGFuICovCisJTm9kZQkgICAqcGxhbiBwZ19ub2RlX2F0 dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJLyogY291bnRzIGZyb20gMDsgLTEgaWYgbm9uZSBz cGVjaWZpZWQgKi8KIAlpbnQJCQlvcmRpbmFsaXR5Y29sIHBnX25vZGVfYXR0cihxdWVyeV9qdW1i bGVfaWdub3JlKTsKIAkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwpAQCAt MTU2MSw2ICsxNTc1LDcgQEAgdHlwZWRlZiBlbnVtIEpzb25FeHByT3AKIAlKU09OX1ZBTFVFX09Q LAkJCQkvKiBKU09OX1ZBTFVFKCkgKi8KIAlKU09OX1FVRVJZX09QLAkJCQkvKiBKU09OX1FVRVJZ KCkgKi8KIAlKU09OX0VYSVNUU19PUCwJCQkJLyogSlNPTl9FWElTVFMoKSAqLworCUpTT05fVEFC TEVfT1AsCQkJCS8qIEpTT05fVEFCTEUoKSAqLwogfSBKc29uRXhwck9wOwogCiAvKgpAQCAtMTg0 NCw2ICsxODU5LDQ4IEBAIHR5cGVkZWYgc3RydWN0IEpzb25FeHByCiAJaW50CQkJbG9jYXRpb247 CiB9IEpzb25FeHByOwogCisvKgorICogSnNvblRhYmxlUGF0aAorICoJCUEgSlNPTiBwYXRoIGV4 cHJlc3Npb24gdG8gYmUgY29tcHV0ZWQgYXMgcGFydCBvZiBldmFsdWF0aW5nCisgKgkJYSBKU09O X1RBQkxFIHBsYW4gbm9kZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQYXRoCit7CisJ Tm9kZVRhZwkJdHlwZTsKKworCUNvbnN0CSAgICp2YWx1ZTsKKwljaGFyCSAgICpuYW1lOworfQkJ CUpzb25UYWJsZVBhdGg7CisKKy8qCisgKiBKc29uVGFibGVQYXJlbnQgLQorICoJCXRyYW5zZm9y bWVkIHJlcHJlc2VudGF0aW9uIG9mIHBhcmVudCBKU09OX1RBQkxFIHBsYW4gbm9kZQorICovCit0 eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQYXJlbnQKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25U YWJsZVBhdGggKnBhdGg7CisJTm9kZQkgICAqY2hpbGQ7CQkJLyogbmVzdGVkIGNvbHVtbnMsIGlm IGFueSAqLworCWJvb2wJCW91dGVySm9pbjsJCS8qIG91dGVyIG9yIGlubmVyIGpvaW4gZm9yIG5l c3RlZCBjb2x1bW5zPyAqLworCWludAkJCWNvbE1pbjsJCQkvKiBtaW4gY29sdW1uIGluZGV4IGlu IHRoZSByZXN1bHRpbmcgY29sdW1uCisJCQkJCQkJCSAqIGxpc3QgKi8KKwlpbnQJCQljb2xNYXg7 CQkJLyogbWF4IGNvbHVtbiBpbmRleCBpbiB0aGUgcmVzdWx0aW5nIGNvbHVtbgorCQkJCQkJCQkg KiBsaXN0ICovCisJYm9vbAkJZXJyb3JPbkVycm9yOwkvKiBFUlJPUi9FTVBUWSBPTiBFUlJPUiBi ZWhhdmlvciAqLworfSBKc29uVGFibGVQYXJlbnQ7CisKKy8qCisgKiBKc29uVGFibGVTaWJsaW5n IC0KKyAqCQl0cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBqb2luZWQgc2libGluZyBKU09O X1RBQkxFIHBsYW4gbm9kZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVTaWJsaW5nCit7 CisJTm9kZVRhZwkJdHlwZTsKKwlOb2RlCSAgICpsYXJnOwkJCS8qIGxlZnQgam9pbiBub2RlICov CisJTm9kZQkgICAqcmFyZzsJCQkvKiByaWdodCBqb2luIG5vZGUgKi8KKwlib29sCQljcm9zczsJ CQkvKiBjcm9zcyBvciB1bmlvbiBqb2luPyAqLworfSBKc29uVGFibGVTaWJsaW5nOworCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKiBOdWxsVGVzdAogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCAwOTU0 ZDlmYzdiLi5mODhhNmM5YWM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0 LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNDIsNiArMjQyLDcgQEAg UEdfS0VZV09SRCgianNvbl9vYmplY3RhZ2ciLCBKU09OX09CSkVDVEFHRywgQ09MX05BTUVfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fcXVlcnkiLCBKU09OX1FVRVJZLCBD T0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9zY2FsYXIiLCBK U09OX1NDQUxBUiwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpz b25fc2VyaWFsaXplIiwgSlNPTl9TRVJJQUxJWkUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFC RUwpCitQR19LRVlXT1JEKCJqc29uX3RhYmxlIiwgSlNPTl9UQUJMRSwgQ09MX05BTUVfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fdmFsdWUiLCBKU09OX1ZBTFVFLCBDT0xf TkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2VlcCIsIEtFRVAsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImtleSIsIEtFWSwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMjg0LDYgKzI4NSw3IEBAIFBHX0tFWVdPUkQo Im5hbWVzIiwgTkFNRVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoIm5hdGlvbmFsIiwgTkFUSU9OQUwsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJuYXR1cmFsIiwgTkFUVVJBTCwgVFlQRV9GVU5DX05BTUVfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5jaGFyIiwgTkNIQVIsIENPTF9OQU1FX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJuZXN0ZWQiLCBORVNURUQsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5ldyIsIE5FVywgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmV4dCIsIE5FWFQsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5mYyIsIE5GQywgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQpAQCAtMzM0LDcgKzMzNiw5IEBAIFBHX0tFWVdPUkQoInBhcnRpYWwiLCBQ QVJUSUFMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXJ0 aXRpb24iLCBQQVJUSVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoInBhc3NpbmciLCBQQVNTSU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJwYXNzd29yZCIsIFBBU1NXT1JELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJwYXRoIiwgUEFUSCwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgicGxhY2luZyIsIFBMQUNJTkcsIFJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJwbGFuIiwgUExBTiwgVU5SRVNFUlZFRF9LRVlX T1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicGxhbnMiLCBQTEFOUywgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicG9saWN5IiwgUE9MSUNZLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwb3NpdGlvbiIsIFBPU0lUSU9O LCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cGFyc2VyL3BhcnNlX2NsYXVzZS5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5o CmluZGV4IDhlMjY0ODJkYjQuLjcxNTJhOGVmNDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bh cnNlci9wYXJzZV9jbGF1c2UuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNl LmgKQEAgLTUxLDQgKzUxLDcgQEAgZXh0ZXJuIExpc3QgKmFkZFRhcmdldFRvU29ydExpc3QoUGFy c2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAogZXh0ZXJuIEluZGV4IGFzc2lnblNv cnRHcm91cFJlZihUYXJnZXRFbnRyeSAqdGxlLCBMaXN0ICp0bGlzdCk7CiBleHRlcm4gYm9vbCB0 YXJnZXRJc0luU29ydExpc3QoVGFyZ2V0RW50cnkgKnRsZSwgT2lkIHNvcnRvcCwgTGlzdCAqc29y dExpc3QpOwogCisvKiBmdW5jdGlvbnMgaW4gcGFyc2VfanNvbnRhYmxlLmMgKi8KK2V4dGVybiBQ YXJzZU5hbWVzcGFjZUl0ZW0gKnRyYW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25UYWJsZSAqanQpOworCiAjZW5kaWYJCQkJCQkJLyogUEFSU0VfQ0xBVVNFX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGls cy9qc29ucGF0aC5oCmluZGV4IGEwZTUyOGI5NTUuLjE0ZTUwZmIwNzggMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBh dGguaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBKU09OUEFUSF9ICiAKICNpbmNsdWRlICJm bWdyLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvdGFibGVmdW5jLmgiCiAjaW5jbHVkZSAibm9kZXMv cGdfbGlzdC5oIgogI2luY2x1ZGUgIm5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxz L2pzb25iLmgiCkBAIC0yODUsNCArMjg2LDYgQEAgZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnko RGF0dW0gamIsIEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKIGV4dGVybiBKc29u YlZhbHVlICpKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wgKmVtcHR5 LAogCQkJCQkJCQkgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOwogCitleHRlcm4gUEdETExJTVBP UlQgY29uc3QgVGFibGVGdW5jUm91dGluZSBKc29uYlRhYmxlUm91dGluZTsKKwogI2VuZGlmCmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZSBiL3NyYy9p bnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCmluZGV4IDM5ODE0YTM5YzEuLjc3MGEx NDExZjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxl CisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCkBAIC01MSw2ICs1 MSw3IEBAIHRlc3Q6IHNxbC9vbGRleGVjCiB0ZXN0OiBzcWwvcXVvdGUKIHRlc3Q6IHNxbC9zaG93 CiB0ZXN0OiBzcWwvc3FsanNvbgordGVzdDogc3FsL3NxbGpzb25fcXVlcnlmdW5jcwogdGVzdDog c3FsL2luc3VwZAogdGVzdDogc3FsL3BhcnNlcgogdGVzdDogc3FsL3ByZXBhcmVhcwpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX3F1ZXJ5 ZnVuY3MuYyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9x dWVyeWZ1bmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmVkZmVl ZWYxOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3Rl ZC9zcWwtc3FsanNvbl9xdWVyeWZ1bmNzLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qIFByb2Nlc3Nl ZCBieSBlY3BnIChyZWdyZXNzaW9uIG1vZGUpICovCisvKiBUaGVzZSBpbmNsdWRlIGZpbGVzIGFy ZSBhZGRlZCBieSB0aGUgcHJlcHJvY2Vzc29yICovCisjaW5jbHVkZSA8ZWNwZ2xpYi5oPgorI2lu Y2x1ZGUgPGVjcGdlcnJuby5oPgorI2luY2x1ZGUgPHNxbGNhLmg+CisvKiBFbmQgb2YgYXV0b21h dGljIGluY2x1ZGUgc2VjdGlvbiAqLworI2RlZmluZSBFQ1BHZGVidWcoWCxZKSBFQ1BHZGVidWco KFgpKzEwMCwoWSkpCisKKyNsaW5lIDEgInNxbGpzb25fcXVlcnlmdW5jcy5wZ2MiCisjaW5jbHVk ZSA8c3RkaW8uaD4KKworCisjbGluZSAxICJzcWxjYS5oIgorI2lmbmRlZiBQT1NUR1JFU19TUUxD QV9ICisjZGVmaW5lIFBPU1RHUkVTX1NRTENBX0gKKworI2lmbmRlZiBQR0RMTElNUE9SVAorI2lm ICBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjZGVmaW5lIFBHRExMSU1Q T1JUIF9fZGVjbHNwZWMgKGRsbGltcG9ydCkKKyNlbHNlCisjZGVmaW5lIFBHRExMSU1QT1JUCisj ZW5kaWYJCQkJCQkJLyogX19DWUdXSU5fXyAqLworI2VuZGlmCQkJCQkJCS8qIFBHRExMSU1QT1JU ICovCisKKyNkZWZpbmUgU1FMRVJSTUNfTEVOCTE1MAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4 dGVybiAiQyIKK3sKKyNlbmRpZgorCitzdHJ1Y3Qgc3FsY2FfdAoreworCWNoYXIJCXNxbGNhaWRb OF07CisJbG9uZwkJc3FsYWJjOworCWxvbmcJCXNxbGNvZGU7CisJc3RydWN0CisJeworCQlpbnQJ CQlzcWxlcnJtbDsKKwkJY2hhcgkJc3FsZXJybWNbU1FMRVJSTUNfTEVOXTsKKwl9CQkJc3FsZXJy bTsKKwljaGFyCQlzcWxlcnJwWzhdOworCWxvbmcJCXNxbGVycmRbNl07CisJLyogRWxlbWVudCAw OiBlbXB0eQkJCQkJCSovCisJLyogMTogT0lEIG9mIHByb2Nlc3NlZCB0dXBsZSBpZiBhcHBsaWNh YmxlCQkJKi8KKwkvKiAyOiBudW1iZXIgb2Ygcm93cyBwcm9jZXNzZWQJCQkJKi8KKwkvKiBhZnRl ciBhbiBJTlNFUlQsIFVQREFURSBvcgkJCQkqLworCS8qIERFTEVURSBzdGF0ZW1lbnQJCQkJCSov CisJLyogMzogZW1wdHkJCQkJCQkqLworCS8qIDQ6IGVtcHR5CQkJCQkJKi8KKwkvKiA1OiBlbXB0 eQkJCQkJCSovCisJY2hhcgkJc3Fsd2Fybls4XTsKKwkvKiBFbGVtZW50IDA6IHNldCB0byAnVycg aWYgYXQgbGVhc3Qgb25lIG90aGVyIGlzICdXJwkqLworCS8qIDE6IGlmICdXJyBhdCBsZWFzdCBv bmUgY2hhcmFjdGVyIHN0cmluZwkJKi8KKwkvKiB2YWx1ZSB3YXMgdHJ1bmNhdGVkIHdoZW4gaXQg d2FzCQkJKi8KKwkvKiBzdG9yZWQgaW50byBhIGhvc3QgdmFyaWFibGUuICAgICAgICAgICAgICov CisKKwkvKgorCSAqIDI6IGlmICdXJyBhIChob3BlZnVsbHkpIG5vbi1mYXRhbCBub3RpY2Ugb2Nj dXJyZWQKKwkgKi8JLyogMzogZW1wdHkgKi8KKwkvKiA0OiBlbXB0eQkJCQkJCSovCisJLyogNTog ZW1wdHkJCQkJCQkqLworCS8qIDY6IGVtcHR5CQkJCQkJKi8KKwkvKiA3OiBlbXB0eQkJCQkJCSov CisKKwljaGFyCQlzcWxzdGF0ZVs1XTsKK307CisKK3N0cnVjdCBzcWxjYV90ICpFQ1BHZ2V0X3Nx bGNhKHZvaWQpOworCisjaWZuZGVmIFBPU1RHUkVTX0VDUEdfSU5URVJOQUwKKyNkZWZpbmUgc3Fs Y2EgKCpFQ1BHZ2V0X3NxbGNhKCkpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj ZW5kaWYKKworI2VuZGlmCisKKyNsaW5lIDMgInNxbGpzb25fcXVlcnlmdW5jcy5wZ2MiCisKKwor I2xpbmUgMSAicmVncmVzc2lvbi5oIgorCisKKworCisKKworI2xpbmUgNCAic3FsanNvbl9xdWVy eWZ1bmNzLnBnYyIKKworCisvKiBleGVjIHNxbCB3aGVuZXZlciBzcWxlcnJvciAgc3FscHJpbnQg OyAqLworI2xpbmUgNiAic3FsanNvbl9xdWVyeWZ1bmNzLnBnYyIKKworCitpbnQKK21haW4gKCkK K3sKKyAgRUNQR2RlYnVnICgxLCBzdGRlcnIpOworCisgIHsgRUNQR2Nvbm5lY3QoX19MSU5FX18s IDAsICJlY3BnMV9yZWdyZXNzaW9uIiAsIE5VTEwsIE5VTEwgLCBOVUxMLCAwKTsgCisjbGluZSAx MyAic3FsanNvbl9xdWVyeWZ1bmNzLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxw cmludCgpO30KKyNsaW5lIDEzICJzcWxqc29uX3F1ZXJ5ZnVuY3MucGdjIgorCisgIHsgRUNQR3Nl dGNvbW1pdChfX0xJTkVfXywgIm9uIiwgTlVMTCk7CisjbGluZSAxNCAic3FsanNvbl9xdWVyeWZ1 bmNzLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCgpO30KKyNsaW5lIDE0 ICJzcWxqc29uX3F1ZXJ5ZnVuY3MucGdjIgorCisKKyAgeyBFQ1BHZG8oX19MSU5FX18sIDAsIDEs IE5VTEwsIDAsIEVDUEdzdF9ub3JtYWwsICJzZWxlY3QgKiBmcm9tIGpzb25fdGFibGUgKCBqc29u YiAnbnVsbCcgLCAnJFsqXScgYXMgcDAgY29sdW1ucyAoIG5lc3RlZCAnJCcgYXMgcDEgY29sdW1u cyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMTEgY29sdW1ucyAoIGZvbyBpbnQgKSAsIG5lc3RlZCBw YXRoICckJyBhcyBwMTIgY29sdW1ucyAoIGJhciBpbnQgKSApICwgbmVzdGVkIHBhdGggJyQnIGFz IHAyIGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDIxIGNvbHVtbnMgKCBiYXogaW50ICkg KSApIHBsYW4gKCBwMSApICkganQiLCBFQ1BHdF9FT0lULCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDI2 ICJzcWxqc29uX3F1ZXJ5ZnVuY3MucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHBy aW50KCk7fQorI2xpbmUgMjYgInNxbGpzb25fcXVlcnlmdW5jcy5wZ2MiCisKKyAgLy8gZXJyb3IK KworICB7IEVDUEdkaXNjb25uZWN0KF9fTElORV9fLCAiQ1VSUkVOVCIpOworI2xpbmUgMjkgInNx bGpzb25fcXVlcnlmdW5jcy5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQo KTt9CisjbGluZSAyOSAic3FsanNvbl9xdWVyeWZ1bmNzLnBnYyIKKworCisgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxq c29uX3F1ZXJ5ZnVuY3Muc3RkZXJyIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVk L3NxbC1zcWxqc29uX3F1ZXJ5ZnVuY3Muc3RkZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmM5ODJmMzE4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fcXVlcnlmdW5jcy5zdGRlcnIKQEAgLTAs MCArMSwyMCBAQAorW05PX1BJRF06IEVDUEdkZWJ1Zzogc2V0IHRvIDEKK1tOT19QSURdOiBzcWxj YTogY29kZTogMCwgc3RhdGU6IDAwMDAwCitbTk9fUElEXTogRUNQR2Nvbm5lY3Q6IG9wZW5pbmcg ZGF0YWJhc2UgZWNwZzFfcmVncmVzc2lvbiBvbiA8REVGQVVMVD4gcG9ydCA8REVGQVVMVD4gIAor W05PX1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBFQ1BHc2V0 Y29tbWl0IG9uIGxpbmUgMTQ6IGFjdGlvbiAib24iOyBjb25uZWN0aW9uICJlY3BnMV9yZWdyZXNz aW9uIgorW05PX1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBl Y3BnX2V4ZWN1dGUgb24gbGluZSAxNjogcXVlcnk6IHNlbGVjdCAqIGZyb20ganNvbl90YWJsZSAo IGpzb25iICdudWxsJyAsICckWypdJyBhcyBwMCBjb2x1bW5zICggbmVzdGVkICckJyBhcyBwMSBj b2x1bW5zICggbmVzdGVkIHBhdGggJyQnIGFzIHAxMSBjb2x1bW5zICggZm9vIGludCApICwgbmVz dGVkIHBhdGggJyQnIGFzIHAxMiBjb2x1bW5zICggYmFyIGludCApICkgLCBuZXN0ZWQgcGF0aCAn JCcgYXMgcDIgY29sdW1ucyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMjEgY29sdW1ucyAoIGJheiBp bnQgKSApICkgcGxhbiAoIHAxICkgKSBqdDsgd2l0aCAwIHBhcmFtZXRlcihzKSBvbiBjb25uZWN0 aW9uIGVjcGcxX3JlZ3Jlc3Npb24KK1tOT19QSURdOiBzcWxjYTogY29kZTogMCwgc3RhdGU6IDAw MDAwCitbTk9fUElEXTogZWNwZ19leGVjdXRlIG9uIGxpbmUgMTY6IHVzaW5nIFBRZXhlYworW05P X1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBlY3BnX2NoZWNr X1BRcmVzdWx0IG9uIGxpbmUgMTY6IGJhZCByZXNwb25zZSAtIEVSUk9SOiAgaW52YWxpZCBKU09O X1RBQkxFIHBsYW4KK0xJTkUgMTogLi4udGVkIHBhdGggJyQnIGFzIHAyMSBjb2x1bW5zICggYmF6 IGludCApICkgKSBwbGFuICggcDEgKSApIGp0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIFBhdGggbmFtZSBt aXNtYXRjaDogZXhwZWN0ZWQgcDAgYnV0IHAxIGlzIGdpdmVuLgorW05PX1BJRF06IHNxbGNhOiBj b2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiByYWlzaW5nIHNxbHN0YXRlIDQyNjAxIChz cWxjb2RlIC00MDApOiBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiBvbiBsaW5lIDE2CitbTk9fUElE XTogc3FsY2E6IGNvZGU6IC00MDAsIHN0YXRlOiA0MjYwMQorU1FMIGVycm9yOiBpbnZhbGlkIEpT T05fVEFCTEUgcGxhbiBvbiBsaW5lIDE2CitbTk9fUElEXTogZWNwZ19maW5pc2g6IGNvbm5lY3Rp b24gZWNwZzFfcmVncmVzc2lvbiBjbG9zZWQKK1tOT19QSURdOiBzcWxjYTogY29kZTogMCwgc3Rh dGU6IDAwMDAwCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQv c3FsLXNxbGpzb25fcXVlcnlmdW5jcy5zdGRvdXQgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qv ZXhwZWN0ZWQvc3FsLXNxbGpzb25fcXVlcnlmdW5jcy5zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFj ZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwv TWFrZWZpbGUKaW5kZXggZDgyMTNiMjVjZS4uOTZhMDY0Njg3NyAxMDA2NDQKLS0tIGEvc3JjL2lu dGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3Bn L3Rlc3Qvc3FsL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIFRFU1RTID0gYXJyYXkgYXJyYXku YyBcCiAgICAgICAgIHF1b3RlIHF1b3RlLmMgXAogICAgICAgICBzaG93IHNob3cuYyBcCiAgICAg ICAgIHNxbGpzb24gc3FsanNvbi5jIFwKKyAgICAgICAgc3FsanNvbl9xdWVyeWZ1bmNzIHNxbGpz b25fcXVlcnlmdW5jcy5jIFwKICAgICAgICAgaW5zdXBkIGluc3VwZC5jIFwKICAgICAgICAgdHdv cGhhc2UgdHdvcGhhc2UuYyBcCiAgICAgICAgIGluc3VwZCBpbnN1cGQuYyBcCmRpZmYgLS1naXQg YS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkIGIvc3JjL2ludGVyZmFj ZXMvZWNwZy90ZXN0L3NxbC9tZXNvbi5idWlsZAppbmRleCBmNGM5NDE4YWJiLi43MjI5ZmE3NWM3 IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkCisr KyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvbWVzb24uYnVpbGQKQEAgLTI2LDYgKzI2 LDcgQEAgcGdjX2ZpbGVzID0gWwogICAnc2hvdycsCiAgICdzcWxkYScsCiAgICdzcWxqc29uJywK KyAgJ3NxbGpzb25fcXVlcnlmdW5jcycsCiAgICd0d29waGFzZScsCiBdCiAKZGlmZiAtLWdpdCBh L3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnBnYyBiL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9xdWVyeWZ1bmNzLnBnYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNmY4YTJiNjM0Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3MucGdj CkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitFWEVDIFNRTCBJTkNMVURF IHNxbGNhOworZXhlYyBzcWwgaW5jbHVkZSAuLi9yZWdyZXNzaW9uOworCitFWEVDIFNRTCBXSEVO RVZFUiBTUUxFUlJPUiBzcWxwcmludDsKKworaW50CittYWluICgpCit7CisgIEVDUEdkZWJ1ZyAo MSwgc3RkZXJyKTsKKworICBFWEVDIFNRTCBDT05ORUNUIFRPIFJFR1JFU1NEQjE7CisgIEVYRUMg U1FMIFNFVCBBVVRPQ09NTUlUID0gT047CisKKyAgRVhFQyBTUUwgU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCAn JCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDEpKSBqdDsK KyAgLy8gZXJyb3IKKworICBFWEVDIFNRTCBESVNDT05ORUNUOworCisgIHJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3NxbGpzb24ub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uX3NxbGpzb24ub3V0CmluZGV4IDA0ZDVjYzc0 ZTMuLjVkMGM2YjZmZGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bl9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25fc3FsanNv bi5vdXQKQEAgLTE2LDMgKzE2LDkgQEAgRVJST1I6ICBKU09OX1FVRVJZKCkgaXMgbm90IHlldCBp bXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZQogTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShO VUxMIEZPUk1BVCBKU09OLCAnJCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBISU5U OiAgVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCistLSBKU09OX1RBQkxFCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnIENPTFVNTlMgKGZvbyB0 ZXh0KSk7CitFUlJPUjogIEpTT05fVEFCTEUoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0 aGUganNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1B VCBKU09OLCAnJCcgQ09MVU1OUyAoZm9vIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKaW5kZXggYTJlZjFjNjhkMS4u ZWY1MmU0Y2UxNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9z cWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24u b3V0CkBAIC0xMDI0LDMgKzEwMjQsMTE4NSBAQCBDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9t dXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAwIHRvICQuYSA/IChALmRhdGV0aQogRVJS T1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFC TEUKIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckWzEsICQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0 Jzo6dGltZSBBUyB4KSk7CiBEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKKy0tIEpT T05fVEFCTEUKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9ubHkgaW4g RlJPTSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOworRVJST1I6ICBzeW50 YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK0xJTkUgMTogU0VMRUNUIEpTT05fVEFCTEUoJ1tdJywg JyQnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBTaG91bGQgZmFpbCAobm8gY29s dW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMLCAnJCcgQ09MVU1OUyAoKSk7CitF UlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgorTElORSAxOiBTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RSAoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwgdjIp OworRVJST1I6ICBKU09OX1RBQkxFIGZ1bmN0aW9uIGhhcyAxIGNvbHVtbnMgYXZhaWxhYmxlIGJ1 dCAyIGNvbHVtbnMgc3BlY2lmaWVkCistLSBOVUxMID0+IGVtcHR5IHRhYmxlCitTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TIChmb28gaW50KSkgYmFyOwor IGZvbyAKKy0tLS0tCisoMCByb3dzKQorCistLQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRIICckJywgZm9vIGludCkpIGJh cjsKKyBpdGVtIHwgZm9vIAorLS0tLS0tKy0tLS0tCisgIDEyMyB8ICAgIAorKDEgcm93KQorCist LSBKU09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5CitDUkVBVEUgRE9NQUlOIGpzb25iX3Rl c3RfZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdmb28nKTsKK0NSRUFURSBURU1QIFRB QkxFIGpzb25fdGFibGVfdGVzdCAoanMpIEFTCisJKFZBTFVFUworCQkoJzEnKSwKKwkJKCdbXScp LAorCQkoJ3t9JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXScpCisJKTsKKy0t IFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxl X3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompz b25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQki aW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQp IiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJp YyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEgg JyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQnCisJCSkKKwkp IGp0CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBpbnQg fCAgdGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmljIHwgZG9tYWluICB8ICAgICAganMg ICAgICB8ICAgICAgamIgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t Ky0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAgICAg ICB8IDEgICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg fCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAg ICAgICAgICAgICB8IAorIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8ICAgICB8 ICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwge30gICAgICAg ICAgIHwge30KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgIDEgfCAxICAg ICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEgICAgICAgICAgICB8 IDEKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDIgfCAgIDEgfCAxLjIzICAgIHwg MS4yMyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICB8IDEuMjMgICAgICAgICB8IDEuMjMK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCAgIDIgfCAyICAgICAgIHwgMiAg ICAgICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAgICB8ICIyIiAgICAgICAgICB8ICIyIgorIFsx LCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6 IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8ICAgICB8IGFhYWFhYWEgfCBhYWFhICAg IHwgICAgICB8ICAgICAgICAgfCBhYWFhYWFhIHwgImFhYWFhYWEiICAgIHwgImFhYWFhYWEiCisg WzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFh IjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgICAgIHwgZm9vICAgICB8IGZvbyAg ICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIgorIFsx LCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6 IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAgICB8ICAgICAgICAgfCAgICAgICAg IHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgbnVsbCAgICAgICAgIHwgbnVsbAorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgMCB8IGZhbHNlICAgfCBmYWxzICAgIHwg ZiAgICB8ICAgICAgICAgfCBmYWxzZSAgIHwgZmFsc2UgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4y MywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9 LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgIDEgfCB0cnVlICAgIHwgdHJ1ZSAgICB8IHQg ICAgfCAgICAgICAgIHwgdHJ1ZSAgICB8IHRydWUgICAgICAgICB8IHRydWUKKyBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAi WzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAg fCAgICAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfQorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAgICB8IFsxLDJdICAgfCBbMSwyICAgIHwg ICAgICB8ICAgICAgICAgfCBbMSwyXSAgIHwgIlsxLDJdIiAgICAgIHwgIlsxLDJdIgorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICAgICB8ICJzdHIiICAgfCAic3RyICAgIHwg ICAgICB8ICAgICAgICAgfCAic3RyIiAgIHwgIlwic3RyXCIiICAgIHwgIlwic3RyXCIiCisoMTQg cm93cykKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VMRUNUICoKK0ZST00ganNvbl90YWJs ZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpq c29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJ anN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFU IEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQn LAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JN QVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJKSBqdAorCU9OIHRydWU7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgICAgIGpzdCAgICAgIHwganNjICB8IGpz diAgfCAgICAganNiICAgICAgfCAgICAganNicSAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgMSAg ICAgICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAgICAgICAgfCAxCisgW10gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICAgIHwgICAgICB8ICAgICAgfCAgICAg ICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCB7fSAgICAg ICAgICAgfCB7fSAgIHwge30gICB8IHt9ICAgICAgICAgICB8IHt9CisgWzEsIDEuMjMsICIyIiwg ImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJd IiwgIlwic3RyXCIiXSB8ICAxIHwgMSAgICAgICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAg ICAgICAgfCAxCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgMS4yMyAgICAg ICAgIHwgMS4yMyB8IDEuMjMgfCAxLjIzICAgICAgICAgfCAxLjIzCisgWzEsIDEuMjMsICIyIiwg ImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJd IiwgIlwic3RyXCIiXSB8ICAzIHwgIjIiICAgICAgICAgIHwgIjIiICB8ICIyIiAgfCAiMiIgICAg ICAgICAgfCAyCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0IHwgImFhYWFhYWEi ICAgIHwgImFhYSB8ICJhYWEgfCAiYWFhYWFhYSIgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFh YWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAi XCJzdHJcIiJdIHwgIDUgfCAiZm9vIiAgICAgICAgfCAiZm9vIHwgImZvbyB8ICJmb28iICAgICAg ICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8IG51bGwgICAgICAgICB8 IG51bGwgfCBudWxsIHwgbnVsbCAgICAgICAgIHwgbnVsbAorIFsxLCAxLjIzLCAiMiIsICJhYWFh YWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJc InN0clwiIl0gfCAgNyB8IGZhbHNlICAgICAgICB8IGZhbHMgfCBmYWxzIHwgZmFsc2UgICAgICAg IHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCB0cnVlICAgICAg ICAgfCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRydWUKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDkgfCB7ImFhYSI6IDEyM30gfCB7ImFhIHwgeyJhYSB8IHsiYWFhIjog MTIzfSB8IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51 bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8 ICJbMSwyXSIgICAgICB8ICJbMSwgfCAiWzEsIHwgIlsxLDJdIiAgICAgIHwgWzEsIDJdCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgIlwic3RyXCIiICAgIHwgIlwicyB8ICJc InMgfCAiXCJzdHJcIiIgICAgfCAic3RyIgorKDE0IHJvd3MpCisKKy0tIEVYSVNUUyBjb2x1bW5z CitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgor CUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAor CQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFh JywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMzIGludCBF WElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0 ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9SCisJCSkKKwkpIGp0 CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBleGlzdHMx IHwgZXhpc3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tCisgMSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAg ICAgIHwgZmFsc2UKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAg IHwgICAgICAgICB8ICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIs ICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwy XSIsICJcInN0clwiIl0gfCAgMSB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNl CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsi YWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgZiAgICAgICB8ICAgICAgIDAg fCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxs LCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCBm ICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFh YWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJc InN0clwiIl0gfCAgNCB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAg ICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxz ZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCBmICAgICAg IHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwg ImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwi Il0gfCAgNyB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMs ICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwg IlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwg ZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1 ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCB0ICAgICAgIHwgICAg ICAgMSB8ICAgICAgIDEgfCB0cnVlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDEw IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgMTEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQor KDE0IHJvd3MpCisKKy0tIE90aGVyIG1pc2NlbGxhbm91cyBjaGVja3MKK1NFTEVDVCAqCitGUk9N IGpzb25fdGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgKKwkJ dmFscy5qczo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5B TElUWSwKKwkJCWFhYSBpbnQsIC0tICJhYWEiIGhhcyBpbXBsaWNpdCBwYXRoICckLiJhYWEiJwor CQkJYWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJanMyIGpzb24gUEFUSCAnJCcsCisJCQlqc2Iy dyBqc29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlqc2IycSBqc29uYiBQQVRIICckJyBP TUlUIFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAorCQkJdGEgdGV4dFtdIFBBVEggJyQn LAorCQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQorCSkganQKKwlPTiB0cnVlOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCBpZCB8IGFhYSB8IGFhYTEgfCAgICAganMyICAgICAg fCAgICAganNiMncgICAgICB8ICAgIGpzYjJxICAgICB8IGlhIHwgdGEgfCBqYmEgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0rLS0tLS0KKyAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAgICAgIHwg WzFdICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgW10gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIHwgICAgIHwgICAgICB8ICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICB8IAorIHt9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgfCB7fSAgICAgICAgICAgfCBbe31dICAgICAg ICAgICB8IHt9ICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFh YSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAgICAgIHwgWzFdICAgICAgICAgICAg fCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAi Zm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIi XSB8ICAyIHwgICAgIHwgICAgICB8IDEuMjMgICAgICAgICB8IFsxLjIzXSAgICAgICAgIHwgMS4y MyAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIs IG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAg MyB8ICAgICB8ICAgICAgfCAiMiIgICAgICAgICAgfCBbIjIiXSAgICAgICAgICB8IDIgICAgICAg ICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxs LCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDQgfCAg ICAgfCAgICAgIHwgImFhYWFhYWEiICAgIHwgWyJhYWFhYWFhIl0gICAgfCAgICAgICAgICAgICAg fCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFs c2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgICAgIHwg ICAgICB8ICJmb28iICAgICAgICB8IFsiZm9vIl0gICAgICAgIHwgICAgICAgICAgICAgIHwgICAg fCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0 cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAgICB8ICAgICAg fCBudWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51bGwgICAgICAgICB8ICAgIHwgICAg fCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDcgfCAgICAgfCAgICAgIHwgZmFs c2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZSAgICAgICAgfCAgICB8ICAgIHwgCisg WzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFh IjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgICAgIHwgICAgICB8IHRydWUgICAg ICAgICB8IFt0cnVlXSAgICAgICAgIHwgdHJ1ZSAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOSB8IDEyMyB8ICAxMjMgfCB7ImFhYSI6IDEyM30g fCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAi WzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgICAgfCAgICAgIHwgIlsxLDJdIiAgICAgIHwgWyJb MSwyXSJdICAgICAgfCBbMSwgMl0gICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwg ImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJd IiwgIlwic3RyXCIiXSB8IDExIHwgICAgIHwgICAgICB8ICJcInN0clwiIiAgICB8IFsiXCJzdHJc IiJdICAgIHwgInN0ciIgICAgICAgIHwgICAgfCAgICB8IAorKDE0IHJvd3MpCisKKy0tIEpTT05f VEFCTEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworQ1JFQVRFIFZJRVcganNvbmJfdGFibGVfdmll dyBBUworU0VMRUNUICogRlJPTQorCUpTT05fVEFCTEUoCisJCWpzb25iICdudWxsJywgJ2xheCAk WypdJyBQQVNTSU5HIDEgKyAyIEFTIGEsIGpzb24gJyJmb28iJyBBUyAiYiBjIgorCQlDT0xVTU5T ICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJImludCIgaW50IFBBVEggJyQnLAorCQkJInRl eHQiIHRleHQgUEFUSCAnJCcsCisJCQkiY2hhcig0KSIgY2hhcig0KSBQQVRIICckJywKKwkJCSJi b29sIiBib29sIFBBVEggJyQnLAorCQkJIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisJCQki ZG9tYWluIiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKKwkJCWpzIGpzb24gUEFUSCAnJCcs CisJCQlqYiBqc29uYiBQQVRIICckJywKKwkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRI ICckJywKKwkJCWpzYyBjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzdiB2YXJj aGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYiBqc29uYiAgIEZPUk1BVCBKU09O IFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RF UywKKwkJCWFhYSBpbnQsIC0tIGltcGxpY2l0IHBhdGggJyQuImFhYSInLAorCQkJYWFhMSBpbnQg UEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMSBib29sIEVYSVNUUyBQQVRIICckLmFhYScsCisJCQll eGlzdHMyIGludCBFWElTVFMgUEFUSCAnJC5hYWEnIFRSVUUgT04gRVJST1IsCisJCQlleGlzdHMz IHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5LTk9XTiBPTiBFUlJPUiwKKwkJCWpz MiBqc29uIFBBVEggJyQnLAorCQkJanNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVSLAor CQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisJCQlpYSBpbnRbXSBQQVRIICck JywKKwkJCXRhIHRleHRbXSBQQVRIICckJywKKwkJCWpiYSBqc29uYltdIFBBVEggJyQnLAorCQkJ TkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJCQlORVNU RUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAorCQkJCSks CisJCQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5T ICgKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJCQlhMjEg dGV4dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xVTU5TICgKKwkJ CQkJYTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOworXHN2IGpzb25iX3RhYmxlX3ZpZXcK K0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLmpzb25iX3RhYmxlX3ZpZXcgQVMKKyBTRUxF Q1QgaWQsCisgICAgImludCIsCisgICAgdGV4dCwKKyAgICAiY2hhcig0KSIsCisgICAgYm9vbCwK KyAgICAibnVtZXJpYyIsCisgICAgZG9tYWluLAorICAgIGpzLAorICAgIGpiLAorICAgIGpzdCwK KyAgICBqc2MsCisgICAganN2LAorICAgIGpzYiwKKyAgICBqc2JxLAorICAgIGFhYSwKKyAgICBh YWExLAorICAgIGV4aXN0czEsCisgICAgZXhpc3RzMiwKKyAgICBleGlzdHMzLAorICAgIGpzMiwK KyAgICBqc2IydywKKyAgICBqc2IycSwKKyAgICBpYSwKKyAgICB0YSwKKyAgICBqYmEsCisgICAg YTEsCisgICAgYjEsCisgICAgYTExLAorICAgIGEyMSwKKyAgICBhMjIKKyAgIEZST00gSlNPTl9U QUJMRSgKKyAgICAgICAgICAgICdudWxsJzo6anNvbmIsICckWypdJyBBUyBqc29uX3RhYmxlX3Bh dGhfMQorICAgICAgICAgICAgUEFTU0lORworICAgICAgICAgICAgICAgIDEgKyAyIEFTIGEsCisg ICAgICAgICAgICAgICAgJyJmb28iJzo6anNvbiBBUyAiYiBjIgorICAgICAgICAgICAgQ09MVU1O UyAoCisgICAgICAgICAgICAgICAgaWQgRk9SIE9SRElOQUxJVFksCisgICAgICAgICAgICAgICAg ImludCIgaW50ZWdlciBQQVRIICckJywKKyAgICAgICAgICAgICAgICB0ZXh0IHRleHQgUEFUSCAn JCcsCisgICAgICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywKKyAg ICAgICAgICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgIm51 bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgZG9tYWluIGpzb25iX3Rl c3RfZG9tYWluIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzIGpzb24gUEFUSCAnJCcsCisg ICAgICAgICAgICAgICAgamIganNvbmIgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganN0IHRl eHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNjIGNoYXJhY3Rlcig0 KSBGT1JNQVQgSlNPTiBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqc3YgY2hhcmFjdGVyIHZh cnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNiIGpzb25i IFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9U RVMsCisgICAgICAgICAgICAgICAgYWFhIGludGVnZXIgUEFUSCAnJC4iYWFhIicsCisgICAgICAg ICAgICAgICAgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFhYSInLAorICAgICAgICAgICAgICAgIGV4 aXN0czEgYm9vbGVhbiBFWElTVFMgUEFUSCAnJC4iYWFhIicsCisgICAgICAgICAgICAgICAgZXhp c3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLAorICAgICAg ICAgICAgICAgIGV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05P V04gT04gRVJST1IsCisgICAgICAgICAgICAgICAganMyIGpzb24gUEFUSCAnJCcsCisgICAgICAg ICAgICAgICAganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIs CisgICAgICAgICAgICAgICAganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAg ICAgICAgICAgICAgaWEgaW50ZWdlcltdIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIHRhIHRl eHRbXSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqYmEganNvbmJbXSBQQVRIICckJywKKyAg ICAgICAgICAgICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEKKyAgICAgICAgICAgICAgICBD T0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgYTEgaW50ZWdlciBQQVRIICckLiJhMSInLAor ICAgICAgICAgICAgICAgICAgICBiMSB0ZXh0IFBBVEggJyQuImIxIicsCisgICAgICAgICAgICAg ICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIKKyAgICAgICAgICAgICAgICAgICAg Q09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMTEgdGV4dCBQQVRIICckLiJhMTEi JworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAg ICAgICBORVNURUQgUEFUSCAnJFsyXScgQVMgcDIKKyAgICAgICAgICAgICAgICBDT0xVTU5TICgK KyAgICAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIgorICAgICAg ICAgICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEyMSB0ZXh0 IFBBVEggJyQuImEyMSInCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAg ICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1O UyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMjIgdGV4dCBQQVRIICckLiJhMjIiJworICAg ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAg ICAgICAgICAgUExBTiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIp IFVOSU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkKKyAgICAgICAgKQorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIGpzb25iX3RhYmxlX3ZpZXc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJqc29uX3RhYmxlIgorICAg T3V0cHV0OiAianNvbl90YWJsZSIuaWQsICJqc29uX3RhYmxlIi4iaW50IiwgImpzb25fdGFibGUi LnRleHQsICJqc29uX3RhYmxlIi4iY2hhcig0KSIsICJqc29uX3RhYmxlIi5ib29sLCAianNvbl90 YWJsZSIuIm51bWVyaWMiLCAianNvbl90YWJsZSIuZG9tYWluLCAianNvbl90YWJsZSIuanMsICJq c29uX3RhYmxlIi5qYiwgImpzb25fdGFibGUiLmpzdCwgImpzb25fdGFibGUiLmpzYywgImpzb25f dGFibGUiLmpzdiwgImpzb25fdGFibGUiLmpzYiwgImpzb25fdGFibGUiLmpzYnEsICJqc29uX3Rh YmxlIi5hYWEsICJqc29uX3RhYmxlIi5hYWExLCAianNvbl90YWJsZSIuZXhpc3RzMSwgImpzb25f dGFibGUiLmV4aXN0czIsICJqc29uX3RhYmxlIi5leGlzdHMzLCAianNvbl90YWJsZSIuanMyLCAi anNvbl90YWJsZSIuanNiMncsICJqc29uX3RhYmxlIi5qc2IycSwgImpzb25fdGFibGUiLmlhLCAi anNvbl90YWJsZSIudGEsICJqc29uX3RhYmxlIi5qYmEsICJqc29uX3RhYmxlIi5hMSwgImpzb25f dGFibGUiLmIxLCAianNvbl90YWJsZSIuYTExLCAianNvbl90YWJsZSIuYTIxLCAianNvbl90YWJs ZSIuYTIyCisgICBUYWJsZSBGdW5jdGlvbiBDYWxsOiBKU09OX1RBQkxFKCdudWxsJzo6anNvbmIs ICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMSBQQVNTSU5HIDMgQVMgYSwgJyJmb28iJzo6anNv bmIgQVMgImIgYyIgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksICJpbnQiIGludGVnZXIgUEFU SCAnJCcsIHRleHQgdGV4dCBQQVRIICckJywgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICck JywgYm9vbCBib29sZWFuIFBBVEggJyQnLCAibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywgZG9t YWluIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLCBqcyBqc29uIFBBVEggJyQnLCBqYiBqc29u YiBQQVRIICckJywganN0IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYyBjaGFyYWN0ZXIo NCkgRk9STUFUIEpTT04gUEFUSCAnJCcsIGpzdiBjaGFyYWN0ZXIgdmFyeWluZyg0KSBGT1JNQVQg SlNPTiBQQVRIICckJywganNiIGpzb25iIFBBVEggJyQnLCBqc2JxIGpzb25iIFBBVEggJyQnIE9N SVQgUVVPVEVTLCBhYWEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgYWFhMSBpbnRlZ2VyIFBBVEgg JyQuImFhYSInLCBleGlzdHMxIGJvb2xlYW4gRVhJU1RTIFBBVEggJyQuImFhYSInLCBleGlzdHMy IGludGVnZXIgRVhJU1RTIFBBVEggJyQuImFhYSInIFRSVUUgT04gRVJST1IsIGV4aXN0czMgdGV4 dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsIGpzMiBqc29u IFBBVEggJyQnLCBqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBF UiwganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsIGlhIGludGVnZXJbXSBQQVRIICck JywgdGEgdGV4dFtdIFBBVEggJyQnLCBqYmEganNvbmJbXSBQQVRIICckJywgTkVTVEVEIFBBVEgg JyRbMV0nIEFTIHAxIENPTFVNTlMgKGExIGludGVnZXIgUEFUSCAnJC4iYTEiJywgYjEgdGV4dCBQ QVRIICckLiJiMSInLCBORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKGExMSB0 ZXh0IFBBVEggJyQuImExMSInKSksIE5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICgg TkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5TIChhMjEgdGV4dCBQQVRIICckLiJh MjEiJyksIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIgQ09MVU1OUyAoYTIyIHRleHQgUEFUSCAn JC4iYTIyIicpKSkgUExBTiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEg MSIpIFVOSU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkpCisoMyByb3dzKQorCitE Uk9QIFZJRVcganNvbmJfdGFibGVfdmlldzsKK0RST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWlu OworLS0gSlNPTl9UQUJMRTogb25seSBvbmUgRk9SIE9SRElOQUxJVFkgY29sdW1ucyBhbGxvd2Vk CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9S IE9SRElOQUxJVFksIGlkMiBGT1IgT1JESU5BTElUWSwgYSBpbnQgUEFUSCAnJC5hJyBFUlJPUiBP TiBFTVBUWSkpIGp0OworRVJST1I6ICBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgRk9SIE9SRElO QUxJVFkgY29sdW1uCitMSU5FIDE6IC4uLl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChp ZCBGT1IgT1JESU5BTElUWSwgaWQyIEZPUiBPUi4uLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwgYSBpbnQg UEFUSCAnJCcgRVJST1IgT04gRU1QVFkpKSBqdDsKKyBpZCB8IGEgCistLS0tKy0tLQorICAxIHwg MQorKDEgcm93KQorCistLSBKU09OX1RBQkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhhdmlvcgor U0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpLAorCUpT T05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJykpIGp0 OworICBqcyAgIHwgYSAKKy0tLS0tLS0rLS0tCisgMSAgICAgfCAxCisgImVyciIgfCAgCisoMiBy b3dzKQorCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhq cykKKwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENP TFVNTlMgKGEgaW50IFBBVEggJyQnKSBFUlJPUiBPTiBFUlJPUikganQKKwkJT04gdHJ1ZTsKK0VS Uk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIKK1NFTEVD VCAqCitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlMRUZUIE9V VEVSIEpPSU4KKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAoYSBpbnQg UEFUSCAnJCcgRVJST1IgT04gRVJST1IpKSBqdAorCQlPTiB0cnVlOworRVJST1I6ICBpbnZhbGlk IGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiZXJyIgorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQuYScgRVJST1IgT04g RU1QVFkpKSBqdDsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ3N0cmljdCAkLmEnIEVS Uk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikganQ7CitFUlJPUjogIGpzb25wYXRoIG1lbWJl ciBhY2Nlc3NvciBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFuIG9iamVjdAorU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ2xheCAkLmEn IEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikganQ7CitFUlJPUjogIG5vIFNRTC9KU09O IGl0ZW0KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMg KGEgaW50IFBBVEggJyQnICAgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikp IGp0OworIGEgCistLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ3N0cmljdCAkLmEnIERFRkFVTFQg MSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKKyBhIAorLS0tCisgMgorKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChh IGludCBQQVRIICdsYXggJC5hJyBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9S KSkganQ7CisgYSAKKy0tLQorIDEKKygxIHJvdykKKworLS0gSlNPTl9UQUJMRTogRVhJU1RTIFBB VEggdHlwZXMKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEgaW50NCBFWElTVFMgUEFUSCAnJC5hJykpOworIGEgCistLS0KKyAwCisoMSByb3cpCisK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50 MiBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4g dG8gc21hbGxpbnQKK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJh IicsICckJyBDT0xVTU5TIChhIGludDIgRVhJLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ4IEVYSVNUUyBQQVRIICckLmEn KSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBiaWdpbnQKK0xJTkUgMTog Li4uRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGlu dDggRVhJLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAn JCcgQ09MVU1OUyAoYSBmbG9hdDQgRVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIHJlYWwKK0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGZsb2F0NCBFLi4uCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBjaGFyKDMp IEVYSVNUUyBQQVRIICckLmEnKSk7CisgIGEgIAorLS0tLS0KKyBmYWwKKygxIHJvdykKKworU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uIEVY SVNUUyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBq c29uCitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcg Q09MVU1OUyAoYSBqc29uIEVYSS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbmIgRVhJU1RTIFBBVEggJyQuYScpKTsKK0VS Uk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb25iCitMSU5FIDE6IC4uLkVMRUNU ICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uYiBFWC4u LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF4KKy0tIEpTT05fVEFCTEU6IFdSQVBQRVIvUVVPVEVTIGNsYXVzZXMgb24gc2NhbGFy IGNvbHVtbnMgZG9uJ3Qgd29yayB3aXRob3V0IGFuCistLSBleHBsaWNpdCBGT1JNQVQgY2xhdXNl CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAo aXRlbSB0ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsKK0VSUk9S OiAgY2Fubm90IHVzZSBPTUlUL0tFRVAgUVVPVEVTIGNsYXVzZSBmb3Igc2NhbGFyIGNvbHVtbnMg d2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgRk9STUFUIGNsYXVzZQorTElORSAxOiAuLi5UICogRlJP TSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCAuLi4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09M VU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIEtFRVAgUVVPVEVTIE9OIFNDQUxB UiBTVFJJTkcpKTsKKyAgaXRlbSAgIAorLS0tLS0tLS0tCisgIndvcmxkIgorKDEgcm93KQorCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRl bSB0ZXh0IFBBVEggJyQnIFdJVEggV1JBUFBFUikpOworRVJST1I6ICBjYW5ub3QgdXNlIFdJVEgg V1JBUFBFUiBjbGF1c2UgZm9yIHNjYWxhciBjb2x1bW5zIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5n IEZPUk1BVCBjbGF1c2UKK0xJTkUgMTogLi4uVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndv cmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQg SlNPTiBQQVRIICckJyBXSVRIIFdSQVBQRVIpKTsKKyAgIGl0ZW0gICAgCistLS0tLS0tLS0tLQor IFsid29ybGQiXQorKDEgcm93KQorCistLSBKU09OX1RBQkxFOiBuZXN0ZWQgcGF0aHMgYW5kIHBs YW5zCistLSBTaG91bGQgZmFpbCAoSlNPTl9UQUJMRSBjb2x1bW5zIG11c3QgY29udGFpbiBleHBs aWNpdCBBUyBwYXRoCistLSBzcGVjaWZpY2F0aW9ucyBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBp cyB1c2VkKQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyAtLSBB UyA8cGF0aCBuYW1lPiByZXF1aXJlZCBoZXJlCisJQ09MVU1OUyAoCisJCWZvbyBpbnQgUEFUSCAn JCcKKwkpCisJUExBTiBERUZBVUxUIChVTklPTikKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNP Tl9UQUJMRSBleHByZXNzaW9uCitMSU5FIDI6ICBqc29uYiAnW10nLCAnJCcgLS0gQVMgPHBhdGgg bmFtZT4gcmVxdWlyZWQgaGVyZQorICAgICAgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgSlNP Tl9UQUJMRSBjb2x1bW5zIG11c3QgY29udGFpbiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZp Y2F0aW9uIGlmIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQKK1NFTEVDVCAqIEZST00gSlNP Tl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgQVMgcGF0aDEKKwlDT0xVTU5TICgKKwkJTkVTVEVE IFBBVEggJyQnIENPTFVNTlMgKCAtLSBBUyA8cGF0aCBuYW1lPiByZXF1aXJlZCBoZXJlCisJCQlm b28gaW50IFBBVEggJyQnCisJCSkKKwkpCisJUExBTiBERUZBVUxUIChVTklPTikKKykganQ7CitF UlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBleHByZXNzaW9uCitMSU5FIDQ6ICAgTkVTVEVEIFBB VEggJyQnIENPTFVNTlMgKCAtLSBBUyA8cGF0aCBuYW1lPiByZXF1aXJlZCBoZXJlCisgICAgICAg ICAgXgorREVUQUlMOiAgSlNPTl9UQUJMRSBjb2x1bW5zIG11c3QgY29udGFpbiBleHBsaWNpdCBB UyBwYXRobmFtZSBzcGVjaWZpY2F0aW9uIGlmIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQK Ky0tIFNob3VsZCBmYWlsIChjb2x1bW4gbmFtZXMgbXVzdCBiZSBkaXN0aW5jdCkKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgQVMgYQorCUNPTFVNTlMgKAorCQlh IGludAorCSkKKykganQ7CitFUlJPUjogIGR1cGxpY2F0ZSBKU09OX1RBQkxFIGNvbHVtbiBuYW1l OiBhCitISU5UOiAgSlNPTl9UQUJMRSBjb2x1bW4gbmFtZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9t IG9uZSBhbm90aGVyLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICck JyBBUyBhCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQlD T0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNP Tl9UQUJMRSBjb2x1bW4gbmFtZTogYQorSElOVDogIEpTT05fVEFCTEUgY29sdW1uIG5hbWVzIG11 c3QgYmUgZGlzdGluY3QgZnJvbSBvbmUgYW5vdGhlci4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RSgKKwlqc29uYiAnW10nLCAnJCcKKwlDT0xVTU5TICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRI ICckJyBBUyBiCisJCUNPTFVNTlMgKAorCQkJYyBpbnQKKwkJKQorCSkKKykganQ7CitFUlJPUjog IGR1cGxpY2F0ZSBKU09OX1RBQkxFIGNvbHVtbiBuYW1lOiBiCitISU5UOiAgSlNPTl9UQUJMRSBj b2x1bW4gbmFtZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIG9uZSBhbm90aGVyLgorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJworCUNPTFVNTlMgKAorCQlORVNURUQg UEFUSCAnJCcgQVMgYQorCQlDT0xVTU5TICgKKwkJCWIgaW50CisJCSksCisJCU5FU1RFRCBQQVRI ICckJworCQlDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCQlDT0xVTU5TICgK KwkJCQljIGludAorCQkJKQorCQkpCisJKQorKSBqdDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05f VEFCTEUgY29sdW1uIG5hbWU6IGEKK0hJTlQ6ICBKU09OX1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0 IGJlIGRpc3RpbmN0IGZyb20gb25lIGFub3RoZXIuCistLSBKU09OX1RBQkxFOiBwbGFuIHZhbGlk YXRpb24KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBB UyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBw MiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQg KQorCQkpCisJKQorCVBMQU4gKHAxKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxF IHBsYW4KK0xJTkUgMTI6ICBQTEFOIChwMSkKKyAgICAgICAgICAgICAgICBeCitERVRBSUw6ICBQ YXRoIG5hbWUgbWlzbWF0Y2g6IGV4cGVjdGVkIHAwIGJ1dCBwMSBpcyBnaXZlbi4KK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMg KAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENP TFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMg KAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkp CisJUExBTiAocDApCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElO RSA0OiAgIE5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKyAgICAgICAgICBeCitERVRB SUw6ICBQbGFuIG5vZGUgZm9yIG5lc3RlZCBwYXRoIHAxIHdhcyBub3QgZm91bmQgaW4gcGxhbi4K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAor CUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQg UEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAy IENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCAp CisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgcDMpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpT T05fVEFCTEUgcGxhbgorTElORSA0OiAgIE5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgK KyAgICAgICAgICBeCitERVRBSUw6ICBQbGFuIG5vZGUgZm9yIG5lc3RlZCBwYXRoIHAxIHdhcyBu b3QgZm91bmQgaW4gcGxhbi4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVs bCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09M VU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVT VEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBD T0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgVU5JT04gcDEgVU5JT04gcDEx KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgMTI6ICBQTEFO IChwMCBVTklPTiBwMSBVTklPTiBwMTEpCisgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgRXhw ZWN0ZWQgSU5ORVIgb3IgT1VURVIgSlNPTl9UQUJMRSBwbGFuIG5vZGUuCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAx MSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5T ICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBM QU4gKHAwIE9VVEVSIChwMSBDUk9TUyBwMTMpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09O X1RBQkxFIHBsYW4KK0xJTkUgODogICBORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisg ICAgICAgICAgXgorREVUQUlMOiAgUGxhbiBub2RlIGZvciBuZXN0ZWQgcGF0aCBwMiB3YXMgbm90 IGZvdW5kIGluIHBsYW4uCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwn LCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVN TlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09M VU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIChwMSBDUk9TUyBwMikp CispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElORSA1OiAgICBORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisgICAgICAgICAgIF4KK0RF VEFJTDogIFBsYW4gbm9kZSBmb3IgbmVzdGVkIHBhdGggcDExIHdhcyBub3QgZm91bmQgaW4gcGxh bi4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBw MAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGlu dCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkK KykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5FIDEyOiAgUExBTiAo cDAgT1VURVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICBeCitERVRBSUw6ICBQbGFuIG5vZGUgY29udGFpbnMgc29tZSBleHRyYSBvciBkdXBsaWNh dGUgc2libGluZyBub2Rlcy4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVs bCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09M VU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVT VEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBD T0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiBw MTEpIENST1NTIHAyKSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitM SU5FIDY6ICAgIE5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorICAg ICAgICAgICBeCitERVRBSUw6ICBQbGFuIG5vZGUgZm9yIG5lc3RlZCBwYXRoIHAxMiB3YXMgbm90 IGZvdW5kIGluIHBsYW4uCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwn LCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVN TlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09M VU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgSU5ORVIgKHAx MiBDUk9TUyBwMTEpKSBDUk9TUyBwMikpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFC TEUgcGxhbgorTElORSA5OiAgICBORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKyAgICAgICAgICAgXgorREVUQUlMOiAgUGxhbiBub2RlIGZvciBuZXN0ZWQgcGF0aCBw MjEgd2FzIG5vdCBmb3VuZCBpbiBwbGFuLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpz b25iICdudWxsJywgJ3N0cmljdCAkWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFU SCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMg KCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50 ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VU RVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIChwMiBJTk5FUiBwMjEpKSkKKykg anQ7CisgYmFyIHwgZm9vIHwgYmF6IAorLS0tLS0rLS0tLS0rLS0tLS0KKygwIHJvd3MpCisKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgLS0g d2l0aG91dCByb290IHBhdGggbmFtZQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMg cDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50 ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwK KwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFT IHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAoKHAxIElOTkVSIChwMTIg Q1JPU1MgcDExKSkgQ1JPU1MgKHAyIElOTkVSIHAyMSkpCispIGp0OworRVJST1I6ICBpbnZhbGlk IEpTT05fVEFCTEUgZXhwcmVzc2lvbgorTElORSAyOiAganNvbmIgJ251bGwnLCAnc3RyaWN0ICRb Kl0nIC0tIHdpdGhvdXQgcm9vdCBwYXRoIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgXgor REVUQUlMOiAgSlNPTl9UQUJMRSBjb2x1bW5zIG11c3QgY29udGFpbiBleHBsaWNpdCBBUyBwYXRo bmFtZSBzcGVjaWZpY2F0aW9uIGlmIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQKKy0tIEpT T05fVEFCTEU6IHBsYW4gZXhlY3V0aW9uCitDUkVBVEUgVEVNUCBUQUJMRSBqc29uYl90YWJsZV90 ZXN0IChqcyBqc29uYik7CitJTlNFUlQgSU5UTyBqc29uYl90YWJsZV90ZXN0CitWQUxVRVMgKAor CSdbCisJCXsiYSI6ICAxLCAgImIiOiBbXSwgImMiOiBbXX0sCisJCXsiYSI6ICAyLCAgImIiOiBb MSwgMiwgM10sICJjIjogWzEwLCBudWxsLCAyMF19LAorCQl7ImEiOiAgMywgICJiIjogWzEsIDJd LCAiYyI6IFtdfSwKKwkJeyJ4IjogIjQiLCAiYiI6IFsxLCAyXSwgImMiOiAxMjN9CisJIF0nCisp OworLS0gdW5zcGVjaWZpZWQgcGxhbiAob3V0ZXIsIHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJv bQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmlj dCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50 IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3Ry aWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJ KQorCSkganQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0tKy0tLS0rLS0tKy0tLS0KKyAxIHwgIDEg fCAgIHwgICAKKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwgIDIgfCAyIHwgICAKKyAyIHwgIDIgfCAz IHwgICAKKyAyIHwgIDIgfCAgIHwgMTAKKyAyIHwgIDIgfCAgIHwgICAKKyAyIHwgIDIgfCAgIHwg MjAKKyAzIHwgIDMgfCAxIHwgICAKKyAzIHwgIDMgfCAyIHwgICAKKyA0IHwgLTEgfCAxIHwgICAK KyA0IHwgLTEgfCAyIHwgICAKKygxMSByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKG91dGVyLCB1 bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29u X3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4g Zm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVt cHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGlu dCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVt bnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChvdXRlciwgdW5pb24p CisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8 ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMg fCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAy MAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAor IDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIg KHBiIHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0 dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5z ICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0 IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVt bnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFz IHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGIg dW5pb24gcGMpKQorCSkganQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0tKy0tLS0rLS0tKy0tLS0K KyAxIHwgIDEgfCAgIHwgICAKKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwgIDIgfCAyIHwgICAKKyAy IHwgIDIgfCAzIHwgICAKKyAyIHwgIDIgfCAgIHwgMTAKKyAyIHwgIDIgfCAgIHwgICAKKyAyIHwg IDIgfCAgIHwgMjAKKyAzIHwgIDMgfCAxIHwgICAKKyAzIHwgIDMgfCAyIHwgICAKKyA0IHwgLTEg fCAxIHwgICAKKyA0IHwgLTEgfCAyIHwgICAKKygxMSByb3dzKQorCistLSBzcGVjaWZpYyBwbGFu IChwIG91dGVyIChwYyB1bmlvbiBwYikpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFi bGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAg b3V0ZXIgKHBjIHVuaW9uIHBiKSkKKwkpIGp0OworIG4gfCBhICB8IGMgIHwgYiAKKy0tLSstLS0t Ky0tLS0rLS0tCisgMSB8ICAxIHwgICAgfCAgCisgMiB8ICAyIHwgMTAgfCAgCisgMiB8ICAyIHwg ICAgfCAgCisgMiB8ICAyIHwgMjAgfCAgCisgMiB8ICAyIHwgICAgfCAxCisgMiB8ICAyIHwgICAg fCAyCisgMiB8ICAyIHwgICAgfCAzCisgMyB8ICAzIHwgICAgfCAxCisgMyB8ICAzIHwgICAgfCAy CisgNCB8IC0xIHwgICAgfCAxCisgNCB8IC0xIHwgICAgfCAyCisoMTEgcm93cykKKworLS0gZGVm YXVsdCBwbGFuIChpbm5lciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFi bGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAK KwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQu YScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBh cyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVm YXVsdCAoaW5uZXIpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0t LQorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAor IDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMg fCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAt MSB8IDIgfCAgIAorKDEwIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIHVu aW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlq c29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJ CW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9u IGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBi IGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNv bHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgdW5pb24g cGMpKQorCSkganQ7CisgbiB8IGEgIHwgYiB8IGMgIAorLS0tKy0tLS0rLS0tKy0tLS0KKyAyIHwg IDIgfCAxIHwgICAKKyAyIHwgIDIgfCAyIHwgICAKKyAyIHwgIDIgfCAzIHwgICAKKyAyIHwgIDIg fCAgIHwgMTAKKyAyIHwgIDIgfCAgIHwgICAKKyAyIHwgIDIgfCAgIHwgMjAKKyAzIHwgIDMgfCAx IHwgICAKKyAzIHwgIDMgfCAyIHwgICAKKyA0IHwgLTEgfCAxIHwgICAKKyA0IHwgLTEgfCAyIHwg ICAKKygxMCByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKGlubmVyLCBjcm9zcykKK3NlbGVjdAor CWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0 LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHks CisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVk IHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRo ICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChjcm9zcywgaW5uZXIpCisJKSBqdDsKKyBuIHwg YSB8IGIgfCBjICAKKy0tLSstLS0rLS0tKy0tLS0KKyAyIHwgMiB8IDEgfCAxMAorIDIgfCAyIHwg MSB8ICAgCisgMiB8IDIgfCAxIHwgMjAKKyAyIHwgMiB8IDIgfCAxMAorIDIgfCAyIHwgMiB8ICAg CisgMiB8IDIgfCAyIHwgMjAKKyAyIHwgMiB8IDMgfCAxMAorIDIgfCAyIHwgMyB8ICAgCisgMiB8 IDIgfCAzIHwgMjAKKyg5IHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIGNy b3NzIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlq c29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJ CW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9u IGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBi IGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNv bHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgY3Jvc3Mg cGMpKQorCSkganQ7CisgbiB8IGEgfCBiIHwgYyAgCistLS0rLS0tKy0tLSstLS0tCisgMiB8IDIg fCAxIHwgMTAKKyAyIHwgMiB8IDEgfCAgIAorIDIgfCAyIHwgMSB8IDIwCisgMiB8IDIgfCAyIHwg MTAKKyAyIHwgMiB8IDIgfCAgIAorIDIgfCAyIHwgMiB8IDIwCisgMiB8IDIgfCAzIHwgMTAKKyAy IHwgMiB8IDMgfCAgIAorIDIgfCAyIHwgMyB8IDIwCisoOSByb3dzKQorCistLSBkZWZhdWx0IHBs YW4gKG91dGVyLCBjcm9zcykKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0 IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1 bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZh dWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNv bHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0n IGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChv dXRlciwgY3Jvc3MpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0t LQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAgMiB8IDEgfCAgIAor IDIgfCAgMiB8IDEgfCAyMAorIDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8IDIgfCAgIAorIDIg fCAgMiB8IDIgfCAyMAorIDIgfCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAg MiB8IDMgfCAyMAorIDMgfCAgMyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAgIAorKDEyIHJvd3Mp CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBiIGNyb3NzIHBjKSkKK3NlbGVjdAorCWp0 LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0Lmpz LCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJ CQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBh dGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICck JyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQorCSkganQ7CisgbiB8IGEg IHwgYiB8IGMgIAorLS0tKy0tLS0rLS0tKy0tLS0KKyAxIHwgIDEgfCAgIHwgICAKKyAyIHwgIDIg fCAxIHwgMTAKKyAyIHwgIDIgfCAxIHwgICAKKyAyIHwgIDIgfCAxIHwgMjAKKyAyIHwgIDIgfCAy IHwgMTAKKyAyIHwgIDIgfCAyIHwgICAKKyAyIHwgIDIgfCAyIHwgMjAKKyAyIHwgIDIgfCAzIHwg MTAKKyAyIHwgIDIgfCAzIHwgICAKKyAyIHwgIDIgfCAzIHwgMjAKKyAzIHwgIDMgfCAgIHwgICAK KyA0IHwgLTEgfCAgIHwgICAKKygxMiByb3dzKQorCitzZWxlY3QKKwlqdC4qLCBiMSArIDEwMCBh cyBiCitmcm9tCisJanNvbl90YWJsZSAoanNvbmIKKwkJJ1sKKwkJCXsiYSI6ICAxLCAgImIiOiBb WzEsIDEwXSwgWzJdLCBbMywgMzAsIDMwMF1dLCAiYyI6IFsxLCBudWxsLCAyXX0sCisJCQl7ImEi OiAgMiwgICJiIjogWzEwLCAyMF0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsieCI6ICIzIiwg ImIiOiBbMTEsIDIyLCAzMywgNDRdfQorCQkgXScsCisJCSckWypdJyBhcyBwCisJCWNvbHVtbnMg KAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQg LTEgb24gZXJyb3IsCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1u cyAoCisJCQkJYiB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdz dHJpY3QgJFsqXScgYXMgcGIxIGNvbHVtbnMgKAorCQkJCQliMSBpbnQgcGF0aCAnJCcKKwkJCQkp CisJCQkpLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKAor CQkJCWMgdGV4dCBmb3JtYXQganNvbiBwYXRoICckJywKKwkJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICRbKl0nIGFzIHBjMSBjb2x1bW5zICgKKwkJCQkJYzEgaW50IHBhdGggJyQnCisJCQkJKQorCQkJ KQorCQkpCisJCS0tcGxhbiBkZWZhdWx0KG91dGVyLCBjcm9zcykKKwkJcGxhbihwIG91dGVyICgo cGIgaW5uZXIgcGIxKSBjcm9zcyAocGMgb3V0ZXIgcGMxKSkpCisJKSBqdDsKKyBuIHwgYSAgfCAg ICAgIGIgICAgICAgfCBiMSAgfCAgYyAgIHwgYzEgfCAgYiAgCistLS0rLS0tLSstLS0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0rLS0tLSstLS0tLQorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAg MSB8IDEgICAgfCAgICB8IDEwMQorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAgMSB8IG51bGwg fCAgICB8IDEwMQorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAgMSB8IDIgICAgfCAgICB8IDEw MQorIDEgfCAgMSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IDEgICAgfCAgICB8IDExMAorIDEgfCAg MSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IG51bGwgfCAgICB8IDExMAorIDEgfCAgMSB8IFsxLCAx MF0gICAgICB8ICAxMCB8IDIgICAgfCAgICB8IDExMAorIDEgfCAgMSB8IFsyXSAgICAgICAgICB8 ICAgMiB8IDEgICAgfCAgICB8IDEwMgorIDEgfCAgMSB8IFsyXSAgICAgICAgICB8ICAgMiB8IG51 bGwgfCAgICB8IDEwMgorIDEgfCAgMSB8IFsyXSAgICAgICAgICB8ICAgMiB8IDIgICAgfCAgICB8 IDEwMgorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8IDEgICAgfCAgICB8IDEwMworIDEg fCAgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8IG51bGwgfCAgICB8IDEwMworIDEgfCAgMSB8IFsz LCAzMCwgMzAwXSB8ICAgMyB8IDIgICAgfCAgICB8IDEwMworIDEgfCAgMSB8IFszLCAzMCwgMzAw XSB8ICAzMCB8IDEgICAgfCAgICB8IDEzMAorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAzMCB8 IG51bGwgfCAgICB8IDEzMAorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8ICAzMCB8IDIgICAgfCAg ICB8IDEzMAorIDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8IDMwMCB8IDEgICAgfCAgICB8IDQwMAor IDEgfCAgMSB8IFszLCAzMCwgMzAwXSB8IDMwMCB8IG51bGwgfCAgICB8IDQwMAorIDEgfCAgMSB8 IFszLCAzMCwgMzAwXSB8IDMwMCB8IDIgICAgfCAgICB8IDQwMAorIDIgfCAgMiB8ICAgICAgICAg ICAgICB8ICAgICB8ICAgICAgfCAgICB8ICAgIAorIDMgfCAtMSB8ICAgICAgICAgICAgICB8ICAg ICB8ICAgICAgfCAgICB8ICAgIAorKDIwIHJvd3MpCisKKy0tIFNob3VsZCBzdWNjZWVkIChKU09O IGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHJvb3QgYW5kIG5lc3RlZCBwYXRocykKK1NFTEVDVCAq CitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDEsIDQpIHgsCisJZ2VuZXJhdGVfc2VyaWVzKDEsIDMp IHksCisJSlNPTl9UQUJMRShqc29uYgorCQknW1sxLDIsM10sWzIsMyw0LDVdLFszLDQsNSw2XV0n LAorCQknc3RyaWN0ICRbKl0gPyAoQFsqXSA8ICR4KScKKwkJUEFTU0lORyB4IEFTIHgsIHkgQVMg eQorCQlDT0xVTU5TICgKKwkJCXkgdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJywKKwkJCU5FU1RF RCBQQVRIICdzdHJpY3QgJFsqXSA/IChAID49ICR5KScKKwkJCUNPTFVNTlMgKAorCQkJCXogaW50 IFBBVEggJyQnCisJCQkpCisJCSkKKwkpIGp0OworIHggfCB5IHwgICAgICB5ICAgICAgIHwgeiAK Ky0tLSstLS0rLS0tLS0tLS0tLS0tLS0rLS0tCisgMiB8IDEgfCBbMSwgMiwgM10gICAgfCAxCisg MiB8IDEgfCBbMSwgMiwgM10gICAgfCAyCisgMiB8IDEgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8 IDEgfCBbMSwgMiwgM10gICAgfCAxCisgMyB8IDEgfCBbMSwgMiwgM10gICAgfCAyCisgMyB8IDEg fCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDEgfCBbMiwgMywgNCwgNV0gfCAyCisgMyB8IDEgfCBb MiwgMywgNCwgNV0gfCAzCisgMyB8IDEgfCBbMiwgMywgNCwgNV0gfCA0CisgMyB8IDEgfCBbMiwg MywgNCwgNV0gfCA1CisgNCB8IDEgfCBbMSwgMiwgM10gICAgfCAxCisgNCB8IDEgfCBbMSwgMiwg M10gICAgfCAyCisgNCB8IDEgfCBbMSwgMiwgM10gICAgfCAzCisgNCB8IDEgfCBbMiwgMywgNCwg NV0gfCAyCisgNCB8IDEgfCBbMiwgMywgNCwgNV0gfCAzCisgNCB8IDEgfCBbMiwgMywgNCwgNV0g fCA0CisgNCB8IDEgfCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDEgfCBbMywgNCwgNSwgNl0gfCAz CisgNCB8IDEgfCBbMywgNCwgNSwgNl0gfCA0CisgNCB8IDEgfCBbMywgNCwgNSwgNl0gfCA1Cisg NCB8IDEgfCBbMywgNCwgNSwgNl0gfCA2CisgMiB8IDIgfCBbMSwgMiwgM10gICAgfCAyCisgMiB8 IDIgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDIgfCBbMSwgMiwgM10gICAgfCAyCisgMyB8IDIg fCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDIgfCBbMiwgMywgNCwgNV0gfCAyCisgMyB8IDIgfCBb MiwgMywgNCwgNV0gfCAzCisgMyB8IDIgfCBbMiwgMywgNCwgNV0gfCA0CisgMyB8IDIgfCBbMiwg MywgNCwgNV0gfCA1CisgNCB8IDIgfCBbMSwgMiwgM10gICAgfCAyCisgNCB8IDIgfCBbMSwgMiwg M10gICAgfCAzCisgNCB8IDIgfCBbMiwgMywgNCwgNV0gfCAyCisgNCB8IDIgfCBbMiwgMywgNCwg NV0gfCAzCisgNCB8IDIgfCBbMiwgMywgNCwgNV0gfCA0CisgNCB8IDIgfCBbMiwgMywgNCwgNV0g fCA1CisgNCB8IDIgfCBbMywgNCwgNSwgNl0gfCAzCisgNCB8IDIgfCBbMywgNCwgNSwgNl0gfCA0 CisgNCB8IDIgfCBbMywgNCwgNSwgNl0gfCA1CisgNCB8IDIgfCBbMywgNCwgNSwgNl0gfCA2Cisg MiB8IDMgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8IDMgfCBbMSwgMiwgM10gICAgfCAzCisgMyB8 IDMgfCBbMiwgMywgNCwgNV0gfCAzCisgMyB8IDMgfCBbMiwgMywgNCwgNV0gfCA0CisgMyB8IDMg fCBbMiwgMywgNCwgNV0gfCA1CisgNCB8IDMgfCBbMSwgMiwgM10gICAgfCAzCisgNCB8IDMgfCBb MiwgMywgNCwgNV0gfCAzCisgNCB8IDMgfCBbMiwgMywgNCwgNV0gfCA0CisgNCB8IDMgfCBbMiwg MywgNCwgNV0gfCA1CisgNCB8IDMgfCBbMywgNCwgNSwgNl0gfCAzCisgNCB8IDMgfCBbMywgNCwg NSwgNl0gfCA0CisgNCB8IDMgfCBbMywgNCwgNSwgNl0gfCA1CisgNCB8IDMgfCBbMywgNCwgNSwg Nl0gfCA2CisoNTIgcm93cykKKworLS0gU2hvdWxkIGZhaWwgKEpTT04gYXJndW1lbnRzIGFyZSBu b3QgcGFzc2VkIHRvIGNvbHVtbiBwYXRocykKK1NFTEVDVCAqCitGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ1sxLDIsM10nLAorCSckWypdID8gKEAgPCAkeCknCisJCVBBU1NJTkcgMTAgQVMgeAor CQlDT0xVTU5TICh5IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCA/IChAIDwgJHgpJykKKwkpIGp0 OworRVJST1I6ICBjb3VsZCBub3QgZmluZCBqc29ucGF0aCB2YXJpYWJsZSAieCIKKy0tIEV4dGVu c2lvbjogbm9uLWNvbnN0YW50IEpTT04gcGF0aAorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7 ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0t LS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30n LCAnJCcgfHwgJy4nIHx8ICdhJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEyMwor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAn LicgfHwgJ2InIERFRkFVTFQgJ2ZvbycgT04gRU1QVFkpOworIGpzb25fdmFsdWUgCistLS0tLS0t LS0tLS0KKyBmb28KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEy M30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIDEy MworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICckJyB8 fCAnLicgfHwgJ2EnIFdJVEggV1JBUFBFUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IFsxMjNdCisoMSByb3cpCisKKy0tIFNob3VsZCBmYWlsIChpbnZhbGlkIHBhdGgpCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICdlcnJvcicgfHwgJyAnIHx8ICdlcnJvcicp OworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiICIgb2YganNvbnBhdGggaW5wdXQK Ky0tIFNob3VsZCBmYWlsIChub3Qgc3VwcG9ydGVkKQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScgQ09MVU1OUyAoZm9vIGludCkp OworRVJST1I6ICBvbmx5IHN0cmluZyBjb25zdGFudHMgc3VwcG9ydGVkIGluIEpTT05fVEFCTEUg cGF0aCBzcGVjaWZpY2F0aW9uCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29u YiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJy4uLgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbl9z cWxqc29uLnNxbAppbmRleCA0ZjMwZmE0NmI5Li5kZjRhNDMwZDg4IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25fc3FsanNvbi5zcWwKQEAgLTksMyArOSw3IEBAIFNFTEVDVCBKU09OX1ZBTFVFKE5V TEwgRk9STUFUIEpTT04sICckJyk7CiAtLSBKU09OX1FVRVJZCiAKIFNFTEVDVCBKU09OX1FVRVJZ KE5VTEwgRk9STUFUIEpTT04sICckJyk7CisKKy0tIEpTT05fVEFCTEUKKworU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKE5VTEwgRk9STUFUIEpTT04sICckJyBDT0xVTU5TIChmb28gdGV4dCkpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbAppbmRleCA2MmIyMDBhYTBlLi44MWQ0 NWU5MzQ1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbApAQCAtMzMzLDMg KzMzMyw2NzcgQEAgQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9R VUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKQogQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAoQC5kYXRl dGltZSgpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CiBDUkVBVEUgSU5E RVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAkLmEgPyAo QC5kYXRldGltZSgiSEg6TUkiKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkp OwogRFJPUCBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxpdHk7CisKKy0tIEpTT05fVEFCTEUKKwor LS0gU2hvdWxkIGZhaWwgKEpTT05fVEFCTEUgY2FuIGJlIHVzZWQgb25seSBpbiBGUk9NIGNsYXVz ZSkKK1NFTEVDVCBKU09OX1RBQkxFKCdbXScsICckJyk7CisKKy0tIFNob3VsZCBmYWlsIChubyBj b2x1bW5zKQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKE5VTEwsICckJyBDT0xVTU5TICgpKTsK KworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFIChOVUxMOjpqc29uYiwgJyQnIENPTFVNTlMgKHYx IHRpbWVzdGFtcCkpIEFTIGYgKHYxLCB2Mik7CisKKy0tIE5VTEwgPT4gZW1wdHkgdGFibGUKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMOjpqc29uYiwgJyQnIENPTFVNTlMgKGZvbyBpbnQp KSBiYXI7CisKKy0tCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEyMycsICckJwor CUNPTFVNTlMgKGl0ZW0gaW50IFBBVEggJyQnLCBmb28gaW50KSkgYmFyOworCistLSBKU09OX1RB QkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5CitDUkVBVEUgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWlu IEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdmb28nKTsKK0NSRUFURSBURU1QIFRBQkxFIGpzb25f dGFibGVfdGVzdCAoanMpIEFTCisJKFZBTFVFUworCQkoJzEnKSwKKwkJKCdbXScpLAorCQkoJ3t9 JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXScpCisJKTsKKworLS0gUmVndWxh ciAidW5mb3JtYXR0ZWQiIGNvbHVtbnMKK1NFTEVDVCAqCitGUk9NIGpzb25fdGFibGVfdGVzdCB2 YWxzCisJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgKKwkJdmFscy5qczo6anNvbmIsICds YXggJFsqXScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCSJpbnQiIGlu dCBQQVRIICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnLAorCQkJImNoYXIoNCkiIGNoYXIo NCkgUEFUSCAnJCcsCisJCQkiYm9vbCIgYm9vbCBQQVRIICckJywKKwkJCSJudW1lcmljIiBudW1l cmljIFBBVEggJyQnLAorCQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFUSCAnJCcsCisJ CQlqcyBqc29uIFBBVEggJyQnLAorCQkJamIganNvbmIgUEFUSCAnJCcKKwkJKQorCSkganQKKwlP TiB0cnVlOworCistLSAiZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3Rh YmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6 Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJ CQlqc3QgdGV4dCAgICBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc2MgY2hhcig0KSBGT1JN QVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc3YgdmFyY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAn JCcsCisJCQlqc2IganNvbmIgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJCQlqc2JxIGpzb25iIEZP Uk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVPVEVTCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKwor LS0gRVhJU1RTIGNvbHVtbnMKK1NFTEVDVCAqCitGUk9NIGpzb25fdGFibGVfdGVzdCB2YWxzCisJ TEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgKKwkJdmFscy5qczo6anNvbmIsICdsYXggJFsq XScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCWV4aXN0czEgYm9vbCBF WElTVFMgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMiBpbnQgRVhJU1RTIFBBVEggJyQuYWFhJywK KwkJCWV4aXN0czMgaW50IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIFVOS05PV04gT04gRVJS T1IsCisJCQlleGlzdHM0IHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgRkFMU0UgT04g RVJST1IKKwkJKQorCSkganQKKwlPTiB0cnVlOworCistLSBPdGhlciBtaXNjZWxsYW5vdXMgY2hl Y2tzCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9J TgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMg KAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlhYWEgaW50LCAtLSAiYWFhIiBoYXMgaW1wbGlj aXQgcGF0aCAnJC4iYWFhIicKKwkJCWFhYTEgaW50IFBBVEggJyQuYWFhJywKKwkJCWpzMiBqc29u IFBBVEggJyQnLAorCQkJanNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVSLAorCQkJanNi MnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisJCQlpYSBpbnRbXSBQQVRIICckJywKKwkJ CXRhIHRleHRbXSBQQVRIICckJywKKwkJCWpiYSBqc29uYltdIFBBVEggJyQnCisJCSkKKwkpIGp0 CisJT04gdHJ1ZTsKKworLS0gSlNPTl9UQUJMRTogVGVzdCBiYWNrd2FyZCBwYXJzaW5nCisKK0NS RUFURSBWSUVXIGpzb25iX3RhYmxlX3ZpZXcgQVMKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxF KAorCQlqc29uYiAnbnVsbCcsICdsYXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICci Zm9vIicgQVMgImIgYyIKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCSJp bnQiIGludCBQQVRIICckJywKKwkJCSJ0ZXh0IiB0ZXh0IFBBVEggJyQnLAorCQkJImNoYXIoNCki IGNoYXIoNCkgUEFUSCAnJCcsCisJCQkiYm9vbCIgYm9vbCBQQVRIICckJywKKwkJCSJudW1lcmlj IiBudW1lcmljIFBBVEggJyQnLAorCQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFUSCAn JCcsCisJCQlqcyBqc29uIFBBVEggJyQnLAorCQkJamIganNvbmIgUEFUSCAnJCcsCisJCQlqc3Qg dGV4dCAgICBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc2MgY2hhcig0KSBGT1JNQVQgSlNP TiAgUEFUSCAnJCcsCisJCQlqc3YgdmFyY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJ CQlqc2IganNvbmIgICBGT1JNQVQgSlNPTiBQQVRIICckJywKKwkJCWpzYnEganNvbmIgRk9STUFU IEpTT04gUEFUSCAnJCcgT01JVCBRVU9URVMsCisJCQlhYWEgaW50LCAtLSBpbXBsaWNpdCBwYXRo ICckLiJhYWEiJywKKwkJCWFhYTEgaW50IFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czEgYm9vbCBF WElTVFMgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMiBpbnQgRVhJU1RTIFBBVEggJyQuYWFhJyBU UlVFIE9OIEVSUk9SLAorCQkJZXhpc3RzMyB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEn IFVOS05PV04gT04gRVJST1IsCisKKwkJCWpzMiBqc29uIFBBVEggJyQnLAorCQkJanNiMncganNv bmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVSLAorCQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBR VU9URVMsCisJCQlpYSBpbnRbXSBQQVRIICckJywKKwkJCXRhIHRleHRbXSBQQVRIICckJywKKwkJ CWpiYSBqc29uYltdIFBBVEggJyQnLAorCisJCQlORVNURUQgUEFUSCAnJFsxXScgQVMgcDEgQ09M VU1OUyAoCisJCQkJYTEgaW50LAorCQkJCU5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIgQ09M VU1OUyAoCisJCQkJCWExMSB0ZXh0CisJCQkJKSwKKwkJCQliMSB0ZXh0CisJCQkpLAorCQkJTkVT VEVEIFBBVEggJyRbMl0nIEFTIHAyIENPTFVNTlMgKAorCQkJCU5FU1RFRCBQQVRIICckWypdJyBB UyAicDI6MSIgQ09MVU1OUyAoCisJCQkJCWEyMSB0ZXh0CisJCQkJKSwKKwkJCQlORVNURUQgUEFU SCAnJFsqXScgQVMgcDIyIENPTFVNTlMgKAorCQkJCQlhMjIgdGV4dAorCQkJCSkKKwkJCSkKKwkJ KQorCSk7CisKK1xzdiBqc29uYl90YWJsZV92aWV3CisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVS Qk9TRSkgU0VMRUNUICogRlJPTSBqc29uYl90YWJsZV92aWV3OworCitEUk9QIFZJRVcganNvbmJf dGFibGVfdmlldzsKK0RST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluOworCistLSBKU09OX1RB QkxFOiBvbmx5IG9uZSBGT1IgT1JESU5BTElUWSBjb2x1bW5zIGFsbG93ZWQKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwg aWQyIEZPUiBPUkRJTkFMSVRZLCBhIGludCBQQVRIICckLmEnIEVSUk9SIE9OIEVNUFRZKSkganQ7 CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9S IE9SRElOQUxJVFksIGEgaW50IFBBVEggJyQnIEVSUk9SIE9OIEVNUFRZKSkganQ7CisKKy0tIEpT T05fVEFCTEU6IE9OIEVNUFRZL09OIEVSUk9SIGJlaGF2aW9yCitTRUxFQ1QgKgorRlJPTQorCShW QUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcyksCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpq c29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnKSkganQ7CisKK1NFTEVDVCAqCitGUk9N CisJKFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlMRUZUIE9VVEVSIEpPSU4K KwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcp IEVSUk9SIE9OIEVSUk9SKSBqdAorCQlPTiB0cnVlOworCitTRUxFQ1QgKgorRlJPTQorCShWQUxV RVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9U QUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQnIEVSUk9SIE9O IEVSUk9SKSkganQKKwkJT04gdHJ1ZTsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQuYScgRVJST1IgT04gRU1QVFkpKSBqdDsK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQ QVRIICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0OworU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEgg J2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikganQ7CisKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQn ICAgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnc3Ry aWN0ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFU SCAnbGF4ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0Owor CistLSBKU09OX1RBQkxFOiBFWElTVFMgUEFUSCB0eXBlcworU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ0IEVYSVNUUyBQQVRIICckLmEnKSk7 CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGlu dDIgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAn ImEiJywgJyQnIENPTFVNTlMgKGEgaW50OCBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBmbG9hdDQgRVhJU1RT IFBBVEggJyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQn IENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uIEVYSVNUUyBQQVRIICck LmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5T IChhIGpzb25iIEVYSVNUUyBQQVRIICckLmEnKSk7CisKKy0tIEpTT05fVEFCTEU6IFdSQVBQRVIv UVVPVEVTIGNsYXVzZXMgb24gc2NhbGFyIGNvbHVtbnMgZG9uJ3Qgd29yayB3aXRob3V0IGFuCist LSBleHBsaWNpdCBGT1JNQVQgY2xhdXNlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVTIE9O IFNDQUxBUiBTVFJJTkcpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxk IicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgS0VFUCBRVU9U RVMgT04gU0NBTEFSIFNUUklORykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICci d29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIIFdSQVBQRVIpKTsK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChp dGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgV0lUSCBXUkFQUEVSKSk7CisKKy0tIEpTT05f VEFCTEU6IG5lc3RlZCBwYXRocyBhbmQgcGxhbnMKKworLS0gU2hvdWxkIGZhaWwgKEpTT05fVEFC TEUgY29sdW1ucyBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aAorLS0gc3BlY2lmaWNhdGlv bnMgaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnW10nLCAnJCcgLS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQor CUNPTFVNTlMgKAorCQlmb28gaW50IFBBVEggJyQnCisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04p CispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFT IHBhdGgxCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBDT0xVTU5TICggLS0gQVMgPHBh dGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCQkJZm9vIGludCBQQVRIICckJworCQkpCisJKQorCVBM QU4gREVGQVVMVCAoVU5JT04pCispIGp0OworCistLSBTaG91bGQgZmFpbCAoY29sdW1uIG5hbWVz IG11c3QgYmUgZGlzdGluY3QpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1td JywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYSBpbnQKKwkpCispIGp0OworCitTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYiBp bnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYyBpbnQKKwkJKQor CSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcK KwlDT0xVTU5TICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBiCisJCUNPTFVNTlMg KAorCQkJYyBpbnQKKwkJKQorCSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnW10nLCAnJCcKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJ Q09MVU1OUyAoCisJCQliIGludAorCQkpLAorCQlORVNURUQgUEFUSCAnJCcKKwkJQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQkJQ09MVU1OUyAoCisJCQkJYyBpbnQKKwkJCSkK KwkJKQorCSkKKykganQ7CisKKy0tIEpTT05fVEFCTEU6IHBsYW4gdmFsaWRhdGlvbgorCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xV TU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09M VU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkK KwlQTEFOIChwMSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAn bnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEg Q09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICks CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAy MSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDApCispIGp0OworCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xV TU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAx MiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkp CisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQ QVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1O UyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBp bnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQg UEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBV TklPTiBwMSBVTklPTiBwMTEpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQn IEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9v IGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJ CSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIChw MSBDUk9TUyBwMTMpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25i ICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBw MSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQg KSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAor CQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAocDEgQ1JP U1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxs JywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xV TU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENP TFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIFVOSU9OIHAx MSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25i ICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBw MSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQg KSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAor CQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIElO TkVSIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAor CWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZv byBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQor CQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAo KHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJ3N0cmljdCAkWypdJyBBUyBwMAorCUNP TFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENP TFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJ CSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NT IChwMiBJTk5FUiBwMjEpKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlq c29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290IHBhdGggbmFtZQorCUNP TFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMg cDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENP TFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJ CSkKKwkpCisJUExBTiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgKHAyIElOTkVS IHAyMSkpCispIGp0OworCistLSBKU09OX1RBQkxFOiBwbGFuIGV4ZWN1dGlvbgorCitDUkVBVEUg VEVNUCBUQUJMRSBqc29uYl90YWJsZV90ZXN0IChqcyBqc29uYik7CisKK0lOU0VSVCBJTlRPIGpz b25iX3RhYmxlX3Rlc3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6IFtdLCAiYyI6 IFtdfSwKKwkJeyJhIjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51bGwsIDIwXX0s CisJCXsiYSI6ICAzLCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAiNCIsICJiIjog WzEsIDJdLCAiYyI6IDEyM30KKwkgXScKKyk7CisKKy0tIHVuc3BlY2lmaWVkIHBsYW4gKG91dGVy LCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlq c29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJ CW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9u IGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBi IGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNv bHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkpIGp0OworCistLSBkZWZhdWx0IHBsYW4g KG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0 dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5z ICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0 IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVt bnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFz IHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChvdXRl ciwgdW5pb24pCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgdW5pb24g cGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1bmlvbiBwYykp CisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorc2Vs ZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAor CQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5h bGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQlu ZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQn ICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50 IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYyB1bmlvbiBwYikpCisJKSBqdDsK KworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJ anNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRb Kl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0 aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRo ICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJ CXBsYW4gZGVmYXVsdCAoaW5uZXIpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBpbm5l ciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3Qg anR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVt bnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1 bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29s dW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScg YXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVyIChw YiB1bmlvbiBwYykpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwgY3Jvc3MpCitz ZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAo CisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRp bmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJ CW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAn JCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBp bnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAoY3Jvc3MsIGlubmVyKQorCSkganQ7 CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBjKSkKK3NlbGVjdAorCWp0 LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0Lmpz LCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJ CQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBh dGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICck JyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQorCSkganQ7CisKKy0tIGRl ZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3Rh YmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBw CisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAk LmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScg YXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0 ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRl ZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworCistLSBzcGVjaWZpYyBwbGFuIChwIG91dGVy IChwYiBjcm9zcyBwYykpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBq dHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1u cyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVs dCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1 bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBh cyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAgb3V0ZXIgKHBi IGNyb3NzIHBjKSkKKwkpIGp0OworCisKK3NlbGVjdAorCWp0LiosIGIxICsgMTAwIGFzIGIKK2Zy b20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjogIDEsICAiYiI6IFtbMSwgMTBd LCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsiYSI6ICAyLCAg ImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4IjogIjMiLCAiYiI6IFsx MSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQlu IGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBl cnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgKKwkJ CQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAk WypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRoICckJworCQkJCSkKKwkJCSks CisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoCisJCQkJYyB0 ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJFsqXScg YXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJCQkpCisJCSkK KwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAgb3V0ZXIgKChwYiBpbm5l ciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0OworCistLSBTaG91bGQgc3VjY2Vl ZCAoSlNPTiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byByb290IGFuZCBuZXN0ZWQgcGF0aHMpCitT RUxFQ1QgKgorRlJPTQorCWdlbmVyYXRlX3NlcmllcygxLCA0KSB4LAorCWdlbmVyYXRlX3Nlcmll cygxLCAzKSB5LAorCUpTT05fVEFCTEUoanNvbmIKKwkJJ1tbMSwyLDNdLFsyLDMsNCw1XSxbMyw0 LDUsNl1dJywKKwkJJ3N0cmljdCAkWypdID8gKEBbKl0gPCAkeCknCisJCVBBU1NJTkcgeCBBUyB4 LCB5IEFTIHkKKwkJQ09MVU1OUyAoCisJCQl5IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJ CQlORVNURUQgUEFUSCAnc3RyaWN0ICRbKl0gPyAoQCA+PSAkeSknCisJCQlDT0xVTU5TICgKKwkJ CQl6IGludCBQQVRIICckJworCQkJKQorCQkpCisJKSBqdDsKKworLS0gU2hvdWxkIGZhaWwgKEpT T04gYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkIHRvIGNvbHVtbiBwYXRocykKK1NFTEVDVCAqCitG Uk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1sxLDIsM10nLAorCSckWypdID8gKEAgPCAkeCknCisJ CVBBU1NJTkcgMTAgQVMgeAorCQlDT0xVTU5TICh5IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCA/ IChAIDwgJHgpJykKKwkpIGp0OworCistLSBFeHRlbnNpb246IG5vbi1jb25zdGFudCBKU09OIHBh dGgKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwg J2EnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8 fCAnYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4n IHx8ICdiJyBERUZBVUxUICdmb28nIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBXSVRIIFdSQVBQRVIpOworLS0gU2hv dWxkIGZhaWwgKGludmFsaWQgcGF0aCkKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAx MjN9JywgJ2Vycm9yJyB8fCAnICcgfHwgJ2Vycm9yJyk7CistLSBTaG91bGQgZmFpbCAobm90IHN1 cHBvcnRlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAneyJhIjogMTIzfScsICck JyB8fCAnLicgfHwgJ2EnIENPTFVNTlMgKGZvbyBpbnQpKTsKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggMjlhZDA0YmFkNy4uYzBlZGY0M2ZlZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTEzMTcsNiArMTMxNyw3IEBAIEpzb25QYXRoTXV0YWJsZUNvbnRleHQKIEpzb25QYXRo UGFyc2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNr CitKc29uUGF0aFNwZWMKIEpzb25QYXRoU3RyaW5nCiBKc29uUGF0aFZhckNhbGxiYWNrCiBKc29u UGF0aFZhcmlhYmxlCkBAIC0xMzI2LDYgKzEzMjcsMTcgQEAgSnNvblJldHVybmluZwogSnNvblNj YWxhckV4cHIKIEpzb25TZW1BY3Rpb24KIEpzb25TZXJpYWxpemVFeHByCitKc29uVGFibGUKK0pz b25UYWJsZUNvbHVtbgorSnNvblRhYmxlQ29sdW1uVHlwZQorSnNvblRhYmxlQ29udGV4dAorSnNv blRhYmxlSm9pblN0YXRlCitKc29uVGFibGVQYXJlbnQKK0pzb25UYWJsZVBsYW4KK0pzb25UYWJs ZVBsYW5Kb2luVHlwZQorSnNvblRhYmxlUGxhblR5cGUKK0pzb25UYWJsZVNjYW5TdGF0ZQorSnNv blRhYmxlU2libGluZwogSnNvblRva2VuVHlwZQogSnNvblRyYW5zZm9ybVN0cmluZ1ZhbHVlc0Fj dGlvbgogSnNvblR5cGVDYXRlZ29yeQpAQCAtMjc4OSw2ICsyODAxLDcgQEAgVGFibGVGdW5jCiBU YWJsZUZ1bmNSb3V0aW5lCiBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKK1RhYmxl RnVuY1R5cGUKIFRhYmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCiBUYWJsZVNhbXBsZUNsYXVzZQot LSAKMi4zNS4zCgo= --000000000000f29f71060cece141--