Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mFZHo-0008Ea-0B for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Aug 2021 09:52:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mFZHm-0007ol-Sb for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Aug 2021 09:52:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mFZHl-0007oc-No for pgsql-hackers@lists.postgresql.org; Mon, 16 Aug 2021 09:52:02 +0000 Received: from wout4-smtp.messagingengine.com ([64.147.123.20]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mFZHh-00008W-LG for pgsql-hackers@postgresql.org; Mon, 16 Aug 2021 09:52:00 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id BE7D2320090F for ; Mon, 16 Aug 2021 05:51:55 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Mon, 16 Aug 2021 05:51:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=GPIB2kmMIr1opvj+n5Ek3POcjk9EG mDNi0PGRk5/7Vw=; b=UbZpfgsSvpjFp7ZhbSPQUpYv4OpgNx2xRna3K9jR5RLg6 S8dw3OswDu19P5r5RRXEyftg/c0shmIvweWtrqy77AN0SOyuGg2ZZEjGV8XuOON0 2T8b901UogtDqWRpu9weT9cBxFjQibcrcgMp+Mye0NZ7/1xavclwqEzUlcG7F5XK NG5gl5pEfRy/nuXd7DympwJnbudDTWP2JGf/FROV7piDj3PM7yF3i1LCM7+eOSEZ V/brzx3myCL1jmxrrQjSP+jAxbLbnZikeOVHYMkjQ/UpKV6w+mkTO6Lm4jWWiKe9 phlMUqDkMZchfoeO9qP8YuW6Ue031Q0IPx3tGv8Wg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrledugddvtdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurhephffuvffkffgfgggtsehmtderredtfe ejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgvihhs vghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrghtthgvrh hnpeejteehveeuueeuudevteekgeefieefveettdeukeevteekffffieejheffgfejleen ucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvg hrrdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 16 Aug 2021 05:51:53 -0400 (EDT) From: Peter Eisentraut Subject: Non-decimal integer literals To: pgsql-hackers Message-ID: Date: Mon, 16 Aug 2021 11:51:50 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1968E337BA2E50387E0CF394" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------1968E337BA2E50387E0CF394 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Here is a patch to add support for hexadecimal, octal, and binary integer literals: 0x42E 0o112 0b100101 per SQL:202x draft. This adds support in the lexer as well as in the integer type input functions. Those core parts are straightforward enough, but there are a bunch of other places where integers are parsed, and one could consider in each case whether they should get the same treatment, for example the replication syntax lexer, or input function for oid, numeric, and int2vector. There are also some opportunities to move some code around, for example scanint8() could be in numutils.c. I have also looked with some suspicion at some details of the number lexing in ecpg, but haven't found anything I could break yet. Suggestions are welcome. --------------1968E337BA2E50387E0CF394 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v1-0001-Non-decimal-integer-literals.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-Non-decimal-integer-literals.patch" RnJvbSBmMmE5YjM3OTY4YTU1YmY5MWZlYjJiNDc1Mzc0NWM5ZjVhNjRiZTJlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAxNiBBdWcgMjAyMSAwOTozMjoxNCArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIE5vbi1kZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMKCkFkZCBzdXBwb3J0 IGZvciBoZXhhZGVjaW1hbCwgb2N0YWwsIGFuZCBiaW5hcnkgaW50ZWdlciBsaXRlcmFsczoK CiAgICAweDQyRQogICAgMG8xMTIKICAgIDBiMTAwMTAxCgpwZXIgU1FMOjIwMnggZHJhZnQu CgpUaGlzIGFkZHMgc3VwcG9ydCBpbiB0aGUgbGV4ZXIgYXMgd2VsbCBhcyBpbiB0aGUgaW50 ZWdlciB0eXBlIGlucHV0CmZ1bmN0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvc3ludGF4LnNn bWwgICAgICAgICAgICAgfCAyNiArKysrKysrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxf ZmVhdHVyZXMudHh0IHwgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubCAgICAgICAg ICAgIHwgNzAgKysrKysrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9p bnQ4LmMgICAgICAgICB8IDU0ICsrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9udW11dGlscy5jICAgICB8IDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9mZV91dGlscy9wc3Fsc2Nhbi5sICAgICAgICAgICAgICB8IDU1ICsrKysrKysrKysr LS0tLS0KIHNyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9wZ2MubCAgICB8IDY0ICsrKysr KysrKysrLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQyLm91dCAgIHwg MTkgKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDQub3V0ICAgfCAzNyAr KysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQ4Lm91dCAgIHwgMTkg KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQyLnNxbCAgICAgICAgfCAgNyArKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50NC5zcWwgICAgICAgIHwgMTEgKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvaW50OC5zcWwgICAgICAgIHwgIDcgKysKIDEzIGZpbGVzIGNoYW5n ZWQsIDQxMiBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwKaW5k ZXggZDY2NTYwYjU4Ny4uOGZiNGIxMjI4ZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5 bnRheC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbApAQCAtNjk0LDYgKzY5 NCwzMiBAQCA8dGl0bGU+TnVtZXJpYyBDb25zdGFudHM8L3RpdGxlPgogPC9saXRlcmFsbGF5 b3V0PgogICAgIDwvcGFyYT4KIAorICAgIDxwYXJhPgorICAgICBBZGRpdGlvbmFsbHksIG5v bi1kZWNpbWFsIGludGVnZXIgY29uc3RhbnRzIGNhbiBiZSB1c2VkIGluIHRoZXNlIGZvcm1z OgorPHN5bm9wc2lzPgorMHg8cmVwbGFjZWFibGU+aGV4ZGlnaXRzPC9yZXBsYWNlYWJsZT4K KzBvPHJlcGxhY2VhYmxlPm9jdGRpZ2l0czwvcmVwbGFjZWFibGU+CiswYjxyZXBsYWNlYWJs ZT5iaW5kaWdpdHM8L3JlcGxhY2VhYmxlPgorPC9zeW5vcHNpcz4KKyAgICAgPHJlcGxhY2Vh YmxlPmhleGRpZ2l0czwvcmVwbGFjZWFibGU+IGlzIG9uZSBvciBtb3JlIGhleGFkZWNpbWFs IGRpZ2l0cworICAgICAoMC05LCBBLUYpLCA8cmVwbGFjZWFibGU+b2N0ZGlnaXRzPC9yZXBs YWNlYWJsZT4gaXMgb25lIG9yIG1vcmUgb2N0YWwKKyAgICAgZGlnaXRzICgwLTcpLCA8cmVw bGFjZWFibGU+YmluZGlnaXRzPC9yZXBsYWNlYWJsZT4gaXMgb25lIG9yIG1vcmUgYmluYXJ5 CisgICAgIGRpZ2l0cyAoMCBvciAxKS4gIEhleGFkZWNpbWFsIGRpZ2l0cyBhbmQgdGhlIHJh ZGl4IHByZWZpeGVzIGNhbiBiZSBpbgorICAgICB1cHBlciBvciBsb3dlciBjYXNlLiAgTm90 ZSB0aGF0IG9ubHkgaW50ZWdlcnMgY2FuIGhhdmUgbm9uLWRlY2ltYWwgZm9ybXMsCisgICAg IG5vdCBudW1iZXJzIHdpdGggZnJhY3Rpb25hbCBwYXJ0cy4KKyAgICA8L3BhcmE+CisKKyAg ICA8cGFyYT4KKyAgICAgVGhlc2UgYXJlIHNvbWUgZXhhbXBsZXMgb2YgdGhpczoKKzxsaXRl cmFsbGF5b3V0PjBiMTAwMTAxCiswQjEwMDExMDAxCiswbzExMgorME83NTUKKzB4NDJlCisw WEZGRkYKKzwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKICAgICA8cGFyYT4KICAg ICAgPGluZGV4dGVybT48cHJpbWFyeT5pbnRlZ2VyPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPgog ICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PmJpZ2ludDwvcHJpbWFyeT48L2luZGV4dGVybT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dAppbmRleCA5ZjQyNDIxNmUyLi5k NjM1OTUwM2YzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJl cy50eHQKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CkBAIC01 MjYsNiArNTI2LDcgQEAgVDY1MglTUUwtZHluYW1pYyBzdGF0ZW1lbnRzIGluIFNRTCByb3V0 aW5lcwkJCU5PCiBUNjUzCVNRTC1zY2hlbWEgc3RhdGVtZW50cyBpbiBleHRlcm5hbCByb3V0 aW5lcwkJCVlFUwkKIFQ2NTQJU1FMLWR5bmFtaWMgc3RhdGVtZW50cyBpbiBleHRlcm5hbCBy b3V0aW5lcwkJCU5PCQogVDY1NQlDeWNsaWNhbGx5IGRlcGVuZGVudCByb3V0aW5lcwkJCVlF UwkKK1Q2NjEJTm9uLWRlY2ltYWwgaW50ZWdlciBsaXRlcmFscwkJCVlFUwlTUUw6MjAyeCBk cmFmdAogVDgxMQlCYXNpYyBTUUwvSlNPTiBjb25zdHJ1Y3RvciBmdW5jdGlvbnMJCQlOTwkK IFQ4MTIJU1FML0pTT046IEpTT05fT0JKRUNUQUdHCQkJTk8JCiBUODEzCVNRTC9KU09OOiBK U09OX0FSUkFZQUdHIHdpdGggT1JERVIgQlkJCQlOTwkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnNlci9zY2FuLmwgYi9zcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sCmluZGV4IDZl NjgyNGZhZWIuLjgzNDU4ZmZiMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9z Y2FuLmwKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubApAQCAtMjYyLDcgKzI2Miw3 IEBAIHF1b3RlY29udGludWVmYWlsCXt3aGl0ZXNwYWNlfSoiLSI/CiB4YnN0YXJ0CQkJW2JC XXtxdW90ZX0KIHhiaW5zaWRlCQlbXiddKgogCi0vKiBIZXhhZGVjaW1hbCBudW1iZXIgKi8K Ky8qIEhleGFkZWNpbWFsIGJ5dGUgc3RyaW5nICovCiB4aHN0YXJ0CQkJW3hYXXtxdW90ZX0K IHhoaW5zaWRlCQlbXiddKgogCkBAIC0zNDEsNyArMzQxLDcgQEAgeGNzdGFydAkJCVwvXCp7 b3BfY2hhcnN9KgogeGNzdG9wCQkJXCorXC8KIHhjaW5zaWRlCQlbXiovXSsKIAotZGlnaXQJ CQlbMC05XQorCiBpZGVudF9zdGFydAkJW0EtWmEtelwyMDAtXDM3N19dCiBpZGVudF9jb250 CQlbQS1aYS16XDIwMC1cMzc3XzAtOVwkXQogCkBAIC0zODAsMjQgKzM4MCw0MSBAQCBzZWxm CQkJWywoKVxbXF0uO1w6XCtcLVwqXC9cJVxeXDxcPlw9XQogb3BfY2hhcnMJCVtcflwhXEBc I1xeXCZcfFxgXD9cK1wtXCpcL1wlXDxcPlw9XQogb3BlcmF0b3IJCXtvcF9jaGFyc30rCiAK LS8qIHdlIG5vIGxvbmdlciBhbGxvdyB1bmFyeSBtaW51cyBpbiBudW1iZXJzLgotICogaW5z dGVhZCB3ZSBwYXNzIGl0IHNlcGFyYXRlbHkgdG8gcGFyc2VyLiB0aGVyZSBpdCBnZXRzCi0g KiBjb2VyY2VkIHZpYSBkb05lZ2F0ZSgpIC0tIExlb24gYXVnIDIwIDE5OTkKKy8qCisgKiBO dW1iZXJzCisgKgorICogVW5hcnkgbWludXMgaXMgbm90IHBhcnQgb2YgYSBudW1iZXIgaGVy ZS4gIEluc3RlYWQgd2UgcGFzcyBpdCBzZXBhcmF0ZWx5IHRvCisgKiBwYXJzZXIsIGFuZCB0 aGVyZSBpdCBnZXRzIGNvZXJjZWQgdmlhIGRvTmVnYXRlKCkuCiAgKgotICoge2RlY2ltYWxm YWlsfSBpcyB1c2VkIGJlY2F1c2Ugd2Ugd291bGQgbGlrZSAiMS4uMTAiIHRvIGxleCBhcyAx LCBkb3RfZG90LCAxMC4KKyAqIHtudW1lcmljZmFpbH0gaXMgdXNlZCBiZWNhdXNlIHdlIHdv dWxkIGxpa2UgIjEuLjEwIiB0byBsZXggYXMgMSwgZG90X2RvdCwgMTAuCiAgKgogICoge3Jl YWxmYWlsMX0gYW5kIHtyZWFsZmFpbDJ9IGFyZSBhZGRlZCB0byBwcmV2ZW50IHRoZSBuZWVk IGZvciBzY2FubmVyCiAgKiBiYWNrdXAgd2hlbiB0aGUge3JlYWx9IHJ1bGUgZmFpbHMgdG8g bWF0Y2ggY29tcGxldGVseS4KICAqLworZGVjZGlnaXQJCVswLTldCitoZXhkaWdpdAkJWzAt OUEtRmEtZl0KK29jdGRpZ2l0CQlbMC03XQorYmluZGlnaXQJCVswLTFdCisKK2RlY2ludGVn ZXIJCXtkZWNkaWdpdH0rCitoZXhpbnRlZ2VyCQkwW3hYXXtoZXhkaWdpdH0rCitvY3RpbnRl Z2VyCQkwW29PXXtvY3RkaWdpdH0rCitiaW5pbnRlZ2VyCQkwW2JCXXtiaW5kaWdpdH0rCisK K2hleGZhaWwJCQkwW3hYXQorb2N0ZmFpbAkJCTBbb09dCitiaW5mYWlsCQkJMFtiQl0KKwor aW50ZWdlcgkJCSh7ZGVjaW50ZWdlcn18e2hleGludGVnZXJ9fHtvY3RpbnRlZ2VyfXx7Ymlu aW50ZWdlcn0pCiAKLWludGVnZXIJCQl7ZGlnaXR9KwotZGVjaW1hbAkJCSgoe2RpZ2l0fSpc LntkaWdpdH0rKXwoe2RpZ2l0fStcLntkaWdpdH0qKSkKLWRlY2ltYWxmYWlsCQl7ZGlnaXR9 K1wuXC4KLXJlYWwJCQkoe2ludGVnZXJ9fHtkZWNpbWFsfSlbRWVdWy0rXT97ZGlnaXR9Kwot cmVhbGZhaWwxCQkoe2ludGVnZXJ9fHtkZWNpbWFsfSlbRWVdCi1yZWFsZmFpbDIJCSh7aW50 ZWdlcn18e2RlY2ltYWx9KVtFZV1bLStdCitudW1lcmljCQkJKCh7ZGVjaW50ZWdlcn1cLntk ZWNpbnRlZ2VyfT8pfChcLntkZWNpbnRlZ2VyfSkpCitudW1lcmljZmFpbAkJe2RlY2RpZ2l0 fStcLlwuCiAKLXBhcmFtCQkJXCR7aW50ZWdlcn0KK3JlYWwJCQkoe2RlY2ludGVnZXJ9fHtu dW1lcmljfSlbRWVdWy0rXT97ZGVjZGlnaXR9KworcmVhbGZhaWwxCQkoe2RlY2ludGVnZXJ9 fHtudW1lcmljfSlbRWVdCityZWFsZmFpbDIJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9KVtF ZV1bLStdCisKK3BhcmFtCQkJXCR7ZGVjaW50ZWdlcn0KIAogb3RoZXIJCQkuCiAKQEAgLTk3 NywxMiArOTk0LDIyIEBAIG90aGVyCQkJLgogCQkJCQlTRVRfWVlMTE9DKCk7CiAJCQkJCXJl dHVybiBwcm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQsIHl5bHZhbCk7CiAJCQkJfQot e2RlY2ltYWx9CQl7Cit7aGV4ZmFpbH0JCXsKKwkJCQkJeXllcnJvcigiaW52YWxpZCBoZXhh ZGVjaW1hbCBpbnRlZ2VyIik7CisJCQkJfQore29jdGZhaWx9CQl7CisJCQkJCXl5ZXJyb3Io ImludmFsaWQgb2N0YWwgaW50ZWdlciIpOworCQkJCX0KK3tiaW5mYWlsfQkJeworCQkJCQl5 eWVycm9yKCJpbnZhbGlkIGJpbmFyeSBpbnRlZ2VyIik7CisJCQkJfQorCit7bnVtZXJpY30J CXsKIAkJCQkJU0VUX1lZTExPQygpOwogCQkJCQl5eWx2YWwtPnN0ciA9IHBzdHJkdXAoeXl0 ZXh0KTsKIAkJCQkJcmV0dXJuIEZDT05TVDsKIAkJCQl9Ci17ZGVjaW1hbGZhaWx9CXsKK3tu dW1lcmljZmFpbH0JewogCQkJCQkvKiB0aHJvdyBiYWNrIHRoZSAuLiwgYW5kIHRyZWF0IGFz IGludGVnZXIgKi8KIAkJCQkJeXlsZXNzKHl5bGVuZyAtIDIpOwogCQkJCQlTRVRfWVlMTE9D KCk7CkBAIC05OTYsNyArMTAyMyw3IEBAIG90aGVyCQkJLgoge3JlYWxmYWlsMX0JCXsKIAkJ CQkJLyoKIAkJCQkJICogdGhyb3cgYmFjayB0aGUgW0VlXSwgYW5kIGZpZ3VyZSBvdXQgd2hl dGhlciB3aGF0Ci0JCQkJCSAqIHJlbWFpbnMgaXMgYW4ge2ludGVnZXJ9IG9yIHtkZWNpbWFs fS4KKwkJCQkJICogcmVtYWlucyBpcyBhbiB7aW50ZWdlcn0gb3Ige251bWVyaWN9LgogCQkJ CQkgKi8KIAkJCQkJeXlsZXNzKHl5bGVuZyAtIDEpOwogCQkJCQlTRVRfWVlMTE9DKCk7CkBA IC0xMjk2LDcgKzEzMjMsNyBAQCBsaXRidWZkdXAoY29yZV95eXNjYW5fdCB5eXNjYW5uZXIp CiB9CiAKIC8qCi0gKiBQcm9jZXNzIHtpbnRlZ2VyfS4gIE5vdGUgdGhpcyB3aWxsIGFsc28g ZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGgge2RlY2ltYWx9LAorICogUHJvY2VzcyB7aW50ZWdl cn0uICBOb3RlIHRoaXMgd2lsbCBhbHNvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHtudW1l cmljfSwKICAqIGllIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LgogICovCiBzdGF0aWMg aW50CkBAIC0xMzA2LDcgKzEzMzMsMTQgQEAgcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoY29u c3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwpCiAJY2hhcgkgICAqZW5kcHRyOwogCiAJ ZXJybm8gPSAwOwotCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5kcHRyLCAxMCk7CisJaWYg KHRva2VuWzBdID09ICcwJyAmJiAodG9rZW5bMV0gPT0gJ1gnIHx8IHRva2VuWzFdID09ICd4 JykpCisJCXZhbCA9IHN0cnRvaW50KHRva2VuICsgMiwgJmVuZHB0ciwgMTYpOworCWVsc2Ug aWYgKHRva2VuWzBdID09ICcwJyAmJiAodG9rZW5bMV0gPT0gJ08nIHx8IHRva2VuWzFdID09 ICdvJykpCisJCXZhbCA9IHN0cnRvaW50KHRva2VuICsgMiwgJmVuZHB0ciwgOCk7CisJZWxz ZSBpZiAodG9rZW5bMF0gPT0gJzAnICYmICh0b2tlblsxXSA9PSAnQicgfHwgdG9rZW5bMV0g PT0gJ2InKSkKKwkJdmFsID0gc3RydG9pbnQodG9rZW4gKyAyLCAmZW5kcHRyLCAyKTsKKwll bHNlCisJCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5kcHRyLCAxMCk7CiAJaWYgKCplbmRw dHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0UpCiAJewogCQkvKiBpbnRlZ2VyIHRvbyBs YXJnZSAob3IgY29udGFpbnMgZGVjaW1hbCBwdCksIHRyZWF0IGl0IGFzIGEgZmxvYXQgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvaW50OC5jCmluZGV4IDIxNjgwODBkY2MuLmMzZWQ5NDRhNmMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2ludDguYwpAQCAtNDUsNiArNDUsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QKICAq IEZvcm1hdHRpbmcgYW5kIGNvbnZlcnNpb24gcm91dGluZXMuCiAgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRp YyBjb25zdCBpbnQ4IGhleGxvb2t1cFsxMjhdID0geworCS0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLAorCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIDEwLCAxMSwg MTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJ LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsCit9OworCiAvKgogICogc2NhbmludDggLS0tIHRyeSB0byBwYXJzZSBhIHN0 cmluZyBpbnRvIGFuIGludDguCiAgKgpAQCAtODQsNiArOTUsNDggQEAgc2NhbmludDgoY29u c3QgY2hhciAqc3RyLCBib29sIGVycm9yT0ssIGludDY0ICpyZXN1bHQpCiAJCWdvdG8gaW52 YWxpZF9zeW50YXg7CiAKIAkvKiBwcm9jZXNzIGRpZ2l0cyAqLworCWlmIChwdHJbMF0gPT0g JzAnICYmIChwdHJbMV0gPT0gJ3gnIHx8IHB0clsxXSA9PSAnWCcpKQorCXsKKwkJcHRyICs9 IDI7CisJCXdoaWxlICgqcHRyICYmIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkK KwkJeworCQkJaW50OAkJZGlnaXQgPSBoZXhsb29rdXBbKHVuc2lnbmVkIGNoYXIpICpwdHJd OworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3M2NF9vdmVyZmxvdyh0bXAsIDE2LCAmdG1w KSkgfHwKKwkJCQl1bmxpa2VseShwZ19zdWJfczY0X292ZXJmbG93KHRtcCwgZGlnaXQsICZ0 bXApKSkKKwkJCQlnb3RvIG91dF9vZl9yYW5nZTsKKworCQkJcHRyKys7CisJCX0KKwl9CisJ ZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICdvJyB8fCBwdHJbMV0gPT0g J08nKSkKKwl7CisJCXB0ciArPSAyOworCisJCXdoaWxlICgqcHRyICYmICgqcHRyID49ICcw JyAmJiAqcHRyIDw9ICc3JykpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcw Jyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxfczY0X292ZXJmbG93KHRtcCwgOCwgJnRt cCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3M2NF9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAm dG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0KKwl9CisJZWxzZSBpZiAocHRy WzBdID09ICcwJyAmJiAocHRyWzFdID09ICdiJyB8fCBwdHJbMV0gPT0gJ0InKSkKKwl7CisJ CXB0ciArPSAyOworCisJCXdoaWxlICgqcHRyICYmICgqcHRyID49ICcwJyAmJiAqcHRyIDw9 ICcxJykpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJCWlm ICh1bmxpa2VseShwZ19tdWxfczY0X292ZXJmbG93KHRtcCwgMiwgJnRtcCkpIHx8CisJCQkJ dW5saWtlbHkocGdfc3ViX3M2NF9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJ Z290byBvdXRfb2ZfcmFuZ2U7CisJCX0KKwl9CisJZWxzZQorCXsKIAl3aGlsZSAoKnB0ciAm JiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKIAl7CiAJCWludDgJCWRpZ2l0ID0g KCpwdHIrKyAtICcwJyk7CkBAIC05Miw2ICsxNDUsNyBAQCBzY2FuaW50OChjb25zdCBjaGFy ICpzdHIsIGJvb2wgZXJyb3JPSywgaW50NjQgKnJlc3VsdCkKIAkJCXVubGlrZWx5KHBnX3N1 Yl9zNjRfb3ZlcmZsb3codG1wLCBkaWdpdCwgJnRtcCkpKQogCQkJZ290byBvdXRfb2ZfcmFu Z2U7CiAJfQorCX0KIAogCS8qIGFsbG93IHRyYWlsaW5nIHdoaXRlc3BhY2UsIGJ1dCBub3Qg b3RoZXIgdHJhaWxpbmcgY2hhcnMgKi8KIAl3aGlsZSAoKnB0ciAhPSAnXDAnICYmIGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L251bXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYwpp bmRleCBiOTMwOTZmMjg4Li43YzY1MjAzNDZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvbnVtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRp bHMuYwpAQCAtMTczLDYgKzE3MywxNyBAQCBwZ19hdG9pKGNvbnN0IGNoYXIgKnMsIGludCBz aXplLCBpbnQgYykKIAlyZXR1cm4gKGludDMyKSBsOwogfQogCitzdGF0aWMgY29uc3QgaW50 OCBoZXhsb29rdXBbMTI4XSA9IHsKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAorCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQs IDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAor fTsKKwogLyoKICAqIENvbnZlcnQgaW5wdXQgc3RyaW5nIHRvIGEgc2lnbmVkIDE2IGJpdCBp bnRlZ2VyLgogICoKQEAgLTIwOCw2ICsyMTksNDggQEAgcGdfc3RydG9pbnQxNihjb25zdCBj aGFyICpzKQogCQlnb3RvIGludmFsaWRfc3ludGF4OwogCiAJLyogcHJvY2VzcyBkaWdpdHMg Ki8KKwlpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICd4JyB8fCBwdHJbMV0gPT0g J1gnKSkKKwl7CisJCXB0ciArPSAyOworCQl3aGlsZSAoKnB0ciAmJiBpc3hkaWdpdCgodW5z aWduZWQgY2hhcikgKnB0cikpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gaGV4bG9va3VwWyh1 bnNpZ25lZCBjaGFyKSAqcHRyXTsKKworCQkJaWYgKHVubGlrZWx5KHBnX211bF9zMTZfb3Zl cmZsb3codG1wLCAxNiwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3MxNl9vdmVy Zmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisKKwkJ CXB0cisrOworCQl9CisJfQorCWVsc2UgaWYgKHB0clswXSA9PSAnMCcgJiYgKHB0clsxXSA9 PSAnbycgfHwgcHRyWzFdID09ICdPJykpCisJeworCQlwdHIgKz0gMjsKKworCQl3aGlsZSAo KnB0ciAmJiAoKnB0ciA+PSAnMCcgJiYgKnB0ciA8PSAnNycpKQorCQl7CisJCQlpbnQ4CQlk aWdpdCA9ICgqcHRyKysgLSAnMCcpOworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MxNl9v dmVyZmxvdyh0bXAsIDgsICZ0bXApKSB8fAorCQkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3Zl cmZsb3codG1wLCBkaWdpdCwgJnRtcCkpKQorCQkJCWdvdG8gb3V0X29mX3JhbmdlOworCQl9 CisJfQorCWVsc2UgaWYgKHB0clswXSA9PSAnMCcgJiYgKHB0clsxXSA9PSAnYicgfHwgcHRy WzFdID09ICdCJykpCisJeworCQlwdHIgKz0gMjsKKworCQl3aGlsZSAoKnB0ciAmJiAoKnB0 ciA+PSAnMCcgJiYgKnB0ciA8PSAnMScpKQorCQl7CisJCQlpbnQ4CQlkaWdpdCA9ICgqcHRy KysgLSAnMCcpOworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MxNl9vdmVyZmxvdyh0bXAs IDIsICZ0bXApKSB8fAorCQkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3codG1wLCBk aWdpdCwgJnRtcCkpKQorCQkJCWdvdG8gb3V0X29mX3JhbmdlOworCQl9CisJfQorCWVsc2UK Kwl7CiAJd2hpbGUgKCpwdHIgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnB0cikpCiAJ ewogCQlpbnQ4CQlkaWdpdCA9ICgqcHRyKysgLSAnMCcpOwpAQCAtMjE2LDYgKzI2OSw3IEBA IHBnX3N0cnRvaW50MTYoY29uc3QgY2hhciAqcykKIAkJCXVubGlrZWx5KHBnX3N1Yl9zMTZf b3ZlcmZsb3codG1wLCBkaWdpdCwgJnRtcCkpKQogCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAJ fQorCX0KIAogCS8qIGFsbG93IHRyYWlsaW5nIHdoaXRlc3BhY2UsIGJ1dCBub3Qgb3RoZXIg dHJhaWxpbmcgY2hhcnMgKi8KIAl3aGlsZSAoKnB0ciAhPSAnXDAnICYmIGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpICpwdHIpKQpAQCAtMjg0LDYgKzMzOCw0OCBAQCBwZ19zdHJ0b2ludDMy KGNvbnN0IGNoYXIgKnMpCiAJCWdvdG8gaW52YWxpZF9zeW50YXg7CiAKIAkvKiBwcm9jZXNz IGRpZ2l0cyAqLworCWlmIChwdHJbMF0gPT0gJzAnICYmIChwdHJbMV0gPT0gJ3gnIHx8IHB0 clsxXSA9PSAnWCcpKQorCXsKKwkJcHRyICs9IDI7CisJCXdoaWxlICgqcHRyICYmIGlzeGRp Z2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKKwkJeworCQkJaW50OAkJZGlnaXQgPSBoZXhs b29rdXBbKHVuc2lnbmVkIGNoYXIpICpwdHJdOworCisJCQlpZiAodW5saWtlbHkocGdfbXVs X3MzMl9vdmVyZmxvdyh0bXAsIDE2LCAmdG1wKSkgfHwKKwkJCQl1bmxpa2VseShwZ19zdWJf czMyX292ZXJmbG93KHRtcCwgZGlnaXQsICZ0bXApKSkKKwkJCQlnb3RvIG91dF9vZl9yYW5n ZTsKKworCQkJcHRyKys7CisJCX0KKwl9CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAo cHRyWzFdID09ICdvJyB8fCBwdHJbMV0gPT0gJ08nKSkKKwl7CisJCXB0ciArPSAyOworCisJ CXdoaWxlICgqcHRyICYmICgqcHRyID49ICcwJyAmJiAqcHRyIDw9ICc3JykpCisJCXsKKwkJ CWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19t dWxfczMyX292ZXJmbG93KHRtcCwgOCwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3Vi X3MzMl9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFu Z2U7CisJCX0KKwl9CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICdi JyB8fCBwdHJbMV0gPT0gJ0InKSkKKwl7CisJCXB0ciArPSAyOworCisJCXdoaWxlICgqcHRy ICYmICgqcHRyID49ICcwJyAmJiAqcHRyIDw9ICcxJykpCisJCXsKKwkJCWludDgJCWRpZ2l0 ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxfczMyX292ZXJm bG93KHRtcCwgMiwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3MzMl9vdmVyZmxv dyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0KKwl9 CisJZWxzZQorCXsKIAl3aGlsZSAoKnB0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAq cHRyKSkKIAl7CiAJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CkBAIC0yOTIsNiAr Mzg4LDcgQEAgcGdfc3RydG9pbnQzMihjb25zdCBjaGFyICpzKQogCQkJdW5saWtlbHkocGdf c3ViX3MzMl9vdmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCiAJCQlnb3RvIG91dF9vZl9y YW5nZTsKIAl9CisJfQogCiAJLyogYWxsb3cgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYnV0IG5v dCBvdGhlciB0cmFpbGluZyBjaGFycyAqLwogCXdoaWxlICgqcHRyICE9ICdcMCcgJiYgaXNz cGFjZSgodW5zaWduZWQgY2hhcikgKnB0cikpCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMv cHNxbHNjYW4ubCBiL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCmluZGV4IDBmYWI0OGEzODIu LjcyOWFlYzU2MmIgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCisrKyBi L3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCkBAIC0yMDAsNyArMjAwLDcgQEAgcXVvdGVjb250 aW51ZWZhaWwJe3doaXRlc3BhY2V9KiItIj8KIHhic3RhcnQJCQlbYkJde3F1b3RlfQogeGJp bnNpZGUJCVteJ10qCiAKLS8qIEhleGFkZWNpbWFsIG51bWJlciAqLworLyogSGV4YWRlY2lt YWwgYnl0ZSBzdHJpbmcgKi8KIHhoc3RhcnQJCQlbeFhde3F1b3RlfQogeGhpbnNpZGUJCVte J10qCiAKQEAgLTI3OSw3ICsyNzksNiBAQCB4Y3N0YXJ0CQkJXC9cKntvcF9jaGFyc30qCiB4 Y3N0b3AJCQlcKitcLwogeGNpbnNpZGUJCVteKi9dKwogCi1kaWdpdAkJCVswLTldCiBpZGVu dF9zdGFydAkJW0EtWmEtelwyMDAtXDM3N19dCiBpZGVudF9jb250CQlbQS1aYS16XDIwMC1c Mzc3XzAtOVwkXQogCkBAIC0zMTgsMjQgKzMxNyw0MSBAQCBzZWxmCQkJWywoKVxbXF0uO1w6 XCtcLVwqXC9cJVxeXDxcPlw9XQogb3BfY2hhcnMJCVtcflwhXEBcI1xeXCZcfFxgXD9cK1wt XCpcL1wlXDxcPlw9XQogb3BlcmF0b3IJCXtvcF9jaGFyc30rCiAKLS8qIHdlIG5vIGxvbmdl ciBhbGxvdyB1bmFyeSBtaW51cyBpbiBudW1iZXJzLgotICogaW5zdGVhZCB3ZSBwYXNzIGl0 IHNlcGFyYXRlbHkgdG8gcGFyc2VyLiB0aGVyZSBpdCBnZXRzCi0gKiBjb2VyY2VkIHZpYSBk b05lZ2F0ZSgpIC0tIExlb24gYXVnIDIwIDE5OTkKKy8qCisgKiBOdW1iZXJzCisgKgorICog VW5hcnkgbWludXMgaXMgbm90IHBhcnQgb2YgYSBudW1iZXIgaGVyZS4gIEluc3RlYWQgd2Ug cGFzcyBpdCBzZXBhcmF0ZWx5IHRvCisgKiBwYXJzZXIsIGFuZCB0aGVyZSBpdCBnZXRzIGNv ZXJjZWQgdmlhIGRvTmVnYXRlKCkuCiAgKgotICoge2RlY2ltYWxmYWlsfSBpcyB1c2VkIGJl Y2F1c2Ugd2Ugd291bGQgbGlrZSAiMS4uMTAiIHRvIGxleCBhcyAxLCBkb3RfZG90LCAxMC4K KyAqIHtudW1lcmljZmFpbH0gaXMgdXNlZCBiZWNhdXNlIHdlIHdvdWxkIGxpa2UgIjEuLjEw IiB0byBsZXggYXMgMSwgZG90X2RvdCwgMTAuCiAgKgogICoge3JlYWxmYWlsMX0gYW5kIHty ZWFsZmFpbDJ9IGFyZSBhZGRlZCB0byBwcmV2ZW50IHRoZSBuZWVkIGZvciBzY2FubmVyCiAg KiBiYWNrdXAgd2hlbiB0aGUge3JlYWx9IHJ1bGUgZmFpbHMgdG8gbWF0Y2ggY29tcGxldGVs eS4KICAqLworZGVjZGlnaXQJCVswLTldCitoZXhkaWdpdAkJWzAtOUEtRmEtZl0KK29jdGRp Z2l0CQlbMC03XQorYmluZGlnaXQJCVswLTFdCisKK2RlY2ludGVnZXIJCXtkZWNkaWdpdH0r CitoZXhpbnRlZ2VyCQkwW3hYXXtoZXhkaWdpdH0rCitvY3RpbnRlZ2VyCQkwW29PXXtvY3Rk aWdpdH0rCitiaW5pbnRlZ2VyCQkwW2JCXXtiaW5kaWdpdH0rCisKK2hleGZhaWwJCQkwW3hY XQorb2N0ZmFpbAkJCTBbb09dCitiaW5mYWlsCQkJMFtiQl0KKworaW50ZWdlcgkJCSh7ZGVj aW50ZWdlcn18e2hleGludGVnZXJ9fHtvY3RpbnRlZ2VyfXx7YmluaW50ZWdlcn0pCisKK251 bWVyaWMJCQkoKHtkZWNpbnRlZ2VyfVwue2RlY2ludGVnZXJ9Pyl8KFwue2RlY2ludGVnZXJ9 KSkKK251bWVyaWNmYWlsCQl7ZGVjZGlnaXR9K1wuXC4KIAotaW50ZWdlcgkJCXtkaWdpdH0r Ci1kZWNpbWFsCQkJKCh7ZGlnaXR9Klwue2RpZ2l0fSspfCh7ZGlnaXR9K1wue2RpZ2l0fSop KQotZGVjaW1hbGZhaWwJCXtkaWdpdH0rXC5cLgotcmVhbAkJCSh7aW50ZWdlcn18e2RlY2lt YWx9KVtFZV1bLStdP3tkaWdpdH0rCi1yZWFsZmFpbDEJCSh7aW50ZWdlcn18e2RlY2ltYWx9 KVtFZV0KLXJlYWxmYWlsMgkJKHtpbnRlZ2VyfXx7ZGVjaW1hbH0pW0VlXVstK10KK3JlYWwJ CQkoe2RlY2ludGVnZXJ9fHtudW1lcmljfSlbRWVdWy0rXT97ZGVjZGlnaXR9KworcmVhbGZh aWwxCQkoe2RlY2ludGVnZXJ9fHtudW1lcmljfSlbRWVdCityZWFsZmFpbDIJCSh7ZGVjaW50 ZWdlcn18e251bWVyaWN9KVtFZV1bLStdCiAKLXBhcmFtCQkJXCR7aW50ZWdlcn0KK3BhcmFt CQkJXCR7ZGVjaW50ZWdlcn0KIAogLyogcHNxbC1zcGVjaWZpYzogY2hhcmFjdGVycyBhbGxv d2VkIGluIHZhcmlhYmxlIG5hbWVzICovCiB2YXJpYWJsZV9jaGFyCVtBLVphLXpcMjAwLVwz NzdfMC05XQpAQCAtODQyLDEwICs4NTgsMTkgQEAgb3RoZXIJCQkuCiB7aW50ZWdlcn0JCXsK IAkJCQkJRUNITzsKIAkJCQl9Ci17ZGVjaW1hbH0JCXsKK3toZXhmYWlsfQkJeworCQkJCQlF Q0hPOworCQkJCX0KK3tvY3RmYWlsfQkJeworCQkJCQlFQ0hPOworCQkJCX0KK3tiaW5mYWls fQkJeworCQkJCQlFQ0hPOworCQkJCX0KK3tudW1lcmljfQkJewogCQkJCQlFQ0hPOwogCQkJ CX0KLXtkZWNpbWFsZmFpbH0Jewore251bWVyaWNmYWlsfQl7CiAJCQkJCS8qIHRocm93IGJh Y2sgdGhlIC4uLCBhbmQgdHJlYXQgYXMgaW50ZWdlciAqLwogCQkJCQl5eWxlc3MoeXlsZW5n IC0gMik7CiAJCQkJCUVDSE87CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3By ZXByb2MvcGdjLmwgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvcGdjLmwKaW5kZXgg N2EwMzU2NjM4ZC4uZWJkMWYzZDdmNCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNw Zy9wcmVwcm9jL3BnYy5sCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9wZ2Mu bApAQCAtMzA1LDcgKzMwNSw2IEBAIHhjc3RhcnQJCQlcL1wqe29wX2NoYXJzfSoKIHhjc3Rv cAkJCVwqK1wvCiB4Y2luc2lkZQkJW14qL10rCiAKLWRpZ2l0CQkJWzAtOV0KIGlkZW50X3N0 YXJ0CQlbQS1aYS16XDIwMC1cMzc3X10KIGlkZW50X2NvbnQJCVtBLVphLXpcMjAwLVwzNzdf MC05XCRdCiAKQEAgLTM0NiwyNCArMzQ1LDQxIEBAIHNlbGYJCQlbLCgpXFtcXS47XDpcK1wt XCpcL1wlXF5cPFw+XD1dCiBvcF9jaGFycwkJW1x+XCFcQFwjXF5cJlx8XGBcP1wrXC1cKlwv XCVcPFw+XD1dCiBvcGVyYXRvcgkJe29wX2NoYXJzfSsKIAotLyogd2Ugbm8gbG9uZ2VyIGFs bG93IHVuYXJ5IG1pbnVzIGluIG51bWJlcnMuCi0gKiBpbnN0ZWFkIHdlIHBhc3MgaXQgc2Vw YXJhdGVseSB0byBwYXJzZXIuIHRoZXJlIGl0IGdldHMKLSAqIGNvZXJjZWQgdmlhIGRvTmVn YXRlKCkgLS0gTGVvbiBhdWcgMjAgMTk5OQorLyoKKyAqIE51bWJlcnMKKyAqCisgKiBVbmFy eSBtaW51cyBpcyBub3QgcGFydCBvZiBhIG51bWJlciBoZXJlLiAgSW5zdGVhZCB3ZSBwYXNz IGl0IHNlcGFyYXRlbHkgdG8KKyAqIHBhcnNlciwgYW5kIHRoZXJlIGl0IGdldHMgY29lcmNl ZCB2aWEgZG9OZWdhdGUoKS4KICAqCi0gKiB7ZGVjaW1hbGZhaWx9IGlzIHVzZWQgYmVjYXVz ZSB3ZSB3b3VsZCBsaWtlICIxLi4xMCIgdG8gbGV4IGFzIDEsIGRvdF9kb3QsIDEwLgorICog e251bWVyaWNmYWlsfSBpcyB1c2VkIGJlY2F1c2Ugd2Ugd291bGQgbGlrZSAiMS4uMTAiIHRv IGxleCBhcyAxLCBkb3RfZG90LCAxMC4KICAqCiAgKiB7cmVhbGZhaWwxfSBhbmQge3JlYWxm YWlsMn0gYXJlIGFkZGVkIHRvIHByZXZlbnQgdGhlIG5lZWQgZm9yIHNjYW5uZXIKICAqIGJh Y2t1cCB3aGVuIHRoZSB7cmVhbH0gcnVsZSBmYWlscyB0byBtYXRjaCBjb21wbGV0ZWx5Lgog ICovCitkZWNkaWdpdAkJWzAtOV0KK2hleGRpZ2l0CQlbMC05QS1GYS1mXQorb2N0ZGlnaXQJ CVswLTddCitiaW5kaWdpdAkJWzAtMV0KKworZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fSsKK2hl eGludGVnZXIJCTBbeFhde2hleGRpZ2l0fSsKK29jdGludGVnZXIJCTBbb09de29jdGRpZ2l0 fSsKK2JpbmludGVnZXIJCTBbYkJde2JpbmRpZ2l0fSsKKworaGV4ZmFpbAkJCTBbeFhdCitv Y3RmYWlsCQkJMFtvT10KK2JpbmZhaWwJCQkwW2JCXQogCi1pbnRlZ2VyCQkJe2RpZ2l0fSsK LWRlY2ltYWwJCQkoKHtkaWdpdH0qXC57ZGlnaXR9Kyl8KHtkaWdpdH0rXC57ZGlnaXR9Kikp Ci1kZWNpbWFsZmFpbAkJe2RpZ2l0fStcLlwuCi1yZWFsCQkJKHtpbnRlZ2VyfXx7ZGVjaW1h bH0pW0VlXVstK10/e2RpZ2l0fSsKLXJlYWxmYWlsMQkJKHtpbnRlZ2VyfXx7ZGVjaW1hbH0p W0VlXQotcmVhbGZhaWwyCQkoe2ludGVnZXJ9fHtkZWNpbWFsfSlbRWVdWy0rXQoraW50ZWdl cgkJCSh7ZGVjaW50ZWdlcn18e2hleGludGVnZXJ9fHtvY3RpbnRlZ2VyfXx7YmluaW50ZWdl cn0pCiAKLXBhcmFtCQkJXCR7aW50ZWdlcn0KK251bWVyaWMJCQkoKHtkZWNpbnRlZ2VyfVwu e2RlY2ludGVnZXJ9Pyl8KFwue2RlY2ludGVnZXJ9KSkKK251bWVyaWNmYWlsCQl7ZGVjZGln aXR9K1wuXC4KKworcmVhbAkJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9KVtFZV1bLStdP3tk ZWNkaWdpdH0rCityZWFsZmFpbDEJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9KVtFZV0KK3Jl YWxmYWlsMgkJKHtkZWNpbnRlZ2VyfXx7bnVtZXJpY30pW0VlXVstK10KKworcGFyYW0JCQlc JHtkZWNpbnRlZ2VyfQogCiAvKiBzcGVjaWFsIGNoYXJhY3RlcnMgZm9yIG90aGVyIGRibXMg Ki8KIC8qIHdlIGhhdmUgdG8gcmVhY3QgZGlmZmVyZW50bHkgaW4gY29tcGF0IG1vZGUgKi8K QEAgLTM5Myw5ICs0MDksNiBAQCBpbmNsdWRlX25leHQJW2lJXVtuTl1bY0NdW2xMXVt1VV1b ZERdW2VFXV9bbk5dW2VFXVt4WF1bdFRdCiBpbXBvcnQJCQlbaUldW21NXVtwUF1bb09dW3JS XVt0VF0KIHVuZGVmCQkJW3VVXVtuTl1bZERdW2VFXVtmRl0KIAotLyogQyB2ZXJzaW9uIG9m IGhleCBudW1iZXIgKi8KLXhjaAkJCQkwW3hYXVswLTlBLUZhLWZdKgotCiBjY29tbWVudAkJ Ii8vIi4qXG4KIAogaWYJCQkJW2lJXVtmRl0KQEAgLTQwOCw3ICs0MjEsNyBAQCBlbmRpZgkJ CVtlRV1bbk5dW2REXVtpSV1bZkZdCiBzdHJ1Y3QJCQlbc1NdW3RUXVtyUl1bdVVdW2NDXVt0 VF0KIAogZXhlY19zcWwJCXtleGVjfXtzcGFjZX0qe3NxbH17c3BhY2V9KgotaXBkaWdpdAkJ CSh7ZGlnaXR9fHtkaWdpdH17ZGlnaXR9fHtkaWdpdH17ZGlnaXR9e2RpZ2l0fSkKK2lwZGln aXQJCQkoe2RlY2RpZ2l0fXx7ZGVjZGlnaXR9e2RlY2RpZ2l0fXx7ZGVjZGlnaXR9e2RlY2Rp Z2l0fXtkZWNkaWdpdH0pCiBpcAkJCQl7aXBkaWdpdH1cLntpcGRpZ2l0fVwue2lwZGlnaXR9 XC57aXBkaWdpdH0KIAogLyogd2UgbWlnaHQgd2FudCB0byBwYXJzZSBhbGwgY3BwIGluY2x1 ZGUgZmlsZXMgKi8KQEAgLTkyNiwxMSArOTM5LDExIEBAIGNwcGxpbmUJCQl7c3BhY2V9KiMo W15pXVtBLVphLXpdKnx7aWZ9fHtpZmRlZn18e2lmbmRlZn18e2ltcG9ydH0pKChcL1wqW14q L10qXCorCiB7aW50ZWdlcn0JCXsKIAkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRl cmFsKHl5dGV4dCwgJmJhc2VfeXlsdmFsKTsKIAkJCQl9Ci17ZGVjaW1hbH0JCXsKK3tudW1l cmljfQkJewogCQkJCQliYXNlX3l5bHZhbC5zdHIgPSBtbV9zdHJkdXAoeXl0ZXh0KTsKIAkJ CQkJcmV0dXJuIEZDT05TVDsKIAkJCQl9Ci17ZGVjaW1hbGZhaWx9CXsKK3tudW1lcmljZmFp bH0JewogCQkJCQkvKiB0aHJvdyBiYWNrIHRoZSAuLiwgYW5kIHRyZWF0IGFzIGludGVnZXIg Ki8KIAkJCQkJeXlsZXNzKHl5bGVuZyAtIDIpOwogCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRl Z2VyX2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwpOwpAQCAtOTQyLDcgKzk1NSw3IEBA IGNwcGxpbmUJCQl7c3BhY2V9KiMoW15pXVtBLVphLXpdKnx7aWZ9fHtpZmRlZn18e2lmbmRl Zn18e2ltcG9ydH0pKChcL1wqW14qL10qXCorCiB7cmVhbGZhaWwxfQkJewogCQkJCQkvKgog CQkJCQkgKiB0aHJvdyBiYWNrIHRoZSBbRWVdLCBhbmQgZmlndXJlIG91dCB3aGV0aGVyIHdo YXQKLQkJCQkJICogcmVtYWlucyBpcyBhbiB7aW50ZWdlcn0gb3Ige2RlY2ltYWx9LgorCQkJ CQkgKiByZW1haW5zIGlzIGFuIHtpbnRlZ2VyfSBvciB7bnVtZXJpY30uCiAJCQkJCSAqLwog CQkJCQl5eWxlc3MoeXlsZW5nIC0gMSk7CiAJCQkJCXJldHVybiBwcm9jZXNzX2ludGVnZXJf bGl0ZXJhbCh5eXRleHQsICZiYXNlX3l5bHZhbCk7CkBAIC0xMDA5LDcgKzEwMjIsNyBAQCBj cHBsaW5lCQkJe3NwYWNlfSojKFteaV1bQS1aYS16XSp8e2lmfXx7aWZkZWZ9fHtpZm5kZWZ9 fHtpbXBvcnR9KSgoXC9cKlteKi9dKlwqKwogCQkJCQkJCXJldHVybiBTX0FOWVRISU5HOwog CQkJCQkgfQogPEM+e2Njb21tZW50fQkJeyBFQ0hPOyB9Ci08Qz57eGNofQkJCXsKKzxDPnto ZXhpbnRlZ2VyfQkJewogCQkJCQkJY2hhciogZW5kcHRyOwogCiAJCQkJCQllcnJubyA9IDA7 CkBAIC0xNTQ2LDcgKzE1NTksNyBAQCBhZGRsaXRjaGFyKHVuc2lnbmVkIGNoYXIgeWNoYXIp CiB9CiAKIC8qCi0gKiBQcm9jZXNzIHtpbnRlZ2VyfS4gIE5vdGUgdGhpcyB3aWxsIGFsc28g ZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGgge2RlY2ltYWx9LAorICogUHJvY2VzcyB7aW50ZWdl cn0uICBOb3RlIHRoaXMgd2lsbCBhbHNvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHtudW1l cmljfSwKICAqIGllIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LgogICovCiBzdGF0aWMg aW50CkBAIC0xNTU2LDcgKzE1NjksMTQgQEAgcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoY29u c3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwpCiAJY2hhcgkgICAqZW5kcHRyOwogCiAJ ZXJybm8gPSAwOwotCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5kcHRyLCAxMCk7CisJaWYg KHRva2VuWzBdID09ICcwJyAmJiAodG9rZW5bMV0gPT0gJ1gnIHx8IHRva2VuWzFdID09ICd4 JykpCisJCXZhbCA9IHN0cnRvaW50KHRva2VuICsgMiwgJmVuZHB0ciwgMTYpOworCWVsc2Ug aWYgKHRva2VuWzBdID09ICcwJyAmJiAodG9rZW5bMV0gPT0gJ08nIHx8IHRva2VuWzFdID09 ICdvJykpCisJCXZhbCA9IHN0cnRvaW50KHRva2VuICsgMiwgJmVuZHB0ciwgOCk7CisJZWxz ZSBpZiAodG9rZW5bMF0gPT0gJzAnICYmICh0b2tlblsxXSA9PSAnQicgfHwgdG9rZW5bMV0g PT0gJ2InKSkKKwkJdmFsID0gc3RydG9pbnQodG9rZW4gKyAyLCAmZW5kcHRyLCAyKTsKKwll bHNlCisJCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5kcHRyLCAxMCk7CiAJaWYgKCplbmRw dHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0UpCiAJewogCQkvKiBpbnRlZ2VyIHRvbyBs YXJnZSAob3IgY29udGFpbnMgZGVjaW1hbCBwdCksIHRyZWF0IGl0IGFzIGEgZmxvYXQgKi8K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50Mi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDIub3V0CmluZGV4IDU1ZWE3MjAyY2QuLjBmZmEw MGE4MzUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50Mi5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQyLm91dApAQCAtMzA2LDMgKzMw NiwyMiBAQCBGUk9NIChWQUxVRVMgKC0yLjU6Om51bWVyaWMpLAogICAyLjUgfCAgICAgICAg ICAzCiAoNyByb3dzKQogCistLSBub24tZGVjaW1hbCBsaXRlcmFscworU0VMRUNUIGludDIg JzBiMTAwMTAxJzsKKyBpbnQyIAorLS0tLS0tCisgICAzNworKDEgcm93KQorCitTRUxFQ1Qg aW50MiAnMG8xMTInOworIGludDIgCistLS0tLS0KKyAgIDc0CisoMSByb3cpCisKK1NFTEVD VCBpbnQyICcweDQyRSc7CisgaW50MiAKKy0tLS0tLQorIDEwNzAKKygxIHJvdykKKwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQ0Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50NC5vdXQKaW5kZXggOWQyMGIzMzgwZi4uOGMxZTQyMzdl OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQ0Lm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDQub3V0CkBAIC00MzcsMyArNDM3LDQw IEBAIFNFTEVDVCBsY20oKC0yMTQ3NDgzNjQ4KTo6aW50NCwgMTo6aW50NCk7IC0tIG92ZXJm bG93CiBFUlJPUjogIGludGVnZXIgb3V0IG9mIHJhbmdlCiBTRUxFQ1QgbGNtKDIxNDc0ODM2 NDc6OmludDQsIDIxNDc0ODM2NDY6OmludDQpOyAtLSBvdmVyZmxvdwogRVJST1I6ICBpbnRl Z2VyIG91dCBvZiByYW5nZQorLS0gbm9uLWRlY2ltYWwgbGl0ZXJhbHMKK1NFTEVDVCAwYjEw MDEwMTsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAzNworKDEgcm93KQorCitT RUxFQ1QgMG8xMTI7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgICAgICAgNzQKKygxIHJv dykKKworU0VMRUNUIDB4NDJFOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAxMDcw CisoMSByb3cpCisKK1NFTEVDVCBpbnQ0ICcwYjEwMDEwMSc7CisgaW50NCAKKy0tLS0tLQor ICAgMzcKKygxIHJvdykKKworU0VMRUNUIGludDQgJzBvMTEyJzsKKyBpbnQ0IAorLS0tLS0t CisgICA3NAorKDEgcm93KQorCitTRUxFQ1QgaW50NCAnMHg0MkUnOworIGludDQgCistLS0t LS0KKyAxMDcwCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvaW50OC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDgub3V0Cmlu ZGV4IDM2NTQwZWM0NTYuLjBhMWMyYWUyMTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvaW50OC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9p bnQ4Lm91dApAQCAtOTMyLDMgKzkzMiwyMiBAQCBTRUxFQ1QgbGNtKCgtOTIyMzM3MjAzNjg1 NDc3NTgwOCk6OmludDgsIDE6OmludDgpOyAtLSBvdmVyZmxvdwogRVJST1I6ICBiaWdpbnQg b3V0IG9mIHJhbmdlCiBTRUxFQ1QgbGNtKDkyMjMzNzIwMzY4NTQ3NzU4MDc6OmludDgsIDky MjMzNzIwMzY4NTQ3NzU4MDY6OmludDgpOyAtLSBvdmVyZmxvdwogRVJST1I6ICBiaWdpbnQg b3V0IG9mIHJhbmdlCistLSBub24tZGVjaW1hbCBsaXRlcmFscworU0VMRUNUIGludDggJzBi MTAwMTAxJzsKKyBpbnQ4IAorLS0tLS0tCisgICAzNworKDEgcm93KQorCitTRUxFQ1QgaW50 OCAnMG8xMTInOworIGludDggCistLS0tLS0KKyAgIDc0CisoMSByb3cpCisKK1NFTEVDVCBp bnQ4ICcweDQyRSc7CisgaW50OCAKKy0tLS0tLQorIDEwNzAKKygxIHJvdykKKwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50Mi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9pbnQyLnNxbAppbmRleCA2MTNiMzQ0NzA0Li5jNDQxMGZhNjJkIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQyLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9pbnQyLnNxbApAQCAtMTEyLDMgKzExMiwxMCBAQCBDUkVBVEUgVEFCTEUgSU5UMl9U QkwoZjEgaW50Mik7CiAgICAgICAgICAgICAgKDAuNTo6bnVtZXJpYyksCiAgICAgICAgICAg ICAgKDEuNTo6bnVtZXJpYyksCiAgICAgICAgICAgICAgKDIuNTo6bnVtZXJpYykpIHQoeCk7 CisKKworLS0gbm9uLWRlY2ltYWwgbGl0ZXJhbHMKKworU0VMRUNUIGludDIgJzBiMTAwMTAx JzsKK1NFTEVDVCBpbnQyICcwbzExMic7CitTRUxFQ1QgaW50MiAnMHg0MkUnOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50NC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9pbnQ0LnNxbAppbmRleCA1NWVjMDdhMTQ3Li5jNGRhODZiYTMzIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9pbnQ0LnNxbApAQCAtMTc2LDMgKzE3NiwxNCBAQCBDUkVBVEUgVEFCTEUgSU5UNF9U QkwoZjEgaW50NCk7CiAKIFNFTEVDVCBsY20oKC0yMTQ3NDgzNjQ4KTo6aW50NCwgMTo6aW50 NCk7IC0tIG92ZXJmbG93CiBTRUxFQ1QgbGNtKDIxNDc0ODM2NDc6OmludDQsIDIxNDc0ODM2 NDY6OmludDQpOyAtLSBvdmVyZmxvdworCisKKy0tIG5vbi1kZWNpbWFsIGxpdGVyYWxzCisK K1NFTEVDVCAwYjEwMDEwMTsKK1NFTEVDVCAwbzExMjsKK1NFTEVDVCAweDQyRTsKKworU0VM RUNUIGludDQgJzBiMTAwMTAxJzsKK1NFTEVDVCBpbnQ0ICcwbzExMic7CitTRUxFQ1QgaW50 NCAnMHg0MkUnOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50OC5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ4LnNxbAppbmRleCAzMjk0MGI0ZGFhLi40Y2M0 ODMwYmRjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ4LnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ4LnNxbApAQCAtMjUwLDMgKzI1MCwxMCBAQCBD UkVBVEUgVEFCTEUgSU5UOF9UQkwocTEgaW50OCwgcTIgaW50OCk7CiAKIFNFTEVDVCBsY20o KC05MjIzMzcyMDM2ODU0Nzc1ODA4KTo6aW50OCwgMTo6aW50OCk7IC0tIG92ZXJmbG93CiBT RUxFQ1QgbGNtKDkyMjMzNzIwMzY4NTQ3NzU4MDc6OmludDgsIDkyMjMzNzIwMzY4NTQ3NzU4 MDY6OmludDgpOyAtLSBvdmVyZmxvdworCisKKy0tIG5vbi1kZWNpbWFsIGxpdGVyYWxzCisK K1NFTEVDVCBpbnQ4ICcwYjEwMDEwMSc7CitTRUxFQ1QgaW50OCAnMG8xMTInOworU0VMRUNU IGludDggJzB4NDJFJzsKLS0gCjIuMzIuMAoK --------------1968E337BA2E50387E0CF394--