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 1qm5Zx-005a6e-4B for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Sep 2023 04:58:17 +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 1qm5Zv-001pjN-Gf for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Sep 2023 04:58:15 +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 1qm5Zu-001pip-L0 for pgsql-hackers@lists.postgresql.org; Fri, 29 Sep 2023 04:58:14 +0000 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qm5Zl-008DBV-Uh for pgsql-hackers@postgresql.org; Fri, 29 Sep 2023 04:58:14 +0000 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-2773f2e599cso7141772a91.1 for ; Thu, 28 Sep 2023 21:58:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695963484; x=1696568284; 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=qolCHw1kqZvxER4rz4EquSu0XC86vybNyMC/AcavkwA=; b=jab2DuKt3jF8oALPLOUIdPfEnBGTQA8SwYQyUB+hkosUUMXJK9ft4T15p5WS8zTCJD xcmi9LyxmMeQzMwmVdXT2/6z2URYjGBE4h4fBmVqq3UoILWRfNp87clxGtfFXGkgvE5c ZmvjLKb+zPllufYkRd3biBFICTmYGE3CkkDR4sOUfamw4NhMOic5eMV6ZVJ8VMRRcMuV 4mXILd+jMxxnK3hdhxwbnQ+bIH++g9Ac2kFSZ2hzvKR+M/dPQnkr0kIGnFLE4WBWM4qE zG6P8tp6hX3fXE+YdKlu8fdOJOiEe1mrWv6UCU/Zlr+GFdrQUyZHahM5svO2pp6PL9nr QolA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695963484; x=1696568284; 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=qolCHw1kqZvxER4rz4EquSu0XC86vybNyMC/AcavkwA=; b=hqyUoBFeTFEzoAE21C7gfliEwUn2GdmWckCANR60mx3uMbhhewwcc21hjeoKvNsZ+3 f5zT1X4I363B3KWGL3jfgouP4/oyc12bb5P7JFZnu385+KgZjlY47Eupn8HpWBb18/hK MgGWMLHazj6tN0/hRBEqE7YPfBRpuaF3GTimkjUnaZc80HNQ4qQuLH9FPhHIupgTjLjD VeCzcNN1PK1O2LiB5pDPh8mHsdMNPRR3UdkJVOf5zyOLarIYg3WFja4Je1Qg9rT6DP8O iWb+1d5xkiPDA1dkuy2baFxAjEi5puNrP8Ycxb38vKJka7DXbMyCm21VRZ5gGtX/n3Vy yhCg== X-Gm-Message-State: AOJu0YxNdHqRrbyVpgFbRfTnJbLjT4mdrnlq1V+07HrP0Rc1oOwAKtKY txzWCTvoENIvoQRGPchzHqqHBkGiMlukkTwgQlc= X-Google-Smtp-Source: AGHT+IFtA3Fzx6QOU1HZGwhsypkIY6NEj6Eazyt0tJUsEPHx6PKUgJBBlieuPYk5G1K+m2x4n2BaTjMZemR4HDVsrEE= X-Received: by 2002:a17:90b:1e02:b0:268:b66b:d9f6 with SMTP id pg2-20020a17090b1e0200b00268b66bd9f6mr2832505pjb.18.1695963483630; Thu, 28 Sep 2023 21:58:03 -0700 (PDT) MIME-Version: 1.0 References: <202309281104.kmkr4v34ny2t@alvherre.pgsql> In-Reply-To: <202309281104.kmkr4v34ny2t@alvherre.pgsql> From: Amit Langote Date: Fri, 29 Sep 2023 13:57:46 +0900 Message-ID: Subject: Re: remaining sql/json patches To: Alvaro Herrera Cc: Andrew Dunstan , jian he , Erik Rijkers , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000ff2e2c060678442e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ff2e2c060678442e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Sep 28, 2023 at 8:04=E2=80=AFPM Alvaro Herrera wrote: > On 2023-Sep-27, Amit Langote wrote: > > Maybe the following is better: > > > > + /* > > + * For expression nodes that support soft errors. Should be set to= NULL > > + * before calling ExecInitExprRec() if the caller wants errors thro= wn. > > + */ > > > > ...as in the attached. > > That's good. > > > Alvaro, do you think your concern regarding escontext not being in the > > right spot in the ExprState struct is addressed? It doesn't seem very > > critical to me to place it in the struct's 1st cacheline, because > > escontext is not accessed in performance critical paths such as during > > expression evaluation, especially with the latest version. (It would > > get accessed during evaluation with previous versions.) > > > > If so, I'd like to move ahead with committing it. > > Yeah, looks OK to me in v21. Thanks. I will push the attached 0001 shortly. Also, I've updated 0002's commit message to mention why it only changes the functions local to jsonfuncs.c to add the Node *escontext parameter, but not any external ones that may be invoked, such as, makeMdArrayResult(). The assumption behind that is that jsonfuncs.c functions validate any data that they pass to such external functions, so no *suppressible* errors should occur. --=20 Thanks, Amit Langote EDB: http://www.enterprisedb.com --000000000000ff2e2c060678442e Content-Type: application/octet-stream; name="v22-0002-Add-soft-error-handling-to-populate_record_field.patch" Content-Disposition: attachment; filename="v22-0002-Add-soft-error-handling-to-populate_record_field.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ln44rd9d3 RnJvbSAzOTdiZWUxOTRjOTIwNGI2ZGZhYjRjNDg2MTI3YjcyYmE1YTBmZmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IEZyaSwgMjkgU2VwIDIwMjMgMTM6NDE6MjggKzA5MDAKU3ViamVjdDogW1BBVENIIHYy MiAyLzVdIEFkZCBzb2Z0IGVycm9yIGhhbmRsaW5nIHRvIHBvcHVsYXRlX3JlY29yZF9maWVsZCgp CgpBbiB1bmNvbWluZyBwYXRjaCB3b3VsZCBsaWtlIHRoZSBhYmlsaXR5IHRvIGNhbGwgaXQgZnJv bSB0aGUKZXhlY3V0b3IgZm9yIHNvbWUgU1FML0pTT04gZXhwcmVzc2lvbiBub2RlcyBhbmQgYXNr IHRvIHN1cHByZXNzIGFueQplcnJvcnMgdGhhdCBtYXkgb2NjdXIuCgpUaGlzIGNvbW1pdCBkb2Vz IHR3byB0aGluZ3MgbWFpbmx5OgoKKiBJdCBtb2RpZmllcyB0aGUgdmFyaW91cyBpbnRlcmZhY2Vz IGludGVybmFsIHRvIGpzb25mdW5jcy5jIHRvIHBhc3MKICB0aGUgRXJyb3JTYXZlQ29udGV4dCBh cm91bmQuCgoqIE1ha2UgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgdG8gaGFuZGxlIHRoZSBjYXNl cyB3aGVyZSB0aGUKICBwcm9jZXNzaW5nIGlzIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoIHZhcmlv dXMgZnVuY3Rpb25zIHRoYXQgdGFrZQogIGFuIEVycm9yU2F2ZUNvbnRleHQgd2hlbiBhIHNvZnQg ZXJyb3Igb2NjdXJzLgoKTm90ZSB0aGF0IHRoZSBhYm92ZSBjaGFuZ2VzIGFyZSBvbmx5IGludGVu ZGVkIHRvIHN1cHByZXNzIGVycm9ycyBpbgp0aGUgZnVuY3Rpb25zIGluIGpzb25mdW5jcy5jLCBi dXQgbm90IHRob3NlIGluIGFueSBleHRlcm5hbCBmdW5jdGlvbnMKdGhhdCB0aGUgZnVuY3Rpb25z IGluIGpzb25mdW5jcy5jIGluIHR1cm4gY2FsbCwgc3VjaCBhcyB0aG9zZSBmcm9tCmFycmF5ZnVu Y3MuYy4gIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdmFyaW91cyBwb3B1bGF0ZV8qIGZ1bmN0aW9u cwp2YWxpZGF0ZSB0aGUgZGF0YSBiZWZvcmUgcGFzc2luZyB0aG9zZSB0byBleHRlcm5hbCBmdW5j dGlvbnMuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhUZGZiMW5X PU9qb3lfdFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyB8IDI4MCArKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgNzAgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCmluZGV4IGE0YmZhNWU0MDQuLmE4ZjJi MTg2YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTI2NSw2ICsyNjUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQb3B1bGF0ZUFycmF5Q29udGV4dAogCWludAkJICAgKmRpbXM7CQkJLyog ZGltZW5zaW9ucyAqLwogCWludAkJICAgKnNpemVzOwkJCS8qIGN1cnJlbnQgZGltZW5zaW9uIGNv dW50ZXJzICovCiAJaW50CQkJbmRpbXM7CQkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgKi8KKwlO b2RlCSAgICplc2NvbnRleHQ7IC8qIEZvciBzb2Z0LWVycm9yIGhhbmRsaW5nICovCiB9IFBvcHVs YXRlQXJyYXlDb250ZXh0OwogCiAvKiBzdGF0ZSBmb3IgcG9wdWxhdGVfYXJyYXlfanNvbigpICov CkBAIC0zODksNyArMzkwLDggQEAgc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSBlbGVtZW50c19h cnJheV9lbGVtZW50X2VuZCh2b2lkICpzdGF0ZSwgYm9vbCBpc251bGwpOwogc3RhdGljIEpzb25Q YXJzZUVycm9yVHlwZSBlbGVtZW50c19zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBK c29uVG9rZW5UeXBlIHRva2VudHlwZSk7CiAKIC8qIHR1cm4gYSBqc29uIG9iamVjdCBpbnRvIGEg aGFzaCB0YWJsZSAqLwotc3RhdGljIEhUQUIgKmdldF9qc29uX29iamVjdF9hc19oYXNoKGNoYXIg Kmpzb24sIGludCBsZW4sIGNvbnN0IGNoYXIgKmZ1bmNuYW1lKTsKK3N0YXRpYyBIVEFCICpnZXRf anNvbl9vYmplY3RfYXNfaGFzaChjaGFyICpqc29uLCBpbnQgbGVuLCBjb25zdCBjaGFyICpmdW5j bmFtZSwKKwkJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCiAvKiBzZW1hbnRpYyBhY3Rpb25z IGZvciBwb3B1bGF0ZV9hcnJheV9qc29uICovCiBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIHBv cHVsYXRlX2FycmF5X29iamVjdF9zdGFydCh2b2lkICpfc3RhdGUpOwpAQCAtNDMxLDM3ICs0MzMs NDIgQEAgc3RhdGljIERhdHVtIHBvcHVsYXRlX3JlY29yZF93b3JrZXIoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sIGNvbnN0IGNoYXIgKmZ1bmNuYW0KIC8qIGhlbHBlciBmdW5jdGlvbnMgZm9yIHBv cHVsYXRlX3JlY29yZFtzZXRdICovCiBzdGF0aWMgSGVhcFR1cGxlSGVhZGVyIHBvcHVsYXRlX3Jl Y29yZChUdXBsZURlc2MgdHVwZGVzYywgUmVjb3JkSU9EYXRhICoqcmVjb3JkX3AsCiAJCQkJCQkJ CQkgICBIZWFwVHVwbGVIZWFkZXIgZGVmYXVsdHZhbCwgTWVtb3J5Q29udGV4dCBtY3h0LAotCQkJ CQkJCQkJICAgSnNPYmplY3QgKm9iaik7CisJCQkJCQkJCQkgICBKc09iamVjdCAqb2JqLCBOb2Rl ICplc2NvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3JlY29yZF90eXBlX2Zyb21fYXJndW1lbnQo RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJCQkJCQkJICBjb25zdCBjaGFyICpmdW5jbmFt ZSwKIAkJCQkJCQkJCQkgIFBvcHVsYXRlUmVjb3JkQ2FjaGUgKmNhY2hlKTsKIHN0YXRpYyB2b2lk IGdldF9yZWNvcmRfdHlwZV9mcm9tX3F1ZXJ5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqZnVuY25hbWUsCiAJCQkJCQkJCQkgICBQb3B1bGF0ZVJlY29y ZENhY2hlICpjYWNoZSk7Ci1zdGF0aWMgdm9pZCBKc1ZhbHVlVG9Kc09iamVjdChKc1ZhbHVlICpq c3YsIEpzT2JqZWN0ICpqc28pOworc3RhdGljIGJvb2wgSnNWYWx1ZVRvSnNPYmplY3QoSnNWYWx1 ZSAqanN2LCBKc09iamVjdCAqanNvLCBOb2RlICplc2NvbnRleHQpOwogc3RhdGljIERhdHVtIHBv cHVsYXRlX2NvbXBvc2l0ZShDb21wb3NpdGVJT0RhdGEgKmlvLCBPaWQgdHlwaWQsCiAJCQkJCQkJ CWNvbnN0IGNoYXIgKmNvbG5hbWUsIE1lbW9yeUNvbnRleHQgbWN4dCwKLQkJCQkJCQkJSGVhcFR1 cGxlSGVhZGVyIGRlZmF1bHR2YWwsIEpzVmFsdWUgKmpzdiwgYm9vbCBpc251bGwpOwotc3RhdGlj IERhdHVtIHBvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlwaWQsIGludDMy IHR5cG1vZCwgSnNWYWx1ZSAqanN2KTsKKwkJCQkJCQkJSGVhcFR1cGxlSGVhZGVyIGRlZmF1bHR2 YWwsIEpzVmFsdWUgKmpzdiwgYm9vbCAqaXNudWxsLAorCQkJCQkJCQlOb2RlICplc2NvbnRleHQp Oworc3RhdGljIERhdHVtIHBvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlw aWQsIGludDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2LAorCQkJCQkJCSBib29sICppc251bGwsIE5v ZGUgKmVzY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmVwYXJlX2NvbHVtbl9jYWNoZShDb2x1bW5J T0RhdGEgKmNvbHVtbiwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCiAJCQkJCQkJCSBNZW1vcnlD b250ZXh0IG1jeHQsIGJvb2wgbmVlZF9zY2FsYXIpOwogc3RhdGljIERhdHVtIHBvcHVsYXRlX3Jl Y29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCiAJ CQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbG5hbWUsIE1lbW9yeUNvbnRleHQgbWN4dCwgRGF0dW0g ZGVmYXVsdHZhbCwKLQkJCQkJCQkJICAgSnNWYWx1ZSAqanN2LCBib29sICppc251bGwpOworCQkJ CQkJCQkgICBKc1ZhbHVlICpqc3YsIGJvb2wgKmlzbnVsbCwgTm9kZSAqZXNjb250ZXh0KTsKIHN0 YXRpYyBSZWNvcmRJT0RhdGEgKmFsbG9jYXRlX3JlY29yZF9pbmZvKE1lbW9yeUNvbnRleHQgbWN4 dCwgaW50IG5jb2x1bW5zKTsKIHN0YXRpYyBib29sIEpzT2JqZWN0R2V0RmllbGQoSnNPYmplY3Qg Km9iaiwgY2hhciAqZmllbGQsIEpzVmFsdWUgKmpzdik7CiBzdGF0aWMgdm9pZCBwb3B1bGF0ZV9y ZWNvcmRzZXRfcmVjb3JkKFBvcHVsYXRlUmVjb3Jkc2V0U3RhdGUgKnN0YXRlLCBKc09iamVjdCAq b2JqKTsKLXN0YXRpYyB2b2lkIHBvcHVsYXRlX2FycmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRl eHQgKmN0eCwgY2hhciAqanNvbiwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCBwb3B1bGF0ZV9hcnJh eV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgSnNvbmJWYWx1ZSAqamJ2LAor c3RhdGljIGJvb2wgcG9wdWxhdGVfYXJyYXlfanNvbihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4 LCBjaGFyICpqc29uLCBpbnQgbGVuKTsKK3N0YXRpYyBib29sIHBvcHVsYXRlX2FycmF5X2RpbV9q c29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBKc29uYlZhbHVlICpqYnYsCiAJCQkJCQkJ CQkgaW50IG5kaW0pOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVjdGVk X2FycmF5KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKTsKLXN0YXRpYyB2b2lk IHBvcHVsYXRlX2FycmF5X2Fzc2lnbl9uZGltcyhQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBp bnQgbmRpbXMpOwotc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlfY2hlY2tfZGltZW5zaW9uKFBv cHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKTsKLXN0YXRpYyB2b2lkIHBvcHVsYXRl X2FycmF5X2VsZW1lbnQoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW0sIEpzVmFs dWUgKmpzdik7CitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoUG9wdWxh dGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW1zKTsKK3N0YXRpYyBib29sIHBvcHVsYXRlX2Fy cmF5X2NoZWNrX2RpbWVuc2lvbihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSk7 CitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9hcnJheV9lbGVtZW50KFBvcHVsYXRlQXJyYXlDb250ZXh0 ICpjdHgsIGludCBuZGltLCBKc1ZhbHVlICpqc3YpOwogc3RhdGljIERhdHVtIHBvcHVsYXRlX2Fy cmF5KEFycmF5SU9EYXRhICphaW8sIGNvbnN0IGNoYXIgKmNvbG5hbWUsCi0JCQkJCQkJTWVtb3J5 Q29udGV4dCBtY3h0LCBKc1ZhbHVlICpqc3YpOworCQkJCQkJCU1lbW9yeUNvbnRleHQgbWN4dCwg SnNWYWx1ZSAqanN2LAorCQkJCQkJCWJvb2wgKmlzbnVsbCwKKwkJCQkJCQlOb2RlICplc2NvbnRl eHQpOwogc3RhdGljIERhdHVtIHBvcHVsYXRlX2RvbWFpbihEb21haW5JT0RhdGEgKmlvLCBPaWQg dHlwaWQsIGNvbnN0IGNoYXIgKmNvbG5hbWUsCi0JCQkJCQkJIE1lbW9yeUNvbnRleHQgbWN4dCwg SnNWYWx1ZSAqanN2LCBib29sIGlzbnVsbCk7CisJCQkJCQkJIE1lbW9yeUNvbnRleHQgbWN4dCwg SnNWYWx1ZSAqanN2LCBib29sIGlzbnVsbCwKKwkJCQkJCQkgTm9kZSAqZXNjb250ZXh0KTsKIAog LyogZnVuY3Rpb25zIHN1cHBvcnRpbmcganNvbmJfZGVsZXRlLCBqc29uYl9zZXQgYW5kIGpzb25i X2NvbmNhdCAqLwogc3RhdGljIEpzb25iVmFsdWUgKkl0ZXJhdG9yQ29uY2F0KEpzb25iSXRlcmF0 b3IgKippdDEsIEpzb25iSXRlcmF0b3IgKippdDIsCkBAIC0yNDg0LDEyICsyNDkxLDEyIEBAIHBv cHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShQb3B1bGF0ZUFycmF5Q29udGV4dCAq Y3R4LCBpbnQgbmRpbSkKIAlpZiAobmRpbSA8PSAwKQogCXsKIAkJaWYgKGN0eC0+Y29sbmFtZSkK LQkJCWVyZXBvcnQoRVJST1IsCisJCQllcnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gYXJyYXkiKSwKIAkJCQkJIGVycmhpbnQoIlNlZSB0aGUgdmFsdWUgb2Yg a2V5IFwiJXNcIi4iLCBjdHgtPmNvbG5hbWUpKSk7CiAJCWVsc2UKLQkJCWVyZXBvcnQoRVJST1Is CisJCQllcnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfVEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gYXJy YXkiKSkpOwogCX0KQEAgLTI1MDYsMTMgKzI1MTMsMTMgQEAgcG9wdWxhdGVfYXJyYXlfcmVwb3J0 X2V4cGVjdGVkX2FycmF5KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKQogCQkJ YXBwZW5kU3RyaW5nSW5mbygmaW5kaWNlcywgIlslZF0iLCBjdHgtPnNpemVzW2ldKTsKIAogCQlp ZiAoY3R4LT5jb2xuYW1lKQotCQkJZXJlcG9ydChFUlJPUiwKKwkJCWVycnNhdmUoY3R4LT5lc2Nv bnRleHQsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9O KSwKIAkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBhcnJheSIpLAogCQkJCQkgZXJyaGludCgi U2VlIHRoZSBhcnJheSBlbGVtZW50ICVzIG9mIGtleSBcIiVzXCIuIiwKIAkJCQkJCQkgaW5kaWNl cy5kYXRhLCBjdHgtPmNvbG5hbWUpKSk7CiAJCWVsc2UKLQkJCWVyZXBvcnQoRVJST1IsCisJCQll cnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVY VF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gYXJyYXkiKSwK IAkJCQkJIGVycmhpbnQoIlNlZSB0aGUgYXJyYXkgZWxlbWVudCAlcy4iLApAQCAtMjUyMCw4ICsy NTI3LDEzIEBAIHBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShQb3B1bGF0ZUFy cmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSkKIAl9CiB9CiAKLS8qIHNldCB0aGUgbnVtYmVyIG9m IGRpbWVuc2lvbnMgb2YgdGhlIHBvcHVsYXRlZCBhcnJheSB3aGVuIGl0IGJlY29tZXMga25vd24g Ki8KLXN0YXRpYyB2b2lkCisvKgorICogVmFsaWRhdGUgYW5kIHNldCBuZGltcyBmb3IgcG9wdWxh dGluZyBhbiBhcnJheSB3aXRoIHNvbWUKKyAqIHBvcHVsYXRlX2FycmF5XyooKSBmdW5jdGlvbi4K KyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBpbnB1dCAobmRpbXMpIGlzIGVycmF0aWMuCisg Ki8KK3N0YXRpYyBib29sCiBwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoUG9wdWxhdGVBcnJh eUNvbnRleHQgKmN0eCwgaW50IG5kaW1zKQogewogCWludAkJCWk7CkBAIC0yNTI5LDcgKzI1NDEs MTIgQEAgcG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpj dHgsIGludCBuZGltcykKIAlBc3NlcnQoY3R4LT5uZGltcyA8PSAwKTsKIAogCWlmIChuZGltcyA8 PSAwKQorCXsKIAkJcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5KGN0eCwgbmRp bXMpOworCQkvKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGVycm9yIHdhcyByZXBvcnRlZCBzb2Z0 bHkuICovCisJCUFzc2VydChTT0ZUX0VSUk9SX09DQ1VSUkVEKGN0eC0+ZXNjb250ZXh0KSk7CisJ CXJldHVybiBmYWxzZTsKKwl9CiAKIAljdHgtPm5kaW1zID0gbmRpbXM7CiAJY3R4LT5kaW1zID0g cGFsbG9jKHNpemVvZihpbnQpICogbmRpbXMpOwpAQCAtMjUzNywxMCArMjU1NCwxNiBAQCBwb3B1 bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5k aW1zKQogCiAJZm9yIChpID0gMDsgaSA8IG5kaW1zOyBpKyspCiAJCWN0eC0+ZGltc1tpXSA9IC0x OwkJLyogZGltZW5zaW9ucyBhcmUgdW5rbm93biB5ZXQgKi8KKworCXJldHVybiB0cnVlOwogfQog Ci0vKiBjaGVjayB0aGUgcG9wdWxhdGVkIHN1YmFycmF5IGRpbWVuc2lvbiAqLwotc3RhdGljIHZv aWQKKy8qCisgKiBDaGVjayB0aGUgcG9wdWxhdGVkIHN1YmFycmF5IGRpbWVuc2lvbgorICoKKyAq IFJldHVybnMgZmFsc2UgaWYgdGhlIGlucHV0IChuZGltcykgaXMgZXJyYXRpYy4KKyAqLworc3Rh dGljIGJvb2wKIHBvcHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihQb3B1bGF0ZUFycmF5Q29u dGV4dCAqY3R4LCBpbnQgbmRpbSkKIHsKIAlpbnQJCQlkaW0gPSBjdHgtPnNpemVzW25kaW1dOyAv KiBjdXJyZW50IGRpbWVuc2lvbiBjb3VudGVyICovCkBAIC0yNTQ4LDIxICsyNTcxLDMxIEBAIHBv cHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBp bnQgbmRpbSkKIAlpZiAoY3R4LT5kaW1zW25kaW1dID09IC0xKQogCQljdHgtPmRpbXNbbmRpbV0g PSBkaW07CS8qIGFzc2lnbiBkaW1lbnNpb24gaWYgbm90IHlldCBrbm93biAqLwogCWVsc2UgaWYg KGN0eC0+ZGltc1tuZGltXSAhPSBkaW0pCi0JCWVyZXBvcnQoRVJST1IsCisJCWVycnNhdmUoY3R4 LT5lc2NvbnRleHQsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5U QVRJT04pLAogCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBKU09OIGFycmF5IiksCiAJCQkJIGVycmRl dGFpbCgiTXVsdGlkaW1lbnNpb25hbCBhcnJheXMgbXVzdCBoYXZlICIKIAkJCQkJCSAgICJzdWIt YXJyYXlzIHdpdGggbWF0Y2hpbmcgZGltZW5zaW9ucy4iKSkpOwogCisJLyogTm90aGluZyB0byBk byBvbiBhbiBlcnJvci4gKi8KKwlpZiAoU09GVF9FUlJPUl9PQ0NVUlJFRChjdHgtPmVzY29udGV4 dCkpCisJCXJldHVybiBmYWxzZTsKKwogCS8qIHJlc2V0IHRoZSBjdXJyZW50IGFycmF5IGRpbWVu c2lvbiBzaXplIGNvdW50ZXIgKi8KIAljdHgtPnNpemVzW25kaW1dID0gMDsKIAogCS8qIGluY3Jl bWVudCB0aGUgcGFyZW50IGRpbWVuc2lvbiBjb3VudGVyIGlmIGl0IGlzIGEgbmVzdGVkIHN1Yi1h cnJheSAqLwogCWlmIChuZGltID4gMCkKIAkJY3R4LT5zaXplc1tuZGltIC0gMV0rKzsKKworCXJl dHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZAorLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg YXJyYXkgZWxlbWVudCB2YWx1ZSB3YXMgc3VjY2Vzc2Z1bGx5IGV4dHJhY3RlZCBmcm9tIGpzdgor ICogYW5kIGFkZGVkIHRvIGN0eC0+YXN0YXRlLiAgRmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQg d2hlbiBkb2luZyBzby4KKyAqLworc3RhdGljIGJvb2wKIHBvcHVsYXRlX2FycmF5X2VsZW1lbnQo UG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW0sIEpzVmFsdWUgKmpzdikKIHsKIAlE YXR1bQkJZWxlbWVudDsKQEAgLTI1NzMsMTMgKzI2MDYsMTggQEAgcG9wdWxhdGVfYXJyYXlfZWxl bWVudChQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSwgSnNWYWx1ZSAqanN2KQog CQkJCQkJCQkJY3R4LT5haW8tPmVsZW1lbnRfdHlwZSwKIAkJCQkJCQkJCWN0eC0+YWlvLT5lbGVt ZW50X3R5cG1vZCwKIAkJCQkJCQkJCU5VTEwsIGN0eC0+bWN4dCwgUG9pbnRlckdldERhdHVtKE5V TEwpLAotCQkJCQkJCQkJanN2LCAmZWxlbWVudF9pc251bGwpOworCQkJCQkJCQkJanN2LCAmZWxl bWVudF9pc251bGwsIGN0eC0+ZXNjb250ZXh0KTsKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIGFuIGVy cm9yLiAqLworCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKGN0eC0+ZXNjb250ZXh0KSkKKwkJcmV0 dXJuIGZhbHNlOwogCiAJYWNjdW1BcnJheVJlc3VsdChjdHgtPmFzdGF0ZSwgZWxlbWVudCwgZWxl bWVudF9pc251bGwsCiAJCQkJCSBjdHgtPmFpby0+ZWxlbWVudF90eXBlLCBjdHgtPmFjeHQpOwog CiAJQXNzZXJ0KG5kaW0gPiAwKTsKIAljdHgtPnNpemVzW25kaW0gLSAxXSsrOwkJLyogaW5jcmVt ZW50IGN1cnJlbnQgZGltZW5zaW9uIGNvdW50ZXIgKi8KKworCXJldHVybiB0cnVlOwogfQogCiAv KiBqc29uIG9iamVjdCBzdGFydCBoYW5kbGVyIGZvciBwb3B1bGF0ZV9hcnJheV9qc29uKCkgKi8K QEAgLTI1OTIsNyArMjYzMCwxMiBAQCBwb3B1bGF0ZV9hcnJheV9vYmplY3Rfc3RhcnQodm9pZCAq X3N0YXRlKQogCWlmIChzdGF0ZS0+Y3R4LT5uZGltcyA8PSAwKQogCQlwb3B1bGF0ZV9hcnJheV9h c3NpZ25fbmRpbXMoc3RhdGUtPmN0eCwgbmRpbSk7CiAJZWxzZSBpZiAobmRpbSA8IHN0YXRlLT5j dHgtPm5kaW1zKQorCXsKIAkJcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5KHN0 YXRlLT5jdHgsIG5kaW0pOworCQkvKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGVycm9yIHdhcyBy ZXBvcnRlZCBzb2Z0bHkuICovCisJCUFzc2VydChTT0ZUX0VSUk9SX09DQ1VSUkVEKHN0YXRlLT5j dHgtPmVzY29udGV4dCkpOworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CiAK IAlyZXR1cm4gSlNPTl9TVUNDRVNTOwogfQpAQCAtMjYwOSw3ICsyNjUyLDExIEBAIHBvcHVsYXRl X2FycmF5X2FycmF5X2VuZCh2b2lkICpfc3RhdGUpCiAJCXBvcHVsYXRlX2FycmF5X2Fzc2lnbl9u ZGltcyhjdHgsIG5kaW0gKyAxKTsKIAogCWlmIChuZGltIDwgY3R4LT5uZGltcykKLQkJcG9wdWxh dGVfYXJyYXlfY2hlY2tfZGltZW5zaW9uKGN0eCwgbmRpbSk7CisJeworCQkvKiBSZXBvcnQgaWYg YW4gZXJyb3Igb2NjdXJyZWQuICovCisJCWlmICghcG9wdWxhdGVfYXJyYXlfY2hlY2tfZGltZW5z aW9uKGN0eCwgbmRpbSkpCisJCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CiAK IAlyZXR1cm4gSlNPTl9TVUNDRVNTOwogfQpAQCAtMjY2Nyw3ICsyNzE0LDkgQEAgcG9wdWxhdGVf YXJyYXlfZWxlbWVudF9lbmQodm9pZCAqX3N0YXRlLCBib29sIGlzbnVsbCkKIAkJCQkJCQkJc3Rh dGUtPmVsZW1lbnRfc3RhcnQpICogc2l6ZW9mKGNoYXIpOwogCQl9CiAKLQkJcG9wdWxhdGVfYXJy YXlfZWxlbWVudChjdHgsIG5kaW0sICZqc3YpOworCQkvKiBSZXBvcnQgaWYgYW4gZXJyb3Igb2Nj dXJyZWQuICovCisJCWlmICghcG9wdWxhdGVfYXJyYXlfZWxlbWVudChjdHgsIG5kaW0sICZqc3Yp KQorCQkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7CiAJfQogCiAJcmV0dXJuIEpTT05f U1VDQ0VTUzsKQEAgLTI2ODQsNyArMjczMywxMiBAQCBwb3B1bGF0ZV9hcnJheV9zY2FsYXIodm9p ZCAqX3N0YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAJaWYgKGN0 eC0+bmRpbXMgPD0gMCkKIAkJcG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKGN0eCwgbmRpbSk7 CiAJZWxzZSBpZiAobmRpbSA8IGN0eC0+bmRpbXMpCisJewogCQlwb3B1bGF0ZV9hcnJheV9yZXBv cnRfZXhwZWN0ZWRfYXJyYXkoY3R4LCBuZGltKTsKKwkJLyogR2V0dGluZyBoZXJlIG1lYW5zIHRo ZSBlcnJvciB3YXMgcmVwb3J0ZWQgc29mdGx5LiAqLworCQlBc3NlcnQoU09GVF9FUlJPUl9PQ0NV UlJFRChzdGF0ZS0+Y3R4LT5lc2NvbnRleHQpKTsKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisJfQogCiAJaWYgKG5kaW0gPT0gY3R4LT5uZGltcykKIAl7CkBAIC0yNjk3LDggKzI3 NTEsMTIgQEAgcG9wdWxhdGVfYXJyYXlfc2NhbGFyKHZvaWQgKl9zdGF0ZSwgY2hhciAqdG9rZW4s IEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKQogCXJldHVybiBKU09OX1NVQ0NFU1M7CiB9CiAKLS8q IHBhcnNlIGEganNvbiBhcnJheSBhbmQgcG9wdWxhdGUgYXJyYXkgKi8KLXN0YXRpYyB2b2lkCisv KgorICogUGFyc2UgYSBqc29uIGFycmF5IGFuZCBwb3B1bGF0ZSBhcnJheQorICoKKyAqIFJldHVy bnMgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gcGFyc2luZy4KKyAqLworc3RhdGljIGJv b2wKIHBvcHVsYXRlX2FycmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgY2hhciAq anNvbiwgaW50IGxlbikKIHsKIAlQb3B1bGF0ZUFycmF5U3RhdGUgc3RhdGU7CkBAIC0yNzE1LDE5 ICsyNzczLDI1IEBAIHBvcHVsYXRlX2FycmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0 eCwgY2hhciAqanNvbiwgaW50IGxlbikKIAlzZW0uYXJyYXlfZWxlbWVudF9lbmQgPSBwb3B1bGF0 ZV9hcnJheV9lbGVtZW50X2VuZDsKIAlzZW0uc2NhbGFyID0gcG9wdWxhdGVfYXJyYXlfc2NhbGFy OwogCi0JcGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KHN0YXRlLmxleCwgJnNlbSk7Ci0KLQkvKiBu dW1iZXIgb2YgZGltZW5zaW9ucyBzaG91bGQgYmUgYWxyZWFkeSBrbm93biAqLwotCUFzc2VydChj dHgtPm5kaW1zID4gMCAmJiBjdHgtPmRpbXMpOworCWlmIChwZ19wYXJzZV9qc29uX29yX2VycnNh dmUoc3RhdGUubGV4LCAmc2VtLCBjdHgtPmVzY29udGV4dCkpCisJeworCQkvKiBudW1iZXIgb2Yg ZGltZW5zaW9ucyBzaG91bGQgYmUgYWxyZWFkeSBrbm93biAqLworCQlBc3NlcnQoY3R4LT5uZGlt cyA+IDAgJiYgY3R4LT5kaW1zKTsKKwl9CiAKIAlwZnJlZShzdGF0ZS5sZXgpOworCisJcmV0dXJu ICFTT0ZUX0VSUk9SX09DQ1VSUkVEKGN0eC0+ZXNjb250ZXh0KTsKIH0KIAogLyoKICAqIHBvcHVs YXRlX2FycmF5X2RpbV9qc29uYigpIC0tIEl0ZXJhdGUgcmVjdXJzaXZlbHkgdGhyb3VnaCBqc29u YiBzdWItYXJyYXkKICAqCQllbGVtZW50cyBhbmQgYWNjdW11bGF0ZSByZXN1bHQgdXNpbmcgZ2l2 ZW4gQXJyYXlCdWlsZFN0YXRlLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgd2UgcmV0dXJuIHBh cnR3YXkgdGhyb3VnaCBiZWNhdXNlIG9mIGFuIGVycm9yIGluIGEKKyAqIHN1YnJvdXRpbmUuCiAg Ki8KLXN0YXRpYyB2b2lkCitzdGF0aWMgYm9vbAogcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBv cHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIC8qIGNvbnRleHQgKi8KIAkJCQkJCSBKc29uYlZhbHVl ICpqYnYsCS8qIGpzb25iIHN1Yi1hcnJheSAqLwogCQkJCQkJIGludCBuZGltKQkvKiBjdXJyZW50 IGRpbWVuc2lvbiAqLwpAQCAtMjc0MSw3ICsyODA1LDEyIEBAIHBvcHVsYXRlX2FycmF5X2RpbV9q c29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCAvKiBjb250ZXh0ICovCiAJY2hlY2tfc3Rh Y2tfZGVwdGgoKTsKIAogCWlmIChqYnYtPnR5cGUgIT0gamJ2QmluYXJ5IHx8ICFKc29uQ29udGFp bmVySXNBcnJheShqYmMpKQorCXsKIAkJcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVjdGVkX2Fy cmF5KGN0eCwgbmRpbSAtIDEpOworCQkvKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGVycm9yIHdh cyByZXBvcnRlZCBzb2Z0bHkuICovCisJCUFzc2VydChTT0ZUX0VSUk9SX09DQ1VSUkVEKGN0eC0+ ZXNjb250ZXh0KSk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlBc3NlcnQoIUpzb25Db250YWlu ZXJJc1NjYWxhcihqYmMpKTsKIApAQCAtMjc2Miw3ICsyODMxLDEwIEBAIHBvcHVsYXRlX2FycmF5 X2RpbV9qc29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCAvKiBjb250ZXh0ICovCiAJCSAo dG9rID09IFdKQl9FTEVNICYmCiAJCSAgKHZhbC50eXBlICE9IGpidkJpbmFyeSB8fAogCQkgICAh SnNvbkNvbnRhaW5lcklzQXJyYXkodmFsLnZhbC5iaW5hcnkuZGF0YSkpKSkpCi0JCXBvcHVsYXRl X2FycmF5X2Fzc2lnbl9uZGltcyhjdHgsIG5kaW0pOworCXsKKwkJaWYgKCFwb3B1bGF0ZV9hcnJh eV9hc3NpZ25fbmRpbXMoY3R4LCBuZGltKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlqc3Yu aXNfanNvbiA9IGZhbHNlOwogCWpzdi52YWwuanNvbmIgPSAmdmFsOwpAQCAtMjc3NSwxNiArMjg0 NywyMSBAQCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0 eCwgLyogY29udGV4dCAqLwogCQkgKiBpdCBpcyBub3QgdGhlIGlubmVybW9zdCBkaW1lbnNpb24u CiAJCSAqLwogCQlpZiAoY3R4LT5uZGltcyA+IDAgJiYgbmRpbSA+PSBjdHgtPm5kaW1zKQotCQkJ cG9wdWxhdGVfYXJyYXlfZWxlbWVudChjdHgsIG5kaW0sICZqc3YpOworCQl7CisJCQlpZiAoIXBv cHVsYXRlX2FycmF5X2VsZW1lbnQoY3R4LCBuZGltLCAmanN2KSkKKwkJCQlyZXR1cm4gZmFsc2U7 CisJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiBwb3B1bGF0ZSBjaGlsZCBzdWItYXJyYXkgKi8KLQkJ CXBvcHVsYXRlX2FycmF5X2RpbV9qc29uYihjdHgsICZ2YWwsIG5kaW0gKyAxKTsKKwkJCWlmICgh cG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKGN0eCwgJnZhbCwgbmRpbSArIDEpKQorCQkJCXJldHVy biBmYWxzZTsKIAogCQkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgc2hvdWxkIGJlIGFscmVhZHkg a25vd24gKi8KIAkJCUFzc2VydChjdHgtPm5kaW1zID4gMCAmJiBjdHgtPmRpbXMpOwogCi0JCQlw b3B1bGF0ZV9hcnJheV9jaGVja19kaW1lbnNpb24oY3R4LCBuZGltKTsKKwkJCWlmICghcG9wdWxh dGVfYXJyYXlfY2hlY2tfZGltZW5zaW9uKGN0eCwgbmRpbSkpCisJCQkJcmV0dXJuIGZhbHNlOwog CQl9CiAKIAkJdG9rID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdmFsLCB0cnVlKTsKQEAgLTI3 OTUsMTQgKzI4NzIsMjIgQEAgcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlD b250ZXh0ICpjdHgsIC8qIGNvbnRleHQgKi8KIAkvKiBmcmVlIGl0ZXJhdG9yLCBpdGVyYXRpbmcg dW50aWwgV0pCX0RPTkUgKi8KIAl0b2sgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2YWwsIHRy dWUpOwogCUFzc2VydCh0b2sgPT0gV0pCX0RPTkUgJiYgIWl0KTsKKworCXJldHVybiB0cnVlOwog fQogCi0vKiByZWN1cnNpdmVseSBwb3B1bGF0ZSBhbiBhcnJheSBmcm9tIGpzb24vanNvbmIgKi8K Ky8qCisgKiBSZWN1cnNpdmVseSBwb3B1bGF0ZSBhbiBhcnJheSBmcm9tIGpzb24vanNvbmIKKyAq CisgKiAqaXNudWxsIGlzIHNldCB0byB0cnVlIGlmIGFuIGVycm9yIGlzIHJlcG9ydGVkIGR1cmlu ZyBwYXJzaW5nLgorICovCiBzdGF0aWMgRGF0dW0KIHBvcHVsYXRlX2FycmF5KEFycmF5SU9EYXRh ICphaW8sCiAJCQkgICBjb25zdCBjaGFyICpjb2xuYW1lLAogCQkJICAgTWVtb3J5Q29udGV4dCBt Y3h0LAotCQkJICAgSnNWYWx1ZSAqanN2KQorCQkJICAgSnNWYWx1ZSAqanN2LAorCQkJICAgYm9v bCAqaXNudWxsLAorCQkJICAgTm9kZSAqZXNjb250ZXh0KQogewogCVBvcHVsYXRlQXJyYXlDb250 ZXh0IGN0eDsKIAlEYXR1bQkJcmVzdWx0OwpAQCAtMjgxNywxNCArMjkwMiwyNyBAQCBwb3B1bGF0 ZV9hcnJheShBcnJheUlPRGF0YSAqYWlvLAogCWN0eC5uZGltcyA9IDA7CQkJCS8qIHVua25vd24g eWV0ICovCiAJY3R4LmRpbXMgPSBOVUxMOwogCWN0eC5zaXplcyA9IE5VTEw7CisJY3R4LmVzY29u dGV4dCA9IGVzY29udGV4dDsKIAogCWlmIChqc3YtPmlzX2pzb24pCi0JCXBvcHVsYXRlX2FycmF5 X2pzb24oJmN0eCwganN2LT52YWwuanNvbi5zdHIsCi0JCQkJCQkJanN2LT52YWwuanNvbi5sZW4g Pj0gMCA/IGpzdi0+dmFsLmpzb24ubGVuCi0JCQkJCQkJOiBzdHJsZW4oanN2LT52YWwuanNvbi5z dHIpKTsKKwl7CisJCS8qIFJldHVybiBudWxsIGlmIGFuIGVycm9yIHdhcyBmb3VuZC4gKi8KKwkJ aWYgKCFwb3B1bGF0ZV9hcnJheV9qc29uKCZjdHgsIGpzdi0+dmFsLmpzb24uc3RyLAorCQkJCQkJ CQkganN2LT52YWwuanNvbi5sZW4gPj0gMCA/IGpzdi0+dmFsLmpzb24ubGVuCisJCQkJCQkJCSA6 IHN0cmxlbihqc3YtPnZhbC5qc29uLnN0cikpKQorCQl7CisJCQkqaXNudWxsID0gdHJ1ZTsKKwkJ CXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwl9CiAJZWxzZQogCXsKLQkJcG9wdWxhdGVfYXJyYXlf ZGltX2pzb25iKCZjdHgsIGpzdi0+dmFsLmpzb25iLCAxKTsKKwkJLyogUmV0dXJuIG51bGwgaWYg YW4gZXJyb3Igd2FzIGZvdW5kLiAqLworCQlpZiAoIXBvcHVsYXRlX2FycmF5X2RpbV9qc29uYigm Y3R4LCBqc3YtPnZhbC5qc29uYiwgMSkpCisJCXsKKwkJCSppc251bGwgPSB0cnVlOworCQkJcmV0 dXJuIChEYXR1bSkgMDsKKwkJfQogCQljdHguZGltc1swXSA9IGN0eC5zaXplc1swXTsKIAl9CiAK QEAgLTI4NDIsMTEgKzI5NDAsMTYgQEAgcG9wdWxhdGVfYXJyYXkoQXJyYXlJT0RhdGEgKmFpbywK IAlwZnJlZShjdHguc2l6ZXMpOwogCXBmcmVlKGxicyk7CiAKKwkqaXNudWxsID0gZmFsc2U7CiAJ cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQKLUpzVmFsdWVUb0pzT2JqZWN0KEpzVmFs dWUgKmpzdiwgSnNPYmplY3QgKmpzbykKKy8qCisgKiBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9y IG9jY3VycywgcHJvdmlkZWQgZXNjb250ZXh0IHBvaW50cyB0byBhbgorICogRXJyb3JTYXZlQ29u dGV4dC4KKyAqLworc3RhdGljIGJvb2wKK0pzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUgKmpzdiwg SnNPYmplY3QgKmpzbywgTm9kZSAqZXNjb250ZXh0KQogewogCWpzby0+aXNfanNvbiA9IGpzdi0+ aXNfanNvbjsKIApAQCAtMjg1OCw3ICsyOTYxLDggQEAgSnNWYWx1ZVRvSnNPYmplY3QoSnNWYWx1 ZSAqanN2LCBKc09iamVjdCAqanNvKQogCQkJCQkJCQkJanN2LT52YWwuanNvbi5sZW4gPj0gMAog CQkJCQkJCQkJPyBqc3YtPnZhbC5qc29uLmxlbgogCQkJCQkJCQkJOiBzdHJsZW4oanN2LT52YWwu anNvbi5zdHIpLAotCQkJCQkJCQkJInBvcHVsYXRlX2NvbXBvc2l0ZSIpOworCQkJCQkJCQkJInBv cHVsYXRlX2NvbXBvc2l0ZSIsCisJCQkJCQkJCQllc2NvbnRleHQpOwogCX0KIAllbHNlCiAJewpA QCAtMjg3Niw3ICsyOTgwLDcgQEAgSnNWYWx1ZVRvSnNPYmplY3QoSnNWYWx1ZSAqanN2LCBKc09i amVjdCAqanNvKQogCQkJaXNfc2NhbGFyID0gSXNBSnNvbmJTY2FsYXIoamJ2KSB8fAogCQkJCShq YnYtPnR5cGUgPT0gamJ2QmluYXJ5ICYmCiAJCQkJIEpzb25Db250YWluZXJJc1NjYWxhcihqYnYt PnZhbC5iaW5hcnkuZGF0YSkpOwotCQkJZXJlcG9ydChFUlJPUiwKKwkJCWVycnNhdmUoZXNjb250 ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJ CQkJIGlzX3NjYWxhcgogCQkJCQkgPyBlcnJtc2coImNhbm5vdCBjYWxsICVzIG9uIGEgc2NhbGFy IiwKQEAgLTI4ODUsNiArMjk4OSw4IEBAIEpzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUgKmpzdiwg SnNPYmplY3QgKmpzbykKIAkJCQkJCQkgICJwb3B1bGF0ZV9jb21wb3NpdGUiKSkpOwogCQl9CiAJ fQorCisJcmV0dXJuICFTT0ZUX0VSUk9SX09DQ1VSUkVEKGVzY29udGV4dCk7CiB9CiAKIC8qIGFj cXVpcmUgb3IgdXBkYXRlIGNhY2hlZCB0dXBsZSBkZXNjcmlwdG9yIGZvciBhIGNvbXBvc2l0ZSB0 eXBlICovCkBAIC0yOTExLDcgKzMwMTcsMTIgQEAgdXBkYXRlX2NhY2hlZF90dXBkZXNjKENvbXBv c2l0ZUlPRGF0YSAqaW8sIE1lbW9yeUNvbnRleHQgbWN4dCkKIAl9CiB9CiAKLS8qIHJlY3Vyc2l2 ZWx5IHBvcHVsYXRlIGEgY29tcG9zaXRlIChyb3cgdHlwZSkgdmFsdWUgZnJvbSBqc29uL2pzb25i ICovCisvKgorICogUmVjdXJzaXZlbHkgcG9wdWxhdGUgYSBjb21wb3NpdGUgKHJvdyB0eXBlKSB2 YWx1ZSBmcm9tIGpzb24vanNvbmIKKyAqCisgKiBSZXR1cm5zIG51bGwgaWYgYW4gZXJyb3Igb2Nj dXJzIGluIGEgc3Vicm91dGluZSwgcHJvdmlkZWQgZXNjb250ZXh0IHBvaW50cworICogdG8gYW4g RXJyb3JTYXZlQ29udGV4dC4KKyAqLwogc3RhdGljIERhdHVtCiBwb3B1bGF0ZV9jb21wb3NpdGUo Q29tcG9zaXRlSU9EYXRhICppbywKIAkJCQkgICBPaWQgdHlwaWQsCkBAIC0yOTE5LDE0ICszMDMw LDE1IEBAIHBvcHVsYXRlX2NvbXBvc2l0ZShDb21wb3NpdGVJT0RhdGEgKmlvLAogCQkJCSAgIE1l bW9yeUNvbnRleHQgbWN4dCwKIAkJCQkgICBIZWFwVHVwbGVIZWFkZXIgZGVmYXVsdHZhbCwKIAkJ CQkgICBKc1ZhbHVlICpqc3YsCi0JCQkJICAgYm9vbCBpc251bGwpCisJCQkJICAgYm9vbCAqaXNu dWxsLAorCQkJCSAgIE5vZGUgKmVzY29udGV4dCkKIHsKIAlEYXR1bQkJcmVzdWx0OwogCiAJLyog YWNxdWlyZS91cGRhdGUgY2FjaGVkIHR1cGxlIGRlc2NyaXB0b3IgKi8KIAl1cGRhdGVfY2FjaGVk X3R1cGRlc2MoaW8sIG1jeHQpOwogCi0JaWYgKGlzbnVsbCkKKwlpZiAoKmlzbnVsbCkKIAkJcmVz dWx0ID0gKERhdHVtKSAwOwogCWVsc2UKIAl7CkBAIC0yOTM0LDExICszMDQ2LDE1IEBAIHBvcHVs YXRlX2NvbXBvc2l0ZShDb21wb3NpdGVJT0RhdGEgKmlvLAogCQlKc09iamVjdAlqc287CiAKIAkJ LyogcHJlcGFyZSBpbnB1dCB2YWx1ZSAqLwotCQlKc1ZhbHVlVG9Kc09iamVjdChqc3YsICZqc28p OworCQlpZiAoIUpzVmFsdWVUb0pzT2JqZWN0KGpzdiwgJmpzbywgZXNjb250ZXh0KSkKKwkJewor CQkJKmlzbnVsbCA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CiAKIAkJLyogcG9w dWxhdGUgcmVzdWx0aW5nIHJlY29yZCB0dXBsZSAqLwogCQl0dXBsZSA9IHBvcHVsYXRlX3JlY29y ZChpby0+dHVwZGVzYywgJmlvLT5yZWNvcmRfaW8sCi0JCQkJCQkJCWRlZmF1bHR2YWwsIG1jeHQs ICZqc28pOworCQkJCQkJCQlkZWZhdWx0dmFsLCBtY3h0LCAmanNvLCBlc2NvbnRleHQpOwogCQly ZXN1bHQgPSBIZWFwVHVwbGVIZWFkZXJHZXREYXR1bSh0dXBsZSk7CiAKIAkJSnNPYmplY3RGcmVl KCZqc28pOwpAQCAtMjk1MCwxNCArMzA2NiwyMCBAQCBwb3B1bGF0ZV9jb21wb3NpdGUoQ29tcG9z aXRlSU9EYXRhICppbywKIAkgKiBub3csIHdlIGNhbiB0ZWxsIGJ5IGNvbXBhcmluZyB0eXBpZCB0 byBiYXNlX3R5cGlkLikKIAkgKi8KIAlpZiAodHlwaWQgIT0gaW8tPmJhc2VfdHlwaWQgJiYgdHlw aWQgIT0gUkVDT1JET0lEKQotCQlkb21haW5fY2hlY2socmVzdWx0LCBpc251bGwsIHR5cGlkLCAm aW8tPmRvbWFpbl9pbmZvLCBtY3h0KTsKKwkJZG9tYWluX2NoZWNrKHJlc3VsdCwgKmlzbnVsbCwg dHlwaWQsICZpby0+ZG9tYWluX2luZm8sIG1jeHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAot LyogcG9wdWxhdGUgbm9uLW51bGwgc2NhbGFyIHZhbHVlIGZyb20ganNvbi9qc29uYiB2YWx1ZSAq LworLyoKKyAqIFBvcHVsYXRlIG5vbi1udWxsIHNjYWxhciB2YWx1ZSBmcm9tIGpzb24vanNvbmIg dmFsdWUuCisgKgorICogUmV0dXJucyBudWxsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhl IGNhbGwgdG8gdHlwZSBpbnB1dCBmdW5jdGlvbiwKKyAqIHByb3ZpZGVkIGVzY29udGV4dCBpcyB2 YWxpZC4KKyAqLwogc3RhdGljIERhdHVtCi1wb3B1bGF0ZV9zY2FsYXIoU2NhbGFySU9EYXRhICpp bywgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzVmFsdWUgKmpzdikKK3BvcHVsYXRlX3NjYWxh cihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2 LAorCQkJCWJvb2wgKmlzbnVsbCwgTm9kZSAqZXNjb250ZXh0KQogewogCURhdHVtCQlyZXM7CiAJ Y2hhcgkgICAqc3RyID0gTlVMTDsKQEAgLTMwMjgsNyArMzE1MCwxMiBAQCBwb3B1bGF0ZV9zY2Fs YXIoU2NhbGFySU9EYXRhICppbywgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzVmFsdWUgKmpz dikKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNvbmIgdHlwZTogJWQiLCAoaW50KSBq YnYtPnR5cGUpOwogCX0KIAotCXJlcyA9IElucHV0RnVuY3Rpb25DYWxsKCZpby0+dHlwaW9mdW5j LCBzdHIsIGlvLT50eXBpb3BhcmFtLCB0eXBtb2QpOworCWlmICghSW5wdXRGdW5jdGlvbkNhbGxT YWZlKCZpby0+dHlwaW9mdW5jLCBzdHIsIGlvLT50eXBpb3BhcmFtLCB0eXBtb2QsCisJCQkJCQkJ ICAgZXNjb250ZXh0LCAmcmVzKSkKKwl7CisJCXJlcyA9IChEYXR1bSkgMDsKKwkJKmlzbnVsbCA9 IHRydWU7CisJfQogCiAJLyogZnJlZSB0ZW1wb3JhcnkgYnVmZmVyICovCiAJaWYgKHN0ciAhPSBq c29uKQpAQCAtMzA0Myw3ICszMTcwLDggQEAgcG9wdWxhdGVfZG9tYWluKERvbWFpbklPRGF0YSAq aW8sCiAJCQkJY29uc3QgY2hhciAqY29sbmFtZSwKIAkJCQlNZW1vcnlDb250ZXh0IG1jeHQsCiAJ CQkJSnNWYWx1ZSAqanN2LAotCQkJCWJvb2wgaXNudWxsKQorCQkJCWJvb2wgaXNudWxsLAorCQkJ CU5vZGUgKmVzY29udGV4dCkKIHsKIAlEYXR1bQkJcmVzOwogCkBAIC0zMDU0LDggKzMxODIsOCBA QCBwb3B1bGF0ZV9kb21haW4oRG9tYWluSU9EYXRhICppbywKIAkJcmVzID0gcG9wdWxhdGVfcmVj b3JkX2ZpZWxkKGlvLT5iYXNlX2lvLAogCQkJCQkJCQkJaW8tPmJhc2VfdHlwaWQsIGlvLT5iYXNl X3R5cG1vZCwKIAkJCQkJCQkJCWNvbG5hbWUsIG1jeHQsIFBvaW50ZXJHZXREYXR1bShOVUxMKSwK LQkJCQkJCQkJCWpzdiwgJmlzbnVsbCk7Ci0JCUFzc2VydCghaXNudWxsKTsKKwkJCQkJCQkJCWpz diwgJmlzbnVsbCwgZXNjb250ZXh0KTsKKwkJQXNzZXJ0KCFpc251bGwgfHwgU09GVF9FUlJPUl9P Q0NVUlJFRChlc2NvbnRleHQpKTsKIAl9CiAKIAlkb21haW5fY2hlY2socmVzLCBpc251bGwsIHR5 cGlkLCAmaW8tPmRvbWFpbl9pbmZvLCBtY3h0KTsKQEAgLTMxNTksNyArMzI4Nyw4IEBAIHBvcHVs YXRlX3JlY29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwKIAkJCQkJICBNZW1vcnlDb250ZXh0 IG1jeHQsCiAJCQkJCSAgRGF0dW0gZGVmYXVsdHZhbCwKIAkJCQkJICBKc1ZhbHVlICpqc3YsCi0J CQkJCSAgYm9vbCAqaXNudWxsKQorCQkJCQkgIGJvb2wgKmlzbnVsbCwKKwkJCQkJICBOb2RlICpl c2NvbnRleHQpCiB7CiAJVHlwZUNhdAkJdHlwY2F0OwogCkBAIC0zMTkyLDEwICszMzIxLDEyIEBA IHBvcHVsYXRlX3JlY29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwKIAlzd2l0Y2ggKHR5cGNh dCkKIAl7CiAJCWNhc2UgVFlQRUNBVF9TQ0FMQVI6Ci0JCQlyZXR1cm4gcG9wdWxhdGVfc2NhbGFy KCZjb2wtPnNjYWxhcl9pbywgdHlwaWQsIHR5cG1vZCwganN2KTsKKwkJCXJldHVybiBwb3B1bGF0 ZV9zY2FsYXIoJmNvbC0+c2NhbGFyX2lvLCB0eXBpZCwgdHlwbW9kLCBqc3YsCisJCQkJCQkJCSAg IGlzbnVsbCwgZXNjb250ZXh0KTsKIAogCQljYXNlIFRZUEVDQVRfQVJSQVk6Ci0JCQlyZXR1cm4g cG9wdWxhdGVfYXJyYXkoJmNvbC0+aW8uYXJyYXksIGNvbG5hbWUsIG1jeHQsIGpzdik7CisJCQly ZXR1cm4gcG9wdWxhdGVfYXJyYXkoJmNvbC0+aW8uYXJyYXksIGNvbG5hbWUsIG1jeHQsIGpzdiwK KwkJCQkJCQkJICBpc251bGwsIGVzY29udGV4dCk7CiAKIAkJY2FzZSBUWVBFQ0FUX0NPTVBPU0lU RToKIAkJY2FzZSBUWVBFQ0FUX0NPTVBPU0lURV9ET01BSU46CkBAIC0zMjA0LDExICszMzM1LDEy IEBAIHBvcHVsYXRlX3JlY29yZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwKIAkJCQkJCQkJCSAg RGF0dW1HZXRQb2ludGVyKGRlZmF1bHR2YWwpCiAJCQkJCQkJCQkgID8gRGF0dW1HZXRIZWFwVHVw bGVIZWFkZXIoZGVmYXVsdHZhbCkKIAkJCQkJCQkJCSAgOiBOVUxMLAotCQkJCQkJCQkJICBqc3Ys ICppc251bGwpOworCQkJCQkJCQkJICBqc3YsIGlzbnVsbCwKKwkJCQkJCQkJCSAgZXNjb250ZXh0 KTsKIAogCQljYXNlIFRZUEVDQVRfRE9NQUlOOgogCQkJcmV0dXJuIHBvcHVsYXRlX2RvbWFpbigm Y29sLT5pby5kb21haW4sIHR5cGlkLCBjb2xuYW1lLCBtY3h0LAotCQkJCQkJCQkgICBqc3YsICpp c251bGwpOworCQkJCQkJCQkgICBqc3YsICppc251bGwsIGVzY29udGV4dCk7CiAKIAkJZGVmYXVs dDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHlwZSBjYXRlZ29yeSAnJWMnIiwgdHlw Y2F0KTsKQEAgLTMyNjUsNyArMzM5Nyw4IEBAIHBvcHVsYXRlX3JlY29yZChUdXBsZURlc2MgdHVw ZGVzYywKIAkJCQlSZWNvcmRJT0RhdGEgKipyZWNvcmRfcCwKIAkJCQlIZWFwVHVwbGVIZWFkZXIg ZGVmYXVsdHZhbCwKIAkJCQlNZW1vcnlDb250ZXh0IG1jeHQsCi0JCQkJSnNPYmplY3QgKm9iaikK KwkJCQlKc09iamVjdCAqb2JqLAorCQkJCU5vZGUgKmVzY29udGV4dCkKIHsKIAlSZWNvcmRJT0Rh dGEgKnJlY29yZCA9ICpyZWNvcmRfcDsKIAlEYXR1bQkgICAqdmFsdWVzOwpAQCAtMzM1Nyw3ICsz NDkwLDggQEAgcG9wdWxhdGVfcmVjb3JkKFR1cGxlRGVzYyB0dXBkZXNjLAogCQkJCQkJCQkJCSAg bWN4dCwKIAkJCQkJCQkJCQkgIG51bGxzW2ldID8gKERhdHVtKSAwIDogdmFsdWVzW2ldLAogCQkJ CQkJCQkJCSAgJmZpZWxkLAotCQkJCQkJCQkJCSAgJm51bGxzW2ldKTsKKwkJCQkJCQkJCQkgICZu dWxsc1tpXSwKKwkJCQkJCQkJCQkgIGVzY29udGV4dCk7CiAJfQogCiAJcmVzID0gaGVhcF9mb3Jt X3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOwpAQCAtMzQ0NCw2ICszNTc4LDcgQEAgcG9w dWxhdGVfcmVjb3JkX3dvcmtlcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgY29uc3QgY2hhciAq ZnVuY25hbWUsCiAJSnNWYWx1ZQkJanN2ID0gezB9OwogCUhlYXBUdXBsZUhlYWRlciByZWM7CiAJ RGF0dW0JCXJldHR1cGxlOworCWJvb2wJCWlzbnVsbDsKIAlKc29uYlZhbHVlCWpidjsKIAlNZW1v cnlDb250ZXh0IGZubWN4dCA9IGZjaW5mby0+ZmxpbmZvLT5mbl9tY3h0OwogCVBvcHVsYXRlUmVj b3JkQ2FjaGUgKmNhY2hlID0gZmNpbmZvLT5mbGluZm8tPmZuX2V4dHJhOwpAQCAtMzUzMCw4ICsz NjY1LDExIEBAIHBvcHVsYXRlX3JlY29yZF93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s IGNvbnN0IGNoYXIgKmZ1bmNuYW1lLAogCQlqYnYudmFsLmJpbmFyeS5sZW4gPSBWQVJTSVpFKGpi KSAtIFZBUkhEUlNaOwogCX0KIAorCWlzbnVsbCA9IGZhbHNlOwogCXJldHR1cGxlID0gcG9wdWxh dGVfY29tcG9zaXRlKCZjYWNoZS0+Yy5pby5jb21wb3NpdGUsIGNhY2hlLT5hcmd0eXBlLAotCQkJ CQkJCQkgIE5VTEwsIGZubWN4dCwgcmVjLCAmanN2LCBmYWxzZSk7CisJCQkJCQkJCSAgTlVMTCwg Zm5tY3h0LCByZWMsICZqc3YsICZpc251bGwsCisJCQkJCQkJCSAgTlVMTCk7CisJQXNzZXJ0KCFp c251bGwpOwogCiAJUEdfUkVUVVJOX0RBVFVNKHJldHR1cGxlKTsKIH0KQEAgLTM1NDIsNyArMzY4 MCw4IEBAIHBvcHVsYXRlX3JlY29yZF93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGNv bnN0IGNoYXIgKmZ1bmNuYW1lLAogICogZGVjb21wb3NlIGEganNvbiBvYmplY3QgaW50byBhIGhh c2ggdGFibGUuCiAgKi8KIHN0YXRpYyBIVEFCICoKLWdldF9qc29uX29iamVjdF9hc19oYXNoKGNo YXIgKmpzb24sIGludCBsZW4sIGNvbnN0IGNoYXIgKmZ1bmNuYW1lKQorZ2V0X2pzb25fb2JqZWN0 X2FzX2hhc2goY2hhciAqanNvbiwgaW50IGxlbiwgY29uc3QgY2hhciAqZnVuY25hbWUsCisJCQkJ CQlOb2RlICplc2NvbnRleHQpCiB7CiAJSEFTSENUTAkJY3RsOwogCUhUQUIJICAgKnRhYjsKQEAg LTM1NzEsNyArMzcxMCw3IEBAIGdldF9qc29uX29iamVjdF9hc19oYXNoKGNoYXIgKmpzb24sIGlu dCBsZW4sIGNvbnN0IGNoYXIgKmZ1bmNuYW1lKQogCXNlbS0+b2JqZWN0X2ZpZWxkX3N0YXJ0ID0g aGFzaF9vYmplY3RfZmllbGRfc3RhcnQ7CiAJc2VtLT5vYmplY3RfZmllbGRfZW5kID0gaGFzaF9v YmplY3RfZmllbGRfZW5kOwogCi0JcGdfcGFyc2VfanNvbl9vcl9lcmVwb3J0KGxleCwgc2VtKTsK KwlwZ19wYXJzZV9qc29uX29yX2VycnNhdmUobGV4LCBzZW0sIGVzY29udGV4dCk7CiAKIAlyZXR1 cm4gdGFiOwogfQpAQCAtMzc0MCw3ICszODc5LDggQEAgcG9wdWxhdGVfcmVjb3Jkc2V0X3JlY29y ZChQb3B1bGF0ZVJlY29yZHNldFN0YXRlICpzdGF0ZSwgSnNPYmplY3QgKm9iaikKIAkJCQkJCQkg ICZjYWNoZS0+Yy5pby5jb21wb3NpdGUucmVjb3JkX2lvLAogCQkJCQkJCSAgc3RhdGUtPnJlYywK IAkJCQkJCQkgIGNhY2hlLT5mbl9tY3h0LAotCQkJCQkJCSAgb2JqKTsKKwkJCQkJCQkgIG9iaiwK KwkJCQkJCQkgIE5VTEwpOwogCiAJLyogaWYgaXQncyBkb21haW4gb3ZlciBjb21wb3NpdGUsIGNo ZWNrIGRvbWFpbiBjb25zdHJhaW50cyAqLwogCWlmIChjYWNoZS0+Yy50eXBjYXQgPT0gVFlQRUNB VF9DT01QT1NJVEVfRE9NQUlOKQotLSAKMi4zNS4zCgo= --000000000000ff2e2c060678442e Content-Type: application/octet-stream; name="v22-0005-Claim-SQL-standard-compliance-for-SQL-JSON-featu.patch" Content-Disposition: attachment; filename="v22-0005-Claim-SQL-standard-compliance-for-SQL-JSON-featu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ln44rd7n0 RnJvbSBhNjU0MGY2MTM1YjBhMmU2MWQ4MzQ3OWVmYjFkOGUwYjQyYmJmOTI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjEgU2VwIDIwMjMgMTA6MTQ6MTggKzA5MDAKU3ViamVjdDogW1BBVENIIHYy MiA1LzVdIENsYWltIFNRTCBzdGFuZGFyZCBjb21wbGlhbmNlIGZvciBTUUwvSlNPTiBmZWF0dXJl cwoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9kMDNkODA5Yy1kMGZiLWZkNmEtMTQ3 Ni1kNmRjMThlYzk0MGVAZHVuc2xhbmUubmV0Ci0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxf ZmVhdHVyZXMudHh0IHwgMTggKysrKysrKysrLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOSBp bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVz LnR4dAppbmRleCBiMzMwNjVkN2JmLi5iMzc5YzcxZGY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxf ZmVhdHVyZXMudHh0CkBAIC01NDgsMTUgKzU0OCwxNSBAQCBUODExCUJhc2ljIFNRTC9KU09OIGNv bnN0cnVjdG9yIGZ1bmN0aW9ucwkJCVlFUwogVDgxMglTUUwvSlNPTjogSlNPTl9PQkpFQ1RBR0cJ CQlZRVMJCiBUODEzCVNRTC9KU09OOiBKU09OX0FSUkFZQUdHIHdpdGggT1JERVIgQlkJCQlZRVMJ CiBUODE0CUNvbG9uIGluIEpTT05fT0JKRUNUIG9yIEpTT05fT0JKRUNUQUdHCQkJWUVTCQotVDgy MQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBvcGVyYXRvcnMJCQlOTwkKK1Q4MjEJQmFzaWMgU1FML0pT T04gcXVlcnkgb3BlcmF0b3JzCQkJWUVTCQogVDgyMglTUUwvSlNPTjogSVMgSlNPTiBXSVRIIFVO SVFVRSBLRVlTIHByZWRpY2F0ZQkJCVlFUwkKLVQ4MjMJU1FML0pTT046IFBBU1NJTkcgY2xhdXNl CQkJTk8JCi1UODI0CUpTT05fVEFCTEU6IHNwZWNpZmljIFBMQU4gY2xhdXNlCQkJTk8JCi1UODI1 CVNRTC9KU09OOiBPTiBFTVBUWSBhbmQgT04gRVJST1IgY2xhdXNlcwkJCU5PCQotVDgyNglHZW5l cmFsIHZhbHVlIGV4cHJlc3Npb24gaW4gT04gRVJST1Igb3IgT04gRU1QVFkgY2xhdXNlcwkJCU5P CQotVDgyNwlKU09OX1RBQkxFOiBzaWJsaW5nIE5FU1RFRCBDT0xVTU5TIGNsYXVzZXMJCQlOTwkK LVQ4MjgJSlNPTl9RVUVSWQkJCU5PCQotVDgyOQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9w dGlvbnMJCQlOTwkKK1Q4MjMJU1FML0pTT046IFBBU1NJTkcgY2xhdXNlCQkJWUVTCQorVDgyNAlK U09OX1RBQkxFOiBzcGVjaWZpYyBQTEFOIGNsYXVzZQkJCVlFUwkKK1Q4MjUJU1FML0pTT046IE9O IEVNUFRZIGFuZCBPTiBFUlJPUiBjbGF1c2VzCQkJWUVTCQorVDgyNglHZW5lcmFsIHZhbHVlIGV4 cHJlc3Npb24gaW4gT04gRVJST1Igb3IgT04gRU1QVFkgY2xhdXNlcwkJCVlFUwkKK1Q4MjcJSlNP Tl9UQUJMRTogc2libGluZyBORVNURUQgQ09MVU1OUyBjbGF1c2VzCQkJWUVTCQorVDgyOAlKU09O X1FVRVJZCQkJWUVTCQorVDgyOQlKU09OX1FVRVJZOiBhcnJheSB3cmFwcGVyIG9wdGlvbnMJCQlZ RVMJCiBUODMwCUVuZm9yY2luZyB1bmlxdWUga2V5cyBpbiBTUUwvSlNPTiBjb25zdHJ1Y3RvciBm dW5jdGlvbnMJCQlZRVMJCiBUODMxCVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHN0cmljdCBtb2Rl CQkJWUVTCQogVDgzMglTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBpdGVtIG1ldGhvZAkJCVlFUwkK QEAgLTU2NSw3ICs1NjUsNyBAQCBUODM0CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHdpbGRjYXJk IG1lbWJlciBhY2Nlc3NvcgkJCVlFUwogVDgzNQlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiBmaWx0 ZXIgZXhwcmVzc2lvbnMJCQlZRVMJCiBUODM2CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IHN0YXJ0 cyB3aXRoIHByZWRpY2F0ZQkJCVlFUwkKIFQ4MzcJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogcmVn ZXhfbGlrZSBwcmVkaWNhdGUJCQlZRVMJCi1UODM4CUpTT05fVEFCTEU6IFBMQU4gREVGQVVMVCBj bGF1c2UJCQlOTwkKK1Q4MzgJSlNPTl9UQUJMRTogUExBTiBERUZBVUxUIGNsYXVzZQkJCVlFUwkK IFQ4MzkJRm9ybWF0dGVkIGNhc3Qgb2YgZGF0ZXRpbWVzIHRvL2Zyb20gY2hhcmFjdGVyIHN0cmlu Z3MJCQlOTwkKIFQ4NDAJSGV4IGludGVnZXIgbGl0ZXJhbHMgaW4gU1FML0pTT04gcGF0aCBsYW5n dWFnZQkJCVlFUwkKIFQ4NTEJU1FML0pTT046IG9wdGlvbmFsIGtleXdvcmRzIGZvciBkZWZhdWx0 IHN5bnRheAkJCVlFUwkKLS0gCjIuMzUuMwoK --000000000000ff2e2c060678442e Content-Type: application/octet-stream; name="v22-0001-Add-soft-error-handling-to-some-expression-nodes.patch" Content-Disposition: attachment; filename="v22-0001-Add-soft-error-handling-to-some-expression-nodes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ln44rd9f4 RnJvbSAwZWZlMGNhNTU3Zjk0MjhhYmE1ZjRmNWE4ZWNmMTlhZTI3NTYzZjRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IEZyaSwgMjkgU2VwIDIwMjMgMTM6MjI6MTUgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy MiAxLzVdIEFkZCBzb2Z0IGVycm9yIGhhbmRsaW5nIHRvIHNvbWUgZXhwcmVzc2lvbiBub2RlcwpN SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgK Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBhZGp1c3RzIHRoZSBDb2VyY2VW aWFJTyBhbmQgQ29lcmNlVG9Eb21haW4gZXhwcmVzc2lvbiBldmFsdWF0aW9uCmNvZGUgdG8gaGFu ZGxlIGVycm9ycyBzb2Z0bHkuCgpGb3IgQ29lcmNlVmlhSW8sIHRoaXMgbWVhbnMgdXNpbmcgSW5w dXRGdW5jdGlvbkNhbGxTYWZlKCksIHdoaWNoCnByb3ZpZGVzIHRoZSBvcHRpb24gdG8gaGFuZGxl IGVycm9ycyBzb2Z0bHksIGluc3RlYWQgb2YgY2FsbGluZyB0aGUKdHlwZSBpbnB1dCBmdW5jdGlv biBkaXJlY3RseS4KCkZvciBDb2VyY2VUb0RvbWFpbiwgdGhpcyBzaW1wbHkgZW50YWlscyByZXBs YWNpbmcgdGhlIGVyZXBvcnQoKSBpbgpFeGVjRXZhbENvbnN0cmFpbnRDaGVjaygpIGJ5IGVycnNh dmUoKS4KCkluIGJvdGggY2FzZXMsIHRoZSBFcnJvclNhdmVDb250ZXh0IHRvIGJlIHVzZWQgaXMg cG9wdWxhdGVkIGluIHRoZQpleHByZXNzaW9uJ3Mgc3RydWN0IGluIHRoZSBFeHByRXZhbFN0ZXAu ICBUaGUgRXJyb3JTYXZlQ29udGV4dCBjYW4gYmUKcGFzc2VkIGJ5IHNldHRpbmcgRXhwclN0YXRl LmVzY29udGV4dCB0byBwb2ludCB0byBpdCBiZWZvcmUgY2FsbGluZwpFeGVjSW5pdEV4cHJSZWMo KSBvbiB0aGUgZXhwcmVzc2lvbiB0cmVlIHdob3NlIGVycm9ycyBhcmUgdG8gYmUKc3VwcHJlc3Nl ZC4KCk5vdGUgdGhhdCBubyBjYWxsIHNpdGUgb2YgRXhlY0luaXRFeHByUmVjKCkgaGFzIGJlZW4g Y2hhbmdlZCBpbiB0aGlzCmNvbW1pdCwgc28gdGhlcmUncyBubyBmdW5jdGlvbmFsIGNoYW5nZS4g IFRoaXMgaXMgaW50ZW5kZWQgZm9yCmltcGxlbWVudGluZyBuZXcgU1FML0pTT04gZXhwcmVzc2lv biBub2RlcyBpbiBmdXR1cmUgY29tbWl0cyB0aGF0CndpbGwgdXNlIHRvIGl0IHN1cHByZXNzIGVy cm9ycyB0aGF0IG1heSBvY2N1ciBkdXJpbmcgdHlwZSBjb2VyY2lvbnMuCgpSZXZpZXdlZC1ieTog w4FsdmFybyBIZXJyZXJhCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUU0 WFRkZmIxblc9T2pveV90UVNSaFl0LXFfa2I2aTVkNHhjS3lyTEMxTmJnQG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyAgICAgICB8IDI4ICsrKysrLS0t LS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgMzYgKysrKysrLS0t LS0tLS0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXQuYyAgICAgICAgfCAgNCArKwogc3Jj L2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgICB8IDcxICsrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jICB8ICAzICsr CiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgIHwgIDUgKy0KIHNyYy9pbmNs dWRlL2ppdC9sbHZtaml0LmggICAgICAgICAgICAgfCAgMiArCiBzcmMvaW5jbHVkZS9qaXQvbGx2 bWppdF9lbWl0LmggICAgICAgIHwgIDkgKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggICAgICAgICB8ICA3ICsrKwogOSBmaWxlcyBjaGFuZ2VkLCA5NSBpbnNlcnRpb25zKCspLCA3 MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCAyYzYyYjBjOWM4Li43 ODc5NmFjZDhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTEzOSw2ICsxMzksNyBAQCBF eGVjSW5pdEV4cHIoRXhwciAqbm9kZSwgUGxhblN0YXRlICpwYXJlbnQpCiAJc3RhdGUtPmV4cHIg PSBub2RlOwogCXN0YXRlLT5wYXJlbnQgPSBwYXJlbnQ7CiAJc3RhdGUtPmV4dF9wYXJhbXMgPSBO VUxMOworCXN0YXRlLT5lc2NvbnRleHQgPSBOVUxMOwogCiAJLyogSW5zZXJ0IHNldHVwIHN0ZXBz IGFzIG5lZWRlZCAqLwogCUV4ZWNDcmVhdGVFeHByU2V0dXBTdGVwcyhzdGF0ZSwgKE5vZGUgKikg bm9kZSk7CkBAIC0xNzYsNiArMTc3LDcgQEAgRXhlY0luaXRFeHByV2l0aFBhcmFtcyhFeHByICpu b2RlLCBQYXJhbUxpc3RJbmZvIGV4dF9wYXJhbXMpCiAJc3RhdGUtPmV4cHIgPSBub2RlOwogCXN0 YXRlLT5wYXJlbnQgPSBOVUxMOwogCXN0YXRlLT5leHRfcGFyYW1zID0gZXh0X3BhcmFtczsKKwlz dGF0ZS0+ZXNjb250ZXh0ID0gTlVMTDsKIAogCS8qIEluc2VydCBzZXR1cCBzdGVwcyBhcyBuZWVk ZWQgKi8KIAlFeGVjQ3JlYXRlRXhwclNldHVwU3RlcHMoc3RhdGUsIChOb2RlICopIG5vZGUpOwpA QCAtMjI4LDYgKzIzMCw3IEBAIEV4ZWNJbml0UXVhbChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBh cmVudCkKIAlzdGF0ZS0+ZXhwciA9IChFeHByICopIHF1YWw7CiAJc3RhdGUtPnBhcmVudCA9IHBh cmVudDsKIAlzdGF0ZS0+ZXh0X3BhcmFtcyA9IE5VTEw7CisJc3RhdGUtPmVzY29udGV4dCA9IE5V TEw7CiAKIAkvKiBtYXJrIGV4cHJlc3Npb24gYXMgdG8gYmUgdXNlZCB3aXRoIEV4ZWNRdWFsKCkg Ki8KIAlzdGF0ZS0+ZmxhZ3MgPSBFRU9fRkxBR19JU19RVUFMOwpAQCAtMzczLDYgKzM3Niw3IEBA IEV4ZWNCdWlsZFByb2plY3Rpb25JbmZvKExpc3QgKnRhcmdldExpc3QsCiAJc3RhdGUtPmV4cHIg PSAoRXhwciAqKSB0YXJnZXRMaXN0OwogCXN0YXRlLT5wYXJlbnQgPSBwYXJlbnQ7CiAJc3RhdGUt PmV4dF9wYXJhbXMgPSBOVUxMOworCXN0YXRlLT5lc2NvbnRleHQgPSBOVUxMOwogCiAJc3RhdGUt PnJlc3VsdHNsb3QgPSBzbG90OwogCkBAIC01NDQsNiArNTQ4LDcgQEAgRXhlY0J1aWxkVXBkYXRl UHJvamVjdGlvbihMaXN0ICp0YXJnZXRMaXN0LAogCQlzdGF0ZS0+ZXhwciA9IE5VTEw7CQkvKiBu b3QgdXNlZCAqLwogCXN0YXRlLT5wYXJlbnQgPSBwYXJlbnQ7CiAJc3RhdGUtPmV4dF9wYXJhbXMg PSBOVUxMOworCXN0YXRlLT5lc2NvbnRleHQgPSBOVUxMOwogCiAJc3RhdGUtPnJlc3VsdHNsb3Qg PSBzbG90OwogCkBAIC0xNTQ5LDggKzE1NTQsNiBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9k ZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJCQlDb2VyY2VWaWFJTyAqaW9jb2VyY2UgPSAoQ29lcmNl VmlhSU8gKikgbm9kZTsKIAkJCQlPaWQJCQlpb2Z1bmM7CiAJCQkJYm9vbAkJdHlwaXN2YXJsZW5h OwotCQkJCU9pZAkJCXR5cGlvcGFyYW07Ci0JCQkJRnVuY3Rpb25DYWxsSW5mbyBmY2luZm9faW47 CiAKIAkJCQkvKiBldmFsdWF0ZSBhcmd1bWVudCBpbnRvIHN0ZXAncyByZXN1bHQgYXJlYSAqLwog CQkJCUV4ZWNJbml0RXhwclJlYyhpb2NvZXJjZS0+YXJnLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7 CkBAIC0xNTc5LDI1ICsxNTgyLDEzIEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHBy U3RhdGUgKnN0YXRlLAogCiAJCQkJLyogbG9va3VwIHRoZSByZXN1bHQgdHlwZSdzIGlucHV0IGZ1 bmN0aW9uICovCiAJCQkJc2NyYXRjaC5kLmlvY29lcmNlLmZpbmZvX2luID0gcGFsbG9jMChzaXpl b2YoRm1nckluZm8pKTsKLQkJCQlzY3JhdGNoLmQuaW9jb2VyY2UuZmNpbmZvX2RhdGFfaW4gPSBw YWxsb2MwKFNpemVGb3JGdW5jdGlvbkNhbGxJbmZvKDMpKTsKLQogCQkJCWdldFR5cGVJbnB1dElu Zm8oaW9jb2VyY2UtPnJlc3VsdHR5cGUsCi0JCQkJCQkJCSAmaW9mdW5jLCAmdHlwaW9wYXJhbSk7 CisJCQkJCQkJCSAmaW9mdW5jLCAmc2NyYXRjaC5kLmlvY29lcmNlLnR5cGlvcGFyYW0pOwogCQkJ CWZtZ3JfaW5mbyhpb2Z1bmMsIHNjcmF0Y2guZC5pb2NvZXJjZS5maW5mb19pbik7CiAJCQkJZm1n cl9pbmZvX3NldF9leHByKChOb2RlICopIG5vZGUsIHNjcmF0Y2guZC5pb2NvZXJjZS5maW5mb19p bik7Ci0JCQkJSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCpzY3JhdGNoLmQuaW9jb2VyY2UuZmNp bmZvX2RhdGFfaW4sCi0JCQkJCQkJCQkJIHNjcmF0Y2guZC5pb2NvZXJjZS5maW5mb19pbiwKLQkJ CQkJCQkJCQkgMywgSW52YWxpZE9pZCwgTlVMTCwgTlVMTCk7CiAKLQkJCQkvKgotCQkJCSAqIFdl IGNhbiBwcmVsb2FkIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cyBmb3IgdGhlIGlucHV0 Ci0JCQkJICogZnVuY3Rpb24sIHNpbmNlIHRoZXkncmUgY29uc3RhbnRzLgotCQkJCSAqLwotCQkJ CWZjaW5mb19pbiA9IHNjcmF0Y2guZC5pb2NvZXJjZS5mY2luZm9fZGF0YV9pbjsKLQkJCQlmY2lu Zm9faW4tPmFyZ3NbMV0udmFsdWUgPSBPYmplY3RJZEdldERhdHVtKHR5cGlvcGFyYW0pOwotCQkJ CWZjaW5mb19pbi0+YXJnc1sxXS5pc251bGwgPSBmYWxzZTsKLQkJCQlmY2luZm9faW4tPmFyZ3Nb Ml0udmFsdWUgPSBJbnQzMkdldERhdHVtKC0xKTsKLQkJCQlmY2luZm9faW4tPmFyZ3NbMl0uaXNu dWxsID0gZmFsc2U7CisJCQkJLyogVXNlIHRoZSBFcnJvclNhdmVDb250ZXh0IHBhc3NlZCBieSB0 aGUgY2FsbGVyLiAqLworCQkJCXNjcmF0Y2guZC5pb2NvZXJjZS5lc2NvbnRleHQgPSBzdGF0ZS0+ ZXNjb250ZXh0OwogCiAJCQkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOwogCQkJ CWJyZWFrOwpAQCAtMTYyOCw2ICsxNjE5LDcgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUs IEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJZWxlbXN0YXRlLT5leHByID0gYWNvZXJjZS0+ZWxlbWV4 cHI7CiAJCQkJZWxlbXN0YXRlLT5wYXJlbnQgPSBzdGF0ZS0+cGFyZW50OwogCQkJCWVsZW1zdGF0 ZS0+ZXh0X3BhcmFtcyA9IHN0YXRlLT5leHRfcGFyYW1zOworCQkJCXN0YXRlLT5lc2NvbnRleHQg PSBOVUxMOwogCiAJCQkJZWxlbXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZhbCA9IChEYXR1bSAqKSBw YWxsb2Moc2l6ZW9mKERhdHVtKSk7CiAJCQkJZWxlbXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwg PSAoYm9vbCAqKSBwYWxsb2Moc2l6ZW9mKGJvb2wpKTsKQEAgLTMzMDYsNiArMzI5OCw4IEBAIEV4 ZWNJbml0Q29lcmNlVG9Eb21haW4oRXhwckV2YWxTdGVwICpzY3JhdGNoLCBDb2VyY2VUb0RvbWFp biAqY3Rlc3QsCiAJLyogd2UnbGwgYWxsb2NhdGUgd29ya3NwYWNlIG9ubHkgaWYgbmVlZGVkICov CiAJc2NyYXRjaC0+ZC5kb21haW5jaGVjay5jaGVja3ZhbHVlID0gTlVMTDsKIAlzY3JhdGNoLT5k LmRvbWFpbmNoZWNrLmNoZWNrbnVsbCA9IE5VTEw7CisJLyogVXNlIHRoZSBFcnJvclNhdmVDb250 ZXh0IHBhc3NlZCBieSB0aGUgY2FsbGVyLiAqLworCXNjcmF0Y2gtPmQuZG9tYWluY2hlY2suZXNj b250ZXh0ID0gc3RhdGUtPmVzY29udGV4dDsKIAogCS8qCiAJICogRXZhbHVhdGUgYXJndW1lbnQg LSBpdCdzIGZpbmUgdG8gZGlyZWN0bHkgc3RvcmUgaXQgaW50byByZXN2L3Jlc251bGwsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCAyNGMyYjYwYzYyLi5jODAxOGRhMTlm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTYzLDYgKzYzLDcgQEAK ICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxhbi5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKICNp bmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCkBAIC0xMTc3LDI5ICsxMTc4LDI0IEBAIEV4ZWNJbnRlcnBF eHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxs KQogCQkJLyogY2FsbCBpbnB1dCBmdW5jdGlvbiAoc2ltaWxhciB0byBJbnB1dEZ1bmN0aW9uQ2Fs bCkgKi8KIAkJCWlmICghb3AtPmQuaW9jb2VyY2UuZmluZm9faW4tPmZuX3N0cmljdCB8fCBzdHIg IT0gTlVMTCkKIAkJCXsKLQkJCQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mb19pbjsKLQkJCQlEYXR1 bQkJZDsKLQotCQkJCWZjaW5mb19pbiA9IG9wLT5kLmlvY29lcmNlLmZjaW5mb19kYXRhX2luOwot CQkJCWZjaW5mb19pbi0+YXJnc1swXS52YWx1ZSA9IFBvaW50ZXJHZXREYXR1bShzdHIpOwotCQkJ CWZjaW5mb19pbi0+YXJnc1swXS5pc251bGwgPSAqb3AtPnJlc251bGw7Ci0JCQkJLyogc2Vjb25k IGFuZCB0aGlyZCBhcmd1bWVudHMgYXJlIGFscmVhZHkgc2V0IHVwICovCi0KLQkJCQlmY2luZm9f aW4tPmlzbnVsbCA9IGZhbHNlOwotCQkJCWQgPSBGdW5jdGlvbkNhbGxJbnZva2UoZmNpbmZvX2lu KTsKLQkJCQkqb3AtPnJlc3ZhbHVlID0gZDsKKwkJCQkvKgorCQkJCSAqIElucHV0RnVuY3Rpb25D YWxsU2FmZSgpIHdyaXRlcyBkaXJlY3RseSBpbnRvICpvcC0+cmVzdmFsdWUuCisJCQkJICogUmV0 dXJuIE5VTEwgaWYgYW4gZXJyb3IgaXMgcmVwb3J0ZWQuCisJCQkJICovCisJCQkJaWYgKCFJbnB1 dEZ1bmN0aW9uQ2FsbFNhZmUob3AtPmQuaW9jb2VyY2UuZmluZm9faW4sIHN0ciwKKwkJCQkJCQkJ CQkgICBvcC0+ZC5pb2NvZXJjZS50eXBpb3BhcmFtLCAtMSwKKwkJCQkJCQkJCQkgICAoTm9kZSAq KSBvcC0+ZC5pb2NvZXJjZS5lc2NvbnRleHQsCisJCQkJCQkJCQkJICAgb3AtPnJlc3ZhbHVlKSkK KwkJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKIAotCQkJCS8qIFNob3VsZCBnZXQgbnVsbCByZXN1 bHQgaWYgYW5kIG9ubHkgaWYgc3RyIGlzIE5VTEwgKi8KLQkJCQlpZiAoc3RyID09IE5VTEwpCi0J CQkJeworCQkJCS8qCisJCQkJICogU2hvdWxkIGdldCBudWxsIHJlc3VsdCBpZiBhbmQgb25seSBp ZiBzdHIgaXMgTlVMTCBvciBpZiB3ZQorCQkJCSAqIGdvdCBhbiBlcnJvciBhYm92ZS4KKwkJCQkg Ki8KKwkJCQlpZiAoc3RyID09IE5VTEwgfHwgU09GVF9FUlJPUl9PQ0NVUlJFRChzdGF0ZS0+ZXNj b250ZXh0KSkKIAkJCQkJQXNzZXJ0KCpvcC0+cmVzbnVsbCk7Ci0JCQkJCUFzc2VydChmY2luZm9f aW4tPmlzbnVsbCk7Ci0JCQkJfQogCQkJCWVsc2UKLQkJCQl7CiAJCQkJCUFzc2VydCghKm9wLT5y ZXNudWxsKTsKLQkJCQkJQXNzZXJ0KCFmY2luZm9faW4tPmlzbnVsbCk7Ci0JCQkJfQogCQkJfQog CiAJCQlFRU9fTkVYVCgpOwpAQCAtMzc0NSw3ICszNzQxLDcgQEAgRXhlY0V2YWxDb25zdHJhaW50 Q2hlY2soRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKIHsKIAlpZiAoISpvcC0+ ZC5kb21haW5jaGVjay5jaGVja251bGwgJiYKIAkJIURhdHVtR2V0Qm9vbCgqb3AtPmQuZG9tYWlu Y2hlY2suY2hlY2t2YWx1ZSkpCi0JCWVyZXBvcnQoRVJST1IsCisJCWVycnNhdmUoKE5vZGUgKikg b3AtPmQuZG9tYWluY2hlY2suZXNjb250ZXh0LAogCQkJCShlcnJjb2RlKEVSUkNPREVfQ0hFQ0tf VklPTEFUSU9OKSwKIAkJCQkgZXJybXNnKCJ2YWx1ZSBmb3IgZG9tYWluICVzIHZpb2xhdGVzIGNo ZWNrIGNvbnN0cmFpbnQgXCIlc1wiIiwKIAkJCQkJCWZvcm1hdF90eXBlX2JlKG9wLT5kLmRvbWFp bmNoZWNrLnJlc3VsdHR5cGUpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2 bWppdC5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdC5jCmluZGV4IDRkZmFmNzk3NDMu LjEyNWUxZTczYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXQuYwor KysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0LmMKQEAgLTcwLDEyICs3MCwxNCBAQCBM TFZNVHlwZVJlZiBTdHJ1Y3RIZWFwVHVwbGVUYWJsZVNsb3Q7CiBMTFZNVHlwZVJlZiBTdHJ1Y3RN aW5pbWFsVHVwbGVUYWJsZVNsb3Q7CiBMTFZNVHlwZVJlZiBTdHJ1Y3RNZW1vcnlDb250ZXh0RGF0 YTsKIExMVk1UeXBlUmVmIFN0cnVjdEZ1bmN0aW9uQ2FsbEluZm9EYXRhOworTExWTVR5cGVSZWYg U3RydWN0Rm1nckluZm87CiBMTFZNVHlwZVJlZiBTdHJ1Y3RFeHByQ29udGV4dDsKIExMVk1UeXBl UmVmIFN0cnVjdEV4cHJFdmFsU3RlcDsKIExMVk1UeXBlUmVmIFN0cnVjdEV4cHJTdGF0ZTsKIExM Vk1UeXBlUmVmIFN0cnVjdEFnZ1N0YXRlOwogTExWTVR5cGVSZWYgU3RydWN0QWdnU3RhdGVQZXJH cm91cERhdGE7CiBMTFZNVHlwZVJlZiBTdHJ1Y3RBZ2dTdGF0ZVBlclRyYW5zRGF0YTsKK0xMVk1U eXBlUmVmIFN0cnVjdEVycm9yU2F2ZUNvbnRleHQ7CiAKIExMVk1WYWx1ZVJlZiBBdHRyaWJ1dGVU ZW1wbGF0ZTsKIApAQCAtMTExOCw2ICsxMTIwLDcgQEAgbGx2bV9jcmVhdGVfdHlwZXModm9pZCkK IAlTdHJ1Y3RFeHByRXZhbFN0ZXAgPSBsbHZtX3BnX3Zhcl90eXBlKCJTdHJ1Y3RFeHByRXZhbFN0 ZXAiKTsKIAlTdHJ1Y3RFeHByU3RhdGUgPSBsbHZtX3BnX3Zhcl90eXBlKCJTdHJ1Y3RFeHByU3Rh dGUiKTsKIAlTdHJ1Y3RGdW5jdGlvbkNhbGxJbmZvRGF0YSA9IGxsdm1fcGdfdmFyX3R5cGUoIlN0 cnVjdEZ1bmN0aW9uQ2FsbEluZm9EYXRhIik7CisJU3RydWN0Rm1nckluZm8gPSBsbHZtX3BnX3Zh cl90eXBlKCJTdHJ1Y3RGbWdySW5mbyIpOwogCVN0cnVjdE1lbW9yeUNvbnRleHREYXRhID0gbGx2 bV9wZ192YXJfdHlwZSgiU3RydWN0TWVtb3J5Q29udGV4dERhdGEiKTsKIAlTdHJ1Y3RUdXBsZVRh YmxlU2xvdCA9IGxsdm1fcGdfdmFyX3R5cGUoIlN0cnVjdFR1cGxlVGFibGVTbG90Iik7CiAJU3Ry dWN0SGVhcFR1cGxlVGFibGVTbG90ID0gbGx2bV9wZ192YXJfdHlwZSgiU3RydWN0SGVhcFR1cGxl VGFibGVTbG90Iik7CkBAIC0xMTI3LDYgKzExMzAsNyBAQCBsbHZtX2NyZWF0ZV90eXBlcyh2b2lk KQogCVN0cnVjdEFnZ1N0YXRlID0gbGx2bV9wZ192YXJfdHlwZSgiU3RydWN0QWdnU3RhdGUiKTsK IAlTdHJ1Y3RBZ2dTdGF0ZVBlckdyb3VwRGF0YSA9IGxsdm1fcGdfdmFyX3R5cGUoIlN0cnVjdEFn Z1N0YXRlUGVyR3JvdXBEYXRhIik7CiAJU3RydWN0QWdnU3RhdGVQZXJUcmFuc0RhdGEgPSBsbHZt X3BnX3Zhcl90eXBlKCJTdHJ1Y3RBZ2dTdGF0ZVBlclRyYW5zRGF0YSIpOworCVN0cnVjdEVycm9y U2F2ZUNvbnRleHQgPSBsbHZtX3BnX3Zhcl90eXBlKCJTdHJ1Y3RFcnJvclNhdmVDb250ZXh0Iik7 CiAKIAlBdHRyaWJ1dGVUZW1wbGF0ZSA9IExMVk1HZXROYW1lZEZ1bmN0aW9uKGxsdm1fdHlwZXNf bW9kdWxlLCAiQXR0cmlidXRlVGVtcGxhdGUiKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9l eHByLmMKaW5kZXggNGI1MWFhMWNlMC4uN2Q0NGE0YzlmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2 bWppdF9leHByLmMKQEAgLTEyNTEsMTQgKzEyNTEsOSBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHBy U3RhdGUgKnN0YXRlKQogCiAJCQljYXNlIEVFT1BfSU9DT0VSQ0U6CiAJCQkJewotCQkJCQlGdW5j dGlvbkNhbGxJbmZvIGZjaW5mb19vdXQsCi0JCQkJCQkJCWZjaW5mb19pbjsKLQkJCQkJTExWTVZh bHVlUmVmIHZfZm5fb3V0LAotCQkJCQkJCQl2X2ZuX2luOwotCQkJCQlMTFZNVmFsdWVSZWYgdl9m Y2luZm9fb3V0LAotCQkJCQkJCQl2X2ZjaW5mb19pbjsKLQkJCQkJTExWTVZhbHVlUmVmIHZfZmNp bmZvX2luX2lzbnVsbHA7Ci0JCQkJCUxMVk1WYWx1ZVJlZiB2X3JldHZhbDsKKwkJCQkJRnVuY3Rp b25DYWxsSW5mbyBmY2luZm9fb3V0OworCQkJCQlMTFZNVmFsdWVSZWYgdl9mbl9vdXQ7CisJCQkJ CUxMVk1WYWx1ZVJlZiB2X2ZjaW5mb19vdXQ7CiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3Jlc3ZhbHVl OwogCQkJCQlMTFZNVmFsdWVSZWYgdl9yZXNudWxsOwogCkBAIC0xMjcxLDcgKzEyNjYsNiBAQCBs bHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQlMTFZNQmFzaWNCbG9ja1Jl ZiBiX2lucHV0Y2FsbDsKIAogCQkJCQlmY2luZm9fb3V0ID0gb3AtPmQuaW9jb2VyY2UuZmNpbmZv X2RhdGFfb3V0OwotCQkJCQlmY2luZm9faW4gPSBvcC0+ZC5pb2NvZXJjZS5mY2luZm9fZGF0YV9p bjsKIAogCQkJCQliX3NraXBvdXRwdXQgPSBsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAx XSwKIAkJCQkJCQkJCQkJCSAib3AuJWQuc2tpcG91dHB1dG51bGwiLCBvcG5vKTsKQEAgLTEyODMs MTQgKzEyNzcsNyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQkJ CQkJCQkJIm9wLiVkLmlucHV0Y2FsbCIsIG9wbm8pOwogCiAJCQkJCXZfZm5fb3V0ID0gbGx2bV9m dW5jdGlvbl9yZWZlcmVuY2UoY29udGV4dCwgYiwgbW9kLCBmY2luZm9fb3V0KTsKLQkJCQkJdl9m bl9pbiA9IGxsdm1fZnVuY3Rpb25fcmVmZXJlbmNlKGNvbnRleHQsIGIsIG1vZCwgZmNpbmZvX2lu KTsKIAkJCQkJdl9mY2luZm9fb3V0ID0gbF9wdHJfY29uc3QoZmNpbmZvX291dCwgbF9wdHIoU3Ry dWN0RnVuY3Rpb25DYWxsSW5mb0RhdGEpKTsKLQkJCQkJdl9mY2luZm9faW4gPSBsX3B0cl9jb25z dChmY2luZm9faW4sIGxfcHRyKFN0cnVjdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKSk7Ci0KLQkJCQkJ dl9mY2luZm9faW5faXNudWxscCA9Ci0JCQkJCQlMTFZNQnVpbGRTdHJ1Y3RHRVAoYiwgdl9mY2lu Zm9faW4sCi0JCQkJCQkJCQkJICAgRklFTEROT19GVU5DVElPTkNBTExJTkZPREFUQV9JU05VTEws Ci0JCQkJCQkJCQkJICAgInZfZmNpbmZvX2luX2lzbnVsbCIpOwogCiAJCQkJCS8qIG91dHB1dCBm dW5jdGlvbnMgYXJlIG5vdCBjYWxsZWQgb24gbnVsbHMgKi8KIAkJCQkJdl9yZXNudWxsID0gTExW TUJ1aWxkTG9hZChiLCB2X3Jlc251bGxwLCAiIik7CkBAIC0xMzU2LDI0ICsxMzQzLDQ0IEBAIGxs dm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJCQlMTFZNQnVpbGRCcihiLCBi X2lucHV0Y2FsbCk7CiAJCQkJCX0KIAorCQkJCQkvKgorCQkJCQkgKiBDYWxsIHRoZSBpbnB1dCBm dW5jdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSWYgb3AtPmQuaW9jb2VyY2UuZXNjb250ZXh0IHJl ZmVyZW5jZXMgYW4KKwkJCQkJICogRXJyb3JTYXZlQ29udGV4dCwgSW5wdXRGdW5jdGlvbkNhbGxT YWZlKCkgd291bGQgcmV0dXJuCisJCQkJCSAqIGZhbHNlIHVwb24gZW5jb3VudGVyaW5nIGFuIGVy cm9yLgorCQkJCQkgKi8KIAkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIsIGJfaW5wdXRj YWxsKTsKLQkJCQkJLyogc2V0IGFyZ3VtZW50cyAqLwotCQkJCQkvKiBhcmcwOiBvdXRwdXQgKi8K LQkJCQkJTExWTUJ1aWxkU3RvcmUoYiwgdl9vdXRwdXQsCi0JCQkJCQkJCSAgIGxfZnVuY3ZhbHVl cChiLCB2X2ZjaW5mb19pbiwgMCkpOwotCQkJCQlMTFZNQnVpbGRTdG9yZShiLCB2X3Jlc251bGws Ci0JCQkJCQkJCSAgIGxfZnVuY251bGxwKGIsIHZfZmNpbmZvX2luLCAwKSk7Ci0KLQkJCQkJLyog YXJnMTogaW9wYXJhbTogcHJlc2V0IGluIGV4ZWNFeHByLmMgKi8KLQkJCQkJLyogYXJnMjogdHlw bW9kOiBwcmVzZXQgaW4gZXhlY0V4cHIuYyAgKi8KLQotCQkJCQkvKiByZXNldCBmY2luZm9faW4t PmlzbnVsbCAqLwotCQkJCQlMTFZNQnVpbGRTdG9yZShiLCBsX3Nib29sX2NvbnN0KDApLCB2X2Zj aW5mb19pbl9pc251bGxwKTsKLQkJCQkJLyogYW5kIGNhbGwgZnVuY3Rpb24gKi8KLQkJCQkJdl9y ZXR2YWwgPSBMTFZNQnVpbGRDYWxsKGIsIHZfZm5faW4sICZ2X2ZjaW5mb19pbiwgMSwKLQkJCQkJ CQkJCQkJICJmdW5jY2FsbF9pb2NvZXJjZV9pbiIpOworCQkJCQl7CisJCQkJCQlPaWQJCQlpb3Bh cmFtID0gb3AtPmQuaW9jb2VyY2UudHlwaW9wYXJhbTsKKwkJCQkJCUxMVk1WYWx1ZVJlZiB2X3Bh cmFtc1s2XTsKKwkJCQkJCUxMVk1WYWx1ZVJlZiB2X3N1Y2Nlc3M7CisKKwkJCQkJCXZfcGFyYW1z WzBdID0gbF9wdHJfY29uc3Qob3AtPmQuaW9jb2VyY2UuZmluZm9faW4sCisJCQkJCQkJCQkJCQkg IGxfcHRyKFN0cnVjdEZtZ3JJbmZvKSk7CisJCQkJCQl2X3BhcmFtc1sxXSA9IHZfb3V0cHV0Owor CQkJCQkJdl9wYXJhbXNbMl0gPSBsX29pZF9jb25zdChsYywgaW9wYXJhbSk7CisJCQkJCQl2X3Bh cmFtc1szXSA9IGxfaW50MzJfY29uc3QobGMsIC0xKTsKKwkJCQkJCXZfcGFyYW1zWzRdID0gbF9w dHJfY29uc3Qob3AtPmQuaW9jb2VyY2UuZXNjb250ZXh0LAorCQkJCQkJCQkJCQkJICBsX3B0cihT dHJ1Y3RFcnJvclNhdmVDb250ZXh0KSk7CiAKLQkJCQkJTExWTUJ1aWxkU3RvcmUoYiwgdl9yZXR2 YWwsIHZfcmVzdmFsdWVwKTsKKwkJCQkJCS8qCisJCQkJCQkgKiBJbnB1dEZ1bmN0aW9uQ2FsbFNh ZmUoKSB3aWxsIHdyaXRlIGRpcmVjdGx5IGludG8KKwkJCQkJCSAqICpvcC0+cmVzdmFsdWUuCisJ CQkJCQkgKi8KKwkJCQkJCXZfcGFyYW1zWzVdID0gdl9yZXN2YWx1ZXA7CisKKwkJCQkJCXZfc3Vj Y2VzcyA9IExMVk1CdWlsZENhbGwoYiwgbGx2bV9wZ19mdW5jKG1vZCwgIklucHV0RnVuY3Rpb25D YWxsU2FmZSIpLAorCQkJCQkJCQkJCQkJICB2X3BhcmFtcywgbGVuZ3Rob2Yodl9wYXJhbXMpLAor CQkJCQkJCQkJCQkJICAiZnVuY2NhbGxfaW9jb2VyY2VfaW5fc2FmZSIpOworCisJCQkJCQkvKgor CQkJCQkJICogUmV0dXJuIG51bGwgaWYgSW5wdXRGdW5jdGlvbkNhbGxTYWZlKCkgZW5jb3VudGVy ZWQKKwkJCQkJCSAqIGFuIGVycm9yLgorCQkJCQkJICovCisJCQkJCQl2X3Jlc251bGxwID0gTExW TUJ1aWxkSUNtcChiLCBMTFZNSW50RVEsIHZfc3VjY2VzcywKKwkJCQkJCQkJCQkJCSAgIGxfc2Jv b2xfY29uc3QoMCksICIiKTsKKwkJCQkJfQogCiAJCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tz W29wbm8gKyAxXSk7CiAJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xs dm0vbGx2bWppdF90eXBlcy5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5j CmluZGV4IDQxYWM0YzZmNDUuLmUxZTk2MjUwMzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2pp dC9sbHZtL2xsdm1qaXRfdHlwZXMuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0 X3R5cGVzLmMKQEAgLTU5LDYgKzU5LDcgQEAgQWdnU3RhdGVQZXJUcmFuc0RhdGEgU3RydWN0QWdn U3RhdGVQZXJUcmFuc0RhdGE7CiBFeHByQ29udGV4dCBTdHJ1Y3RFeHByQ29udGV4dDsKIEV4cHJF dmFsU3RlcCBTdHJ1Y3RFeHByRXZhbFN0ZXA7CiBFeHByU3RhdGUJU3RydWN0RXhwclN0YXRlOwor Rm1nckluZm8JU3RydWN0Rm1nckluZm87CiBGdW5jdGlvbkNhbGxJbmZvQmFzZURhdGEgU3RydWN0 RnVuY3Rpb25DYWxsSW5mb0RhdGE7CiBIZWFwVHVwbGVEYXRhIFN0cnVjdEhlYXBUdXBsZURhdGE7 CiBNZW1vcnlDb250ZXh0RGF0YSBTdHJ1Y3RNZW1vcnlDb250ZXh0RGF0YTsKQEAgLTY2LDYgKzY3 LDcgQEAgVHVwbGVUYWJsZVNsb3QgU3RydWN0VHVwbGVUYWJsZVNsb3Q7CiBIZWFwVHVwbGVUYWJs ZVNsb3QgU3RydWN0SGVhcFR1cGxlVGFibGVTbG90OwogTWluaW1hbFR1cGxlVGFibGVTbG90IFN0 cnVjdE1pbmltYWxUdXBsZVRhYmxlU2xvdDsKIFR1cGxlRGVzY0RhdGEgU3RydWN0VHVwbGVEZXNj RGF0YTsKK0Vycm9yU2F2ZUNvbnRleHQgU3RydWN0RXJyb3JTYXZlQ29udGV4dDsKIAogCiAvKgpA QCAtMTM2LDYgKzEzOCw3IEBAIHZvaWQJICAgKnJlZmVyZW5jZWRfZnVuY3Rpb25zW10gPQogCUV4 ZWNFdmFsSnNvbkNvbnN0cnVjdG9yLAogCUV4ZWNFdmFsSnNvbklzUHJlZGljYXRlLAogCU1ha2VF eHBhbmRlZE9iamVjdFJlYWRPbmx5SW50ZXJuYWwsCisJSW5wdXRGdW5jdGlvbkNhbGxTYWZlLAog CXNsb3RfZ2V0bWlzc2luZ2F0dHJzLAogCXNsb3RfZ2V0c29tZWF0dHJzX2ludCwKIAlzdHJsZW4s CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCAwNDg1NzNjMmJjLi41OWYzYjA0M2M2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImV4ZWN1 dG9yL25vZGVBZ2cuaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJu b2Rlcy9taXNjbm9kZXMuaCIKIAogLyogZm9yd2FyZCByZWZlcmVuY2VzIHRvIGF2b2lkIGNpcmN1 bGFyaXR5ICovCiBzdHJ1Y3QgRXhwckV2YWxTdGVwOwpAQCAtNDE2LDcgKzQxNyw4IEBAIHR5cGVk ZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQkJRnVuY3Rpb25DYWxsSW5mbyBmY2luZm9fZGF0YV9v dXQ7CiAJCQkvKiBsb29rdXAgYW5kIGNhbGwgaW5mbyBmb3IgcmVzdWx0IHR5cGUncyBpbnB1dCBm dW5jdGlvbiAqLwogCQkJRm1nckluZm8gICAqZmluZm9faW47Ci0JCQlGdW5jdGlvbkNhbGxJbmZv IGZjaW5mb19kYXRhX2luOworCQkJT2lkCQkJdHlwaW9wYXJhbTsKKwkJCUVycm9yU2F2ZUNvbnRl eHQgKmVzY29udGV4dDsKIAkJfQkJCWlvY29lcmNlOwogCiAJCS8qIGZvciBFRU9QX1NRTFZBTFVF RlVOQ1RJT04gKi8KQEAgLTU0Nyw2ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0 ZXAKIAkJCWJvb2wJICAgKmNoZWNrbnVsbDsKIAkJCS8qIE9JRCBvZiBkb21haW4gdHlwZSAqLwog CQkJT2lkCQkJcmVzdWx0dHlwZTsKKwkJCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dDsKIAkJ fQkJCWRvbWFpbmNoZWNrOwogCiAJCS8qIGZvciBFRU9QX0NPTlZFUlRfUk9XVFlQRSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvaml0L2xsdm1qaXQuaCBiL3NyYy9pbmNsdWRlL2ppdC9sbHZt aml0LmgKaW5kZXggNmQ5MGExNmY3OS4uNWI3NjgxZWJhOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvaml0L2xsdm1qaXQuaAorKysgYi9zcmMvaW5jbHVkZS9qaXQvbGx2bWppdC5oCkBAIC03NSw2 ICs3NSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBMTFZNVHlwZVJlZiBTdHJ1Y3RUdXBsZVRhYmxl U2xvdDsKIGV4dGVybiBQR0RMTElNUE9SVCBMTFZNVHlwZVJlZiBTdHJ1Y3RIZWFwVHVwbGVUYWJs ZVNsb3Q7CiBleHRlcm4gUEdETExJTVBPUlQgTExWTVR5cGVSZWYgU3RydWN0TWluaW1hbFR1cGxl VGFibGVTbG90OwogZXh0ZXJuIFBHRExMSU1QT1JUIExMVk1UeXBlUmVmIFN0cnVjdE1lbW9yeUNv bnRleHREYXRhOworZXh0ZXJuIFBHRExMSU1QT1JUIExMVk1UeXBlUmVmIFN0cnVjdEZtZ3JJbmZv OwogZXh0ZXJuIFBHRExMSU1QT1JUIExMVk1UeXBlUmVmIFN0cnVjdEZ1bmN0aW9uQ2FsbEluZm9E YXRhOwogZXh0ZXJuIFBHRExMSU1QT1JUIExMVk1UeXBlUmVmIFN0cnVjdEV4cHJDb250ZXh0Owog ZXh0ZXJuIFBHRExMSU1QT1JUIExMVk1UeXBlUmVmIFN0cnVjdEV4cHJFdmFsU3RlcDsKQEAgLTgy LDYgKzgzLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIExMVk1UeXBlUmVmIFN0cnVjdEV4cHJTdGF0 ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBMTFZNVHlwZVJlZiBTdHJ1Y3RBZ2dTdGF0ZTsKIGV4dGVy biBQR0RMTElNUE9SVCBMTFZNVHlwZVJlZiBTdHJ1Y3RBZ2dTdGF0ZVBlclRyYW5zRGF0YTsKIGV4 dGVybiBQR0RMTElNUE9SVCBMTFZNVHlwZVJlZiBTdHJ1Y3RBZ2dTdGF0ZVBlckdyb3VwRGF0YTsK K2V4dGVybiBQR0RMTElNUE9SVCBMTFZNVHlwZVJlZiBTdHJ1Y3RFcnJvclNhdmVDb250ZXh0Owog CiBleHRlcm4gUEdETExJTVBPUlQgTExWTVZhbHVlUmVmIEF0dHJpYnV0ZVRlbXBsYXRlOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9qaXQvbGx2bWppdF9lbWl0LmggYi9zcmMvaW5jbHVkZS9q aXQvbGx2bWppdF9lbWl0LmgKaW5kZXggNWU3NDU0M2JlNC4uZWFkNDZhNjRhZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvaml0L2xsdm1qaXRfZW1pdC5oCisrKyBiL3NyYy9pbmNsdWRlL2ppdC9s bHZtaml0X2VtaXQuaApAQCAtODUsNiArODUsMTUgQEAgbF9zaXpldF9jb25zdChzaXplX3QgaSkK IAlyZXR1cm4gTExWTUNvbnN0SW50KFR5cGVTaXplVCwgaSwgZmFsc2UpOwogfQogCisvKgorICog RW1pdCBjb25zdGFudCBvaWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgTExWTVZhbHVlUmVmCitsX29p ZF9jb25zdChMTFZNQ29udGV4dFJlZiBsYywgT2lkIGkpCit7CisJcmV0dXJuIExMVk1Db25zdElu dChMTFZNSW50MzJUeXBlSW5Db250ZXh0KGxjKSwgaSwgZmFsc2UpOworfQorCiAvKgogICogRW1p dCBjb25zdGFudCBib29sZWFuLCBhcyB1c2VkIGZvciBzdG9yYWdlIChlLmcuIGdsb2JhbCB2YXJz LCBzdHJ1Y3RzKS4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBjYjcxNGY0YTE5Li42MWQ5 N2IzMGJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg ImZtZ3IuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJsaWIvcGFpcmluZ2hl YXAuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJh bXMuaCIKICNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy90aWRi aXRtYXAuaCIKQEAgLTEyOSw2ICsxMzAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwclN0YXRlCiAK IAlEYXR1bQkgICAqaW5uZXJtb3N0X2RvbWFpbnZhbDsKIAlib29sCSAgICppbm5lcm1vc3RfZG9t YWlubnVsbDsKKworCS8qCisJICogRm9yIGV4cHJlc3Npb24gbm9kZXMgdGhhdCBzdXBwb3J0IHNv ZnQgZXJyb3JzLiAgU2hvdWxkIGJlIHNldCB0byBOVUxMCisJICogYmVmb3JlIGNhbGxpbmcgRXhl Y0luaXRFeHByUmVjKCkgaWYgdGhlIGNhbGxlciB3YW50cyBlcnJvcnMgdGhyb3duLgorCSAqLwor CUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dDsKIH0gRXhwclN0YXRlOwogCiAKLS0gCjIuMzUu MwoK --000000000000ff2e2c060678442e Content-Type: application/octet-stream; name="v22-0004-JSON_TABLE.patch" Content-Disposition: attachment; filename="v22-0004-JSON_TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ln44rd991 RnJvbSA5NTc0ZGY0OWQyNDdhNWFhZWJjODQyYmMzYzliZjY5YWJlYTdjNjFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjEgU2VwIDIwMjMgMTA6MTQ6MTQgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy MiA0LzVdIEpTT05fVEFCTEUKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3Bs 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 ICAgICAgICAgICAgICAgICAgICAgfCAgNDk2ICsrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMgICAgICAgICAgICAgIHwgICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYyAgICAgICB8ICAgMTAgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVRhYmxlRnVuY3NjYW4uYyAgICB8ICAgMjcgKy0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5j cy5jICAgICAgICAgICAgICAgfCAgIDE5ICsKIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j ICAgICAgICAgICAgICAgfCAgIDMwICsKIHNyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAg ICAgICAgICAgfCAgNDc2ICsrKysrKystCiBzcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQg ICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMg ICAgICAgICAgIHwgICAxNCArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAg ICAgICAgICB8ICAgMTMgKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250YWJsZS5jICAg ICAgICB8ICA3NTEgKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYyAgICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5j ICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMu YyAgICAgICB8ICA1NDMgKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgICAgICAgICAgIHwgIDI3OSArKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg ICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAg ICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAg ICAgICAgICB8ICAgOTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAg ICAgICAgfCAgIDYxICstCiBzcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgICAg ICAgIHwgICAgNCArCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmggICAgICAgICAg IHwgICAgMyArCiBzcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oICAgICAgICAgICAgICAgIHwg ICAgMyArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25fc3FsanNvbi5vdXQgIHwgICAg NiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IHwgMTE4NiAr KysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3Fs ICAgICAgIHwgICAgNCArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCAg ICAgIHwgIDY3NCArKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICB8ICAgMTMgKwogMjggZmlsZXMgY2hhbmdlZCwgNDY5NyBpbnNlcnRpb25zKCsp LCAyNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfanNvbnRhYmxlLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCBkZGM0ZjRmNmFhLi5hZGZlMDFmMjNlIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwKQEAgLTE3MjA2LDYgKzE3MjA2LDUwMiBAQCBhcnJheSB3L28gVUs/IHwgdAogCiAgPC9zZWN0 Mj4KIAorIDxzZWN0MiBpZD0iZnVuY3Rpb25zLXNxbGpzb24tdGFibGUiPgorICA8dGl0bGU+SlNP Tl9UQUJMRTwvdGl0bGU+CisgIDxpbmRleHRlcm0+CisgICA8cHJpbWFyeT5qc29uX3RhYmxlPC9w cmltYXJ5PgorICA8L2luZGV4dGVybT4KKworICA8cGFyYT4KKyAgIDxmdW5jdGlvbj5qc29uX3Rh YmxlPC9mdW5jdGlvbj4gaXMgYW4gU1FML0pTT04gZnVuY3Rpb24gd2hpY2gKKyAgIHF1ZXJpZXMg PGFjcm9ueW0+SlNPTjwvYWNyb255bT4gZGF0YQorICAgYW5kIHByZXNlbnRzIHRoZSByZXN1bHRz IGFzIGEgcmVsYXRpb25hbCB2aWV3LCB3aGljaCBjYW4gYmUgYWNjZXNzZWQgYXMgYQorICAgcmVn dWxhciBTUUwgdGFibGUuIFlvdSBjYW4gb25seSB1c2UgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1 bmN0aW9uPiBpbnNpZGUgdGhlCisgICA8bGl0ZXJhbD5GUk9NPC9saXRlcmFsPiBjbGF1c2Ugb2Yg YSA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+IHN0YXRlbWVudC4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGFraW5nIEpTT04gZGF0YSBhcyBpbnB1dCwgPGZ1bmN0aW9uPmpzb25fdGFibGU8 L2Z1bmN0aW9uPiB1c2VzCisgICBhIHBhdGggZXhwcmVzc2lvbiB0byBleHRyYWN0IGEgcGFydCBv ZiB0aGUgcHJvdmlkZWQgZGF0YSB0aGF0CisgICB3aWxsIGJlIHVzZWQgYXMgYSA8Zmlyc3R0ZXJt PnJvdyBwYXR0ZXJuPC9maXJzdHRlcm0+IGZvciB0aGUKKyAgIGNvbnN0cnVjdGVkIHZpZXcuIEVh Y2ggU1FML0pTT04gaXRlbSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSByb3cgcGF0dGVybiBzZXJ2 ZXMKKyAgIGFzIHRoZSBzb3VyY2UgZm9yIGEgc2VwYXJhdGUgcm93IGluIHRoZSBjb25zdHJ1Y3Rl ZCByZWxhdGlvbmFsIHZpZXcuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRvIHNwbGl0IHRo ZSByb3cgcGF0dGVybiBpbnRvIGNvbHVtbnMsIDxmdW5jdGlvbj5qc29uX3RhYmxlPC9mdW5jdGlv bj4KKyAgIHByb3ZpZGVzIHRoZSA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiBjbGF1c2UgdGhh dCBkZWZpbmVzIHRoZQorICAgc2NoZW1hIG9mIHRoZSBjcmVhdGVkIHZpZXcuIEZvciBlYWNoIGNv bHVtbiB0byBiZSBjb25zdHJ1Y3RlZCwKKyAgIHRoaXMgY2xhdXNlIHByb3ZpZGVzIGEgc2VwYXJh dGUgcGF0aCBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzCisgICB0aGUgcm93IHBhdHRlcm4sIGV4 dHJhY3RzIGEgSlNPTiBpdGVtLCBhbmQgcmV0dXJucyBpdCBhcyBhCisgICBzZXBhcmF0ZSBTUUwg dmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY29sdW1uLiBJZiB0aGUgcmVxdWlyZWQgdmFsdWUKKyAg IGlzIHN0b3JlZCBpbiBhIG5lc3RlZCBsZXZlbCBvZiB0aGUgcm93IHBhdHRlcm4sIGl0IGNhbiBi ZSBleHRyYWN0ZWQKKyAgIHVzaW5nIHRoZSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4g c3ViY2xhdXNlLiBKb2luaW5nIHRoZQorICAgY29sdW1ucyByZXR1cm5lZCBieSA8bGl0ZXJhbD5O RVNURUQgUEFUSDwvbGl0ZXJhbD4gY2FuIGFkZCBtdWx0aXBsZQorICAgbmV3IHJvd3MgdG8gdGhl IGNvbnN0cnVjdGVkIHZpZXcuIFN1Y2ggcm93cyBhcmUgY2FsbGVkCisgICA8Zmlyc3R0ZXJtPmNo aWxkIHJvd3M8L2ZpcnN0dGVybT4sIGFzIG9wcG9zZWQgdG8gdGhlIDxmaXJzdHRlcm0+cGFyZW50 IHJvdzwvZmlyc3R0ZXJtPgorICAgdGhhdCBnZW5lcmF0ZXMgdGhlbS4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIHJvd3MgcHJvZHVjZWQgYnkgPGZ1bmN0aW9uPkpTT05fVEFCTEU8L2Z1 bmN0aW9uPiBhcmUgbGF0ZXJhbGx5CisgICBqb2luZWQgdG8gdGhlIHJvdyB0aGF0IGdlbmVyYXRl ZCB0aGVtLCBzbyB5b3UgZG8gbm90IGhhdmUgdG8gZXhwbGljaXRseSBqb2luCisgICB0aGUgY29u c3RydWN0ZWQgdmlldyB3aXRoIHRoZSBvcmlnaW5hbCB0YWJsZSBob2xkaW5nIDxhY3JvbnltPkpT T048L2Fjcm9ueW0+CisgICBkYXRhLiBPcHRpb25hbGx5LCB5b3UgY2FuIHNwZWNpZnkgaG93IHRv IGpvaW4gdGhlIGNvbHVtbnMgcmV0dXJuZWQKKyAgIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9s aXRlcmFsPiB1c2luZyB0aGUgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gY2xhdXNlLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBFYWNoIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBj bGF1c2UgY2FuIGdlbmVyYXRlIG9uZSBvciBtb3JlCisgICBjb2x1bW5zLiBDb2x1bW5zIHByb2R1 Y2VkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPnMgYXQgdGhlCisgICBzYW1lIGxl dmVsIGFyZSBjb25zaWRlcmVkIHRvIGJlIDxmaXJzdHRlcm0+c2libGluZ3M8L2ZpcnN0dGVybT4s CisgICB3aGlsZSBhIGNvbHVtbiBwcm9kdWNlZCBieSBhIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9s aXRlcmFsPiBpcworICAgY29uc2lkZXJlZCB0byBiZSBhIGNoaWxkIG9mIHRoZSBjb2x1bW4gcHJv ZHVjZWQgYnkgYQorICAgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IG9yIHJvdyBleHBy ZXNzaW9uIGF0IGEgaGlnaGVyIGxldmVsLgorICAgU2libGluZyBjb2x1bW5zIGFyZSBhbHdheXMg am9pbmVkIGZpcnN0LiBPbmNlIHRoZXkgYXJlIHByb2Nlc3NlZCwKKyAgIHRoZSByZXN1bHRpbmcg cm93cyBhcmUgam9pbmVkIHRvIHRoZSBwYXJlbnQgcm93LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBUaGUgc3ludGF4IGlzOgorICA8L3BhcmE+CisKKzxzeW5vcHNpcz4KK0pTT05fVEFCTEUg KAorICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJs ZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IEFTIDxyZXBsYWNlYWJs ZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxvcHRpb25hbD4gUEFT U0lORyB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IEFTIDxyZXBsYWNlYWJsZT52 YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiA8L29wdGlv bmFsPgorICBDT0xVTU5TICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmpzb25fdGFi bGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQorICA8 b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xp dGVyYWw+IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IDwvb3B0aW9uYWw+CisgIDxvcHRp b25hbD4KKyAgICBQTEFOICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmpzb25fdGFi bGVfcGxhbjwvcmVwbGFjZWFibGU+ICkgfAorICAgIFBMQU4gREVGQVVMVCAoIHsgSU5ORVIgfCBP VVRFUiB9IDxvcHRpb25hbD4gLCB7IENST1NTIHwgVU5JT04gfSA8L29wdGlvbmFsPgorICAgICAg ICAgICAgICAgICB8IHsgQ1JPU1MgfCBVTklPTiB9IDxvcHRpb25hbD4gLCB7IElOTkVSIHwgT1VU RVIgfSA8L29wdGlvbmFsPiApCisgIDwvb3B0aW9uYWw+CispCisKKzxwaHJhc2U+Cit3aGVyZSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2Vh YmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IFBBVEggPHJlcGxhY2Vh YmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KKyAg ICAgICAgPG9wdGlvbmFsPiB7IFdJVEhPVVQgfCBXSVRIIHsgQ09ORElUSU9OQUwgfCA8b3B0aW9u YWw+VU5DT05ESVRJT05BTDwvb3B0aW9uYWw+IH0gfSA8b3B0aW9uYWw+IEFSUkFZIDwvb3B0aW9u YWw+IFdSQVBQRVIgPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IEtFRVAgfCBPTUlU IH0gUVVPVEVTIDxvcHRpb25hbD4gT04gU0NBTEFSIFNUUklORyA8L29wdGlvbmFsPiA8L29wdGlv bmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgREVGQVVMVCA8cmVwbGFj ZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04gRU1QVFkgPC9vcHRpb25hbD4KKyAg ICAgICAgPG9wdGlvbmFsPiB7IEVSUk9SIHwgTlVMTCB8IERFRkFVTFQgPHJlcGxhY2VhYmxlPmV4 cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IE9OIEVSUk9SIDwvb3B0aW9uYWw+CisgIHwgPHJlcGxh Y2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+ IEZPUk1BVCA8cmVwbGFjZWFibGU+anNvbl9yZXByZXNlbnRhdGlvbjwvcmVwbGFjZWFibGU+Cisg ICAgICAgIDxvcHRpb25hbD4gUEFUSCA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRp b248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgV0lUSE9V VCB8IFdJVEggeyBDT05ESVRJT05BTCB8IDxvcHRpb25hbD5VTkNPTkRJVElPTkFMPC9vcHRpb25h bD4gfSB9IDxvcHRpb25hbD4gQVJSQVkgPC9vcHRpb25hbD4gV1JBUFBFUiA8L29wdGlvbmFsPgor ICAgICAgICA8b3B0aW9uYWw+IHsgS0VFUCB8IE9NSVQgfSBRVU9URVMgPG9wdGlvbmFsPiBPTiBT Q0FMQVIgU1RSSU5HIDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4g eyBFUlJPUiB8IE5VTEwgfCBFTVBUWSB7IEFSUkFZIHwgT0JKRUNUIH0gfCBERUZBVUxUIDxyZXBs YWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFTVBUWSA8L29wdGlvbmFsPgor ICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgRU1QVFkgeyBBUlJBWSB8IE9CSkVD VCB9IHwgREVGQVVMVCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04g RVJST1IgPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxy ZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gRVhJU1RTIDxvcHRpb25hbD4gUEFUSCA8cmVw bGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFs PgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBUUlVFIHwgRkFMU0UgfCBVTktOT1dOIH0g T04gRVJST1IgPC9vcHRpb25hbD4KKyAgfCBORVNURUQgUEFUSCA8cmVwbGFjZWFibGU+anNvbl9w YXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IEFTIDxyZXBsYWNlYWJs ZT5wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICBDT0xVTU5TICgg PHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwg Li4uPC9vcHRpb25hbD4gKQorICB8IDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gRk9S IE9SRElOQUxJVFkKKzxwaHJhc2U+Cis8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuPC9yZXBs YWNlYWJsZT4gaXM6Cis8L3BocmFzZT4KKyAgICA8cmVwbGFjZWFibGU+anNvbl9wYXRoX25hbWU8 L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IHsgT1VURVIgfCBJTk5FUiB9IDxyZXBsYWNlYWJsZT5q c29uX3RhYmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgIHwgPHJl cGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4geyBVTklPTiA8 cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxlPiB9IDxvcHRp b25hbD4uLi48L29wdGlvbmFsPgorICB8IDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJp bWFyeTwvcmVwbGFjZWFibGU+IHsgQ1JPU1MgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9w cmltYXJ5PC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+Li4uPC9vcHRpb25hbD4KKzxwaHJhc2U+ Cis8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2VhYmxlPiBpczoK KzwvcGhyYXNlPgorICAgIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+ IHwgKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuPC9yZXBsYWNlYWJsZT4gKQorPC9zeW5v cHNpcz4KKworICA8cGFyYT4KKyAgIEVhY2ggc3ludGF4IGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJl bG93IGluIG1vcmUgZGV0YWlsLgorICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5jb250 ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVw bGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5q c29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxvcHRpb25hbD4gPGxpdGVy YWw+UEFTU0lORzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiA8 bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9 IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25hbD48L2xpdGVyYWw+CisgICAgPC90 ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgVGhlIGlucHV0IGRhdGEgdG8g cXVlcnksIHRoZSBKU09OIHBhdGggZXhwcmVzc2lvbiBkZWZpbmluZyB0aGUgcXVlcnksCisgICAg IGFuZCBhbiBvcHRpb25hbCA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiBjbGF1c2UsIHdoaWNo IGNhbiBwcm92aWRlIGRhdGEKKyAgICAgdmFsdWVzIHRvIHRoZSA8cmVwbGFjZWFibGU+cGF0aF9l eHByZXNzaW9uPC9yZXBsYWNlYWJsZT4uCisgICAgIFRoZSByZXN1bHQgb2YgdGhlIGlucHV0IGRh dGEKKyAgICAgZXZhbHVhdGlvbiBpcyBjYWxsZWQgdGhlIDxmaXJzdHRlcm0+cm93IHBhdHRlcm48 L2ZpcnN0dGVybT4uIFRoZSByb3cKKyAgICAgcGF0dGVybiBpcyB1c2VkIGFzIHRoZSBzb3VyY2Ug Zm9yIHJvdyB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdGVkIHZpZXcuCisgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4oIDxyZXBsYWNlYWJsZT5q c29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+ ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIFRoZSA8 bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiBjbGF1c2UgZGVmaW5pbmcgdGhlIHNjaGVtYSBvZiB0 aGUKKyAgICAgY29uc3RydWN0ZWQgdmlldy4gSW4gdGhpcyBjbGF1c2UsIHlvdSBtdXN0IHNwZWNp ZnkgYWxsIHRoZSBjb2x1bW5zCisgICAgIHRvIGJlIGZpbGxlZCB3aXRoIFNRTC9KU09OIGl0ZW1z LgorICAgICBUaGUgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4K KyAgICAgZXhwcmVzc2lvbiBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXggdmFyaWFudHM6CisgICAg PC9wYXJhPgorCisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8bGl0ZXJhbD48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT50eXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlBB VEg8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFj ZWFibGU+IDwvb3B0aW9uYWw+PC9saXRlcmFsPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+ CisKKyAgICA8cGFyYT4KKyAgICAgSW5zZXJ0cyBhIHNpbmdsZSBTUUwvSlNPTiBpdGVtIGludG8g ZWFjaCByb3cgb2YKKyAgICAgdGhlIHNwZWNpZmllZCBjb2x1bW4uCisgICAgPC9wYXJhPgorICAg IDxwYXJhPgorICAgICBUaGUgcHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZXhwcmVz c2lvbiBpcyBldmFsdWF0ZWQgYW5kCisgICAgIHRoZSBjb2x1bW4gaXMgZmlsbGVkIHdpdGggdGhl IHByb2R1Y2VkIFNRTC9KU09OIGl0ZW1zLCBvbmUgZm9yIGVhY2ggcm93LgorICAgICBJZiB0aGUg PGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZXhwcmVzc2lvbiBpcyBvbWl0dGVkLAorICAgICA8ZnVu Y3Rpb24+SlNPTl9UQUJMRTwvZnVuY3Rpb24+IHVzZXMgdGhlCisgICAgIDxsaXRlcmFsPiQuPHJl cGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4gcGF0aCBleHByZXNzaW9uLAor ICAgICB3aGVyZSA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IGlzIHRoZSBwcm92aWRl ZCBjb2x1bW4gbmFtZS4KKyAgICAgSW4gdGhpcyBjYXNlLCB0aGUgY29sdW1uIG5hbWUgbXVzdCBj b3JyZXNwb25kIHRvIG9uZSBvZiB0aGUKKyAgICAga2V5cyB3aXRoaW4gdGhlIFNRTC9KU09OIGl0 ZW0gcHJvZHVjZWQgYnkgdGhlIHJvdyBwYXR0ZXJuLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4K KyAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBhZGQgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+ IGFuZAorICAgICA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNlcyB0byBkZWZpbmUg aG93IHRvIGhhbmRsZSBtaXNzaW5nIHZhbHVlcworICAgICBvciBzdHJ1Y3R1cmFsIGVycm9ycy4K KyAgICAgPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPlFVT1RFUzwvbGl0 ZXJhbD4gY2xhdXNlcyBjYW4gb25seQorICAgICBiZSB1c2VkIHdpdGggSlNPTiwgYXJyYXksIGFu ZCBjb21wb3NpdGUgdHlwZXMuCisgICAgIFRoZXNlIGNsYXVzZXMgaGF2ZSB0aGUgc2FtZSBzeW50 YXggYW5kIHNlbWFudGljcyBhcyBmb3IKKyAgICAgPGZ1bmN0aW9uPmpzb25fdmFsdWU8L2Z1bmN0 aW9uPiBhbmQgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPgorICAgICA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNl YWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+Rk9STUFUPC9saXRlcmFsPiA8cmVwbGFj ZWFibGU+anNvbl9yZXByZXNlbnRhdGlvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgPG9wdGlv bmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNp ZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgIDwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgR2VuZXJhdGVzIGEgY29sdW1uIGFuZCBpbnNlcnRz IGEgY29tcG9zaXRlIFNRTC9KU09OCisgICAgIGl0ZW0gaW50byBlYWNoIHJvdyBvZiB0aGlzIGNv bHVtbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRoZSBwcm92aWRlZCA8bGl0ZXJh bD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhbmQKKyAgICAgdGhlIGNv bHVtbiBpcyBmaWxsZWQgd2l0aCB0aGUgcHJvZHVjZWQgU1FML0pTT04gaXRlbXMsIG9uZSBmb3Ig ZWFjaCByb3cuCisgICAgIElmIHRoZSA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPiBleHByZXNzaW9u IGlzIG9taXR0ZWQsCisgICAgIDxmdW5jdGlvbj5KU09OX1RBQkxFPC9mdW5jdGlvbj4gdXNlcyB0 aGUKKyAgICAgPGxpdGVyYWw+JC48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+PC9saXRl cmFsPiBwYXRoIGV4cHJlc3Npb24sCisgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBs YWNlYWJsZT4gaXMgdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1lLgorICAgICBJbiB0aGlzIGNhc2Us IHRoZSBjb2x1bW4gbmFtZSBtdXN0IGNvcnJlc3BvbmQgdG8gb25lIG9mIHRoZQorICAgICBrZXlz IHdpdGhpbiB0aGUgU1FML0pTT04gaXRlbSBwcm9kdWNlZCBieSB0aGUgcm93IHBhdHRlcm4uCisg ICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIGFkZCA8bGl0 ZXJhbD5XUkFQUEVSPC9saXRlcmFsPiwgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFsPiwKKyAgICAg PGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJh bD4gY2xhdXNlcworICAgICB0byBkZWZpbmUgYWRkaXRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHJl dHVybmVkIFNRTC9KU09OIGl0ZW1zLgorICAgICBUaGVzZSBjbGF1c2VzIGhhdmUgdGhlIHNhbWUg c3ludGF4IGFuZCBzZW1hbnRpY3MgYXMKKyAgICAgZm9yIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9m dW5jdGlvbj4uCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgICA8cmVwbGFjZWFibGU+ bmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4KKyAgICAg ICA8bGl0ZXJhbD5FWElTVFM8L2xpdGVyYWw+IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFUSDwvbGl0 ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4g PC9vcHRpb25hbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+Cisg ICAgIEdlbmVyYXRlcyBhIGNvbHVtbiBhbmQgaW5zZXJ0cyBhIGJvb2xlYW4gaXRlbSBpbnRvIGVh Y2ggcm93IG9mIHRoaXMgY29sdW1uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhl IHByb3ZpZGVkIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVk LAorICAgICBhIGNoZWNrIHdoZXRoZXIgYW55IFNRTC9KU09OIGl0ZW1zIHdlcmUgcmV0dXJuZWQg aXMgZG9uZSwgYW5kCisgICAgIHRoZSBjb2x1bW4gaXMgZmlsbGVkIHdpdGggdGhlIHJlc3VsdGlu ZyBib29sZWFuIHZhbHVlLCBvbmUgZm9yIGVhY2ggcm93LgorICAgICBUaGUgc3BlY2lmaWVkIDxw YXJhbWV0ZXI+dHlwZTwvcGFyYW1ldGVyPiBzaG91bGQgaGF2ZSBhIGNhc3QgZnJvbSB0aGUKKyAg ICAgPHR5cGU+Ym9vbGVhbjwvdHlwZT4uCisgICAgIElmIHRoZSA8bGl0ZXJhbD5QQVRIPC9saXRl cmFsPiBleHByZXNzaW9uIGlzIG9taXR0ZWQsCisgICAgIDxmdW5jdGlvbj5KU09OX1RBQkxFPC9m dW5jdGlvbj4gdXNlcyB0aGUKKyAgICAgPGxpdGVyYWw+JC48cmVwbGFjZWFibGU+bmFtZTwvcmVw bGFjZWFibGU+PC9saXRlcmFsPiBwYXRoIGV4cHJlc3Npb24sCisgICAgIHdoZXJlIDxyZXBsYWNl YWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1lLgorICAg IDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBhZGQgPGxpdGVy YWw+T04gRVJST1I8L2xpdGVyYWw+IGNsYXVzZSB0byBkZWZpbmUKKyAgICAgZXJyb3IgYmVoYXZp b3IuICBUaGlzIGNsYXVzZSBoYXMgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMKKyAg ICAgZm9yIDxmdW5jdGlvbj5qc29uX2V4aXN0czwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgICA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2Vh YmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0 ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNlYWJs ZT4gPC9vcHRpb25hbD4KKyAgICAgICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiAoIDxy ZXBsYWNlYWJsZT5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIC4u Ljwvb3B0aW9uYWw+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+ CisgICAgIEV4dHJhY3RzIFNRTC9KU09OIGl0ZW1zIGZyb20gbmVzdGVkIGxldmVscyBvZiB0aGUg cm93IHBhdHRlcm4sCisgICAgIGdlbmVyYXRlcyBvbmUgb3IgbW9yZSBjb2x1bW5zIGFzIGRlZmlu ZWQgYnkgdGhlIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+CisgICAgIHN1YmNsYXVzZSwgYW5k IGluc2VydHMgdGhlIGV4dHJhY3RlZCBTUUwvSlNPTiBpdGVtcyBpbnRvIGVhY2ggcm93IG9mIHRo ZXNlIGNvbHVtbnMuCisgICAgIFRoZSA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9jb2x1bW48L3Jl cGxhY2VhYmxlPiBleHByZXNzaW9uIGluIHRoZQorICAgICA8bGl0ZXJhbD5DT0xVTU5TPC9saXRl cmFsPiBzdWJjbGF1c2UgdXNlcyB0aGUgc2FtZSBzeW50YXggYXMgaW4gdGhlCisgICAgIHBhcmVu dCA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiBjbGF1c2UuCisgICAgPC9wYXJhPgorCisgICAg PHBhcmE+CisgICAgIFRoZSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gc3ludGF4IGlz IHJlY3Vyc2l2ZSwKKyAgICAgc28geW91IGNhbiBnbyBkb3duIG11bHRpcGxlIG5lc3RlZCBsZXZl bHMgYnkgc3BlY2lmeWluZyBzZXZlcmFsCisgICAgIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRl cmFsPiBzdWJjbGF1c2VzIHdpdGhpbiBlYWNoIG90aGVyLgorICAgICBJdCBhbGxvd3MgdG8gdW5u ZXN0IHRoZSBoaWVyYXJjaHkgb2YgSlNPTiBvYmplY3RzIGFuZCBhcnJheXMKKyAgICAgaW4gYSBz aW5nbGUgZnVuY3Rpb24gaW52b2NhdGlvbiByYXRoZXIgdGhhbiBjaGFpbmluZyBzZXZlcmFsCisg ICAgIDxmdW5jdGlvbj5KU09OX1RBQkxFPC9mdW5jdGlvbj4gZXhwcmVzc2lvbnMgaW4gYW4gU1FM IHN0YXRlbWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgWW91IGNhbiB1c2Ug dGhlIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IGNsYXVzZSB0byBkZWZpbmUgaG93CisgICAgIHRv IGpvaW4gdGhlIGNvbHVtbnMgcmV0dXJuZWQgYnkgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVy YWw+IGNsYXVzZXMuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHJlcGxhY2VhYmxl Pm5hbWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5GT1IgT1JESU5BTElUWTwvbGl0ZXJhbD4KKyAg ICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIEFkZHMgYW4gb3Jk aW5hbGl0eSBjb2x1bW4gdGhhdCBwcm92aWRlcyBzZXF1ZW50aWFsIHJvdyBudW1iZXJpbmcuCisg ICAgIFlvdSBjYW4gaGF2ZSBvbmx5IG9uZSBvcmRpbmFsaXR5IGNvbHVtbiBwZXIgdGFibGUuIFJv dyBudW1iZXJpbmcKKyAgICAgaXMgMS1iYXNlZC4gRm9yIGNoaWxkIHJvd3MgdGhhdCByZXN1bHQg ZnJvbSB0aGUgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+CisgICAgIGNsYXVzZXMsIHRo ZSBwYXJlbnQgcm93IG51bWJlciBpcyByZXBlYXRlZC4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICAgIDwvbGlz dGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT4KKyAgICAgPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFt ZTwvcmVwbGFjZWFibGU+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJh PgorICAgICBUaGUgb3B0aW9uYWwgPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNl YWJsZT4gc2VydmVzIGFzIGFuCisgICAgIGlkZW50aWZpZXIgb2YgdGhlIHByb3ZpZGVkIDxyZXBs YWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNhdGlvbjwvcmVwbGFjZWFibGU+LgorICAgICBUaGUg cGF0aCBuYW1lIG11c3QgYmUgdW5pcXVlIGFuZCBkaXN0aW5jdCBmcm9tIHRoZSBjb2x1bW4gbmFt ZXMuCisgICAgIFdoZW4gdXNpbmcgdGhlIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IGNsYXVzZSwg eW91IG11c3Qgc3BlY2lmeSB0aGUgbmFtZXMKKyAgICAgZm9yIGFsbCB0aGUgcGF0aHMsIGluY2x1 ZGluZyB0aGUgcm93IHBhdHRlcm4uIEVhY2ggcGF0aCBuYW1lIGNhbiBhcHBlYXIgaW4KKyAgICAg dGhlIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IGNsYXVzZSBvbmx5IG9uY2UuCisgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gKCA8cmVwbGFjZWFi bGU+anNvbl90YWJsZV9wbGFuPC9yZXBsYWNlYWJsZT4gKQorICAgIDwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgRGVmaW5lcyBob3cgdG8gam9pbiB0aGUgZGF0YSBy ZXR1cm5lZCBieSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4KKyAgICAgY2xhdXNlcyB0 byB0aGUgY29uc3RydWN0ZWQgdmlldy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRv IGpvaW4gY29sdW1ucyB3aXRoIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAsIHlvdSBjYW4gdXNl OgorICAgIDwvcGFyYT4KKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDxsaXRlcmFsPklOTkVSPC9saXRlcmFsPgorICAgIDwvdGVybT4KKyAgICA8 bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgVXNlIDxsaXRlcmFsPklOTkVSIEpPSU48L2xp dGVyYWw+LCBzbyB0aGF0IHRoZSBwYXJlbnQgcm93CisgICAgIGlzIG9taXR0ZWQgZnJvbSB0aGUg b3V0cHV0IGlmIGl0IGRvZXMgbm90IGhhdmUgYW55IGNoaWxkIHJvd3MKKyAgICAgYWZ0ZXIgam9p bmluZyB0aGUgZGF0YSByZXR1cm5lZCBieSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4u CisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+T1VURVI8L2xpdGVyYWw+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBVc2UgPGxp dGVyYWw+TEVGVCBPVVRFUiBKT0lOPC9saXRlcmFsPiwgc28gdGhhdCB0aGUgcGFyZW50IHJvdwor ICAgICBpcyBhbHdheXMgaW5jbHVkZWQgaW50byB0aGUgb3V0cHV0IGV2ZW4gaWYgaXQgZG9lcyBu b3QgaGF2ZSBhbnkgY2hpbGQgcm93cworICAgICBhZnRlciBqb2luaW5nIHRoZSBkYXRhIHJldHVy bmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiwgd2l0aCBOVUxMIHZhbHVlcwor ICAgICBpbnNlcnRlZCBpbnRvIHRoZSBjaGlsZCBjb2x1bW5zIGlmIHRoZSBjb3JyZXNwb25kaW5n CisgICAgIHZhbHVlcyBhcmUgbWlzc2luZy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAg IFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uIGZvciBqb2luaW5nIGNvbHVtbnMgd2l0aCBwYXJl bnQvY2hpbGQgcmVsYXRpb25zaGlwLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorCisgICAgIDxwYXJhPgorICAgICBU byBqb2luIHNpYmxpbmcgY29sdW1ucywgeW91IGNhbiB1c2U6CisgICAgPC9wYXJhPgorCisgIDx2 YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJh bD5VTklPTjwvbGl0ZXJhbD4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBh cmE+CisgICAgIEdlbmVyYXRlIG9uZSByb3cgZm9yIGVhY2ggdmFsdWUgcHJvZHVjZWQgYnkgZWFj aCBvZiB0aGUgc2libGluZworICAgICBjb2x1bW5zLiBUaGUgY29sdW1ucyBmcm9tIHRoZSBvdGhl ciBzaWJsaW5ncyBhcmUgc2V0IHRvIG51bGwuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAg ICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3Igam9pbmluZyBzaWJsaW5nIGNvbHVtbnMu CisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+Q1JPU1M8L2xpdGVyYWw+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKworICAgIDxwYXJhPgorICAgICBHZW5lcmF0 ZSBvbmUgcm93IGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBzaWJsaW5n IGNvbHVtbnMuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+UExB TiBERUZBVUxUPC9saXRlcmFsPiAoIDxsaXRlcmFsPjxyZXBsYWNlYWJsZT5PVVRFUiB8IElOTkVS PC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgPHJlcGxhY2VhYmxlPlVOSU9OIHwgQ1JPU1M8L3Jl cGxhY2VhYmxlPiA8L29wdGlvbmFsPjwvbGl0ZXJhbD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIHRlcm1zIGNhbiBhbHNvIGJlIHNwZWNpZmll ZCBpbiByZXZlcnNlIG9yZGVyLiBUaGUKKyAgICAgIDxsaXRlcmFsPklOTkVSPC9saXRlcmFsPiBv ciA8bGl0ZXJhbD5PVVRFUjwvbGl0ZXJhbD4gb3B0aW9uIGRlZmluZXMgdGhlCisgICAgICBqb2lu aW5nIHBsYW4gZm9yIHBhcmVudC9jaGlsZCBjb2x1bW5zLCB3aGlsZSA8bGl0ZXJhbD5VTklPTjwv bGl0ZXJhbD4gb3IKKyAgICAgIDxsaXRlcmFsPkNST1NTPC9saXRlcmFsPiBhZmZlY3RzIGpvaW5z IG9mIHNpYmxpbmcgY29sdW1ucy4gVGhpcyBmb3JtCisgICAgICBvZiA8bGl0ZXJhbD5QTEFOPC9s aXRlcmFsPiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcGxhbiBmb3IKKyAgICAgIGFsbCBjb2x1bW5z IGF0IG9uY2UuIEV2ZW4gdGhvdWdoIHRoZSBwYXRoIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4g dGhlCisgICAgICA8bGl0ZXJhbD5QTEFOIERFRkFVTFQ8L2xpdGVyYWw+IGZvcm0sIHRvIGNvbmZv cm0gdG8gdGhlIFNRTC9KU09OIHN0YW5kYXJkCisgICAgICB0aGV5IG11c3QgYmUgcHJvdmlkZWQg Zm9yIGFsbCB0aGUgcGF0aHMgaWYgdGhlIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+CisgICAgICBj bGF1c2UgaXMgdXNlZC4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFs PlBMQU4gREVGQVVMVDwvbGl0ZXJhbD4gaXMgc2ltcGxlciB0aGFuIHNwZWNpZnlpbmcgYSBjb21w bGV0ZQorICAgICAgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4sIGFuZCBpcyBvZnRlbiBhbGwgdGhh dCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGRlc2lyZWQKKyAgICAgIG91dHB1dC4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxp c3Q+CisKKyAgPHBhcmE+RXhhbXBsZXM8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgIEluIHRo ZXNlIGV4YW1wbGVzIHRoZSBmb2xsb3dpbmcgc21hbGwgdGFibGUgc3RvcmluZyBzb21lIEpTT04g ZGF0YSB3aWxsIGJlIHVzZWQ6Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgVEFCTEUgbXlfZmls bXMgKCBqcyBqc29uYiApOworCitJTlNFUlQgSU5UTyBteV9maWxtcyBWQUxVRVMgKAorJ3sgImZh dm9yaXRlcyIgOiBbCisgICB7ICJraW5kIiA6ICJjb21lZHkiLCAiZmlsbXMiIDogWworICAgICB7 ICJ0aXRsZSIgOiAiQmFuYW5hcyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJXb29keSBBbGxlbiJ9 LAorICAgICB7ICJ0aXRsZSIgOiAiVGhlIERpbm5lciBHYW1lIiwKKyAgICAgICAiZGlyZWN0b3Ii IDogIkZyYW5jaXMgVmViZXIiIH0gXSB9LAorICAgeyAia2luZCIgOiAiaG9ycm9yIiwgImZpbG1z IiA6IFsKKyAgICAgeyAidGl0bGUiIDogIlBzeWNobyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJB bGZyZWQgSGl0Y2hjb2NrIiB9IF0gfSwKKyAgIHsgImtpbmQiIDogInRocmlsbGVyIiwgImZpbG1z IiA6IFsKKyAgICAgeyAidGl0bGUiIDogIlZlcnRpZ28iLAorICAgICAgICJkaXJlY3RvciIgOiAi QWxmcmVkIEhpdGNoY29jayIgfSBdIH0sCisgICB7ICJraW5kIiA6ICJkcmFtYSIsICJmaWxtcyIg OiBbCisgICAgIHsgInRpdGxlIiA6ICJZb2ppbWJvIiwKKyAgICAgICAiZGlyZWN0b3IiIDogIkFr aXJhIEt1cm9zYXdhIiB9IF0gfQorICBdIH0nKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgIDwv cGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVyeSB0aGUgPHN0cnVjdG5hbWU+bXlfZmlsbXM8 L3N0cnVjdG5hbWU+IHRhYmxlIGhvbGRpbmcKKyAgICAgIHNvbWUgSlNPTiBkYXRhIGFib3V0IHRo ZSBmaWxtcyBhbmQgY3JlYXRlIGEgdmlldyB0aGF0CisgICAgICBkaXN0cmlidXRlcyB0aGUgZmls bSBnZW5yZSwgdGl0bGUsIGFuZCBkaXJlY3RvciBiZXR3ZWVuIHNlcGFyYXRlIGNvbHVtbnM6Cis8 c2NyZWVuPgorU0VMRUNUIGp0LiogRlJPTQorIG15X2ZpbG1zLAorIEpTT05fVEFCTEUgKCBqcywg JyQuZmF2b3JpdGVzWypdJyBDT0xVTU5TICgKKyAgIGlkIEZPUiBPUkRJTkFMSVRZLAorICAga2lu ZCB0ZXh0IFBBVEggJyQua2luZCcsCisgICBORVNURUQgUEFUSCAnJC5maWxtc1sqXScgQ09MVU1O UyAoCisgICAgIHRpdGxlIHRleHQgUEFUSCAnJC50aXRsZScsCisgICAgIGRpcmVjdG9yIHRleHQg UEFUSCAnJC5kaXJlY3RvcicpKSkgQVMganQ7CistLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBpZCB8ICAga2luZCAgIHwgICAgICAgdGl0bGUg ICAgICB8ICAgIGRpcmVjdG9yCistLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0KKyAxICB8IGNvbWVkeSAgIHwgQmFuYW5hcyAgICAgICAgICB8IFdv b2R5IEFsbGVuCisgMSAgfCBjb21lZHkgICB8IFRoZSBEaW5uZXIgR2FtZSAgfCBGcmFuY2lzIFZl YmVyCisgMiAgfCBob3Jyb3IgICB8IFBzeWNobyAgICAgICAgICAgfCBBbGZyZWQgSGl0Y2hjb2Nr CisgMyAgfCB0aHJpbGxlciB8IFZlcnRpZ28gICAgICAgICAgfCBBbGZyZWQgSGl0Y2hjb2NrCisg NCAgfCBkcmFtYSAgICB8IFlvamltYm8gICAgICAgICAgfCBBa2lyYSBLdXJvc2F3YQorICg1IHJv d3MpCis8L3NjcmVlbj4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgRmluZCBh IGRpcmVjdG9yIHRoYXQgaGFzIGRvbmUgZmlsbXMgaW4gdHdvIGRpZmZlcmVudCBnZW5yZXM6Cis8 c2NyZWVuPgorU0VMRUNUCisgIGRpcmVjdG9yMSBBUyBkaXJlY3RvciwgdGl0bGUxLCBraW5kMSwg dGl0bGUyLCBraW5kMgorRlJPTQorICBteV9maWxtcywKKyAgSlNPTl9UQUJMRSAoIGpzLCAnJC5m YXZvcml0ZXMnIEFTIGZhdnMgQ09MVU1OUyAoCisgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTIGZp bG1zMSBDT0xVTU5TICgKKyAgICAgIGtpbmQxIHRleHQgUEFUSCAnJC5raW5kJywKKyAgICAgIE5F U1RFRCBQQVRIICckLmZpbG1zWypdJyBBUyBmaWxtMSBDT0xVTU5TICgKKyAgICAgICAgdGl0bGUx IHRleHQgUEFUSCAnJC50aXRsZScsCisgICAgICAgIGRpcmVjdG9yMSB0ZXh0IFBBVEggJyQuZGly ZWN0b3InKQorICAgICksCisgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTIGZpbG1zMiBDT0xVTU5T ICgKKyAgICAgIGtpbmQyIHRleHQgUEFUSCAnJC5raW5kJywKKyAgICAgIE5FU1RFRCBQQVRIICck LmZpbG1zWypdJyBBUyBmaWxtMiBDT0xVTU5TICgKKyAgICAgICAgdGl0bGUyIHRleHQgUEFUSCAn JC50aXRsZScsCisgICAgICAgIGRpcmVjdG9yMiB0ZXh0IFBBVEggJyQuZGlyZWN0b3InCisgICAg ICApCisgICAgKQorICAgKQorICAgUExBTiAoZmF2cyBPVVRFUiAoKGZpbG1zMSBJTk5FUiBmaWxt MSkgQ1JPU1MgKGZpbG1zMiBJTk5FUiBmaWxtMikpKQorICApIEFTIGp0CisgV0hFUkUga2luZDEg PiBraW5kMiBBTkQgZGlyZWN0b3IxID0gZGlyZWN0b3IyOworCisgICAgIGRpcmVjdG9yICAgICB8 IHRpdGxlMSAgfCAga2luZDEgICB8IHRpdGxlMiB8IGtpbmQyCistLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0KKyBBbGZyZWQgSGl0Y2hjb2Nr IHwgVmVydGlnbyB8IHRocmlsbGVyIHwgUHN5Y2hvIHwgaG9ycm9yCisoMSByb3cpCis8L3NjcmVl bj4KKyAgICAgPC9wYXJhPgorICA8L3NlY3QyPgorCiAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtc3Fs anNvbi1wYXRoIj4KICAgPHRpdGxlPlRoZSBTUUwvSlNPTiBQYXRoIExhbmd1YWdlPC90aXRsZT4K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDEzMjE3ODA3ZWUuLmExYjAzMjhkMWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKQEAgLTM4NzAsNyArMzg3MCwxMyBAQCBFeHBsYWluVGFyZ2V0UmVs KFBsYW4gKnBsYW4sIEluZGV4IHJ0aSwgRXhwbGFpblN0YXRlICplcykKIAkJCWJyZWFrOwogCQlj YXNlIFRfVGFibGVGdW5jU2NhbjoKIAkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1RBQkxF RlVOQyk7Ci0JCQlvYmplY3RuYW1lID0gInhtbHRhYmxlIjsKKwkJCWlmIChydGUtPnRhYmxlZnVu YykKKwkJCQlpZiAocnRlLT50YWJsZWZ1bmMtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSkKKwkJ CQkJb2JqZWN0bmFtZSA9ICJ4bWx0YWJsZSI7CisJCQkJZWxzZQkJCS8qIE11c3QgYmUgVEZUX0pT T05fVEFCTEUgKi8KKwkJCQkJb2JqZWN0bmFtZSA9ICJqc29uX3RhYmxlIjsKKwkJCWVsc2UKKwkJ CQlvYmplY3RuYW1lID0gTlVMTDsKIAkJCW9iamVjdHRhZyA9ICJUYWJsZSBGdW5jdGlvbiBOYW1l IjsKIAkJCWJyZWFrOwogCQljYXNlIFRfVmFsdWVzU2NhbjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jCmluZGV4IDlhZGYzMTY4MmMuLjEyMzEyMWE5MWMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNDMxMCw2ICs0MzEwLDExIEBAIEV4ZWNFdmFsSnNv bkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVj b250ZXh0KQogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgSlNPTl9UQUJMRV9PUDoKKwkJCXJl cyA9IGl0ZW07CisJCQlyZXNudWxsID0gZmFsc2U7CisJCQlicmVhazsKKwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBleHByZXNzaW9uIG9wICVkIiwg amV4cHItPm9wKTsKIAkJCSpvcC0+cmVzbnVsbCA9IHRydWU7CkBAIC00NDg2LDYgKzQ0OTEsMTEg QEAgRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3Rl cCAqb3AsCiAJCQkJcmV0dXJuIGpjc3RhdGUtPmp1bXBfZXZhbF9leHByOwogCQkJYnJlYWs7CiAK KwkJY2FzZSBKU09OX1RBQkxFX09QOgorCQkJLyogTm8gY29lcmNpb24gbmVlZGVkLiAqLworCQkJ cG9zdF9ldmFsLT5jb2VyY2lvbl9kb25lID0gdHJ1ZTsKKwkJCXJldHVybiBvcC0+ZC5qc29uZXhw cl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2RvbmU7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgU1FML0pTT04gZXhwcmVzc2lvbiBvcCAlZCIsIGpleHByLT5vcCk7 CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1 bmNzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jCmluZGV4 IGE2MGRjZDQ5NDMuLjBkN2Y1MThhZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVUYWJsZUZ1bmNzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxl RnVuY3NjYW4uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpAQCAt MTYxLDggKzE2Miw5IEBAIEV4ZWNJbml0VGFibGVGdW5jU2NhbihUYWJsZUZ1bmNTY2FuICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlzY2Fuc3RhdGUtPnNzLnBzLnF1YWwgPQog CQlFeGVjSW5pdFF1YWwobm9kZS0+c2Nhbi5wbGFuLnF1YWwsICZzY2Fuc3RhdGUtPnNzLnBzKTsK IAotCS8qIE9ubHkgWE1MVEFCTEUgaXMgc3VwcG9ydGVkIGN1cnJlbnRseSAqLwotCXNjYW5zdGF0 ZS0+cm91dGluZSA9ICZYbWxUYWJsZVJvdXRpbmU7CisJLyogT25seSBYTUxUQUJMRSBhbmQgSlNP Tl9UQUJMRSBhcmUgc3VwcG9ydGVkIGN1cnJlbnRseSAqLworCXNjYW5zdGF0ZS0+cm91dGluZSA9 CisJCXRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUgPyAmWG1sVGFibGVSb3V0aW5lIDogJkpz b25iVGFibGVSb3V0aW5lOwogCiAJc2NhbnN0YXRlLT5wZXJUYWJsZUN4dCA9CiAJCUFsbG9jU2V0 Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKQEAgLTE4Miw2ICsxODQsMTAgQEAg RXhlY0luaXRUYWJsZUZ1bmNTY2FuKFRhYmxlRnVuY1NjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5jb2xleHBycywgKFBsYW5TdGF0 ZSAqKSBzY2Fuc3RhdGUpOwogCXNjYW5zdGF0ZS0+Y29sZGVmZXhwcnMgPQogCQlFeGVjSW5pdEV4 cHJMaXN0KHRmLT5jb2xkZWZleHBycywgKFBsYW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOworCXNjYW5z dGF0ZS0+Y29sdmFsZXhwcnMgPQorCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5jb2x2YWxleHBycywg KFBsYW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOworCXNjYW5zdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzID0K KwkJRXhlY0luaXRFeHByTGlzdCh0Zi0+cGFzc2luZ3ZhbGV4cHJzLCAoUGxhblN0YXRlICopIHNj YW5zdGF0ZSk7CiAKIAlzY2Fuc3RhdGUtPm5vdG51bGxzID0gdGYtPm5vdG51bGxzOwogCkBAIC0z NjksMTQgKzM3NSwxNyBAQCB0ZnVuY0luaXRpYWxpemUoVGFibGVGdW5jU2NhblN0YXRlICp0c3Rh dGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgRGF0dW0gZG9jKQogCQlyb3V0aW5lLT5TZXROYW1l c3BhY2UodHN0YXRlLCBuc19uYW1lLCBuc191cmkpOwogCX0KIAotCS8qIEluc3RhbGwgdGhlIHJv dyBmaWx0ZXIgZXhwcmVzc2lvbiBpbnRvIHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQgKi8KLQl2 YWx1ZSA9IEV4ZWNFdmFsRXhwcih0c3RhdGUtPnJvd2V4cHIsIGVjb250ZXh0LCAmaXNudWxsKTsK LQlpZiAoaXNudWxsKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfTlVM TF9WQUxVRV9OT1RfQUxMT1dFRCksCi0JCQkJIGVycm1zZygicm93IGZpbHRlciBleHByZXNzaW9u IG11c3Qgbm90IGJlIG51bGwiKSkpOworCWlmIChyb3V0aW5lLT5TZXRSb3dGaWx0ZXIpCisJewor CQkvKiBJbnN0YWxsIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb24gaW50byB0aGUgdGFibGUgYnVp bGRlciBjb250ZXh0ICovCisJCXZhbHVlID0gRXhlY0V2YWxFeHByKHRzdGF0ZS0+cm93ZXhwciwg ZWNvbnRleHQsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKKwkJCQkJIGVycm1z Zygicm93IGZpbHRlciBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwiKSkpOwogCi0Jcm91dGlu ZS0+U2V0Um93RmlsdGVyKHRzdGF0ZSwgVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQly b3V0aW5lLT5TZXRSb3dGaWx0ZXIodHN0YXRlLCBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7 CisJfQogCiAJLyoKIAkgKiBJbnN0YWxsIHRoZSBjb2x1bW4gZmlsdGVyIGV4cHJlc3Npb25zIGlu dG8gdGhlIHRhYmxlIGJ1aWxkZXIgY29udGV4dC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggZTFm N2ZkZTJiZC4uMTQzNmI5YjVmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTg3Niw2ICs4NzYs MjUgQEAgbWFrZUpzb25CZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUsIE5vZGUgKmRlZmF1 bHRfZXhwciwgaW50IGxvY2F0aW9uKQogCXJldHVybiBiZWhhdmlvcjsKIH0KIAorLyoKKyAqIG1h a2VKc29uVGFibGVKb2luZWRQbGFuIC0KKyAqCSAgIGNyZWF0ZXMgYSBqb2luZWQgSnNvblRhYmxl UGxhbiBub2RlCisgKi8KK05vZGUgKgorbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSnNvblRhYmxl UGxhbkpvaW5UeXBlIHR5cGUsIE5vZGUgKnBsYW4xLCBOb2RlICpwbGFuMiwKKwkJCQkJCWludCBs b2NhdGlvbikKK3sKKwlKc29uVGFibGVQbGFuICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7 CisKKwluLT5wbGFuX3R5cGUgPSBKU1RQX0pPSU5FRDsKKwluLT5qb2luX3R5cGUgPSB0eXBlOwor CW4tPnBsYW4xID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgcGxhbjEpOworCW4tPnBsYW4yID0g Y2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgcGxhbjIpOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247 CisKKwlyZXR1cm4gKE5vZGUgKikgbjsKK30KKwogLyoKICAqIG1ha2VKc29uRW5jb2RpbmcgLQog ICoJICBjb252ZXJ0cyBKU09OIGVuY29kaW5nIG5hbWUgdG8gZW51bSBKc29uRW5jb2RpbmcKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9k ZXMvbm9kZUZ1bmNzLmMKaW5kZXggZWYwOGVmMmNiZS4uY2ExNzQ3YTJkZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9k ZUZ1bmNzLmMKQEAgLTI2MTQsNiArMjYxNCwxMCBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyX2lt cGwoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJaWYgKFdBTEsodGYtPmNvbGRl ZmV4cHJzKSkKIAkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsodGYtPmNvbHZhbGV4cHJz KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsodGYtPnBhc3Npbmd2YWxleHBycykp CisJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0zNjY0 LDYgKzM2NjgsOCBAQCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUsCiAJ CQkJTVVUQVRFKG5ld25vZGUtPnJvd2V4cHIsIHRmLT5yb3dleHByLCBOb2RlICopOwogCQkJCU1V VEFURShuZXdub2RlLT5jb2xleHBycywgdGYtPmNvbGV4cHJzLCBMaXN0ICopOwogCQkJCU1VVEFU RShuZXdub2RlLT5jb2xkZWZleHBycywgdGYtPmNvbGRlZmV4cHJzLCBMaXN0ICopOworCQkJCU1V VEFURShuZXdub2RlLT5jb2x2YWxleHBycywgdGYtPmNvbHZhbGV4cHJzLCBMaXN0ICopOworCQkJ CU1VVEFURShuZXdub2RlLT5wYXNzaW5ndmFsZXhwcnMsIHRmLT5wYXNzaW5ndmFsZXhwcnMsIExp c3QgKik7CiAJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CiAJCQl9CiAJCQlicmVhazsKQEAg LTQwOTUsNiArNDEwMSwzMCBAQCByYXdfZXhwcmVzc2lvbl90cmVlX3dhbGtlcl9pbXBsKE5vZGUg Km5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29u VGFibGU6CisJCQl7CisJCQkJSnNvblRhYmxlICAqanQgPSAoSnNvblRhYmxlICopIG5vZGU7CisK KwkJCQlpZiAoV0FMSyhqdC0+Y29tbW9uKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdB TEsoanQtPmNvbHVtbnMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIFRfSnNvblRhYmxlQ29sdW1uOgorCQkJeworCQkJCUpzb25UYWJsZUNvbHVtbiAqanRjID0g KEpzb25UYWJsZUNvbHVtbiAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoanRjLT50eXBlTmFtZSkp CisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0Yy0+b25fZW1wdHkpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdGMtPm9uX2Vycm9yKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEICYmIFdBTEsoanRjLT5jb2x1 bW5zKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX051bGxU ZXN0OgogCQkJcmV0dXJuIFdBTEsoKChOdWxsVGVzdCAqKSBub2RlKS0+YXJnKTsKIAkJY2FzZSBU X0Jvb2xlYW5UZXN0OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlCmluZGV4IDlmMWM0MDIyYmIuLmY0YzBjYzdmMTAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZQorKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAgT0JKUyA9IFwKIAlwYXJzZV9lbnIu byBcCiAJcGFyc2VfZXhwci5vIFwKIAlwYXJzZV9mdW5jLm8gXAorCXBhcnNlX2pzb250YWJsZS5v IFwKIAlwYXJzZV9tZXJnZS5vIFwKIAlwYXJzZV9ub2RlLm8gXAogCXBhcnNlX29wZXIubyBcCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueQppbmRleCBmZmE4YmJlNzcwLi4xNWQ5YmQ4NDI1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY1 NCwxOSArNjU0LDQzIEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFy ICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCQkJanNvbl9hZ2dyZWdh dGVfZnVuYwogCQkJCWpzb25fYXBpX2NvbW1vbl9zeW50YXgKIAkJCQlqc29uX2FyZ3VtZW50CisJ CQkJanNvbl90YWJsZQorCQkJCWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb24KKwkJCQlqc29u X3RhYmxlX29yZGluYWxpdHlfY29sdW1uX2RlZmluaXRpb24KKwkJCQlqc29uX3RhYmxlX3JlZ3Vs YXJfY29sdW1uX2RlZmluaXRpb24KKwkJCQlqc29uX3RhYmxlX2Zvcm1hdHRlZF9jb2x1bW5fZGVm aW5pdGlvbgorCQkJCWpzb25fdGFibGVfZXhpc3RzX2NvbHVtbl9kZWZpbml0aW9uCisJCQkJanNv bl90YWJsZV9uZXN0ZWRfY29sdW1ucworCQkJCWpzb25fdGFibGVfcGxhbl9jbGF1c2Vfb3B0CisJ CQkJanNvbl90YWJsZV9wbGFuCisJCQkJanNvbl90YWJsZV9wbGFuX3NpbXBsZQorCQkJCWpzb25f dGFibGVfcGxhbl9wYXJlbnRfY2hpbGQKKwkJCQlqc29uX3RhYmxlX3BsYW5fb3V0ZXIKKwkJCQlq c29uX3RhYmxlX3BsYW5faW5uZXIKKwkJCQlqc29uX3RhYmxlX3BsYW5fc2libGluZworCQkJCWpz b25fdGFibGVfcGxhbl91bmlvbgorCQkJCWpzb25fdGFibGVfcGxhbl9jcm9zcworCQkJCWpzb25f dGFibGVfcGxhbl9wcmltYXJ5CiAldHlwZSA8bGlzdD4JanNvbl9uYW1lX2FuZF92YWx1ZV9saXN0 CiAJCQkJanNvbl92YWx1ZV9leHByX2xpc3QKIAkJCQlqc29uX2FycmF5X2FnZ3JlZ2F0ZV9vcmRl cl9ieV9jbGF1c2Vfb3B0CiAJCQkJanNvbl9hcmd1bWVudHMKKwkJCQlqc29uX3RhYmxlX2NvbHVt bnNfY2xhdXNlCisJCQkJanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0CisldHlwZSA8 c3RyPgkJanNvbl90YWJsZV9jb2x1bW5fcGF0aF9zcGVjaWZpY2F0aW9uX2NsYXVzZV9vcHQKICV0 eXBlIDxpdmFsPglqc29uX2VuY29kaW5nX2NsYXVzZV9vcHQKIAkJCQlqc29uX3ByZWRpY2F0ZV90 eXBlX2NvbnN0cmFpbnQKIAkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3RhYmxl X2RlZmF1bHRfcGxhbl9jaG9pY2VzCisJCQkJanNvbl90YWJsZV9kZWZhdWx0X3BsYW5faW5uZXJf b3V0ZXIKKwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcwogJXR5cGUgPGJv b2xlYW4+CWpzb25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKIAkJCQlqc29uX29iamVj dF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVzZV9vcHQKIAkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9y X251bGxfY2xhdXNlX29wdAogJXR5cGUgPGpzYmVoYXZpb3I+CWpzb25fdmFsdWVfYmVoYXZpb3IK IAkJCQkJanNvbl9xdWVyeV9iZWhhdmlvcgogCQkJCQlqc29uX2V4aXN0c19iZWhhdmlvcgorCQkJ CQlqc29uX3RhYmxlX2JlaGF2aW9yCiAldHlwZSA8anNfcXVvdGVzPglqc29uX3F1b3Rlc19jbGF1 c2Vfb3B0CiAKIApAQCAtNzMzLDcgKzc1Nyw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZl Vmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJ SU5URVJTRUNUIElOVEVSVkFMIElOVE8gSU5WT0tFUiBJUyBJU05VTEwgSVNPTEFUSU9OCiAKIAlK T0lOIEpTT04gSlNPTl9BUlJBWSBKU09OX0FSUkFZQUdHIEpTT05fRVhJU1RTIEpTT05fT0JKRUNU IEpTT05fT0JKRUNUQUdHCi0JSlNPTl9RVUVSWSBKU09OX1NDQUxBUiBKU09OX1NFUklBTElaRSBK U09OX1ZBTFVFCisJSlNPTl9RVUVSWSBKU09OX1NDQUxBUiBKU09OX1NFUklBTElaRSBKU09OX1RB QkxFIEpTT05fVkFMVUUKIAogCUtFWSBLRVlTIEtFRVAKIApAQCAtNzQ0LDggKzc2OCw4IEBAIHN0 YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICph bGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJTUFQUElORyBNQVRDSCBNQVRDSEVEIE1BVEVSSUFMSVpF RCBNQVhWQUxVRSBNRVJHRSBNRVRIT0QKIAlNSU5VVEVfUCBNSU5WQUxVRSBNT0RFIE1PTlRIX1Ag TU9WRQogCi0JTkFNRV9QIE5BTUVTIE5BVElPTkFMIE5BVFVSQUwgTkNIQVIgTkVXIE5FWFQgTkZD IE5GRCBORktDIE5GS0QgTk8gTk9ORQotCU5PUk1BTElaRSBOT1JNQUxJWkVECisJTkFNRV9QIE5B TUVTIE5BVElPTkFMIE5BVFVSQUwgTkNIQVIgTkVTVEVEIE5FVyBORVhUIE5GQyBORkQgTkZLQyBO RktEIE5PCisJTk9ORSBOT1JNQUxJWkUgTk9STUFMSVpFRAogCU5PVCBOT1RISU5HIE5PVElGWSBO T1ROVUxMIE5PV0FJVCBOVUxMX1AgTlVMTElGCiAJTlVMTFNfUCBOVU1FUklDCiAKQEAgLTc1Myw4 ICs3NzcsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU9SREVSIE9SRElOQUxJVFkgT1RI RVJTIE9VVF9QIE9VVEVSX1AKIAlPVkVSIE9WRVJMQVBTIE9WRVJMQVkgT1ZFUlJJRElORyBPV05F RCBPV05FUgogCi0JUEFSQUxMRUwgUEFSQU1FVEVSIFBBUlNFUiBQQVJUSUFMIFBBUlRJVElPTiBQ QVNTSU5HIFBBU1NXT1JECi0JUExBQ0lORyBQTEFOUyBQT0xJQ1kKKwlQQVJBTExFTCBQQVJBTUVU RVIgUEFSU0VSIFBBUlRJQUwgUEFSVElUSU9OIFBBU1NJTkcgUEFTU1dPUkQgUEFUSAorCVBMQUNJ TkcgUExBTiBQTEFOUyBQT0xJQ1kKIAlQT1NJVElPTiBQUkVDRURJTkcgUFJFQ0lTSU9OIFBSRVNF UlZFIFBSRVBBUkUgUFJFUEFSRUQgUFJJTUFSWQogCVBSSU9SIFBSSVZJTEVHRVMgUFJPQ0VEVVJB TCBQUk9DRURVUkUgUFJPQ0VEVVJFUyBQUk9HUkFNIFBVQkxJQ0FUSU9OCiAKQEAgLTg2Miw2ICs4 ODYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICogVXNpbmcgdGhlIHNhbWUgcHJlY2Vk ZW5jZSBhcyBJREVOVCBzZWVtcyByaWdodCBmb3IgdGhlIHJlYXNvbnMgZ2l2ZW4gYWJvdmUuCiAg Ki8KICVub25hc3NvYwlVTkJPVU5ERUQJCS8qIGlkZWFsbHkgd291bGQgaGF2ZSBzYW1lIHByZWNl ZGVuY2UgYXMgSURFTlQgKi8KKyVub25hc3NvYwlDT0xVTU5TCiAlbm9uYXNzb2MJSURFTlQgUEFS VElUSU9OIFJBTkdFIFJPV1MgR1JPVVBTIFBSRUNFRElORyBGT0xMT1dJTkcgQ1VCRSBST0xMVVAK ICVsZWZ0CQlPcCBPUEVSQVRPUgkJLyogbXVsdGktY2hhcmFjdGVyIG9wcyBhbmQgdXNlci1kZWZp bmVkIG9wZXJhdG9ycyAqLwogJWxlZnQJCScrJyAnLScKQEAgLTg4NCw2ICs5MDksOSBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxp YXNlcywgTm9kZSAqcXVlcnkpOwogICovCiAlbGVmdAkJSk9JTiBDUk9TUyBMRUZUIEZVTEwgUklH SFQgSU5ORVJfUCBOQVRVUkFMCiAKKyVub25hc3NvYwlqc29uX3RhYmxlX2NvbHVtbgorJW5vbmFz c29jCU5FU1RFRAorJWxlZnQJCVBBVEgKICUlCiAKIC8qCkBAIC0xMzM3Myw2ICsxMzQwMSwyMSBA QCB0YWJsZV9yZWY6CXJlbGF0aW9uX2V4cHIgb3B0X2FsaWFzX2NsYXVzZQogCQkJCQkkMi0+YWxp YXMgPSAkNDsKIAkJCQkJJCQgPSAoTm9kZSAqKSAkMjsKIAkJCQl9CisJCQl8IGpzb25fdGFibGUg b3B0X2FsaWFzX2NsYXVzZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlICAqanQgPSBjYXN0Tm9kZShK c29uVGFibGUsICQxKTsKKworCQkJCQlqdC0+YWxpYXMgPSAkMjsKKwkJCQkJJCQgPSAoTm9kZSAq KSBqdDsKKwkJCQl9CisJCQl8IExBVEVSQUxfUCBqc29uX3RhYmxlIG9wdF9hbGlhc19jbGF1c2UK KwkJCQl7CisJCQkJCUpzb25UYWJsZSAgKmp0ID0gY2FzdE5vZGUoSnNvblRhYmxlLCAkMik7CisK KwkJCQkJanQtPmFsaWFzID0gJDM7CisJCQkJCWp0LT5sYXRlcmFsID0gdHJ1ZTsKKwkJCQkJJCQg PSAoTm9kZSAqKSBqdDsKKwkJCQl9CiAJCTsKIAogCkBAIC0xMzk0MCw2ICsxMzk4Myw4IEBAIHht bHRhYmxlX2NvbHVtbl9vcHRpb25fZWw6CiAJCQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3Rf bnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7IH0KIAkJCXwgTlVMTF9QCiAJ CQkJeyAkJCA9IG1ha2VEZWZFbGVtKCJpc19ub3RfbnVsbCIsIChOb2RlICopIG1ha2VCb29sZWFu KGZhbHNlKSwgQDEpOyB9CisJCQl8IFBBVEggYl9leHByCisJCQkJeyAkJCA9IG1ha2VEZWZFbGVt KCJwYXRoIiwgJDIsIEAxKTsgfQogCQk7CiAKIHhtbF9uYW1lc3BhY2VfbGlzdDoKQEAgLTE2NzQ3 LDYgKzE2NzkyLDExIEBAIGpzb25fdmFsdWVfYmVoYXZpb3I6CiAJCQl8IERFRkFVTFQgYV9leHBy CXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfREVGQVVMVCwgJDIsIEAxKTsg fQogCQk7CiAKK2pzb25fdGFibGVfYmVoYXZpb3I6CisJCQlFUlJPUl9QCQl7ICQkID0gbWFrZUpz b25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VSUk9SLCBOVUxMLCBAMSk7IH0KKwkJCXwgRU1QVFlf UAkJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9FTVBUWV9PQkpFQ1QsIE5V TEwsIEAxKTsgfQorCQk7CisKIC8qIEFSUkFZIGlzIGEgbm9pc2Ugd29yZCAqLwoganNvbl93cmFw cGVyX2JlaGF2aW9yOgogCQkJICBXSVRIT1VUIFdSQVBQRVIJCQkJCXsgJCQgPSBKU1dfTk9ORTsg fQpAQCAtMTY3NjgsNiArMTY4MTgsNDE0IEBAIGpzb25fcXVvdGVzX2NsYXVzZV9vcHQ6CiAJCQl8 IC8qIEVNUFRZICovCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19VTlNQRUM7IH0KIAkJOwogCitqc29u X3RhYmxlOgorCQkJSlNPTl9UQUJMRSAnKCcKKwkJCQlqc29uX2FwaV9jb21tb25fc3ludGF4CisJ CQkJanNvbl90YWJsZV9jb2x1bW5zX2NsYXVzZQorCQkJCWpzb25fdGFibGVfcGxhbl9jbGF1c2Vf b3B0CisJCQknKScKKwkJCQl7CisJCQkJCUpzb25UYWJsZSAqbiA9IG1ha2VOb2RlKEpzb25UYWJs ZSk7CisKKwkJCQkJbi0+Y29tbW9uID0gKEpzb25Db21tb24gKikgJDM7CisJCQkJCW4tPmNvbHVt bnMgPSAkNDsKKwkJCQkJbi0+cGxhbiA9IChKc29uVGFibGVQbGFuICopICQ1OworCQkJCQluLT5s b2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX1RB QkxFICcoJworCQkJCWpzb25fYXBpX2NvbW1vbl9zeW50YXgKKwkJCQlqc29uX3RhYmxlX2NvbHVt bnNfY2xhdXNlCisJCQkJanNvbl90YWJsZV9wbGFuX2NsYXVzZV9vcHQKKwkJCQlqc29uX3RhYmxl X2JlaGF2aW9yIE9OIEVSUk9SX1AKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvblRhYmxlICpuID0g bWFrZU5vZGUoSnNvblRhYmxlKTsKKworCQkJCQluLT5jb21tb24gPSAoSnNvbkNvbW1vbiAqKSAk MzsKKwkJCQkJbi0+Y29sdW1ucyA9ICQ0OworCQkJCQluLT5wbGFuID0gKEpzb25UYWJsZVBsYW4g KikgJDU7CisJCQkJCW4tPm9uX2Vycm9yID0gJDY7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJ CQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCTsKKworanNvbl90YWJsZV9jb2x1bW5zX2Ns YXVzZToKKwkJCUNPTFVNTlMgJygnCWpzb25fdGFibGVfY29sdW1uX2RlZmluaXRpb25fbGlzdCAn KScgeyAkJCA9ICQzOyB9CisJCTsKKworanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbl9saXN0 OgorCQkJanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbgorCQkJCXsgJCQgPSBsaXN0X21ha2Ux KCQxKTsgfQorCQkJfCBqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uX2xpc3QgJywnIGpzb25f dGFibGVfY29sdW1uX2RlZmluaXRpb24KKwkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJ CTsKKworanNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbjoKKwkJCWpzb25fdGFibGVfb3JkaW5h bGl0eV9jb2x1bW5fZGVmaW5pdGlvbgkJJXByZWMganNvbl90YWJsZV9jb2x1bW4KKwkJCXwganNv bl90YWJsZV9yZWd1bGFyX2NvbHVtbl9kZWZpbml0aW9uCQklcHJlYyBqc29uX3RhYmxlX2NvbHVt bgorCQkJfCBqc29uX3RhYmxlX2Zvcm1hdHRlZF9jb2x1bW5fZGVmaW5pdGlvbgklcHJlYyBqc29u X3RhYmxlX2NvbHVtbgorCQkJfCBqc29uX3RhYmxlX2V4aXN0c19jb2x1bW5fZGVmaW5pdGlvbgkJ JXByZWMganNvbl90YWJsZV9jb2x1bW4KKwkJCXwganNvbl90YWJsZV9uZXN0ZWRfY29sdW1ucwor CQk7CisKK2pzb25fdGFibGVfb3JkaW5hbGl0eV9jb2x1bW5fZGVmaW5pdGlvbjoKKwkJCUNvbElk IEZPUiBPUkRJTkFMSVRZCisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9k ZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfRk9SX09SRElOQUxJ VFk7CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQg PSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3RhYmxlX3JlZ3VsYXJfY29sdW1uX2Rl ZmluaXRpb246CisJCQlDb2xJZCBUeXBlbmFtZQorCQkJanNvbl90YWJsZV9jb2x1bW5fcGF0aF9z cGVjaWZpY2F0aW9uX2NsYXVzZV9vcHQKKwkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgorCQkJanNv bl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFr ZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX1JFR1VMQVI7 CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+Zm9y bWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAt MSk7CisJCQkJCW4tPndyYXBwZXIgPSAkNDsgLyogZGlzYWxsb3dlZCBkdXJpbmcgcGFyc2UtYW5h bHlzaXMhICovCisJCQkJCW4tPnF1b3RlcyA9ICQ1OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJz ZS1hbmFseXNpcyEgKi8KKwkJCQkJbi0+cGF0aHNwZWMgPSAkMzsKKwkJCQkJbi0+bG9jYXRpb24g PSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgQ29sSWQgVHlwZW5hbWUK KwkJCQlqc29uX3RhYmxlX2NvbHVtbl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAorCQkJ CWpzb25fd3JhcHBlcl9iZWhhdmlvcgorCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCQlq c29uX3ZhbHVlX2JlaGF2aW9yIE9OIEVNUFRZX1AKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVt biAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpU Q19SRUdVTEFSOworCQkJCQluLT5uYW1lID0gJDE7CisJCQkJCW4tPnR5cGVOYW1lID0gJDI7CisJ CQkJCW4tPmZvcm1hdCA9IG1ha2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9ERUZBVUxULCBKU19FTkNf REVGQVVMVCwgLTEpOworCQkJCQluLT53cmFwcGVyID0gJDQ7IC8qIGRpc2FsbG93ZWQgZHVyaW5n IHBhcnNlLWFuYWx5c2lzISAqLworCQkJCQluLT5xdW90ZXMgPSAkNTsgLyogZGlzYWxsb3dlZCBk dXJpbmcgcGFyc2UtYW5hbHlzaXMhICovCisJCQkJCW4tPnBhdGhzcGVjID0gJDM7CisJCQkJCW4t Pm9uX2VtcHR5ID0gJDY7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUg KikgbjsKKwkJCQl9CisJCQl8IENvbElkIFR5cGVuYW1lCisJCQkJanNvbl90YWJsZV9jb2x1bW5f cGF0aF9zcGVjaWZpY2F0aW9uX2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IK KwkJCQlqc29uX3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNvbl92YWx1ZV9iZWhhdmlvciBPTiBF UlJPUl9QCisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFi bGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfUkVHVUxBUjsKKwkJCQkJbi0+bmFt ZSA9ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNv bkZvcm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCQkJbi0+ d3JhcHBlciA9ICQ0OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJzZS1hbmFseXNpcyEgKi8KKwkJ CQkJbi0+cXVvdGVzID0gJDU7IC8qIGRpc2FsbG93ZWQgZHVyaW5nIHBhcnNlLWFuYWx5c2lzISAq LworCQkJCQluLT5wYXRoc3BlYyA9ICQzOworCQkJCQluLT5vbl9lcnJvciA9ICQ2OworCQkJCQlu LT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBDb2xJ ZCBUeXBlbmFtZQorCQkJCWpzb25fdGFibGVfY29sdW1uX3BhdGhfc3BlY2lmaWNhdGlvbl9jbGF1 c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9yCisJCQkJanNvbl9xdW90ZXNfY2xhdXNl X29wdAorCQkJCWpzb25fdmFsdWVfYmVoYXZpb3IgT04gRU1QVFlfUAorCQkJCWpzb25fdmFsdWVf YmVoYXZpb3IgT04gRVJST1JfUAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFr ZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX1JFR1VMQVI7 CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+Zm9y bWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAt MSk7CisJCQkJCW4tPndyYXBwZXIgPSAkNDsgLyogZGlzYWxsb3dlZCBkdXJpbmcgcGFyc2UtYW5h bHlzaXMhICovCisJCQkJCW4tPnF1b3RlcyA9ICQ1OyAvKiBkaXNhbGxvd2VkIGR1cmluZyBwYXJz ZS1hbmFseXNpcyEgKi8KKwkJCQkJbi0+cGF0aHNwZWMgPSAkMzsKKwkJCQkJbi0+b25fZW1wdHkg PSAkNjsKKwkJCQkJbi0+b25fZXJyb3IgPSAkOTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJ CQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3RhYmxlX2Zvcm1hdHRlZF9j b2x1bW5fZGVmaW5pdGlvbjoKKwkJCUNvbElkIFR5cGVuYW1lIEZPUk1BVF9MQSBKU09OIGpzb25f ZW5jb2RpbmdfY2xhdXNlX29wdAorCQkJanNvbl90YWJsZV9jb2x1bW5fcGF0aF9zcGVjaWZpY2F0 aW9uX2NsYXVzZV9vcHQKKwkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgorCQkJanNvbl9xdW90ZXNf Y2xhdXNlX29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNv blRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQkJ bi0+bmFtZSA9ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBt YWtlSnNvbkZvcm1hdChKU19GT1JNQVRfSlNPTiwgJDUsIEAxKTsKKwkJCQkJbi0+cGF0aHNwZWMg PSAkNjsKKwkJCQkJbi0+d3JhcHBlciA9ICQ3OworCQkJCQlpZiAobi0+d3JhcHBlciAhPSBKU1df Tk9ORSAmJiAkOCAhPSBKU19RVU9URVNfVU5TUEVDKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCQkgZXJybXNnKCJT UUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBX UkFQUEVSIGlzIHVzZWQiKSwKKwkJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihANykpKTsKKwkJ CQkJbi0+cXVvdGVzID0gJDg7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5v ZGUgKikgbjsKKwkJCQl9CisJCQl8IENvbElkIFR5cGVuYW1lIEZPUk1BVF9MQSBKU09OIGpzb25f ZW5jb2RpbmdfY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGVfY29sdW1uX3BhdGhfc3BlY2lmaWNh dGlvbl9jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9yCisJCQkJanNvbl9xdW90 ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fcXVlcnlfYmVoYXZpb3IgT04gRU1QVFlfUAorCQkJCXsK KwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKwor CQkJCQluLT5jb2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJ CQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19G T1JNQVRfSlNPTiwgJDUsIEAxKTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNjsKKwkJCQkJbi0+d3Jh cHBlciA9ICQ3OworCQkJCQlpZiAobi0+d3JhcHBlciAhPSBKU1dfTk9ORSAmJiAkOCAhPSBKU19R VU9URVNfVU5TUEVDKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCQkgZXJybXNnKCJTUUwvSlNPTiBRVU9URVMgYmVo YXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQiKSwK KwkJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihANykpKTsKKwkJCQkJbi0+cXVvdGVzID0gJDg7 CisJCQkJCW4tPm9uX2VtcHR5ID0gJDk7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQk ID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IENvbElkIFR5cGVuYW1lIEZPUk1BVF9MQSBKU09O IGpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGVfY29sdW1uX3BhdGhfc3Bl Y2lmaWNhdGlvbl9jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9yCisJCQkJanNv bl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fcXVlcnlfYmVoYXZpb3IgT04gRVJST1JfUAor CQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1u KTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQkJbi0+bmFtZSA9ICQx OworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1h dChKU19GT1JNQVRfSlNPTiwgJDUsIEAxKTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNjsKKwkJCQkJ bi0+d3JhcHBlciA9ICQ3OworCQkJCQlpZiAobi0+d3JhcHBlciAhPSBKU1dfTk9ORSAmJiAkOCAh PSBKU19RVU9URVNfVU5TUEVDKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCQkgZXJybXNnKCJTUUwvSlNPTiBRVU9U RVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVz ZWQiKSwKKwkJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihANykpKTsKKwkJCQkJbi0+cXVvdGVz ID0gJDg7CisJCQkJCW4tPm9uX2Vycm9yID0gJDk7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJ CQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IENvbElkIFR5cGVuYW1lIEZPUk1BVF9M QSBKU09OIGpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGVfY29sdW1uX3Bh dGhfc3BlY2lmaWNhdGlvbl9jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVyX2JlaGF2aW9yCisJ CQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fcXVlcnlfYmVoYXZpb3IgT04gRU1Q VFlfUAorCQkJCWpzb25fcXVlcnlfYmVoYXZpb3IgT04gRVJST1JfUAorCQkJCXsKKwkJCQkJSnNv blRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5j b2x0eXBlID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT50eXBl TmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfSlNP TiwgJDUsIEAxKTsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNjsKKwkJCQkJbi0+d3JhcHBlciA9ICQ3 OworCQkJCQlpZiAobi0+d3JhcHBlciAhPSBKU1dfTk9ORSAmJiAkOCAhPSBKU19RVU9URVNfVU5T UEVDKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJCQkJCQkgZXJybXNnKCJTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVz dCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQiKSwKKwkJCQkJCQkJ IHBhcnNlcl9lcnJwb3NpdGlvbihANykpKTsKKwkJCQkJbi0+cXVvdGVzID0gJDg7CisJCQkJCW4t Pm9uX2VtcHR5ID0gJDk7CisJCQkJCW4tPm9uX2Vycm9yID0gJDEyOworCQkJCQluLT5sb2NhdGlv biA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVf ZXhpc3RzX2NvbHVtbl9kZWZpbml0aW9uOgorCQkJQ29sSWQgVHlwZW5hbWUKKwkJCUVYSVNUUyBq c29uX3RhYmxlX2NvbHVtbl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAorCQkJCXsKKwkJ CQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJ CQluLT5jb2x0eXBlID0gSlRDX0VYSVNUUzsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT50 eXBlTmFtZSA9ICQyOworCQkJCQluLT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRf REVGQVVMVCwgSlNfRU5DX0RFRkFVTFQsIC0xKTsKKwkJCQkJbi0+d3JhcHBlciA9IEpTV19OT05F OworCQkJCQluLT5xdW90ZXMgPSBKU19RVU9URVNfVU5TUEVDOworCQkJCQluLT5wYXRoc3BlYyA9 ICQ0OworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJ fQorCQkJfCBDb2xJZCBUeXBlbmFtZQorCQkJCUVYSVNUUyBqc29uX3RhYmxlX2NvbHVtbl9wYXRo X3NwZWNpZmljYXRpb25fY2xhdXNlX29wdAorCQkJCWpzb25fZXhpc3RzX2JlaGF2aW9yIE9OIEVS Uk9SX1AKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJs ZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19FWElTVFM7CisJCQkJCW4tPm5hbWUg PSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+Zm9ybWF0ID0gbWFrZUpzb25G b3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisJCQkJCW4tPndy YXBwZXIgPSBKU1dfTk9ORTsKKwkJCQkJbi0+cXVvdGVzID0gSlNfUVVPVEVTX1VOU1BFQzsKKwkJ CQkJbi0+cGF0aHNwZWMgPSAkNDsKKwkJCQkJbi0+b25fZXJyb3IgPSAkNTsKKwkJCQkJbi0+bG9j YXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX3Rh YmxlX2NvbHVtbl9wYXRoX3NwZWNpZmljYXRpb25fY2xhdXNlX29wdDoKKwkJCVBBVEggU2NvbnN0 CQkJCQkJCQl7ICQkID0gJDI7IH0KKwkJCXwgLyogRU1QVFkgKi8gJXByZWMganNvbl90YWJsZV9j b2x1bW4JeyAkJCA9IE5VTEw7IH0KKwkJOworCitqc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zOgor CQkJTkVTVEVEIHBhdGhfb3B0IFNjb25zdAorCQkJCQkJCWpzb25fdGFibGVfY29sdW1uc19jbGF1 c2UKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNv bHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19ORVNURUQ7CisJCQkJCW4tPnBhdGhzcGVj ID0gJDM7CisJCQkJCW4tPnBhdGhuYW1lID0gTlVMTDsKKwkJCQkJbi0+Y29sdW1ucyA9ICQ0Owor CQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJ fCBORVNURUQgcGF0aF9vcHQgU2NvbnN0IEFTIG5hbWUKKwkJCQlqc29uX3RhYmxlX2NvbHVtbnNf Y2xhdXNlCisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4gKm4gPSBtYWtlTm9kZShKc29uVGFi bGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENfTkVTVEVEOworCQkJCQluLT5wYXRo c3BlYyA9ICQzOworCQkJCQluLT5wYXRobmFtZSA9ICQ1OworCQkJCQluLT5jb2x1bW5zID0gJDY7 CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJ CTsKKworcGF0aF9vcHQ6CisJCQlQQVRICQkJCQkJCQkJeyB9CisJCQl8IC8qIEVNUFRZICovCQkJ CQkJCXsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9jbGF1c2Vfb3B0OgorCQkJUExBTiAnKCcg anNvbl90YWJsZV9wbGFuICcpJwkJCXsgJCQgPSAkMzsgfQorCQkJfCBQTEFOIERFRkFVTFQgJygn IGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX2Nob2ljZXMgJyknCisJCQkJeworCQkJCQlKc29uVGFi bGVQbGFuICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhbik7CisKKwkJCQkJbi0+cGxhbl90eXBl ID0gSlNUUF9ERUZBVUxUOworCQkJCQluLT5qb2luX3R5cGUgPSAkNDsKKwkJCQkJbi0+bG9jYXRp b24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgLyogRU1QVFkgKi8J CQkJCQkJeyAkJCA9IE5VTEw7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW46CisJCQlqc29uX3Rh YmxlX3BsYW5fc2ltcGxlCisJCQl8IGpzb25fdGFibGVfcGxhbl9wYXJlbnRfY2hpbGQKKwkJCXwg anNvbl90YWJsZV9wbGFuX3NpYmxpbmcKKwkJOworCitqc29uX3RhYmxlX3BsYW5fc2ltcGxlOgor CQkJbmFtZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlUGxhbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJs ZVBsYW4pOworCisJCQkJCW4tPnBsYW5fdHlwZSA9IEpTVFBfU0lNUExFOworCQkJCQluLT5wYXRo bmFtZSA9ICQxOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47 CisJCQkJfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9wcmltYXJ5OgorCQkJanNvbl90YWJsZV9w bGFuX3NpbXBsZQkJCQkJCXsgJCQgPSAkMTsgfQorCQkJfCAnKCcganNvbl90YWJsZV9wbGFuICcp JworCQkJCXsKKwkJCQkJY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgJDIpLT5sb2NhdGlvbiA9IEAx OworCQkJCQkkJCA9ICQyOworCQkJCX0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fb3V0ZXI6CisJ CQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlIE9VVEVSX1AganNvbl90YWJsZV9wbGFuX3ByaW1hcnkK KwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUEpfT1VURVIsICQxLCAkMywg QDEpOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFuX2lubmVyOgorCQkJanNvbl90YWJsZV9wbGFu X3NpbXBsZSBJTk5FUl9QIGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VK c29uVGFibGVKb2luZWRQbGFuKEpTVFBKX0lOTkVSLCAkMSwgJDMsIEAxKTsgfQorCQk7CisKK2pz b25fdGFibGVfcGxhbl9wYXJlbnRfY2hpbGQ6CisJCQlqc29uX3RhYmxlX3BsYW5fb3V0ZXIKKwkJ CXwganNvbl90YWJsZV9wbGFuX2lubmVyCisJCTsKKworanNvbl90YWJsZV9wbGFuX3VuaW9uOgor CQkJanNvbl90YWJsZV9wbGFuX3ByaW1hcnkgVU5JT04ganNvbl90YWJsZV9wbGFuX3ByaW1hcnkK KwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUEpfVU5JT04sICQxLCAkMywg QDEpOyB9CisJCQl8IGpzb25fdGFibGVfcGxhbl91bmlvbiBVTklPTiBqc29uX3RhYmxlX3BsYW5f cHJpbWFyeQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQSl9VTklPTiwg JDEsICQzLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fY3Jvc3M6CisJCQlqc29uX3Rh YmxlX3BsYW5fcHJpbWFyeSBDUk9TUyBqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQg PSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQSl9DUk9TUywgJDEsICQzLCBAMSk7IH0KKwkJ CXwganNvbl90YWJsZV9wbGFuX2Nyb3NzIENST1NTIGpzb25fdGFibGVfcGxhbl9wcmltYXJ5CisJ CQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpTVFBKX0NST1NTLCAkMSwgJDMsIEAx KTsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9zaWJsaW5nOgorCQkJanNvbl90YWJsZV9wbGFu X3VuaW9uCisJCQl8IGpzb25fdGFibGVfcGxhbl9jcm9zcworCQk7CisKK2pzb25fdGFibGVfZGVm YXVsdF9wbGFuX2Nob2ljZXM6CisJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRl cgkJCXsgJCQgPSAkMSB8IEpTVFBKX1VOSU9OOyB9CisJCQl8IGpzb25fdGFibGVfZGVmYXVsdF9w bGFuX3VuaW9uX2Nyb3NzCQl7ICQkID0gJDEgfCBKU1RQSl9PVVRFUjsgfQorCQkJfCBqc29uX3Rh YmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlciAnLCcKKwkJCSAganNvbl90YWJsZV9kZWZhdWx0 X3BsYW5fdW5pb25fY3Jvc3MJCXsgJCQgPSAkMSB8ICQzOyB9CisJCQl8IGpzb25fdGFibGVfZGVm YXVsdF9wbGFuX3VuaW9uX2Nyb3NzICcsJworCQkJICBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9p bm5lcl9vdXRlcgkJeyAkJCA9ICQxIHwgJDM7IH0KKwkJOworCitqc29uX3RhYmxlX2RlZmF1bHRf cGxhbl9pbm5lcl9vdXRlcjoKKwkJCUlOTkVSX1AJCQkJCQkJCQkJeyAkJCA9IEpTVFBKX0lOTkVS OyB9CisJCQl8IE9VVEVSX1AJCQkJCQkJCQl7ICQkID0gSlNUUEpfT1VURVI7IH0KKwkJOworCitq c29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zczoKKwkJCVVOSU9OCQkJCQkJCQkJCXsg JCQgPSBKU1RQSl9VTklPTjsgfQorCQkJfCBDUk9TUwkJCQkJCQkJCQl7ICQkID0gSlNUUEpfQ1JP U1M7IH0KKwkJOworCiBqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0OgogCQkJUkVUVVJOSU5HIFR5 cGVuYW1lIGpzb25fZm9ybWF0X2NsYXVzZV9vcHQKIAkJCQl7CkBAIC0xNzQ5Miw2ICsxNzk1MCw3 IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgTU9WRQogCQkJfCBOQU1FX1AKIAkJCXwgTkFN RVMKKwkJCXwgTkVTVEVECiAJCQl8IE5FVwogCQkJfCBORVhUCiAJCQl8IE5GQwpAQCAtMTc1MjYs NiArMTc5ODUsOCBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgogCQkJfCBQ QVNTSU5HCiAJCQl8IFBBU1NXT1JECisJCQl8IFBBVEgKKwkJCXwgUExBTgogCQkJfCBQTEFOUwog CQkJfCBQT0xJQ1kKIAkJCXwgUFJFQ0VESU5HCkBAIC0xNzY5MCw2ICsxODE1MSw3IEBAIGNvbF9u YW1lX2tleXdvcmQ6CiAJCQl8IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNP Tl9TRVJJQUxJWkUKKwkJCXwgSlNPTl9UQUJMRQogCQkJfCBKU09OX1ZBTFVFCiAJCQl8IExFQVNU CiAJCQl8IE5BVElPTkFMCkBAIC0xODA1OCw2ICsxODUyMCw3IEBAIGJhcmVfbGFiZWxfa2V5d29y ZDoKIAkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBKU09OX1NFUklBTEla RQorCQkJfCBKU09OX1RBQkxFCiAJCQl8IEpTT05fVkFMVUUKIAkJCXwgS0VFUAogCQkJfCBLRVkK QEAgLTE4MDk3LDYgKzE4NTYwLDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBOQVRJT05B TAogCQkJfCBOQVRVUkFMCiAJCQl8IE5DSEFSCisJCQl8IE5FU1RFRAogCQkJfCBORVcKIAkJCXwg TkVYVAogCQkJfCBORkMKQEAgLTE4MTQxLDcgKzE4NjA1LDkgQEAgYmFyZV9sYWJlbF9rZXl3b3Jk OgogCQkJfCBQQVJUSVRJT04KIAkJCXwgUEFTU0lORwogCQkJfCBQQVNTV09SRAorCQkJfCBQQVRI CiAJCQl8IFBMQUNJTkcKKwkJCXwgUExBTgogCQkJfCBQTEFOUwogCQkJfCBQT0xJQ1kKIAkJCXwg UE9TSVRJT04KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZCBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZAppbmRleCA5NDUxN2E3ZjdkLi4wZjBlNGFjN2Nh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkCkBAIC0xMCw2ICsxMCw3IEBAIGJhY2tlbmRfc291cmNl cyArPSBmaWxlcygKICAgJ3BhcnNlX2Vuci5jJywKICAgJ3BhcnNlX2V4cHIuYycsCiAgICdwYXJz ZV9mdW5jLmMnLAorICAncGFyc2VfanNvbnRhYmxlLmMnLAogICAncGFyc2VfbWVyZ2UuYycsCiAg ICdwYXJzZV9ub2RlLmMnLAogICAncGFyc2Vfb3Blci5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1 c2UuYwppbmRleCAzMzRiOWI0MmJkLi5hZmZkODEyNjE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Ns YXVzZS5jCkBAIC02OTcsNyArNjk3LDExIEBAIHRyYW5zZm9ybVJhbmdlVGFibGVGdW5jKFBhcnNl U3RhdGUgKnBzdGF0ZSwgUmFuZ2VUYWJsZUZ1bmMgKnJ0ZikKIAljaGFyCSAgKipuYW1lczsKIAlp bnQJCQljb2xubzsKIAotCS8qIEN1cnJlbnRseSBvbmx5IFhNTFRBQkxFIGlzIHN1cHBvcnRlZCAq LworCS8qCisJICogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBYTUxUQUJMRSBoZXJlLiAgU2Vl IHRyYW5zZm9ybUpzb25UYWJsZSgpIGZvcgorCSAqIEpTT05fVEFCTEUgc3VwcG9ydC4KKwkgKi8K Kwl0Zi0+ZnVuY3R5cGUgPSBURlRfWE1MVEFCTEU7CiAJY29uc3RydWN0TmFtZSA9ICJYTUxUQUJM RSI7CiAJZG9jVHlwZSA9IFhNTE9JRDsKIApAQCAtMTEwNCwxMyArMTEwOCwxNyBAQCB0cmFuc2Zv cm1Gcm9tQ2xhdXNlSXRlbShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKm4sCiAJCXJ0ci0+cnRp bmRleCA9IG5zaXRlbS0+cF9ydGluZGV4OwogCQlyZXR1cm4gKE5vZGUgKikgcnRyOwogCX0KLQll bHNlIGlmIChJc0EobiwgUmFuZ2VUYWJsZUZ1bmMpKQorCWVsc2UgaWYgKElzQShuLCBSYW5nZVRh YmxlRnVuYykgfHwgSXNBKG4sIEpzb25UYWJsZSkpCiAJewogCQkvKiB0YWJsZSBmdW5jdGlvbiBp cyBsaWtlIGEgcGxhaW4gcmVsYXRpb24gKi8KIAkJUmFuZ2VUYmxSZWYgKnJ0cjsKIAkJUGFyc2VO YW1lc3BhY2VJdGVtICpuc2l0ZW07CiAKLQkJbnNpdGVtID0gdHJhbnNmb3JtUmFuZ2VUYWJsZUZ1 bmMocHN0YXRlLCAoUmFuZ2VUYWJsZUZ1bmMgKikgbik7CisJCWlmIChJc0EobiwgUmFuZ2VUYWJs ZUZ1bmMpKQorCQkJbnNpdGVtID0gdHJhbnNmb3JtUmFuZ2VUYWJsZUZ1bmMocHN0YXRlLCAoUmFu Z2VUYWJsZUZ1bmMgKikgbik7CisJCWVsc2UKKwkJCW5zaXRlbSA9IHRyYW5zZm9ybUpzb25UYWJs ZShwc3RhdGUsIChKc29uVGFibGUgKikgbik7CisKIAkJKnRvcF9uc2l0ZW0gPSBuc2l0ZW07CiAJ CSpuYW1lc3BhY2UgPSBsaXN0X21ha2UxKG5zaXRlbSk7CiAJCXJ0ciA9IG1ha2VOb2RlKFJhbmdl VGJsUmVmKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDIxOTc5ZmQ2NGYuLmRlMDVmYTVl NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtNDM0Miw2ICs0MzQyLDE5IEBAIHRyYW5z Zm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykK IAkJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9OVUxMLAogCQkJCQkJCQkJCQkJCSBqc2V4cHIt PnJldHVybmluZyk7CiAJCQlicmVhazsKKworCQljYXNlIEpTT05fVEFCTEVfT1A6CisJCQlmdW5j X25hbWUgPSAiSlNPTl9UQUJMRSI7CisKKwkJCWpzZXhwciA9IHRyYW5zZm9ybUpzb25FeHByQ29t bW9uKHBzdGF0ZSwgZnVuYywgZnVuY19uYW1lKTsKKwkJCWpzZXhwci0+cmV0dXJuaW5nID0gbWFr ZU5vZGUoSnNvblJldHVybmluZyk7CisJCQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0ID0gbWFr ZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZBVUxULCAtMSk7CisJCQlq c2V4cHItPnJldHVybmluZy0+dHlwaWQgPSBleHByVHlwZShqc2V4cHItPmZvcm1hdHRlZF9leHBy KTsKKwkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsKKwkJCWpzZXhwci0+b25fZXJy b3IgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5vbl9lcnJvciwKKwkJCQkJ CQkJCQkJCQkgSlNPTl9CRUhBVklPUl9FTVBUWSwKKwkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1 cm5pbmcpOworCQkJYnJlYWs7CiAJfQogCiAJQXNzZXJ0KGpzZXhwciAhPSBOVUxMICYmIGpzZXhw ci0+Zm9ybWF0dGVkX2V4cHIgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfanNvbnRhYmxlLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRhYmxl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDVmMDc0YTFiMgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYwpAQCAt MCwwICsxLDc1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGFyc2VfanNvbnRhYmxl LmMKKyAqCSAgcGFyc2luZyBvZiBKU09OX1RBQkxFCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfanNvbnRhYmxlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jbGF1c2UuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgorI2luY2x1ZGUg InBhcnNlci9wYXJzZV9leHByLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgi CisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3R5cGUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKworLyogQ29udGV4dCBmb3IgSlNPTl9UQUJMRSB0cmFuc2Zvcm1hdGlvbiAqLwordHlwZWRl ZiBzdHJ1Y3QgSnNvblRhYmxlUGFyc2VDb250ZXh0Cit7CisJUGFyc2VTdGF0ZSAqcHN0YXRlOwkJ CS8qIHBhcnNpbmcgc3RhdGUgKi8KKwlKc29uVGFibGUgICp0YWJsZTsJCQkvKiB1bnRyYW5zZm9y bWVkIG5vZGUgKi8KKwlUYWJsZUZ1bmMgICp0YWJsZWZ1bmM7CQkvKiB0cmFuc2Zvcm1lZCBub2Rl CSovCisJTGlzdAkgICAqcGF0aE5hbWVzOwkJLyogbGlzdCBvZiBhbGwgcGF0aCBhbmQgY29sdW1u cyBuYW1lcyAqLworCWludAkJCXBhdGhOYW1lSWQ7CQkvKiBwYXRoIG5hbWUgaWQgY291bnRlciAq LworCU9pZAkJCWNvbnRleHRJdGVtVHlwaWQ7CS8qIHR5cGUgb2lkIG9mIGNvbnRleHQgaXRlbSAo anNvbi9qc29uYikgKi8KK30JCQlKc29uVGFibGVQYXJzZUNvbnRleHQ7CisKK3N0YXRpYyBKc29u VGFibGVQYXJlbnQgKnRyYW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VDb250 ZXh0ICogY3h0LAorCQkJCQkJCQkJCQkJICBKc29uVGFibGVQbGFuICpwbGFuLAorCQkJCQkJCQkJ CQkJICBMaXN0ICpjb2x1bW5zLAorCQkJCQkJCQkJCQkJICBjaGFyICpwYXRoU3BlYywKKwkJCQkJ CQkJCQkJCSAgY2hhciAqKnBhdGhOYW1lLAorCQkJCQkJCQkJCQkJICBpbnQgbG9jYXRpb24pOwor CitzdGF0aWMgTm9kZSAqCittYWtlU3RyaW5nQ29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24p Cit7CisJQV9Db25zdCAgICAqbiA9IG1ha2VOb2RlKEFfQ29uc3QpOworCisJbi0+dmFsLm5vZGUu dHlwZSA9IFRfU3RyaW5nOworCW4tPnZhbC5zdmFsLnN2YWwgPSBzdHI7CisJbi0+bG9jYXRpb24g PSBsb2NhdGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBuOworfQorCisvKgorICogVHJhbnNmb3Jt IEpTT05fVEFCTEUgY29sdW1uCisgKiAgIC0gcmVndWxhciBjb2x1bW4gaW50byBKU09OX1ZBTFVF KCkKKyAqICAgLSBGT1JNQVQgSlNPTiBjb2x1bW4gaW50byBKU09OX1FVRVJZKCkKKyAqICAgLSBF WElTVFMgY29sdW1uIGludG8gSlNPTl9FWElTVFMoKQorICovCitzdGF0aWMgTm9kZSAqCit0cmFu c2Zvcm1Kc29uVGFibGVDb2x1bW4oSnNvblRhYmxlQ29sdW1uICpqdGMsIE5vZGUgKmNvbnRleHRJ dGVtRXhwciwKKwkJCQkJCSBMaXN0ICpwYXNzaW5nQXJncywgYm9vbCBlcnJvck9uRXJyb3IpCit7 CisJSnNvbkZ1bmNFeHByICpqZmV4cHIgPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOworCUpzb25D b21tb24gKmNvbW1vbiA9IG1ha2VOb2RlKEpzb25Db21tb24pOworCUpzb25PdXRwdXQgKm91dHB1 dCA9IG1ha2VOb2RlKEpzb25PdXRwdXQpOworCWNoYXIJICAgKnBhdGhzcGVjOworCUpzb25Gb3Jt YXQgKmRlZmF1bHRfZm9ybWF0OworCisJamZleHByLT5vcCA9CisJCWp0Yy0+Y29sdHlwZSA9PSBK VENfUkVHVUxBUiA/IEpTT05fVkFMVUVfT1AgOgorCQlqdGMtPmNvbHR5cGUgPT0gSlRDX0VYSVNU UyA/IEpTT05fRVhJU1RTX09QIDogSlNPTl9RVUVSWV9PUDsKKwlqZmV4cHItPmNvbW1vbiA9IGNv bW1vbjsKKwlqZmV4cHItPm91dHB1dCA9IG91dHB1dDsKKwlqZmV4cHItPm9uX2VtcHR5ID0ganRj LT5vbl9lbXB0eTsKKwlqZmV4cHItPm9uX2Vycm9yID0ganRjLT5vbl9lcnJvcjsKKwlpZiAoIWpm ZXhwci0+b25fZXJyb3IgJiYgZXJyb3JPbkVycm9yKQorCQlqZmV4cHItPm9uX2Vycm9yID0gbWFr ZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0VSUk9SLCBOVUxMLCAtMSk7CisJamZleHByLT5x dW90ZXMgPSBqdGMtPnF1b3RlczsKKwlqZmV4cHItPndyYXBwZXIgPSBqdGMtPndyYXBwZXI7CisJ amZleHByLT5sb2NhdGlvbiA9IGp0Yy0+bG9jYXRpb247CisKKwlvdXRwdXQtPnR5cGVOYW1lID0g anRjLT50eXBlTmFtZTsKKwlvdXRwdXQtPnJldHVybmluZyA9IG1ha2VOb2RlKEpzb25SZXR1cm5p bmcpOworCW91dHB1dC0+cmV0dXJuaW5nLT5mb3JtYXQgPSBqdGMtPmZvcm1hdDsKKworCWRlZmF1 bHRfZm9ybWF0ID0gbWFrZUpzb25Gb3JtYXQoSlNfRk9STUFUX0RFRkFVTFQsIEpTX0VOQ19ERUZB VUxULCAtMSk7CisKKwljb21tb24tPnBhdGhuYW1lID0gTlVMTDsKKwkvKiBmb3JtYXR0ZWRfZXhw ciB3aWxsIGJlIHNldCBsYXRlciBpbiB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKCkuICovCisJY29t bW9uLT5leHByID0gbWFrZUpzb25WYWx1ZUV4cHIoKEV4cHIgKikgY29udGV4dEl0ZW1FeHByLCBO VUxMLAorCQkJCQkJCQkJIGRlZmF1bHRfZm9ybWF0KTsKKwljb21tb24tPnBhc3NpbmcgPSBwYXNz aW5nQXJnczsKKworCWlmIChqdGMtPnBhdGhzcGVjKQorCQlwYXRoc3BlYyA9IGp0Yy0+cGF0aHNw ZWM7CisJZWxzZQorCXsKKwkJLyogQ29uc3RydWN0IGRlZmF1bHQgcGF0aCBhcyAnJC4iY29sdW1u X25hbWUiJyAqLworCQlTdHJpbmdJbmZvRGF0YSBwYXRoOworCisJCWluaXRTdHJpbmdJbmZvKCZw YXRoKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwYXRoLCAiJC4iKTsKKwkJZXNjYXBl X2pzb24oJnBhdGgsIGp0Yy0+bmFtZSk7CisKKwkJcGF0aHNwZWMgPSBwYXRoLmRhdGE7CisJfQor CisJY29tbW9uLT5wYXRoc3BlYyA9IG1ha2VTdHJpbmdDb25zdChwYXRoc3BlYywgLTEpOworCisJ cmV0dXJuIChOb2RlICopIGpmZXhwcjsKK30KKworc3RhdGljIGJvb2wKK2lzSnNvblRhYmxlUGF0 aE5hbWVEdXBsaWNhdGUoSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LCBjb25zdCBjaGFyICpw YXRobmFtZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGN4dC0+cGF0aE5h bWVzKQorCXsKKwkJaWYgKCFzdHJjbXAocGF0aG5hbWUsIChjb25zdCBjaGFyICopIGxmaXJzdChs YykpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBSZWdp c3RlciB0aGUgY29sdW1uIG5hbWUgaW4gdGhlIHBhdGggbmFtZSBsaXN0LiAqLworc3RhdGljIHZv aWQKK3JlZ2lzdGVySnNvblRhYmxlQ29sdW1uKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwg Y2hhciAqY29sbmFtZSkKK3sKKwlpZiAoaXNKc29uVGFibGVQYXRoTmFtZUR1cGxpY2F0ZShjeHQs IGNvbG5hbWUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQTElD QVRFX0FMSUFTKSwKKwkJCQkgZXJybXNnKCJkdXBsaWNhdGUgSlNPTl9UQUJMRSBjb2x1bW4gbmFt ZTogJXMiLCBjb2xuYW1lKSwKKwkJCQkgZXJyaGludCgiSlNPTl9UQUJMRSBjb2x1bW4gbmFtZXMg bXVzdCBiZSBkaXN0aW5jdCBmcm9tIG9uZSBhbm90aGVyLiIpKSk7CisKKwljeHQtPnBhdGhOYW1l cyA9IGxhcHBlbmQoY3h0LT5wYXRoTmFtZXMsIGNvbG5hbWUpOworfQorCisvKiBSZWN1cnNpdmVs eSByZWdpc3RlciBhbGwgbmVzdGVkIGNvbHVtbiBuYW1lcyBpbiB0aGUgcGF0aCBuYW1lIGxpc3Qu ICovCitzdGF0aWMgdm9pZAorcmVnaXN0ZXJBbGxKc29uVGFibGVDb2x1bW5zKEpzb25UYWJsZVBh cnNlQ29udGV4dCAqIGN4dCwgTGlzdCAqY29sdW1ucykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwor CWZvcmVhY2gobGMsIGNvbHVtbnMpCisJeworCQlKc29uVGFibGVDb2x1bW4gKmp0YyA9IGNhc3RO b2RlKEpzb25UYWJsZUNvbHVtbiwgbGZpcnN0KGxjKSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9 PSBKVENfTkVTVEVEKQorCQl7CisJCQlpZiAoanRjLT5wYXRobmFtZSkKKwkJCQlyZWdpc3Rlckpz b25UYWJsZUNvbHVtbihjeHQsIGp0Yy0+cGF0aG5hbWUpOworCisJCQlyZWdpc3RlckFsbEpzb25U YWJsZUNvbHVtbnMoY3h0LCBqdGMtPmNvbHVtbnMpOworCQl9CisJCWVsc2UKKwkJeworCQkJcmVn aXN0ZXJKc29uVGFibGVDb2x1bW4oY3h0LCBqdGMtPm5hbWUpOworCQl9CisJfQorfQorCisvKiBH ZW5lcmF0ZSBhIG5ldyB1bmlxdWUgSlNPTl9UQUJMRSBwYXRoIG5hbWUuICovCitzdGF0aWMgY2hh ciAqCitnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4 dCkKK3sKKwljaGFyCQluYW1lYnVmWzMyXTsKKwljaGFyCSAgICpuYW1lID0gbmFtZWJ1ZjsKKwor CWRvCisJeworCQlzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICJqc29uX3RhYmxl X3BhdGhfJWQiLAorCQkJCSArK2N4dC0+cGF0aE5hbWVJZCk7CisJfSB3aGlsZSAoaXNKc29uVGFi bGVQYXRoTmFtZUR1cGxpY2F0ZShjeHQsIG5hbWUpKTsKKworCW5hbWUgPSBwc3RyZHVwKG5hbWUp OworCWN4dC0+cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhOYW1lcywgbmFtZSk7CisKKwly ZXR1cm4gbmFtZTsKK30KKworLyogQ29sbGVjdCBzaWJsaW5nIHBhdGggbmFtZXMgZnJvbSBwbGFu IHRvIHRoZSBzcGVjaWZpZWQgbGlzdC4gKi8KK3N0YXRpYyB2b2lkCitjb2xsZWN0U2libGluZ1Bh dGhzSW5Kc29uVGFibGVQbGFuKEpzb25UYWJsZVBsYW4gKnBsYW4sIExpc3QgKipwYXRocykKK3sK KwlpZiAocGxhbi0+cGxhbl90eXBlID09IEpTVFBfU0lNUExFKQorCQkqcGF0aHMgPSBsYXBwZW5k KCpwYXRocywgcGxhbi0+cGF0aG5hbWUpOworCWVsc2UgaWYgKHBsYW4tPnBsYW5fdHlwZSA9PSBK U1RQX0pPSU5FRCkKKwl7CisJCWlmIChwbGFuLT5qb2luX3R5cGUgPT0gSlNUUEpfSU5ORVIgfHwK KwkJCXBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9PVVRFUikKKwkJeworCQkJQXNzZXJ0KHBsYW4t PnBsYW4xLT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1QTEUpOworCQkJKnBhdGhzID0gbGFwcGVuZCgq cGF0aHMsIHBsYW4tPnBsYW4xLT5wYXRobmFtZSk7CisJCX0KKwkJZWxzZSBpZiAocGxhbi0+am9p bl90eXBlID09IEpTVFBKX0NST1NTIHx8CisJCQkJIHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9V TklPTikKKwkJeworCQkJY29sbGVjdFNpYmxpbmdQYXRoc0luSnNvblRhYmxlUGxhbihwbGFuLT5w bGFuMSwgcGF0aHMpOworCQkJY29sbGVjdFNpYmxpbmdQYXRoc0luSnNvblRhYmxlUGxhbihwbGFu LT5wbGFuMiwgcGF0aHMpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpT T05fVEFCTEUgam9pbiB0eXBlICVkIiwKKwkJCQkgcGxhbi0+am9pbl90eXBlKTsKKwl9Cit9CisK Ky8qCisgKiBWYWxpZGF0ZSBjaGlsZCBKU09OX1RBQkxFIHBsYW4gYnkgY2hlY2tpbmcgdGhhdDoK KyAqICAtIGFsbCBuZXN0ZWQgY29sdW1ucyBoYXZlIHBhdGggbmFtZXMgc3BlY2lmaWVkCisgKiAg LSBhbGwgbmVzdGVkIGNvbHVtbnMgaGF2ZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gdGhlIHNpYmxp bmcgcGxhbgorICogIC0gcGxhbiBkb2VzIG5vdCBjb250YWluIGR1cGxpY2F0ZSBvciBleHRyYSBu b2RlcworICovCitzdGF0aWMgdm9pZAordmFsaWRhdGVKc29uVGFibGVDaGlsZFBsYW4oUGFyc2VT dGF0ZSAqcHN0YXRlLCBKc29uVGFibGVQbGFuICpwbGFuLAorCQkJCQkJICAgTGlzdCAqY29sdW1u cykKK3sKKwlMaXN0Q2VsbCAgICpsYzE7CisJTGlzdAkgICAqc2libGluZ3MgPSBOSUw7CisJaW50 CQkJbmNoaWxkcmVuID0gMDsKKworCWlmIChwbGFuKQorCQljb2xsZWN0U2libGluZ1BhdGhzSW5K c29uVGFibGVQbGFuKHBsYW4sICZzaWJsaW5ncyk7CisKKwlmb3JlYWNoKGxjMSwgY29sdW1ucykK Kwl7CisJCUpzb25UYWJsZUNvbHVtbiAqanRjID0gY2FzdE5vZGUoSnNvblRhYmxlQ29sdW1uLCBs Zmlyc3QobGMxKSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEKQorCQl7CisJ CQlMaXN0Q2VsbCAgICpsYzI7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQlpZiAoIWp0 Yy0+cGF0aG5hbWUpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coIm5lc3RlZCBKU09OX1RBQkxFIGNvbHVtbnMg bXVzdCBjb250YWluIGFuIGV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgYW4g ZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihwc3RhdGUsIGp0Yy0+bG9jYXRpb24pKSk7CisKKwkJCS8qIGZpbmQgbmVzdGVkIHBhdGggbmFt ZSBpbiB0aGUgbGlzdCBvZiBzaWJsaW5nIHBhdGggbmFtZXMgKi8KKwkJCWZvcmVhY2gobGMyLCBz aWJsaW5ncykKKwkJCXsKKwkJCQlpZiAoKGZvdW5kID0gIXN0cmNtcChqdGMtPnBhdGhuYW1lLCBs Zmlyc3QobGMyKSkpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCFmb3VuZCkKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJ CQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4iKSwKKwkJCQkJCSBlcnJkZXRhaWwo IlBsYW4gbm9kZSBmb3IgbmVzdGVkIHBhdGggJXMgd2FzIG5vdCBmb3VuZCBpbiBwbGFuLiIsIGp0 Yy0+cGF0aG5hbWUpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGp0Yy0+bG9j YXRpb24pKSk7CisKKwkJCW5jaGlsZHJlbisrOworCQl9CisJfQorCisJaWYgKGxpc3RfbGVuZ3Ro KHNpYmxpbmdzKSA+IG5jaGlsZHJlbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBs YW4iKSwKKwkJCQkgZXJyZGV0YWlsKCJQbGFuIG5vZGUgY29udGFpbnMgc29tZSBleHRyYSBvciBk dXBsaWNhdGUgc2libGluZyBub2Rlcy4iKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0 ZSwgcGxhbiA/IHBsYW4tPmxvY2F0aW9uIDogLTEpKSk7Cit9CisKK3N0YXRpYyBKc29uVGFibGVD b2x1bW4gKgorZmluZE5lc3RlZEpzb25UYWJsZUNvbHVtbihMaXN0ICpjb2x1bW5zLCBjb25zdCBj aGFyICpwYXRobmFtZSkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGNvbHVt bnMpCisJeworCQlKc29uVGFibGVDb2x1bW4gKmp0YyA9IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVt biwgbGZpcnN0KGxjKSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENfTkVTVEVEICYmCisJ CQlqdGMtPnBhdGhuYW1lICYmCisJCQkhc3RyY21wKGp0Yy0+cGF0aG5hbWUsIHBhdGhuYW1lKSkK KwkJCXJldHVybiBqdGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBOb2RlICoK K3RyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNvbHVtbihKc29uVGFibGVQYXJzZUNvbnRleHQgKiBj eHQsIEpzb25UYWJsZUNvbHVtbiAqanRjLAorCQkJCQkJCSAgIEpzb25UYWJsZVBsYW4gKnBsYW4p Cit7CisJSnNvblRhYmxlUGFyZW50ICpub2RlOworCWNoYXIJICAgKnBhdGhuYW1lID0ganRjLT5w YXRobmFtZTsKKworCW5vZGUgPSB0cmFuc2Zvcm1Kc29uVGFibGVDb2x1bW5zKGN4dCwgcGxhbiwg anRjLT5jb2x1bW5zLCBqdGMtPnBhdGhzcGVjLAorCQkJCQkJCQkJICZwYXRobmFtZSwganRjLT5s b2NhdGlvbik7CisKKwlyZXR1cm4gKE5vZGUgKikgbm9kZTsKK30KKworc3RhdGljIE5vZGUgKgor bWFrZUpzb25UYWJsZVNpYmxpbmdKb2luKGJvb2wgY3Jvc3MsIE5vZGUgKmxub2RlLCBOb2RlICpy bm9kZSkKK3sKKwlKc29uVGFibGVTaWJsaW5nICpqb2luID0gbWFrZU5vZGUoSnNvblRhYmxlU2li bGluZyk7CisKKwlqb2luLT5sYXJnID0gbG5vZGU7CisJam9pbi0+cmFyZyA9IHJub2RlOworCWpv aW4tPmNyb3NzID0gY3Jvc3M7CisKKwlyZXR1cm4gKE5vZGUgKikgam9pbjsKK30KKworLyoKKyAq IFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBjaGlsZCBKU09OX1RBQkxFIHBsYW4uCisgKgorICogRGVm YXVsdCBwbGFuIGlzIHRyYW5zZm9ybWVkIGludG8gYSBjcm9zcy91bmlvbiBqb2luIG9mIGl0cyBu ZXN0ZWQgY29sdW1ucy4KKyAqIFNpbXBsZSBhbmQgb3V0ZXIvaW5uZXIgcGxhbnMgYXJlIHRyYW5z Zm9ybWVkIGludG8gYSBKc29uVGFibGVQYXJlbnQgYnkKKyAqIGZpbmRpbmcgYW5kIHRyYW5zZm9y bWluZyBjb3JyZXNwb25kaW5nIG5lc3RlZCBjb2x1bW4uCisgKiBTaWJsaW5nIHBsYW5zIGFyZSBy ZWN1cnNpdmVseSB0cmFuc2Zvcm1lZCBpbnRvIGEgSnNvblRhYmxlU2libGluZy4KKyAqLworc3Rh dGljIE5vZGUgKgordHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFuKEpzb25UYWJsZVBhcnNlQ29u dGV4dCAqIGN4dCwgSnNvblRhYmxlUGxhbiAqcGxhbiwKKwkJCQkJCQlMaXN0ICpjb2x1bW5zKQor eworCUpzb25UYWJsZUNvbHVtbiAqanRjID0gTlVMTDsKKworCWlmICghcGxhbiB8fCBwbGFuLT5w bGFuX3R5cGUgPT0gSlNUUF9ERUZBVUxUKQorCXsKKwkJLyogdW5zcGVjaWZpZWQgb3IgZGVmYXVs dCBwbGFuICovCisJCU5vZGUJICAgKnJlcyA9IE5VTEw7CisJCUxpc3RDZWxsICAgKmxjOworCQli b29sCQljcm9zcyA9IHBsYW4gJiYgKHBsYW4tPmpvaW5fdHlwZSAmIEpTVFBKX0NST1NTKTsKKwor CQkvKiB0cmFuc2Zvcm0gYWxsIG5lc3RlZCBjb2x1bW5zIGludG8gY3Jvc3MvdW5pb24gam9pbiAq LworCQlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCQl7CisJCQlKc29uVGFibGVDb2x1bW4gKmNvbCA9 IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVtbiwgbGZpcnN0KGxjKSk7CisJCQlOb2RlCSAgICpub2Rl OworCisJCQlpZiAoY29sLT5jb2x0eXBlICE9IEpUQ19ORVNURUQpCisJCQkJY29udGludWU7CisK KwkJCW5vZGUgPSB0cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVDb2x1bW4oY3h0LCBjb2wsIHBsYW4p OworCisJCQkvKiBqb2luIHRyYW5zZm9ybWVkIG5vZGUgd2l0aCBwcmV2aW91cyBzaWJsaW5nIG5v ZGVzICovCisJCQlyZXMgPSByZXMgPyBtYWtlSnNvblRhYmxlU2libGluZ0pvaW4oY3Jvc3MsIHJl cywgbm9kZSkgOiBub2RlOworCQl9CisKKwkJcmV0dXJuIHJlczsKKwl9CisJZWxzZSBpZiAocGxh bi0+cGxhbl90eXBlID09IEpTVFBfU0lNUExFKQorCXsKKwkJanRjID0gZmluZE5lc3RlZEpzb25U YWJsZUNvbHVtbihjb2x1bW5zLCBwbGFuLT5wYXRobmFtZSk7CisJfQorCWVsc2UgaWYgKHBsYW4t PnBsYW5fdHlwZSA9PSBKU1RQX0pPSU5FRCkKKwl7CisJCWlmIChwbGFuLT5qb2luX3R5cGUgPT0g SlNUUEpfSU5ORVIgfHwKKwkJCXBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9PVVRFUikKKwkJewor CQkJQXNzZXJ0KHBsYW4tPnBsYW4xLT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1QTEUpOworCQkJanRj ID0gZmluZE5lc3RlZEpzb25UYWJsZUNvbHVtbihjb2x1bW5zLCBwbGFuLT5wbGFuMS0+cGF0aG5h bWUpOworCQl9CisJCWVsc2UKKwkJeworCQkJTm9kZQkgICAqbm9kZTEgPSB0cmFuc2Zvcm1Kc29u VGFibGVDaGlsZFBsYW4oY3h0LCBwbGFuLT5wbGFuMSwKKwkJCQkJCQkJCQkJCQkJCWNvbHVtbnMp OworCQkJTm9kZQkgICAqbm9kZTIgPSB0cmFuc2Zvcm1Kc29uVGFibGVDaGlsZFBsYW4oY3h0LCBw bGFuLT5wbGFuMiwKKwkJCQkJCQkJCQkJCQkJCWNvbHVtbnMpOworCisJCQlyZXR1cm4gbWFrZUpz b25UYWJsZVNpYmxpbmdKb2luKHBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQSl9DUk9TUywKKwkJCQkJ CQkJCQkJbm9kZTEsIG5vZGUyKTsKKwkJfQorCX0KKwllbHNlCisJCWVsb2coRVJST1IsICJpbnZh bGlkIEpTT05fVEFCTEUgcGxhbiB0eXBlICVkIiwgcGxhbi0+cGxhbl90eXBlKTsKKworCWlmICgh anRjKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9S KSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiIpLAorCQkJCSBlcnJkZXRh aWwoIlBhdGggbmFtZSB3YXMgJXMgbm90IGZvdW5kIGluIG5lc3RlZCBjb2x1bW5zIGxpc3QuIiwK KwkJCQkJCSAgIHBsYW4tPnBhdGhuYW1lKSwKKwkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+ cHN0YXRlLCBwbGFuLT5sb2NhdGlvbikpKTsKKworCXJldHVybiB0cmFuc2Zvcm1OZXN0ZWRKc29u VGFibGVDb2x1bW4oY3h0LCBqdGMsIHBsYW4pOworfQorCisvKiBDaGVjayB3aGV0aGVyIHR5cGUg aXMganNvbi9qc29uYiwgYXJyYXksIG9yIHJlY29yZC4gKi8KK3N0YXRpYyBib29sCit0eXBlSXND b21wb3NpdGUoT2lkIHR5cGlkKQoreworCWNoYXIJCXR5cHR5cGU7CisKKwlpZiAodHlwaWQgPT0g SlNPTk9JRCB8fAorCQl0eXBpZCA9PSBKU09OQk9JRCB8fAorCQl0eXBpZCA9PSBSRUNPUkRPSUQg fHwKKwkJdHlwZV9pc19hcnJheSh0eXBpZCkpCisJCXJldHVybiB0cnVlOworCisJdHlwdHlwZSA9 IGdldF90eXB0eXBlKHR5cGlkKTsKKworCWlmICh0eXB0eXBlID09IFRZUFRZUEVfQ09NUE9TSVRF KQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICh0eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQorCQly ZXR1cm4gdHlwZUlzQ29tcG9zaXRlKGdldEJhc2VUeXBlKHR5cGlkKSk7CisKKwlyZXR1cm4gZmFs c2U7Cit9CisKKy8qIEFwcGVuZCB0cmFuc2Zvcm1lZCBub24tbmVzdGVkIEpTT05fVEFCTEUgY29s dW1ucyB0byB0aGUgVGFibGVGdW5jIG5vZGUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRKc29uVGFi bGVDb2x1bW5zKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgTGlzdCAqY29sdW1ucykKK3sK KwlMaXN0Q2VsbCAgICpjb2w7CisJUGFyc2VTdGF0ZSAqcHN0YXRlID0gY3h0LT5wc3RhdGU7CisJ SnNvblRhYmxlICAqanQgPSBjeHQtPnRhYmxlOworCVRhYmxlRnVuYyAgKnRmID0gY3h0LT50YWJs ZWZ1bmM7CisJYm9vbAkJb3JkaW5hbGl0eV9mb3VuZCA9IGZhbHNlOworCWJvb2wJCWVycm9yT25F cnJvciA9IGp0LT5vbl9lcnJvciAmJgorCQlqdC0+b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVI QVZJT1JfRVJST1I7CisKKwlmb3JlYWNoKGNvbCwgY29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNv bHVtbiAqcmF3YyA9IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVtbiwgbGZpcnN0KGNvbCkpOworCQlP aWQJCQl0eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsKKwkJTm9kZQkgICAqY29sZXhwcjsKKworCQlp ZiAocmF3Yy0+bmFtZSkKKwkJeworCQkJLyogbWFrZSBzdXJlIGNvbHVtbiBuYW1lcyBhcmUgdW5p cXVlICovCisJCQlMaXN0Q2VsbCAgICpjb2xuYW1lOworCisJCQlmb3JlYWNoKGNvbG5hbWUsIHRm LT5jb2xuYW1lcykKKwkJCQlpZiAoIXN0cmNtcCgoY29uc3QgY2hhciAqKSBjb2xuYW1lLCByYXdj LT5uYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiY29sdW1uIG5hbWUgXCIlc1wiIGlzIG5vdCB1bmlx dWUiLAorCQkJCQkJCQlyYXdjLT5uYW1lKSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0 YXRlLCByYXdjLT5sb2NhdGlvbikpKTsKKworCQkJdGYtPmNvbG5hbWVzID0gbGFwcGVuZCh0Zi0+ Y29sbmFtZXMsCisJCQkJCQkJCSAgIG1ha2VTdHJpbmcocHN0cmR1cChyYXdjLT5uYW1lKSkpOwor CQl9CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHRoZSB0eXBlIGFuZCB0eXBtb2QgZm9yIHRoZSBu ZXcgY29sdW1uLiBGT1IgT1JESU5BTElUWQorCQkgKiBjb2x1bW5zIGFyZSBJTlRFR0VSIGJ5IHN0 YW5kYXJkOyB0aGUgb3RoZXJzIGFyZSB1c2VyLXNwZWNpZmllZC4KKwkJICovCisJCXN3aXRjaCAo cmF3Yy0+Y29sdHlwZSkKKwkJeworCQkJY2FzZSBKVENfRk9SX09SRElOQUxJVFk6CisJCQkJaWYg KG9yZGluYWxpdHlfZm91bmQpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCB1c2UgbW9yZSB0 aGFuIG9uZSBGT1IgT1JESU5BTElUWSBjb2x1bW4iKSwKKwkJCQkJCQkgcGFyc2VyX2VycnBvc2l0 aW9uKHBzdGF0ZSwgcmF3Yy0+bG9jYXRpb24pKSk7CisJCQkJb3JkaW5hbGl0eV9mb3VuZCA9IHRy dWU7CisJCQkJY29sZXhwciA9IE5VTEw7CisJCQkJdHlwaWQgPSBJTlQ0T0lEOworCQkJCXR5cG1v ZCA9IC0xOworCQkJCWJyZWFrOworCisJCQljYXNlIEpUQ19SRUdVTEFSOgorCQkJCXR5cGVuYW1l VHlwZUlkQW5kTW9kKHBzdGF0ZSwgcmF3Yy0+dHlwZU5hbWUsICZ0eXBpZCwgJnR5cG1vZCk7CisK KwkJCQkvKgorCQkJCSAqIFVzZSBpbXBsaWNpdCBGT1JNQVQgSlNPTiBmb3IgY29tcG9zaXRlIHR5 cGVzIChhcnJheXMgYW5kCisJCQkJICogcmVjb3JkcykuCisJCQkJICoKKwkJCQkgKiBGb3Igc2Nh bGFyIGNvbHVtbnMsIHJlcXVpcmUgYW4gZXhwbGljaXQgRk9STUFUIEpTT04gY2xhdXNlCisJCQkJ ICogdG8gZ2V0IHRoZSBzcGVjaWZpZWQgV1JBUFBFUiBhbmQgUVVPVEVTIGJlaGF2aW9yLgorCQkJ CSAqLworCQkJCWlmICh0eXBlSXNDb21wb3NpdGUodHlwaWQpKQorCQkJCQlyYXdjLT5jb2x0eXBl ID0gSlRDX0ZPUk1BVFRFRDsKKwkJCQllbHNlIGlmIChyYXdjLT53cmFwcGVyICE9IEpTV19OT05F KQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIFdJVEggV1JBUFBFUiBjbGF1c2UgZm9y IHNjYWxhciBjb2x1bW5zIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UiKSwK KwkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgcmF3Yy0+bG9jYXRpb24pKSk7CisJ CQkJZWxzZSBpZiAocmF3Yy0+cXVvdGVzICE9IEpTX1FVT1RFU19VTlNQRUMpCisJCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJ CSBlcnJtc2coImNhbm5vdCB1c2UgT01JVC9LRUVQIFFVT1RFUyBjbGF1c2UgZm9yIHNjYWxhciBj b2x1bW5zIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIEZPUk1BVCBjbGF1c2UiKSwKKwkJCQkJCQkg cGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgcmF3Yy0+bG9jYXRpb24pKSk7CisKKwkJCQkvKiBG QUxMVEhST1VHSCAqLworCQkJY2FzZSBKVENfRVhJU1RTOgorCQkJY2FzZSBKVENfRk9STUFUVEVE OgorCQkJCXsKKwkJCQkJTm9kZQkgICAqamU7CisJCQkJCUNhc2VUZXN0RXhwciAqcGFyYW0gPSBt YWtlTm9kZShDYXNlVGVzdEV4cHIpOworCisJCQkJCXBhcmFtLT5jb2xsYXRpb24gPSBJbnZhbGlk T2lkOworCQkJCQlwYXJhbS0+dHlwZUlkID0gY3h0LT5jb250ZXh0SXRlbVR5cGlkOworCQkJCQlw YXJhbS0+dHlwZU1vZCA9IC0xOworCisJCQkJCWplID0gdHJhbnNmb3JtSnNvblRhYmxlQ29sdW1u KHJhd2MsIChOb2RlICopIHBhcmFtLAorCQkJCQkJCQkJCQkJICBOSUwsIGVycm9yT25FcnJvcik7 CisKKwkJCQkJY29sZXhwciA9IHRyYW5zZm9ybUV4cHIocHN0YXRlLCBqZSwgRVhQUl9LSU5EX0ZS T01fRlVOQ1RJT04pOworCQkJCQlhc3NpZ25fZXhwcl9jb2xsYXRpb25zKHBzdGF0ZSwgY29sZXhw cik7CisKKwkJCQkJdHlwaWQgPSBleHByVHlwZShjb2xleHByKTsKKwkJCQkJdHlwbW9kID0gZXhw clR5cG1vZChjb2xleHByKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEpUQ19ORVNU RUQ6CisJCQkJY29udGludWU7CisKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVua25v d24gSlNPTl9UQUJMRSBjb2x1bW4gdHlwZTogJWQiLCByYXdjLT5jb2x0eXBlKTsKKwkJCQlicmVh azsKKwkJfQorCisJCXRmLT5jb2x0eXBlcyA9IGxhcHBlbmRfb2lkKHRmLT5jb2x0eXBlcywgdHlw aWQpOworCQl0Zi0+Y29sdHlwbW9kcyA9IGxhcHBlbmRfaW50KHRmLT5jb2x0eXBtb2RzLCB0eXBt b2QpOworCQl0Zi0+Y29sY29sbGF0aW9ucyA9IGxhcHBlbmRfb2lkKHRmLT5jb2xjb2xsYXRpb25z LCBnZXRfdHlwY29sbGF0aW9uKHR5cGlkKSk7CisJCXRmLT5jb2x2YWxleHBycyA9IGxhcHBlbmQo dGYtPmNvbHZhbGV4cHJzLCBjb2xleHByKTsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgdHJhbnNm b3JtZWQgSlNPTl9UQUJMRSBwYXJlbnQgcGxhbiBub2RlIGJ5IGFwcGVuZGluZyBhbGwgbm9uLW5l c3RlZAorICogY29sdW1ucyB0byB0aGUgVGFibGVGdW5jIG5vZGUgYW5kIHJlbWVtYmVyaW5nIHRo ZWlyIGluZGljZXMgaW4gdGhlCisgKiBjb2x2YWxleHBycyBsaXN0LgorICovCitzdGF0aWMgSnNv blRhYmxlUGFyZW50ICoKK21ha2VQYXJlbnRKc29uVGFibGVOb2RlKEpzb25UYWJsZVBhcnNlQ29u dGV4dCAqIGN4dCwgY2hhciAqcGF0aFNwZWMsIGNoYXIgKnBhdGhOYW1lLAorCQkJCQkJTGlzdCAq Y29sdW1ucykKK3sKKwlKc29uVGFibGVQYXJlbnQgKm5vZGUgPSBtYWtlTm9kZShKc29uVGFibGVQ YXJlbnQpOworCisJbm9kZS0+cGF0aCA9IG1ha2VOb2RlKEpzb25UYWJsZVBhdGgpOworCW5vZGUt PnBhdGgtPnZhbHVlID0gbWFrZUNvbnN0KEpTT05QQVRIT0lELCAtMSwgSW52YWxpZE9pZCwgLTEs CisJCQkJCQkJCSAgRGlyZWN0RnVuY3Rpb25DYWxsMShqc29ucGF0aF9pbiwKKwkJCQkJCQkJCQkJ CQkgIENTdHJpbmdHZXREYXR1bShwYXRoU3BlYykpLAorCQkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7 CisJaWYgKHBhdGhOYW1lKQorCQlub2RlLT5wYXRoLT5uYW1lID0gcHN0cmR1cChwYXRoTmFtZSk7 CisKKwkvKiBzYXZlIHN0YXJ0IG9mIGNvbHVtbiByYW5nZSAqLworCW5vZGUtPmNvbE1pbiA9IGxp c3RfbGVuZ3RoKGN4dC0+dGFibGVmdW5jLT5jb2x2YWxleHBycyk7CisKKwlhcHBlbmRKc29uVGFi bGVDb2x1bW5zKGN4dCwgY29sdW1ucyk7CisKKwkvKiBzYXZlIGVuZCBvZiBjb2x1bW4gcmFuZ2Ug Ki8KKwlub2RlLT5jb2xNYXggPSBsaXN0X2xlbmd0aChjeHQtPnRhYmxlZnVuYy0+Y29sdmFsZXhw cnMpIC0gMTsKKworCW5vZGUtPmVycm9yT25FcnJvciA9CisJCWN4dC0+dGFibGUtPm9uX2Vycm9y ICYmCisJCWN4dC0+dGFibGUtPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9S OworCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBKc29uVGFibGVQYXJlbnQgKgordHJhbnNm b3JtSnNvblRhYmxlQ29sdW1ucyhKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsIEpzb25UYWJs ZVBsYW4gKnBsYW4sCisJCQkJCQkgIExpc3QgKmNvbHVtbnMsIGNoYXIgKnBhdGhTcGVjLCBjaGFy ICoqcGF0aE5hbWUsCisJCQkJCQkgIGludCBsb2NhdGlvbikKK3sKKwlKc29uVGFibGVQYXJlbnQg Km5vZGU7CisJSnNvblRhYmxlUGxhbiAqY2hpbGRQbGFuOworCWJvb2wJCWRlZmF1bHRQbGFuID0g IXBsYW4gfHwgcGxhbi0+cGxhbl90eXBlID09IEpTVFBfREVGQVVMVDsKKworCWlmICghKnBhdGhO YW1lKQorCXsKKwkJaWYgKGN4dC0+dGFibGUtPnBsYW4pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImludmFsaWQg SlNPTl9UQUJMRSBleHByZXNzaW9uIiksCisJCQkJCSBlcnJkZXRhaWwoIkpTT05fVEFCTEUgY29s dW1ucyBtdXN0IGNvbnRhaW4gIgorCQkJCQkJCSAgICJleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVj aWZpY2F0aW9uIGlmICIKKwkJCQkJCQkgICAiZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIp LAorCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBsb2NhdGlvbikpKTsKKwor CQkqcGF0aE5hbWUgPSBnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKGN4dCk7CisJfQorCisJaWYg KGRlZmF1bHRQbGFuKQorCQljaGlsZFBsYW4gPSBwbGFuOworCWVsc2UKKwl7CisJCS8qIHZhbGlk YXRlIHBhcmVudCBhbmQgY2hpbGQgcGxhbnMgKi8KKwkJSnNvblRhYmxlUGxhbiAqcGFyZW50UGxh bjsKKworCQlpZiAocGxhbi0+cGxhbl90eXBlID09IEpTVFBfSk9JTkVEKQorCQl7CisJCQlpZiAo cGxhbi0+am9pbl90eXBlICE9IEpTVFBKX0lOTkVSICYmCisJCQkJcGxhbi0+am9pbl90eXBlICE9 IEpTVFBKX09VVEVSKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiIp LAorCQkJCQkJIGVycmRldGFpbCgiRXhwZWN0ZWQgSU5ORVIgb3IgT1VURVIgSlNPTl9UQUJMRSBw bGFuIG5vZGUuIiksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBwbGFu LT5sb2NhdGlvbikpKTsKKworCQkJcGFyZW50UGxhbiA9IHBsYW4tPnBsYW4xOworCQkJY2hpbGRQ bGFuID0gcGxhbi0+cGxhbjI7CisKKwkJCUFzc2VydChwYXJlbnRQbGFuLT5wbGFuX3R5cGUgIT0g SlNUUF9KT0lORUQpOworCQkJQXNzZXJ0KHBhcmVudFBsYW4tPnBhdGhuYW1lKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCXBhcmVudFBsYW4gPSBwbGFuOworCQkJY2hpbGRQbGFuID0gTlVMTDsKKwkJ fQorCisJCWlmIChzdHJjbXAocGFyZW50UGxhbi0+cGF0aG5hbWUsICpwYXRoTmFtZSkpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ CSBlcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIiksCisJCQkJCSBlcnJkZXRhaWwoIlBh dGggbmFtZSBtaXNtYXRjaDogZXhwZWN0ZWQgJXMgYnV0ICVzIGlzIGdpdmVuLiIsCisJCQkJCQkJ ICAgKnBhdGhOYW1lLCBwYXJlbnRQbGFuLT5wYXRobmFtZSksCisJCQkJCSBwYXJzZXJfZXJycG9z aXRpb24oY3h0LT5wc3RhdGUsIHBsYW4tPmxvY2F0aW9uKSkpOworCisJCXZhbGlkYXRlSnNvblRh YmxlQ2hpbGRQbGFuKGN4dC0+cHN0YXRlLCBjaGlsZFBsYW4sIGNvbHVtbnMpOworCX0KKworCS8q IHRyYW5zZm9ybSBvbmx5IG5vbi1uZXN0ZWQgY29sdW1ucyAqLworCW5vZGUgPSBtYWtlUGFyZW50 SnNvblRhYmxlTm9kZShjeHQsIHBhdGhTcGVjLCAqcGF0aE5hbWUsIGNvbHVtbnMpOworCisJaWYg KGNoaWxkUGxhbiB8fCBkZWZhdWx0UGxhbikKKwl7CisJCS8qIHRyYW5zZm9ybSByZWN1cnNpdmVs eSBuZXN0ZWQgY29sdW1ucyAqLworCQlub2RlLT5jaGlsZCA9IHRyYW5zZm9ybUpzb25UYWJsZUNo aWxkUGxhbihjeHQsIGNoaWxkUGxhbiwgY29sdW1ucyk7CisJCWlmIChub2RlLT5jaGlsZCkKKwkJ CW5vZGUtPm91dGVySm9pbiA9ICFwbGFuIHx8IChwbGFuLT5qb2luX3R5cGUgJiBKU1RQSl9PVVRF Uik7CisJCS8qIGVsc2U6IGRlZmF1bHQgcGxhbiBjYXNlLCBubyBjaGlsZHJlbiBmb3VuZCAqLwor CX0KKworCXJldHVybiBub2RlOworfQorCisvKgorICogdHJhbnNmb3JtSnNvblRhYmxlIC0KKyAq CQkJVHJhbnNmb3JtIGEgcmF3IEpzb25UYWJsZSBpbnRvIFRhYmxlRnVuYy4KKyAqCisgKiBUcmFu c2Zvcm0gdGhlIGRvY3VtZW50LWdlbmVyYXRpbmcgZXhwcmVzc2lvbiwgdGhlIHJvdy1nZW5lcmF0 aW5nIGV4cHJlc3Npb24sCisgKiB0aGUgY29sdW1uLWdlbmVyYXRpbmcgZXhwcmVzc2lvbnMsIGFu ZCB0aGUgZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9ucy4KKyAqLworUGFyc2VOYW1lc3BhY2VJdGVt ICoKK3RyYW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25UYWJsZSAqanQp Cit7CisJSnNvblRhYmxlUGFyc2VDb250ZXh0IGN4dDsKKwlUYWJsZUZ1bmMgICp0ZiA9IG1ha2VO b2RlKFRhYmxlRnVuYyk7CisJSnNvbkZ1bmNFeHByICpqZmUgPSBtYWtlTm9kZShKc29uRnVuY0V4 cHIpOworCUpzb25FeHByICAgKmplOworCUpzb25UYWJsZVBsYW4gKnBsYW4gPSBqdC0+cGxhbjsK KwlKc29uQ29tbW9uICpqc2NvbW1vbjsKKwljaGFyCSAgICpyb290UGF0aE5hbWUgPSBqdC0+Y29t bW9uLT5wYXRobmFtZTsKKwljaGFyCSAgICpyb290UGF0aDsKKwlib29sCQlpc19sYXRlcmFsOwor CisJY3h0LnBzdGF0ZSA9IHBzdGF0ZTsKKwljeHQudGFibGUgPSBqdDsKKwljeHQudGFibGVmdW5j ID0gdGY7CisJY3h0LnBhdGhOYW1lcyA9IE5JTDsKKwljeHQucGF0aE5hbWVJZCA9IDA7CisKKwlp ZiAocm9vdFBhdGhOYW1lKQorCQlyZWdpc3Rlckpzb25UYWJsZUNvbHVtbigmY3h0LCByb290UGF0 aE5hbWUpOworCisJcmVnaXN0ZXJBbGxKc29uVGFibGVDb2x1bW5zKCZjeHQsIGp0LT5jb2x1bW5z KTsKKworI2lmIDAJCQkJCQkJLyogWFhYIGl0JyB1bmNsZWFyIGZyb20gdGhlIHN0YW5kYXJkIHdo ZXRoZXIKKwkJCQkJCQkJICogcm9vdCBwYXRoIG5hbWUgaXMgbWFuZGF0b3J5IG9yIG5vdCAqLwor CWlmIChwbGFuICYmIHBsYW4tPnBsYW5fdHlwZSAhPSBKU1RQX0RFRkFVTFQgJiYgIXJvb3RQYXRo TmFtZSkKKwl7CisJCS8qIEFzc2lnbiByb290IHBhdGggbmFtZSBhbmQgY3JlYXRlIGNvcnJlc3Bv bmRpbmcgcGxhbiBub2RlICovCisJCUpzb25UYWJsZVBsYW4gKnJvb3ROb2RlID0gbWFrZU5vZGUo SnNvblRhYmxlUGxhbik7CisJCUpzb25UYWJsZVBsYW4gKnJvb3RQbGFuID0gKEpzb25UYWJsZVBs YW4gKikKKwkJCW1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpTVFBKX09VVEVSLCAoTm9kZSAqKSBy b290Tm9kZSwKKwkJCQkJCQkJCShOb2RlICopIHBsYW4sIGp0LT5sb2NhdGlvbik7CisKKwkJcm9v dFBhdGhOYW1lID0gZ2VuZXJhdGVKc29uVGFibGVQYXRoTmFtZSgmY3h0KTsKKworCQlyb290Tm9k ZS0+cGxhbl90eXBlID0gSlNUUF9TSU1QTEU7CisJCXJvb3ROb2RlLT5wYXRobmFtZSA9IHJvb3RQ YXRoTmFtZTsKKworCQlwbGFuID0gcm9vdFBsYW47CisJfQorI2VuZGlmCisKKwlqc2NvbW1vbiA9 IGNvcHlPYmplY3QoanQtPmNvbW1vbik7CisJanNjb21tb24tPnBhdGhzcGVjID0gbWFrZVN0cmlu Z0NvbnN0KHBzdHJkdXAoIiQiKSwgLTEpOworCisJamZlLT5vcCA9IEpTT05fVEFCTEVfT1A7CisJ amZlLT5jb21tb24gPSBqc2NvbW1vbjsKKwlqZmUtPm9uX2Vycm9yID0ganQtPm9uX2Vycm9yOwor CWpmZS0+bG9jYXRpb24gPSBqdC0+Y29tbW9uLT5sb2NhdGlvbjsKKworCS8qCisJICogV2UgbWFr ZSBsYXRlcmFsX29ubHkgbmFtZXMgb2YgdGhpcyBsZXZlbCB2aXNpYmxlLCB3aGV0aGVyIG9yIG5v dCB0aGUKKwkgKiBSYW5nZVRhYmxlRnVuYyBpcyBleHBsaWNpdGx5IG1hcmtlZCBMQVRFUkFMLiAg VGhpcyBpcyBuZWVkZWQgZm9yIFNRTAorCSAqIHNwZWMgY29tcGxpYW5jZSBhbmQgc2VlbXMgdXNl ZnVsIG9uIGNvbnZlbmllbmNlIGdyb3VuZHMgZm9yIGFsbAorCSAqIGZ1bmN0aW9ucyBpbiBGUk9N LgorCSAqCisJICogKExBVEVSQUwgY2FuJ3QgbmVzdCB3aXRoaW4gYSBzaW5nbGUgcHN0YXRlIGxl dmVsLCBzbyB3ZSBkb24ndCBuZWVkCisJICogc2F2ZS9yZXN0b3JlIGxvZ2ljIGhlcmUuKQorCSAq LworCUFzc2VydCghcHN0YXRlLT5wX2xhdGVyYWxfYWN0aXZlKTsKKwlwc3RhdGUtPnBfbGF0ZXJh bF9hY3RpdmUgPSB0cnVlOworCisJdGYtPmZ1bmN0eXBlID0gVEZUX0pTT05fVEFCTEU7CisJdGYt PmRvY2V4cHIgPSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgKE5vZGUgKikgamZlLCBFWFBSX0tJTkRf RlJPTV9GVU5DVElPTik7CisKKwljeHQuY29udGV4dEl0ZW1UeXBpZCA9IGV4cHJUeXBlKHRmLT5k b2NleHByKTsKKworCWlmICghSXNBKGp0LT5jb21tb24tPnBhdGhzcGVjLCBBX0NvbnN0KSB8fAor CQljYXN0Tm9kZShBX0NvbnN0LCBqdC0+Y29tbW9uLT5wYXRoc3BlYyktPnZhbC5ub2RlLnR5cGUg IT0gVF9TdHJpbmcpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIm9ubHkgc3RyaW5nIGNvbnN0YW50cyBz dXBwb3J0ZWQgaW4gSlNPTl9UQUJMRSBwYXRoIHNwZWNpZmljYXRpb24iKSwKKwkJCQkgcGFyc2Vy X2VycnBvc2l0aW9uKHBzdGF0ZSwKKwkJCQkJCQkJCWV4cHJMb2NhdGlvbihqdC0+Y29tbW9uLT5w YXRoc3BlYykpKSk7CisKKwlyb290UGF0aCA9IGNhc3ROb2RlKEFfQ29uc3QsIGp0LT5jb21tb24t PnBhdGhzcGVjKS0+dmFsLnN2YWwuc3ZhbDsKKworCXRmLT5wbGFuID0gKE5vZGUgKikgdHJhbnNm b3JtSnNvblRhYmxlQ29sdW1ucygmY3h0LCBwbGFuLCBqdC0+Y29sdW1ucywKKwkJCQkJCQkJCQkJ CSAgcm9vdFBhdGgsICZyb290UGF0aE5hbWUsCisJCQkJCQkJCQkJCQkgIGp0LT5jb21tb24tPmxv Y2F0aW9uKTsKKworCS8qIEFsc28gc2F2ZSBhIGNvcHkgb2YgdGhlIFBBU1NJTkcgYXJndW1lbnRz IGluIHRoZSBUYWJsZUZ1bmMgbm9kZS4gKi8KKwlqZSA9IChKc29uRXhwciAqKSB0Zi0+ZG9jZXhw cjsKKwl0Zi0+cGFzc2luZ3ZhbGV4cHJzID0gY29weU9iamVjdChqZS0+cGFzc2luZ192YWx1ZXMp OworCisJdGYtPm9yZGluYWxpdHljb2wgPSAtMTsJCS8qIHVuZGVmaW5lIG9yZGluYWxpdHkgY29s dW1uIG51bWJlciAqLworCXRmLT5sb2NhdGlvbiA9IGp0LT5sb2NhdGlvbjsKKworCXBzdGF0ZS0+ cF9sYXRlcmFsX2FjdGl2ZSA9IGZhbHNlOworCisJLyoKKwkgKiBNYXJrIHRoZSBSVEUgYXMgTEFU RVJBTCBpZiB0aGUgdXNlciBzYWlkIExBVEVSQUwgZXhwbGljaXRseSwgb3IgaWYKKwkgKiB0aGVy ZSBhcmUgYW55IGxhdGVyYWwgY3Jvc3MtcmVmZXJlbmNlcyBpbiBpdC4KKwkgKi8KKwlpc19sYXRl cmFsID0ganQtPmxhdGVyYWwgfHwgY29udGFpbl92YXJzX29mX2xldmVsKChOb2RlICopIHRmLCAw KTsKKworCXJldHVybiBhZGRSYW5nZVRhYmxlRW50cnlGb3JUYWJsZUZ1bmMocHN0YXRlLAorCQkJ CQkJCQkJCSAgdGYsIGp0LT5hbGlhcywgaXNfbGF0ZXJhbCwgdHJ1ZSk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9yZWxhdGlvbi5jCmluZGV4IDg2NGVhOWIwZDUuLjNhYzdlMTEzZjAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9yZWxhdGlvbi5jCkBAIC0yMDczLDcgKzIwNzMsOCBAQCBhZGRSYW5nZVRh YmxlRW50cnlGb3JUYWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCUFzc2VydChsaXN0X2xl bmd0aCh0Zi0+Y29sdHlwbW9kcykgPT0gbGlzdF9sZW5ndGgodGYtPmNvbG5hbWVzKSk7CiAJQXNz ZXJ0KGxpc3RfbGVuZ3RoKHRmLT5jb2xjb2xsYXRpb25zKSA9PSBsaXN0X2xlbmd0aCh0Zi0+Y29s bmFtZXMpKTsKIAotCXJlZm5hbWUgPSBhbGlhcyA/IGFsaWFzLT5hbGlhc25hbWUgOiBwc3RyZHVw KCJ4bWx0YWJsZSIpOworCXJlZm5hbWUgPSBhbGlhcyA/IGFsaWFzLT5hbGlhc25hbWUgOgorCQlw c3RyZHVwKHRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUgPyAieG1sdGFibGUiIDogImpzb25f dGFibGUiKTsKIAogCXJ0ZS0+cnRla2luZCA9IFJURV9UQUJMRUZVTkM7CiAJcnRlLT5yZWxpZCA9 IEludmFsaWRPaWQ7CkBAIC0yMDk2LDcgKzIwOTcsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JU YWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKIAkJCQkgZXJybXNnKCIlcyBm dW5jdGlvbiBoYXMgJWQgY29sdW1ucyBhdmFpbGFibGUgYnV0ICVkIGNvbHVtbnMgc3BlY2lmaWVk IiwKLQkJCQkJCSJYTUxUQUJMRSIsCisJCQkJCQl0Zi0+ZnVuY3R5cGUgPT0gVEZUX1hNTFRBQkxF ID8gIlhNTFRBQkxFIiA6ICJKU09OX1RBQkxFIiwKIAkJCQkJCWxpc3RfbGVuZ3RoKHRmLT5jb2xu YW1lcyksIG51bWFsaWFzZXMpKSk7CiAKIAlydGUtPmVyZWYgPSBlcmVmOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3RhcmdldC5jCmluZGV4IDhmODE2MjRmOTcuLmNhNzIyOGVhNDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIv cGFyc2VfdGFyZ2V0LmMKQEAgLTIwMDIsNiArMjAwMiw5IEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5h bChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCQljYXNlIEpTT05fVkFMVUVfT1A6CiAJCQkJ CSpuYW1lID0gImpzb25fdmFsdWUiOwogCQkJCQlyZXR1cm4gMjsKKwkJCQljYXNlIEpTT05fVEFC TEVfT1A6CisJCQkJCSpuYW1lID0gImpzb25fdGFibGUiOworCQkJCQlyZXR1cm4gMjsKIAkJCX0K IAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMK aW5kZXggNmM1NjAyYzY0ZC4uNzk2MzJlM2RmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBh dGhfZXhlYy5jCkBAIC02MSwxMCArNjEsMTIgQEAKIAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29s bGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY0V4cHIuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibGliL3N0cmlu Z2luZm8uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9taXNjbm9k ZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJyZWdleC9yZWdl eC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5o IgpAQCAtNzUsNiArNzcsOCBAQAogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0 aWxzL2pzb24uaCIKICNpbmNsdWRlICJ1dGlscy9qc29ucGF0aC5oIgorI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCkBAIC0xNTYsNiAr MTYwLDYxIEBAIHR5cGVkZWYgc3RydWN0IEpzb25WYWx1ZUxpc3RJdGVyYXRvcgogCUxpc3RDZWxs ICAgKm5leHQ7CiB9IEpzb25WYWx1ZUxpc3RJdGVyYXRvcjsKIAorLyogU3RydWN0dXJlcyBmb3Ig SlNPTl9UQUJMRSBleGVjdXRpb24gICovCisKK3R5cGVkZWYgZW51bSBKc29uVGFibGVQbGFuU3Rh dGVUeXBlCit7CisJSlNPTl9UQUJMRV9TQ0FOX1NUQVRFID0gMCwKKwlKU09OX1RBQkxFX0pPSU5f U1RBVEUKK30JCQlKc29uVGFibGVQbGFuU3RhdGVUeXBlOworCit0eXBlZGVmIHN0cnVjdCBKc29u VGFibGVQbGFuU3RhdGUKK3sKKwlKc29uVGFibGVQbGFuU3RhdGVUeXBlIHR5cGU7CisKKwlzdHJ1 Y3QgSnNvblRhYmxlUGxhblN0YXRlICpwYXJlbnQ7CisJc3RydWN0IEpzb25UYWJsZVBsYW5TdGF0 ZSAqbmVzdGVkOworfQkJCUpzb25UYWJsZVBsYW5TdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSnNv blRhYmxlU2NhblN0YXRlCit7CisJSnNvblRhYmxlUGxhblN0YXRlIHBsYW47CisKKwlNZW1vcnlD b250ZXh0IG1jeHQ7CisJSnNvblBhdGggICAqcGF0aDsKKwlMaXN0CSAgICphcmdzOworCUpzb25W YWx1ZUxpc3QgZm91bmQ7CisJSnNvblZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXI7CisJRGF0dW0JCWN1 cnJlbnQ7CisJaW50CQkJb3JkaW5hbDsKKwlib29sCQljdXJyZW50SXNOdWxsOworCWJvb2wJCW91 dGVySm9pbjsKKwlib29sCQllcnJvck9uRXJyb3I7CisJYm9vbAkJYWR2YW5jZU5lc3RlZDsKKwli b29sCQlyZXNldDsKK30gSnNvblRhYmxlU2NhblN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBKc29u VGFibGVKb2luU3RhdGUKK3sKKwlKc29uVGFibGVQbGFuU3RhdGUgcGxhbjsKKworCUpzb25UYWJs ZVBsYW5TdGF0ZSAqbGVmdDsKKwlKc29uVGFibGVQbGFuU3RhdGUgKnJpZ2h0OworCWJvb2wJCWNy b3NzOworCWJvb2wJCWFkdmFuY2VSaWdodDsKK30gSnNvblRhYmxlSm9pblN0YXRlOworCisvKiBy YW5kb20gbnVtYmVyIHRvIGlkZW50aWZ5IEpzb25UYWJsZUV4ZWNDb250ZXh0ICovCisjZGVmaW5l IEpTT05fVEFCTEVfRVhFQ19DT05URVhUX01BR0lDCQk0MTgzNTI4NjcKKwordHlwZWRlZiBzdHJ1 Y3QgSnNvblRhYmxlRXhlY0NvbnRleHQKK3sKKwlpbnQJCQltYWdpYzsKKwlKc29uVGFibGVTY2Fu U3RhdGUgKipjb2xleHByc2NhbnM7CisJSnNvblRhYmxlU2NhblN0YXRlICpyb290OworCWJvb2wJ CWVtcHR5OworfQkJCUpzb25UYWJsZUV4ZWNDb250ZXh0OworCiAvKiBzdHJpY3QvbGF4IGZsYWdz IGlzIGRlY29tcG9zZWQgaW50byBmb3VyIFt1bl13cmFwL2Vycm9yIGZsYWdzICovCiAjZGVmaW5l IGpzcFN0cmljdEFic2Vuc2VPZkVycm9ycyhjeHQpCSghKGN4dCktPmxheE1vZGUpCiAjZGVmaW5l IGpzcEF1dG9VbndyYXAoY3h0KQkJCQkoKGN4dCktPmxheE1vZGUpCkBAIC0yNDgsNiArMzA3LDcg QEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBnZXRBcnJheUluZGV4KEpzb25QYXRoRXhlY0Nv bnRleHQgKmN4dCwKIAkJCQkJCQkJCQlKc29uUGF0aEl0ZW0gKmpzcCwgSnNvbmJWYWx1ZSAqamIs IGludDMyICppbmRleCk7CiBzdGF0aWMgSnNvbkJhc2VPYmplY3RJbmZvIHNldEJhc2VPYmplY3Qo SnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LAogCQkJCQkJCQkJCUpzb25iVmFsdWUgKmpidiwgaW50 MzIgaWQpOworc3RhdGljIHZvaWQgSnNvblZhbHVlTGlzdENsZWFyKEpzb25WYWx1ZUxpc3QgKmp2 bCk7CiBzdGF0aWMgdm9pZCBKc29uVmFsdWVMaXN0QXBwZW5kKEpzb25WYWx1ZUxpc3QgKmp2bCwg SnNvbmJWYWx1ZSAqamJ2KTsKIHN0YXRpYyBpbnQJSnNvblZhbHVlTGlzdExlbmd0aChjb25zdCBK c29uVmFsdWVMaXN0ICpqdmwpOwogc3RhdGljIGJvb2wgSnNvblZhbHVlTGlzdElzRW1wdHkoSnNv blZhbHVlTGlzdCAqanZsKTsKQEAgLTI2NSw2ICszMjUsMTQgQEAgc3RhdGljIEpzb25iVmFsdWUg KndyYXBJdGVtc0luQXJyYXkoY29uc3QgSnNvblZhbHVlTGlzdCAqaXRlbXMpOwogc3RhdGljIGlu dAljb21wYXJlRGF0ZXRpbWUoRGF0dW0gdmFsMSwgT2lkIHR5cGlkMSwgRGF0dW0gdmFsMiwgT2lk IHR5cGlkMiwKIAkJCQkJCQlib29sIHVzZVR6LCBib29sICpjYXN0X2Vycm9yKTsKIAorCitzdGF0 aWMgSnNvblRhYmxlUGxhblN0YXRlICogSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShKc29uVGFibGVF eGVjQ29udGV4dCAqIGN4dCwKKwkJCQkJCQkJCQkJCSAgIE5vZGUgKnBsYW4sCisJCQkJCQkJCQkJ CQkgICBKc29uVGFibGVQbGFuU3RhdGUgKiBwYXJlbnQpOworc3RhdGljIGJvb2wgSnNvblRhYmxl UGxhbk5leHRSb3coSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpOworc3RhdGljIGJvb2wgSnNv blRhYmxlU2Nhbk5leHRSb3coSnNvblRhYmxlU2NhblN0YXRlICpzY2FuKTsKKworCiAvKioqKioq KioqKioqKioqKioqIFVzZXIgaW50ZXJmYWNlIHRvIEpzb25QYXRoIGV4ZWN1dG9yICoqKioqKioq KioqKioqKioqKioqLwogCiAvKgpAQCAtMjUxOCw2ICsyNTg2LDEzIEBAIHNldEJhc2VPYmplY3Qo SnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uYlZhbHVlICpqYnYsIGludDMyIGlkKQogCXJl dHVybiBiYXNlT2JqZWN0OwogfQogCitzdGF0aWMgdm9pZAorSnNvblZhbHVlTGlzdENsZWFyKEpz b25WYWx1ZUxpc3QgKmp2bCkKK3sKKwlqdmwtPnNpbmdsZXRvbiA9IE5VTEw7CisJanZsLT5saXN0 ID0gTlVMTDsKK30KKwogc3RhdGljIHZvaWQKIEpzb25WYWx1ZUxpc3RBcHBlbmQoSnNvblZhbHVl TGlzdCAqanZsLCBKc29uYlZhbHVlICpqYnYpCiB7CkBAIC0zMTIzLDMgKzMxOTgsNDcxIEBAIEpz b25JdGVtRnJvbURhdHVtKERhdHVtIHZhbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzb25i VmFsdWUgKnJlcykKIAkJCQkJIGVycm1zZygib25seSBkYXRldGltZSwgYm9vbCwgbnVtZXJpYywg YW5kIHRleHQgdHlwZXMgY2FuIGJlIGNhc3RlZCB0byBqc29ucGF0aCB0eXBlcyIpKSk7CiAJfQog fQorCisvKioqKioqKioqKioqKioqKioqKioqKioqIEpTT05fVEFCTEUgZnVuY3Rpb25zICoqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJldHVybnMgcHJpdmF0ZSBkYXRhIGZy b20gZXhlY3V0b3Igc3RhdGUuIEVuc3VyZSB2YWxpZGl0eSBieSBjaGVjayB3aXRoCisgKiBNQUdJ QyBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgSnNvblRhYmxlRXhlY0NvbnRleHQgKgorR2V0 SnNvblRhYmxlRXhlY0NvbnRleHQoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgY29uc3QgY2hh ciAqZm5hbWUpCit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKnJlc3VsdDsKKworCWlmICghSXNB KHN0YXRlLCBUYWJsZUZ1bmNTY2FuU3RhdGUpKQorCQllbG9nKEVSUk9SLCAiJXMgY2FsbGVkIHdp dGggaW52YWxpZCBUYWJsZUZ1bmNTY2FuU3RhdGUiLCBmbmFtZSk7CisJcmVzdWx0ID0gKEpzb25U YWJsZUV4ZWNDb250ZXh0ICopIHN0YXRlLT5vcGFxdWU7CisJaWYgKHJlc3VsdC0+bWFnaWMgIT0g SlNPTl9UQUJMRV9FWEVDX0NPTlRFWFRfTUFHSUMpCisJCWVsb2coRVJST1IsICIlcyBjYWxsZWQg d2l0aCBpbnZhbGlkIFRhYmxlRnVuY1NjYW5TdGF0ZSIsIGZuYW1lKTsKKworCXJldHVybiByZXN1 bHQ7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IGluaXRpYWxpemUgSlNPTl9UQUJMRSBzY2FuIC8gam9p biBzdGF0ZSAqLworc3RhdGljIEpzb25UYWJsZUpvaW5TdGF0ZSAqCitKc29uVGFibGVJbml0Sm9p blN0YXRlKEpzb25UYWJsZUV4ZWNDb250ZXh0ICogY3h0LCBKc29uVGFibGVTaWJsaW5nICpwbGFu LAorCQkJCQkgICBKc29uVGFibGVQbGFuU3RhdGUgKiBwYXJlbnQpCit7CisJSnNvblRhYmxlSm9p blN0YXRlICpqb2luID0gcGFsbG9jMChzaXplb2YoKmpvaW4pKTsKKworCWpvaW4tPnBsYW4udHlw ZSA9IEpTT05fVEFCTEVfSk9JTl9TVEFURTsKKwkvKiBwYXJlbnQgYW5kIG5lc3RlZCBub3Qgc2V0 LiAqLworCisJam9pbi0+Y3Jvc3MgPSBwbGFuLT5jcm9zczsKKwlqb2luLT5sZWZ0ID0gSnNvblRh YmxlSW5pdFBsYW5TdGF0ZShjeHQsIHBsYW4tPmxhcmcsIHBhcmVudCk7CisJam9pbi0+cmlnaHQg PSBKc29uVGFibGVJbml0UGxhblN0YXRlKGN4dCwgcGxhbi0+cmFyZywgcGFyZW50KTsKKworCXJl dHVybiBqb2luOworfQorCitzdGF0aWMgSnNvblRhYmxlU2NhblN0YXRlICoKK0pzb25UYWJsZUlu aXRTY2FuU3RhdGUoSnNvblRhYmxlRXhlY0NvbnRleHQgKiBjeHQsIEpzb25UYWJsZVBhcmVudCAq cGxhbiwKKwkJCQkJICAgSnNvblRhYmxlUGxhblN0YXRlICogcGFyZW50LAorCQkJCQkgICBMaXN0 ICphcmdzLCBNZW1vcnlDb250ZXh0IG1jeHQpCit7CisJSnNvblRhYmxlU2NhblN0YXRlICpzY2Fu ID0gcGFsbG9jMChzaXplb2YoKnNjYW4pKTsKKwlpbnQJCQlpOworCisJc2Nhbi0+cGxhbi50eXBl ID0gSlNPTl9UQUJMRV9TQ0FOX1NUQVRFOworCXNjYW4tPnBsYW4ucGFyZW50ID0gcGFyZW50Owor CisJc2Nhbi0+b3V0ZXJKb2luID0gcGxhbi0+b3V0ZXJKb2luOworCXNjYW4tPmVycm9yT25FcnJv ciA9IHBsYW4tPmVycm9yT25FcnJvcjsKKwlzY2FuLT5wYXRoID0gRGF0dW1HZXRKc29uUGF0aFAo cGxhbi0+cGF0aC0+dmFsdWUtPmNvbnN0dmFsdWUpOworCXNjYW4tPmFyZ3MgPSBhcmdzOworCXNj YW4tPm1jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUobWN4dCwgIkpzb25UYWJsZUV4ZWNDb250 ZXh0IiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBT ZXQgYWZ0ZXIgc2V0dGluZ3Mgc2Nhbi0+YXJncyBhbmQgc2Nhbi0+bWN4dCwgYmVjYXVzZSB0aGUg cmVjdXJzaXZlCisJICogY2FsbCB3YW50cyB0byB1c2UgdGhvc2UgdmFsdWVzLgorCSAqLworCXNj YW4tPnBsYW4ubmVzdGVkID0gcGxhbi0+Y2hpbGQgPworCQlKc29uVGFibGVJbml0UGxhblN0YXRl KGN4dCwgcGxhbi0+Y2hpbGQsIChKc29uVGFibGVQbGFuU3RhdGUgKikgc2NhbikgOgorCQlOVUxM OworCisJc2Nhbi0+Y3VycmVudCA9IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwlzY2FuLT5jdXJy ZW50SXNOdWxsID0gdHJ1ZTsKKworCWZvciAoaSA9IHBsYW4tPmNvbE1pbjsgaSA8PSBwbGFuLT5j b2xNYXg7IGkrKykKKwkJY3h0LT5jb2xleHByc2NhbnNbaV0gPSBzY2FuOworCisJcmV0dXJuIHNj YW47Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IGluaXRpYWxpemUgSlNPTl9UQUJMRSBzY2FuIHN0YXRl ICovCitzdGF0aWMgSnNvblRhYmxlUGxhblN0YXRlICoKK0pzb25UYWJsZUluaXRQbGFuU3RhdGUo SnNvblRhYmxlRXhlY0NvbnRleHQgKiBjeHQsIE5vZGUgKnBsYW4sCisJCQkJCSAgIEpzb25UYWJs ZVBsYW5TdGF0ZSAqIHBhcmVudCkKK3sKKwlKc29uVGFibGVQbGFuU3RhdGUgKnN0YXRlOworCisJ aWYgKElzQShwbGFuLCBKc29uVGFibGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxpbmcg KmpvaW4gPSBjYXN0Tm9kZShKc29uVGFibGVTaWJsaW5nLCBwbGFuKTsKKworCQlzdGF0ZSA9IChK c29uVGFibGVQbGFuU3RhdGUgKikKKwkJCUpzb25UYWJsZUluaXRKb2luU3RhdGUoY3h0LCBqb2lu LCBwYXJlbnQpOworCX0KKwllbHNlCisJeworCQlKc29uVGFibGVQYXJlbnQgKnNjYW4gPSBjYXN0 Tm9kZShKc29uVGFibGVQYXJlbnQsIHBsYW4pOworCQlKc29uVGFibGVTY2FuU3RhdGUgKnBhcmVu dF9zY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBwYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVu dF9zY2FuKTsKKwkJc3RhdGUgPSAoSnNvblRhYmxlUGxhblN0YXRlICopCisJCQlKc29uVGFibGVJ bml0U2NhblN0YXRlKGN4dCwgc2NhbiwgcGFyZW50LCBwYXJlbnRfc2Nhbi0+YXJncywKKwkJCQkJ CQkJICAgcGFyZW50X3NjYW4tPm1jeHQpOworCX0KKworCXJldHVybiBzdGF0ZTsKK30KKworLyoK KyAqIEpzb25UYWJsZUluaXRPcGFxdWUKKyAqCQlGaWxsIGluIFRhYmxlRnVuY1NjYW5TdGF0ZS0+ b3BhcXVlIGZvciBKc29uVGFibGUgcHJvY2Vzc29yCisgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFi bGVJbml0T3BhcXVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBuYXR0cykKK3sKKwlK c29uVGFibGVFeGVjQ29udGV4dCAqY3h0OworCVBsYW5TdGF0ZSAgKnBzID0gJnN0YXRlLT5zcy5w czsKKwlUYWJsZUZ1bmNTY2FuICp0ZnMgPSBjYXN0Tm9kZShUYWJsZUZ1bmNTY2FuLCBwcy0+cGxh bik7CisJVGFibGVGdW5jICAqdGYgPSB0ZnMtPnRhYmxlZnVuYzsKKwlKc29uVGFibGVQYXJlbnQg KnJvb3QgPSBjYXN0Tm9kZShKc29uVGFibGVQYXJlbnQsIHRmLT5wbGFuKTsKKwlKc29uRXhwciAg ICpqZSA9IGNhc3ROb2RlKEpzb25FeHByLCB0Zi0+ZG9jZXhwcik7CisJTGlzdAkgICAqYXJncyA9 IE5JTDsKKworCWN4dCA9IHBhbGxvYzAoc2l6ZW9mKEpzb25UYWJsZUV4ZWNDb250ZXh0KSk7CisJ Y3h0LT5tYWdpYyA9IEpTT05fVEFCTEVfRVhFQ19DT05URVhUX01BR0lDOworCisJaWYgKHN0YXRl LT5wYXNzaW5ndmFsZXhwcnMpCisJeworCQlMaXN0Q2VsbCAgICpleHBybGM7CisJCUxpc3RDZWxs ICAgKm5hbWVsYzsKKworCQlBc3NlcnQobGlzdF9sZW5ndGgoc3RhdGUtPnBhc3Npbmd2YWxleHBy cykgPT0KKwkJCSAgIGxpc3RfbGVuZ3RoKGplLT5wYXNzaW5nX25hbWVzKSk7CisJCWZvcmJvdGgo ZXhwcmxjLCBzdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzLAorCQkJCW5hbWVsYywgamUtPnBhc3Npbmdf bmFtZXMpCisJCXsKKwkJCUV4cHJTdGF0ZSAgKnN0YXRlID0gbGZpcnN0X25vZGUoRXhwclN0YXRl LCBleHBybGMpOworCQkJU3RyaW5nCSAgICpuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBuYW1l bGMpOworCQkJSnNvblBhdGhWYXJpYWJsZSAqdmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7CisK KwkJCXZhci0+bmFtZSA9IHBzdHJkdXAobmFtZS0+c3ZhbCk7CisJCQl2YXItPnR5cGlkID0gZXhw clR5cGUoKE5vZGUgKikgc3RhdGUtPmV4cHIpOworCQkJdmFyLT50eXBtb2QgPSBleHByVHlwbW9k KChOb2RlICopIHN0YXRlLT5leHByKTsKKworCQkJLyoKKwkJCSAqIEV2YWx1YXRlIHRoZSBleHBy ZXNzaW9uIGFuZCBzYXZlIHRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZCBieQorCQkJICogR2V0SnNv blBhdGhWYXIoKS4KKwkJCSAqLworCQkJdmFyLT52YWx1ZSA9IEV4ZWNFdmFsRXhwcihzdGF0ZSwg cHMtPnBzX0V4cHJDb250ZXh0LAorCQkJCQkJCQkJICAmdmFyLT5pc251bGwpOworCisJCQlhcmdz ID0gbGFwcGVuZChhcmdzLCB2YXIpOworCQl9CisJfQorCisJY3h0LT5jb2xleHByc2NhbnMgPSBw YWxsb2Moc2l6ZW9mKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSAqCisJCQkJCQkJICAgbGlzdF9sZW5n dGgodGYtPmNvbHZhbGV4cHJzKSk7CisKKwljeHQtPnJvb3QgPSBKc29uVGFibGVJbml0U2NhblN0 YXRlKGN4dCwgcm9vdCwgTlVMTCwgYXJncywKKwkJCQkJCQkJCSAgIEN1cnJlbnRNZW1vcnlDb250 ZXh0KTsKKwlzdGF0ZS0+b3BhcXVlID0gY3h0OworfQorCisvKiBSZXNldCBzY2FuIGl0ZXJhdG9y IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGl0ZW0gbGlzdCAqLworc3RhdGljIHZvaWQKK0pzb25U YWJsZVJlc2NhbihKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4pCit7CisJSnNvblZhbHVlTGlzdElu aXRJdGVyYXRvcigmc2Nhbi0+Zm91bmQsICZzY2FuLT5pdGVyKTsKKwlzY2FuLT5jdXJyZW50ID0g UG9pbnRlckdldERhdHVtKE5VTEwpOworCXNjYW4tPmN1cnJlbnRJc051bGwgPSB0cnVlOworCXNj YW4tPmFkdmFuY2VOZXN0ZWQgPSBmYWxzZTsKKwlzY2FuLT5vcmRpbmFsID0gMDsKK30KKworLyog UmVzZXQgY29udGV4dCBpdGVtIG9mIGEgc2NhbiwgZXhlY3V0ZSBKU09OIHBhdGggYW5kIHJlc2V0 IGEgc2NhbiAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oSnNvblRh YmxlU2NhblN0YXRlICpzY2FuLCBEYXR1bSBpdGVtKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0 OworCUpzb25QYXRoRXhlY1Jlc3VsdCByZXM7CisJSnNvbmIJICAgKmpzID0gKEpzb25iICopIERh dHVtR2V0SnNvbmJQKGl0ZW0pOworCisJSnNvblZhbHVlTGlzdENsZWFyKCZzY2FuLT5mb3VuZCk7 CisKKwlNZW1vcnlDb250ZXh0UmVzZXRPbmx5KHNjYW4tPm1jeHQpOworCisJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPm1jeHQpOworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRo KHNjYW4tPnBhdGgsIHNjYW4tPmFyZ3MsIEdldEpzb25QYXRoVmFyLCBqcywKKwkJCQkJCSAgc2Nh bi0+ZXJyb3JPbkVycm9yLCAmc2Nhbi0+Zm91bmQsCisJCQkJCQkgIGZhbHNlIC8qIEZJWE1FICov ICk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlmIChqcGVySXNFcnJv cihyZXMpKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5lcnJvck9uRXJyb3IpOworCQlKc29uVmFsdWVM aXN0Q2xlYXIoJnNjYW4tPmZvdW5kKTsJLyogRU1QVFkgT04gRVJST1IgY2FzZSAqLworCX0KKwor CUpzb25UYWJsZVJlc2NhbihzY2FuKTsKK30KKworLyoKKyAqIEpzb25UYWJsZVNldERvY3VtZW50 CisgKgkJSW5zdGFsbCB0aGUgaW5wdXQgZG9jdW1lbnQKKyAqLworc3RhdGljIHZvaWQKK0pzb25U YWJsZVNldERvY3VtZW50KFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIERhdHVtIHZhbHVlKQor eworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29uVGFibGVFeGVjQ29udGV4 dChzdGF0ZSwgIkpzb25UYWJsZVNldERvY3VtZW50Iik7CisKKwlKc29uVGFibGVSZXNldENvbnRl eHRJdGVtKGN4dC0+cm9vdCwgdmFsdWUpOworfQorCisvKiBSZWN1cnNpdmVseSByZXNldCBzY2Fu IGFuZCBpdHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVSZXNjYW5SZWN1 cnNpdmUoSnNvblRhYmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09 IEpTT05fVEFCTEVfSk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9 IChKc29uVGFibGVKb2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUmVzY2FuUmVjdXJz aXZlKGpvaW4tPmxlZnQpOworCQlKc29uVGFibGVSZXNjYW5SZWN1cnNpdmUoam9pbi0+cmlnaHQp OworCQlqb2luLT5hZHZhbmNlUmlnaHQgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRh YmxlU2NhblN0YXRlICpzY2FuID0gKEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKworCQlB c3NlcnQoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9TQ0FOX1NUQVRFKTsKKwkJSnNvblRhYmxl UmVzY2FuKHNjYW4pOworCQlpZiAoc2Nhbi0+cGxhbi5uZXN0ZWQpCisJCQlKc29uVGFibGVSZXNj YW5SZWN1cnNpdmUoc2Nhbi0+cGxhbi5uZXN0ZWQpOworCX0KK30KKworLyoKKyAqIEZldGNoIG5l eHQgcm93IGZyb20gYSBjcm9zcy91bmlvbiBqb2luZWQgc2Nhbi4KKyAqCisgKiBSZXR1cm5zIGZh bHNlIGF0IHRoZSBlbmQgb2YgYSBzY2FuLCB0cnVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJv b2wKK0pzb25UYWJsZVBsYW5OZXh0Um93KEpzb25UYWJsZVBsYW5TdGF0ZSAqIHN0YXRlKQorewor CUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbjsKKworCWlmIChzdGF0ZS0+dHlwZSA9PSBKU09OX1RB QkxFX1NDQU5fU1RBVEUpCisJCXJldHVybiBKc29uVGFibGVTY2FuTmV4dFJvdygoSnNvblRhYmxl U2NhblN0YXRlICopIHN0YXRlKTsKKworCWpvaW4gPSAoSnNvblRhYmxlSm9pblN0YXRlICopIHN0 YXRlOworCWlmIChqb2luLT5hZHZhbmNlUmlnaHQpCisJeworCQkvKiBmZXRjaCBuZXh0IGlubmVy IHJvdyAqLworCQlpZiAoSnNvblRhYmxlUGxhbk5leHRSb3coam9pbi0+cmlnaHQpKQorCQkJcmV0 dXJuIHRydWU7CisKKwkJLyogaW5uZXIgcm93cyBhcmUgZXhoYXVzdGVkICovCisJCWlmIChqb2lu LT5jcm9zcykKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IGZhbHNlOyAvKiBuZXh0IG91dGVyIHJv dyAqLworCQllbHNlCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCX0KKwor CXdoaWxlICgham9pbi0+YWR2YW5jZVJpZ2h0KQorCXsKKwkJLyogZmV0Y2ggbmV4dCBvdXRlciBy b3cgKi8KKwkJYm9vbAkJbGVmdCA9IEpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPmxlZnQpOwor CisJCWlmIChqb2luLT5jcm9zcykKKwkJeworCQkJaWYgKCFsZWZ0KQorCQkJCXJldHVybiBmYWxz ZTsJLyogZW5kIG9mIHNjYW4gKi8KKworCQkJSnNvblRhYmxlUmVzY2FuUmVjdXJzaXZlKGpvaW4t PnJpZ2h0KTsKKworCQkJaWYgKCFKc29uVGFibGVQbGFuTmV4dFJvdyhqb2luLT5yaWdodCkpCisJ CQkJY29udGludWU7CQkvKiBuZXh0IG91dGVyIHJvdyAqLworCisJCQlqb2luLT5hZHZhbmNlUmln aHQgPSB0cnVlOwkvKiBuZXh0IGlubmVyIHJvdyAqLworCQl9CisJCWVsc2UgaWYgKCFsZWZ0KQor CQl7CisJCQlpZiAoIUpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0KSkKKwkJCQlyZXR1 cm4gZmFsc2U7CS8qIGVuZCBvZiBzY2FuICovCisKKwkJCWpvaW4tPmFkdmFuY2VSaWdodCA9IHRy dWU7CS8qIG5leHQgaW5uZXIgcm93ICovCisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworLyogUmVjdXJzaXZlbHkgc2V0ICdyZXNldCcgZmxhZyBvZiBzY2FuIGFuZCBp dHMgY2hpbGQgbm9kZXMgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVQbGFuUmVzZXQoSnNvblRh YmxlUGxhblN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT50eXBlID09IEpTT05fVEFCTEVf Sk9JTl9TVEFURSkKKwl7CisJCUpzb25UYWJsZUpvaW5TdGF0ZSAqam9pbiA9IChKc29uVGFibGVK b2luU3RhdGUgKikgc3RhdGU7CisKKwkJSnNvblRhYmxlUGxhblJlc2V0KGpvaW4tPmxlZnQpOwor CQlKc29uVGFibGVQbGFuUmVzZXQoam9pbi0+cmlnaHQpOworCQlqb2luLT5hZHZhbmNlUmlnaHQg PSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuOworCisJ CUFzc2VydChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxFX1NDQU5fU1RBVEUpOworCQlzY2FuID0g KEpzb25UYWJsZVNjYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJc2Nhbi0+cmVzZXQgPSB0cnVlOworCQlz Y2FuLT5hZHZhbmNlTmVzdGVkID0gZmFsc2U7CisKKwkJaWYgKHNjYW4tPnBsYW4ubmVzdGVkKQor CQkJSnNvblRhYmxlUGxhblJlc2V0KHNjYW4tPnBsYW4ubmVzdGVkKTsKKwl9Cit9CisKKy8qCisg KiBGZXRjaCBuZXh0IHJvdyBmcm9tIGEgc2ltcGxlIHNjYW4gd2l0aCBvdXRlci9pbm5lciBqb2lu ZWQgbmVzdGVkIHN1YnNjYW5zLgorICoKKyAqIFJldHVybnMgZmFsc2UgYXQgdGhlIGVuZCBvZiBh IHNjYW4sIHRydWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbAorSnNvblRhYmxlU2Nhbk5l eHRSb3coSnNvblRhYmxlU2NhblN0YXRlICpzY2FuKQoreworCS8qIHJlc2V0IGNvbnRleHQgaXRl bSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoc2Nhbi0+cmVzZXQpCisJeworCQlKc29uVGFibGVTY2Fu U3RhdGUgKnBhcmVudF9zY2FuID0KKwkJCShKc29uVGFibGVTY2FuU3RhdGUgKikgc2Nhbi0+cGxh bi5wYXJlbnQ7CisKKwkJQXNzZXJ0KHBhcmVudF9zY2FuICYmICFwYXJlbnRfc2Nhbi0+Y3VycmVu dElzTnVsbCk7CisJCUpzb25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oc2NhbiwgcGFyZW50X3NjYW4t PmN1cnJlbnQpOworCQlzY2FuLT5yZXNldCA9IGZhbHNlOworCX0KKworCWlmIChzY2FuLT5hZHZh bmNlTmVzdGVkKQorCXsKKwkJLyogZmV0Y2ggbmV4dCBuZXN0ZWQgcm93ICovCisJCXNjYW4tPmFk dmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5wbGFuLm5lc3RlZCk7CisK KwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlmb3Ig KDs7KQorCXsKKwkJLyogZmV0Y2ggbmV4dCByb3cgKi8KKwkJSnNvbmJWYWx1ZSAqamJ2ID0gSnNv blZhbHVlTGlzdE5leHQoJnNjYW4tPmZvdW5kLCAmc2Nhbi0+aXRlcik7CisJCU1lbW9yeUNvbnRl eHQgb2xkY3h0OworCisJCWlmICghamJ2KQorCQl7CisJCQlzY2FuLT5jdXJyZW50ID0gUG9pbnRl ckdldERhdHVtKE5VTEwpOworCQkJc2Nhbi0+Y3VycmVudElzTnVsbCA9IHRydWU7CisJCQlyZXR1 cm4gZmFsc2U7CQkvKiBlbmQgb2Ygc2NhbiAqLworCQl9CisKKwkJLyogc2V0IGN1cnJlbnQgcm93 IGl0ZW0gKi8KKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPm1jeHQpOwor CQlzY2FuLT5jdXJyZW50ID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoamJ2KSk7 CisJCXNjYW4tPmN1cnJlbnRJc051bGwgPSBmYWxzZTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN4dCk7CisKKwkJc2Nhbi0+b3JkaW5hbCsrOworCisJCWlmICghc2Nhbi0+cGxhbi5uZXN0 ZWQpCisJCQlicmVhazsKKworCQlKc29uVGFibGVQbGFuUmVzZXQoc2Nhbi0+cGxhbi5uZXN0ZWQp OworCisJCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhzY2FuLT5w bGFuLm5lc3RlZCk7CisKKwkJaWYgKHNjYW4tPmFkdmFuY2VOZXN0ZWQgfHwgc2Nhbi0+b3V0ZXJK b2luKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBKc29uVGFi bGVGZXRjaFJvdworICoJCVByZXBhcmUgdGhlIG5leHQgImN1cnJlbnQiIHR1cGxlIGZvciB1cGNv bWluZyBHZXRWYWx1ZSBjYWxscy4KKyAqCQlSZXR1cm5zIEZBTFNFIGlmIHRoZSByb3ctZmlsdGVy IGV4cHJlc3Npb24gcmV0dXJuZWQgbm8gbW9yZSByb3dzLgorICovCitzdGF0aWMgYm9vbAorSnNv blRhYmxlRmV0Y2hSb3coVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFibGVF eGVjQ29udGV4dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29u VGFibGVGZXRjaFJvdyIpOworCisJaWYgKGN4dC0+ZW1wdHkpCisJCXJldHVybiBmYWxzZTsKKwor CXJldHVybiBKc29uVGFibGVTY2FuTmV4dFJvdyhjeHQtPnJvb3QpOworfQorCisvKgorICogSnNv blRhYmxlR2V0VmFsdWUKKyAqCQlSZXR1cm4gdGhlIHZhbHVlIGZvciBjb2x1bW4gbnVtYmVyICdj b2xudW0nIGZvciB0aGUgY3VycmVudCByb3cuCisgKgorICogVGhpcyBsZWFrcyBtZW1vcnksIHNv IGJlIHN1cmUgdG8gcmVzZXQgb2Z0ZW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncworICogY2Fs bGVkLgorICovCitzdGF0aWMgRGF0dW0KK0pzb25UYWJsZUdldFZhbHVlKFRhYmxlRnVuY1NjYW5T dGF0ZSAqc3RhdGUsIGludCBjb2xudW0sCisJCQkJICBPaWQgdHlwaWQsIGludDMyIHR5cG1vZCwg Ym9vbCAqaXNudWxsKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlHZXRKc29u VGFibGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZUdldFZhbHVlIik7CisJRXhwckNvbnRl eHQgKmVjb250ZXh0ID0gc3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OworCUV4cHJTdGF0ZSAg KmVzdGF0ZSA9IGxpc3RfbnRoKHN0YXRlLT5jb2x2YWxleHBycywgY29sbnVtKTsKKwlKc29uVGFi bGVTY2FuU3RhdGUgKnNjYW4gPSBjeHQtPmNvbGV4cHJzY2Fuc1tjb2xudW1dOworCURhdHVtCQly ZXN1bHQ7CisKKwlpZiAoc2Nhbi0+Y3VycmVudElzTnVsbCkJLyogTlVMTCBmcm9tIG91dGVyL3Vu aW9uIGpvaW4gKi8KKwl7CisJCXJlc3VsdCA9IChEYXR1bSkgMDsKKwkJKmlzbnVsbCA9IHRydWU7 CisJfQorCWVsc2UgaWYgKGVzdGF0ZSkJCQkvKiByZWd1bGFyIGNvbHVtbiAqLworCXsKKwkJRGF0 dW0JCXNhdmVkX2Nhc2VWYWx1ZSA9IGVjb250ZXh0LT5jYXNlVmFsdWVfZGF0dW07CisJCWJvb2wJ CXNhdmVkX2Nhc2VJc051bGwgPSBlY29udGV4dC0+Y2FzZVZhbHVlX2lzTnVsbDsKKworCQkvKiBQ YXNzIHRoZSB2YWx1ZSBmb3IgQ2FzZVRlc3RFeHByIHRoYXQgbWF5IGJlIHByZXNlbnQgaW4gY29s ZXhwciAqLworCQllY29udGV4dC0+Y2FzZVZhbHVlX2RhdHVtID0gc2Nhbi0+Y3VycmVudDsKKwkJ ZWNvbnRleHQtPmNhc2VWYWx1ZV9pc051bGwgPSBmYWxzZTsKKworCQlyZXN1bHQgPSBFeGVjRXZh bEV4cHIoZXN0YXRlLCBlY29udGV4dCwgaXNudWxsKTsKKworCQllY29udGV4dC0+Y2FzZVZhbHVl X2RhdHVtID0gc2F2ZWRfY2FzZVZhbHVlOworCQllY29udGV4dC0+Y2FzZVZhbHVlX2lzTnVsbCA9 IHNhdmVkX2Nhc2VJc051bGw7CisJfQorCWVsc2UKKwl7CisJCXJlc3VsdCA9IEludDMyR2V0RGF0 dW0oc2Nhbi0+b3JkaW5hbCk7CS8qIG9yZGluYWxpdHkgY29sdW1uICovCisJCSppc251bGwgPSBm YWxzZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSnNvblRhYmxlRGVzdHJv eU9wYXF1ZQorICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlRGVzdHJveU9wYXF1ZShUYWJsZUZ1 bmNTY2FuU3RhdGUgKnN0YXRlKQoreworCUpzb25UYWJsZUV4ZWNDb250ZXh0ICpjeHQgPQorCQlH ZXRKc29uVGFibGVFeGVjQ29udGV4dChzdGF0ZSwgIkpzb25UYWJsZURlc3Ryb3lPcGFxdWUiKTsK KworCS8qIG5vdCB2YWxpZCBhbnltb3JlICovCisJY3h0LT5tYWdpYyA9IDA7CisKKwlzdGF0ZS0+ b3BhcXVlID0gTlVMTDsKK30KKworY29uc3QgVGFibGVGdW5jUm91dGluZSBKc29uYlRhYmxlUm91 dGluZSA9Cit7CisJSnNvblRhYmxlSW5pdE9wYXF1ZSwKKwlKc29uVGFibGVTZXREb2N1bWVudCwK KwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlKc29uVGFibGVGZXRjaFJvdywKKwlKc29uVGFibGVH ZXRWYWx1ZSwKKwlKc29uVGFibGVEZXN0cm95T3BhcXVlCit9OwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1 dGlscy5jCmluZGV4IGQyMGI5Njc4MGMuLjI3NTk4YzJkMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKQEAgLTUyMiw2ICs1MjIsOCBAQCBzdGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRp b25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1 ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9wYXRoX3NwZWMoTm9k ZSAqcGF0aF9zcGVjLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJICAgYm9vbCBz aG93aW1wbGljaXQpOworc3RhdGljIHZvaWQgZ2V0X2pzb25fdGFibGVfY29sdW1ucyhUYWJsZUZ1 bmMgKnRmLCBKc29uVGFibGVQYXJlbnQgKm5vZGUsCisJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0 ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQogCkBAIC04NjI3LDcgKzg2MjksOCBAQCBn ZXRfanNvbl9iZWhhdmlvcihKc29uQmVoYXZpb3IgKmJlaGF2aW9yLCBkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQsCiAvKgogICogZ2V0X2pzb25fZXhwcl9vcHRpb25zCiAgKgotICogUGFyc2UgYmFj ayBjb21tb24gb3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMu CisgKiBQYXJzZSBiYWNrIGNvbW1vbiBvcHRpb25zIGZvciBKU09OX1FVRVJZLCBKU09OX1ZBTFVF LCBKU09OX0VYSVNUUyBhbmQKKyAqIEpTT05fVEFCTEUgY29sdW1ucy4KICAqLwogc3RhdGljIHZv aWQKIGdldF9qc29uX2V4cHJfb3B0aW9ucyhKc29uRXhwciAqanNleHByLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQsCkBAIC05ODc1LDYgKzk4NzgsOSBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5v ZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgog CQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1ZBTFVFKCIpOwogCQkJCQkJ YnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBKc29u RXhwciB0eXBlOiAlZCIsIGpleHByLT5vcCk7CisJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQln ZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0 KTsKQEAgLTExMjMxLDE2ICsxMTIzNywxNCBAQCBnZXRfc3VibGlua19leHByKFN1YkxpbmsgKnN1 YmxpbmssIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKIAogCiAvKiAtLS0tLS0tLS0tCi0gKiBn ZXRfdGFibGVmdW5jCQkJLSBQYXJzZSBiYWNrIGEgdGFibGUgZnVuY3Rpb24KKyAqIGdldF94bWx0 YWJsZQkJCS0gUGFyc2UgYmFjayBhIFhNTFRBQkxFIGZ1bmN0aW9uCiAgKiAtLS0tLS0tLS0tCiAg Ki8KIHN0YXRpYyB2b2lkCi1nZXRfdGFibGVmdW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCitnZXRfeG1sdGFibGUoVGFibGVGdW5j ICp0ZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIHsKIAlT dHJpbmdJbmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKIAotCS8qIFhNTFRBQkxFIGlzIHRoZSBvbmx5 IGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiAgKi8KLQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCAiWE1MVEFCTEUoIik7CiAKIAlpZiAodGYtPm5zX3VyaXMgIT0gTklMKQpAQCAtMTEzMzEs NiArMTEzMzUsMjcxIEBAIGdldF90YWJsZWZ1bmMoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKIAlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcpJyk7CiB9CiAKKy8qCisgKiBnZXRfanNvbl9uZXN0ZWRfY29sdW1ucyAtIFBhcnNlIGJh Y2sgbmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucworICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25f dGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgTm9kZSAqbm9kZSwKKwkJCQkJCQkg IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQsCisJCQkJCQkJICBi b29sIG5lZWRjb21tYSkKK3sKKwlpZiAoSXNBKG5vZGUsIEpzb25UYWJsZVNpYmxpbmcpKQorCXsK KwkJSnNvblRhYmxlU2libGluZyAqbiA9IChKc29uVGFibGVTaWJsaW5nICopIG5vZGU7CisKKwkJ Z2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnModGYsIG4tPmxhcmcsIGNvbnRleHQsIHNob3dp bXBsaWNpdCwKKwkJCQkJCQkJCSAgbmVlZGNvbW1hKTsKKwkJZ2V0X2pzb25fdGFibGVfbmVzdGVk X2NvbHVtbnModGYsIG4tPnJhcmcsIGNvbnRleHQsIHNob3dpbXBsaWNpdCwgdHJ1ZSk7CisJfQor CWVsc2UKKwl7CisJCUpzb25UYWJsZVBhcmVudCAqbiA9IGNhc3ROb2RlKEpzb25UYWJsZVBhcmVu dCwgbm9kZSk7CisKKwkJaWYgKG5lZWRjb21tYSkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJywnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcgJyk7CisJCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJORVNURUQgUEFUSCAiLCAw LCAwLCAwKTsKKwkJZ2V0X2NvbnN0X2V4cHIobi0+cGF0aC0+dmFsdWUsIGNvbnRleHQsIC0xKTsK KwkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgQVMgJXMiLCBxdW90ZV9pZGVudGlm aWVyKG4tPnBhdGgtPm5hbWUpKTsKKwkJZ2V0X2pzb25fdGFibGVfY29sdW1ucyh0ZiwgbiwgY29u dGV4dCwgc2hvd2ltcGxpY2l0KTsKKwl9Cit9CisKKy8qCisgKiBnZXRfanNvbl90YWJsZV9wbGFu IC0gUGFyc2UgYmFjayBhIEpTT05fVEFCTEUgcGxhbgorICovCitzdGF0aWMgdm9pZAorZ2V0X2pz b25fdGFibGVfcGxhbihUYWJsZUZ1bmMgKnRmLCBOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQsCisJCQkJCWJvb2wgcGFyZW50aGVzaXplKQoreworCWlmIChwYXJlbnRoZXNpemUp CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKworCWlmIChJc0Eo bm9kZSwgSnNvblRhYmxlU2libGluZykpCisJeworCQlKc29uVGFibGVTaWJsaW5nICpuID0gKEpz b25UYWJsZVNpYmxpbmcgKikgbm9kZTsKKworCQlnZXRfanNvbl90YWJsZV9wbGFuKHRmLCBuLT5s YXJnLCBjb250ZXh0LAorCQkJCQkJCUlzQShuLT5sYXJnLCBKc29uVGFibGVTaWJsaW5nKSB8fAor CQkJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBhcmVudCwgbi0+bGFyZyktPmNoaWxkKTsKKworCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1Ziwgbi0+Y3Jvc3MgPyAiIENST1NTICIg OiAiIFVOSU9OICIpOworCisJCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIG4tPnJhcmcsIGNvbnRl eHQsCisJCQkJCQkJSXNBKG4tPnJhcmcsIEpzb25UYWJsZVNpYmxpbmcpIHx8CisJCQkJCQkJY2Fz dE5vZGUoSnNvblRhYmxlUGFyZW50LCBuLT5yYXJnKS0+Y2hpbGQpOworCX0KKwllbHNlCisJewor CQlKc29uVGFibGVQYXJlbnQgKm4gPSBjYXN0Tm9kZShKc29uVGFibGVQYXJlbnQsIG5vZGUpOwor CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVy KG4tPnBhdGgtPm5hbWUpKTsKKworCQlpZiAobi0+Y2hpbGQpCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoY29udGV4dC0+YnVmLAorCQkJCQkJCQkgICBuLT5vdXRlckpvaW4gPyAiIE9V VEVSICIgOiAiIElOTkVSICIpOworCQkJZ2V0X2pzb25fdGFibGVfcGxhbih0Ziwgbi0+Y2hpbGQs IGNvbnRleHQsCisJCQkJCQkJCUlzQShuLT5jaGlsZCwgSnNvblRhYmxlU2libGluZykpOworCQl9 CisJfQorCisJaWYgKHBhcmVudGhlc2l6ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKScpOworfQorCisvKgorICogZ2V0X2pzb25fdGFibGVfY29sdW1ucyAtIFBhcnNl IGJhY2sgSlNPTl9UQUJMRSBjb2x1bW5zCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl90YWJs ZV9jb2x1bW5zKFRhYmxlRnVuYyAqdGYsIEpzb25UYWJsZVBhcmVudCAqbm9kZSwKKwkJCQkJICAg ZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKK3sKKwlTdHJpbmdJ bmZvCWJ1ZiA9IGNvbnRleHQtPmJ1ZjsKKwlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpz b25FeHByLCB0Zi0+ZG9jZXhwcik7CisJTGlzdENlbGwgICAqbGNfY29sbmFtZTsKKwlMaXN0Q2Vs bCAgICpsY19jb2x0eXBlOworCUxpc3RDZWxsICAgKmxjX2NvbHR5cG1vZDsKKwlMaXN0Q2VsbCAg ICpsY19jb2x2YWxleHByOworCWludAkJCWNvbG51bSA9IDA7CisKKwlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcgJyk7CisJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwgIkNPTFVNTlMg KCIsIDAsIDAsIDApOworCisJaWYgKFBSRVRUWV9JTkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQt PmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7CisKKwlmb3Jmb3VyKGxjX2NvbG5hbWUs IHRmLT5jb2xuYW1lcywKKwkJCWxjX2NvbHR5cGUsIHRmLT5jb2x0eXBlcywKKwkJCWxjX2NvbHR5 cG1vZCwgdGYtPmNvbHR5cG1vZHMsCisJCQlsY19jb2x2YWxleHByLCB0Zi0+Y29sdmFsZXhwcnMp CisJeworCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChsY19jb2xuYW1lKSk7CisJ CUpzb25FeHByICAgKmNvbGV4cHI7CisJCU9pZAkJCXR5cGlkOworCQlpbnQzMgkJdHlwbW9kOwor CQlib29sCQlvcmRpbmFsaXR5OworCQlKc29uQmVoYXZpb3JUeXBlIGRlZmF1bHRfYmVoYXZpb3I7 CisKKwkJdHlwaWQgPSBsZmlyc3Rfb2lkKGxjX2NvbHR5cGUpOworCQl0eXBtb2QgPSBsZmlyc3Rf aW50KGxjX2NvbHR5cG1vZCk7CisJCWNvbGV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbGZpcnN0 KGxjX2NvbHZhbGV4cHIpKTsKKworCQlpZiAoY29sbnVtIDwgbm9kZS0+Y29sTWluKQorCQl7CisJ CQljb2xudW0rKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNvbG51bSA+IG5vZGUtPmNv bE1heCkKKwkJCWJyZWFrOworCisJCWlmIChjb2xudW0gPiBub2RlLT5jb2xNaW4pCisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisKKwkJY29sbnVtKys7CisKKwkJb3JkaW5h bGl0eSA9ICFjb2xleHByOworCisJCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICIiLCAw LCAwLCAwKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzICVzIiwgcXVvdGVfaWRlbnRp Zmllcihjb2xuYW1lKSwKKwkJCQkJCSBvcmRpbmFsaXR5ID8gIkZPUiBPUkRJTkFMSVRZIiA6CisJ CQkJCQkgZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKHR5cGlkLCB0eXBtb2QpKTsKKwkJaWYgKG9y ZGluYWxpdHkpCisJCQljb250aW51ZTsKKworCQlpZiAoY29sZXhwci0+b3AgPT0gSlNPTl9FWElT VFNfT1ApCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIEVYSVNUUyIpOwor CQkJZGVmYXVsdF9iZWhhdmlvciA9IEpTT05fQkVIQVZJT1JfRkFMU0U7CisJCX0KKwkJZWxzZQor CQl7CisJCQlpZiAoY29sZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCkKKwkJCXsKKwkJCQljaGFy CQl0eXBjYXRlZ29yeTsKKwkJCQlib29sCQl0eXBpc3ByZWZlcnJlZDsKKworCQkJCWdldF90eXBl X2NhdGVnb3J5X3ByZWZlcnJlZCh0eXBpZCwgJnR5cGNhdGVnb3J5LCAmdHlwaXNwcmVmZXJyZWQp OworCisJCQkJaWYgKHR5cGNhdGVnb3J5ID09IFRZUENBVEVHT1JZX1NUUklORykKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJCQkJICAgY29sZXhwci0+Zm9ybWF0LT5m b3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfSlNPTkIgPworCQkJCQkJCQkJCSAgICIgRk9STUFUIEpT T05CIiA6ICIgRk9STUFUIEpTT04iKTsKKwkJCX0KKworCQkJZGVmYXVsdF9iZWhhdmlvciA9IEpT T05fQkVIQVZJT1JfTlVMTDsKKwkJfQorCisJCWlmIChqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09 IEpTT05fQkVIQVZJT1JfRVJST1IpCisJCQlkZWZhdWx0X2JlaGF2aW9yID0gSlNPTl9CRUhBVklP Ul9FUlJPUjsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBQQVRIICIpOworCisJ CWdldF9qc29uX3BhdGhfc3BlYyhjb2xleHByLT5wYXRoX3NwZWMsIGNvbnRleHQsIHNob3dpbXBs aWNpdCk7CisKKwkJZ2V0X2pzb25fZXhwcl9vcHRpb25zKGNvbGV4cHIsIGNvbnRleHQsIGRlZmF1 bHRfYmVoYXZpb3IpOworCX0KKworCWlmIChub2RlLT5jaGlsZCkKKwkJZ2V0X2pzb25fdGFibGVf bmVzdGVkX2NvbHVtbnModGYsIG5vZGUtPmNoaWxkLCBjb250ZXh0LCBzaG93aW1wbGljaXQsCisJ CQkJCQkJCQkgIG5vZGUtPmNvbE1heCA+PSBub2RlLT5jb2xNaW4pOworCisJaWYgKFBSRVRUWV9J TkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVsIC09IFBSRVRUWUlOREVOVF9W QVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAiKSIsIDAsIDAsIDApOworfQor CisvKiAtLS0tLS0tLS0tCisgKiBnZXRfanNvbl90YWJsZQkJCS0gUGFyc2UgYmFjayBhIEpTT05f VEFCTEUgZnVuY3Rpb24KKyAqIC0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29u X3RhYmxlKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93 aW1wbGljaXQpCit7CisJU3RyaW5nSW5mbwlidWYgPSBjb250ZXh0LT5idWY7CisJSnNvbkV4cHIg ICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgdGYtPmRvY2V4cHIpOworCUpzb25UYWJsZVBh cmVudCAqcm9vdCA9IGNhc3ROb2RlKEpzb25UYWJsZVBhcmVudCwgdGYtPnBsYW4pOworCisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1RBQkxFKCIpOworCisJaWYgKFBSRVRUWV9J TkRFTlQoY29udGV4dCkpCisJCWNvbnRleHQtPmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9W QVI7CisKKwlhcHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAiIiwgMCwgMCwgMCk7CisKKwln ZXRfcnVsZV9leHByKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCwgc2hvd2ltcGxpY2l0 KTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKworCWdldF9jb25zdF9l eHByKHJvb3QtPnBhdGgtPnZhbHVlLCBjb250ZXh0LCAtMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBBUyAlcyIsIHF1b3RlX2lkZW50aWZpZXIocm9vdC0+cGF0aC0+bmFtZSkpOworCisJ aWYgKGpleHByLT5wYXNzaW5nX3ZhbHVlcykKKwl7CisJCUxpc3RDZWxsICAgKmxjMSwKKwkJCQkg ICAqbGMyOworCQlib29sCQluZWVkY29tbWEgPSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcgJyk7CisJCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJQQVNTSU5H ICIsIDAsIDAsIDApOworCisJCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4 dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5ERU5UX1ZBUjsKKworCQlmb3Jib3RoKGxjMSwgamV4 cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJbGMyLCBqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCXsK KwkJCWlmIChuZWVkY29tbWEpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIp OworCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKworCQkJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4 dCwgIiIsIDAsIDAsIDApOworCisJCQlnZXRfcnVsZV9leHByKChOb2RlICopIGxmaXJzdChsYzIp LCBjb250ZXh0LCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBBUyAlcyIsCisJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoKGxmaXJzdF9ub2RlKFN0cmluZywgbGMxKSktPnN2YWwp CisJCQkJKTsKKwkJfQorCisJCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQkJY29udGV4 dC0+aW5kZW50TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsKKwl9CisKKwlnZXRfanNvbl90YWJs ZV9jb2x1bW5zKHRmLCByb290LCBjb250ZXh0LCBzaG93aW1wbGljaXQpOworCisJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoYnVmLCAnICcpOworCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICJQ TEFOICIsIDAsIDAsIDApOworCWdldF9qc29uX3RhYmxlX3BsYW4odGYsIChOb2RlICopIHJvb3Qs IGNvbnRleHQsIHRydWUpOworCisJaWYgKGpleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9C RUhBVklPUl9FTVBUWSkKKwkJZ2V0X2pzb25fYmVoYXZpb3IoamV4cHItPm9uX2Vycm9yLCBjb250 ZXh0LCAiRVJST1IiKTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0 LT5pbmRlbnRMZXZlbCAtPSBQUkVUVFlJTkRFTlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtleXdv cmQoY29udGV4dCwgIikiLCAwLCAwLCAwKTsKK30KKworLyogLS0tLS0tLS0tLQorICogZ2V0X3Rh YmxlZnVuYwkJCS0gUGFyc2UgYmFjayBhIHRhYmxlIGZ1bmN0aW9uCisgKiAtLS0tLS0tLS0tCisg Ki8KK3N0YXRpYyB2b2lkCitnZXRfdGFibGVmdW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJLyogWE1MVEFCTEUgYW5kIEpT T05fVEFCTEUgYXJlIHRoZSBvbmx5IGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucy4gICovCisKKwlp ZiAodGYtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSkKKwkJZ2V0X3htbHRhYmxlKHRmLCBjb250 ZXh0LCBzaG93aW1wbGljaXQpOworCWVsc2UgaWYgKHRmLT5mdW5jdHlwZSA9PSBURlRfSlNPTl9U QUJMRSkKKwkJZ2V0X2pzb25fdGFibGUodGYsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisK IC8qIC0tLS0tLS0tLS0KICAqIGdldF9mcm9tX2NsYXVzZQkJCS0gUGFyc2UgYmFjayBhIEZST00g Y2xhdXNlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA2MWQ5N2IzMGJjLi5mZGRiYjg1NzVh IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTg4Myw2ICsxODgzLDggQEAgdHlwZWRlZiBzdHJ1 Y3QgVGFibGVGdW5jU2NhblN0YXRlCiAJRXhwclN0YXRlICAqcm93ZXhwcjsJCS8qIHN0YXRlIGZv ciByb3ctZ2VuZXJhdGluZyBleHByZXNzaW9uICovCiAJTGlzdAkgICAqY29sZXhwcnM7CQkvKiBz dGF0ZSBmb3IgY29sdW1uLWdlbmVyYXRpbmcgZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKmNvbGRl ZmV4cHJzOwkvKiBzdGF0ZSBmb3IgY29sdW1uIGRlZmF1bHQgZXhwcmVzc2lvbnMgKi8KKwlMaXN0 CSAgICpjb2x2YWxleHByczsJLyogc3RhdGUgZm9yIGNvbHVtbiB2YWx1ZSBleHByZXNzaW9uICov CisJTGlzdAkgICAqcGFzc2luZ3ZhbGV4cHJzOwkvKiBzdGF0ZSBmb3IgUEFTU0lORyBhcmd1bWVu dCBleHByZXNzaW9uICovCiAJTGlzdAkgICAqbnNfbmFtZXM7CQkvKiBzYW1lIGFzIFRhYmxlRnVu Yy5uc19uYW1lcyAqLwogCUxpc3QJICAgKm5zX3VyaXM7CQkvKiBsaXN0IG9mIHN0YXRlcyBvZiBu YW1lc3BhY2UgVVJJIGV4cHJzICovCiAJQml0bWFwc2V0ICAqbm90bnVsbHM7CQkvKiBudWxsYWJp bGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBjb2x1bW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5k ZXggYTg1MGExOTI4Yi4uYTBiODY0ZGVkYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv bWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTExMyw2 ICsxMTMsOCBAQCBleHRlcm4gSnNvbkZvcm1hdCAqbWFrZUpzb25Gb3JtYXQoSnNvbkZvcm1hdFR5 cGUgdHlwZSwgSnNvbkVuY29kaW5nIGVuY29kaW5nLAogZXh0ZXJuIEpzb25WYWx1ZUV4cHIgKm1h a2VKc29uVmFsdWVFeHByKEV4cHIgKnJhd19leHByLCBFeHByICpmb3JtYXR0ZWRfZXhwciwKIAkJ CQkJCQkJCQlKc29uRm9ybWF0ICpmb3JtYXQpOwogZXh0ZXJuIEpzb25CZWhhdmlvciAqbWFrZUpz b25CZWhhdmlvcihKc29uQmVoYXZpb3JUeXBlIHR5cGUsIE5vZGUgKmV4cHIsIGludCBsb2NhdGlv bik7CitleHRlcm4gTm9kZSAqbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSnNvblRhYmxlUGxhbkpv aW5UeXBlIHR5cGUsCisJCQkJCQkJCQkgTm9kZSAqcGxhbjEsIE5vZGUgKnBsYW4yLCBpbnQgbG9j YXRpb24pOwogZXh0ZXJuIE5vZGUgKm1ha2VKc29uS2V5VmFsdWUoTm9kZSAqa2V5LCBOb2RlICp2 YWx1ZSk7CiBleHRlcm4gTm9kZSAqbWFrZUpzb25Jc1ByZWRpY2F0ZShOb2RlICpleHByLCBKc29u Rm9ybWF0ICpmb3JtYXQsCiAJCQkJCQkJCSBKc29uVmFsdWVUeXBlIGl0ZW1fdHlwZSwgYm9vbCB1 bmlxdWVfa2V5cywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBjMWY5ZWY4NDRlLi42NTJiNjFh MWQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNzMzLDYgKzE3MzMsMTkgQEAgdHlwZWRl ZiBlbnVtIEpzb25RdW90ZXMKICAqLwogdHlwZWRlZiBjaGFyICpKc29uUGF0aFNwZWM7CiAKKy8q CisgKiBKc29uVGFibGVDb2x1bW5UeXBlIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBKU09OX1RBQkxF IGNvbHVtbiB0eXBlcworICovCit0eXBlZGVmIGVudW0gSnNvblRhYmxlQ29sdW1uVHlwZQorewor CUpUQ19GT1JfT1JESU5BTElUWSwKKwlKVENfUkVHVUxBUiwKKwlKVENfRVhJU1RTLAorCUpUQ19G T1JNQVRURUQsCisJSlRDX05FU1RFRCwKK30gSnNvblRhYmxlQ29sdW1uVHlwZTsKKwogLyoKICAq IEpzb25PdXRwdXQgLQogICoJCXJlcHJlc2VudGF0aW9uIG9mIEpTT04gb3V0cHV0IGNsYXVzZSAo UkVUVVJOSU5HIHR5cGUgW0ZPUk1BVCBmb3JtYXRdKQpAQCAtMTc4Niw2ICsxNzk5LDgzIEBAIHR5 cGVkZWYgc3RydWN0IEpzb25GdW5jRXhwcgogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9j YXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gSnNvbkZ1bmNFeHByOwogCisvKgorICogSnNv blRhYmxlQ29sdW1uIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05f VEFCTEUgY29sdW1uCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZUNvbHVtbgoreworCU5v ZGVUYWcJCXR5cGU7CisJSnNvblRhYmxlQ29sdW1uVHlwZSBjb2x0eXBlOwkvKiBjb2x1bW4gdHlw ZSAqLworCWNoYXIJICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KKwlUeXBlTmFtZSAgICp0 eXBlTmFtZTsJCS8qIGNvbHVtbiB0eXBlIG5hbWUgKi8KKwljaGFyCSAgICpwYXRoc3BlYzsJCS8q IHBhdGggc3BlY2lmaWNhdGlvbiwgaWYgYW55ICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkvKiBw YXRoIG5hbWUsIGlmIGFueSAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBKU09OIGZvcm1h dCBjbGF1c2UsIGlmIHNwZWNpZmllZCAqLworCUpzb25XcmFwcGVyIHdyYXBwZXI7CQkvKiBXUkFQ UEVSIGJlaGF2aW9yIGZvciBmb3JtYXR0ZWQgY29sdW1ucyAqLworCUpzb25RdW90ZXMJcXVvdGVz OwkJCS8qIG9taXQgb3Iga2VlcCBxdW90ZXMgb24gc2NhbGFyIHN0cmluZ3M/ICovCisJTGlzdAkg ICAqY29sdW1uczsJCS8qIG5lc3RlZCBjb2x1bW5zICovCisJSnNvbkJlaGF2aW9yICpvbl9lbXB0 eTsJCS8qIE9OIEVNUFRZIGJlaGF2aW9yICovCisJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJCS8q IE9OIEVSUk9SIGJlaGF2aW9yICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlv biwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uVGFibGVDb2x1bW47CisKKy8qCisgKiBKc29u VGFibGVQbGFuVHlwZSAtCisgKgkJZmxhZ3MgZm9yIEpTT05fVEFCTEUgcGxhbiBub2RlIHR5cGVz IHJlcHJlc2VudGF0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBKc29uVGFibGVQbGFuVHlwZQorewor CUpTVFBfREVGQVVMVCwKKwlKU1RQX1NJTVBMRSwKKwlKU1RQX0pPSU5FRCwKK30gSnNvblRhYmxl UGxhblR5cGU7CisKKy8qCisgKiBKc29uVGFibGVQbGFuSm9pblR5cGUgLQorICoJCWZsYWdzIGZv ciBKU09OX1RBQkxFIGpvaW4gdHlwZXMgcmVwcmVzZW50YXRpb24KKyAqLwordHlwZWRlZiBlbnVt IEpzb25UYWJsZVBsYW5Kb2luVHlwZQoreworCUpTVFBKX0lOTkVSID0gMHgwMSwKKwlKU1RQSl9P VVRFUiA9IDB4MDIsCisJSlNUUEpfQ1JPU1MgPSAweDA0LAorCUpTVFBKX1VOSU9OID0gMHgwOCwK K30gSnNvblRhYmxlUGxhbkpvaW5UeXBlOworCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQbGFu IEpzb25UYWJsZVBsYW47CisKKy8qCisgKiBKc29uVGFibGVQbGFuIC0KKyAqCQl1bnRyYW5zZm9y bWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVEFCTEUgcGxhbiBub2RlCisgKi8KK3N0cnVjdCBK c29uVGFibGVQbGFuCit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uVGFibGVQbGFuVHlwZSBwbGFu X3R5cGU7CS8qIHBsYW4gdHlwZSAqLworCUpzb25UYWJsZVBsYW5Kb2luVHlwZSBqb2luX3R5cGU7 CS8qIGpvaW4gdHlwZSAoZm9yIGpvaW5lZCBwbGFuIG9ubHkpICovCisJSnNvblRhYmxlUGxhbiAq cGxhbjE7CQkvKiBmaXJzdCBqb2luZWQgcGxhbiAqLworCUpzb25UYWJsZVBsYW4gKnBsYW4yOwkJ Lyogc2Vjb25kIGpvaW5lZCBwbGFuICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkvKiBwYXRoIG5h bWUgKGZvciBzaW1wbGUgcGxhbiBvbmx5KSAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4g bG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK307CisKKy8qCisgKiBKc29uVGFibGUgLQor ICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9UQUJMRQorICovCit0eXBl ZGVmIHN0cnVjdCBKc29uVGFibGUKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25Db21tb24gKmNv bW1vbjsJCQkvKiBjb21tb24gSlNPTiBwYXRoIHN5bnRheCBmaWVsZHMgKi8KKwlMaXN0CSAgICpj b2x1bW5zOwkJLyogbGlzdCBvZiBKc29uVGFibGVDb2x1bW4gKi8KKwlKc29uVGFibGVQbGFuICpw bGFuOwkJLyogam9pbiBwbGFuLCBpZiBzcGVjaWZpZWQgKi8KKwlKc29uQmVoYXZpb3IgKm9uX2Vy cm9yOwkJLyogT04gRVJST1IgYmVoYXZpb3IsIGlmIHNwZWNpZmllZCAqLworCUFsaWFzCSAgICph bGlhczsJCQkvKiB0YWJsZSBhbGlhcyBpbiBGUk9NIGNsYXVzZSAqLworCWJvb2wJCWxhdGVyYWw7 CQkvKiBkb2VzIGl0IGhhdmUgTEFURVJBTCBwcmVmaXg/ICovCisJaW50CQkJbG9jYXRpb247CQkv KiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uVGFibGU7CisKIC8q CiAgKiBKc29uS2V5VmFsdWUgLQogICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2Yg SlNPTiBvYmplY3Qga2V5LXZhbHVlIHBhaXIgZm9yCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCmluZGV4IDhm MzcyM2VmNGMuLmYwMjZiYjczMmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1u b2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC04Niw4ICs4Niwx NCBAQCB0eXBlZGVmIHN0cnVjdCBSYW5nZVZhcgogCWludAkJCWxvY2F0aW9uOwogfSBSYW5nZVZh cjsKIAordHlwZWRlZiBlbnVtIFRhYmxlRnVuY1R5cGUKK3sKKwlURlRfWE1MVEFCTEUsCisJVEZU X0pTT05fVEFCTEUKK30gVGFibGVGdW5jVHlwZTsKKwogLyoKLSAqIFRhYmxlRnVuYyAtIG5vZGUg Zm9yIGEgdGFibGUgZnVuY3Rpb24sIHN1Y2ggYXMgWE1MVEFCTEUuCisgKiBUYWJsZUZ1bmMgLSBu b2RlIGZvciBhIHRhYmxlIGZ1bmN0aW9uLCBzdWNoIGFzIFhNTFRBQkxFIG9yIEpTT05fVEFCTEUu CiAgKgogICogRW50cmllcyBpbiB0aGUgbnNfbmFtZXMgbGlzdCBhcmUgZWl0aGVyIFN0cmluZyBu b2RlcyBjb250YWluaW5nCiAgKiBsaXRlcmFsIG5hbWVzcGFjZSBuYW1lcywgb3IgTlVMTCBwb2lu dGVycyB0byByZXByZXNlbnQgREVGQVVMVC4KQEAgLTk1LDYgKzEwMSw4IEBAIHR5cGVkZWYgc3Ry dWN0IFJhbmdlVmFyCiB0eXBlZGVmIHN0cnVjdCBUYWJsZUZ1bmMKIHsKIAlOb2RlVGFnCQl0eXBl OworCS8qIFhNTFRBQkxFIG9yIEpTT05fVEFCTEUgKi8KKwlUYWJsZUZ1bmNUeXBlIGZ1bmN0eXBl OwogCS8qIGxpc3Qgb2YgbmFtZXNwYWNlIFVSSSBleHByZXNzaW9ucyAqLwogCUxpc3QJICAgKm5z X3VyaXMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8qIGxpc3Qgb2YgbmFt ZXNwYWNlIG5hbWVzIG9yIE5VTEwgKi8KQEAgLTExNSw4ICsxMjMsMTQgQEAgdHlwZWRlZiBzdHJ1 Y3QgVGFibGVGdW5jCiAJTGlzdAkgICAqY29sZXhwcnM7CiAJLyogbGlzdCBvZiBjb2x1bW4gZGVm YXVsdCBleHByZXNzaW9ucyAqLwogCUxpc3QJICAgKmNvbGRlZmV4cHJzIHBnX25vZGVfYXR0cihx dWVyeV9qdW1ibGVfaWdub3JlKTsKKwkvKiBsaXN0IG9mIGNvbHVtbiB2YWx1ZSBleHByZXNzaW9u cyAqLworCUxpc3QJICAgKmNvbHZhbGV4cHJzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdu b3JlKTsKKwkvKiBsaXN0IG9mIFBBU1NJTkcgYXJndW1lbnQgZXhwcmVzc2lvbnMgKi8KKwlMaXN0 CSAgICpwYXNzaW5ndmFsZXhwcnMgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwog CS8qIG51bGxhYmlsaXR5IGZsYWcgZm9yIGVhY2ggb3V0cHV0IGNvbHVtbiAqLwogCUJpdG1hcHNl dCAgKm5vdG51bGxzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKwkvKiBKU09O X1RBQkxFIHBsYW4gKi8KKwlOb2RlCSAgICpwbGFuIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVf aWdub3JlKTsKIAkvKiBjb3VudHMgZnJvbSAwOyAtMSBpZiBub25lIHNwZWNpZmllZCAqLwogCWlu dAkJCW9yZGluYWxpdHljb2wgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwogCS8q IHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCkBAIC0xNTUyLDcgKzE1NjYsOCBA QCB0eXBlZGVmIGVudW0gSnNvbkV4cHJPcAogewogCUpTT05fVkFMVUVfT1AsCQkJCS8qIEpTT05f VkFMVUUoKSAqLwogCUpTT05fUVVFUllfT1AsCQkJCS8qIEpTT05fUVVFUlkoKSAqLwotCUpTT05f RVhJU1RTX09QCQkJCS8qIEpTT05fRVhJU1RTKCkgKi8KKwlKU09OX0VYSVNUU19PUCwJCQkJLyog SlNPTl9FWElTVFMoKSAqLworCUpTT05fVEFCTEVfT1AJCQkJLyogSlNPTl9UQUJMRSgpICovCiB9 IEpzb25FeHByT3A7CiAKIC8qCkBAIC0xNzc3LDYgKzE3OTIsNDggQEAgdHlwZWRlZiBzdHJ1Y3Qg SnNvbkV4cHIKIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1 bmtub3duICovCiB9IEpzb25FeHByOwogCisvKgorICogSnNvblRhYmxlUGF0aAorICoJCUEgSlNP TiBwYXRoIGV4cHJlc3Npb24gdG8gYmUgY29tcHV0ZWQgYXMgcGFydCBvZiBldmFsdWF0aW5nCisg KgkJYSBKU09OX1RBQkxFIHBsYW4gbm9kZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQ YXRoCit7CisJTm9kZVRhZwkJdHlwZTsKKworCUNvbnN0CSAgICp2YWx1ZTsKKwljaGFyCSAgICpu YW1lOworfQkJCUpzb25UYWJsZVBhdGg7CisKKy8qCisgKiBKc29uVGFibGVQYXJlbnQgLQorICoJ CXRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIHBhcmVudCBKU09OX1RBQkxFIHBsYW4gbm9k ZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQYXJlbnQKK3sKKwlOb2RlVGFnCQl0eXBl OworCUpzb25UYWJsZVBhdGggKnBhdGg7CisJTm9kZQkgICAqY2hpbGQ7CQkJLyogbmVzdGVkIGNv bHVtbnMsIGlmIGFueSAqLworCWJvb2wJCW91dGVySm9pbjsJCS8qIG91dGVyIG9yIGlubmVyIGpv aW4gZm9yIG5lc3RlZCBjb2x1bW5zPyAqLworCWludAkJCWNvbE1pbjsJCQkvKiBtaW4gY29sdW1u IGluZGV4IGluIHRoZSByZXN1bHRpbmcgY29sdW1uCisJCQkJCQkJCSAqIGxpc3QgKi8KKwlpbnQJ CQljb2xNYXg7CQkJLyogbWF4IGNvbHVtbiBpbmRleCBpbiB0aGUgcmVzdWx0aW5nIGNvbHVtbgor CQkJCQkJCQkgKiBsaXN0ICovCisJYm9vbAkJZXJyb3JPbkVycm9yOwkvKiBFUlJPUi9FTVBUWSBP TiBFUlJPUiBiZWhhdmlvciAqLworfSBKc29uVGFibGVQYXJlbnQ7CisKKy8qCisgKiBKc29uVGFi bGVTaWJsaW5nIC0KKyAqCQl0cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBqb2luZWQgc2li bGluZyBKU09OX1RBQkxFIHBsYW4gbm9kZQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVT aWJsaW5nCit7CisJTm9kZVRhZwkJdHlwZTsKKwlOb2RlCSAgICpsYXJnOwkJCS8qIGxlZnQgam9p biBub2RlICovCisJTm9kZQkgICAqcmFyZzsJCQkvKiByaWdodCBqb2luIG5vZGUgKi8KKwlib29s CQljcm9zczsJCQkvKiBjcm9zcyBvciB1bmlvbiBqb2luPyAqLworfSBKc29uVGFibGVTaWJsaW5n OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKiBOdWxsVGVzdAogICoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApp bmRleCAwOTU0ZDlmYzdiLi5mODhhNmM5YWM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJz ZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNDIsNiAr MjQyLDcgQEAgUEdfS0VZV09SRCgianNvbl9vYmplY3RhZ2ciLCBKU09OX09CSkVDVEFHRywgQ09M X05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fcXVlcnkiLCBKU09O X1FVRVJZLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9z Y2FsYXIiLCBKU09OX1NDQUxBUiwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImpzb25fc2VyaWFsaXplIiwgSlNPTl9TRVJJQUxJWkUsIENPTF9OQU1FX0tFWVdPUkQs IEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJqc29uX3RhYmxlIiwgSlNPTl9UQUJMRSwgQ09MX05B TUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fdmFsdWUiLCBKU09OX1ZB TFVFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2VlcCIsIEtF RVAsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImtleSIsIEtF WSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMjg0LDYgKzI4NSw3IEBAIFBH X0tFWVdPUkQoIm5hbWVzIiwgTkFNRVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoIm5hdGlvbmFsIiwgTkFUSU9OQUwsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJuYXR1cmFsIiwgTkFUVVJBTCwgVFlQRV9GVU5DX05BTUVfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5jaGFyIiwgTkNIQVIsIENPTF9OQU1FX0tF WVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJuZXN0ZWQiLCBORVNURUQsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5ldyIsIE5FVywgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmV4dCIsIE5FWFQsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5mYyIsIE5GQywgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMzM0LDcgKzMzNiw5IEBAIFBHX0tFWVdPUkQoInBh cnRpYWwiLCBQQVJUSUFMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJwYXJ0aXRpb24iLCBQQVJUSVRJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoInBhc3NpbmciLCBQQVNTSU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXNzd29yZCIsIFBBU1NXT1JELCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJwYXRoIiwgUEFUSCwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicGxhY2luZyIsIFBMQUNJTkcsIFJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJwbGFuIiwgUExBTiwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicGxhbnMiLCBQTEFOUywgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicG9saWN5IiwgUE9MSUNZ LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwb3NpdGlvbiIs IFBPU0lUSU9OLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNl X2NsYXVzZS5oCmluZGV4IDhlMjY0ODJkYjQuLjcxNTJhOGVmNDggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9jbGF1c2UuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFy c2VfY2xhdXNlLmgKQEAgLTUxLDQgKzUxLDcgQEAgZXh0ZXJuIExpc3QgKmFkZFRhcmdldFRvU29y dExpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAogZXh0ZXJuIEluZGV4 IGFzc2lnblNvcnRHcm91cFJlZihUYXJnZXRFbnRyeSAqdGxlLCBMaXN0ICp0bGlzdCk7CiBleHRl cm4gYm9vbCB0YXJnZXRJc0luU29ydExpc3QoVGFyZ2V0RW50cnkgKnRsZSwgT2lkIHNvcnRvcCwg TGlzdCAqc29ydExpc3QpOwogCisvKiBmdW5jdGlvbnMgaW4gcGFyc2VfanNvbnRhYmxlLmMgKi8K K2V4dGVybiBQYXJzZU5hbWVzcGFjZUl0ZW0gKnRyYW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25UYWJsZSAqanQpOworCiAjZW5kaWYJCQkJCQkJLyogUEFSU0VfQ0xBVVNF X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5j bHVkZS91dGlscy9qc29ucGF0aC5oCmluZGV4IDVhMzcxMzM4NDcuLjdlYjBjY2Y0ZTQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvanNvbnBhdGguaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBKU09OUEFUSF9ICiAKICNp bmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvdGFibGVmdW5jLmgiCiAjaW5jbHVk ZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUgIm5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1 ZGUgInV0aWxzL2pzb25iLmgiCkBAIC0yODgsNCArMjg5LDYgQEAgZXh0ZXJuIERhdHVtIEpzb25Q YXRoUXVlcnkoRGF0dW0gamIsIEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKIGV4 dGVybiBKc29uYlZhbHVlICpKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJv b2wgKmVtcHR5LAogCQkJCQkJCQkgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOwogCitleHRlcm4g UEdETExJTVBPUlQgY29uc3QgVGFibGVGdW5jUm91dGluZSBKc29uYlRhYmxlUm91dGluZTsKKwog I2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25fc3FsanNv bi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25fc3FsanNvbi5vdXQKaW5kZXgg OGI4NzU4MDc1Mi4uOTk1ZjI2NzQwNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qc29uX3NxbGpzb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNv bl9zcWxqc29uLm91dApAQCAtMTYsMyArMTYsOSBAQCBFUlJPUjogIEpTT05fUVVFUlkoKSBpcyBu b3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBlCiBMSU5FIDE6IFNFTEVDVCBKU09O X1FVRVJZKE5VTEwgRk9STUFUIEpTT04sICckJyk7CiAgICAgICAgICAgICAgICBeCiBISU5UOiAg VHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCistLSBKU09OX1RBQkxFCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnIENPTFVNTlMgKGZvbyB0ZXh0 KSk7CitFUlJPUjogIEpTT05fVEFCTEUoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUg anNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1BVCBK U09OLCAnJCcgQ09MVU1OUyAoZm9vIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorSElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKaW5kZXggOGRjZGI5MGZjOC4uYTNi YTQ0Y2YwMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxq c29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0 CkBAIC0xMDY5LDMgKzEwNjksMTE4OSBAQCBDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRh YmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAwIHRvICQuYSA/IChALmRhdGV0aQogRVJST1I6 ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUK IENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICck WzEsICQuYSA/IChALmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6 dGltZSBBUyB4KSk7CiBEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKKy0tIEpTT05f VEFCTEUKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9ubHkgaW4gRlJP TSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOworRVJST1I6ICBzeW50YXgg ZXJyb3IgYXQgb3IgbmVhciAiKCIKK0xJTkUgMTogU0VMRUNUIEpTT05fVEFCTEUoJ1tdJywgJyQn KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBTaG91bGQgZmFpbCAobm8gY29sdW1u cykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMLCAnJCcgQ09MVU1OUyAoKSk7CitFUlJP UjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgorTElORSAxOiBTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSAo TlVMTDo6anNvbmIsICckJyBDT0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwgdjIpOwor RVJST1I6ICBKU09OX1RBQkxFIGZ1bmN0aW9uIGhhcyAxIGNvbHVtbnMgYXZhaWxhYmxlIGJ1dCAy IGNvbHVtbnMgc3BlY2lmaWVkCistLSBOVUxMID0+IGVtcHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBDT0xVTU5TIChmb28gaW50KSkgYmFyOworIGZv byAKKy0tLS0tCisoMCByb3dzKQorCistLQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRIICckJywgZm9vIGludCkpIGJhcjsK KyBpdGVtIHwgZm9vIAorLS0tLS0tKy0tLS0tCisgIDEyMyB8ICAgIAorKDEgcm93KQorCistLSBK U09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5CitDUkVBVEUgRE9NQUlOIGpzb25iX3Rlc3Rf ZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdmb28nKTsKK0NSRUFURSBURU1QIFRBQkxF IGpzb25fdGFibGVfdGVzdCAoanMpIEFTCisJKFZBTFVFUworCQkoJzEnKSwKKwkJKCdbXScpLAor CQkoJ3t9JyksCisJCSgnWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFs c2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXScpCisJKTsKKy0tIFJl Z3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rl c3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25i LCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQkiaW50 IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFyKDQpIiBj aGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVtZXJpYyIg bnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQn LAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQnCisJCSkKKwkpIGp0 CisJT04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBpbnQgfCAg dGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmljIHwgZG9tYWluICB8ICAgICAganMgICAg ICB8ICAgICAgamIgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAgICAgICB8 IDEgICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAg ICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAg ICAgICAgICB8IAorIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8ICAgICB8ICAg ICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwge30gICAgICAgICAg IHwge30KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1 ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgIDEgfCAxICAgICAg IHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEgICAgICAgICAgICB8IDEK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDIgfCAgIDEgfCAxLjIzICAgIHwgMS4y MyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICB8IDEuMjMgICAgICAgICB8IDEuMjMKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCAgIDIgfCAyICAgICAgIHwgMiAgICAg ICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAgICB8ICIyIiAgICAgICAgICB8ICIyIgorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8ICAgICB8IGFhYWFhYWEgfCBhYWFhICAgIHwg ICAgICB8ICAgICAgICAgfCBhYWFhYWFhIHwgImFhYWFhYWEiICAgIHwgImFhYWFhYWEiCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgICAgIHwgZm9vICAgICB8IGZvbyAgICAg fCAgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIgorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwg ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgbnVsbCAgICAgICAgIHwgbnVsbAorIFsxLCAxLjIz LCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgMCB8IGZhbHNlICAgfCBmYWxzICAgIHwgZiAg ICB8ICAgICAgICAgfCBmYWxzZSAgIHwgZmFsc2UgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAi WzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgIDEgfCB0cnVlICAgIHwgdHJ1ZSAgICB8IHQgICAg fCAgICAgICAgIHwgdHJ1ZSAgICB8IHRydWUgICAgICAgICB8IHRydWUKKyBbMSwgMS4yMywgIjIi LCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEs Ml0iLCAiXCJzdHJcIiJdIHwgIDkgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAg ICAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfQorIFsxLCAxLjIz LCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAgICB8IFsxLDJdICAgfCBbMSwyICAgIHwgICAg ICB8ICAgICAgICAgfCBbMSwyXSAgIHwgIlsxLDJdIiAgICAgIHwgIlsxLDJdIgorIFsxLCAxLjIz LCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICAgICB8ICJzdHIiICAgfCAic3RyICAgIHwgICAg ICB8ICAgICAgICAgfCAic3RyIiAgIHwgIlwic3RyXCIiICAgIHwgIlwic3RyXCIiCisoMTQgcm93 cykKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90 ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29u YiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJanN0 IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkgRk9STUFUIEpT T04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAor CQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQg SlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJKSBqdAorCU9OIHRydWU7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgICAgIGpzdCAgICAgIHwganNjICB8IGpzdiAg fCAgICAganNiICAgICAgfCAgICAganNicSAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgMSAgICAg ICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAgICAgICAgfCAxCisgW10gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAg ICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCB7fSAgICAgICAg ICAgfCB7fSAgIHwge30gICB8IHt9ICAgICAgICAgICB8IHt9CisgWzEsIDEuMjMsICIyIiwgImFh YWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXSB8ICAxIHwgMSAgICAgICAgICAgIHwgMSAgICB8IDEgICAgfCAxICAgICAgICAg ICAgfCAxCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgMS4yMyAgICAgICAg IHwgMS4yMyB8IDEuMjMgfCAxLjIzICAgICAgICAgfCAxLjIzCisgWzEsIDEuMjMsICIyIiwgImFh YWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXSB8ICAzIHwgIjIiICAgICAgICAgIHwgIjIiICB8ICIyIiAgfCAiMiIgICAgICAg ICAgfCAyCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0IHwgImFhYWFhYWEiICAg IHwgImFhYSB8ICJhYWEgfCAiYWFhYWFhYSIgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFh YSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgIDUgfCAiZm9vIiAgICAgICAgfCAiZm9vIHwgImZvbyB8ICJmb28iICAgICAgICB8 IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7 ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8IG51bGwgICAgICAgICB8IG51 bGwgfCBudWxsIHwgbnVsbCAgICAgICAgIHwgbnVsbAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFh IiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0 clwiIl0gfCAgNyB8IGZhbHNlICAgICAgICB8IGZhbHMgfCBmYWxzIHwgZmFsc2UgICAgICAgIHwg ZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1 ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCB0cnVlICAgICAgICAg fCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRydWUKKyBbMSwgMS4yMywgIjIiLCAiYWFh YWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAi XCJzdHJcIiJdIHwgIDkgfCB7ImFhYSI6IDEyM30gfCB7ImFhIHwgeyJhYSB8IHsiYWFhIjogMTIz fSB8IHsiYWFhIjogMTIzfQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICJb MSwyXSIgICAgICB8ICJbMSwgfCAiWzEsIHwgIlsxLDJdIiAgICAgIHwgWzEsIDJdCisgWzEsIDEu MjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDExIHwgIlwic3RyXCIiICAgIHwgIlwicyB8ICJcInMg fCAiXCJzdHJcIiIgICAgfCAic3RyIgorKDE0IHJvd3MpCisKKy0tIEVYSVNUUyBjb2x1bW5zCitT RUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpT T05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJ aWQgRk9SIE9SRElOQUxJVFksCisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywK KwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMzIGludCBFWElT VFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0 IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9SCisJCSkKKwkpIGp0CisJ T04gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBleGlzdHMxIHwg ZXhpc3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tCisgMSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAg IHwgZmFsc2UKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIHwg ICAgICAgICB8ICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEg fCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIsICJh YWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIs ICJcInN0clwiIl0gfCAgMSB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlCisg WzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFh IjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgZiAgICAgICB8ICAgICAgIDAgfCAg ICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCBmICAg ICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFh IiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0 clwiIl0gfCAgNCB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEu MjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAg IHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCBmICAgICAgIHwg ICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZv byIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0g fCAgNyB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIy IiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsx LDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFs c2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCB0ICAgICAgIHwgICAgICAg MSB8ICAgICAgIDEgfCB0cnVlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVs bCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDEwIHwg ZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFh YWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAi XCJzdHJcIiJdIHwgMTEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorKDE0 IHJvd3MpCisKKy0tIE90aGVyIG1pc2NlbGxhbm91cyBjaGVja3MKK1NFTEVDVCAqCitGUk9NIGpz b25fdGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgKKwkJdmFs cy5qczo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElU WSwKKwkJCWFhYSBpbnQsIC0tICJhYWEiIGhhcyBpbXBsaWNpdCBwYXRoICckLiJhYWEiJworCQkJ YWFhMSBpbnQgUEFUSCAnJC5hYWEnLAorCQkJanMyIGpzb24gUEFUSCAnJCcsCisJCQlqc2IydyBq c29uYiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCisJCQlqc2IycSBqc29uYiBQQVRIICckJyBPTUlU IFFVT1RFUywKKwkJCWlhIGludFtdIFBBVEggJyQnLAorCQkJdGEgdGV4dFtdIFBBVEggJyQnLAor CQkJamJhIGpzb25iW10gUEFUSCAnJCcKKwkJKQorCSkganQKKwlPTiB0cnVlOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBpZCB8IGFhYSB8IGFhYTEgfCAgICAganMyICAgICAgfCAg ICAganNiMncgICAgICB8ICAgIGpzYjJxICAgICB8IGlhIHwgdGEgfCBqYmEgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0rLS0tLS0KKyAxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAgICAgIHwgWzFd ICAgICAgICAgICAgfCAxICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgW10gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIHwgICAgIHwgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICB8IAorIHt9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMSB8ICAgICB8ICAgICAgfCB7fSAgICAgICAgICAgfCBbe31dICAgICAgICAg ICB8IHt9ICAgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDEgfCAgICAgfCAgICAgIHwgMSAgICAgICAgICAgIHwgWzFdICAgICAgICAgICAgfCAx ICAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9v IiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8 ICAyIHwgICAgIHwgICAgICB8IDEuMjMgICAgICAgICB8IFsxLjIzXSAgICAgICAgIHwgMS4yMyAg ICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51 bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMyB8 ICAgICB8ICAgICAgfCAiMiIgICAgICAgICAgfCBbIjIiXSAgICAgICAgICB8IDIgICAgICAgICAg ICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDQgfCAgICAg fCAgICAgIHwgImFhYWFhYWEiICAgIHwgWyJhYWFhYWFhIl0gICAgfCAgICAgICAgICAgICAgfCAg ICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA1IHwgICAgIHwgICAg ICB8ICJmb28iICAgICAgICB8IFsiZm9vIl0gICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAg ICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNiB8ICAgICB8ICAgICAgfCBu dWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51bGwgICAgICAgICB8ICAgIHwgICAgfCAK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDcgfCAgICAgfCAgICAgIHwgZmFsc2Ug ICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZSAgICAgICAgfCAgICB8ICAgIHwgCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgICAgIHwgICAgICB8IHRydWUgICAgICAg ICB8IFt0cnVlXSAgICAgICAgIHwgdHJ1ZSAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIz LCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAgOSB8IDEyMyB8ICAxMjMgfCB7ImFhYSI6IDEyM30gfCBb eyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIi LCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEs Ml0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgICAgfCAgICAgIHwgIlsxLDJdIiAgICAgIHwgWyJbMSwy XSJdICAgICAgfCBbMSwgMl0gICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFh YWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXSB8IDExIHwgICAgIHwgICAgICB8ICJcInN0clwiIiAgICB8IFsiXCJzdHJcIiJd ICAgIHwgInN0ciIgICAgICAgIHwgICAgfCAgICB8IAorKDE0IHJvd3MpCisKKy0tIEpTT05fVEFC TEU6IFRlc3QgYmFja3dhcmQgcGFyc2luZworQ1JFQVRFIFZJRVcganNvbmJfdGFibGVfdmlldyBB UworU0VMRUNUICogRlJPTQorCUpTT05fVEFCTEUoCisJCWpzb25iICdudWxsJywgJ2xheCAkWypd JyBQQVNTSU5HIDEgKyAyIEFTIGEsIGpzb24gJyJmb28iJyBBUyAiYiBjIgorCQlDT0xVTU5TICgK KwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJImludCIgaW50IFBBVEggJyQnLAorCQkJInRleHQi IHRleHQgUEFUSCAnJCcsCisJCQkiY2hhcig0KSIgY2hhcig0KSBQQVRIICckJywKKwkJCSJib29s IiBib29sIFBBVEggJyQnLAorCQkJIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisJCQkiZG9t YWluIiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKKwkJCWpzIGpzb24gUEFUSCAnJCcsCisJ CQlqYiBqc29uYiBQQVRIICckJywKKwkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRIICck JywKKwkJCWpzYyBjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzdiB2YXJjaGFy KDQpIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYiBqc29uYiAgIEZPUk1BVCBKU09OIFBB VEggJyQnLAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUywK KwkJCWFhYSBpbnQsIC0tIGltcGxpY2l0IHBhdGggJyQuImFhYSInLAorCQkJYWFhMSBpbnQgUEFU SCAnJC5hYWEnLAorCQkJZXhpc3RzMSBib29sIEVYSVNUUyBQQVRIICckLmFhYScsCisJCQlleGlz dHMyIGludCBFWElTVFMgUEFUSCAnJC5hYWEnIFRSVUUgT04gRVJST1IsCisJCQlleGlzdHMzIHRl eHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5LTk9XTiBPTiBFUlJPUiwKKwkJCWpzMiBq c29uIFBBVEggJyQnLAorCQkJanNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVSLAorCQkJ anNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisJCQlpYSBpbnRbXSBQQVRIICckJywK KwkJCXRhIHRleHRbXSBQQVRIICckJywKKwkJCWpiYSBqc29uYltdIFBBVEggJyQnLAorCQkJTkVT VEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJCQlORVNURUQg UEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAorCQkJCSksCisJ CQkJYjEgdGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICgK KwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJCQlhMjEgdGV4 dAorCQkJCSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xVTU5TICgKKwkJCQkJ YTIyIHRleHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOworXHN2IGpzb25iX3RhYmxlX3ZpZXcKK0NS RUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLmpzb25iX3RhYmxlX3ZpZXcgQVMKKyBTRUxFQ1Qg aWQsCisgICAgImludCIsCisgICAgdGV4dCwKKyAgICAiY2hhcig0KSIsCisgICAgYm9vbCwKKyAg ICAibnVtZXJpYyIsCisgICAgZG9tYWluLAorICAgIGpzLAorICAgIGpiLAorICAgIGpzdCwKKyAg ICBqc2MsCisgICAganN2LAorICAgIGpzYiwKKyAgICBqc2JxLAorICAgIGFhYSwKKyAgICBhYWEx LAorICAgIGV4aXN0czEsCisgICAgZXhpc3RzMiwKKyAgICBleGlzdHMzLAorICAgIGpzMiwKKyAg ICBqc2IydywKKyAgICBqc2IycSwKKyAgICBpYSwKKyAgICB0YSwKKyAgICBqYmEsCisgICAgYTEs CisgICAgYjEsCisgICAgYTExLAorICAgIGEyMSwKKyAgICBhMjIKKyAgIEZST00gSlNPTl9UQUJM RSgKKyAgICAgICAgICAgICdudWxsJzo6anNvbmIsICckWypdJyBBUyBqc29uX3RhYmxlX3BhdGhf MQorICAgICAgICAgICAgUEFTU0lORworICAgICAgICAgICAgICAgIDEgKyAyIEFTIGEsCisgICAg ICAgICAgICAgICAgJyJmb28iJzo6anNvbiBBUyAiYiBjIgorICAgICAgICAgICAgQ09MVU1OUyAo CisgICAgICAgICAgICAgICAgaWQgRk9SIE9SRElOQUxJVFksCisgICAgICAgICAgICAgICAgImlu dCIgaW50ZWdlciBQQVRIICckJywKKyAgICAgICAgICAgICAgICB0ZXh0IHRleHQgUEFUSCAnJCcs CisgICAgICAgICAgICAgICAgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywKKyAgICAg ICAgICAgICAgICBib29sIGJvb2xlYW4gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgIm51bWVy aWMiIG51bWVyaWMgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgZG9tYWluIGpzb25iX3Rlc3Rf ZG9tYWluIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzIGpzb24gUEFUSCAnJCcsCisgICAg ICAgICAgICAgICAgamIganNvbmIgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganN0IHRleHQg Rk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNjIGNoYXJhY3Rlcig0KSBG T1JNQVQgSlNPTiBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqc3YgY2hhcmFjdGVyIHZhcnlp bmcoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganNiIGpzb25iIFBB VEggJyQnLAorICAgICAgICAgICAgICAgIGpzYnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMs CisgICAgICAgICAgICAgICAgYWFhIGludGVnZXIgUEFUSCAnJC4iYWFhIicsCisgICAgICAgICAg ICAgICAgYWFhMSBpbnRlZ2VyIFBBVEggJyQuImFhYSInLAorICAgICAgICAgICAgICAgIGV4aXN0 czEgYm9vbGVhbiBFWElTVFMgUEFUSCAnJC4iYWFhIicsCisgICAgICAgICAgICAgICAgZXhpc3Rz MiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLAorICAgICAgICAg ICAgICAgIGV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04g T04gRVJST1IsCisgICAgICAgICAgICAgICAganMyIGpzb24gUEFUSCAnJCcsCisgICAgICAgICAg ICAgICAganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIsCisg ICAgICAgICAgICAgICAganNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCisgICAgICAg ICAgICAgICAgaWEgaW50ZWdlcltdIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIHRhIHRleHRb XSBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqYmEganNvbmJbXSBQQVRIICckJywKKyAgICAg ICAgICAgICAgICBORVNURUQgUEFUSCAnJFsxXScgQVMgcDEKKyAgICAgICAgICAgICAgICBDT0xV TU5TICgKKyAgICAgICAgICAgICAgICAgICAgYTEgaW50ZWdlciBQQVRIICckLiJhMSInLAorICAg ICAgICAgICAgICAgICAgICBiMSB0ZXh0IFBBVEggJyQuImIxIicsCisgICAgICAgICAgICAgICAg ICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIKKyAgICAgICAgICAgICAgICAgICAgQ09M VU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMTEgdGV4dCBQQVRIICckLiJhMTEiJwor ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAg ICBORVNURUQgUEFUSCAnJFsyXScgQVMgcDIKKyAgICAgICAgICAgICAgICBDT0xVTU5TICgKKyAg ICAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIgorICAgICAgICAg ICAgICAgICAgICBDT0xVTU5TICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEyMSB0ZXh0IFBB VEggJyQuImEyMSInCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAg IE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1OUyAo CisgICAgICAgICAgICAgICAgICAgICAgICBhMjIgdGV4dCBQQVRIICckLiJhMjIiJworICAgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAg ICAgICAgUExBTiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVO SU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkKKyAgICAgICAgKQorRVhQTEFJTiAo Q09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIGpzb25iX3RhYmxlX3ZpZXc7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBUYWJsZSBGdW5jdGlvbiBTY2FuIG9uICJqc29uX3RhYmxlIgorICAgT3V0 cHV0OiAianNvbl90YWJsZSIuaWQsICJqc29uX3RhYmxlIi4iaW50IiwgImpzb25fdGFibGUiLnRl eHQsICJqc29uX3RhYmxlIi4iY2hhcig0KSIsICJqc29uX3RhYmxlIi5ib29sLCAianNvbl90YWJs ZSIuIm51bWVyaWMiLCAianNvbl90YWJsZSIuZG9tYWluLCAianNvbl90YWJsZSIuanMsICJqc29u X3RhYmxlIi5qYiwgImpzb25fdGFibGUiLmpzdCwgImpzb25fdGFibGUiLmpzYywgImpzb25fdGFi bGUiLmpzdiwgImpzb25fdGFibGUiLmpzYiwgImpzb25fdGFibGUiLmpzYnEsICJqc29uX3RhYmxl Ii5hYWEsICJqc29uX3RhYmxlIi5hYWExLCAianNvbl90YWJsZSIuZXhpc3RzMSwgImpzb25fdGFi bGUiLmV4aXN0czIsICJqc29uX3RhYmxlIi5leGlzdHMzLCAianNvbl90YWJsZSIuanMyLCAianNv bl90YWJsZSIuanNiMncsICJqc29uX3RhYmxlIi5qc2IycSwgImpzb25fdGFibGUiLmlhLCAianNv bl90YWJsZSIudGEsICJqc29uX3RhYmxlIi5qYmEsICJqc29uX3RhYmxlIi5hMSwgImpzb25fdGFi bGUiLmIxLCAianNvbl90YWJsZSIuYTExLCAianNvbl90YWJsZSIuYTIxLCAianNvbl90YWJsZSIu YTIyCisgICBUYWJsZSBGdW5jdGlvbiBDYWxsOiBKU09OX1RBQkxFKCdudWxsJzo6anNvbmIsICck WypdJyBBUyBqc29uX3RhYmxlX3BhdGhfMSBQQVNTSU5HIDMgQVMgYSwgJyJmb28iJzo6anNvbmIg QVMgImIgYyIgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksICJpbnQiIGludGVnZXIgUEFUSCAn JCcsIHRleHQgdGV4dCBQQVRIICckJywgImNoYXIoNCkiIGNoYXJhY3Rlcig0KSBQQVRIICckJywg Ym9vbCBib29sZWFuIFBBVEggJyQnLCAibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywgZG9tYWlu IGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLCBqcyBqc29uIFBBVEggJyQnLCBqYiBqc29uYiBQ QVRIICckJywganN0IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcsIGpzYyBjaGFyYWN0ZXIoNCkg Rk9STUFUIEpTT04gUEFUSCAnJCcsIGpzdiBjaGFyYWN0ZXIgdmFyeWluZyg0KSBGT1JNQVQgSlNP TiBQQVRIICckJywganNiIGpzb25iIFBBVEggJyQnLCBqc2JxIGpzb25iIFBBVEggJyQnIE9NSVQg UVVPVEVTLCBhYWEgaW50ZWdlciBQQVRIICckLiJhYWEiJywgYWFhMSBpbnRlZ2VyIFBBVEggJyQu ImFhYSInLCBleGlzdHMxIGJvb2xlYW4gRVhJU1RTIFBBVEggJyQuImFhYSInLCBleGlzdHMyIGlu dGVnZXIgRVhJU1RTIFBBVEggJyQuImFhYSInIFRSVUUgT04gRVJST1IsIGV4aXN0czMgdGV4dCBF WElTVFMgUEFUSCAnc3RyaWN0ICQuImFhYSInIFVOS05PV04gT04gRVJST1IsIGpzMiBqc29uIFBB VEggJyQnLCBqc2IydyBqc29uYiBQQVRIICckJyBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUiwg anNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsIGlhIGludGVnZXJbXSBQQVRIICckJywg dGEgdGV4dFtdIFBBVEggJyQnLCBqYmEganNvbmJbXSBQQVRIICckJywgTkVTVEVEIFBBVEggJyRb MV0nIEFTIHAxIENPTFVNTlMgKGExIGludGVnZXIgUEFUSCAnJC4iYTEiJywgYjEgdGV4dCBQQVRI ICckLiJiMSInLCBORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKGExMSB0ZXh0 IFBBVEggJyQuImExMSInKSksIE5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICggTkVT VEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5TIChhMjEgdGV4dCBQQVRIICckLiJhMjEi JyksIE5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIgQ09MVU1OUyAoYTIyIHRleHQgUEFUSCAnJC4i YTIyIicpKSkgUExBTiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIp IFVOSU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkpCisoMyByb3dzKQorCitEUk9Q IFZJRVcganNvbmJfdGFibGVfdmlldzsKK0RST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluOwor LS0gSlNPTl9UQUJMRTogb25seSBvbmUgRk9SIE9SRElOQUxJVFkgY29sdW1ucyBhbGxvd2VkCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9SIE9S RElOQUxJVFksIGlkMiBGT1IgT1JESU5BTElUWSwgYSBpbnQgUEFUSCAnJC5hJyBFUlJPUiBPTiBF TVBUWSkpIGp0OworRVJST1I6ICBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgRk9SIE9SRElOQUxJ VFkgY29sdW1uCitMSU5FIDE6IC4uLl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChpZCBG T1IgT1JESU5BTElUWSwgaWQyIEZPUiBPUi4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwgYSBpbnQgUEFU SCAnJCcgRVJST1IgT04gRU1QVFkpKSBqdDsKKyBpZCB8IGEgCistLS0tKy0tLQorICAxIHwgMQor KDEgcm93KQorCistLSBKU09OX1RBQkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhhdmlvcgorU0VM RUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpLAorCUpTT05f VEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJykpIGp0Owor ICBqcyAgIHwgYSAKKy0tLS0tLS0rLS0tCisgMSAgICAgfCAxCisgImVyciIgfCAgCisoMiByb3dz KQorCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykK KwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJyQnKSBFUlJPUiBPTiBFUlJPUikganQKKwkJT04gdHJ1ZTsKK0VSUk9S OiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIKK1NFTEVDVCAq CitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKQorCQlMRUZUIE9VVEVS IEpPSU4KKwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFU SCAnJCcgRVJST1IgT04gRVJST1IpKSBqdAorCQlPTiB0cnVlOworRVJST1I6ICBpbnZhbGlkIGlu cHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiZXJyIgorU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJyQuYScgRVJST1IgT04gRU1Q VFkpKSBqdDsKKyBhIAorLS0tCisgIAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgRVJST1Ig T04gRU1QVFkpIEVSUk9SIE9OIEVSUk9SKSBqdDsKK0VSUk9SOiAganNvbnBhdGggbWVtYmVyIGFj Y2Vzc29yIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYW4gb2JqZWN0CitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgRVJS T1IgT04gRU1QVFkpIEVSUk9SIE9OIEVSUk9SKSBqdDsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRl bQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBp bnQgUEFUSCAnJCcgICBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7 CisgYSAKKy0tLQorIDIKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgREVGQVVMVCAxIE9O IEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworIGEgCistLS0KKyAyCisoMSByb3cpCisK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50 IFBBVEggJ2xheCAkLmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBq dDsKKyBhIAorLS0tCisgMQorKDEgcm93KQorCistLSBKU09OX1RBQkxFOiBFWElTVFMgUEFUSCB0 eXBlcworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAo YSBpbnQ0IEVYSVNUUyBQQVRIICckLmEnKSk7CisgYSAKKy0tLQorIDAKKygxIHJvdykKKworU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVY SVNUUyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBz bWFsbGludAorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywg JyQnIENPTFVNTlMgKGEgaW50MiBFWEkuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDggRVhJU1RTIFBBVEggJyQuYScpKTsK K0VSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGJpZ2ludAorTElORSAxOiAuLi5F TEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50OCBF WEkuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBD T0xVTU5TIChhIGZsb2F0NCBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2Fz dCB0eXBlIGJvb2xlYW4gdG8gcmVhbAorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEUuLi4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGNoYXIoMykgRVhJ U1RTIFBBVEggJyQuYScpKTsKKyAgYSAgCistLS0tLQorIGZhbAorKDEgcm93KQorCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb24gRVhJU1RT IFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb24K K0xJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xV TU5TIChhIGpzb24gRVhJLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uYiBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6 ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4gdG8ganNvbmIKK0xJTkUgMTogLi4uRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYLi4uCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorLS0gSlNPTl9UQUJMRTogV1JBUFBFUi9RVU9URVMgY2xhdXNlcyBvbiBzY2FsYXIgY29s dW1ucyBkb24ndCB3b3JrIHdpdGhvdXQgYW4KKy0tIGV4cGxpY2l0IEZPUk1BVCBjbGF1c2UKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVt IHRleHQgUEFUSCAnJCcgS0VFUCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOworRVJST1I6ICBj YW5ub3QgdXNlIE9NSVQvS0VFUCBRVU9URVMgY2xhdXNlIGZvciBzY2FsYXIgY29sdW1ucyB3aXRo b3V0IGFsc28gc3BlY2lmeWluZyBGT1JNQVQgY2xhdXNlCitMSU5FIDE6IC4uLlQgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IC4uLgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5T IChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgS0VFUCBRVU9URVMgT04gU0NBTEFSIFNU UklORykpOworICBpdGVtICAgCistLS0tLS0tLS0KKyAid29ybGQiCisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRl eHQgUEFUSCAnJCcgV0lUSCBXUkFQUEVSKSk7CitFUlJPUjogIGNhbm5vdCB1c2UgV0lUSCBXUkFQ UEVSIGNsYXVzZSBmb3Igc2NhbGFyIGNvbHVtbnMgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgRk9S TUFUIGNsYXVzZQorTElORSAxOiAuLi5UICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQi JywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09O IFBBVEggJyQnIFdJVEggV1JBUFBFUikpOworICAgaXRlbSAgICAKKy0tLS0tLS0tLS0tCisgWyJ3 b3JsZCJdCisoMSByb3cpCisKKy0tIEpTT05fVEFCTEU6IG5lc3RlZCBwYXRocyBhbmQgcGxhbnMK Ky0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4cGxpY2l0 IEFTIHBhdGgKKy0tIHNwZWNpZmljYXRpb25zIGlmIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVz ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIC0tIEFTIDxw YXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwlDT0xVTU5TICgKKwkJZm9vIGludCBQQVRIICckJwor CSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RB QkxFIGV4cHJlc3Npb24KK0xJTkUgMjogIGpzb25iICdbXScsICckJyAtLSBBUyA8cGF0aCBuYW1l PiByZXF1aXJlZCBoZXJlCisgICAgICAgICBeCitERVRBSUw6ICBKU09OX1RBQkxFIGNvbHVtbnMg bXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGlj aXQgUExBTiBjbGF1c2UgaXMgdXNlZAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25i ICdbXScsICckJyBBUyBwYXRoMQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQ09MVU1O UyAoIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwkJCWZvbyBpbnQgUEFUSCAnJCcK KwkJKQorCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBK U09OX1RBQkxFIGV4cHJlc3Npb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcgQ09MVU1OUyAo IC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKyAgICAgICAgICBeCitERVRBSUw6ICBK U09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNp ZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZAorLS0gU2hvdWxkIGZhaWwg KGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0KQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJCWEgaW50CisJKQorKSBqdDsK K0VSUk9SOiAgZHVwbGljYXRlIEpTT05fVEFCTEUgY29sdW1uIG5hbWU6IGEKK0hJTlQ6ICBKU09O X1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gb25lIGFub3RoZXIuCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5T ICgKKwkJYiBpbnQsCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYyBp bnQKKwkJKQorCSkKKykganQ7CitFUlJPUjogIGR1cGxpY2F0ZSBKU09OX1RBQkxFIGNvbHVtbiBu YW1lOiBhCitISU5UOiAgSlNPTl9UQUJMRSBjb2x1bW4gbmFtZXMgbXVzdCBiZSBkaXN0aW5jdCBm cm9tIG9uZSBhbm90aGVyLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScs ICckJworCUNPTFVNTlMgKAorCQliIGludCwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIGIKKwkJQ09M VU1OUyAoCisJCQljIGludAorCQkpCisJKQorKSBqdDsKK0VSUk9SOiAgZHVwbGljYXRlIEpTT05f VEFCTEUgY29sdW1uIG5hbWU6IGIKK0hJTlQ6ICBKU09OX1RBQkxFIGNvbHVtbiBuYW1lcyBtdXN0 IGJlIGRpc3RpbmN0IGZyb20gb25lIGFub3RoZXIuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo CisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBhCisJ CUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnCisJCUNPTFVNTlMg KAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVNTlMgKAorCQkJCWMgaW50CisJCQkp CisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBjb2x1bW4gbmFt ZTogYQorSElOVDogIEpTT05fVEFCTEUgY29sdW1uIG5hbWVzIG11c3QgYmUgZGlzdGluY3QgZnJv bSBvbmUgYW5vdGhlci4KKy0tIEpTT05fVEFCTEU6IHBsYW4gdmFsaWRhdGlvbgorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAo CisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09M VU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkK KwlQTEFOIChwMSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5F IDEyOiAgUExBTiAocDEpCisgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgUGF0aCBuYW1lIG1p c21hdGNoOiBleHBlY3RlZCBwMCBidXQgcDEgaXMgZ2l2ZW4uCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xV TU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFy IGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RF RCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAw KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgNDogICBORVNU RUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlMOiAgUGxhbiBu b2RlIGZvciBuZXN0ZWQgcGF0aCBwMSB3YXMgbm90IGZvdW5kIGluIHBsYW4uCitTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgK KwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFT IHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xV TU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgK KwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQor CVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBs YW4KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAg XgorREVUQUlMOiAgUGxhbiBub2RlIGZvciBuZXN0ZWQgcGF0aCBwMSB3YXMgbm90IGZvdW5kIGlu IHBsYW4uCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScg QVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJh eiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIFVOSU9OIHAxIFVOSU9OIHAxMSkKKykganQ7CitF UlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5FIDEyOiAgUExBTiAocDAgVU5JT04g cDEgVU5JT04gcDExKQorICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIEV4cGVjdGVkIElOTkVS IG9yIE9VVEVSIEpTT05fVEFCTEUgcGxhbiBub2RlLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiAocDEgQ1JPU1MgcDEzKSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFu CitMSU5FIDg6ICAgTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorICAgICAgICAgIF4K K0RFVEFJTDogIFBsYW4gbm9kZSBmb3IgbmVzdGVkIHBhdGggcDIgd2FzIG5vdCBmb3VuZCBpbiBw bGFuLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFT IHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAocDEgQ1JPU1MgcDIpKQorKSBqdDsKK0VS Uk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJTkUgNTogICAgTkVTVEVEIFBBVEggJyQn IEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorICAgICAgICAgICBeCitERVRBSUw6ICBQbGFu IG5vZGUgZm9yIG5lc3RlZCBwYXRoIHAxMSB3YXMgbm90IGZvdW5kIGluIHBsYW4uCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5T ICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBD T0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5T ICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJ KQorCVBMQU4gKHAwIE9VVEVSICgocDEgVU5JT04gcDExKSBDUk9TUyBwMikpCispIGp0OworRVJS T1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElORSAxMjogIFBMQU4gKHAwIE9VVEVSICgo cDEgVU5JT04gcDExKSBDUk9TUyBwMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgXgorREVU QUlMOiAgUGxhbiBub2RlIGNvbnRhaW5zIHNvbWUgZXh0cmEgb3IgZHVwbGljYXRlIHNpYmxpbmcg bm9kZXMuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScg QVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBB VEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICck JyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJh eiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgSU5ORVIgcDExKSBDUk9TUyBw MikpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbgorTElORSA2OiAgICBO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKyAgICAgICAgICAgXgor REVUQUlMOiAgUGxhbiBub2RlIGZvciBuZXN0ZWQgcGF0aCBwMTIgd2FzIG5vdCBmb3VuZCBpbiBw bGFuLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFT IHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDEx KSkgQ1JPU1MgcDIpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4KK0xJ TkUgOTogICAgTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisgICAg ICAgICAgIF4KK0RFVEFJTDogIFBsYW4gbm9kZSBmb3IgbmVzdGVkIHBhdGggcDIxIHdhcyBub3Qg Zm91bmQgaW4gcGxhbi4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICdzdHJpY3QgJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAx IENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCAp LAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJ CU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgSU5O RVIgKHAxMiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkpCispIGp0OworIGJhciB8 IGZvbyB8IGJheiAKKy0tLS0tKy0tLS0tKy0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIC0tIHdpdGhvdXQgcm9v dCBwYXRoIG5hbWUKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMg KAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQ QVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1O UyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkp IENST1NTIChwMiBJTk5FUiBwMjEpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxF IGV4cHJlc3Npb24KK0xJTkUgMjogIGpzb25iICdudWxsJywgJ3N0cmljdCAkWypdJyAtLSB3aXRo b3V0IHJvb3QgcGF0aCBuYW1lCisgICAgICAgICBeCitERVRBSUw6ICBKU09OX1RBQkxFIGNvbHVt bnMgbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGhuYW1lIHNwZWNpZmljYXRpb24gaWYgZXhw bGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZAorLS0gSlNPTl9UQUJMRTogcGxhbiBleGVjdXRpb24K K0NSRUFURSBURU1QIFRBQkxFIGpzb25iX3RhYmxlX3Rlc3QgKGpzIGpzb25iKTsKK0lOU0VSVCBJ TlRPIGpzb25iX3RhYmxlX3Rlc3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEsICAiYiI6IFtd LCAiYyI6IFtdfSwKKwkJeyJhIjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBbMTAsIG51bGws IDIwXX0sCisJCXsiYSI6ICAzLCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7IngiOiAiNCIs ICJiIjogWzEsIDJdLCAiYyI6IDEyM30KKwkgXScKKyk7CistLSB1bnNwZWNpZmllZCBwbGFuIChv dXRlciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQs CisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAo CisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAt MSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5z ICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBw YyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwg YyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAg IAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAgfCAxMAor IDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAgIAorIDMg fCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAorKDExIHJv d3MpCisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIsIHVuaW9uKQorc2VsZWN0CisJanQuKgorZnJv bQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmlj dCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50 IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3Ry aWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJ KQorCQlwbGFuIGRlZmF1bHQgKG91dGVyLCB1bmlvbikKKwkpIGp0OworIG4gfCBhICB8IGIgfCBj ICAKKy0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8ICAg CisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgICB8IDEwCisg MiB8ICAyIHwgICB8ICAgCisgMiB8ICAyIHwgICB8IDIwCisgMyB8ICAzIHwgMSB8ICAgCisgMyB8 ICAzIHwgMiB8ICAgCisgNCB8IC0xIHwgMSB8ICAgCisgNCB8IC0xIHwgMiB8ICAgCisoMTEgcm93 cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJ anQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQu anMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwK KwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGgg JyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwg YSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAg MiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8 ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEg fCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAg IAorKDExIHJvd3MpCisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorCSkg anQ7CisgbiB8IGEgIHwgYyAgfCBiIAorLS0tKy0tLS0rLS0tLSstLS0KKyAxIHwgIDEgfCAgICB8 ICAKKyAyIHwgIDIgfCAxMCB8ICAKKyAyIHwgIDIgfCAgICB8ICAKKyAyIHwgIDIgfCAyMCB8ICAK KyAyIHwgIDIgfCAgICB8IDEKKyAyIHwgIDIgfCAgICB8IDIKKyAyIHwgIDIgfCAgICB8IDMKKyAz IHwgIDMgfCAgICB8IDEKKyAzIHwgIDMgfCAgICB8IDIKKyA0IHwgLTEgfCAgICB8IDEKKyA0IHwg LTEgfCAgICB8IDIKKygxMSByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKGlubmVyLCB1bmlvbikK K3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxl ICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9y ZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBj IGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiBkZWZhdWx0IChpbm5lcikKKwkpIGp0OworIG4g fCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8 ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgICB8IDEwCisgMiB8ICAy IHwgICB8ICAgCisgMiB8ICAyIHwgICB8IDIwCisgMyB8ICAzIHwgMSB8ICAgCisgMyB8ICAzIHwg MiB8ICAgCisgNCB8IC0xIHwgMSB8ICAgCisgNCB8IC0xIHwgMiB8ICAgCisoMTAgcm93cykKKwor LS0gc3BlY2lmaWMgcGxhbiAocCBpbm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgor ZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEg aW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkK KwkJKQorCQlwbGFuIChwIGlubmVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBi IHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIg fCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAg IAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAor IDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAorKDEwIHJvd3MpCisKKy0tIGRlZmF1 bHQgcGxhbiAoaW5uZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxl X3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJ CWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEn IGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMg cGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu Y1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1 bHQgKGNyb3NzLCBpbm5lcikKKwkpIGp0OworIG4gfCBhIHwgYiB8IGMgIAorLS0tKy0tLSstLS0r LS0tLQorIDIgfCAyIHwgMSB8IDEwCisgMiB8IDIgfCAxIHwgICAKKyAyIHwgMiB8IDEgfCAyMAor IDIgfCAyIHwgMiB8IDEwCisgMiB8IDIgfCAyIHwgICAKKyAyIHwgMiB8IDIgfCAyMAorIDIgfCAy IHwgMyB8IDEwCisgMiB8IDIgfCAzIHwgICAKKyAyIHwgMiB8IDMgfCAyMAorKDkgcm93cykKKwor LS0gc3BlY2lmaWMgcGxhbiAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgor ZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEg aW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkK KwkJKQorCQlwbGFuIChwIGlubmVyIChwYiBjcm9zcyBwYykpCisJKSBqdDsKKyBuIHwgYSB8IGIg fCBjICAKKy0tLSstLS0rLS0tKy0tLS0KKyAyIHwgMiB8IDEgfCAxMAorIDIgfCAyIHwgMSB8ICAg CisgMiB8IDIgfCAxIHwgMjAKKyAyIHwgMiB8IDIgfCAxMAorIDIgfCAyIHwgMiB8ICAgCisgMiB8 IDIgfCAyIHwgMjAKKyAyIHwgMiB8IDMgfCAxMAorIDIgfCAyIHwgMyB8ICAgCisgMiB8IDIgfCAz IHwgMjAKKyg5IHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0 CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlq dHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0 eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICks CisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBh dGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworIG4g fCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8 ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAy IHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwg MyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8 ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBv dXRlciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVy IChwYiBjcm9zcyBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0r LS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAxMAorIDIgfCAgMiB8IDEgfCAg IAorIDIgfCAgMiB8IDEgfCAyMAorIDIgfCAgMiB8IDIgfCAxMAorIDIgfCAgMiB8IDIgfCAgIAor IDIgfCAgMiB8IDIgfCAyMAorIDIgfCAgMiB8IDMgfCAxMAorIDIgfCAgMiB8IDMgfCAgIAorIDIg fCAgMiB8IDMgfCAyMAorIDMgfCAgMyB8ICAgfCAgIAorIDQgfCAtMSB8ICAgfCAgIAorKDEyIHJv d3MpCisKK3NlbGVjdAorCWp0LiosIGIxICsgMTAwIGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChq c29uYgorCQknWworCQkJeyJhIjogIDEsICAiYiI6IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAw XV0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsiYSI6ICAyLCAgImIiOiBbMTAsIDIwXSwgImMi OiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4IjogIjMiLCAiYiI6IFsxMSwgMjIsIDMzLCA0NF19CisJ CSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAor CQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlcnJvciwKKwkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgKKwkJCQliIHRleHQgZm9ybWF0IGpz b24gcGF0aCAnJCcsCisJCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkWypdJyBhcyBwYjEgY29sdW1u cyAoCisJCQkJCWIxIGludCBwYXRoICckJworCQkJCSkKKwkJCSksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoCisJCQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBh dGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAor CQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJCQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQo b3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAgb3V0ZXIgKChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBv dXRlciBwYzEpKSkKKwkpIGp0OworIG4gfCBhIHwgICAgICBiICAgICAgIHwgYjEgIHwgIGMgICB8 IGMxIHwgIGIgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLSstLS0t LQorIDEgfCAxIHwgWzEsIDEwXSAgICAgIHwgICAxIHwgMSAgICB8ICAgIHwgMTAxCisgMSB8IDEg fCBbMSwgMTBdICAgICAgfCAgIDEgfCBudWxsIHwgICAgfCAxMDEKKyAxIHwgMSB8IFsxLCAxMF0g ICAgICB8ICAgMSB8IDIgICAgfCAgICB8IDEwMQorIDEgfCAxIHwgWzEsIDEwXSAgICAgIHwgIDEw IHwgMSAgICB8ICAgIHwgMTEwCisgMSB8IDEgfCBbMSwgMTBdICAgICAgfCAgMTAgfCBudWxsIHwg ICAgfCAxMTAKKyAxIHwgMSB8IFsxLCAxMF0gICAgICB8ICAxMCB8IDIgICAgfCAgICB8IDExMAor IDEgfCAxIHwgWzJdICAgICAgICAgIHwgICAyIHwgMSAgICB8ICAgIHwgMTAyCisgMSB8IDEgfCBb Ml0gICAgICAgICAgfCAgIDIgfCBudWxsIHwgICAgfCAxMDIKKyAxIHwgMSB8IFsyXSAgICAgICAg ICB8ICAgMiB8IDIgICAgfCAgICB8IDEwMgorIDEgfCAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwg MSAgICB8ICAgIHwgMTAzCisgMSB8IDEgfCBbMywgMzAsIDMwMF0gfCAgIDMgfCBudWxsIHwgICAg fCAxMDMKKyAxIHwgMSB8IFszLCAzMCwgMzAwXSB8ICAgMyB8IDIgICAgfCAgICB8IDEwMworIDEg fCAxIHwgWzMsIDMwLCAzMDBdIHwgIDMwIHwgMSAgICB8ICAgIHwgMTMwCisgMSB8IDEgfCBbMywg MzAsIDMwMF0gfCAgMzAgfCBudWxsIHwgICAgfCAxMzAKKyAxIHwgMSB8IFszLCAzMCwgMzAwXSB8 ICAzMCB8IDIgICAgfCAgICB8IDEzMAorIDEgfCAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgMSAg ICB8ICAgIHwgNDAwCisgMSB8IDEgfCBbMywgMzAsIDMwMF0gfCAzMDAgfCBudWxsIHwgICAgfCA0 MDAKKyAxIHwgMSB8IFszLCAzMCwgMzAwXSB8IDMwMCB8IDIgICAgfCAgICB8IDQwMAorIDIgfCAy IHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgIHwgICAgCisgMyB8ICAgfCAgICAgICAg ICAgICAgfCAgICAgfCAgICAgIHwgICAgfCAgICAKKygyMCByb3dzKQorCistLSBTaG91bGQgc3Vj Y2VlZCAoSlNPTiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byByb290IGFuZCBuZXN0ZWQgcGF0aHMp CitTRUxFQ1QgKgorRlJPTQorCWdlbmVyYXRlX3NlcmllcygxLCA0KSB4LAorCWdlbmVyYXRlX3Nl cmllcygxLCAzKSB5LAorCUpTT05fVEFCTEUoanNvbmIKKwkJJ1tbMSwyLDNdLFsyLDMsNCw1XSxb Myw0LDUsNl1dJywKKwkJJ3N0cmljdCAkWypdID8gKEBbKl0gPCAkeCknCisJCVBBU1NJTkcgeCBB UyB4LCB5IEFTIHkKKwkJQ09MVU1OUyAoCisJCQl5IHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcs CisJCQlORVNURUQgUEFUSCAnc3RyaWN0ICRbKl0gPyAoQCA+PSAkeSknCisJCQlDT0xVTU5TICgK KwkJCQl6IGludCBQQVRIICckJworCQkJKQorCQkpCisJKSBqdDsKKyB4IHwgeSB8ICAgICAgeSAg ICAgICB8IHogCistLS0rLS0tKy0tLS0tLS0tLS0tLS0tKy0tLQorIDIgfCAxIHwgWzEsIDIsIDNd ICAgIHwgMQorIDIgfCAxIHwgWzEsIDIsIDNdICAgIHwgMgorIDIgfCAxIHwgWzEsIDIsIDNdICAg IHwgMworIDMgfCAxIHwgWzEsIDIsIDNdICAgIHwgMQorIDMgfCAxIHwgWzEsIDIsIDNdICAgIHwg MgorIDMgfCAxIHwgWzEsIDIsIDNdICAgIHwgMworIDMgfCAxIHwgWzIsIDMsIDQsIDVdIHwgMgor IDMgfCAxIHwgWzIsIDMsIDQsIDVdIHwgMworIDMgfCAxIHwgWzIsIDMsIDQsIDVdIHwgNAorIDMg fCAxIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAxIHwgWzEsIDIsIDNdICAgIHwgMQorIDQgfCAx IHwgWzEsIDIsIDNdICAgIHwgMgorIDQgfCAxIHwgWzEsIDIsIDNdICAgIHwgMworIDQgfCAxIHwg WzIsIDMsIDQsIDVdIHwgMgorIDQgfCAxIHwgWzIsIDMsIDQsIDVdIHwgMworIDQgfCAxIHwgWzIs IDMsIDQsIDVdIHwgNAorIDQgfCAxIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAxIHwgWzMsIDQs IDUsIDZdIHwgMworIDQgfCAxIHwgWzMsIDQsIDUsIDZdIHwgNAorIDQgfCAxIHwgWzMsIDQsIDUs IDZdIHwgNQorIDQgfCAxIHwgWzMsIDQsIDUsIDZdIHwgNgorIDIgfCAyIHwgWzEsIDIsIDNdICAg IHwgMgorIDIgfCAyIHwgWzEsIDIsIDNdICAgIHwgMworIDMgfCAyIHwgWzEsIDIsIDNdICAgIHwg MgorIDMgfCAyIHwgWzEsIDIsIDNdICAgIHwgMworIDMgfCAyIHwgWzIsIDMsIDQsIDVdIHwgMgor IDMgfCAyIHwgWzIsIDMsIDQsIDVdIHwgMworIDMgfCAyIHwgWzIsIDMsIDQsIDVdIHwgNAorIDMg fCAyIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAyIHwgWzEsIDIsIDNdICAgIHwgMgorIDQgfCAy IHwgWzEsIDIsIDNdICAgIHwgMworIDQgfCAyIHwgWzIsIDMsIDQsIDVdIHwgMgorIDQgfCAyIHwg WzIsIDMsIDQsIDVdIHwgMworIDQgfCAyIHwgWzIsIDMsIDQsIDVdIHwgNAorIDQgfCAyIHwgWzIs IDMsIDQsIDVdIHwgNQorIDQgfCAyIHwgWzMsIDQsIDUsIDZdIHwgMworIDQgfCAyIHwgWzMsIDQs IDUsIDZdIHwgNAorIDQgfCAyIHwgWzMsIDQsIDUsIDZdIHwgNQorIDQgfCAyIHwgWzMsIDQsIDUs IDZdIHwgNgorIDIgfCAzIHwgWzEsIDIsIDNdICAgIHwgMworIDMgfCAzIHwgWzEsIDIsIDNdICAg IHwgMworIDMgfCAzIHwgWzIsIDMsIDQsIDVdIHwgMworIDMgfCAzIHwgWzIsIDMsIDQsIDVdIHwg NAorIDMgfCAzIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAzIHwgWzEsIDIsIDNdICAgIHwgMwor IDQgfCAzIHwgWzIsIDMsIDQsIDVdIHwgMworIDQgfCAzIHwgWzIsIDMsIDQsIDVdIHwgNAorIDQg fCAzIHwgWzIsIDMsIDQsIDVdIHwgNQorIDQgfCAzIHwgWzMsIDQsIDUsIDZdIHwgMworIDQgfCAz IHwgWzMsIDQsIDUsIDZdIHwgNAorIDQgfCAzIHwgWzMsIDQsIDUsIDZdIHwgNQorIDQgfCAzIHwg WzMsIDQsIDUsIDZdIHwgNgorKDUyIHJvd3MpCisKKy0tIFNob3VsZCBmYWlsIChKU09OIGFyZ3Vt ZW50cyBhcmUgbm90IHBhc3NlZCB0byBjb2x1bW4gcGF0aHMpCitTRUxFQ1QgKgorRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdbMSwyLDNdJywKKwknJFsqXSA/IChAIDwgJHgpJworCQlQQVNTSU5H IDEwIEFTIHgKKwkJQ09MVU1OUyAoeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQgPyAoQCA8ICR4 KScpCisJKSBqdDsKK0VSUk9SOiAgY291bGQgbm90IGZpbmQganNvbnBhdGggdmFyaWFibGUgIngi CistLSBFeHRlbnNpb246IG5vbi1jb25zdGFudCBKU09OIHBhdGgKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsKKyBqc29uX2V4aXN0cyAK Ky0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7 ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0t LS0KKyAxMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30n LCAnJCcgfHwgJy4nIHx8ICdiJyBERUZBVUxUICdmb28nIE9OIEVNUFRZKTsKKyBqc29uX3ZhbHVl IAorLS0tLS0tLS0tLS0tCisgZm9vCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fcXVlcnkgCistLS0tLS0t LS0tLS0KKyAxMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEy M30nLCAnJCcgfHwgJy4nIHx8ICdhJyBXSVRIIFdSQVBQRVIpOworIGpzb25fcXVlcnkgCistLS0t LS0tLS0tLS0KKyBbMTIzXQorKDEgcm93KQorCistLSBTaG91bGQgZmFpbCAoaW52YWxpZCBwYXRo KQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnZXJyb3InIHx8ICcgJyB8 fCAnZXJyb3InKTsKK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIiAiIG9mIGpzb25w YXRoIGlucHV0CistLSBTaG91bGQgZmFpbCAobm90IHN1cHBvcnRlZCkKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnIENPTFVNTlMg KGZvbyBpbnQpKTsKK0VSUk9SOiAgb25seSBzdHJpbmcgY29uc3RhbnRzIHN1cHBvcnRlZCBpbiBK U09OX1RBQkxFIHBhdGggc3BlY2lmaWNhdGlvbgorTElORSAxOiBTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICcuLi4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbl9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25fc3FsanNvbi5zcWwKaW5kZXggNGYzMGZhNDZiOS4uZGY0YTQzMGQ4OCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbl9zcWxqc29uLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsCkBAIC05LDMgKzksNyBAQCBTRUxFQ1QgSlNP Tl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOwogLS0gSlNPTl9RVUVSWQogCiBTRUxFQ1Qg SlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCistLSBKU09OX1RBQkxFCisKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1BVCBKU09OLCAnJCcgQ09MVU1OUyAoZm9v IHRleHQpKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24u c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKaW5kZXggNmMzZjhj N2U0My4uYWI3M2EwMTEzMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJf c3FsanNvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwK QEAgLTMzOSwzICszMzksNjc3IEBAIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxp dHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/IChALmRhdGV0aW1lKCkKIENSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5h ID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOwog Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRb MSwgJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIikgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0 aW1lIEFTIHgpKTsKIERST1AgVEFCTEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5OworCistLSBKU09O X1RBQkxFCisKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9ubHkgaW4g RlJPTSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOworCistLSBTaG91bGQg ZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMLCAnJCcgQ09M VU1OUyAoKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSAoTlVMTDo6anNvbmIsICckJyBD T0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwgdjIpOworCistLSBOVUxMID0+IGVtcHR5 IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICckJyBDT0xVTU5T IChmb28gaW50KSkgYmFyOworCistLQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcx MjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRIICckJywgZm9vIGludCkpIGJhcjsKKwor LS0gSlNPTl9UQUJMRTogYmFzaWMgZnVuY3Rpb25hbGl0eQorQ1JFQVRFIERPTUFJTiBqc29uYl90 ZXN0X2RvbWFpbiBBUyB0ZXh0IENIRUNLICh2YWx1ZSA8PiAnZm9vJyk7CitDUkVBVEUgVEVNUCBU QUJMRSBqc29uX3RhYmxlX3Rlc3QgKGpzKSBBUworCShWQUxVRVMKKwkJKCcxJyksCisJCSgnW10n KSwKKwkJKCd7fScpLAorCQkoJ1sxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0nKQorCSk7CisK Ky0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3Rh YmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6 Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJ CQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywKKwkJCSJjaGFy KDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJCQkibnVt ZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBB VEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQnCisJCSkK KwkpIGp0CisJT04gdHJ1ZTsKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VMRUNUICoKK0ZS T00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAor CQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJ TkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNo YXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpT T04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJanNi cSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJKSBqdAorCU9O IHRydWU7CisKKy0tIEVYSVNUUyBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29uX3RhYmxlX3Rl c3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMuanM6Ompzb25i LCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFksCisJCQlleGlz dHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRI ICckLmFhYScsCisJCQlleGlzdHMzIGludCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBVTktO T1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEn IEZBTFNFIE9OIEVSUk9SCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKworLS0gT3RoZXIgbWlzY2Vs bGFub3VzIGNoZWNrcworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZU IE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJwor CQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJYWFhIGludCwgLS0gImFhYSIg aGFzIGltcGxpY2l0IHBhdGggJyQuImFhYSInCisJCQlhYWExIGludCBQQVRIICckLmFhYScsCisJ CQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBF UiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFU SCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJwor CQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tIEpTT05fVEFCTEU6IFRlc3QgYmFja3dhcmQgcGFy c2luZworCitDUkVBVEUgVklFVyBqc29uYl90YWJsZV92aWV3IEFTCitTRUxFQ1QgKiBGUk9NCisJ SlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcgMSArIDIgQVMg YSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJ VFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywKKwkJ CSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCisJ CQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9t YWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEggJyQn LAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNjIGNoYXIoNCkg Rk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFUIEpTT04gIFBB VEggJyQnLAorCQkJanNiIGpzb25iICAgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJCQlqc2JxIGpz b25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJYWFhIGludCwgLS0gaW1w bGljaXQgcGF0aCAnJC4iYWFhIicsCisJCQlhYWExIGludCBQQVRIICckLmFhYScsCisJCQlleGlz dHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVYSVNUUyBQQVRI ICckLmFhYScgVFJVRSBPTiBFUlJPUiwKKwkJCWV4aXN0czMgdGV4dCBFWElTVFMgUEFUSCAnc3Ry aWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCisJCQlqczIganNvbiBQQVRIICckJywKKwkJ CWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJxIGpzb25iIFBBVEgg JyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJCQl0YSB0ZXh0W10gUEFU SCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywKKworCQkJTkVTVEVEIFBBVEggJyRbMV0n IEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJCQlORVNURUQgUEFUSCAnJFsqXScgQVMg InAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAorCQkJCSksCisJCQkJYjEgdGV4dAorCQkJ KSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICgKKwkJCQlORVNURUQgUEFU SCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJCQlhMjEgdGV4dAorCQkJCSksCisJCQkJ TkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xVTU5TICgKKwkJCQkJYTIyIHRleHQKKwkJCQkp CisJCQkpCisJCSkKKwkpOworCitcc3YganNvbmJfdGFibGVfdmlldworCitFWFBMQUlOIChDT1NU UyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzsKKworRFJPUCBW SUVXIGpzb25iX3RhYmxlX3ZpZXc7CitEUk9QIERPTUFJTiBqc29uYl90ZXN0X2RvbWFpbjsKKwor LS0gSlNPTl9UQUJMRTogb25seSBvbmUgRk9SIE9SRElOQUxJVFkgY29sdW1ucyBhbGxvd2VkCitT RUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9SIE9S RElOQUxJVFksIGlkMiBGT1IgT1JESU5BTElUWSwgYSBpbnQgUEFUSCAnJC5hJyBFUlJPUiBPTiBF TVBUWSkpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVN TlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBhIGludCBQQVRIICckJyBFUlJPUiBPTiBFTVBUWSkpIGp0 OworCistLSBKU09OX1RBQkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhhdmlvcgorU0VMRUNUICoK K0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpLAorCUpTT05fVEFCTEUo dmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJykpIGp0OworCitTRUxF Q1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVGVCBP VVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEgaW50 IFBBVEggJyQnKSBFUlJPUiBPTiBFUlJPUikganQKKwkJT04gdHJ1ZTsKKworU0VMRUNUICoKK0ZS T00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQgT1VURVIgSk9J TgorCUpTT05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICck JyBFUlJPUiBPTiBFUlJPUikpIGp0CisJCU9OIHRydWU7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckLmEnIEVSUk9SIE9OIEVN UFRZKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1O UyAoYSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgRVJST1IgT04gRU1QVFkpIEVSUk9SIE9OIEVSUk9S KSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChh IGludCBQQVRIICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0Owor CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGlu dCBQQVRIICckJyAgIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50 IFBBVEggJ3N0cmljdCAkLmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1Ip KSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMg KGEgaW50IFBBVEggJ2xheCAkLmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJS T1IpKSBqdDsKKworLS0gSlNPTl9UQUJMRTogRVhJU1RTIFBBVEggdHlwZXMKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50NCBFWElTVFMgUEFU SCAnJC5hJykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09M VU1OUyAoYSBpbnQyIEVYSVNUUyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDggRVhJU1RTIFBBVEggJyQuYScpKTsK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgZmxv YXQ0IEVYSVNUUyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGNoYXIoMykgRVhJU1RTIFBBVEggJyQuYScpKTsKK1NFTEVD VCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbiBFWElT VFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAn JCcgQ09MVU1OUyAoYSBqc29uYiBFWElTVFMgUEFUSCAnJC5hJykpOworCistLSBKU09OX1RBQkxF OiBXUkFQUEVSL1FVT1RFUyBjbGF1c2VzIG9uIHNjYWxhciBjb2x1bW5zIGRvbid0IHdvcmsgd2l0 aG91dCBhbgorLS0gZXhwbGljaXQgRk9STUFUIGNsYXVzZQorU0VMRUNUICogRlJPTSBKU09OX1RB QkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBLRUVQ IFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNv bmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQn IEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgV0lUSCBX UkFQUEVSKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcg Q09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIFdJVEggV1JBUFBFUikpOwor CistLSBKU09OX1RBQkxFOiBuZXN0ZWQgcGF0aHMgYW5kIHBsYW5zCisKKy0tIFNob3VsZCBmYWls IChKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGgKKy0tIHNw ZWNpZmljYXRpb25zIGlmIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQpCitTRUxFQ1QgKiBG Uk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVp cmVkIGhlcmUKKwlDT0xVTU5TICgKKwkJZm9vIGludCBQQVRIICckJworCSkKKwlQTEFOIERFRkFV TFQgKFVOSU9OKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdb XScsICckJyBBUyBwYXRoMQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQ09MVU1OUyAo IC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwkJCWZvbyBpbnQgUEFUSCAnJCcKKwkJ KQorCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKKworLS0gU2hvdWxkIGZhaWwgKGNv bHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0KQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAor CWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJCWEgaW50CisJKQorKSBqdDsKKwor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1O UyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQlDT0xVTU5TICgKKwkJCWMg aW50CisJCSkKKwkpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIg J1tdJywgJyQnCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcgQVMgYgor CQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICck JyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnCisJ CUNPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVNTlMgKAorCQkJCWMg aW50CisJCQkpCisJCSkKKwkpCispIGp0OworCistLSBKU09OX1RBQkxFOiBwbGFuIHZhbGlkYXRp b24KKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFT IHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRI ICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcg QVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXog aW50ICkKKwkJKQorCSkKKwlQTEFOIChwMSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQg UEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVN TlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIg aW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAp CispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsq XScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAor CQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAo IGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKKworU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1O UyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICck JyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIg Q09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQor CSkKKwlQTEFOIChwMCBVTklPTiBwMSBVTklPTiBwMTEpCispIGp0OworCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJ TkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAx MSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5T ICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBM QU4gKHAwIE9VVEVSIChwMSBDUk9TUyBwMTMpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09M VU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJh ciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChw MCBPVVRFUiAocDEgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAo IGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQg KQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFU SCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRF UiAoKHAxIFVOSU9OIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RF RCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09M VU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJh ciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChw MCBPVVRFUiAoKHAxIElOTkVSIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKKworU0VMRUNUICogRlJP TSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJ CU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1O UyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJ CQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQ TEFOIChwMCBPVVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgcDIpKQorKSBq dDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJ3N0cmljdCAk WypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBB VEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5T ICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENS T1NTIHAxMSkpIENST1NTIChwMiBJTk5FUiBwMjEpKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICdzdHJpY3QgJFsqXScgLS0gd2l0aG91dCByb290 IHBhdGggbmFtZQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBB VEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5T ICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkg Q1JPU1MgKHAyIElOTkVSIHAyMSkpCispIGp0OworCistLSBKU09OX1RBQkxFOiBwbGFuIGV4ZWN1 dGlvbgorCitDUkVBVEUgVEVNUCBUQUJMRSBqc29uYl90YWJsZV90ZXN0IChqcyBqc29uYik7CisK K0lOU0VSVCBJTlRPIGpzb25iX3RhYmxlX3Rlc3QKK1ZBTFVFUyAoCisJJ1sKKwkJeyJhIjogIDEs ICAiYiI6IFtdLCAiYyI6IFtdfSwKKwkJeyJhIjogIDIsICAiYiI6IFsxLCAyLCAzXSwgImMiOiBb MTAsIG51bGwsIDIwXX0sCisJCXsiYSI6ICAzLCAgImIiOiBbMSwgMl0sICJjIjogW119LAorCQl7 IngiOiAiNCIsICJiIjogWzEsIDJdLCAiYyI6IDEyM30KKwkgXScKKyk7CisKKy0tIHVuc3BlY2lm aWVkIHBsYW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJs ZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAor CQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5h JyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFz IHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAk LmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkpIGp0OworCist LSBkZWZhdWx0IHBsYW4gKG91dGVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29u Yl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScg YXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICds YXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxh biBkZWZhdWx0IChvdXRlciwgdW5pb24pCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBv dXRlciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rl c3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sq XScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVy IChwYiB1bmlvbiBwYykpCisJKSBqdDsKKworLS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGMg dW5pb24gcGIpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAor CWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAor CQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEg b24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAo IGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMg Y29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIG91dGVyIChwYyB1bmlv biBwYikpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChpbm5lciwgdW5pb24pCitzZWxlY3QK KwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0 dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5 LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3Rl ZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwK KwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0 aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAoaW5uZXIpCisJKSBqdDsKKworLS0gc3BlY2lm aWMgcGxhbiAocCBpbm5lciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpz b25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypd JyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGgg J2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu YlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlw bGFuIChwIGlubmVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKworLS0gZGVmYXVsdCBwbGFuIChp bm5lciwgY3Jvc3MpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQs CisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAo CisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAt MSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5z ICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBw YyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gZGVmYXVsdCAoY3Jvc3Ms IGlubmVyKQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBj KSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3Rh YmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9y IG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5 LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBw YXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMg KCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBpbm5lciAocGIgY3Jvc3MgcGMpKQor CSkganQ7CisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgor ZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEg aW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkK KwkJKQorCQlwbGFuIGRlZmF1bHQgKG91dGVyLCBjcm9zcykKKwkpIGp0OworCistLSBzcGVjaWZp YyBwbGFuIChwIG91dGVyIChwYiBjcm9zcyBwYykpCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNv bmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0n IGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAn bGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5i WypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdz dHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBs YW4gKHAgb3V0ZXIgKHBiIGNyb3NzIHBjKSkKKwkpIGp0OworCisKK3NlbGVjdAorCWp0LiosIGIx ICsgMTAwIGFzIGIKK2Zyb20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjogIDEs ICAiYiI6IFtbMSwgMTBdLCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJdfSwK KwkJCXsiYSI6ICAyLCAgImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4 IjogIjMiLCAiYiI6IFsxMSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJ Y29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScg ZGVmYXVsdCAtMSBvbiBlcnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBw YiBjb2x1bW5zICgKKwkJCQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVzdGVk IHBhdGggJ3N0cmljdCAkWypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRoICck JworCQkJCSkKKwkJCSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29s dW1ucyAoCisJCQkJYyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRo ICdzdHJpY3QgJFsqXScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJ CQkpCisJCQkpCisJCSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAg b3V0ZXIgKChwYiBpbm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0OworCist LSBTaG91bGQgc3VjY2VlZCAoSlNPTiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byByb290IGFuZCBu ZXN0ZWQgcGF0aHMpCitTRUxFQ1QgKgorRlJPTQorCWdlbmVyYXRlX3NlcmllcygxLCA0KSB4LAor CWdlbmVyYXRlX3NlcmllcygxLCAzKSB5LAorCUpTT05fVEFCTEUoanNvbmIKKwkJJ1tbMSwyLDNd LFsyLDMsNCw1XSxbMyw0LDUsNl1dJywKKwkJJ3N0cmljdCAkWypdID8gKEBbKl0gPCAkeCknCisJ CVBBU1NJTkcgeCBBUyB4LCB5IEFTIHkKKwkJQ09MVU1OUyAoCisJCQl5IHRleHQgRk9STUFUIEpT T04gUEFUSCAnJCcsCisJCQlORVNURUQgUEFUSCAnc3RyaWN0ICRbKl0gPyAoQCA+PSAkeSknCisJ CQlDT0xVTU5TICgKKwkJCQl6IGludCBQQVRIICckJworCQkJKQorCQkpCisJKSBqdDsKKworLS0g U2hvdWxkIGZhaWwgKEpTT04gYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkIHRvIGNvbHVtbiBwYXRo cykKK1NFTEVDVCAqCitGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1sxLDIsM10nLAorCSckWypd ID8gKEAgPCAkeCknCisJCVBBU1NJTkcgMTAgQVMgeAorCQlDT0xVTU5TICh5IHRleHQgRk9STUFU IEpTT04gUEFUSCAnJCA/IChAIDwgJHgpJykKKwkpIGp0OworCistLSBFeHRlbnNpb246IG5vbi1j b25zdGFudCBKU09OIHBhdGgKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMTIzfScs ICckJyB8fCAnLicgfHwgJ2EnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAxMjN9 JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEy M30nLCAnJCcgfHwgJy4nIHx8ICdiJyBERUZBVUxUICdmb28nIE9OIEVNUFRZKTsKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBXSVRIIFdS QVBQRVIpOworLS0gU2hvdWxkIGZhaWwgKGludmFsaWQgcGF0aCkKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICd7ImEiOiAxMjN9JywgJ2Vycm9yJyB8fCAnICcgfHwgJ2Vycm9yJyk7CistLSBTaG91 bGQgZmFpbCAobm90IHN1cHBvcnRlZCkKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAn eyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnIENPTFVNTlMgKGZvbyBpbnQpKTsKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNmY0NTU0MjgzNi4uNDUzZTRlNDQ2ZSAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzMTAsNiArMTMxMCw3IEBAIEpzb25QYXRoTXV0YWJsZUNv bnRleHQKIEpzb25QYXRoUGFyc2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFBy ZWRpY2F0ZUNhbGxiYWNrCitKc29uUGF0aFNwZWMKIEpzb25QYXRoU3RyaW5nCiBKc29uUGF0aFZh ckNhbGxiYWNrCiBKc29uUGF0aFZhcmlhYmxlCkBAIC0xMzE5LDYgKzEzMjAsMTcgQEAgSnNvblJl dHVybmluZwogSnNvblNjYWxhckV4cHIKIEpzb25TZW1BY3Rpb24KIEpzb25TZXJpYWxpemVFeHBy CitKc29uVGFibGUKK0pzb25UYWJsZUNvbHVtbgorSnNvblRhYmxlQ29sdW1uVHlwZQorSnNvblRh YmxlQ29udGV4dAorSnNvblRhYmxlSm9pblN0YXRlCitKc29uVGFibGVQYXJlbnQKK0pzb25UYWJs ZVBsYW4KK0pzb25UYWJsZVBsYW5Kb2luVHlwZQorSnNvblRhYmxlUGxhblR5cGUKK0pzb25UYWJs ZVNjYW5TdGF0ZQorSnNvblRhYmxlU2libGluZwogSnNvblRva2VuVHlwZQogSnNvblRyYW5zZm9y bVN0cmluZ1ZhbHVlc0FjdGlvbgogSnNvblR5cGVDYXRlZ29yeQpAQCAtMjc3NSw2ICsyNzg3LDcg QEAgVGFibGVGdW5jCiBUYWJsZUZ1bmNSb3V0aW5lCiBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNT Y2FuU3RhdGUKK1RhYmxlRnVuY1R5cGUKIFRhYmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCiBUYWJs ZVNhbXBsZUNsYXVzZQotLSAKMi4zNS4zCgo= --000000000000ff2e2c060678442e Content-Type: application/octet-stream; name="v22-0003-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v22-0003-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ln44rd9c2 RnJvbSA5OWQxYjk2ZDJiMzBjMjA0ZjM0ZDJhMDVkNjFlMmU0MTc4ZDFiNzdiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjEgU2VwIDIwMjMgMTA6MTQ6MTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYy MiAzLzVdIFNRTC9KU09OIHF1ZXJ5IGZ1bmN0aW9ucwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50 LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogOGJpdAoKVGhpcyBpbnRyb2R1Y2VzIHRoZSBTUUwvSlNPTiBmdW5jdGlvbnMgZm9yIHF1ZXJ5 aW5nIEpTT04gZGF0YSB1c2luZwpqc29ucGF0aCBleHByZXNzaW9ucy4gVGhlIGZ1bmN0aW9ucyBh cmU6CgpKU09OX0VYSVNUUygpCkpTT05fUVVFUlkoKQpKU09OX1ZBTFVFKCkKCkpTT05fRVhJU1RT KCkgdGVzdHMgaWYgdGhlIGpzb25wYXRoIGV4cHJlc3Npb24gYXBwbGllZCB0byB0aGUganNvbmIK dmFsdWUgeWllbGRzIGFueSB2YWx1ZXMuCgpKU09OX1ZBTFVFKCkgbXVzdCByZXR1cm4gYSBzaW5n bGUgdmFsdWUsIGFuZCBhbiBlcnJvciBvY2N1cnMgaWYgaXQKdHJpZXMgdG8gcmV0dXJuIG11bHRp cGxlIHZhbHVlcy4KCkpTT05fUVVFUlkoKSBtdXN0IHJldHVybiBhIGpzb24gb2JqZWN0IG9yIGFy cmF5LCBhbmQgdGhlcmUgYXJlCnZhcmlvdXMgV1JBUFBFUiBvcHRpb25zIGZvciBoYW5kbGluZyBz Y2FsYXIgb3IgbXVsdGktdmFsdWUgcmVzdWx0cy4KQm90aCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBv cHRpb25zIGZvciBoYW5kbGluZyBFTVBUWSBhbmQgRVJST1IKY29uZGl0aW9ucy4KCkFsbCBvZiB0 aGVzZSBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIGpzb25iLiBUaGUgd29ya2Fyb3VuZCBmb3Ig bm93CmlzIHRvIGNhc3QgdGhlIGFyZ3VtZW50IHRvIGpzb25iLgoKQXV0aG9yOiBOaWtpdGEgR2x1 a2hvdiA8bi5nbHVob3ZAcG9zdGdyZXNwcm8ucnU+CkF1dGhvcjogVGVvZG9yIFNpZ2FldiA8dGVv ZG9yQHNpZ2Fldi5ydT4KQXV0aG9yOiBPbGVnIEJhcnR1bm92IDxvYmFydHVub3ZAZ21haWwuY29t PgpBdXRob3I6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+CkF1dGhv cjogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CkF1dGhvcjogQW1pdCBMYW5n b3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChp biBubyBwYXJ0aWN1bGFyIG9yZGVyKSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3Ys IFBhdmVsIFN0ZWh1bGUsIEFuZHJldyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhp bWFuc2h1IFVwYWRoeWF5YSwgRGFuaWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnksIMOBbHZh cm8gSGVycmVyYSwKamlhbiBoZQoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBi YjkzNS0wMTU4LTc4YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFs YXAzLmFuYXJhemVsLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2It YWE2Ni1mMjMwLTNkNmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdyZXNxbC5vcmcKRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZp NWQ0eGNLeXJMQzFOYmdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21s ICAgICAgICAgICAgICAgICAgICAgIHwgIDE0OCArKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHByLmMgICAgICAgICAgICAgfCAgNDU1ICsrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwckludGVycC5jICAgICAgIHwgIDU0NSArKysrKysrKystCiBzcmMvYmFja2VuZC9q aXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgICAgICAgIHwgIDI2NSArKysrKwogc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF90eXBlcy5jICAgICAgICB8ICAgIDUgKwogc3JjL2JhY2tlbmQvbm9k ZXMvbWFrZWZ1bmNzLmMgICAgICAgICAgICAgICB8ICAgMTYgKwogc3JjL2JhY2tlbmQvbm9kZXMv bm9kZUZ1bmNzLmMgICAgICAgICAgICAgICB8ICAxNTAgKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgIHwgICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvY2xhdXNlcy5jICAgICAgICB8ICAgMTkgKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eSAgICAgICAgICAgICAgICAgICB8ICAzNDggKysrKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfZXhwci5jICAgICAgICAgICAgIHwgIDU0MyArKysrKysrKystCiBzcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfdGFyZ2V0LmMgICAgICAgICAgIHwgICAxNSArCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0dGluZy5jICAgICAgICAgIHwgICA0NCArCiBzcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmIuYyAgICAgICAgICAgICAgIHwgICA2MiArKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jICAgICAgICAgICB8ICAgNTIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aC5jICAgICAgICAgICAgfCAgMjU1ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNv bnBhdGhfZXhlYy5jICAgICAgIHwgIDM5MSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMgICAgICAgICAgIHwgIDEzNyArKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmggICAgICAgICAgICAgfCAgMTQ1ICsrKwogc3JjL2luY2x1ZGUvZm1nci5oICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNz LmggICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o ICAgICAgICAgICAgICB8ICAgNTkgKwogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAg ICAgICAgICAgICB8ICAxMTUgKysKIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgICAg ICAgICAgICAgfCAgIDExICsKIHNyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaCAgICAgICAg ICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggICAgICAgICAgICAgICAg ICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oICAgICAgICAgICAgICAg fCAgICA1ICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAgICAgICAgICAgICAgfCAg IDI3ICsKIHNyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIgICAgfCAgIDI4 ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbl9zcWxqc29uLm91dCAgfCAgIDE4ICsK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQgfCAxMDcxICsrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAg ICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsICAgICAg IHwgICAxMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCAgICAgIHwg IDM0MSArKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAg fCAgIDIwICsKIDM1IGZpbGVzIGNoYW5nZWQsIDUyNDQgaW5zZXJ0aW9ucygrKSwgNjggZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29u X3NxbGpzb24ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYl9zcWxqc29uLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25fc3FsanNvbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNz L3NxbC9qc29uYl9zcWxqc29uLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IDI0YWQ4N2Y5MTAuLmRkYzRmNGY2YWEg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1 bmMuc2dtbApAQCAtMTcwNTYsNiArMTcwNTYsMTU0IEBAIGFycmF5IHcvbyBVSz8gfCB0CiAgICAg IDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgorCisgIDxwYXJhPgorICAgPHhy ZWYgbGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24tcXVlcnlpbmciLz4gZGV0YWlscyB0aGUgU1FM L0pTT04KKyAgIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IEpTT04gZGF0YS4K KyAgPC9wYXJhPgorCisgIDxub3RlPgorICAgPHBhcmE+CisgICAgU1FML0pTT04gcGF0aHMgY2Fu IG9ubHkgYmUgYXBwbGllZCB0byB0aGUgPHR5cGU+anNvbmI8L3R5cGU+IHR5cGUsIHNvIGl0Cisg ICAgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGNhc3QgdGhlIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0 ZW08L3JlcGxhY2VhYmxlPgorICAgIGFyZ3VtZW50IG9mIHRoZXNlIGZ1bmN0aW9ucyB0byA8dHlw ZT5qc29uYjwvdHlwZT4uCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8dGFibGUgaWQ9ImZ1 bmN0aW9ucy1zcWxqc29uLXF1ZXJ5aW5nIj4KKyAgIDx0aXRsZT5TUUwvSlNPTiBRdWVyeSBGdW5j dGlvbnM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICA8dGhlYWQ+CisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVu Y19zaWduYXR1cmUiPgorICAgICAgICBGdW5jdGlvbiBzaWduYXR1cmUKKyAgICAgICA8L3BhcmE+ CisgICAgICAgPHBhcmE+CisgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgPC9wYXJhPgorICAg ICAgIDxwYXJhPgorICAgICAgICBFeGFtcGxlKHMpCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUi PgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5Pmpzb25fZXhpc3RzPC9wcmltYXJ5PjwvaW5k ZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl9leGlzdHM8L2Z1bmN0aW9uPiAoCisgICAg ICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxl PnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lO RzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5B UzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25h bD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJh bD5SRVRVUk5JTkc8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+VFJVRTwvbGl0ZXJh bD4gfCA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gfDxsaXRlcmFsPiBVTktOT1dOPC9saXRlcmFs PiB8IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFs PiA8L29wdGlvbmFsPikKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJl dHVybnMgdHJ1ZSBpZiB0aGUgU1FML0pTT04gPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwv cmVwbGFjZWFibGU+CisgICAgICAgIGFwcGxpZWQgdG8gdGhlIDxyZXBsYWNlYWJsZT5jb250ZXh0 X2l0ZW08L3JlcGxhY2VhYmxlPiB1c2luZyB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlPnZhbHVl PC9yZXBsYWNlYWJsZT5zIHlpZWxkcyBhbnkgaXRlbXMuCisgICAgICAgIFRoZSA8bGl0ZXJhbD5P TiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNpZmllcyB3aGF0IGlzIHJldHVybmVkIGlmCisg ICAgICAgIGFuIGVycm9yIG9jY3VyczsgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIDxsaXRlcmFs PkZBTFNFPC9saXRlcmFsPi4KKyAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSA8cmVwbGFjZWFibGU+ cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgaXMgPGxpdGVyYWw+c3RyaWN0 PC9saXRlcmFsPiwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkIGlmIGl0IHlpZWxkcyBubyBpdGVtcy4K KyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fZXhp c3RzKGpzb25iICd7ImtleTEiOiBbMSwyLDNdfScsICdzdHJpY3QgJC5rZXkxWypdID8gKEAgPiAy KScpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+dDwvcmV0dXJudmFsdWU+CisgICAg ICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX2V4aXN0cyhq c29uYiAneyJhIjogWzEsMiwzXX0nLCAnbGF4ICQuYVs1XScgRVJST1IgT04gRVJST1IpPC9saXRl cmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+ZjwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJh PgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX2V4aXN0cyhqc29uYiAneyJh IjogWzEsMiwzXX0nLCAnc3RyaWN0ICQuYVs1XScgRVJST1IgT04gRVJST1IpPC9saXRlcmFsPgor ICAgICAgICA8cmV0dXJudmFsdWU+RVJST1I6ICBqc29ucGF0aCBhcnJheSBzdWJzY3JpcHQgaXMg b3V0IG9mIGJvdW5kczwvcmV0dXJudmFsdWU+CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAg PC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+ PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5 Pmpzb25fcXVlcnk8L3ByaW1hcnk+PC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5qc29u X3F1ZXJ5PC9mdW5jdGlvbj4gKAorICAgICAgICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9y ZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiA8 b3B0aW9uYWw+IDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IHsgPHJlcGxhY2VhYmxlPnZhbHVl PC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT52YXJuYW1l PC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPjwvb3B0aW9uYWw+Cisg ICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFi bGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5GT1JNQVQgSlNP TjwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5FTkNPRElORyBVVEY4PC9saXRlcmFsPiA8 L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsg PGxpdGVyYWw+V0lUSE9VVDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5XSVRIPC9saXRlcmFsPiB7IDxs aXRlcmFsPkNPTkRJVElPTkFMPC9saXRlcmFsPiB8IDxvcHRpb25hbD48bGl0ZXJhbD5VTkNPTkRJ VElPTkFMPC9saXRlcmFsPjwvb3B0aW9uYWw+IH0gfSA8b3B0aW9uYWw+IDxsaXRlcmFsPkFSUkFZ PC9saXRlcmFsPiA8L29wdGlvbmFsPiA8bGl0ZXJhbD5XUkFQUEVSPC9saXRlcmFsPiA8L29wdGlv bmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+S0VFUDwvbGl0ZXJhbD4gfCA8bGl0 ZXJhbD5PTUlUPC9saXRlcmFsPiB9IDxsaXRlcmFsPlFVT1RFUzwvbGl0ZXJhbD4gPG9wdGlvbmFs PiA8bGl0ZXJhbD5PTiBTQ0FMQVIgU1RSSU5HPC9saXRlcmFsPiA8L29wdGlvbmFsPiA8L29wdGlv bmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwvbGl0ZXJhbD4geyA8b3B0aW9u YWw+IDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFsPiB8IDxsaXRlcmFsPk9CSkVD VDwvbGl0ZXJhbD4gfSB8IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5l eHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gPC9v cHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8 IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xpdGVyYWw+IHsgPG9w dGlvbmFsPiA8bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4gfCA8bGl0ZXJhbD5P QkpFQ1Q8L2xpdGVyYWw+IH0gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFi bGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+ IDwvb3B0aW9uYWw+KQorICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1 cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIDxyZXBsYWNlYWJsZT5wYXRo X2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB0byB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlPmNv bnRleHRfaXRlbTwvcmVwbGFjZWFibGU+IHVzaW5nIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+ dmFsdWU8L3JlcGxhY2VhYmxlPnMuCisgICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4g YSBKU09OIHN0cmluZywgc28gaWYgdGhlIHBhdGggZXhwcmVzc2lvbgorICAgICAgICByZXR1cm5z IG11bHRpcGxlIFNRTC9KU09OIGl0ZW1zLCB5b3UgbXVzdCB3cmFwIHRoZSByZXN1bHQgdXNpbmcg dGhlCisgICAgICAgIDxsaXRlcmFsPldJVEggV1JBUFBFUjwvbGl0ZXJhbD4gY2xhdXNlLiBJZiB0 aGUgd3JhcHBlciBpcworICAgICAgICA8bGl0ZXJhbD5VTkNPTkRJVElPTkFMPC9saXRlcmFsPiwg YW4gYXJyYXkgd3JhcHBlciB3aWxsIGFsd2F5cworICAgICAgICBiZSBhcHBsaWVkLCBldmVuIGlm IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhbHJlYWR5IGEgc2luZ2xlIEpTT04gb2JqZWN0CisgICAg ICAgIG9yIGFycmF5LCBidXQgaWYgaXQgaXMgPGxpdGVyYWw+Q09ORElUSU9OQUw8L2xpdGVyYWw+ LCBpdCB3aWxsIG5vdCBiZQorICAgICAgICBhcHBsaWVkIHRvIGEgc2luZ2xlIGFycmF5IG9yIG9i amVjdC4gPGxpdGVyYWw+VU5DT05ESVRJT05BTDwvbGl0ZXJhbD4KKyAgICAgICAgaXMgdGhlIGRl ZmF1bHQuICBJZiB0aGUgcmVzdWx0IGlzIGEgc2NhbGFyIHN0cmluZywgYnkgZGVmYXVsdCB0aGUg dmFsdWUKKyAgICAgICAgcmV0dXJuZWQgd2lsbCBoYXZlIHN1cnJvdW5kaW5nIHF1b3RlcyBtYWtp bmcgaXQgYSB2YWxpZCBKU09OIHZhbHVlLAorICAgICAgICB3aGljaCBjYW4gYmUgbWFkZSBleHBs aWNpdCBieSBzcGVjaWZ5aW5nIDxsaXRlcmFsPktFRVAgUVVPVEVTPC9saXRlcmFsPi4KKyAgICAg ICAgQ29udmVyc2VseSwgcXVvdGVzIGNhbiBiZSBvbWl0dGVkIGJ5IHNwZWNpZnlpbmcgPGxpdGVy YWw+T01JVCBRVU9URVM8L2xpdGVyYWw+LgorICAgICAgICBUaGUgcmV0dXJuZWQgPHJlcGxhY2Vh YmxlPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+IGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MKKyAgICAg ICAgYXMgZm9yIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyBsaWtlIDxmdW5jdGlvbj5qc29uX29iamVj dGFnZzwvZnVuY3Rpb24+OworICAgICAgICB0aGUgZGVmYXVsdCByZXR1cm5lZCB0eXBlIGlzIDx0 eXBlPmpzb25iPC90eXBlPi4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVNUFRZPC9saXRlcmFs PiBjbGF1c2Ugc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBpZiB0aGUKKyAgICAgICAgPHJlcGxhY2Vh YmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHlpZWxkcyBubyB2YWx1ZSBhdCBhbGw7 IHRoZQorICAgICAgICBkZWZhdWx0IHdoZW4gPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IGlz IG5vdCBzcGVjaWZpZWQgaXMgdG8gcmV0dXJuIGEKKyAgICAgICAgbnVsbCB2YWx1ZS4gIFRoZSA8 bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gY2xhdXNlIHNwZWNpZmllcyB0aGUgYmVoYXZpb3IK KyAgICAgICAgaWYgYW4gZXJyb3Igb2NjdXJzIGFzIGEgcmVzdWx0IG9mIDx0eXBlPmpzb25wYXRo PC90eXBlPiBldmFsdWF0aW9uCisgICAgICAgIChpbmNsdWRpbmcgY2FzdCB0byB0aGUgb3V0cHV0 IHR5cGUpIG9yIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mCisgICAgICAgIDxsaXRlcmFsPk9OIEVN UFRZPC9saXRlcmFsPiBiZWhhdmlvciAodGhhdCB3YXMgY2F1c2VkIGJ5IGVtcHR5IHJlc3VsdCBv ZgorICAgICAgICA8dHlwZT5qc29ucGF0aDwvdHlwZT4gZXZhbHVhdGlvbik7IHRoZSBkZWZhdWx0 IHdoZW4KKyAgICAgICAgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IGlzIG5vdCBzcGVjaWZp ZWQgaXMgdG8gcmV0dXJuIGEgbnVsbCB2YWx1ZS4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fcXVlcnkoanNvbmIgJ1sxLFsyLDNdLG51bGxdJywg J2xheCAkWypdWzFdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIpPC9saXRlcmFsPgorICAgICAg ICA8cmV0dXJudmFsdWU+WzNdPC9yZXR1cm52YWx1ZT4KKyAgICAgIDwvcGFyYT48L2VudHJ5Pgor ICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2Vu dHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+PHBy aW1hcnk+anNvbl92YWx1ZTwvcHJpbWFyeT48L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9u Pmpzb25fdmFsdWU8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0X2l0 ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFi bGU+CisgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4geyA8cmVw bGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxh Y2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+ PC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVy YWw+IDxyZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAg ICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVM TDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+ZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IDwvb3B0 aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8 bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxyZXBs YWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0 ZXJhbD4gPC9vcHRpb25hbD4pCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIDxyZXBsYWNlYWJs ZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB0byB0aGUKKyAgICAgICAgPHJlcGxhY2Vh YmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+IHVzaW5nIHRoZQorICAgICAgICA8bGl0ZXJh bD5QQVNTSU5HPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPnMuIFRo ZQorICAgICAgICBleHRyYWN0ZWQgdmFsdWUgbXVzdCBiZSBhIHNpbmdsZSA8YWNyb255bT5TUUwv SlNPTjwvYWNyb255bT4gc2NhbGFyCisgICAgICAgIGl0ZW0uIEZvciByZXN1bHRzIHRoYXQgYXJl IG9iamVjdHMgb3IgYXJyYXlzLCB1c2UgdGhlCisgICAgICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5 PC9mdW5jdGlvbj4gZnVuY3Rpb24gaW5zdGVhZC4KKyAgICAgICAgVGhlIHJldHVybmVkIDxyZXBs YWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiBoYXMgdGhlIHNhbWUgc2VtYW50aWNzCisg ICAgICAgIGFzIGZvciBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgbGlrZSA8ZnVuY3Rpb24+anNvbl9v YmplY3RhZ2c8L2Z1bmN0aW9uPi4KKyAgICAgICAgVGhlIGRlZmF1bHQgcmV0dXJuZWQgdHlwZSBp cyA8dHlwZT50ZXh0PC90eXBlPi4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVSUk9SPC9saXRl cmFsPiBhbmQgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+CisgICAgICAgIGNsYXVzZXMgaGF2 ZSBzaW1pbGFyIHNlbWFudGljcyBhcyBtZW50aW9uZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9mCisg ICAgICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3ZhbHVlKGpzb25iICciMTIzLjQ1 IicsICckJyBSRVRVUk5JTkcgZmxvYXQpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+ MTIzLjQ1PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAg ICAgIDxsaXRlcmFsPmpzb25fdmFsdWUoanNvbmIgJyIwMzowNCAyMDE1LTAyLTAxIicsICckLmRh dGV0aW1lKCJISDI0Ok1JJm5ic3A7WVlZWS1NTS1ERCIpJyBSRVRVUk5JTkcgZGF0ZSk8L2xpdGVy YWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT4yMDE1LTAyLTAxPC9yZXR1cm52YWx1ZT4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fdmFsdWUoanNv bmIgJ1sxLDJdJywgJ3N0cmljdCAkWypdJyBERUZBVUxUIDkgT04gRVJST1IpPC9saXRlcmFsPgor ICAgICAgICA8cmV0dXJudmFsdWU+OTwvcmV0dXJudmFsdWU+CisgICAgICA8L3BhcmE+PC9lbnRy eT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgorICA8L3RhYmxlPgor CiAgPC9zZWN0Mj4KIAogIDxzZWN0MiBpZD0iZnVuY3Rpb25zLXNxbGpzb24tcGF0aCI+CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYwppbmRleCA3ODc5NmFjZDhmLi5lOGJjMmNiMDJjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNz LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCkBAIC04OCw2ICs4OSwxOCBAQCBz dGF0aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3Rh dGUgKmFnZ3N0YXRlLAogCQkJCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0 ZVBlclRyYW5zIHBlcnRyYW5zLAogCQkJCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGlu dCBzZXRvZmYsIGJvb2wgaXNoYXNoLAogCQkJCQkJCQkgIGJvb2wgbnVsbGNoZWNrKTsKK3N0YXRp YyB2b2lkIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRl LAorCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwKKwkJCQkJCQkgRXhwckV2YWxT dGVwICpzY3JhdGNoKTsKK3N0YXRpYyBEYXR1bSBHZXRKc29uQmVoYXZpb3JDb25zdFZhbChKc29u QmVoYXZpb3IgKmJlaGF2aW9yLCBib29sICppc19udWxsKTsKK3N0YXRpYyBKc29uQ29lcmNpb25T dGF0ZSAqRXhlY0luaXRKc29uQ29lcmNpb24oRXhwckV2YWxTdGVwICpzY3JhdGNoLCBFeHByU3Rh dGUgKnN0YXRlLAorCQkJCQkJCQkJCQkgICBKc29uQ29lcmNpb24gKmNvZXJjaW9uLAorCQkJCQkJ CQkJCQkgICBKc29uQmVoYXZpb3IgKm9uX2Vycm9yLAorCQkJCQkJCQkJCQkgICBEYXR1bSAqcmVz diwgYm9vbCAqcmVzbnVsbCk7CitzdGF0aWMgTGlzdCAqRXhlY0luaXRKc29uSXRlbUNvZXJjaW9u cyhFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgICBM aXN0ICppdGVtX2NvZXJjaW9ucywKKwkJCQkJCQkJCSAgIEpzb25CZWhhdmlvciAqb25fZXJyb3Is CisJCQkJCQkJCQkgICBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCk7CiAKIAogLyoKQEAgLTI0 MDMsNiArMjQxNiwxNCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpz dGF0ZSwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJ SnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7CisKKwkJCQlFeGVj SW5pdEpzb25FeHByKGpleHByLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCwgJnNjcmF0Y2gpOworCQkJ CWJyZWFrOworCQkJfQorCiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCXsKIAkJCQlOdWxsVGVzdCAg ICpudGVzdCA9IChOdWxsVGVzdCAqKSBub2RlOwpAQCAtNDE3MiwzICs0MTkzLDQzNyBAQCBFeGVj QnVpbGRQYXJhbVNldEVxdWFsKFR1cGxlRGVzYyBkZXNjLAogCiAJcmV0dXJuIHN0YXRlOwogfQor CisvKgorICogUHVzaCBzdGVwcyB0byBldmFsdWF0ZSBhIEpzb25FeHByIGFuZCBpdHMgdmFyaW91 cyBzdWJzaWRpYXJ5IGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgdm9pZAorRXhlY0luaXRKc29u RXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJIERhdHVtICpyZXN2 LCBib29sICpyZXNudWxsLAorCQkJCSBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gpCit7CisJSnNvbkV4 cHJTdGF0ZSAqanNlc3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29uRXhwclN0YXRlKSk7CisJSnNv bkV4cHJQcmVFdmFsU3RhdGUgKnByZV9ldmFsID0gJmpzZXN0YXRlLT5wcmVfZXZhbDsKKwlMaXN0 Q2VsbCAgICphcmdleHBybGM7CisJTGlzdENlbGwgICAqYXJnbmFtZWxjOworCWludAkJCXNraXBf c3RlcF9vZmYgPSAtMTsKKwlpbnQJCQlwYXNzaW5nX2FyZ3Nfc3RlcF9vZmYgPSAtMTsKKwlpbnQJ CQljb2VyY2lvbl9zdGVwX29mZiA9IC0xOworCWludAkJCWNvZXJjaW9uX2ZpbmlzaF9zdGVwX29m ZiA9IC0xOworCWludAkJCWJlaGF2aW9yX3N0ZXBfb2ZmID0gLTE7CisJaW50CQkJb25lbXB0eV9l eHByX3N0ZXBfb2ZmID0gLTE7CisJaW50CQkJb25lbXB0eV9qdW1wX3N0ZXBfb2ZmID0gLTE7CisJ aW50CQkJb25lcnJvcl9leHByX3N0ZXBfb2ZmID0gLTE7CisJaW50CQkJb25lcnJvcl9qdW1wX3N0 ZXBfb2ZmID0gLTE7CisJaW50CQkJcmVzdWx0X2NvZXJjaW9uX2p1bXBfc3RlcF9vZmYgPSAtMTsK KwlMaXN0CSAgICphZGp1c3RfanVtcHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisJRXhwckV2 YWxTdGVwICphczsKKworCWpzZXN0YXRlLT5qc2V4cHIgPSBqZXhwcjsKKworCS8qCisJICogQWRk IHN0ZXBzIHRvIGNvbXB1dGUgZm9ybWF0dGVkX2V4cHIsIHBhdGhzcGVjLCBhbmQgUEFTU0lORyBh cmcKKwkgKiBleHByZXNzaW9ucyBhcyB0aGluZ3MgdGhhdCBtdXN0IGJlIGV2YWx1YXRlZCAqYmVm b3JlKiB0aGUgYWN0dWFsIEpTT04KKwkgKiBwYXRoIGV4cHJlc3Npb24uCisJICovCisJRXhlY0lu aXRFeHByUmVjKChFeHByICopIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgc3RhdGUsCisJCQkJCSZw cmVfZXZhbC0+Zm9ybWF0dGVkX2V4cHIudmFsdWUsCisJCQkJCSZwcmVfZXZhbC0+Zm9ybWF0dGVk X2V4cHIuaXNudWxsKTsKKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPnBhdGhfc3Bl Yywgc3RhdGUsCisJCQkJCSZwcmVfZXZhbC0+cGF0aHNwZWMudmFsdWUsCisJCQkJCSZwcmVfZXZh bC0+cGF0aHNwZWMuaXNudWxsKTsKKworCS8qCisJICogQmVmb3JlIHB1c2hpbmcgc3RlcHMgZm9y IFBBU1NJTkcgYXJncywgcHVzaCBhIHN0ZXAgdG8gZGVjaWRlIHdoZXRoZXIgdG8KKwkgKiBza2lw IGV2YWx1YXRpbmcgdGhlIGFyZ3MgYW5kIHRoZSBKU09OIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRp bmcgb24KKwkgKiB3aGV0aGVyIGVpdGhlciBvZiBmb3JtYXR0ZWRfZXhwciBhbmQgcGF0aHNwZWMg aXMgTlVMTDsgc2VlCisJICogRXhlY0V2YWxKc29uRXhwclNraXAoKS4KKwkgKi8KKwlzY3JhdGNo LT5vcGNvZGUgPSBFRU9QX0pTT05FWFBSX1NLSVA7CisJc2NyYXRjaC0+ZC5qc29uZXhwcl9za2lw LmpzZXN0YXRlID0ganNlc3RhdGU7CisJc2tpcF9zdGVwX29mZiA9IHN0YXRlLT5zdGVwc19sZW47 CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKiBQQVNTSU5HIGFyZ3Mu ICovCisJanNlc3RhdGUtPnByZV9ldmFsLmFyZ3MgPSBOSUw7CisJcGFzc2luZ19hcmdzX3N0ZXBf b2ZmID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwlmb3Jib3RoKGFyZ2V4cHJsYywgamV4cHItPnBhc3Np bmdfdmFsdWVzLAorCQkJYXJnbmFtZWxjLCBqZXhwci0+cGFzc2luZ19uYW1lcykKKwl7CisJCUV4 cHIJICAgKmFyZ2V4cHIgPSAoRXhwciAqKSBsZmlyc3QoYXJnZXhwcmxjKTsKKwkJU3RyaW5nCSAg ICphcmduYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBhcmduYW1lbGMpOworCQlKc29uUGF0aFZh cmlhYmxlICp2YXIgPSBwYWxsb2Moc2l6ZW9mKCp2YXIpKTsKKworCQl2YXItPm5hbWUgPSBwc3Ry ZHVwKGFyZ25hbWUtPnN2YWwpOworCQl2YXItPnR5cGlkID0gZXhwclR5cGUoKE5vZGUgKikgYXJn ZXhwcik7CisJCXZhci0+dHlwbW9kID0gZXhwclR5cG1vZCgoTm9kZSAqKSBhcmdleHByKTsKKwor CQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgYXJnZXhwciwgc3RhdGUsICZ2YXItPnZhbHVlLCAm dmFyLT5pc251bGwpOworCisJCXByZV9ldmFsLT5hcmdzID0gbGFwcGVuZChwcmVfZXZhbC0+YXJn cywgdmFyKTsKKwl9CisKKwkvKiBTdGVwIGZvciB0aGUgYWN0dWFsIEpTT04gcGF0aCBldmFsdWF0 aW9uOyBzZWUgRXhlY0V2YWxKc29uRXhwcigpLiAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1Bf SlNPTkVYUFJfUEFUSDsKKwlzY3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7 CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKgorCSAqIFN0ZXAgdG8g aGFuZGxlIE9OIEVSUk9SIGFuZCBPTiBFTVBUWSBiZWhhdmlvci4gIEFsc28sIHRvIGhhbmRsZSBl cnJvcnMKKwkgKiB0aGF0IG1heSBvY2N1ciBkdXJpbmcgY29lcmNpb24gaGFuZGxpbmcuCisJICoK KwkgKiBTZWUgRXhlY0V2YWxKc29uRXhwckJlaGF2aW9yKCkuCisJICovCisJc2NyYXRjaC0+b3Bj b2RlID0gRUVPUF9KU09ORVhQUl9CRUhBVklPUjsKKwlzY3JhdGNoLT5kLmpzb25leHByX2JlaGF2 aW9yLmpzZXN0YXRlID0ganNlc3RhdGU7CisJYmVoYXZpb3Jfc3RlcF9vZmYgPSBzdGF0ZS0+c3Rl cHNfbGVuOworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyogU3RlcChz KSB0byBldmFsdWF0ZSB0aGUgT04gRU1QVFkgZXhwcmVzc2lvbiAqLworCW9uZW1wdHlfZXhwcl9z dGVwX29mZiA9IHN0YXRlLT5zdGVwc19sZW47CisJaWYgKGpleHByLT5vbl9lbXB0eSAmJgorCQlq ZXhwci0+b25fZW1wdHktPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRVJST1IpCisJeworCQlpZiAo amV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIpCisJCXsKKwkJCUV4ZWNJbml0RXhwclJlYygo RXhwciAqKSBqZXhwci0+b25fZW1wdHktPmRlZmF1bHRfZXhwciwKKwkJCQkJCQlzdGF0ZSwgcmVz diwgcmVzbnVsbCk7CisKKwkJCS8qCisJCQkgKiBFbWl0IEpVTVAgc3RlcCB0byBqdW1wIHRvIHRo ZSBzdGVwIGFmdGVyIEpzb25FeHByIHN0ZXBzLAorCQkJICogYmVjYXVzZSB0aGUgZGVmYXVsdCBl eHByZXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gY29lcmNlZCwgc28KKwkJCSAqIHRoZXJlJ3Mgbm90 aGluZyBtb3JlIHRvIGRvLgorCQkJICovCisJCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pVTVA7 CisJCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJCQlF eHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwkJCWFkanVzdF9qdW1wcyA9IGxhcHBl bmRfaW50KGFkanVzdF9qdW1wcywgc3RhdGUtPnN0ZXBzX2xlbiAtIDEpOworCQl9CisJCWVsc2UK KwkJeworCQkJRGF0dW0JCWNvbnN0dmFsdWU7CisJCQlib29sCQljb25zdGlzbnVsbDsKKworCQkJ Y29uc3R2YWx1ZSA9IEdldEpzb25CZWhhdmlvckNvbnN0VmFsKGpleHByLT5vbl9lbXB0eSwKKwkJ CQkJCQkJCQkJCSAmY29uc3Rpc251bGwpOworCQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9DT05T VDsKKwkJCXNjcmF0Y2gtPmQuY29uc3R2YWwudmFsdWUgPSBjb25zdHZhbHVlOworCQkJc2NyYXRj aC0+ZC5jb25zdHZhbC5pc251bGwgPSBjb25zdGlzbnVsbDsKKworCQkJRXhwckV2YWxQdXNoU3Rl cChzdGF0ZSwgc2NyYXRjaCk7CisKKwkJCS8qCisJCQkgKiBFbWl0IEpVTVAgc3RlcCB0byBqdW1w IHRvIHRoZSBjb2VyY2lvbiBzdGVwIHRvIGNvZXJjZSB0aGUgYWJvdmUKKwkJCSAqIHZhbHVlIHRv IHRoZSBkZXNpcmVkIG91dHB1dCB0eXBlLgorCQkJICovCisJCQlvbmVtcHR5X2p1bXBfc3RlcF9v ZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOwor CQkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCQkJRXhw ckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJCX0KKwl9CisKKwkvKiBTdGVwKHMpIHRv IGV2YWx1YXRlIHRoZSBPTiBFUlJPUiBleHByZXNzaW9uICovCisJb25lcnJvcl9leHByX3N0ZXBf b2ZmID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwlpZiAoamV4cHItPm9uX2Vycm9yICYmCisJCWpleHBy LT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwl7CisJCWlmIChqZXhw ci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwcikKKwkJeworCQkJRXhlY0luaXRFeHByUmVjKChFeHBy ICopIGpleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByLAorCQkJCQkJCXN0YXRlLCByZXN2LCBy ZXNudWxsKTsKKworCQkJLyoKKwkJCSAqIEVtaXQgSlVNUCBzdGVwIHRvIGp1bXAgdG8gdGhlIHN0 ZXAgYWZ0ZXIgSnNvbkV4cHIgc3RlcHMsCisJCQkgKiBiZWNhdXNlIHRoZSBkZWZhdWx0IGV4cHJl c3Npb24gaGFzIGFscmVhZHkgYmVlbiBjb2VyY2VkLCBzbworCQkJICogdGhlcmUncyBub3RoaW5n IG1vcmUgdG8gZG8uCisJCQkgKi8KKwkJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJ CXNjcmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQgYmVsb3cgKi8KKwkJCUV4cHJF dmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCQkJYWRqdXN0X2p1bXBzID0gbGFwcGVuZF9p bnQoYWRqdXN0X2p1bXBzLCBzdGF0ZS0+c3RlcHNfbGVuIC0gMSk7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlEYXR1bQkJY29uc3R2YWx1ZTsKKwkJCWJvb2wJCWNvbnN0aXNudWxsOworCisJCQljb25z dHZhbHVlID0gR2V0SnNvbkJlaGF2aW9yQ29uc3RWYWwoamV4cHItPm9uX2Vycm9yLAorCQkJCQkJ CQkJCQkJICZjb25zdGlzbnVsbCk7CisJCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0NPTlNUOwor CQkJc2NyYXRjaC0+ZC5jb25zdHZhbC52YWx1ZSA9IGNvbnN0dmFsdWU7CisJCQlzY3JhdGNoLT5k LmNvbnN0dmFsLmlzbnVsbCA9IGNvbnN0aXNudWxsOworCisJCQlFeHByRXZhbFB1c2hTdGVwKHN0 YXRlLCBzY3JhdGNoKTsKKworCQkJLyoKKwkJCSAqIEVtaXQgSlVNUCBzdGVwIHRvIGp1bXAgdG8g dGhlIGNvZXJjaW9uIHN0ZXAgdG8gY29lcmNlIHRoZSBhYm92ZQorCQkJICogdmFsdWUgdG8gdGhl IGRlc2lyZWQgb3V0cHV0IHR5cGUuCisJCQkgKi8KKwkJCW9uZXJyb3JfanVtcF9zdGVwX29mZiA9 IHN0YXRlLT5zdGVwc19sZW47CisJCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pVTVA7CisJCQlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGxhdGVyICovCisJCQlFeHByRXZh bFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwkJfQorCX0KKworCS8qCisJICogU3RlcCB0byBo YW5kbGUgYXBwbHlpbmcgY29lcmNpb24gdG8gdGhlIEpTT04gaXRlbSByZXR1cm5lZCBieQorCSAq IEV4ZWNFdmFsSnNvbkV4cHIoKSBvciB0byB0aGUgT04gRU1QVFkvRVJST1IgZXhwcmVzc2lvbiBh cworCSAqIEV4ZWNFdmFsSnNvbkV4cHJCZWhhdmlvcigpIGRlY2lkZXMuCisJICoKKwkgKiBTZWUg RXhlY0V2YWxKc29uRXhwckNvZXJjaW9uKCkuCisJICovCisJc2NyYXRjaC0+b3Bjb2RlID0gRUVP UF9KU09ORVhQUl9DT0VSQ0lPTjsKKwlzY3JhdGNoLT5kLmpzb25leHByX2NvZXJjaW9uLmpzZXN0 YXRlID0ganNlc3RhdGU7CisJY29lcmNpb25fc3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOwor CUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyogSW5pdGlhbGl6ZSBjb2Vy Y2lvbiBleHByZXNzaW9uKHMpLiAqLworCWlmIChqZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCXsK KwkJanNlc3RhdGUtPnJlc3VsdF9qY3N0YXRlID0KKwkJCUV4ZWNJbml0SnNvbkNvZXJjaW9uKHNj cmF0Y2gsIHN0YXRlLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLAorCQkJCQkJCQkgamV4cHItPm9u X2Vycm9yLCByZXN2LCByZXNudWxsKTsKKwkJLyogRW1pdCBKVU1QIHN0ZXAgdG8ganVtcCB0byB0 aGUgc3RlcCBhZnRlciBKc29uRXhwciBzdGVwcy4gKi8KKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVP UF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogY29tcHV0ZWQgbGF0 ZXIgKi8KKwkJcmVzdWx0X2NvZXJjaW9uX2p1bXBfc3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVu OworCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwl9CisJaWYgKGpleHByLT5p dGVtX2NvZXJjaW9ucykKKwl7CisJCS8qCisJCSAqIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lv bigpIGNhbGxlZCBieSBFeGVjRXZhbEpzb25FeHByKCkgY2hvb3NlcworCQkgKiBvbmUgZm9yIGEg Z2l2ZW4gSlNPTiBpdGVtIHJldHVybmVkIGJ5IEpzb25QYXRoVmFsdWUoKS4KKwkJICovCisJCWpz ZXN0YXRlLT5pdGVtX2pjc3RhdGVzID0KKwkJCUV4ZWNJbml0SnNvbkl0ZW1Db2VyY2lvbnMoc2Ny YXRjaCwgc3RhdGUsIGpleHByLT5pdGVtX2NvZXJjaW9ucywKKwkJCQkJCQkJCSAgamV4cHItPm9u X2Vycm9yLCByZXN2LCByZXNudWxsKTsKKwl9CisKKwkvKgorCSAqIEFuZCBhIHN0ZXAgdG8gY2xl YW4gdXAgYWZ0ZXIgdGhlIGNvZXJjaW9uIHN0ZXA7IHNlZQorCSAqIEV4ZWNFdmFsSnNvbkV4cHJD b2VyY2lvbkZpbmlzaCgpLgorCSAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlNPTkVYUFJf Q09FUkNJT05fRklOSVNIOworCXNjcmF0Y2gtPmQuanNvbmV4cHJfY29lcmNpb24uanNlc3RhdGUg PSBqc2VzdGF0ZTsKKwljb2VyY2lvbl9maW5pc2hfc3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVu OworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyoKKwkgKiBBZGp1c3Qg anVtcCB0YXJnZXQgYWRkcmVzc2VzIGluIHZhcmlvdXMgcG9zdC1ldmFsIHN0ZXBzIG5vdyB0aGF0 IHdlCisJICogaGF2ZSBhbGwgdGhlIHN0ZXBzIGluIHBsYWNlLgorCSAqLworCisJLyogRUVPUF9K U09ORVhQUl9TS0lQICovCisJQXNzZXJ0KHNraXBfc3RlcF9vZmYgPj0gMCk7CisJYXMgPSAmc3Rh dGUtPnN0ZXBzW3NraXBfc3RlcF9vZmZdOworCWFzLT5kLmpzb25leHByX3NraXAuanVtcF9jb2Vy Y2lvbiA9IGNvZXJjaW9uX3N0ZXBfb2ZmOworCWFzLT5kLmpzb25leHByX3NraXAuanVtcF9wYXNz aW5nX2FyZ3MgPSBwYXNzaW5nX2FyZ3Nfc3RlcF9vZmY7CisKKwkvKiBFRU9QX0pTT05FWFBSX0JF SEFWSU9SICovCisJQXNzZXJ0KGJlaGF2aW9yX3N0ZXBfb2ZmID49IDApOworCWFzID0gJnN0YXRl LT5zdGVwc1tiZWhhdmlvcl9zdGVwX29mZl07CisJYXMtPmQuanNvbmV4cHJfYmVoYXZpb3IuanVt cF9vbmVycm9yX2V4cHIgPSBvbmVycm9yX2V4cHJfc3RlcF9vZmY7CisJYXMtPmQuanNvbmV4cHJf YmVoYXZpb3IuanVtcF9vbmVtcHR5X2V4cHIgPSBvbmVtcHR5X2V4cHJfc3RlcF9vZmY7CisJYXMt PmQuanNvbmV4cHJfYmVoYXZpb3IuanVtcF9jb2VyY2lvbiA9IGNvZXJjaW9uX3N0ZXBfb2ZmOwor CWFzLT5kLmpzb25leHByX2JlaGF2aW9yLmp1bXBfc2tpcF9jb2VyY2lvbiA9IGNvZXJjaW9uX2Zp bmlzaF9zdGVwX29mZiArIDE7CisKKwkvKiBFRU9QX0pTT05FWFBSX0NPRVJDSU9OICovCisJQXNz ZXJ0KGNvZXJjaW9uX3N0ZXBfb2ZmID49IDApOworCWFzID0gJnN0YXRlLT5zdGVwc1tjb2VyY2lv bl9zdGVwX29mZl07CisJYXMtPmQuanNvbmV4cHJfY29lcmNpb24uanVtcF9jb2VyY2lvbl9lcnJv ciA9IGJlaGF2aW9yX3N0ZXBfb2ZmOworCWFzLT5kLmpzb25leHByX2NvZXJjaW9uLmp1bXBfY29l cmNpb25fZG9uZSA9IGNvZXJjaW9uX2ZpbmlzaF9zdGVwX29mZiArIDE7CisKKwkvKiBFRU9QX0pT T05FWFBSX0NPRVJDSU9OX0ZJTklTSCAqLworCUFzc2VydChjb2VyY2lvbl9maW5pc2hfc3RlcF9v ZmYgPj0gMCk7CisJYXMgPSAmc3RhdGUtPnN0ZXBzW2NvZXJjaW9uX2ZpbmlzaF9zdGVwX29mZl07 CisJYXMtPmQuanNvbmV4cHJfY29lcmNpb25fZmluaXNoLmp1bXBfY29lcmNpb25fZXJyb3IgPSBi ZWhhdmlvcl9zdGVwX29mZjsKKwlhcy0+ZC5qc29uZXhwcl9jb2VyY2lvbl9maW5pc2guanVtcF9j b2VyY2lvbl9kb25lID0gY29lcmNpb25fZmluaXNoX3N0ZXBfb2ZmICsgMTsKKworCS8qIEVFT1Bf SlVNUCBzdGVwcyAqLworCisJLyoKKwkgKiBPbmVzIGFmdGVyIE9OIEVNUFRZIGFuZCBPTiBFUlJP UiBub24tZGVmYXVsdCBleHByZXNzaW9ucyBzaG91bGQganVtcCB0bworCSAqIHRoZSBjb2VyY2lv biBzdGVwLgorCSAqLworCWlmIChvbmVtcHR5X2p1bXBfc3RlcF9vZmYgPj0gMCkKKwl7CisJCWFz ID0gJnN0YXRlLT5zdGVwc1tvbmVtcHR5X2p1bXBfc3RlcF9vZmZdOworCQlhcy0+ZC5qdW1wLmp1 bXBkb25lID0gY29lcmNpb25fc3RlcF9vZmY7CisJfQorCWlmIChvbmVycm9yX2p1bXBfc3RlcF9v ZmYgPj0gMCkKKwl7CisJCWFzID0gJnN0YXRlLT5zdGVwc1tvbmVycm9yX2p1bXBfc3RlcF9vZmZd OworCQlhcy0+ZC5qdW1wLmp1bXBkb25lID0gY29lcmNpb25fc3RlcF9vZmY7CisJfQorCisJLyoK KwkgKiBKdW1wIHRvIEVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNIIGFmdGVyIGV2YWx1YXRp bmcgcmVzdWx0X2NvZXJjaW9uLgorCSAqLworCWlmIChyZXN1bHRfY29lcmNpb25fanVtcF9zdGVw X29mZiA+PSAwKQorCXsKKwkJYXMgPSAmc3RhdGUtPnN0ZXBzW3Jlc3VsdF9jb2VyY2lvbl9qdW1w X3N0ZXBfb2ZmXTsKKwkJYXMtPmQuanVtcC5qdW1wZG9uZSA9IGNvZXJjaW9uX2ZpbmlzaF9zdGVw X29mZjsKKwl9CisKKwkvKiBUaGUgcmVzdCBzaG91bGQganVtcCB0byB0aGUgZW5kLiAqLworCWZv cmVhY2gobGMsIGFkanVzdF9qdW1wcykKKwl7CisJCWFzID0gJnN0YXRlLT5zdGVwc1tsZmlyc3Rf aW50KGxjKV07CisJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3RlcHNfbGVuOworCX0K KworCS8qCisJICogU2V0IFJFVFVSTklORyB0eXBlJ3MgaW5wdXQgZnVuY3Rpb24gdXNlZCBieSBF eGVjRXZhbEpzb25FeHByQ29lcmNpb24oKS4KKwkgKi8KKwlpZiAoamV4cHItPm9taXRfcXVvdGVz IHx8CisJCShqZXhwci0+cmVzdWx0X2NvZXJjaW9uICYmIGpleHByLT5yZXN1bHRfY29lcmNpb24t PnZpYV9pbykpCisJeworCQlPaWQJCQl0eXBpbnB1dDsKKwkJRm1nckluZm8gICAqZmluZm87CisK KwkJLyogbG9va3VwIHRoZSByZXN1bHQgdHlwZSdzIGlucHV0IGZ1bmN0aW9uICovCisJCWdldFR5 cGVJbnB1dEluZm8oamV4cHItPnJldHVybmluZy0+dHlwaWQsICZ0eXBpbnB1dCwKKwkJCQkJCSAm anNlc3RhdGUtPmlucHV0LnR5cGlvcGFyYW0pOworCQlmaW5mbyA9IHBhbGxvYzAoc2l6ZW9mKEZt Z3JJbmZvKSk7CisJCWZtZ3JfaW5mbyh0eXBpbnB1dCwgZmluZm8pOworCQlqc2VzdGF0ZS0+aW5w dXQuZmluZm8gPSBmaW5mbzsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm5zIGNvbnN0YW50IHZhbHVl cyB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlciBmb3IgdmFyaW91cworICogbm9uLUVSUk9SIE9O IEVSUk9SL0VNUFRZIGJlaGF2aW9ycy4KKyAqCisgKiBOb3RlIHRoYXQgSlNPTl9CRUhBVklPUl9E RUZBVUxUIGV4cHJlc3Npb24gaXMgaGFuZGxlZCBieSB0aGUKKyAqIGNhbGxlciBzZXBhcmF0ZWx5 LgorICovCitzdGF0aWMgRGF0dW0KK0dldEpzb25CZWhhdmlvckNvbnN0VmFsKEpzb25CZWhhdmlv ciAqYmVoYXZpb3IsIGJvb2wgKmlzX251bGwpCit7CisJKmlzX251bGwgPSBmYWxzZTsKKworCXN3 aXRjaCAoYmVoYXZpb3ItPmJ0eXBlKQorCXsKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX0FS UkFZOgorCQkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iTWFrZUVtcHR5QXJyYXkoKSk7CisK KwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVDoKKwkJCXJldHVybiBKc29uYlBHZXRE YXR1bShKc29uYk1ha2VFbXB0eU9iamVjdCgpKTsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfVFJV RToKKwkJCXJldHVybiBCb29sR2V0RGF0dW0odHJ1ZSk7CisKKwkJY2FzZSBKU09OX0JFSEFWSU9S X0ZBTFNFOgorCQkJcmV0dXJuIEJvb2xHZXREYXR1bShmYWxzZSk7CisKKwkJY2FzZSBKU09OX0JF SEFWSU9SX05VTEw6CisJCWNhc2UgSlNPTl9CRUhBVklPUl9VTktOT1dOOgorCQljYXNlIEpTT05f QkVIQVZJT1JfRU1QVFk6CisJCQkqaXNfbnVsbCA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAw OworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9ERUZBVUxUOgorCQkJLyogQWx3YXlzIGhhbmRsZWQg aW4gdGhlIGNhbGxlci4gKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQlyZXR1cm4gKERhdHVtKSAw OworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGJl aGF2aW9yICVkIiwgYmVoYXZpb3ItPmJ0eXBlKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJfQor fQorCisvKiBJbml0aWFsaXplIG9uZSBKc29uQ29lcmNpb24gZm9yIGV4ZWN1dGlvbi4gKi8KK3N0 YXRpYyBKc29uQ29lcmNpb25TdGF0ZSAqCitFeGVjSW5pdEpzb25Db2VyY2lvbihFeHByRXZhbFN0 ZXAgKnNjcmF0Y2gsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJCSBKc29uQ29lcmNpb24gKmNvZXJj aW9uLCBKc29uQmVoYXZpb3IgKm9uX2Vycm9yLAorCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJl c251bGwpCit7CisJSnNvbkNvZXJjaW9uU3RhdGUgKmpjc3RhdGUgPSBwYWxsb2MwKHNpemVvZihK c29uQ29lcmNpb25TdGF0ZSkpOworCisJamNzdGF0ZS0+Y29lcmNpb24gPSBjb2VyY2lvbjsKKwlp ZiAoY29lcmNpb24gJiYgY29lcmNpb24tPmV4cHIpCisJeworCQlEYXR1bQkgICAqc2F2ZV9pbm5l cm1vc3RfY2FzZXZhbDsKKwkJYm9vbAkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZW51bGw7CisJCUVy cm9yU2F2ZUNvbnRleHQgKnNhdmVfZXNjb250ZXh0OworCisJCWpjc3RhdGUtPmp1bXBfZXZhbF9l eHByID0gc3RhdGUtPnN0ZXBzX2xlbjsKKworCQkvKiBQdXNoIHN0ZXAocykgdG8gY29tcHV0ZSBj c3RhdGUtPmNvZXJjaW9uLiAqLworCQlzYXZlX2lubmVybW9zdF9jYXNldmFsID0gc3RhdGUtPmlu bmVybW9zdF9jYXNldmFsOworCQlzYXZlX2lubmVybW9zdF9jYXNlbnVsbCA9IHN0YXRlLT5pbm5l cm1vc3RfY2FzZW51bGw7CisJCXNhdmVfZXNjb250ZXh0ID0gc3RhdGUtPmVzY29udGV4dDsKKwor CQlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSByZXN2OworCQlzdGF0ZS0+aW5uZXJtb3N0X2Nh c2VudWxsID0gcmVzbnVsbDsKKwkJaWYgKG9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9S X0VSUk9SKQorCQl7CisJCQlqY3N0YXRlLT5lc2NvbnRleHQudHlwZSA9IFRfRXJyb3JTYXZlQ29u dGV4dDsKKwkJCXN0YXRlLT5lc2NvbnRleHQgPSAmamNzdGF0ZS0+ZXNjb250ZXh0OworCQl9CisJ CWVsc2UKKwkJCXN0YXRlLT5lc2NvbnRleHQgPSBOVUxMOworCisJCUV4ZWNJbml0RXhwclJlYygo RXhwciAqKSBjb2VyY2lvbi0+ZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCXN0YXRl LT5pbm5lcm1vc3RfY2FzZXZhbCA9IHNhdmVfaW5uZXJtb3N0X2Nhc2V2YWw7CisJCXN0YXRlLT5p bm5lcm1vc3RfY2FzZW51bGwgPSBzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwkJc3RhdGUtPmVz Y29udGV4dCA9IHNhdmVfZXNjb250ZXh0OworCX0KKwllbHNlCisJCWpjc3RhdGUtPmp1bXBfZXZh bF9leHByID0gLTE7CisKKwlyZXR1cm4gamNzdGF0ZTsKK30KKworLyoKKyAqIFB1c2ggc3RlcHMg dG8gZXZhbHVhdGUgY29lcmNpb25zIGZyb20gYSBKU09OX1ZBTFVFIGl0ZW1zIHNwZWNpZmllZCBp bgorICogJ2l0ZW1fY29lcmNpb25zJworICovCitzdGF0aWMgTGlzdCAqCitFeGVjSW5pdEpzb25J dGVtQ29lcmNpb25zKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgRXhwclN0YXRlICpzdGF0ZSwKKwkJ CQkJCSAgTGlzdCAqaXRlbV9jb2VyY2lvbnMsIEpzb25CZWhhdmlvciAqb25fZXJyb3IsCisJCQkJ CQkgIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKQoreworCUxpc3QJICAgKml0ZW1famNzdGF0 ZXMgPSBOSUw7CisJRXhwckV2YWxTdGVwICphczsKKwlMaXN0CSAgICphZGp1c3RfanVtcHMgPSBO SUw7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBQdXNoIHRoZSBzdGVwcyBvZiBpbmRpdmlkdWFs IGNvZXJjaW9ucy4gKi8KKwlmb3JlYWNoKGxjLCBpdGVtX2NvZXJjaW9ucykKKwl7CisJCUpzb25D b2VyY2lvbiAqY29lcmNpb24gPSBsZmlyc3QobGMpOworCQlKc29uQ29lcmNpb25TdGF0ZSAqaXRl bV9qY3N0YXRlOworCisJCWl0ZW1famNzdGF0ZSA9IEV4ZWNJbml0SnNvbkNvZXJjaW9uKHNjcmF0 Y2gsIHN0YXRlLCBjb2VyY2lvbiwKKwkJCQkJCQkJCQkJb25fZXJyb3IsIHJlc3YsIHJlc251bGwp OworCQlpdGVtX2pjc3RhdGVzID0gbGFwcGVuZChpdGVtX2pjc3RhdGVzLCBpdGVtX2pjc3RhdGUp OworCisKKwkJLyogRW1pdCBKVU1QIHN0ZXAgdG8gc2tpcCBwYXN0IG90aGVyIGNvZXJjaW9ucycg c3RlcHMuICovCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKworCQkvKgorCQkgKiBS ZW1lbWJlciBKVU1QIHN0ZXAgYWRkcmVzcyB0byBzZXQgdGhlIGFjdHVhbCBqdW1wIHRhcmdldCBh ZGRyZXNzCisJCSAqIGJlbG93LgorCQkgKi8KKwkJYWRqdXN0X2p1bXBzID0gbGFwcGVuZF9pbnQo YWRqdXN0X2p1bXBzLCBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0 ZSwgc2NyYXRjaCk7CisJfQorCisJZm9yZWFjaChsYywgYWRqdXN0X2p1bXBzKQorCXsKKwkJaW50 CQkJanVtcF9zdGVwX2lkID0gbGZpcnN0X2ludChsYyk7CisKKwkJYXMgPSAmc3RhdGUtPnN0ZXBz W2p1bXBfc3RlcF9pZF07CisJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3RlcHNfbGVu OworCX0KKworCXJldHVybiBpdGVtX2pjc3RhdGVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHBySW50ZXJwLmMKaW5kZXggYzgwMThkYTE5Zi4uOWFkZjMxNjgyYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwckludGVycC5jCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSAidXRpbHMv anNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1 bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Rp bWVzdGFtcC5oIgpAQCAtMTUzLDYgKzE1NCw5IEBAIHN0YXRpYyBUdXBsZURlc2MgZ2V0X2NhY2hl ZF9yb3d0eXBlKE9pZCB0eXBlX2lkLCBpbnQzMiB0eXBtb2QsCiAJCQkJCQkJCQlib29sICpjaGFu Z2VkKTsKIHN0YXRpYyB2b2lkIEV4ZWNFdmFsUm93TnVsbEludChFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCSAgIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCBj aGVja2lzbnVsbCk7CitzdGF0aWMgRGF0dW0gRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpz b25iVmFsdWUgKml0ZW0sCisJCQkJCQkJCQkJIExpc3QgKml0ZW1famNzdGF0ZXMsCisJCQkJCQkJ CQkJIEpzb25Db2VyY2lvblN0YXRlICoqcF9pdGVtX2pjc3RhdGUpOwogCiAvKiBmYXN0LXBhdGgg ZXZhbHVhdGlvbiBmdW5jdGlvbnMgKi8KIHN0YXRpYyBEYXR1bSBFeGVjSnVzdElubmVyVmFyKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKTsKQEAg LTQ4MSw2ICs0ODUsMTEgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNv bnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX1hNTEVYUFIsCiAJ CSYmQ0FTRV9FRU9QX0pTT05fQ09OU1RSVUNUT1IsCiAJCSYmQ0FTRV9FRU9QX0lTX0pTT04sCisJ CSYmQ0FTRV9FRU9QX0pTT05FWFBSX1NLSVAsCisJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX1BBVEgs CisJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX0JFSEFWSU9SLAorCQkmJkNBU0VfRUVPUF9KU09ORVhQ Ul9DT0VSQ0lPTiwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNILAogCQkm JkNBU0VfRUVPUF9BR0dSRUYsCiAJCSYmQ0FTRV9FRU9QX0dST1VQSU5HX0ZVTkMsCiAJCSYmQ0FT RV9FRU9QX1dJTkRPV19GVU5DLApAQCAtMTE5Miw3ICsxMjAxLDggQEAgRXhlY0ludGVycEV4cHIo RXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJ CQkJICogU2hvdWxkIGdldCBudWxsIHJlc3VsdCBpZiBhbmQgb25seSBpZiBzdHIgaXMgTlVMTCBv ciBpZiB3ZQogCQkJCSAqIGdvdCBhbiBlcnJvciBhYm92ZS4KIAkJCQkgKi8KLQkJCQlpZiAoc3Ry ID09IE5VTEwgfHwgU09GVF9FUlJPUl9PQ0NVUlJFRChzdGF0ZS0+ZXNjb250ZXh0KSkKKwkJCQlp ZiAoc3RyID09IE5VTEwgfHwKKwkJCQkJU09GVF9FUlJPUl9PQ0NVUlJFRChvcC0+ZC5pb2NvZXJj ZS5lc2NvbnRleHQpKQogCQkJCQlBc3NlcnQoKm9wLT5yZXNudWxsKTsKIAkJCQllbHNlCiAJCQkJ CUFzc2VydCghKm9wLT5yZXNudWxsKTsKQEAgLTE1MzksNiArMTU0OSwzOCBAQCBFeGVjSW50ZXJw RXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVs bCkKIAkJCUVFT19ORVhUKCk7CiAJCX0KIAorCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSX1BBVEgp CisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8K KwkJCUV4ZWNFdmFsSnNvbkV4cHIoc3RhdGUsIG9wLCBlY29udGV4dCk7CisJCQlFRU9fTkVYVCgp OworCQl9CisKKwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9TS0lQKQorCQl7CisJCQkvKiB0b28g Y29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFRU9fSlVNUChFeGVj RXZhbEpzb25FeHByU2tpcChzdGF0ZSwgb3ApKTsKKwkJfQorCisJCUVFT19DQVNFKEVFT1BfSlNP TkVYUFJfQkVIQVZJT1IpCisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1w bGVtZW50YXRpb24gKi8KKwkJCUVFT19KVU1QKEV4ZWNFdmFsSnNvbkV4cHJCZWhhdmlvcihzdGF0 ZSwgb3ApKTsKKwkJfQorCisJCUVFT19DQVNFKEVFT1BfSlNPTkVYUFJfQ09FUkNJT04pCisJCXsK KwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8KKwkJCUVF T19KVU1QKEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgb3AsIGVjb250ZXh0LAorCQkJ CQkJCQkJCQkgICpvcC0+cmVzdmFsdWUsICpvcC0+cmVzbnVsbCkpOworCQl9CisKKwkJRUVPX0NB U0UoRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0gpCisJCXsKKwkJCS8qIHRvbyBjb21wbGV4 IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gKi8KKwkJCUVFT19KVU1QKEV4ZWNFdmFsSnNv bkV4cHJDb2VyY2lvbkZpbmlzaChzdGF0ZSwgb3ApKTsKKwkJfQorCiAJCUVFT19DQVNFKEVFT1Bf QUdHUkVGKQogCQl7CiAJCQkvKgpAQCAtNDEzNCw2ICs0MTc2LDUwNyBAQCBFeGVjRXZhbEpzb25J c1ByZWRpY2F0ZShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQogCSpvcC0+cmVz dmFsdWUgPSBCb29sR2V0RGF0dW0ocmVzKTsKIH0KIAorLyoKKyAqIEV2YWx1YXRlIGdpdmVuIEpz b25FeHByIGJ5IHBlcmZvcm1pbmcgdGhlIHNwZWNpZmllZCBKU09OIG9wZXJhdGlvbi4KKyAqCisg KiBUaGlzIGFsc28gcG9wdWxhdGVzIHRoZSBKc29uRXhwclBvc3RFdmFsU3RhdGUgd2l0aCB0aGUg aW5mb3JtYXRpb24gbmVlZGVkCisgKiBieSB0aGUgc3Vic2VxdWVudCBzdGVwcyB0aGF0IGhhbmRs ZSB0aGUgc3BlY2lmaWVkIEpzb25CZWhhdmlvci4KKyAqLwordm9pZAorRXhlY0V2YWxKc29uRXhw cihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRl eHQpCit7CisJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwci5qc2VzdGF0 ZTsKKwlKc29uRXhwclByZUV2YWxTdGF0ZSAqcHJlX2V2YWwgPSAmanNlc3RhdGUtPnByZV9ldmFs OworCUpzb25FeHByUG9zdEV2YWxTdGF0ZSAqcG9zdF9ldmFsID0gJmpzZXN0YXRlLT5wb3N0X2V2 YWw7CisJSnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNleHByOworCURhdHVtCQlpdGVt OworCURhdHVtCQlyZXMgPSAoRGF0dW0pIDA7CisJYm9vbAkJcmVzbnVsbCA9IHRydWU7CisJSnNv blBhdGggICAqcGF0aDsKKwlib29sCQl0aHJvd19lcnJvciA9IChqZXhwci0+b25fZXJyb3ItPmJ0 eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1IpOworCWJvb2wJICAgKmVycm9yID0gJnBvc3RfZXZh bC0+ZXJyb3I7CisJYm9vbAkgICAqZW1wdHkgPSAmcG9zdF9ldmFsLT5lbXB0eTsKKworCWl0ZW0g PSBwcmVfZXZhbC0+Zm9ybWF0dGVkX2V4cHIudmFsdWU7CisJcGF0aCA9IERhdHVtR2V0SnNvblBh dGhQKHByZV9ldmFsLT5wYXRoc3BlYy52YWx1ZSk7CisKKwkvKiBSZXNldCBKc29uRXhwclBvc3RF dmFsU3RhdGUgZm9yIHRoaXMgZXZhbHVhdGlvbi4gKi8KKwltZW1zZXQocG9zdF9ldmFsLCAwLCBz aXplb2YoKnBvc3RfZXZhbCkpOworCisJc3dpdGNoIChqZXhwci0+b3ApCisJeworCQljYXNlIEpT T05fRVhJU1RTX09QOgorCQkJeworCQkJCWJvb2wJCWV4aXN0cyA9IEpzb25QYXRoRXhpc3RzKGl0 ZW0sIHBhdGgsCisJCQkJCQkJCQkJCQkJIXRocm93X2Vycm9yID8gZXJyb3IgOiBOVUxMLAorCQkJ CQkJCQkJCQkJCXByZV9ldmFsLT5hcmdzKTsKKworCQkJCXBvc3RfZXZhbC0+amNzdGF0ZSA9IGpz ZXN0YXRlLT5yZXN1bHRfamNzdGF0ZTsKKwkJCQlpZiAoKmVycm9yKQorCQkJCXsKKwkJCQkJKm9w LT5yZXNudWxsID0gdHJ1ZTsKKwkJCQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJCQkJ cmV0dXJuOworCQkJCX0KKworCQkJCXJlc251bGwgPSBmYWxzZTsKKwkJCQlyZXMgPSBCb29sR2V0 RGF0dW0oZXhpc3RzKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNlIEpTT05fUVVFUllfT1A6 CisJCQlyZXMgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53cmFwcGVyLCBlbXB0 eSwKKwkJCQkJCQkJIXRocm93X2Vycm9yID8gZXJyb3IgOiBOVUxMLAorCQkJCQkJCQlwcmVfZXZh bC0+YXJncyk7CisKKwkJCXBvc3RfZXZhbC0+amNzdGF0ZSA9IGpzZXN0YXRlLT5yZXN1bHRfamNz dGF0ZTsKKwkJCWlmICgqZXJyb3IpCisJCQl7CisJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJ CQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXJlc251 bGwgPSAhRGF0dW1HZXRQb2ludGVyKHJlcyk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fVkFM VUVfT1A6CisJCQl7CisJCQkJSnNvbmJWYWx1ZSAqamJ2ID0gSnNvblBhdGhWYWx1ZShpdGVtLCBw YXRoLCBlbXB0eSwKKwkJCQkJCQkJCQkJCSF0aHJvd19lcnJvciA/IGVycm9yIDogTlVMTCwKKwkJ CQkJCQkJCQkJCXByZV9ldmFsLT5hcmdzKTsKKworCQkJCS8qIE1pZ2h0IGdldCBvdmVycmlkZGVu IGJlbG93IGJ5IGFuIGl0ZW1famNzdGF0ZS4gKi8KKwkJCQlwb3N0X2V2YWwtPmpjc3RhdGUgPSBq c2VzdGF0ZS0+cmVzdWx0X2pjc3RhdGU7CisJCQkJaWYgKCplcnJvcikKKwkJCQl7CisJCQkJCSpv cC0+cmVzbnVsbCA9IHRydWU7CisJCQkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCQkJ CXJldHVybjsKKwkJCQl9CisKKwkJCQlpZiAoIWpidikJCS8qIE5VTEwgb3IgZW1wdHkgKi8KKwkJ CQl7CisJCQkJCXJlc251bGwgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlBc3Nl cnQoISplbXB0eSk7CisKKwkJCQlyZXNudWxsID0gZmFsc2U7CisKKwkJCQkvKiBDb2VyY2Ugc2Nh bGFyIGl0ZW0gdG8gdGhlIG91dHB1dCB0eXBlICovCisKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBy ZXF1ZXN0ZWQgb3V0cHV0IHR5cGUgaXMganNvbihiKSwgdXNlCisJCQkJICogSnNvbkV4cHJTdGF0 ZS5yZXN1bHRfY29lcmNpb24gdG8gZG8gdGhlIGNvZXJjaW9uLgorCQkJCSAqLworCQkJCWlmIChq ZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBKU09OT0lEIHx8CisJCQkJCWpleHByLT5yZXR1cm5p bmctPnR5cGlkID09IEpTT05CT0lEKQorCQkJCXsKKwkJCQkJLyogVXNlIHJlc3VsdF9jb2VyY2lv biBmcm9tIGpzb25bYl0gdG8gdGhlIG91dHB1dCB0eXBlICovCisJCQkJCXJlcyA9IEpzb25iUEdl dERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGpidikpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJ CQkvKgorCQkJCSAqIEVsc2UsIHVzZSBvbmUgb2YgdGhlIGl0ZW1fY29lcmNpb25zLgorCQkJCSAq CisJCQkJICogRXJyb3Igb3V0IGlmIG5vIGNhc3QgZXhpc3RzIHRvIGNvZXJjZSBTUUwvSlNPTiBp dGVtIHRvIHRoZQorCQkJCSAqIHRoZSBvdXRwdXQgdHlwZS4KKwkJCQkgKi8KKwkJCQlyZXMgPSBF eGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oamJ2LAorCQkJCQkJCQkJCQkJICBqc2VzdGF0ZS0+ aXRlbV9qY3N0YXRlcywKKwkJCQkJCQkJCQkJCSAgJnBvc3RfZXZhbC0+amNzdGF0ZSk7CisJCQkJ aWYgKHBvc3RfZXZhbC0+amNzdGF0ZSAmJgorCQkJCQlwb3N0X2V2YWwtPmpjc3RhdGUtPmNvZXJj aW9uICYmCisJCQkJCShwb3N0X2V2YWwtPmpjc3RhdGUtPmNvZXJjaW9uLT52aWFfaW8gfHwKKwkJ CQkJIHBvc3RfZXZhbC0+amNzdGF0ZS0+Y29lcmNpb24tPnZpYV9wb3B1bGF0ZSkpCisJCQkJewor CQkJCQlpZiAoIXRocm93X2Vycm9yKQorCQkJCQl7CisJCQkJCQkqb3AtPnJlc251bGwgPSB0cnVl OworCQkJCQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJCQkJCXJldHVybjsKKwkJCQkJ fQorCisJCQkJCS8qCisJCQkJCSAqIENvZXJjaW9uIHZpYSBJL08gbWVhbnMgaGVyZSB0aGF0IHRo ZSBjYXN0IHRvIHRoZSB0YXJnZXQKKwkJCQkJICogdHlwZSBzaW1wbHkgZG9lcyBub3QgZXhpc3Qu CisJCQkJCSAqLworCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf U1FMX0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9UT19UQVJHRVRfVFlQRSksCisJCQkJCQkJIGVy cm1zZygiU1FML0pTT04gaXRlbSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZSIpKSk7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBqZXhwci0+b3ApOworCQkJKm9w LT5yZXNudWxsID0gdHJ1ZTsKKwkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCQlyZXR1 cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgT04gRU1QVFkgYmVoYXZpb3IgaXMgdG8gY2F1c2Ug YW4gZXJyb3IsIGRvIHNvIGhlcmUuICBPdGhlcgorCSAqIGJlaGF2aW9ycyB3aWxsIGJlIGhhbmRs ZWQgaW4gRXhlY0V2YWxKc29uRXhwckJlaGF2aW9yKCkuCisJICovCisJaWYgKCplbXB0eSkKKwl7 CisJCUFzc2VydChqZXhwci0+b25fZW1wdHkpOwkvKiBpdCBpcyBub3QgSlNPTl9FWElTVFMgKi8K KworCQlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQor CQl7CisJCQlpZiAoIXRocm93X2Vycm9yKQorCQkJeworCQkJCSpvcC0+cmVzbnVsbCA9IHRydWU7 CisJCQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfTk9fU1FMX0pTT05fSVRFTSks CisJCQkJCSBlcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0iKSkpOworCQl9CisJfQorCisJKm9wLT5y ZXN2YWx1ZSA9IHJlczsKKwkqb3AtPnJlc251bGwgPSByZXNudWxsOworfQorCisvKgorICogU2tp cCBjYWxsaW5nIEV4ZWNFdmFsSnNvbigpIG9uIHRoZSBnaXZlbiBKc29uRXhwcj8KKyAqCisgKiBS ZXR1cm5zIHRoZSBzdGVwIGFkZHJlc3MgdG8gYmUgcGVyZm9ybWVkIG5leHQuCisgKi8KK2ludAor RXhlY0V2YWxKc29uRXhwclNraXAoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkK K3sKKwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByX3NraXAuanNlc3Rh dGU7CisKKwkvKgorCSAqIFNraXAgaWYgZWl0aGVyIG9mIHRoZSBpbnB1dCBleHByZXNzaW9ucyBo YXMgdHVybmVkIG91dCB0byBiZSBOVUxMLAorCSAqIHRob3VnaCBkbyBleGVjdXRlIGRvbWFpbiBj aGVja3MgZm9yIE5VTExzLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGUKKwkgKiBjb2VyY2lvbiBz dGVwLgorCSAqLworCWlmIChqc2VzdGF0ZS0+cHJlX2V2YWwuZm9ybWF0dGVkX2V4cHIuaXNudWxs IHx8CisJCWpzZXN0YXRlLT5wcmVfZXZhbC5wYXRoc3BlYy5pc251bGwpCisJeworCQkqb3AtPnJl c3ZhbHVlID0gKERhdHVtKSAwOworCQkqb3AtPnJlc251bGwgPSB0cnVlOworCisJCS8qIEV4ZWNF dmFsSnNvbkV4cHJDb2VyY2lvbigpIGRlcGVuZHMgb24gdGhpcy4gKi8KKwkJanNlc3RhdGUtPnBv c3RfZXZhbC5qY3N0YXRlID0ganNlc3RhdGUtPnJlc3VsdF9qY3N0YXRlOworCisJCXJldHVybiBv cC0+ZC5qc29uZXhwcl9za2lwLmp1bXBfY29lcmNpb247CisJfQorCisJLyoKKwkgKiBHbyBldmFs dWF0ZSB0aGUgUEFTU0lORyBhcmdzIGlmIGFueSBhbmQgc3Vic2VxdWVudGx5IEpTT04gcGF0aCBp dHNlbGYuCisJICovCisJcmV0dXJuIG9wLT5kLmpzb25leHByX3NraXAuanVtcF9wYXNzaW5nX2Fy Z3M7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBzdGVwIGFkZHJlc3MgdG8gcGVyZm9ybSB0aGUg SnNvbkJlaGF2aW9yIGFwcGxpY2FibGUgdG8KKyAqIHRoZSBKU09OIGl0ZW0gdGhhdCByZXN1bHRl ZCBmcm9tIGV2YWx1YXRpbmcgdGhlIGdpdmVuIEpzb25FeHByLgorICoKKyAqIFJldHVybnMgdGhl IHN0ZXAgYWRkcmVzcyB0byBiZSBwZXJmb3JtZWQgbmV4dC4KKyAqLworaW50CitFeGVjRXZhbEpz b25FeHByQmVoYXZpb3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKK3sKKwlK c29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByX2JlaGF2aW9yLmpzZXN0YXRl OworCUpzb25FeHByUG9zdEV2YWxTdGF0ZSAqcG9zdF9ldmFsID0gJmpzZXN0YXRlLT5wb3N0X2V2 YWw7CisJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IE5VTEw7CisJaW50CQkJanVtcF90byA9IC0x OworCisJaWYgKHBvc3RfZXZhbC0+ZXJyb3IgfHwgcG9zdF9ldmFsLT5jb2VyY2lvbl9lcnJvcikK Kwl7CisJCWJlaGF2aW9yID0ganNlc3RhdGUtPmpzZXhwci0+b25fZXJyb3I7CisJCWp1bXBfdG8g PSBvcC0+ZC5qc29uZXhwcl9iZWhhdmlvci5qdW1wX29uZXJyb3JfZXhwcjsKKwl9CisJZWxzZSBp ZiAocG9zdF9ldmFsLT5lbXB0eSkKKwl7CisJCWJlaGF2aW9yID0ganNlc3RhdGUtPmpzZXhwci0+ b25fZW1wdHk7CisJCWp1bXBfdG8gPSBvcC0+ZC5qc29uZXhwcl9iZWhhdmlvci5qdW1wX29uZW1w dHlfZXhwcjsKKwl9CisJZWxzZSBpZiAoIXBvc3RfZXZhbC0+Y29lcmNpb25fZG9uZSkKKwl7CisJ CS8qCisJCSAqIElmIG5vIGVycm9yIG9yIHRoZSBKU09OIGl0ZW0gaXMgbm90IGVtcHR5LCBkaXJl Y3RseSBnbyB0byB0aGUKKwkJICogY29lcmNpb24gc3RlcCB0byBjb2VyY2UgdGhlIGl0ZW0gYXMg aXMuCisJCSAqLworCQlyZXR1cm4gb3AtPmQuanNvbmV4cHJfYmVoYXZpb3IuanVtcF9jb2VyY2lv bjsKKwl9CisKKwlBc3NlcnQoYmVoYXZpb3IpOworCisJLyoKKwkgKiBTZXQgdXAgZm9yIGNvZXJj aW9uIHN0ZXAgdGhhdCB3aWxsIHJ1biB0byBjb2VyY2UgYSBub24tZGVmYXVsdCBiZWhhdmlvcgor CSAqIHZhbHVlLiAgSXQgc2hvdWxkIHVzZSByZXN1bHRfY29lcmNpb24sIGlmIGFueS4gIEVycm9y cyB0aGF0IG1heSBvY2N1cgorCSAqIHNob3VsZCBiZSB0aHJvd24gZm9yIEpTT04gb3BzIG90aGVy IHRoYW4gSlNPTl9WQUxVRV9PUC4KKwkgKi8KKwlpZiAoYmVoYXZpb3ItPmJ0eXBlICE9IEpTT05f QkVIQVZJT1JfREVGQVVMVCkKKwl7CisJCXBvc3RfZXZhbC0+amNzdGF0ZSA9IGpzZXN0YXRlLT5y ZXN1bHRfamNzdGF0ZTsKKwkJcG9zdF9ldmFsLT5jb2VyY2luZ19iZWhhdmlvcl9leHByID0gdHJ1 ZTsKKwl9CisKKwlBc3NlcnQoanVtcF90byA+PSAwKTsKKwlyZXR1cm4ganVtcF90bzsKK30KKwor LyoKKyAqIEV2YWx1YXRlIG9yIHJldHVybiB0aGUgc3RlcCBhZGRyZXNzIHRvIGV2YWx1YXRlIGEg Y29lcmNpb24gb2YgYSBKU09OIGl0ZW0KKyAqIHRvIHRoZSB0YXJnZXQgdHlwZS4gIFRoZSBmb3Jt ZXIgaWYgdGhlIGNvZXJjaW9uIG11c3QgYmUgZG9uZSByaWdodCBhd2F5IGJ5CisgKiBjYWxsaW5n IHRoZSB0YXJnZXQgdHlwZSdzIGlucHV0IGZ1bmN0aW9uLCBhbmQgZm9yIHNvbWUgdHlwZXMsIGJ5 IGNhbGxpbmcKKyAqIGpzb25fcG9wdWxhdGVfdHlwZSgpLgorICoKKyAqIFJldHVybnMgdGhlIHN0 ZXAgYWRkcmVzcyB0byBiZSBwZXJmb3JtZWQgbmV4dC4KKyAqLworaW50CitFeGVjRXZhbEpzb25F eHByQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCSBF eHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkgRGF0dW0gcmVzLCBib29sIHJlc251bGwpCit7 CisJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qc2Vz dGF0ZTsKKwlKc29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5qc2V4cHI7CisJSnNvbkV4cHJQ b3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAmanNlc3RhdGUtPnBvc3RfZXZhbDsKKwlKc29uQ29l cmNpb25TdGF0ZSAqamNzdGF0ZSA9IHBvc3RfZXZhbC0+amNzdGF0ZTsKKwljaGFyCSAgICp2YWxf c3RyaW5nID0gTlVMTDsKKwlib29sCQlvbWl0X3F1b3RlcyA9IGZhbHNlOworCisJc3dpdGNoIChq ZXhwci0+b3ApCisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJaWYgKGpjc3RhdGUgJiYg amNzdGF0ZS0+anVtcF9ldmFsX2V4cHIgPj0gMCkKKwkJCQlyZXR1cm4gamNzdGF0ZS0+anVtcF9l dmFsX2V4cHI7CisKKwkJCS8qIE5vIGNvZXJjaW9uIG5lZWRlZC4gKi8KKwkJCXBvc3RfZXZhbC0+ Y29lcmNpb25fZG9uZSA9IHRydWU7CisJCQlyZXR1cm4gb3AtPmQuanNvbmV4cHJfY29lcmNpb24u anVtcF9jb2VyY2lvbl9kb25lOworCisJCWNhc2UgSlNPTl9RVUVSWV9PUDoKKwkJCWlmIChqZXhw ci0+b21pdF9xdW90ZXMpCisJCQl7CisJCQkJSnNvbmIJICAgKmpiID0gcmVzbnVsbCA/IE5VTEwg OiBEYXR1bUdldEpzb25iUChyZXMpOworCisJCQkJaWYgKGpiICYmIEpCX1JPT1RfSVNfU0NBTEFS KGpiKSkKKwkJCQl7CisJCQkJCW9taXRfcXVvdGVzID0gdHJ1ZTsKKwkJCQkJdmFsX3N0cmluZyA9 IEpzb25iVW5xdW90ZShqYik7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoamNzdGF0ZSAmJiBq Y3N0YXRlLT5qdW1wX2V2YWxfZXhwciA+PSAwKQorCQkJCXJldHVybiBqY3N0YXRlLT5qdW1wX2V2 YWxfZXhwcjsKKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9WQUxVRV9PUDoKKwkJCWlmIChqY3N0 YXRlICE9IGpzZXN0YXRlLT5yZXN1bHRfamNzdGF0ZSkKKwkJCXsKKwkJCQlpZiAoamNzdGF0ZS0+ anVtcF9ldmFsX2V4cHIgPj0gMCkKKwkJCQkJcmV0dXJuIGpjc3RhdGUtPmp1bXBfZXZhbF9leHBy OworCisJCQkJLyogTm8gY29lcmNpb24gbmVlZGVkLiAqLworCQkJCXBvc3RfZXZhbC0+Y29lcmNp b25fZG9uZSA9IHRydWU7CisJCQkJcmV0dXJuIG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmp1bXBf Y29lcmNpb25fZG9uZTsKKwkJCX0KKwkJCWVsc2UgaWYgKGpjc3RhdGUgJiYgamNzdGF0ZS0+anVt cF9ldmFsX2V4cHIgPj0gMCkKKwkJCQlyZXR1cm4gamNzdGF0ZS0+anVtcF9ldmFsX2V4cHI7CisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwv SlNPTiBleHByZXNzaW9uIG9wICVkIiwgamV4cHItPm9wKTsKKwkJCWJyZWFrOworCX0KKworCS8q CisJICogT0ssIHRoZXJlJ3Mgbm8gY29lcmNpb24gZXhwcmVzc2lvbiwgc28gY29lcmNlIGVpdGhl ciBieSBkaXJlY3RseQorCSAqIGNhbGxpbmcgdGhlIGlucHV0IGZ1bmN0aW9uIG9yIGJ5IGNhbGxp bmcganNvbl9wb3B1bGF0ZV90eXBlKCkuCisJICovCisJaWYgKGpjc3RhdGUgfHwgb21pdF9xdW90 ZXMpCisJeworCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRl eHR9OworCQlOb2RlCSAgICplc2NvbnRleHRfcCA9IE5VTEw7CisJCUpzb25Db2VyY2lvbiAqY29l cmNpb24gPSBqY3N0YXRlID8gamNzdGF0ZS0+Y29lcmNpb24gOiBOVUxMOworCQlib29sCQl0eXBl X2lzX2RvbWFpbiA9CisJCQkoZ2V0QmFzZVR5cGUoamV4cHItPnJldHVybmluZy0+dHlwaWQpICE9 IGpleHByLT5yZXR1cm5pbmctPnR5cGlkKTsKKworCQkvKgorCQkgKiBGb3IgSlNPTl9RVUVSWV9P UCwgdGhyb3cgdGhlIGVycm9ycyB0aGF0IG9jY3VyIHdoZW4gY29lcmNpbmcgYQorCQkgKiBub24t ZGVmYXVsdCBKc29uQmVoYXZpb3IgZXhwcmVzc2lvbi4gIEFsc28gdGhyb3cgYW4gZXJyb3IgaWYK KwkJICogY29lcmNpbmcgdmlhX2lvIGFuZCB0aGUgcmV0dXJuaW5nIHR5cGUgaXMgYSBkb21haW4s IHdob3NlCisJCSAqIGNvbnN0cmFpbnQgdmlvbGF0aW9ucyBtdXN0IGJlIHJlcG9ydGVkLgorCQkg KgorCQkgKiBJbiBhbGwgb3RoZXIgY2FzZXMsIHJlc3BlY3QgdGhlIE9OIEVSUk9SIGNsYXVzZS4K KwkJICovCisJCWlmICgoamV4cHItPm9wID09IEpTT05fUVVFUllfT1AgJiYKKwkJCSBwb3N0X2V2 YWwtPmNvZXJjaW5nX2JlaGF2aW9yX2V4cHIpIHx8CisJCQkoY29lcmNpb24gJiYgY29lcmNpb24t PnZpYV9pbyAmJiB0eXBlX2lzX2RvbWFpbikpCisJCQllc2NvbnRleHRfcCA9IE5VTEw7CisJCWVs c2UgaWYgKGpleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJ CWVzY29udGV4dF9wID0gKE5vZGUgKikgJmVzY29udGV4dDsKKworCQlpZiAoKGNvZXJjaW9uICYm IGNvZXJjaW9uLT52aWFfaW8pIHx8IG9taXRfcXVvdGVzKQorCQl7CisJCQlpZiAoIUlucHV0RnVu Y3Rpb25DYWxsU2FmZShqc2VzdGF0ZS0+aW5wdXQuZmluZm8sIHZhbF9zdHJpbmcsCisJCQkJCQkJ CQkgICBqc2VzdGF0ZS0+aW5wdXQudHlwaW9wYXJhbSwKKwkJCQkJCQkJCSAgIGpleHByLT5yZXR1 cm5pbmctPnR5cG1vZCwKKwkJCQkJCQkJCSAgIGVzY29udGV4dF9wLAorCQkJCQkJCQkJICAgb3At PnJlc3ZhbHVlKSkKKwkJCXsKKwkJCQlwb3N0X2V2YWwtPmNvZXJjaW9uX2Vycm9yID0gdHJ1ZTsK KwkJCQkqb3AtPnJlc251bGwgPSB0cnVlOworCQkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7 CisJCQkJcmV0dXJuIG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmp1bXBfY29lcmNpb25fZXJyb3I7 CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoY29lcmNpb24gJiYgY29lcmNpb24tPnZpYV9wb3B1bGF0 ZSkKKwkJeworCQkJKm9wLT5yZXN2YWx1ZSA9IGpzb25fcG9wdWxhdGVfdHlwZShyZXMsIEpTT05C T0lELAorCQkJCQkJCQkJCQkgICBqZXhwci0+cmV0dXJuaW5nLT50eXBpZCwKKwkJCQkJCQkJCQkJ ICAgamV4cHItPnJldHVybmluZy0+dHlwbW9kLAorCQkJCQkJCQkJCQkgICAmcG9zdF9ldmFsLT5j YWNoZSwKKwkJCQkJCQkJCQkJICAgZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5X21lbW9yeSwKKwkJ CQkJCQkJCQkJICAgb3AtPnJlc251bGwsCisJCQkJCQkJCQkJCSAgIGVzY29udGV4dF9wKTsKKwkJ CWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKGVzY29udGV4dF9wKSkKKwkJCXsKKwkJCQlwb3N0X2V2 YWwtPmNvZXJjaW9uX2Vycm9yID0gdHJ1ZTsKKwkJCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAw OworCQkJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisJCQkJcmV0dXJuIG9wLT5kLmpzb25leHByX2Nv ZXJjaW9uLmp1bXBfY29lcmNpb25fZXJyb3I7CisJCQl9CisJCX0KKwl9CisKKwlwb3N0X2V2YWwt PmNvZXJjaW9uX2RvbmUgPSB0cnVlOworCXJldHVybiBvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5q dW1wX2NvZXJjaW9uX2RvbmU7Cit9CisKKy8qCisgKiBDaGVja3MgaWYgdGhlIGNvZXJjaW9uIGV2 YWx1YXRpb24gbGVkIHRvIGFuIGVycm9yLiAgSWYgYW4gZXJyb3IgZGlkIG9jY3VyLAorICogdGhp cyByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGVwIHRoYXQgaGFuZGxlcyB0aGUgZXJyb3Is IG90aGVyd2lzZQorICogdGhlIHN0ZXAgYWZ0ZXIgdGhlIGNvZXJjaW9uIHN0ZXAsIHdoaWNoIGZp bmlzaGVzIHRoZSBKc29uRXhwciBwcm9jZXNzaW5nLgorICovCitpbnQKK0V4ZWNFdmFsSnNvbkV4 cHJDb2VyY2lvbkZpbmlzaChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQorewor CUpzb25FeHByUG9zdEV2YWxTdGF0ZSAqcG9zdF9ldmFsID0KKwkJJm9wLT5kLmpzb25leHByX2Nv ZXJjaW9uX2ZpbmlzaC5qc2VzdGF0ZS0+cG9zdF9ldmFsOworCisJaWYgKFNPRlRfRVJST1JfT0ND VVJSRUQoJnBvc3RfZXZhbC0+amNzdGF0ZS0+ZXNjb250ZXh0KSkKKwl7CisJCSpvcC0+cmVzdmFs dWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisJCXBvc3RfZXZhbC0+Y29l cmNpb25fZXJyb3IgPSB0cnVlOworCisJCS8qCisJCSAqIEFsc28gbWFrZSBFcnJvclNhdmVDb250 ZXh0IHJlYWR5IGZvciB0aGUgbmV4dCByb3cuICBTaW5jZSB3ZSBuZXZlcgorCQkgKiBzZXQgZGV0 YWlsc193YW50ZWQsIHdlIGRvbid0IG5lZWQgdG8gYWxzbyByZXNldCBlcnJvcl9kYXRhLCB3aGlj aAorCQkgKiB3b3VsZCBiZSBOVUxMIGFueXdheS4KKwkJICovCisJCUFzc2VydCghcG9zdF9ldmFs LT5qY3N0YXRlLT5lc2NvbnRleHQuZGV0YWlsc193YW50ZWQgJiYKKwkJCSAgIHBvc3RfZXZhbC0+ amNzdGF0ZS0+ZXNjb250ZXh0LmVycm9yX2RhdGEgPT0gTlVMTCk7CisJCXBvc3RfZXZhbC0+amNz dGF0ZS0+ZXNjb250ZXh0LmVycm9yX29jY3VycmVkID0gZmFsc2U7CisKKwkJcmV0dXJuIG9wLT5k Lmpzb25leHByX2NvZXJjaW9uX2ZpbmlzaC5qdW1wX2NvZXJjaW9uX2Vycm9yOworCX0KKworCXBv c3RfZXZhbC0+Y29lcmNpb25fZG9uZSA9IHRydWU7CisJcmV0dXJuIG9wLT5kLmpzb25leHByX2Nv ZXJjaW9uX2ZpbmlzaC5qdW1wX2NvZXJjaW9uX2RvbmU7Cit9CisKKy8qCisgKiBQcmVwYXJlIFNR TC9KU09OIGl0ZW0gY29lcmNpb24gdG8gdGhlIG91dHB1dCB0eXBlLiBSZXR1cm5lZCBhIGRhdHVt IG9mIHRoZQorICogY29ycmVzcG9uZGluZyBTUUwgdHlwZSBhbmQgYSBwb2ludGVyIHRvIHRoZSBj b2VyY2lvbiBzdGF0ZS4KKyAqLworc3RhdGljIERhdHVtCitFeGVjUHJlcGFyZUpzb25JdGVtQ29l cmNpb24oSnNvbmJWYWx1ZSAqaXRlbSwgTGlzdCAqaXRlbV9qY3N0YXRlcywKKwkJCQkJCQlKc29u Q29lcmNpb25TdGF0ZSAqKnBfaXRlbV9qY3N0YXRlKQoreworCUpzb25Db2VyY2lvblN0YXRlICpp dGVtX2pjc3RhdGU7CisJRGF0dW0JCXJlczsKKwlKc29uYlZhbHVlCWJ1ZjsKKworCWlmIChpdGVt LT50eXBlID09IGpidkJpbmFyeSAmJgorCQlKc29uQ29udGFpbmVySXNTY2FsYXIoaXRlbS0+dmFs LmJpbmFyeS5kYXRhKSkKKwl7CisJCWJvb2wJCXJlcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7 CisKKwkJcmVzID0gSnNvbmJFeHRyYWN0U2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnkuZGF0YSwgJmJ1 Zik7CisJCWl0ZW0gPSAmYnVmOworCQlBc3NlcnQocmVzKTsKKwl9CisKKwkvKiBnZXQgY29lcmNp b24gc3RhdGUgcmVmZXJlbmNlIGFuZCBkYXR1bSBvZiB0aGUgY29ycmVzcG9uZGluZyBTUUwgdHlw ZSAqLworCXN3aXRjaCAoaXRlbS0+dHlwZSkKKwl7CisJCWNhc2UgamJ2TnVsbDoKKwkJCWl0ZW1f amNzdGF0ZSA9IGxpc3RfbnRoKGl0ZW1famNzdGF0ZXMsIEpzb25JdGVtVHlwZU51bGwpOworCQkJ cmVzID0gKERhdHVtKSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZTdHJpbmc6CisJCQlpdGVt X2pjc3RhdGUgPSBsaXN0X250aChpdGVtX2pjc3RhdGVzLCBKc29uSXRlbVR5cGVTdHJpbmcpOwor CQkJcmVzID0gUG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihpdGVtLT52 YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkJCQkJCQkJICAgaXRlbS0+dmFsLnN0cmluZy5sZW4pKTsK KwkJCWJyZWFrOworCisJCWNhc2UgamJ2TnVtZXJpYzoKKwkJCWl0ZW1famNzdGF0ZSA9IGxpc3Rf bnRoKGl0ZW1famNzdGF0ZXMsIEpzb25JdGVtVHlwZU51bWVyaWMpOworCQkJcmVzID0gTnVtZXJp Y0dldERhdHVtKGl0ZW0tPnZhbC5udW1lcmljKTsKKwkJCWJyZWFrOworCisJCWNhc2UgamJ2Qm9v bDoKKwkJCWl0ZW1famNzdGF0ZSA9IGxpc3RfbnRoKGl0ZW1famNzdGF0ZXMsIEpzb25JdGVtVHlw ZUJvb2xlYW4pOworCQkJcmVzID0gQm9vbEdldERhdHVtKGl0ZW0tPnZhbC5ib29sZWFuKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgamJ2RGF0ZXRpbWU6CisJCQlyZXMgPSBpdGVtLT52YWwuZGF0ZXRp bWUudmFsdWU7CisJCQlzd2l0Y2ggKGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCkKKwkJCXsKKwkJ CQljYXNlIERBVEVPSUQ6CisJCQkJCWl0ZW1famNzdGF0ZSA9IGxpc3RfbnRoKGl0ZW1famNzdGF0 ZXMsIEpzb25JdGVtVHlwZURhdGUpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRJTUVPSUQ6CisJ CQkJCWl0ZW1famNzdGF0ZSA9IGxpc3RfbnRoKGl0ZW1famNzdGF0ZXMsIEpzb25JdGVtVHlwZVRp bWUpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRJTUVUWk9JRDoKKwkJCQkJaXRlbV9qY3N0YXRl ID0gbGlzdF9udGgoaXRlbV9qY3N0YXRlcywgSnNvbkl0ZW1UeXBlVGltZXR6KTsKKwkJCQkJYnJl YWs7CisJCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJCWl0ZW1famNzdGF0ZSA9IGxpc3RfbnRo KGl0ZW1famNzdGF0ZXMsIEpzb25JdGVtVHlwZVRpbWVzdGFtcCk7CisJCQkJCWJyZWFrOworCQkJ CWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJCWl0ZW1famNzdGF0ZSA9IGxpc3RfbnRoKGl0ZW1f amNzdGF0ZXMsIEpzb25JdGVtVHlwZVRpbWVzdGFtcHR6KTsKKwkJCQkJYnJlYWs7CisJCQkJZGVm YXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIgZGF0ZXRpbWUgdHlwZSBv aWQgJXUiLAorCQkJCQkJIGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCk7CisJCQkJCXJldHVybiAo RGF0dW0pIDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIGpidkFycmF5OgorCQljYXNlIGpi dk9iamVjdDoKKwkJY2FzZSBqYnZCaW5hcnk6CisJCQlpdGVtX2pjc3RhdGUgPSBsaXN0X250aChp dGVtX2pjc3RhdGVzLCBKc29uSXRlbVR5cGVDb21wb3NpdGUpOworCQkJcmVzID0gSnNvbmJQR2V0 RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoaXRlbSkpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIHZhbHVlIHR5cGUgJWQiLCBpdGVtLT50 eXBlKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCisJKnBfaXRlbV9qY3N0YXRlID0gaXRl bV9qY3N0YXRlOworCisJcmV0dXJuIHJlczsKK30KKwogCiAvKgogICogRXhlY0V2YWxHcm91cGlu Z0Z1bmMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIv c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggN2Q0NGE0YzlmNC4uMGUw NmFmMTViNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMK KysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTE4NzUsNiArMTg3 NSwyNzEgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlMTFZNQnVp bGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOwogCQkJCWJyZWFrOwogCisJCQljYXNlIEVFT1Bf SlNPTkVYUFJfUEFUSDoKKwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhlY0V2YWxKc29u RXhwciIsCisJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vjb250ZXh0KTsKKwkJCQlMTFZNQnVpbGRC cihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOworCisJCQljYXNlIEVFT1BfSlNP TkVYUFJfU0tJUDoKKwkJCQl7CisJCQkJCUxMVk1WYWx1ZVJlZiBwYXJhbXNbMl07CisJCQkJCUxM Vk1WYWx1ZVJlZiB2X3JldDsKKworCQkJCQkvKgorCQkJCQkgKiBDYWxsIEV4ZWNFdmFsSnNvbkV4 cHJTa2lwKCkgdG8gZGVjaWRlIGlmIEpTT04gcGF0aAorCQkJCQkgKiBldmFsdWF0aW9uIGNhbiBi ZSBza2lwcGVkLiAgVGhpcyByZXR1cm5zIHRoZSBzdGVwCisJCQkJCSAqIGFkZHJlc3MgdG8ganVt cCB0by4KKwkJCQkJICovCisJCQkJCXBhcmFtc1swXSA9IHZfc3RhdGU7CisJCQkJCXBhcmFtc1sx XSA9IGxfcHRyX2NvbnN0KG9wLCBsX3B0cihTdHJ1Y3RFeHByRXZhbFN0ZXApKTsKKwkJCQkJdl9y ZXQgPSBMTFZNQnVpbGRDYWxsKGIsCisJCQkJCQkJCQkJICBsbHZtX3BnX2Z1bmMobW9kLCAiRXhl Y0V2YWxKc29uRXhwclNraXAiKSwKKwkJCQkJCQkJCQkgIHBhcmFtcywgbGVuZ3Rob2YocGFyYW1z KSwgIiIpOworCisJCQkJCS8qCisJCQkJCSAqIEp1bXAgdG8gY29lcmNpb24gc3RlcCBpZiB0aGUg cmV0dXJuZWQgYWRkcmVzcyBpcyB0aGUKKwkJCQkJICogc2FtZSBhcyBqc29uZXhwcl9za2lwLmp1 bXBfY29lcmNpb24sIHdoaWNoIHNpZ25pZmllcworCQkJCQkgKiBza2lwcGluZyBvZiBKU09OIHBh dGggZXZhbHVhdGlvbiwgZWxzZSB0byB0aGUgbmV4dCBzdGVwCisJCQkJCSAqIHdoaWNoIG11c3Qg cG9pbnQgdG8gdGhlIHN0ZXBzIHRvIGV2YWx1YXRlIFBBU1NJTkcgYXJncywKKwkJCQkJICogaWYg YW55LCBvciB0byB0aGUgSlNPTiBwYXRoIGV2YWx1YXRpb24uCisJCQkJCSAqLworCQkJCQlMTFZN QnVpbGRDb25kQnIoYiwKKwkJCQkJCQkJCUxMVk1CdWlsZElDbXAoYiwKKwkJCQkJCQkJCQkJCSAg TExWTUludEVRLAorCQkJCQkJCQkJCQkJICB2X3JldCwKKwkJCQkJCQkJCQkJCSAgbF9pbnQzMl9j b25zdChsYywgb3AtPmQuanNvbmV4cHJfc2tpcC5qdW1wX2NvZXJjaW9uKSwKKwkJCQkJCQkJCQkJ CSAgIiIpLAorCQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4cHJfc2tpcC5qdW1wX2NvZXJj aW9uXSwKKwkJCQkJCQkJCW9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJCWJyZWFrOworCQkJCX0K KworCQkJY2FzZSBFRU9QX0pTT05FWFBSX0JFSEFWSU9SOgorCQkJCXsKKwkJCQkJTExWTVZhbHVl UmVmIHBhcmFtc1syXTsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0OworCQkJCQlMTFZNQmFzaWNC bG9ja1JlZiBiX2p1bXBfb25lcnJvcl9kZWZhdWx0OworCisJCQkJCS8qCisJCQkJCSAqIENhbGwg RXhlY0V2YWxKc29uRXhwckJlaGF2aW9yKCkgdG8gZGVjaWRlIGlmIE9OIEVNUFRZCisJCQkJCSAq IG9yIE9OIEVSUk9SIGJlaGF2aW9yIG11c3QgYmUgaW52b2tlZCBkZXBlbmRpbmcgb24gd2hhdAor CQkJCQkgKiBKU09OIHBhdGggZXZhbHVhdGlvbiByZXR1cm5lZC4gIFRoaXMgcmV0dXJucyB0aGUg c3RlcAorCQkJCQkgKiBhZGRyZXNzIHRvIGp1bXAgdG8uCisJCQkJCSAqLworCQkJCQlwYXJhbXNb MF0gPSB2X3N0YXRlOworCQkJCQlwYXJhbXNbMV0gPSBsX3B0cl9jb25zdChvcCwgbF9wdHIoU3Ry dWN0RXhwckV2YWxTdGVwKSk7CisJCQkJCXZfcmV0ID0gTExWTUJ1aWxkQ2FsbChiLAorCQkJCQkJ CQkJCSAgbGx2bV9wZ19mdW5jKG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJCZWhhdmlvciIpLAorCQkJ CQkJCQkJCSAgcGFyYW1zLCBsZW5ndGhvZihwYXJhbXMpLCAiIik7CisKKwkJCQkJYl9qdW1wX29u ZXJyb3JfZGVmYXVsdCA9CisJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwK KwkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2JlaGF2aW9yX2p1bXBfb25lcnJvcl9kZWZhdWx0 Iiwgb3Bubyk7CisKKwkJCQkJLyoKKwkJCQkJICogSnVtcCB0byBjb2VyY2lvbiBzdGVwIGlmIHRo ZSByZXR1cm5lZCBhZGRyZXNzIGlzIHRoZQorCQkJCQkgKiBzYW1lIGFzIGpzb25leHByX2JlaGF2 aW9yLmp1bXBfY29lcmNpb24sIGVsc2UgdG8gdGhlCisJCQkJCSAqIG5leHQgYmxvY2ssIG9uZSB0 aGF0IGNoZWNrcyB3aGV0aGVyIHRvIGV2YWx1YXRlIHRoZSBPTgorCQkJCQkgKiBFUlJPUiBkZWZh dWx0IGV4cHJlc3Npb24uCisJCQkJCSAqLworCQkJCQlMTFZNQnVpbGRDb25kQnIoYiwKKwkJCQkJ CQkJCUxMVk1CdWlsZElDbXAoYiwKKwkJCQkJCQkJCQkJCSAgTExWTUludEVRLAorCQkJCQkJCQkJ CQkJICB2X3JldCwKKwkJCQkJCQkJCQkJCSAgbF9pbnQzMl9jb25zdChsYywgb3AtPmQuanNvbmV4 cHJfYmVoYXZpb3IuanVtcF9jb2VyY2lvbiksCisJCQkJCQkJCQkJCQkgICIiKSwKKwkJCQkJCQkJ CW9wYmxvY2tzW29wLT5kLmpzb25leHByX2JlaGF2aW9yLmp1bXBfY29lcmNpb25dLAorCQkJCQkJ CQkJYl9qdW1wX29uZXJyb3JfZGVmYXVsdCk7CisKKwkJCQkJLyoKKwkJCQkJICogQmxvY2sgdGhh dCBjaGVja3Mgd2hldGhlciB0byBldmFsdWF0ZSB0aGUgT04gRVJST1IKKwkJCQkJICogZGVmYXVs dCBleHByZXNzaW9uLgorCQkJCQkgKgorCQkJCQkgKiBKdW1wIHRvIGV2YWx1YXRlIHRoZSBPTiBF UlJPUiBkZWZhdWx0IGV4cHJlc3Npb24gaWYgdGhlCisJCQkJCSAqIHJldHVybmVkIGFkZHJlc3Mg aXMgdGhlIHNhbWUgYXMKKwkJCQkJICoganNvbmV4cHJfYmVoYXZpb3IuanVtcF9vbmVycm9yX2Rl ZmF1bHQsIGVsc2UganVtcCB0bworCQkJCQkgKiBldmFsdWF0ZSB0aGUgT04gRU1QVFkgZGVmYXVs dCBleHByZXNzaW9uLgorCQkJCQkgKi8KKwkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIs IGJfanVtcF9vbmVycm9yX2RlZmF1bHQpOworCQkJCQlMTFZNQnVpbGRDb25kQnIoYiwKKwkJCQkJ CQkJCUxMVk1CdWlsZElDbXAoYiwKKwkJCQkJCQkJCQkJCSAgTExWTUludEVRLAorCQkJCQkJCQkJ CQkJICB2X3JldCwKKwkJCQkJCQkJCQkJCSAgbF9pbnQzMl9jb25zdChsYywgb3AtPmQuanNvbmV4 cHJfYmVoYXZpb3IuanVtcF9vbmVycm9yX2V4cHIpLAorCQkJCQkJCQkJCQkJICAiIiksCisJCQkJ CQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9iZWhhdmlvci5qdW1wX29uZXJyb3JfZXhwcl0s CisJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9iZWhhdmlvci5qdW1wX29uZW1wdHlf ZXhwcl0pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEVFT1BfSlNPTkVYUFJfQ09FUkNJ T046CisJCQkJeworCQkJCQlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHBy X2NvZXJjaW9uLmpzZXN0YXRlOworCQkJCQlMaXN0CSAgICppdGVtX2pjc3RhdGVzID0ganNlc3Rh dGUtPml0ZW1famNzdGF0ZXM7CisJCQkJCUpzb25Db2VyY2lvblN0YXRlICpyZXN1bHRfamNzdGF0 ZSA9IGpzZXN0YXRlLT5yZXN1bHRfamNzdGF0ZTsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0Owor CQkJCQlMTFZNVmFsdWVSZWYgcGFyYW1zWzVdOworCQkJCQlMTFZNQmFzaWNCbG9ja1JlZiBiX2p1 bXBfcmVzdWx0X2pjc3RhdGU7CisJCQkJCUxMVk1CYXNpY0Jsb2NrUmVmIGJfanVtcF9pdGVtX2pj c3RhdGVzOworCisJCQkJCS8qCisJCQkJCSAqIENhbGwgRXhlY0V2YWxKc29uRXhwckNvZXJjaW9u KCkgdG8gZXZhbHVhdGUgYXBwcm9wcmlhdGUKKwkJCQkJICogY29lcmNpb24uICBUaGlzIHdpbGwg cmV0dXJuIHRoZSBzdGVwIGFkZHJlc3MgdG8ganVtcAorCQkJCQkgKiB0by4KKwkJCQkJICovCisJ CQkJCXBhcmFtc1swXSA9IHZfc3RhdGU7CisJCQkJCXBhcmFtc1sxXSA9IGxfcHRyX2NvbnN0KG9w LCBsX3B0cihTdHJ1Y3RFeHByRXZhbFN0ZXApKTsKKwkJCQkJcGFyYW1zWzJdID0gdl9lY29udGV4 dDsKKwkJCQkJcGFyYW1zWzNdID0gTExWTUJ1aWxkTG9hZChiLCB2X3Jlc3ZhbHVlcCwgIiIpOwor CQkJCQlwYXJhbXNbNF0gPSBMTFZNQnVpbGRMb2FkKGIsIHZfcmVzbnVsbHAsICIiKTsKKwkJCQkJ dl9yZXQgPSBMTFZNQnVpbGRDYWxsKGIsCisJCQkJCQkJCQkJICBsbHZtX3BnX2Z1bmMobW9kLCAi RXhlY0V2YWxKc29uRXhwckNvZXJjaW9uIiksCisJCQkJCQkJCQkJICBwYXJhbXMsIGxlbmd0aG9m KHBhcmFtcyksICIiKTsKKworCQkJCQliX2p1bXBfcmVzdWx0X2pjc3RhdGUgPQorCQkJCQkJbF9i Yl9iZWZvcmVfdihvcGJsb2Nrc1tvcG5vICsgMV0sCisJCQkJCQkJCQkgICJvcC4lZC5qc29uZXhw cl9jb2VyY2lvbl9yZXN1bHRfamNzdGF0ZSIsIG9wbm8pOworCQkJCQliX2p1bXBfaXRlbV9qY3N0 YXRlcyA9CisJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJ CSAgIm9wLiVkLmpzb25leHByX2NvZXJjaW9uX2l0ZW1famNzdGF0ZXMiLCBvcG5vKTsKKworCQkJ CQkvKgorCQkJCQkgKiBKdW1wIHRvIGhhbmRsZSBhIGNvZXJjaW9uIGVycm9yIGlmIHRoZSByZXR1 cm5lZCBhZGRyZXNzCisJCQkJCSAqIGlzIHRoZSBzYW1lIGFzIGpzb25leHByX2NvZXJjaW9uLmp1 bXBfY29lcmNpb25fZXJyb3IsCisJCQkJCSAqIGVsc2UgdG8gdGhlIHN0ZXAgYWZ0ZXIgY29lcmNp b24gKGNvZXJjaW9uIGRvbmUhKS4KKwkJCQkJICovCisJCQkJCUxMVk1CdWlsZENvbmRCcihiLAor CQkJCQkJCQkJTExWTUJ1aWxkSUNtcChiLAorCQkJCQkJCQkJCQkJICBMTFZNSW50RVEsCisJCQkJ CQkJCQkJCQkgIHZfcmV0LAorCQkJCQkJCQkJCQkJICBsX2ludDMyX2NvbnN0KGxjLCBvcC0+ZC5q c29uZXhwcl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2Vycm9yKSwKKwkJCQkJCQkJCQkJCSAgIiIp LAorCQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4cHJfY29lcmNpb24uanVtcF9jb2VyY2lv bl9lcnJvcl0sCisJCQkJCQkJCQliX2p1bXBfcmVzdWx0X2pjc3RhdGUpOworCisJCQkJCS8qCisJ CQkJCSAqIEp1bXAgdG8gZXZhbHVhdGUgdGhlIHJlc3VsdF9jb2VyY2lvbidzIGV4cHJlc3Npb24g aWYKKwkJCQkJICogdGhlcmUncyBvbmUuCisJCQkJCSAqLworCQkJCQlMTFZNUG9zaXRpb25CdWls ZGVyQXRFbmQoYiwgYl9qdW1wX3Jlc3VsdF9qY3N0YXRlKTsKKwkJCQkJaWYgKHJlc3VsdF9qY3N0 YXRlKQorCQkJCQl7CisJCQkJCQlMTFZNQnVpbGRDb25kQnIoYiwKKwkJCQkJCQkJCQlMTFZNQnVp bGRJQ21wKGIsCisJCQkJCQkJCQkJCQkJICBMTFZNSW50RVEsCisJCQkJCQkJCQkJCQkJICB2X3Jl dCwKKwkJCQkJCQkJCQkJCQkgIGxfaW50MzJfY29uc3QobGMsIHJlc3VsdF9qY3N0YXRlLT5qdW1w X2V2YWxfZXhwciksCisJCQkJCQkJCQkJCQkJICAiIiksCisJCQkJCQkJCQkJcmVzdWx0X2pjc3Rh dGUtPmp1bXBfZXZhbF9leHByID49IDAgPworCQkJCQkJCQkJCW9wYmxvY2tzW3Jlc3VsdF9qY3N0 YXRlLT5qdW1wX2V2YWxfZXhwcl0gOgorCQkJCQkJCQkJCW9wYmxvY2tzW29wLT5kLmpzb25leHBy X2NvZXJjaW9uLmp1bXBfY29lcmNpb25fZG9uZV0sCisJCQkJCQkJCQkJYl9qdW1wX2l0ZW1famNz dGF0ZXMpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCUxMVk1CdWlsZEJyKGIsIGJfanVtcF9p dGVtX2pjc3RhdGVzKTsKKworCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9qdW1w X2l0ZW1famNzdGF0ZXMpOworCQkJCQlpZiAoaXRlbV9qY3N0YXRlcykKKwkJCQkJeworCQkJCQkJ aW50CQkJbl9jb2VyY2lvbnMgPSBsaXN0X2xlbmd0aChpdGVtX2pjc3RhdGVzKTsKKwkJCQkJCUxp c3RDZWxsICAgKmw7CisJCQkJCQlpbnQJCQlpOworCQkJCQkJTExWTUJhc2ljQmxvY2tSZWYgKmJf Y29lcmNpb25zOworCisKKwkJCQkJCS8qCisJCQkJCQkgKiBXaWxsIGNyZWF0ZSBhIGJsb2NrIGZv ciBlYWNoIGNvZXJjaW9uIGJlbG93IHRvCisJCQkJCQkgKiBjaGVjayB3aGV0aGVyIHRvIGV2YWx1 YXRlIHRoZSBjb2VyY2lvbidzIGV4cHJlc3Npb24KKwkJCQkJCSAqIGlmIHRoZXJlJ3Mgb25lIG9y IHRvIHNraXAgdG8gdGhlIGVuZCBpZiBub3QuCisJCQkJCQkgKi8KKwkJCQkJCWJfY29lcmNpb25z ID0gcGFsbG9jKChuX2NvZXJjaW9ucyArIDEpICogc2l6ZW9mKExMVk1CYXNpY0Jsb2NrUmVmKSk7 CisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbl9jb2VyY2lvbnMgKyAxOyBpKyspCisJCQkJCQkJYl9j b2VyY2lvbnNbaV0gPQorCQkJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwK KwkJCQkJCQkJCQkJICAib3AuJWQuanNvbl9pdGVtX2NvZXJjaW9uLiVkIiwKKwkJCQkJCQkJCQkJ ICBvcG5vLCBpKTsKKworCQkJCQkJLyogSnVtcCB0byBjaGVjayBmaXJzdCBjb2VyY2lvbiAqLwor CQkJCQkJTExWTUJ1aWxkQnIoYiwgYl9jb2VyY2lvbnNbMF0pOworCisJCQkJCQkvKgorCQkJCQkJ ICogQWRkIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGZvciBpbmRpdmlkdWFsIGNvZXJjaW9uJ3MKKwkJ CQkJCSAqIGV4cHJlc3Npb25zCisJCQkJCQkgKi8KKwkJCQkJCWkgPSAwOworCQkJCQkJZm9yZWFj aChsLCBpdGVtX2pjc3RhdGVzKQorCQkJCQkJeworCQkJCQkJCUpzb25Db2VyY2lvblN0YXRlICpp dGVtX2pjc3RhdGUgPSBsZmlyc3QobCk7CisKKwkJCQkJCQkvKiBCbG9jayBmb3IgdGhpcyBjb2Vy Y2lvbiAqLworCQkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2NvZXJjaW9uc1tp XSk7CisKKwkJCQkJCQkvKgorCQkJCQkJCSAqIEp1bXAgdG8gZXZhbHVhdGUgdGhlIGNvZXJjaW9u J3MgZXhwcmVzc2lvbiBpZgorCQkJCQkJCSAqIHRoZSBhZGRyZXNzIHJldHVybmVkIGlzIHRoZSBz YW1lIGFzIHRoaXMKKwkJCQkJCQkgKiBjb2VyY2lvbidzIGp1bXBfZXZhbF9leHByICh0aGF0IGlz LCBpZiBpdCBpcworCQkJCQkJCSAqIHZhbGlkKSwgZWxzZSBjaGVjayB0aGUgbmV4dCBjb2VyY2lv bidzLgorCQkJCQkJCSAqLworCQkJCQkJCUxMVk1CdWlsZENvbmRCcihiLAorCQkJCQkJCQkJCQlM TFZNQnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkJCSAgTExWTUludEVRLAorCQkJCQkJCQkJCQkJ CQkgIHZfcmV0LAorCQkJCQkJCQkJCQkJCQkgIGxfaW50MzJfY29uc3QobGMsIGl0ZW1famNzdGF0 ZS0+anVtcF9ldmFsX2V4cHIpLAorCQkJCQkJCQkJCQkJCQkgICIiKSwKKwkJCQkJCQkJCQkJaXRl bV9qY3N0YXRlLT5qdW1wX2V2YWxfZXhwciA+PSAwID8KKwkJCQkJCQkJCQkJb3BibG9ja3NbaXRl bV9qY3N0YXRlLT5qdW1wX2V2YWxfZXhwcl0gOgorCQkJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5q c29uZXhwcl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2RvbmVdLAorCQkJCQkJCQkJCQliX2NvZXJj aW9uc1tpICsgMV0pOworCQkJCQkJCWkrKzsKKwkJCQkJCX0KKworCQkJCQkJLyoKKwkJCQkJCSAq IEEgcGxhY2Vob2xkZXIgYmxvY2sgdGhhdCB0aGUgbGFzdCBjb2VyY2lvbidzIGJsb2NrCisJCQkJ CQkgKiBtaWdodCBqdW1wIHRvLCB3aGljaCB1bmNvbmRpdGlvbmFsbHkganVtcHMgdG8gZW5kCisJ CQkJCQkgKiBvZiBjb2VyY2lvbnMuCisJCQkJCQkgKi8KKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxk ZXJBdEVuZChiLCBiX2NvZXJjaW9uc1tpXSk7CisJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nr c1tvcC0+ZC5qc29uZXhwcl9jb2VyY2lvbi5qdW1wX2NvZXJjaW9uX2RvbmVdKTsKKwkJCQkJfQor CQkJCQllbHNlCisJCQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9j b2VyY2lvbi5qdW1wX2NvZXJjaW9uX2RvbmVdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlj YXNlIEVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNIOgorCQkJCXsKKwkJCQkJTExWTVZhbHVl UmVmIHBhcmFtc1syXTsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0OworCisJCQkJCS8qCisJCQkJ CSAqIENhbGwgRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uRmluaXNoKCkgdG8gY2hlY2sgd2hldGhl cgorCQkJCQkgKiBhbiBjb2VyY2lvbiBlcnJvciBvY2N1cnJlZCwgaW4gd2hpY2ggY2FzZSB3ZSBt dXN0IGp1bXAKKwkJCQkJICogdG8gd2hhdGV2ZXIgc3RlcCBoYW5kbGVzIHRoZSBlcnJvci4gIFRo aXMgcmV0dXJucyB0aGUKKwkJCQkJICogc3RlcCBhZGRyZXNzIHRvIGp1bXAgdG8uCisJCQkJCSAq LworCQkJCQlwYXJhbXNbMF0gPSB2X3N0YXRlOworCQkJCQlwYXJhbXNbMV0gPSBsX3B0cl9jb25z dChvcCwgbF9wdHIoU3RydWN0RXhwckV2YWxTdGVwKSk7CisJCQkJCXZfcmV0ID0gTExWTUJ1aWxk Q2FsbChiLAorCQkJCQkJCQkJCSAgbGx2bV9wZ19mdW5jKG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJD b2VyY2lvbkZpbmlzaCIpLAorCQkJCQkJCQkJCSAgcGFyYW1zLCBsZW5ndGhvZihwYXJhbXMpLCAi Iik7CisKKwkJCQkJLyoKKwkJCQkJICogSnVtcCB0byB0aGUgc3RlcCB0aGF0IGhhbmRsZXMgY29l cmNpb24gZXJyb3IgaWYgdGhlCisJCQkJCSAqIHJldHVybmVkIGFkZHJlc3MgaXMgdGhlIHNhbWUg YXMKKwkJCQkJICoganNvbmV4cHJfY29lcmNpb25fZmluaXNoLmp1bXBfY29lcmNpb25fZXJyb3Is IGVsc2UgdG8KKwkJCQkJICoganNvbmV4cHJfY29lcmNpb25fZmluaXNoLmp1bXBfY29lcmNpb25f ZG9uZS4KKwkJCQkJICovCisJCQkJCUxMVk1CdWlsZENvbmRCcihiLAorCQkJCQkJCQkJTExWTUJ1 aWxkSUNtcChiLAorCQkJCQkJCQkJCQkJICBMTFZNSW50RVEsCisJCQkJCQkJCQkJCQkgIHZfcmV0 LAorCQkJCQkJCQkJCQkJICBsX2ludDMyX2NvbnN0KGxjLCBvcC0+ZC5qc29uZXhwcl9jb2VyY2lv bl9maW5pc2guanVtcF9jb2VyY2lvbl9lcnJvciksCisJCQkJCQkJCQkJCQkgICIiKSwKKwkJCQkJ CQkJCW9wYmxvY2tzW29wLT5kLmpzb25leHByX2NvZXJjaW9uX2ZpbmlzaC5qdW1wX2NvZXJjaW9u X2Vycm9yXSwKKwkJCQkJCQkJCW9wYmxvY2tzW29wLT5kLmpzb25leHByX2NvZXJjaW9uX2Zpbmlz aC5qdW1wX2NvZXJjaW9uX2RvbmVdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQljYXNlIEVF T1BfQUdHUkVGOgogCQkJCXsKIAkJCQkJTExWTVZhbHVlUmVmIHZfYWdnbm87CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2VuZC9qaXQv bGx2bS9sbHZtaml0X3R5cGVzLmMKaW5kZXggZTFlOTYyNTAzOC4uMzk4NmIwMDM0MSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwpAQCAtMTM3LDYgKzEzNywxMSBAQCB2b2lkCSAg ICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlFeGVjRXZhbFhtbEV4cHIsCiAJRXhlY0V2YWxK c29uQ29uc3RydWN0b3IsCiAJRXhlY0V2YWxKc29uSXNQcmVkaWNhdGUsCisJRXhlY0V2YWxKc29u RXhwclNraXAsCisJRXhlY0V2YWxKc29uRXhwckJlaGF2aW9yLAorCUV4ZWNFdmFsSnNvbkV4cHJD b2VyY2lvbiwKKwlFeGVjRXZhbEpzb25FeHByQ29lcmNpb25GaW5pc2gsCisJRXhlY0V2YWxKc29u RXhwciwKIAlNYWtlRXhwYW5kZWRPYmplY3RSZWFkT25seUludGVybmFsLAogCUlucHV0RnVuY3Rp b25DYWxsU2FmZSwKIAlzbG90X2dldG1pc3NpbmdhdHRycywKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5k ZXggMGU3ZTZlNDZkOS4uZTFmN2ZkZTJiZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTg2MCw2 ICs4NjAsMjIgQEAgbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIgKmZvcm1h dHRlZF9leHByLAogCXJldHVybiBqdmU7CiB9CiAKKy8qCisgKiBtYWtlSnNvbkJlaGF2aW9yIC0K KyAqCSAgY3JlYXRlcyBhIEpzb25CZWhhdmlvciBub2RlCisgKi8KK0pzb25CZWhhdmlvciAqCitt YWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZGVmYXVsdF9leHBy LCBpbnQgbG9jYXRpb24pCit7CisJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IG1ha2VOb2RlKEpz b25CZWhhdmlvcik7CisKKwliZWhhdmlvci0+YnR5cGUgPSB0eXBlOworCWJlaGF2aW9yLT5kZWZh dWx0X2V4cHIgPSBkZWZhdWx0X2V4cHI7CisJYmVoYXZpb3ItPmxvY2F0aW9uID0gbG9jYXRpb247 CisKKwlyZXR1cm4gYmVoYXZpb3I7Cit9CisKIC8qCiAgKiBtYWtlSnNvbkVuY29kaW5nIC0KICAq CSAgY29udmVydHMgSlNPTiBlbmNvZGluZyBuYW1lIHRvIGVudW0gSnNvbkVuY29kaW5nCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVz L25vZGVGdW5jcy5jCmluZGV4IGMwM2Y0ZjIzZTIuLmVmMDhlZjJjYmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVG dW5jcy5jCkBAIC0yMzQsNiArMjM0LDEyIEBAIGV4cHJUeXBlKGNvbnN0IE5vZGUgKmV4cHIpCiAJ CWNhc2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQl0eXBlID0gQk9PTE9JRDsKIAkJCWJyZWFrOwor CQljYXNlIFRfSnNvbkV4cHI6CisJCQl0eXBlID0gKChjb25zdCBKc29uRXhwciAqKSBleHByKS0+ cmV0dXJuaW5nLT50eXBpZDsKKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJ dHlwZSA9IGV4cHJUeXBlKCgoY29uc3QgSnNvbkNvZXJjaW9uICopIGV4cHIpLT5leHByKTsKKwkJ CWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQl0eXBlID0gQk9PTE9JRDsKIAkJCWJyZWFr OwpAQCAtNDkzLDYgKzQ5OSwxMCBAQCBleHByVHlwbW9kKGNvbnN0IE5vZGUgKmV4cHIpCiAJCQly ZXR1cm4gZXhwclR5cG1vZCgoTm9kZSAqKSAoKGNvbnN0IEpzb25WYWx1ZUV4cHIgKikgZXhwcikt PmZvcm1hdHRlZF9leHByKTsKIAkJY2FzZSBUX0pzb25Db25zdHJ1Y3RvckV4cHI6CiAJCQlyZXR1 cm4gKChjb25zdCBKc29uQ29uc3RydWN0b3JFeHByICopIGV4cHIpLT5yZXR1cm5pbmctPnR5cG1v ZDsKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJcmV0dXJuICgoSnNvbkV4cHIgKikgZXhwciktPnJl dHVybmluZy0+dHlwbW9kOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJcmV0dXJuIGV4cHJU eXBtb2QoKChjb25zdCBKc29uQ29lcmNpb24gKikgZXhwciktPmV4cHIpOwogCQljYXNlIFRfQ29l cmNlVG9Eb21haW46CiAJCQlyZXR1cm4gKChjb25zdCBDb2VyY2VUb0RvbWFpbiAqKSBleHByKS0+ cmVzdWx0dHlwbW9kOwogCQljYXNlIFRfQ29lcmNlVG9Eb21haW5WYWx1ZToKQEAgLTk2OSw2ICs5 NzksMjIgQEAgZXhwckNvbGxhdGlvbihjb25zdCBOb2RlICpleHByKQogCQkJLyogSVMgSlNPTidz IHJlc3VsdCBpcyBib29sZWFuIC4uLiAqLwogCQkJY29sbCA9IEludmFsaWRPaWQ7CS8qIC4uLiBz byBpdCBoYXMgbm8gY29sbGF0aW9uICovCiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25FeHByOgor CQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gKEpzb25FeHByICopIGV4cHI7CisJCQkJSnNv bkNvZXJjaW9uICpjb2VyY2lvbiA9IGpleHByLT5yZXN1bHRfY29lcmNpb247CisKKwkJCQlpZiAo IWNvZXJjaW9uKQorCQkJCQljb2xsID0gSW52YWxpZE9pZDsKKwkJCQllbHNlIGlmIChjb2VyY2lv bi0+ZXhwcikKKwkJCQkJY29sbCA9IGV4cHJDb2xsYXRpb24oY29lcmNpb24tPmV4cHIpOworCQkJ CWVsc2UgaWYgKGNvZXJjaW9uLT52aWFfaW8gfHwgY29lcmNpb24tPnZpYV9wb3B1bGF0ZSkKKwkJ CQkJY29sbCA9IGNvZXJjaW9uLT5jb2xsYXRpb247CisJCQkJZWxzZQorCQkJCQljb2xsID0gSW52 YWxpZE9pZDsKKwkJCX0KKwkJCWJyZWFrOworCiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCS8qIE51 bGxUZXN0J3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4uICovCiAJCQljb2xsID0gSW52YWxpZE9pZDsJ LyogLi4uIHNvIGl0IGhhcyBubyBjb2xsYXRpb24gKi8KQEAgLTExNjAsNiArMTE4Niw5IEBAIGV4 cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNvbGxhdGlvbikKIAkJY2FzZSBUX0Nhc2VF eHByOgogCQkJKChDYXNlRXhwciAqKSBleHByKS0+Y2FzZWNvbGxpZCA9IGNvbGxhdGlvbjsKIAkJ CWJyZWFrOworCQljYXNlIFRfQ2FzZVRlc3RFeHByOgorCQkJKChDYXNlVGVzdEV4cHIgKikgZXhw ciktPmNvbGxhdGlvbiA9IGNvbGxhdGlvbjsKKwkJCWJyZWFrOwogCQljYXNlIFRfQXJyYXlFeHBy OgogCQkJKChBcnJheUV4cHIgKikgZXhwciktPmFycmF5X2NvbGxpZCA9IGNvbGxhdGlvbjsKIAkJ CWJyZWFrOwpAQCAtMTIwNSw2ICsxMjM0LDI5IEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhw ciwgT2lkIGNvbGxhdGlvbikKIAkJY2FzZSBUX0pzb25Jc1ByZWRpY2F0ZToKIAkJCUFzc2VydCgh T2lkSXNWYWxpZChjb2xsYXRpb24pKTsgLyogcmVzdWx0IGlzIGFsd2F5cyBib29sZWFuICovCiAJ CQlicmVhazsKKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpleHBy ID0gKEpzb25FeHByICopIGV4cHI7CisKKwkJCQlpZiAoamV4cHItPnJlc3VsdF9jb2VyY2lvbikK KwkJCQkJZXhwclNldENvbGxhdGlvbigoTm9kZSAqKSBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLCBj b2xsYXRpb24pOworCQkJCWVsc2UKKwkJCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikp OyAvKiByZXN1bHQgaXMgYWx3YXlzIGEKKwkJCQkJCQkJCQkJCQkgKiBqc29uW2JdIHR5cGUgKi8K KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJeworCQkJCUpzb25D b2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIGV4cHI7CisKKwkJCQlpZiAoY29l cmNpb24tPmV4cHIpCisJCQkJCWV4cHJTZXRDb2xsYXRpb24oY29lcmNpb24tPmV4cHIsIGNvbGxh dGlvbik7CisJCQkJZWxzZSBpZiAoY29lcmNpb24tPnZpYV9pbyB8fCBjb2VyY2lvbi0+dmlhX3Bv cHVsYXRlKQorCQkJCQljb2VyY2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOworCQkJCWVsc2UK KwkJCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikpOworCQkJfQorCQkJYnJlYWs7CiAJ CWNhc2UgVF9OdWxsVGVzdDoKIAkJCS8qIE51bGxUZXN0J3MgcmVzdWx0IGlzIGJvb2xlYW4gLi4u ICovCiAJCQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7IC8qIC4uLiBzbyBuZXZlciBz ZXQgYSBjb2xsYXRpb24gKi8KQEAgLTE1MDgsNiArMTU2MCwxNSBAQCBleHByTG9jYXRpb24oY29u c3QgTm9kZSAqZXhwcikKIAkJY2FzZSBUX0pzb25Jc1ByZWRpY2F0ZToKIAkJCWxvYyA9ICgoY29u c3QgSnNvbklzUHJlZGljYXRlICopIGV4cHIpLT5sb2NhdGlvbjsKIAkJCWJyZWFrOworCQljYXNl IFRfSnNvbkV4cHI6CisJCQl7CisJCQkJY29uc3QgSnNvbkV4cHIgKmpzZXhwciA9IChjb25zdCBK c29uRXhwciAqKSBleHByOworCisJCQkJLyogY29uc2lkZXIgYm90aCBmdW5jdGlvbiBuYW1lIGFu ZCBsZWZ0bW9zdCBhcmcgKi8KKwkJCQlsb2MgPSBsZWZ0bW9zdExvYyhqc2V4cHItPmxvY2F0aW9u LAorCQkJCQkJCQkgIGV4cHJMb2NhdGlvbihqc2V4cHItPmZvcm1hdHRlZF9leHByKSk7CisJCQl9 CisJCQlicmVhazsKIAkJY2FzZSBUX051bGxUZXN0OgogCQkJewogCQkJCWNvbnN0IE51bGxUZXN0 ICpuZXhwciA9IChjb25zdCBOdWxsVGVzdCAqKSBleHByOwpAQCAtMjI2MCw2ICsyMzIxLDI4IEBA IGV4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQkJYnJlYWs7CiAJCWNh c2UgVF9Kc29uSXNQcmVkaWNhdGU6CiAJCQlyZXR1cm4gV0FMSygoKEpzb25Jc1ByZWRpY2F0ZSAq KSBub2RlKS0+ZXhwcik7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAg ICpqZXhwciA9IChKc29uRXhwciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoamV4cHItPmZvcm1h dHRlZF9leHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamV4cHItPnJlc3Vs dF9jb2VyY2lvbikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5pdGVt X2NvZXJjaW9ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5wYXNz aW5nX3ZhbHVlcykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCS8qIHdlIGFzc3VtZSB3YWxrZXIg ZG9lc24ndCBjYXJlIGFib3V0IHBhc3NpbmdfbmFtZXMgKi8KKwkJCQlpZiAoamV4cHItPm9uX2Vt cHR5ICYmCisJCQkJCVdBTEsoamV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIpKQorCQkJCQly ZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwcikp CisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQ29lcmNp b246CisJCQlyZXR1cm4gV0FMSygoKEpzb25Db2VyY2lvbiAqKSBub2RlKS0+ZXhwcik7CiAJCWNh c2UgVF9OdWxsVGVzdDoKIAkJCXJldHVybiBXQUxLKCgoTnVsbFRlc3QgKikgbm9kZSktPmFyZyk7 CiAJCWNhc2UgVF9Cb29sZWFuVGVzdDoKQEAgLTMyNTksNiArMzM0MiwzNiBAQCBleHByZXNzaW9u X3RyZWVfbXV0YXRvcl9pbXBsKE5vZGUgKm5vZGUsCiAKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3 bm9kZTsKIAkJCX0KKwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCUpzb25FeHByICAgKmpl eHByID0gKEpzb25FeHByICopIG5vZGU7CisJCQkJSnNvbkV4cHIgICAqbmV3bm9kZTsKKworCQkJ CUZMQVRDT1BZKG5ld25vZGUsIGpleHByLCBKc29uRXhwcik7CisJCQkJTVVUQVRFKG5ld25vZGUt PnBhdGhfc3BlYywgamV4cHItPnBhdGhfc3BlYywgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9k ZS0+Zm9ybWF0dGVkX2V4cHIsIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgTm9kZSAqKTsKKwkJCQlN VVRBVEUobmV3bm9kZS0+cmVzdWx0X2NvZXJjaW9uLCBqZXhwci0+cmVzdWx0X2NvZXJjaW9uLCBK c29uQ29lcmNpb24gKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPml0ZW1fY29lcmNpb25zLCBqZXhw ci0+aXRlbV9jb2VyY2lvbnMsIExpc3QgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPnBhc3Npbmdf dmFsdWVzLCBqZXhwci0+cGFzc2luZ192YWx1ZXMsIExpc3QgKik7CisJCQkJLyogYXNzdW1lIG11 dGF0b3IgZG9lcyBub3QgY2FyZSBhYm91dCBwYXNzaW5nX25hbWVzICovCisJCQkJaWYgKG5ld25v ZGUtPm9uX2VtcHR5KQorCQkJCQlNVVRBVEUobmV3bm9kZS0+b25fZW1wdHktPmRlZmF1bHRfZXhw ciwKKwkJCQkJCSAgIGpleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHByLCBOb2RlICopOworCQkJ CU1VVEFURShuZXdub2RlLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByLAorCQkJCQkgICBqZXhwci0+ b25fZXJyb3ItPmRlZmF1bHRfZXhwciwgTm9kZSAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3 bm9kZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJeworCQkJ CUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIG5vZGU7CisJCQkJSnNv bkNvZXJjaW9uICpuZXdub2RlOworCisJCQkJRkxBVENPUFkobmV3bm9kZSwgY29lcmNpb24sIEpz b25Db2VyY2lvbik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmV4cHIsIGNvZXJjaW9uLT5leHByLCBO b2RlICopOworCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCQkJfQorCQkJYnJlYWs7CiAJ CWNhc2UgVF9OdWxsVGVzdDoKIAkJCXsKIAkJCQlOdWxsVGVzdCAgICpudGVzdCA9IChOdWxsVGVz dCAqKSBub2RlOwpAQCAtMzk0NSw2ICs0MDU4LDQzIEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fs a2VyX2ltcGwoTm9kZSAqbm9kZSwKIAkJCWJyZWFrOwogCQljYXNlIFRfSnNvbklzUHJlZGljYXRl OgogCQkJcmV0dXJuIFdBTEsoKChKc29uSXNQcmVkaWNhdGUgKikgbm9kZSktPmV4cHIpOworCQlj YXNlIFRfSnNvbkFyZ3VtZW50OgorCQkJcmV0dXJuIFdBTEsoKChKc29uQXJndW1lbnQgKikgbm9k ZSktPnZhbCk7CisJCWNhc2UgVF9Kc29uQ29tbW9uOgorCQkJeworCQkJCUpzb25Db21tb24gKmpj ID0gKEpzb25Db21tb24gKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpjLT5leHByKSkKKwkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamMtPnBhdGhzcGVjKSkKKwkJCQkJcmV0dXJuIHRy dWU7CisJCQkJaWYgKFdBTEsoamMtPnBhc3NpbmcpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlv ciAqamIgPSAoSnNvbkJlaGF2aW9yICopIG5vZGU7CisKKwkJCQlpZiAoamItPmJ0eXBlID09IEpT T05fQkVIQVZJT1JfREVGQVVMVCAmJgorCQkJCQlXQUxLKGpiLT5kZWZhdWx0X2V4cHIpKQorCQkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkZ1bmNFeHByOgor CQkJeworCQkJCUpzb25GdW5jRXhwciAqamZlID0gKEpzb25GdW5jRXhwciAqKSBub2RlOworCisJ CQkJaWYgKFdBTEsoamZlLT5jb21tb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoamZl LT5vdXRwdXQgJiYgV0FMSyhqZmUtPm91dHB1dCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlm IChXQUxLKGpmZS0+b25fZW1wdHkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhq ZmUtPm9uX2Vycm9yKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKIAkJY2Fz ZSBUX051bGxUZXN0OgogCQkJcmV0dXJuIFdBTEsoKChOdWxsVGVzdCAqKSBub2RlKS0+YXJnKTsK IAkJY2FzZSBUX0Jvb2xlYW5UZXN0OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMK aW5kZXggZDZjZWFmZDUxYy4uM2JiNDhiNjRkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCkBAIC00ODUwLDcgKzQ4NTAsOCBAQCBjb3N0X3F1YWxfZXZhbF93YWxrZXIoTm9k ZSAqbm9kZSwgY29zdF9xdWFsX2V2YWxfY29udGV4dCAqY29udGV4dCkKIAkJCSBJc0Eobm9kZSwg U1FMVmFsdWVGdW5jdGlvbikgfHwKIAkJCSBJc0Eobm9kZSwgWG1sRXhwcikgfHwKIAkJCSBJc0Eo bm9kZSwgQ29lcmNlVG9Eb21haW4pIHx8Ci0JCQkgSXNBKG5vZGUsIE5leHRWYWx1ZUV4cHIpKQor CQkJIElzQShub2RlLCBOZXh0VmFsdWVFeHByKSB8fAorCQkJIElzQShub2RlLCBKc29uRXhwcikp CiAJewogCQkvKiBUcmVhdCBhbGwgdGhlc2UgYXMgaGF2aW5nIGNvc3QgMSAqLwogCQljb250ZXh0 LT50b3RhbC5wZXJfdHVwbGUgKz0gY3B1X29wZXJhdG9yX2Nvc3Q7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9jbGF1c2VzLmMKaW5kZXggZGEyNTg5NjhiOC4uZTQwY2ZhYjRiNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL2NsYXVzZXMuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgInV0aWxz L2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pz b25iLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5 c2NhY2hlLmgiCkBAIC00MTIsNiArNDEzLDI0IEBAIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlvbnNf d2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiAJCS8qIENoZWNrIGFsbCBzdWJub2Rl cyAqLwogCX0KIAorCWlmIChJc0Eobm9kZSwgSnNvbkV4cHIpKQorCXsKKwkJSnNvbkV4cHIgICAq amV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7CisJCUNvbnN0CSAgICpjbnN0OworCisJ CWlmICghSXNBKGpleHByLT5wYXRoX3NwZWMsIENvbnN0KSkKKwkJCXJldHVybiB0cnVlOworCisJ CWNuc3QgPSBjYXN0Tm9kZShDb25zdCwgamV4cHItPnBhdGhfc3BlYyk7CisKKwkJQXNzZXJ0KGNu c3QtPmNvbnN0dHlwZSA9PSBKU09OUEFUSE9JRCk7CisJCWlmIChjbnN0LT5jb25zdGlzbnVsbCkK KwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4ganNwSXNNdXRhYmxlKERhdHVtR2V0SnNvblBh dGhQKGNuc3QtPmNvbnN0dmFsdWUpLAorCQkJCQkJCWpleHByLT5wYXNzaW5nX25hbWVzLCBqZXhw ci0+cGFzc2luZ192YWx1ZXMpOworCX0KKwogCWlmIChJc0Eobm9kZSwgU1FMVmFsdWVGdW5jdGlv bikpCiAJewogCQkvKiBhbGwgdmFyaWFudHMgb2YgU1FMVmFsdWVGdW5jdGlvbiBhcmUgc3RhYmxl ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueQppbmRleCA3ZDIwMzI4ODVlLi5mZmE4YmJlNzcwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK QEAgLTI3OCw2ICsyNzgsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3Qo Y2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU1lcmdlV2hlbkNs YXVzZSAqbWVyZ2V3aGVuOwogCXN0cnVjdCBLZXlBY3Rpb25zICprZXlhY3Rpb25zOwogCXN0cnVj dCBLZXlBY3Rpb24gKmtleWFjdGlvbjsKKwlKc29uQmVoYXZpb3IgKmpzYmVoYXZpb3I7CisJSnNv blF1b3Rlcwlqc19xdW90ZXM7CiB9CiAKICV0eXBlIDxub2RlPglzdG10IHRvcGxldmVsX3N0bXQg c2NoZW1hX3N0bXQgcm91dGluZV9ib2R5X3N0bXQKQEAgLTY1MCwxNCArNjUyLDIyIEBAIHN0YXRp YyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlh c2VzLCBOb2RlICpxdWVyeSk7CiAJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAogCQkJCWpz b25fbmFtZV9hbmRfdmFsdWUKIAkJCQlqc29uX2FnZ3JlZ2F0ZV9mdW5jCisJCQkJanNvbl9hcGlf Y29tbW9uX3N5bnRheAorCQkJCWpzb25fYXJndW1lbnQKICV0eXBlIDxsaXN0Pglqc29uX25hbWVf YW5kX3ZhbHVlX2xpc3QKIAkJCQlqc29uX3ZhbHVlX2V4cHJfbGlzdAogCQkJCWpzb25fYXJyYXlf YWdncmVnYXRlX29yZGVyX2J5X2NsYXVzZV9vcHQKKwkJCQlqc29uX2FyZ3VtZW50cwogJXR5cGUg PGl2YWw+CWpzb25fZW5jb2RpbmdfY2xhdXNlX29wdAogCQkJCWpzb25fcHJlZGljYXRlX3R5cGVf Y29uc3RyYWludAorCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgogJXR5cGUgPGJvb2xlYW4+CWpz b25fa2V5X3VuaXF1ZW5lc3NfY29uc3RyYWludF9vcHQKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1 Y3Rvcl9udWxsX2NsYXVzZV9vcHQKIAkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xh dXNlX29wdAorJXR5cGUgPGpzYmVoYXZpb3I+CWpzb25fdmFsdWVfYmVoYXZpb3IKKwkJCQkJanNv bl9xdWVyeV9iZWhhdmlvcgorCQkJCQlqc29uX2V4aXN0c19iZWhhdmlvcgorJXR5cGUgPGpzX3F1 b3Rlcz4JanNvbl9xdW90ZXNfY2xhdXNlX29wdAogCiAKIC8qCkBAIC02OTUsNyArNzA1LDcgQEAg c3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3Qg KmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlDQUNIRSBDQUxMIENBTExFRCBDQVNDQURFIENBU0NB REVEIENBU0UgQ0FTVCBDQVRBTE9HX1AgQ0hBSU4gQ0hBUl9QCiAJQ0hBUkFDVEVSIENIQVJBQ1RF UklTVElDUyBDSEVDSyBDSEVDS1BPSU5UIENMQVNTIENMT1NFCiAJQ0xVU1RFUiBDT0FMRVNDRSBD T0xMQVRFIENPTExBVElPTiBDT0xVTU4gQ09MVU1OUyBDT01NRU5UIENPTU1FTlRTIENPTU1JVAot CUNPTU1JVFRFRCBDT01QUkVTU0lPTiBDT05DVVJSRU5UTFkgQ09ORklHVVJBVElPTiBDT05GTElD VAorCUNPTU1JVFRFRCBDT01QUkVTU0lPTiBDT05DVVJSRU5UTFkgQ09ORElUSU9OQUwgQ09ORklH VVJBVElPTiBDT05GTElDVAogCUNPTk5FQ1RJT04gQ09OU1RSQUlOVCBDT05TVFJBSU5UUyBDT05U RU5UX1AgQ09OVElOVUVfUCBDT05WRVJTSU9OX1AgQ09QWQogCUNPU1QgQ1JFQVRFIENST1NTIENT ViBDVUJFIENVUlJFTlRfUAogCUNVUlJFTlRfQ0FUQUxPRyBDVVJSRU5UX0RBVEUgQ1VSUkVOVF9S T0xFIENVUlJFTlRfU0NIRU1BCkBAIC03MDYsOCArNzE2LDggQEAgc3RhdGljIE5vZGUgKm1ha2VS ZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKIAlERVRBQ0ggRElDVElPTkFSWSBESVNBQkxFX1AgRElTQ0FSRCBESVNUSU5DVCBETyBE T0NVTUVOVF9QIERPTUFJTl9QCiAJRE9VQkxFX1AgRFJPUAogCi0JRUFDSCBFTFNFIEVOQUJMRV9Q IEVOQ09ESU5HIEVOQ1JZUFRFRCBFTkRfUCBFTlVNX1AgRVNDQVBFIEVWRU5UIEVYQ0VQVAotCUVY Q0xVREUgRVhDTFVESU5HIEVYQ0xVU0lWRSBFWEVDVVRFIEVYSVNUUyBFWFBMQUlOIEVYUFJFU1NJ T04KKwlFQUNIIEVMU0UgRU1QVFlfUCBFTkFCTEVfUCBFTkNPRElORyBFTkNSWVBURUQgRU5EX1Ag RU5VTV9QIEVSUk9SX1AgRVNDQVBFCisJRVZFTlQgRVhDRVBUIEVYQ0xVREUgRVhDTFVESU5HIEVY Q0xVU0lWRSBFWEVDVVRFIEVYSVNUUyBFWFBMQUlOIEVYUFJFU1NJT04KIAlFWFRFTlNJT04gRVhU RVJOQUwgRVhUUkFDVAogCiAJRkFMU0VfUCBGQU1JTFkgRkVUQ0ggRklMVEVSIEZJTkFMSVpFIEZJ UlNUX1AgRkxPQVRfUCBGT0xMT1dJTkcgRk9SCkBAIC03MjIsMTAgKzczMiwxMCBAQCBzdGF0aWMg Tm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogCUlOTkVSX1AgSU5PVVQgSU5QVVRfUCBJTlNFTlNJVElWRSBJTlNF UlQgSU5TVEVBRCBJTlRfUCBJTlRFR0VSCiAJSU5URVJTRUNUIElOVEVSVkFMIElOVE8gSU5WT0tF UiBJUyBJU05VTEwgSVNPTEFUSU9OCiAKLQlKT0lOIEpTT04gSlNPTl9BUlJBWSBKU09OX0FSUkFZ QUdHIEpTT05fT0JKRUNUIEpTT05fT0JKRUNUQUdHCi0JSlNPTl9TQ0FMQVIgSlNPTl9TRVJJQUxJ WkUKKwlKT0lOIEpTT04gSlNPTl9BUlJBWSBKU09OX0FSUkFZQUdHIEpTT05fRVhJU1RTIEpTT05f T0JKRUNUIEpTT05fT0JKRUNUQUdHCisJSlNPTl9RVUVSWSBKU09OX1NDQUxBUiBKU09OX1NFUklB TElaRSBKU09OX1ZBTFVFCiAKLQlLRVkgS0VZUworCUtFWSBLRVlTIEtFRVAKIAogCUxBQkVMIExB TkdVQUdFIExBUkdFX1AgTEFTVF9QIExBVEVSQUxfUAogCUxFQURJTkcgTEVBS1BST09GIExFQVNU IExFRlQgTEVWRUwgTElLRSBMSU1JVCBMSVNURU4gTE9BRCBMT0NBTApAQCAtNzM5LDcgKzc0OSw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJTk9UIE5PVEhJTkcgTk9USUZZIE5PVE5VTEwg Tk9XQUlUIE5VTExfUCBOVUxMSUYKIAlOVUxMU19QIE5VTUVSSUMKIAotCU9CSkVDVF9QIE9GIE9G RiBPRkZTRVQgT0lEUyBPTEQgT04gT05MWSBPUEVSQVRPUiBPUFRJT04gT1BUSU9OUyBPUgorCU9C SkVDVF9QIE9GIE9GRiBPRkZTRVQgT0lEUyBPTEQgT01JVCBPTiBPTkxZIE9QRVJBVE9SIE9QVElP TiBPUFRJT05TIE9SCiAJT1JERVIgT1JESU5BTElUWSBPVEhFUlMgT1VUX1AgT1VURVJfUAogCU9W RVIgT1ZFUkxBUFMgT1ZFUkxBWSBPVkVSUklESU5HIE9XTkVEIE9XTkVSCiAKQEAgLTc0OCw3ICs3 NTgsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVBPU0lUSU9OIFBSRUNFRElORyBQUkVD SVNJT04gUFJFU0VSVkUgUFJFUEFSRSBQUkVQQVJFRCBQUklNQVJZCiAJUFJJT1IgUFJJVklMRUdF UyBQUk9DRURVUkFMIFBST0NFRFVSRSBQUk9DRURVUkVTIFBST0dSQU0gUFVCTElDQVRJT04KIAot CVFVT1RFCisJUVVPVEUgUVVPVEVTCiAKIAlSQU5HRSBSRUFEIFJFQUwgUkVBU1NJR04gUkVDSEVD SyBSRUNVUlNJVkUgUkVGX1AgUkVGRVJFTkNFUyBSRUZFUkVOQ0lORwogCVJFRlJFU0ggUkVJTkRF WCBSRUxBVElWRV9QIFJFTEVBU0UgUkVOQU1FIFJFUEVBVEFCTEUgUkVQTEFDRSBSRVBMSUNBCkBA IC03NTksNyArNzY5LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNo YXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlTRVFVRU5DRSBTRVFV RU5DRVMKIAlTRVJJQUxJWkFCTEUgU0VSVkVSIFNFU1NJT04gU0VTU0lPTl9VU0VSIFNFVCBTRVRT IFNFVE9GIFNIQVJFIFNIT1cKIAlTSU1JTEFSIFNJTVBMRSBTS0lQIFNNQUxMSU5UIFNOQVBTSE9U IFNPTUUgU1FMX1AgU1RBQkxFIFNUQU5EQUxPTkVfUAotCVNUQVJUIFNUQVRFTUVOVCBTVEFUSVNU SUNTIFNURElOIFNURE9VVCBTVE9SQUdFIFNUT1JFRCBTVFJJQ1RfUCBTVFJJUF9QCisJU1RBUlQg U1RBVEVNRU5UIFNUQVRJU1RJQ1MgU1RESU4gU1RET1VUIFNUT1JBR0UgU1RPUkVEIFNUUklDVF9Q IFNUUklOR19QIFNUUklQX1AKIAlTVUJTQ1JJUFRJT04gU1VCU1RSSU5HIFNVUFBPUlQgU1lNTUVU UklDIFNZU0lEIFNZU1RFTV9QIFNZU1RFTV9VU0VSCiAKIAlUQUJMRSBUQUJMRVMgVEFCTEVTQU1Q TEUgVEFCTEVTUEFDRSBURU1QIFRFTVBMQVRFIFRFTVBPUkFSWSBURVhUX1AgVEhFTgpAQCAtNzY3 LDcgKzc3Nyw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJVFJFQVQgVFJJR0dFUiBUUklN IFRSVUVfUAogCVRSVU5DQVRFIFRSVVNURUQgVFlQRV9QIFRZUEVTX1AKIAotCVVFU0NBUEUgVU5C T1VOREVEIFVOQ09NTUlUVEVEIFVORU5DUllQVEVEIFVOSU9OIFVOSVFVRSBVTktOT1dOCisJVUVT Q0FQRSBVTkJPVU5ERUQgVU5DT05ESVRJT05BTCBVTkNPTU1JVFRFRCBVTkVOQ1JZUFRFRCBVTklP TiBVTklRVUUgVU5LTk9XTgogCVVOTElTVEVOIFVOTE9HR0VEIFVOVElMIFVQREFURSBVU0VSIFVT SU5HCiAKIAlWQUNVVU0gVkFMSUQgVkFMSURBVEUgVkFMSURBVE9SIFZBTFVFX1AgVkFMVUVTIFZB UkNIQVIgVkFSSUFESUMgVkFSWUlORwpAQCAtMTU3MTEsNiArMTU3MjEsMTkyIEBAIGZ1bmNfZXhw cl9jb21tb25fc3ViZXhwcjoKIAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKIAkJCQkJJCQgPSAoTm9k ZSAqKSBuOwogCQkJCX0KKwkJCXwgSlNPTl9RVUVSWSAnKCcKKwkJCQlqc29uX2FwaV9jb21tb25f c3ludGF4CisJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAorCQkJCWpzb25fd3JhcHBlcl9i ZWhhdmlvcgorCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCScpJworCQkJCXsKKwkJCQkJ SnNvbkZ1bmNFeHByICpuID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKworCQkJCQluLT5vcCA9 IEpTT05fUVVFUllfT1A7CisJCQkJCW4tPmNvbW1vbiA9IChKc29uQ29tbW9uICopICQzOworCQkJ CQluLT5vdXRwdXQgPSAoSnNvbk91dHB1dCAqKSAkNDsKKwkJCQkJbi0+d3JhcHBlciA9ICQ1Owor CQkJCQlpZiAobi0+d3JhcHBlciAhPSBKU1dfTk9ORSAmJiAkNiAhPSBKU19RVU9URVNfVU5TUEVD KQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCQkJCQkgZXJybXNnKCJTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBu b3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQiKSwKKwkJCQkJCQkJIHBh cnNlcl9lcnJwb3NpdGlvbihANikpKTsKKwkJCQkJbi0+cXVvdGVzID0gJDY7CisJCQkJCW4tPmxv Y2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEpTT05fUVVF UlkgJygnCisJCQkJanNvbl9hcGlfY29tbW9uX3N5bnRheAorCQkJCWpzb25fcmV0dXJuaW5nX2Ns YXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29uX3F1b3Rlc19jbGF1 c2Vfb3B0CisJCQkJanNvbl9xdWVyeV9iZWhhdmlvciBPTiBFTVBUWV9QCisJCQknKScKKwkJCQl7 CisJCQkJCUpzb25GdW5jRXhwciAqbiA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisKKwkJCQkJ bi0+b3AgPSBKU09OX1FVRVJZX09QOworCQkJCQluLT5jb21tb24gPSAoSnNvbkNvbW1vbiAqKSAk MzsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDQ7CisJCQkJCW4tPndyYXBwZXIg PSAkNTsKKwkJCQkJaWYgKG4tPndyYXBwZXIgIT0gSlNXX05PTkUgJiYgJDYgIT0gSlNfUVVPVEVT X1VOU1BFQykKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkJIGVycm1zZygiU1FML0pTT04gUVVPVEVTIGJlaGF2aW9y IG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2VkIiksCisJCQkJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24oQDYpKSk7CisJCQkJCW4tPnF1b3RlcyA9ICQ2OworCQkJ CQluLT5vbl9lbXB0eSA9ICQ3OworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChO b2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX1FVRVJZICcoJworCQkJCWpzb25fYXBpX2NvbW1v bl9zeW50YXgKKwkJCQlqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0CisJCQkJanNvbl93cmFwcGVy X2JlaGF2aW9yCisJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fcXVlcnlfYmVo YXZpb3IgT04gRVJST1JfUAorCQkJJyknCisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBt YWtlTm9kZShKc29uRnVuY0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNPTl9RVUVSWV9PUDsKKwkJ CQkJbi0+Y29tbW9uID0gKEpzb25Db21tb24gKikgJDM7CisJCQkJCW4tPm91dHB1dCA9IChKc29u T3V0cHV0ICopICQ0OworCQkJCQluLT53cmFwcGVyID0gJDU7CisJCQkJCWlmIChuLT53cmFwcGVy ICE9IEpTV19OT05FICYmICQ2ICE9IEpTX1FVT1RFU19VTlNQRUMpCisJCQkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJCSBl cnJtc2coIlNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hl biBXSVRIIFdSQVBQRVIgaXMgdXNlZCIpLAorCQkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKEA2 KSkpOworCQkJCQluLT5xdW90ZXMgPSAkNjsKKwkJCQkJbi0+b25fZXJyb3IgPSAkNzsKKwkJCQkJ bi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwgSlNP Tl9RVUVSWSAnKCcKKwkJCQlqc29uX2FwaV9jb21tb25fc3ludGF4CisJCQkJanNvbl9yZXR1cm5p bmdfY2xhdXNlX29wdAorCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgorCQkJCWpzb25fcXVvdGVz X2NsYXVzZV9vcHQKKwkJCQlqc29uX3F1ZXJ5X2JlaGF2aW9yIE9OIEVNUFRZX1AKKwkJCQlqc29u X3F1ZXJ5X2JlaGF2aW9yIE9OIEVSUk9SX1AKKwkJCScpJworCQkJCXsKKwkJCQkJSnNvbkZ1bmNF eHByICpuID0gbWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKworCQkJCQluLT5vcCA9IEpTT05fUVVF UllfT1A7CisJCQkJCW4tPmNvbW1vbiA9IChKc29uQ29tbW9uICopICQzOworCQkJCQluLT5vdXRw dXQgPSAoSnNvbk91dHB1dCAqKSAkNDsKKwkJCQkJbi0+d3JhcHBlciA9ICQ1OworCQkJCQlpZiAo bi0+d3JhcHBlciAhPSBKU1dfTk9ORSAmJiAkNiAhPSBKU19RVU9URVNfVU5TUEVDKQorCQkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAor CQkJCQkJCQkgZXJybXNnKCJTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3Bl Y2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQiKSwKKwkJCQkJCQkJIHBhcnNlcl9lcnJw b3NpdGlvbihANikpKTsKKwkJCQkJbi0+cXVvdGVzID0gJDY7CisJCQkJCW4tPm9uX2VtcHR5ID0g JDc7CisJCQkJCW4tPm9uX2Vycm9yID0gJDEwOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJ CQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX0VYSVNUUyAnKCcKKwkJCQlqc29u X2FwaV9jb21tb25fc3ludGF4CisJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAorCQkJJykn CisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKnAgPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOwor CisJCQkJCXAtPm9wID0gSlNPTl9FWElTVFNfT1A7CisJCQkJCXAtPmNvbW1vbiA9IChKc29uQ29t bW9uICopICQzOworCQkJCQlwLT5vdXRwdXQgPSAoSnNvbk91dHB1dCAqKSAkNDsKKwkJCQkJcC0+ bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBwOworCQkJCX0KKwkJCXwgSlNPTl9F WElTVFMgJygnCisJCQkJanNvbl9hcGlfY29tbW9uX3N5bnRheAorCQkJCWpzb25fcmV0dXJuaW5n X2NsYXVzZV9vcHQKKwkJCQlqc29uX2V4aXN0c19iZWhhdmlvciBPTiBFUlJPUl9QCisJCQknKScK KwkJCQl7CisJCQkJCUpzb25GdW5jRXhwciAqcCA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisK KwkJCQkJcC0+b3AgPSBKU09OX0VYSVNUU19PUDsKKwkJCQkJcC0+Y29tbW9uID0gKEpzb25Db21t b24gKikgJDM7CisJCQkJCXAtPm91dHB1dCA9IChKc29uT3V0cHV0ICopICQ0OworCQkJCQlwLT5v bl9lcnJvciA9ICQ1OworCQkJCQlwLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICop IHA7CisJCQkJfQorCQkJfCBKU09OX1ZBTFVFICcoJworCQkJCWpzb25fYXBpX2NvbW1vbl9zeW50 YXgKKwkJCQlqc29uX3JldHVybmluZ19jbGF1c2Vfb3B0CisJCQknKScKKwkJCQl7CisJCQkJCUpz b25GdW5jRXhwciAqbiA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisKKwkJCQkJbi0+b3AgPSBK U09OX1ZBTFVFX09QOworCQkJCQluLT5jb21tb24gPSAoSnNvbkNvbW1vbiAqKSAkMzsKKwkJCQkJ bi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDQ7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJ CQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisKKwkJCXwgSlNPTl9WQUxVRSAnKCcKKwkJCQlq c29uX2FwaV9jb21tb25fc3ludGF4CisJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAorCQkJ CWpzb25fdmFsdWVfYmVoYXZpb3IgT04gRU1QVFlfUAorCQkJJyknCisJCQkJeworCQkJCQlKc29u RnVuY0V4cHIgKm4gPSBtYWtlTm9kZShKc29uRnVuY0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNP Tl9WQUxVRV9PUDsKKwkJCQkJbi0+Y29tbW9uID0gKEpzb25Db21tb24gKikgJDM7CisJCQkJCW4t Pm91dHB1dCA9IChKc29uT3V0cHV0ICopICQ0OworCQkJCQluLT5vbl9lbXB0eSA9ICQ1OworCQkJ CQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBK U09OX1ZBTFVFICcoJworCQkJCWpzb25fYXBpX2NvbW1vbl9zeW50YXgKKwkJCQlqc29uX3JldHVy bmluZ19jbGF1c2Vfb3B0CisJCQkJanNvbl92YWx1ZV9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkn KScKKwkJCQl7CisJCQkJCUpzb25GdW5jRXhwciAqbiA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7 CisKKwkJCQkJbi0+b3AgPSBKU09OX1ZBTFVFX09QOworCQkJCQluLT5jb21tb24gPSAoSnNvbkNv bW1vbiAqKSAkMzsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDQ7CisJCQkJCW4t Pm9uX2Vycm9yID0gJDU7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUg KikgbjsKKwkJCQl9CisKKwkJCXwgSlNPTl9WQUxVRSAnKCcKKwkJCQlqc29uX2FwaV9jb21tb25f c3ludGF4CisJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAorCQkJCWpzb25fdmFsdWVfYmVo YXZpb3IgT04gRU1QVFlfUAorCQkJCWpzb25fdmFsdWVfYmVoYXZpb3IgT04gRVJST1JfUAorCQkJ JyknCisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBtYWtlTm9kZShKc29uRnVuY0V4cHIp OworCisJCQkJCW4tPm9wID0gSlNPTl9WQUxVRV9PUDsKKwkJCQkJbi0+Y29tbW9uID0gKEpzb25D b21tb24gKikgJDM7CisJCQkJCW4tPm91dHB1dCA9IChKc29uT3V0cHV0ICopICQ0OworCQkJCQlu LT5vbl9lbXB0eSA9ICQ1OworCQkJCQluLT5vbl9lcnJvciA9ICQ4OworCQkJCQluLT5sb2NhdGlv biA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQogCQkJOwogCiAKQEAgLTE2NDM3 LDYgKzE2NjMzLDcyIEBAIG9wdF9hc3ltbWV0cmljOiBBU1lNTUVUUklDCiAJCTsKIAogLyogU1FM L0pTT04gc3VwcG9ydCAqLworanNvbl9hcGlfY29tbW9uX3N5bnRheDoKKwkJCWpzb25fdmFsdWVf ZXhwciAnLCcgYV9leHByIC8qIGkuZS4gYSBqc29uX3BhdGggKi8KKwkJCQl7CisJCQkJCUpzb25D b21tb24gKm4gPSBtYWtlTm9kZShKc29uQ29tbW9uKTsKKworCQkJCQluLT5leHByID0gKEpzb25W YWx1ZUV4cHIgKikgJDE7CisJCQkJCW4tPnBhdGhzcGVjID0gJDM7CisJCQkJCW4tPnBhdGhuYW1l ID0gTlVMTDsKKwkJCQkJbi0+cGFzc2luZyA9IE5VTEw7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7 CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IGpzb25fdmFsdWVfZXhwciAnLCcg YV9leHByIEFTIG5hbWUKKwkJCQl7CisJCQkJCUpzb25Db21tb24gKm4gPSBtYWtlTm9kZShKc29u Q29tbW9uKTsKKworCQkJCQluLT5leHByID0gKEpzb25WYWx1ZUV4cHIgKikgJDE7CisJCQkJCW4t PnBhdGhzcGVjID0gJDM7CisJCQkJCW4tPnBhdGhuYW1lID0gJDU7CisJCQkJCW4tPnBhc3Npbmcg PSBOVUxMOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJ CQkJfQorCisJCQl8IGpzb25fdmFsdWVfZXhwciAnLCcgYV9leHByIC8qIGkuZS4gYSBqc29uX3Bh dGggKi8KKwkJCQlQQVNTSU5HIGpzb25fYXJndW1lbnRzCisJCQkJeworCQkJCQlKc29uQ29tbW9u ICpuID0gbWFrZU5vZGUoSnNvbkNvbW1vbik7CisKKwkJCQkJbi0+ZXhwciA9IChKc29uVmFsdWVF eHByICopICQxOworCQkJCQluLT5wYXRoc3BlYyA9ICQzOworCQkJCQluLT5wYXRobmFtZSA9IE5V TEw7CisJCQkJCW4tPnBhc3NpbmcgPSAkNTsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJCXwganNvbl92YWx1ZV9leHByICcsJyBhX2V4cHIg QVMgbmFtZQorCQkJCVBBU1NJTkcganNvbl9hcmd1bWVudHMKKwkJCQl7CisJCQkJCUpzb25Db21t b24gKm4gPSBtYWtlTm9kZShKc29uQ29tbW9uKTsKKworCQkJCQluLT5leHByID0gKEpzb25WYWx1 ZUV4cHIgKikgJDE7CisJCQkJCW4tPnBhdGhzcGVjID0gJDM7CisJCQkJCW4tPnBhdGhuYW1lID0g JDU7CisJCQkJCW4tPnBhc3NpbmcgPSAkNzsKKwkJCQkJbi0+bG9jYXRpb24gPSBAMTsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJCX0KKwkJOworCitqc29uX2FyZ3VtZW50czoKKwkJCWpzb25f YXJndW1lbnQJCQkJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25fYXJndW1l bnRzICcsJyBqc29uX2FyZ3VtZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKwor anNvbl9hcmd1bWVudDoKKwkJCWpzb25fdmFsdWVfZXhwciBBUyBDb2xMYWJlbAorCQkJeworCQkJ CUpzb25Bcmd1bWVudCAqbiA9IG1ha2VOb2RlKEpzb25Bcmd1bWVudCk7CisKKwkJCQluLT52YWwg PSAoSnNvblZhbHVlRXhwciAqKSAkMTsKKwkJCQluLT5uYW1lID0gJDM7CisJCQkJJCQgPSAoTm9k ZSAqKSBuOworCQkJfQorCQk7CisKIGpzb25fdmFsdWVfZXhwcjoKIAkJCWFfZXhwciBqc29uX2Zv cm1hdF9jbGF1c2Vfb3B0CiAJCQl7CkBAIC0xNjQ2Miw2ICsxNjcyNCw1MCBAQCBqc29uX2VuY29k aW5nX2NsYXVzZV9vcHQ6CiAJCQl8IC8qIEVNUFRZICovCQkJCQl7ICQkID0gSlNfRU5DX0RFRkFV TFQ7IH0KIAkJOwogCitqc29uX3F1ZXJ5X2JlaGF2aW9yOgorCQkJRVJST1JfUAkJeyAkJCA9IG1h a2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9FUlJPUiwgTlVMTCwgQDEpOyB9CisJCQl8IE5V TExfUAkJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9OVUxMLCBOVUxMLCBA MSk7IH0KKwkJCXwgREVGQVVMVCBhX2V4cHIJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9C RUhBVklPUl9ERUZBVUxULCAkMiwgQDEpOyB9CisJCQl8IEVNUFRZX1AgQVJSQVkJeyAkJCA9IG1h a2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWSwgTlVMTCwgQDEpOyB9CisJ CQl8IEVNUFRZX1AgT0JKRUNUX1AJeyAkJCA9IG1ha2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklP Ul9FTVBUWV9PQkpFQ1QsIE5VTEwsIEAxKTsgfQorCQkJLyogbm9uLXN0YW5kYXJkLCBmb3IgT3Jh Y2xlIGNvbXBhdGliaWxpdHkgb25seSAqLworCQkJfCBFTVBUWV9QCQl7ICQkID0gbWFrZUpzb25C ZWhhdmlvcihKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZLCBOVUxMLCBAMSk7IH0KKwkJOworCitq c29uX2V4aXN0c19iZWhhdmlvcjoKKwkJCUVSUk9SX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9y KEpTT05fQkVIQVZJT1JfRVJST1IsIE5VTEwsIEAxKTsgfQorCQkJfCBUUlVFX1AJCXsgJCQgPSBt YWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfVFJVRSwgTlVMTCwgQDEpOyB9CisJCQl8IEZB TFNFX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfRkFMU0UsIE5VTEws IEAxKTsgfQorCQkJfCBVTktOT1dOCQl7ICQkID0gbWFrZUpzb25CZWhhdmlvcihKU09OX0JFSEFW SU9SX1VOS05PV04sIE5VTEwsIEAxKTsgfQorCQk7CisKK2pzb25fdmFsdWVfYmVoYXZpb3I6CisJ CQlOVUxMX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVIQVZJT1JfTlVMTCwgTlVM TCwgQDEpOyB9CisJCQl8IEVSUk9SX1AJCXsgJCQgPSBtYWtlSnNvbkJlaGF2aW9yKEpTT05fQkVI QVZJT1JfRVJST1IsIE5VTEwsIEAxKTsgfQorCQkJfCBERUZBVUxUIGFfZXhwcgl7ICQkID0gbWFr ZUpzb25CZWhhdmlvcihKU09OX0JFSEFWSU9SX0RFRkFVTFQsICQyLCBAMSk7IH0KKwkJOworCisv KiBBUlJBWSBpcyBhIG5vaXNlIHdvcmQgKi8KK2pzb25fd3JhcHBlcl9iZWhhdmlvcjoKKwkJCSAg V0lUSE9VVCBXUkFQUEVSCQkJCQl7ICQkID0gSlNXX05PTkU7IH0KKwkJCXwgV0lUSE9VVCBBUlJB WQlXUkFQUEVSCQkJCXsgJCQgPSBKU1dfTk9ORTsgfQorCQkJfCBXSVRIIFdSQVBQRVIJCQkJCQl7 ICQkID0gSlNXX1VOQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBBUlJBWSBXUkFQUEVSCQkJCXsg JCQgPSBKU1dfVU5DT05ESVRJT05BTDsgfQorCQkJfCBXSVRIIENPTkRJVElPTkFMIEFSUkFZIFdS QVBQRVIJeyAkJCA9IEpTV19DT05ESVRJT05BTDsgfQorCQkJfCBXSVRIIFVOQ09ORElUSU9OQUwg QVJSQVkgV1JBUFBFUgl7ICQkID0gSlNXX1VOQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBDT05E SVRJT05BTCBXUkFQUEVSCQkJeyAkJCA9IEpTV19DT05ESVRJT05BTDsgfQorCQkJfCBXSVRIIFVO Q09ORElUSU9OQUwgV1JBUFBFUgkJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8IC8q IGVtcHR5ICovCQkJCQkJeyAkJCA9IEpTV19OT05FOyB9CisJCTsKKworanNvbl9xdW90ZXNfY2xh dXNlX29wdDoKKwkJCUtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkdfUAkJeyAkJCA9IEpTX1FV T1RFU19LRUVQOyB9CisJCQl8IEtFRVAgUVVPVEVTCQkJCQkJeyAkJCA9IEpTX1FVT1RFU19LRUVQ OyB9CisJCQl8IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkdfUAl7ICQkID0gSlNfUVVPVEVT X09NSVQ7IH0KKwkJCXwgT01JVCBRVU9URVMJCQkJCQl7ICQkID0gSlNfUVVPVEVTX09NSVQ7IH0K KwkJCXwgLyogRU1QVFkgKi8JCQkJCQl7ICQkID0gSlNfUVVPVEVTX1VOU1BFQzsgfQorCQk7CisK IGpzb25fcmV0dXJuaW5nX2NsYXVzZV9vcHQ6CiAJCQlSRVRVUk5JTkcgVHlwZW5hbWUganNvbl9m b3JtYXRfY2xhdXNlX29wdAogCQkJCXsKQEAgLTE3MDY0LDYgKzE3MzcwLDcgQEAgdW5yZXNlcnZl ZF9rZXl3b3JkOgogCQkJfCBDT01NSVQKIAkJCXwgQ09NTUlUVEVECiAJCQl8IENPTVBSRVNTSU9O CisJCQl8IENPTkRJVElPTkFMCiAJCQl8IENPTkZJR1VSQVRJT04KIAkJCXwgQ09ORkxJQ1QKIAkJ CXwgQ09OTkVDVElPTgpAQCAtMTcxMDAsMTAgKzE3NDA3LDEyIEBAIHVucmVzZXJ2ZWRfa2V5d29y ZDoKIAkJCXwgRE9VQkxFX1AKIAkJCXwgRFJPUAogCQkJfCBFQUNICisJCQl8IEVNUFRZX1AKIAkJ CXwgRU5BQkxFX1AKIAkJCXwgRU5DT0RJTkcKIAkJCXwgRU5DUllQVEVECiAJCQl8IEVOVU1fUAor CQkJfCBFUlJPUl9QCiAJCQl8IEVTQ0FQRQogCQkJfCBFVkVOVAogCQkJfCBFWENMVURFCkBAIC0x NzE1Myw2ICsxNzQ2Miw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgSU5TVEVBRAogCQkJ fCBJTlZPS0VSCiAJCQl8IElTT0xBVElPTgorCQkJfCBLRUVQCiAJCQl8IEtFWQogCQkJfCBLRVlT CiAJCQl8IExBQkVMCkBAIC0xNzE5OSw2ICsxNzUwOSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoK IAkJCXwgT0ZGCiAJCQl8IE9JRFMKIAkJCXwgT0xECisJCQl8IE9NSVQKIAkJCXwgT1BFUkFUT1IK IAkJCXwgT1BUSU9OCiAJCQl8IE9QVElPTlMKQEAgLTE3MjI5LDYgKzE3NTQwLDcgQEAgdW5yZXNl cnZlZF9rZXl3b3JkOgogCQkJfCBQUk9HUkFNCiAJCQl8IFBVQkxJQ0FUSU9OCiAJCQl8IFFVT1RF CisJCQl8IFFVT1RFUwogCQkJfCBSQU5HRQogCQkJfCBSRUFECiAJCQl8IFJFQVNTSUdOCkBAIC0x NzI4OCw2ICsxNzYwMCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJ fCBTVE9SRUQKIAkJCXwgU1RSSUNUX1AKKwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJ fCBTVUJTQ1JJUFRJT04KIAkJCXwgU1VQUE9SVApAQCAtMTczMTAsNiArMTc2MjMsNyBAQCB1bnJl c2VydmVkX2tleXdvcmQ6CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09N TUlUVEVECisJCQl8IFVOQ09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5LTk9X TgogCQkJfCBVTkxJU1RFTgpAQCAtMTczNzAsMTAgKzE3Njg0LDEzIEBAIGNvbF9uYW1lX2tleXdv cmQ6CiAJCQl8IEpTT04KIAkJCXwgSlNPTl9BUlJBWQogCQkJfCBKU09OX0FSUkFZQUdHCisJCQl8 IEpTT05fRVhJU1RTCiAJCQl8IEpTT05fT0JKRUNUCiAJCQl8IEpTT05fT0JKRUNUQUdHCisJCQl8 IEpTT05fUVVFUlkKIAkJCXwgSlNPTl9TQ0FMQVIKIAkJCXwgSlNPTl9TRVJJQUxJWkUKKwkJCXwg SlNPTl9WQUxVRQogCQkJfCBMRUFTVAogCQkJfCBOQVRJT05BTAogCQkJfCBOQ0hBUgpAQCAtMTc2 MDYsNiArMTc5MjMsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IENPTU1JVFRFRAogCQkJ fCBDT01QUkVTU0lPTgogCQkJfCBDT05DVVJSRU5UTFkKKwkJCXwgQ09ORElUSU9OQUwKIAkJCXwg Q09ORklHVVJBVElPTgogCQkJfCBDT05GTElDVAogCQkJfCBDT05ORUNUSU9OCkBAIC0xNzY1OCwx MSArMTc5NzYsMTMgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBEUk9QCiAJCQl8IEVBQ0gK IAkJCXwgRUxTRQorCQkJfCBFTVBUWV9QCiAJCQl8IEVOQUJMRV9QCiAJCQl8IEVOQ09ESU5HCiAJ CQl8IEVOQ1JZUFRFRAogCQkJfCBFTkRfUAogCQkJfCBFTlVNX1AKKwkJCXwgRVJST1JfUAogCQkJ fCBFU0NBUEUKIAkJCXwgRVZFTlQKIAkJCXwgRVhDTFVERQpAQCAtMTc3MzIsMTAgKzE4MDUyLDE0 IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgSlNPTgogCQkJfCBKU09OX0FSUkFZCiAJCQl8 IEpTT05fQVJSQVlBR0cKKwkJCXwgSlNPTl9FWElTVFMKIAkJCXwgSlNPTl9PQkpFQ1QKIAkJCXwg SlNPTl9PQkpFQ1RBR0cKKwkJCXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBK U09OX1NFUklBTElaRQorCQkJfCBKU09OX1ZBTFVFCisJCQl8IEtFRVAKIAkJCXwgS0VZCiAJCQl8 IEtFWVMKIAkJCXwgTEFCRUwKQEAgLTE3Nzk2LDYgKzE4MTIwLDcgQEAgYmFyZV9sYWJlbF9rZXl3 b3JkOgogCQkJfCBPRkYKIAkJCXwgT0lEUwogCQkJfCBPTEQKKwkJCXwgT01JVAogCQkJfCBPTkxZ CiAJCQl8IE9QRVJBVE9SCiAJCQl8IE9QVElPTgpAQCAtMTc4MzMsNiArMTgxNTgsNyBAQCBiYXJl X2xhYmVsX2tleXdvcmQ6CiAJCQl8IFBST0dSQU0KIAkJCXwgUFVCTElDQVRJT04KIAkJCXwgUVVP VEUKKwkJCXwgUVVPVEVTCiAJCQl8IFJBTkdFCiAJCQl8IFJFQUQKIAkJCXwgUkVBTApAQCAtMTc5 MDEsNiArMTgyMjcsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IFNUT1JBR0UKIAkJCXwg U1RPUkVECiAJCQl8IFNUUklDVF9QCisJCQl8IFNUUklOR19QCiAJCQl8IFNUUklQX1AKIAkJCXwg U1VCU0NSSVBUSU9OCiAJCQl8IFNVQlNUUklORwpAQCAtMTc5MzUsNiArMTgyNjIsNyBAQCBiYXJl X2xhYmVsX2tleXdvcmQ6CiAJCQl8IFVFU0NBUEUKIAkJCXwgVU5CT1VOREVECiAJCQl8IFVOQ09N TUlUVEVECisJCQl8IFVOQ09ORElUSU9OQUwKIAkJCXwgVU5FTkNSWVBURUQKIAkJCXwgVU5JUVVF CiAJCQl8IFVOS05PV04KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDY0YzU4MmMzNDQuLjIx OTc5ZmQ2NGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysr IGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtOTAsNiArOTAsMjMgQEAgc3Rh dGljIE5vZGUgKnRyYW5zZm9ybUpzb25QYXJzZUV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u UGFyc2VFeHByICpleHByKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uU2NhbGFyRXhwcihQ YXJzZVN0YXRlICpwc3RhdGUsIEpzb25TY2FsYXJFeHByICpleHByKTsKIHN0YXRpYyBOb2RlICp0 cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJ SnNvblNlcmlhbGl6ZUV4cHIgKmV4cHIpOworc3RhdGljIE5vZGUgKnRyYW5zZm9ybUpzb25GdW5j RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqcCk7CitzdGF0aWMgSnNvbkV4 cHIgKnRyYW5zZm9ybUpzb25FeHByQ29tbW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNF eHByICpmdW5jLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1lKTsKK3N0YXRp YyB2b2lkIHRyYW5zZm9ybUpzb25QYXNzaW5nQXJncyhQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0 IGNoYXIgKmNvbnN0cnVjdE5hbWUsCisJCQkJCQkJCQkgSnNvbkZvcm1hdFR5cGUgZm9ybWF0LCBM aXN0ICphcmdzLAorCQkJCQkJCQkJIExpc3QgKipwYXNzaW5nX3ZhbHVlcywgTGlzdCAqKnBhc3Np bmdfbmFtZXMpOworc3RhdGljIEpzb25Db2VyY2lvbiAqY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0 KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwcik7CitzdGF0aWMgT2lkCUpzb25G dW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKEpzb25FeHByICpqc2V4cHIpOworc3RhdGljIEpzb25D b2VyY2lvbiAqY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLAor CQkJCQkJCQkJY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKK3N0YXRpYyBMaXN0ICpJ bml0SnNvbkl0ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBKc29uUmV0dXJu aW5nICpyZXR1cm5pbmcsCisJCQkJCQkJCSAgIE9pZCBjb250ZXh0SXRlbVR5cGVJZCk7CitzdGF0 aWMgSnNvbkJlaGF2aW9yICp0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRl LCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkJCQkJCSAgIEpzb25CZWhhdmlvclR5cGUg ZGVmYXVsdF9iZWhhdmlvciwKKwkJCQkJCQkJCQkgICBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcp Oworc3RhdGljIEpzb25CZWhhdmlvciAqY29lcmNlSnNvbkJlaGF2aW9yRGVmYXVsdEV4cHIoUGFy c2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkJCQkJCQkJICAg SnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKIHN0YXRpYyBOb2RlICptYWtlX3Jvd19jb21wYXJp c29uX29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLAogCQkJCQkJCQkJTGlzdCAq bGFyZ3MsIExpc3QgKnJhcmdzLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2Vfcm93 X2Rpc3RpbmN0X29wKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqb3BuYW1lLApAQCAtMzUzLDYg KzM3MCwxMCBAQCB0cmFuc2Zvcm1FeHByUmVjdXJzZShQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUg KmV4cHIpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihwc3RhdGUsIChK c29uU2VyaWFsaXplRXhwciAqKSBleHByKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9Kc29uRnVu Y0V4cHI6CisJCQlyZXN1bHQgPSB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIocHN0YXRlLCAoSnNvbkZ1 bmNFeHByICopIGV4cHIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCS8qIHNob3VsZCBu b3QgcmVhY2ggaGVyZSAqLwogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6 ICVkIiwgKGludCkgbm9kZVRhZyhleHByKSk7CkBAIC0zMjI5LDcgKzMyNTAsNyBAQCBtYWtlSnNv bkJ5dGVhVG9UZXh0Q29udmVyc2lvbihOb2RlICpleHByLCBKc29uRm9ybWF0ICpmb3JtYXQsIGlu dCBsb2NhdGlvbikKIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIoUGFyc2VT dGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFyICpjb25zdHJ1Y3ROYW1lLAogCQkJCQkgICBKc29uVmFs dWVFeHByICp2ZSwgSnNvbkZvcm1hdFR5cGUgZGVmYXVsdF9mb3JtYXQsCi0JCQkJCSAgIE9pZCB0 YXJnZXR0eXBlKQorCQkJCQkgICBPaWQgdGFyZ2V0dHlwZSwgYm9vbCBpc2FyZykKIHsKIAlOb2Rl CSAgICpleHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSB2ZS0+cmF3 X2V4cHIpOwogCU5vZGUJICAgKnJhd2V4cHI7CkBAIC0zMjYxLDYgKzMyODIsMzUgQEAgdHJhbnNm b3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVj dE5hbWUsCiAJCWVsc2UKIAkJCWZvcm1hdCA9IHZlLT5mb3JtYXQtPmZvcm1hdF90eXBlOwogCX0K KwllbHNlIGlmIChpc2FyZykKKwl7CisJCS8qIFBhc3MgU1FML0pTT04gaXRlbSB0eXBlcyBkaXJl Y3RseSB3aXRob3V0IGNvbnZlcnNpb24gdG8ganNvbltiXS4gKi8KKwkJc3dpdGNoIChleHBydHlw ZSkKKwkJeworCQkJY2FzZSBURVhUT0lEOgorCQkJY2FzZSBOVU1FUklDT0lEOgorCQkJY2FzZSBC T09MT0lEOgorCQkJY2FzZSBJTlQyT0lEOgorCQkJY2FzZSBJTlQ0T0lEOgorCQkJY2FzZSBJTlQ4 T0lEOgorCQkJY2FzZSBGTE9BVDRPSUQ6CisJCQljYXNlIEZMT0FUOE9JRDoKKwkJCWNhc2UgREFU RU9JRDoKKwkJCWNhc2UgVElNRU9JRDoKKwkJCWNhc2UgVElNRVRaT0lEOgorCQkJY2FzZSBUSU1F U1RBTVBPSUQ6CisJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCXJldHVybiBleHByOworCisJ CQlkZWZhdWx0OgorCQkJCWlmICh0eXBjYXRlZ29yeSA9PSBUWVBDQVRFR09SWV9TVFJJTkcpCisJ CQkJCXJldHVybiBleHByOworCQkJCS8qIGVsc2UgY29udmVydCBhcmd1bWVudCB0byBqc29uW2Jd IHR5cGUgKi8KKwkJCQlicmVhazsKKwkJfQorCisJCWZvcm1hdCA9IGRlZmF1bHRfZm9ybWF0Owor CX0KIAllbHNlIGlmIChleHBydHlwZSA9PSBKU09OT0lEIHx8IGV4cHJ0eXBlID09IEpTT05CT0lE KQogCQlmb3JtYXQgPSBKU19GT1JNQVRfREVGQVVMVDsgLyogZG8gbm90IGZvcm1hdCBqc29uW2Jd IHR5cGVzICovCiAJZWxzZQpAQCAtMzI3Miw3ICszMzIyLDggQEAgdHJhbnNmb3JtSnNvblZhbHVl RXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUsCiAJCU5v ZGUJICAgKmNvZXJjZWQ7CiAJCWJvb2wJCW9ubHlfYWxsb3dfY2FzdCA9IE9pZElzVmFsaWQodGFy Z2V0dHlwZSk7CiAKLQkJaWYgKCFvbmx5X2FsbG93X2Nhc3QgJiYKKwkJaWYgKCFpc2FyZyAmJgor CQkJIW9ubHlfYWxsb3dfY2FzdCAmJgogCQkJZXhwcnR5cGUgIT0gQllURUFPSUQgJiYgdHlwY2F0 ZWdvcnkgIT0gVFlQQ0FURUdPUllfU1RSSU5HKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJZXJy Y29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKQEAgLTM0MjUsNiArMzQ3NiwxMSBAQCB0 cmFuc2Zvcm1Kc29uT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNvbk91dHB1dCAq b3V0cHV0LAogCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJ CWVycm1zZygicmV0dXJuaW5nIFNFVE9GIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pT T04gZnVuY3Rpb25zIikpOwogCisJaWYgKGdldF90eXB0eXBlKHJldC0+dHlwaWQpID09IFRZUFRZ UEVfUFNFVURPKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAorCQkJCWVycm1zZygicmV0dXJuaW5nIHBzZXVkby10eXBlcyBpcyBu b3Qgc3VwcG9ydGVkIGluIFNRTC9KU09OIGZ1bmN0aW9ucyIpKTsKKwogCWlmIChyZXQtPmZvcm1h dC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0RFRkFVTFQpCiAJCS8qIGFzc2lnbiBKU09OQiBm b3JtYXQgd2hlbiByZXR1cm5pbmcganNvbmIsIG9yIEpTT04gZm9ybWF0IG90aGVyd2lzZSAqLwog CQlyZXQtPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPQpAQCAtMzYyMSw3ICszNjc3LDcgQEAgdHJhbnNm b3JtSnNvbk9iamVjdENvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbk9iamVjdENv bnN0cnVjdG9yICpjdG9yKQogCQkJTm9kZQkgICAqdmFsID0gdHJhbnNmb3JtSnNvblZhbHVlRXhw cihwc3RhdGUsICJKU09OX09CSkVDVCgpIiwKIAkJCQkJCQkJCQkJCQkga3YtPnZhbHVlLAogCQkJ CQkJCQkJCQkJCSBKU19GT1JNQVRfREVGQVVMVCwKLQkJCQkJCQkJCQkJCQkgSW52YWxpZE9pZCk7 CisJCQkJCQkJCQkJCQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAogCQkJYXJncyA9IGxhcHBlbmQo YXJncywga2V5KTsKIAkJCWFyZ3MgPSBsYXBwZW5kKGFyZ3MsIHZhbCk7CkBAIC0zODA4LDcgKzM4 NjQsNyBAQCB0cmFuc2Zvcm1Kc29uT2JqZWN0QWdnKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbk9i amVjdEFnZyAqYWdnKQogCXZhbCA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNP Tl9PQkpFQ1RBR0coKSIsCiAJCQkJCQkJCSBhZ2ctPmFyZy0+dmFsdWUsCiAJCQkJCQkJCSBKU19G T1JNQVRfREVGQVVMVCwKLQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkgSW52YWxpZE9p ZCwgZmFsc2UpOwogCWFyZ3MgPSBsaXN0X21ha2UyKGtleSwgdmFsKTsKIAogCXJldHVybmluZyA9 IHRyYW5zZm9ybUpzb25Db25zdHJ1Y3Rvck91dHB1dChwc3RhdGUsIGFnZy0+Y29uc3RydWN0b3It Pm91dHB1dCwKQEAgLTM4NjQsOSArMzkyMCw4IEBAIHRyYW5zZm9ybUpzb25BcnJheUFnZyhQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUFnZyAqYWdnKQogCU9pZAkJCWFnZ2Zub2lkOwogCU9p ZAkJCWFnZ3R5cGU7CiAKLQlhcmcgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgIkpT T05fQVJSQVlBR0coKSIsCi0JCQkJCQkJCSBhZ2ctPmFyZywKLQkJCQkJCQkJIEpTX0ZPUk1BVF9E RUZBVUxULCBJbnZhbGlkT2lkKTsKKwlhcmcgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0 ZSwgIkpTT05fQVJSQVlBR0coKSIsIGFnZy0+YXJnLAorCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFV TFQsIEludmFsaWRPaWQsIGZhbHNlKTsKIAogCXJldHVybmluZyA9IHRyYW5zZm9ybUpzb25Db25z dHJ1Y3Rvck91dHB1dChwc3RhdGUsIGFnZy0+Y29uc3RydWN0b3ItPm91dHB1dCwKIAkJCQkJCQkJ CQkJICAgbGlzdF9tYWtlMShhcmcpKTsKQEAgLTM5MTMsOSArMzk2OCw4IEBAIHRyYW5zZm9ybUpz b25BcnJheUNvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkFycmF5Q29uc3RydWN0 b3IgKmN0b3IpCiAJCXsKIAkJCUpzb25WYWx1ZUV4cHIgKmpzdmFsID0gY2FzdE5vZGUoSnNvblZh bHVlRXhwciwgbGZpcnN0KGxjKSk7CiAJCQlOb2RlCSAgICp2YWwgPSB0cmFuc2Zvcm1Kc29uVmFs dWVFeHByKHBzdGF0ZSwgIkpTT05fQVJSQVkoKSIsCi0JCQkJCQkJCQkJCQkJIGpzdmFsLAotCQkJ CQkJCQkJCQkJCSBKU19GT1JNQVRfREVGQVVMVCwKLQkJCQkJCQkJCQkJCQkgSW52YWxpZE9pZCk7 CisJCQkJCQkJCQkJCQkJIGpzdmFsLCBKU19GT1JNQVRfREVGQVVMVCwKKwkJCQkJCQkJCQkJCQkg SW52YWxpZE9pZCwgZmFsc2UpOwogCiAJCQlhcmdzID0gbGFwcGVuZChhcmdzLCB2YWwpOwogCQl9 CkBAIC00MDc0LDcgKzQxMjgsNyBAQCB0cmFuc2Zvcm1Kc29uUGFyc2VFeHByKFBhcnNlU3RhdGUg KnBzdGF0ZSwgSnNvblBhcnNlRXhwciAqanNleHByKQogCQkgKiBmdW5jdGlvbi1saWtlIENBU1Rz LgogCQkgKi8KIAkJYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJKU09OKCki LCBqc2V4cHItPmV4cHIsCi0JCQkJCQkJCQkgSlNfRk9STUFUX0pTT04sIHJldHVybmluZy0+dHlw aWQpOworCQkJCQkJCQkJIEpTX0ZPUk1BVF9KU09OLCByZXR1cm5pbmctPnR5cGlkLCBmYWxzZSk7 CiAJfQogCiAJcmV0dXJuIG1ha2VKc29uQ29uc3RydWN0b3JFeHByKHBzdGF0ZSwgSlNDVE9SX0pT T05fUEFSU0UsIGxpc3RfbWFrZTEoYXJnKSwgTlVMTCwKQEAgLTQxMTksNyArNDE3Myw3IEBAIHRy YW5zZm9ybUpzb25TZXJpYWxpemVFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvblNlcmlhbGl6 ZUV4cHIgKmV4cHIpCiAJTm9kZQkgICAqYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3Rh dGUsICJKU09OX1NFUklBTElaRSgpIiwKIAkJCQkJCQkJCQkJIGV4cHItPmV4cHIsCiAJCQkJCQkJ CQkJCSBKU19GT1JNQVRfSlNPTiwKLQkJCQkJCQkJCQkJIEludmFsaWRPaWQpOworCQkJCQkJCQkJ CQkgSW52YWxpZE9pZCwgZmFsc2UpOwogCiAJaWYgKGV4cHItPm91dHB1dCkKIAl7CkBAIC00MTUz LDMgKzQyMDcsNDY4IEBAIHRyYW5zZm9ybUpzb25TZXJpYWxpemVFeHByKFBhcnNlU3RhdGUgKnBz dGF0ZSwgSnNvblNlcmlhbGl6ZUV4cHIgKmV4cHIpCiAJcmV0dXJuIG1ha2VKc29uQ29uc3RydWN0 b3JFeHByKHBzdGF0ZSwgSlNDVE9SX0pTT05fU0VSSUFMSVpFLCBsaXN0X21ha2UxKGFyZyksCiAJ CQkJCQkJCSAgIE5VTEwsIHJldHVybmluZywgZmFsc2UsIGZhbHNlLCBleHByLT5sb2NhdGlvbik7 CiB9CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTl9WQUxVRSwgSlNPTl9RVUVSWSwgSlNPTl9FWElT VFMgZnVuY3Rpb25zIGludG8gYSBKc29uRXhwciBub2RlLgorICovCitzdGF0aWMgTm9kZSAqCit0 cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1 bmMpCit7CisJSnNvbkV4cHIgICAqanNleHByID0gTlVMTDsKKwljb25zdCBjaGFyICpmdW5jX25h bWUgPSBOVUxMOworCisJLyoKKwkgKiBEaXNhbGxvdyBGT1JNQVQgc3BlY2lmaWNhdGlvbiBpbiB0 aGUgUkVUVVJOSU5HIGNsYXVzZSBvZiBKU09OX0VYSVNUUygpCisJICogYW5kIEpTT05fVkFMVUUo KS4KKwkgKi8KKwlpZiAoZnVuYy0+b3V0cHV0ICYmCisJCShmdW5jLT5vcCA9PSBKU09OX1ZBTFVF X09QIHx8IGZ1bmMtPm9wID09IEpTT05fRVhJU1RTX09QKSkKKwl7CisJCUpzb25Gb3JtYXQgKmZv cm1hdCA9IGZ1bmMtPm91dHB1dC0+cmV0dXJuaW5nLT5mb3JtYXQ7CisKKwkJaWYgKGZvcm1hdC0+ Zm9ybWF0X3R5cGUgIT0gSlNfRk9STUFUX0RFRkFVTFQgfHwKKwkJCWZvcm1hdC0+ZW5jb2Rpbmcg IT0gSlNfRU5DX0RFRkFVTFQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IEZPUk1BVCBp biBSRVRVUk5JTkcgY2xhdXNlIG9mICVzIiwKKwkJCQkJCQlmdW5jLT5vcCA9PSBKU09OX1ZBTFVF X09QID8gIkpTT05fVkFMVUUoKSIgOgorCQkJCQkJCSJKU09OX0VYSVNUUygpIiksCisJCQkJCSBw YXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBmb3JtYXQtPmxvY2F0aW9uKSkpOworCX0KKworCXN3 aXRjaCAoZnVuYy0+b3ApCisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJZnVuY19uYW1l ID0gIkpTT05fRVhJU1RTIjsKKworCQkJanNleHByID0gdHJhbnNmb3JtSnNvbkV4cHJDb21tb24o cHN0YXRlLCBmdW5jLCBmdW5jX25hbWUpOworCisJCQlpZiAoIU9pZElzVmFsaWQoanNleHByLT5y ZXR1cm5pbmctPnR5cGlkKSkKKwkJCXsKKwkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQgPSBC T09MT0lEOworCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsKKwkJCX0KKwkJCWVs c2UgaWYgKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCAhPSBCT09MT0lEKQorCQkJeworCQkJCU5v ZGUJICAgKmNvZXJjaW9uX2V4cHI7CisJCQkJQ2FzZVRlc3RFeHByICpwbGFjZWhvbGRlciA9IG1h a2VOb2RlKENhc2VUZXN0RXhwcik7CisJCQkJaW50CQkJbG9jYXRpb24gPSBleHByTG9jYXRpb24o KE5vZGUgKikganNleHByKTsKKworCQkJCS8qCisJCQkJICogV2UgYWJ1c2UgQ2FzZVRlc3RFeHBy IGhlcmUgYXMgcGxhY2Vob2xkZXIgdG8gcGFzcyB0aGUKKwkJCQkgKiByZXN1bHQgb2YgZXZhbHVh dGluZyBKU09OX0VYSVNUUyB0byB0aGUgY29lcmNpb24gZnVuY3Rpb24uCisJCQkJICovCisJCQkJ cGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7CisJCQkJcGxhY2Vob2xkZXItPnR5cGVNb2Qg PSAtMTsKKwkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKworCQkJCWNv ZXJjaW9uX2V4cHIgPQorCQkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCAoTm9kZSAq KSBwbGFjZWhvbGRlciwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkJ ICBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULAor CQkJCQkJCQkJCSAgbG9jYXRpb24pOworCisJCQkJaWYgKGNvZXJjaW9uX2V4cHIgPT0gTlVMTCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VS Q0UpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJ CQkJZm9ybWF0X3R5cGVfYmUoQk9PTE9JRCksCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4 cHItPnJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0 aW9uKHBzdGF0ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKworCQkJCWlmIChjb2Vy Y2lvbl9leHByICE9IChOb2RlICopIHBsYWNlaG9sZGVyKQorCQkJCXsKKwkJCQkJanNleHByLT5y ZXN1bHRfY29lcmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOworCQkJCQlqc2V4cHItPnJl c3VsdF9jb2VyY2lvbi0+ZXhwciA9IGNvZXJjaW9uX2V4cHI7CisJCQkJfQorCQkJfQorCisJCQlq c2V4cHItPm9uX2Vycm9yID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25f ZXJyb3IsCisJCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfRkFMU0UsCisJCQkJCQkJCQkJCQkJ IGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9RVUVSWV9PUDoK KwkJCWZ1bmNfbmFtZSA9ICJKU09OX1FVRVJZIjsKKworCQkJanNleHByID0gdHJhbnNmb3JtSnNv bkV4cHJDb21tb24ocHN0YXRlLCBmdW5jLCBmdW5jX25hbWUpOworCQkJanNleHByLT53cmFwcGVy ID0gZnVuYy0+d3JhcHBlcjsKKwkJCWpzZXhwci0+b21pdF9xdW90ZXMgPSAoZnVuYy0+cXVvdGVz ID09IEpTX1FVT1RFU19PTUlUKTsKKworCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCkpCisJCQl7CisJCQkJSnNvblJldHVybmluZyAqcmV0ID0ganNleHByLT5yZXR1 cm5pbmc7CisKKwkJCQlyZXQtPnR5cGlkID0gSnNvbkZ1bmNFeHByRGVmYXVsdFJldHVyblR5cGUo anNleHByKTsKKwkJCQlyZXQtPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5yZXN1bHRf Y29lcmNpb24gPSBjb2VyY2VKc29uRnVuY0V4cHJPdXRwdXQocHN0YXRlLCBqc2V4cHIpOworCisJ CQlqc2V4cHItPm9uX2VtcHR5ID0gdHJhbnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+ b25fZW1wdHksCisJCQkJCQkJCQkJCQkJIEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJ CQkganNleHByLT5yZXR1cm5pbmcpOworCQkJanNleHByLT5vbl9lcnJvciA9IHRyYW5zZm9ybUpz b25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAorCQkJCQkJCQkJCQkJCSBKU09OX0JF SEFWSU9SX05VTEwsCisJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJCWJyZWFr OworCisJCWNhc2UgSlNPTl9WQUxVRV9PUDoKKwkJCWZ1bmNfbmFtZSA9ICJKU09OX1ZBTFVFIjsK KworCQkJanNleHByID0gdHJhbnNmb3JtSnNvbkV4cHJDb21tb24ocHN0YXRlLCBmdW5jLCBmdW5j X25hbWUpOworCisJCQlpZiAoIU9pZElzVmFsaWQoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKSkK KwkJCXsKKwkJCQkvKiBNYWtlIEpTT05fVkFMVUUgcmV0dXJuIHRleHQgYnkgZGVmYXVsdCAqLwor CQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IFRFWFRPSUQ7CisJCQkJanNleHByLT5yZXR1 cm5pbmctPnR5cG1vZCA9IC0xOworCQkJfQorCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBj b2VyY2VKc29uRnVuY0V4cHJPdXRwdXQocHN0YXRlLCBqc2V4cHIpOworCisJCQkvKgorCQkJICog SW5pdGlhbGl6ZSBKc29uQ29lcmNpb24gbm9kZXMgdG8gY29lcmNlIHRoZSBzY2FsYXIgdmFsdWUK KwkJCSAqIHJldHVybmVkIGJ5IEpzb25QYXRoVmFsdWUoKSB0byB0aGUgInJldHVybmluZyIgdHlw ZS4KKwkJCSAqLworCQkJanNleHByLT5pdGVtX2NvZXJjaW9ucyA9CisJCQkJSW5pdEpzb25JdGVt Q29lcmNpb25zKHBzdGF0ZSwganNleHByLT5yZXR1cm5pbmcsCisJCQkJCQkJCQkgIGV4cHJUeXBl KGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpKTsKKworCQkJanNleHByLT5vbl9lbXB0eSA9IHRyYW5z Zm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2VtcHR5LAorCQkJCQkJCQkJCQkJCSBK U09OX0JFSEFWSU9SX05VTEwsCisJCQkJCQkJCQkJCQkJIGpzZXhwci0+cmV0dXJuaW5nKTsKKwkJ CWpzZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBmdW5jLT5v bl9lcnJvciwKKwkJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9OVUxMLAorCQkJCQkJCQkJCQkJ CSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsKKwl9CisKKwlBc3NlcnQoanNleHByICE9 IE5VTEwgJiYganNleHByLT5mb3JtYXR0ZWRfZXhwciAhPSBOVUxMKTsKKwlpZiAoZXhwclR5cGUo anNleHByLT5mb3JtYXR0ZWRfZXhwcikgIT0gSlNPTkJPSUQpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2co IiVzKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZSIsIGZ1bmNfbmFt ZSksCisJCQkJIGVycmhpbnQoIlRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYiIpLAor CQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBmdW5jLT5sb2NhdGlvbikpKTsKKworCXJl dHVybiAoTm9kZSAqKSBqc2V4cHI7Cit9CisKKy8qCisgKiBDb21tb24gY29kZSBmb3IgSlNPTl9W QUxVRSwgSlNPTl9RVUVSWSwgSlNPTl9FWElTVFMgdHJhbnNmb3JtYXRpb24KKyAqIGludG8gYSBK c29uRXhwciBub2RlLgorICovCitzdGF0aWMgSnNvbkV4cHIgKgordHJhbnNmb3JtSnNvbkV4cHJD b21tb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCisJCQkJCQljb25z dCBjaGFyICpjb25zdHJ1Y3ROYW1lKQoreworCUpzb25FeHByICAgKmpzZXhwciA9IG1ha2VOb2Rl KEpzb25FeHByKTsKKwlOb2RlCSAgICpwYXRoc3BlYzsKKworCWpzZXhwci0+bG9jYXRpb24gPSBm dW5jLT5sb2NhdGlvbjsKKwlqc2V4cHItPm9wID0gZnVuYy0+b3A7CisJanNleHByLT5mb3JtYXR0 ZWRfZXhwciA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCBjb25zdHJ1Y3ROYW1lLAor CQkJCQkJCQkJCQkJCWZ1bmMtPmNvbW1vbi0+ZXhwciwKKwkJCQkJCQkJCQkJCQlKU19GT1JNQVRf REVGQVVMVCwKKwkJCQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBmYWxzZSk7CisKKwlqc2V4cHItPmZv cm1hdCA9IGZ1bmMtPmNvbW1vbi0+ZXhwci0+Zm9ybWF0OworCisJLyogQm90aCBzZXQgaW4gdGhl IGNhbGxlci4gKi8KKwlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbiA9IE5VTEw7CisJanNleHByLT5v bWl0X3F1b3RlcyA9IGZhbHNlOworCisJcGF0aHNwZWMgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShw c3RhdGUsIGZ1bmMtPmNvbW1vbi0+cGF0aHNwZWMpOworCisJanNleHByLT5wYXRoX3NwZWMgPQor CQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCBwYXRoc3BlYywgZXhwclR5cGUocGF0aHNw ZWMpLAorCQkJCQkJCSAgSlNPTlBBVEhPSUQsIC0xLAorCQkJCQkJCSAgQ09FUkNJT05fRVhQTElD SVQsIENPRVJDRV9JTVBMSUNJVF9DQVNULAorCQkJCQkJCSAgZXhwckxvY2F0aW9uKHBhdGhzcGVj KSk7CisJaWYgKCFqc2V4cHItPnBhdGhfc3BlYykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQkgZXJybXNnKCJKU09OIHBhdGgg ZXhwcmVzc2lvbiBtdXN0IGJlIG9mIHR5cGUgJXMsIG5vdCBvZiB0eXBlICVzIiwKKwkJCQkJCSJq c29ucGF0aCIsIGZvcm1hdF90eXBlX2JlKGV4cHJUeXBlKHBhdGhzcGVjKSkpLAorCQkJCSBwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24ocGF0aHNwZWMpKSkpOworCisJLyoK KwkgKiBUcmFuc2Zvcm0gYW5kIGNvZXJjZSB0byBqc29uW2JdIHBhc3NpbmcgYXJndW1lbnRzLCB3 aG9zZSBmb3JtYXQgaXMKKwkgKiBkZXRlcm1pbmVkIGJ5IGNvbnRleHQgaXRlbSB0eXBlLgorCSAq LworCXRyYW5zZm9ybUpzb25QYXNzaW5nQXJncyhwc3RhdGUsIGNvbnN0cnVjdE5hbWUsCisJCQkJ CQkJIGV4cHJUeXBlKGpzZXhwci0+Zm9ybWF0dGVkX2V4cHIpID09IEpTT05CT0lEID8KKwkJCQkJ CQkgSlNfRk9STUFUX0pTT05CIDogSlNfRk9STUFUX0pTT04sCisJCQkJCQkJIGZ1bmMtPmNvbW1v bi0+cGFzc2luZywKKwkJCQkJCQkgJmpzZXhwci0+cGFzc2luZ192YWx1ZXMsCisJCQkJCQkJICZq c2V4cHItPnBhc3NpbmdfbmFtZXMpOworCisJanNleHByLT5yZXR1cm5pbmcgPSB0cmFuc2Zvcm1K c29uT3V0cHV0KHBzdGF0ZSwgZnVuYy0+b3V0cHV0LCBmYWxzZSk7CisKKwkvKiBKU09OX1FVRVJZ IHN1cHBvcnQgc3BlY2lmeWluZyBGT1JNQVQgZXhwbGljaXRseS4gKi8KKwlpZiAoZnVuYy0+b3Ag IT0gSlNPTl9RVUVSWV9PUCkKKwl7CisJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3JtYXQtPmZvcm1h dF90eXBlID0gSlNfRk9STUFUX0RFRkFVTFQ7CisJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3JtYXQt PmVuY29kaW5nID0gSlNfRU5DX0RFRkFVTFQ7CisJfQorCisJcmV0dXJuIGpzZXhwcjsKK30KKwor LyoKKyAqIFRyYW5zZm9ybSBhIEpTT04gUEFTU0lORyBjbGF1c2UuCisgKi8KK3N0YXRpYyB2b2lk Cit0cmFuc2Zvcm1Kc29uUGFzc2luZ0FyZ3MoUGFyc2VTdGF0ZSAqcHN0YXRlLCBjb25zdCBjaGFy ICpjb25zdHJ1Y3ROYW1lLAorCQkJCQkJIEpzb25Gb3JtYXRUeXBlIGZvcm1hdCwgTGlzdCAqYXJn cywKKwkJCQkJCSBMaXN0ICoqcGFzc2luZ192YWx1ZXMsIExpc3QgKipwYXNzaW5nX25hbWVzKQor eworCUxpc3RDZWxsICAgKmxjOworCisJKnBhc3NpbmdfdmFsdWVzID0gTklMOworCSpwYXNzaW5n X25hbWVzID0gTklMOworCisJZm9yZWFjaChsYywgYXJncykKKwl7CisJCUpzb25Bcmd1bWVudCAq YXJnID0gY2FzdE5vZGUoSnNvbkFyZ3VtZW50LCBsZmlyc3QobGMpKTsKKwkJTm9kZQkgICAqZXhw ciA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCBjb25zdHJ1Y3ROYW1lLAorCQkJCQkJ CQkJCQkJICBhcmctPnZhbCwgZm9ybWF0LAorCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lkLCB0cnVl KTsKKworCQkqcGFzc2luZ192YWx1ZXMgPSBsYXBwZW5kKCpwYXNzaW5nX3ZhbHVlcywgZXhwcik7 CisJCSpwYXNzaW5nX25hbWVzID0gbGFwcGVuZCgqcGFzc2luZ19uYW1lcywgbWFrZVN0cmluZyhh cmctPm5hbWUpKTsKKwl9Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gdGhlIEpTT04gb3V0cHV0IGNs YXVzZSBvZiBKU09OX1ZBTFVFIGFuZCBKU09OX1FVRVJZLgorICovCitzdGF0aWMgSnNvbkNvZXJj aW9uICoKK2NvZXJjZUpzb25GdW5jRXhwck91dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25F eHByICpqc2V4cHIpCit7CisJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IE5VTEw7CisJSnNvblJl dHVybmluZyAqcmV0dXJuaW5nID0ganNleHByLT5yZXR1cm5pbmc7CisJTm9kZQkgICAqY29udGV4 dF9pdGVtID0ganNleHByLT5mb3JtYXR0ZWRfZXhwcjsKKwlpbnQJCQlkZWZhdWx0X3R5cG1vZDsK KwlPaWQJCQlkZWZhdWx0X3R5cGlkOworCisJQXNzZXJ0KHJldHVybmluZyk7CisKKwkvKgorCSAq IEZvcmNlZCBjb2VyY2lvbiB2aWEgSS9PIGZvciBub24tSlNPTiB0eXBlcywgZXhjZXB0IGZvciBK U09OX1FVRVJZKCkKKwkgKiB3aGljaCBtdXN0IGltcGxlbWVudCB0aGUgc3BlY2lmaWVkIEpzb25R dW90ZXMgYmVoYXZpb3IuCisJICovCisJaWYgKHJldHVybmluZy0+dHlwaWQgIT0gSlNPTk9JRCAm JiByZXR1cm5pbmctPnR5cGlkICE9IEpTT05CT0lEICYmCisJCShqc2V4cHItPm9wICE9IEpTT05f UVVFUllfT1AgfHwganNleHByLT5vbWl0X3F1b3RlcykpCisJeworCQljb2VyY2lvbiA9IG1ha2VO b2RlKEpzb25Db2VyY2lvbik7CisJCWNvZXJjaW9uLT5leHByID0gTlVMTDsKKwkJY29lcmNpb24t PnZpYV9pbyA9IHRydWU7CisKKwkJcmV0dXJuIGNvZXJjaW9uOworCX0KKwllbHNlIGlmIChqc2V4 cHItPm9wID09IEpTT05fUVVFUllfT1AgJiYganNleHByLT53cmFwcGVyICE9IEpTV19OT05FKQor CXsKKwkJY29lcmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOworCQljb2VyY2lvbi0+ZXhw ciA9IE5VTEw7CisJCWNvZXJjaW9uLT52aWFfcG9wdWxhdGUgPSB0cnVlOworCisJCXJldHVybiBj b2VyY2lvbjsKKwl9CisKKwlkZWZhdWx0X3R5cGlkID0gSnNvbkZ1bmNFeHByRGVmYXVsdFJldHVy blR5cGUoanNleHByKTsKKwlkZWZhdWx0X3R5cG1vZCA9IC0xOworCWlmIChyZXR1cm5pbmctPnR5 cGlkICE9IGRlZmF1bHRfdHlwaWQgfHwKKwkJcmV0dXJuaW5nLT50eXBtb2QgIT0gZGVmYXVsdF90 eXBtb2QpCisJeworCQkvKgorCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBwbGFj ZWhvbGRlciB0byBwYXNzIHRoZSByZXN1bHQgb2YKKwkJICogZXZhbHVhdGluZyB0aGUgSlNPTl9W QUxVRS9RVUVSWSBqc29ucGF0aCBleHByZXNzaW9uIHRvIHRoZSBjb2VyY2lvbgorCQkgKiBmdW5j dGlvbi4KKwkJICovCisJCUNhc2VUZXN0RXhwciAqcGxhY2Vob2xkZXIgPSBtYWtlTm9kZShDYXNl VGVzdEV4cHIpOworCisJCXBsYWNlaG9sZGVyLT50eXBlSWQgPSBleHByVHlwZShjb250ZXh0X2l0 ZW0pOworCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IGV4cHJUeXBtb2QoY29udGV4dF9pdGVtKTsK KwkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oY29udGV4dF9pdGVtKTsK KworCQlBc3NlcnQocGxhY2Vob2xkZXItPnR5cGVJZCA9PSBkZWZhdWx0X3R5cGlkKTsKKwkJQXNz ZXJ0KHBsYWNlaG9sZGVyLT50eXBlTW9kID09IGRlZmF1bHRfdHlwbW9kKTsKKworCQljb2VyY2lv biA9IGNvZXJjZUpzb25FeHByKHBzdGF0ZSwgKE5vZGUgKikgcGxhY2Vob2xkZXIsIHJldHVybmlu Zyk7CisJfQorCisJcmV0dXJuIGNvZXJjaW9uOworfQorCisvKiBSZXR1cm5zIHRoZSBkZWZhdWx0 IHR5cGUgZm9yIGEgZ2l2ZW4gSnNvbkV4cHIgZm9yIGEgZ2l2ZW4gSnNvbkZvcm1hdC4gKi8KK3N0 YXRpYyBPaWQKK0pzb25GdW5jRXhwckRlZmF1bHRSZXR1cm5UeXBlKEpzb25FeHByICpqc2V4cHIp Cit7CisJSnNvbkZvcm1hdCAqZm9ybWF0ID0ganNleHByLT5mb3JtYXQ7CisJTm9kZQkgICAqY29u dGV4dF9pdGVtID0ganNleHByLT5mb3JtYXR0ZWRfZXhwcjsKKworCUFzc2VydChmb3JtYXQpOwor CWlmIChmb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9KU09OQikKKwkJcmV0dXJuIEpT T05CT0lEOworCWVsc2UgaWYgKGZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNfRk9STUFUX0RFRkFV TFQgJiYKKwkJCSBleHByVHlwZShjb250ZXh0X2l0ZW0pID09IEpTT05CT0lEKQorCQlyZXR1cm4g SlNPTkJPSUQ7CisKKwlyZXR1cm4gSlNPTk9JRDsKK30KKworLyoKKyAqIFNldCB1cCBhIEpzb25D b2VyY2lvbiBub2RlIHRvOgorICoKKyAqIAktIGNvZXJjZSBleHByZXNzaW9uIHRvIHRoZSBvdXRw dXQgcmV0dXJuaW5nIHR5cGUsIG9yCisgKiAJLSBjb2VyY2UgdXNpbmcganNvbl9wb3B1bGF0ZV90 eXBlKCkgaWYgcmV0dXJuaW5nIHR5cGUgcmVxdWlyZXMgaXQsIG9yCisgKiAJLSBjb2VyY2Ugdmlh IEkvTy4KKyAqLworc3RhdGljIEpzb25Db2VyY2lvbiAqCitjb2VyY2VKc29uRXhwcihQYXJzZVN0 YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIsIGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZykK K3sKKwljaGFyCQl0eXB0eXBlOworCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSBtYWtlTm9kZShK c29uQ29lcmNpb24pOworCisJY29lcmNpb24tPmV4cHIgPSBjb2VyY2VKc29uRnVuY0V4cHIocHN0 YXRlLCBleHByLCByZXR1cm5pbmcsIGZhbHNlKTsKKwlpZiAoY29lcmNpb24tPmV4cHIpCisJewor CQlpZiAoY29lcmNpb24tPmV4cHIgPT0gZXhwcikKKwkJCWNvZXJjaW9uLT5leHByID0gTlVMTDsK KworCQlyZXR1cm4gY29lcmNpb247CisJfQorCisJdHlwdHlwZSA9IGdldF90eXB0eXBlKHJldHVy bmluZy0+dHlwaWQpOworCWlmIChyZXR1cm5pbmctPnR5cGlkID09IFJFQ09SRE9JRCB8fAorCQl0 eXB0eXBlID09IFRZUFRZUEVfQ09NUE9TSVRFIHx8CisJCXR5cHR5cGUgPT0gVFlQVFlQRV9ET01B SU4gfHwKKwkJdHlwZV9pc19hcnJheShyZXR1cm5pbmctPnR5cGlkKSkKKwkJY29lcmNpb24tPnZp YV9wb3B1bGF0ZSA9IHRydWU7CisJZWxzZQorCQljb2VyY2lvbi0+dmlhX2lvID0gdHJ1ZTsKKwor CXJldHVybiBjb2VyY2lvbjsKK30KKworLyoKKyAqIEluaXRpYWxpemUgSnNvbkNvZXJjaW9uIG5v ZGVzIGZvciBjb2VyY2luZyBhIGdpdmVuIEpTT04gaXRlbSB2YWx1ZSBwcm9kdWNlZAorICogYnkg SlNPTl9WQUxVRSB0byB0aGUgdGFyZ2V0ICJyZXR1cm5pbmciIHR5cGU7IGFsc28gc2VlCisgKiBF eGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oKS4KKyAqLworc3RhdGljIExpc3QgKgorSW5pdEpz b25JdGVtQ29lcmNpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgSnNvblJldHVybmluZyAq cmV0dXJuaW5nLAorCQkJCQkgIE9pZCBjb250ZXh0SXRlbVR5cGVJZCkKK3sKKwlMaXN0CSAgICpp dGVtX2NvZXJjaW9ucyA9IE5JTDsKKwlpbnQJCQlpOworCU9pZAkJCWl0ZW1fdHlwZW9pZHNbXSA9 CisJeworCQlVTktOT1dOT0lELAorCQlURVhUT0lELAorCQlOVU1FUklDT0lELAorCQlCT09MT0lE LAorCQlEQVRFT0lELAorCQlUSU1FT0lELAorCQlUSU1FVFpPSUQsCisJCVRJTUVTVEFNUE9JRCwK KwkJVElNRVNUQU1QVFpPSUQsCisJCWNvbnRleHRJdGVtVHlwZUlkLAorCQlJbnZhbGlkT2lkCisJ fTsKKworCWZvciAoaSA9IDA7IGl0ZW1fdHlwZW9pZHNbaV0gIT0gSW52YWxpZE9pZDsgaSsrKQor CXsKKwkJTm9kZQkgICAqZXhwcjsKKwkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbjsKKworCQlpZiAo aXRlbV90eXBlb2lkc1tpXSA9PSBVTktOT1dOT0lEKQorCQl7CisJCQlleHByID0gKE5vZGUgKikg bWFrZU51bGxDb25zdChVTktOT1dOT0lELCAtMSwgSW52YWxpZE9pZCk7CisJCX0KKwkJZWxzZQor CQl7CisJCQlDYXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHBy KTsKKworCQkJLyoKKwkJCSAqIFdlIGFidXNlIENhc2VUZXN0RXhwciBoZXJlIGFzIHBsYWNlaG9s ZGVyIHRvIHBhc3MgdGhlIHJlc3VsdCBvZgorCQkJICogSlNPTl9WQUxVRSBqc29ucGF0aCBleHBy ZXNzaW9uIHRvIHRoZSBjb2VyY2lvbiBmdW5jdGlvbi4KKwkJCSAqLworCQkJcGxhY2Vob2xkZXIt PnR5cGVJZCA9IGl0ZW1fdHlwZW9pZHNbaV07CisJCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IC0x OworCQkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisKKwkJCWV4cHIgPSAo Tm9kZSAqKSBwbGFjZWhvbGRlcjsKKwkJfQorCisJCWNvZXJjaW9uID0gY29lcmNlSnNvbkV4cHIo cHN0YXRlLCBleHByLCByZXR1cm5pbmcpOworCQlpdGVtX2NvZXJjaW9ucyA9IGxhcHBlbmQoaXRl bV9jb2VyY2lvbnMsIGNvZXJjaW9uKTsKKwl9CisKKwlyZXR1cm4gaXRlbV9jb2VyY2lvbnM7Cit9 CisKKy8qCisgKiBUcmFuc2Zvcm0gYSBKU09OIEJFSEFWSU9SIGNsYXVzZS4KKyAqLworc3RhdGlj IEpzb25CZWhhdmlvciAqCit0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRl LCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVs dF9iZWhhdmlvciwKKwkJCQkJICBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCit7CisJSnNvbkJl aGF2aW9yVHlwZSBiZWhhdmlvcl90eXBlID0gZGVmYXVsdF9iZWhhdmlvcjsKKwlOb2RlCSAgICpk ZWZhdWx0X2V4cHIgPSBOVUxMOworCisJaWYgKGJlaGF2aW9yKQorCXsKKwkJYmVoYXZpb3JfdHlw ZSA9IGJlaGF2aW9yLT5idHlwZTsKKwkJaWYgKGJlaGF2aW9yX3R5cGUgPT0gSlNPTl9CRUhBVklP Ul9ERUZBVUxUKQorCQkJZGVmYXVsdF9leHByID0gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRl LCBiZWhhdmlvci0+ZGVmYXVsdF9leHByKTsKKwl9CisKKwliZWhhdmlvciA9IG1ha2VKc29uQmVo YXZpb3IoYmVoYXZpb3JfdHlwZSwgZGVmYXVsdF9leHByLCAtMSk7CisKKwkvKgorCSAqIEFsc28g Y29lcmNlIHRoZSBERUZBVUxUIGV4cHJlc3Npb24sIGlmIGFueSwgdG8gbWF0Y2ggdGhlIHJldHVy bmluZworCSAqIHR5cGUuCisJICovCisJcmV0dXJuIGNvZXJjZUpzb25CZWhhdmlvckRlZmF1bHRF eHByKHBzdGF0ZSwgYmVoYXZpb3IsIHJldHVybmluZyk7Cit9CisKKy8qCisgKiBDb2VyY2UgZXhw cmVzc2lvbiBpbiBgREVGQVVMVCBleHByZXNzaW9uIE9OIEVSUk9SIC8gRU1QVFlgIHRvIHRoZSB0 YXJnZXQKKyAqIG91dHB1dCB0eXBlLgorICovCitzdGF0aWMgSnNvbkJlaGF2aW9yICoKK2NvZXJj ZUpzb25CZWhhdmlvckRlZmF1bHRFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkJlaGF2aW9y ICpiZWhhdmlvciwKKwkJCQkJCQkgIEpzb25SZXR1cm5pbmcgKnJldHVybmluZykKK3sKKwlPaWQJ CQlleHBydHlwZTsKKworCWlmIChiZWhhdmlvci0+ZGVmYXVsdF9leHByID09IE5VTEwpCisJCXJl dHVybiBiZWhhdmlvcjsKKworCWV4cHJ0eXBlID0gZXhwclR5cGUoYmVoYXZpb3ItPmRlZmF1bHRf ZXhwcik7CisKKwliZWhhdmlvci0+ZGVmYXVsdF9leHByID0KKwkJY29lcmNlX3RvX3RhcmdldF90 eXBlKHBzdGF0ZSwKKwkJCQkJCQkgIGJlaGF2aW9yLT5kZWZhdWx0X2V4cHIsCisJCQkJCQkJICBl eHBydHlwZSwKKwkJCQkJCQkgIHJldHVybmluZy0+dHlwaWQsCisJCQkJCQkJICByZXR1cm5pbmct PnR5cG1vZCwKKwkJCQkJCQkgIENPRVJDSU9OX0VYUExJQ0lULAorCQkJCQkJCSAgQ09FUkNFX0lN UExJQ0lUX0NBU1QsCisJCQkJCQkJICBleHByTG9jYXRpb24oKE5vZGUgKikgYmVoYXZpb3IpKTsK KworCWlmIChiZWhhdmlvci0+ZGVmYXVsdF9leHByID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09FUkNFKSwKKwkJCQkgZXJybXNnKCJjYW5u b3QgY2FzdCBERUZBVUxUIGV4cHJlc3Npb24gb2YgdHlwZSAlcyB0byAlcyIsCisJCQkJCQlmb3Jt YXRfdHlwZV9iZShleHBydHlwZSksCisJCQkJCQlmb3JtYXRfdHlwZV9iZShyZXR1cm5pbmctPnR5 cGlkKSksCisJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbigoTm9k ZSAqKSBiZWhhdmlvcikpKSk7CisKKwlyZXR1cm4gYmVoYXZpb3I7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdGFyZ2V0LmMKaW5kZXggM2JjNjJhYzNiYS4uOGY4MTYyNGY5NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV90YXJnZXQuYwpAQCAtMTk4OSw2ICsxOTg5LDIxIEBAIEZpZ3VyZUNvbG5hbWVJbnRlcm5h bChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCS8qIG1ha2UgSlNPTl9BUlJBWUFHRyBhY3Qg bGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KIAkJCSpuYW1lID0gImpzb25fYXJyYXlhZ2ciOwog CQkJcmV0dXJuIDI7CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQkvKiBtYWtlIFNRTC9KU09O IGZ1bmN0aW9ucyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KKwkJCXN3aXRjaCAoKChK c29uRnVuY0V4cHIgKikgbm9kZSktPm9wKQorCQkJeworCQkJCWNhc2UgSlNPTl9FWElTVFNfT1A6 CisJCQkJCSpuYW1lID0gImpzb25fZXhpc3RzIjsKKwkJCQkJcmV0dXJuIDI7CisJCQkJY2FzZSBK U09OX1FVRVJZX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3F1ZXJ5IjsKKwkJCQkJcmV0dXJuIDI7 CisJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3ZhbHVlIjsKKwkJ CQkJcmV0dXJuIDI7CisJCQl9CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IGUyN2VhOGVmOTcuLjE4OGI1NTk0ZTAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNDQyNiw2ICs0NDI2LDUwIEBAIHBh cnNlX2RhdGV0aW1lKHRleHQgKmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9pZCBjb2xsaWQsIGJvb2wg c3RyaWN0LAogCX0KIH0KIAorLyoKKyAqIFBhcnNlcyB0aGUgZGF0ZXRpbWUgZm9ybWF0IHN0cmlu ZyBpbiAnZm10X3N0cicgYW5kIHJldHVybnMgdHJ1ZSBpZiBpdAorICogY29udGFpbnMgYSB0aW1l em9uZSBzcGVjaWZpZXIsIGZhbHNlIGlmIG5vdC4KKyAqLworYm9vbAorZGF0ZXRpbWVfZm9ybWF0 X2hhc190eihjb25zdCBjaGFyICpmbXRfc3RyKQoreworCWJvb2wJCWluY2FjaGU7CisJaW50CQkJ Zm10X2xlbiA9IHN0cmxlbihmbXRfc3RyKTsKKwlpbnQJCQlyZXN1bHQ7CisJRm9ybWF0Tm9kZSAq Zm9ybWF0OworCisJaWYgKGZtdF9sZW4gPiBEQ0hfQ0FDSEVfU0laRSkKKwl7CisJCS8qCisJCSAq IEFsbG9jYXRlIG5ldyBtZW1vcnkgaWYgZm9ybWF0IHBpY3R1cmUgaXMgYmlnZ2VyIHRoYW4gc3Rh dGljIGNhY2hlCisJCSAqIGFuZCBkbyBub3QgdXNlIGNhY2hlIChjYWxsIHBhcnNlciBhbHdheXMp CisJCSAqLworCQlpbmNhY2hlID0gZmFsc2U7CisKKwkJZm9ybWF0ID0gKEZvcm1hdE5vZGUgKikg cGFsbG9jKChmbXRfbGVuICsgMSkgKiBzaXplb2YoRm9ybWF0Tm9kZSkpOworCisJCXBhcnNlX2Zv cm1hdChmb3JtYXQsIGZtdF9zdHIsIERDSF9rZXl3b3JkcywKKwkJCQkJIERDSF9zdWZmLCBEQ0hf aW5kZXgsIERDSF9GTEFHLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogVXNlIGNh Y2hlIGJ1ZmZlcnMKKwkJICovCisJCURDSENhY2hlRW50cnkgKmVudCA9IERDSF9jYWNoZV9mZXRj aChmbXRfc3RyLCBmYWxzZSk7CisKKwkJaW5jYWNoZSA9IHRydWU7CisJCWZvcm1hdCA9IGVudC0+ Zm9ybWF0OworCX0KKworCXJlc3VsdCA9IERDSF9kYXRldGltZV90eXBlKGZvcm1hdCk7CisKKwlp ZiAoIWluY2FjaGUpCisJCXBmcmVlKGZvcm1hdCk7CisKKwlyZXR1cm4gcmVzdWx0ICYgRENIX1pP TkVEOworfQorCiAvKgogICogZG9fdG9fdGltZXN0YW1wOiBzaGFyZWQgY29kZSBmb3IgdG9fdGlt ZXN0YW1wIGFuZCB0b19kYXRlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2pzb25iLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCA5NzgxODUyYjBj Li5lYTViMzg2ZjhjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpAQCAtMjE2MiwzICsyMTYyLDY1IEBA IGpzb25iX2Zsb2F0OChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0RBVFVNKHJldFZh bHVlKTsKIH0KKworLyoKKyAqIENvbnN0cnVjdCBhbiBlbXB0eSBhcnJheSBqc29uYi4KKyAqLwor SnNvbmIgKgorSnNvbmJNYWtlRW1wdHlBcnJheSh2b2lkKQoreworCUpzb25iVmFsdWUJamJ2Owor CisJamJ2LnR5cGUgPSBqYnZBcnJheTsKKwlqYnYudmFsLmFycmF5LmVsZW1zID0gTlVMTDsKKwlq YnYudmFsLmFycmF5Lm5FbGVtcyA9IDA7CisJamJ2LnZhbC5hcnJheS5yYXdTY2FsYXIgPSBmYWxz ZTsKKworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYigmamJ2KTsKK30KKworLyoKKyAqIENvbnN0 cnVjdCBhbiBlbXB0eSBvYmplY3QganNvbmIuCisgKi8KK0pzb25iICoKK0pzb25iTWFrZUVtcHR5 T2JqZWN0KHZvaWQpCit7CisJSnNvbmJWYWx1ZQlqYnY7CisKKwlqYnYudHlwZSA9IGpidk9iamVj dDsKKwlqYnYudmFsLm9iamVjdC5wYWlycyA9IE5VTEw7CisJamJ2LnZhbC5vYmplY3QublBhaXJz ID0gMDsKKworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYigmamJ2KTsKK30KKworLyoKKyAqIENv bnZlcnQganNvbmIgdG8gYSBDLXN0cmluZyBzdHJpcHBpbmcgcXVvdGVzIGZyb20gc2NhbGFyIHN0 cmluZ3MuCisgKi8KK2NoYXIgKgorSnNvbmJVbnF1b3RlKEpzb25iICpqYikKK3sKKwlpZiAoSkJf Uk9PVF9JU19TQ0FMQVIoamIpKQorCXsKKwkJSnNvbmJWYWx1ZQl2OworCisJCSh2b2lkKSBKc29u YkV4dHJhY3RTY2FsYXIoJmpiLT5yb290LCAmdik7CisKKwkJaWYgKHYudHlwZSA9PSBqYnZTdHJp bmcpCisJCQlyZXR1cm4gcG5zdHJkdXAodi52YWwuc3RyaW5nLnZhbCwgdi52YWwuc3RyaW5nLmxl bik7CisJCWVsc2UgaWYgKHYudHlwZSA9PSBqYnZCb29sKQorCQkJcmV0dXJuIHBzdHJkdXAodi52 YWwuYm9vbGVhbiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQllbHNlIGlmICh2LnR5cGUgPT0gamJ2 TnVtZXJpYykKKwkJCXJldHVybiBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShu dW1lcmljX291dCwKKwkJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0odi52YWwubnVtZXJp YykpKTsKKwkJZWxzZSBpZiAodi50eXBlID09IGpidk51bGwpCisJCQlyZXR1cm4gcHN0cmR1cCgi bnVsbCIpOworCQllbHNlCisJCXsKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNvbmIg dmFsdWUgdHlwZSAlZCIsIHYudHlwZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwllbHNl CisJCXJldHVybiBKc29uYlRvQ1N0cmluZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCBhOGYyYjE4NmM5Li41OTZkOTM1ZjEw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC0yODA0LDcgKzI4MDQsOCBAQCBwb3B1 bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgLyogY29udGV4 dCAqLwogCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKIAotCWlmIChqYnYtPnR5cGUgIT0gamJ2Qmlu YXJ5IHx8ICFKc29uQ29udGFpbmVySXNBcnJheShqYmMpKQorCWlmIChqYnYtPnR5cGUgIT0gamJ2 QmluYXJ5IHx8ICFKc29uQ29udGFpbmVySXNBcnJheShqYmMpIHx8CisJCUpzb25Db250YWluZXJJ c1NjYWxhcihqYmMpKQogCXsKIAkJcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4cGVjdGVkX2FycmF5 KGN0eCwgbmRpbSAtIDEpOwogCQkvKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGVycm9yIHdhcyBy ZXBvcnRlZCBzb2Z0bHkuICovCkBAIC0yODEyLDggKzI4MTMsNiBAQCBwb3B1bGF0ZV9hcnJheV9k aW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgLyogY29udGV4dCAqLwogCQlyZXR1 cm4gZmFsc2U7CiAJfQogCi0JQXNzZXJ0KCFKc29uQ29udGFpbmVySXNTY2FsYXIoamJjKSk7Ci0K IAlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGpiYyk7CiAKIAl0b2sgPSBKc29uYkl0ZXJhdG9yTmV4 dCgmaXQsICZ2YWwsIHRydWUpOwpAQCAtMzM0OCw2ICszMzQ3LDUzIEBAIHBvcHVsYXRlX3JlY29y ZF9maWVsZChDb2x1bW5JT0RhdGEgKmNvbCwKIAl9CiB9CiAKKy8qIHJlY3Vyc2l2ZWx5IHBvcHVs YXRlIHNwZWNpZmllZCB0eXBlIGZyb20gYSBqc29uL2pzb25iIHZhbHVlICovCitEYXR1bQoranNv bl9wb3B1bGF0ZV90eXBlKERhdHVtIGpzb25fdmFsLCBPaWQganNvbl90eXBlLCBPaWQgdHlwaWQs IGludDMyIHR5cG1vZCwKKwkJCQkgICB2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRleHQgbWN4dCwg Ym9vbCAqaXNudWxsLAorCQkJCSAgIE5vZGUgKmVzY29udGV4dCkKK3sKKwlKc1ZhbHVlCQlqc3Yg PSB7MH07CisJSnNvbmJWYWx1ZQlqYnY7CisKKwlqc3YuaXNfanNvbiA9IGpzb25fdHlwZSA9PSBK U09OT0lEOworCisJaWYgKCppc251bGwpCisJeworCQlpZiAoanN2LmlzX2pzb24pCisJCQlqc3Yu dmFsLmpzb24uc3RyID0gTlVMTDsKKwkJZWxzZQorCQkJanN2LnZhbC5qc29uYiA9IE5VTEw7CisJ fQorCWVsc2UgaWYgKGpzdi5pc19qc29uKQorCXsKKwkJdGV4dAkgICAqanNvbiA9IERhdHVtR2V0 VGV4dFBQKGpzb25fdmFsKTsKKworCQlqc3YudmFsLmpzb24uc3RyID0gVkFSREFUQV9BTlkoanNv bik7CisJCWpzdi52YWwuanNvbi5sZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihqc29uKTsKKwkJanN2 LnZhbC5qc29uLnR5cGUgPSBKU09OX1RPS0VOX0lOVkFMSUQ7IC8qIG5vdCB1c2VkIGluCisJCQkJ CQkJCQkJCQkgKiBwb3B1bGF0ZV9jb21wb3NpdGUoKSAqLworCX0KKwllbHNlCisJeworCQlKc29u YgkgICAqanNvbmIgPSBEYXR1bUdldEpzb25iUChqc29uX3ZhbCk7CisKKwkJanN2LnZhbC5qc29u YiA9ICZqYnY7CisKKwkJLyogZmlsbCBiaW5hcnkganNvbmIgdmFsdWUgcG9pbnRpbmcgdG8gamIg Ki8KKwkJamJ2LnR5cGUgPSBqYnZCaW5hcnk7CisJCWpidi52YWwuYmluYXJ5LmRhdGEgPSAmanNv bmItPnJvb3Q7CisJCWpidi52YWwuYmluYXJ5LmxlbiA9IFZBUlNJWkUoanNvbmIpIC0gVkFSSERS U1o7CisJfQorCisJaWYgKCEqY2FjaGUpCisJCSpjYWNoZSA9IE1lbW9yeUNvbnRleHRBbGxvY1pl cm8obWN4dCwgc2l6ZW9mKENvbHVtbklPRGF0YSkpOworCisJcmV0dXJuIHBvcHVsYXRlX3JlY29y ZF9maWVsZCgqY2FjaGUsIHR5cGlkLCB0eXBtb2QsIE5VTEwsIG1jeHQsCisJCQkJCQkJCSBQb2lu dGVyR2V0RGF0dW0oTlVMTCksICZqc3YsIGlzbnVsbCwKKwkJCQkJCQkJIGVzY29udGV4dCk7Cit9 CisKIHN0YXRpYyBSZWNvcmRJT0RhdGEgKgogYWxsb2NhdGVfcmVjb3JkX2luZm8oTWVtb3J5Q29u dGV4dCBtY3h0LCBpbnQgbmNvbHVtbnMpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbnBhdGguYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCmluZGV4 IGM1YmEzYjdmMWQuLjhkODk5OTRjMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29ucGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCkBAIC02 OCw3ICs2OCw5IEBACiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJub2Rl cy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9u b2RlRnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxz L2Zvcm1hdHRpbmcuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbnBhdGguaCIKIApAQCAtMTExMCwzICsxMTEyLDI1NiBAQCBqc3BHZXRBcnJheVN1YnNjcmlw dChKc29uUGF0aEl0ZW0gKnYsIEpzb25QYXRoSXRlbSAqZnJvbSwgSnNvblBhdGhJdGVtICp0bywK IAogCXJldHVybiB0cnVlOwogfQorCisvKiBTUUwvSlNPTiBkYXRhdHlwZSBzdGF0dXM6ICovCit0 eXBlZGVmIGVudW0gSnNvblBhdGhEYXRhdHlwZVN0YXR1cworeworCWpwZHNOb25EYXRlVGltZSwJ CQkvKiBudWxsLCBib29sLCBudW1lcmljLCBzdHJpbmcsIGFycmF5LCBvYmplY3QgKi8KKwlqcGRz VW5rbm93bkRhdGVUaW1lLAkJLyogdW5rbm93biBkYXRldGltZSB0eXBlICovCisJanBkc0RhdGVU aW1lWm9uZWQsCQkJLyogdGltZXR6LCB0aW1lc3RhbXB0eiAqLworCWpwZHNEYXRlVGltZU5vblpv bmVkCQkvKiB0aW1lLCB0aW1lc3RhbXAsIGRhdGUgKi8KK30gSnNvblBhdGhEYXRhdHlwZVN0YXR1 czsKKworLyogQ29udGV4dCBmb3IganNwSXNNdXRhYmxlV2Fsa2VyKCkgKi8KK3R5cGVkZWYgc3Ry dWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQKK3sKKwlMaXN0CSAgICp2YXJuYW1lczsJCS8qIGxp c3Qgb2YgdmFyaWFibGUgbmFtZXMgKi8KKwlMaXN0CSAgICp2YXJleHByczsJCS8qIGxpc3Qgb2Yg dmFyaWFibGUgZXhwcmVzc2lvbnMgKi8KKwlKc29uUGF0aERhdGF0eXBlU3RhdHVzIGN1cnJlbnQ7 IC8qIHN0YXR1cyBvZiBAIGl0ZW0gKi8KKwlib29sCQlsYXg7CQkJLyoganNvbnBhdGggaXMgbGF4 IG9yIHN0cmljdCAqLworCWJvb2wJCW11dGFibGU7CQkvKiByZXN1bHRpbmcgbXV0YWJpbGl0eSBz dGF0dXMgKi8KK30gSnNvblBhdGhNdXRhYmxlQ29udGV4dDsKKworLyoKKyAqIFJlY3Vyc2l2ZSB3 YWxrZXIgZm9yIGpzcElzTXV0YWJsZSgpCisgKi8KK3N0YXRpYyBKc29uUGF0aERhdGF0eXBlU3Rh dHVzCitqc3BJc011dGFibGVXYWxrZXIoSnNvblBhdGhJdGVtICpqcGksIEpzb25QYXRoTXV0YWJs ZUNvbnRleHQgKmN4dCkKK3sKKwlKc29uUGF0aEl0ZW0gbmV4dDsKKwlKc29uUGF0aERhdGF0eXBl U3RhdHVzIHN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKworCXdoaWxlICghY3h0LT5tdXRhYmxl KQorCXsKKwkJSnNvblBhdGhJdGVtIGFyZzsKKwkJSnNvblBhdGhEYXRhdHlwZVN0YXR1cyBsZWZ0 U3RhdHVzOworCQlKc29uUGF0aERhdGF0eXBlU3RhdHVzIHJpZ2h0U3RhdHVzOworCisJCXN3aXRj aCAoanBpLT50eXBlKQorCQl7CisJCQljYXNlIGpwaVJvb3Q6CisJCQkJQXNzZXJ0KHN0YXR1cyA9 PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUN1cnJlbnQ6CisJ CQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCXN0YXR1cyA9IGN4dC0+ Y3VycmVudDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlGaWx0ZXI6CisJCQkJeworCQkJCQlK c29uUGF0aERhdGF0eXBlU3RhdHVzIHByZXZTdGF0dXMgPSBjeHQtPmN1cnJlbnQ7CisKKwkJCQkJ Y3h0LT5jdXJyZW50ID0gc3RhdHVzOworCQkJCQlqc3BHZXRBcmcoanBpLCAmYXJnKTsKKwkJCQkJ anNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisKKwkJCQkJY3h0LT5jdXJyZW50ID0gcHJl dlN0YXR1czsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIGpwaVZhcmlhYmxlOgorCQkJ CXsKKwkJCQkJaW50MzIJCWxlbjsKKwkJCQkJY29uc3QgY2hhciAqbmFtZSA9IGpzcEdldFN0cmlu ZyhqcGksICZsZW4pOworCQkJCQlMaXN0Q2VsbCAgICpsYzE7CisJCQkJCUxpc3RDZWxsICAgKmxj MjsKKworCQkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisKKwkJCQkJZm9y Ym90aChsYzEsIGN4dC0+dmFybmFtZXMsIGxjMiwgY3h0LT52YXJleHBycykKKwkJCQkJeworCQkJ CQkJU3RyaW5nCSAgICp2YXJuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBsYzEpOworCQkJCQkJ Tm9kZQkgICAqdmFyZXhwciA9IGxmaXJzdChsYzIpOworCisJCQkJCQlpZiAoc3RybmNtcCh2YXJu YW1lLT5zdmFsLCBuYW1lLCBsZW4pKQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCQlzd2l0Y2gg KGV4cHJUeXBlKHZhcmV4cHIpKQorCQkJCQkJeworCQkJCQkJCWNhc2UgREFURU9JRDoKKwkJCQkJ CQljYXNlIFRJTUVPSUQ6CisJCQkJCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJCQkJCXN0YXR1 cyA9IGpwZHNEYXRlVGltZU5vblpvbmVkOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2Ug VElNRVRaT0lEOgorCQkJCQkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJCQkJCXN0YXR1cyA9 IGpwZHNEYXRlVGltZVpvbmVkOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWRlZmF1bHQ6CisJ CQkJCQkJCXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9 CisKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBq cGlFcXVhbDoKKwkJCWNhc2UganBpTm90RXF1YWw6CisJCQljYXNlIGpwaUxlc3M6CisJCQljYXNl IGpwaUdyZWF0ZXI6CisJCQljYXNlIGpwaUxlc3NPckVxdWFsOgorCQkJY2FzZSBqcGlHcmVhdGVy T3JFcXVhbDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJanNw R2V0TGVmdEFyZyhqcGksICZhcmcpOworCQkJCWxlZnRTdGF0dXMgPSBqc3BJc011dGFibGVXYWxr ZXIoJmFyZywgY3h0KTsKKworCQkJCWpzcEdldFJpZ2h0QXJnKGpwaSwgJmFyZyk7CisJCQkJcmln aHRTdGF0dXMgPSBqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKworCQkJCS8qCisJCQkJ ICogQ29tcGFyaXNvbiBvZiBkYXRldGltZSB0eXBlIHdpdGggZGlmZmVyZW50IHRpbWV6b25lIHN0 YXR1cworCQkJCSAqIGlzIG11dGFibGUuCisJCQkJICovCisJCQkJaWYgKGxlZnRTdGF0dXMgIT0g anBkc05vbkRhdGVUaW1lICYmCisJCQkJCXJpZ2h0U3RhdHVzICE9IGpwZHNOb25EYXRlVGltZSAm JgorCQkJCQkobGVmdFN0YXR1cyA9PSBqcGRzVW5rbm93bkRhdGVUaW1lIHx8CisJCQkJCSByaWdo dFN0YXR1cyA9PSBqcGRzVW5rbm93bkRhdGVUaW1lIHx8CisJCQkJCSBsZWZ0U3RhdHVzICE9IHJp Z2h0U3RhdHVzKSkKKwkJCQkJY3h0LT5tdXRhYmxlID0gdHJ1ZTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBqcGlOb3Q6CisJCQljYXNlIGpwaUlzVW5rbm93bjoKKwkJCWNhc2UganBpRXhpc3RzOgor CQkJY2FzZSBqcGlQbHVzOgorCQkJY2FzZSBqcGlNaW51czoKKwkJCQlBc3NlcnQoc3RhdHVzID09 IGpwZHNOb25EYXRlVGltZSk7CisJCQkJanNwR2V0QXJnKGpwaSwgJmFyZyk7CisJCQkJanNwSXNN dXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpQW5kOgor CQkJY2FzZSBqcGlPcjoKKwkJCWNhc2UganBpQWRkOgorCQkJY2FzZSBqcGlTdWI6CisJCQljYXNl IGpwaU11bDoKKwkJCWNhc2UganBpRGl2OgorCQkJY2FzZSBqcGlNb2Q6CisJCQljYXNlIGpwaVN0 YXJ0c1dpdGg6CisJCQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWpz cEdldExlZnRBcmcoanBpLCAmYXJnKTsKKwkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0 KTsKKwkJCQlqc3BHZXRSaWdodEFyZyhqcGksICZhcmcpOworCQkJCWpzcElzTXV0YWJsZVdhbGtl cigmYXJnLCBjeHQpOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUluZGV4QXJyYXk6CisJCQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBqcGktPmNvbnRlbnQuYXJyYXkubmVsZW1zOyBpKyspCisJCQkJ eworCQkJCQlKc29uUGF0aEl0ZW0gZnJvbTsKKwkJCQkJSnNvblBhdGhJdGVtIHRvOworCisJCQkJ CWlmIChqc3BHZXRBcnJheVN1YnNjcmlwdChqcGksICZmcm9tLCAmdG8sIGkpKQorCQkJCQkJanNw SXNNdXRhYmxlV2Fsa2VyKCZ0bywgY3h0KTsKKworCQkJCQlqc3BJc011dGFibGVXYWxrZXIoJmZy b20sIGN4dCk7CisJCQkJfQorCQkJCS8qIEZBTExUSFJPVUdIICovCisKKwkJCWNhc2UganBpQW55 QXJyYXk6CisJCQkJaWYgKCFjeHQtPmxheCkKKwkJCQkJc3RhdHVzID0ganBkc05vbkRhdGVUaW1l OworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUFueToKKwkJCQlpZiAoanBpLT5jb250ZW50LmFu eWJvdW5kcy5maXJzdCA+IDApCisJCQkJCXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBqcGlEYXRldGltZToKKwkJCQlpZiAoanBpLT5jb250ZW50LmFyZykK KwkJCQl7CisJCQkJCWNoYXIJICAgKnRlbXBsYXRlOworCisJCQkJCWpzcEdldEFyZyhqcGksICZh cmcpOworCQkJCQlpZiAoYXJnLnR5cGUgIT0ganBpU3RyaW5nKQorCQkJCQl7CisJCQkJCQlzdGF0 dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJCQlicmVhazsJLyogdGhlcmUgd2lsbCBiZSBydW50 aW1lIGVycm9yICovCisJCQkJCX0KKworCQkJCQl0ZW1wbGF0ZSA9IGpzcEdldFN0cmluZygmYXJn LCBOVUxMKTsKKwkJCQkJaWYgKGRhdGV0aW1lX2Zvcm1hdF9oYXNfdHoodGVtcGxhdGUpKQorCQkJ CQkJc3RhdHVzID0ganBkc0RhdGVUaW1lWm9uZWQ7CisJCQkJCWVsc2UKKwkJCQkJCXN0YXR1cyA9 IGpwZHNEYXRlVGltZU5vblpvbmVkOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlzdGF0 dXMgPSBqcGRzVW5rbm93bkRhdGVUaW1lOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBq cGlMaWtlUmVnZXg6CisJCQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJ CWpzcEluaXRCeUJ1ZmZlcigmYXJnLCBqcGktPmJhc2UsIGpwaS0+Y29udGVudC5saWtlX3JlZ2V4 LmV4cHIpOworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCQkJCWJyZWFrOwor CisJCQkJLyogbGl0ZXJhbHMgKi8KKwkJCWNhc2UganBpTnVsbDoKKwkJCWNhc2UganBpU3RyaW5n OgorCQkJY2FzZSBqcGlOdW1lcmljOgorCQkJY2FzZSBqcGlCb29sOgorCQkJCS8qIGFjY2Vzc29y cyAqLworCQkJY2FzZSBqcGlLZXk6CisJCQljYXNlIGpwaUFueUtleToKKwkJCQkvKiBzcGVjaWFs IGl0ZW1zICovCisJCQljYXNlIGpwaVN1YnNjcmlwdDoKKwkJCWNhc2UganBpTGFzdDoKKwkJCQkv KiBpdGVtIG1ldGhvZHMgKi8KKwkJCWNhc2UganBpVHlwZToKKwkJCWNhc2UganBpU2l6ZToKKwkJ CWNhc2UganBpQWJzOgorCQkJY2FzZSBqcGlGbG9vcjoKKwkJCWNhc2UganBpQ2VpbGluZzoKKwkJ CWNhc2UganBpRG91YmxlOgorCQkJY2FzZSBqcGlLZXlWYWx1ZToKKwkJCQlzdGF0dXMgPSBqcGRz Tm9uRGF0ZVRpbWU7CisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWpzcEdldE5leHQoanBpLCAm bmV4dCkpCisJCQlicmVhazsKKworCQlqcGkgPSAmbmV4dDsKKwl9CisKKwlyZXR1cm4gc3RhdHVz OworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBqc29ucGF0aCBleHByZXNzaW9uIGlzIGltbXV0 YWJsZSBvciBub3QuCisgKi8KK2Jvb2wKK2pzcElzTXV0YWJsZShKc29uUGF0aCAqcGF0aCwgTGlz dCAqdmFybmFtZXMsIExpc3QgKnZhcmV4cHJzKQoreworCUpzb25QYXRoTXV0YWJsZUNvbnRleHQg Y3h0OworCUpzb25QYXRoSXRlbSBqcGk7CisKKwljeHQudmFybmFtZXMgPSB2YXJuYW1lczsKKwlj eHQudmFyZXhwcnMgPSB2YXJleHByczsKKwljeHQuY3VycmVudCA9IGpwZHNOb25EYXRlVGltZTsK KwljeHQubGF4ID0gKHBhdGgtPmhlYWRlciAmIEpTT05QQVRIX0xBWCkgIT0gMDsKKwljeHQubXV0 YWJsZSA9IGZhbHNlOworCisJanNwSW5pdCgmanBpLCBwYXRoKTsKKwlqc3BJc011dGFibGVXYWxr ZXIoJmpwaSwgJmN4dCk7CisKKwlyZXR1cm4gY3h0Lm11dGFibGU7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCAyZDA1OTliNGFhLi42YzU2MDJjNjRkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTg3LDEyICs4NywxNiBAQCB0eXBlZGVm IHN0cnVjdCBKc29uQmFzZU9iamVjdEluZm8KIAlpbnQJCQlpZDsKIH0gSnNvbkJhc2VPYmplY3RJ bmZvOwogCit0eXBlZGVmIGludCAoKkpzb25QYXRoVmFyQ2FsbGJhY2spICh2b2lkICp2YXJzLCBj aGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCQkJCQkJCUpzb25iVmFsdWUgKnZhbCwg SnNvbmJWYWx1ZSAqYmFzZU9iamVjdCk7CisKIC8qCiAgKiBDb250ZXh0IG9mIGpzb25wYXRoIGV4 ZWN1dGlvbi4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhFeGVjQ29udGV4dAogewotCUpz b25iCSAgICp2YXJzOwkJCS8qIHZhcmlhYmxlcyB0byBzdWJzdGl0dXRlIGludG8ganNvbnBhdGgg Ki8KKwl2b2lkCSAgICp2YXJzOwkJCS8qIHZhcmlhYmxlcyB0byBzdWJzdGl0dXRlIGludG8ganNv bnBhdGggKi8KKwlKc29uUGF0aFZhckNhbGxiYWNrIGdldFZhcjsKIAlKc29uYlZhbHVlICpyb290 OwkJCS8qIGZvciAkIGV2YWx1YXRpb24gKi8KIAlKc29uYlZhbHVlICpjdXJyZW50OwkJLyogZm9y IEAgZXZhbHVhdGlvbiAqLwogCUpzb25CYXNlT2JqZWN0SW5mbyBiYXNlT2JqZWN0OwkvKiAiYmFz ZSBvYmplY3QiIGZvciAua2V5dmFsdWUoKQpAQCAtMTc0LDcgKzE3OCw4IEBAIHR5cGVkZWYgSnNv blBhdGhCb29sICgqSnNvblBhdGhQcmVkaWNhdGVDYWxsYmFjaykgKEpzb25QYXRoSXRlbSAqanNw LAogCQkJCQkJCQkJCQkJICAgdm9pZCAqcGFyYW0pOwogdHlwZWRlZiBOdW1lcmljICgqQmluYXJ5 QXJpdGhtRnVuYykgKE51bWVyaWMgbnVtMSwgTnVtZXJpYyBudW0yLCBib29sICplcnJvcik7CiAK LXN0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRo LCBKc29uYiAqdmFycywKK3N0YXRpYyBKc29uUGF0aEV4ZWNSZXN1bHQgZXhlY3V0ZUpzb25QYXRo KEpzb25QYXRoICpwYXRoLCB2b2lkICp2YXJzLAorCQkJCQkJCQkJCSAgSnNvblBhdGhWYXJDYWxs YmFjayBnZXRWYXIsCiAJCQkJCQkJCQkJICBKc29uYiAqanNvbiwgYm9vbCB0aHJvd0Vycm9ycywK IAkJCQkJCQkJCQkgIEpzb25WYWx1ZUxpc3QgKnJlc3VsdCwgYm9vbCB1c2VUeik7CiBzdGF0aWMg SnNvblBhdGhFeGVjUmVzdWx0IGV4ZWN1dGVJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwK QEAgLTIyNSw4ICsyMzAsMTMgQEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29s UmVzdWx0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkgICBKc29uUGF0aEl0 ZW0gKmpzcCwgSnNvblZhbHVlTGlzdCAqZm91bmQsIEpzb25QYXRoQm9vbCByZXMpOwogc3RhdGlj IHZvaWQgZ2V0SnNvblBhdGhJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJ dGVtICppdGVtLAogCQkJCQkJCUpzb25iVmFsdWUgKnZhbHVlKTsKK3N0YXRpYyBpbnQJR2V0SnNv blBhdGhWYXIodm9pZCAqdmFycywgY2hhciAqdmFyTmFtZSwgaW50IHZhck5hbWVMZW4sCisJCQkJ CQkgICBKc29uYlZhbHVlICp2YWwsIEpzb25iVmFsdWUgKmJhc2VPYmplY3QpOwogc3RhdGljIHZv aWQgZ2V0SnNvblBhdGhWYXJpYWJsZShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsCi0JCQkJCQkJ CUpzb25QYXRoSXRlbSAqdmFyaWFibGUsIEpzb25iICp2YXJzLCBKc29uYlZhbHVlICp2YWx1ZSk7 CisJCQkJCQkJCUpzb25QYXRoSXRlbSAqdmFyaWFibGUsIEpzb25iVmFsdWUgKnZhbHVlKTsKK3N0 YXRpYyBpbnQJZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYih2b2lkICp2YXJzSnNvbmIsIGNo YXIgKnZhck5hbWUsCisJCQkJCQkJCQkJIGludCB2YXJOYW1lTGVuLCBKc29uYlZhbHVlICp2YWws CisJCQkJCQkJCQkJIEpzb25iVmFsdWUgKmJhc2VPYmplY3QpOwogc3RhdGljIGludAlKc29uYkFy cmF5U2l6ZShKc29uYlZhbHVlICpqYik7CiBzdGF0aWMgSnNvblBhdGhCb29sIGV4ZWN1dGVDb21w YXJpc29uKEpzb25QYXRoSXRlbSAqY21wLCBKc29uYlZhbHVlICpsdiwKIAkJCQkJCQkJCSAgSnNv bmJWYWx1ZSAqcnYsIHZvaWQgKnApOwpAQCAtMjg0LDcgKzI5NCw4IEBAIGpzb25iX3BhdGhfZXhp c3RzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIHR6KQogCQlzaWxlbnQg PSBQR19HRVRBUkdfQk9PTCgzKTsKIAl9CiAKLQlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZh cnMsIGpiLCAhc2lsZW50LCBOVUxMLCB0eik7CisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2 YXJzLCBnZXRKc29uUGF0aFZhcmlhYmxlRnJvbUpzb25iLAorCQkJCQkJICBqYiwgIXNpbGVudCwg TlVMTCwgdHopOwogCiAJUEdfRlJFRV9JRl9DT1BZKGpiLCAwKTsKIAlQR19GUkVFX0lGX0NPUFko anAsIDEpOwpAQCAtMzM5LDcgKzM1MCw4IEBAIGpzb25iX3BhdGhfbWF0Y2hfaW50ZXJuYWwoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHopCiAJCXNpbGVudCA9IFBHX0dFVEFSR19CT09M KDMpOwogCX0KIAotCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGpiLCAhc2lsZW50 LCAmZm91bmQsIHR6KTsKKwkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBnZXRKc29u UGF0aFZhcmlhYmxlRnJvbUpzb25iLAorCQkJCQkJICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHop OwogCiAJUEdfRlJFRV9JRl9DT1BZKGpiLCAwKTsKIAlQR19GUkVFX0lGX0NPUFkoanAsIDEpOwpA QCAtNDE3LDcgKzQyOSw4IEBAIGpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8sIGJvb2wgdHopCiAJCXZhcnMgPSBQR19HRVRBUkdfSlNPTkJfUF9DT1BZKDIp OwogCQlzaWxlbnQgPSBQR19HRVRBUkdfQk9PTCgzKTsKIAotCQkodm9pZCkgZXhlY3V0ZUpzb25Q YXRoKGpwLCB2YXJzLCBqYiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CisJCSh2b2lkKSBleGVjdXRl SnNvblBhdGgoanAsIHZhcnMsIGdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkJ ICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOwogCiAJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEpz b25WYWx1ZUxpc3RHZXRMaXN0KCZmb3VuZCk7CiAKQEAgLTQ2NCw3ICs0NzcsOCBAQCBqc29uYl9w YXRoX3F1ZXJ5X2FycmF5X2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIHR6 KQogCUpzb25iCSAgICp2YXJzID0gUEdfR0VUQVJHX0pTT05CX1AoMik7CiAJYm9vbAkJc2lsZW50 ID0gUEdfR0VUQVJHX0JPT0woMyk7CiAKLQkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJz LCBqYiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CisJKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwg dmFycywgZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYiwKKwkJCQkJCSAgIGpiLCAhc2lsZW50 LCAmZm91bmQsIHR6KTsKIAogCVBHX1JFVFVSTl9KU09OQl9QKEpzb25iVmFsdWVUb0pzb25iKHdy YXBJdGVtc0luQXJyYXkoJmZvdW5kKSkpOwogfQpAQCAtNDk1LDcgKzUwOSw4IEBAIGpzb25iX3Bh dGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHop CiAJSnNvbmIJICAgKnZhcnMgPSBQR19HRVRBUkdfSlNPTkJfUCgyKTsKIAlib29sCQlzaWxlbnQg PSBQR19HRVRBUkdfQk9PTCgzKTsKIAotCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMs IGpiLCAhc2lsZW50LCAmZm91bmQsIHR6KTsKKwkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2 YXJzLCBnZXRKc29uUGF0aFZhcmlhYmxlRnJvbUpzb25iLAorCQkJCQkJICAgamIsICFzaWxlbnQs ICZmb3VuZCwgdHopOwogCiAJaWYgKEpzb25WYWx1ZUxpc3RMZW5ndGgoJmZvdW5kKSA+PSAxKQog CQlQR19SRVRVUk5fSlNPTkJfUChKc29uYlZhbHVlVG9Kc29uYihKc29uVmFsdWVMaXN0SGVhZCgm Zm91bmQpKSk7CkBAIC01MzcsOCArNTUyLDkgQEAganNvbmJfcGF0aF9xdWVyeV9maXJzdF90eihQ R19GVU5DVElPTl9BUkdTKQogICogSW4gb3RoZXIgY2FzZSBpdCB0cmllcyB0byBmaW5kIGFsbCB0 aGUgc2F0aXNmaWVkIHJlc3VsdCBpdGVtcy4KICAqLwogc3RhdGljIEpzb25QYXRoRXhlY1Jlc3Vs dAotZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRoLCBKc29uYiAqdmFycywgSnNvbmIgKmpz b24sIGJvb2wgdGhyb3dFcnJvcnMsCi0JCQkJSnNvblZhbHVlTGlzdCAqcmVzdWx0LCBib29sIHVz ZVR6KQorZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRoLCB2b2lkICp2YXJzLCBKc29uUGF0 aFZhckNhbGxiYWNrIGdldFZhciwKKwkJCQlKc29uYiAqanNvbiwgYm9vbCB0aHJvd0Vycm9ycywg SnNvblZhbHVlTGlzdCAqcmVzdWx0LAorCQkJCWJvb2wgdXNlVHopCiB7CiAJSnNvblBhdGhFeGVj Q29udGV4dCBjeHQ7CiAJSnNvblBhdGhFeGVjUmVzdWx0IHJlczsKQEAgLTU1MCwyMiArNTY2LDE2 IEBAIGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwgSnNvbmIgKnZhcnMsIEpzb25iICpq c29uLCBib29sIHRocm93RXJyb3JzLAogCWlmICghSnNvbmJFeHRyYWN0U2NhbGFyKCZqc29uLT5y b290LCAmamJ2KSkKIAkJSnNvbmJJbml0QmluYXJ5KCZqYnYsIGpzb24pOwogCi0JaWYgKHZhcnMg JiYgIUpzb25Db250YWluZXJJc09iamVjdCgmdmFycy0+cm9vdCkpCi0JewotCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJ CSBlcnJtc2coIlwidmFyc1wiIGFyZ3VtZW50IGlzIG5vdCBhbiBvYmplY3QiKSwKLQkJCQkgZXJy ZGV0YWlsKCJKc29ucGF0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBlbmNvZGVkIGFzIGtleS12YWx1 ZSBwYWlycyBvZiBcInZhcnNcIiBvYmplY3QuIikpKTsKLQl9Ci0KIAljeHQudmFycyA9IHZhcnM7 CisJY3h0LmdldFZhciA9IGdldFZhcjsKIAljeHQubGF4TW9kZSA9IChwYXRoLT5oZWFkZXIgJiBK U09OUEFUSF9MQVgpICE9IDA7CiAJY3h0Lmlnbm9yZVN0cnVjdHVyYWxFcnJvcnMgPSBjeHQubGF4 TW9kZTsKIAljeHQucm9vdCA9ICZqYnY7CiAJY3h0LmN1cnJlbnQgPSAmamJ2OwogCWN4dC5iYXNl T2JqZWN0LmpiYyA9IE5VTEw7CiAJY3h0LmJhc2VPYmplY3QuaWQgPSAwOwotCWN4dC5sYXN0R2Vu ZXJhdGVkT2JqZWN0SWQgPSB2YXJzID8gMiA6IDE7CisJLyogMSArIG51bWJlciBvZiBiYXNlIG9i amVjdHMgaW4gdmFycyAqLworCWN4dC5sYXN0R2VuZXJhdGVkT2JqZWN0SWQgPSAxICsgZ2V0VmFy KHZhcnMsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOwogCWN4dC5pbm5lcm1vc3RBcnJheVNpemUgPSAt MTsKIAljeHQudGhyb3dFcnJvcnMgPSB0aHJvd0Vycm9yczsKIAljeHQudXNlVHogPSB1c2VUejsK QEAgLTIxMDgsNTQgKzIxMTgsMTE4IEBAIGdldEpzb25QYXRoSXRlbShKc29uUGF0aEV4ZWNDb250 ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqaXRlbSwKIAkJCQkJCQkJCQkJCSAmdmFsdWUtPnZhbC5z dHJpbmcubGVuKTsKIAkJCWJyZWFrOwogCQljYXNlIGpwaVZhcmlhYmxlOgotCQkJZ2V0SnNvblBh dGhWYXJpYWJsZShjeHQsIGl0ZW0sIGN4dC0+dmFycywgdmFsdWUpOworCQkJZ2V0SnNvblBhdGhW YXJpYWJsZShjeHQsIGl0ZW0sIHZhbHVlKTsKIAkJCXJldHVybjsKIAkJZGVmYXVsdDoKIAkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25wYXRoIGl0ZW0gdHlwZSIpOwogCX0KIH0KIAorLyoK KyAqIFJldHVybnMgdGhlIGNvbXB1dGVkIHZhbHVlIG9mIGEgSlNPTiBwYXRoIHZhcmlhYmxlIHdp dGggZ2l2ZW4gbmFtZS4KKyAqLworc3RhdGljIGludAorR2V0SnNvblBhdGhWYXIodm9pZCAqY3h0 LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCSAgIEpzb25iVmFsdWUgKnZhbCwg SnNvbmJWYWx1ZSAqYmFzZU9iamVjdCkKK3sKKwlKc29uUGF0aFZhcmlhYmxlICp2YXIgPSBOVUxM OworCUxpc3QJICAgKnZhcnMgPSBjeHQ7CisJTGlzdENlbGwgICAqbGM7CisJaW50CQkJaWQgPSAx OworCisJaWYgKCF2YXJOYW1lKQorCQlyZXR1cm4gbGlzdF9sZW5ndGgodmFycyk7CisKKwlmb3Jl YWNoKGxjLCB2YXJzKQorCXsKKwkJSnNvblBhdGhWYXJpYWJsZSAqY3VydmFyID0gbGZpcnN0KGxj KTsKKworCQlpZiAoIXN0cm5jbXAoY3VydmFyLT5uYW1lLCB2YXJOYW1lLCB2YXJOYW1lTGVuKSkK KwkJeworCQkJdmFyID0gY3VydmFyOworCQkJYnJlYWs7CisJCX0KKworCQlpZCsrOworCX0KKwor CWlmICghdmFyKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodmFyLT5pc251bGwpCisJeworCQl2YWwt PnR5cGUgPSBqYnZOdWxsOworCQlyZXR1cm4gMDsKKwl9CisKKwlKc29uSXRlbUZyb21EYXR1bSh2 YXItPnZhbHVlLCB2YXItPnR5cGlkLCB2YXItPnR5cG1vZCwgdmFsKTsKKworCSpiYXNlT2JqZWN0 ID0gKnZhbDsKKwlyZXR1cm4gaWQ7Cit9CisKIC8qCiAgKiBHZXQgdGhlIHZhbHVlIG9mIHZhcmlh YmxlIHBhc3NlZCB0byBqc29ucGF0aCBleGVjdXRvcgogICovCiBzdGF0aWMgdm9pZAogZ2V0SnNv blBhdGhWYXJpYWJsZShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqdmFy aWFibGUsCi0JCQkJCUpzb25iICp2YXJzLCBKc29uYlZhbHVlICp2YWx1ZSkKKwkJCQkJSnNvbmJW YWx1ZSAqdmFsdWUpCiB7CiAJY2hhcgkgICAqdmFyTmFtZTsKIAlpbnQJCQl2YXJOYW1lTGVuZ3Ro OworCUpzb25iVmFsdWUJYmFzZU9iamVjdDsKKwlpbnQJCQliYXNlT2JqZWN0SWQ7CisKKwlBc3Nl cnQodmFyaWFibGUtPnR5cGUgPT0ganBpVmFyaWFibGUpOworCXZhck5hbWUgPSBqc3BHZXRTdHJp bmcodmFyaWFibGUsICZ2YXJOYW1lTGVuZ3RoKTsKKworCWlmICghY3h0LT52YXJzIHx8CisJCShi YXNlT2JqZWN0SWQgPSBjeHQtPmdldFZhcihjeHQtPnZhcnMsIHZhck5hbWUsIHZhck5hbWVMZW5n dGgsIHZhbHVlLAorCQkJCQkJCQkJJmJhc2VPYmplY3QpKSA8IDApCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkgZXJybXNnKCJj b3VsZCBub3QgZmluZCBqc29ucGF0aCB2YXJpYWJsZSBcIiVzXCIiLAorCQkJCQkJcG5zdHJkdXAo dmFyTmFtZSwgdmFyTmFtZUxlbmd0aCkpKSk7CisKKwlpZiAoYmFzZU9iamVjdElkID4gMCkKKwkJ c2V0QmFzZU9iamVjdChjeHQsICZiYXNlT2JqZWN0LCBiYXNlT2JqZWN0SWQpOworfQorCitzdGF0 aWMgaW50CitnZXRKc29uUGF0aFZhcmlhYmxlRnJvbUpzb25iKHZvaWQgKnZhcnNKc29uYiwgY2hh ciAqdmFyTmFtZSwgaW50IHZhck5hbWVMZW5ndGgsCisJCQkJCQkJIEpzb25iVmFsdWUgKnZhbHVl LCBKc29uYlZhbHVlICpiYXNlT2JqZWN0KQoreworCUpzb25iCSAgICp2YXJzID0gdmFyc0pzb25i OwogCUpzb25iVmFsdWUJdG1wOwogCUpzb25iVmFsdWUgKnY7CiAKLQlpZiAoIXZhcnMpCisJaWYg KCF2YXJOYW1lKQogCXsKLQkJdmFsdWUtPnR5cGUgPSBqYnZOdWxsOwotCQlyZXR1cm47CisJCWlm ICh2YXJzICYmICFKc29uQ29udGFpbmVySXNPYmplY3QoJnZhcnMtPnJvb3QpKQorCQl7CisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygiXCJ2YXJzXCIgYXJndW1lbnQgaXMgbm90IGFuIG9iamVjdCIp LAorCQkJCQkgZXJyZGV0YWlsKCJKc29ucGF0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBlbmNvZGVk IGFzIGtleS12YWx1ZSBwYWlycyBvZiBcInZhcnNcIiBvYmplY3QuIikpKTsKKwkJfQorCisJCXJl dHVybiB2YXJzID8gMSA6IDA7CS8qIGNvdW50IG9mIGJhc2Ugb2JqZWN0cyAqLwogCX0KIAotCUFz c2VydCh2YXJpYWJsZS0+dHlwZSA9PSBqcGlWYXJpYWJsZSk7Ci0JdmFyTmFtZSA9IGpzcEdldFN0 cmluZyh2YXJpYWJsZSwgJnZhck5hbWVMZW5ndGgpOwogCXRtcC50eXBlID0gamJ2U3RyaW5nOwog CXRtcC52YWwuc3RyaW5nLnZhbCA9IHZhck5hbWU7CiAJdG1wLnZhbC5zdHJpbmcubGVuID0gdmFy TmFtZUxlbmd0aDsKIAogCXYgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoJnZhcnMtPnJv b3QsIEpCX0ZPQkpFQ1QsICZ0bXApOwogCi0JaWYgKHYpCi0JewotCQkqdmFsdWUgPSAqdjsKLQkJ cGZyZWUodik7Ci0JfQotCWVsc2UKLQl7Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUo RVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmluZCBq c29ucGF0aCB2YXJpYWJsZSBcIiVzXCIiLAotCQkJCQkJcG5zdHJkdXAodmFyTmFtZSwgdmFyTmFt ZUxlbmd0aCkpKSk7Ci0JfQorCWlmICghdikKKwkJcmV0dXJuIC0xOwogCi0JSnNvbmJJbml0Qmlu YXJ5KCZ0bXAsIHZhcnMpOwotCXNldEJhc2VPYmplY3QoY3h0LCAmdG1wLCAxKTsKKwkqdmFsdWUg PSAqdjsKKwlwZnJlZSh2KTsKKworCUpzb25iSW5pdEJpbmFyeShiYXNlT2JqZWN0LCB2YXJzKTsK KwlyZXR1cm4gMTsKIH0KIAogLyoqKioqKioqKioqKioqKiogU3VwcG9ydCBmdW5jdGlvbnMgZm9y IEpzb25QYXRoIGV4ZWN1dGlvbiAqKioqKioqKioqKioqKioqKi8KQEAgLTI4MTIsMyArMjg4Niwy NDAgQEAgY29tcGFyZURhdGV0aW1lKERhdHVtIHZhbDEsIE9pZCB0eXBpZDEsIERhdHVtIHZhbDIs IE9pZCB0eXBpZDIsCiAKIAlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwy KGNtcGZ1bmMsIHZhbDEsIHZhbDIpKTsKIH0KKworLyogRXhlY3V0b3ItY2FsbGFibGUgSlNPTl9F WElTVFMgaW1wbGVtZW50YXRpb24gKi8KK2Jvb2wKK0pzb25QYXRoRXhpc3RzKERhdHVtIGpiLCBK c29uUGF0aCAqanAsIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKQoreworCUpzb25QYXRoRXhlY1Jl c3VsdCByZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIEdldEpzb25QYXRoVmFyLAorCQkJ CQkJCQkJCQkgRGF0dW1HZXRKc29uYlAoamIpLCAhZXJyb3IsIE5VTEwsCisJCQkJCQkJCQkJCSB0 cnVlKTsKKworCUFzc2VydChlcnJvciB8fCAhanBlcklzRXJyb3IocmVzKSk7CisKKwlpZiAoZXJy b3IgJiYganBlcklzRXJyb3IocmVzKSkKKwkJKmVycm9yID0gdHJ1ZTsKKworCXJldHVybiByZXMg PT0ganBlck9rOworfQorCisvKiBFeGVjdXRvci1jYWxsYWJsZSBKU09OX1FVRVJZIGltcGxlbWVu dGF0aW9uICovCitEYXR1bQorSnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBK c29uV3JhcHBlciB3cmFwcGVyLCBib29sICplbXB0eSwKKwkJCSAgYm9vbCAqZXJyb3IsIExpc3Qg KnZhcnMpCit7CisJSnNvbmJWYWx1ZSAqZmlyc3Q7CisJYm9vbAkJd3JhcDsKKwlKc29uVmFsdWVM aXN0IGZvdW5kID0gezB9OworCUpzb25QYXRoRXhlY1Jlc3VsdCByZXMgUEdfVVNFRF9GT1JfQVNT RVJUU19PTkxZOworCWludAkJCWNvdW50OworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2 YXJzLCBHZXRKc29uUGF0aFZhciwgRGF0dW1HZXRKc29uYlAoamIpLAorCQkJCQkJICAhZXJyb3Is ICZmb3VuZCwgdHJ1ZSk7CisKKwlBc3NlcnQoZXJyb3IgfHwgIWpwZXJJc0Vycm9yKHJlcykpOwor CisJaWYgKGVycm9yICYmIGpwZXJJc0Vycm9yKHJlcykpCisJeworCQkqZXJyb3IgPSB0cnVlOwor CQkqZW1wdHkgPSBmYWxzZTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwljb3VudCA9IEpz b25WYWx1ZUxpc3RMZW5ndGgoJmZvdW5kKTsKKworCWZpcnN0ID0gY291bnQgPiAwID8gSnNvblZh bHVlTGlzdEhlYWQoJmZvdW5kKSA6IE5VTEw7CisKKwlpZiAoIWZpcnN0KQorCQl3cmFwID0gZmFs c2U7CisJZWxzZSBpZiAod3JhcHBlciA9PSBKU1dfTk9ORSkKKwkJd3JhcCA9IGZhbHNlOworCWVs c2UgaWYgKHdyYXBwZXIgPT0gSlNXX1VOQ09ORElUSU9OQUwpCisJCXdyYXAgPSB0cnVlOworCWVs c2UgaWYgKHdyYXBwZXIgPT0gSlNXX0NPTkRJVElPTkFMKQorCQl3cmFwID0gY291bnQgPiAxIHx8 CisJCQlJc0FKc29uYlNjYWxhcihmaXJzdCkgfHwKKwkJCShmaXJzdC0+dHlwZSA9PSBqYnZCaW5h cnkgJiYKKwkJCSBKc29uQ29udGFpbmVySXNTY2FsYXIoZmlyc3QtPnZhbC5iaW5hcnkuZGF0YSkp OworCWVsc2UKKwl7CisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNvbiB3cmFwcGVyICVk Iiwgd3JhcHBlcik7CisJCXdyYXAgPSBmYWxzZTsKKwl9CisKKwlpZiAod3JhcCkKKwkJcmV0dXJu IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKHdyYXBJdGVtc0luQXJyYXkoJmZvdW5k KSkpOworCisJaWYgKGNvdW50ID4gMSkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9y ID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKworCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfTU9SRV9USEFOX09ORV9TUUxfSlNPTl9JVEVNKSwKKwkJCQkg ZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09OX1FVRVJZIHNob3VsZCByZXR1cm4g c2luZ2xldG9uIGl0ZW0gd2l0aG91dCB3cmFwcGVyIiksCisJCQkJIGVycmhpbnQoIlVzZSBXSVRI IFdSQVBQRVIgY2xhdXNlIHRvIHdyYXAgU1FML0pTT04gaXRlbSBzZXF1ZW5jZSBpbnRvIGFycmF5 LiIpKSk7CisJfQorCisJaWYgKGZpcnN0KQorCQlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJW YWx1ZVRvSnNvbmIoZmlyc3QpKTsKKworCSplbXB0eSA9IHRydWU7CisJcmV0dXJuIFBvaW50ZXJH ZXREYXR1bShOVUxMKTsKK30KKworLyogRXhlY3V0b3ItY2FsbGFibGUgSlNPTl9WQUxVRSBpbXBs ZW1lbnRhdGlvbiAqLworSnNvbmJWYWx1ZSAqCitKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29u UGF0aCAqanAsIGJvb2wgKmVtcHR5LCBib29sICplcnJvciwgTGlzdCAqdmFycykKK3sKKwlKc29u YlZhbHVlICpyZXM7CisJSnNvblZhbHVlTGlzdCBmb3VuZCA9IHswfTsKKwlKc29uUGF0aEV4ZWNS ZXN1bHQganBlciBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJaW50CQkJY291bnQ7CisKKwlq cGVyID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBHZXRKc29uUGF0aFZhciwgRGF0dW1HZXRK c29uYlAoamIpLAorCQkJCQkJICAgIWVycm9yLCAmZm91bmQsIHRydWUpOworCisJQXNzZXJ0KGVy cm9yIHx8ICFqcGVySXNFcnJvcihqcGVyKSk7CisKKwlpZiAoZXJyb3IgJiYganBlcklzRXJyb3Io anBlcikpCisJeworCQkqZXJyb3IgPSB0cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJY291bnQgPSBKc29uVmFsdWVMaXN0TGVuZ3RoKCZmb3VuZCk7CisKKwkq ZW1wdHkgPSAoY291bnQgPT0gMCk7CisKKwlpZiAoKmVtcHR5KQorCQlyZXR1cm4gTlVMTDsKKwor CWlmIChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9NT1JFX1RIQU5fT05FX1NRTF9KU09OX0lURU0pLAorCQkJCSBlcnJtc2coIkpTT04g cGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2Nh bGFyIGl0ZW0iKSkpOworCX0KKworCXJlcyA9IEpzb25WYWx1ZUxpc3RIZWFkKCZmb3VuZCk7CisK KwlpZiAocmVzLT50eXBlID09IGpidkJpbmFyeSAmJgorCQlKc29uQ29udGFpbmVySXNTY2FsYXIo cmVzLT52YWwuYmluYXJ5LmRhdGEpKQorCQlKc29uYkV4dHJhY3RTY2FsYXIocmVzLT52YWwuYmlu YXJ5LmRhdGEsIHJlcyk7CisKKwlpZiAoIUlzQUpzb25iU2NhbGFyKHJlcykpCisJeworCQlpZiAo ZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9TUUxfSlNPTl9TQ0FMQVJfUkVR VUlSRUQpLAorCQkJCSBlcnJtc2coIkpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUg c2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2NhbGFyIGl0ZW0iKSkpOworCX0KKworCWlmIChyZXMt PnR5cGUgPT0gamJ2TnVsbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcmVzOworfQorCitz dGF0aWMgdm9pZAorSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0oSnNvbmJWYWx1ZSAqamJ2LCBE YXR1bSBudW0pCit7CisJamJ2LT50eXBlID0gamJ2TnVtZXJpYzsKKwlqYnYtPnZhbC5udW1lcmlj ID0gRGF0dW1HZXROdW1lcmljKG51bSk7Cit9CisKK3ZvaWQKK0pzb25JdGVtRnJvbURhdHVtKERh dHVtIHZhbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzb25iVmFsdWUgKnJlcykKK3sKKwlz d2l0Y2ggKHR5cGlkKQorCXsKKwkJY2FzZSBCT09MT0lEOgorCQkJcmVzLT50eXBlID0gamJ2Qm9v bDsKKwkJCXJlcy0+dmFsLmJvb2xlYW4gPSBEYXR1bUdldEJvb2wodmFsKTsKKwkJCWJyZWFrOwor CQljYXNlIE5VTUVSSUNPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMsIHZh bCk7CisJCQlicmVhazsKKwkJY2FzZSBJTlQyT0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmlj RGF0dW0ocmVzLCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDJfbnVtZXJpYywgdmFsKSk7CisJCQli cmVhazsKKwkJY2FzZSBJTlQ0T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVz LCBEaXJlY3RGdW5jdGlvbkNhbGwxKGludDRfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsKKwkJ Y2FzZSBJTlQ4T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJlY3RG dW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSBGTE9B VDRPSUQ6CisJCQlKc29uYlZhbHVlSW5pdE51bWVyaWNEYXR1bShyZXMsIERpcmVjdEZ1bmN0aW9u Q2FsbDEoZmxvYXQ0X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJCWNhc2UgRkxPQVQ4T0lE OgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJlY3RGdW5jdGlvbkNhbGwx KGZsb2F0OF9udW1lcmljLCB2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIFRFWFRPSUQ6CisJCWNh c2UgVkFSQ0hBUk9JRDoKKwkJCXJlcy0+dHlwZSA9IGpidlN0cmluZzsKKwkJCXJlcy0+dmFsLnN0 cmluZy52YWwgPSBWQVJEQVRBX0FOWSh2YWwpOworCQkJcmVzLT52YWwuc3RyaW5nLmxlbiA9IFZB UlNJWkVfQU5ZX0VYSERSKHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBEQVRFT0lEOgorCQljYXNl IFRJTUVPSUQ6CisJCWNhc2UgVElNRVRaT0lEOgorCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJY2Fz ZSBUSU1FU1RBTVBUWk9JRDoKKwkJCXJlcy0+dHlwZSA9IGpidkRhdGV0aW1lOworCQkJcmVzLT52 YWwuZGF0ZXRpbWUudmFsdWUgPSB2YWw7CisJCQlyZXMtPnZhbC5kYXRldGltZS50eXBpZCA9IHR5 cGlkOworCQkJcmVzLT52YWwuZGF0ZXRpbWUudHlwbW9kID0gdHlwbW9kOworCQkJcmVzLT52YWwu ZGF0ZXRpbWUudHogPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSlNPTkJPSUQ6CisJCQl7CisJCQkJ SnNvbmJWYWx1ZSAqamJ2ID0gcmVzOworCQkJCUpzb25iCSAgICpqYiA9IERhdHVtR2V0SnNvbmJQ KHZhbCk7CisKKwkJCQlpZiAoSnNvbkNvbnRhaW5lcklzU2NhbGFyKCZqYi0+cm9vdCkpCisJCQkJ eworCQkJCQlib29sCQlyZXN1bHQgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCisJCQkJCXJl c3VsdCA9IEpzb25iRXh0cmFjdFNjYWxhcigmamItPnJvb3QsIGpidik7CisJCQkJCUFzc2VydChy ZXN1bHQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCUpzb25iSW5pdEJpbmFyeShqYnYsIGpiKTsK KwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBKU09OT0lEOgorCQkJeworCQkJCXRleHQJICAgKnR4 dCA9IERhdHVtR2V0VGV4dFAodmFsKTsKKwkJCQljaGFyCSAgICpzdHIgPSB0ZXh0X3RvX2NzdHJp bmcodHh0KTsKKwkJCQlKc29uYgkgICAqamI7CisKKwkJCQlqYiA9IERhdHVtR2V0SnNvbmJQKERp cmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sCisJCQkJCQkJCQkJCQkJCUNTdHJpbmdHZXREYXR1 bShzdHIpKSk7CisJCQkJcGZyZWUoc3RyKTsKKworCQkJCUpzb25JdGVtRnJvbURhdHVtKEpzb25i UEdldERhdHVtKGpiKSwgSlNPTkJPSUQsIC0xLCByZXMpOworCQkJCWJyZWFrOworCQkJfQorCQlk ZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm9ubHkgZGF0ZXRpbWUsIGJvb2wsIG51 bWVyaWMsIGFuZCB0ZXh0IHR5cGVzIGNhbiBiZSBjYXN0ZWQgdG8ganNvbnBhdGggdHlwZXMiKSkp OworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCA4ZDVlYWM0NzkxLi5kMjBi OTY3ODBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC00NzYsNiArNDc2LDggQEAg c3RhdGljIHZvaWQgZ2V0X2NvbnN0X2V4cHIoQ29uc3QgKmNvbnN0dmFsLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQsCiAJCQkJCQkgICBpbnQgc2hvd3R5cGUpOwogc3RhdGljIHZvaWQgZ2V0X2Nv bnN0X2NvbGxhdGlvbihDb25zdCAqY29uc3R2YWwsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7 CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9mb3JtYXQoSnNvbkZvcm1hdCAqZm9ybWF0LCBTdHJpbmdJ bmZvIGJ1Zik7CitzdGF0aWMgdm9pZCBnZXRfanNvbl9yZXR1cm5pbmcoSnNvblJldHVybmluZyAq cmV0dXJuaW5nLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBib29sIGpzb25fZm9ybWF0X2J5 X2RlZmF1bHQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25fY29uc3RydWN0b3IoSnNvbkNvbnN0cnVj dG9yRXhwciAqY3RvciwKIAkJCQkJCQkJIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBz aG93aW1wbGljaXQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25fY29uc3RydWN0b3Jfb3B0aW9ucyhK c29uQ29uc3RydWN0b3JFeHByICpjdG9yLApAQCAtNTE4LDYgKzUyMCw4IEBAIHN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAq c3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKIHN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlv bnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVm LCBEYXR1bSByZWxvcHRpb25zKTsKK3N0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2Rl ICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkgICBib29sIHNo b3dpbXBsaWNpdCk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAi IiA6ICJPTkxZICIpCiAKQEAgLTgzMDAsNiArODMwNCw3IEBAIGlzU2ltcGxlTm9kZShOb2RlICpu b2RlLCBOb2RlICpwYXJlbnROb2RlLCBpbnQgcHJldHR5RmxhZ3MpCiAJCWNhc2UgVF9XaW5kb3dG dW5jOgogCQljYXNlIFRfRnVuY0V4cHI6CiAJCWNhc2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgor CQljYXNlIFRfSnNvbkV4cHI6CiAJCQkvKiBmdW5jdGlvbi1saWtlOiBuYW1lKC4uKSBvciBuYW1l Wy4uXSAqLwogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTg0NzEsNiArODQ3Niw3IEBAIGlzU2ltcGxl Tm9kZShOb2RlICpub2RlLCBOb2RlICpwYXJlbnROb2RlLCBpbnQgcHJldHR5RmxhZ3MpCiAJCQkJ Y2FzZSBUX0dyb3VwaW5nRnVuYzoJLyogb3duIHBhcmVudGhlc2VzICovCiAJCQkJY2FzZSBUX1dp bmRvd0Z1bmM6CS8qIG93biBwYXJlbnRoZXNlcyAqLwogCQkJCWNhc2UgVF9DYXNlRXhwcjoJLyog b3RoZXIgc2VwYXJhdG9ycyAqLworCQkJCWNhc2UgVF9Kc29uRXhwcjoJLyogb3duIHBhcmVudGhl c2VzICovCiAJCQkJCXJldHVybiB0cnVlOwogCQkJCWRlZmF1bHQ6CiAJCQkJCXJldHVybiBmYWxz ZTsKQEAgLTg1ODYsNiArODU5Miw2NSBAQCBnZXRfcnVsZV9leHByX3BhcmVuKE5vZGUgKm5vZGUs IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKScpOwogfQogCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fYmVoYXZpb3IoSnNvbkJl aGF2aW9yICpiZWhhdmlvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAorCQkJCSAgY29uc3Qg Y2hhciAqb24pCit7CisJLyoKKwkgKiBUaGUgb3JkZXIgb2YgYXJyYXkgZWxlbWVudHMgbXVzdCBj b3JyZXNwb25kIHRvIHRoZSBvcmRlciBvZgorCSAqIEpzb25CZWhhdmlvclR5cGUgbWVtYmVycy4K KwkgKi8KKwljb25zdCBjaGFyICpiZWhhdmlvcl9uYW1lc1tdID0KKwl7CisJCSIgTlVMTCIsCisJ CSIgRVJST1IiLAorCQkiIEVNUFRZIiwKKwkJIiBUUlVFIiwKKwkJIiBGQUxTRSIsCisJCSIgVU5L Tk9XTiIsCisJCSIgRU1QVFkgQVJSQVkiLAorCQkiIEVNUFRZIE9CSkVDVCIsCisJCSIgREVGQVVM VCAiCisJfTsKKworCWlmICgoaW50KSBiZWhhdmlvci0+YnR5cGUgPCAwIHx8IGJlaGF2aW9yLT5i dHlwZSA+PSBsZW5ndGhvZihiZWhhdmlvcl9uYW1lcykpCisJCWVsb2coRVJST1IsICJpbnZhbGlk IGpzb24gYmVoYXZpb3IgdHlwZTogJWQiLCBiZWhhdmlvci0+YnR5cGUpOworCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIGJlaGF2aW9yX25hbWVzW2JlaGF2aW9yLT5idHlw ZV0pOworCisJaWYgKGJlaGF2aW9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0RFRkFVTFQpCisJ CWdldF9ydWxlX2V4cHIoYmVoYXZpb3ItPmRlZmF1bHRfZXhwciwgY29udGV4dCwgZmFsc2UpOwor CisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgT04gJXMiLCBvbik7Cit9CisKKy8q CisgKiBnZXRfanNvbl9leHByX29wdGlvbnMKKyAqCisgKiBQYXJzZSBiYWNrIGNvbW1vbiBvcHRp b25zIGZvciBKU09OX1FVRVJZLCBKU09OX1ZBTFVFLCBKU09OX0VYSVNUUy4KKyAqLworc3RhdGlj IHZvaWQKK2dldF9qc29uX2V4cHJfb3B0aW9ucyhKc29uRXhwciAqanNleHByLCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQsCisJCQkJCSAgSnNvbkJlaGF2aW9yVHlwZSBkZWZhdWx0X2JlaGF2aW9y KQoreworCWlmIChqc2V4cHItPm9wID09IEpTT05fUVVFUllfT1ApCisJeworCQlpZiAoanNleHBy LT53cmFwcGVyID09IEpTV19DT05ESVRJT05BTCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC0+YnVmLCAiIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiIpOworCQllbHNlIGlmIChqc2V4cHIt PndyYXBwZXIgPT0gSlNXX1VOQ09ORElUSU9OQUwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRl eHQtPmJ1ZiwgIiBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBFUiIpOworCisJCWlmIChqc2V4cHIt Pm9taXRfcXVvdGVzKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgT01JVCBR VU9URVMiKTsKKwl9CisKKwlpZiAoanNleHByLT5vcCAhPSBKU09OX0VYSVNUU19PUCAmJgorCQlq c2V4cHItPm9uX2VtcHR5LT5idHlwZSAhPSBkZWZhdWx0X2JlaGF2aW9yKQorCQlnZXRfanNvbl9i ZWhhdmlvcihqc2V4cHItPm9uX2VtcHR5LCBjb250ZXh0LCAiRU1QVFkiKTsKKworCWlmIChqc2V4 cHItPm9uX2Vycm9yLT5idHlwZSAhPSBkZWZhdWx0X2JlaGF2aW9yKQorCQlnZXRfanNvbl9iZWhh dmlvcihqc2V4cHItPm9uX2Vycm9yLCBjb250ZXh0LCAiRVJST1IiKTsKK30KIAogLyogLS0tLS0t LS0tLQogICogZ2V0X3J1bGVfZXhwcgkJCS0gUGFyc2UgYmFjayBhbiBleHByZXNzaW9uCkBAIC05 NzQ1LDYgKzk4MTAsNyBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisKIAkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6 CiAJCQl7CiAJCQkJSnNvblZhbHVlRXhwciAqanZlID0gKEpzb25WYWx1ZUV4cHIgKikgbm9kZTsK QEAgLTk3OTQsNiArOTg2MCw2NCBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisJCWNhc2UgVF9Kc29uRXhwcjoK KwkJCXsKKwkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29uRXhwciAqKSBub2RlOworCisJCQkJ c3dpdGNoIChqZXhwci0+b3ApCisJCQkJeworCQkJCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX0VYSVNUUygiKTsKKwkJCQkJCWJy ZWFrOworCQkJCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIkpTT05fUVVFUlkoIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBKU09OX1ZB TFVFX09QOgorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09OX1ZBTFVFKCIp OworCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZ2V0X3J1bGVfZXhwcihqZXhwci0+Zm9ybWF0 dGVkX2V4cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgIiwgIik7CisKKwkJCQlnZXRfanNvbl9wYXRoX3NwZWMoamV4cHItPnBhdGhf c3BlYywgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJCWlmIChqZXhwci0+cGFzc2luZ192 YWx1ZXMpCisJCQkJeworCQkJCQlMaXN0Q2VsbCAgICpsYzEsCisJCQkJCQkJICAgKmxjMjsKKwkJ CQkJYm9vbAkJbmVlZGNvbW1hID0gZmFsc2U7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICIgUEFTU0lORyAiKTsKKworCQkJCQlmb3Jib3RoKGxjMSwgamV4cHItPnBhc3Npbmdf bmFtZXMsCisJCQkJCQkJbGMyLCBqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCQkJCXsKKwkJCQkJ CWlmIChuZWVkY29tbWEpCisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIp OworCQkJCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKworCQkJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAq KSBsZmlyc3QobGMyKSwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwkJCQkJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiIEFTICVzIiwKKwkJCQkJCQkJCQkgKChTdHJpbmcgKikgbGZpcnN0X25vZGUo U3RyaW5nLCBsYzEpKS0+c3ZhbCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoamV4cHItPm9w ICE9IEpTT05fRVhJU1RTX09QIHx8CisJCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJP T0xPSUQpCisJCQkJCWdldF9qc29uX3JldHVybmluZyhqZXhwci0+cmV0dXJuaW5nLCBjb250ZXh0 LT5idWYsCisJCQkJCQkJCQkgICBqZXhwci0+b3AgPT0gSlNPTl9RVUVSWV9PUCk7CisKKwkJCQln ZXRfanNvbl9leHByX29wdGlvbnMoamV4cHIsIGNvbnRleHQsCisJCQkJCQkJCQkgIGpleHByLT5v cCAhPSBKU09OX0VYSVNUU19PUCA/CisJCQkJCQkJCQkgIEpTT05fQkVIQVZJT1JfTlVMTCA6CisJ CQkJCQkJCQkgIEpTT05fQkVIQVZJT1JfRkFMU0UpOworCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICIpIik7CisJCQl9CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdDoKIAkJCXsK IAkJCQljaGFyCSAgICpzZXA7CkBAIC05OTE3LDYgKzEwMDQxLDcgQEAgbG9va3NfbGlrZV9mdW5j dGlvbihOb2RlICpub2RlKQogCQljYXNlIFRfTWluTWF4RXhwcjoKIAkJY2FzZSBUX1NRTFZhbHVl RnVuY3Rpb246CiAJCWNhc2UgVF9YbWxFeHByOgorCQljYXNlIFRfSnNvbkV4cHI6CiAJCQkvKiB0 aGVzZSBhcmUgYWxsIGFjY2VwdGVkIGJ5IGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwciAqLwogCQkJ cmV0dXJuIHRydWU7CiAJCWRlZmF1bHQ6CkBAIC0xMDc3Niw2ICsxMDkwMSwxOCBAQCBnZXRfY29u c3RfY29sbGF0aW9uKENvbnN0ICpjb25zdHZhbCwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQog CX0KIH0KIAorLyoKKyAqIGdldF9qc29uX3BhdGhfc3BlYwkJLSBQYXJzZSBiYWNrIGEgSlNPTiBw YXRoIHNwZWNpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX3BhdGhfc3BlYyhO b2RlICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGlj aXQpCit7CisJaWYgKElzQShwYXRoX3NwZWMsIENvbnN0KSkKKwkJZ2V0X2NvbnN0X2V4cHIoKENv bnN0ICopIHBhdGhfc3BlYywgY29udGV4dCwgLTEpOworCWVsc2UKKwkJZ2V0X3J1bGVfZXhwcihw YXRoX3NwZWMsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9CisKIC8qCiAgKiBnZXRfanNvbl9m b3JtYXQJCQktIFBhcnNlIGJhY2sgYSBKc29uRm9ybWF0IG5vZGUKICAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmgKaW5kZXggNTlmM2IwNDNjNi4uMWU5NWEzYWIyMiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj RXhwci5oCkBAIC0yMyw2ICsyMyw4IEBAIHN0cnVjdCBFeHByRXZhbFN0ZXA7CiBzdHJ1Y3QgU3Vi c2NyaXB0aW5nUmVmU3RhdGU7CiBzdHJ1Y3QgU2NhbGFyQXJyYXlPcEV4cHJIYXNoVGFibGU7CiBz dHJ1Y3QgSnNvbkNvbnN0cnVjdG9yRXhwclN0YXRlOworc3RydWN0IEpzb25iVmFsdWU7CitzdHJ1 Y3QgSnNvbkV4cHJTdGF0ZTsKIAogLyogQml0cyBpbiBFeHByU3RhdGUtPmZsYWdzIChzZWUgYWxz byBleGVjbm9kZXMuaCBmb3IgcHVibGljIGZsYWcgYml0cyk6ICovCiAvKiBleHByZXNzaW9uJ3Mg aW50ZXJwcmV0ZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8KQEAgLTIzOSw2ICsyNDEsMTEgQEAg dHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX1hNTEVYUFIsCiAJRUVPUF9KU09OX0NPTlNU UlVDVE9SLAogCUVFT1BfSVNfSlNPTiwKKwlFRU9QX0pTT05FWFBSX1NLSVAsCisJRUVPUF9KU09O RVhQUl9QQVRILAorCUVFT1BfSlNPTkVYUFJfQkVIQVZJT1IsCisJRUVPUF9KU09ORVhQUl9DT0VS Q0lPTiwKKwlFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCwKIAlFRU9QX0FHR1JFRiwKIAlF RU9QX0dST1VQSU5HX0ZVTkMsCiAJRUVPUF9XSU5ET1dfRlVOQywKQEAgLTY5Miw2ICs2OTksNTcg QEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJCQlKc29uSXNQcmVkaWNhdGUgKnByZWQ7 CS8qIG9yaWdpbmFsIGV4cHJlc3Npb24gbm9kZSAqLwogCQl9CQkJaXNfanNvbjsKIAorCQkvKiBm b3IgRUVPUF9KU09ORVhQUl9QQVRIICovCisJCXN0cnVjdAorCQl7CisJCQlzdHJ1Y3QgSnNvbkV4 cHJTdGF0ZSAqanNlc3RhdGU7CisJCX0JCQlqc29uZXhwcjsKKworCQkvKiBmb3IgRUVPUF9KU09O RVhQUl9TS0lQICovCisJCXN0cnVjdAorCQl7CisJCQkvKiBTYW1lIGFzIGpzb25leHByLmpzZXN0 YXRlICovCisJCQlzdHJ1Y3QgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CisKKwkJCS8qIFNlZSBF eGVjRXZhbEpzb25FeHByU2tpcCgpICovCisJCQlpbnQJCQlqdW1wX2NvZXJjaW9uOworCQkJaW50 CQkJanVtcF9wYXNzaW5nX2FyZ3M7CisJCX0JCQlqc29uZXhwcl9za2lwOworCisJCS8qIGZvciBF RU9QX0pTT05FWFBSX0JFSEFWSU9SICovCisJCXN0cnVjdAorCQl7CisJCQkvKiBTYW1lIGFzIGpz b25leHByLmpzZXN0YXRlICovCisJCQlzdHJ1Y3QgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CisK KwkJCS8qIFNlZSBFeGVjRXZhbEpzb25FeHByQmVoYXZpb3IoKSAqLworCQkJaW50CQkJanVtcF9v bmVycm9yX2V4cHI7CisJCQlpbnQJCQlqdW1wX29uZW1wdHlfZXhwcjsKKwkJCWludAkJCWp1bXBf Y29lcmNpb247CisJCQlpbnQJCQlqdW1wX3NraXBfY29lcmNpb247CisJCX0JCQlqc29uZXhwcl9i ZWhhdmlvcjsKKworCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9DT0VSQ0lPTiAqLworCQlzdHJ1Y3QK KwkJeworCQkJLyogU2FtZSBhcyBqc29uZXhwci5qc2VzdGF0ZSAqLworCQkJc3RydWN0IEpzb25F eHByU3RhdGUgKmpzZXN0YXRlOworCisJCQkvKiBTZWUgRXhlY0V2YWxKc29uRXhwckNvZXJjaW9u KCkgKi8KKwkJCWludAkJCWp1bXBfY29lcmNpb25fZXJyb3I7CisJCQlpbnQJCQlqdW1wX2NvZXJj aW9uX2RvbmU7CisJCX0JCQlqc29uZXhwcl9jb2VyY2lvbjsKKworCQkvKiBmb3IgRUVPUF9KU09O RVhQUl9DT0VSQ0lPTl9GSU5JU0ggKi8KKwkJc3RydWN0CisJCXsKKwkJCS8qIFNhbWUgYXMganNv bmV4cHIuanNlc3RhdGUgKi8KKwkJCXN0cnVjdCBKc29uRXhwclN0YXRlICpqc2VzdGF0ZTsKKwor CQkJLyogU2VlIEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbigpICovCisJCQlpbnQJCQlqdW1wX2Nv ZXJjaW9uX2Vycm9yOworCQkJaW50CQkJanVtcF9jb2VyY2lvbl9kb25lOworCQl9CQkJanNvbmV4 cHJfY29lcmNpb25fZmluaXNoOwogCX0JCQlkOwogfSBFeHByRXZhbFN0ZXA7CiAKQEAgLTc1NSw2 ICs4MTMsODUgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkNvbnN0cnVjdG9yRXhwclN0YXRlCiAJaW50 CQkJbmFyZ3M7CiB9IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZTsKIAorLyoKKyAqIEluZm9ybWF0 aW9uIGNvbXB1dGVkIGJlZm9yZSBldmFsdWF0aW5nIEVFT1BfSlNPTkVYUFJfUEFUSCBzdGVwLgor ICovCit0eXBlZGVmIHN0cnVjdCBKc29uRXhwclByZUV2YWxTdGF0ZQoreworCS8qIHZhbHVlL2lz bnVsbCBmb3IgSnNvbkV4cHIuZm9ybWF0dGVkX2V4cHIgKi8KKwlOdWxsYWJsZURhdHVtIGZvcm1h dHRlZF9leHByOworCisJLyogdmFsdWUvaXNudWxsIGZvciBKc29uRXhwci5wYXRoc3BlYyAqLwor CU51bGxhYmxlRGF0dW0gcGF0aHNwZWM7CisKKwkvKiBKc29uUGF0aFZhcmlhYmxlIGVudHJpZXMg Zm9yIEpzb25FeHByLnBhc3NpbmdfdmFsdWVzICovCisJTGlzdAkgICAqYXJnczsKK30gSnNvbkV4 cHJQcmVFdmFsU3RhdGU7CisKKy8qCisgKiBTdGF0ZSBmb3IgZXZhbHVhdGluZyBhIGdpdmVuIEpz b25Db2VyY2lvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkNvZXJjaW9uU3RhdGUKK3sKKwkv KiBFeHByZXNzaW9uIHVzZWQgdG8gZXZhbHVhdGUgdGhlIGNvZXJjaW9uICovCisJSnNvbkNvZXJj aW9uICpjb2VyY2lvbjsKKworCS8qIEV4cHJFdmFsU3RlcCB0byBjb21wdXRlIHRoaXMgY29lcmNp b24ncyBleHByZXNzaW9uICovCisJaW50CQkJanVtcF9ldmFsX2V4cHI7CisKKwkvKiBGb3IgcGFz c2luZyB0byBFRU9QX0lPQ09FUkNFIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgZXhwcmVz c2lvbiAqLworCUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0OworfSBKc29uQ29lcmNpb25TdGF0 ZTsKKworLyoKKyAqIEluZm9ybWF0aW9uIG5lZWRlZCBieSBFRU9QX0pTT05FWFBSX0JFSEFWSU9S IGFuZCBFRU9QX0pTT05FWFBSX0NPRVJDSU9OCisgKiBzdGVwcy4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgSnNvbkV4cHJQb3N0RXZhbFN0YXRlCit7CisJLyogSXMgSlNPTiBpdGVtIGVtcHR5PyAqLwor CWJvb2wJCWVtcHR5OworCisJLyogRGlkIEpTT04gaXRlbSBldmFsdWF0aW9uIGNhdXNlIGFuIGVy cm9yPyAqLworCWJvb2wJCWVycm9yOworCisJLyogQ2FjaGUgZm9yIGpzb25fcG9wdWxhdGVfdHlw ZSgpIGNhbGxlZCBmb3IgY29lcmNpb24gaW4gc29tZSBjYXNlcyAqLworCXZvaWQJICAgKmNhY2hl OworCisJLyoKKwkgKiBTdGF0ZSBmb3IgY29lcmNpbmcgdGhlIHJlc3VsdCBvZiBFeGVjRXZhbEpz b25FeHByIHRvIHRoZSBkZXNpcmVkIHRhcmdldAorCSAqIHR5cGUuICAnamNzdGF0ZScgZWl0aGVy IHBvaW50cyB0byBKc29uRXhwclN0YXRlLnJlc3VsdF9jb2VyY2lvbiBvciBvbmUKKwkgKiBvZiB0 aGUgZW50cmllcyBpbiBKc29uRXhwclN0YXRlLml0ZW1famNzdGF0ZXMgY2hvc2VuIGJ5CisJICog RXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKCkgaW4gdGhlIGNhc2Ugb2YgSlNPTl9WQUxVRS4K KwkgKi8KKwlKc29uQ29lcmNpb25TdGF0ZSAqamNzdGF0ZTsKKwlib29sCQljb2VyY2luZ19iZWhh dmlvcl9leHByOyAvKiBhIGhhY2sgZm9yIEpTT05fUVVFUllfT1AgKi8KKwlib29sCQljb2VyY2lv bl9lcnJvcjsgLyogZXJyb3Igd2hlbiBjb2VyY2luZyAqLworCWJvb2wJCWNvZXJjaW9uX2RvbmU7 Cit9IEpzb25FeHByUG9zdEV2YWxTdGF0ZTsKKworLyogU3RhdGUgZm9yIGV2YWx1YXRpbmcgYSBK c29uRXhwciwgdG9vIGJpZyB0byBpbmxpbmUgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25FeHByU3Rh dGUKK3sKKwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8KKwlKc29uRXhwciAgICpqc2V4 cHI7CisKKwlKc29uRXhwclByZUV2YWxTdGF0ZSBwcmVfZXZhbDsKKwlKc29uRXhwclBvc3RFdmFs U3RhdGUgcG9zdF9ldmFsOworCisJc3RydWN0CisJeworCQlGbWdySW5mbyAgICpmaW5mbzsJCS8q IHR5cGlucHV0IGZ1bmN0aW9uIGZvciBvdXRwdXQgdHlwZSAqLworCQlPaWQJCQl0eXBpb3BhcmFt OworCX0JCQlpbnB1dDsJCQkvKiBJL08gaW5mbyBmb3Igb3V0cHV0IHR5cGUgKi8KKworCS8qCisJ ICogRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uKCkgY2hvb3NlcyBlaXRoZXIgcmVzdWx0X2pjc3Rh dGUgb3Igb25lIGZyb20KKwkgKiBpdGVtX2pjc3RhdGVzIHRvIGFwcGx5IGNvZXJjaW9uIHRvIHRo ZSBmaW5hbCByZXN1bHQgaWYgbmVlZGVkLgorCSAqLworCUpzb25Db2VyY2lvblN0YXRlICpyZXN1 bHRfamNzdGF0ZTsKKwlMaXN0CSAgICppdGVtX2pjc3RhdGVzOwkvKiBMaXN0IG9mIEpzb25Db2Vy Y2lvblN0YXRlICovCit9IEpzb25FeHByU3RhdGU7CiAKIC8qIGZ1bmN0aW9ucyBpbiBleGVjRXhw ci5jICovCiBleHRlcm4gdm9pZCBFeHByRXZhbFB1c2hTdGVwKEV4cHJTdGF0ZSAqZXMsIGNvbnN0 IEV4cHJFdmFsU3RlcCAqcyk7CkBAIC04MDgsNiArOTQ1LDE0IEBAIGV4dGVybiB2b2lkIEV4ZWNF dmFsWG1sRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKIGV4dGVybiB2 b2lkIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3Rl cCAqb3AsCiAJCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQpOwogZXh0ZXJuIHZvaWQgRXhl Y0V2YWxKc29uSXNQcmVkaWNhdGUoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7 CitleHRlcm4gaW50CUV4ZWNFdmFsSnNvbkV4cHJTa2lwKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJF dmFsU3RlcCAqb3ApOworZXh0ZXJuIGludAlFeGVjRXZhbEpzb25FeHByQmVoYXZpb3IoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CitleHRlcm4gaW50CUV4ZWNFdmFsSnNvbkV4 cHJDb2VyY2lvbihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAorCQkJCQkJCQkJ IEV4cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJCQkJCSBEYXR1bSByZXMsIGJvb2wgcmVzbnVs bCk7CitleHRlcm4gaW50CUV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbkZpbmlzaChFeHByU3RhdGUg KnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkV4cHIo RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCQkgRXhwckNvbnRleHQg KmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsR3JvdXBpbmdGdW5jKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxTdWJQbGFuKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJRXhwckNvbnRleHQgKmVj b250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZtZ3IuaCBiL3NyYy9pbmNsdWRlL2Zt Z3IuaAppbmRleCBiMTIwZjVlN2ZlLi45ZTcxODQ3OWY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9mbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvZm1nci5oCkBAIC04NSw2ICs4NSw3IEBAIHR5cGVk ZWYgc3RydWN0IEZtZ3JJbmZvCiB0eXBlZGVmIHN0cnVjdCBGdW5jdGlvbkNhbGxJbmZvQmFzZURh dGEKIHsKIAlGbWdySW5mbyAgICpmbGluZm87CQkJLyogcHRyIHRvIGxvb2t1cCBpbmZvIHVzZWQg Zm9yIHRoaXMgY2FsbCAqLworI2RlZmluZSBGSUVMRE5PX0ZVTkNUSU9OQ0FMTElORk9EQVRBX0NP TlRFWFQgMQogCWZtTm9kZVB0cgljb250ZXh0OwkJLyogcGFzcyBpbmZvIGFib3V0IGNvbnRleHQg b2YgY2FsbCAqLwogCWZtTm9kZVB0cglyZXN1bHRpbmZvOwkJLyogcGFzcyBvciByZXR1cm4gZXh0 cmEgaW5mbyBhYm91dCByZXN1bHQgKi8KIAlPaWQJCQlmbmNvbGxhdGlvbjsJLyogY29sbGF0aW9u IGZvciBmdW5jdGlvbiB0byB1c2UgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21h a2VmdW5jcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggMzE4MDcwMzAw NS4uYTg1MGExOTI4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTExMiw2ICsxMTIsNyBAQCBl eHRlcm4gSnNvbkZvcm1hdCAqbWFrZUpzb25Gb3JtYXQoSnNvbkZvcm1hdFR5cGUgdHlwZSwgSnNv bkVuY29kaW5nIGVuY29kaW5nLAogCQkJCQkJCQkgIGludCBsb2NhdGlvbik7CiBleHRlcm4gSnNv blZhbHVlRXhwciAqbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIgKmZvcm1h dHRlZF9leHByLAogCQkJCQkJCQkJCUpzb25Gb3JtYXQgKmZvcm1hdCk7CitleHRlcm4gSnNvbkJl aGF2aW9yICptYWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9kZSAqZXhw ciwgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBOb2RlICptYWtlSnNvbktleVZhbHVlKE5vZGUgKmtl eSwgTm9kZSAqdmFsdWUpOwogZXh0ZXJuIE5vZGUgKm1ha2VKc29uSXNQcmVkaWNhdGUoTm9kZSAq ZXhwciwgSnNvbkZvcm1hdCAqZm9ybWF0LAogCQkJCQkJCQkgSnNvblZhbHVlVHlwZSBpdGVtX3R5 cGUsIGJvb2wgdW5pcXVlX2tleXMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggZjYzNzkzN2Nk Mi4uYzFmOWVmODQ0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMTcxNiw2ICsxNzE2LDIz IEBAIHR5cGVkZWYgc3RydWN0IFRyaWdnZXJUcmFuc2l0aW9uCiAKIC8qIE5vZGVzIGZvciBTUUwv SlNPTiBzdXBwb3J0ICovCiAKKy8qCisgKiBKc29uUXVvdGVzIC0KKyAqCQlyZXByZXNlbnRhdGlv biBvZiBbS0VFUHxPTUlUXSBRVU9URVMgY2xhdXNlIGZvciBKU09OX1FVRVJZKCkKKyAqLwordHlw ZWRlZiBlbnVtIEpzb25RdW90ZXMKK3sKKwlKU19RVU9URVNfVU5TUEVDLAkJCS8qIHVuc3BlY2lm aWVkICovCisJSlNfUVVPVEVTX0tFRVAsCQkJCS8qIEtFRVAgUVVPVEVTICovCisJSlNfUVVPVEVT X09NSVQJCQkJLyogT01JVCBRVU9URVMgKi8KK30gSnNvblF1b3RlczsKKworLyoKKyAqIEpzb25Q YXRoU3BlYyAtCisgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBwYXRoIGNvbnN0YW50CisgKi8K K3R5cGVkZWYgY2hhciAqSnNvblBhdGhTcGVjOworCiAvKgogICogSnNvbk91dHB1dCAtCiAgKgkJ cmVwcmVzZW50YXRpb24gb2YgSlNPTiBvdXRwdXQgY2xhdXNlIChSRVRVUk5JTkcgdHlwZSBbRk9S TUFUIGZvcm1hdF0pCkBAIC0xNzI3LDYgKzE3NDQsNDggQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbk91 dHB1dAogCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsJLyogUkVUVVJOSU5HIEZPUk1BVCBjbGF1 c2UgYW5kIHR5cGUgT2lkcyAqLwogfSBKc29uT3V0cHV0OwogCisvKgorICogSnNvbkFyZ3VtZW50 IC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBhcmd1bWVudCBmcm9tIEpTT04gUEFTU0lORyBjbGF1 c2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkFyZ3VtZW50Cit7CisJTm9kZVRhZwkJdHlwZTsK KwlKc29uVmFsdWVFeHByICp2YWw7CQkJLyogYXJndW1lbnQgdmFsdWUgZXhwcmVzc2lvbiAqLwor CWNoYXIJICAgKm5hbWU7CQkJLyogYXJndW1lbnQgbmFtZSAqLworfSBKc29uQXJndW1lbnQ7CisK Ky8qCisgKiBKc29uQ29tbW9uIC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBjb21tb24gc3ludGF4 IG9mIGZ1bmN0aW9ucyB1c2luZyBKU09OIHBhdGgKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkNv bW1vbgoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvblZhbHVlRXhwciAqZXhwcjsJCS8qIGNvbnRl eHQgaXRlbSBleHByZXNzaW9uICovCisJTm9kZQkgICAqcGF0aHNwZWM7CQkvKiBKU09OIHBhdGgg c3BlY2lmaWNhdGlvbiBleHByZXNzaW9uICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkvKiBwYXRo IG5hbWUsIGlmIGFueSAqLworCUxpc3QJICAgKnBhc3Npbmc7CQkvKiBsaXN0IG9mIFBBU1NJTkcg Y2xhdXNlIGFyZ3VtZW50cywgaWYgYW55ICovCisJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBs b2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLworfSBKc29uQ29tbW9uOworCisvKgorICogSnNv bkZ1bmNFeHByIC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT04gZnVu Y3Rpb24gZXhwcmVzc2lvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkZ1bmNFeHByCit7CisJ Tm9kZVRhZwkJdHlwZTsKKwlKc29uRXhwck9wCW9wOwkJCQkvKiBleHByZXNzaW9uIHR5cGUgKi8K KwlKc29uQ29tbW9uICpjb21tb247CQkJLyogY29tbW9uIHN5bnRheCAqLworCUpzb25PdXRwdXQg Km91dHB1dDsJCQkvKiBvdXRwdXQgY2xhdXNlLCBpZiBzcGVjaWZpZWQgKi8KKwlKc29uQmVoYXZp b3IgKm9uX2VtcHR5OwkJLyogT04gRU1QVFkgYmVoYXZpb3IsIGlmIHNwZWNpZmllZCAqLworCUpz b25CZWhhdmlvciAqb25fZXJyb3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciwgaWYgc3BlY2lmaWVk ICovCisJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8qIGFycmF5IHdyYXBwZXIgYmVoYXZpb3IgKEpT T05fUVVFUlkgb25seSkgKi8KKwlKc29uUXVvdGVzCXF1b3RlczsJCQkvKiBvbWl0IG9yIGtlZXAg cXVvdGVzPyAoSlNPTl9RVUVSWSBvbmx5KSAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4g bG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvbkZ1bmNFeHByOworCiAvKgogICog SnNvbktleVZhbHVlIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT04g b2JqZWN0IGtleS12YWx1ZSBwYWlyIGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCA2MGQ3MmE4 NzZiLi44ZjM3MjNlZjRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtMTU0NCw2ICsxNTQ0LDE3 IEBAIHR5cGVkZWYgc3RydWN0IFhtbEV4cHIKIAlpbnQJCQlsb2NhdGlvbjsKIH0gWG1sRXhwcjsK IAorLyoKKyAqIEpzb25FeHByT3AgLQorICoJCWVudW1lcmF0aW9uIG9mIEpTT04gZnVuY3Rpb25z IHVzaW5nIEpTT04gcGF0aAorICovCit0eXBlZGVmIGVudW0gSnNvbkV4cHJPcAoreworCUpTT05f VkFMVUVfT1AsCQkJCS8qIEpTT05fVkFMVUUoKSAqLworCUpTT05fUVVFUllfT1AsCQkJCS8qIEpT T05fUVVFUlkoKSAqLworCUpTT05fRVhJU1RTX09QCQkJCS8qIEpTT05fRVhJU1RTKCkgKi8KK30g SnNvbkV4cHJPcDsKKwogLyoKICAqIEpzb25FbmNvZGluZyAtCiAgKgkJcmVwcmVzZW50YXRpb24g b2YgSlNPTiBFTkNPRElORyBjbGF1c2UKQEAgLTE1NjgsNiArMTU3OSwzNyBAQCB0eXBlZGVmIGVu dW0gSnNvbkZvcm1hdFR5cGUKIAkJCQkJCQkJICoganNvbmIgKi8KIH0gSnNvbkZvcm1hdFR5cGU7 CiAKKy8qCisgKiBKc29uQmVoYXZpb3JUeXBlIC0KKyAqCQllbnVtZXJhdGlvbiBvZiBiZWhhdmlv ciB0eXBlcyB1c2VkIGluIEpTT04gT04gLi4uIEJFSEFWSU9SIGNsYXVzZQorICoKKyAqIAkJSWYg ZW51bSBtZW1iZXJzIGFyZSByZW9yZGVyZWQsIGdldF9qc29uX2JlaGF2aW9yKCkgZnJvbSBydWxl dXRpbHMuYworICogCQltdXN0IGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgKi8KK3R5cGVkZWYg ZW51bSBKc29uQmVoYXZpb3JUeXBlCit7CisJSlNPTl9CRUhBVklPUl9OVUxMID0gMCwKKwlKU09O X0JFSEFWSU9SX0VSUk9SLAorCUpTT05fQkVIQVZJT1JfRU1QVFksCisJSlNPTl9CRUhBVklPUl9U UlVFLAorCUpTT05fQkVIQVZJT1JfRkFMU0UsCisJSlNPTl9CRUhBVklPUl9VTktOT1dOLAorCUpT T05fQkVIQVZJT1JfRU1QVFlfQVJSQVksCisJSlNPTl9CRUhBVklPUl9FTVBUWV9PQkpFQ1QsCisJ SlNPTl9CRUhBVklPUl9ERUZBVUxUCit9IEpzb25CZWhhdmlvclR5cGU7CisKKy8qCisgKiBKc29u V3JhcHBlciAtCisgKgkJcmVwcmVzZW50YXRpb24gb2YgV1JBUFBFUiBjbGF1c2UgZm9yIEpTT05f UVVFUlkoKQorICovCit0eXBlZGVmIGVudW0gSnNvbldyYXBwZXIKK3sKKwlKU1dfTk9ORSwKKwlK U1dfQ09ORElUSU9OQUwsCisJSlNXX1VOQ09ORElUSU9OQUwsCit9IEpzb25XcmFwcGVyOworCiAv KgogICogSnNvbkZvcm1hdCAtCiAgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBGT1JNQVQgY2xh dXNlCkBAIC0xNjYyLDYgKzE3MDQsNzkgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbklzUHJlZGljYXRl CiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAq LwogfSBKc29uSXNQcmVkaWNhdGU7CiAKKy8qCisgKiBKc29uQmVoYXZpb3IgLQorICoJCXJlcHJl c2VudGF0aW9uIG9mIEpTT04gT04gRVJST1IgLyBFTVBUWSBjbGF1c2UKKyAqLwordHlwZWRlZiBz dHJ1Y3QgSnNvbkJlaGF2aW9yCit7CisJTm9kZVRhZwkJdHlwZTsKKwlKc29uQmVoYXZpb3JUeXBl IGJ0eXBlOwkJLyogYmVoYXZpb3IgdHlwZSAqLworCU5vZGUJICAgKmRlZmF1bHRfZXhwcjsJLyog ZGVmYXVsdCBleHByZXNzaW9uLCBpZiBhbnkgKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2Vu IGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25CZWhhdmlvcjsKKworLyoKKyAq IEpzb25Db2VyY2lvbiAtCisgKgkJY29lcmNpb24gZnJvbSBTUUwvSlNPTiBpdGVtIHR5cGVzIHRv IFNRTCB0eXBlcworICovCit0eXBlZGVmIHN0cnVjdCBKc29uQ29lcmNpb24KK3sKKwlOb2RlVGFn CQl0eXBlOworCU5vZGUJICAgKmV4cHI7CQkJLyogcmVzdWx0aW5nIGV4cHJlc3Npb24gY29lcmNl ZCB0byB0YXJnZXQgdHlwZSAqLworCWJvb2wJCXZpYV9wb3B1bGF0ZTsJLyogY29lcmNlIHJlc3Vs dCB1c2luZyBqc29uX3BvcHVsYXRlX3R5cGUoKT8gKi8KKwlib29sCQl2aWFfaW87CQkJLyogY29l cmNlIHJlc3VsdCB1c2luZyB0eXBlIGlucHV0IGZ1bmN0aW9uPyAqLworCU9pZAkJCWNvbGxhdGlv bjsJCS8qIGNvbGxhdGlvbiBmb3IgY29lcmNpb24gdmlhIEkvTyBvciBwb3B1bGF0ZSAqLworfSBK c29uQ29lcmNpb247CisKKy8qCisgKiBKc29uSXRlbVR5cGUKKyAqCQlSZXByZXNlbnRzIHR5cGUg Y29kZXMgdG8gaWRlbnRpZnkgYSBKc29uQ29lcmNpb24gbm9kZSB0byB1c2Ugd2hlbgorICoJCWNv ZXJjaW5nIGEgZ2l2ZW4gU1FML0pTT04gaXRlbXMgdG8gdGhlIG91dHB1dCBTUUwgdHlwZQorICoK KyAqIFRoZSBjb21tZW50IG5leHQgdG8gZWFjaCBpdGVtIHR5cGUgbWVudGlvbnMgdGhlIEpzb25i VmFsdWUuamJ2VHlwZSBvZiB0aGUKKyAqIHNvdXJjZSBKc29uYlZhbHVlIHZhbHVlIHRvIGJlIGNv ZXJjZWQgdXNpbmcgdGhlIGV4cHJlc3Npb24gaW4gdGhlCisgKiBKc29uQ29lcmNpb24gbm9kZS4K KyAqCisgKiBBbHNvLCBzZWUgSW5pdEpzb25JdGVtQ29lcmNpb25zKCkgYW5kIEV4ZWNQcmVwYXJl SnNvbkl0ZW1Db2VyY2lvbigpLgorICovCit0eXBlZGVmIGVudW0gSnNvbkl0ZW1UeXBlCit7CisJ SnNvbkl0ZW1UeXBlTnVsbCA9IDAsCQkvKiBqYnZOdWxsICovCisJSnNvbkl0ZW1UeXBlU3RyaW5n ID0gMSwJCS8qIGpidlN0cmluZyAqLworCUpzb25JdGVtVHlwZU51bWVyaWMgPSAyLAkvKiBqYnZO dW1lcmljICovCisJSnNvbkl0ZW1UeXBlQm9vbGVhbiA9IDMsCS8qIGpidkJvb2wgKi8KKwlKc29u SXRlbVR5cGVEYXRlID0gNCwJCS8qIGpidkRhdGV0aW1lOiBEQVRFT0lEICovCisJSnNvbkl0ZW1U eXBlVGltZSA9IDUsCQkvKiBqYnZEYXRldGltZTogVElNRU9JRCAqLworCUpzb25JdGVtVHlwZVRp bWV0eiA9IDYsCQkvKiBqYnZEYXRldGltZTogVElNRVRaT0lEICovCisJSnNvbkl0ZW1UeXBlVGlt ZXN0YW1wID0gNywJLyogamJ2RGF0ZXRpbWU6IFRJTUVTVEFNUE9JRCAqLworCUpzb25JdGVtVHlw ZVRpbWVzdGFtcHR6ID0gOCwJLyogamJ2RGF0ZXRpbWU6IFRJTUVTVEFNUFRaT0lEICovCisJSnNv bkl0ZW1UeXBlQ29tcG9zaXRlID0gOQkvKiBqYnZBcnJheSwgamJ2T2JqZWN0LCBqYnZCaW5hcnkg Ki8KK30gSnNvbkl0ZW1UeXBlOworCisvKgorICogSnNvbkV4cHIgLQorICoJCXRyYW5zZm9ybWVk IHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVkFMVUUoKSwgSlNPTl9RVUVSWSgpLCBKU09OX0VYSVNU UygpCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25FeHByCit7CisJRXhwcgkJeHByOworCUpzb25F eHByT3AJb3A7CQkJCS8qIGpzb24gZnVuY3Rpb24gSUQgKi8KKwlOb2RlCSAgICpmb3JtYXR0ZWRf ZXhwcjsgLyogZm9ybWF0dGVkIGNvbnRleHQgaXRlbSBleHByZXNzaW9uICovCisJSnNvbkNvZXJj aW9uICpyZXN1bHRfY29lcmNpb247CS8qIHJlc3VsdGluZyBjb2VyY2lvbiB0byBSRVRVUk5JTkcg dHlwZSAqLworCUpzb25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBjb250ZXh0IGl0ZW0gZm9ybWF0IChK U09OL0pTT05CKSAqLworCU5vZGUJICAgKnBhdGhfc3BlYzsJCS8qIEpTT04gcGF0aCBzcGVjaWZp Y2F0aW9uIGV4cHJlc3Npb24gKi8KKwlMaXN0CSAgICpwYXNzaW5nX25hbWVzOwkvKiBQQVNTSU5H IGFyZ3VtZW50IG5hbWVzICovCisJTGlzdAkgICAqcGFzc2luZ192YWx1ZXM7IC8qIFBBU1NJTkcg YXJndW1lbnQgdmFsdWVzICovCisJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOwkvKiBSRVRVUk5J TkcgY2xhdXNlIHR5cGUvZm9ybWF0IGluZm8gKi8KKwlKc29uQmVoYXZpb3IgKm9uX2VtcHR5OwkJ LyogT04gRU1QVFkgYmVoYXZpb3IgKi8KKwlKc29uQmVoYXZpb3IgKm9uX2Vycm9yOwkJLyogT04g RVJST1IgYmVoYXZpb3IgKi8KKwlMaXN0CSAgICppdGVtX2NvZXJjaW9uczsgLyogY29lcmNpb25z IGZvciBKU09OX1ZBTFVFICovCisJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8qIFdSQVBQRVIgZm9y IEpTT05fUVVFUlkgKi8KKwlib29sCQlvbWl0X3F1b3RlczsJLyogS0VFUC9PTUlUIFFVT1RFUyBm b3IgSlNPTl9RVUVSWSAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9y IC0xIGlmIHVua25vd24gKi8KK30gSnNvbkV4cHI7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAq IE51bGxUZXN0CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIv c3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IDU5ODRkY2ZhNGIuLjA5NTRkOWZjN2Ig MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVk ZS9wYXJzZXIva3dsaXN0LmgKQEAgLTkzLDYgKzkzLDcgQEAgUEdfS0VZV09SRCgiY29tbWl0Iiwg Q09NTUlULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJjb21t aXR0ZWQiLCBDT01NSVRURUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImNvbXByZXNzaW9uIiwgQ09NUFJFU1NJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoImNvbmN1cnJlbnRseSIsIENPTkNVUlJFTlRMWSwgVFlQRV9G VU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImNvbmRpdGlvbmFsIiwg Q09ORElUSU9OQUwsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImNvbmZpZ3VyYXRpb24iLCBDT05GSUdVUkFUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJjb25mbGljdCIsIENPTkZMSUNULCBVTlJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJjb25uZWN0aW9uIiwgQ09OTkVDVElPTiwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMTQ3LDExICsxNDgsMTMgQEAgUEdfS0VZ V09SRCgiZG91YmxlIiwgRE9VQkxFX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoImRyb3AiLCBEUk9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJlYWNoIiwgRUFDSCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgiZWxzZSIsIEVMU0UsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CitQR19LRVlXT1JEKCJlbXB0eSIsIEVNUFRZX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoImVuYWJsZSIsIEVOQUJMRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbmNvZGluZyIsIEVOQ09ESU5HLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbmNyeXB0ZWQiLCBFTkNSWVBURUQs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVuZCIsIEVORF9Q LCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW51bSIsIEVOVU1f UCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiZXJyb3IiLCBF UlJPUl9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlc2Nh cGUiLCBFU0NBUEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImV2ZW50IiwgRVZFTlQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImV4Y2VwdCIsIEVYQ0VQVCwgUkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCkBAIC0yMzMs MTAgKzIzNiwxNCBAQCBQR19LRVlXT1JEKCJqb2luIiwgSk9JTiwgVFlQRV9GVU5DX05BTUVfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb24iLCBKU09OLCBDT0xfTkFNRV9LRVlX T1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9hcnJheSIsIEpTT05fQVJSQVksIENP TF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX2FycmF5YWdnIiwg SlNPTl9BUlJBWUFHRywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQo Impzb25fZXhpc3RzIiwgSlNPTl9FWElTVFMsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJqc29uX29iamVjdCIsIEpTT05fT0JKRUNULCBDT0xfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9vYmplY3RhZ2ciLCBKU09OX09CSkVDVEFH RywgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImpzb25fcXVlcnki LCBKU09OX1FVRVJZLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi anNvbl9zY2FsYXIiLCBKU09OX1NDQUxBUiwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkK IFBHX0tFWVdPUkQoImpzb25fc2VyaWFsaXplIiwgSlNPTl9TRVJJQUxJWkUsIENPTF9OQU1FX0tF WVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJqc29uX3ZhbHVlIiwgSlNPTl9WQUxVRSwg Q09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImtlZXAiLCBLRUVQLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJrZXkiLCBLRVksIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImtleXMiLCBLRVlTLCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJsYWJlbCIsIExBQkVM LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0zMDIsNiArMzA5LDcgQEAgUEdf S0VZV09SRCgib2ZmIiwgT0ZGLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJvZmZzZXQiLCBPRkZTRVQsIFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdf S0VZV09SRCgib2lkcyIsIE9JRFMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoIm9sZCIsIE9MRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdf S0VZV09SRCgib21pdCIsIE9NSVQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoIm9uIiwgT04sIFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09S RCgib25seSIsIE9OTFksIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJvcGVyYXRvciIsIE9QRVJBVE9SLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBA IC0zNDQsNiArMzUyLDcgQEAgUEdfS0VZV09SRCgicHJvY2VkdXJlcyIsIFBST0NFRFVSRVMsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInByb2dyYW0iLCBQUk9H UkFNLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwdWJsaWNh dGlvbiIsIFBVQkxJQ0FUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJxdW90ZSIsIFFVT1RFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQ R19LRVlXT1JEKCJxdW90ZXMiLCBRVU9URVMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoInJhbmdlIiwgUkFOR0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoInJlYWQiLCBSRUFELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJyZWFsIiwgUkVBTCwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9M QUJFTCkKQEAgLTQxNCw2ICs0MjMsNyBAQCBQR19LRVlXT1JEKCJzdGRvdXQiLCBTVERPVVQsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN0b3JhZ2UiLCBTVE9S QUdFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzdG9yZWQi LCBTVE9SRUQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN0 cmljdCIsIFNUUklDVF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlX T1JEKCJzdHJpbmciLCBTVFJJTkdfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgic3RyaXAiLCBTVFJJUF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJzdWJzY3JpcHRpb24iLCBTVUJTQ1JJUFRJT04sIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInN1YnN0cmluZyIsIFNVQlNUUklORywg Q09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTQ0OSw2ICs0NTksNyBAQCBQR19LRVlX T1JEKCJ0eXBlcyIsIFRZUEVTX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBH X0tFWVdPUkQoInVlc2NhcGUiLCBVRVNDQVBFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJ1bmJvdW5kZWQiLCBVTkJPVU5ERUQsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInVuY29tbWl0dGVkIiwgVU5DT01NSVRURUQsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInVuY29uZGl0aW9uYWwi LCBVTkNPTkRJVElPTkFMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJ1bmVuY3J5cHRlZCIsIFVORU5DUllQVEVELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJ1bmlvbiIsIFVOSU9OLCBSRVNFUlZFRF9LRVlXT1JELCBBU19M QUJFTCkKIFBHX0tFWVdPUkQoInVuaXF1ZSIsIFVOSVFVRSwgUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaAppbmRleCAwY2FkM2EyNzA5Li45YTlhZTk3NTRl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5nLmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oCkBAIC0yOSw1ICsyOSw2IEBAIGV4dGVybiBjaGFyICph c2NfaW5pdGNhcChjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzKTsKIGV4dGVybiBEYXR1 bSBwYXJzZV9kYXRldGltZSh0ZXh0ICpkYXRlX3R4dCwgdGV4dCAqZm10LCBPaWQgY29sbGlkLCBi b29sIHN0cmljdCwKIAkJCQkJCQlPaWQgKnR5cGlkLCBpbnQzMiAqdHlwbW9kLCBpbnQgKnR6LAog CQkJCQkJCXN0cnVjdCBOb2RlICplc2NvbnRleHQpOworZXh0ZXJuIGJvb2wgZGF0ZXRpbWVfZm9y bWF0X2hhc190eihjb25zdCBjaGFyICpmbXRfc3RyKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9qc29uYi5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaAppbmRl eCA2NDlhMTY0NGYyLi5hYzI3OWVlNTM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9q c29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKQEAgLTQyMiw2ICs0MjIsOSBA QCBleHRlcm4gY2hhciAqSnNvbmJUb0NTdHJpbmcoU3RyaW5nSW5mbyBvdXQsIEpzb25iQ29udGFp bmVyICppbiwKIAkJCQkJCQlpbnQgZXN0aW1hdGVkX2xlbik7CiBleHRlcm4gY2hhciAqSnNvbmJU b0NTdHJpbmdJbmRlbnQoU3RyaW5nSW5mbyBvdXQsIEpzb25iQ29udGFpbmVyICppbiwKIAkJCQkJ CQkJICBpbnQgZXN0aW1hdGVkX2xlbik7CitleHRlcm4gSnNvbmIgKkpzb25iTWFrZUVtcHR5QXJy YXkodm9pZCk7CitleHRlcm4gSnNvbmIgKkpzb25iTWFrZUVtcHR5T2JqZWN0KHZvaWQpOworZXh0 ZXJuIGNoYXIgKkpzb25iVW5xdW90ZShKc29uYiAqamIpOwogZXh0ZXJuIGJvb2wgSnNvbmJFeHRy YWN0U2NhbGFyKEpzb25iQ29udGFpbmVyICpqYmMsIEpzb25iVmFsdWUgKnJlcyk7CiBleHRlcm4g Y29uc3QgY2hhciAqSnNvbmJUeXBlTmFtZShKc29uYlZhbHVlICp2YWwpOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25m dW5jcy5oCmluZGV4IGM2NzdhYzhmZjcuLmFiNTQzYjk0MjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2pzb25mdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5o CkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIEpTT05GVU5DU19ICiAKICNpbmNsdWRlICJjb21t b24vanNvbmFwaS5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbmIuaCIKIAogLyoKQEAgLTg3LDUgKzg4LDkgQEAgZXh0ZXJuIERhdHVtIGRhdHVtX3RvX2pz b24oRGF0dW0gdmFsLCBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwKIGV4dGVybiBEYXR1bSBk YXR1bV90b19qc29uYihEYXR1bSB2YWwsIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LAogCQkJ CQkJCU9pZCBvdXRmdW5jb2lkKTsKIGV4dGVybiBEYXR1bSBqc29uYl9mcm9tX3RleHQodGV4dCAq anMsIGJvb2wgdW5pcXVlX2tleXMpOworZXh0ZXJuIERhdHVtIGpzb25fcG9wdWxhdGVfdHlwZShE YXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwKKwkJCQkJCQkJT2lkIHR5cGlkLCBpbnQzMiB0 eXBtb2QsCisJCQkJCQkJCXZvaWQgKipjYWNoZSwgTWVtb3J5Q29udGV4dCBtY3h0LCBib29sICpp c251bGwsCisJCQkJCQkJCU5vZGUgKmVzY29udGV4dCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRo LmgKaW5kZXggZjAxODFlMDQ1Zi4uNWEzNzEzMzg0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCkBAIC0x Niw3ICsxNiw5IEBACiAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlz dC5oIgorI2luY2x1ZGUgIm5vZGVzL3ByaW1ub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25i LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNzLmgiCiAKIHR5cGVkZWYgc3RydWN0CiB7CkBA IC0xODQsNiArMTg2LDcgQEAgZXh0ZXJuIGJvb2wganNwR2V0Qm9vbChKc29uUGF0aEl0ZW0gKnYp OwogZXh0ZXJuIGNoYXIgKmpzcEdldFN0cmluZyhKc29uUGF0aEl0ZW0gKnYsIGludDMyICpsZW4p OwogZXh0ZXJuIGJvb2wganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJdGVtICp2LCBKc29u UGF0aEl0ZW0gKmZyb20sCiAJCQkJCQkJCSBKc29uUGF0aEl0ZW0gKnRvLCBpbnQgaSk7CitleHRl cm4gYm9vbCBqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZhcm5hbWVzLCBMaXN0 ICp2YXJleHBycyk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpqc3BPcGVyYXRpb25OYW1lKEpzb25Q YXRoSXRlbVR5cGUgdHlwZSk7CiAKQEAgLTI2MSw0ICsyNjQsMjggQEAgZXh0ZXJuIGJvb2wganNw Q29udmVydFJlZ2V4RmxhZ3ModWludDMyIHhmbGFncywgaW50ICpyZXN1bHQsCiAJCQkJCQkJCSBz dHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKIAogCisvKgorICogRXZhbHVhdGlvbiBvZiBqc29ucGF0 aAorICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxlIHBhc3NlZCBpbnRvIGpzb25wYXRoLiAqLwor dHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZQoreworCWNoYXIJICAgKm5hbWU7CisJT2lk CQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlEYXR1bQkJdmFsdWU7CisJYm9vbAkJaXNudWxs OworfSBKc29uUGF0aFZhcmlhYmxlOworCisvKiBTUUwvSlNPTiBpdGVtICovCitleHRlcm4gdm9p ZCBKc29uSXRlbUZyb21EYXR1bShEYXR1bSB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAor CQkJCQkJCSAgSnNvbmJWYWx1ZSAqcmVzKTsKKworZXh0ZXJuIGJvb2wgSnNvblBhdGhFeGlzdHMo RGF0dW0gamIsIEpzb25QYXRoICpwYXRoLCBib29sICplcnJvciwgTGlzdCAqdmFycyk7CitleHRl cm4gRGF0dW0gSnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBKc29uV3JhcHBl ciB3cmFwcGVyLAorCQkJCQkJICAgYm9vbCAqZW1wdHksIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJz KTsKK2V4dGVybiBKc29uYlZhbHVlICpKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAq anAsIGJvb2wgKmVtcHR5LAorCQkJCQkJCQkgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOworCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWls ZXIgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCmluZGV4IDQzNWMx MzllYzIuLmIyYWE0NGYzNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJv Yy9lY3BnLnRyYWlsZXIKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJh aWxlcgpAQCAtNjUxLDYgKzY1MSwzNCBAQCB2YXJfdHlwZToJc2ltcGxlX3R5cGUKIAkJCSQkLnR5 cGVfaW5kZXggPSBtbV9zdHJkdXAoIi0xIik7CiAJCQkkJC50eXBlX3NpemVvZiA9IE5VTEw7CiAJ CX0KKwkJfCBTVFJJTkdfUAorCQl7CisJCQlpZiAoSU5GT1JNSVhfTU9ERSkKKwkJCXsKKwkJCQkv KiBJbiBJbmZvcm1peCBtb2RlLCAic3RyaW5nIiBpcyBhdXRvbWF0aWNhbGx5IGEgdHlwZWRlZiAq LworCQkJCSQkLnR5cGVfZW51bSA9IEVDUEd0X3N0cmluZzsKKwkJCQkkJC50eXBlX3N0ciA9IG1t X3N0cmR1cCgiY2hhciIpOworCQkJCSQkLnR5cGVfZGltZW5zaW9uID0gbW1fc3RyZHVwKCItMSIp OworCQkJCSQkLnR5cGVfaW5kZXggPSBtbV9zdHJkdXAoIi0xIik7CisJCQkJJCQudHlwZV9zaXpl b2YgPSBOVUxMOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIE90aGVyd2lzZSwgbGVnYWwg b25seSBpZiB1c2VyIHR5cGVkZWYnZWQgaXQgKi8KKwkJCQlzdHJ1Y3QgdHlwZWRlZnMgKnRoaXMg PSBnZXRfdHlwZWRlZigic3RyaW5nIiwgZmFsc2UpOworCisJCQkJJCQudHlwZV9zdHIgPSAodGhp cy0+dHlwZS0+dHlwZV9lbnVtID09IEVDUEd0X3ZhcmNoYXIgfHwgdGhpcy0+dHlwZS0+dHlwZV9l bnVtID09IEVDUEd0X2J5dGVhKSA/IEVNUFRZIDogbW1fc3RyZHVwKHRoaXMtPm5hbWUpOworCQkJ CSQkLnR5cGVfZW51bSA9IHRoaXMtPnR5cGUtPnR5cGVfZW51bTsKKwkJCQkkJC50eXBlX2RpbWVu c2lvbiA9IHRoaXMtPnR5cGUtPnR5cGVfZGltZW5zaW9uOworCQkJCSQkLnR5cGVfaW5kZXggPSB0 aGlzLT50eXBlLT50eXBlX2luZGV4OworCQkJCWlmICh0aGlzLT50eXBlLT50eXBlX3NpemVvZiAm JiBzdHJsZW4odGhpcy0+dHlwZS0+dHlwZV9zaXplb2YpICE9IDApCisJCQkJCSQkLnR5cGVfc2l6 ZW9mID0gdGhpcy0+dHlwZS0+dHlwZV9zaXplb2Y7CisJCQkJZWxzZQorCQkJCQkkJC50eXBlX3Np emVvZiA9IGNhdF9zdHIoMywgbW1fc3RyZHVwKCJzaXplb2YoIiksIG1tX3N0cmR1cCh0aGlzLT5u YW1lKSwgbW1fc3RyZHVwKCIpIikpOworCisJCQkJc3RydWN0X21lbWJlcl9saXN0W3N0cnVjdF9s ZXZlbF0gPSBFQ1BHc3RydWN0X21lbWJlcl9kdXAodGhpcy0+c3RydWN0X21lbWJlcl9saXN0KTsK KwkJCX0KKwkJfQogCQl8IElOVEVSVkFMIGVjcGdfaW50ZXJ2YWwKIAkJewogCQkJJCQudHlwZV9l bnVtID0gRUNQR3RfaW50ZXJ2YWw7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2pzb25fc3FsanNvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25fc3Fs anNvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOGI4NzU4MDc1 MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbl9zcWxq c29uLm91dApAQCAtMCwwICsxLDE4IEBACistLSBKU09OX0VYSVNUUworU0VMRUNUIEpTT05fRVhJ U1RTKE5VTEwgRk9STUFUIEpTT04sICckJyk7CitFUlJPUjogIEpTT05fRVhJU1RTKCkgaXMgbm90 IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZQorTElORSAxOiBTRUxFQ1QgSlNPTl9F WElTVFMoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKyAgICAgICAgICAgICAgIF4KK0hJTlQ6ICBU cnkgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8ganNvbmIKKy0tIEpTT05fVkFMVUUKK1NFTEVDVCBK U09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICckJyk7CitFUlJPUjogIEpTT05fVkFMVUUoKSBp cyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBlCitMSU5FIDE6IFNFTEVDVCBK U09OX1ZBTFVFKE5VTEwgRk9STUFUIEpTT04sICckJyk7CisgICAgICAgICAgICAgICBeCitISU5U OiAgVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25iCistLSBKU09OX1FVRVJZCitTRUxF Q1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworRVJST1I6ICBKU09OX1FVRVJZ KCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZQorTElORSAxOiBTRUxF Q1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworICAgICAgICAgICAgICAgXgor SElOVDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uOGRjZGI5MGZjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKQEAgLTAsMCArMSwxMDcxIEBACistLSBKU09O X0VYSVNUUworU0VMRUNUIEpTT05fRVhJU1RTKE5VTEw6Ompzb25iLCAnJCcpOworIGpzb25fZXhp c3RzIAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJ1tdJywgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cp CisKK1NFTEVDVCBKU09OX0VYSVNUUyhKU09OX09CSkVDVChSRVRVUk5JTkcganNvbmIpLCAnJCcp OworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckJyk7Cisg anNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9F WElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEnKTsKKyBqc29u X2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAnMScsICdzdHJpY3QgJC5hJyk7IC0tIEZBTFNFIG9uIGVycm9yCisganNvbl9leGlz dHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBqc29ucGF0aCBt ZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBvYmplY3QKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0t LS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJC5h Jyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJ1sxLCAiYWFhIiwgeyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsg LS0gRkFMU0Ugb24gZXJyb3IKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAn bGF4ICQuYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7fScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0t LS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJi IjogMSwgImEiOiAyfScsICckLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEuYicpOworIGpz b25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJ U1RTKGpzb25iICd7ImEiOiB7ImIiOiAxfX0nLCAnJC5hLmInKTsKKyBqc29uX2V4aXN0cyAKKy0t LS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJh IjogMSwgImIiOiAyfScsICckLmEuYicpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQor IGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9 JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIDEgQVMgeCk7CisganNvbl9leGlzdHMgCistLS0t LS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6 IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgJzEnIEFTIHgpOworIGpzb25f ZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RT KGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFT U0lORyAwIEFTIHgsIDIgQVMgeSk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAn JC4qID8gKEAgPiAkeCAmJiBAIDwgJHkpJyBQQVNTSU5HIDAgQVMgeCwgMSBBUyB5KTsKKyBqc29u X2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIGV4dGVuc2lvbjogYm9v bGVhbiBleHByZXNzaW9ucworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQgPiAyJyk7 CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1IgT04gRVJST1IpOworIGpzb25fZXhp c3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gZXh0ZW5zaW9uOiBSRVRVUk5J TkcgY2xhdXNlCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5H IGJvb2wpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMV0nIFJFVFVSTklORyBib29sKTsKKyBqc29u X2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcgaW50KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJzEnLCAnJFsxXScgUkVUVVJOSU5HIGludCk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0t LS0tCisgICAgICAgICAgIDAKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcx JywgJyRbMF0nIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0K KyB0cnVlCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzFdJyBS RVRVUk5JTkcgdGV4dCk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZmFsc2UKKygx IHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkWzFdJyBSRVRV Uk5JTkcgdGV4dCBGQUxTRSBPTiBFUlJPUik7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0t CisgZmFsc2UKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0n IFJFVFVSTklORyBqc29uYik7CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBq c29uYgorTElORSAxOiBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJO SU5HIGpzb25iKTsKKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAn MScsICckWzBdJyBSRVRVUk5JTkcgZmxvYXQ0KTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBi b29sZWFuIHRvIHJlYWwKK0xJTkUgMTogU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRb MF0nIFJFVFVSTklORyBmbG9hdDQpOworICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fRVhJ U1RTKGpzb25iICcxJywgJyRbMF0nIFJFVFVSTklORyBmbG9hdDQgRk9STUFUIEpTT04pOyAtLSBS RVRVUk5JTkcgRk9STUFUIG5vdCBhbGxvd2VkCitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IEZPUk1B VCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mIEpTT05fRVhJU1RTKCkKK0xJTkUgMTogLi4uQ1QgSlNP Tl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5HIGZsb2F0NCBGT1JNQVQgSlNPLi4u CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXgorLS0gUkVUVUdOSU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0nIFJFVFVSTklORyByZWNvcmQpOworRVJST1I6ICBy ZXR1cm5pbmcgcHNldWRvLXR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVuY3Rp b25zCistLSBKU09OX1ZBTFVFCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdudWxsJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCiso MSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBp bnQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgdHJ1ZQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1 ZScsICckJyBSRVRVUk5JTkcgYm9vbCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEyMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnMTIzJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorICAgICAgMzU3CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMn LCAnJCcgUkVUVVJOSU5HIHRleHQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAxMjMK KygxIHJvdykKKworLyoganNvbmIgYnl0ZWEgPz8/ICovCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMTIzJywgJyQnIFJFVFVSTklORyBieXRlYSBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIFNR TC9KU09OIGl0ZW0gY2Fubm90IGJlIGNhc3QgdG8gdGFyZ2V0IHR5cGUKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxLjIzJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMS4y MworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICckJyBSRVRVUk5J TkcgaW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMQorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1l cmljKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgMS4yMworKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBpbnQgRVJS T1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRl Z2VyOiAiMS4yMyIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGFhYQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyBhYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEi JywgJyQnIFJFVFVSTklORyBjaGFyKDUpKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg YWFhICAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJF VFVSTklORyBjaGFyKDIpKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgYWEKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29u KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CisganNvbl92 YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBFUlJPUiBPTiBFUlJPUik7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbmIgRVJST1IgT04gRVJST1IpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnIlwiYWFhXCIiJywgJyQnIFJFVFVSTklORyBqc29uKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgIlwiYWFhXCIiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciXCJhYWFcIiInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKKyBqc29uX3ZhbHVl IAorLS0tLS0tLS0tLS0tCisgIlwiYWFhXCIiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgaW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0t LS0tLS0tCisgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn ImFhYSInLCAnJCcgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFs aWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhYWEiCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGludCBERUZBVUxUIDExMSBPTiBFUlJPUik7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAxMTEKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0Owor ID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgMzU3CisoMSByb3cpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICciMjAxNy0wMi0yMCInLCAnJCcgUkVUVVJOSU5HIGRhdGUpICsgOTsKKyAg P2NvbHVtbj8gIAorLS0tLS0tLS0tLS0tCisgMDMtMDEtMjAxNworKDEgcm93KQorCistLSBUZXN0 IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4gdHlwZXMKK0NSRUFURSBET01BSU4gc3Fs anNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitFUlJPUjog IGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9u b3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVM TCBPTiBFUlJPUik7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBu b3QgYWxsb3cgbnVsbCB2YWx1ZXMKK0NSRUFURSBUWVBFIHJhaW5ib3cgQVMgRU5VTSAoJ3JlZCcs ICdvcmFuZ2UnLCAneWVsbG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxlJyk7CitDUkVBVEUg RE9NQUlOIHJnYiBBUyByYWluYm93IENIRUNLIChWQUxVRSBJTiAoJ3JlZCcsICdncmVlbicsICdi bHVlJykpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXggJFsqXScg UkVUVVJOSU5HIHJnYik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQn IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9W QUxVRSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBzY2FsYXIgaXRlbQorU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ3t9JywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7 CitFUlJPUjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVy biBzaW5nbGV0b24gc2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOworRVJST1I6 ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBvYmpl Y3QKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgJ2Vy cm9yJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGVycm9yCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVS Uk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVS Uk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzEnLCAnc3RyaWN0ICQuYScgREVGQVVMVCAyIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICds YXggJC5hJyBERUZBVUxUIDIgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVG QVVMVCAnMicgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgTlVMTCBPTiBFTVBU WSBERUZBVUxUICcyJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxU ICcyJyBPTiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0t LS0tLS0tLQorIDIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4 ICQuYScgRVJST1IgT04gRU1QVFkgREVGQVVMVCAnMycgT04gRVJST1IpOworIGpzb25fdmFsdWUg CistLS0tLS0tLS0tLS0KKyAzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdb MSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIEpTT04gcGF0aCBleHByZXNz aW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2NhbGFyIGl0ZW0KK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICcwJyBPTiBFUlJP Uik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDAKKygxIHJvdykKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJS T1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiICIK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIiAiXScsICckWypdJyBSRVRVUk5JTkcgaW50IERF RkFVTFQgMiArIDMgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAg ICAgICA1CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypd JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMiArIDMgT04gRVJST1IpOworIGpzb25fdmFsdWUgCist LS0tLS0tLS0tLS0KKyAgICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU09OKTsgLS0gUkVUVVJO SU5HIEZPUk1BVCBub3QgYWxsb3dlZAorRVJST1I6ICBjYW5ub3Qgc3BlY2lmeSBGT1JNQVQgaW4g UkVUVVJOSU5HIGNsYXVzZSBvZiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogLi4uQ1QgSlNPTl9WQUxV RShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBGT1JNQVQgSlNPLi4uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorLS0gUkVUVUdOSU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyByZWNvcmQpOworRVJST1I6ICByZXR1 cm5pbmcgcHNldWRvLXR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FML0pTT04gZnVuY3Rpb25z CitTRUxFQ1QKKwl4LAorCUpTT05fVkFMVUUoCisJCWpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywK KwkJJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HIHggQVMgeAorCQlSRVRVUk5JTkcgaW50CisJCURF RkFVTFQgLTEgT04gRU1QVFkKKwkJREVGQVVMVCAtMiBPTiBFUlJPUgorCSkgeQorRlJPTQorCWdl bmVyYXRlX3NlcmllcygwLCAyKSB4OworIHggfCB5ICAKKy0tLSstLS0tCisgMCB8IC0yCisgMSB8 ICAyCisgMiB8IC0xCisoMyByb3dzKQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcs ICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAoMSwyKQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVs bCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEgUkVUVVJOSU5HIHBvaW50KTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJvdykKKworLS0gVGVzdCB0 aW1lc3RhbXB0eiBwYXNzaW5nIGFuZCBvdXRwdXQKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAn IEFTIHRzKTsKKyAgICAgICAgICBqc29uX3ZhbHVlICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgVHVlIEZlYiAyMCAxODozNDo1NiAyMDE4IFBTVAorKDEgcm93KQor CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1w dHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wdHop OworICAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBUdWUgRmViIDIwIDE4OjM0OjU2IDIwMTggUFNUCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXApOworICAgICAg ICBqc29uX3ZhbHVlICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVHVlIEZl YiAyMCAxODozNDo1NiAyMDE4CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAn IEFTIHRzIFJFVFVSTklORyBqc29uKTsKKyAgICAgICAgIGpzb25fdmFsdWUgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAw IgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJ TkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcg anNvbmIpOworICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKKy0t IEpTT05fUVVFUlkKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICckJyksCisJSlNPTl9RVUVSWShq cywgJyQnIFdJVEhPVVQgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggQ09ORElU SU9OQUwgV1JBUFBFUiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05ESVRJT05BTCBB UlJBWSBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJBWSBXUkFQUEVSKQor RlJPTQorCShWQUxVRVMKKwkJKGpzb25iICdudWxsJyksCisJCSgnMTIuMycpLAorCQkoJ3RydWUn KSwKKwkJKCciYWFhIicpLAorCQkoJ1sxLCBudWxsLCAiMiJdJyksCisJCSgneyJhIjogMSwgImIi OiBbMl19JykKKwkpIGZvbyhqcyk7CisgICAgIGpzb25fcXVlcnkgICAgIHwgICAgIGpzb25fcXVl cnkgICAgIHwgICAgIGpzb25fcXVlcnkgICAgIHwgICAgICBqc29uX3F1ZXJ5ICAgICAgfCAgICAg IGpzb25fcXVlcnkgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIG51bGwgICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgICAgICB8 IFtudWxsXSAgICAgICAgICAgICB8IFtudWxsXSAgICAgICAgICAgICAgIHwgW251bGxdCisgMTIu MyAgICAgICAgICAgICAgIHwgMTIuMyAgICAgICAgICAgICAgIHwgWzEyLjNdICAgICAgICAgICAg IHwgWzEyLjNdICAgICAgICAgICAgICAgfCBbMTIuM10KKyB0cnVlICAgICAgICAgICAgICAgfCB0 cnVlICAgICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAg ICAgICB8IFt0cnVlXQorICJhYWEiICAgICAgICAgICAgICB8ICJhYWEiICAgICAgICAgICAgICB8 IFsiYWFhIl0gICAgICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICAgIHwgWyJhYWEiXQorIFsx LCBudWxsLCAiMiJdICAgICB8IFsxLCBudWxsLCAiMiJdICAgICB8IFsxLCBudWxsLCAiMiJdICAg ICB8IFtbMSwgbnVsbCwgIjIiXV0gICAgIHwgW1sxLCBudWxsLCAiMiJdXQorIHsiYSI6IDEsICJi IjogWzJdfSB8IHsiYSI6IDEsICJiIjogWzJdfSB8IHsiYSI6IDEsICJiIjogWzJdfSB8IFt7ImEi OiAxLCAiYiI6IFsyXX1dIHwgW3siYSI6IDEsICJiIjogWzJdfV0KKyg2IHJvd3MpCisKK1NFTEVD VAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScpIEFTICJ1bnNwZWMiLAorCUpTT05fUVVF UlkoanMsICdzdHJpY3QgJFsqXScgV0lUSE9VVCBXUkFQUEVSKSBBUyAid2l0aG91dCIsCisJSlNP Tl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIpIEFTICJ3 aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBVTkNPTkRJVElP TkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIHVuY29uZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0 cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIgorRlJPTQorCShWQUxVRVMK KwkJKGpzb25iICcxJyksCisJCSgnW10nKSwKKwkJKCdbbnVsbF0nKSwKKwkJKCdbMTIuM10nKSwK KwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJdJyksCisJCSgnW1sxLCAyLCAzXV0nKSwKKwkJKCdb eyJhIjogMSwgImIiOiBbMl19XScpLAorCQkoJ1sxLCAiMiIsIG51bGwsIFszXV0nKQorCSkgZm9v KGpzKTsKKyAgICAgICB1bnNwZWMgICAgICAgfCAgICAgIHdpdGhvdXQgICAgICAgfCAgICAgIHdp dGggY29uZCAgICAgIHwgICAgIHdpdGggdW5jb25kICAgICAgfCAgICAgICAgIHdpdGggICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg ICAgICAgfCAKKyBudWxsICAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgICAgICAgfCBbbnVs bF0gICAgICAgICAgICAgIHwgW251bGxdICAgICAgICAgICAgICAgfCBbbnVsbF0KKyAxMi4zICAg ICAgICAgICAgICAgfCAxMi4zICAgICAgICAgICAgICAgfCBbMTIuM10gICAgICAgICAgICAgIHwg WzEyLjNdICAgICAgICAgICAgICAgfCBbMTIuM10KKyB0cnVlICAgICAgICAgICAgICAgfCB0cnVl ICAgICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAgICAgIHwgW3RydWVdICAgICAgICAgICAg ICAgfCBbdHJ1ZV0KKyAiYWFhIiAgICAgICAgICAgICAgfCAiYWFhIiAgICAgICAgICAgICAgfCBb ImFhYSJdICAgICAgICAgICAgIHwgWyJhYWEiXSAgICAgICAgICAgICAgfCBbImFhYSJdCisgWzEs IDIsIDNdICAgICAgICAgIHwgWzEsIDIsIDNdICAgICAgICAgIHwgWzEsIDIsIDNdICAgICAgICAg ICB8IFtbMSwgMiwgM11dICAgICAgICAgIHwgW1sxLCAyLCAzXV0KKyB7ImEiOiAxLCAiYiI6IFsy XX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gIHwgW3siYSI6IDEs ICJiIjogWzJdfV0gfCBbeyJhIjogMSwgImIiOiBbMl19XQorICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICB8IFsxLCAiMiIsIG51bGwsIFszXV0gfCBbMSwgIjIiLCBudWxs LCBbM11dICB8IFsxLCAiMiIsIG51bGwsIFszXV0KKyg5IHJvd3MpCisKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCk7CisganNvbl9xdWVyeSAKKy0t LS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0t LS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBLRUVQIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKTsK KyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0IE9NSVQgUVVPVEVTKTsK KyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBPTUlUIFFVT1RFUyBPTiBT Q0FMQVIgU1RSSU5HKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBPTUlUIFFVT1RFUyBFUlJP UiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGpzb24K K0RFVEFJTDogIFRva2VuICJhYWEiIGlzIGludmFsaWQuCitDT05URVhUOiAgSlNPTiBkYXRhLCBs aW5lIDE6IGFhYQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklO RyBqc29uIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1 dCBzeW50YXggZm9yIHR5cGUganNvbgorREVUQUlMOiAgVG9rZW4gImFhYSIgaXMgaW52YWxpZC4K K0NPTlRFWFQ6ICBKU09OIGRhdGEsIGxpbmUgMTogYWFhCitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVTIEVS Uk9SIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgXHg2MTYxNjEKKygx IHJvdykKKworLS0gUVVPVEVTIGJlaGF2aW9yIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHdoZW4g V0lUSCBXUkFQUEVSIHVzZWQ6CistLSBTaG91bGQgZmFpbAorU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9URVMpOworRVJST1I6ICBTUUwvSlNP TiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVS IGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRI IFdSQVBQRVIgT01JVCBRVU9URVMpLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0n LCAnJCcgV0lUSCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pTT04gUVVPVEVT IGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiBpcyB1c2Vk CitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBXUkFQUEVS IEtFRVAgUVVPVEVTKS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJ VEggQ09ORElUSU9OQUwgV1JBUFBFUiBLRUVQIFFVT1RFUyk7CitFUlJPUjogIFNRTC9KU09OIFFV T1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMg dXNlZAorTElORSAxOiAuLi5OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lUSCBDT05ESVRJT05B TCBXUkFQUEVSIEtFRVAgUVVPVEUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn WzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBPTUlUIFFVT1RFUyk7CitFUlJPUjog IFNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRI IFdSQVBQRVIgaXMgdXNlZAorTElORSAxOiAuLi5OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lU SCBDT05ESVRJT05BTCBXUkFQUEVSIE9NSVQgUVVPVEUuLi4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBTaG91bGQgc3Vj Y2VlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIT1VUIFdSQVBQRVIg T01JVCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMV0KKygxIHJvdykK KworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIT1VUIFdSQVBQRVIgS0VF UCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMV0KKygxIHJvdykKKwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nKTsKKyBqc29uX3F1ZXJ5IAorLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBOVUxMIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBPTiBFTVBU WSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBUWSBBUlJBWSBPTiBFTVBUWSk7CisganNv bl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbXScsICckWypdJyBFTVBUWSBPQkpFQ1QgT04gRU1QVFkpOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyB7fQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0K KyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIERFRkFV TFQgJyJlbXB0eSInIE9OIEVNUFRZKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgImVt cHR5IgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJS T1IgT04gRU1QVFkgTlVMTCBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1Ig T04gRU1QVFkgRU1QVFkgQVJSQVkgT04gRVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0t LS0KKyBbXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScg RVJST1IgT04gRU1QVFkgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0t LS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywg JyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pT T04gaXRlbQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVS Uk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjog IEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fUVVFUlkgc2hvdWxkIHJldHVybiBzaW5nbGV0 b24gaXRlbSB3aXRob3V0IHdyYXBwZXIKK0hJTlQ6ICBVc2UgV0lUSCBXUkFQUEVSIGNsYXVzZSB0 byB3cmFwIFNRTC9KU09OIGl0ZW0gc2VxdWVuY2UgaW50byBhcnJheS4KK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBFUlJPUik7Cisg anNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJlbXB0eSIKKygxIHJvdykKKworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uKTsKKyBqc29uX3F1ZXJ5 IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbiBGT1JNQVQgSlNPTik7CisganNvbl9xdWVy eSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0t LS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwy XScsICckJyBSRVRVUk5JTkcganNvbmIgRk9STUFUIEpTT04pOworIGpzb25fcXVlcnkgCistLS0t LS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx LDJdJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisg WzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBS RVRVUk5JTkcgY2hhcigxMCkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwgMl0g ICAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRV Uk5JTkcgY2hhcigzKSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLAorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIHRleHQg Rk9STUFUIEpTT04pOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJv dykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBieXRl YSk7CisgICBqc29uX3F1ZXJ5ICAgCistLS0tLS0tLS0tLS0tLS0tCisgXHg1YjMxMmMyMDMyNWQK KygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklO RyBieXRlYSBGT1JNQVQgSlNPTik7CisgICBqc29uX3F1ZXJ5ICAgCistLS0tLS0tLS0tLS0tLS0t CisgXHg1YjMxMmMyMDMyNWQKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx LDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworIGpz b25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBceDdiN2QKKygxIHJvdykKKworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBF TVBUWSBPQkpFQ1QgT04gRVJST1IpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBceDdi N2QKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJF VFVSTklORyBqc29uIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIHt9CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckWypdJyBSRVRVUk5JTkcganNvbmIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKyBqc29uX3F1 ZXJ5IAorLS0tLS0tLS0tLS0tCisge30KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1szLDRdJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBFTVBUWSBPQkpFQ1QgT04gRVJS T1IpOworRVJST1I6ICBleHBlY3RlZCBKU09OIGFycmF5CistLSBSRVRVR05JTkcgcHNldWRvLXR5 cGVzIG5vdCBhbGxvd2VkCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScg UkVUVVJOSU5HIGFueWFycmF5IEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIHJldHVy bmluZyBwc2V1ZG8tdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiBTUUwvSlNPTiBmdW5jdGlvbnMK K1NFTEVDVAorCXgsIHksCisJSlNPTl9RVUVSWSgKKwkJanNvbmIgJ1sxLDIsMyw0LDUsbnVsbF0n LAorCQknJFsqXSA/IChAID49ICR4ICYmIEAgPD0gJHkpJworCQlQQVNTSU5HIHggQVMgeCwgeSBB UyB5CisJCVdJVEggQ09ORElUSU9OQUwgV1JBUFBFUgorCQlFTVBUWSBBUlJBWSBPTiBFTVBUWQor CSkgbGlzdAorRlJPTQorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB4LAorCWdlbmVyYXRlX3Nlcmll cygwLCA0KSB5OworIHggfCB5IHwgICAgIGxpc3QgICAgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0t LQorIDAgfCAwIHwgW10KKyAwIHwgMSB8IFsxXQorIDAgfCAyIHwgWzEsIDJdCisgMCB8IDMgfCBb MSwgMiwgM10KKyAwIHwgNCB8IFsxLCAyLCAzLCA0XQorIDEgfCAwIHwgW10KKyAxIHwgMSB8IFsx XQorIDEgfCAyIHwgWzEsIDJdCisgMSB8IDMgfCBbMSwgMiwgM10KKyAxIHwgNCB8IFsxLCAyLCAz LCA0XQorIDIgfCAwIHwgW10KKyAyIHwgMSB8IFtdCisgMiB8IDIgfCBbMl0KKyAyIHwgMyB8IFsy LCAzXQorIDIgfCA0IHwgWzIsIDMsIDRdCisgMyB8IDAgfCBbXQorIDMgfCAxIHwgW10KKyAzIHwg MiB8IFtdCisgMyB8IDMgfCBbM10KKyAzIHwgNCB8IFszLCA0XQorIDQgfCAwIHwgW10KKyA0IHwg MSB8IFtdCisgNCB8IDIgfCBbXQorIDQgfCAzIHwgW10KKyA0IHwgNCB8IFs0XQorKDI1IHJvd3Mp CisKKy0tIEV4dGVuc2lvbjogcmVjb3JkIHR5cGVzIHJldHVybmluZworQ1JFQVRFIFRZUEUgc3Fs anNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0LCBqcyBqc29uLCBqYiBqc29uYiwganNhIGpzb25b XSk7CitDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWNhIEFTIChyZWNhIHNxbGpzb25iX3JlY1tdKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIiOiAiZm9vIiwgInQiOiAiYWFh IiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6 IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKKyAgICAgICAgICAgICAgICAg ICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICgxLGFhYSwiWzEsICIiMiIiLCB7 fV0iLCJ7IiJ4IiI6IFsxLCAiIjIiIiwge31dfSIsKQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEs ICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBd JyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxp ZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImEiCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwg e31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRV Uk5JTkcgc3FsanNvbmJfcmVjKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7ImpzYSI6ICBb eyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMiOiB7fX0sIDEyM119JywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2EpOworICAgICAgICAgdW5uZXN0ICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAxLCAiYiI6IFsiZm9vIl19CisgeyJhIjog MiwgImMiOiB7fX0KKyAxMjMKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09O X1FVRVJZKGpzb25iICd7InJlY2EiOiBbeyJhIjogMSwgInQiOiBbImZvbyIsIFtdXX0sIHsiYSI6 IDIsICJqYiI6IFt7fSwgdHJ1ZV19XX0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3JlY2EpKS5y ZWNhKTsKKyBhIHwgICAgICB0ICAgICAgfCBqcyB8ICAgICBqYiAgICAgfCBqc2EgCistLS0rLS0t LS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLSstLS0tLQorIDEgfCBbImZvbyIsIFtdXSB8ICAg IHwgICAgICAgICAgICB8IAorIDIgfCAgICAgICAgICAgICB8ICAgIHwgW3t9LCB0cnVlXSB8IAor KDIgcm93cykKKworLS0gRXh0ZW5zaW9uOiBhcnJheSB0eXBlcyByZXR1cm5pbmcKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMiXScsICckWypdJyBSRVRVUk5JTkcgaW50W10g V0lUSCBXUkFQUEVSKTsKKyAganNvbl9xdWVyeSAgCistLS0tLS0tLS0tLS0tLQorIHsxLDIsTlVM TCwzfQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCJhIl0n LCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUiBFUlJPUiBPTiBFUlJPUik7CitF UlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhIgorU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiYSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRb XSBXSVRIIFdSQVBQRVIpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0Ijog WyJmb28iLCBbXV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5H IHNxbGpzb25iX3JlY1tdKSk7CisgYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAgIHwg anNhIAorLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KKyAxIHwgWyJm b28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAKKyAyIHwgICAgICAgICAgICAgfCAgICB8IFt7 fSwgdHJ1ZV0gfCAKKygyIHJvd3MpCisKKy0tIEV4dGVuc2lvbjogZG9tYWluIHR5cGVzIHJldHVy bmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYScgUkVUVVJOSU5H IHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICAg ICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9Jywg JyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitFUlJPUjogIGRvbWFpbiBz cWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKKy0tIFRlc3Qg dGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn bnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEw JyBBUyB0cyk7CisgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygxIHJvdykKKwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6 ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOworICAgICAg ICAganNvbl9xdWVyeSAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg IjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjoz NDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7CisgICAgICAgICBqc29uX3F1ZXJ5ICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjoz NDo1NiswMDowMCIKKygxIHJvdykKKworLS0gVGVzdCBjb25zdHJhaW50cworQ1JFQVRFIFRBQkxF IHRlc3RfanNvbmJfY29uc3RyYWludHMgKAorCWpzIHRleHQsCisJaSBpbnQsCisJeCBqc29uYiBE RUZBVUxUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFdJVEggV1JBUFBFUikKKwlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDEKKwkJQ0hFQ0sgKGpzIElTIEpTT04pCisJ Q09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCisJCUNIRUNLIChKU09OX0VYSVNUUyhq czo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTIHR4dCwgYXJy YXlbMSwyLDNdIGFzIGFycikpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQzCisJ CUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGludCBERUZBVUxU ICgnMTInIHx8IGkpOjppbnQgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKKwlDT05TVFJB SU5UIHRlc3RfanNvbmJfY29uc3RyYWludDQKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25i LCAnJC5hJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8 IGpzb25iICdbMTBdJykKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDUKKwkJQ0hF Q0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgY2hhcig1KSBPTUlUIFFV T1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAgJ2EnIENPTExBVEUgIkMiKQorCUNPTlNUUkFJ TlQgdGVzdF9qc29uYl9jb25zdHJhaW50NgorCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompzb25i LCAnc3RyaWN0ICQuYScgUkVUVVJOSU5HIGludCBUUlVFIE9OIEVSUk9SKSA8IDIpCispOworXGQg dGVzdF9qc29uYl9jb25zdHJhaW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0X2pzb25iX2NvbnN0cmFpbnRzIgorIENvbHVtbiB8 ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisganMgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisg aSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgeCAgICAgIHwganNv bmIgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgSlNPTl9RVUVSWSgnWzEsIDJdJzo6anNvbmIs ICckWypdJyBSRVRVUk5JTkcganNvbmIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIpCitDaGVj ayBjb25zdHJhaW50czoKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MSIgQ0hFQ0sgKGpzIElT IEpTT04pCisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDIiIENIRUNLIChKU09OX0VYSVNUUyhq czo6anNvbmIsICckLiJhIicgUEFTU0lORyBpICsgNSBBUyBpbnQsIGk6OnRleHQgQVMgdHh0LCBB UlJBWVsxLCAyLCAzXSBBUyBhcnIpKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQzIiBDSEVD SyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgREVGQVVM VCAoJzEyJzo6dGV4dCB8fCBpKTo6aW50ZWdlciBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBp KQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0IiBDSEVDSyAoSlNPTl9RVUVSWShqczo6anNv bmIsICckLiJhIicgUkVUVVJOSU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBU WSBPQkpFQ1QgT04gRVJST1IpIDwgJ1sxMF0nOjpqc29uYikKKyAgICAidGVzdF9qc29uYl9jb25z dHJhaW50NSIgQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBj aGFyYWN0ZXIoNSkgT01JVCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gKCdhJzo6YnBj aGFyIENPTExBVEUgIkMiKSkKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50NiIgQ0hFQ0sgKEpT T05fRVhJU1RTKGpzOjpqc29uYiwgJ3N0cmljdCAkLiJhIicgUkVUVVJOSU5HIGludGVnZXIgVFJV RSBPTiBFUlJPUikgPCAyKQorCitTRUxFQ1QgY2hlY2tfY2xhdXNlCitGUk9NIGluZm9ybWF0aW9u X3NjaGVtYS5jaGVja19jb25zdHJhaW50cworV0hFUkUgY29uc3RyYWludF9uYW1lIExJS0UgJ3Rl c3RfanNvbmJfY29uc3RyYWludCUnCitPUkRFUiBCWSAxOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfY2xhdXNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoSlNP Tl9FWElTVFMoKGpzKTo6anNvbmIsICdzdHJpY3QgJC4iYSInIFJFVFVSTklORyBpbnRlZ2VyIFRS VUUgT04gRVJST1IpIDwgMikKKyAoSlNPTl9RVUVSWSgoanMpOjpqc29uYiwgJyQuImEiJyBSRVRV Uk5JTkcgY2hhcmFjdGVyKDUpIE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9OIEVNUFRZKSA+ICgn YSc6OmJwY2hhciBDT0xMQVRFICJDIikpCisgKEpTT05fUVVFUlkoKGpzKTo6anNvbmIsICckLiJh IicgUkVUVVJOSU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpFQ1Qg T04gRVJST1IpIDwgJ1sxMF0nOjpqc29uYikKKyAoSlNPTl9WQUxVRSgoanMpOjpqc29uYiwgJyQu ImEiJyBSRVRVUk5JTkcgaW50ZWdlciBERUZBVUxUICgoJzEyJzo6dGV4dCB8fCBpKSk6OmludGVn ZXIgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKKyAoanMgSVMgSlNPTikKKyBKU09OX0VY SVNUUygoanMpOjpqc29uYiwgJyQuImEiJyBQQVNTSU5HIChpICsgNSkgQVMgaW50LCAoaSk6OnRl eHQgQVMgdHh0LCBBUlJBWVsxLCAyLCAzXSBBUyBhcnIpCisoNiByb3dzKQorCitTRUxFQ1QgcGdf Z2V0X2V4cHIoYWRiaW4sIGFkcmVsaWQpCitGUk9NIHBnX2F0dHJkZWYKK1dIRVJFIGFkcmVsaWQg PSAndGVzdF9qc29uYl9jb25zdHJhaW50cyc6OnJlZ2NsYXNzCitPUkRFUiBCWSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9leHByICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSlNPTl9RVUVSWSgn WzEsIDJdJzo6anNvbmIsICckWypdJyBSRVRVUk5JTkcganNvbmIgV0lUSCBVTkNPTkRJVElPTkFM IFdSQVBQRVIpCisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfZXhwcihhZGJpbiwgYWRyZWxpZCkg RlJPTSBwZ19hdHRyZGVmIFdIRVJFIGFkcmVsaWQgPSAndGVzdF9qc29uYl9jb25zdHJhaW50cyc6 OnJlZ2NsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9leHBy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSlNPTl9RVUVSWSgnWzEsIDJdJzo6anNvbmIsICckWypdJyBSRVRVUk5JTkcganNvbmIg V0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIpCisoMSByb3cpCisKK0lOU0VSVCBJTlRPIHRlc3Rf anNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnJywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJl bGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50 ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQxIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMg KCwgMSwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVT ICgnMScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25z dHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50 MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgxLCAxLCBbMSwgMl0pLgorSU5TRVJU IElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCdbXScpOworRVJST1I6ICBuZXcg cm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50MiIKK0RFVEFJTDogIEZhaWxpbmcgcm93 IGNvbnRhaW5zIChbXSwgbnVsbCwgWzEsIDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29u c3RyYWludHMgVkFMVUVTICgneyJiIjogMX0nLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVs YXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQg InRlc3RfanNvbmJfY29uc3RyYWludDIiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAo eyJiIjogMX0sIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRz IFZBTFVFUyAoJ3siYSI6IDF9JywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0 ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pz b25iX2NvbnN0cmFpbnQzIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKHsiYSI6IDF9 LCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMg KCd7ImEiOiA3fScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29u Yl9jb25zdHJhaW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25z dHJhaW50NSIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICh7ImEiOiA3fSwgMSwgWzEs IDJdKS4KK0lOU0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgneyJhIjog MTB9JywgMSk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0 IgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKHsiYSI6IDEwfSwgMSwgWzEsIDJdKS4K K0RST1AgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJhaW50czsKKy0tIFRlc3QgbXV0YWJpbGlseSBv ZCBxdWVyeSBmdW5jdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxpdHkoanMg anNvbmIpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyQnKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJC5hWzBdJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJp bGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQCA8ICQuZGF0ZXRp bWUoKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FV RVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0ZXRpbWUoKSknKSk7CitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu YSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7CitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu YSA/IChALmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICQuZGF0ZXRpbWUoIkhIOk1JIFRaSCIpKScp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmEgPyAoQC5kYXRldGltZSgiSEg6TUkiKSA8ICQuZGF0ZXRpbWUoIllZLU1NLUREIEhIOk1J IikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVS WShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICQuZGF0ZXRpbWUoIllZLU1N LUREIEhIOk1JIikpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBt dXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR4JyBQQVNT SU5HICcxMjozNCc6OnRpbWV0eiBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9t dXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkeScg UEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNv bmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA8ICR4JyBQQVNTSU5H ICcxMjozNCc6OnRpbWV0eiBBUyB4KSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHBy ZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNv bmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA8ICR4JyBQQVNTSU5H ICcxMjM0Jzo6aW50IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxp dHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCkgPyAoQCA9PSAkeCknIFBBU1NJTkcgJzEy OjM0Jzo6dGltZSBBUyB4KSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9u IG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoIllZLU1NLUREIikgPyAoQCA9PSAk eCknIFBBU1NJTkcgJzIwMjAtMDctMTQnOjpkYXRlIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/IChALmRhdGV0 aW1lKCkgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0VSUk9SOiAgZnVu Y3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVB VEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAw IHRvICQuYSA/IChALmRhdGV0aW1lKCkgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFT IHgpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJr ZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJFsxLCAkLmEgPyAoQC5kYXRldGltZSgiSEg6TUkiKSA9PSAkeCldJyBQQVNT SU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRFJPUCBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxp dHk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCA0ZGY5ZDg1MDNiLi45YjBlY2Yw NDlkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTEwMyw3ICsxMDMsNyBAQCB0 ZXN0OiBzZWxlY3Rfdmlld3MgcG9ydGFsc19wMiBmb3JlaWduX2tleSBjbHVzdGVyIGRlcGVuZGVu Y3kgZ3VjIGJpdG1hcG9wcyBjb21ibwogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2Yg cGFyYWxsZWwgdGVzdHMgKEpTT04gcmVsYXRlZCkKICMgLS0tLS0tLS0tLQotdGVzdDoganNvbiBq c29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpzb25iX2pzb25w YXRoIHNxbGpzb24KK3Rlc3Q6IGpzb24ganNvbmIganNvbl9lbmNvZGluZyBqc29ucGF0aCBqc29u cGF0aF9lbmNvZGluZyBqc29uYl9qc29ucGF0aCBzcWxqc29uIGpzb25fc3FsanNvbiBqc29uYl9z cWxqc29uCiAKICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3Rz CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uX3NxbGpzb24uc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvanNvbl9zcWxqc29uLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi40ZjMwZmE0NmI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvanNvbl9zcWxqc29uLnNxbApAQCAtMCwwICsxLDExIEBACistLSBKU09OX0VY SVNUUworCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVMTCBGT1JNQVQgSlNPTiwgJyQnKTsKKworLS0g SlNPTl9WQUxVRQorCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOwor CistLSBKU09OX1FVRVJZCisKK1NFTEVDVCBKU09OX1FVRVJZKE5VTEwgRk9STUFUIEpTT04sICck Jyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZjM2Y4YzdlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbApAQCAtMCwwICsxLDM0MSBAQAorLS0g SlNPTl9FWElTVFMKK1NFTEVDVCBKU09OX0VYSVNUUyhOVUxMOjpqc29uYiwgJyQnKTsKKworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICdbXScsICckJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoSlNP Tl9PQkpFQ1QoUkVUVVJOSU5HIGpzb25iKSwgJyQnKTsKKworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICcxJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckJyk7CitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKKworU0VMRUNUIEpTT05fRVhJU1RT KGpzb25iICcxJywgJyQuYScpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmlj dCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJyb3IKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScs ICdzdHJpY3QgJC5hJyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIg J251bGwnLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQuYScpOwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbMSwgImFhYSIsIHsiYSI6IDF9XScsICdzdHJpY3Qg JC5hJyk7IC0tIEZBTFNFIG9uIGVycm9yCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1sxLCAi YWFhIiwgeyJhIjogMX1dJywgJ2xheCAkLmEnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAn e30nLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYiI6IDEsICJhIjogMn0n LCAnJC5hJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckLmEuYicpOworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiB7ImIiOiAxfX0nLCAnJC5hLmInKTsKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLmEuYicpOworCitTRUxF Q1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCkn IFBBU1NJTkcgMSBBUyB4KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIi OiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAnMScgQVMgeCk7CitTRUxFQ1QgSlNPTl9F WElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC4qID8gKEAgPiAkeCAmJiBAIDwgJHkp JyBQQVNTSU5HIDAgQVMgeCwgMiBBUyB5KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJh IjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4 LCAxIEFTIHkpOworCistLSBleHRlbnNpb246IGJvb2xlYW4gZXhwcmVzc2lvbnMKK1NFTEVDVCBK U09OX0VYSVNUUyhqc29uYiAnMScsICckID4gMicpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICcxJywgJyQuYSA+IDInIEVSUk9SIE9OIEVSUk9SKTsKKworLS0gZXh0ZW5zaW9uOiBSRVRVUk5J TkcgY2xhdXNlCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5H IGJvb2wpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyRbMV0nIFJFVFVSTklORyBi b29sKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcgaW50 KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzFdJyBSRVRVUk5JTkcgaW50KTsK K1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcgdGV4dCk7CitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFsxXScgUkVUVVJOSU5HIHRleHQpOworU0VM RUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkWzFdJyBSRVRVUk5JTkcgdGV4dCBG QUxTRSBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVU VVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRV Uk5JTkcgZmxvYXQ0KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRV Uk5JTkcgZmxvYXQ0IEZPUk1BVCBKU09OKTsgLS0gUkVUVVJOSU5HIEZPUk1BVCBub3QgYWxsb3dl ZAorCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxvd2VkCitTRUxFQ1QgSlNPTl9F WElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5HIHJlY29yZCk7CisKKworLS0gSlNPTl9W QUxVRQorCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJCcgUkVUVVJOSU5HIGludCk7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVl JywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJFVFVSTklORyBi b29sKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgdGV4dCk7CisvKiBqc29uYiBieXRl YSA/Pz8gKi8KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGJ5 dGVhIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAn JCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmlj KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGludCBF UlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDUpKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24pOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gRVJST1Ig T04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklO RyBqc29uYiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwiYWFh XCIiJywgJyQnIFJFVFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciXCJh YWFcIiInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICci YWFhIicsICckJyBSRVRVUk5JTkcgaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFh IicsICckJyBSRVRVUk5JTkcgaW50IEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMTExIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIz NDsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5J TkcgZGF0ZSkgKyA5OworCistLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4g dHlwZXMKK0NSRUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVM TDsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25i X2ludF9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVS TklORyBzcWxqc29uYl9pbnRfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVG QVVMVCBOVUxMIE9OIEVSUk9SKTsKK0NSRUFURSBUWVBFIHJhaW5ib3cgQVMgRU5VTSAoJ3JlZCcs ICdvcmFuZ2UnLCAneWVsbG93JywgJ2dyZWVuJywgJ2JsdWUnLCAncHVycGxlJyk7CitDUkVBVEUg RE9NQUlOIHJnYiBBUyByYWluYm93IENIRUNLIChWQUxVRSBJTiAoJ3JlZCcsICdncmVlbicsICdi bHVlJykpOworU0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXggJFsqXScg UkVUVVJOSU5HIHJnYik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcgRVJST1IgT04gRVJST1IpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7 fScsICckJyBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywg JyQuYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1Ig T04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgREVG QVVMVCAnZXJyb3InIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xh eCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xh eCAkLmEnIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgMiBPTiBFUlJPUik7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUIDIgT04gRVJST1IpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRVJST1IpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgTlVMTCBPTiBFTVBUWSBERUZB VUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5h JyBERUZBVUxUICcyJyBPTiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBERUZBVUxUICczJyBP TiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypdJyBFUlJP UiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWzEsMl0nLCAnJFsqXScgREVG QVVMVCAnMCcgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRb Kl0nIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgREVGQVVMVCAyICsgMyBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludCBE RUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScs ICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU09OKTsgLS0gUkVUVVJOSU5HIEZPUk1BVCBu b3QgYWxsb3dlZAorCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxvd2VkCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIHJlY29yZCk7CisK K1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLAor CQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBBUyB4CisJCVJFVFVSTklORyBpbnQKKwkJREVG QVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxUIC0yIE9OIEVSUk9SCisJKSB5CitGUk9NCisJZ2Vu ZXJhdGVfc2VyaWVzKDAsIDIpIHg7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywg JyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSk7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEgUkVUVVJOSU5H IHBvaW50KTsKKworLS0gVGVzdCB0aW1lc3RhbXB0eiBwYXNzaW5nIGFuZCBvdXRwdXQKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAn IEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXB0eik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn bnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEw JyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAn IEFTIHRzIFJFVFVSTklORyBqc29uKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywg JyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRz IFJFVFVSTklORyBqc29uYik7CisKKy0tIEpTT05fUVVFUlkKKworU0VMRUNUCisJSlNPTl9RVUVS WShqcywgJyQnKSwKKwlKU09OX1FVRVJZKGpzLCAnJCcgV0lUSE9VVCBXUkFQUEVSKSwKKwlKU09O X1FVRVJZKGpzLCAnJCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSKSwKKwlKU09OX1FVRVJZKGpz LCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpLAorCUpTT05fUVVFUlkoanMs ICckJyBXSVRIIEFSUkFZIFdSQVBQRVIpCitGUk9NCisJKFZBTFVFUworCQkoanNvbmIgJ251bGwn KSwKKwkJKCcxMi4zJyksCisJCSgndHJ1ZScpLAorCQkoJyJhYWEiJyksCisJCSgnWzEsIG51bGws ICIyIl0nKSwKKwkJKCd7ImEiOiAxLCAiYiI6IFsyXX0nKQorCSkgZm9vKGpzKTsKKworU0VMRUNU CisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJykgQVMgInVuc3BlYyIsCisJSlNPTl9RVUVS WShqcywgJ3N0cmljdCAkWypdJyBXSVRIT1VUIFdSQVBQRVIpIEFTICJ3aXRob3V0IiwKKwlKU09O X1FVRVJZKGpzLCAnc3RyaWN0ICRbKl0nIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUikgQVMgIndp dGggY29uZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIFVOQ09ORElUSU9O QUwgQVJSQVkgV1JBUFBFUikgQVMgIndpdGggdW5jb25kIiwKKwlKU09OX1FVRVJZKGpzLCAnc3Ry aWN0ICRbKl0nIFdJVEggQVJSQVkgV1JBUFBFUikgQVMgIndpdGgiCitGUk9NCisJKFZBTFVFUwor CQkoanNvbmIgJzEnKSwKKwkJKCdbXScpLAorCQkoJ1tudWxsXScpLAorCQkoJ1sxMi4zXScpLAor CQkoJ1t0cnVlXScpLAorCQkoJ1siYWFhIl0nKSwKKwkJKCdbWzEsIDIsIDNdXScpLAorCQkoJ1t7 ImEiOiAxLCAiYiI6IFsyXX1dJyksCisJCSgnWzEsICIyIiwgbnVsbCwgWzNdXScpCisJKSBmb28o anMpOworCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRl eHQpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0 IEtFRVAgUVVPVEVTKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgdGV4dCBLRUVQIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBPTUlUIFFVT1RFUyk7CitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9U RVMgT04gU0NBTEFSIFNUUklORyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAn JCcgT01JVCBRVU9URVMgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgYnl0ZWEgRk9S TUFUIEpTT04gT01JVCBRVU9URVMgRVJST1IgT04gRVJST1IpOworCistLSBRVU9URVMgYmVoYXZp b3Igc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgdXNlZDoKKy0tIFNo b3VsZCBmYWlsCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBF UiBPTUlUIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEgg V1JBUFBFUiBLRUVQIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQn IFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBLRUVQIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzFdJywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBPTUlUIFFVT1RFUyk7 CistLSBTaG91bGQgc3VjY2VlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBX SVRIT1VUIFdSQVBQRVIgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sx XScsICckJyBXSVRIT1VUIFdSQVBQRVIgS0VFUCBRVU9URVMpOworCitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnW10nLCAnJFsqXScpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRb Kl0nIE5VTEwgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0n IEVNUFRZIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBF TVBUWSBBUlJBWSBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsq XScgRU1QVFkgT0JKRUNUIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScs ICckWypdJyBFUlJPUiBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAn JFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRU1QVFkpOworCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRU1QVFkgQVJSQVkg T04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9O IEVNUFRZIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBFUlJPUik7 CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbik7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb24gRk9S TUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklO RyBqc29uYik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5H IGpzb25iIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICck JyBSRVRVUk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcg UkVUVVJOSU5HIGNoYXIoMTApKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICck JyBSRVRVUk5JTkcgY2hhcigzKSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAn JCcgUkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1sxLDJdJywgJyQnIFJFVFVSTklORyBieXRlYSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn WzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OKTsKKworU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBUWSBPQkpFQ1Qg T04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVS TklORyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uIEVNUFRZIE9CSkVD VCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJFsqXScgUkVU VVJOSU5HIGpzb25iIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkVDVCBPTiBF UlJPUik7CisKKy0tIFJFVFVHTklORyBwc2V1ZG8tdHlwZXMgbm90IGFsbG93ZWQKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMyw0XScsICckWypdJyBSRVRVUk5JTkcgYW55YXJyYXkgRU1QVFkg T0JKRUNUIE9OIEVSUk9SKTsKKworU0VMRUNUCisJeCwgeSwKKwlKU09OX1FVRVJZKAorCQlqc29u YiAnWzEsMiwzLDQsNSxudWxsXScsCisJCSckWypdID8gKEAgPj0gJHggJiYgQCA8PSAkeSknCisJ CVBBU1NJTkcgeCBBUyB4LCB5IEFTIHkKKwkJV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSCisJCUVN UFRZIEFSUkFZIE9OIEVNUFRZCisJKSBsaXN0CitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDQp IHgsCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDQpIHk7CisKKy0tIEV4dGVuc2lvbjogcmVjb3JkIHR5 cGVzIHJldHVybmluZworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0 LCBqcyBqc29uLCBqYiBqc29uYiwganNhIGpzb25bXSk7CitDUkVBVEUgVFlQRSBzcWxqc29uYl9y ZWNhIEFTIChyZWNhIHNxbGpzb25iX3JlY1tdKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJq YiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBz cWxqc29uYl9yZWMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAiYSIsICJiIjog ImZvbyIsICJ0IjogImFhYSIsICJqcyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIy Iiwge31dfX0sICB7ImEiOiAyfV0nLCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyBFUlJP UiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJhIiwgImIiOiAi Zm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIi LCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKK1NF TEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7ImpzYSI6ICBbeyJhIjogMSwg ImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMiOiB7fX0sIDEyM119JywgJyQnIFJFVFVSTklORyBz cWxqc29uYl9yZWMpKS5qc2EpOworU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNv bmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjogMiwgImpiIjog W3t9LCB0cnVlXX1dfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjYSkpLnJlY2EpOworCist LSBFeHRlbnNpb246IGFycmF5IHR5cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDIsbnVsbCwiMyJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiYSJdJywgJyRbKl0nIFJFVFVS TklORyBpbnRbXSBXSVRIIFdSQVBQRVIgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDIsbnVsbCwiYSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdS QVBQRVIpOworU0VMRUNUICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEs ICJ0IjogWyJmb28iLCBbXV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVU VVJOSU5HIHNxbGpzb25iX3JlY1tdKSk7CisKKy0tIEV4dGVuc2lvbjogZG9tYWluIHR5cGVzIHJl dHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYScgUkVUVVJO SU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJh IjogMX0nLCAnJC5iJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKKworLS0gVGVz dCB0aW1lc3RhbXB0eiBwYXNzaW5nIGFuZCBvdXRwdXQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiAr MTAnIEFTIHRzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lO RyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBq c29uKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1l c3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uYik7 CisKKy0tIFRlc3QgY29uc3RyYWludHMKKworQ1JFQVRFIFRBQkxFIHRlc3RfanNvbmJfY29uc3Ry YWludHMgKAorCWpzIHRleHQsCisJaSBpbnQsCisJeCBqc29uYiBERUZBVUxUIEpTT05fUVVFUlko anNvbmIgJ1sxLDJdJywgJyRbKl0nIFdJVEggV1JBUFBFUikKKwlDT05TVFJBSU5UIHRlc3RfanNv bmJfY29uc3RyYWludDEKKwkJQ0hFQ0sgKGpzIElTIEpTT04pCisJQ09OU1RSQUlOVCB0ZXN0X2pz b25iX2NvbnN0cmFpbnQyCisJCUNIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBB U1NJTkcgaSArIDUgQVMgaW50LCBpOjp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNdIGFzIGFycikp CisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQzCisJCUNIRUNLIChKU09OX1ZBTFVF KGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGludCBERUZBVUxUICgnMTInIHx8IGkpOjppbnQg T04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29u c3RyYWludDQKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC5hJyBXSVRIIENPTkRJ VElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8IGpzb25iICdbMTBdJykKKwlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDUKKwkJQ0hFQ0sgKEpTT05fUVVFUlkoanM6 Ompzb25iLCAnJC5hJyBSRVRVUk5JTkcgY2hhcig1KSBPTUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBP TiBFTVBUWSkgPiAgJ2EnIENPTExBVEUgIkMiKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25z dHJhaW50NgorCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompzb25iLCAnc3RyaWN0ICQuYScgUkVU VVJOSU5HIGludCBUUlVFIE9OIEVSUk9SKSA8IDIpCispOworCitcZCB0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzCisKK1NFTEVDVCBjaGVja19jbGF1c2UKK0ZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNo ZWNrX2NvbnN0cmFpbnRzCitXSEVSRSBjb25zdHJhaW50X25hbWUgTElLRSAndGVzdF9qc29uYl9j b25zdHJhaW50JScKK09SREVSIEJZIDE7CisKK1NFTEVDVCBwZ19nZXRfZXhwcihhZGJpbiwgYWRy ZWxpZCkKK0ZST00gcGdfYXR0cmRlZgorV0hFUkUgYWRyZWxpZCA9ICd0ZXN0X2pzb25iX2NvbnN0 cmFpbnRzJzo6cmVnY2xhc3MKK09SREVSIEJZIDE7CisKK1NFTEVDVCBwZ19nZXRfZXhwcihhZGJp biwgYWRyZWxpZCkgRlJPTSBwZ19hdHRyZGVmIFdIRVJFIGFkcmVsaWQgPSAndGVzdF9qc29uYl9j b25zdHJhaW50cyc6OnJlZ2NsYXNzOworCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFp bnRzIFZBTFVFUyAoJycsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBW QUxVRVMgKCcxJywgMSk7CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVF UyAoJ1tdJyk7CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3si YiI6IDF9JywgMSk7CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAo J3siYSI6IDF9JywgMSk7CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVF UyAoJ3siYSI6IDd9JywgMSk7CitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZB TFVFUyAoJ3siYSI6IDEwfScsIDEpOworCitEUk9QIFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWlu dHM7CisKKy0tIFRlc3QgbXV0YWJpbGlseSBvZCBxdWVyeSBmdW5jdGlvbnMKK0NSRUFURSBUQUJM RSB0ZXN0X2pzb25iX211dGFiaWxpdHkoanMganNvbmIpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQnKSk7CitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hWzBdJykpOworQ1JFQVRF IElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRp bWUoKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckLmEgPyAoQCA8ICQuZGF0ZXRpbWUoKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8 ICQuZGF0ZXRpbWUoKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5 IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0ZXRpbWUoIkhIOk1J IFRaSCIpKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05f UVVFUlkoanMsICckLmEgPyAoQC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkLmRhdGV0aW1lKCJI SDpNSSBUWkgiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChK U09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIikgPCAkLmRhdGV0aW1lKCJZ WS1NTS1ERCBISDpNSSIpKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxp dHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGltZSgiSEg6TUkgVFpIIikgPCAkLmRh dGV0aW1lKCJZWS1NTS1ERCBISDpNSSIpKScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25i X211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR4 JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0eiBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiSEg6TUkgVFpIIikg PCAkeScgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRl c3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA8ICR4JyBQ QVNTSU5HICcxMjozNCc6OnRpbWV0eiBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcg JzEyMzQnOjppbnQgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKSA/IChAID09ICR4KScgUEFTU0lORyAnMTI6 MzQnOjp0aW1lIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkg KEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCJZWS1NTS1ERCIpID8gKEAgPT0gJHgpJyBQQVNT SU5HICcyMDIwLTA3LTE0Jzo6ZGF0ZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAkLmEgPyAoQC5kYXRldGltZSgpID09 ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJFsxLCAwIHRvICQuYSA/IChALmRh dGV0aW1lKCkgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0NSRUFURSBJ TkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/ IChALmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4 KSk7CitEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKaW5kZXggOGRlOTBjNDk1OC4uNmY0NTU0MjgzNiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTEyNDEsNiArMTI0MSw3IEBAIEpvaW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2lu RG9tYWluCiBKb2luRXhwcgorSnNvbkZ1bmNFeHByCiBKb2luSGFzaEVudHJ5CiBKb2luUGF0aAog Sm9pblBhdGhFeHRyYURhdGEKQEAgLTEyNTEsMTggKzEyNTIsMzAgQEAgSnNPYmplY3QKIEpzVmFs dWUKIEpzb25BZ2dDb25zdHJ1Y3RvcgogSnNvbkFnZ1N0YXRlCitKc29uQXJndW1lbnQKIEpzb25B cnJheUFnZwogSnNvbkFycmF5Q29uc3RydWN0b3IKIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IK IEpzb25CYXNlT2JqZWN0SW5mbworSnNvbkJlaGF2aW9yCitKc29uQmVoYXZpb3JUeXBlCitKc29u Q29lcmNpb24KK0pzb25Db2VyY2lvblN0YXRlCitKc29uQ29tbW9uCiBKc29uQ29uc3RydWN0b3JF eHByCiBKc29uQ29uc3RydWN0b3JFeHByU3RhdGUKIEpzb25Db25zdHJ1Y3RvclR5cGUKIEpzb25F bmNvZGluZworSnNvbkV4cHIKK0pzb25FeHByT3AKK0pzb25FeHByUG9zdEV2YWxTdGF0ZQorSnNv bkV4cHJQcmVFdmFsU3RhdGUKK0pzb25FeHByU3RhdGUKIEpzb25Gb3JtYXQKIEpzb25Gb3JtYXRU eXBlCiBKc29uSGFzaEVudHJ5CiBKc29uSXNQcmVkaWNhdGUKK0pzb25JdGVtVHlwZQogSnNvbkl0 ZXJhdGVTdHJpbmdWYWx1ZXNBY3Rpb24KIEpzb25LZXlWYWx1ZQogSnNvbkxleENvbnRleHQKQEAg LTEyODAsNiArMTI5Myw3IEBAIEpzb25QYXJzZUNvbnRleHQKIEpzb25QYXJzZUVycm9yVHlwZQog SnNvblBhdGgKIEpzb25QYXRoQm9vbAorSnNvblBhdGhEYXRhdHlwZVN0YXR1cwogSnNvblBhdGhF eGVjQ29udGV4dAogSnNvblBhdGhFeGVjUmVzdWx0CiBKc29uUGF0aEdpbkFkZFBhdGhJdGVtRnVu YwpAQCAtMTI5MiwxMCArMTMwNiwxNSBAQCBKc29uUGF0aEdpblBhdGhJdGVtCiBKc29uUGF0aEl0 ZW0KIEpzb25QYXRoSXRlbVR5cGUKIEpzb25QYXRoS2V5d29yZAorSnNvblBhdGhNdXRhYmxlQ29u dGV4dAogSnNvblBhdGhQYXJzZUl0ZW0KIEpzb25QYXRoUGFyc2VSZXN1bHQKIEpzb25QYXRoUHJl ZGljYXRlQ2FsbGJhY2sKIEpzb25QYXRoU3RyaW5nCitKc29uUGF0aFZhckNhbGxiYWNrCitKc29u UGF0aFZhcmlhYmxlCitKc29uUGF0aFZhcmlhYmxlRXZhbENvbnRleHQKK0pzb25RdW90ZXMKIEpz b25SZXR1cm5pbmcKIEpzb25TY2FsYXJFeHByCiBKc29uU2VtQWN0aW9uCkBAIC0xMzEyLDYgKzEz MzEsNyBAQCBKc29uVmFsdWVFeHByCiBKc29uVmFsdWVMaXN0CiBKc29uVmFsdWVMaXN0SXRlcmF0 b3IKIEpzb25WYWx1ZVR5cGUKK0pzb25XcmFwcGVyCiBKc29uYgogSnNvbmJBZ2dTdGF0ZQogSnNv bmJDb250YWluZXIKLS0gCjIuMzUuMwoK --000000000000ff2e2c060678442e--