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 1sRwUU-002Iy1-CG for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jul 2024 16:17:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sRwUT-00FzcF-2m for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jul 2024 16:17:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sRwUS-00Fzc6-7C for pgsql-hackers@lists.postgresql.org; Thu, 11 Jul 2024 16:17:52 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sRwUK-001YsD-1m for pgsql-hackers@lists.postgresql.org; Thu, 11 Jul 2024 16:17:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1720714659; bh=SdoGGfW6JbR0wCfLOfBeOQoX4CEDrx038NhjB2DUn3U=; h=Message-ID:Date:User-Agent:Subject:From:To:Cc:References: In-Reply-To:From; b=UDX9dIM2xyZRDhXmKFTcQW31itHFNrLEdML3KK8bEOc7SYP+GpuefdOWvsA5hOanz e4eS4Gi/RhVUuQMDPyyB1fkF9makPfIQWL5tNNF8F4u4XmGxdDv6FJ6qUcc0OQ1FvN PpqtgnNJkVoZTYXjKhTHkvqevr5ms9FvbFSLb6+3sffnNoW+dbyq0wXgJo2i0M7pkK 9JA21SapK5QC/ZRuW4ARsAwmFNXoTgobKGhBUXNYMWY2zH5C/t5wszizZoktPAtH6X TjLIjmXCgz+h3PW6GTfIhk1gP6eqwK0fjkid7/ZOTjkf9/1APZxyqjCHvjE7rMc0d6 Kbk096AoEFKwg== Received: from [10.4.12.74] (unknown [93.174.131.141]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.rybakina@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 6F66E6029B; Thu, 11 Jul 2024 19:17:39 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------JN2IJS0Fazz1QocpFcZXNWzS" Message-ID: <3b9bb831-da52-4779-8f3e-f8b6b83ba41f@postgrespro.ru> Date: Thu, 11 Jul 2024 19:17:42 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes From: Alena Rybakina To: Nikolay Shaplov , pgsql-hackers@lists.postgresql.org Cc: Alexander Korotkov , Andrei Lepikhov , jian he , Robert Haas , pgsql-hackers@postgresql.org, Peter Geoghegan , "Finnerty, Jim" , Marcos Pegoraro , teodor@sigaev.ru, Tomas Vondra , Peter Eisentraut , Ranier Vilela References: <567ED6CA.2040504@sigaev.ru> <196b44d5-f4e5-41a0-9a8f-9fbf26a13760@postgrespro.ru> <9736220.CDJkKcVGEf@thinkpad-pgpro> <2193851.QkHrqEjB74@thinkpad-pgpro> Content-Language: en-US In-Reply-To: X-KSMG-AntiPhishing: NotDetected, bases: 2024/07/11 13:17:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/07/11 13:58:00 #25969612 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 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. --------------JN2IJS0Fazz1QocpFcZXNWzS Content-Type: multipart/alternative; boundary="------------QUUbKhzIzBJBau2JCSH3bfkf" --------------QUUbKhzIzBJBau2JCSH3bfkf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, again! I have finished patch and processed almost your suggestions (from [0], [1], [2]). It remainsonlyto addtestswherethe conversionshouldwork,butI willaddthis inthe nextversion. [0] https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-pgpro [1] https://www.postgresql.org/message-id/9736220.CDJkKcVGEf%40thinkpad-pgpro [2] https://www.postgresql.org/message-id/2193851.QkHrqEjB74%40thinkpad-pgpro On 09.07.2024 04:57, Alena Rybakina wrote: > > Hi! Thank you for your review! Sorryforthe delayin responding. > > Irewrotethe patchasyourequested,butnowI'm facedwiththe problemof > processingthe elementsof the or_entries list.For somereason, > thepointerto thelistis cleared and I couldn't find the place where it > happened.MaybeI'mmissingsomethingsimpleinviewof the heavyworkloadright > now,butmaybeyou'll seea problem?Ihave displayedpart of stackbelow. > > #5 0x00005b0f6d9f6a6a in ExceptionalCondition > (conditionName=0x5b0f6dbb74f7 "IsPointerList(list)", > fileName=0x5b0f6dbb7418 "list.c", lineNumber=341) at assert.c:66 #6 > 0x00005b0f6d5dc3ba in lappend (list=0x5b0f6eec5ca0, > datum=0x5b0f6eec0d90) at list.c:341 #7 0x00005b0f6d69230c in > transform_or_to_any (root=0x5b0f6eeb13c8, orlist=0x5b0f6eec57c0) at > initsplan.c:2818 #8 0x00005b0f6d692958 in add_base_clause_to_rel > (root=0x5b0f6eeb13c8, relid=1, restrictinfo=0x5b0f6eec5990) at > initsplan.c:2982 #9 0x00005b0f6d692e5f in > distribute_restrictinfo_to_rels (root=0x5b0f6eeb13c8, > restrictinfo=0x5b0f6eec5990) at initsplan.c:3175 #10 > 0x00005b0f6d691bf2 in distribute_qual_to_rels (root=0x5b0f6eeb13c8, > clause=0x5b0f6eec0fc0, jtitem=0x5b0f6eec4330, sjinfo=0x0, > security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, > outerjoin_nonnullable=0x0, incompatible_relids=0x0, > allow_equivalence=true, has_clone=false, is_clone=false, > postponed_oj_qual_list=0x0) at initsplan.c:2576 #11 0x00005b0f6d69146f > in distribute_quals_to_rels (root=0x5b0f6eeb13c8, > clauses=0x5b0f6eec0bb0, jtitem=0x5b0f6eec4330, sjinfo=0x0, > security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, > outerjoin_nonnullable=0x0, incompatible_relids=0x0, > allow_equivalence=true, has_clone=false, is_clone=false, > postponed_oj_qual_list=0x0) at initsplan.c:2144 > > Thisis stillthe firstiterationof the fixesyouhave proposed,soI have > attachedthe patchindiffformat.I rewroteit,asyousuggestedinthe > firstletter[0].Icreateda separatefunctionthattriesto forman > OrClauseGroup node,butifit failsinthis, it returnsfalse,otherwiseit > processesthe generatedelementaccordingtowhat it found-eitheraddsit to > thelistasnew,oraddsa constantto anexistingone. > > Ialsodividedonegenerallistof > suitableforconversionandunsuitableintotwodifferentones:appropriate_entriesandor_entries.Nowweare > onlylookinginthe listof suitableelementstoformANYexpr. > > Thishelpsusto get ridofrepetitionsinthe codeyoumentioned. > Pleasewriteifthisis notthelogicthatyouhave seenbefore. > > [0] > https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-pgpro > The errorwascausedby the specificsof storingthe "OR"clausesinthe RestrictInfostructure.Scanning the orclauses list of the RestrictInfo variable, wecouldfacenotonlytheitem with RestrictInfo type,butalsotheBoolExpr type. For example, when we have both or clauses and "AND" clauses together, like x = 1 and (y =1 or y=2 or y=3 and z = 1). The structure looks like: RestrictInfo->orclauses = [RestrictInfo [x=1], RestrictInfo->orclauses = [RestrictInfo[y=1],                     RestrictInfo [y=2],                     BoolExpr = [Restrictinfo [y=3], RestrictInfo [z=1]                    ]                                          ] It'sworkingfinenow. -- Regards, Alena Rybakina Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------QUUbKhzIzBJBau2JCSH3bfkf Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi, again!

I have finished patch and processed almost your suggestions (from [0], [1], [2]). It remains only to add tests where the conversion should work, but I will add this in the next version.

[0] https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-pgpro

[1] https://www.postgresql.org/message-id/9736220.CDJkKcVGEf%40thinkpad-pgpro

[2] https://www.postgresql.org/message-id/2193851.QkHrqEjB74%40thinkpad-pgpro

On 09.07.2024 04:57, Alena Rybakina wrote:

Hi! Thank you for your review! Sorry for the delay in responding.

I rewrote the patch as you requested, but now I'm faced with the problem of processing the elements of the or_entries list. For some reason, the pointer to the list is cleared and I couldn't find the place where it happened. Maybe I'm missing something simple in view of the heavy workload right now, but maybe you'll see a problem? I have displayed part of stack below.

#5 0x00005b0f6d9f6a6a in ExceptionalCondition (conditionName=0x5b0f6dbb74f7 "IsPointerList(list)", fileName=0x5b0f6dbb7418 "list.c", lineNumber=341) at assert.c:66 #6 0x00005b0f6d5dc3ba in lappend (list=0x5b0f6eec5ca0, datum=0x5b0f6eec0d90) at list.c:341 #7 0x00005b0f6d69230c in transform_or_to_any (root=0x5b0f6eeb13c8, orlist=0x5b0f6eec57c0) at initsplan.c:2818 #8 0x00005b0f6d692958 in add_base_clause_to_rel (root=0x5b0f6eeb13c8, relid=1, restrictinfo=0x5b0f6eec5990) at initsplan.c:2982 #9 0x00005b0f6d692e5f in distribute_restrictinfo_to_rels (root=0x5b0f6eeb13c8, restrictinfo=0x5b0f6eec5990) at initsplan.c:3175 #10 0x00005b0f6d691bf2 in distribute_qual_to_rels (root=0x5b0f6eeb13c8, clause=0x5b0f6eec0fc0, jtitem=0x5b0f6eec4330, sjinfo=0x0, security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, outerjoin_nonnullable=0x0, incompatible_relids=0x0, allow_equivalence=true, has_clone=false, is_clone=false, postponed_oj_qual_list=0x0) at initsplan.c:2576 #11 0x00005b0f6d69146f in distribute_quals_to_rels (root=0x5b0f6eeb13c8, clauses=0x5b0f6eec0bb0, jtitem=0x5b0f6eec4330, sjinfo=0x0, security_level=0, qualscope=0x5b0f6eec4730, ojscope=0x0, outerjoin_nonnullable=0x0, incompatible_relids=0x0, allow_equivalence=true, has_clone=false, is_clone=false, postponed_oj_qual_list=0x0) at initsplan.c:2144

This is still the first iteration of the fixes you have proposed, so I have attached the patch in diff format. I rewrote it, as you suggested in the first letter [0]. I created a separate function that tries to form an OrClauseGroup node, but if it fails in this, it returns false, otherwise it processes the generated element according to what it found - either adds it to the list as new, or adds a constant to an existing one.

I also divided one general list of suitable for conversion and unsuitable into two different ones: appropriate_entries and or_entries. Now we are only looking in the list of suitable elements to form ANY expr.

This helps us to get rid of repetitions in the code you mentioned. Please write if this is not the logic that you have seen before.

[0] https://www.postgresql.org/message-id/3381819.e9J7NaK4W3%40thinkpad-pgpro


    
The error was caused by the specifics of storing the "OR" clauses in the RestrictInfo structure. Scanning the orclauses list of the RestrictInfo variable, we could face not only the item with RestrictInfo type, but also the BoolExpr type.

For example, when we have both or clauses and "AND" clauses together, like x = 1 and (y =1 or y=2 or y=3 and z = 1). The structure looks like:

RestrictInfo->orclauses = [RestrictInfo [x=1],
                                          RestrictInfo->orclauses = [RestrictInfo[y=1],
                                                                                    RestrictInfo [y=2],
                                                                                    BoolExpr = [Restrictinfo [y=3], RestrictInfo [z=1]
                                                                                   ]
                                         ]

It's working fine now.

-- 
Regards,
Alena Rybakina
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
--------------QUUbKhzIzBJBau2JCSH3bfkf-- --------------JN2IJS0Fazz1QocpFcZXNWzS Content-Type: text/x-patch; charset=UTF-8; name="v26-0001-Transform-OR-clauses-to-ANY-expression.patch" Content-Disposition: attachment; filename="v26-0001-Transform-OR-clauses-to-ANY-expression.patch" Content-Transfer-Encoding: base64 RnJvbSAyNmVjYTk4MjI5NzQ5YjIwYWQwYzgyYTlmYTU1ZjRmMzdmZDM0ZDI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogVGh1LCAxMSBKdWwgMjAyNCAxOTowMToxMCArMDMwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBUcmFuc2Zvcm0gT1IgY2xhdXNlcyB0byBBTlkgZXhwcmVzc2lv bgoKUmVwbGFjZSAoZXhwciBvcCBDMSkgT1IgKGV4cHIgb3AgQzIpIC4uLiB3aXRoIGV4cHIg b3AgQU5ZKEFSUkFZW0MxLCBDMiwgLi4uXSkKZHVyaW5nIGFkZGluZyByZXN0cmljdGluZm8n cyB0byB0aGUgYmFzZSByZWxhdGlvbi4KCkhlcmUgQ24gaXMgYSBuLXRoIGNvbnN0YW50IG9y IHBhcmFtZXRlcnMgZXhwcmVzc2lvbiwgJ2V4cHInIGlzIG5vbi1jb25zdGFudApleHByZXNz aW9uLCAnb3AnIGlzIGFuIG9wZXJhdG9yIHdoaWNoIHJldHVybnMgYm9vbGVhbiByZXN1bHQg YW5kIGhhcyBhIGNvbW11dGVyCihmb3IgdGhlIGNhc2Ugb2YgcmV2ZXJzZSBvcmRlciBvZiBj b25zdGFudCBhbmQgbm9uLWNvbnN0YW50IHBhcnRzIG9mIHRoZQpleHByZXNzaW9uLCBsaWtl ICdDbiBvcCBleHByJykuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzU2N0VE NkNBLjIwNDA1MDQlNDBzaWdhZXYucnUKQXV0aG9yOiBBbGVuYSBSeWJha2luYSA8bGVuYS5y aWJhY2tpbmFAeWFuZGV4LnJ1PgpBdXRob3I6IEFuZHJleSBMZXBpa2hvdiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KUmV2aWV3ZWQtYnk6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93 dC5pZT4KUmV2aWV3ZWQtYnk6IFJhbmllciBWaWxlbGEgPHJhbmllci52ZkBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFla29yb3Rrb3ZAZ21haWwuY29t PgpSZXZpZXdlZC1ieTogUm9iZXJ0IEhhYXMgPHJvYmVydG1oYWFzQGdtYWlsLmNvbT4KUmV2 aWV3ZWQtYnk6IEppYW4gSGUgPGppYW4udW5pdmVyc2FsaXR5QGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IFRvbSBMYW5lIDx0Z2xAc3NzLnBnaC5wYS51cz4KUmV2aWV3ZWQtYnk6IE5pa29s YXkgU2hhcGxvdiA8ZGh5YW5AbmF0YXJhai5zdT4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9pbml0c3BsYW4uYyAgICAgICAgfCAzMzUgKysrKysrKysrKysrKysrKysrCiBz cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgMzEgKysK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCAgICB8ICAzMiAr LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0IHwgIDQ2 ICstLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0ICAgICAgIHwg IDEyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0ICAgICAgICAg fCAgIDYgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAg ICB8ICAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDQxMCBpbnNlcnRpb25zKCspLCA1MyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0 c3BsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCmluZGV4 IGUyYzY4ZmU2Zjk5Li41NzIzMTJiZTc0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vaW5pdHNwbGFuLmMKQEAgLTE0LDkgKzE0LDEzIEBACiAgKi8KICNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgogCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisj aW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5 anVtYmxlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9pbmhlcml0LmgiCkBAIC0y OSw4ICszMywxMSBAQAogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVk ZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oIgogI2luY2x1ZGUgInBhcnNlci9hbmFseXpl LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgorI2luY2x1ZGUgInBhcnNl ci9wYXJzZV9vcGVyLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5o IgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgi CiAKQEAgLTI2MTcsNiArMjYyNCwzMDggQEAgY2hlY2tfcmVkdW5kYW50X251bGxhYmlsaXR5 X3F1YWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSkKIAlyZXR1cm4gZmFsc2U7 CiB9CiAKK3N0YXRpYyBib29sCit0cnlfcHJlcGFyZV9zaW5nbGVfb3IoUmVzdHJpY3RJbmZv ICpyaW5mbywgTGlzdCAqKmFwcHJvcHJpYXRlX2dyb3VwKQoreworCU9wRXhwcgkgICAqb3Jx dWFsOworCU5vZGUJICAgKmNvbnN0X2V4cHI7CisJTm9kZQkgICAqbmNvbnN0X2V4cHI7CisJ T2lkCQkJb3BubzsKKwlPaWQJCQljb25zdHR5cGU7CisJTm9kZQkgICAqbGVmdG9wLAorCQkJ ICAgKnJpZ2h0b3A7CisJTGlzdENlbGwgICAqbGMyOworCWJvb2wgZm91bmQgPSBmYWxzZTsK KwlPckNsYXVzZUdyb3VwICpvcl9jbGF1c2VfZ3JvdXA7CisKKwlpZiAoIUlzQShyaW5mbywg UmVzdHJpY3RJbmZvKSB8fCAhSXNBKHJpbmZvLT5jbGF1c2UsIE9wRXhwcikpCisJeworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJb3JxdWFsID0gKE9wRXhwciAqKSByaW5mby0+Y2xhdXNl OworCW9wbm8gPSBvcnF1YWwtPm9wbm87CisJaWYgKGdldF9vcF9yZXR0eXBlKG9wbm8pICE9 IEJPT0xPSUQpCisJeworCQkvKiBPbmx5IG9wZXJhdG9yIHJldHVybmluZyBib29sZWFuIHN1 aXRzIE9SIC0+IEFOWSB0cmFuc2Zvcm1hdGlvbiAqLworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJLyoKKwkJKiBEZXRlY3QgdGhlIGNvbnN0YW50IHNpZGUgb2YgdGhlIGNsYXVzZS4gUmVj YWxsIG5vbi1jb25zdGFudAorCQkqIGV4cHJlc3Npb24gY2FuIGJlIG1hZGUgbm90IG9ubHkg d2l0aCBWYXJzLCBidXQgYWxzbyB3aXRoIFBhcmFtcywKKwkJKiB3aGljaCBpcyBub3QgYm9u ZGVkIHdpdGggYW55IHJlbGF0aW9uLiBUaHVzLCB3ZSBkZXRlY3QgdGhlIGNvbnN0CisJCSog c2lkZSAtIGlmIGFub3RoZXIgc2lkZSBpcyBjb25zdGFudCB0b28sIHRoZSBvcnF1YWwgY291 bGRuJ3QgYmUgYW4KKwkJKiBPcEV4cHIuICBHZXQgcG9pbnRlcnMgdG8gY29uc3RhbnQgYW5k IGV4cHJlc3Npb24gc2lkZXMgb2YgdGhlIHF1YWwuCisJCSovCisJbGVmdG9wID0gZ2V0X2xl ZnRvcChvcnF1YWwpOworCWlmIChJc0EobGVmdG9wLCBSZWxhYmVsVHlwZSkpCisJCWxlZnRv cCA9IChOb2RlICopICgoUmVsYWJlbFR5cGUgKikgbGVmdG9wKS0+YXJnOworCisJcmlnaHRv cCA9IGdldF9yaWdodG9wKG9ycXVhbCk7CisJaWYgKElzQShyaWdodG9wLCBSZWxhYmVsVHlw ZSkpCisJCXJpZ2h0b3AgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIHJpZ2h0b3ApLT5h cmc7CisKKwlpZiAoSXNBKGxlZnRvcCwgQ29uc3QpIHx8IElzQShsZWZ0b3AsIFBhcmFtKSkK Kwl7CisJCW9wbm8gPSBnZXRfY29tbXV0YXRvcihvcG5vKTsKKworCQlpZiAoIU9pZElzVmFs aWQob3BubykpCisJCXsvKiBjb21tdXRhdG9yIGRvZXNuJ3QgZXhpc3QsIHdlIGNhbid0IHJl dmVyc2UgdGhlIG9yZGVyICovCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQluY29uc3Rf ZXhwciA9IGdldF9yaWdodG9wKG9ycXVhbCk7CisJCWNvbnN0X2V4cHIgPSBnZXRfbGVmdG9w KG9ycXVhbCk7CisJfQorCWVsc2UgaWYgKElzQShyaWdodG9wLCBDb25zdCkgfHwgSXNBKHJp Z2h0b3AsIFBhcmFtKSkKKwl7CisJCWNvbnN0X2V4cHIgPSBnZXRfcmlnaHRvcChvcnF1YWwp OworCQluY29uc3RfZXhwciA9IGdldF9sZWZ0b3Aob3JxdWFsKTsKKwl9CisJZWxzZQorCXsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJCSogRm9yYmlkIHRyYW5zZm9ybWF0aW9u IGZvciBjb21wb3NpdGUgdHlwZXMsIHJlY29yZHMsIGFuZCB2b2xhdGlsZQorCQkqIGV4cHJl c3Npb25zLgorCQkqLworCWNvbnN0dHlwZSA9IGV4cHJUeXBlKGNvbnN0X2V4cHIpOworCWlm ICh0eXBlX2lzX3Jvd3R5cGUoZXhwclR5cGUoY29uc3RfZXhwcikpIHx8CisJCXR5cGVfaXNf cm93dHlwZShjb25zdHR5cGUpIHx8CisJCWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChO b2RlICopIG5jb25zdF9leHByKSkKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlvcl9j bGF1c2VfZ3JvdXAgPSBtYWtlTm9kZShPckNsYXVzZUdyb3VwKTsKKworCWZvcmVhY2gobGMy LCAqYXBwcm9wcmlhdGVfZ3JvdXApCisJeworCisJCWlmICghSXNBKGxmaXJzdChsYzIpLCBP ckNsYXVzZUdyb3VwKSkKKwkJCUFzc2VydCgwKTsKKworCQlvcl9jbGF1c2VfZ3JvdXAgPSAo T3JDbGF1c2VHcm91cCAqKSBsZmlyc3QobGMyKTsKKworCQlpZiAob3JfY2xhdXNlX2dyb3Vw LT5vcG5vID09IG9wbm8gJiYKKwkJCW9yX2NsYXVzZV9ncm91cC0+Y29uc3R0eXBlID09IGNv bnN0dHlwZSAmJgorCQkJb3JfY2xhdXNlX2dyb3VwLT5pbnB1dGNvbGxpZCA9PSBleHByQ29s bGF0aW9uKGNvbnN0X2V4cHIpICYmCisJCQllcXVhbChvcl9jbGF1c2VfZ3JvdXAtPmV4cHIs IG5jb25zdF9leHByKSkKKwkJeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJb3JfY2xhdXNlX2dyb3VwLT5leHByID0gKEV4 cHIgKikgbmNvbnN0X2V4cHI7CisJCW9yX2NsYXVzZV9ncm91cC0+ZXhwcnMgPSBsaXN0X21h a2UxKCh2b2lkICopIG9ycXVhbCk7CisJCW9yX2NsYXVzZV9ncm91cC0+b3BubyA9IG9wbm87 CisJCW9yX2NsYXVzZV9ncm91cC0+aW5wdXRjb2xsaWQgPSBleHByQ29sbGF0aW9uKGNvbnN0 X2V4cHIpOworCQlvcl9jbGF1c2VfZ3JvdXAtPmNvbnN0dHlwZSA9IGNvbnN0dHlwZTsKKwkJ b3JfY2xhdXNlX2dyb3VwLT5jb25zdHMgPSBsaXN0X21ha2UxKGNvbnN0X2V4cHIpOworCQlB c3NlcnQobGlzdF9sZW5ndGgob3JfY2xhdXNlX2dyb3VwLT5leHBycykgPT0gbGlzdF9sZW5n dGgob3JfY2xhdXNlX2dyb3VwLT5jb25zdHMpKTsKKwkJKmFwcHJvcHJpYXRlX2dyb3VwID0g bGFwcGVuZCgqYXBwcm9wcmlhdGVfZ3JvdXAsIG9yX2NsYXVzZV9ncm91cCk7CisJfQorCWVs c2UKKwl7CisJCW9yX2NsYXVzZV9ncm91cC0+Y29uc3RzID0gbGFwcGVuZChvcl9jbGF1c2Vf Z3JvdXAtPmNvbnN0cywgY29uc3RfZXhwcik7CisJCW9yX2NsYXVzZV9ncm91cC0+ZXhwcnMg PSBsYXBwZW5kKG9yX2NsYXVzZV9ncm91cC0+ZXhwcnMsICh2b2lkICopIG9ycXVhbCk7CisJ CUFzc2VydChsaXN0X2xlbmd0aChvcl9jbGF1c2VfZ3JvdXAtPmV4cHJzKSA9PSBsaXN0X2xl bmd0aChvcl9jbGF1c2VfZ3JvdXAtPmNvbnN0cykpOworCX0KKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogdHJhbnNmb3JtX29yX3RvX2FueSAtCisgKgkgIERpc2NvdmVyIHRoZSBh cmdzIG9mIGFuIE9SIGV4cHJlc3Npb24gYW5kIHRyeSB0byBncm91cCBzaW1pbGFyIE9SCisg KgkgIGV4cHJlc3Npb25zIHRvIFNBT1AgZXhwcmVzc2lvbnMuCisgKgorICogVGhpcyB0cmFu c2Zvcm1hdGlvbiBncm91cHMgdHdvLXNpZGVkIGVxdWFsaXR5IGV4cHJlc3Npb24uICBPbmUg c2lkZSBvZgorICogc3VjaCBhbiBleHByZXNzaW9uIG11c3QgYmUgYSBwbGFpbiBjb25zdGFu dCBvciBjb25zdGFudCBleHByZXNzaW9uLiAgVGhlCisgKiBvdGhlciBzaWRlIG11c3QgYmUg YSB2YXJpYWJsZSBleHByZXNzaW9uIHdpdGhvdXQgdm9sYXRpbGUgZnVuY3Rpb25zLgorICog VG8gZ3JvdXAgcXVhbHMsIG9wbm8sIGlucHV0Y29sbGlkIG9mIHZhcmlhYmxlIGV4cHJlc3Np b24sIGFuZCB0eXBlIG9mCisgKiBjb25zdGFudCBleHByZXNzaW9uIG11c3QgYmUgZXF1YWwg dG9vLgorICoKKyAqIFRoZSBncm91cGluZyB0ZWNobmlxdWUgaXMgYmFzZWQgb24gdGhlIGVx dWl2YWxlbmNlIG9mIHZhcmlhYmxlIHNpZGVzIG9mCisgKiB0aGUgZXhwcmVzc2lvbjogdXNp bmcgZXhwcklkIGFuZCBlcXVhbCgpIHJvdXRpbmUsIGl0IGdyb3VwcyBjb25zdGFudCBzaWRl cworICogb2Ygc2ltaWxhciBjbGF1c2VzIGludG8gYW4gYXJyYXkuICBBZnRlciB0aGUgZ3Jv dXBpbmcgcHJvY2VkdXJlLCBlYWNoCisgKiBjb3VwbGUgKCd2YXJpYWJsZSBleHByZXNzaW9u JyBhbmQgJ2NvbnN0YW50IGFycmF5JykgZm9ybXMgYSBuZXcgU0FPUAorICogb3BlcmF0aW9u LCB3aGljaCBpcyBhZGRlZCB0byB0aGUgYXJncyBsaXN0IG9mIHRoZSByZXR1cm5pbmcgZXhw cmVzc2lvbi4KKyAqLworc3RhdGljIExpc3QgKgordHJhbnNmb3JtX29yX3RvX2FueShQbGFu bmVySW5mbyAqcm9vdCwgUmVzdHJpY3RJbmZvICogcmluZm8pCit7CisJTGlzdAkgICAqYXBw cm9wcmlhdGVfZW50cmllcyA9IE5JTDsKKwlMaXN0CSAgICpvcl9lbnRyaWVzID0gTklMOwor CWludAkJCWxlbl9vcnMgPSAoKEJvb2xFeHByICopIHJpbmZvLT5jbGF1c2UpLT5hcmdzID8g bGlzdF9sZW5ndGgoKChCb29sRXhwciAqKSByaW5mby0+Y2xhdXNlKS0+YXJncykgOiAwOwor CU9yQ2xhdXNlR3JvdXAgKnJlc3RyaWN0X2luZm9fZW50cnkgPSBOVUxMOworCUxpc3RDZWxs CSAgICpsYzsKKwlib29sIGZvdW5kOworCisJaWYobGVuX29ycyA8IDIpCisJCXJldHVybiBO SUw7CisKKwlmb3JlYWNoKGxjLCAoKEJvb2xFeHByICopIHJpbmZvLT5vcmNsYXVzZSktPmFy Z3MpCisJeworCQlSZXN0cmljdEluZm8gKnN1Yl9yaW5mbzsKKwkJRXhwcgkJICpvcl9xdWFs ID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKworCQlpZighSXNBKGxmaXJzdChsYyksIFJlc3Ry aWN0SW5mbykpCisJCQlvcl9lbnRyaWVzID0gbGFwcGVuZChvcl9lbnRyaWVzLCAodm9pZCAq KSBvcl9xdWFsKTsKKwkJZWxzZQorCQl7CisJCQlzdWJfcmluZm8gPSAoUmVzdHJpY3RJbmZv ICopIGxmaXJzdChsYyk7CisKKwkJCS8qCisJCQkqIEFkZCB0aGUgcmVzdHJpY3RfaW5mb19l bnRyeSB0byB0aGUgbGlzdC4gIEl0IGlzIG5lZWRlZCBleGNsdXNpdmVseSB0byBtYW5hZ2UK KwkJCSogdGhlIHByb2JsZW0gd2l0aCB0aGUgb3JkZXIgb2YgdHJhbnNmb3JtZWQgY2xhdXNl cyBpbiBleHBsYWluLgorCQkJKiBIYXNoIHZhbHVlIGNhbiBkZXBlbmQgb24gdGhlIHBsYXRm b3JtIGFuZCB2ZXJzaW9uLiAgSGVuY2UsCisJCQkqIHNlcXVlbnRhbCBzY2FuIG9mIHRoZSBo YXNoIHRhYmxlIHdvdWxkIHByb25lIHRvIGNoYW5nZSB0aGUKKwkJCSogb3JkZXIgb2YgY2xh dXNlcyBpbiBsaXN0cyBhbmQsIGFzIGEgcmVzdWx0LCBicmVhayByZWdyZXNzaW9uCisJCQkq IHRlc3RzIGFjY2lkZW50aWFsbHkuCisJCQkqLworCQkJZm91bmQgPSB0cnlfcHJlcGFyZV9z aW5nbGVfb3Ioc3ViX3JpbmZvLCAmYXBwcm9wcmlhdGVfZW50cmllcyk7CisKKwkJCWlmICgh Zm91bmQpCisJCQl7CisJCQkJb3JfZW50cmllcyA9IGxhcHBlbmQob3JfZW50cmllcywgKHZv aWQgKikgc3ViX3JpbmZvLT5jbGF1c2UpOworCQkJfQorCQl9CisJfQorCisJaWYgKGxpc3Rf bGVuZ3RoKG9yX2VudHJpZXMpID09IGxlbl9vcnMgfHwgKGFwcHJvcHJpYXRlX2VudHJpZXMg PT0gTklMICYmIGxpc3RfbGVuZ3RoKGFwcHJvcHJpYXRlX2VudHJpZXMpIDwgMSkpCisJCXJl dHVybiBOSUw7CisKKwlmb3VuZCA9IGZhbHNlOworCisJLyogTGV0J3MgY29udmVydCBlYWNo IGdyb3VwIG9mIGNsYXVzZXMgdG8gYW4gQU5ZIGV4cHJlc3Npb24uICovCisKKwkvKgorCSAq IEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgZ3JvdXBzIGFuZCBjb252ZXJ0IGVhY2gsIHdoZXJl IG51bWJlciBvZiBjb25zdHMKKwkgKiBtb3JlIHRoYW4gMS4gdHJpdmlhbCBncm91cHMgbW92 ZSB0byBPUi1saXN0IGFnYWluCisJICovCisKKwlmb3JlYWNoKGxjLCBhcHByb3ByaWF0ZV9l bnRyaWVzKQorCXsKKwkJT2lkCQkJc2NhbGFyX3R5cGU7CisJCU9pZAkJCWFycmF5X3R5cGU7 CisKKwkJaWYgKCFJc0EobGZpcnN0KGxjKSwgT3JDbGF1c2VHcm91cCkpCisJCXsKKwkJCUFz c2VydCgwKTsKKwkJfQorCisJCXJlc3RyaWN0X2luZm9fZW50cnkgPSAoT3JDbGF1c2VHcm91 cCAqKSBsZmlyc3QobGMpOworCisJCUFzc2VydChsaXN0X2xlbmd0aChyZXN0cmljdF9pbmZv X2VudHJ5LT5leHBycykgPT0gbGlzdF9sZW5ndGgocmVzdHJpY3RfaW5mb19lbnRyeS0+Y29u c3RzKSk7CisKKwkJaWYgKGxpc3RfbGVuZ3RoKHJlc3RyaWN0X2luZm9fZW50cnktPmNvbnN0 cykgPT0gMSkKKwkJeworCQkJLyoKKwkJCSAqIE9ubHkgb25lIGVsZW1lbnQgcmV0dXJucyBv cmlnaW4gZXhwcmVzc2lvbiBpbnRvIHRoZSBCb29sRXhwcgorCQkJICogYXJncyBsaXN0IHVu Y2hhbmdlZC4KKwkJCSAqLworCQkJb3JfZW50cmllcyA9IGxpc3RfY29uY2F0KG9yX2VudHJp ZXMsICh2b2lkICopIHJlc3RyaWN0X2luZm9fZW50cnktPmV4cHJzKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJLyoKKwkJICogRG8gdGhlIHRyYW5zZm9ybWF0aW9uLgorCQkgKi8KKwkJ c2NhbGFyX3R5cGUgPSByZXN0cmljdF9pbmZvX2VudHJ5LT5jb25zdHR5cGU7CisJCWFycmF5 X3R5cGUgPSBPaWRJc1ZhbGlkKHNjYWxhcl90eXBlKSA/IGdldF9hcnJheV90eXBlKHNjYWxh cl90eXBlKSA6CisJCQlJbnZhbGlkT2lkOworCisJCWlmIChPaWRJc1ZhbGlkKGFycmF5X3R5 cGUpKQorCQl7CisJCQkvKgorCQkJICogT0s6IGNvZXJjZSBhbGwgdGhlIHJpZ2h0LWhhbmQg bm9uLVZhciBpbnB1dHMgdG8gdGhlIGNvbW1vbiB0eXBlCisJCQkgKiBhbmQgYnVpbGQgYW4g QXJyYXlFeHByIGZvciB0aGVtLgorCQkJICovCisJCQlMaXN0CSAgICphZXhwcnMgPSBOSUw7 CisJCQlBcnJheUV4cHIgICpuZXdhID0gTlVMTDsKKwkJCVNjYWxhckFycmF5T3BFeHByICpz YW9wZXhwciA9IE5VTEw7CisJCQlIZWFwVHVwbGUJb3BlcnR1cDsKKwkJCUZvcm1fcGdfb3Bl cmF0b3Igb3BlcmZvcm07CisJCQlMaXN0CSAgICpuYW1lbGlzdCA9IE5JTDsKKwkJCUxpc3RD ZWxsICAgKmxjMjsKKworCQkJZm9yZWFjaChsYzIsIHJlc3RyaWN0X2luZm9fZW50cnktPmNv bnN0cykKKwkJCXsKKwkJCQlOb2RlCSAgICpub2RlID0gKE5vZGUgKikgbGZpcnN0KGxjMik7 CisKKwkJCQlub2RlID0gY29lcmNlX3RvX2NvbW1vbl90eXBlKE5VTEwsIG5vZGUsIHNjYWxh cl90eXBlLAorCQkJCQkJCQkJCQkgIk9SIEFOWSBUcmFuc2Zvcm1hdGlvbiIpOworCQkJCWFl eHBycyA9IGxhcHBlbmQoYWV4cHJzLCBub2RlKTsKKwkJCX0KKworCQkJbmV3YSA9IG1ha2VO b2RlKEFycmF5RXhwcik7CisJCQkvKiBhcnJheV9jb2xsaWQgd2lsbCBiZSBzZXQgYnkgcGFy c2VfY29sbGF0ZS5jICovCisJCQluZXdhLT5lbGVtZW50X3R5cGVpZCA9IHNjYWxhcl90eXBl OworCQkJbmV3YS0+YXJyYXlfdHlwZWlkID0gYXJyYXlfdHlwZTsKKwkJCW5ld2EtPm11bHRp ZGltcyA9IGZhbHNlOworCQkJbmV3YS0+ZWxlbWVudHMgPSBhZXhwcnM7CisJCQluZXdhLT5s b2NhdGlvbiA9IC0xOworCisJCQkvKgorCQkJICogVHJ5IHRvIGNhc3QgdGhpcyBleHByZXNz aW9uIHRvIENvbnN0LiBEdWUgdG8gY3VycmVudCBzdHJpY3QKKwkJCSAqIHRyYW5zZm9ybWF0 aW9uIHJ1bGVzIGl0IHNob3VsZCBiZSBkb25lIFthbG1vc3RdIGV2ZXJ5IHRpbWUuCisJCQkg Ki8KKwkJCW5ld2EgPSAoQXJyYXlFeHByICopIGV2YWxfY29uc3RfZXhwcmVzc2lvbnMoTlVM TCwgKE5vZGUgKikgbmV3YSk7CisKKwkJCW9wZXJ0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BF Uk9JRCwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShyZXN0cmljdF9pbmZvX2VudHJ5 LT5vcG5vKSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BlcnR1cCkpCisJCQkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yICV1IiwKKwkJCQkJ IHJlc3RyaWN0X2luZm9fZW50cnktPm9wbm8pOworCisJCQlvcGVyZm9ybSA9IChGb3JtX3Bn X29wZXJhdG9yKSBHRVRTVFJVQ1Qob3BlcnR1cCk7CisJCQlpZiAoIU9wZXJhdG9ySXNWaXNp YmxlKHJlc3RyaWN0X2luZm9fZW50cnktPm9wbm8pKQorCQkJCW5hbWVsaXN0ID0gbGFwcGVu ZChuYW1lbGlzdCwgbWFrZVN0cmluZyhnZXRfbmFtZXNwYWNlX25hbWUob3BlcmZvcm0tPm9w cm5hbWVzcGFjZSkpKTsKKworCQkJbmFtZWxpc3QgPSBsYXBwZW5kKG5hbWVsaXN0LCBtYWtl U3RyaW5nKHBzdHJkdXAoTmFtZVN0cihvcGVyZm9ybS0+b3BybmFtZSkpKSk7CisJCQlSZWxl YXNlU3lzQ2FjaGUob3BlcnR1cCk7CisKKwkJCXNhb3BleHByID0KKwkJCQkoU2NhbGFyQXJy YXlPcEV4cHIgKikKKwkJCQltYWtlX3NjYWxhcl9hcnJheV9vcChOVUxMLAorCQkJCQkJCQkJ IG5hbWVsaXN0LAorCQkJCQkJCQkJIHRydWUsCisJCQkJCQkJCQkgKE5vZGUgKikgcmVzdHJp Y3RfaW5mb19lbnRyeS0+ZXhwciwKKwkJCQkJCQkJCSAoTm9kZSAqKSBuZXdhLAorCQkJCQkJ CQkJIC0xKTsKKwkJCXNhb3BleHByLT5pbnB1dGNvbGxpZCA9IHJlc3RyaWN0X2luZm9fZW50 cnktPmlucHV0Y29sbGlkOworCisJCQlvcl9lbnRyaWVzID0gbGFwcGVuZChvcl9lbnRyaWVz LCAoRXhwciAqKSBzYW9wZXhwcik7CisKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJfQorCQllbHNl CisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGUgY29uc3Qgbm9kZSdzIChyaWdodCBzaWRlIG9m IG9wZXJhdG9yIGV4cHJlc3Npb24pIHR5cGUKKwkJCSAqIGRvbid0IGhhdmUg4oCcdHJ1ZeKA nSBhcnJheSB0eXBlLCB0aGVuIHdlIGNhbm5ub3QgZG8gdGhlCisJCQkgKiB0cmFuc2Zvcm1h dGlvbi4gV2Ugc2ltcGx5IGNvbmNhdGVuYXRlIHRoZSBleHByZXNzaW9uIG5vZGUuCisJCQkg Ki8KKwkJCWxpc3RfZnJlZShyZXN0cmljdF9pbmZvX2VudHJ5LT5jb25zdHMpOworCQkJb3Jf ZW50cmllcyA9IGxpc3RfY29uY2F0KG9yX2VudHJpZXMsICh2b2lkICopIHJlc3RyaWN0X2lu Zm9fZW50cnktPmV4cHJzKTsKKwkJfQorCX0KKwlsaXN0X2ZyZWUoYXBwcm9wcmlhdGVfZW50 cmllcyk7CisKKwkvKiBPbmUgbW9yZSB0cmljazogYXNzZW1ibGUgY29ycmVjdCBjbGF1c2Ug Ki8KKwlpZiAoZm91bmQpCisJCXJldHVybiBvcl9lbnRyaWVzOworCWVsc2UKKwkJcmV0dXJu IE5JTDsKK30KKwogLyoKICAqIGFkZF9iYXNlX2NsYXVzZV90b19yZWwKICAqCQlBZGQgJ3Jl c3RyaWN0aW5mbycgYXMgYSBiYXNlcmVzdHJpY3RpbmZvIHRvIHRoZSBiYXNlIHJlbGF0aW9u IGRlbm90ZWQKQEAgLTI2NzcsNiArMjk4NiwzMiBAQCBhZGRfYmFzZV9jbGF1c2VfdG9fcmVs KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKIAkJfQogCX0KIAorCWlmIChyZXN0 cmljdGlvbl9pc19vcl9jbGF1c2UocmVzdHJpY3RpbmZvKSkKKwl7CisJCUxpc3QgKm9yX2xp c3QgPSB0cmFuc2Zvcm1fb3JfdG9fYW55KHJvb3QsIHJlc3RyaWN0aW5mbyk7CisKKwkJaWYg KG9yX2xpc3QgIT0gTklMKQorCQl7CisJCQlFeHByICpjbGF1c2UgPSBsaXN0X2xlbmd0aChv cl9saXN0KSA+IDEgPworCQkJCQkJCW1ha2VCb29sRXhwcihPUl9FWFBSLCBvcl9saXN0LAor CQkJCQkJCQkJCSgoQm9vbEV4cHIgKikgcmVzdHJpY3RpbmZvLT5jbGF1c2UpLT5sb2NhdGlv bikgOgorCQkJCQkJCWxpbml0aWFsKG9yX2xpc3QpOworCisJCQlSZXN0cmljdEluZm8gKnJp bmZvOworCQkJcmluZm8gPSBtYWtlX3Jlc3RyaWN0aW5mbyhyb290LAorCQkJCQkJCQkJCWNs YXVzZSwKKwkJCQkJCQkJCQlyZXN0cmljdGluZm8tPmlzX3B1c2hlZF9kb3duLAorCQkJCQkJ CQkJCXJlc3RyaWN0aW5mby0+aGFzX2Nsb25lLAorCQkJCQkJCQkJCXJlc3RyaWN0aW5mby0+ aXNfY2xvbmUsCisJCQkJCQkJCQkJcmVzdHJpY3RpbmZvLT5wc2V1ZG9jb25zdGFudCwKKwkJ CQkJCQkJCQlyZXN0cmljdGluZm8tPnNlY3VyaXR5X2xldmVsLAorCQkJCQkJCQkJCXJlc3Ry aWN0aW5mby0+cmVxdWlyZWRfcmVsaWRzLAorCQkJCQkJCQkJCXJlc3RyaWN0aW5mby0+aW5j b21wYXRpYmxlX3JlbGlkcywKKwkJCQkJCQkJCQlyZXN0cmljdGluZm8tPm91dGVyX3JlbGlk cyk7CisJCQlyZXN0cmljdGluZm8gPSByaW5mbzsKKwkJfQorCX0KKwogCS8qIEFkZCBjbGF1 c2UgdG8gcmVsJ3MgcmVzdHJpY3Rpb24gbGlzdCAqLwogCXJlbC0+YmFzZXJlc3RyaWN0aW5m byA9IGxhcHBlbmQocmVsLT5iYXNlcmVzdHJpY3RpbmZvLCByZXN0cmljdGluZm8pOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDE0Y2NmYzFhYzFjLi5mNDhkZGI4YzM4NSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTI3MDgsNiArMjcwOCwzNyBAQCB0eXBlZGVmIHN0 cnVjdCBSZXN0cmljdEluZm8KIAlPaWQJCQlyaWdodF9oYXNoZXFvcGVyYXRvciBwZ19ub2Rl X2F0dHIoZXF1YWxfaWdub3JlKTsKIH0gUmVzdHJpY3RJbmZvOwogCisvKgorICogVGhlIGdy b3VwIG9mIHNpbWlsYXIgb3BlcmF0b3IgZXhwcmVzc2lvbnMgaW4gdHJhbnNmb3JtX29yX3Rv X2FueSgpLgorICovCit0eXBlZGVmIHN0cnVjdCBPckNsYXVzZUdyb3VwCit7CisJcGdfbm9k ZV9hdHRyKG5vZGV0YWdfb25seSkKKworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiBUaGUgZXhw cmVzc2lvbiBvZiB0aGUgdmFyaWFibGUgc2lkZSBvZiBvcGVyYXRvciAqLworCUV4cHIJICAg KmV4cHI7CisJLyogVGhlIG9wZXJhdG9yIG9mIHRoZSBvcGVyYXRvciBleHByZXNzaW9uICov CisJT2lkCQkJb3BubzsKKwkvKiBUaGUgY29sbGF0aW9uIG9mIHRoZSBvcGVyYXRvciBleHBy ZXNzaW9uICovCisJT2lkCQkJaW5wdXRjb2xsaWQ7CisJLyogVGhlIHR5cGUgb2YgY29uc3Rh bnQgc2lkZSBvZiBvcGVyYXRvciAqLworCU9pZAkJCWNvbnN0dHlwZTsKKworCS8qIFRoZSBs aXN0IG9mIGNvbnN0YW50IHNpZGVzIG9mIG9wZXJhdG9ycyAqLworCUxpc3QJICAgKmNvbnN0 czsKKworCS8qCisJICogTGlzdCBvZiBzb3VyY2UgZXhwcmVzc2lvbnMuICBXZSBuZWVkIHRo aXMgZm9yIGNvbnZlbmllbmNlIGluIGNhc2Ugd2UKKwkgKiB3aWxsIGdpdmUgdXAgb24gdHJh bnNmb3JtYXRpb24uCisJICovCisJTGlzdAkgICAqZXhwcnM7CisKKwlOb2RlCSAgICpjb25z dF9leHByOworfSBPckNsYXVzZUdyb3VwOworCisKIC8qCiAgKiBUaGlzIG1hY3JvIGVtYm9k aWVzIHRoZSBjb3JyZWN0IHdheSB0byB0ZXN0IHdoZXRoZXIgYSBSZXN0cmljdEluZm8gaXMK ICAqICJwdXNoZWQgZG93biIgdG8gYSBnaXZlbiBvdXRlciBqb2luLCB0aGF0IGlzLCBzaG91 bGQgYmUgdHJlYXRlZCBhcyBhIGZpbHRlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGNmNmVhYzU3MzQ5Li5iY2FlMDczMTQzYSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApAQCAtMTg0 NCwxOCArMTg0NCwxMSBAQCBEUk9QIFRBQkxFIG9uZWtfd2l0aF9udWxsOwogRVhQTEFJTiAo Q09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSB0ZW5rMQogICBXSEVSRSB0aG91c2FuZCA9IDQy IEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBPUiB0ZW50aG91cyA9IDQyKTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEKLSAgIFJlY2hlY2sgQ29uZDog KCgodGhvdXNhbmQgPSA0MikgQU5EICh0ZW50aG91cyA9IDEpKSBPUiAoKHRob3VzYW5kID0g NDIpIEFORCAodGVudGhvdXMgPSAzKSkgT1IgKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRo b3VzID0gNDIpKSkKLSAgIC0+ICBCaXRtYXBPcgotICAgICAgICAgLT4gIEJpdG1hcCBJbmRl eCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3VzCi0gICAgICAgICAgICAgICBJbmRleCBD b25kOiAoKHRob3VzYW5kID0gNDIpIEFORCAodGVudGhvdXMgPSAxKSkKLSAgICAgICAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cwotICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKCh0aG91c2FuZCA9IDQyKSBBTkQgKHRlbnRob3VzID0gMykp Ci0gICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdGhvdXNfdGVudGhv dXMKLSAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5EICh0 ZW50aG91cyA9IDQyKSkKLSg5IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgdGVuazFfdGhvdXNf dGVudGhvdXMgb24gdGVuazEKKyAgIEluZGV4IENvbmQ6ICgodGhvdXNhbmQgPSA0MikgQU5E ICh0ZW50aG91cyA9IEFOWSAoJ3sxLDMsNDJ9Jzo6aW50ZWdlcltdKSkpCisoMiByb3dzKQog CiBTRUxFQ1QgKiBGUk9NIHRlbmsxCiAgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5EICh0ZW50 aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOwpAQCAtMTg2Nywy MCArMTg2MCwxNyBAQCBTRUxFQ1QgKiBGUk9NIHRlbmsxCiBFWFBMQUlOIChDT1NUUyBPRkYp CiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICBXSEVSRSBodW5kcmVkID0gNDIgQU5E ICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWdn cmVnYXRlCiAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQotICAgICAgICAgUmVj aGVjayBDb25kOiAoKGh1bmRyZWQgPSA0MikgQU5EICgodGhvdXNhbmQgPSA0MikgT1IgKHRo b3VzYW5kID0gOTkpKSkKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNDIp IEFORCAodGhvdXNhbmQgPSBBTlkgKCd7NDIsOTl9Jzo6aW50ZWdlcltdKSkpCiAgICAgICAg ICAtPiAgQml0bWFwQW5kCiAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gdGVuazFfaHVuZHJlZAogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1 bmRyZWQgPSA0MikKLSAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgotICAgICAgICAgICAg ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Rob3VzX3RlbnRob3Vz Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgPSA0 MikKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5r MV90aG91c190ZW50aG91cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHRob3VzYW5kID0gOTkpCi0oMTEgcm93cykKKyAgICAgICAgICAgICAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cworICAgICAgICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKHRob3VzYW5kID0gQU5ZICgnezQyLDk5fSc6OmludGVnZXJb XSkpCisoOCByb3dzKQogCiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQogICBXSEVSRSBo dW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CmluZGV4 IDdhMDNiNGUzNjA3Li5kYzA4NzZiNGJiMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dApAQCAtMTAwLDIzICsxMDAsMjMgQEAgZXhw bGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVsbDsKICgy IHJvd3MpCiAKIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBh ID0gJ2EnIG9yIGEgPSAnYyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICBBcHBlbmQKICAgIC0+ICBTZXEgU2NhbiBvbiBscF9h ZCBscF8xCi0gICAgICAgICBGaWx0ZXI6ICgoYSA9ICdhJzo6YnBjaGFyKSBPUiAoYSA9ICdj Jzo6YnBjaGFyKSkKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hh cltdKSkKICAgIC0+ICBTZXEgU2NhbiBvbiBscF9iYyBscF8yCi0gICAgICAgICBGaWx0ZXI6 ICgoYSA9ICdhJzo6YnBjaGFyKSBPUiAoYSA9ICdjJzo6YnBjaGFyKSkKKyAgICAgICAgIEZp bHRlcjogKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkKICg1IHJvd3MpCiAKIGV4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBscCB3aGVyZSBhIGlzIG5vdCBudWxsIGFu ZCAoYSA9ICdhJyBvciBhID0gJ2MnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBBcHBlbmQKICAgIC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xCi0gICAgICAg ICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EICgoYSA9ICdhJzo6YnBjaGFyKSBPUiAo YSA9ICdjJzo6YnBjaGFyKSkpCisgICAgICAgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkg QU5EIChhID0gQU5ZICgne2EsY30nOjpicGNoYXJbXSkpKQogICAgLT4gIFNlcSBTY2FuIG9u IGxwX2JjIGxwXzIKLSAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChh ID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIpKSkKKyAgICAgICAgIEZpbHRl cjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGEgPSBBTlkgKCd7YSxjfSc6OmJwY2hhcltdKSkp CiAoNSByb3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gbHAgd2hl cmUgYSA8PiAnZyc7CkBAIC01MzMsMTAgKzUzMywxMCBAQCBleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCAqIGZyb20gcmxwIHdoZXJlIGEgPD0gMzE7CiAoMjcgcm93cykKIAogZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMSBvciBhID0gNzsK LSAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTZXEg U2NhbiBvbiBybHAyIHJscAotICAgRmlsdGVyOiAoKGEgPSAxKSBPUiAoYSA9IDcpKQorICAg RmlsdGVyOiAoYSA9IEFOWSAoJ3sxLDd9Jzo6aW50ZWdlcltdKSkKICgyIHJvd3MpCiAKIGV4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBybHAgd2hlcmUgYSA9IDEgb3IgYiA9 ICdhYic7CkBAIC02MTQsMTMgKzYxNCwxMyBAQCBleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gcmxwIHdoZXJlIGEgPCAxIG9yIChhID4gMjAgYW5kIGEgPCAyNSk7CiAKIC0t IHdoZXJlIGNsYXVzZSBjb250cmFkaWN0cyBzdWItcGFydGl0aW9uJ3MgY29uc3RyYWludAog ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscCB3aGVyZSBhID0gMjAgb3Ig YSA9IDQwOwotICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQXBwZW5kCiAgICAtPiAgU2Vx IFNjYW4gb24gcmxwNF8xIHJscF8xCi0gICAgICAgICBGaWx0ZXI6ICgoYSA9IDIwKSBPUiAo YSA9IDQwKSkKKyAgICAgICAgIEZpbHRlcjogKGEgPSBBTlkgKCd7MjAsNDB9Jzo6aW50ZWdl cltdKSkKICAgIC0+ICBTZXEgU2NhbiBvbiBybHA1X2RlZmF1bHQgcmxwXzIKLSAgICAgICAg IEZpbHRlcjogKChhID0gMjApIE9SIChhID0gNDApKQorICAgICAgICAgRmlsdGVyOiAoYSA9 IEFOWSAoJ3syMCw0MH0nOjppbnRlZ2VyW10pKQogKDUgcm93cykKIAogZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHJscDMgd2hlcmUgYSA9IDIwOyAgIC8qIGVtcHR5ICov CkBAIC0yMDkwLDEwICsyMDkwLDEwIEBAIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBocCB3aGVyZSBhID0gMSBhbmQgYiA9ICdhYmNkZSc7CiAKIGV4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0ICogZnJvbSBocCB3aGVyZSBhID0gMSBhbmQgYiA9ICdhYmNkZScgYW5k CiAgIChjID0gMiBvciBjID0gMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBTZXEgU2NhbiBvbiBocDIgaHAKLSAgIEZpbHRlcjogKChhID0gMSkgQU5EIChi ID0gJ2FiY2RlJzo6dGV4dCkgQU5EICgoYyA9IDIpIE9SIChjID0gMykpKQorICAgRmlsdGVy OiAoKGMgPSBBTlkgKCd7MiwzfSc6OmludGVnZXJbXSkpIEFORCAoYSA9IDEpIEFORCAoYiA9 ICdhYmNkZSc6OnRleHQpKQogKDIgcm93cykKIAogZHJvcCB0YWJsZSBocDI7CkBAIC0yNDI5 LDggKzI0MjksOCBAQCBzZWxlY3QgZXhwbGFpbl9wYXJhbGxlbF9hcHBlbmQoJ2V4ZWN1dGUg YWJfcTUgKDMzLCA0NCwgNTUpJyk7CiAKIC0tIFRlc3QgUGFyYWxsZWwgQXBwZW5kIHdpdGgg UEFSQU1fRVhFQyBQYXJhbXMKIHNlbGVjdCBleHBsYWluX3BhcmFsbGVsX2FwcGVuZCgnc2Vs ZWN0IGNvdW50KCopIGZyb20gYWIgd2hlcmUgKGEgPSAoc2VsZWN0IDEpIG9yIGEgPSAoc2Vs ZWN0IDMpKSBhbmQgYiA9IDInKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV4cGxhaW5fcGFyYWxsZWxfYXBwZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fcGFyYWxs ZWxfYXBwZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEFnZ3JlZ2F0ZSAo YWN0dWFsIHJvd3M9TiBsb29wcz1OKQogICAgSW5pdFBsYW4gMQogICAgICAtPiAgUmVzdWx0 IChhY3R1YWwgcm93cz1OIGxvb3BzPU4pCkBAIC0yNDQxLDExICsyNDQxLDExIEBAIHNlbGVj dCBleHBsYWluX3BhcmFsbGVsX2FwcGVuZCgnc2VsZWN0IGNvdW50KCopIGZyb20gYWIgd2hl cmUgKGEgPSAoc2VsZWN0IDEpIG9yCiAgICAgICAgICBXb3JrZXJzIExhdW5jaGVkOiBOCiAg ICAgICAgICAtPiAgUGFyYWxsZWwgQXBwZW5kIChhY3R1YWwgcm93cz1OIGxvb3BzPU4pCiAg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gYWJfYTFfYjIgYWJfMSAo YWN0dWFsIHJvd3M9TiBsb29wcz1OKQotICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo KGIgPSAyKSBBTkQgKChhID0gKEluaXRQbGFuIDEpLmNvbDEpIE9SIChhID0gKEluaXRQbGFu IDIpLmNvbDEpKSkKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChhID0gQU5ZIChB UlJBWVsoSW5pdFBsYW4gMSkuY29sMSwgKEluaXRQbGFuIDIpLmNvbDFdKSkgQU5EIChiID0g MikpCiAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gYWJfYTJfYjIg YWJfMiAobmV2ZXIgZXhlY3V0ZWQpCi0gICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgo YiA9IDIpIEFORCAoKGEgPSAoSW5pdFBsYW4gMSkuY29sMSkgT1IgKGEgPSAoSW5pdFBsYW4g MikuY29sMSkpKQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgPSBBTlkgKEFS UkFZWyhJbml0UGxhbiAxKS5jb2wxLCAoSW5pdFBsYW4gMikuY29sMV0pKSBBTkQgKGIgPSAy KSkKICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBhYl9hM19iMiBh Yl8zIChhY3R1YWwgcm93cz1OIGxvb3BzPU4pCi0gICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICgoYiA9IDIpIEFORCAoKGEgPSAoSW5pdFBsYW4gMSkuY29sMSkgT1IgKGEgPSAoSW5p dFBsYW4gMikuY29sMSkpKQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgPSBB TlkgKEFSUkFZWyhJbml0UGxhbiAxKS5jb2wxLCAoSW5pdFBsYW4gMikuY29sMV0pKSBBTkQg KGIgPSAyKSkKICgxNSByb3dzKQogCiAtLSBUZXN0IHBydW5pbmcgZHVyaW5nIHBhcmFsbGVs IG5lc3RlZCBsb29wIHF1ZXJ5CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0YXRzX2V4dC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4 dC5vdXQKaW5kZXggOGM0ZGE5NTUwODQuLjc2Nzg3NDQxODFjIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0CkBAIC0xMzIyLDE5ICsxMzIyLDE5IEBAIFNF TEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMgV0hFUkUKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVk X3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEg PSAxIE9SIGEgPSA1MSkgQU5EIGIgPSAnJzEnJycpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAK IC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAwCisgICAgICAgMTAw IHwgICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jv d3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgKGEgPSAx IE9SIGEgPSA1MSkgQU5EIChiID0gJycxJycgT1IgYiA9ICcnMicnKScpOwogIGVzdGltYXRl ZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgIDk5IHwgICAgMTAw CisgICAgICAgMTAwIHwgICAgMTAwCiAoMSByb3cpCiAKIFNFTEVDVCAqIEZST00gY2hlY2tf ZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMg V0hFUkUgKGEgPSAxIE9SIGEgPSAyIE9SIGEgPSA1MSBPUiBhID0gNTIpIEFORCAoYiA9ICcn MScnIE9SIGIgPSAnJzInJyknKTsKICBlc3RpbWF0ZWQgfCBhY3R1YWwgCiAtLS0tLS0tLS0t LSstLS0tLS0tLQotICAgICAgIDE5NyB8ICAgIDIwMAorICAgICAgIDIwMCB8ICAgIDIwMAog KDEgcm93KQogCiAtLSBPUiBjbGF1c2VzIHJlZmVyZW5jaW5nIGRpZmZlcmVudCBhdHRyaWJ1 dGVzIGFyZSBpbmNvbXBhdGlibGUKQEAgLTE2NjQsMTkgKzE2NjQsMTkgQEAgU0VMRUNUICog RlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2Rl cGVuZGVuY2llcyBXSEVSRQogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygn U0VMRUNUICogRlJPTSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSAoKGEgKiAyKSA9 IDIgT1IgKGEgKiAyKSA9IDEwMikgQU5EIHVwcGVyKGIpID0gJycxJycnKTsKICBlc3RpbWF0 ZWQgfCBhY3R1YWwgCiAtLS0tLS0tLS0tLSstLS0tLS0tLQotICAgICAgICA5OSB8ICAgIDEw MAorICAgICAgIDEwMCB8ICAgIDEwMAogKDEgcm93KQogCiBTRUxFQ1QgKiBGUk9NIGNoZWNr X2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVz IFdIRVJFICgoYSAqIDIpID0gMiBPUiAoYSAqIDIpID0gMTAyKSBBTkQgKHVwcGVyKGIpID0g JycxJycgT1IgdXBwZXIoYikgPSAnJzInJyknKTsKICBlc3RpbWF0ZWQgfCBhY3R1YWwgCiAt LS0tLS0tLS0tLSstLS0tLS0tLQotICAgICAgICA5OSB8ICAgIDEwMAorICAgICAgIDEwMCB8 ICAgIDEwMAogKDEgcm93KQogCiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCdTRUxFQ1QgKiBGUk9NIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIFdIRVJFICgoYSAqIDIp ID0gMiBPUiAoYSAqIDIpID0gNCBPUiAoYSAqIDIpID0gMTAyIE9SIChhICogMikgPSAxMDQp IEFORCAodXBwZXIoYikgPSAnJzEnJyBPUiB1cHBlcihiKSA9ICcnMicnKScpOwogIGVzdGlt YXRlZCB8IGFjdHVhbCAKIC0tLS0tLS0tLS0tKy0tLS0tLS0tCi0gICAgICAgMTk3IHwgICAg MjAwCisgICAgICAgMjAwIHwgICAgMjAwCiAoMSByb3cpCiAKIC0tIE9SIGNsYXVzZXMgcmVm ZXJlbmNpbmcgZGlmZmVyZW50IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdGlkc2Nhbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3RpZHNjYW4ub3V0CmluZGV4IGYxMzNiNWE0YWM3Li4wOTU1M2YxOTUyNCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90aWRzY2FuLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3RpZHNjYW4ub3V0CkBAIC00MywxMCArNDMsMTAgQEAgU0VM RUNUIGN0aWQsICogRlJPTSB0aWRzY2FuIFdIRVJFICcoMCwxKScgPSBjdGlkOwogLS0gT1In ZCBjbGF1c2VzCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgY3RpZCwgKiBGUk9NIHRp ZHNjYW4gV0hFUkUgY3RpZCA9ICcoMCwyKScgT1IgJygwLDEpJyA9IGN0aWQ7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICBUaWQgU2NhbiBvbiB0aWRzY2FuCi0gICBUSUQgQ29uZDog KChjdGlkID0gJygwLDIpJzo6dGlkKSBPUiAoJygwLDEpJzo6dGlkID0gY3RpZCkpCisgICBU SUQgQ29uZDogKGN0aWQgPSBBTlkgKCd7IigwLDIpIiwiKDAsMSkifSc6OnRpZFtdKSkKICgy IHJvd3MpCiAKIFNFTEVDVCBjdGlkLCAqIEZST00gdGlkc2NhbiBXSEVSRSBjdGlkID0gJygw LDIpJyBPUiAnKDAsMSknID0gY3RpZDsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggOTMyMGU0ZDgwODAuLjRlYzllMmNlMzJmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMTcxNSw2ICsxNzE1LDcgQEAgTnVtZXJpY1ZhcgogT01fdWludDMyCiBPUAog T1NBUGVyR3JvdXBTdGF0ZQorT3JDbGF1c2VHcm91cAogT1NBUGVyUXVlcnlTdGF0ZQogT1NJ bmZvCiBPU1NMQ2lwaGVyCi0tIAoyLjM0LjEKCg== --------------JN2IJS0Fazz1QocpFcZXNWzS Content-Type: text/x-patch; charset=UTF-8; name="v26-0002-Add-some-new-tests-to-check-the-functionality-of.patch" Content-Disposition: attachment; filename*0="v26-0002-Add-some-new-tests-to-check-the-functionality-of.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4YWZhMzdlMDg0M2IyY2U4Y2M4YWNiMjNlNDM1YTZiYjFkOTJjYzQ0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogVGh1LCAxMSBKdWwgMjAyNCAxOTowODoxNyArMDMwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSBBZGQgc29tZSBuZXcgdGVzdHMgdG8gY2hlY2sgdGhlIGZ1bmN0 aW9uYWxpdHkgb2YKIHRyYW5zZm9ybWF0aW9uIG9mIE9SIGV4cHJlc3Npb25zIHRvIEFueSBl eHByZXNzaW9uLgoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3Fs IHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9qb2luLnNxbCAgICAgICAgIHwgIDkgKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDUxIGlu c2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVf aW5kZXguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRl eCBlMjk2ODkxY2FiOC4uZjc0YWQ0MTVmYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3Jl YXRlX2luZGV4LnNxbApAQCAtNzI2LDYgKzcyNiwyNCBAQCBEUk9QIFRBQkxFIG9uZWtfd2l0 aF9udWxsOwogLS0gQ2hlY2sgYml0bWFwIGluZGV4IHBhdGggcGxhbm5pbmcKIC0tCiAKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNh bmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMgT1IgdGVudGhvdXMg PSA0Mik7CitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3VzYW5kID0gNDIgQU5E ICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzIE9SIHRlbnRob3VzID0gNDIpOworCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3Vz YW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAoU0VMRUNUIDEgKyAy KSBPUiB0ZW50aG91cyA9IDQyKTsKK1NFTEVDVCAqIEZST00gdGVuazEKKyAgV0hFUkUgdGhv dXNhbmQgPSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IChTRUxFQ1QgMSAr IDIpIE9SIHRlbnRob3VzID0gNDIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg Y291bnQoKikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2Fu ZCA9IDQyIE9SIHRob3VzYW5kID0gOTkpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEK KyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPSA0MiBPUiB0aG91c2FuZCA9 IDk5KTsKKwogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSB0ZW5rMQogICBX SEVSRSB0aG91c2FuZCA9IDQyIEFORCAodGVudGhvdXMgPSAxIE9SIHRlbnRob3VzID0gMyBP UiB0ZW50aG91cyA9IDQyKTsKQEAgLTczOCw2ICs3NTYsMzAgQEAgU0VMRUNUIGNvdW50KCop IEZST00gdGVuazEKIFNFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCiAgIFdIRVJFIGh1bmRy ZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQgPSA5OSk7CiAKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIGh1 bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kIDwgNDIgT1IgdGhvdXNhbmQgPCA5OSBPUiA0MyA+ IHRob3VzYW5kIE9SIDQyID4gdGhvdXNhbmQpOworU0VMRUNUIGNvdW50KCopIEZST00gdGVu azEKKyAgV0hFUkUgaHVuZHJlZCA9IDQyIEFORCAodGhvdXNhbmQgPCA0MiBPUiB0aG91c2Fu ZCA8IDk5IE9SIDQzID4gdGhvdXNhbmQgT1IgNDIgPiB0aG91c2FuZCk7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsxCisgIFdIRVJFIHRob3Vz YW5kID0gNDIgQU5EICh0ZW50aG91cyA9IDEgT1IgdGVudGhvdXMgPSAzKSBPUiB0aG91c2Fu ZCA9IDQxOworU0VMRUNUIGNvdW50KCopIEZST00gdGVuazEKKyAgV0hFUkUgdGhvdXNhbmQg PSA0MiBBTkQgKHRlbnRob3VzID0gMSBPUiB0ZW50aG91cyA9IDMpIE9SIHRob3VzYW5kID0g NDE7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlbmsx CisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1IgdGhvdXNhbmQg PSA5OSBPUiB0ZW50aG91cyA8IDIpIE9SIHRob3VzYW5kID0gNDE7CitTRUxFQ1QgY291bnQo KikgRlJPTSB0ZW5rMQorICBXSEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQy IE9SIHRob3VzYW5kID0gOTkgT1IgdGVudGhvdXMgPCAyKSBPUiB0aG91c2FuZCA9IDQxOwor CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5rMQorICBX SEVSRSBodW5kcmVkID0gNDIgQU5EICh0aG91c2FuZCA9IDQyIE9SIHRob3VzYW5kID0gNDEg T1IgdGhvdXNhbmQgPSA5OSBBTkQgdGVudGhvdXMgPSAyKTsKK1NFTEVDVCBjb3VudCgqKSBG Uk9NIHRlbmsxCisgIFdIRVJFIGh1bmRyZWQgPSA0MiBBTkQgKHRob3VzYW5kID0gNDIgT1Ig dGhvdXNhbmQgPSA0MSBPUiB0aG91c2FuZCA9IDk5IEFORCB0ZW50aG91cyA9IDIpOworCiAt LQogLS0gQ2hlY2sgYmVoYXZpb3Igd2l0aCBkdXBsaWNhdGUgaW5kZXggY29sdW1uIGNvbnRl bnRzCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAppbmRleCBlM2QyNjUyMDgzMi4uY2YwMmNj MzRlZDAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCkBAIC0xNDA5LDYgKzE0MDksMTUgQEAg c2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgogICAoYS51bmlxdWUxID0g MSBhbmQgYi51bmlxdWUxID0gMikgb3IKICAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVl MiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKIAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2Vs ZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgorICAoYS51bmlxdWUxID0gMSBh bmQgYi51bmlxdWUxID0gMikgb3IKKyAgKChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9 IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAq IGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KKyAgKGEudW5pcXVlMSA8IDIwIG9yIGEu dW5pcXVlMSA9IDMgb3IgYS51bmlxdWUxID0gMSBhbmQgYi51bmlxdWUxID0gMikgb3IKKyAg KChhLnVuaXF1ZTIgPSAzIG9yIGEudW5pcXVlMiA9IDcpIGFuZCBiLmh1bmRyZWQgPSA0KTsK KwogLS0KIC0tIHRlc3QgcGxhY2VtZW50IG9mIG1vdmFibGUgcXVhbHMgaW4gYSBwYXJhbWV0 ZXJpemVkIGpvaW4gdHJlZQogLS0KLS0gCjIuMzQuMQoK --------------JN2IJS0Fazz1QocpFcZXNWzS--