From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 121630 invoked by alias); 26 Sep 2016 14:01:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 121517 invoked by uid 89); 26 Sep 2016 14:01:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=2.3 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy=sind, principal, degrees, SIN X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-oi0-f52.google.com Received: from mail-oi0-f52.google.com (HELO mail-oi0-f52.google.com) (209.85.218.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Sep 2016 14:01:30 +0000 Received: by mail-oi0-f52.google.com with SMTP id t83so207876869oie.3; Mon, 26 Sep 2016 07:01:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=c+G9mWTqbNWAcaZvvY1L/SCYAYpV/4yz+7eCkBPx6fs=; b=diH4ooMDgV12wV+HChqC7jYlNtriu1tx5pM7sIN5O49WCQMcfgXu2tHChujvi/Yp6t j8yNBgavel5zAes7aFGdg2UrK0THBkef2GoS1p2RlPbVq2jiDP31VGlQ+p1TZeYu6KoZ uWpTj893GyQ0zT43vtnz1muibJsDUIBjvgd+BN+m0+7483pMOvh7Xg7dRv9XZ8MNwk3T WT37iJzvMkz/OVgqnPw4TDMiQn1vF4w3/c5M9uGPMd4/bgyhHeHRHBwJ+GJzYNChGLeK hBGEn+OLtSS3rRn2bh93N6X4bQXphZe9kmhWPFqnDw0G5oUSWvwACH2ImZ2uqHLPnLvs tDiQ== X-Gm-Message-State: AE9vXwOCyR4c6wGfpdmOYoLS70Ch6yLyZwSa/Q4mtt0UVPfsm4fh9XhxXTRWX1bKVgg2SizzLrZHF4z9lsCEkg== X-Received: by 10.202.105.198 with SMTP id e189mr26944416oic.115.1474898488306; Mon, 26 Sep 2016 07:01:28 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.44.138 with HTTP; Mon, 26 Sep 2016 07:01:27 -0700 (PDT) From: Fritz Reese Date: Mon, 26 Sep 2016 14:20:00 -0000 Message-ID: Subject: [PATCH, Fortran] Extension: COTAN and degree-valued trig intrinsics with -fdec-math To: fortran , gcc-patches Content-Type: multipart/mixed; boundary=001a1141b26679d1c5053d6990db X-SW-Source: 2016-09/txt/msg01836.txt.bz2 --001a1141b26679d1c5053d6990db Content-Type: text/plain; charset=UTF-8 Content-length: 3516 All, Attached is a patch extending the GNU Fortran front-end to support some additional math intrinsics, enabled with a new compile flag -fdec-math. The flag adds the COTAN intrinsic (cotangent), as well as degree versions of all trigonometric intrinsics (SIND, TAND, ACOSD, etc...). This extension allows for further compatibility with legacy code that depends on the compiler to support such intrinsic functions. I would definitely like some peer review on this patch to ensure my implementation has no unintended mathematical side-effects, such as rounding errors, or oversights with complex math: I implement the degree-valued functions by simply converting the argument or result to degrees/radians as appropriate by multiplying by the factor pi/180 (or 180/pi). In the constant case this is done using mpfr/mpc, and in the non-constant case the factor multiplication expression is just inserted into the expression tree where appropriate. The new COTAN intrinsic is implemented using mpfr_cot in the constant case, and by replacing the call with a 1/tan expression in the non-constant case (and in the complex case, since there is no mpc_cot). See the new functions in simplify.c/iresolve.c for specifics. I also added a new macro MATH_ALIAS_BUILTIN used in mathbuiltins.def to define the new COTAN intrinsic. This macro defines a new isym, but keeps everything else defined normally by DEFINE_MATH_BUILTIN the same as an existing isym (TAN in this case). The reason for this is to avoid having to define a new BUILT_IN_COTAN in gcc/builtins.def (or any other context). As I described above, the simplify/resolve code for COTAN just wraps TAN. I am not 100% convinced this is the "right" or "best" way to do this - so feel free to me know if there are any problems with this approach. By the way, I don't use intrinsic.c (make_alias) for these because they need their own simplification/resolution routines to handle the degree-radian conversion. As usual the patched compiler bootstraps and regtests on x86_64-redhat-linux. Questions, comments and concerns are very welcome. Barring any, is this OK for trunk? --- Fritz Reese 2016-09-26 Fritz Reese New flag -fdec-math for COTAN and degree trig intrinsics. gcc/fortran/ * lang.opt: New flag -fdec-math. * options.c (set_dec_flags): Enable with -fdec. * invoke.texi, gfortran.texi, intrinsic.texi: Update documentation. * trans-intrinsic.c (MATH_ALIAS_BUILTLIN): New macro for math aliases. * f95-lang.c (MATH_ALIAS_BUILTIN): New macro for math aliases. * mathbuiltins.def (MATH_ALIAS_BUILTIN): Use for cotan. * intrinsics.c (add_functions, do_simplify): New intrinsics with -fdec-math. * gfortran.h (gfc_isym_id): New isym GFC_ISYM_COTAN. * gfortran.h (gfc_resolve_atan2d, gfc_resolve_cotan, gfc_resolve_trigd, gfc_resolve_atrigd): New prototypes. * iresolve.c (resolve_trig_call, get_degrees, get_radians, is_trig_resolved, gfc_resolve_cotan, gfc_resolve_trigd, gfc_resolve_atrigd, gfc_resolve_atan2d): New functions. * intrinsics.h (gfc_simplify_atan2d, gfc_simplify_atrigd, gfc_simplify_cotan, gfc_simplify_trigd): New prototypes. * simplify.c (simplify_trig_call, degrees_f, radians_f, gfc_simplify_cotan, gfc_simplify_trigd, gfc_simplify_atrigd, gfc_simplify_atan2d): New functions. gcc/testsuite/gfortran.dg/ * dec_math.f90: New testsuite. --001a1141b26679d1c5053d6990db Content-Type: text/x-patch; charset=US-ASCII; name="dec_math.patch" Content-Disposition: attachment; filename="dec_math.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itk494tp0 Content-length: 72212 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2Y5NS1sYW5nLmMgYi9nY2MvZm9y dHJhbi9mOTUtbGFuZy5jCmluZGV4IDJiNTgxNzMuLjcyMjlkOGQgMTAwNjQ0 Ci0tLSBhL2djYy9mb3J0cmFuL2Y5NS1sYW5nLmMKKysrIGIvZ2NjL2ZvcnRy YW4vZjk1LWxhbmcuYwpAQCAtNTU5LDYgKzU1OSw4IEBAIGdmY19kZWZpbmVf YnVpbHRpbiAoY29uc3QgY2hhciAqbmFtZSwgdHJlZSB0eXBlLCBlbnVtIGJ1 aWx0X2luX2Z1bmN0aW9uIGNvZGUsCiAgICAgRE9fREVGSU5FX01BVEhfQlVJ TFRJTiAoY29kZSwgbmFtZSwgYXJndHlwZSwgbWZ1bmNfKSBcCiAgICAgRE9f REVGSU5FX01BVEhfQlVJTFRJTiAoQyMjY29kZSwgImMiIG5hbWUsIGFyZ3R5 cGUsIG1mdW5jX2MpCiAKKy8qIERlZmluZWQgaW4gdHJhbnMtaW50cmluc2lj LmMuICAqLworI2RlZmluZSBNQVRIX0FMSUFTX0JVSUxUSU4obmV3aWQsIGlk LCBuYW1lLCB0eXBlKQogCiAvKiBDcmVhdGUgZnVuY3Rpb24gdHlwZXMgZm9y IGJ1aWx0aW4gZnVuY3Rpb25zLiAgKi8KIApAQCAtMTI0NCw2ICsxMjQ2LDcg QEAgZ2ZjX2luaXRfYnVpbHRpbl9mdW5jdGlvbnMgKHZvaWQpCiAgIHRhcmdl dG0uaW5pdF9idWlsdGlucyAoKTsKIH0KIAorI3VuZGVmIE1BVEhfQUxJQVNf QlVJTFRJTgogI3VuZGVmIERFRklORV9NQVRIX0JVSUxUSU5fQwogI3VuZGVm IERFRklORV9NQVRIX0JVSUxUSU4KIApkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRy YW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKaW5kZXgg ZDZiOTJhNi4uZjhmM2Q0YSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZ2Zv cnRyYW4uaAorKysgYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCkBAIC0zOTEs NiArMzkxLDcgQEAgZW51bSBnZmNfaXN5bV9pZAogICBHRkNfSVNZTV9DT05W RVJTSU9OLAogICBHRkNfSVNZTV9DT1MsCiAgIEdGQ19JU1lNX0NPU0gsCisg IEdGQ19JU1lNX0NPVEFOLAogICBHRkNfSVNZTV9DT1VOVCwKICAgR0ZDX0lT WU1fQ1BVX1RJTUUsCiAgIEdGQ19JU1lNX0NTSElGVCwKZGlmZiAtLWdpdCBh L2djYy9mb3J0cmFuL2dmb3J0cmFuLnRleGkgYi9nY2MvZm9ydHJhbi9nZm9y dHJhbi50ZXhpCmluZGV4IDNlYmUzYzcuLjRmOGQyZDYgMTAwNjQ0Ci0tLSBh L2djYy9mb3J0cmFuL2dmb3J0cmFuLnRleGkKKysrIGIvZ2NjL2ZvcnRyYW4v Z2ZvcnRyYW4udGV4aQpAQCAtMTQ2Niw2ICsxNDY2LDcgQEAgd2l0aG91dCB3 YXJuaW5nLgogKiBGb3JtIGZlZWQgYXMgd2hpdGVzcGFjZTo6CiAqIFRZUEUg YXMgYW4gYWxpYXMgZm9yIFBSSU5UOjoKICogJUxPQyBhcyBhbiBydmFsdWU6 OgorKiBFeHRlbmRlZCBtYXRoIGludHJpbnNpY3M6OgogQGVuZCBtZW51CiAK IEBub2RlIE9sZC1zdHlsZSBraW5kIHNwZWNpZmljYXRpb25zCkBAIC0yNTE5 LDYgKzI1MjAsMzMgQEAgaW50ZWdlciA6OiBpCiBjYWxsIHN1YiglbG9jKGkp KQogQGVuZCBzbWFsbGV4YW1wbGUKIAorQG5vZGUgRXh0ZW5kZWQgbWF0aCBp bnRyaW5zaWNzCitAc3Vic2VjdGlvbiBFeHRlbmRlZCBtYXRoIGludHJpbnNp Y3MKK0BjaW5kZXggaW50cmluc2ljcywgbWF0aAorQGNpbmRleCBpbnRyaW5z aWNzLCB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucworCitHTlUgRm9ydHJhbiBz dXBwb3J0cyBhbiBleHRlbmRlZCBsaXN0IG9mIG1hdGhlbWF0aWNhbCBpbnRy aW5zaWNzIHdpdGggdGhlCitjb21waWxlIGZsYWcgQG9wdGlvbnstZmRlYy1t YXRofS4gIFRoZXNlIGludHJpbnNpY3MgYXJlIGRlc2NyaWJlZCBmdWxseSBp bgorQHJlZntJbnRyaW5zaWMgUHJvY2VkdXJlc30gd2hlcmUgaXQgaXMgbm90 ZWQgdGhhdCB0aGV5IGFyZSBleHRlbnNpb25zLgorCitTcGVjaWZpY2FsbHks IEBvcHRpb257LWZkZWMtbWF0aH0gZW5hYmxlcyB0aGUgQHJlZntDT1RBTn0g aW50cmluc2ljLCBhbmQKK3RyaWdvbm9tZXRyaWMgaW50cmluc2ljcyB3aGlj aCBhY2NlcHQgb3IgcHJvZHVjZSB2YWx1ZXMgaW4gZGVncmVlcyBpbnN0ZWFk IG9mCityYWRpYW5zLiAgSGVyZSBpcyBhIHN1bW1hcnkgb2YgdGhlIG5ldyBp bnRyaW5zaWNzOgorCitAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC41 IC41CitAaGVhZGl0ZW0gUmFkaWFucyBAdGFiIERlZ3JlZXMKK0BpdGVtIEBj b2Rle0ByZWZ7QUNPU319ICAgQHRhYiBAY29kZXtAcmVme0FDT1NEfX0qCitA aXRlbSBAY29kZXtAcmVme0FTSU59fSAgIEB0YWIgQGNvZGV7QHJlZntBU0lO RH19KgorQGl0ZW0gQGNvZGV7QHJlZntBVEFOfX0gICBAdGFiIEBjb2Rle0By ZWZ7QVRBTkR9fSoKK0BpdGVtIEBjb2Rle0ByZWZ7QVRBTjJ9fSAgQHRhYiBA Y29kZXtAcmVme0FUQU4yRH19KgorQGl0ZW0gQGNvZGV7QHJlZntDT1N9fSAg ICBAdGFiIEBjb2Rle0ByZWZ7Q09TRH19KgorQGl0ZW0gQGNvZGV7QHJlZntD T1RBTn19KiBAdGFiIEBjb2Rle0ByZWZ7Q09UQU5EfX0qCitAaXRlbSBAY29k ZXtAcmVme1NJTn19ICAgIEB0YWIgQGNvZGV7QHJlZntTSU5EfX0qCitAaXRl bSBAY29kZXtAcmVme1RBTn19ICAgIEB0YWIgQGNvZGV7QHJlZntUQU5EfX0q CitAZW5kIG11bHRpdGFibGUKKworKiBFbmFibGVkIHdpdGggQG9wdGlvbnst ZmRlYy1tYXRofS4KKwogCiBAbm9kZSBFeHRlbnNpb25zIG5vdCBpbXBsZW1l bnRlZCBpbiBHTlUgRm9ydHJhbgogQHNlY3Rpb24gRXh0ZW5zaW9ucyBub3Qg aW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4KZGlmZiAtLWdpdCBhL2djYy9m b3J0cmFuL2ludHJpbnNpYy5jIGIvZ2NjL2ZvcnRyYW4vaW50cmluc2ljLmMK aW5kZXggY2FkNTRiOC4uZmRjMTFkOCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy YW4vaW50cmluc2ljLmMKKysrIGIvZ2NjL2ZvcnRyYW4vaW50cmluc2ljLmMK QEAgLTMxMzksNiArMzEzOSwxMTcgQEAgYWRkX2Z1bmN0aW9ucyAodm9pZCkK IAkJCiAgIG1ha2VfZ2VuZXJpYyAoImxvYyIsIEdGQ19JU1lNX0xPQywgR0ZD X1NURF9HTlUpOwogCisgIGlmIChmbGFnX2RlY19tYXRoKQorICAgIHsKKyAg ICAgIGFkZF9zeW1fMSAoImFjb3NkIiwgR0ZDX0lTWU1fQUNPUywgQ0xBU1Nf RUxFTUVOVEFMLCBBQ1RVQUxfWUVTLCBCVF9SRUFMLAorCQkgZHIsIEdGQ19T VERfR05VLAorCQkgZ2ZjX2NoZWNrX2ZuX3IsIGdmY19zaW1wbGlmeV9hdHJp Z2QsIGdmY19yZXNvbHZlX2F0cmlnZCwKKwkJIHgsIEJUX1JFQUwsIGRyLCBS RVFVSVJFRCk7CisKKyAgICAgIGFkZF9zeW1fMSAoImRhY29zZCIsIEdGQ19J U1lNX0FDT1MsIENMQVNTX0VMRU1FTlRBTCwgQUNUVUFMX1lFUywgQlRfUkVB TCwKKwkJIGRkLCBHRkNfU1REX0dOVSwKKwkJIGdmY19jaGVja19mbl9kLCBn ZmNfc2ltcGxpZnlfYXRyaWdkLCBnZmNfcmVzb2x2ZV9hdHJpZ2QsCisJCSB4 LCBCVF9SRUFMLCBkZCwgUkVRVUlSRUQpOworCisgICAgICBtYWtlX2dlbmVy aWMgKCJhY29zZCIsIEdGQ19JU1lNX0FDT1MsIEdGQ19TVERfR05VKTsKKwor ICAgICAgYWRkX3N5bV8xICgiYXNpbmQiLCBHRkNfSVNZTV9BU0lOLCBDTEFT U19FTEVNRU5UQUwsIEFDVFVBTF9ZRVMsIEJUX1JFQUwsCisJCSBkciwgR0ZD X1NURF9HTlUsCisJCSBnZmNfY2hlY2tfZm5fciwgZ2ZjX3NpbXBsaWZ5X2F0 cmlnZCwgZ2ZjX3Jlc29sdmVfYXRyaWdkLAorCQkgeCwgQlRfUkVBTCwgZHIs IFJFUVVJUkVEKTsKKworICAgICAgYWRkX3N5bV8xICgiZGFzaW5kIiwgR0ZD X0lTWU1fQVNJTiwgQ0xBU1NfRUxFTUVOVEFMLCBBQ1RVQUxfWUVTLCBCVF9S RUFMLAorCQkgZGQsIEdGQ19TVERfR05VLAorCQkgZ2ZjX2NoZWNrX2ZuX2Qs IGdmY19zaW1wbGlmeV9hdHJpZ2QsIGdmY19yZXNvbHZlX2F0cmlnZCwKKwkJ IHgsIEJUX1JFQUwsIGRkLCBSRVFVSVJFRCk7CisKKyAgICAgIG1ha2VfZ2Vu ZXJpYyAoImFzaW5kIiwgR0ZDX0lTWU1fQVNJTiwgR0ZDX1NURF9HTlUpOwor CisgICAgICBhZGRfc3ltXzEgKCJhdGFuZCIsIEdGQ19JU1lNX0FUQU4sIENM QVNTX0VMRU1FTlRBTCwgQUNUVUFMX1lFUywgQlRfUkVBTCwKKwkJIGRyLCBH RkNfU1REX0dOVSwKKwkJIGdmY19jaGVja19mbl9yLCBnZmNfc2ltcGxpZnlf YXRyaWdkLCBnZmNfcmVzb2x2ZV9hdHJpZ2QsCisJCSB4LCBCVF9SRUFMLCBk ciwgUkVRVUlSRUQpOworCisgICAgICBhZGRfc3ltXzEgKCJkYXRhbmQiLCBH RkNfSVNZTV9BVEFOLCBDTEFTU19FTEVNRU5UQUwsIEFDVFVBTF9ZRVMsIEJU X1JFQUwsCisJCSBkZCwgR0ZDX1NURF9HTlUsCisJCSBnZmNfY2hlY2tfZm5f ZCwgZ2ZjX3NpbXBsaWZ5X2F0cmlnZCwgZ2ZjX3Jlc29sdmVfYXRyaWdkLAor CQkgeCwgQlRfUkVBTCwgZGQsIFJFUVVJUkVEKTsKKworICAgICAgbWFrZV9n ZW5lcmljICgiYXRhbmQiLCBHRkNfSVNZTV9BVEFOLCBHRkNfU1REX0dOVSk7 CisKKyAgICAgIGFkZF9zeW1fMiAoImF0YW4yZCIsR0ZDX0lTWU1fQVRBTjIs Q0xBU1NfRUxFTUVOVEFMLCBBQ1RVQUxfWUVTLCBCVF9SRUFMLAorCQkgZHIs IEdGQ19TVERfR05VLAorCQkgZ2ZjX2NoZWNrX2F0YW4yLCBnZmNfc2ltcGxp ZnlfYXRhbjJkLCBnZmNfcmVzb2x2ZV9hdGFuMmQsCisJCSB5LCBCVF9SRUFM LCBkciwgUkVRVUlSRUQsIHgsIEJUX1JFQUwsIGRyLCBSRVFVSVJFRCk7CisK KyAgICAgIGFkZF9zeW1fMiAoImRhdGFuMmQiLEdGQ19JU1lNX0FUQU4yLENM QVNTX0VMRU1FTlRBTCwgQUNUVUFMX1lFUywgQlRfUkVBTCwKKwkJIGRkLCBH RkNfU1REX0dOVSwKKwkJIGdmY19jaGVja19kYXRhbjIsIGdmY19zaW1wbGlm eV9hdGFuMmQsIGdmY19yZXNvbHZlX2F0YW4yZCwKKwkJIHksIEJUX1JFQUws IGRkLCBSRVFVSVJFRCwgeCwgQlRfUkVBTCwgZGQsIFJFUVVJUkVEKTsKKwor ICAgICAgbWFrZV9nZW5lcmljICgiYXRhbjJkIiwgR0ZDX0lTWU1fQVRBTjIs IEdGQ19TVERfR05VKTsKKworICAgICAgYWRkX3N5bV8xICgiY29zZCIsIEdG Q19JU1lNX0NPUywgQ0xBU1NfRUxFTUVOVEFMLCBBQ1RVQUxfWUVTLCBCVF9S RUFMLAorCQkgZHIsIEdGQ19TVERfR05VLAorCQkgZ2ZjX2NoZWNrX2ZuX3Is IGdmY19zaW1wbGlmeV90cmlnZCwgZ2ZjX3Jlc29sdmVfdHJpZ2QsCisJCSB4 LCBCVF9SRUFMLCBkciwgUkVRVUlSRUQpOworCisgICAgICBhZGRfc3ltXzEg KCJkY29zZCIsIEdGQ19JU1lNX0NPUywgQ0xBU1NfRUxFTUVOVEFMLCBBQ1RV QUxfWUVTLCBCVF9SRUFMLAorCQkgZGQsIEdGQ19TVERfR05VLAorCQkgZ2Zj X2NoZWNrX2ZuX2QsIGdmY19zaW1wbGlmeV90cmlnZCwgZ2ZjX3Jlc29sdmVf dHJpZ2QsCisJCSB4LCBCVF9SRUFMLCBkZCwgUkVRVUlSRUQpOworCisgICAg ICBtYWtlX2dlbmVyaWMgKCJjb3NkIiwgR0ZDX0lTWU1fQ09TLCBHRkNfU1RE X0dOVSk7CisKKyAgICAgIGFkZF9zeW1fMSAoImNvdGFuIiwgR0ZDX0lTWU1f Q09UQU4sIENMQVNTX0VMRU1FTlRBTCwgQUNUVUFMX1lFUywgQlRfUkVBTCwK KwkJIGRyLCBHRkNfU1REX0dOVSwKKwkJIGdmY19jaGVja19mbl9yYzIwMDgs IGdmY19zaW1wbGlmeV9jb3RhbiwgZ2ZjX3Jlc29sdmVfY290YW4sCisJCSB4 LCBCVF9SRUFMLCBkciwgUkVRVUlSRUQpOworCisgICAgICBhZGRfc3ltXzEg KCJkY290YW4iLCBHRkNfSVNZTV9DT1RBTiwgQ0xBU1NfRUxFTUVOVEFMLCBB Q1RVQUxfWUVTLCBCVF9SRUFMLAorCQkgZGQsIEdGQ19TVERfR05VLAorCQkg Z2ZjX2NoZWNrX2ZuX2QsIGdmY19zaW1wbGlmeV9jb3RhbiwgZ2ZjX3Jlc29s dmVfY290YW4sCisJCSB4LCBCVF9SRUFMLCBkZCwgUkVRVUlSRUQpOworCisg ICAgICBtYWtlX2dlbmVyaWMgKCJjb3RhbiIsIEdGQ19JU1lNX0NPVEFOLCBH RkNfU1REX0dOVSk7CisKKyAgICAgIGFkZF9zeW1fMSAoImNvdGFuZCIsIEdG Q19JU1lNX0NPVEFOLCBDTEFTU19FTEVNRU5UQUwsIEFDVFVBTF9ZRVMsIEJU X1JFQUwsCisJCSBkciwgR0ZDX1NURF9HTlUsCisJCSBnZmNfY2hlY2tfZm5f ciwgZ2ZjX3NpbXBsaWZ5X3RyaWdkLCBnZmNfcmVzb2x2ZV90cmlnZCwKKwkJ IHgsIEJUX1JFQUwsIGRyLCBSRVFVSVJFRCk7CisKKyAgICAgIGFkZF9zeW1f MSAoImRjb3RhbmQiLEdGQ19JU1lNX0NPVEFOLCBDTEFTU19FTEVNRU5UQUws IEFDVFVBTF9ZRVMsIEJUX1JFQUwsCisJCSBkZCwgR0ZDX1NURF9HTlUsCisJ CSBnZmNfY2hlY2tfZm5fZCwgZ2ZjX3NpbXBsaWZ5X3RyaWdkLCBnZmNfcmVz b2x2ZV90cmlnZCwKKwkJIHgsIEJUX1JFQUwsIGRkLCBSRVFVSVJFRCk7CisK KyAgICAgIG1ha2VfZ2VuZXJpYyAoImNvdGFuZCIsIEdGQ19JU1lNX0NPVEFO LCBHRkNfU1REX0dOVSk7CisKKyAgICAgIGFkZF9zeW1fMSAoInNpbmQiLCBH RkNfSVNZTV9TSU4sIENMQVNTX0VMRU1FTlRBTCwgQUNUVUFMX1lFUywgQlRf UkVBTCwKKwkJIGRyLCBHRkNfU1REX0dOVSwKKwkJIGdmY19jaGVja19mbl9y LCBnZmNfc2ltcGxpZnlfdHJpZ2QsIGdmY19yZXNvbHZlX3RyaWdkLAorCQkg eCwgQlRfUkVBTCwgZHIsIFJFUVVJUkVEKTsKKworICAgICAgYWRkX3N5bV8x ICgiZHNpbmQiLCBHRkNfSVNZTV9TSU4sIENMQVNTX0VMRU1FTlRBTCwgQUNU VUFMX1lFUywgQlRfUkVBTCwKKwkJIGRkLCBHRkNfU1REX0dOVSwKKwkJIGdm Y19jaGVja19mbl9kLCBnZmNfc2ltcGxpZnlfdHJpZ2QsIGdmY19yZXNvbHZl X3RyaWdkLAorCQkgeCwgQlRfUkVBTCwgZGQsIFJFUVVJUkVEKTsKKworICAg ICAgbWFrZV9nZW5lcmljICgic2luZCIsIEdGQ19JU1lNX1NJTiwgR0ZDX1NU RF9HTlUpOworCisgICAgICBhZGRfc3ltXzEgKCJ0YW5kIiwgR0ZDX0lTWU1f VEFOLCBDTEFTU19FTEVNRU5UQUwsIEFDVFVBTF9ZRVMsIEJUX1JFQUwsCisJ CSBkciwgR0ZDX1NURF9HTlUsCisJCSBnZmNfY2hlY2tfZm5fciwgZ2ZjX3Np bXBsaWZ5X3RyaWdkLCBnZmNfcmVzb2x2ZV90cmlnZCwKKwkJIHgsIEJUX1JF QUwsIGRyLCBSRVFVSVJFRCk7CisKKyAgICAgIGFkZF9zeW1fMSAoImR0YW5k IiwgR0ZDX0lTWU1fVEFOLCBDTEFTU19FTEVNRU5UQUwsIEFDVFVBTF9ZRVMs IEJUX1JFQUwsCisJCSBkZCwgR0ZDX1NURF9HTlUsCisJCSBnZmNfY2hlY2tf Zm5fZCwgZ2ZjX3NpbXBsaWZ5X3RyaWdkLCBnZmNfcmVzb2x2ZV90cmlnZCwK KwkJIHgsIEJUX1JFQUwsIGRkLCBSRVFVSVJFRCk7CisKKyAgICAgIG1ha2Vf Z2VuZXJpYyAoInRhbmQiLCBHRkNfSVNZTV9UQU4sIEdGQ19TVERfR05VKTsK KyAgICB9CisKICAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBpbnRl cm5hbGx5IHVzZWQgZm9yIGNvYXJyYXkgbGlicmF5IGZ1bmN0aW9ucy4KICAg ICAgIm1ha2VfZnJvbV9tb2R1bGUiIG1ha2VzIGl0IGluYWNjZXNzaWJsZSBm b3IgZXh0ZXJuYWwgdXNlcnMuICAqLwogICBhZGRfc3ltXzEgKEdGQ19QUkVG SVggKCJjYWZfZ2V0IiksIEdGQ19JU1lNX0NBRl9HRVQsIENMQVNTX0lNUFVS RSwgQUNUVUFMX05PLApAQCAtNDIyNyw2ICs0MzM4LDE1IEBAIGRvX3NpbXBs aWZ5IChnZmNfaW50cmluc2ljX3N5bSAqc3BlY2lmaWMsIGdmY19leHByICpl KQogICAgICAgZ290byBmaW5pc2g7CiAgICAgfQogCisgIC8qIFNvbWUgbWF0 aCBpbnRyaW5zaWNzIG5lZWQgdG8gd3JhcCB0aGUgb3JpZ2luYWwgZXhwcmVz c2lvbi4gICovCisgIGlmIChzcGVjaWZpYy0+c2ltcGxpZnkuZjEgPT0gZ2Zj X3NpbXBsaWZ5X3RyaWdkCisgICAgICB8fCBzcGVjaWZpYy0+c2ltcGxpZnku ZjEgPT0gZ2ZjX3NpbXBsaWZ5X2F0cmlnZAorICAgICAgfHwgc3BlY2lmaWMt PnNpbXBsaWZ5LmYxID09IGdmY19zaW1wbGlmeV9jb3RhbikKKyAgICB7Cisg ICAgICByZXN1bHQgPSAoKnNwZWNpZmljLT5zaW1wbGlmeS5mMSkgKGUpOwor ICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCiAgIGlmIChzcGVjaWZpYy0+ c2ltcGxpZnkuZjEgPT0gTlVMTCkKICAgICB7CiAgICAgICByZXN1bHQgPSBO VUxMOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vaW50cmluc2ljLmggYi9n Y2MvZm9ydHJhbi9pbnRyaW5zaWMuaAppbmRleCBmMjI4OTc2Li44YmJhNmUw IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9pbnRyaW5zaWMuaAorKysgYi9n Y2MvZm9ydHJhbi9pbnRyaW5zaWMuaApAQCAtMjM4LDYgKzIzOCw3IEBAIGdm Y19leHByICpnZmNfc2ltcGxpZnlfYWRqdXN0ciAoZ2ZjX2V4cHIgKik7CiBn ZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X2FpbWFnIChnZmNfZXhwciAqKTsKIGdm Y19leHByICpnZmNfc2ltcGxpZnlfYWludCAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4 cHIgKik7CiBnZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X2FsbCAoZ2ZjX2V4cHIg KiwgZ2ZjX2V4cHIgKik7CitnZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X2F0cmln ZCAoZ2ZjX2V4cHIgKik7CiBnZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X2RpbnQg KGdmY19leHByICopOwogZ2ZjX2V4cHIgKmdmY19zaW1wbGlmeV9hbmludCAo Z2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7CiBnZmNfZXhwciAqZ2ZjX3NpbXBs aWZ5X2RuaW50IChnZmNfZXhwciAqKTsKQEAgLTI0OCw2ICsyNDksNyBAQCBn ZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X2FzaW5oIChnZmNfZXhwciAqKTsKIGdm Y19leHByICpnZmNfc2ltcGxpZnlfYXRhbiAoZ2ZjX2V4cHIgKik7CiBnZmNf ZXhwciAqZ2ZjX3NpbXBsaWZ5X2F0YW5oIChnZmNfZXhwciAqKTsKIGdmY19l eHByICpnZmNfc2ltcGxpZnlfYXRhbjIgKGdmY19leHByICosIGdmY19leHBy ICopOworZ2ZjX2V4cHIgKmdmY19zaW1wbGlmeV9hdGFuMmQgKGdmY19leHBy ICosIGdmY19leHByICopOwogZ2ZjX2V4cHIgKmdmY19zaW1wbGlmeV9iZXNz ZWxfajAgKGdmY19leHByICopOwogZ2ZjX2V4cHIgKmdmY19zaW1wbGlmeV9i ZXNzZWxfajEgKGdmY19leHByICopOwogZ2ZjX2V4cHIgKmdmY19zaW1wbGlm eV9iZXNzZWxfam4gKGdmY19leHByICosIGdmY19leHByICopOwpAQCAtMjcx LDYgKzI3Myw3IEBAIGdmY19leHByICpnZmNfc2ltcGxpZnlfY29tcGxleCAo Z2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7CiBnZmNfZXhwciAqZ2ZjX3NpbXBs aWZ5X2NvbmpnIChnZmNfZXhwciAqKTsKIGdmY19leHByICpnZmNfc2ltcGxp ZnlfY29zIChnZmNfZXhwciAqKTsKIGdmY19leHByICpnZmNfc2ltcGxpZnlf Y29zaCAoZ2ZjX2V4cHIgKik7CitnZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X2Nv dGFuIChnZmNfZXhwciAqKTsKIGdmY19leHByICpnZmNfc2ltcGxpZnlfY291 bnQgKGdmY19leHByICosIGdmY19leHByICosIGdmY19leHByICopOwogZ2Zj X2V4cHIgKmdmY19zaW1wbGlmeV9jc2hpZnQgKGdmY19leHByICosIGdmY19l eHByICosIGdmY19leHByICopOwogZ2ZjX2V4cHIgKmdmY19zaW1wbGlmeV9k Y21wbHggKGdmY19leHByICosIGdmY19leHByICopOwpAQCAtNDAxLDYgKzQw NCw3IEBAIGdmY19leHByICpnZmNfc2ltcGxpZnlfdGlueSAoZ2ZjX2V4cHIg Kik7CiBnZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X3RyYWlseiAoZ2ZjX2V4cHIg Kik7CiBnZmNfZXhwciAqZ2ZjX3NpbXBsaWZ5X3RyYW5zZmVyIChnZmNfZXhw ciAqLCBnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsKIGdmY19leHByICpnZmNf c2ltcGxpZnlfdHJhbnNwb3NlIChnZmNfZXhwciAqKTsKK2dmY19leHByICpn ZmNfc2ltcGxpZnlfdHJpZ2QgKGdmY19leHByICopOwogZ2ZjX2V4cHIgKmdm Y19zaW1wbGlmeV90cmltIChnZmNfZXhwciAqKTsKIGdmY19leHByICpnZmNf c2ltcGxpZnlfdWJvdW5kIChnZmNfZXhwciAqLCBnZmNfZXhwciAqLCBnZmNf ZXhwciAqKTsKIGdmY19leHByICpnZmNfc2ltcGxpZnlfdWNvYm91bmQgKGdm Y19leHByICosIGdmY19leHByICosIGdmY19leHByICopOwpAQCAtNDM0LDYg KzQzOCw3IEBAIHZvaWQgZ2ZjX3Jlc29sdmVfYXNpbmggKGdmY19leHByICos IGdmY19leHByICopOwogdm9pZCBnZmNfcmVzb2x2ZV9hdGFuIChnZmNfZXhw ciAqLCBnZmNfZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29sdmVfYXRhbmggKGdm Y19leHByICosIGdmY19leHByICopOwogdm9pZCBnZmNfcmVzb2x2ZV9hdGFu MiAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7Cit2b2lk IGdmY19yZXNvbHZlX2F0YW4yZCAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKiwg Z2ZjX2V4cHIgKik7CiB2b2lkIGdmY19yZXNvbHZlX2F0b21pY19kZWYgKGdm Y19jb2RlICopOwogdm9pZCBnZmNfcmVzb2x2ZV9hdG9taWNfcmVmIChnZmNf Y29kZSAqKTsKIHZvaWQgZ2ZjX3Jlc29sdmVfYmVzbiAoZ2ZjX2V4cHIgKiwg Z2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7CkBAIC00NTIsNiArNDU3LDcgQEAg dm9pZCBnZmNfcmVzb2x2ZV9jb25qZyAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIg Kik7CiB2b2lkIGdmY19yZXNvbHZlX2NvcyAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4 cHIgKik7CiB2b2lkIGdmY19yZXNvbHZlX2Nvc2ggKGdmY19leHByICosIGdm Y19leHByICopOwogdm9pZCBnZmNfcmVzb2x2ZV9jb3VudCAoZ2ZjX2V4cHIg KiwgZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7Cit2b2lk IGdmY19yZXNvbHZlX2NvdGFuIChnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsK IHZvaWQgZ2ZjX3Jlc29sdmVfY3NoaWZ0IChnZmNfZXhwciAqLCBnZmNfZXhw ciAqLCBnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29s dmVfY3RpbWUgKGdmY19leHByICosIGdmY19leHByICopOwogdm9pZCBnZmNf cmVzb2x2ZV9kYmxlIChnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsKQEAgLTU4 Miw2ICs1ODgsOCBAQCB2b2lkIGdmY19yZXNvbHZlX3RpbWUgKGdmY19leHBy ICopOwogdm9pZCBnZmNfcmVzb2x2ZV90aW1lOCAoZ2ZjX2V4cHIgKik7CiB2 b2lkIGdmY19yZXNvbHZlX3RyYW5zZmVyIChnZmNfZXhwciAqLCBnZmNfZXhw ciAqLCBnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29s dmVfdHJhbnNwb3NlIChnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsKK3ZvaWQg Z2ZjX3Jlc29sdmVfdHJpZ2QgKGdmY19leHByICosIGdmY19leHByICopOwor dm9pZCBnZmNfcmVzb2x2ZV9hdHJpZ2QgKGdmY19leHByICosIGdmY19leHBy ICopOwogdm9pZCBnZmNfcmVzb2x2ZV90cmltIChnZmNfZXhwciAqLCBnZmNf ZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29sdmVfdHR5bmFtIChnZmNfZXhwciAq LCBnZmNfZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29sdmVfdWJvdW5kIChnZmNf ZXhwciAqLCBnZmNfZXhwciAqLCBnZmNfZXhwciAqLCBnZmNfZXhwciAqKTsK ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2ludHJpbnNpYy50ZXhpIGIvZ2Nj L2ZvcnRyYW4vaW50cmluc2ljLnRleGkKaW5kZXggOGNjYTliMS4uNGY5MDBl NSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vaW50cmluc2ljLnRleGkKKysr IGIvZ2NjL2ZvcnRyYW4vaW50cmluc2ljLnRleGkKQEAgLTIzLDYgKzIzLDkg QEAgU29tZSBiYXNpYyBndWlkZWxpbmVzIGZvciBlZGl0aW5nIHRoaXMgZG9j dW1lbnQ6CiBAZW5kIGlnbm9yZQogCiBAdGV4CitcZ2RlZlxhY29zZHtcbWF0 aG9we1xybSBhY29zZH1cbm9saW1pdHN9CitcZ2RlZlxhc2luZHtcbWF0aG9w e1xybSBhc2luZH1cbm9saW1pdHN9CitcZ2RlZlxhdGFuZHtcbWF0aG9we1xy bSBhdGFuZH1cbm9saW1pdHN9CiBcZ2RlZlxhY29ze1xtYXRob3B7XHJtIGFj b3N9XG5vbGltaXRzfQogXGdkZWZcYXNpbntcbWF0aG9we1xybSBhc2lufVxu b2xpbWl0c30KIFxnZGVmXGF0YW57XG1hdGhvcHtccm0gYXRhbn1cbm9saW1p dHN9CkBAIC00Myw2ICs0Niw3IEBAIFNvbWUgYmFzaWMgZ3VpZGVsaW5lcyBm b3IgZWRpdGluZyB0aGlzIGRvY3VtZW50OgogKiBAY29kZXtBQ0NFU1N9OiAg ICAgICAgQUNDRVNTLCAgICBDaGVja3MgZmlsZSBhY2Nlc3MgbW9kZXMKICog QGNvZGV7QUNIQVJ9OiAgICAgICAgIEFDSEFSLCAgICAgQ2hhcmFjdGVyIGlu IEBhY3Jvbnlte0FTQ0lJfSBjb2xsYXRpbmcgc2VxdWVuY2UKICogQGNvZGV7 QUNPU306ICAgICAgICAgIEFDT1MsICAgICAgQXJjY29zaW5lIGZ1bmN0aW9u CisqIEBjb2Rle0FDT1NEfTogICAgICAgICBBQ09TRCwgICAgIEFyY2Nvc2lu ZSBmdW5jdGlvbiwgZGVncmVlcwogKiBAY29kZXtBQ09TSH06ICAgICAgICAg QUNPU0gsICAgICBJbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIGZ1bmN0aW9u CiAqIEBjb2Rle0FESlVTVEx9OiAgICAgICBBREpVU1RMLCAgIExlZnQgYWRq dXN0IGEgc3RyaW5nCiAqIEBjb2Rle0FESlVTVFJ9OiAgICAgICBBREpVU1RS LCAgIFJpZ2h0IGFkanVzdCBhIHN0cmluZwpAQCAtNTUsMTAgKzU5LDEzIEBA IFNvbWUgYmFzaWMgZ3VpZGVsaW5lcyBmb3IgZWRpdGluZyB0aGlzIGRvY3Vt ZW50OgogKiBAY29kZXtBTklOVH06ICAgICAgICAgQU5JTlQsICAgICBOZWFy ZXN0IHdob2xlIG51bWJlcgogKiBAY29kZXtBTll9OiAgICAgICAgICAgQU5Z LCAgICAgICBEZXRlcm1pbmUgaWYgYW55IHZhbHVlcyBhcmUgdHJ1ZQogKiBA Y29kZXtBU0lOfTogICAgICAgICAgQVNJTiwgICAgICBBcmNzaW5lIGZ1bmN0 aW9uCisqIEBjb2Rle0FTSU5EfTogICAgICAgICBBU0lORCwgICAgIEFyY3Np bmUgZnVuY3Rpb24sIGRlZ3JlZXMKICogQGNvZGV7QVNJTkh9OiAgICAgICAg IEFTSU5ILCAgICAgSW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgZnVuY3Rpb24K ICogQGNvZGV7QVNTT0NJQVRFRH06ICAgIEFTU09DSUFURUQsIFN0YXR1cyBv ZiBhIHBvaW50ZXIgb3IgcG9pbnRlci90YXJnZXQgcGFpcgogKiBAY29kZXtB VEFOfTogICAgICAgICAgQVRBTiwgICAgICBBcmN0YW5nZW50IGZ1bmN0aW9u CisqIEBjb2Rle0FUQU5EfTogICAgICAgICBBVEFORCwgICAgIEFyY3Rhbmdl bnQgZnVuY3Rpb24sIGRlZ3JlZXMKICogQGNvZGV7QVRBTjJ9OiAgICAgICAg IEFUQU4yLCAgICAgQXJjdGFuZ2VudCBmdW5jdGlvbgorKiBAY29kZXtBVEFO MkR9OiAgICAgICAgQVRBTjJELCAgICBBcmN0YW5nZW50IGZ1bmN0aW9uLCBk ZWdyZWVzCiAqIEBjb2Rle0FUQU5IfTogICAgICAgICBBVEFOSCwgICAgIElu dmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IGZ1bmN0aW9uCiAqIEBjb2Rle0FU T01JQ19BRER9OiAgICBBVE9NSUNfQURELCBBdG9taWMgQUREIG9wZXJhdGlv bgogKiBAY29kZXtBVE9NSUNfQU5EfTogICAgQVRPTUlDX0FORCwgQXRvbWlj IGJpdHdpc2UgQU5EIG9wZXJhdGlvbgpAQCAtMTA2LDcgKzExMywxMCBAQCBT b21lIGJhc2ljIGd1aWRlbGluZXMgZm9yIGVkaXRpbmcgdGhpcyBkb2N1bWVu dDoKICogQGNvZGV7Q09NUExFWH06ICAgICAgIENPTVBMRVgsICAgQ29tcGxl eCBjb252ZXJzaW9uIGZ1bmN0aW9uCiAqIEBjb2Rle0NPTkpHfTogICAgICAg ICBDT05KRywgICAgIENvbXBsZXggY29uanVnYXRlIGZ1bmN0aW9uCiAqIEBj b2Rle0NPU306ICAgICAgICAgICBDT1MsICAgICAgIENvc2luZSBmdW5jdGlv bgorKiBAY29kZXtDT1NEfTogICAgICAgICAgQ09TRCwgICAgICBDb3NpbmUg ZnVuY3Rpb24sIGRlZ3JlZXMKICogQGNvZGV7Q09TSH06ICAgICAgICAgIENP U0gsICAgICAgSHlwZXJib2xpYyBjb3NpbmUgZnVuY3Rpb24KKyogQGNvZGV7 Q09UQU59OiAgICAgICAgIENPVEFOLCAgICAgQ290YW5nZW50IGZ1bmN0aW9u CisqIEBjb2Rle0NPVEFORH06ICAgICAgICBDT1RBTkQsICAgIENvdGFuZ2Vu dCBmdW5jdGlvbiwgZGVncmVlcwogKiBAY29kZXtDT1VOVH06ICAgICAgICAg Q09VTlQsICAgICBDb3VudCBvY2N1cnJlbmNlcyBvZiBUUlVFIGluIGFuIGFy cmF5CiAqIEBjb2Rle0NQVV9USU1FfTogICAgICBDUFVfVElNRSwgIENQVSB0 aW1lIHN1YnJvdXRpbmUKICogQGNvZGV7Q1NISUZUfTogICAgICAgIENTSElG VCwgICAgQ2lyY3VsYXIgc2hpZnQgZWxlbWVudHMgb2YgYW4gYXJyYXkKQEAg LTI3Nyw2ICsyODcsNyBAQCBTb21lIGJhc2ljIGd1aWRlbGluZXMgZm9yIGVk aXRpbmcgdGhpcyBkb2N1bWVudDoKICogQGNvZGV7U0lHTn06ICAgICAgICAg IFNJR04sICAgICAgU2lnbiBjb3B5aW5nIGZ1bmN0aW9uCiAqIEBjb2Rle1NJ R05BTH06ICAgICAgICBTSUdOQUwsICAgIFNpZ25hbCBoYW5kbGluZyBzdWJy b3V0aW5lIChvciBmdW5jdGlvbikKICogQGNvZGV7U0lOfTogICAgICAgICAg IFNJTiwgICAgICAgU2luZSBmdW5jdGlvbgorKiBAY29kZXtTSU5EfTogICAg ICAgICAgU0lORCwgICAgICBTaW5lIGZ1bmN0aW9uLCBkZWdyZWVzCiAqIEBj b2Rle1NJTkh9OiAgICAgICAgICBTSU5ILCAgICAgIEh5cGVyYm9saWMgc2lu ZSBmdW5jdGlvbgogKiBAY29kZXtTSVpFfTogICAgICAgICAgU0laRSwgICAg ICBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgYW4gYXJyYXkK ICogQGNvZGV7U0laRU9GfTogICAgICAgIFNJWkVPRiwgICAgRGV0ZXJtaW5l IHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIGV4cHJlc3Npb24KQEAgLTI5Miw2 ICszMDMsNyBAQCBTb21lIGJhc2ljIGd1aWRlbGluZXMgZm9yIGVkaXRpbmcg dGhpcyBkb2N1bWVudDoKICogQGNvZGV7U1lTVEVNfTogICAgICAgIFNZU1RF TSwgICAgRXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQKICogQGNvZGV7U1lTVEVN X0NMT0NLfTogIFNZU1RFTV9DTE9DSywgVGltZSBmdW5jdGlvbgogKiBAY29k ZXtUQU59OiAgICAgICAgICAgVEFOLCAgICAgICBUYW5nZW50IGZ1bmN0aW9u CisqIEBjb2Rle1RBTkR9OiAgICAgICAgICBUQU5ELCAgICAgIFRhbmdlbnQg ZnVuY3Rpb24sIGRlZ3JlZXMKICogQGNvZGV7VEFOSH06ICAgICAgICAgIFRB TkgsICAgICAgSHlwZXJib2xpYyB0YW5nZW50IGZ1bmN0aW9uCiAqIEBjb2Rl e1RISVNfSU1BR0V9OiAgICBUSElTX0lNQUdFLCBDb3N1YnNjcmlwdCBpbmRl eCBvZiB0aGlzIGltYWdlCiAqIEBjb2Rle1RJTUV9OiAgICAgICAgICBUSU1F LCAgICAgIFRpbWUgZnVuY3Rpb24KQEAgLTYxOSw2ICs2MzEsNjIgQEAgZW5k IHByb2dyYW0gdGVzdF9hY29zCiAKIEBpdGVtIEBlbXBoe1NlZSBhbHNvfToK IEludmVyc2UgZnVuY3Rpb246IEByZWZ7Q09TfQorRGVncmVlcyBmdW5jdGlv bjogQHJlZntBQ09TRH0KKworQGVuZCB0YWJsZQorCisKKworQG5vZGUgQUNP U0QKK0BzZWN0aW9uIEBjb2Rle0FDT1NEfSAtLS0gQXJjY29zaW5lIGZ1bmN0 aW9uLCBkZWdyZWVzCitAZm5pbmRleCBBQ09TRAorQGZuaW5kZXggREFDT1NE CitAY2luZGV4IHRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIGNvc2luZSwgaW52 ZXJzZSwgZGVncmVlcworQGNpbmRleCBjb3NpbmUsIGludmVyc2UsIGRlZ3Jl ZXMKKworQHRhYmxlIEBhc2lzCitAaXRlbSBAZW1waHtEZXNjcmlwdGlvbn06 CitAY29kZXtBQ09TRChYKX0gY29tcHV0ZXMgdGhlIGFyY2Nvc2luZSBvZiBA dmFye1h9IGluIGRlZ3JlZXMgKGludmVyc2Ugb2YKK0Bjb2Rle0NPU0QoWCl9 KS4KKworQGl0ZW0gQGVtcGh7U3RhbmRhcmR9OgorR05VIEV4dGVuc2lvbiwg ZW5hYmxlZCB3aXRoIEBvcHRpb257LWZkZWMtbWF0aH0KKworQGl0ZW0gQGVt cGh7Q2xhc3N9OgorRWxlbWVudGFsIGZ1bmN0aW9uCisKK0BpdGVtIEBlbXBo e1N5bnRheH06CitAY29kZXtSRVNVTFQgPSBBQ09TRChYKX0KKworQGl0ZW0g QGVtcGh7QXJndW1lbnRzfToKK0BtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlv bnMgLjE1IC43MAorQGl0ZW0gQHZhcntYfSBAdGFiIFRoZSB0eXBlIHNoYWxs IGVpdGhlciBiZSBAY29kZXtSRUFMfSB3aXRoIGEgbWFnbml0dWRlIHRoYXQg aXMKK2xlc3MgdGhhbiBvciBlcXVhbCB0byBvbmUgLSBvciB0aGUgdHlwZSBz aGFsbCBiZSBAY29kZXtDT01QTEVYfS4KK0BlbmQgbXVsdGl0YWJsZQorCitA aXRlbSBAZW1waHtSZXR1cm4gdmFsdWV9OgorVGhlIHJldHVybiB2YWx1ZSBp cyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIEB2YXJ7WH0uCitUaGUg cmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgaXMgaW4gZGVncmVlcyBhbmQgbGll cyBpbiB0aGUgcmFuZ2UKK0BtYXRoezAgXGxlcSBcUmUgXGFjb3MoeCkgXGxl cSAxODB9LgorCitAaXRlbSBAZW1waHtFeGFtcGxlfToKK0BzbWFsbGV4YW1w bGUKK3Byb2dyYW0gdGVzdF9hY29zZAorICByZWFsKDgpIDo6IHggPSAwLjg2 Nl84CisgIHggPSBhY29zZCh4KQorZW5kIHByb2dyYW0gdGVzdF9hY29zZAor QGVuZCBzbWFsbGV4YW1wbGUKKworQGl0ZW0gQGVtcGh7U3BlY2lmaWMgbmFt ZXN9OgorQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjAgLjIwIC4y MCAuMjUKK0BpdGVtIE5hbWUgICAgICAgICAgICBAdGFiIEFyZ3VtZW50ICAg ICAgICAgQHRhYiBSZXR1cm4gdHlwZSAgICAgQHRhYiBTdGFuZGFyZAorQGl0 ZW0gQGNvZGV7QUNPU0QoWCl9ICBAdGFiIEBjb2Rle1JFQUwoNCkgWH0gQHRh YiBAY29kZXtSRUFMKDQpfSAgQHRhYiBHTlUgRXh0ZW5zaW9uCitAaXRlbSBA Y29kZXtEQUNPU0QoWCl9IEB0YWIgQGNvZGV7UkVBTCg4KSBYfSBAdGFiIEBj b2Rle1JFQUwoOCl9ICBAdGFiIEdOVSBFeHRlbnNpb24KK0BlbmQgbXVsdGl0 YWJsZQorCitAaXRlbSBAZW1waHtTZWUgYWxzb306CitJbnZlcnNlIGZ1bmN0 aW9uOiBAcmVme0NPU0R9CitSYWRpYW5zIGZ1bmN0aW9uOiBAcmVme0FDT1N9 CiAKIEBlbmQgdGFibGUKIApAQCAtMTI2OSw2ICsxMzM3LDYyIEBAIGVuZCBw cm9ncmFtIHRlc3RfYXNpbgogCiBAaXRlbSBAZW1waHtTZWUgYWxzb306CiBJ bnZlcnNlIGZ1bmN0aW9uOiBAcmVme1NJTn0KK0RlZ3JlZXMgZnVuY3Rpb246 IEByZWZ7QVNJTkR9CisKK0BlbmQgdGFibGUKKworCisKK0Bub2RlIEFTSU5E CitAc2VjdGlvbiBAY29kZXtBU0lORH0gLS0tIEFyY3NpbmUgZnVuY3Rpb24s IGRlZ3JlZXMKK0BmbmluZGV4IEFTSU5ECitAZm5pbmRleCBEQVNJTkQKK0Bj aW5kZXggdHJpZ29ub21ldHJpYyBmdW5jdGlvbiwgc2luZSwgaW52ZXJzZSwg ZGVncmVlcworQGNpbmRleCBzaW5lLCBpbnZlcnNlLCBkZWdyZWVzCisKK0B0 YWJsZSBAYXNpcworQGl0ZW0gQGVtcGh7RGVzY3JpcHRpb259OgorQGNvZGV7 QVNJTkQoWCl9IGNvbXB1dGVzIHRoZSBhcmNzaW5lIG9mIGl0cyBAdmFye1h9 IGluIGRlZ3JlZXMgKGludmVyc2Ugb2YKK0Bjb2Rle1NJTkQoWCl9KS4KKwor QGl0ZW0gQGVtcGh7U3RhbmRhcmR9OgorR05VIEV4dGVuc2lvbiwgZW5hYmxl ZCB3aXRoIEBvcHRpb257LWZkZWMtbWF0aH0uCisKK0BpdGVtIEBlbXBoe0Ns YXNzfToKK0VsZW1lbnRhbCBmdW5jdGlvbgorCitAaXRlbSBAZW1waHtTeW50 YXh9OgorQGNvZGV7UkVTVUxUID0gQVNJTkQoWCl9CisKK0BpdGVtIEBlbXBo e0FyZ3VtZW50c306CitAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4x NSAuNzAKK0BpdGVtIEB2YXJ7WH0gQHRhYiBUaGUgdHlwZSBzaGFsbCBiZSBl aXRoZXIgQGNvZGV7UkVBTH0gYW5kIGEgbWFnbml0dWRlIHRoYXQgaXMKK2xl c3MgdGhhbiBvciBlcXVhbCB0byBvbmUgLSBvciBiZSBAY29kZXtDT01QTEVY fS4KK0BlbmQgbXVsdGl0YWJsZQorCitAaXRlbSBAZW1waHtSZXR1cm4gdmFs dWV9OgorVGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0aGUgc2FtZSB0eXBlIGFu ZCBraW5kIGFzIEB2YXJ7WH0uCitUaGUgcmVhbCBwYXJ0IG9mIHRoZSByZXN1 bHQgaXMgaW4gZGVncmVlcyBhbmQgbGllcyBpbiB0aGUgcmFuZ2UKK0BtYXRo ey05MCBcbGVxIFxSZSBcYXNpbih4KSBcbGVxIDkwfS4KKworQGl0ZW0gQGVt cGh7RXhhbXBsZX06CitAc21hbGxleGFtcGxlCitwcm9ncmFtIHRlc3RfYXNp bmQKKyAgcmVhbCg4KSA6OiB4ID0gMC44NjZfOAorICB4ID0gYXNpbmQoeCkK K2VuZCBwcm9ncmFtIHRlc3RfYXNpbmQKK0BlbmQgc21hbGxleGFtcGxlCisK K0BpdGVtIEBlbXBoe1NwZWNpZmljIG5hbWVzfToKK0BtdWx0aXRhYmxlIEBj b2x1bW5mcmFjdGlvbnMgLjIwIC4yMCAuMjAgLjI1CitAaXRlbSBOYW1lICAg ICAgICAgICAgQHRhYiBBcmd1bWVudCAgICAgICAgICBAdGFiIFJldHVybiB0 eXBlICAgICAgIEB0YWIgU3RhbmRhcmQKK0BpdGVtIEBjb2Rle0FTSU5EKFgp fSAgQHRhYiBAY29kZXtSRUFMKDQpIFh9ICBAdGFiIEBjb2Rle1JFQUwoNCl9 ICAgIEB0YWIgR05VIEV4dGVuc2lvbgorQGl0ZW0gQGNvZGV7REFTSU5EKFgp fSBAdGFiIEBjb2Rle1JFQUwoOCkgWH0gIEB0YWIgQGNvZGV7UkVBTCg4KX0g ICAgQHRhYiBHTlUgRXh0ZW5zaW9uCitAZW5kIG11bHRpdGFibGUKKworQGl0 ZW0gQGVtcGh7U2VlIGFsc299OgorSW52ZXJzZSBmdW5jdGlvbjogQHJlZntT SU5EfQorUmFkaWFucyBmdW5jdGlvbjogQHJlZntBU0lOfQogCiBAZW5kIHRh YmxlCiAKQEAgLTE0NTgsNiArMTU4Miw2OCBAQCBlbmQgcHJvZ3JhbSB0ZXN0 X2F0YW4KIAogQGl0ZW0gQGVtcGh7U2VlIGFsc299OgogSW52ZXJzZSBmdW5j dGlvbjogQHJlZntUQU59CitEZWdyZWVzIGZ1bmN0aW9uOiBAcmVme0FUQU5E fQorCitAZW5kIHRhYmxlCisKKworCitAbm9kZSBBVEFORAorQHNlY3Rpb24g QGNvZGV7QVRBTkR9IC0tLSBBcmN0YW5nZW50IGZ1bmN0aW9uLCBkZWdyZWVz CitAZm5pbmRleCBBVEFORAorQGZuaW5kZXggREFUQU5ECitAY2luZGV4IHRy aWdvbm9tZXRyaWMgZnVuY3Rpb24sIHRhbmdlbnQsIGludmVyc2UsIGRlZ3Jl ZXMKK0BjaW5kZXggdGFuZ2VudCwgaW52ZXJzZSwgZGVncmVlcworCitAdGFi bGUgQGFzaXMKK0BpdGVtIEBlbXBoe0Rlc2NyaXB0aW9ufToKK0Bjb2Rle0FU QU5EKFgpfSBjb21wdXRlcyB0aGUgYXJjdGFuZ2VudCBvZiBAdmFye1h9IGlu IGRlZ3JlZXMgKGludmVyc2Ugb2YKK0ByZWZ7VEFORH0pLgorCitAaXRlbSBA ZW1waHtTdGFuZGFyZH06CitHTlUgRXh0ZW5zaW9uLCBlbmFibGVkIHdpdGgg QG9wdGlvbnstZmRlYy1tYXRofS4KKworQGl0ZW0gQGVtcGh7Q2xhc3N9Ogor RWxlbWVudGFsIGZ1bmN0aW9uCisKK0BpdGVtIEBlbXBoe1N5bnRheH06CitA bXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC44MAorQGl0ZW0gQGNvZGV7 UkVTVUxUID0gQVRBTkQoWCl9CitAaXRlbSBAY29kZXtSRVNVTFQgPSBBVEFO RChZLCBYKX0KK0BlbmQgbXVsdGl0YWJsZQorCitAaXRlbSBAZW1waHtBcmd1 bWVudHN9OgorQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMTUgLjcw CitAaXRlbSBAdmFye1h9IEB0YWIgVGhlIHR5cGUgc2hhbGwgYmUgQGNvZGV7 UkVBTH0gb3IgQGNvZGV7Q09NUExFWH07CitpZiBAdmFye1l9IGlzIHByZXNl bnQsIEB2YXJ7WH0gc2hhbGwgYmUgUkVBTC4KK0BpdGVtIEB2YXJ7WX0gc2hh bGwgYmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyBAdmFye1h9Lgor QGVuZCBtdWx0aXRhYmxlCisKK0BpdGVtIEBlbXBoe1JldHVybiB2YWx1ZX06 CitUaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGtp bmQgYXMgQHZhcntYfS4KK0lmIEB2YXJ7WX0gaXMgcHJlc2VudCwgdGhlIHJl c3VsdCBpcyBpZGVudGljYWwgdG8gQGNvZGV7QVRBTkQyKFksWCl9LgorT3Ro ZXJ3aXNlLCBpdCBpcyB0aGUgYXJjdXMgdGFuZ2VudCBvZiBAdmFye1h9LCB3 aGVyZSB0aGUgcmVhbCBwYXJ0IG9mCit0aGUgcmVzdWx0IGlzIGluIGRlZ3Jl ZXMgYW5kIGxpZXMgaW4gdGhlIHJhbmdlCitAbWF0aHstOTAgXGxlcSBcUmUg XGF0YW5kKHgpIFxsZXEgOTB9LgorCitAaXRlbSBAZW1waHtFeGFtcGxlfToK K0BzbWFsbGV4YW1wbGUKK3Byb2dyYW0gdGVzdF9hdGFuZAorICByZWFsKDgp IDo6IHggPSAyLjg2Nl84CisgIHggPSBhdGFuZCh4KQorZW5kIHByb2dyYW0g dGVzdF9hdGFuZAorQGVuZCBzbWFsbGV4YW1wbGUKKworQGl0ZW0gQGVtcGh7 U3BlY2lmaWMgbmFtZXN9OgorQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9u cyAuMjAgLjIwIC4yMCAuMjUKK0BpdGVtIE5hbWUgICAgICAgICAgICBAdGFi IEFyZ3VtZW50ICAgICAgICAgIEB0YWIgUmV0dXJuIHR5cGUgICAgICAgQHRh YiBTdGFuZGFyZAorQGl0ZW0gQGNvZGV7QVRBTkQoWCl9ICBAdGFiIEBjb2Rl e1JFQUwoNCkgWH0gIEB0YWIgQGNvZGV7UkVBTCg0KX0gICAgQHRhYiBHTlUg RXh0ZW5zaW9uCitAaXRlbSBAY29kZXtEQVRBTkQoWCl9IEB0YWIgQGNvZGV7 UkVBTCg4KSBYfSAgQHRhYiBAY29kZXtSRUFMKDgpfSAgICBAdGFiIEdOVSBF eHRlbnNpb24KK0BlbmQgbXVsdGl0YWJsZQorCitAaXRlbSBAZW1waHtTZWUg YWxzb306CitJbnZlcnNlIGZ1bmN0aW9uOiBAcmVme1RBTkR9CitSYWRpYW5z IGZ1bmN0aW9uOiBAcmVme0FUQU59CiAKIEBlbmQgdGFibGUKIApAQCAtMTQ3 Myw3ICsxNjU5LDcgQEAgSW52ZXJzZSBmdW5jdGlvbjogQHJlZntUQU59CiBA dGFibGUgQGFzaXMKIEBpdGVtIEBlbXBoe0Rlc2NyaXB0aW9ufToKIEBjb2Rl e0FUQU4yKFksIFgpfSBjb21wdXRlcyB0aGUgcHJpbmNpcGFsIHZhbHVlIG9m IHRoZSBhcmd1bWVudAotZnVuY3Rpb24gb2YgdGhlIGNvbXBsZXggbnVtYmVy IEBtYXRoe1ggKyBpIFl9LiBUaGlzIGZ1bmN0aW9uIGNhbgorZnVuY3Rpb24g b2YgdGhlIGNvbXBsZXggbnVtYmVyIEBtYXRoe1ggKyBpIFl9LiAgVGhpcyBm dW5jdGlvbiBjYW4KIGJlIHVzZWQgdG8gdHJhbnNmb3JtIGZyb20gQ2FydGVz aWFuIGludG8gcG9sYXIgY29vcmRpbmF0ZXMgYW5kCiBhbGxvd3MgdG8gZGV0 ZXJtaW5lIHRoZSBhbmdsZSBpbiB0aGUgY29ycmVjdCBxdWFkcmFudC4KIApA QCAtMTUxOCw2ICsxNzA0LDc1IEBAIGVuZCBwcm9ncmFtIHRlc3RfYXRhbjIK IEBpdGVtIEBjb2Rle0FUQU4yKFgsIFkpfSAgQHRhYiBAY29kZXtSRUFMKDQp IFgsIFl9IEB0YWIgQGNvZGV7UkVBTCg0KX0gQHRhYiBGb3J0cmFuIDc3IGFu ZCBsYXRlcgogQGl0ZW0gQGNvZGV7REFUQU4yKFgsIFkpfSBAdGFiIEBjb2Rl e1JFQUwoOCkgWCwgWX0gQHRhYiBAY29kZXtSRUFMKDgpfSBAdGFiIEZvcnRy YW4gNzcgYW5kIGxhdGVyCiBAZW5kIG11bHRpdGFibGUKKworQGl0ZW0gQGVt cGh7U2VlIGFsc299OgorQWxpYXM6IEByZWZ7QVRBTn0KK0RlZ3JlZXMgZnVu Y3Rpb246IEByZWZ7QVRBTjJEfQorCitAZW5kIHRhYmxlCisKKworCitAbm9k ZSBBVEFOMkQKK0BzZWN0aW9uIEBjb2Rle0FUQU4yRH0gLS0tIEFyY3Rhbmdl bnQgZnVuY3Rpb24sIGRlZ3JlZXMKK0BmbmluZGV4IEFUQU4yRAorQGZuaW5k ZXggREFUQU4yRAorQGNpbmRleCB0cmlnb25vbWV0cmljIGZ1bmN0aW9uLCB0 YW5nZW50LCBpbnZlcnNlLCBkZWdyZWVzCitAY2luZGV4IHRhbmdlbnQsIGlu dmVyc2UsIGRlZ3JlZXMKKworQHRhYmxlIEBhc2lzCitAaXRlbSBAZW1waHtE ZXNjcmlwdGlvbn06CitAY29kZXtBVEFOMkQoWSwgWCl9IGNvbXB1dGVzIHRo ZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGFyZ3VtZW50CitmdW5jdGlvbiBv ZiB0aGUgY29tcGxleCBudW1iZXIgQG1hdGh7WCArIGkgWX0gaW4gZGVncmVl cy4gIFRoaXMgZnVuY3Rpb24gY2FuCitiZSB1c2VkIHRvIHRyYW5zZm9ybSBm cm9tIENhcnRlc2lhbiBpbnRvIHBvbGFyIGNvb3JkaW5hdGVzIGFuZAorYWxs b3dzIHRvIGRldGVybWluZSB0aGUgYW5nbGUgaW4gdGhlIGNvcnJlY3QgcXVh ZHJhbnQuCisKK0BpdGVtIEBlbXBoe1N0YW5kYXJkfToKK0dOVSBFeHRlbnNp b24sIGVuYWJsZWQgd2l0aCBAb3B0aW9uey1mZGVjLW1hdGh9LgorCitAaXRl bSBAZW1waHtDbGFzc306CitFbGVtZW50YWwgZnVuY3Rpb24KKworQGl0ZW0g QGVtcGh7U3ludGF4fToKK0Bjb2Rle1JFU1VMVCA9IEFUQU4yRChZLCBYKX0K KworQGl0ZW0gQGVtcGh7QXJndW1lbnRzfToKK0BtdWx0aXRhYmxlIEBjb2x1 bW5mcmFjdGlvbnMgLjE1IC43MAorQGl0ZW0gQHZhcntZfSBAdGFiIFRoZSB0 eXBlIHNoYWxsIGJlIEBjb2Rle1JFQUx9LgorQGl0ZW0gQHZhcntYfSBAdGFi IFRoZSB0eXBlIGFuZCBraW5kIHR5cGUgcGFyYW1ldGVyIHNoYWxsIGJlIHRo ZSBzYW1lIGFzIEB2YXJ7WX0uCitJZiBAdmFye1l9IGlzIHplcm8sIHRoZW4g QHZhcntYfSBtdXN0IGJlIG5vbnplcm8uCitAZW5kIG11bHRpdGFibGUKKwor QGl0ZW0gQGVtcGh7UmV0dXJuIHZhbHVlfToKK1RoZSByZXR1cm4gdmFsdWUg aGFzIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgdHlwZSBwYXJhbWV0ZXIgYXMg QHZhcntZfS4gSXQKK2lzIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGNv bXBsZXggbnVtYmVyIEBtYXRoe1ggKyBpIFl9LiAgSWYgQHZhcntYfQoraXMg bm9uemVybywgdGhlbiBpdCBsaWVzIGluIHRoZSByYW5nZSBAbWF0aHstMTgw IFxsZSBcYXRhbiAoeCkgXGxlcSAxODB9LgorVGhlIHNpZ24gaXMgcG9zaXRp dmUgaWYgQHZhcntZfSBpcyBwb3NpdGl2ZS4gIElmIEB2YXJ7WX0gaXMgemVy bywgdGhlbgordGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvIGlmIEB2YXJ7WH0g aXMgc3RyaWN0bHkgcG9zaXRpdmUsIEBtYXRoezE4MH0gaWYKK0B2YXJ7WH0g aXMgbmVnYXRpdmUgYW5kIEB2YXJ7WX0gaXMgcG9zaXRpdmUgemVybyAob3Ig dGhlIHByb2Nlc3NvciBkb2VzCitub3QgaGFuZGxlIHNpZ25lZCB6ZXJvcyks IGFuZCBAbWF0aHstMTgwfSBpZiBAdmFye1h9IGlzIG5lZ2F0aXZlIGFuZAor QHZhcntZfSBpcyBuZWdhdGl2ZSB6ZXJvLiAgRmluYWxseSwgaWYgQHZhcntY fSBpcyB6ZXJvLCB0aGVuIHRoZQorbWFnbml0dWRlIG9mIHRoZSByZXN1bHQg aXMgQG1hdGh7OTB9LgorCitAaXRlbSBAZW1waHtFeGFtcGxlfToKK0BzbWFs bGV4YW1wbGUKK3Byb2dyYW0gdGVzdF9hdGFuMmQKKyAgcmVhbCg0KSA6OiB4 ID0gMS5lMF80LCB5ID0gMC41ZTBfNAorICB4ID0gYXRhbjJkKHkseCkKK2Vu ZCBwcm9ncmFtIHRlc3RfYXRhbjJkCitAZW5kIHNtYWxsZXhhbXBsZQorCitA aXRlbSBAZW1waHtTcGVjaWZpYyBuYW1lc306CitAbXVsdGl0YWJsZSBAY29s dW1uZnJhY3Rpb25zIC4yMCAuMjAgLjIwIC4yNQorQGl0ZW0gTmFtZSAgICAg ICAgICAgICAgICBAdGFiIEFyZ3VtZW50ICAgICAgICAgICAgQHRhYiBSZXR1 cm4gdHlwZSAgICBAdGFiIFN0YW5kYXJkCitAaXRlbSBAY29kZXtBVEFOMkQo WCwgWSl9ICBAdGFiIEBjb2Rle1JFQUwoNCkgWCwgWX0gQHRhYiBAY29kZXtS RUFMKDQpfSBAdGFiIEdOVSBFeHRlbnNpb24KK0BpdGVtIEBjb2Rle0RBVEFO MkQoWCwgWSl9IEB0YWIgQGNvZGV7UkVBTCg4KSBYLCBZfSBAdGFiIEBjb2Rl e1JFQUwoOCl9IEB0YWIgR05VIEV4dGVuc2lvbgorQGVuZCBtdWx0aXRhYmxl CisKK0BpdGVtIEBlbXBoe1NlZSBhbHNvfToKK0FsaWFzOiBAcmVme0FUQU5E fQorUmFkaWFucyBmdW5jdGlvbjogQHJlZntBVEFOMn0KKwogQGVuZCB0YWJs ZQogCiAKQEAgLTM4OTUsNiArNDE1MCw2NyBAQCBlbmQgcHJvZ3JhbSB0ZXN0 X2NvcwogCiBAaXRlbSBAZW1waHtTZWUgYWxzb306CiBJbnZlcnNlIGZ1bmN0 aW9uOiBAcmVme0FDT1N9CitEZWdyZWVzIGZ1bmN0aW9uOiBAcmVme0NPU0R9 CisKK0BlbmQgdGFibGUKKworCisKK0Bub2RlIENPU0QKK0BzZWN0aW9uIEBj b2Rle0NPU0R9IC0tLSBDb3NpbmUgZnVuY3Rpb24sIGRlZ3JlZXMKK0Bmbmlu ZGV4IENPU0QKK0BmbmluZGV4IERDT1NECitAZm5pbmRleCBDQ09TRAorQGZu aW5kZXggWkNPU0QKK0BmbmluZGV4IENEQ09TRAorQGNpbmRleCB0cmlnb25v bWV0cmljIGZ1bmN0aW9uLCBjb3NpbmUsIGRlZ3JlZXMKK0BjaW5kZXggY29z aW5lLCBkZWdyZWVzCisKK0B0YWJsZSBAYXNpcworQGl0ZW0gQGVtcGh7RGVz Y3JpcHRpb259OgorQGNvZGV7Q09TRChYKX0gY29tcHV0ZXMgdGhlIGNvc2lu ZSBvZiBAdmFye1h9IGluIGRlZ3JlZXMuCisKK0BpdGVtIEBlbXBoe1N0YW5k YXJkfToKK0dOVSBFeHRlbnNpb24sIGVuYWJsZWQgd2l0aCBAb3B0aW9uey1m ZGVjLW1hdGh9LgorCitAaXRlbSBAZW1waHtDbGFzc306CitFbGVtZW50YWwg ZnVuY3Rpb24KKworQGl0ZW0gQGVtcGh7U3ludGF4fToKK0Bjb2Rle1JFU1VM VCA9IENPU0QoWCl9CisKK0BpdGVtIEBlbXBoe0FyZ3VtZW50c306CitAbXVs dGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4xNSAuNzAKK0BpdGVtIEB2YXJ7 WH0gQHRhYiBUaGUgdHlwZSBzaGFsbCBiZSBAY29kZXtSRUFMfSBvcgorQGNv ZGV7Q09NUExFWH0uCitAZW5kIG11bHRpdGFibGUKKworQGl0ZW0gQGVtcGh7 UmV0dXJuIHZhbHVlfToKK1RoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNh bWUgdHlwZSBhbmQga2luZCBhcyBAdmFye1h9LiBUaGUgcmVhbCBwYXJ0Citv ZiB0aGUgcmVzdWx0IGlzIGluIGRlZ3JlZXMuICBJZiBAdmFye1h9IGlzIG9m IHRoZSB0eXBlIEBjb2Rle1JFQUx9LAordGhlIHJldHVybiB2YWx1ZSBsaWVz IGluIHRoZSByYW5nZSBAbWF0aHsgLTEgXGxlcSBcY29zZCAoeCkgXGxlcSAx fS4KKworQGl0ZW0gQGVtcGh7RXhhbXBsZX06CitAc21hbGxleGFtcGxlCitw cm9ncmFtIHRlc3RfY29zZAorICByZWFsIDo6IHggPSAwLjAKKyAgeCA9IGNv c2QoeCkKK2VuZCBwcm9ncmFtIHRlc3RfY29zZAorQGVuZCBzbWFsbGV4YW1w bGUKKworQGl0ZW0gQGVtcGh7U3BlY2lmaWMgbmFtZXN9OgorQG11bHRpdGFi bGUgQGNvbHVtbmZyYWN0aW9ucyAuMjAgLjIwIC4yMCAuMjUKK0BpdGVtIE5h bWUgICAgICAgICAgICBAdGFiIEFyZ3VtZW50ICAgICAgICAgICAgQHRhYiBS ZXR1cm4gdHlwZSAgICAgICBAdGFiIFN0YW5kYXJkCitAaXRlbSBAY29kZXtD T1NEKFgpfSAgIEB0YWIgQGNvZGV7UkVBTCg0KSBYfSAgICBAdGFiIEBjb2Rl e1JFQUwoNCl9ICAgIEB0YWIgR05VIEV4dGVuc2lvbgorQGl0ZW0gQGNvZGV7 RENPU0QoWCl9ICBAdGFiIEBjb2Rle1JFQUwoOCkgWH0gICAgQHRhYiBAY29k ZXtSRUFMKDgpfSAgICBAdGFiIEdOVSBFeHRlbnNpb24KK0BpdGVtIEBjb2Rl e0NDT1NEKFgpfSAgQHRhYiBAY29kZXtDT01QTEVYKDQpIFh9IEB0YWIgQGNv ZGV7Q09NUExFWCg0KX0gQHRhYiBHTlUgRXh0ZW5zaW9uCitAaXRlbSBAY29k ZXtaQ09TRChYKX0gIEB0YWIgQGNvZGV7Q09NUExFWCg4KSBYfSBAdGFiIEBj b2Rle0NPTVBMRVgoOCl9IEB0YWIgR05VIGV4dGVuc2lvbgorQGl0ZW0gQGNv ZGV7Q0RDT1NEKFgpfSBAdGFiIEBjb2Rle0NPTVBMRVgoOCkgWH0gQHRhYiBA Y29kZXtDT01QTEVYKDgpfSBAdGFiIEdOVSBleHRlbnNpb24KK0BlbmQgbXVs dGl0YWJsZQorCitAaXRlbSBAZW1waHtTZWUgYWxzb306CitJbnZlcnNlIGZ1 bmN0aW9uOiBAcmVme0FDT1NEfQorUmFkaWFucyBmdW5jdGlvbjogQHJlZntD T1N9CiAKIEBlbmQgdGFibGUKIApAQCAtMzk1NCw2ICs0MjcwLDEwOSBAQCBJ bnZlcnNlIGZ1bmN0aW9uOiBAcmVme0FDT1NIfQogCiAKIAorQG5vZGUgQ09U QU4KK0BzZWN0aW9uIEBjb2Rle0NPVEFOfSAtLS0gQ290YW5nZW50IGZ1bmN0 aW9uCitAZm5pbmRleCBDT1RBTgorQGZuaW5kZXggRENPVEFOCitAY2luZGV4 IHRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIGNvdGFuZ2VudAorQGNpbmRleCBj b3RhbmdlbnQKKworQHRhYmxlIEBhc2lzCitAaXRlbSBAZW1waHtEZXNjcmlw dGlvbn06CitAY29kZXtDT1RBTihYKX0gY29tcHV0ZXMgdGhlIGNvdGFuZ2Vu dCBvZiBAdmFye1h9LiBFcXVpdmFsZW50IHRvIEBjb2Rle0NPUyh4KX0KK2Rp dmlkZWQgYnkgQGNvZGV7U0lOKHgpfSwgb3IgQGNvZGV7MSAvIFRBTih4KX0u CisKK0BpdGVtIEBlbXBoe1N0YW5kYXJkfToKK0dOVSBFeHRlbnNpb24sIGVu YWJsZWQgd2l0aCBAb3B0aW9uey1mZGVjLW1hdGh9LgorCitAaXRlbSBAZW1w aHtDbGFzc306CitFbGVtZW50YWwgZnVuY3Rpb24KKworQGl0ZW0gQGVtcGh7 U3ludGF4fToKK0Bjb2Rle1JFU1VMVCA9IENPVEFOKFgpfQorCitAaXRlbSBA ZW1waHtBcmd1bWVudHN9OgorQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9u cyAuMTUgLjcwCitAaXRlbSBAdmFye1h9IEB0YWIgVGhlIHR5cGUgc2hhbGwg YmUgQGNvZGV7UkVBTH0gb3IgQGNvZGV7Q09NUExFWH0uCitAZW5kIG11bHRp dGFibGUKKworQGl0ZW0gQGVtcGh7UmV0dXJuIHZhbHVlfToKK1RoZSByZXR1 cm4gdmFsdWUgaGFzIHNhbWUgdHlwZSBhbmQga2luZCBhcyBAdmFye1h9LCBh bmQgaXRzIHZhbHVlIGlzIGluIHJhZGlhbnMuCisKK0BpdGVtIEBlbXBoe0V4 YW1wbGV9OgorQHNtYWxsZXhhbXBsZQorcHJvZ3JhbSB0ZXN0X2NvdGFuCisg IHJlYWwoOCkgOjogeCA9IDAuMTY1XzgKKyAgeCA9IGNvdGFuKHgpCitlbmQg cHJvZ3JhbSB0ZXN0X2NvdGFuCitAZW5kIHNtYWxsZXhhbXBsZQorCitAaXRl bSBAZW1waHtTcGVjaWZpYyBuYW1lc306CitAbXVsdGl0YWJsZSBAY29sdW1u ZnJhY3Rpb25zIC4yMCAuMjAgLjIwIC4yNQorQGl0ZW0gTmFtZSAgICAgICAg ICAgIEB0YWIgQXJndW1lbnQgICAgICAgICAgQHRhYiBSZXR1cm4gdHlwZSAg ICAgQHRhYiBTdGFuZGFyZAorQGl0ZW0gQGNvZGV7Q09UQU4oWCl9ICAgQHRh YiBAY29kZXtSRUFMKDQpIFh9ICBAdGFiIEBjb2Rle1JFQUwoNCl9ICBAdGFi IEdOVSBFeHRlbnNpb24KK0BpdGVtIEBjb2Rle0RDT1RBTihYKX0gIEB0YWIg QGNvZGV7UkVBTCg4KSBYfSAgQHRhYiBAY29kZXtSRUFMKDgpfSAgQHRhYiBH TlUgRXh0ZW5zaW9uCitAZW5kIG11bHRpdGFibGUKKworQGl0ZW0gQGVtcGh7 U2VlIGFsc299OgorQ29udmVyc2UgZnVuY3Rpb246IEByZWZ7VEFOfQorRGVn cmVlcyBmdW5jdGlvbjogQHJlZntDT1RBTkR9CitAZW5kIHRhYmxlCisKKwor CitAbm9kZSBDT1RBTkQKK0BzZWN0aW9uIEBjb2Rle0NPVEFORH0gLS0tIENv dGFuZ2VudCBmdW5jdGlvbiwgZGVncmVlcworQGZuaW5kZXggQ09UQU5ECitA Zm5pbmRleCBEQ09UQU5ECitAY2luZGV4IHRyaWdvbm9tZXRyaWMgZnVuY3Rp b24sIGNvdGFuZ2VudCwgZGVncmVlcworQGNpbmRleCBjb3RhbmdlbnQsIGRl Z3JlZXMKKworQHRhYmxlIEBhc2lzCitAaXRlbSBAZW1waHtEZXNjcmlwdGlv bn06CitAY29kZXtDT1RBTkQoWCl9IGNvbXB1dGVzIHRoZSBjb3RhbmdlbnQg b2YgQHZhcntYfSBpbiBkZWdyZWVzLiAgRXF1aXZhbGVudCB0bworQGNvZGV7 Q09TRCh4KX0gZGl2aWRlZCBieSBAY29kZXtTSU5EKHgpfSwgb3IgQGNvZGV7 MSAvIFRBTkQoeCl9LgorCitAaXRlbSBAZW1waHtTdGFuZGFyZH06CitHTlUg RXh0ZW5zaW9uLCBlbmFibGVkIHdpdGggQG9wdGlvbnstZmRlYy1tYXRofS4K KworQGl0ZW0gQGVtcGh7Q2xhc3N9OgorRWxlbWVudGFsIGZ1bmN0aW9uCisK K0BpdGVtIEBlbXBoe1N5bnRheH06CitAY29kZXtSRVNVTFQgPSBDT1RBTkQo WCl9CisKK0BpdGVtIEBlbXBoe0FyZ3VtZW50c306CitAbXVsdGl0YWJsZSBA Y29sdW1uZnJhY3Rpb25zIC4xNSAuNzAKK0BpdGVtIEB2YXJ7WH0gQHRhYiBU aGUgdHlwZSBzaGFsbCBiZSBAY29kZXtSRUFMfSBvciBAY29kZXtDT01QTEVY fS4KK0BlbmQgbXVsdGl0YWJsZQorCitAaXRlbSBAZW1waHtSZXR1cm4gdmFs dWV9OgorVGhlIHJldHVybiB2YWx1ZSBoYXMgc2FtZSB0eXBlIGFuZCBraW5k IGFzIEB2YXJ7WH0sIGFuZCBpdHMgdmFsdWUgaXMgaW4gZGVncmVlcy4KKwor QGl0ZW0gQGVtcGh7RXhhbXBsZX06CitAc21hbGxleGFtcGxlCitwcm9ncmFt IHRlc3RfY290YW5kCisgIHJlYWwoOCkgOjogeCA9IDAuMTY1XzgKKyAgeCA9 IGNvdGFuZCh4KQorZW5kIHByb2dyYW0gdGVzdF9jb3RhbmQKK0BlbmQgc21h bGxleGFtcGxlCisKK0BpdGVtIEBlbXBoe1NwZWNpZmljIG5hbWVzfToKK0Bt dWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjIwIC4yMCAuMjAgLjI1CitA aXRlbSBOYW1lICAgICAgICAgICAgQHRhYiBBcmd1bWVudCAgICAgICAgICBA dGFiIFJldHVybiB0eXBlICAgICBAdGFiIFN0YW5kYXJkCitAaXRlbSBAY29k ZXtDT1RBTkQoWCl9ICAgQHRhYiBAY29kZXtSRUFMKDQpIFh9ICBAdGFiIEBj b2Rle1JFQUwoNCl9ICBAdGFiIEdOVSBFeHRlbnNpb24KK0BpdGVtIEBjb2Rl e0RDT1RBTkQoWCl9ICBAdGFiIEBjb2Rle1JFQUwoOCkgWH0gIEB0YWIgQGNv ZGV7UkVBTCg4KX0gIEB0YWIgR05VIEV4dGVuc2lvbgorQGVuZCBtdWx0aXRh YmxlCisKK0BpdGVtIEBlbXBoe1NlZSBhbHNvfToKK0NvbnZlcnNlIGZ1bmN0 aW9uOiBAcmVme1RBTkR9CitSYWRpYW5zIGZ1bmN0aW9uOiBAcmVme0NPVEFO fQorCitAZW5kIHRhYmxlCisKKworCiBAbm9kZSBDT1VOVAogQHNlY3Rpb24g QGNvZGV7Q09VTlR9IC0tLSBDb3VudCBmdW5jdGlvbgogQGZuaW5kZXggQ09V TlQKQEAgLTEyMzkwLDcgKzEyODA5LDY2IEBAIGVuZCBwcm9ncmFtIHRlc3Rf c2luCiBAZW5kIG11bHRpdGFibGUKIAogQGl0ZW0gQGVtcGh7U2VlIGFsc299 OgotQHJlZntBU0lOfQorSW52ZXJzZSBmdW5jdGlvbjogQHJlZntBU0lOfQor RGVncmVlcyBmdW5jdGlvbjogQHJlZntTSU5EfQorQGVuZCB0YWJsZQorCisK KworQG5vZGUgU0lORAorQHNlY3Rpb24gQGNvZGV7U0lORH0gLS0tIFNpbmUg ZnVuY3Rpb24sIGRlZ3JlZXMKK0BmbmluZGV4IFNJTkQKK0BmbmluZGV4IERT SU5ECitAZm5pbmRleCBDU0lORAorQGZuaW5kZXggWlNJTkQKK0BmbmluZGV4 IENEU0lORAorQGNpbmRleCB0cmlnb25vbWV0cmljIGZ1bmN0aW9uLCBzaW5l LCBkZWdyZWVzCitAY2luZGV4IHNpbmUsIGRlZ3JlZXMKKworQHRhYmxlIEBh c2lzCitAaXRlbSBAZW1waHtEZXNjcmlwdGlvbn06CitAY29kZXtTSU5EKFgp fSBjb21wdXRlcyB0aGUgc2luZSBvZiBAdmFye1h9IGluIGRlZ3JlZXMuCisK K0BpdGVtIEBlbXBoe1N0YW5kYXJkfToKK0dOVSBFeHRlbnNpb24sIGVuYWJs ZWQgd2l0aCBAb3B0aW9uey1mZGVjLW1hdGh9LgorCitAaXRlbSBAZW1waHtD bGFzc306CitFbGVtZW50YWwgZnVuY3Rpb24KKworQGl0ZW0gQGVtcGh7U3lu dGF4fToKK0Bjb2Rle1JFU1VMVCA9IFNJTkQoWCl9CisKK0BpdGVtIEBlbXBo e0FyZ3VtZW50c306CitAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4x NSAuNzAKK0BpdGVtIEB2YXJ7WH0gQHRhYiBUaGUgdHlwZSBzaGFsbCBiZSBA Y29kZXtSRUFMfSBvcgorQGNvZGV7Q09NUExFWH0uCitAZW5kIG11bHRpdGFi bGUKKworQGl0ZW0gQGVtcGh7UmV0dXJuIHZhbHVlfToKK1RoZSByZXR1cm4g dmFsdWUgaGFzIHNhbWUgdHlwZSBhbmQga2luZCBhcyBAdmFye1h9LCBhbmQg aXRzIHZhbHVlIGlzIGluIGRlZ3JlZXMuCisKK0BpdGVtIEBlbXBoe0V4YW1w bGV9OgorQHNtYWxsZXhhbXBsZQorcHJvZ3JhbSB0ZXN0X3NpbmQKKyAgcmVh bCA6OiB4ID0gMC4wCisgIHggPSBzaW5kKHgpCitlbmQgcHJvZ3JhbSB0ZXN0 X3NpbmQKK0BlbmQgc21hbGxleGFtcGxlCisKK0BpdGVtIEBlbXBoe1NwZWNp ZmljIG5hbWVzfToKK0BtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjIw IC4yMCAuMjAgLjI1CitAaXRlbSBOYW1lICAgICAgICAgICAgQHRhYiBBcmd1 bWVudCAgICAgICAgICAgICBAdGFiIFJldHVybiB0eXBlICAgICAgIEB0YWIg U3RhbmRhcmQKK0BpdGVtIEBjb2Rle1NJTkQoWCl9ICAgQHRhYiBAY29kZXtS RUFMKDQpIFh9ICAgICBAdGFiIEBjb2Rle1JFQUwoNCl9ICAgIEB0YWIgR05V IEV4dGVuc2lvbgorQGl0ZW0gQGNvZGV7RFNJTkQoWCl9ICBAdGFiIEBjb2Rl e1JFQUwoOCkgWH0gICAgIEB0YWIgQGNvZGV7UkVBTCg4KX0gICAgQHRhYiBH TlUgRXh0ZW5zaW9uCitAaXRlbSBAY29kZXtDU0lORChYKX0gIEB0YWIgQGNv ZGV7Q09NUExFWCg0KSBYfSAgQHRhYiBAY29kZXtDT01QTEVYKDQpfSBAdGFi IEdOVSBFeHRlbnNpb24KK0BpdGVtIEBjb2Rle1pTSU5EKFgpfSAgQHRhYiBA Y29kZXtDT01QTEVYKDgpIFh9ICBAdGFiIEBjb2Rle0NPTVBMRVgoOCl9IEB0 YWIgR05VIEV4dGVuc2lvbgorQGl0ZW0gQGNvZGV7Q0RTSU5EKFgpfSBAdGFi IEBjb2Rle0NPTVBMRVgoOCkgWH0gIEB0YWIgQGNvZGV7Q09NUExFWCg4KX0g QHRhYiBHTlUgRXh0ZW5zaW9uCitAZW5kIG11bHRpdGFibGUKKworQGl0ZW0g QGVtcGh7U2VlIGFsc299OgorSW52ZXJzZSBmdW5jdGlvbjogQHJlZntBU0lO RH0KK1JhZGlhbnMgZnVuY3Rpb246IEByZWZ7U0lOfQorCiBAZW5kIHRhYmxl CiAKIApAQCAtMTMxNTEsNyArMTM2MjksNyBAQCBFbGVtZW50YWwgZnVuY3Rp b24KIEBlbmQgbXVsdGl0YWJsZQogCiBAaXRlbSBAZW1waHtSZXR1cm4gdmFs dWV9OgotVGhlIHJldHVybiB2YWx1ZSBoYXMgc2FtZSB0eXBlIGFuZCBraW5k IGFzIEB2YXJ7WH0uCitUaGUgcmV0dXJuIHZhbHVlIGhhcyBzYW1lIHR5cGUg YW5kIGtpbmQgYXMgQHZhcntYfSwgYW5kIGl0cyB2YWx1ZSBpcyBpbiByYWRp YW5zLgogCiBAaXRlbSBAZW1waHtFeGFtcGxlfToKIEBzbWFsbGV4YW1wbGUK QEAgLTEzMTY5LDcgKzEzNjQ3LDU4IEBAIGVuZCBwcm9ncmFtIHRlc3RfdGFu CiBAZW5kIG11bHRpdGFibGUKIAogQGl0ZW0gQGVtcGh7U2VlIGFsc299Ogot QHJlZntBVEFOfQorSW52ZXJzZSBmdW5jdGlvbjogQHJlZntBVEFOfQorRGVn cmVlcyBmdW5jdGlvbjogQHJlZntUQU5EfQorQGVuZCB0YWJsZQorCisKKwor QG5vZGUgVEFORAorQHNlY3Rpb24gQGNvZGV7VEFORH0gLS0tIFRhbmdlbnQg ZnVuY3Rpb24sIGRlZ3JlZXMKK0BmbmluZGV4IFRBTkQKK0BmbmluZGV4IERU QU5ECitAY2luZGV4IHRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIHRhbmdlbnQs IGRlZ3JlZXMKK0BjaW5kZXggdGFuZ2VudCwgZGVncmVlcworCitAdGFibGUg QGFzaXMKK0BpdGVtIEBlbXBoe0Rlc2NyaXB0aW9ufToKK0Bjb2Rle1RBTkQo WCl9IGNvbXB1dGVzIHRoZSB0YW5nZW50IG9mIEB2YXJ7WH0gaW4gZGVncmVl cy4KKworQGl0ZW0gQGVtcGh7U3RhbmRhcmR9OgorR05VIEV4dGVuc2lvbiwg ZW5hYmxlZCB3aXRoIEBvcHRpb257LWZkZWMtbWF0aH0uCisKK0BpdGVtIEBl bXBoe0NsYXNzfToKK0VsZW1lbnRhbCBmdW5jdGlvbgorCitAaXRlbSBAZW1w aHtTeW50YXh9OgorQGNvZGV7UkVTVUxUID0gVEFORChYKX0KKworQGl0ZW0g QGVtcGh7QXJndW1lbnRzfToKK0BtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlv bnMgLjE1IC43MAorQGl0ZW0gQHZhcntYfSBAdGFiIFRoZSB0eXBlIHNoYWxs IGJlIEBjb2Rle1JFQUx9IG9yIEBjb2Rle0NPTVBMRVh9LgorQGVuZCBtdWx0 aXRhYmxlCisKK0BpdGVtIEBlbXBoe1JldHVybiB2YWx1ZX06CitUaGUgcmV0 dXJuIHZhbHVlIGhhcyBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgQHZhcntYfSwg YW5kIGl0cyB2YWx1ZSBpcyBpbiBkZWdyZWVzLgorCitAaXRlbSBAZW1waHtF eGFtcGxlfToKK0BzbWFsbGV4YW1wbGUKK3Byb2dyYW0gdGVzdF90YW5kCisg IHJlYWwoOCkgOjogeCA9IDAuMTY1XzgKKyAgeCA9IHRhbmQoeCkKK2VuZCBw cm9ncmFtIHRlc3RfdGFuZAorQGVuZCBzbWFsbGV4YW1wbGUKKworQGl0ZW0g QGVtcGh7U3BlY2lmaWMgbmFtZXN9OgorQG11bHRpdGFibGUgQGNvbHVtbmZy YWN0aW9ucyAuMjAgLjIwIC4yMCAuMjUKK0BpdGVtIE5hbWUgICAgICAgICAg ICBAdGFiIEFyZ3VtZW50ICAgICAgICAgIEB0YWIgUmV0dXJuIHR5cGUgICAg IEB0YWIgU3RhbmRhcmQKK0BpdGVtIEBjb2Rle1RBTkQoWCl9ICAgQHRhYiBA Y29kZXtSRUFMKDQpIFh9ICBAdGFiIEBjb2Rle1JFQUwoNCl9ICBAdGFiIEdO VSBFeHRlbnNpb24KK0BpdGVtIEBjb2Rle0RUQU5EKFgpfSAgQHRhYiBAY29k ZXtSRUFMKDgpIFh9ICBAdGFiIEBjb2Rle1JFQUwoOCl9ICBAdGFiIEdOVSBF eHRlbnNpb24KK0BlbmQgbXVsdGl0YWJsZQorCitAaXRlbSBAZW1waHtTZWUg YWxzb306CitJbnZlcnNlIGZ1bmN0aW9uOiBAcmVme0FUQU5EfQorUmFkaWFu cyBmdW5jdGlvbjogQHJlZntUQU59CiBAZW5kIHRhYmxlCiAKIApkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vaW52b2tlLnRleGkgYi9nY2MvZm9ydHJhbi9p bnZva2UudGV4aQppbmRleCA4M2NhN2Y3Li5hMTRiMjAwIDEwMDY0NAotLS0g YS9nY2MvZm9ydHJhbi9pbnZva2UudGV4aQorKysgYi9nY2MvZm9ydHJhbi9p bnZva2UudGV4aQpAQCAtMjQyLDcgKzI0Miw3IEBAIGZ1bGwgZG9jdW1lbnRh dGlvbi4KIE90aGVyIGZsYWdzIGVuYWJsZWQgYnkgdGhpcyBzd2l0Y2ggYXJl OgogQG9wdGlvbnstZmRvbGxhci1va30gQG9wdGlvbnstZmNyYXktcG9pbnRl cn0gQG9wdGlvbnstZmRlYy1zdHJ1Y3R1cmV9CiBAb3B0aW9uey1mZGVjLWlu dHJpbnNpYy1pbnRzfSBAb3B0aW9uey1mZGVjLXN0YXRpY30gQG9wdGlvbnst ZmZlZWR9Ci1Ab3B0aW9uey1mZGVjLXR5cGUtcHJpbnR9CitAb3B0aW9uey1m ZGVjLXR5cGUtcHJpbnR9IEBvcHRpb257LWZkZWMtbWF0aH0KIAogQGl0ZW0g LWZkZWMtc3RydWN0dXJlCiBAb3BpbmRleCBAY29kZXtmZGVjLXN0cnVjdHVy ZX0KQEAgLTI2MSw2ICsyNjEsMTEgQEAgSklBTkQsIGV0Yy4uLikuIEZvciBh IGNvbXBsZXRlIGxpc3Qgb2YgaW50cmluc2ljcyBzZWUgdGhlIGZ1bGwgZG9j dW1lbnRhdGlvbi4KIEVuYWJsZSB0aGUgdXNlIG9mIEBjb2RleyVMT0N9IChl cXVpdmFsZW50IHRvIEBjb2Rle0xPQ30pIG9uIHRoZQogcmlnaHQtaGFuZC1z aWRlIG9mIGFzc2lnbm1lbnRzLgogCitAaXRlbSAtZmRlYy1tYXRoCitAb3Bp bmRleCBAY29kZXtmZGVjLW1hdGh9CitFbmFibGUgZXh0cmEgbWF0aCBpbnRy aW5zaWNzIHN1Y2ggYXMgQ09UQU4gYW5kIGRlZ3JlZS12YWx1ZWQgdHJpZ29u b21ldHJpYworZnVuY3Rpb25zIChlLmcuIFRBTkQsIEFUQU5ELCBldGMuLi4p LgorCiBAaXRlbSAtZmRlYy1zdGF0aWMKIEBvcGluZGV4IEBjb2Rle2ZkZWMt c3RhdGljfQogRW5hYmxlIERFQy1zdHlsZSBTVEFUSUMgYW5kIEFVVE9NQVRJ QyBhdHRyaWJ1dGVzIHRvIGV4cGxpY2l0bHkgc3BlY2lmeQpkaWZmIC0tZ2l0 IGEvZ2NjL2ZvcnRyYW4vaXJlc29sdmUuYyBiL2djYy9mb3J0cmFuL2lyZXNv bHZlLmMKaW5kZXggZWNlYTFjMy4uYWFiOGVjOCAxMDA2NDQKLS0tIGEvZ2Nj L2ZvcnRyYW4vaXJlc29sdmUuYworKysgYi9nY2MvZm9ydHJhbi9pcmVzb2x2 ZS5jCkBAIC02NzMsNiArNjczLDg3IEBAIGdmY19yZXNvbHZlX2Nvc2ggKGdm Y19leHByICpmLCBnZmNfZXhwciAqeCkKIH0KIAogCisvKiBPdXIgcmVwbGFj ZW1lbnQgb2YgZWxlbWVudHMgb2YgYSB0cmlnIGNhbGwgd2l0aCBhbiBFWFBS X09QIChlLmcuCisgICBtdWx0aXBseWluZyB0aGUgcmVzdWx0IG9yIG9wZXJh bmRzIGJ5IGEgZmFjdG9yIHRvIGNvbnZlcnQgdG8vZnJvbSBkZWdyZWVzKQor ICAgd2lsbCBjYXVzZSB0aGUgcmVzb2x2ZV8qIGZ1bmN0aW9uIHRvIGJlIGlu dm9rZWQgYWdhaW4gd2hlbiByZXNvbHZpbmcgdGhlCisgICBmcmVzaGx5IGNy ZWF0ZWQgRVhQUl9PUC4gIFNlZSBnZmNfcmVzb2x2ZV90cmlnZCwgZ2ZjX3Jl c29sdmVfYXRyaWdkLAorICAgZ2ZjX3Jlc29sdmVfY290YW4uICBXZSBtdXN0 IG9ic2VydmUgdGhpcyBhbmQgYXZvaWQgcmVjdXJzaXZlbHkgY3JlYXRpbmcK KyAgIGxheWVycyBvZiBuZXN0ZWQgRVhQUl9PUCBleHByZXNzaW9ucy4gICov CisKK3N0YXRpYyBib29sCitpc190cmlnX3Jlc29sdmVkIChnZmNfZXhwciAq ZikKK3sKKyAgLyogV2Uga25vdyB3ZSd2ZSBhbHJlYWR5IHJlc29sdmVkIHRo ZSBmdW5jdGlvbiBpZiB3ZSBzZWUgdGhlIGxpYiBjYWxsCisgICAgIHN0YXJ0 aW5nIHdpdGggJ19fJy4gICovCisgIHJldHVybiBmLT52YWx1ZS5mdW5jdGlv bi5uYW1lICE9IE5VTEwKKyAgICAmJiAwID09IHN0cm5jbXAgKCJfXyIsIGYt PnZhbHVlLmZ1bmN0aW9uLm5hbWUsIDIpOworfQorCisvKiBSZXR1cm4gYSBz aGFsbG93IGNvcHkgb2YgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gZi4gIFRo ZSBvcmlnaW5hbCBleHByZXNzaW9uCisgICBoYXMgaXRzIHBvaW50ZXJzIGNs ZWFyZWQgc28gdGhhdCBpdCBtYXkgYmUgZnJlZWQgd2l0aG91dCBhZmZlY3Rp bmcgdGhlCisgICBzaGFsbG93IGNvcHkuICBUaGlzIGlzIHNpbWlsYXIgdG8g Z2ZjX2NvcHlfZXhwciwgYnV0IGRvZXNuJ3QgcGVyZm9ybSBhIGRlZXAKKyAg IGNvcHkgb2YgdGhlIGFyZ3VtZW50IGxpc3QsIGFsbG93aW5nIGl0IHRvIGJl IHJldXNlZCBzb21ld2hlcmUgZWxzZSwKKyAgIHNldHRpbmcgdGhlIGV4cHJl c3Npb24gdXAgbmljZWx5IGZvciBnZmNfcmVwbGFjZV9leHByLiAgKi8KKwor c3RhdGljIGdmY19leHByICoKK2NvcHlfcmVwbGFjZV9mdW5jdGlvbl9zaGFs bG93IChnZmNfZXhwciAqZikKK3sKKyAgZ2ZjX2V4cHIgKmZjb3B5OworICBn ZmNfYWN0dWFsX2FyZ2xpc3QgKmFyZ3M7CisKKyAgLyogVGhlIG9ubHkgdGhp bmcgZGVlcC1jb3BpZWQgaW4gZ2ZjX2NvcHlfZXhwciBpcyBhcmdzLiAgKi8K KyAgYXJncyA9IGYtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbDsKKyAgZi0+dmFs dWUuZnVuY3Rpb24uYWN0dWFsID0gTlVMTDsKKyAgZmNvcHkgPSBnZmNfY29w eV9leHByIChmKTsKKyAgZmNvcHktPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9 IGFyZ3M7CisKKyAgLyogQ2xlYXIgdGhlIG9sZCBmdW5jdGlvbiBzbyB0aGUg c2hhbGxvdyBjb3B5IGlzIG5vdCBhZmZlY3RlZCBpZiB0aGUgb2xkCisgICAg IGV4cHJlc3Npb24gaXMgZnJlZWQuICAqLworICBmLT52YWx1ZS5mdW5jdGlv bi5uYW1lID0gTlVMTDsKKyAgZi0+dmFsdWUuZnVuY3Rpb24uaXN5bSA9IE5V TEw7CisgIGYtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IE5VTEw7CisgIGYt PnZhbHVlLmZ1bmN0aW9uLmVzeW0gPSBOVUxMOworICBmLT5zaGFwZSA9IE5V TEw7CisgIGYtPnJlZiA9IE5VTEw7CisKKyAgcmV0dXJuIGZjb3B5OworfQor CisKKy8qIFJlc29sdmUgY290YW4gPSAxL3Rhbi4gICovCisKK3ZvaWQKK2dm Y19yZXNvbHZlX2NvdGFuIChnZmNfZXhwciAqZiwgZ2ZjX2V4cHIgKngpCit7 CisgIGdmY19leHByICpyZXN1bHQsICpmY29weSwgKm9uZTsKKworICBpZiAo aXNfdHJpZ19yZXNvbHZlZCAoZikpCisgICAgcmV0dXJuOworCisgIGdmY19y ZXNvbHZlX3RhbiAoZiwgeCk7CisgIG9uZSA9IGdmY19nZXRfY29uc3RhbnRf ZXhwciAoZi0+dHMudHlwZSwgZi0+dHMua2luZCwgJmYtPndoZXJlKTsKKwor ICBzd2l0Y2ggKGYtPnRzLnR5cGUpCisgICAgeworICAgICAgY2FzZSBCVF9S RUFMOgorCW1wZnJfc2V0X3VpIChvbmUtPnZhbHVlLnJlYWwsIDEsIEdGQ19S TkRfTU9ERSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgQlRfQ09NUExFWDoK KwltcGNfc2V0X3VpIChvbmUtPnZhbHVlLmNvbXBsZXgsIDEsIEdGQ19NUENf Uk5EX01PREUpOworCWJyZWFrOworCisgICAgICBkZWZhdWx0OgorCWdjY191 bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgLyogUmVwbGFjZSBmIFt0YW5d IHdpdGggMS9mIFtjb3Rhbl0uICAqLworICBmY29weSA9IGNvcHlfcmVwbGFj ZV9mdW5jdGlvbl9zaGFsbG93IChmKTsKKyAgcmVzdWx0ID0gZ2ZjX2Rpdmlk ZSAob25lLCBmY29weSk7CisgIGdmY19yZXBsYWNlX2V4cHIgKGYsIHJlc3Vs dCk7Cit9CisKKwogdm9pZAogZ2ZjX3Jlc29sdmVfY291bnQgKGdmY19leHBy ICpmLCBnZmNfZXhwciAqbWFzaywgZ2ZjX2V4cHIgKmRpbSwgZ2ZjX2V4cHIg KmtpbmQpCiB7CkBAIC0yNTc4LDYgKzI2NTksMTMxIEBAIGdmY19yZXNvbHZl X3RhbmggKGdmY19leHByICpmLCBnZmNfZXhwciAqeCkKIH0KIAogCisvKiBC dWlsZCBhbiBleHByZXNzaW9uIGZvciBjb252ZXJ0aW5nIGRlZ3JlZXMgdG8g cmFkaWFucy4gICovCisKK3N0YXRpYyBnZmNfZXhwciAqCitnZXRfcmFkaWFu cyAoZ2ZjX2V4cHIgKmRlZykKK3sKKyAgbXBmcl90IHRtcDsKKyAgZ2ZjX2V4 cHIgKnJlc3VsdCwgKmZhY3RvcjsKKworICBnY2NfYXNzZXJ0IChkZWctPnRz LnR5cGUgPT0gQlRfUkVBTCk7CisKKyAgZmFjdG9yID0gZ2ZjX2dldF9jb25z dGFudF9leHByIChkZWctPnRzLnR5cGUsIGRlZy0+dHMua2luZCwgJmRlZy0+ d2hlcmUpOworCisgIC8qIFNldCBmYWN0b3IgPSBwaSAvIDE4MC4gICovCisg IG1wZnJfaW5pdCAodG1wKTsKKyAgbXBmcl9zZXRfZCAodG1wLCAxODAuMGws IEdGQ19STkRfTU9ERSk7CisgIG1wZnJfY29uc3RfcGkgKGZhY3Rvci0+dmFs dWUucmVhbCwgR0ZDX1JORF9NT0RFKTsKKyAgbXBmcl9kaXYgKGZhY3Rvci0+ dmFsdWUucmVhbCwgZmFjdG9yLT52YWx1ZS5yZWFsLCB0bXAsIEdGQ19STkRf TU9ERSk7CisgIG1wZnJfY2xlYXIgKHRtcCk7CisKKyAgLyogUmVzdWx0IGlz IHJhZCA9IGRlZyAqIChwaSAvIDE4MCkuICAqLworICByZXN1bHQgPSBnZmNf bXVsdGlwbHkgKGRlZywgZmFjdG9yKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30K KworCisvKiBCdWlsZCBhbiBleHByZXNzaW9uIGZvciBjb252ZXJ0aW5nIHJh ZGlhbnMgdG8gZGVncmVlcy4gICovCisKK3N0YXRpYyBnZmNfZXhwciAqCitn ZXRfZGVncmVlcyAoZ2ZjX2V4cHIgKnJhZCkKK3sKKyAgbXBmcl90IHRtcDsK KyAgZ2ZjX2V4cHIgKnJlc3VsdCwgKmZhY3RvcjsKKworICBnY2NfYXNzZXJ0 IChyYWQtPnRzLnR5cGUgPT0gQlRfUkVBTCk7CisKKyAgZmFjdG9yID0gZ2Zj X2dldF9jb25zdGFudF9leHByIChyYWQtPnRzLnR5cGUsIHJhZC0+dHMua2lu ZCwgJnJhZC0+d2hlcmUpOworCisgIC8qIFNldCBmYWN0b3IgPSAxODAgLyBw aS4gICovCisgIG1wZnJfaW5pdCAodG1wKTsKKyAgbXBmcl9jb25zdF9waSAo dG1wLCBHRkNfUk5EX01PREUpOworICBtcGZyX3NldF9kIChmYWN0b3ItPnZh bHVlLnJlYWwsIDE4MC4wbCwgR0ZDX1JORF9NT0RFKTsKKyAgbXBmcl9kaXYg KGZhY3Rvci0+dmFsdWUucmVhbCwgZmFjdG9yLT52YWx1ZS5yZWFsLCB0bXAs IEdGQ19STkRfTU9ERSk7CisgIG1wZnJfY2xlYXIgKHRtcCk7CisKKyAgLyog UmVzdWx0IGlzIGRlZyA9IHJhZCAqICgxODAgLyBwaSkuICAqLworICByZXN1 bHQgPSBnZmNfbXVsdGlwbHkgKHJhZCwgZmFjdG9yKTsKKyAgcmV0dXJuIHJl c3VsdDsKK30KKworCisvKiBSZXNvbHZlIGEgY2FsbCB0byBhIHRyaWcgZnVu Y3Rpb24uICAqLworCitzdGF0aWMgdm9pZAorcmVzb2x2ZV90cmlnX2NhbGwg KGdmY19leHByICpmLCBnZmNfZXhwciAqeCkKK3sKKyAgc3dpdGNoIChmLT52 YWx1ZS5mdW5jdGlvbi5pc3ltLT5pZCkKKyAgICB7CisgICAgICBjYXNlIEdG Q19JU1lNX0FDT1M6CisJcmV0dXJuIGdmY19yZXNvbHZlX2Fjb3MgKGYsIHgp OworICAgICAgY2FzZSBHRkNfSVNZTV9BU0lOOgorCXJldHVybiBnZmNfcmVz b2x2ZV9hc2luIChmLCB4KTsKKyAgICAgIGNhc2UgR0ZDX0lTWU1fQVRBTjoK KwlyZXR1cm4gZ2ZjX3Jlc29sdmVfYXRhbiAoZiwgeCk7CisgICAgICBjYXNl IEdGQ19JU1lNX0FUQU4yOgorCS8qIE5CLiBhcmczIGlzIHVudXNlZCBmb3Ig YXRhbjIgKi8KKwlyZXR1cm4gZ2ZjX3Jlc29sdmVfYXRhbjIgKGYsIHgsIE5V TEwpOworICAgICAgY2FzZSBHRkNfSVNZTV9DT1M6CisJcmV0dXJuIGdmY19y ZXNvbHZlX2NvcyAoZiwgeCk7CisgICAgICBjYXNlIEdGQ19JU1lNX0NPVEFO OgorCXJldHVybiBnZmNfcmVzb2x2ZV9jb3RhbiAoZiwgeCk7CisgICAgICBj YXNlIEdGQ19JU1lNX1NJTjoKKwlyZXR1cm4gZ2ZjX3Jlc29sdmVfc2luIChm LCB4KTsKKyAgICAgIGNhc2UgR0ZDX0lTWU1fVEFOOgorCXJldHVybiBnZmNf cmVzb2x2ZV90YW4gKGYsIHgpOworICAgICAgZGVmYXVsdDoKKwlicmVhazsK KyAgICB9CisKKyAgZ2NjX3VucmVhY2hhYmxlICgpOworfQorCisvKiBSZXNv bHZlIGRlZ3JlZSB0cmlnIGZ1bmN0aW9uIGFzIHRyaWdkICh4KSA9IHRyaWcg KHJhZGlhbnMgKHgpKS4gICovCisKK3ZvaWQKK2dmY19yZXNvbHZlX3RyaWdk IChnZmNfZXhwciAqZiwgZ2ZjX2V4cHIgKngpCit7CisgIGlmIChpc190cmln X3Jlc29sdmVkIChmKSkKKyAgICByZXR1cm47CisKKyAgeCA9IGdldF9yYWRp YW5zICh4KTsKKyAgZi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0g eDsKKworICByZXNvbHZlX3RyaWdfY2FsbCAoZiwgeCk7Cit9CisKKworLyog UmVzb2x2ZSBkZWdyZWUgaW52ZXJzZSB0cmlnIGZ1bmN0aW9uIGFzIGF0cmln ZCAoeCkgPSBkZWdyZWVzIChhdHJpZyAoeCkpLiAgKi8KKwordm9pZAorZ2Zj X3Jlc29sdmVfYXRyaWdkIChnZmNfZXhwciAqZiwgZ2ZjX2V4cHIgKngpCit7 CisgIGdmY19leHByICpyZXN1bHQsICpmY29weTsKKworICBpZiAoaXNfdHJp Z19yZXNvbHZlZCAoZikpCisgICAgcmV0dXJuOworCisgIHJlc29sdmVfdHJp Z19jYWxsIChmLCB4KTsKKworICBmY29weSA9IGNvcHlfcmVwbGFjZV9mdW5j dGlvbl9zaGFsbG93IChmKTsKKyAgcmVzdWx0ID0gZ2V0X2RlZ3JlZXMgKGZj b3B5KTsKKyAgZ2ZjX3JlcGxhY2VfZXhwciAoZiwgcmVzdWx0KTsKK30KKwor CisvKiBSZXNvbHZlIGF0YW4yZCh4KSA9IGRlZ3JlZXMoYXRhbjIoeCkpLiAg Ki8KKwordm9pZAorZ2ZjX3Jlc29sdmVfYXRhbjJkIChnZmNfZXhwciAqZiwg Z2ZjX2V4cHIgKngsIGdmY19leHByICp5IEFUVFJJQlVURV9VTlVTRUQpCit7 CisgIC8qIE5vdGUgdGhhdCB3ZSBsb3NlIHRoZSBzZWNvbmQgYXJnIGhlcmUg LSB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGlzCisgICAgIHVudXNlZCBpbiBn ZmNfcmVzb2x2ZV9hdGFuMiBhbnl3YXkuICAqLworICBnZmNfcmVzb2x2ZV9h dHJpZ2QgKGYsIHgpOworfQorCisKIHZvaWQKIGdmY19yZXNvbHZlX2ltYWdl X2luZGV4IChnZmNfZXhwciAqZiwgZ2ZjX2V4cHIgKmFycmF5IEFUVFJJQlVU RV9VTlVTRUQsCiAJCQkgZ2ZjX2V4cHIgKnN1YiBBVFRSSUJVVEVfVU5VU0VE KQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vbGFuZy5vcHQgYi9nY2MvZm9y dHJhbi9sYW5nLm9wdAppbmRleCBkYjI0NDI2Li40NmYwOGY2IDEwMDY0NAot LS0gYS9nY2MvZm9ydHJhbi9sYW5nLm9wdAorKysgYi9nY2MvZm9ydHJhbi9s YW5nLm9wdApAQCAtNDMyLDYgKzQzMiwxMCBAQCBmZGVjLWxvYy1ydmFsCiBG b3J0cmFuIFZhcihmbGFnX2RlY19sb2NfcnZhbCkKIEVuYWJsZSAlTE9DIGFz IGFuIHJ2YWwuCiAKK2ZkZWMtbWF0aAorRm9ydHJhbiBWYXIoZmxhZ19kZWNf bWF0aCkKK0VuYWJsZSBleHRyYSBtYXRoIGludHJpbnNpY3MuCisKIGZkZWMt c3RydWN0dXJlCiBGb3J0cmFuCiBFbmFibGUgc3VwcG9ydCBmb3IgREVDIFNU UlVDVFVSRS9SRUNPUkQuCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9tYXRo YnVpbHRpbnMuZGVmIGIvZ2NjL2ZvcnRyYW4vbWF0aGJ1aWx0aW5zLmRlZgpp bmRleCBmYzdmZGMyLi41NjQ1YTdlIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJh bi9tYXRoYnVpbHRpbnMuZGVmCisrKyBiL2djYy9mb3J0cmFuL21hdGhidWls dGlucy5kZWYKQEAgLTczLDMgKzczLDEwIEBAIE9USEVSX0JVSUxUSU4gKFJJ TlQsICAgICAgInJpbnQiLCAgICAgIDEsICAgICAgIHRydWUpCiBPVEhFUl9C VUlMVElOIChST1VORCwgICAgICJyb3VuZCIsICAgICAxLCAgICAgICB0cnVl KQogT1RIRVJfQlVJTFRJTiAoU0NBTEJOLCAgICAic2NhbGJuIiwgICAgc2Nh bGJuLCAgdHJ1ZSkKIE9USEVSX0JVSUxUSU4gKFRSVU5DLCAgICAgInRydW5j IiwgICAgIDEsICAgICAgIHRydWUpCisKKy8qIE1BVEhfQUxJQVNfQlVJTFRJ TiAoTkVXSUQsIE9MRElELCBOQU1FLCBBUkdUWVBFKQorICAgTkVXSUQgIFRo ZSBuZXcgaWQgb2YgdGhlIGJ1aWx0aW4gKHRvIG1hdGNoIEdGQ19JU1lNXyog aW4gZ2ZvcnRyYW4uaCkKKyAgIE9MRElEICBUaGUgaWQgb2YgdGhlIGFjdHVh bCBidWlsdGluIHRvIGFsaWFzICgiIiBHRkNfSVNZTV8qKQorICAgTkFNRSAg IFRoZSBuYW1lIG9mIHRoZSBuZXcgYnVpbHRpbgorICAgQVJHVFlQRSBUaGUg dHlwZSBvZiB0aGUgYXJndW1lbnRzLCB0byBtYXRjaCB0aGF0IG9mIE9MRElE ICovCitNQVRIX0FMSUFTX0JVSUxUSU4gKENPVEFOLCBUQU4sICJjb3RhbiIs IDApCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9vcHRpb25zLmMgYi9nY2Mv Zm9ydHJhbi9vcHRpb25zLmMKaW5kZXggYjVjNDhhOS4uOGIxNTc0ZiAxMDA2 NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vb3B0aW9ucy5jCisrKyBiL2djYy9mb3J0 cmFuL29wdGlvbnMuYwpAQCAtNTgsNiArNTgsNyBAQCBzZXRfZGVjX2ZsYWdz IChpbnQgdmFsdWUpCiAgICAgZmxhZ19mZWVkID0gdmFsdWU7CiAgICAgZmxh Z19kZWNfdHlwZV9wcmludCA9IHZhbHVlOwogICAgIGZsYWdfZGVjX2xvY19y dmFsID0gdmFsdWU7CisgICAgZmxhZ19kZWNfbWF0aCA9IHZhbHVlOwogfQog CiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3NpbXBsaWZ5LmMgYi9nY2Mv Zm9ydHJhbi9zaW1wbGlmeS5jCmluZGV4IGFkNTQ3YTEuLjEwMWU4MzggMTAw NjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3NpbXBsaWZ5LmMKKysrIGIvZ2NjL2Zv cnRyYW4vc2ltcGxpZnkuYwpAQCAtMTcwNiw2ICsxNzA2LDE0NiBAQCBnZmNf c2ltcGxpZnlfY29uamcgKGdmY19leHByICplKQogICByZXR1cm4gcmFuZ2Vf Y2hlY2sgKHJlc3VsdCwgIkNPTkpHIik7CiB9CiAKKy8qIFJldHVybiB0aGUg c2ltcGxpZmljYXRpb24gb2YgdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gaW4g aWNhbGwsIG9yIE5VTEwKKyAgIGlmIHRoZSBleHByZXNzaW9uIGlzIG5vdCBj b25zdGFudC4gICovCisKK3N0YXRpYyBnZmNfZXhwciAqCitzaW1wbGlmeV90 cmlnX2NhbGwgKGdmY19leHByICppY2FsbCkKK3sKKyAgZ2ZjX2lzeW1faWQg ZnVuYyA9IGljYWxsLT52YWx1ZS5mdW5jdGlvbi5pc3ltLT5pZDsKKyAgZ2Zj X2V4cHIgKnggPSBpY2FsbC0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHBy OworCisgIC8qIFRoZSBhY3R1YWwgc2ltcGxpZmllcnMgd2lsbCByZXR1cm4g TlVMTCBmb3Igbm9uLWNvbnN0YW50IHguICAqLworICBzd2l0Y2ggKGZ1bmMp CisgIHsKKyAgICBjYXNlIEdGQ19JU1lNX0FDT1M6CisJcmV0dXJuIGdmY19z aW1wbGlmeV9hY29zICh4KTsKKyAgICBjYXNlIEdGQ19JU1lNX0FTSU46CisJ cmV0dXJuIGdmY19zaW1wbGlmeV9hc2luICh4KTsKKyAgICBjYXNlIEdGQ19J U1lNX0FUQU46CisJcmV0dXJuIGdmY19zaW1wbGlmeV9hdGFuICh4KTsKKyAg ICBjYXNlIEdGQ19JU1lNX0NPUzoKKwlyZXR1cm4gZ2ZjX3NpbXBsaWZ5X2Nv cyAoeCk7CisgICAgY2FzZSBHRkNfSVNZTV9DT1RBTjoKKwlyZXR1cm4gZ2Zj X3NpbXBsaWZ5X2NvdGFuICh4KTsKKyAgICBjYXNlIEdGQ19JU1lNX1NJTjoK KwlyZXR1cm4gZ2ZjX3NpbXBsaWZ5X3NpbiAoeCk7CisgICAgY2FzZSBHRkNf SVNZTV9UQU46CisJcmV0dXJuIGdmY19zaW1wbGlmeV90YW4gKHgpOworICAg IGRlZmF1bHQ6CisJIGJyZWFrOworICB9CisKKyAgZ2ZjX2ludGVybmFsX2Vy cm9yICgiaW4gc2ltcGxpZnlfdHJpZ19jYWxsKCk6IEJhZCBpbnRyaW5zaWMi KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIENvbnZlcnQgYSBmbG9hdGlu Zy1wb2ludCBudW1iZXIgZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuICAqLwor CitzdGF0aWMgdm9pZAorZGVncmVlc19mIChtcGZyX3QgeCwgbXBfcm5kX3Qg cm5kX21vZGUpCit7CisgICAgbXBmcl90IHRtcDsKKyAgICBtcGZyX2luaXQg KHRtcCk7CisKKyAgICAvKiBTZXQgeCA9IHggKiAxODAuICAqLworICAgIG1w ZnJfc2V0X2QgKHRtcCwgMTgwLjBsLCBybmRfbW9kZSk7CisgICAgbXBmcl9t dWwgKHgsIHgsIHRtcCwgcm5kX21vZGUpOworCisgICAgLyogU2V0IHggPSB4 IC8gcGkuICAqLworICAgIG1wZnJfY29uc3RfcGkgKHRtcCwgcm5kX21vZGUp OworICAgIG1wZnJfZGl2ICh4LCB4LCB0bXAsIHJuZF9tb2RlKTsKKworICAg IG1wZnJfY2xlYXIgKHRtcCk7Cit9CisKKy8qIENvbnZlcnQgYSBmbG9hdGlu Zy1wb2ludCBudW1iZXIgZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuICAqLwor CitzdGF0aWMgdm9pZAorcmFkaWFuc19mIChtcGZyX3QgeCwgbXBfcm5kX3Qg cm5kX21vZGUpCit7CisgICAgbXBmcl90IHRtcDsKKyAgICBtcGZyX2luaXQg KHRtcCk7CisKKyAgICAvKiBTZXQgeCA9IHggKiBwaS4gICovCisgICAgbXBm cl9jb25zdF9waSAodG1wLCBybmRfbW9kZSk7CisgICAgbXBmcl9tdWwgKHgs IHgsIHRtcCwgcm5kX21vZGUpOworCisgICAgLyogU2V0IHggPSB4IC8gMTgw LiAgKi8KKyAgICBtcGZyX3NldF9kICh0bXAsIDE4MC4wbCwgcm5kX21vZGUp OworICAgIG1wZnJfZGl2ICh4LCB4LCB0bXAsIHJuZF9tb2RlKTsKKworICAg IG1wZnJfY2xlYXIgKHRtcCk7Cit9CisKKworLyogQ29udmVydCBhcmd1bWVu dCB0byByYWRpYW5zIGJlZm9yZSBjYWxsaW5nIGEgdHJpZyBmdW5jdGlvbi4g ICovCisKK2dmY19leHByICoKK2dmY19zaW1wbGlmeV90cmlnZCAoZ2ZjX2V4 cHIgKmljYWxsKQoreworICBnZmNfZXhwciAqYXJnOworCisgIGFyZyA9IGlj YWxsLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHI7CisKKyAgaWYgKGFy Zy0+dHMudHlwZSAhPSBCVF9SRUFMKQorICAgIGdmY19pbnRlcm5hbF9lcnJv ciAoImluIGdmY19zaW1wbGlmeV90cmlnZCgpOiBCYWQgdHlwZSIpOworCisg IGlmIChhcmctPmV4cHJfdHlwZSA9PSBFWFBSX0NPTlNUQU5UKQorICAgIC8q IENvbnZlcnQgY29uc3RhbnQgdG8gcmFkaWFucyBiZWZvcmUgcGFzc2luZyBv ZmYgdG8gc2ltcGxpZmllci4gICovCisgICAgcmFkaWFuc19mIChhcmctPnZh bHVlLnJlYWwsIEdGQ19STkRfTU9ERSk7CisKKyAgLyogTGV0IHRoZSB1c3Vh bCBzaW1wbGlmaWVyIHRha2Ugb3ZlciAtIHdlIGp1c3Qgc2ltcGxpZmllZCB0 aGUgYXJnLiAgKi8KKyAgcmV0dXJuIHNpbXBsaWZ5X3RyaWdfY2FsbCAoaWNh bGwpOworfQorCisvKiBDb252ZXJ0IHJlc3VsdCBvZiBhbiBpbnZlcnNlIHRy aWcgZnVuY3Rpb24gdG8gZGVncmVlcy4gICovCisKK2dmY19leHByICoKK2dm Y19zaW1wbGlmeV9hdHJpZ2QgKGdmY19leHByICppY2FsbCkKK3sKKyAgZ2Zj X2V4cHIgKnJlc3VsdDsKKworICBpZiAoaWNhbGwtPnZhbHVlLmZ1bmN0aW9u LmFjdHVhbC0+ZXhwci0+dHMudHlwZSAhPSBCVF9SRUFMKQorICAgIGdmY19p bnRlcm5hbF9lcnJvciAoImluIGdmY19zaW1wbGlmeV9hdHJpZ2QoKTogQmFk IHR5cGUiKTsKKworICAvKiBTZWUgaWYgYW5vdGhlciBzaW1wbGlmaWVyIGhh cyB3b3JrIHRvIGRvIGZpcnN0LiAgKi8KKyAgcmVzdWx0ID0gc2ltcGxpZnlf dHJpZ19jYWxsIChpY2FsbCk7CisKKyAgaWYgKHJlc3VsdCAmJiByZXN1bHQt PmV4cHJfdHlwZSA9PSBFWFBSX0NPTlNUQU5UKQorICB7CisgICAgICAvKiBD b252ZXJ0IGNvbnN0YW50IHRvIGRlZ3JlZXMgYWZ0ZXIgcGFzc2luZyBvZmYg dG8gYWN0dWFsIHNpbXBsaWZpZXIuICAqLworICAgICAgZGVncmVlc19mIChy ZXN1bHQtPnZhbHVlLnJlYWwsIEdGQ19STkRfTU9ERSk7CisgICAgICByZXR1 cm4gcmVzdWx0OworICB9CisKKyAgLyogTGV0IGdmY19yZXNvbHZlX2F0cmln ZCB0YWtlIGNhcmUgb2YgdGhlIG5vbi1jb25zdGFudCBjYXNlLiAgKi8KKyAg cmV0dXJuIE5VTEw7Cit9CisKKy8qIENvbnZlcnQgdGhlIHJlc3VsdCBvZiBh dGFuMiB0byBkZWdyZWVzLiAgKi8KKworZ2ZjX2V4cHIgKgorZ2ZjX3NpbXBs aWZ5X2F0YW4yZCAoZ2ZjX2V4cHIgKnksIGdmY19leHByICp4KQoreworICBn ZmNfZXhwciAqcmVzdWx0OworCisgIGlmICh4LT50cy50eXBlICE9IEJUX1JF QUwgfHwgeS0+dHMudHlwZSAhPSBCVF9SRUFMKQorICAgIGdmY19pbnRlcm5h bF9lcnJvciAoImluIGdmY19zaW1wbGlmeV9hdGFuMmQoKTogQmFkIHR5cGUi KTsKKworICBpZiAoeC0+ZXhwcl90eXBlID09IEVYUFJfQ09OU1RBTlQgJiYg eS0+ZXhwcl90eXBlID09IEVYUFJfQ09OU1RBTlQpCisgICAgeworICAgICAg cmVzdWx0ID0gZ2ZjX3NpbXBsaWZ5X2F0YW4yICh5LCB4KTsKKyAgICAgIGlm IChyZXN1bHQgIT0gTlVMTCkKKwl7CisJICBkZWdyZWVzX2YgKHJlc3VsdC0+ dmFsdWUucmVhbCwgR0ZDX1JORF9NT0RFKTsKKwkgIHJldHVybiByZXN1bHQ7 CisJfQorICAgIH0KKworICAvKiBMZXQgZ2ZjX3Jlc29sdmVfYXRhbjJkIHRh a2UgY2FyZSBvZiB0aGUgbm9uLWNvbnN0YW50IGNhc2UuICAqLworICByZXR1 cm4gTlVMTDsKK30KIAogZ2ZjX2V4cHIgKgogZ2ZjX3NpbXBsaWZ5X2NvcyAo Z2ZjX2V4cHIgKngpCkBAIC02MjQ0LDYgKzYzODQsNDMgQEAgZ2ZjX3NpbXBs aWZ5X3N1bSAoZ2ZjX2V4cHIgKmFycmF5LCBnZmNfZXhwciAqZGltLCBnZmNf ZXhwciAqbWFzaykKIAogCiBnZmNfZXhwciAqCitnZmNfc2ltcGxpZnlfY290 YW4gKGdmY19leHByICp4KQoreworICBnZmNfZXhwciAqcmVzdWx0OworICBt cGNfdCBvbmUsICp2YWw7CisKKyAgaWYgKHgtPmV4cHJfdHlwZSAhPSBFWFBS X0NPTlNUQU5UKQorICAgIHJldHVybiBOVUxMOworCisgIHJlc3VsdCA9IGdm Y19nZXRfY29uc3RhbnRfZXhwciAoeC0+dHMudHlwZSwgeC0+dHMua2luZCwg JngtPndoZXJlKTsKKworICBzd2l0Y2ggKHgtPnRzLnR5cGUpCisgICAgewor ICAgICAgY2FzZSBCVF9SRUFMOgorCW1wZnJfY290IChyZXN1bHQtPnZhbHVl LnJlYWwsIHgtPnZhbHVlLnJlYWwsIEdGQ19STkRfTU9ERSk7CisJYnJlYWs7 CisKKyAgICAgIGNhc2UgQlRfQ09NUExFWDoKKwltcGNfaW5pdDIgKG9uZSwg bXBmcl9nZXRfZGVmYXVsdF9wcmVjICgpKTsKKwltcGNfc2V0X3VpIChvbmUs IDEsIEdGQ19NUENfUk5EX01PREUpOworCisJLyogVGhlcmUgaXMgbm8gYnVp bHRpbiBtcGNfY290LCBzbyBjb21wdXRlIHggPSAxIC8gdGFuICh4KS4gICov CisJdmFsID0gJnJlc3VsdC0+dmFsdWUuY29tcGxleDsKKwltcGNfdGFuICgq dmFsLCAqdmFsLCBHRkNfTVBDX1JORF9NT0RFKTsKKwltcGNfZGl2ICgqdmFs LCBvbmUsICp2YWwsIEdGQ19NUENfUk5EX01PREUpOworCisJbXBjX2NsZWFy IChvbmUpOworCWJyZWFrOworCisgICAgICBkZWZhdWx0OgorCWdjY191bnJl YWNoYWJsZSAoKTsKKyAgICB9CisKKyAgcmV0dXJuIHJhbmdlX2NoZWNrIChy ZXN1bHQsICJDT1RBTiIpOworfQorCisKK2dmY19leHByICoKIGdmY19zaW1w bGlmeV90YW4gKGdmY19leHByICp4KQogewogICBnZmNfZXhwciAqcmVzdWx0 OwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMg Yi9nY2MvZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYwppbmRleCBkM2Y2ODQy Li4yODY4M2I5IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1pbnRy aW5zaWMuYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYwpA QCAtOTcsNiArOTcsMTIgQEAgZ2ZjX2ludHJpbnNpY19tYXBfdDsKICAgICBC VUlMVF9JTl9DICMjIElEICMjIEwsIHRydWUsIHRydWUsIHRydWUsIE5BTUUs IE5VTExfVFJFRSwgTlVMTF9UUkVFLCBcCiAgICAgTlVMTF9UUkVFLCBOVUxM X1RSRUUsIE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsIE5VTExf VFJFRX0sCiAKKyNkZWZpbmUgTUFUSF9BTElBU19CVUlMVElOKE5FV0lELCBJ RCwgTkFNRSwgVFlQRSkgXAorICB7IEdGQ19JU1lNXyAjIyBORVdJRCwgQlVJ TFRfSU5fICMjIElEICMjIEYsIEJVSUxUX0lOXyAjIyBJRCwgXAorICAgIEJV SUxUX0lOXyAjIyBJRCAjIyBMLCBFTkRfQlVJTFRJTlMsIEVORF9CVUlMVElO UywgRU5EX0JVSUxUSU5TLCBcCisgICAgdHJ1ZSwgZmFsc2UsIHRydWUsIE5B TUUsIE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsIE5VTExfVFJF RSwgXAorICAgIE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsIE5V TExfVFJFRX0sCisKICNkZWZpbmUgTElCX0ZVTkNUSU9OKElELCBOQU1FLCBI QVZFX0NPTVBMRVgpIFwKICAgeyBHRkNfSVNZTV8gIyMgSUQsIEVORF9CVUlM VElOUywgRU5EX0JVSUxUSU5TLCBFTkRfQlVJTFRJTlMsIFwKICAgICBFTkRf QlVJTFRJTlMsIEVORF9CVUlMVElOUywgRU5EX0JVSUxUSU5TLCBcCkBAIC0x MjUsNiArMTMxLDcgQEAgc3RhdGljIEdUWSgoKSkgZ2ZjX2ludHJpbnNpY19t YXBfdCBnZmNfaW50cmluc2ljX21hcFtdID0KIH07CiAjdW5kZWYgT1RIRVJf QlVJTFRJTgogI3VuZGVmIExJQl9GVU5DVElPTgorI3VuZGVmIE1BVEhfQUxJ QVNfQlVJTFRJTgogI3VuZGVmIERFRklORV9NQVRIX0JVSUxUSU4KICN1bmRl ZiBERUZJTkVfTUFUSF9CVUlMVElOX0MKIApAQCAtNjU0LDYgKzY2MSw3IEBA IGdmY19idWlsZF9pbnRyaW5zaWNfbGliX2ZuZGVjbHMgKHZvaWQpCiAKICNk ZWZpbmUgREVGSU5FX01BVEhfQlVJTFRJTihJRCwgTkFNRSwgQVJHVFlQRSkK ICNkZWZpbmUgREVGSU5FX01BVEhfQlVJTFRJTl9DKElELCBOQU1FLCBBUkdU WVBFKQorI2RlZmluZSBNQVRIX0FMSUFTX0JVSUxUSU4oTkVXSUQsIElELCBO QU1FLCBUWVBFKQogI2RlZmluZSBMSUJfRlVOQ1RJT04oSUQsIE5BTUUsIEhB VkVfQ09NUExFWCkKIAogICAgIC8qIE9ubHkgdGhlc2UgYnVpbHQtaW5zIGFy ZSBhY3R1YWxseSBuZWVkZWQgaGVyZS4gVGhlc2UgYXJlIHVzZWQgZGlyZWN0 bHkKQEAgLTY2Nyw2ICs2NzUsNyBAQCBnZmNfYnVpbGRfaW50cmluc2ljX2xp Yl9mbmRlY2xzICh2b2lkKQogCiAjdW5kZWYgT1RIRVJfQlVJTFRJTgogI3Vu ZGVmIExJQl9GVU5DVElPTgorI3VuZGVmIE1BVEhfQUxJQVNfQlVJTFRJTgog I3VuZGVmIERFRklORV9NQVRIX0JVSUxUSU4KICN1bmRlZiBERUZJTkVfTUFU SF9CVUlMVElOX0MKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9kZWNfbWF0aC5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2RlY19tYXRoLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kOTk2MGIxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9kZWNfbWF0aC5mOTAKQEAgLTAsMCArMSwyODcg QEAKKyEgeyBkZy1vcHRpb25zICItZmRlYy1tYXRoIiB9CishIHsgZGctZG8g cnVuIH0KKyEKKyEgVGVzdCBleHRyYSBtYXRoIGludHJpbnNpY3Mgb2ZmZXJl ZCBieSAtZmRlYy1tYXRoLgorIQorCisgIHN1YnJvdXRpbmUgY21wZihmMSwg ZjIsIHRvbGVyYW5jZSwgc3RyKQorICAgIGltcGxpY2l0IG5vbmUKKyAgICBy ZWFsKDQpLCBpbnRlbnQoaW4pIDo6IGYxLCBmMiwgdG9sZXJhbmNlCisgICAg Y2hhcmFjdGVyKGxlbj0qKSwgaW50ZW50KGluKSA6OiBzdHIKKyAgICBpZiAo IGFicyhmMiAtIGYxKSAuZ3QuIHRvbGVyYW5jZSApIHRoZW4KKyAgICAgIHdy aXRlICgqLCAnKEEsRjEyLjYsRjEyLjYpJykgc3RyLCBmMSwgZjIKKyAgICAg IGNhbGwgYWJvcnQoKQorICAgIGVuZGlmCisgIGVuZHN1YnJvdXRpbmUKKwor ICBzdWJyb3V0aW5lIGNtcGQoZDEsIGQyLCB0b2xlcmFuY2UsIHN0cikKKyAg ICBpbXBsaWNpdCBub25lCisgICAgcmVhbCg4KSwgaW50ZW50KGluKSA6OiBk MSwgZDIsIHRvbGVyYW5jZQorICAgIGNoYXJhY3RlcihsZW49KiksIGludGVu dChpbikgOjogc3RyCisgICAgaWYgKCBkYWJzKGQyIC0gZDEpIC5ndC4gdG9s ZXJhbmNlICkgdGhlbgorICAgICAgd3JpdGUgKCosICcoQSxGMTIuNixGMTIu NiknKSBzdHIsIGQxLCBkMgorICAgICAgY2FsbCBhYm9ydCgpCisgICAgZW5k aWYKKyAgZW5kc3Vicm91dGluZQorCitpbXBsaWNpdCBub25lCisKKyAgcmVh bCg0KSwgcGFyYW1ldGVyIDo6IHBpX2YgPSAoNC4wXzQgKiAgYXRhbigxLjBf NCkpCisgIHJlYWwoOCksIHBhcmFtZXRlciA6OiBwaV9kID0gKDQuMF84ICog ZGF0YW4oMS4wXzgpKQorICByZWFsKDQpLCBwYXJhbWV0ZXIgOjogcjJkX2Yg PSAxODAuMF80IC8gcGlfZgorICByZWFsKDgpLCBwYXJhbWV0ZXIgOjogcjJk X2QgPSAxODAuMF84IC8gcGlfZAorICByZWFsKDQpLCBwYXJhbWV0ZXIgOjog ZDJyX2YgPSBwaV9mIC8gMTgwLjBfNAorICByZWFsKDgpLCBwYXJhbWV0ZXIg OjogZDJyX2QgPSBwaV9kIC8gMTgwLjBfOAorCishIGlucHV0cworcmVhbCg0 KSA6OiB4ZiwgZl9pMSwgZl9pMgorcmVhbCg4KSA6OiB4ZCwgZF9pMSwgZF9p MgorCishIGV4cGVjdGVkIG91dHB1dHMgZnJvbSAob2UpIGRlZmF1bHQgKG94 ZSkgZXhwcmVzc2lvbgorcmVhbCg0KSA6OiBmX29lLCBmX294ZQorcmVhbCg4 KSA6OiBkX29lLCBkX294ZQorCishIGFjdHVhbCBvdXRwdXRzIGZyb20gKG9h KSBkZWZhdWx0IChvYykgY29uc3RhbnQgKG94KSBleHByZXNzaW9uCityZWFs KDQpIDo6IGZfb2EsIGZfb2MsIGZfb3gKK3JlYWwoOCkgOjogZF9vYSwgZF9v YywgZF9veAorCishIHRvbGVyYW5jZSBvZiB0aGUgYW5zd2VyOiBhc3NlcnQg fGV4cC1hY3R8IDw9IHRvbAorcmVhbCg0KSA6OiBmX3RvbAorcmVhbCg4KSA6 OiBkX3RvbAorCishIGVxdWl2YWxlbmNlIHRvbGVyYW5jZQorZl90b2wgPSA1 ZS01XzQKK2RfdG9sID0gNWUtNl84CisKKyEgbXVsdGlwbGljYXRpb24gZmFj dG9ycyB0byB0ZXN0IG5vbi1jb25zdGFudCBleHByZXNzaW9ucworeGYgPSAy LjBfNAoreGQgPSAyLjBfOAorCishIElucHV0CitmX2kxID0gMC42ODAzMjEy M180CitkX2kxID0gMC42ODAzMjEyM184CisKKyEgRXhwZWN0ZWQKK2Zfb2Ug PSAgICAgcjJkX2YqYWNvcyAoZl9pMSkKK2Zfb3hlID0geGYqcjJkX2YqYWNv cyAoZl9pMSkKK2Rfb2UgPSAgICAgcjJkX2QqZGFjb3MoZF9pMSkKK2Rfb3hl ID0geGQqcjJkX2QqZGFjb3MoZF9pMSkKKworISBBY3R1YWwKK2Zfb2EgPSAg ICBhY29zZCAoZl9pMSkKK2Zfb2MgPSAgICBhY29zZCAoMC42ODAzMjEyM180 KQorZl9veCA9IHhmKmFjb3NkIChmX2kxKQorZF9vYSA9ICAgIGRhY29zZCAo ZF9pMSkKK2Rfb2MgPSAgICBkYWNvc2QgKDAuNjgwMzIxMjNfOCkKK2Rfb3gg PSB4ZCpkYWNvc2QgKDAuNjgwMzIxMjNfOCkKKworY2FsbCBjbXBmKGZfb2Us ICBmX29hLCBmX3RvbCwgIiggKSBhY29zZCIpCitjYWxsIGNtcGYoZl9vZSwg IGZfb2MsIGZfdG9sLCAiKGMpIGFjb3NkIikKK2NhbGwgY21wZihmX294ZSwg Zl9veCwgZl90b2wsICIoeCkgYWNvc2QiKQorY2FsbCBjbXBkKGRfb2UsICBk X29hLCBkX3RvbCwgIiggKSBkYWNvc2QiKQorY2FsbCBjbXBkKGRfb2UsICBk X29jLCBkX3RvbCwgIihjKSBkYWNvc2QiKQorY2FsbCBjbXBkKGRfb3hlLCBk X294LCBkX3RvbCwgIih4KSBkYWNvc2QiKQorCishIElucHV0CitmX2kxID0g NjAuMF80CitkX2kxID0gNjAuMF84CisKKyEgRXhwZWN0ZWQKK2Zfb2UgID0g ICAgY29zIChkMnJfZipmX2kxKQorZl9veGUgPSB4Zipjb3MgKGQycl9mKmZf aTEpCitkX29lICA9ICAgIGNvcyAoZDJyX2QqZF9pMSkKK2Rfb3hlID0geGQq Y29zIChkMnJfZCpkX2kxKQorCishIEFjdHVhbAorZl9vYSA9ICAgICBjb3Nk IChmX2kxKQorZl9vYyA9ICAgICBjb3NkICg2MC4wXzQpCitmX294ID0geGYq IGNvc2QgKGZfaTEpCitkX29hID0gICAgZGNvc2QgKGRfaTEpCitkX29jID0g ICAgZGNvc2QgKDYwLjBfOCkKK2Rfb3ggPSB4ZCogY29zZCAoZF9pMSkKKwor Y2FsbCBjbXBmKGZfb2UsICBmX29hLCBmX3RvbCwgIiggKSBjb3NkIikKK2Nh bGwgY21wZihmX29lLCAgZl9vYywgZl90b2wsICIoYykgY29zZCIpCitjYWxs IGNtcGYoZl9veGUsIGZfb3gsIGZfdG9sLCAiKHgpIGNvc2QiKQorY2FsbCBj bXBkKGRfb2UsICBkX29hLCBkX3RvbCwgIiggKSBkY29zZCIpCitjYWxsIGNt cGQoZF9vZSwgIGRfb2MsIGRfdG9sLCAiKGMpIGRjb3NkIikKK2NhbGwgY21w ZChkX294ZSwgZF9veCwgZF90b2wsICIoeCkgY29zZCIpCisKKyEgSW5wdXQK K2ZfaTEgPSAwLjc5MzQ1MDIxXzQKK2RfaTEgPSAwLjc5MzQ1MDIxXzgKKwor ISBFeHBlY3RlZAorZl9vZSAgPSAgICByMmRfZiphc2luIChmX2kxKQorZl9v eGUgPSB4ZipyMmRfZiphc2luIChmX2kxKQorZF9vZSAgPSAgICByMmRfZCph c2luIChkX2kxKQorZF9veGUgPSB4ZCpyMmRfZCphc2luIChkX2kxKQorCish IEFjdHVhbAorZl9vYSA9ICAgICBhc2luZCAoZl9pMSkKK2Zfb2MgPSAgICAg YXNpbmQgKDAuNzkzNDUwMjFfNCkKK2Zfb3ggPSB4ZiogYXNpbmQgKGZfaTEp CitkX29hID0gICAgZGFzaW5kIChkX2kxKQorZF9vYyA9ICAgIGRhc2luZCAo MC43OTM0NTAyMV84KQorZF9veCA9IHhkKiBhc2luZCAoZF9pMSkKKworY2Fs bCBjbXBmKGZfb2UsICBmX29hLCBmX3RvbCwgIiggKSBhc2luZCIpCitjYWxs IGNtcGYoZl9vZSwgIGZfb2MsIGZfdG9sLCAiKGMpIGFzaW5kIikKK2NhbGwg Y21wZihmX294ZSwgZl9veCwgZl90b2wsICIoeCkgYXNpbmQiKQorY2FsbCBj bXBkKGRfb2UsICBkX29hLCBkX3RvbCwgIiggKSBkYXNpbmQiKQorY2FsbCBj bXBkKGRfb2UsICBkX29jLCBkX3RvbCwgIihjKSBkYXNpbmQiKQorY2FsbCBj bXBkKGRfb3hlLCBkX294LCBkX3RvbCwgIih4KSBhc2luZCIpCisKKyEgSW5w dXQKK2ZfaTEgPSA2MC4wXzQKK2RfaTEgPSA2MC4wXzgKKworISBFeHBlY3Rl ZAorZl9vZSAgPSAgICBzaW4gKGQycl9mKmZfaTEpCitmX294ZSA9IHhmKnNp biAoZDJyX2YqZl9pMSkKK2Rfb2UgID0gICAgc2luIChkMnJfZCpkX2kxKQor ZF9veGUgPSB4ZCpzaW4gKGQycl9kKmRfaTEpCisKKyEgQWN0dWFsCitmX29h ID0gICAgIHNpbmQgKGZfaTEpCitmX29jID0gICAgIHNpbmQgKDYwLjBfNCkK K2Zfb3ggPSB4Ziogc2luZCAoZl9pMSkKK2Rfb2EgPSAgICBkc2luZCAoZF9p MSkKK2Rfb2MgPSAgICBkc2luZCAoNjAuMF84KQorZF9veCA9IHhkKiBzaW5k IChkX2kxKQorCitjYWxsIGNtcGYoZl9vZSwgIGZfb2EsIGZfdG9sLCAiKCAp IHNpbmQiKQorY2FsbCBjbXBmKGZfb2UsICBmX29jLCBmX3RvbCwgIihjKSBz aW5kIikKK2NhbGwgY21wZihmX294ZSwgZl9veCwgZl90b2wsICIoeCkgc2lu ZCIpCitjYWxsIGNtcGQoZF9vZSwgIGRfb2EsIGRfdG9sLCAiKCApIGRzaW5k IikKK2NhbGwgY21wZChkX29lLCAgZF9vYywgZF90b2wsICIoYykgZHNpbmQi KQorY2FsbCBjbXBkKGRfb3hlLCBkX294LCBkX3RvbCwgIih4KSBzaW5kIikK KworISBJbnB1dAorZl9pMSA9IDIuNjc5Njc2XzQKK2ZfaTIgPSAxLjBfNAor ZF9pMSA9IDIuNjc5Njc2XzgKK2RfaTIgPSAxLjBfOAorCishIEV4cGVjdGVk CitmX29lICA9ICAgIHIyZF9mKmF0YW4yIChmX2kxLCBmX2kyKQorZl9veGUg PSB4ZipyMmRfZiphdGFuMiAoZl9pMSwgZl9pMikKK2Rfb2UgID0gICAgcjJk X2QqYXRhbjIgKGRfaTEsIGRfaTIpCitkX294ZSA9IHhkKnIyZF9kKmF0YW4y IChkX2kxLCBkX2kyKQorCishIEFjdHVhbAorZl9vYSA9ICAgICBhdGFuMmQg KGZfaTEsIGZfaTIpCitmX29jID0gICAgIGF0YW4yZCAoMi42Nzk2NzZfNCwg MS4wXzQpCitmX294ID0geGYqIGF0YW4yZCAoZl9pMSwgZl9pMikKK2Rfb2Eg PSAgICBkYXRhbjJkIChkX2kxLCBkX2kyKQorZF9vYyA9ICAgIGRhdGFuMmQg KDIuNjc5Njc2XzgsIDEuMF84KQorZF9veCA9IHhkKiBhdGFuMmQgKGRfaTEs IGRfaTIpCisKK2NhbGwgY21wZihmX29lLCAgZl9vYSwgZl90b2wsICIoICkg YXRhbjJkIikKK2NhbGwgY21wZihmX29lLCAgZl9vYywgZl90b2wsICIoYykg YXRhbjJkIikKK2NhbGwgY21wZihmX294ZSwgZl9veCwgZl90b2wsICIoeCkg YXRhbjJkIikKK2NhbGwgY21wZChkX29lLCAgZF9vYSwgZF90b2wsICIoICkg ZGF0YW4yZCIpCitjYWxsIGNtcGQoZF9vZSwgIGRfb2MsIGRfdG9sLCAiKGMp IGRhdGFuMmQiKQorY2FsbCBjbXBkKGRfb3hlLCBkX294LCBkX3RvbCwgIih4 KSBhdGFuMmQiKQorCishIElucHV0CitmX2kxID0gMS41ODc0OTkzXzQKK2Rf aTEgPSAxLjU4NzQ5OTNfOAorCishIEV4cGVjdGVkCitmX29lICA9ICAgIHIy ZF9mKmF0YW4gKGZfaTEpCitmX294ZSA9IHhmKnIyZF9mKmF0YW4gKGZfaTEp CitkX29lICA9ICAgIHIyZF9kKmF0YW4gKGRfaTEpCitkX294ZSA9IHhkKnIy ZF9kKmF0YW4gKGRfaTEpCisKKyEgQWN0dWFsCitmX29hID0gICAgIGF0YW5k IChmX2kxKQorZl9vYyA9ICAgICBhdGFuZCAoMS41ODc0OTkzXzQpCitmX294 ID0geGYqIGF0YW5kIChmX2kxKQorZF9vYSA9ICAgIGRhdGFuZCAoZF9pMSkK K2Rfb2MgPSAgICBkYXRhbmQgKDEuNTg3NDk5M184KQorZF9veCA9IHhkKiBh dGFuZCAoZF9pMSkKKworY2FsbCBjbXBmKGZfb2UsICBmX29hLCBmX3RvbCwg IiggKSBhdGFuZCIpCitjYWxsIGNtcGYoZl9vZSwgIGZfb2MsIGZfdG9sLCAi KGMpIGF0YW5kIikKK2NhbGwgY21wZihmX294ZSwgZl9veCwgZl90b2wsICIo eCkgYXRhbmQiKQorY2FsbCBjbXBkKGRfb2UsICBkX29hLCBkX3RvbCwgIigg KSBkYXRhbmQiKQorY2FsbCBjbXBkKGRfb2UsICBkX29jLCBkX3RvbCwgIihj KSBkYXRhbmQiKQorY2FsbCBjbXBkKGRfb3hlLCBkX294LCBkX3RvbCwgIih4 KSBhdGFuZCIpCisKKyEgSW5wdXQKK2ZfaTEgPSAwLjZfNAorZF9pMSA9IDAu Nl84CisKKyEgRXhwZWN0ZWQKK2Zfb2UgID0gICAgY290YW4gKGQycl9mKmZf aTEpCitmX294ZSA9IHhmKmNvdGFuIChkMnJfZipmX2kxKQorZF9vZSAgPSAg ICBjb3RhbiAoZDJyX2QqZF9pMSkKK2Rfb3hlID0geGQqY290YW4gKGQycl9k KmRfaTEpCisKKyEgQWN0dWFsCitmX29hID0gICAgIGNvdGFuZCAoZl9pMSkK K2Zfb2MgPSAgICAgY290YW5kICgwLjZfNCkKK2Zfb3ggPSB4ZiogY290YW5k IChmX2kxKQorZF9vYSA9ICAgIGRjb3RhbmQgKGRfaTEpCitkX29jID0gICAg ZGNvdGFuZCAoMC42XzgpCitkX294ID0geGQqIGNvdGFuZCAoZF9pMSkKKwor Y2FsbCBjbXBmKGZfb2UsICBmX29hLCBmX3RvbCwgIiggKSBjb3RhbmQiKQor Y2FsbCBjbXBmKGZfb2UsICBmX29jLCBmX3RvbCwgIihjKSBjb3RhbmQiKQor Y2FsbCBjbXBmKGZfb3hlLCBmX294LCBmX3RvbCwgIih4KSBjb3RhbmQiKQor Y2FsbCBjbXBkKGRfb2UsICBkX29hLCBkX3RvbCwgIiggKSBkY290YW5kIikK K2NhbGwgY21wZChkX29lLCAgZF9vYywgZF90b2wsICIoYykgZGNvdGFuZCIp CitjYWxsIGNtcGQoZF9veGUsIGRfb3gsIGRfdG9sLCAiKHgpIGNvdGFuZCIp CisKKyEgSW5wdXQKK2ZfaTEgPSAwLjZfNAorZF9pMSA9IDAuNl84CisKKyEg RXhwZWN0ZWQKK2Zfb2UgID0gICAgIDEuMF80L3RhbiAoZl9pMSkKK2Zfb3hl ID0geGYqIDEuMF80L3RhbiAoZl9pMSkKK2Rfb2UgID0gICAgMS4wXzgvZHRh biAoZF9pMSkKK2Rfb3hlID0geGQqMS4wXzgvZHRhbiAoZF9pMSkKKworISBB Y3R1YWwKK2Zfb2EgPSAgICAgY290YW4gKGZfaTEpCitmX29jID0gICAgIGNv dGFuICgwLjZfNCkKK2Zfb3ggPSB4ZiogY290YW4gKGZfaTEpCitkX29hID0g ICAgZGNvdGFuIChkX2kxKQorZF9vYyA9ICAgIGRjb3RhbiAoMC42XzgpCitk X294ID0geGQqIGNvdGFuIChkX2kxKQorCitjYWxsIGNtcGYoZl9vZSwgIGZf b2EsIGZfdG9sLCAiKCApIGNvdGFuIikKK2NhbGwgY21wZihmX29lLCAgZl9v YywgZl90b2wsICIoYykgY290YW4iKQorY2FsbCBjbXBmKGZfb3hlLCBmX294 LCBmX3RvbCwgIih4KSBjb3RhbiIpCitjYWxsIGNtcGQoZF9vZSwgIGRfb2Es IGRfdG9sLCAiKCApIGRjb3RhbiIpCitjYWxsIGNtcGQoZF9vZSwgIGRfb2Ms IGRfdG9sLCAiKGMpIGRjb3RhbiIpCitjYWxsIGNtcGQoZF9veGUsIGRfb3gs IGRfdG9sLCAiKHgpIGNvdGFuIikKKworISBJbnB1dAorZl9pMSA9IDYwLjBf NAorZF9pMSA9IDYwLjBfOAorCishIEV4cGVjdGVkCitmX29lICA9ICAgIHRh biAoZDJyX2YqZl9pMSkKK2Zfb3hlID0geGYqdGFuIChkMnJfZipmX2kxKQor ZF9vZSAgPSAgICB0YW4gKGQycl9kKmRfaTEpCitkX294ZSA9IHhkKnRhbiAo ZDJyX2QqZF9pMSkKKworISBBY3R1YWwKK2Zfb2EgPSAgICAgdGFuZCAoZl9p MSkKK2Zfb2MgPSAgICAgdGFuZCAoNjAuMF80KQorZl9veCA9IHhmKiB0YW5k IChmX2kxKQorZF9vYSA9ICAgIGR0YW5kIChkX2kxKQorZF9vYyA9ICAgIGR0 YW5kICg2MC4wXzgpCitkX294ID0geGQqIHRhbmQgKGRfaTEpCisKK2NhbGwg Y21wZihmX29lLCAgZl9vYSwgZl90b2wsICIoICkgdGFuZCIpCitjYWxsIGNt cGYoZl9vZSwgIGZfb2MsIGZfdG9sLCAiKGMpIHRhbmQiKQorY2FsbCBjbXBm KGZfb3hlLCBmX294LCBmX3RvbCwgIih4KSB0YW5kIikKK2NhbGwgY21wZChk X29lLCAgZF9vYSwgZF90b2wsICIoICkgZHRhbmQiKQorY2FsbCBjbXBkKGRf b2UsICBkX29jLCBkX3RvbCwgIihjKSBkdGFuZCIpCitjYWxsIGNtcGQoZF9v eGUsIGRfb3gsIGRfdG9sLCAiKHgpIHRhbmQiKQorCitlbmQK --001a1141b26679d1c5053d6990db--