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 1vBzr1-007jHo-6z for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 18:16:03 +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 1vBzr0-00ArYY-3u for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 18:16:01 +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 1vBzqz-00ArYQ-He for pgsql-hackers@lists.postgresql.org; Thu, 23 Oct 2025 18:16:00 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vBzqv-003qzc-2G for pgsql-hackers@postgresql.org; Thu, 23 Oct 2025 18:16:00 +0000 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3307de086d8so1238941a91.2 for ; Thu, 23 Oct 2025 11:15:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1761243355; x=1761848155; darn=postgresql.org; h=mime-version:user-agent:date:to:from:subject:message-id:from:to:cc :subject:date:message-id:reply-to; bh=QFkjfdbMfM3UWyMH+cpMIexiPAid9q63x31QXJyJ3Nc=; b=05XT/3azwQOngE9Ww7iLdMrjeMQpGa0sDJL2Sm6VAQ09O6yNKnqNn57OmTdeo1yyfT F6txzZXIv76rslnt5c1wiB3bW9rXlQbjb/EM/zfcHbe5yxNqVYx5Y99RpB2myihPw9TZ EicXMDCNY3bIwi9TtnEXcIqiVwtlLNBlSpHYhMCxVLAgXEqHA0RpUNj4ejBF7R5set7J Jv4Nirg0UFAnJhxeoSG40KSpHIvTX2gaPMv3OKREN8LgtbIu2BZoBw7msu4mbiljbh4P dcIg9HF0UoInOY/INl//u8ZGSMQft6jic3Nr9wZX9Qiwlafs8LRLs166iKvvSxX5mkR4 r/VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761243355; x=1761848155; h=mime-version:user-agent:date:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QFkjfdbMfM3UWyMH+cpMIexiPAid9q63x31QXJyJ3Nc=; b=doVMwLuvmzv8J5Jdlz0vzGDd/FCWuKkX13KnrXLSjOT+0TOcRtwsjgrG5jprTPA+il l4fcipmzoBjO0y1c5OVLzuxyMfSO8ReSSORK7iQ1jm+QSJP4tKLaijpt9masadOZS7pu bxuFrZH/kgElxEam9Etn90fPh3rgyW9HcukpjqsWAGj7CJkBD3RbYVvYKlhRiCMJcev6 YAzHnnbsL98crbhJWUhL3cU5IYAJqRumWcwZyOdFxDcDauxxIY8wbV1V5F4axcYNRlXB lXoqX2MrKRDuLtMQnOVnF+q2J6dwRs+hY8UoOydnt6y6k2fjTiLBxtqh+J/d6mPZknLG BCMQ== X-Gm-Message-State: AOJu0YykiCuPViJdj5Qgl3kkjmATCdqKAcRx8sWJRJhiauKOP7Pjow05 tv/vAHSFMdJeV/CoXt7aaqG8kwlM8ZSmOwgAPHjPZBWZynqpy5jmRMfHmVCruBfTewLybU158Cx dxs0= X-Gm-Gg: ASbGncv1ZoXnrRUk6B1eorC64ynMrsGFbGC5OxE3q1NoKOvjWmDUhqaY7KJUkYOFBlZ JzjgChs6WA/6Foyznkur68xuq+OPMYkG/T/zCDm/kDzNNpntixXQHIw/SB4yD4+M4LN5dB7T8gn jJNews0dr9xnioYsPpdX3kvnKpxqppUBk+pEINhslJXtOhsP9iKdJQXSdNOdkbxIfRMM+eLA9mO 2xqgHdKCdfAyCZ9mTfX5WklHslKx3jUG3mkqVZZ4FNlnQ2JlwQXiIaP/uN/yJVtMakk+prh6iXf 3bJwYCd9tCQ063NYHCmUuEtXAYtdyivFVQNrTqnPp03iZlIUahi1CBJvLkx1lIxzwCUa+PAHUcV QfQKLJsfZjV005x8CPeItT1MS+pwzUv8AwK9sgGiRbCchTU9yywZM3JEckBpaAtKCgKL/RoFa19 TnFSP5ueXIkmS14KQ3WCEAo4imocVLCl7G X-Google-Smtp-Source: AGHT+IHQYO9JZFdMfQNC+PCCpP8XpuoFQEKTJh/5iy2uaW8vqDDtA0ta1MgRCGXmpTbH0fa5/Me+og== X-Received: by 2002:a17:902:f647:b0:266:ddd:772f with SMTP id d9443c01a7336-290c9c89cc9mr292317595ad.9.1761243355233; Thu, 23 Oct 2025 11:15:55 -0700 (PDT) Received: from jeff-ws-bridge.lan (c-24-7-19-3.hsd1.ca.comcast.net. [24.7.19.3]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2946de03081sm30653375ad.43.2025.10.23.11.15.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Oct 2025 11:15:54 -0700 (PDT) Message-ID: Subject: C11: should we use char32_t for unicode code points? From: Jeff Davis To: pgsql-hackers@postgresql.org Date: Thu, 23 Oct 2025 11:15:54 -0700 Content-Type: multipart/mixed; boundary="=-TLr+vht4o8RMvYEBEU6N" User-Agent: Evolution 3.52.3-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-TLr+vht4o8RMvYEBEU6N Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Now that we're using C11, should we use char32_t for unicode code points? Right now, we use pg_wchar for two purposes:=C2=A0 1. to abstract away some problems with wchar_t on platforms where it's 16 bits; and 2. hold unicode code point values In UTF8, they are are equivalent and can be freely cast back and forth, but not necessarily in other encodings. That can be confusing in some contexts. Attached is a patch to use char32_t for the second purpose. Both are equivalent to uint32, so there's no functional change and no actual typechecking, it's just for readability. Is this helpful, or needless code churn? Regards, Jeff Davis --=-TLr+vht4o8RMvYEBEU6N Content-Disposition: attachment; filename="v1-0001-Use-C11-char32_t-for-Unicode-code-points.patch" Content-Type: text/x-patch; name="v1-0001-Use-C11-char32_t-for-Unicode-code-points.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiNWI2NWViNDk2ZmYwMzY1ZjhjZGUyOTdjNTQ4Njc1NWU2NWZjNGIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU dWUsIDIxIE9jdCAyMDI1IDEzOjE2OjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2MV0gVXNlIEMx MSBjaGFyMzJfdCBmb3IgVW5pY29kZSBjb2RlIHBvaW50cy4KCi0tLQogc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlci5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jICAgICB8IDQ0ICsrKysrKysrKystLS0tLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyAgICAgICAgICAgICAgIHwgNDAgKysrKysrLS0tLS0t LQogc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5jICAgICAgICAgICAgICAgIHwgIDQgKy0K IHNyYy9jb21tb24vc2FzbHByZXAuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDQ4ICsrKysr KysrLS0tLS0tLS0KIHNyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYyAgICAgICAgICAgICAg ICB8IDIzICsrKystLS0tCiBzcmMvY29tbW9uL3VuaWNvZGUvY2F0ZWdvcnlfdGVzdC5jICAgICAg ICAgICAgfCAgMyArLQogLi4uL3VuaWNvZGUvZ2VuZXJhdGUtbm9ybV90ZXN0X3RhYmxlLnBsICAg ICAgIHwgIDQgKy0KIC4uLi91bmljb2RlL2dlbmVyYXRlLXVuaWNvZGVfY2FzZV90YWJsZS5wbCAg ICB8ICA3ICstLQogLi4uL2dlbmVyYXRlLXVuaWNvZGVfY2F0ZWdvcnlfdGFibGUucGwgICAgICAg IHwgIDggKy0tCiBzcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90ZXN0LmMgICAgICAgICAgICAgICAg fCAgNiArLQogc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYyAgICAgICAgICAgICAgICAgICAgIHwg NTYgKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5LmMgICAg ICAgICAgICAgICAgIHwgNTAgKysrKysrKystLS0tLS0tLS0KIHNyYy9jb21tb24vdW5pY29kZV9u b3JtLmMgICAgICAgICAgICAgICAgICAgICB8IDU2ICsrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9m ZV91dGlscy9tYnByaW50LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBzcmMvaW5j bHVkZS9jLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArKwogc3JjL2luY2x1 ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oICAgICAgICAgICAgIHwgMTAgKystLQogc3JjL2luY2x1 ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oICAgICAgIHwgMTMgKystLS0KIHNyYy9pbmNs dWRlL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5LmggICAgICAgICB8IDQ2ICsrKysrKysrLS0tLS0t LQogc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnlfdGFibGUuaCAgIHwgIDggKy0t CiBzcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9ub3JtLmggICAgICAgICAgICAgfCAgNiArLQog c3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaCAgICAgICAgICAgICAgICAgICAgIHwgMTYgKysrLS0t CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMSArCiAy MyBmaWxlcyBjaGFuZ2VkLCAyMzcgaW5zZXJ0aW9ucygrKSwgMjIxIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZXIuYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZXIuYwppbmRleCAzM2EwNDA1MDZiNC4uODgxMjY2MjZmYjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZXIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vy LmMKQEAgLTMzOSw3ICszMzksNyBAQCBoZXh2YWwodW5zaWduZWQgY2hhciBjKQogCiAvKiBpcyBV bmljb2RlIGNvZGUgcG9pbnQgYWNjZXB0YWJsZT8gKi8KIHN0YXRpYyB2b2lkCi1jaGVja191bmlj b2RlX3ZhbHVlKHBnX3djaGFyIGMpCitjaGVja191bmljb2RlX3ZhbHVlKGNoYXIzMl90IGMpCiB7 CiAJaWYgKCFpc192YWxpZF91bmljb2RlX2NvZGVwb2ludChjKSkKIAkJZXJlcG9ydChFUlJPUiwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKaW5kZXggM2RjNjExYjUw ZTEuLjEwMjFlMGQxMjliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9j YWxlX2J1aWx0aW4uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0 aW4uYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgi CiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5oIgogI2luY2x1ZGUgImNvbW1vbi91bmlj b2RlX2NhdGVnb3J5LmgiCi0jaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3Bn X2xvY2FsZS5oIgpAQCAtMzUsNiArMzQsMjMgQEAgc3RydWN0IFdvcmRCb3VuZGFyeVN0YXRlCiAJ Ym9vbAkJcHJldl9hbG51bTsKIH07CiAKKy8qCisgKiBJbiBVVEYtOCwgcGdfd2NoYXIgaXMgZ3Vh cmFudGVlZCB0byBiZSB0aGUgY29kZSBwb2ludCB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBj aGFyMzJfdAordG9fY2hhcjMyKHBnX3djaGFyIHdjKQoreworCUFzc2VydChHZXREYXRhYmFzZUVu Y29kaW5nKCkgPT0gUEdfVVRGOCk7CisJcmV0dXJuIChjaGFyMzJfdCkgd2M7Cit9CisKK3N0YXRp YyBpbmxpbmUgcGdfd2NoYXIKK3RvX3BnX3djaGFyKGNoYXIzMl90IGMzMikKK3sKKwlBc3NlcnQo R2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOworCXJldHVybiAocGdfd2NoYXIpIGMz MjsKK30KKwogLyoKICAqIFNpbXBsZSB3b3JkIGJvdW5kYXJ5IGl0ZXJhdG9yIHRoYXQgZHJhd3Mg Ym91bmRhcmllcyBlYWNoIHRpbWUgdGhlIHJlc3VsdCBvZgogICogcGdfdV9pc2FsbnVtKCkgY2hh bmdlcy4KQEAgLTQ3LDcgKzYzLDcgQEAgaW5pdGNhcF93Ym5leHQodm9pZCAqc3RhdGUpCiAJd2hp bGUgKHdic3RhdGUtPm9mZnNldCA8IHdic3RhdGUtPmxlbiAmJgogCQkgICB3YnN0YXRlLT5zdHJb d2JzdGF0ZS0+b2Zmc2V0XSAhPSAnXDAnKQogCXsKLQkJcGdfd2NoYXIJdSA9IHV0ZjhfdG9fdW5p Y29kZSgodW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKworCQljaGFyMzJfdAl1ID0gdXRm OF90b191bmljb2RlKCh1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciArCiAJCQkJCQkJCQkJ d2JzdGF0ZS0+b2Zmc2V0KTsKIAkJYm9vbAkJY3Vycl9hbG51bSA9IHBnX3VfaXNhbG51bSh1LCB3 YnN0YXRlLT5wb3NpeCk7CiAKQEAgLTExMiw2MSArMTI4LDYxIEBAIHN0cmZvbGRfYnVpbHRpbihj aGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNs ZW4sCiBzdGF0aWMgYm9vbAogd2NfaXNkaWdpdF9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2Nh bGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBnX3VfaXNkaWdpdCh3YywgIWxvY2FsZS0+YnVpbHRp bi5jYXNlbWFwX2Z1bGwpOworCXJldHVybiBwZ191X2lzZGlnaXQodG9fY2hhcjMyKHdjKSwgIWxv Y2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXNhbHBo YV9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBn X3VfaXNhbHBoYSh3Yyk7CisJcmV0dXJuIHBnX3VfaXNhbHBoYSh0b19jaGFyMzIod2MpKTsKIH0K IAogc3RhdGljIGJvb2wKIHdjX2lzYWxudW1fYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxl X3QgbG9jYWxlKQogewotCXJldHVybiBwZ191X2lzYWxudW0od2MsICFsb2NhbGUtPmJ1aWx0aW4u Y2FzZW1hcF9mdWxsKTsKKwlyZXR1cm4gcGdfdV9pc2FsbnVtKHRvX2NoYXIzMih3YyksICFsb2Nh bGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzdXBwZXJf YnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBwZ191 X2lzdXBwZXIod2MpOworCXJldHVybiBwZ191X2lzdXBwZXIodG9fY2hhcjMyKHdjKSk7CiB9CiAK IHN0YXRpYyBib29sCiB3Y19pc2xvd2VyX2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90 IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc2xvd2VyKHdjKTsKKwlyZXR1cm4gcGdfdV9pc2xv d2VyKHRvX2NoYXIzMih3YykpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXNncmFwaF9idWlsdGlu KHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBnX3VfaXNncmFw aCh3Yyk7CisJcmV0dXJuIHBnX3VfaXNncmFwaCh0b19jaGFyMzIod2MpKTsKIH0KIAogc3RhdGlj IGJvb2wKIHdjX2lzcHJpbnRfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxl KQogewotCXJldHVybiBwZ191X2lzcHJpbnQod2MpOworCXJldHVybiBwZ191X2lzcHJpbnQodG9f Y2hhcjMyKHdjKSk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc3B1bmN0X2J1aWx0aW4ocGdfd2No YXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc3B1bmN0KHdjLCAh bG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CisJcmV0dXJuIHBnX3VfaXNwdW5jdCh0b19j aGFyMzIod2MpLCAhbG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CiB9CiAKIHN0YXRpYyBi b29sCiB3Y19pc3NwYWNlX2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkK IHsKLQlyZXR1cm4gcGdfdV9pc3NwYWNlKHdjKTsKKwlyZXR1cm4gcGdfdV9pc3NwYWNlKHRvX2No YXIzMih3YykpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXN4ZGlnaXRfYnVpbHRpbihwZ193Y2hh ciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBwZ191X2lzeGRpZ2l0KHdjLCAh bG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CisJcmV0dXJuIHBnX3VfaXN4ZGlnaXQodG9f Y2hhcjMyKHdjKSwgIWxvY2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOwogfQogCiBzdGF0aWMg Ym9vbApAQCAtMTc5LDEzICsxOTUsMTMgQEAgY2hhcl9pc19jYXNlZF9idWlsdGluKGNoYXIgY2gs IHBnX2xvY2FsZV90IGxvY2FsZSkKIHN0YXRpYyBwZ193Y2hhcgogd2NfdG91cHBlcl9idWlsdGlu KHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHVuaWNvZGVfdXBw ZXJjYXNlX3NpbXBsZSh3Yyk7CisJcmV0dXJuIHRvX3BnX3djaGFyKHVuaWNvZGVfdXBwZXJjYXNl X3NpbXBsZSh0b19jaGFyMzIod2MpKSk7CiB9CiAKIHN0YXRpYyBwZ193Y2hhcgogd2NfdG9sb3dl cl9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHVu aWNvZGVfbG93ZXJjYXNlX3NpbXBsZSh3Yyk7CisJcmV0dXJuIHRvX3BnX3djaGFyKHVuaWNvZGVf bG93ZXJjYXNlX3NpbXBsZSh0b19jaGFyMzIod2MpKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgY3R5cGVfbWV0aG9kcyBjdHlwZV9tZXRob2RzX2J1aWx0aW4gPSB7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Zh cmxlbmEuYwppbmRleCAyYzM5OGNkOWU1Yy4uZmExYTk3NWNhYjkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Zh cmxlbmEuYwpAQCAtNTQxOSwxMiArNTQxOSwxMiBAQCB1bmljb2RlX2Fzc2lnbmVkKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygiVW5pY29kZSBjYXRlZ29y aXphdGlvbiBjYW4gb25seSBiZSBwZXJmb3JtZWQgaWYgc2VydmVyIGVuY29kaW5nIGlzIFVURjgi KSkpOwogCi0JLyogY29udmVydCB0byBwZ193Y2hhciAqLworCS8qIGNvbnZlcnQgdG8gY2hhcjMy X3QgKi8KIAlzaXplID0gcGdfbWJzdHJsZW5fd2l0aF9sZW4oVkFSREFUQV9BTlkoaW5wdXQpLCBW QVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwogCXAgPSAodW5zaWduZWQgY2hhciAqKSBWQVJEQVRB X0FOWShpbnB1dCk7CiAJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCiAJewotCQlwZ193 Y2hhcgl1Y2hhciA9IHV0ZjhfdG9fdW5pY29kZShwKTsKKwkJY2hhcjMyX3QJdWNoYXIgPSB1dGY4 X3RvX3VuaWNvZGUocCk7CiAJCWludAkJCWNhdGVnb3J5ID0gdW5pY29kZV9jYXRlZ29yeSh1Y2hh cik7CiAKIAkJaWYgKGNhdGVnb3J5ID09IFBHX1VfVU5BU1NJR05FRCkKQEAgLTU0NDMsMjQgKzU0 NDMsMjQgQEAgdW5pY29kZV9ub3JtYWxpemVfZnVuYyhQR19GVU5DVElPTl9BUkdTKQogCWNoYXIJ ICAgKmZvcm1zdHIgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOwogCVVu aWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtOwogCWludAkJCXNpemU7Ci0JcGdfd2NoYXIgICAq aW5wdXRfY2hhcnM7Ci0JcGdfd2NoYXIgICAqb3V0cHV0X2NoYXJzOworCWNoYXIzMl90ICAgKmlu cHV0X2NoYXJzOworCWNoYXIzMl90ICAgKm91dHB1dF9jaGFyczsKIAl1bnNpZ25lZCBjaGFyICpw OwogCXRleHQJICAgKnJlc3VsdDsKIAlpbnQJCQlpOwogCiAJZm9ybSA9IHVuaWNvZGVfbm9ybV9m b3JtX2Zyb21fc3RyaW5nKGZvcm1zdHIpOwogCi0JLyogY29udmVydCB0byBwZ193Y2hhciAqLwor CS8qIGNvbnZlcnQgdG8gY2hhcjMyX3QgKi8KIAlzaXplID0gcGdfbWJzdHJsZW5fd2l0aF9sZW4o VkFSREFUQV9BTlkoaW5wdXQpLCBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwotCWlucHV0X2No YXJzID0gcGFsbG9jKChzaXplICsgMSkgKiBzaXplb2YocGdfd2NoYXIpKTsKKwlpbnB1dF9jaGFy cyA9IHBhbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90KSk7CiAJcCA9ICh1bnNpZ25l ZCBjaGFyICopIFZBUkRBVEFfQU5ZKGlucHV0KTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KQogCXsKIAkJaW5wdXRfY2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7CiAJCXAgKz0gcGdf dXRmX21ibGVuKHApOwogCX0KLQlpbnB1dF9jaGFyc1tpXSA9IChwZ193Y2hhcikgJ1wwJzsKKwlp bnB1dF9jaGFyc1tpXSA9IChjaGFyMzJfdCkgJ1wwJzsKIAlBc3NlcnQoKGNoYXIgKikgcCA9PSBW QVJEQVRBX0FOWShpbnB1dCkgKyBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwogCiAJLyogYWN0 aW9uICovCkBAIC01NDY4LDcgKzU0NjgsNyBAQCB1bmljb2RlX25vcm1hbGl6ZV9mdW5jKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAkvKiBjb252ZXJ0IGJhY2sgdG8gVVRGLTggc3RyaW5nICovCiAJc2l6 ZSA9IDA7Ci0JZm9yIChwZ193Y2hhciAqd3AgPSBvdXRwdXRfY2hhcnM7ICp3cDsgd3ArKykKKwlm b3IgKGNoYXIzMl90ICp3cCA9IG91dHB1dF9jaGFyczsgKndwOyB3cCsrKQogCXsKIAkJdW5zaWdu ZWQgY2hhciBidWZbNF07CiAKQEAgLTU0ODAsNyArNTQ4MCw3IEBAIHVuaWNvZGVfbm9ybWFsaXpl X2Z1bmMoUEdfRlVOQ1RJT05fQVJHUykKIAlTRVRfVkFSU0laRShyZXN1bHQsIHNpemUgKyBWQVJI RFJTWik7CiAKIAlwID0gKHVuc2lnbmVkIGNoYXIgKikgVkFSREFUQV9BTlkocmVzdWx0KTsKLQlm b3IgKHBnX3djaGFyICp3cCA9IG91dHB1dF9jaGFyczsgKndwOyB3cCsrKQorCWZvciAoY2hhcjMy X3QgKndwID0gb3V0cHV0X2NoYXJzOyAqd3A7IHdwKyspCiAJewogCQl1bmljb2RlX3RvX3V0Zjgo KndwLCBwKTsKIAkJcCArPSBwZ191dGZfbWJsZW4ocCk7CkBAIC01NTA5LDggKzU1MDksOCBAQCB1 bmljb2RlX2lzX25vcm1hbGl6ZWQoUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICpmb3Jtc3Ry ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKIAlVbmljb2RlTm9ybWFs aXphdGlvbkZvcm0gZm9ybTsKIAlpbnQJCQlzaXplOwotCXBnX3djaGFyICAgKmlucHV0X2NoYXJz OwotCXBnX3djaGFyICAgKm91dHB1dF9jaGFyczsKKwljaGFyMzJfdCAgICppbnB1dF9jaGFyczsK KwljaGFyMzJfdCAgICpvdXRwdXRfY2hhcnM7CiAJdW5zaWduZWQgY2hhciAqcDsKIAlpbnQJCQlp OwogCVVuaWNvZGVOb3JtYWxpemF0aW9uUUMgcXVpY2tjaGVjazsKQEAgLTU1MTksMTYgKzU1MTks MTYgQEAgdW5pY29kZV9pc19ub3JtYWxpemVkKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlmb3JtID0g dW5pY29kZV9ub3JtX2Zvcm1fZnJvbV9zdHJpbmcoZm9ybXN0cik7CiAKLQkvKiBjb252ZXJ0IHRv IHBnX3djaGFyICovCisJLyogY29udmVydCB0byBjaGFyMzJfdCAqLwogCXNpemUgPSBwZ19tYnN0 cmxlbl93aXRoX2xlbihWQVJEQVRBX0FOWShpbnB1dCksIFZBUlNJWkVfQU5ZX0VYSERSKGlucHV0 KSk7Ci0JaW5wdXRfY2hhcnMgPSBwYWxsb2MoKHNpemUgKyAxKSAqIHNpemVvZihwZ193Y2hhcikp OworCWlucHV0X2NoYXJzID0gcGFsbG9jKChzaXplICsgMSkgKiBzaXplb2YoY2hhcjMyX3QpKTsK IAlwID0gKHVuc2lnbmVkIGNoYXIgKikgVkFSREFUQV9BTlkoaW5wdXQpOwogCWZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspCiAJewogCQlpbnB1dF9jaGFyc1tpXSA9IHV0ZjhfdG9fdW5pY29kZShw KTsKIAkJcCArPSBwZ191dGZfbWJsZW4ocCk7CiAJfQotCWlucHV0X2NoYXJzW2ldID0gKHBnX3dj aGFyKSAnXDAnOworCWlucHV0X2NoYXJzW2ldID0gKGNoYXIzMl90KSAnXDAnOwogCUFzc2VydCgo Y2hhciAqKSBwID09IFZBUkRBVEFfQU5ZKGlucHV0KSArIFZBUlNJWkVfQU5ZX0VYSERSKGlucHV0 KSk7CiAKIAkvKiBxdWljayBjaGVjayAoc2VlIFVBWCAjMTUpICovCkBAIC01NTQyLDExICs1NTQy LDExIEBAIHVuaWNvZGVfaXNfbm9ybWFsaXplZChQR19GVU5DVElPTl9BUkdTKQogCW91dHB1dF9j aGFycyA9IHVuaWNvZGVfbm9ybWFsaXplKGZvcm0sIGlucHV0X2NoYXJzKTsKIAogCW91dHB1dF9z aXplID0gMDsKLQlmb3IgKHBnX3djaGFyICp3cCA9IG91dHB1dF9jaGFyczsgKndwOyB3cCsrKQor CWZvciAoY2hhcjMyX3QgKndwID0gb3V0cHV0X2NoYXJzOyAqd3A7IHdwKyspCiAJCW91dHB1dF9z aXplKys7CiAKIAlyZXN1bHQgPSAoc2l6ZSA9PSBvdXRwdXRfc2l6ZSkgJiYKLQkJKG1lbWNtcChp bnB1dF9jaGFycywgb3V0cHV0X2NoYXJzLCBzaXplICogc2l6ZW9mKHBnX3djaGFyKSkgPT0gMCk7 CisJCShtZW1jbXAoaW5wdXRfY2hhcnMsIG91dHB1dF9jaGFycywgc2l6ZSAqIHNpemVvZihjaGFy MzJfdCkpID09IDApOwogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KQEAgLTU2MDIsNyAr NTYwMiw3IEBAIHVuaXN0cihQR19GVU5DVElPTl9BUkdTKQogCWludAkJCWxlbjsKIAlTdHJpbmdJ bmZvRGF0YSBzdHI7CiAJdGV4dAkgICAqcmVzdWx0OwotCXBnX3djaGFyCXBhaXJfZmlyc3QgPSAw OworCWNoYXIzMl90CXBhaXJfZmlyc3QgPSAwOwogCWNoYXIJCWNidWZbTUFYX1VOSUNPREVfRVFV SVZBTEVOVF9TVFJJTkcgKyAxXTsKIAogCWluc3RyID0gVkFSREFUQV9BTlkoaW5wdXRfdGV4dCk7 CkBAIC01NjI2LDcgKzU2MjYsNyBAQCB1bmlzdHIoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWVsc2Ug aWYgKChsZW4gPj0gNSAmJiBpc3hkaWdpdHNfbihpbnN0ciArIDEsIDQpKSB8fAogCQkJCQkgKGxl biA+PSA2ICYmIGluc3RyWzFdID09ICd1JyAmJiBpc3hkaWdpdHNfbihpbnN0ciArIDIsIDQpKSkK IAkJCXsKLQkJCQlwZ193Y2hhcgl1bmljb2RlOworCQkJCWNoYXIzMl90CXVuaWNvZGU7CiAJCQkJ aW50CQkJb2Zmc2V0ID0gaW5zdHJbMV0gPT0gJ3UnID8gMiA6IDE7CiAKIAkJCQl1bmljb2RlID0g aGV4dmFsX24oaW5zdHIgKyBvZmZzZXQsIDQpOwpAQCAtNTY2Miw3ICs1NjYyLDcgQEAgdW5pc3Ry KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQl9CiAJCQllbHNlIGlmIChsZW4gPj0gOCAmJiBpbnN0clsx XSA9PSAnKycgJiYgaXN4ZGlnaXRzX24oaW5zdHIgKyAyLCA2KSkKIAkJCXsKLQkJCQlwZ193Y2hh cgl1bmljb2RlOworCQkJCWNoYXIzMl90CXVuaWNvZGU7CiAKIAkJCQl1bmljb2RlID0gaGV4dmFs X24oaW5zdHIgKyAyLCA2KTsKIApAQCAtNTY5Nyw3ICs1Njk3LDcgQEAgdW5pc3RyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCQl9CiAJCQllbHNlIGlmIChsZW4gPj0gMTAgJiYgaW5zdHJbMV0gPT0gJ1Un ICYmIGlzeGRpZ2l0c19uKGluc3RyICsgMiwgOCkpCiAJCQl7Ci0JCQkJcGdfd2NoYXIJdW5pY29k ZTsKKwkJCQljaGFyMzJfdAl1bmljb2RlOwogCiAJCQkJdW5pY29kZSA9IGhleHZhbF9uKGluc3Ry ICsgMiwgOCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYwppbmRleCA4ODZlY2JhZDg3MS4uZmI2Mjll ZDVjOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMKQEAgLTg2Miw3ICs4NjIsNyBAQCBwZXJmb3Jt X2RlZmF1bHRfZW5jb2RpbmdfY29udmVyc2lvbihjb25zdCBjaGFyICpzcmMsIGludCBsZW4sCiAg KiBtYXkgY2FsbCB0aGlzIG91dHNpZGUgYW55IHRyYW5zYWN0aW9uLCBvciBpbiBhbiBhYm9ydGVk IHRyYW5zYWN0aW9uLgogICovCiB2b2lkCi1wZ191bmljb2RlX3RvX3NlcnZlcihwZ193Y2hhciBj LCB1bnNpZ25lZCBjaGFyICpzKQorcGdfdW5pY29kZV90b19zZXJ2ZXIoY2hhcjMyX3QgYywgdW5z aWduZWQgY2hhciAqcykKIHsKIAl1bnNpZ25lZCBjaGFyIGNfYXNfdXRmOFtNQVhfTVVMVElCWVRF X0NIQVJfTEVOICsgMV07CiAJaW50CQkJY19hc191dGY4X2xlbjsKQEAgLTkyNCw3ICs5MjQsNyBA QCBwZ191bmljb2RlX3RvX3NlcnZlcihwZ193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICpzKQogICog YnV0IHNpbXBseSByZXR1cm4gZmFsc2Ugb24gY29udmVyc2lvbiBmYWlsdXJlLgogICovCiBib29s Ci1wZ191bmljb2RlX3RvX3NlcnZlcl9ub2Vycm9yKHBnX3djaGFyIGMsIHVuc2lnbmVkIGNoYXIg KnMpCitwZ191bmljb2RlX3RvX3NlcnZlcl9ub2Vycm9yKGNoYXIzMl90IGMsIHVuc2lnbmVkIGNo YXIgKnMpCiB7CiAJdW5zaWduZWQgY2hhciBjX2FzX3V0ZjhbTUFYX01VTFRJQllURV9DSEFSX0xF TiArIDFdOwogCWludAkJCWNfYXNfdXRmOF9sZW47CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3Nh c2xwcmVwLmMgYi9zcmMvY29tbW9uL3Nhc2xwcmVwLmMKaW5kZXggOTdiZWI0Nzk0MGIuLjEwMWU4 ZDY1YTRkIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3Nhc2xwcmVwLmMKKysrIGIvc3JjL2NvbW1v bi9zYXNscHJlcC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIFByb3RvdHlwZXMgZm9yIGxvY2Fs IGZ1bmN0aW9ucyAqLwogc3RhdGljIGludAljb2RlcG9pbnRfcmFuZ2VfY21wKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpOwotc3RhdGljIGJvb2wgaXNfY29kZV9pbl90YWJsZShwZ193Y2hh ciBjb2RlLCBjb25zdCBwZ193Y2hhciAqbWFwLCBpbnQgbWFwc2l6ZSk7CitzdGF0aWMgYm9vbCBp c19jb2RlX2luX3RhYmxlKGNoYXIzMl90IGNvZGUsIGNvbnN0IGNoYXIzMl90ICptYXAsIGludCBt YXBzaXplKTsKIHN0YXRpYyBpbnQJcGdfdXRmOF9zdHJpbmdfbGVuKGNvbnN0IGNoYXIgKnNvdXJj ZSk7CiAKIC8qCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBpbnQJcGdfdXRmOF9zdHJpbmdfbGVu KGNvbnN0IGNoYXIgKnNvdXJjZSk7CiAgKgogICogVGhlc2UgYXJlIGFsbCBtYXBwZWQgdG8gdGhl IEFTQ0lJIHNwYWNlIGNoYXJhY3RlciAoVSswMEEwKS4KICAqLwotc3RhdGljIGNvbnN0IHBnX3dj aGFyIG5vbl9hc2NpaV9zcGFjZV9yYW5nZXNbXSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3Qgbm9u X2FzY2lpX3NwYWNlX3Jhbmdlc1tdID0KIHsKIAkweDAwQTAsIDB4MDBBMCwKIAkweDE2ODAsIDB4 MTY4MCwKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGNvbnN0IHBnX3djaGFyIG5vbl9hc2NpaV9z cGFjZV9yYW5nZXNbXSA9CiAgKgogICogSWYgYW55IG9mIHRoZXNlIGFwcGVhciBpbiB0aGUgaW5w dXQsIHRoZXkgYXJlIHJlbW92ZWQuCiAgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBjb21tb25s eV9tYXBwZWRfdG9fbm90aGluZ19yYW5nZXNbXSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgY29t bW9ubHlfbWFwcGVkX3RvX25vdGhpbmdfcmFuZ2VzW10gPQogewogCTB4MDBBRCwgMHgwMEFELAog CTB4MDM0RiwgMHgwMzRGLApAQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hh ciBjb21tb25seV9tYXBwZWRfdG9fbm90aGluZ19yYW5nZXNbXSA9CiAgKiB0YWJsZXMsIHNvIG9u ZSBjb2RlIG1pZ2h0IG9yaWdpbmF0ZSBmcm9tIG11bHRpcGxlIHNvdXJjZSB0YWJsZXMuCiAgKiBB ZGphY2VudCByYW5nZXMgaGF2ZSBhbHNvIGJlZW4gbWVyZ2VkIHRvZ2V0aGVyLCB0byBzYXZlIHNw YWNlLgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgcHJvaGliaXRlZF9vdXRwdXRfcmFuZ2Vz W10gPQorc3RhdGljIGNvbnN0IGNoYXIzMl90IHByb2hpYml0ZWRfb3V0cHV0X3Jhbmdlc1tdID0K IHsKIAkweDAwMDAsIDB4MDAxRiwJCQkJLyogQy4yLjEgKi8KIAkweDAwN0YsIDB4MDBBMCwJCQkJ LyogQy4xLjIsIEMuMi4xLCBDLjIuMiAqLwpAQCAtMTU1LDcgKzE1NSw3IEBAIHN0YXRpYyBjb25z dCBwZ193Y2hhciBwcm9oaWJpdGVkX291dHB1dF9yYW5nZXNbXSA9CiB9OwogCiAvKiBBLjEgVW5h c3NpZ25lZCBjb2RlIHBvaW50cyBpbiBVbmljb2RlIDMuMiAqLwotc3RhdGljIGNvbnN0IHBnX3dj aGFyIHVuYXNzaWduZWRfY29kZXBvaW50X3Jhbmdlc1tdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJf dCB1bmFzc2lnbmVkX2NvZGVwb2ludF9yYW5nZXNbXSA9CiB7CiAJMHgwMjIxLCAweDAyMjEsCiAJ MHgwMjM0LCAweDAyNEYsCkBAIC01NTYsNyArNTU2LDcgQEAgc3RhdGljIGNvbnN0IHBnX3djaGFy IHVuYXNzaWduZWRfY29kZXBvaW50X3Jhbmdlc1tdID0KIH07CiAKIC8qIEQuMSBDaGFyYWN0ZXJz IHdpdGggYmlkaXJlY3Rpb25hbCBwcm9wZXJ0eSAiUiIgb3IgIkFMIiAqLwotc3RhdGljIGNvbnN0 IHBnX3djaGFyIFJhbmRBTENhdF9jb2RlcG9pbnRfcmFuZ2VzW10gPQorc3RhdGljIGNvbnN0IGNo YXIzMl90IFJhbmRBTENhdF9jb2RlcG9pbnRfcmFuZ2VzW10gPQogewogCTB4MDVCRSwgMHgwNUJF LAogCTB4MDVDMCwgMHgwNUMwLApAQCAtNTk1LDcgKzU5NSw3IEBAIHN0YXRpYyBjb25zdCBwZ193 Y2hhciBSYW5kQUxDYXRfY29kZXBvaW50X3Jhbmdlc1tdID0KIH07CiAKIC8qIEQuMiBDaGFyYWN0 ZXJzIHdpdGggYmlkaXJlY3Rpb25hbCBwcm9wZXJ0eSAiTCIgKi8KLXN0YXRpYyBjb25zdCBwZ193 Y2hhciBMQ2F0X2NvZGVwb2ludF9yYW5nZXNbXSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgTENh dF9jb2RlcG9pbnRfcmFuZ2VzW10gPQogewogCTB4MDA0MSwgMHgwMDVBLAogCTB4MDA2MSwgMHgw MDdBLApAQCAtOTY4LDggKzk2OCw4IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciBMQ2F0X2NvZGVw b2ludF9yYW5nZXNbXSA9CiBzdGF0aWMgaW50CiBjb2RlcG9pbnRfcmFuZ2VfY21wKGNvbnN0IHZv aWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7Ci0JY29uc3QgcGdfd2NoYXIgKmtleSA9IChjb25zdCBw Z193Y2hhciAqKSBhOwotCWNvbnN0IHBnX3djaGFyICpyYW5nZSA9IChjb25zdCBwZ193Y2hhciAq KSBiOworCWNvbnN0IGNoYXIzMl90ICprZXkgPSAoY29uc3QgY2hhcjMyX3QgKikgYTsKKwljb25z dCBjaGFyMzJfdCAqcmFuZ2UgPSAoY29uc3QgY2hhcjMyX3QgKikgYjsKIAogCWlmICgqa2V5IDwg cmFuZ2VbMF0pCiAJCXJldHVybiAtMTsJCQkJLyogbGVzcyB0aGFuIGxvd2VyIGJvdW5kICovCkBA IC05ODAsMTQgKzk4MCwxNCBAQCBjb2RlcG9pbnRfcmFuZ2VfY21wKGNvbnN0IHZvaWQgKmEsIGNv bnN0IHZvaWQgKmIpCiB9CiAKIHN0YXRpYyBib29sCi1pc19jb2RlX2luX3RhYmxlKHBnX3djaGFy IGNvZGUsIGNvbnN0IHBnX3djaGFyICptYXAsIGludCBtYXBzaXplKQoraXNfY29kZV9pbl90YWJs ZShjaGFyMzJfdCBjb2RlLCBjb25zdCBjaGFyMzJfdCAqbWFwLCBpbnQgbWFwc2l6ZSkKIHsKIAlB c3NlcnQobWFwc2l6ZSAlIDIgPT0gMCk7CiAKIAlpZiAoY29kZSA8IG1hcFswXSB8fCBjb2RlID4g bWFwW21hcHNpemUgLSAxXSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGJzZWFyY2goJmNvZGUs IG1hcCwgbWFwc2l6ZSAvIDIsIHNpemVvZihwZ193Y2hhcikgKiAyLAorCWlmIChic2VhcmNoKCZj b2RlLCBtYXAsIG1hcHNpemUgLyAyLCBzaXplb2YoY2hhcjMyX3QpICogMiwKIAkJCQljb2RlcG9p bnRfcmFuZ2VfY21wKSkKIAkJcmV0dXJuIHRydWU7CiAJZWxzZQpAQCAtMTA0Niw4ICsxMDQ2LDgg QEAgcGdfdXRmOF9zdHJpbmdfbGVuKGNvbnN0IGNoYXIgKnNvdXJjZSkKIHBnX3Nhc2xwcmVwX3Jj CiBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCkKIHsKLQlwZ193 Y2hhciAgICppbnB1dF9jaGFycyA9IE5VTEw7Ci0JcGdfd2NoYXIgICAqb3V0cHV0X2NoYXJzID0g TlVMTDsKKwljaGFyMzJfdCAgICppbnB1dF9jaGFycyA9IE5VTEw7CisJY2hhcjMyX3QgICAqb3V0 cHV0X2NoYXJzID0gTlVMTDsKIAlpbnQJCQlpbnB1dF9zaXplOwogCWNoYXIJICAgKnJlc3VsdDsK IAlpbnQJCQlyZXN1bHRfc2l6ZTsKQEAgLTEwNTUsNyArMTA1NSw3IEBAIHBnX3Nhc2xwcmVwKGNv bnN0IGNoYXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQogCWludAkJCWk7CiAJYm9vbAkJY29udGFp bnNfUmFuZEFMQ2F0OwogCXVuc2lnbmVkIGNoYXIgKnA7Ci0JcGdfd2NoYXIgICAqd3A7CisJY2hh cjMyX3QgICAqd3A7CiAKIAkvKiBFbnN1cmUgd2UgcmV0dXJuICpvdXRwdXQgYXMgTlVMTCBvbiBm YWlsdXJlICovCiAJKm91dHB1dCA9IE5VTEw7CkBAIC0xMDgwLDEwICsxMDgwLDEwIEBAIHBnX3Nh c2xwcmVwKGNvbnN0IGNoYXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQogCWlucHV0X3NpemUgPSBw Z191dGY4X3N0cmluZ19sZW4oaW5wdXQpOwogCWlmIChpbnB1dF9zaXplIDwgMCkKIAkJcmV0dXJu IFNBU0xQUkVQX0lOVkFMSURfVVRGODsKLQlpZiAoaW5wdXRfc2l6ZSA+PSBNYXhBbGxvY1NpemUg LyBzaXplb2YocGdfd2NoYXIpKQorCWlmIChpbnB1dF9zaXplID49IE1heEFsbG9jU2l6ZSAvIHNp emVvZihjaGFyMzJfdCkpCiAJCWdvdG8gb29tOwogCi0JaW5wdXRfY2hhcnMgPSBBTExPQygoaW5w dXRfc2l6ZSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJaW5wdXRfY2hhcnMgPSBBTExPQygo aW5wdXRfc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90KSk7CiAJaWYgKCFpbnB1dF9jaGFycykK IAkJZ290byBvb207CiAKQEAgLTEwOTMsNyArMTA5Myw3IEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNo YXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQogCQlpbnB1dF9jaGFyc1tpXSA9IHV0ZjhfdG9fdW5p Y29kZShwKTsKIAkJcCArPSBwZ191dGZfbWJsZW4ocCk7CiAJfQotCWlucHV0X2NoYXJzW2ldID0g KHBnX3djaGFyKSAnXDAnOworCWlucHV0X2NoYXJzW2ldID0gKGNoYXIzMl90KSAnXDAnOwogCiAJ LyoKIAkgKiBUaGUgc3RlcHMgYmVsb3cgY29ycmVzcG9uZCB0byB0aGUgc3RlcHMgbGlzdGVkIGlu IFtSRkMzNDU0XSwgU2VjdGlvbgpAQCAtMTEwNyw3ICsxMTA3LDcgQEAgcGdfc2FzbHByZXAoY29u c3QgY2hhciAqaW5wdXQsIGNoYXIgKipvdXRwdXQpCiAJY291bnQgPSAwOwogCWZvciAoaSA9IDA7 IGkgPCBpbnB1dF9zaXplOyBpKyspCiAJewotCQlwZ193Y2hhcgljb2RlID0gaW5wdXRfY2hhcnNb aV07CisJCWNoYXIzMl90CWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsKIAogCQlpZiAoSVNfQ09ERV9J Tl9UQUJMRShjb2RlLCBub25fYXNjaWlfc3BhY2VfcmFuZ2VzKSkKIAkJCWlucHV0X2NoYXJzW2Nv dW50KytdID0gMHgwMDIwOwpAQCAtMTExOCw3ICsxMTE4LDcgQEAgcGdfc2FzbHByZXAoY29uc3Qg Y2hhciAqaW5wdXQsIGNoYXIgKipvdXRwdXQpCiAJCWVsc2UKIAkJCWlucHV0X2NoYXJzW2NvdW50 KytdID0gY29kZTsKIAl9Ci0JaW5wdXRfY2hhcnNbY291bnRdID0gKHBnX3djaGFyKSAnXDAnOwor CWlucHV0X2NoYXJzW2NvdW50XSA9IChjaGFyMzJfdCkgJ1wwJzsKIAlpbnB1dF9zaXplID0gY291 bnQ7CiAKIAlpZiAoaW5wdXRfc2l6ZSA9PSAwKQpAQCAtMTEzOCw3ICsxMTM4LDcgQEAgcGdfc2Fz bHByZXAoY29uc3QgY2hhciAqaW5wdXQsIGNoYXIgKipvdXRwdXQpCiAJICovCiAJZm9yIChpID0g MDsgaSA8IGlucHV0X3NpemU7IGkrKykKIAl7Ci0JCXBnX3djaGFyCWNvZGUgPSBpbnB1dF9jaGFy c1tpXTsKKwkJY2hhcjMyX3QJY29kZSA9IGlucHV0X2NoYXJzW2ldOwogCiAJCWlmIChJU19DT0RF X0lOX1RBQkxFKGNvZGUsIHByb2hpYml0ZWRfb3V0cHV0X3JhbmdlcykpCiAJCQlnb3RvIHByb2hp Yml0ZWQ7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1 dCwgY2hhciAqKm91dHB1dCkKIAljb250YWluc19SYW5kQUxDYXQgPSBmYWxzZTsKIAlmb3IgKGkg PSAwOyBpIDwgaW5wdXRfc2l6ZTsgaSsrKQogCXsKLQkJcGdfd2NoYXIJY29kZSA9IGlucHV0X2No YXJzW2ldOworCQljaGFyMzJfdAljb2RlID0gaW5wdXRfY2hhcnNbaV07CiAKIAkJaWYgKElTX0NP REVfSU5fVEFCTEUoY29kZSwgUmFuZEFMQ2F0X2NvZGVwb2ludF9yYW5nZXMpKQogCQl7CkBAIC0x MTgxLDEyICsxMTgxLDEyIEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNoYXIgKmlucHV0LCBjaGFyICoq b3V0cHV0KQogCiAJaWYgKGNvbnRhaW5zX1JhbmRBTENhdCkKIAl7Ci0JCXBnX3djaGFyCWZpcnN0 ID0gaW5wdXRfY2hhcnNbMF07Ci0JCXBnX3djaGFyCWxhc3QgPSBpbnB1dF9jaGFyc1tpbnB1dF9z aXplIC0gMV07CisJCWNoYXIzMl90CWZpcnN0ID0gaW5wdXRfY2hhcnNbMF07CisJCWNoYXIzMl90 CWxhc3QgPSBpbnB1dF9jaGFyc1tpbnB1dF9zaXplIC0gMV07CiAKIAkJZm9yIChpID0gMDsgaSA8 IGlucHV0X3NpemU7IGkrKykKIAkJewotCQkJcGdfd2NoYXIJY29kZSA9IGlucHV0X2NoYXJzW2ld OworCQkJY2hhcjMyX3QJY29kZSA9IGlucHV0X2NoYXJzW2ldOwogCiAJCQlpZiAoSVNfQ09ERV9J Tl9UQUJMRShjb2RlLCBMQ2F0X2NvZGVwb2ludF9yYW5nZXMpKQogCQkJCWdvdG8gcHJvaGliaXRl ZDsKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYyBiL3NyYy9jb21t b24vdW5pY29kZS9jYXNlX3Rlc3QuYwppbmRleCBmZGZiNjJlODU1Mi4uMDBkNGY4NWU1YTUgMTAw NjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYworKysgYi9zcmMvY29tbW9u L3VuaWNvZGUvY2FzZV90ZXN0LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb21tb24v dW5pY29kZV9jYXNlLmgiCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaCIKICNp bmNsdWRlICJjb21tb24vdW5pY29kZV92ZXJzaW9uLmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIu aCIKIAogLyogZW5vdWdoIHRvIGhvbGQgbGFyZ2VzdCBzb3VyY2Ugb3IgcmVzdWx0IHN0cmluZywg aW5jbHVkaW5nIE5VTCAqLwogI2RlZmluZSBCVUZTWiAyNTYKQEAgLTU0LDcgKzU1LDcgQEAgaW5p dGNhcF93Ym5leHQodm9pZCAqc3RhdGUpCiAJd2hpbGUgKHdic3RhdGUtPm9mZnNldCA8IHdic3Rh dGUtPmxlbiAmJgogCQkgICB3YnN0YXRlLT5zdHJbd2JzdGF0ZS0+b2Zmc2V0XSAhPSAnXDAnKQog CXsKLQkJcGdfd2NoYXIJdSA9IHV0ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAqKSB3YnN0 YXRlLT5zdHIgKworCQljaGFyMzJfdAl1ID0gdXRmOF90b191bmljb2RlKCh1bnNpZ25lZCBjaGFy ICopIHdic3RhdGUtPnN0ciArCiAJCQkJCQkJCQkJd2JzdGF0ZS0+b2Zmc2V0KTsKIAkJYm9vbAkJ Y3Vycl9hbG51bSA9IHBnX3VfaXNhbG51bSh1LCB3YnN0YXRlLT5wb3NpeCk7CiAKQEAgLTc3LDE2 ICs3OCwxNiBAQCBpbml0Y2FwX3dibmV4dCh2b2lkICpzdGF0ZSkKICNpZmRlZiBVU0VfSUNVCiAK IHN0YXRpYyB2b2lkCi1pY3VfdGVzdF9zaW1wbGUocGdfd2NoYXIgY29kZSkKK2ljdV90ZXN0X3Np bXBsZShjaGFyMzJfdCBjb2RlKQogewotCXBnX3djaGFyCWxvd2VyID0gdW5pY29kZV9sb3dlcmNh c2Vfc2ltcGxlKGNvZGUpOwotCXBnX3djaGFyCXRpdGxlID0gdW5pY29kZV90aXRsZWNhc2Vfc2lt cGxlKGNvZGUpOwotCXBnX3djaGFyCXVwcGVyID0gdW5pY29kZV91cHBlcmNhc2Vfc2ltcGxlKGNv ZGUpOwotCXBnX3djaGFyCWZvbGQgPSB1bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShjb2RlKTsKLQlw Z193Y2hhcglpY3Vsb3dlciA9IHVfdG9sb3dlcihjb2RlKTsKLQlwZ193Y2hhcglpY3V0aXRsZSA9 IHVfdG90aXRsZShjb2RlKTsKLQlwZ193Y2hhcglpY3V1cHBlciA9IHVfdG91cHBlcihjb2RlKTsK LQlwZ193Y2hhcglpY3Vmb2xkID0gdV9mb2xkQ2FzZShjb2RlLCBVX0ZPTERfQ0FTRV9ERUZBVUxU KTsKKwljaGFyMzJfdAlsb3dlciA9IHVuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZShjb2RlKTsKKwlj aGFyMzJfdAl0aXRsZSA9IHVuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShjb2RlKTsKKwljaGFyMzJf dAl1cHBlciA9IHVuaWNvZGVfdXBwZXJjYXNlX3NpbXBsZShjb2RlKTsKKwljaGFyMzJfdAlmb2xk ID0gdW5pY29kZV9jYXNlZm9sZF9zaW1wbGUoY29kZSk7CisJY2hhcjMyX3QJaWN1bG93ZXIgPSB1 X3RvbG93ZXIoY29kZSk7CisJY2hhcjMyX3QJaWN1dGl0bGUgPSB1X3RvdGl0bGUoY29kZSk7CisJ Y2hhcjMyX3QJaWN1dXBwZXIgPSB1X3RvdXBwZXIoY29kZSk7CisJY2hhcjMyX3QJaWN1Zm9sZCA9 IHVfZm9sZENhc2UoY29kZSwgVV9GT0xEX0NBU0VfREVGQVVMVCk7CiAKIAlpZiAobG93ZXIgIT0g aWN1bG93ZXIgfHwgdGl0bGUgIT0gaWN1dGl0bGUgfHwgdXBwZXIgIT0gaWN1dXBwZXIgfHwKIAkJ Zm9sZCAhPSBpY3Vmb2xkKQpAQCAtMTcyLDcgKzE3Myw3IEBAIHRlc3RfaWN1KHZvaWQpCiAJaW50 CQkJc3VjY2Vzc2Z1bCA9IDA7CiAJaW50CQkJc2tpcHBlZF9taXNtYXRjaCA9IDA7CiAKLQlmb3Ig KHBnX3djaGFyIGNvZGUgPSAwOyBjb2RlIDw9IDB4MTBmZmZmOyBjb2RlKyspCisJZm9yIChjaGFy MzJfdCBjb2RlID0gMDsgY29kZSA8PSAweDEwZmZmZjsgY29kZSsrKQogCXsKIAkJcGdfdW5pY29k ZV9jYXRlZ29yeSBjYXRlZ29yeSA9IHVuaWNvZGVfY2F0ZWdvcnkoY29kZSk7CiAKZGlmZiAtLWdp dCBhL3NyYy9jb21tb24vdW5pY29kZS9jYXRlZ29yeV90ZXN0LmMgYi9zcmMvY29tbW9uL3VuaWNv ZGUvY2F0ZWdvcnlfdGVzdC5jCmluZGV4IDVkMzdiYTM5MTk2Li4xZThjMWY3OTA1ZiAxMDA2NDQK LS0tIGEvc3JjL2NvbW1vbi91bmljb2RlL2NhdGVnb3J5X3Rlc3QuYworKysgYi9zcmMvY29tbW9u L3VuaWNvZGUvY2F0ZWdvcnlfdGVzdC5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJj b21tb24vdW5pY29kZV9jYXRlZ29yeS5oIgogI2luY2x1ZGUgImNvbW1vbi91bmljb2RlX3ZlcnNp b24uaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogCiBzdGF0aWMgaW50CXBnX3VuaWNvZGVf dmVyc2lvbiA9IDA7CiAjaWZkZWYgVVNFX0lDVQpAQCAtNTksNyArNjAsNyBAQCBpY3VfdGVzdCgp CiAJaW50CQkJcGdfc2tpcHBlZF9jb2RlcG9pbnRzID0gMDsKIAlpbnQJCQlpY3Vfc2tpcHBlZF9j b2RlcG9pbnRzID0gMDsKIAotCWZvciAocGdfd2NoYXIgY29kZSA9IDA7IGNvZGUgPD0gMHgxMGZm ZmY7IGNvZGUrKykKKwlmb3IgKGNoYXIzMl90IGNvZGUgPSAwOyBjb2RlIDw9IDB4MTBmZmZmOyBj b2RlKyspCiAJewogCQl1aW50OF90CQlwZ19jYXRlZ29yeSA9IHVuaWNvZGVfY2F0ZWdvcnkoY29k ZSk7CiAJCXVpbnQ4X3QJCWljdV9jYXRlZ29yeSA9IHVfY2hhclR5cGUoY29kZSk7CmRpZmYgLS1n aXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJhdGUtbm9ybV90ZXN0X3RhYmxlLnBsIGIvc3Jj L2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLW5vcm1fdGVzdF90YWJsZS5wbAppbmRleCAxYjQwMWJl OTQwOS4uMWE4YjkwOGZmMzMgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0 ZS1ub3JtX3Rlc3RfdGFibGUucGwKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLW5v cm1fdGVzdF90YWJsZS5wbApAQCAtNDcsOCArNDcsOCBAQCBwcmludCAkT1VUUFVUIDw8SEVBREVS OwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAlpbnQJCQlsaW5lbnVtOwotCXBnX3djaGFyCWlucHV0WzUw XTsKLQlwZ193Y2hhcglvdXRwdXRbNF1bNTBdOworCWNoYXIzMl90CWlucHV0WzUwXTsKKwljaGFy MzJfdAlvdXRwdXRbNF1bNTBdOwogfSBwZ191bmljb2RlX3Rlc3Q7CiAKIC8qIHRlc3QgdGFibGUg Ki8KZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2Nhc2Vf dGFibGUucGwgYi9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXNlX3RhYmxl LnBsCmluZGV4IDVkOWRkZDYyODAzLi5mNzFlYjI1Yzk0ZSAxMDA2NDQKLS0tIGEvc3JjL2NvbW1v bi91bmljb2RlL2dlbmVyYXRlLXVuaWNvZGVfY2FzZV90YWJsZS5wbAorKysgYi9zcmMvY29tbW9u L3VuaWNvZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXNlX3RhYmxlLnBsCkBAIC0yNzAsNyArMjcwLDYg QEAgcHJpbnQgJE9UIDw8IkVPUyI7CiAgKi8KIAogI2luY2x1ZGUgImNvbW1vbi91bmljb2RlX2Nh c2UuaCIKLSNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogCiAvKgogICogVGhlIG1heGltdW0gbnVt YmVyIG9mIGNvZGVwb2ludHMgdGhhdCBjYW4gcmVzdWx0IGZyb20gY2FzZSBtYXBwaW5nCkBAIC0y OTcsNyArMjk2LDcgQEAgdHlwZWRlZiBlbnVtCiB0eXBlZGVmIHN0cnVjdAogewogCWludDE2CQlj b25kaXRpb25zOwotCXBnX3djaGFyCW1hcFtOQ2FzZUtpbmRdW01BWF9DQVNFX0VYUEFOU0lPTl07 CisJY2hhcjMyX3QJbWFwW05DYXNlS2luZF1bTUFYX0NBU0VfRVhQQU5TSU9OXTsKIH0gcGdfc3Bl Y2lhbF9jYXNlOwogCiAvKgpAQCAtNDMwLDcgKzQyOSw3IEBAIGZvcmVhY2ggbXkgJGtpbmQgKCds b3dlcicsICd0aXRsZScsICd1cHBlcicsICdmb2xkJykKICAqIFRoZSBlbnRyeSBjYXNlX21hcF8k e2tpbmR9W2Nhc2VfaW5kZXgoY29kZXBvaW50KV0gaXMgdGhlIG1hcHBpbmcgZm9yIHRoZQogICog Z2l2ZW4gY29kZXBvaW50LgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgY2FzZV9tYXBfJGtp bmRcWyRpbmRleFxdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBjYXNlX21hcF8ka2luZFxbJGlu ZGV4XF0gPQogewogRU9TCiAKQEAgLTUwMiw3ICs1MDEsNyBAQCBwcmludCAkT1QgPDwiRU9TIjsK ICAqIHRoZSBvZmZzZXQgaW50byB0aGUgbWFwcGluZyB0YWJsZXMuCiAgKi8KIHN0YXRpYyBpbmxp bmUgdWludDE2Ci1jYXNlX2luZGV4KHBnX3djaGFyIGNwKQorY2FzZV9pbmRleChjaGFyMzJfdCBj cCkKIHsKIAkvKiBGYXN0IHBhdGggZm9yIGNvZGVwb2ludHMgPCAkZmFzdHBhdGhfbGltaXQgKi8K IAlpZiAoY3AgPCAkZmFzdHBhdGhfbGltaXQpCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNv ZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXRlZ29yeV90YWJsZS5wbCBiL3NyYy9jb21tb24vdW5pY29k ZS9nZW5lcmF0ZS11bmljb2RlX2NhdGVnb3J5X3RhYmxlLnBsCmluZGV4IGFiYWI1Y2Q5Njk2Li43 ZTA5NGIxMzcyMCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLXVuaWNv ZGVfY2F0ZWdvcnlfdGFibGUucGwKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLXVu aWNvZGVfY2F0ZWdvcnlfdGFibGUucGwKQEAgLTM2NiwxNSArMzY2LDE1IEBAIHByaW50ICRPVCA8 PCJFT1MiOwogICovCiB0eXBlZGVmIHN0cnVjdAogewotCXVpbnQzMgkJZmlyc3Q7CQkJLyogVW5p Y29kZSBjb2RlcG9pbnQgKi8KLQl1aW50MzIJCWxhc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQg Ki8KKwljaGFyMzJfdAlmaXJzdDsJCQkvKiBVbmljb2RlIGNvZGVwb2ludCAqLworCWNoYXIzMl90 CWxhc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KIAl1aW50OAkJY2F0ZWdvcnk7CQkvKiBH ZW5lcmFsIENhdGVnb3J5ICovCiB9IHBnX2NhdGVnb3J5X3JhbmdlOwogCiB0eXBlZGVmIHN0cnVj dAogewotCXVpbnQzMgkJZmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KLQl1aW50MzIJ CWxhc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJfdAlmaXJzdDsJCQkvKiBV bmljb2RlIGNvZGVwb2ludCAqLworCWNoYXIzMl90CWxhc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9p bnQgKi8KIH0gcGdfdW5pY29kZV9yYW5nZTsKIAogdHlwZWRlZiBzdHJ1Y3QKZGlmZiAtLWdpdCBh L3NyYy9jb21tb24vdW5pY29kZS9ub3JtX3Rlc3QuYyBiL3NyYy9jb21tb24vdW5pY29kZS9ub3Jt X3Rlc3QuYwppbmRleCAyNWJjNTk0NjNmMi4uMDU4ODE3ZjE3MTkgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZS9ub3JtX3Rlc3QuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90 ZXN0LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJub3JtX3Rlc3RfdGFibGUuaCIKIAog c3RhdGljIGNoYXIgKgotcHJpbnRfd2NoYXJfc3RyKGNvbnN0IHBnX3djaGFyICpzKQorcHJpbnRf d2NoYXJfc3RyKGNvbnN0IGNoYXIzMl90ICpzKQogewogI2RlZmluZSBCVUZfRElHSVRTIDUwCiAJ c3RhdGljIGNoYXIgYnVmW0JVRl9ESUdJVFMgKiAxMSArIDFdOwpAQCAtNDEsNyArNDEsNyBAQCBw cmludF93Y2hhcl9zdHIoY29uc3QgcGdfd2NoYXIgKnMpCiB9CiAKIHN0YXRpYyBpbnQKLXBnX3dj c2NtcChjb25zdCBwZ193Y2hhciAqczEsIGNvbnN0IHBnX3djaGFyICpzMikKK3BnX3djc2NtcChj b25zdCBjaGFyMzJfdCAqczEsIGNvbnN0IGNoYXIzMl90ICpzMikKIHsKIAlmb3IgKDs7KQogCXsK QEAgLTY1LDcgKzY1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJewogCQlmb3Ig KGludCBmb3JtID0gMDsgZm9ybSA8IDQ7IGZvcm0rKykKIAkJewotCQkJcGdfd2NoYXIgICAqcmVz dWx0OworCQkJY2hhcjMyX3QgICAqcmVzdWx0OwogCiAJCQlyZXN1bHQgPSB1bmljb2RlX25vcm1h bGl6ZShmb3JtLCB0ZXN0LT5pbnB1dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vdW5pY29k ZV9jYXNlLmMgYi9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jCmluZGV4IDA3M2ZhZjZhMGQ1Li5l NWU0OTRkYjQzYyAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYworKysgYi9z cmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jCkBAIC0zMCw3ICszMCw3IEBAIGVudW0gQ2FzZU1hcFJl c3VsdAogLyoKICAqIE1hcCBmb3IgZWFjaCBjYXNlIGtpbmQuCiAgKi8KLXN0YXRpYyBjb25zdCBw Z193Y2hhciAqY29uc3QgY2FzZWtpbmRfbWFwW05DYXNlS2luZF0gPQorc3RhdGljIGNvbnN0IGNo YXIzMl90ICpjb25zdCBjYXNla2luZF9tYXBbTkNhc2VLaW5kXSA9CiB7CiAJW0Nhc2VMb3dlcl0g PSBjYXNlX21hcF9sb3dlciwKIAlbQ2FzZVRpdGxlXSA9IGNhc2VfbWFwX3RpdGxlLApAQCAtMzgs NDIgKzM4LDQyIEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciAqY29uc3QgY2FzZWtpbmRfbWFwW05D YXNlS2luZF0gPQogCVtDYXNlRm9sZF0gPSBjYXNlX21hcF9mb2xkLAogfTsKIAotc3RhdGljIHBn X3djaGFyIGZpbmRfY2FzZV9tYXAocGdfd2NoYXIgdWNzLCBjb25zdCBwZ193Y2hhciAqbWFwKTsK K3N0YXRpYyBjaGFyMzJfdCBmaW5kX2Nhc2VfbWFwKGNoYXIzMl90IHVjcywgY29uc3QgY2hhcjMy X3QgKm1hcCk7CiBzdGF0aWMgc2l6ZV90IGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNpemVfdCBk c3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCQkJCQkJICAgQ2FzZUtp bmQgc3RyX2Nhc2VraW5kLCBib29sIGZ1bGwsIFdvcmRCb3VuZGFyeU5leHQgd2JuZXh0LAogCQkJ CQkJICAgdm9pZCAqd2JzdGF0ZSk7Ci1zdGF0aWMgZW51bSBDYXNlTWFwUmVzdWx0IGNhc2VtYXAo cGdfd2NoYXIgdTEsIENhc2VLaW5kIGNhc2VraW5kLCBib29sIGZ1bGwsCitzdGF0aWMgZW51bSBD YXNlTWFwUmVzdWx0IGNhc2VtYXAoY2hhcjMyX3QgdTEsIENhc2VLaW5kIGNhc2VraW5kLCBib29s IGZ1bGwsCiAJCQkJCQkJCSAgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3Qg c3Jjb2ZmLAotCQkJCQkJCQkgIHBnX3djaGFyICpzaW1wbGUsIGNvbnN0IHBnX3djaGFyICoqc3Bl Y2lhbCk7CisJCQkJCQkJCSAgY2hhcjMyX3QgKnNpbXBsZSwgY29uc3QgY2hhcjMyX3QgKipzcGVj aWFsKTsKIAotcGdfd2NoYXIKLXVuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZShwZ193Y2hhciBjb2Rl KQorY2hhcjMyX3QKK3VuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZShjaGFyMzJfdCBjb2RlKQogewot CXBnX3djaGFyCWNwID0gZmluZF9jYXNlX21hcChjb2RlLCBjYXNlX21hcF9sb3dlcik7CisJY2hh cjMyX3QJY3AgPSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNhc2VfbWFwX2xvd2VyKTsKIAogCXJldHVy biBjcCAhPSAwID8gY3AgOiBjb2RlOwogfQogCi1wZ193Y2hhcgotdW5pY29kZV90aXRsZWNhc2Vf c2ltcGxlKHBnX3djaGFyIGNvZGUpCitjaGFyMzJfdAordW5pY29kZV90aXRsZWNhc2Vfc2ltcGxl KGNoYXIzMl90IGNvZGUpCiB7Ci0JcGdfd2NoYXIJY3AgPSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNh c2VfbWFwX3RpdGxlKTsKKwljaGFyMzJfdAljcCA9IGZpbmRfY2FzZV9tYXAoY29kZSwgY2FzZV9t YXBfdGl0bGUpOwogCiAJcmV0dXJuIGNwICE9IDAgPyBjcCA6IGNvZGU7CiB9CiAKLXBnX3djaGFy Ci11bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUocGdfd2NoYXIgY29kZSkKK2NoYXIzMl90Cit1bmlj b2RlX3VwcGVyY2FzZV9zaW1wbGUoY2hhcjMyX3QgY29kZSkKIHsKLQlwZ193Y2hhcgljcCA9IGZp bmRfY2FzZV9tYXAoY29kZSwgY2FzZV9tYXBfdXBwZXIpOworCWNoYXIzMl90CWNwID0gZmluZF9j YXNlX21hcChjb2RlLCBjYXNlX21hcF91cHBlcik7CiAKIAlyZXR1cm4gY3AgIT0gMCA/IGNwIDog Y29kZTsKIH0KIAotcGdfd2NoYXIKLXVuaWNvZGVfY2FzZWZvbGRfc2ltcGxlKHBnX3djaGFyIGNv ZGUpCitjaGFyMzJfdAordW5pY29kZV9jYXNlZm9sZF9zaW1wbGUoY2hhcjMyX3QgY29kZSkKIHsK LQlwZ193Y2hhcgljcCA9IGZpbmRfY2FzZV9tYXAoY29kZSwgY2FzZV9tYXBfZm9sZCk7CisJY2hh cjMyX3QJY3AgPSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNhc2VfbWFwX2ZvbGQpOwogCiAJcmV0dXJu IGNwICE9IDAgPyBjcCA6IGNvZGU7CiB9CkBAIC0yMzEsMTAgKzIzMSwxMCBAQCBjb252ZXJ0X2Nh c2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNy Y2xlbiwKIAogCXdoaWxlICgoc3JjbGVuIDwgMCB8fCBzcmNvZmYgPCBzcmNsZW4pICYmIHNyY1tz cmNvZmZdICE9ICdcMCcpCiAJewotCQlwZ193Y2hhcgl1MSA9IHV0ZjhfdG9fdW5pY29kZSgodW5z aWduZWQgY2hhciAqKSBzcmMgKyBzcmNvZmYpOworCQljaGFyMzJfdAl1MSA9IHV0ZjhfdG9fdW5p Y29kZSgodW5zaWduZWQgY2hhciAqKSBzcmMgKyBzcmNvZmYpOwogCQlpbnQJCQl1MWxlbiA9IHVu aWNvZGVfdXRmOGxlbih1MSk7Ci0JCXBnX3djaGFyCXNpbXBsZSA9IDA7Ci0JCWNvbnN0IHBnX3dj aGFyICpzcGVjaWFsID0gTlVMTDsKKwkJY2hhcjMyX3QJc2ltcGxlID0gMDsKKwkJY29uc3QgY2hh cjMyX3QgKnNwZWNpYWwgPSBOVUxMOwogCQllbnVtIENhc2VNYXBSZXN1bHQgY2FzZW1hcF9yZXN1 bHQ7CiAKIAkJaWYgKHN0cl9jYXNla2luZCA9PSBDYXNlVGl0bGUpCkBAIC0yNjUsOCArMjY1LDgg QEAgY29udmVydF9jYXNlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNy Yywgc3NpemVfdCBzcmNsZW4sCiAJCQljYXNlIENBU0VNQVBfU0lNUExFOgogCQkJCXsKIAkJCQkJ LyogcmVwbGFjZSB3aXRoIHNpbmdsZSBjaGFyYWN0ZXIgKi8KLQkJCQkJcGdfd2NoYXIJdTIgPSBz aW1wbGU7Ci0JCQkJCXBnX3djaGFyCXUybGVuID0gdW5pY29kZV91dGY4bGVuKHUyKTsKKwkJCQkJ Y2hhcjMyX3QJdTIgPSBzaW1wbGU7CisJCQkJCWNoYXIzMl90CXUybGVuID0gdW5pY29kZV91dGY4 bGVuKHUyKTsKIAogCQkJCQlBc3NlcnQoc3BlY2lhbCA9PSBOVUxMKTsKIAkJCQkJaWYgKHJlc3Vs dF9sZW4gKyB1MmxlbiA8PSBkc3RzaXplKQpAQCAtMjgwLDcgKzI4MCw3IEBAIGNvbnZlcnRfY2Fz ZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3Jj bGVuLAogCQkJCUFzc2VydChzaW1wbGUgPT0gMCk7CiAJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBN QVhfQ0FTRV9FWFBBTlNJT04gJiYgc3BlY2lhbFtpXTsgaSsrKQogCQkJCXsKLQkJCQkJcGdfd2No YXIJdTIgPSBzcGVjaWFsW2ldOworCQkJCQljaGFyMzJfdAl1MiA9IHNwZWNpYWxbaV07CiAJCQkJ CXNpemVfdAkJdTJsZW4gPSB1bmljb2RlX3V0ZjhsZW4odTIpOwogCiAJCQkJCWlmIChyZXN1bHRf bGVuICsgdTJsZW4gPD0gZHN0c2l6ZSkKQEAgLTMyMCw3ICszMjAsNyBAQCBjaGVja19maW5hbF9z aWdtYShjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCBvZmZzZXQp CiAJewogCQlpZiAoKHN0cltpXSAmIDB4ODApID09IDAgfHwgKHN0cltpXSAmIDB4QzApID09IDB4 QzApCiAJCXsKLQkJCXBnX3djaGFyCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgaSk7CisJ CQljaGFyMzJfdAljdXJyID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOwogCiAJCQlpZiAocGdf dV9wcm9wX2Nhc2VfaWdub3JhYmxlKGN1cnIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzQ0LDcgKzM0 NCw3IEBAIGNoZWNrX2ZpbmFsX3NpZ21hKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgc2l6ZV90 IGxlbiwgc2l6ZV90IG9mZnNldCkKIAl7CiAJCWlmICgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAo c3RyW2ldICYgMHhDMCkgPT0gMHhDMCkKIAkJewotCQkJcGdfd2NoYXIJY3VyciA9IHV0ZjhfdG9f dW5pY29kZShzdHIgKyBpKTsKKwkJCWNoYXIzMl90CWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoc3Ry ICsgaSk7CiAKIAkJCWlmIChwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUoY3VycikpCiAJCQkJY29u dGludWU7CkBAIC0zOTQsOSArMzk0LDkgQEAgY2hlY2tfc3BlY2lhbF9jb25kaXRpb25zKGludCBj b25kaXRpb25zLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sCiAgKiBjaGFyYWN0ZXIgd2l0 aG91dCBtb2RpZmljYXRpb24uCiAgKi8KIHN0YXRpYyBlbnVtIENhc2VNYXBSZXN1bHQKLWNhc2Vt YXAocGdfd2NoYXIgdTEsIENhc2VLaW5kIGNhc2VraW5kLCBib29sIGZ1bGwsCitjYXNlbWFwKGNo YXIzMl90IHUxLCBDYXNlS2luZCBjYXNla2luZCwgYm9vbCBmdWxsLAogCQljb25zdCBjaGFyICpz cmMsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBzcmNvZmYsCi0JCXBnX3djaGFyICpzaW1wbGUsIGNv bnN0IHBnX3djaGFyICoqc3BlY2lhbCkKKwkJY2hhcjMyX3QgKnNpbXBsZSwgY29uc3QgY2hhcjMy X3QgKipzcGVjaWFsKQogewogCXVpbnQxNgkJaWR4OwogCkBAIC00MzQsOCArNDM0LDggQEAgY2Fz ZW1hcChwZ193Y2hhciB1MSwgQ2FzZUtpbmQgY2FzZWtpbmQsIGJvb2wgZnVsbCwKICAqIEZpbmQg ZW50cnkgaW4gc2ltcGxlIGNhc2UgbWFwLgogICogSWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0 LCAwIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KLXN0YXRpYyBwZ193Y2hhcgotZmluZF9jYXNlX21h cChwZ193Y2hhciB1Y3MsIGNvbnN0IHBnX3djaGFyICptYXApCitzdGF0aWMgY2hhcjMyX3QKK2Zp bmRfY2FzZV9tYXAoY2hhcjMyX3QgdWNzLCBjb25zdCBjaGFyMzJfdCAqbWFwKQogewogCS8qIEZh c3QgcGF0aCBmb3IgY29kZXBvaW50cyA8IDB4ODAgKi8KIAlpZiAodWNzIDwgMHg4MCkKZGlmZiAt LWdpdCBhL3NyYy9jb21tb24vdW5pY29kZV9jYXRlZ29yeS5jIGIvc3JjL2NvbW1vbi91bmljb2Rl X2NhdGVnb3J5LmMKaW5kZXggNDEzNmM0ZDRmOTIuLmFhYjY2N2E3YmI0IDEwMDY0NAotLS0gYS9z cmMvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGVfY2F0 ZWdvcnkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogdW5pY29kZV9j YXRlZ29yeS5jCiAgKgkJRGV0ZXJtaW5lIGdlbmVyYWwgY2F0ZWdvcnkgYW5kIGNoYXJhY3RlciBw cm9wZXJ0aWVzIG9mIFVuaWNvZGUKLSAqCQljaGFyYWN0ZXJzLiBFbmNvZGluZyBtdXN0IGJlIFVU RjgsIHdoZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBwZ193Y2hhcgorICoJCWNoYXJhY3RlcnMuIEVu Y29kaW5nIG11c3QgYmUgVVRGOCwgd2hlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIGNoYXIzMl90CiAg KgkJcmVwcmVzZW50YXRpb24gaXMgYSBjb2RlIHBvaW50LgogICoKICAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMjAxNy0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApA QCAtNzYsMTMgKzc2LDEzIEBACiAjZGVmaW5lIFBHX1VfQ0hBUkFDVEVSX1RBQgkweDA5CiAKIHN0 YXRpYyBib29sIHJhbmdlX3NlYXJjaChjb25zdCBwZ191bmljb2RlX3JhbmdlICp0YmwsIHNpemVf dCBzaXplLAotCQkJCQkJIHBnX3djaGFyIGNvZGUpOworCQkJCQkJIGNoYXIzMl90IGNvZGUpOwog CiAvKgogICogVW5pY29kZSBnZW5lcmFsIGNhdGVnb3J5IGZvciB0aGUgZ2l2ZW4gY29kZXBvaW50 LgogICovCiBwZ191bmljb2RlX2NhdGVnb3J5Ci11bmljb2RlX2NhdGVnb3J5KHBnX3djaGFyIGNv ZGUpCit1bmljb2RlX2NhdGVnb3J5KGNoYXIzMl90IGNvZGUpCiB7CiAJaW50CQkJbWluID0gMDsK IAlpbnQJCQltaWQ7CkBAIC0xMDgsNyArMTA4LDcgQEAgdW5pY29kZV9jYXRlZ29yeShwZ193Y2hh ciBjb2RlKQogfQogCiBib29sCi1wZ191X3Byb3BfYWxwaGFiZXRpYyhwZ193Y2hhciBjb2RlKQor cGdfdV9wcm9wX2FscGhhYmV0aWMoY2hhcjMyX3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODAp CiAJCXJldHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9Q X0FMUEhBQkVUSUM7CkBAIC0xMTksNyArMTE5LDcgQEAgcGdfdV9wcm9wX2FscGhhYmV0aWMocGdf d2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9wcm9wX2xvd2VyY2FzZShwZ193Y2hhciBjb2Rl KQorcGdfdV9wcm9wX2xvd2VyY2FzZShjaGFyMzJfdCBjb2RlKQogewogCWlmIChjb2RlIDwgMHg4 MCkKIAkJcmV0dXJuIHVuaWNvZGVfb3B0X2FzY2lpW2NvZGVdLnByb3BlcnRpZXMgJiBQR19VX1BS T1BfTE9XRVJDQVNFOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHBnX3VfcHJvcF9sb3dlcmNhc2UocGdf d2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9wcm9wX3VwcGVyY2FzZShwZ193Y2hhciBjb2Rl KQorcGdfdV9wcm9wX3VwcGVyY2FzZShjaGFyMzJfdCBjb2RlKQogewogCWlmIChjb2RlIDwgMHg4 MCkKIAkJcmV0dXJuIHVuaWNvZGVfb3B0X2FzY2lpW2NvZGVdLnByb3BlcnRpZXMgJiBQR19VX1BS T1BfVVBQRVJDQVNFOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHBnX3VfcHJvcF91cHBlcmNhc2UocGdf d2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9wcm9wX2Nhc2VkKHBnX3djaGFyIGNvZGUpCitw Z191X3Byb3BfY2FzZWQoY2hhcjMyX3QgY29kZSkKIHsKIAl1aW50MzIJCWNhdGVnb3J5X21hc2s7 CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBwZ191X3Byb3BfY2FzZWQocGdfd2NoYXIgY29kZSkKIH0K IAogYm9vbAotcGdfdV9wcm9wX2Nhc2VfaWdub3JhYmxlKHBnX3djaGFyIGNvZGUpCitwZ191X3By b3BfY2FzZV9pZ25vcmFibGUoY2hhcjMyX3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODApCiAJ CXJldHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9QX0NB U0VfSUdOT1JBQkxFOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHBnX3VfcHJvcF9jYXNlX2lnbm9yYWJs ZShwZ193Y2hhciBjb2RlKQogfQogCiBib29sCi1wZ191X3Byb3Bfd2hpdGVfc3BhY2UocGdfd2No YXIgY29kZSkKK3BnX3VfcHJvcF93aGl0ZV9zcGFjZShjaGFyMzJfdCBjb2RlKQogewogCWlmIChj b2RlIDwgMHg4MCkKIAkJcmV0dXJuIHVuaWNvZGVfb3B0X2FzY2lpW2NvZGVdLnByb3BlcnRpZXMg JiBQR19VX1BST1BfV0hJVEVfU1BBQ0U7CkBAIC0xNzgsNyArMTc4LDcgQEAgcGdfdV9wcm9wX3do aXRlX3NwYWNlKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3VfcHJvcF9oZXhfZGlnaXQo cGdfd2NoYXIgY29kZSkKK3BnX3VfcHJvcF9oZXhfZGlnaXQoY2hhcjMyX3QgY29kZSkKIHsKIAlp ZiAoY29kZSA8IDB4ODApCiAJCXJldHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0 aWVzICYgUEdfVV9QUk9QX0hFWF9ESUdJVDsKQEAgLTE4OSw3ICsxODksNyBAQCBwZ191X3Byb3Bf aGV4X2RpZ2l0KHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3VfcHJvcF9qb2luX2NvbnRy b2wocGdfd2NoYXIgY29kZSkKK3BnX3VfcHJvcF9qb2luX2NvbnRyb2woY2hhcjMyX3QgY29kZSkK IHsKIAlpZiAoY29kZSA8IDB4ODApCiAJCXJldHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5w cm9wZXJ0aWVzICYgUEdfVV9QUk9QX0pPSU5fQ09OVFJPTDsKQEAgLTIwOCw3ICsyMDgsNyBAQCBw Z191X3Byb3Bfam9pbl9jb250cm9sKHBnX3djaGFyIGNvZGUpCiAgKi8KIAogYm9vbAotcGdfdV9p c2RpZ2l0KHBnX3djaGFyIGNvZGUsIGJvb2wgcG9zaXgpCitwZ191X2lzZGlnaXQoY2hhcjMyX3Qg Y29kZSwgYm9vbCBwb3NpeCkKIHsKIAlpZiAocG9zaXgpCiAJCXJldHVybiAoJzAnIDw9IGNvZGUg JiYgY29kZSA8PSAnOScpOwpAQCAtMjE3LDE5ICsyMTcsMTkgQEAgcGdfdV9pc2RpZ2l0KHBnX3dj aGFyIGNvZGUsIGJvb2wgcG9zaXgpCiB9CiAKIGJvb2wKLXBnX3VfaXNhbHBoYShwZ193Y2hhciBj b2RlKQorcGdfdV9pc2FscGhhKGNoYXIzMl90IGNvZGUpCiB7CiAJcmV0dXJuIHBnX3VfcHJvcF9h bHBoYWJldGljKGNvZGUpOwogfQogCiBib29sCi1wZ191X2lzYWxudW0ocGdfd2NoYXIgY29kZSwg Ym9vbCBwb3NpeCkKK3BnX3VfaXNhbG51bShjaGFyMzJfdCBjb2RlLCBib29sIHBvc2l4KQogewog CXJldHVybiBwZ191X2lzYWxwaGEoY29kZSkgfHwgcGdfdV9pc2RpZ2l0KGNvZGUsIHBvc2l4KTsK IH0KIAogYm9vbAotcGdfdV9pc3dvcmQocGdfd2NoYXIgY29kZSkKK3BnX3VfaXN3b3JkKGNoYXIz Ml90IGNvZGUpCiB7CiAJdWludDMyCQljYXRlZ29yeV9tYXNrID0gUEdfVV9DQVRFR09SWV9NQVNL KHVuaWNvZGVfY2F0ZWdvcnkoY29kZSkpOwogCkBAIC0yNDAsMzIgKzI0MCwzMiBAQCBwZ191X2lz d29yZChwZ193Y2hhciBjb2RlKQogfQogCiBib29sCi1wZ191X2lzdXBwZXIocGdfd2NoYXIgY29k ZSkKK3BnX3VfaXN1cHBlcihjaGFyMzJfdCBjb2RlKQogewogCXJldHVybiBwZ191X3Byb3BfdXBw ZXJjYXNlKGNvZGUpOwogfQogCiBib29sCi1wZ191X2lzbG93ZXIocGdfd2NoYXIgY29kZSkKK3Bn X3VfaXNsb3dlcihjaGFyMzJfdCBjb2RlKQogewogCXJldHVybiBwZ191X3Byb3BfbG93ZXJjYXNl KGNvZGUpOwogfQogCiBib29sCi1wZ191X2lzYmxhbmsocGdfd2NoYXIgY29kZSkKK3BnX3VfaXNi bGFuayhjaGFyMzJfdCBjb2RlKQogewogCXJldHVybiBjb2RlID09IFBHX1VfQ0hBUkFDVEVSX1RB QiB8fAogCQl1bmljb2RlX2NhdGVnb3J5KGNvZGUpID09IFBHX1VfU1BBQ0VfU0VQQVJBVE9SOwog fQogCiBib29sCi1wZ191X2lzY250cmwocGdfd2NoYXIgY29kZSkKK3BnX3VfaXNjbnRybChjaGFy MzJfdCBjb2RlKQogewogCXJldHVybiB1bmljb2RlX2NhdGVnb3J5KGNvZGUpID09IFBHX1VfQ09O VFJPTDsKIH0KIAogYm9vbAotcGdfdV9pc2dyYXBoKHBnX3djaGFyIGNvZGUpCitwZ191X2lzZ3Jh cGgoY2hhcjMyX3QgY29kZSkKIHsKIAl1aW50MzIJCWNhdGVnb3J5X21hc2sgPSBQR19VX0NBVEVH T1JZX01BU0sodW5pY29kZV9jYXRlZ29yeShjb2RlKSk7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCBw Z191X2lzZ3JhcGgocGdfd2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9pc3ByaW50KHBnX3dj aGFyIGNvZGUpCitwZ191X2lzcHJpbnQoY2hhcjMyX3QgY29kZSkKIHsKIAlwZ191bmljb2RlX2Nh dGVnb3J5IGNhdGVnb3J5ID0gdW5pY29kZV9jYXRlZ29yeShjb2RlKTsKIApAQCAtMjg3LDcgKzI4 Nyw3IEBAIHBnX3VfaXNwcmludChwZ193Y2hhciBjb2RlKQogfQogCiBib29sCi1wZ191X2lzcHVu Y3QocGdfd2NoYXIgY29kZSwgYm9vbCBwb3NpeCkKK3BnX3VfaXNwdW5jdChjaGFyMzJfdCBjb2Rl LCBib29sIHBvc2l4KQogewogCXVpbnQzMgkJY2F0ZWdvcnlfbWFzazsKIApAQCAtMzA4LDEzICsz MDgsMTMgQEAgcGdfdV9pc3B1bmN0KHBnX3djaGFyIGNvZGUsIGJvb2wgcG9zaXgpCiB9CiAKIGJv b2wKLXBnX3VfaXNzcGFjZShwZ193Y2hhciBjb2RlKQorcGdfdV9pc3NwYWNlKGNoYXIzMl90IGNv ZGUpCiB7CiAJcmV0dXJuIHBnX3VfcHJvcF93aGl0ZV9zcGFjZShjb2RlKTsKIH0KIAogYm9vbAot cGdfdV9pc3hkaWdpdChwZ193Y2hhciBjb2RlLCBib29sIHBvc2l4KQorcGdfdV9pc3hkaWdpdChj aGFyMzJfdCBjb2RlLCBib29sIHBvc2l4KQogewogCWlmIChwb3NpeCkKIAkJcmV0dXJuICgoJzAn IDw9IGNvZGUgJiYgY29kZSA8PSAnOScpIHx8CkBAIC00NzgsNyArNDc4LDcgQEAgdW5pY29kZV9j YXRlZ29yeV9hYmJyZXYocGdfdW5pY29kZV9jYXRlZ29yeSBjYXRlZ29yeSkKICAqIGdpdmVuIHRh YmxlLgogICovCiBzdGF0aWMgYm9vbAotcmFuZ2Vfc2VhcmNoKGNvbnN0IHBnX3VuaWNvZGVfcmFu Z2UgKnRibCwgc2l6ZV90IHNpemUsIHBnX3djaGFyIGNvZGUpCityYW5nZV9zZWFyY2goY29uc3Qg cGdfdW5pY29kZV9yYW5nZSAqdGJsLCBzaXplX3Qgc2l6ZSwgY2hhcjMyX3QgY29kZSkKIHsKIAlp bnQJCQltaW4gPSAwOwogCWludAkJCW1pZDsKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vdW5pY29k ZV9ub3JtLmMgYi9zcmMvY29tbW9uL3VuaWNvZGVfbm9ybS5jCmluZGV4IDY2NTRiNGNiYzQ5Li40 ODlkOTljZDVhYiAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi91bmljb2RlX25vcm0uYworKysgYi9z cmMvY29tbW9uL3VuaWNvZGVfbm9ybS5jCkBAIC02OSw3ICs2OSw3IEBAIGNvbnZfY29tcGFyZShj b25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCiAgKiBsb29rdXAsIHdoaWxlIHRoZSBmcm9u dGVuZCB2ZXJzaW9uIHVzZXMgYSBiaW5hcnkgc2VhcmNoLgogICovCiBzdGF0aWMgY29uc3QgcGdf dW5pY29kZV9kZWNvbXBvc2l0aW9uICoKLWdldF9jb2RlX2VudHJ5KHBnX3djaGFyIGNvZGUpCitn ZXRfY29kZV9lbnRyeShjaGFyMzJfdCBjb2RlKQogewogI2lmbmRlZiBGUk9OVEVORAogCWludAkJ CWg7CkBAIC0xMDksNyArMTA5LDcgQEAgZ2V0X2NvZGVfZW50cnkocGdfd2NoYXIgY29kZSkKICAq IEdldCB0aGUgY29tYmluaW5nIGNsYXNzIG9mIHRoZSBnaXZlbiBjb2RlcG9pbnQuCiAgKi8KIHN0 YXRpYyB1aW50OAotZ2V0X2Nhbm9uaWNhbF9jbGFzcyhwZ193Y2hhciBjb2RlKQorZ2V0X2Nhbm9u aWNhbF9jbGFzcyhjaGFyMzJfdCBjb2RlKQogewogCWNvbnN0IHBnX3VuaWNvZGVfZGVjb21wb3Np dGlvbiAqZW50cnkgPSBnZXRfY29kZV9lbnRyeShjb2RlKTsKIApAQCAtMTMwLDE1ICsxMzAsMTUg QEAgZ2V0X2Nhbm9uaWNhbF9jbGFzcyhwZ193Y2hhciBjb2RlKQogICogTm90ZTogdGhlIHJldHVy bmVkIHBvaW50ZXIgY2FuIHBvaW50IHRvIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciwgYW5k CiAgKiBpcyBvbmx5IHZhbGlkIHVudGlsIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIQogICov Ci1zdGF0aWMgY29uc3QgcGdfd2NoYXIgKgorc3RhdGljIGNvbnN0IGNoYXIzMl90ICoKIGdldF9j b2RlX2RlY29tcG9zaXRpb24oY29uc3QgcGdfdW5pY29kZV9kZWNvbXBvc2l0aW9uICplbnRyeSwg aW50ICpkZWNfc2l6ZSkKIHsKLQlzdGF0aWMgcGdfd2NoYXIgeDsKKwlzdGF0aWMgY2hhcjMyX3Qg eDsKIAogCWlmIChERUNPTVBPU0lUSU9OX0lTX0lOTElORShlbnRyeSkpCiAJewogCQlBc3NlcnQo REVDT01QT1NJVElPTl9TSVpFKGVudHJ5KSA9PSAxKTsKLQkJeCA9IChwZ193Y2hhcikgZW50cnkt PmRlY19pbmRleDsKKwkJeCA9IChjaGFyMzJfdCkgZW50cnktPmRlY19pbmRleDsKIAkJKmRlY19z aXplID0gMTsKIAkJcmV0dXJuICZ4OwogCX0KQEAgLTE1Niw3ICsxNTYsNyBAQCBnZXRfY29kZV9k ZWNvbXBvc2l0aW9uKGNvbnN0IHBnX3VuaWNvZGVfZGVjb21wb3NpdGlvbiAqZW50cnksIGludCAq ZGVjX3NpemUpCiAgKiBhcmUsIGluIHR1cm4sIGRlY29tcG9zYWJsZS4KICAqLwogc3RhdGljIGlu dAotZ2V0X2RlY29tcG9zZWRfc2l6ZShwZ193Y2hhciBjb2RlLCBib29sIGNvbXBhdCkKK2dldF9k ZWNvbXBvc2VkX3NpemUoY2hhcjMyX3QgY29kZSwgYm9vbCBjb21wYXQpCiB7CiAJY29uc3QgcGdf dW5pY29kZV9kZWNvbXBvc2l0aW9uICplbnRyeTsKIAlpbnQJCQlzaXplID0gMDsKQEAgLTMxOCw3 ICszMTgsNyBAQCByZWNvbXBvc2VfY29kZSh1aW50MzIgc3RhcnQsIHVpbnQzMiBjb2RlLCB1aW50 MzIgKnJlc3VsdCkKICAqIGluIHRoZSBhcnJheSByZXN1bHQuCiAgKi8KIHN0YXRpYyB2b2lkCi1k ZWNvbXBvc2VfY29kZShwZ193Y2hhciBjb2RlLCBib29sIGNvbXBhdCwgcGdfd2NoYXIgKipyZXN1 bHQsIGludCAqY3VycmVudCkKK2RlY29tcG9zZV9jb2RlKGNoYXIzMl90IGNvZGUsIGJvb2wgY29t cGF0LCBjaGFyMzJfdCAqKnJlc3VsdCwgaW50ICpjdXJyZW50KQogewogCWNvbnN0IHBnX3VuaWNv ZGVfZGVjb21wb3NpdGlvbiAqZW50cnk7CiAJaW50CQkJaTsKQEAgLTMzNyw3ICszMzcsNyBAQCBk ZWNvbXBvc2VfY29kZShwZ193Y2hhciBjb2RlLCBib29sIGNvbXBhdCwgcGdfd2NoYXIgKipyZXN1 bHQsIGludCAqY3VycmVudCkKIAkJCQkJdiwKIAkJCQkJdGluZGV4LAogCQkJCQlzaW5kZXg7Ci0J CXBnX3djaGFyICAgKnJlcyA9ICpyZXN1bHQ7CisJCWNoYXIzMl90ICAgKnJlcyA9ICpyZXN1bHQ7 CiAKIAkJc2luZGV4ID0gY29kZSAtIFNCQVNFOwogCQlsID0gTEJBU0UgKyBzaW5kZXggLyAoVkNP VU5UICogVENPVU5UKTsKQEAgLTM2OSw3ICszNjksNyBAQCBkZWNvbXBvc2VfY29kZShwZ193Y2hh ciBjb2RlLCBib29sIGNvbXBhdCwgcGdfd2NoYXIgKipyZXN1bHQsIGludCAqY3VycmVudCkKIAlp ZiAoZW50cnkgPT0gTlVMTCB8fCBERUNPTVBPU0lUSU9OX1NJWkUoZW50cnkpID09IDAgfHwKIAkJ KCFjb21wYXQgJiYgREVDT01QT1NJVElPTl9JU19DT01QQVQoZW50cnkpKSkKIAl7Ci0JCXBnX3dj aGFyICAgKnJlcyA9ICpyZXN1bHQ7CisJCWNoYXIzMl90ICAgKnJlcyA9ICpyZXN1bHQ7CiAKIAkJ cmVzWypjdXJyZW50XSA9IGNvZGU7CiAJCSgqY3VycmVudCkrKzsKQEAgLTM4Miw3ICszODIsNyBA QCBkZWNvbXBvc2VfY29kZShwZ193Y2hhciBjb2RlLCBib29sIGNvbXBhdCwgcGdfd2NoYXIgKipy ZXN1bHQsIGludCAqY3VycmVudCkKIAlkZWNvbXAgPSBnZXRfY29kZV9kZWNvbXBvc2l0aW9uKGVu dHJ5LCAmZGVjX3NpemUpOwogCWZvciAoaSA9IDA7IGkgPCBkZWNfc2l6ZTsgaSsrKQogCXsKLQkJ cGdfd2NoYXIJbGNvZGUgPSAocGdfd2NoYXIpIGRlY29tcFtpXTsKKwkJY2hhcjMyX3QJbGNvZGUg PSAoY2hhcjMyX3QpIGRlY29tcFtpXTsKIAogCQkvKiBMZWF2ZSBpZiBubyBtb3JlIGRlY29tcG9z aXRpb25zICovCiAJCWRlY29tcG9zZV9jb2RlKGxjb2RlLCBjb21wYXQsIHJlc3VsdCwgY3VycmVu dCk7CkBAIC0zOTgsMTcgKzM5OCwxNyBAQCBkZWNvbXBvc2VfY29kZShwZ193Y2hhciBjb2RlLCBi b29sIGNvbXBhdCwgcGdfd2NoYXIgKipyZXN1bHQsIGludCAqY3VycmVudCkKICAqIG1hbGxvYy4g T3IgTlVMTCBpZiB3ZSBydW4gb3V0IG9mIG1lbW9yeS4gSW4gYmFja2VuZCwgdGhlIHJldHVybmVk CiAgKiBzdHJpbmcgaXMgcGFsbG9jJ2QgaW5zdGVhZCwgYW5kIE9PTSBpcyByZXBvcnRlZCB3aXRo IGVyZXBvcnQoKS4KICAqLwotcGdfd2NoYXIgKgotdW5pY29kZV9ub3JtYWxpemUoVW5pY29kZU5v cm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKK2NoYXIzMl90ICoK K3VuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBj aGFyMzJfdCAqaW5wdXQpCiB7CiAJYm9vbAkJY29tcGF0ID0gKGZvcm0gPT0gVU5JQ09ERV9ORktD IHx8IGZvcm0gPT0gVU5JQ09ERV9ORktEKTsKIAlib29sCQlyZWNvbXBvc2UgPSAoZm9ybSA9PSBV TklDT0RFX05GQyB8fCBmb3JtID09IFVOSUNPREVfTkZLQyk7Ci0JcGdfd2NoYXIgICAqZGVjb21w X2NoYXJzOwotCXBnX3djaGFyICAgKnJlY29tcF9jaGFyczsKKwljaGFyMzJfdCAgICpkZWNvbXBf Y2hhcnM7CisJY2hhcjMyX3QgICAqcmVjb21wX2NoYXJzOwogCWludAkJCWRlY29tcF9zaXplLAog CQkJCWN1cnJlbnRfc2l6ZTsKIAlpbnQJCQljb3VudDsKLQljb25zdCBwZ193Y2hhciAqcDsKKwlj b25zdCBjaGFyMzJfdCAqcDsKIAogCS8qIHZhcmlhYmxlcyBmb3IgcmVjb21wb3NpdGlvbiAqLwog CWludAkJCWxhc3RfY2xhc3M7CkBAIC00MjUsNyArNDI1LDcgQEAgdW5pY29kZV9ub3JtYWxpemUo VW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKIAlm b3IgKHAgPSBpbnB1dDsgKnA7IHArKykKIAkJZGVjb21wX3NpemUgKz0gZ2V0X2RlY29tcG9zZWRf c2l6ZSgqcCwgY29tcGF0KTsKIAotCWRlY29tcF9jaGFycyA9IChwZ193Y2hhciAqKSBBTExPQygo ZGVjb21wX3NpemUgKyAxKSAqIHNpemVvZihwZ193Y2hhcikpOworCWRlY29tcF9jaGFycyA9IChj aGFyMzJfdCAqKSBBTExPQygoZGVjb21wX3NpemUgKyAxKSAqIHNpemVvZihjaGFyMzJfdCkpOwog CWlmIChkZWNvbXBfY2hhcnMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQ0OCw5ICs0 NDgsOSBAQCB1bmljb2RlX25vcm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwg Y29uc3QgcGdfd2NoYXIgKmlucHV0KQogCSAqLwogCWZvciAoY291bnQgPSAxOyBjb3VudCA8IGRl Y29tcF9zaXplOyBjb3VudCsrKQogCXsKLQkJcGdfd2NoYXIJcHJldiA9IGRlY29tcF9jaGFyc1tj b3VudCAtIDFdOwotCQlwZ193Y2hhcgluZXh0ID0gZGVjb21wX2NoYXJzW2NvdW50XTsKLQkJcGdf d2NoYXIJdG1wOworCQljaGFyMzJfdAlwcmV2ID0gZGVjb21wX2NoYXJzW2NvdW50IC0gMV07CisJ CWNoYXIzMl90CW5leHQgPSBkZWNvbXBfY2hhcnNbY291bnRdOworCQljaGFyMzJfdAl0bXA7CiAJ CWNvbnN0IHVpbnQ4IHByZXZDbGFzcyA9IGdldF9jYW5vbmljYWxfY2xhc3MocHJldik7CiAJCWNv bnN0IHVpbnQ4IG5leHRDbGFzcyA9IGdldF9jYW5vbmljYWxfY2xhc3MobmV4dCk7CiAKQEAgLTQ4 Nyw3ICs0ODcsNyBAQCB1bmljb2RlX25vcm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0g Zm9ybSwgY29uc3QgcGdfd2NoYXIgKmlucHV0KQogCSAqIGxvbmdlciB0aGFuIHRoZSBkZWNvbXBv c2VkIG9uZSwgc28gbWFrZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgb3V0cHV0CiAJICogc3RyaW5n IGJhc2VkIG9uIHRoYXQgYXNzdW1wdGlvbi4KIAkgKi8KLQlyZWNvbXBfY2hhcnMgPSAocGdfd2No YXIgKikgQUxMT0MoKGRlY29tcF9zaXplICsgMSkgKiBzaXplb2YocGdfd2NoYXIpKTsKKwlyZWNv bXBfY2hhcnMgPSAoY2hhcjMyX3QgKikgQUxMT0MoKGRlY29tcF9zaXplICsgMSkgKiBzaXplb2Yo Y2hhcjMyX3QpKTsKIAlpZiAoIXJlY29tcF9jaGFycykKIAl7CiAJCUZSRUUoZGVjb21wX2NoYXJz KTsKQEAgLTUwMSw5ICs1MDEsOSBAQCB1bmljb2RlX25vcm1hbGl6ZShVbmljb2RlTm9ybWFsaXph dGlvbkZvcm0gZm9ybSwgY29uc3QgcGdfd2NoYXIgKmlucHV0KQogCiAJZm9yIChjb3VudCA9IDE7 IGNvdW50IDwgZGVjb21wX3NpemU7IGNvdW50KyspCiAJewotCQlwZ193Y2hhcgljaCA9IGRlY29t cF9jaGFyc1tjb3VudF07CisJCWNoYXIzMl90CWNoID0gZGVjb21wX2NoYXJzW2NvdW50XTsKIAkJ aW50CQkJY2hfY2xhc3MgPSBnZXRfY2Fub25pY2FsX2NsYXNzKGNoKTsKLQkJcGdfd2NoYXIJY29t cG9zaXRlOworCQljaGFyMzJfdAljb21wb3NpdGU7CiAKIAkJaWYgKGxhc3RfY2xhc3MgPCBjaF9j bGFzcyAmJgogCQkJcmVjb21wb3NlX2NvZGUoc3RhcnRlcl9jaCwgY2gsICZjb21wb3NpdGUpKQpA QCAtNTI0LDcgKzUyNCw3IEBAIHVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0aW9u Rm9ybSBmb3JtLCBjb25zdCBwZ193Y2hhciAqaW5wdXQpCiAJCQlyZWNvbXBfY2hhcnNbdGFyZ2V0 X3BvcysrXSA9IGNoOwogCQl9CiAJfQotCXJlY29tcF9jaGFyc1t0YXJnZXRfcG9zXSA9IChwZ193 Y2hhcikgJ1wwJzsKKwlyZWNvbXBfY2hhcnNbdGFyZ2V0X3Bvc10gPSAoY2hhcjMyX3QpICdcMCc7 CiAKIAlGUkVFKGRlY29tcF9jaGFycyk7CiAKQEAgLTU0MCw3ICs1NDAsNyBAQCB1bmljb2RlX25v cm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgcGdfd2NoYXIgKmlu cHV0KQogI2lmbmRlZiBGUk9OVEVORAogCiBzdGF0aWMgY29uc3QgcGdfdW5pY29kZV9ub3JtcHJv cHMgKgotcWNfaGFzaF9sb29rdXAocGdfd2NoYXIgY2gsIGNvbnN0IHBnX3VuaWNvZGVfbm9ybWlu Zm8gKm5vcm1pbmZvKQorcWNfaGFzaF9sb29rdXAoY2hhcjMyX3QgY2gsIGNvbnN0IHBnX3VuaWNv ZGVfbm9ybWluZm8gKm5vcm1pbmZvKQogewogCWludAkJCWg7CiAJdWludDMyCQloYXNoa2V5OwpA QCAtNTcxLDcgKzU3MSw3IEBAIHFjX2hhc2hfbG9va3VwKHBnX3djaGFyIGNoLCBjb25zdCBwZ191 bmljb2RlX25vcm1pbmZvICpub3JtaW5mbykKICAqIExvb2sgdXAgdGhlIG5vcm1hbGl6YXRpb24g cXVpY2sgY2hlY2sgY2hhcmFjdGVyIHByb3BlcnR5CiAgKi8KIHN0YXRpYyBVbmljb2RlTm9ybWFs aXphdGlvblFDCi1xY19pc19hbGxvd2VkKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBw Z193Y2hhciBjaCkKK3FjX2lzX2FsbG93ZWQoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0s IGNoYXIzMl90IGNoKQogewogCWNvbnN0IHBnX3VuaWNvZGVfbm9ybXByb3BzICpmb3VuZCA9IE5V TEw7CiAKQEAgLTU5NSw3ICs1OTUsNyBAQCBxY19pc19hbGxvd2VkKFVuaWNvZGVOb3JtYWxpemF0 aW9uRm9ybSBmb3JtLCBwZ193Y2hhciBjaCkKIH0KIAogVW5pY29kZU5vcm1hbGl6YXRpb25RQwot dW5pY29kZV9pc19ub3JtYWxpemVkX3F1aWNrY2hlY2soVW5pY29kZU5vcm1hbGl6YXRpb25Gb3Jt IGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKK3VuaWNvZGVfaXNfbm9ybWFsaXplZF9xdWlj a2NoZWNrKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBjaGFyMzJfdCAqaW5w dXQpCiB7CiAJdWludDgJCWxhc3RDYW5vbmljYWxDbGFzcyA9IDA7CiAJVW5pY29kZU5vcm1hbGl6 YXRpb25RQyByZXN1bHQgPSBVTklDT0RFX05PUk1fUUNfWUVTOwpAQCAtNjEwLDkgKzYxMCw5IEBA IHVuaWNvZGVfaXNfbm9ybWFsaXplZF9xdWlja2NoZWNrKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9y bSBmb3JtLCBjb25zdCBwZ193Y2hhciAqCiAJaWYgKGZvcm0gPT0gVU5JQ09ERV9ORkQgfHwgZm9y bSA9PSBVTklDT0RFX05GS0QpCiAJCXJldHVybiBVTklDT0RFX05PUk1fUUNfTUFZQkU7CiAKLQlm b3IgKGNvbnN0IHBnX3djaGFyICpwID0gaW5wdXQ7ICpwOyBwKyspCisJZm9yIChjb25zdCBjaGFy MzJfdCAqcCA9IGlucHV0OyAqcDsgcCsrKQogCXsKLQkJcGdfd2NoYXIJY2ggPSAqcDsKKwkJY2hh cjMyX3QJY2ggPSAqcDsKIAkJdWludDgJCWNhbm9uaWNhbENsYXNzOwogCQlVbmljb2RlTm9ybWFs aXphdGlvblFDIGNoZWNrOwogCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvbWJwcmludC5jIGIv c3JjL2ZlX3V0aWxzL21icHJpbnQuYwppbmRleCBlYjNlZWVlOTkyNS4uOGJmY2UxZDRlMDcgMTAw NjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9tYnByaW50LmMKKysrIGIvc3JjL2ZlX3V0aWxzL21icHJp bnQuYwpAQCAtNDksNyArNDksNyBAQCBwZ19nZXRfdXRmOF9pZCh2b2lkKQogICoKICAqIE5vIGVy cm9yIGNoZWNrcyBoZXJlLCBjIG11c3QgcG9pbnQgdG8gYSBsb25nLWVub3VnaCBzdHJpbmcuCiAg Ki8KLXN0YXRpYyBwZ193Y2hhcgorc3RhdGljIGNoYXIzMl90CiB1dGY4X3RvX3VuaWNvZGUoY29u c3QgdW5zaWduZWQgY2hhciAqYykKIHsKIAlpZiAoKCpjICYgMHg4MCkgPT0gMCkKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2MuaCBiL3NyYy9pbmNsdWRlL2MuaAppbmRleCA5YWI1ZTYxNzk5NS4u YTJlZTEwOGZkMTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2MuaAorKysgYi9zcmMvaW5jbHVk ZS9jLmgKQEAgLTUxMyw2ICs1MTMsMTEgQEAgdHlwZWRlZiB2b2lkICgqcGdfZnVuY3B0cl90KSAo dm9pZCk7CiAKICNpbmNsdWRlIDxzdGRib29sLmg+CiAKKy8qCisgKiBjaGFyMzJfdAorICogICAg ICBVbmljb2RlIGNvZGUgcG9pbnQuCisgKi8KKyNpbmNsdWRlIDx1Y2hhci5oPgogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgkJCQlTZWN0aW9uIDM6CXN0YW5kYXJkIHN5c3RlbSB0eXBlcwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3Vu aWNvZGVfY2FzZS5oCmluZGV4IDQxZTJjMWY0YjMzLi42YmNmZmQzNDljMiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1v bi91bmljb2RlX2Nhc2UuaApAQCAtMTQsMTQgKzE0LDEyIEBACiAjaWZuZGVmIFVOSUNPREVfQ0FT RV9ICiAjZGVmaW5lIFVOSUNPREVfQ0FTRV9ICiAKLSNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgot CiB0eXBlZGVmIHNpemVfdCAoKldvcmRCb3VuZGFyeU5leHQpICh2b2lkICp3YnN0YXRlKTsKIAot cGdfd2NoYXIJdW5pY29kZV9sb3dlcmNhc2Vfc2ltcGxlKHBnX3djaGFyIGNvZGUpOwotcGdfd2No YXIJdW5pY29kZV90aXRsZWNhc2Vfc2ltcGxlKHBnX3djaGFyIGNvZGUpOwotcGdfd2NoYXIJdW5p Y29kZV91cHBlcmNhc2Vfc2ltcGxlKHBnX3djaGFyIGNvZGUpOwotcGdfd2NoYXIJdW5pY29kZV9j YXNlZm9sZF9zaW1wbGUocGdfd2NoYXIgY29kZSk7CitjaGFyMzJfdAl1bmljb2RlX2xvd2VyY2Fz ZV9zaW1wbGUoY2hhcjMyX3QgY29kZSk7CitjaGFyMzJfdAl1bmljb2RlX3RpdGxlY2FzZV9zaW1w bGUoY2hhcjMyX3QgY29kZSk7CitjaGFyMzJfdAl1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUoY2hh cjMyX3QgY29kZSk7CitjaGFyMzJfdAl1bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShjaGFyMzJfdCBj b2RlKTsKIHNpemVfdAkJdW5pY29kZV9zdHJsb3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXpl LCBjb25zdCBjaGFyICpzcmMsCiAJCQkJCQkJIHNzaXplX3Qgc3JjbGVuLCBib29sIGZ1bGwpOwog c2l6ZV90CQl1bmljb2RlX3N0cnRpdGxlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2Vf dGFibGUuaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2VfdGFibGUuaAppbmRleCBk NTMxMTc4NjU4Mi4uMGExNGZiMmQ5N2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1vbi91 bmljb2RlX2Nhc2VfdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXNl X3RhYmxlLmgKQEAgLTE4LDcgKzE4LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNv ZGVfY2FzZS5oIgotI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAKIC8qCiAgKiBUaGUgbWF4aW11 bSBudW1iZXIgb2YgY29kZXBvaW50cyB0aGF0IGNhbiByZXN1bHQgZnJvbSBjYXNlIG1hcHBpbmcK QEAgLTQ1LDcgKzQ0LDcgQEAgdHlwZWRlZiBlbnVtCiB0eXBlZGVmIHN0cnVjdAogewogCWludDE2 CQljb25kaXRpb25zOwotCXBnX3djaGFyCW1hcFtOQ2FzZUtpbmRdW01BWF9DQVNFX0VYUEFOU0lP Tl07CisJY2hhcjMyX3QJbWFwW05DYXNlS2luZF1bTUFYX0NBU0VfRVhQQU5TSU9OXTsKIH0gcGdf c3BlY2lhbF9jYXNlOwogCiAvKgpAQCAtMTY2LDcgKzE2NSw3IEBAIHN0YXRpYyBjb25zdCBwZ19z cGVjaWFsX2Nhc2Ugc3BlY2lhbF9jYXNlWzEwNl0gPQogICogVGhlIGVudHJ5IGNhc2VfbWFwX2xv d2VyW2Nhc2VfaW5kZXgoY29kZXBvaW50KV0gaXMgdGhlIG1hcHBpbmcgZm9yIHRoZQogICogZ2l2 ZW4gY29kZXBvaW50LgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgY2FzZV9tYXBfbG93ZXJb MTcwNF0gPQorc3RhdGljIGNvbnN0IGNoYXIzMl90IGNhc2VfbWFwX2xvd2VyWzE3MDRdID0KIHsK IAkweDAwMDAwMCwJCQkJCS8qIHJlc2VydmVkICovCiAJMHgwMDAwMDAsCQkJCQkvKiBVKzAwMDAw MCAqLwpAQCAtMTg3OSw3ICsxODc4LDcgQEAgc3RhdGljIGNvbnN0IHBnX3djaGFyIGNhc2VfbWFw X2xvd2VyWzE3MDRdID0KICAqIFRoZSBlbnRyeSBjYXNlX21hcF90aXRsZVtjYXNlX2luZGV4KGNv ZGVwb2ludCldIGlzIHRoZSBtYXBwaW5nIGZvciB0aGUKICAqIGdpdmVuIGNvZGVwb2ludC4KICAq Lwotc3RhdGljIGNvbnN0IHBnX3djaGFyIGNhc2VfbWFwX3RpdGxlWzE3MDRdID0KK3N0YXRpYyBj b25zdCBjaGFyMzJfdCBjYXNlX21hcF90aXRsZVsxNzA0XSA9CiB7CiAJMHgwMDAwMDAsCQkJCQkv KiByZXNlcnZlZCAqLwogCTB4MDAwMDAwLAkJCQkJLyogVSswMDAwMDAgKi8KQEAgLTM1OTIsNyAr MzU5MSw3IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciBjYXNlX21hcF90aXRsZVsxNzA0XSA9CiAg KiBUaGUgZW50cnkgY2FzZV9tYXBfdXBwZXJbY2FzZV9pbmRleChjb2RlcG9pbnQpXSBpcyB0aGUg bWFwcGluZyBmb3IgdGhlCiAgKiBnaXZlbiBjb2RlcG9pbnQuCiAgKi8KLXN0YXRpYyBjb25zdCBw Z193Y2hhciBjYXNlX21hcF91cHBlclsxNzA0XSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgY2Fz ZV9tYXBfdXBwZXJbMTcwNF0gPQogewogCTB4MDAwMDAwLAkJCQkJLyogcmVzZXJ2ZWQgKi8KIAkw eDAwMDAwMCwJCQkJCS8qIFUrMDAwMDAwICovCkBAIC01MzA1LDcgKzUzMDQsNyBAQCBzdGF0aWMg Y29uc3QgcGdfd2NoYXIgY2FzZV9tYXBfdXBwZXJbMTcwNF0gPQogICogVGhlIGVudHJ5IGNhc2Vf bWFwX2ZvbGRbY2FzZV9pbmRleChjb2RlcG9pbnQpXSBpcyB0aGUgbWFwcGluZyBmb3IgdGhlCiAg KiBnaXZlbiBjb2RlcG9pbnQuCiAgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBjYXNlX21hcF9m b2xkWzE3MDRdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBjYXNlX21hcF9mb2xkWzE3MDRdID0K IHsKIAkweDAwMDAwMCwJCQkJCS8qIHJlc2VydmVkICovCiAJMHgwMDAwMDAsCQkJCQkvKiBVKzAw MDAwMCAqLwpAQCAtMTM1MjIsNyArMTM1MjEsNyBAQCBzdGF0aWMgY29uc3QgdWludDE2IGNhc2Vf bWFwWzQ3NzhdID0KICAqIHRoZSBvZmZzZXQgaW50byB0aGUgbWFwcGluZyB0YWJsZXMuCiAgKi8K IHN0YXRpYyBpbmxpbmUgdWludDE2Ci1jYXNlX2luZGV4KHBnX3djaGFyIGNwKQorY2FzZV9pbmRl eChjaGFyMzJfdCBjcCkKIHsKIAkvKiBGYXN0IHBhdGggZm9yIGNvZGVwb2ludHMgPCAweDA1ODgg Ki8KIAlpZiAoY3AgPCAweDA1ODgpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tb24vdW5p Y29kZV9jYXRlZ29yeS5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaApp bmRleCA4ZmQ4YjY3YTQxNi4uNjg0MTQzZDNjOGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nv bW1vbi91bmljb2RlX2NhdGVnb3J5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVf Y2F0ZWdvcnkuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBVTklDT0RFX0NBVEVHT1JZX0gK ICNkZWZpbmUgVU5JQ09ERV9DQVRFR09SWV9ICiAKLSNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgot CiAvKgogICogVW5pY29kZSBHZW5lcmFsIENhdGVnb3J5IFZhbHVlcwogICoKQEAgLTYxLDMxICs1 OSwzMSBAQCB0eXBlZGVmIGVudW0gcGdfdW5pY29kZV9jYXRlZ29yeQogCVBHX1VfRklOQUxfUFVO Q1RVQVRJT04gPSAyOSAvKiBQZiAqLwogfSBwZ191bmljb2RlX2NhdGVnb3J5OwogCi1leHRlcm4g cGdfdW5pY29kZV9jYXRlZ29yeSB1bmljb2RlX2NhdGVnb3J5KHBnX3djaGFyIGNvZGUpOworZXh0 ZXJuIHBnX3VuaWNvZGVfY2F0ZWdvcnkgdW5pY29kZV9jYXRlZ29yeShjaGFyMzJfdCBjb2RlKTsK IGV4dGVybiBjb25zdCBjaGFyICp1bmljb2RlX2NhdGVnb3J5X3N0cmluZyhwZ191bmljb2RlX2Nh dGVnb3J5IGNhdGVnb3J5KTsKIGV4dGVybiBjb25zdCBjaGFyICp1bmljb2RlX2NhdGVnb3J5X2Fi YnJldihwZ191bmljb2RlX2NhdGVnb3J5IGNhdGVnb3J5KTsKIAotZXh0ZXJuIGJvb2wgcGdfdV9w cm9wX2FscGhhYmV0aWMocGdfd2NoYXIgY29kZSk7Ci1leHRlcm4gYm9vbCBwZ191X3Byb3BfbG93 ZXJjYXNlKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX3VwcGVyY2FzZShw Z193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfcHJvcF9jYXNlZChwZ193Y2hhciBjb2Rl KTsKLWV4dGVybiBib29sIHBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShwZ193Y2hhciBjb2RlKTsK LWV4dGVybiBib29sIHBnX3VfcHJvcF93aGl0ZV9zcGFjZShwZ193Y2hhciBjb2RlKTsKLWV4dGVy biBib29sIHBnX3VfcHJvcF9oZXhfZGlnaXQocGdfd2NoYXIgY29kZSk7Ci1leHRlcm4gYm9vbCBw Z191X3Byb3Bfam9pbl9jb250cm9sKHBnX3djaGFyIGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9w cm9wX2FscGhhYmV0aWMoY2hhcjMyX3QgY29kZSk7CitleHRlcm4gYm9vbCBwZ191X3Byb3BfbG93 ZXJjYXNlKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX3VwcGVyY2FzZShj aGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfcHJvcF9jYXNlZChjaGFyMzJfdCBjb2Rl KTsKK2V4dGVybiBib29sIHBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShjaGFyMzJfdCBjb2RlKTsK K2V4dGVybiBib29sIHBnX3VfcHJvcF93aGl0ZV9zcGFjZShjaGFyMzJfdCBjb2RlKTsKK2V4dGVy biBib29sIHBnX3VfcHJvcF9oZXhfZGlnaXQoY2hhcjMyX3QgY29kZSk7CitleHRlcm4gYm9vbCBw Z191X3Byb3Bfam9pbl9jb250cm9sKGNoYXIzMl90IGNvZGUpOwogCi1leHRlcm4gYm9vbCBwZ191 X2lzZGlnaXQocGdfd2NoYXIgY29kZSwgYm9vbCBwb3NpeCk7Ci1leHRlcm4gYm9vbCBwZ191X2lz YWxwaGEocGdfd2NoYXIgY29kZSk7Ci1leHRlcm4gYm9vbCBwZ191X2lzYWxudW0ocGdfd2NoYXIg Y29kZSwgYm9vbCBwb3NpeCk7Ci1leHRlcm4gYm9vbCBwZ191X2lzd29yZChwZ193Y2hhciBjb2Rl KTsKLWV4dGVybiBib29sIHBnX3VfaXN1cHBlcihwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29s IHBnX3VfaXNsb3dlcihwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNibGFuayhw Z193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNjbnRybChwZ193Y2hhciBjb2RlKTsK LWV4dGVybiBib29sIHBnX3VfaXNncmFwaChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBn X3VfaXNwcmludChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNwdW5jdChwZ193 Y2hhciBjb2RlLCBib29sIHBvc2l4KTsKLWV4dGVybiBib29sIHBnX3VfaXNzcGFjZShwZ193Y2hh ciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXN4ZGlnaXQocGdfd2NoYXIgY29kZSwgYm9vbCBw b3NpeCk7CitleHRlcm4gYm9vbCBwZ191X2lzZGlnaXQoY2hhcjMyX3QgY29kZSwgYm9vbCBwb3Np eCk7CitleHRlcm4gYm9vbCBwZ191X2lzYWxwaGEoY2hhcjMyX3QgY29kZSk7CitleHRlcm4gYm9v bCBwZ191X2lzYWxudW0oY2hhcjMyX3QgY29kZSwgYm9vbCBwb3NpeCk7CitleHRlcm4gYm9vbCBw Z191X2lzd29yZChjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXN1cHBlcihjaGFy MzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNsb3dlcihjaGFyMzJfdCBjb2RlKTsKK2V4 dGVybiBib29sIHBnX3VfaXNibGFuayhjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3Vf aXNjbnRybChjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNncmFwaChjaGFyMzJf dCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNwcmludChjaGFyMzJfdCBjb2RlKTsKK2V4dGVy biBib29sIHBnX3VfaXNwdW5jdChjaGFyMzJfdCBjb2RlLCBib29sIHBvc2l4KTsKK2V4dGVybiBi b29sIHBnX3VfaXNzcGFjZShjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXN4ZGln aXQoY2hhcjMyX3QgY29kZSwgYm9vbCBwb3NpeCk7CiAKICNlbmRpZgkJCQkJCQkvKiBVTklDT0RF X0NBVEVHT1JZX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nh dGVnb3J5X3RhYmxlLmggYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29yeV90YWJs ZS5oCmluZGV4IDk1YTFjNjVkYTdlLi40NjZhNDFiNzJiMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnlfdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t b24vdW5pY29kZV9jYXRlZ29yeV90YWJsZS5oCkBAIC0yMCwxNSArMjAsMTUgQEAKICAqLwogdHlw ZWRlZiBzdHJ1Y3QKIHsKLQl1aW50MzIJCWZpcnN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICov Ci0JdWludDMyCQlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCisJY2hhcjMyX3QJZmly c3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJfdAlsYXN0OwkJCS8qIFVuaWNv ZGUgY29kZXBvaW50ICovCiAJdWludDgJCWNhdGVnb3J5OwkJLyogR2VuZXJhbCBDYXRlZ29yeSAq LwogfSBwZ19jYXRlZ29yeV9yYW5nZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1aW50MzIJCWZp cnN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCi0JdWludDMyCQlsYXN0OwkJCS8qIFVuaWNv ZGUgY29kZXBvaW50ICovCisJY2hhcjMyX3QJZmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQg Ki8KKwljaGFyMzJfdAlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCiB9IHBnX3VuaWNv ZGVfcmFuZ2U7CiAKIHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t b24vdW5pY29kZV9ub3JtLmggYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9ub3JtLmgKaW5k ZXggNWJjM2I3OWU3OGUuLjUxNmMxOTJjYzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t b24vdW5pY29kZV9ub3JtLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfbm9ybS5o CkBAIC0xNCw4ICsxNCw2IEBACiAjaWZuZGVmIFVOSUNPREVfTk9STV9ICiAjZGVmaW5lIFVOSUNP REVfTk9STV9ICiAKLSNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgotCiB0eXBlZGVmIGVudW0KIHsK IAlVTklDT0RFX05GQyA9IDAsCkBAIC0zMiw4ICszMCw4IEBAIHR5cGVkZWYgZW51bQogCVVOSUNP REVfTk9STV9RQ19NQVlCRSA9IC0xLAogfSBVbmljb2RlTm9ybWFsaXphdGlvblFDOwogCi1leHRl cm4gcGdfd2NoYXIgKnVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBm b3JtLCBjb25zdCBwZ193Y2hhciAqaW5wdXQpOworZXh0ZXJuIGNoYXIzMl90ICp1bmljb2RlX25v cm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgY2hhcjMyX3QgKmlu cHV0KTsKIAotZXh0ZXJuIFVuaWNvZGVOb3JtYWxpemF0aW9uUUMgdW5pY29kZV9pc19ub3JtYWxp emVkX3F1aWNrY2hlY2soVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3dj aGFyICppbnB1dCk7CitleHRlcm4gVW5pY29kZU5vcm1hbGl6YXRpb25RQyB1bmljb2RlX2lzX25v cm1hbGl6ZWRfcXVpY2tjaGVjayhVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3Qg Y2hhcjMyX3QgKmlucHV0KTsKIAogI2VuZGlmCQkJCQkJCS8qIFVOSUNPREVfTk9STV9IICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oIGIvc3JjL2luY2x1ZGUvbWIvcGdf d2NoYXIuaAppbmRleCA0YjRhOTk3NGI3NS4uYTQxYmY0NzY0OWUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL21iL3BnX3djaGFyLmgKKysrIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApAQCAt NTMyLDcgKzUzMiw3IEBAIHR5cGVkZWYgdWludDMyICgqdXRmX2xvY2FsX2NvbnZlcnNpb25fZnVu YykgKHVpbnQzMiBjb2RlKTsKICAqIFNvbWUgaGFuZHkgZnVuY3Rpb25zIGZvciBVbmljb2RlLXNw ZWNpZmljIHRlc3RzLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wKLWlzX3ZhbGlkX3VuaWNvZGVf Y29kZXBvaW50KHBnX3djaGFyIGMpCitpc192YWxpZF91bmljb2RlX2NvZGVwb2ludChjaGFyMzJf dCBjKQogewogCXJldHVybiAoYyA+IDAgJiYgYyA8PSAweDEwRkZGRik7CiB9CkBAIC01NDksNyAr NTQ5LDcgQEAgaXNfdXRmMTZfc3Vycm9nYXRlX3NlY29uZChwZ193Y2hhciBjKQogCXJldHVybiAo YyA+PSAweERDMDAgJiYgYyA8PSAweERGRkYpOwogfQogCi1zdGF0aWMgaW5saW5lIHBnX3djaGFy CitzdGF0aWMgaW5saW5lIGNoYXIzMl90CiBzdXJyb2dhdGVfcGFpcl90b19jb2RlcG9pbnQocGdf d2NoYXIgZmlyc3QsIHBnX3djaGFyIHNlY29uZCkKIHsKIAlyZXR1cm4gKChmaXJzdCAmIDB4M0ZG KSA8PCAxMCkgKyAweDEwMDAwICsgKHNlY29uZCAmIDB4M0ZGKTsKQEAgLTU4OCw3ICs1ODgsNyBA QCB1dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqYykKICAqIHVuaWNvZGVfdXRm OGxlbihjKSBieXRlcyBhdmFpbGFibGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hh ciAqCi11bmljb2RlX3RvX3V0ZjgocGdfd2NoYXIgYywgdW5zaWduZWQgY2hhciAqdXRmOHN0cmlu ZykKK3VuaWNvZGVfdG9fdXRmOChjaGFyMzJfdCBjLCB1bnNpZ25lZCBjaGFyICp1dGY4c3RyaW5n KQogewogCWlmIChjIDw9IDB4N0YpCiAJewpAQCAtNjIwLDcgKzYyMCw3IEBAIHVuaWNvZGVfdG9f dXRmOChwZ193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICp1dGY4c3RyaW5nKQogICogTnVtYmVyIG9m IGJ5dGVzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGdpdmVuIGNoYXIgaW4gVVRGOC4KICAqLwog c3RhdGljIGlubGluZSBpbnQKLXVuaWNvZGVfdXRmOGxlbihwZ193Y2hhciBjKQordW5pY29kZV91 dGY4bGVuKGNoYXIzMl90IGMpCiB7CiAJaWYgKGMgPD0gMHg3RikKIAkJcmV0dXJuIDE7CkBAIC02 NzYsOCArNjc2LDggQEAgZXh0ZXJuIGludAlwZ192YWxpZF9zZXJ2ZXJfZW5jb2RpbmcoY29uc3Qg Y2hhciAqbmFtZSk7CiBleHRlcm4gYm9vbCBpc19lbmNvZGluZ19zdXBwb3J0ZWRfYnlfaWN1KGlu dCBlbmNvZGluZyk7CiBleHRlcm4gY29uc3QgY2hhciAqZ2V0X2VuY29kaW5nX25hbWVfZm9yX2lj dShpbnQgZW5jb2RpbmcpOwogCi1leHRlcm4gdW5zaWduZWQgY2hhciAqdW5pY29kZV90b191dGY4 KHBnX3djaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnV0ZjhzdHJpbmcpOwotZXh0ZXJuIHBnX3djaGFy IHV0ZjhfdG9fdW5pY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpjKTsKK2V4dGVybiB1bnNpZ25l ZCBjaGFyICp1bmljb2RlX3RvX3V0ZjgoY2hhcjMyX3QgYywgdW5zaWduZWQgY2hhciAqdXRmOHN0 cmluZyk7CitleHRlcm4gY2hhcjMyX3QgdXRmOF90b191bmljb2RlKGNvbnN0IHVuc2lnbmVkIGNo YXIgKmMpOwogZXh0ZXJuIGJvb2wgcGdfdXRmOF9pc2xlZ2FsKGNvbnN0IHVuc2lnbmVkIGNoYXIg KnNvdXJjZSwgaW50IGxlbmd0aCk7CiBleHRlcm4gaW50CXBnX3V0Zl9tYmxlbihjb25zdCB1bnNp Z25lZCBjaGFyICpzKTsKIGV4dGVybiBpbnQJcGdfbXVsZV9tYmxlbihjb25zdCB1bnNpZ25lZCBj aGFyICpzKTsKQEAgLTczOSw4ICs3MzksOCBAQCBleHRlcm4gY2hhciAqcGdfc2VydmVyX3RvX2Ns aWVudChjb25zdCBjaGFyICpzLCBpbnQgbGVuKTsKIGV4dGVybiBjaGFyICpwZ19hbnlfdG9fc2Vy dmVyKGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIGludCBlbmNvZGluZyk7CiBleHRlcm4gY2hhciAq cGdfc2VydmVyX3RvX2FueShjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBpbnQgZW5jb2RpbmcpOwog Ci1leHRlcm4gdm9pZCBwZ191bmljb2RlX3RvX3NlcnZlcihwZ193Y2hhciBjLCB1bnNpZ25lZCBj aGFyICpzKTsKLWV4dGVybiBib29sIHBnX3VuaWNvZGVfdG9fc2VydmVyX25vZXJyb3IocGdfd2No YXIgYywgdW5zaWduZWQgY2hhciAqcyk7CitleHRlcm4gdm9pZCBwZ191bmljb2RlX3RvX3NlcnZl cihjaGFyMzJfdCBjLCB1bnNpZ25lZCBjaGFyICpzKTsKK2V4dGVybiBib29sIHBnX3VuaWNvZGVf dG9fc2VydmVyX25vZXJyb3IoY2hhcjMyX3QgYywgdW5zaWduZWQgY2hhciAqcyk7CiAKIGV4dGVy biB1bnNpZ25lZCBzaG9ydCBCSUc1dG9DTlModW5zaWduZWQgc2hvcnQgYmlnNSwgdW5zaWduZWQg Y2hhciAqbGMpOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IENOU3RvQklHNSh1bnNpZ25lZCBzaG9y dCBjbnMsIHVuc2lnbmVkIGNoYXIgbGMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAz NzdhNzk0NjU4NS4uZjJiYjliNGJjN2IgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0z NTA1LDYgKzM1MDUsNyBAQCBjYl9jbGVhbnVwX2RpcgogY2Jfb3B0aW9ucwogY2JfdGFibGVzcGFj ZQogY2JfdGFibGVzcGFjZV9tYXBwaW5nCitjaGFyMzJfdAogY2hlY2tfYWdnX2FyZ3VtZW50c19j b250ZXh0CiBjaGVja19mdW5jdGlvbl9jYWxsYmFjawogY2hlY2tfbmV0d29ya19kYXRhCi0tIAoy LjQzLjAKCg== --=-TLr+vht4o8RMvYEBEU6N--