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.96) (envelope-from ) id 1vkjDX-001McD-31 for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Jan 2026 13:34:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vkjDW-00DxSO-04 for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Jan 2026 13:34:50 +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.96) (envelope-from ) id 1vkjDV-00DxS9-0U for pgsql-hackers@lists.postgresql.org; Tue, 27 Jan 2026 13:34:49 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vkjDN-002ZOt-2x for pgsql-hackers@lists.postgresql.org; Tue, 27 Jan 2026 13:34:48 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-47ff94b46afso49956155e9.1 for ; Tue, 27 Jan 2026 05:34:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769520880; cv=none; d=google.com; s=arc-20240605; b=AQ6Asgxs7/noJJqR07qoe7oPuFYdMs9m5FLAPe5l+DNH3gcgAodIT4IuNvDQVafNuo ZbBS73AmcQYAzgb2EHd14MYbZfiJODawbzWmIX06yi3jajtNLXol3/1ymkYOaFpklPuM bywb570zlvQo2jgbFaooEGB1jpcjefT9CiO1UczmKUU5qlkj2qvIxIO3WE82WcZyuEDE uqu5uY11XvZR80Pi4GYdyCurXtOuiIjbChEObLdllMMIK/nPCYydEuMz/JEsA+CLvvCS FgWVogSucPaiJrA6liHPBdeO3rJYhcvhQnuxSs2oAfYN8uvjHjipjSpfB6UcqKfJA3+j gbfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=SW17PUJUfHH3nIF6YdocN5sZkR2dnBARbB98ebO7chY=; fh=AI7O6kYQpLKmflQKUGjZ5+WQCxEO1+GgFzjhziIkdH0=; b=ErBOg+H9ceBU1jQghPuxcxMQxfswhh09CNpbnzov3yu0TRi7l8mGzdAfO/7tj+E9qA wR7EDiZq9z48n4+TqDAJcXTgaM8xbnTNw9IqpftsUACvp6cVeMIykh9PCOtK/yxc8hM7 Au1I1S0l6YaGmoZ/+wf4uxCVMO1FudXbUy39X74Ji4eBOw++U3ZZU/Mw6ThM+1thngij Vufaq+xcr9RJh9s3VuL2dw7oejOm9uaa5vBnCw4HB3KAyMfFXZby4QivjOwQ9ifVu/h6 0FPL7ujwvqRqiKJvDPyqfD6gkWDtg8oq+wPuCf/Ue0XXzFc16XIXgW8WeoE4Hl+XvNr6 NHJQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769520880; x=1770125680; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SW17PUJUfHH3nIF6YdocN5sZkR2dnBARbB98ebO7chY=; b=GLM7KGiOC0ycB3uOicPH2LkZttaaBHfnz/vqe6b5JmReMb0NpkscD91QiWJ5XBwmwv nw2fUKsykgJzSJ/QD13+nPh83C0LY0QyYwFFgYbP32mpcUKVFTt7Jirz+FZxiPAdYsIP hmGrxI3JGSiLwvD1iSDNicY/4tWwSXYXYZH36v5edVSC6kmVs35qSMLtZwR6CXVDJtxQ 2eI4+EOFA7swEVXZBCV34ie/laT8+7atfJP8216hn1oqqw7DwAZ0hqcxYtuDZZvbqVoW KowQf1WapYgV1220FuyXnbnkP7RA2EGOKMQVWlhofuKc4Z/+pNwWFGOpI4+RWg0INJAN 4Itg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769520880; x=1770125680; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=SW17PUJUfHH3nIF6YdocN5sZkR2dnBARbB98ebO7chY=; b=t0EEyxmpgMtPvWcYxXoBsq5fKwhA3HF892Um9dy20EU7y29C3a0uAnU7VOBiMzGf51 Tbb6A2ZM6Yn0KTYiy38NrFsJP6eVZ5Lb7eUUro9a89sYFVVPOoG5RGMJ83aQya0JhBVK R5r39UxxHckUDkaNoAW/EhgCg/6n7Zonf7kDFMFp4IAPZVGTX9sZE7MiDrSiCWhFHBGu NgbW1CO6u0wfB9gcw9s+YtnMMmt/5wakEGD6I3lG1RZm3eHJuNRG21mm7AhfTel2wuA+ QdljqwXu5NKGcKllQuC1F4b+rX2Sl9qq/yf++in/vHjTOAWRkodOtC+0QH6Gcrrc4GeZ RbCw== X-Forwarded-Encrypted: i=1; AJvYcCVaqrd6mH8gVs0XZ0lOU7LbIB1q1rwIsHeuoREBcw83Xr451tBRqDhq2FLVAEsqEN3znYDQH53FOnkJa0nA@lists.postgresql.org X-Gm-Message-State: AOJu0YwWgu168N/ws/+hGPWzXHr7iGxETxqpW5XZ55yqIqM81Z/Zu4yH hKHp53+YBHi3POWJJla0aPRHmzsXkk0rk0sqP7QIwjrzjT+Iclc9BVHDD9yg64tmIFKIu9y+61B OWCUmjL5yjt4QXQNTf8uVtCgu8LylPRQ= X-Gm-Gg: AZuq6aKIv3x45nuzgrOiBVAQ3sHQOUd0tbiULAkJoevwWNtfiJs7/So/I3wB+JF203P 0xNhQSDmw0kXmLCUBlD0dOpFt0nlQF1qxnWEBfQXfEJ5qwzPdP7fwNhiuR87+XRzWJ4TD0O1jlj A0o+Mc0X9y+aRLGQuCa4gewY57QCVyRAG9A/4HTVpi+sNEyuMaGFPIgsNS3/FUX3UDZTTjBZiVW qrCWKkXjzbGcdeonRNqTei66zNc/tXtACWby9SCXEGt4QBH1o7mzUNu/cv8I8AUX+6hvTOXr4sW De/Y7cbU20hndITqZ1O3lKl2EQbQwfOwONGf3nYkht3gmRTFtDp+FbzcDUte X-Received: by 2002:a05:600c:608e:b0:477:9e0c:f59 with SMTP id 5b1f17b1804b1-48069e24017mr20443375e9.2.1769520879492; Tue, 27 Jan 2026 05:34:39 -0800 (PST) MIME-Version: 1.0 References: <9A17C43D-7A28-4885-8974-555A40C9523E@gmail.com> In-Reply-To: From: David Rowley Date: Wed, 28 Jan 2026 02:34:26 +1300 X-Gm-Features: AZwV_QiXCIP1T0MlSykl6EER9PtwgKf6gIhXRwchFGy-7fheQ07xOLhXTaFdc88 Message-ID: Subject: Re: More speedups for tuple deformation To: Andres Freund Cc: Chao Li , PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000007232f506495eaf62" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007232f506495eaf62 Content-Type: text/plain; charset="UTF-8" On Sat, 24 Jan 2026 at 05:33, Andres Freund wrote: > I wonder if it's worth writing a C helper to test deformation in a bit more > targeted way. Good idea. I've written a test module called "deform_bench". You can do: "select deform_bench('tablename'::regclass, '{10,20}');" which will deform up to attnum=10, then in a 2nd pass deform up to attnum=20. This is in the 0003 patch. (Requires "ninja install-test-files"). 0003 is intended for testing, not commit. There are also 2 scripts attached, one which sets up all the tables for the benchmark, and one to run it. This saves creating the same tables again when trying other branches or compilers. I've also included a slightly revised patch. I made a small change to the first_null_attr() to get rid of the masking of higher attnums and also now making use of __builtin_ctz to find the first NULL attnum in the byte. For compilers that don't support that, I've included a pg_rightmost_*zero*_pos table. I didn't want to use the pg_bitutils table for the rightmost *one* pos as it meant having to special-case what happens when using index 255, as that would return 0, and I want 8. I'll make the MSVC version use _BitScanForward() in the next patch. Using __builtin_ctz() seems to help reduce the small regression I was seeing with the 0 extra column test. It's still there, but it is very small. It's more pronounced because of the deform_bench module due to the reduction of the other execution overheads. Technically, the first_null_attr() function *could* contain slightly fewer checks. It should be guaranteed that we'll find a byte not set to 255, as there wouldn't be a bitmask there if there were no 0s. So technically, the first for loop could be a while (byte[bytenum] == 0xFF) bytenum++;. I just felt that might be too dangerous to do that as the code would walk off the end of the bitmask if the tuple was corrupted in the right way. With the reduced overhead using deform_bench, the Apple M2 results are looking quite good. Test 5 with 20 extra columns is 128% faster than master and averages ~25% faster than master over all tests. My results are in the attached spreadsheet. David --0000000000007232f506495eaf62 Content-Type: text/plain; charset="US-ASCII"; name="deform_test_setup.sh.txt" Content-Disposition: attachment; filename="deform_test_setup.sh.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwl44o23 IyEvYmluL2Jhc2gKCmRibmFtZT1wb3N0Z3JlcwpzZWNzPTEwCnJvd3M9MTAwMDAwMApleHRyYV9j b2xzX3N0YXJ0PTAKZXh0cmFfY29sc19lbmQ9NDAKZXh0cmFfY29sc19pbmNyZW1lbnQ9MTAKcHNx bCAtYyAiYWx0ZXIgc3lzdGVtIHNldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0g MDsiICRkYm5hbWUKcHNxbCAtYyAiYWx0ZXIgc3lzdGVtIHNldCBqaXQgPSAwOyIgJGRibmFtZQpw c3FsIC1jICJzZWxlY3QgcGdfcmVsb2FkX2NvbmYoKTsiICRkYm5hbWUKcHNxbCAtYyAiY3JlYXRl IGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzIHBnX3ByZXdhcm07IiAkZGJuYW1lCnBzcWwgLWMgImNy ZWF0ZSBleHRlbnNpb24gaWYgbm90IGV4aXN0cyBkZWZvcm1fYmVuY2g7IiAkZGJuYW1lCnBzcWwg LWMgImNyZWF0ZSB0YWJsZSBpZiBub3QgZXhpc3RzIGRlZm9ybV9yZXN1bHRzIChtYWNoaW5lIHRl eHQgbm90IG51bGwsIGNjIHRleHQgbm90IG51bGwsIGJyYW5jaCB0ZXh0IG5vdCBudWxsLCB0ZXN0 X2lkIGludCBub3QgbnVsbCwgZXh0cmFfY29sdW1ucyBpbnQgbm90IG51bGwsIHJ1bl9pZCBpbnQg bm90IG51bGwsIG1pbGxpc2Vjb25kcyBmbG9hdDQgbm90IE5VTEwpOyIgJGRibmFtZQoKdGVzdF9p ZD0xCgpmb3IgZXh0cmFjb2wgaW4gIiwgYiBpbnQgbm90IG51bGwgZGVmYXVsdCAwIiAiLCBiIGlu dCBkZWZhdWx0IG51bGwiCmRvCglmb3IgZmlyc3Rjb2wgaW4gImMgaW50IG5vdCBudWxsIGRlZmF1 bHQgMCIgImMgdGV4dCBub3QgbnVsbCBkZWZhdWx0ICcwJyIgImMgaW50IG51bGwiICJjIHRleHQg bnVsbCIKCWRvCgkJZm9yIGMgaW4gJChzZXEgJGV4dHJhX2NvbHNfc3RhcnQgJGV4dHJhX2NvbHNf aW5jcmVtZW50ICRleHRyYV9jb2xzX2VuZCkKCQlkbwoJCQl0YWJsZW5hbWU9InRfJHt0ZXN0X2lk fV8ke2N9IgoJCQlwc3FsIC1jICJkcm9wIHRhYmxlIGlmIGV4aXN0cyAkdGFibGVuYW1lIiAkZGJu YW1lCgkJCXNxbD0iY3JlYXRlIHRhYmxlICR0YWJsZW5hbWUgKCRmaXJzdGNvbCIKCQkJZm9yIGkg aW4gJChzZXEgMCAkYykKCQkJZG8KCQkJCXNxbD0iJHNxbCxjJGkgaW50IG5vdCBudWxsIGRlZmF1 bHQgMCIKCQkJZG9uZQoJCQlzcWw9IiRzcWwsYSBpbnQgbm90IG51bGwkZXh0cmFjb2wpOyIKCQkJ cHNxbCAtYyAiJHNxbCIgJGRibmFtZQoKCQkJcHNxbCAtYyAiaW5zZXJ0IGludG8gJHRhYmxlbmFt ZSAoYSkgc2VsZWN0IGEgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwkcm93cykgYTsiICRkYm5hbWUK CQkJcHNxbCAtYyAidmFjdXVtIGZyZWV6ZSBhbmFseXplICR0YWJsZW5hbWU7IiAkZGJuYW1lCgkJ ZG9uZQoJCWxldCAidGVzdF9pZD10ZXN0X2lkKzEiCglkb25lCmRvbmUKCnBzcWwgLWMgImNoZWNr cG9pbnQ7IiAkZGJuYW1lCg== --0000000000007232f506495eaf62 Content-Type: text/plain; charset="US-ASCII"; name="deform_test_run.sh.txt" Content-Disposition: attachment; filename="deform_test_run.sh.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwl48ya4 IyEvYmluL2Jhc2gKCmRibmFtZT1wb3N0Z3JlcwoKIyBNdXN0IG1hdGNoIHdoYXQgd2FzIHVzZWQg aW4gdGhlIHRlc3Qgc2V0dXAgc2NyaXB0CmV4dHJhX2NvbHNfc3RhcnQ9MApleHRyYV9jb2xzX2Vu ZD00MApleHRyYV9jb2xzX2luY3JlbWVudD0xMAoKIyBIb3cgbWFueSB0aW1lcyB0byBydW4gZWFj aCB0ZXN0LiAgMTAgLSAxMDAgaXMgcHJvYmFibHkgZ29vZApudW1iZXJfb2ZfcnVucz0xMAoKbWU9 JChiYXNlbmFtZSAiJDAiKQppZiBbICQjIC1sdCAzIF0KICB0aGVuCiAgICBlY2hvICJTeW50YXg6 IC4vJG1lIDxtYWNoaW5lIG5hbWU+IDxuYW1lIG9mIGNvbXBpbGVyIHlvdSB1c2VkPiA8YnJhbmNo IG5hbWU+ICIKCWV4aXQgMQpmaQoKbWFjaGluZT0kMQpjb21waWxlcj0kMgpicmFuY2g9JDMKCnBz cWwgLWMgInRydW5jYXRlIHRhYmxlIGRlZm9ybV9yZXN1bHRzOyIgJGRibmFtZQplY2hvICJSZXN1 bHRzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBkZWZvcm1fcmVzdWx0cyB0YWJsZSIKZWNobyAtbiAi UnVubmluZyB0ZXN0cy4uLiIKZm9yIHRlc3RfaWQgaW4gezEuLjh9CmRvCglmb3IgYyBpbiAkKHNl cSAkZXh0cmFfY29sc19zdGFydCAkZXh0cmFfY29sc19pbmNyZW1lbnQgJGV4dHJhX2NvbHNfZW5k KQoJZG8KCQlsZXQgImRlZm9ybV9hdHRudW09YyszIgoJCXRhYmxlbmFtZT0idF8ke3Rlc3RfaWR9 XyR7Y30iCgkJZWNobyAtbmUgIlxyUnVubmluZyB0ZXN0ICR0ZXN0X2lkIG9mIDggd2l0aCAkYyBl eHRyYSBjb2x1bW5zLi4uIgoJCXBzcWwgLWMgInNlbGVjdCBwZ19wcmV3YXJtKCckdGFibGVuYW1l Jyk7IGluc2VydCBpbnRvIGRlZm9ybV9yZXN1bHRzIChtYWNoaW5lLCBjYywgYnJhbmNoLCB0ZXN0 X2lkLCBleHRyYV9jb2x1bW5zLCBydW5faWQsIG1pbGxpc2Vjb25kcykgc2VsZWN0ICcke21hY2hp bmV9JywnJHtjb21waWxlcn0nLCcke2JyYW5jaH0nLCR7dGVzdF9pZH0sJHtjfSxydW5faWQsZGVm b3JtX2JlbmNoKCckdGFibGVuYW1lJzo6cmVnY2xhc3MsICd7JGRlZm9ybV9hdHRudW19JykgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSwkbnVtYmVyX29mX3J1bnMpIHJ1bl9pZDsiICRkYm5hbWUgPiAv ZGV2L251bGwKCWRvbmUKZG9uZQplY2hvICIiCmVjaG8gIiIKZWNobyAiVGhlIHJlc3VsdHMgYXJl OiIKcHNxbCAtLWNzdiAtYyAic2VsZWN0IGJyYW5jaCx0ZXN0X2lkLGV4dHJhX2NvbHVtbnMscm91 bmQoYXZnKG1pbGxpc2Vjb25kcyk6Om51bWVyaWMsMikgYXZnX21zLHN0ZGRldihtaWxsaXNlY29u ZHMpIEFTIHN0ZGRldiBmcm9tIGRlZm9ybV9yZXN1bHRzIHdoZXJlIG1hY2hpbmUgPSAnJG1hY2hp bmUnIGFuZCBjYz0nJGNvbXBpbGVyJyBhbmQgYnJhbmNoPSckYnJhbmNoJyBncm91cCBieSAxLDIs MyBvcmRlciBieSAzLDEsMjsiICRkYm5hbWU= --0000000000007232f506495eaf62 Content-Type: text/plain; charset="US-ASCII"; name="v6-0001-Add-empty-TupleDescFinalize-function.patch" Content-Disposition: attachment; filename="v6-0001-Add-empty-TupleDescFinalize-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwm8x213 RnJvbSBjZDAzNmNlMmMwOTk4MmRhYzViZThiZGI3MjgzZTg3NzJkNzQ2OGQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMSBKYW4gMjAyNiAxNTo0MTozNyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjYgMS8z XSBBZGQgZW1wdHkgVHVwbGVEZXNjRmluYWxpemUoKSBmdW5jdGlvbgoKQ3VycmVudGx5IGRvZXMg bm90aGluZywgYnV0IHdpbGwgaW4gYSBmdXR1cmUgY29tbWl0LgotLS0KIGNvbnRyaWIvZGJsaW5r L2RibGluay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICsrKysKIGNvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyAgICAgICB8ICAyICsrCiBjb250 cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jICAgICAgICAgICAgICAgfCAgMiArKwog c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jICAgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMgICAgICAgICAgICAgICAgIHwg MTMgKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAg ICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYyAg ICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGls cy5jICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdv cGhhc2UuYyAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ2Z1bmNzLmMgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2Vi YWNrdXBfY29weS5jICAgICAgICAgICAgICAgIHwgIDMgKysrCiBzcmMvYmFja2VuZC9jYXRhbG9n L2luZGV4LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwogc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQv Y2F0YWxvZy90b2FzdGluZy5jICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBzcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBz cmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyAgICAgICAgICAgICAgICAgfCAgMSAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgICAgICAgICAgfCAg MSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgICAgICAg fCAgNCArKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjU1JGLmMgICAgICAgICAgICAg ICAgICAgICAgfCAgMiArKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICAg ICAgICAgICAgICAgIHwgIDQgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUZ1bmN0aW9u c2Nhbi5jICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxh dGlvbi5jICAgICAgICAgICAgICAgICB8ICA0ICsrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV90YXJnZXQuYyAgICAgICAgICAgICAgICAgICB8ICAyICsrCiAuLi4vcmVwbGljYXRpb24vbGli cHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMgfCAgMSArCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAgICAgICAgICAgfCAgNSArKysrKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2FjbC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYyAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jICAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMgICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgICAgICAgICAgICAgICAgIHwg IDUgKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jICAgICAgICAgICAg ICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAg ICAgICAgICB8ICA4ICsrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9mbWdyL2Z1bmNhcGkuYyAg ICAgICAgICAgICAgICAgICAgfCAgNiArKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X2Z1bmNzLmMgICAgICAgICAgICAgICAgICB8ICA1ICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv dHVwZGVzYy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvcGwvcGxwZ3NxbC9z cmMvcGxfY29tcC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwogLi4uL3Rlc3RfY3Vz dG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMgICAgIHwgIDEgKwogc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYyAgICAgIHwgIDEgKwogMzkgZmls ZXMgY2hhbmdlZCwgMTAwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQg YS9jb250cmliL2RibGluay9kYmxpbmsuYyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCmluZGV4 IDhjYjMxNjY0OTVjLi4xY2U0NTAyZmVjMiAxMDA2NDQKLS0tIGEvY29udHJpYi9kYmxpbmsvZGJs aW5rLmMKKysrIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMKQEAgLTg4MSw2ICs4ODEsNyBAQCBt YXRlcmlhbGl6ZVJlc3VsdChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgUEdjb25uICpjb25uLCBQ R3Jlc3VsdCAqcmVzKQogCQl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJ CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1cyIsCiAJ CQkJCQkgICBURVhUT0lELCAtMSwgMCk7CisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CQludHVwbGVzID0gMTsKIAkJbmZpZWxkcyA9IDE7CiAJfQpAQCAtMTA0NCw2ICsxMDQ1LDcgQEAg bWF0ZXJpYWxpemVRdWVyeVJlc3VsdChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCXR1cGRl c2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsKIAkJCVR1cGxlRGVzY0luaXRFbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInN0YXR1cyIsCiAJCQkJCQkJICAgVEVYVE9JRCwgLTEs IDApOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCQlhdHRpbm1ldGEgPSBUdXBs ZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOwogCiAJCQlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHJzaW5mby0+ZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5X21lbW9yeSk7 CkBAIC0xNTI5LDYgKzE1MzEsOCBAQCBkYmxpbmtfZ2V0X3BrZXkoUEdfRlVOQ1RJT05fQVJHUykK IAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAiY29sbmFtZSIs CiAJCQkJCQkgICBURVhUT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVz Yyk7CisKIAkJLyoKIAkJICogR2VuZXJhdGUgYXR0cmlidXRlIG1ldGFkYXRhIG5lZWRlZCBsYXRl ciB0byBwcm9kdWNlIHR1cGxlcyBmcm9tIHJhdwogCQkgKiBDIHN0cmluZ3MKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFnZXMuYwppbmRleCA4OWI4Njg1NTI0My4u YTZiNGZiNTI1MmIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVy Y2FjaGVfcGFnZXMuYworKysgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hl X3BhZ2VzLmMKQEAgLTE3NCw2ICsxNzQsNyBAQCBwZ19idWZmZXJjYWNoZV9wYWdlcyhQR19GVU5D VElPTl9BUkdTKQogCQkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDksICJwaW5uaW5nX2JhY2tlbmRzIiwKIAkJCQkJCQkgICBJTlQ0T0lELCAtMSwgMCk7CiAKKwkJ VHVwbGVEZXNjRmluYWxpemUodHVwbGVkZXNjKTsKIAkJZmN0eC0+dHVwZGVzYyA9IEJsZXNzVHVw bGVEZXNjKHR1cGxlZGVzYyk7CiAKIAkJLyogQWxsb2NhdGUgTkJ1ZmZlcnMgd29ydGggb2YgQnVm ZmVyQ2FjaGVQYWdlc1JlYyByZWNvcmRzLiAqLwpAQCAtNDQyLDYgKzQ0Myw3IEBAIHBnX2J1ZmZl cmNhY2hlX29zX3BhZ2VzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGlu Y2x1ZGVfbnVtYSkKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGxlZGVzYywgKEF0dHJOdW1iZXIp IDMsICJudW1hX25vZGUiLAogCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGxlZGVzYyk7CiAJCWZjdHgtPnR1cGRlc2MgPSBCbGVzc1R1cGxlRGVzYyh0 dXBsZWRlc2MpOwogCQlmY3R4LT5pbmNsdWRlX251bWEgPSBpbmNsdWRlX251bWE7CiAKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgYi9jb250cmliL3Bn X3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IDliYzNhNzg0YmY3Li5kZmFiMGI2NGNm NSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYworKysg Yi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBAIC00NjksNiArNDY5LDgg QEAgcGdfdmlzaWJpbGl0eV90dXBkZXNjKGJvb2wgaW5jbHVkZV9ibGtubywgYm9vbCBpbmNsdWRl X3BkKQogCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKythLCAicGRfYWxsX3Zpc2libGUi LCBCT09MT0lELCAtMSwgMCk7CiAJQXNzZXJ0KGEgPT0gbWF4YXR0cik7CiAKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKKwogCXJldHVybiBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIH0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jCmluZGV4IDcwNjM4N2UzNmQ2Li43ZjE1 MGRmOWVlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwpAQCAtODQsNiArODQs NyBAQCBicnR1cGxlX2Rpc2tfdHVwZGVzYyhCcmluRGVzYyAqYnJkZXNjKQogCiAJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CQlicmRlc2MtPmJkX2Rpc2t0ZGVzYyA9IHR1cGRlc2M7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21t b24vdHVwZGVzYy5jCmluZGV4IDk0YjRmMWY5OTc1Li5lOThkZTgwNmE3NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi90dXBkZXNjLmMKQEAgLTIzOCw2ICsyMzgsOSBAQCBDcmVhdGVUdXBsZURlc2Mo aW50IG5hdHRzLCBGb3JtX3BnX2F0dHJpYnV0ZSAqYXR0cnMpCiAJCW1lbWNweShUdXBsZURlc2NB dHRyKGRlc2MsIGkpLCBhdHRyc1tpXSwgQVRUUklCVVRFX0ZJWEVEX1BBUlRfU0laRSk7CiAJCXBv cHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKGRlc2MsIGkpOwogCX0KKworCVR1cGxlRGVzY0ZpbmFs aXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTI4Miw2ICsyODUsOCBAQCBDcmVh dGVUdXBsZURlc2NDb3B5KFR1cGxlRGVzYyB0dXBkZXNjKQogCWRlc2MtPnRkdHlwZWlkID0gdHVw ZGVzYy0+dGR0eXBlaWQ7CiAJZGVzYy0+dGR0eXBtb2QgPSB0dXBkZXNjLT50ZHR5cG1vZDsKIAor CVR1cGxlRGVzY0ZpbmFsaXplKGRlc2MpOworCiAJcmV0dXJuIGRlc2M7CiB9CiAKQEAgLTMyOCw2 ICszMzMsOCBAQCBDcmVhdGVUdXBsZURlc2NUcnVuY2F0ZWRDb3B5KFR1cGxlRGVzYyB0dXBkZXNj LCBpbnQgbmF0dHMpCiAJZGVzYy0+dGR0eXBlaWQgPSB0dXBkZXNjLT50ZHR5cGVpZDsKIAlkZXNj LT50ZHR5cG1vZCA9IHR1cGRlc2MtPnRkdHlwbW9kOwogCisJVHVwbGVEZXNjRmluYWxpemUoZGVz Yyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApAQCAtNDEzLDYgKzQyMCw4IEBAIENyZWF0ZVR1cGxl RGVzY0NvcHlDb25zdHIoVHVwbGVEZXNjIHR1cGRlc2MpCiAJZGVzYy0+dGR0eXBlaWQgPSB0dXBk ZXNjLT50ZHR5cGVpZDsKIAlkZXNjLT50ZHR5cG1vZCA9IHR1cGRlc2MtPnRkdHlwbW9kOwogCisJ VHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1cm4gZGVzYzsKIH0KIApAQCAtNDU1LDYg KzQ2NCw4IEBAIFR1cGxlRGVzY0NvcHkoVHVwbGVEZXNjIGRzdCwgVHVwbGVEZXNjIHNyYykKIAkg KiBzb3VyY2UncyByZWZjb3VudCB3b3VsZCBiZSB3cm9uZyBpbiBhbnkgY2FzZS4pCiAJICovCiAJ ZHN0LT50ZHJlZmNvdW50ID0gLTE7CisKKwlUdXBsZURlc2NGaW5hbGl6ZShkc3QpOwogfQogCiAv KgpAQCAtMTA4Miw2ICsxMDkzLDggQEAgQnVpbGREZXNjRnJvbUxpc3RzKGNvbnN0IExpc3QgKm5h bWVzLCBjb25zdCBMaXN0ICp0eXBlcywgY29uc3QgTGlzdCAqdHlwbW9kcywgY28KIAkJVHVwbGVE ZXNjSW5pdEVudHJ5Q29sbGF0aW9uKGRlc2MsIGF0dG51bSwgYXR0Y29sbGF0aW9uKTsKIAl9CiAK KwlUdXBsZURlc2NGaW5hbGl6ZShkZXNjKTsKKwogCXJldHVybiBkZXNjOwogfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCmluZGV4IGQyMDUwOTNlMjFkLi5hNTMzZDc5ZTI2ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW51dGlsLmMKQEAgLTEyOSw2ICsxMjksNyBAQCBpbml0R2luU3RhdGUoR2luU3Rh dGUgKnN0YXRlLCBSZWxhdGlvbiBpbmRleCkKIAkJCQkJCQkgICBhdHRyLT5hdHRuZGltcyk7CiAJ CQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24oc3RhdGUtPnR1cGRlc2NbaV0sIChBdHRyTnVt YmVyKSAyLAogCQkJCQkJCQkJCWF0dHItPmF0dGNvbGxhdGlvbik7CisJCQlUdXBsZURlc2NGaW5h bGl6ZShzdGF0ZS0+dHVwZGVzY1tpXSk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3RzY2FuLmMKaW5kZXggZjIzYmM0YTY3NTcuLmM2NWY5M2FiZGFlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3RzY2FuLmMKQEAgLTIwMSw2ICsyMDEsNyBAQCBnaXN0cmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBrZXksIGludCBua2V5cywKIAkJCQkJCQkJCQkJIGF0dG5vIC0gMSkt PmF0dHR5cGlkLAogCQkJCQkJCSAgIC0xLCAwKTsKIAkJfQorCQlUdXBsZURlc2NGaW5hbGl6ZShz by0+Z2lzdHN0YXRlLT5mZXRjaFR1cGRlc2MpOwogCQlzY2FuLT54c19oaXR1cGRlc2MgPSBzby0+ Z2lzdHN0YXRlLT5mZXRjaFR1cGRlc2M7CiAKIAkJLyogQWxzbyBjcmVhdGUgYSBtZW1vcnkgY29u dGV4dCB0aGF0IHdpbGwgaG9sZCB0aGUgcmV0dXJuZWQgdHVwbGVzICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggOWY1Mzc5Yjg3YWMuLmIyNDZlODEyN2RiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC0zNDAsNiArMzQwLDcgQEAgZ2V0U3BHaXN0 VHVwbGVEZXNjKFJlbGF0aW9uIGluZGV4LCBTcEdpc3RUeXBlRGVzYyAqa2V5VHlwZSkKIAkJCVR1 cGxlRGVzY0NvbXBhY3RBdHRyKG91dFR1cERlc2MsIGkpLT5hdHRjYWNoZW9mZiA9IC0xOwogCiAJ CXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKG91dFR1cERlc2MsIHNwZ0tleUNvbHVtbik7CisJ CVR1cGxlRGVzY0ZpbmFsaXplKG91dFR1cERlc2MpOwogCX0KIAlyZXR1cm4gb3V0VHVwRGVzYzsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IGU1MGFiYjMzMWNjLi45 ZjcwOGY4NDMzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhh c2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCkBAIC03NDQs NiArNzQ0LDcgQEAgcGdfcHJlcGFyZWRfeGFjdChQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURl c2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDUsICJkYmlkIiwKIAkJCQkJCSAgIE9J RE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQlmdW5jY3R4 LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkJLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKaW5kZXggMmVmZTQxMDVlZmIuLmI2YmM2MTZjNzRj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwpAQCAtNDAwLDYgKzQwMCw3 IEBAIHBnX3dhbGZpbGVfbmFtZV9vZmZzZXQoUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2NJ bml0RW50cnkocmVzdWx0VHVwbGVEZXNjLCAoQXR0ck51bWJlcikgMiwgImZpbGVfb2Zmc2V0IiwK IAkJCQkJICAgSU5UNE9JRCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUocmVzdWx0VHVw bGVEZXNjKTsKIAlyZXN1bHRUdXBsZURlc2MgPSBCbGVzc1R1cGxlRGVzYyhyZXN1bHRUdXBsZURl c2MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2Nv cHkuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX2NvcHkuYwppbmRleCBmZWNmYWQ5 YWI3Yi4uMjlkYmQwY2IzMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFj a3VwX2NvcHkuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9jb3B5LmMKQEAg LTM1Nyw2ICszNTcsOCBAQCBTZW5kWGxvZ1JlY1B0clJlc3VsdChYTG9nUmVjUHRyIHB0ciwgVGlt ZUxpbmVJRCB0bGkpCiAJICovCiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAo QXR0ck51bWJlcikgMiwgInRsaSIsIElOVDhPSUQsIC0xLCAwKTsKIAorCVR1cGxlRGVzY0ZpbmFs aXplKHR1cGRlc2MpOworCiAJLyogc2VuZCBSb3dEZXNjcmlwdGlvbiAqLwogCXRzdGF0ZSA9IGJl Z2luX3R1cF9vdXRwdXRfdHVwZGVzYyhkZXN0LCB0dXBkZXNjLCAmVFRTT3BzVmlydHVhbCk7CiAK QEAgLTM4OCw2ICszOTAsNyBAQCBTZW5kVGFibGVzcGFjZUxpc3QoTGlzdCAqdGFibGVzcGFjZXMp CiAJVHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInNw Y29pZCIsIE9JRE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVz YywgKEF0dHJOdW1iZXIpIDIsICJzcGNsb2NhdGlvbiIsIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBs ZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAzLCAic2l6ZSIsIElO VDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHNlbmQg Um93RGVzY3JpcHRpb24gKi8KIAl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVz dCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDQzZGU0MmNl MzllLi43NWU5N2ZiMzk0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5j CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNDgxLDYgKzQ4MSw4IEBAIENv bnN0cnVjdFR1cGxlRGVzY3JpcHRvcihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXBvcHVsYXRl X2NvbXBhY3RfYXR0cmlidXRlKGluZGV4VHVwRGVzYywgaSk7CiAJfQogCisJVHVwbGVEZXNjRmlu YWxpemUoaW5kZXhUdXBEZXNjKTsKKwogCXJldHVybiBpbmRleFR1cERlc2M7CiB9CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA5YTQ3OTFjNTczZS4uZmEzNTNhMGRkMzcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEyMzAsNiArMTIzMCw3IEBA IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAicXVhbCIsCiAJCQkJCQkgICBQR19O T0RFX1RSRUVPSUQsIC0xLCAwKTsKIAorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJ ZnVuY2N0eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCQlmdW5jY3R4 LT51c2VyX2ZjdHggPSB0YWJsZV9pbmZvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy90b2FzdGluZy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90b2FzdGluZy5jCmluZGV4IGM3 OGRjZWE5OGMxLi4wNzhhMWNmNTEyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYwpAQCAtMjI5LDYg KzIyOSwxMiBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRpb24gcmVsLCBPaWQgdG9hc3RPaWQs IE9pZCB0b2FzdEluZGV4T2lkLAogCVR1cGxlRGVzY0F0dHIodHVwZGVzYywgMSktPmF0dGNvbXBy ZXNzaW9uID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCVR1cGxlRGVzY0F0dHIodHVwZGVz YywgMiktPmF0dGNvbXByZXNzaW9uID0gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwogCisJcG9w dWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUodHVwZGVzYywgMCk7CisJcG9wdWxhdGVfY29tcGFjdF9h dHRyaWJ1dGUodHVwZGVzYywgMSk7CisJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUodHVwZGVz YywgMik7CisKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKKwogCS8qCiAJICogVG9hc3Qg dGFibGVzIGZvciByZWd1bGFyIHJlbGF0aW9ucyBnbyBpbiBwZ190b2FzdDsgdGhvc2UgZm9yIHRl bXAKIAkgKiByZWxhdGlvbnMgZ28gaW50byB0aGUgcGVyLWJhY2tlbmQgdGVtcC10b2FzdC10YWJs ZSBuYW1lc3BhY2UuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdiYjExMTY4OGMuLjdhYmQ5 ZWQyNzJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0yODEsNiArMjgxLDcgQEAgRXhwbGFp blJlc3VsdERlc2MoRXhwbGFpblN0bXQgKnN0bXQpCiAJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRl VHVwbGVEZXNjKDEpOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikg MSwgIlFVRVJZIFBMQU4iLAogCQkJCQkgICByZXN1bHRfdHlwZSwgLTEsIDApOworCVR1cGxlRGVz Y0ZpbmFsaXplKHR1cGRlc2MpOwogCXJldHVybiB0dXBkZXNjOwogfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2Z1bmN0aW9uY21kcy5jCmluZGV4IGE1MTZiMDM3ZGVhLi42YThmMTYyYjY0MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZnVuY3Rpb25jbWRzLmMKQEAgLTI0MjMsNiArMjQyMyw3IEBAIENhbGxTdG10UmVz dWx0RGVzYyhDYWxsU3RtdCAqc3RtdCkKIAkJCQkJCQkgICAtMSwKIAkJCQkJCQkgICAwKTsKIAkJ fQorCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAl9CiAKIAlyZXR1cm4gdHVwZGVzYzsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IGUxYjgwOGJiYjYwLi41NTE2Njc2NTBiYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xODA4LDYgKzE4MDgsNyBAQCBwZ19nZXRfc2VxdWVu Y2VfZGF0YShQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICBCT09MT0lELCAtMSwgMCk7CiAJVHVw bGVEZXNjSW5pdEVudHJ5KHJlc3VsdFR1cGxlRGVzYywgKEF0dHJOdW1iZXIpIDMsICJwYWdlX2xz biIsCiAJCQkJCSAgIExTTk9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdFR1 cGxlRGVzYyk7CiAJcmVzdWx0VHVwbGVEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0VHVwbGVE ZXNjKTsKIAogCXNlcXJlbCA9IHRyeV9yZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxv Y2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBmOTc2YzBlNWM3ZS4uYWU3YzlkYjlm YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xMDI5LDYgKzEwMjksOCBAQCBEZWZp bmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkLAog CQl9CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzY3JpcHRvcik7CisKIAkvKgogCSAqIEZv ciByZWxhdGlvbnMgd2l0aCB0YWJsZSBBTSBhbmQgcGFydGl0aW9uZWQgdGFibGVzLCBzZWxlY3Qg YWNjZXNzCiAJICogbWV0aG9kIHRvIHVzZTogYW4gZXhwbGljaXRseSBpbmRpY2F0ZWQgb25lLCBv ciAoaW4gdGhlIGNhc2Ugb2YgYQpAQCAtMTQ0OCw2ICsxNDUwLDggQEAgQnVpbGREZXNjRm9yUmVs YXRpb24oY29uc3QgTGlzdCAqY29sdW1ucykKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUo ZGVzYywgYXR0bnVtIC0gMSk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAly ZXR1cm4gZGVzYzsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCmluZGV4IDEyOTBkZjEwYzZmLi44ZTkyMGE3 MjM3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpAQCAtMzM4LDUgKzMzOCw2IEBAIFdhaXRTdG10UmVzdWx0 RGVzYyhXYWl0U3RtdCAqc3RtdCkKIAl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mo MSk7CiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAic3RhdHVz IiwKIAkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2Mp OwogCXJldHVybiB0dXBkZXNjOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1NSRi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jCmluZGV4IGEwYjExMWRj MGU0Li5iNDgxZTUwYWNmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NS Ri5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwpAQCAtMjcyLDYgKzI3Miw3 IEBAIEV4ZWNNYWtlVGFibGVGdW5jdGlvblJlc3VsdChTZXRFeHByU3RhdGUgKnNldGV4cHIsCiAJ CQkJCQkJCQkgICBmdW5jcmV0dHlwZSwKIAkJCQkJCQkJCSAgIC0xLAogCQkJCQkJCQkJICAgMCk7 CisJCQkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJCQlyc2luZm8uc2V0RGVzYyA9 IHR1cGRlc2M7CiAJCQkJfQogCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK QEAgLTc3Niw2ICs3NzcsNyBAQCBpbml0X3NleHByKE9pZCBmb2lkLCBPaWQgaW5wdXRfY29sbGF0 aW9uLCBFeHByICpub2RlLAogCQkJCQkJCSAgIGZ1bmNyZXR0eXBlLAogCQkJCQkJCSAgIC0xLAog CQkJCQkJCSAgIDApOworCQkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJCQlzZXhwci0+ ZnVuY1Jlc3VsdERlc2MgPSB0dXBkZXNjOwogCQkJc2V4cHItPmZ1bmNSZXR1cm5zVHVwbGUgPSBm YWxzZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IGI3NjhlYWU5ZTUzLi5l NmFiNTFlNjQwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwpAQCAtMjE3Myw2ICsyMTcz LDggQEAgRXhlY1R5cGVGcm9tVExJbnRlcm5hbChMaXN0ICp0YXJnZXRMaXN0LCBib29sIHNraXBq dW5rKQogCQljdXJfcmVzbm8rKzsKIAl9CiAKKwlUdXBsZURlc2NGaW5hbGl6ZSh0eXBlSW5mbyk7 CisKIAlyZXR1cm4gdHlwZUluZm87CiB9CiAKQEAgLTIyMDcsNiArMjIwOSw4IEBAIEV4ZWNUeXBl RnJvbUV4cHJMaXN0KExpc3QgKmV4cHJMaXN0KQogCQljdXJfcmVzbm8rKzsKIAl9CiAKKwlUdXBs ZURlc2NGaW5hbGl6ZSh0eXBlSW5mbyk7CisKIAlyZXR1cm4gdHlwZUluZm87CiB9CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4uYwppbmRleCA2M2U2MDVlMWY4MS4uZmViODJk NjQ5NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVGdW5jdGlvbnNjYW4u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlRnVuY3Rpb25zY2FuLmMKQEAgLTQxNCw2 ICs0MTQsNyBAQCBFeGVjSW5pdEZ1bmN0aW9uU2NhbihGdW5jdGlvblNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCVR1cGxlRGVzY0luaXRFbnRyeUNvbGxhdGlvbih0 dXBkZXNjLAogCQkJCQkJCQkJCQkoQXR0ck51bWJlcikgMSwKIAkJCQkJCQkJCQkJZXhwckNvbGxh dGlvbihmdW5jZXhwcikpOworCQkJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCQkJfQog CQkJZWxzZQogCQkJewpAQCAtNDg1LDYgKzQ4Niw3IEBAIEV4ZWNJbml0RnVuY3Rpb25TY2FuKEZ1 bmN0aW9uU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQkJCQkJICAg MCk7CiAJCX0KIAorCQlUdXBsZURlc2NGaW5hbGl6ZShzY2FuX3R1cGRlc2MpOwogCQlBc3NlcnQo YXR0bm8gPT0gbmF0dHMpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwppbmRl eCAzZWM4ZDhkZTAxMS4uMGFkNzY3ZDgyN2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlv bi5jCkBAIC0xODkxLDYgKzE4OTEsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24odHVwZGVz YywKIAkJCQkJCQkJCQkoQXR0ck51bWJlcikgMSwKIAkJCQkJCQkJCQlleHByQ29sbGF0aW9uKGZ1 bmNleHByKSk7CisJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJfQogCQllbHNlIGlm IChmdW5jdHlwY2xhc3MgPT0gVFlQRUZVTkNfUkVDT1JEKQogCQl7CkBAIC0xOTQ4LDYgKzE5NDks NyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5jdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsCiAK IAkJCQlpKys7CiAJCQl9CisJCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCQkJLyoK IAkJCSAqIEVuc3VyZSB0aGF0IHRoZSBjb2xkZWZsaXN0IGRlZmluZXMgYSBsZWdhbCBzZXQgb2Yg bmFtZXMgKG5vCkBAIC0yMDE2LDcgKzIwMTgsNyBAQCBhZGRSYW5nZVRhYmxlRW50cnlGb3JGdW5j dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICAgMCk7CiAJCQkvKiBubyBuZWVkIHRv IHNldCBjb2xsYXRpb24gKi8KIAkJfQotCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwog CQlBc3NlcnQobmF0dHMgPT0gdG90YWxhdHRzKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3RhcmdldC5jCmluZGV4IGI1YTJmOTE1YjY3Li41ZmQxN2YzZDhkMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV90YXJnZXQuYwpAQCAtMTU3MCw2ICsxNTcwLDggQEAgZXhwYW5kUmVjb3JkVmFyaWFibGUo UGFyc2VTdGF0ZSAqcHN0YXRlLCBWYXIgKnZhciwgaW50IGxldmVsc3VwKQogCQl9CiAJCUFzc2Vy dChsbmFtZSA9PSBOVUxMICYmIGx2YXIgPT0gTlVMTCk7CS8qIGxpc3RzIHNhbWUgbGVuZ3RoPyAq LwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGxlRGVzYyk7CisKIAkJcmV0dXJuIHR1cGxlRGVz YzsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVj ZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3 YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggN2M4NjM5YjMyZTkuLjlmMDRjOWVk MjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVy L2xpYnBxd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdh bHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYwpAQCAtMTA3Myw2ICsxMDczLDcgQEAgbGlicHFy Y3ZfcHJvY2Vzc1R1cGxlcyhQR3Jlc3VsdCAqcGdyZXMsIFdhbFJjdkV4ZWNSZXN1bHQgKndhbHJl cywKIAlmb3IgKGNvbG4gPSAwOyBjb2xuIDwgblJldFR5cGVzOyBjb2xuKyspCiAJCVR1cGxlRGVz Y0luaXRFbnRyeSh3YWxyZXMtPnR1cGxlZGVzYywgKEF0dHJOdW1iZXIpIGNvbG4gKyAxLAogCQkJ CQkJICAgUFFmbmFtZShwZ3JlcywgY29sbiksIHJldFR5cGVzW2NvbG5dLCAtMSwgMCk7CisJVHVw bGVEZXNjRmluYWxpemUod2FscmVzLT50dXBsZWRlc2MpOwogCWF0dGlubWV0YSA9IFR1cGxlRGVz Y0dldEF0dEluTWV0YWRhdGEod2FscmVzLT50dXBsZWRlc2MpOwogCiAJLyogTm8gcG9pbnQgaW4g ZG9pbmcgbW9yZSBoZXJlIGlmIHRoZXJlIHdlcmUgbm8gdHVwbGVzIHJldHVybmVkLiAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwppbmRleCBhMGU2YTNkMjAwYy4uOWUyZjRhNjY0YjQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCkBAIC00NTEsNiArNDUxLDcgQEAgSWRl bnRpZnlTeXN0ZW0odm9pZCkKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJ bml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAiZGJuYW1lIiwKIAkJCQkJ CQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8q IHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0gYmVnaW5fdHVw X291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKQEAgLTQ5Niw2 ICs0OTcsNyBAQCBSZWFkUmVwbGljYXRpb25TbG90KFJlYWRSZXBsaWNhdGlvblNsb3RDbWQgKmNt ZCkKIAkvKiBUaW1lTGluZUlEIGlzIHVuc2lnbmVkLCBzbyBpbnQ0IGlzIG5vdCB3aWRlIGVub3Vn aC4gKi8KIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAz LCAicmVzdGFydF90bGkiLAogCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0Zp bmFsaXplKHR1cGRlc2MpOwogCiAJbWVtc2V0KG51bGxzLCB0cnVlLCBSRUFEX1JFUExJQ0FUSU9O X1NMT1RfQ09MUyAqIHNpemVvZihib29sKSk7CiAKQEAgLTU5OCw2ICs2MDAsNyBAQCBTZW5kVGlt ZUxpbmVIaXN0b3J5KFRpbWVMaW5lSGlzdG9yeUNtZCAqY21kKQogCXR1cGRlc2MgPSBDcmVhdGVU ZW1wbGF0ZVR1cGxlRGVzYygyKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2Ms IChBdHRyTnVtYmVyKSAxLCAiZmlsZW5hbWUiLCBURVhUT0lELCAtMSwgMCk7CiAJVHVwbGVEZXNj SW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgImNvbnRlbnQiLCBURVhU T0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAKIAlUTEhpc3RvcnlG aWxlTmFtZShoaXN0Zm5hbWUsIGNtZC0+dGltZWxpbmUpOwogCVRMSGlzdG9yeUZpbGVQYXRoKHBh dGgsIGNtZC0+dGltZWxpbmUpOwpAQCAtMTAxNSw2ICsxMDE4LDcgQEAgU3RhcnRSZXBsaWNhdGlv bihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJCQkJCQkJCSAgSU5UOE9JRCwgLTEsIDApOwog CQlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAibmV4 dF90bGlfc3RhcnRwb3MiLAogCQkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNj RmluYWxpemUodHVwZGVzYyk7CiAKIAkJLyogcHJlcGFyZSBmb3IgcHJvamVjdGlvbiBvZiB0dXBs ZSAqLwogCQl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRlc2MoZGVzdCwgdHVwZGVzYywg JlRUU09wc1ZpcnR1YWwpOwpAQCAtMTM2OSw2ICsxMzczLDcgQEAgQ3JlYXRlUmVwbGljYXRpb25T bG90KENyZWF0ZVJlcGxpY2F0aW9uU2xvdENtZCAqY21kKQogCQkJCQkJCSAgVEVYVE9JRCwgLTEs IDApOwogCVR1cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDQs ICJvdXRwdXRfcGx1Z2luIiwKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NG aW5hbGl6ZSh0dXBkZXNjKTsKIAogCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVz ICovCiAJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZU VFNPcHNWaXJ0dWFsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYwppbmRleCAzYTY5MDVmOTU0Ni4uOWQzNzA1M2M4 MWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvYWNsLmMKQEAgLTE4MTgsNiArMTgxOCw3IEBAIGFjbGV4cGxvZGUoUEdf RlVOQ1RJT05fQVJHUykKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVy KSA0LCAiaXNfZ3JhbnRhYmxlIiwKIAkJCQkJCSAgIEJPT0xPSUQsIC0xLCAwKTsKIAorCQlUdXBs ZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0eC0+dHVwbGVfZGVzYyA9IEJsZXNzVHVw bGVEZXNjKHR1cGRlc2MpOwogCiAJCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdXNlciBjb250ZXh0 ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VuZmlsZS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYwppbmRleCBjMDgzNjA4YjFkNS4uYmZiOTQ5NDAxZDAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9nZW5maWxlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2dlbmZpbGUuYwpAQCAtNDU0LDYgKzQ1NCw3IEBAIHBnX3N0YXRfZmls ZShQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICAiY3JlYXRpb24iLCBUSU1FU1RBTVBUWk9JRCwg LTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgNiwKIAkJ CQkJICAgImlzZGlyIiwgQk9PTE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRl c2MpOwogCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOwogCiAJbWVtc2V0KGlzbnVsbCwgZmFsc2Us IHNpemVvZihpc251bGwpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2Nr ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwppbmRleCA5ZGFkZDZk YTY3Mi4uNDQ4MWMzNTRmZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2Nr ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKQEAgLTE0Niw2 ICsxNDYsNyBAQCBwZ19sb2NrX3N0YXR1cyhQR19GVU5DVElPTl9BUkdTKQogCQlUdXBsZURlc2NJ bml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDE2LCAid2FpdHN0YXJ0IiwKIAkJCQkJCSAg IFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CiAKKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7 CiAJCWZ1bmNjdHgtPnR1cGxlX2Rlc2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAogCQkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yZGVyZWRzZXRhZ2dzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvb3JkZXJlZHNldGFnZ3MuYwppbmRleCAzYjZkYThlMzZhYy4u ZmQ4Yjg2NzY0NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0 YWdncy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmRlcmVkc2V0YWdncy5jCkBAIC0y MzMsNiArMjMzLDcgQEAgb3JkZXJlZF9zZXRfc3RhcnR1cChGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgYm9vbCB1c2VfdHVwbGVzKQogCQkJCQkJCQkgICAtMSwKIAkJCQkJCQkJICAgMCk7CiAKKwkJ CQlUdXBsZURlc2NGaW5hbGl6ZShuZXdkZXNjKTsKIAkJCQlGcmVlVHVwbGVEZXNjKHFzdGF0ZS0+ dHVwZGVzYyk7CiAJCQkJcXN0YXRlLT50dXBkZXNjID0gbmV3ZGVzYzsKIAkJCX0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3Bnc3RhdGZ1bmNzLmMKaW5kZXggNzNjYTBiYjBiN2YuLjA4YWQyN2U1N2MyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwpAQCAtNzY5LDYgKzc2OSw3IEBAIHBnX3N0YXRf Z2V0X2JhY2tlbmRfc3VieGFjdChQR19GVU5DVElPTl9BUkdTKQogCVR1cGxlRGVzY0luaXRFbnRy eSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMiwgInN1YnhhY3Rfb3ZlcmZsb3ciLAogCQkJCQkgICBC T09MT0lELCAtMSwgMCk7CiAKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1 cGxlRGVzYyh0dXBkZXNjKTsKIAogCWlmICgobG9jYWxfYmVlbnRyeSA9IHBnc3RhdF9nZXRfbG9j YWxfYmVlbnRyeV9ieV9wcm9jX251bWJlcihwcm9jTnVtYmVyKSkgIT0gTlVMTCkKQEAgLTE2NTgs NiArMTY1OSw3IEBAIHBnX3N0YXRfd2FsX2J1aWxkX3R1cGxlKFBnU3RhdF9XYWxDb3VudGVycyB3 YWxfY291bnRlcnMsCiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA2 LCAic3RhdHNfcmVzZXQiLAogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCisJVHVw bGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAkv KiBGaWxsIHZhbHVlcyBhbmQgTlVMTHMgKi8KQEAgLTIwODUsNiArMjA4Nyw3IEBAIHBnX3N0YXRf Z2V0X2FyY2hpdmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRl c2MsIChBdHRyTnVtYmVyKSA3LCAic3RhdHNfcmVzZXQiLAogCQkJCQkgICBUSU1FU1RBTVBUWk9J RCwgLTEsIDApOwogCisJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJQmxlc3NUdXBsZURl c2ModHVwZGVzYyk7CiAKIAkvKiBHZXQgc3RhdGlzdGljcyBhYm91dCB0aGUgYXJjaGl2ZXIgcHJv Y2VzcyAqLwpAQCAtMjE2Niw2ICsyMTY5LDcgQEAgcGdfc3RhdF9nZXRfcmVwbGljYXRpb25fc2xv dChQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICBUSU1FU1RBTVBUWk9JRCwgLTEsIDApOwogCVR1 cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMTMsICJzdGF0c19yZXNldCIs CiAJCQkJCSAgIFRJTUVTVEFNUFRaT0lELCAtMSwgMCk7CisJVHVwbGVEZXNjRmluYWxpemUodHVw ZGVzYyk7CiAJQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAluYW1lc3RyY3B5KCZzbG90bmFt ZSwgdGV4dF90b19jc3RyaW5nKHNsb3RuYW1lX3RleHQpKTsKQEAgLTIyNTMsNiArMjI1Nyw3IEBA IHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkg ICBJTlQ4T0lELCAtMSwgMCk7CiAJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVt YmVyKSAxMywgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpPSUQsIC0xLCAwKTsK KwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsK IAogCWlmICghc3ViZW50cnkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdHN2 ZWN0b3Jfb3AuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90c3ZlY3Rvcl9vcC5jCmluZGV4IDk0 ZTBmZWQ4MzA5Li43Y2ExOWE5Nzg4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3RzdmVjdG9yX29wLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RzdmVjdG9yX29wLmMK QEAgLTY1MSw2ICs2NTEsNyBAQCB0c3ZlY3Rvcl91bm5lc3QoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CQkJCSAgIFRFWFRBUlJBWU9JRCwgLTEsIDApOwogCQlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUo ZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQogCQkJZWxvZyhF UlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOworCQlUdXBsZURlc2NGaW5h bGl6ZSh0dXBkZXNjKTsKIAkJZnVuY2N0eC0+dHVwbGVfZGVzYyA9IHR1cGRlc2M7CiAKIAkJZnVu Y2N0eC0+dXNlcl9mY3R4ID0gUEdfR0VUQVJHX1RTVkVDVE9SX0NPUFkoMCk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYwppbmRleCA2YjYzNGM5ZmZmMS4uNzcwZWRiMzRlMDggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNzI5LDYgKzcyOSw4IEBAIFJlbGF0aW9uQnVpbGRU dXBsZURlc2MoUmVsYXRpb24gcmVsYXRpb24pCiAJCXBmcmVlKGNvbnN0cik7CiAJCXJlbGF0aW9u LT5yZF9hdHQtPmNvbnN0ciA9IE5VTEw7CiAJfQorCisJVHVwbGVEZXNjRmluYWxpemUocmVsYXRp b24tPnJkX2F0dCk7CiB9CiAKIC8qCkBAIC0xOTg1LDYgKzE5ODcsNyBAQCBmb3JtcmRlc2MoY29u c3QgY2hhciAqcmVsYXRpb25OYW1lLCBPaWQgcmVsYXRpb25SZWx0eXBlLAogCiAJLyogaW5pdGlh bGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwgY2YgUmVsYXRpb25CdWlsZFR1cGxl RGVzYyAqLwogCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlbGF0aW9uLT5yZF9hdHQsIDApLT5hdHRj YWNoZW9mZiA9IDA7CisJVHVwbGVEZXNjRmluYWxpemUocmVsYXRpb24tPnJkX2F0dCk7CiAKIAkv KiBtYXJrIG5vdC1udWxsIHN0YXR1cyAqLwogCWlmIChoYXNfbm90X251bGwpCkBAIC0zNjg4LDYg KzM2OTEsOCBAQCBSZWxhdGlvbkJ1aWxkTG9jYWxSZWxhdGlvbihjb25zdCBjaGFyICpyZWxuYW1l LAogCWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQogCQlUdXBsZURlc2NBdHRyKHJlbC0+cmRf YXR0LCBpKS0+YXR0cmVsaWQgPSByZWxpZDsKIAorCVR1cGxlRGVzY0ZpbmFsaXplKHJlbC0+cmRf YXR0KTsKKwogCXJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlID0gcmVsdGFibGVzcGFjZTsKIAog CWlmIChtYXBwZWRfcmVsYXRpb24pCkBAIC00NDQzLDYgKzQ0NDgsNyBAQCBCdWlsZEhhcmRjb2Rl ZERlc2NyaXB0b3IoaW50IG5hdHRzLCBjb25zdCBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUgKmF0dHJz KQogCiAJLyogaW5pdGlhbGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwgY2YgUmVs YXRpb25CdWlsZFR1cGxlRGVzYyAqLwogCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlc3VsdCwgMCkt PmF0dGNhY2hlb2ZmID0gMDsKKwlUdXBsZURlc2NGaW5hbGl6ZShyZXN1bHQpOwogCiAJLyogTm90 ZTogd2UgZG9uJ3QgYm90aGVyIHRvIHNldCB1cCBhIFR1cGxlQ29uc3RyIGVudHJ5ICovCiAKQEAg LTYyNjgsNiArNjI3NCw4IEBAIGxvYWRfcmVsY2FjaGVfaW5pdF9maWxlKGJvb2wgc2hhcmVkKQog CQkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUocmVsLT5yZF9hdHQsIGkpOwogCQl9CiAKKwkJ VHVwbGVEZXNjRmluYWxpemUocmVsLT5yZF9hdHQpOworCiAJCS8qIG5leHQgcmVhZCB0aGUgYWNj ZXNzIG1ldGhvZCBzcGVjaWZpYyBmaWVsZCAqLwogCQlpZiAoZnJlYWQoJmxlbiwgMSwgc2l6ZW9m KGxlbiksIGZwKSAhPSBzaXplb2YobGVuKSkKIAkJCWdvdG8gcmVhZF9mYWlsZWQ7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL2Z1bmNhcGkuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2ZtZ3IvZnVuY2FwaS5jCmluZGV4IDhhOTM0ZWE4ZGNhLi41MTZkMDJjZmI4MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9mdW5jYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvZm1nci9mdW5jYXBpLmMKQEAgLTM0MCw2ICszNDAsOCBAQCBnZXRfZXhwcl9yZXN1bHRfdHlw ZShOb2RlICpleHByLAogCQkJCQkJCQkJCWV4cHJDb2xsYXRpb24oY29sKSk7CiAJCQlpKys7CiAJ CX0KKwkJVHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CisKIAkJaWYgKHJlc3VsdFR5cGVJZCkK IAkJCSpyZXN1bHRUeXBlSWQgPSByZXhwci0+cm93X3R5cGVpZDsKIAkJaWYgKHJlc3VsdFR1cGxl RGVzYykKQEAgLTEwNDQsNiArMTA0Niw3IEBAIHJlc29sdmVfcG9seW1vcnBoaWNfdHVwZGVzYyhU dXBsZURlc2MgdHVwZGVzYywgb2lkdmVjdG9yICpkZWNsYXJlZF9hcmdzLAogCQl9CiAJfQogCisJ VHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4NTMs NiArMTg1Niw4IEBAIGJ1aWxkX2Z1bmN0aW9uX3Jlc3VsdF90dXBkZXNjX2QoY2hhciBwcm9raW5k LAogCQkJCQkJICAgMCk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUoZGVzYyk7CisKIAlyZXR1 cm4gZGVzYzsKIH0KIApAQCAtMTk3MCw2ICsxOTc1LDcgQEAgVHlwZUdldFR1cGxlRGVzYyhPaWQg dHlwZW9pZCwgTGlzdCAqY29sYWxpYXNlcykKIAkJCQkJCSAgIHR5cGVvaWQsCiAJCQkJCQkgICAt MSwKIAkJCQkJCSAgIDApOworCQlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAl9CiAJZWxz ZSBpZiAoZnVuY3R5cGNsYXNzID09IFRZUEVGVU5DX1JFQ09SRCkKIAl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19mdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfZnVuY3MuYwppbmRleCA0ZjNlNDBiZjQ3MC4uYjgyZjgwN2UwNWUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfZnVuY3MuYwpAQCAtNDQ0LDYgKzQ0NCw3IEBAIEdldFBHVmFyaWFibGVSZXN1 bHREZXNjKGNvbnN0IGNoYXIgKm5hbWUpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAo QXR0ck51bWJlcikgMSwgdmFybmFtZSwKIAkJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKIAl9CisJ VHVwbGVEZXNjRmluYWxpemUodHVwZGVzYyk7CiAJcmV0dXJuIHR1cGRlc2M7CiB9CiAKQEAgLTQ2 NSw2ICs0NjYsNyBAQCBTaG93R1VDQ29uZmlnT3B0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIERlc3RS ZWNlaXZlciAqZGVzdCkKIAl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMSk7CiAJ VHVwbGVEZXNjSW5pdEJ1aWx0aW5FbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgdmFybmFt ZSwKIAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNj KTsKIAogCS8qIHByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCiAJdHN0YXRlID0g YmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsK QEAgLTQ5OSw2ICs1MDEsNyBAQCBTaG93QWxsR1VDQ29uZmlnKERlc3RSZWNlaXZlciAqZGVzdCkK IAkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKIAlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSAzLCAiZGVzY3JpcHRpb24iLAogCQkJCQkJCSAgVEVYVE9JRCwg LTEsIDApOworCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOwogCiAJLyogcHJlcGFyZSBmb3Ig cHJvamVjdGlvbiBvZiB0dXBsZXMgKi8KIAl0c3RhdGUgPSBiZWdpbl90dXBfb3V0cHV0X3R1cGRl c2MoZGVzdCwgdHVwZGVzYywgJlRUU09wc1ZpcnR1YWwpOwpAQCAtOTM0LDYgKzkzNyw4IEBAIHNo b3dfYWxsX3NldHRpbmdzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVR1cGxlRGVzY0luaXRFbnRyeSh0 dXBkZXNjLCAoQXR0ck51bWJlcikgMTcsICJwZW5kaW5nX3Jlc3RhcnQiLAogCQkJCQkJICAgQk9P TE9JRCwgLTEsIDApOwogCisJCVR1cGxlRGVzY0ZpbmFsaXplKHR1cGRlc2MpOworCiAJCS8qCiAJ CSAqIEdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQgbGF0ZXIgdG8gcHJvZHVjZSB0 dXBsZXMgZnJvbSByYXcKIAkJICogQyBzdHJpbmdzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHVwZGVzYy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaAppbmRleCBkNDZj ZGJmN2EzYy4uNTk1NDEzZGJiYzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBk ZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaApAQCAtMTk1LDYgKzE5NSw3 IEBAIGV4dGVybiBUdXBsZURlc2MgQ3JlYXRlVHVwbGVEZXNjVHJ1bmNhdGVkQ29weShUdXBsZURl c2MgdHVwZGVzYywgaW50IG5hdHRzKTsKIAogZXh0ZXJuIFR1cGxlRGVzYyBDcmVhdGVUdXBsZURl c2NDb3B5Q29uc3RyKFR1cGxlRGVzYyB0dXBkZXNjKTsKIAorI2RlZmluZSBUdXBsZURlc2NGaW5h bGl6ZShkKSAoKHZvaWQpIDApCiAjZGVmaW5lIFR1cGxlRGVzY1NpemUoc3JjKSBcCiAJKG9mZnNl dG9mKHN0cnVjdCBUdXBsZURlc2NEYXRhLCBjb21wYWN0X2F0dHJzKSArIFwKIAkgKHNyYyktPm5h dHRzICogc2l6ZW9mKENvbXBhY3RBdHRyaWJ1dGUpICsgXApkaWZmIC0tZ2l0IGEvc3JjL3BsL3Bs cGdzcWwvc3JjL3BsX2NvbXAuYyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9jb21wLmMKaW5kZXgg N2Q2NDhjOTQxYzAuLmIyMTEyYzI5ZmNmIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxfY29tcC5jCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9jb21wLmMKQEAgLTE5MTIsNiAr MTkxMiw4IEBAIGJ1aWxkX3Jvd19mcm9tX3ZhcnMoUExwZ1NRTF92YXJpYWJsZSAqKnZhcnMsIGlu dCBudW12YXJzKQogCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24ocm93LT5yb3d0dXBkZXNj LCBpICsgMSwgdHlwY29sbCk7CiAJfQogCisJVHVwbGVEZXNjRmluYWxpemUocm93LT5yb3d0dXBk ZXNjKTsKKwogCXJldHVybiByb3c7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMuYyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMuYwppbmRleCA5 MDhiZDE4YTdjNy4uZmExNzE5YmYzYjUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fZml4ZWRfc3RhdHMuYworKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzLmMKQEAgLTIw NSw2ICsyMDUsNyBAQCB0ZXN0X2N1c3RvbV9zdGF0c19maXhlZF9yZXBvcnQoUEdfRlVOQ1RJT05f QVJHUykKIAkJCQkJICAgSU5UOE9JRCwgLTEsIDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgMiwgInN0YXRzX3Jlc2V0IiwKIAkJCQkJICAgVElNRVNUQU1QVFpP SUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBkZXNjKTsKIAlCbGVzc1R1cGxlRGVz Yyh0dXBkZXNjKTsKIAogCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0oc3RhdHMtPm51bWNhbGxz KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wcmVkdGVzdC90ZXN0X3ByZWR0 ZXN0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcHJlZHRlc3QvdGVzdF9wcmVkdGVzdC5jCmlu ZGV4IDY3OWE1ZGU0NTZkLi40OGNhMmE0ZWE3MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3ByZWR0ZXN0L3Rlc3RfcHJlZHRlc3QuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcHJlZHRlc3QvdGVzdF9wcmVkdGVzdC5jCkBAIC0yMzAsNiArMjMwLDcgQEAgdGVzdF9wcmVk dGVzdChQR19GVU5DVElPTl9BUkdTKQogCQkJCQkgICAic19yX2hvbGRzIiwgQk9PTE9JRCwgLTEs IDApOwogCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgOCwKIAkJCQkJ ICAgIndfcl9ob2xkcyIsIEJPT0xPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NGaW5hbGl6ZSh0dXBk ZXNjKTsKIAl0dXBkZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CiAKIAl2YWx1ZXNbMF0g PSBCb29sR2V0RGF0dW0oc3Ryb25nX2ltcGxpZWRfYnkpOwotLSAKMi41MS4wCgo= --0000000000007232f506495eaf62 Content-Type: text/plain; charset="US-ASCII"; name="v6-0002-Precalculate-CompactAttribute-s-attcacheoff.patch" Content-Disposition: attachment; filename="v6-0002-Precalculate-CompactAttribute-s-attcacheoff.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwm90kq4 RnJvbSA5ZDAyMjgwY2M2ODU3MzlkYzgyMzA2ZDFhZGEzNTA5YjQ3NmY2YThmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAzMSBEZWMgMjAyNCAwOToxOToyNCArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjYgMi8z XSBQcmVjYWxjdWxhdGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmCgpUaGlzIGFsbG93 cyBjb2RlIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgdHVwbGUgZGVmb3JtIHJvdXRpbmVzIHdoaWNo CnNocmlua3MgZG93biB0aGUgY29kZSBhIGxpdHRsZSwgd2hpY2ggY2FuIG1ha2UgaXQgcnVuIG1v cmUgcXVpY2tseS4KVGhpcyBhbHNvIG1ha2VzIGEgZGVkaWNhdGVkIGRlZm9ybWVyIGxvb3AgdG8g ZGVmb3JtIHRoZSBwb3J0aW9uIG9mIHRoZQp0dXBsZSB3aGljaCBoYXMgYSBrbm93biBvZmZzZXQs IHdoaWNoIG1ha2VzIGRlZm9ybWluZyBtdWNoIGZhc3RlciB3aGVuCmEgbGVhZGluZyBzZXQgb2Yg dGhlIHRhYmxlJ3MgY29sdW1ucyBhcmUgbm9uLU5VTEwgdmFsdWVzIGFuZCBmaXhlZC13aWR0aAp0 eXBlcy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jICB8IDMzNCAr KysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2luZGV4dHVw bGUuYyB8IDM2NyArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Y29tbW9uL3R1cGRlc2MuYyAgICB8ICAzNyArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYyAgIHwgICAzIC0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyAg ICAgIHwgMjgwICsrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1q aXRfZGVmb3JtLmMgIHwgICA2IC0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMg ICAgIHwgIDEyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMuaCAgICAgIHwgIDE5 ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaXR1cC5oICAgICAgICAgICAgICB8ICAyMCArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3R1cGRlc2MuaCAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy90dXBtYWNzLmggICAgICAgICAgIHwgIDgyICsrKysrKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3IvdHVwdGFibGUuaCAgICAgICAgfCAgIDkgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDUzOSBp bnNlcnRpb25zKCspLCA2NDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2NvbW1vbi9oZWFwdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaGVh cHR1cGxlLmMKaW5kZXggMTFiZWMyMGU4MmUuLjQyY2NlM2RjZGZlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvY29tbW9uL2hlYXB0dXBsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vaGVhcHR1cGxlLmMKQEAgLTQ5NywyMCArNDk3LDggQEAgaGVhcF9hdHRpc251bGwo SGVhcFR1cGxlIHR1cCwgaW50IGF0dG51bSwgVHVwbGVEZXNjIHR1cGxlRGVzYykKIC8qIC0tLS0t LS0tLS0tLS0tLS0KICAqCQlub2NhY2hlZ2V0YXR0cgogICoKLSAqCQlUaGlzIG9ubHkgZ2V0cyBj YWxsZWQgZnJvbSBmYXN0Z2V0YXR0cigpLCBpbiBjYXNlcyB3aGVyZSB3ZQotICoJCWNhbid0IHVz ZSBhIGNhY2hlb2Zmc2V0IGFuZCB0aGUgdmFsdWUgaXMgbm90IG51bGwuCi0gKgotICoJCVRoaXMg Y2FjaGVzIGF0dHJpYnV0ZSBvZmZzZXRzIGluIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KLSAq Ci0gKgkJQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwZWVkIHRoaW5ncyB1cCB3b3VsZCBiZSB0byBj YWNoZSBvZmZzZXRzCi0gKgkJd2l0aCB0aGUgdHVwbGUsIGJ1dCB0aGF0IHNlZW1zIG1vcmUgZGlm ZmljdWx0IHVubGVzcyB5b3UgdGFrZQotICoJCXRoZSBzdG9yYWdlIGhpdCBvZiBhY3R1YWxseSBw dXR0aW5nIHRob3NlIG9mZnNldHMgaW50byB0aGUKLSAqCQl0dXBsZSB5b3Ugc2VuZCB0byBkaXNr LiAgWXVjay4KLSAqCi0gKgkJVGhpcyBzY2hlbWUgd2lsbCBiZSBzbGlnaHRseSBzbG93ZXIgdGhh biB0aGF0LCBidXQgc2hvdWxkCi0gKgkJcGVyZm9ybSB3ZWxsIGZvciBxdWVyaWVzIHdoaWNoIGhp dCBsYXJnZSAjJ3Mgb2YgdHVwbGVzLiAgQWZ0ZXIKLSAqCQl5b3UgY2FjaGUgdGhlIG9mZnNldHMg b25jZSwgZXhhbWluaW5nIGFsbCB0aGUgb3RoZXIgdHVwbGVzIHVzaW5nCi0gKgkJdGhlIHNhbWUg YXR0cmlidXRlIGRlc2NyaXB0b3Igd2lsbCBnbyBtdWNoIHF1aWNrZXIuIC1jaW0gNS80LzkxCisg KgkJVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZyb20gZmFzdGdldGF0dHIoKSwgaW4gY2FzZXMgd2hl cmUgdGhlCisgKgkJYXR0Y2FjaGVvZmYgaXMgbm90IHNldC4KICAqCiAgKgkJTk9URTogaWYgeW91 IG5lZWQgdG8gY2hhbmdlIHRoaXMgY29kZSwgc2VlIGFsc28gaGVhcF9kZWZvcm1fdHVwbGUuCiAg KgkJQWxzbyBzZWUgbm9jYWNoZV9pbmRleF9nZXRhdHRyLCB3aGljaCBpcyB0aGUgc2FtZSBjb2Rl IGZvciBpbmRleApAQCAtNTIyLDE5NCArNTEwLDEwNCBAQCBub2NhY2hlZ2V0YXR0cihIZWFwVHVw bGUgdHVwLAogCQkJICAgaW50IGF0dG51bSwKIAkJCSAgIFR1cGxlRGVzYyB0dXBsZURlc2MpCiB7 CisJQ29tcGFjdEF0dHJpYnV0ZSAqY2F0dHI7CiAJSGVhcFR1cGxlSGVhZGVyIHRkID0gdHVwLT50 X2RhdGE7CiAJY2hhcgkgICAqdHA7CQkJCS8qIHB0ciB0byBkYXRhIHBhcnQgb2YgdHVwbGUgKi8K IAliaXRzOAkgICAqYnAgPSB0ZC0+dF9iaXRzOwkvKiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4gdHVw bGUgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8qIGRvIHdlIGhhdmUgdG8gd2FsayBhdHRycz8g Ki8KIAlpbnQJCQlvZmY7CQkJLyogY3VycmVudCBvZmZzZXQgd2l0aGluIGRhdGEgKi8KKwlpbnQJ CQlzdGFydEF0dHI7CisJaW50CQkJZmlyc3RudWxsYXR0cjsKKwlib29sCQloYXNudWxscyA9IEhl YXBUdXBsZUhhc051bGxzKHR1cCk7CiAKLQkvKiAtLS0tLS0tLS0tLS0tLS0tCi0JICoJIFRocmVl IGNhc2VzOgotCSAqCi0JICoJIDE6IE5vIG51bGxzIGFuZCBubyB2YXJpYWJsZS13aWR0aCBhdHRy aWJ1dGVzLgotCSAqCSAyOiBIYXMgYSBudWxsIG9yIGEgdmFyLXdpZHRoIEFGVEVSIGF0dC4KLQkg KgkgMzogSGFzIG51bGxzIG9yIHZhci13aWR0aHMgQkVGT1JFIGF0dC4KLQkgKiAtLS0tLS0tLS0t LS0tLS0tCi0JICovCisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmlu YWxpemUoKT8gKi8KKwlBc3NlcnQodHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPj0g MCk7CiAKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBOVUxMcyBiZWZvcmUgdGhlIHJlcXVpcmVk IGF0dG51bSwgdGhlbiB3ZSBjYW4gc3RhcnQgYXQKKwkgKiB0aGUgaGlnaGVzdCBhdHRyaWJ1dGUg d2l0aCBhIGtub3duIG9mZnNldCwgb3IgdGhlIGZpcnN0IGF0dHJpYnV0ZSBpZgorCSAqIG5vbmUg aGF2ZSBhIGNhY2hlZCBvZmZzZXQuICBJZiB0aGUgdHVwbGUgaGFzIG5vIHZhcmlhYmxlIHdpZHRo IHR5cGVzLAorCSAqIHRoZW4gd2UgY2FuIHVzZSBhIHNsaWdodGx5IGNoZWFwZXIgbWV0aG9kIG9m IG9mZnNldCBjYWxjdWxhdGlvbiwgYXMgd2UKKwkgKiBqdXN0IG5lZWQgdG8gYWRkIHRoZSBhdHRs ZW4gdG8gdGhlIGFsaWduZWQgb2Zmc2V0IHdoZW4gc2tpcHBpbmcgb3ZlcgorCSAqIGNvbHVtbnMu ICBXaGVuIHRoZSB0dXBsZSBjb250YWlucyB2YXJpYWJsZS13aWR0aCB0eXBlcywgd2UgbXVzdCB1 c2UKKwkgKiBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoKSwgd2hpY2ggZG9lcyBhIGJpdCBtb3JlIGJy YW5jaGluZyBhbmQgaXMKKwkgKiBzbGlnaHRseSBsZXNzIGVmZmljaWVudC4KKwkgKi8KIAlhdHRu dW0tLTsKIAotCWlmICghSGVhcFR1cGxlTm9OdWxscyh0dXApKQotCXsKLQkJLyoKLQkJICogdGhl cmUncyBhIG51bGwgc29tZXdoZXJlIGluIHRoZSB0dXBsZQotCQkgKgotCQkgKiBjaGVjayB0byBz ZWUgaWYgYW55IHByZWNlZGluZyBiaXRzIGFyZSBudWxsLi4uCi0JCSAqLwotCQlpbnQJCQlieXRl ID0gYXR0bnVtID4+IDM7Ci0JCWludAkJCWZpbmFsYml0ID0gYXR0bnVtICYgMHgwNzsKLQotCQkv KiBjaGVjayBmb3IgbnVsbHMgImJlZm9yZSIgZmluYWwgYml0IG9mIGxhc3QgYnl0ZSAqLwotCQlp ZiAoKH5icFtieXRlXSkgJiAoKDEgPDwgZmluYWxiaXQpIC0gMSkpCi0JCQlzbG93ID0gdHJ1ZTsK LQkJZWxzZQotCQl7Ci0JCQkvKiBjaGVjayBmb3IgbnVsbHMgaW4gYW55ICJlYXJsaWVyIiBieXRl cyAqLwotCQkJaW50CQkJaTsKKwlpZiAoaGFzbnVsbHMpCisJCWZpcnN0bnVsbGF0dHIgPSBmaXJz dF9udWxsX2F0dHIoYnAsIGF0dG51bSk7CisJZWxzZQorCQlmaXJzdG51bGxhdHRyID0gYXR0bnVt OwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgYnl0ZTsgaSsrKQotCQkJewotCQkJCWlmIChicFtpXSAh PSAweEZGKQotCQkJCXsKLQkJCQkJc2xvdyA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ CX0KLQkJfQorCWlmICh0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciA+IDApCisJewor CQlzdGFydEF0dHIgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgLSAxLCBm aXJzdG51bGxhdHRyKTsKKwkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBz dGFydEF0dHIpLT5hdHRjYWNoZW9mZjsKKwl9CisJZWxzZQorCXsKKwkJc3RhcnRBdHRyID0gMDsK KwkJb2ZmID0gMDsKIAl9CiAKIAl0cCA9IChjaGFyICopIHRkICsgdGQtPnRfaG9mZjsKIAotCWlm ICghc2xvdykKKwlpZiAoaGFzbnVsbHMpCiAJewotCQlDb21wYWN0QXR0cmlidXRlICphdHQ7CisJ CWZvciAoaW50IGkgPSBzdGFydEF0dHI7IGkgPCBhdHRudW07IGkrKykKKwkJeworCQkJQ29tcGFj dEF0dHJpYnV0ZSAqYXR0OwogCi0JCS8qCi0JCSAqIElmIHdlIGdldCBoZXJlLCB0aGVyZSBhcmUg bm8gbnVsbHMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgdGFyZ2V0Ci0JCSAqIGF0dHJpYnV0ZS4g IElmIHdlIGhhdmUgYSBjYWNoZWQgb2Zmc2V0LCB3ZSBjYW4gdXNlIGl0LgotCQkgKi8KLQkJYXR0 ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOwotCQlpZiAoYXR0LT5h dHRjYWNoZW9mZiA+PSAwKQotCQkJcmV0dXJuIGZldGNoYXR0KGF0dCwgdHAgKyBhdHQtPmF0dGNh Y2hlb2ZmKTsKKwkJCWlmIChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkv KgotCQkgKiBPdGhlcndpc2UsIGNoZWNrIGZvciBub24tZml4ZWQtbGVuZ3RoIGF0dHJzIHVwIHRv IGFuZCBpbmNsdWRpbmcKLQkJICogdGFyZ2V0LiAgSWYgdGhlcmUgYXJlbid0IGFueSwgaXQncyBz YWZlIHRvIGNoZWFwbHkgaW5pdGlhbGl6ZSB0aGUKLQkJICogY2FjaGVkIG9mZnNldHMgZm9yIHRo ZXNlIGF0dHJzLgotCQkgKi8KLQkJaWYgKEhlYXBUdXBsZUhhc1ZhcldpZHRoKHR1cCkpCi0JCXsK LQkJCWludAkJCWo7CisJCQlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkp OwogCi0JCQlmb3IgKGogPSAwOyBqIDw9IGF0dG51bTsgaisrKQotCQkJewotCQkJCWlmIChUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGopLT5hdHRsZW4gPD0gMCkKLQkJCQl7Ci0JCQkJ CXNsb3cgPSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CisJCQlvZmYgPSBhdHRfcG9p bnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJCSAgYXR0LT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJ ICBhdHQtPmF0dGxlbiwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxl bmd0aF9wb2ludGVyKG9mZiwgYXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKIAkJfQorCQljYXR0ciA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJb2ZmID0gYXR0X3Bv aW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJ CSAgY2F0dHItPmF0dGxlbiwKKwkJCQkJCQkJICB0cCArIG9mZik7CiAJfQotCi0JaWYgKCFzbG93 KQorCWVsc2UgaWYgKCFIZWFwVHVwbGVIYXNWYXJXaWR0aCh0dXApKQogCXsKLQkJaW50CQkJbmF0 dHMgPSB0dXBsZURlc2MtPm5hdHRzOwotCQlpbnQJCQlqID0gMTsKLQotCQkvKgotCQkgKiBJZiB3 ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhIHR1cGxlIHdpdGggbm8gbnVsbHMgb3IgdmFyLXdpZHRocyB1 cCB0bwotCQkgKiBhbmQgaW5jbHVkaW5nIHRoZSB0YXJnZXQgYXR0cmlidXRlLCBzbyB3ZSBjYW4g dXNlIHRoZSBjYWNoZWQgb2Zmc2V0Ci0JCSAqIC4uLiBvbmx5IHdlIGRvbid0IGhhdmUgaXQgeWV0 LCBvciB3ZSdkIG5vdCBoYXZlIGdvdCBoZXJlLiAgU2luY2UKLQkJICogaXQncyBjaGVhcCB0byBj b21wdXRlIG9mZnNldHMgZm9yIGZpeGVkLXdpZHRoIGNvbHVtbnMsIHdlIHRha2UgdGhlCi0JCSAq IG9wcG9ydHVuaXR5IHRvIGluaXRpYWxpemUgdGhlIGNhY2hlZCBvZmZzZXRzIGZvciAqYWxsKiB0 aGUgbGVhZGluZwotCQkgKiBmaXhlZC13aWR0aCBjb2x1bW5zLCBpbiBob3BlIG9mIGF2b2lkaW5n IGZ1dHVyZSB2aXNpdHMgdG8gdGhpcwotCQkgKiByb3V0aW5lLgotCQkgKi8KLQkJVHVwbGVEZXNj Q29tcGFjdEF0dHIodHVwbGVEZXNjLCAwKS0+YXR0Y2FjaGVvZmYgPSAwOwotCi0JCS8qIHdlIG1p Z2h0IGhhdmUgc2V0IHNvbWUgb2Zmc2V0cyBpbiB0aGUgc2xvdyBwYXRoIHByZXZpb3VzbHkgKi8K LQkJd2hpbGUgKGogPCBuYXR0cyAmJiBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGop LT5hdHRjYWNoZW9mZiA+IDApCi0JCQlqKys7Ci0KLQkJb2ZmID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBqIC0gMSktPmF0dGNhY2hlb2ZmICsKLQkJCVR1cGxlRGVzY0NvbXBhY3RB dHRyKHR1cGxlRGVzYywgaiAtIDEpLT5hdHRsZW47Ci0KLQkJZm9yICg7IGogPCBuYXR0czsgaisr KQorCQlmb3IgKGludCBpID0gc3RhcnRBdHRyOyBpIDwgYXR0bnVtOyBpKyspCiAJCXsKLQkJCUNv bXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaik7 Ci0KLQkJCWlmIChhdHQtPmF0dGxlbiA8PSAwKQotCQkJCWJyZWFrOworCQkJQ29tcGFjdEF0dHJp YnV0ZSAqYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBpKTsKIAogCQkJb2Zm ID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSk7Ci0KLQkJCWF0dC0+ YXR0Y2FjaGVvZmYgPSBvZmY7Ci0KIAkJCW9mZiArPSBhdHQtPmF0dGxlbjsKIAkJfQotCi0JCUFz c2VydChqID4gYXR0bnVtKTsKLQotCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURl c2MsIGF0dG51bSktPmF0dGNhY2hlb2ZmOworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRy KHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJb2ZmID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGNh dHRyLT5hdHRhbGlnbmJ5KTsKIAl9CiAJZWxzZQogCXsKLQkJYm9vbAkJdXNlY2FjaGUgPSB0cnVl OwotCQlpbnQJCQlpOwotCi0JCS8qCi0JCSAqIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSB0byB3 YWxrIHRoZSB0dXBsZSBDQVJFRlVMTFkuICBCdXQgd2Ugc3RpbGwKLQkJICogbWlnaHQgYmUgYWJs ZSB0byBjYWNoZSBzb21lIG9mZnNldHMgZm9yIG5leHQgdGltZS4KLQkJICoKLQkJICogTm90ZSAt IFRoaXMgbG9vcCBpcyBhIGxpdHRsZSB0cmlja3kuICBGb3IgZWFjaCBub24tbnVsbCBhdHRyaWJ1 dGUsCi0JCSAqIHdlIGhhdmUgdG8gZmlyc3QgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRpbmcg YmVmb3JlIHRoZSBhdHRyLAotCQkgKiB0aGVuIGFkdmFuY2Ugb3ZlciB0aGUgYXR0ciBiYXNlZCBv biBpdHMgbGVuZ3RoLiAgTnVsbHMgaGF2ZSBubwotCQkgKiBzdG9yYWdlIGFuZCBubyBhbGlnbm1l bnQgcGFkZGluZyBlaXRoZXIuICBXZSBjYW4gdXNlL3NldAotCQkgKiBhdHRjYWNoZW9mZiB1bnRp bCB3ZSByZWFjaCBlaXRoZXIgYSBudWxsIG9yIGEgdmFyLXdpZHRoIGF0dHJpYnV0ZS4KLQkJICov Ci0JCW9mZiA9IDA7Ci0JCWZvciAoaSA9IDA7OyBpKyspCQkvKiBsb29wIGV4aXQgaXMgYXQgImJy ZWFrIiAqLworCQlmb3IgKGludCBpID0gc3RhcnRBdHRyOyBpIDwgYXR0bnVtOyBpKyspCiAJCXsK IAkJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVz YywgaSk7CiAKLQkJCWlmIChIZWFwVHVwbGVIYXNOdWxscyh0dXApICYmIGF0dF9pc251bGwoaSwg YnApKQotCQkJewotCQkJCXVzZWNhY2hlID0gZmFsc2U7Ci0JCQkJY29udGludWU7CQkvKiB0aGlz IGNhbm5vdCBiZSB0aGUgdGFyZ2V0IGF0dCAqLwotCQkJfQotCi0JCQkvKiBJZiB3ZSBrbm93IHRo ZSBuZXh0IG9mZnNldCwgd2UgY2FuIHNraXAgdGhlIHJlc3QgKi8KLQkJCWlmICh1c2VjYWNoZSAm JiBhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQkJb2ZmID0gYXR0LT5hdHRjYWNoZW9mZjsKLQkJ CWVsc2UgaWYgKGF0dC0+YXR0bGVuID09IC0xKQotCQkJewotCQkJCS8qCi0JCQkJICogV2UgY2Fu IG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0dHJpYnV0ZSBpZiB0aGUKLQkJ CQkgKiBvZmZzZXQgaXMgYWxyZWFkeSBzdWl0YWJseSBhbGlnbmVkLCBzbyB0aGF0IHRoZXJlIHdv dWxkIGJlCi0JCQkJICogbm8gcGFkIGJ5dGVzIGluIGFueSBjYXNlOiB0aGVuIHRoZSBvZmZzZXQg d2lsbCBiZSB2YWxpZCBmb3IKLQkJCQkgKiBlaXRoZXIgYW4gYWxpZ25lZCBvciB1bmFsaWduZWQg dmFsdWUuCi0JCQkJICovCi0JCQkJaWYgKHVzZWNhY2hlICYmCi0JCQkJCW9mZiA9PSBhdHRfbm9t aW5hbF9hbGlnbmJ5KG9mZiwgYXR0LT5hdHRhbGlnbmJ5KSkKLQkJCQkJYXR0LT5hdHRjYWNoZW9m ZiA9IG9mZjsKLQkJCQllbHNlCi0JCQkJewotCQkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5 KG9mZiwgYXR0LT5hdHRhbGlnbmJ5LCAtMSwKLQkJCQkJCQkJCQkJICB0cCArIG9mZik7Ci0JCQkJ CXVzZWNhY2hlID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIG5v dCB2YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQkJb2Zm ID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSk7Ci0KLQkJCQlpZiAo dXNlY2FjaGUpCi0JCQkJCWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQl9Ci0KLQkJCWlmIChp ID09IGF0dG51bSkKLQkJCQlicmVhazsKLQorCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsCisJCQkJCQkJCQkgIGF0dC0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCSAgYXR0LT5hdHRsZW4s CisJCQkJCQkJCQkgIHRwICsgb2ZmKTsKIAkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihv ZmYsIGF0dC0+YXR0bGVuLCB0cCArIG9mZik7CiAKLQkJCWlmICh1c2VjYWNoZSAmJiBhdHQtPmF0 dGxlbiA8PSAwKQotCQkJCXVzZWNhY2hlID0gZmFsc2U7CiAJCX0KKwkJY2F0dHIgPSBUdXBsZURl c2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCW9mZiA9IGF0dF9wb2ludGVyX2Fs aWduYnkob2ZmLAorCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkgIGNhdHRy LT5hdHRsZW4sCisJCQkJCQkJCSAgdHAgKyBvZmYpOwogCX0KIAotCXJldHVybiBmZXRjaGF0dChU dXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSksIHRwICsgb2ZmKTsKKwlyZXR1 cm4gZmV0Y2hhdHQoY2F0dHIsIHRwICsgb2ZmKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpA QCAtMTM0Nyw2ICsxMjQ1LDcgQEAgaGVhcF9kZWZvcm1fdHVwbGUoSGVhcFR1cGxlIHR1cGxlLCBU dXBsZURlc2MgdHVwbGVEZXNjLAogCQkJCSAgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsKQog ewogCUhlYXBUdXBsZUhlYWRlciB0dXAgPSB0dXBsZS0+dF9kYXRhOworCUNvbXBhY3RBdHRyaWJ1 dGUgKmNhdHRyOwogCWJvb2wJCWhhc251bGxzID0gSGVhcFR1cGxlSGFzTnVsbHModHVwbGUpOwog CWludAkJCXRkZXNjX25hdHRzID0gdHVwbGVEZXNjLT5uYXR0czsKIAlpbnQJCQluYXR0czsJCQkv KiBudW1iZXIgb2YgYXR0cyB0byBleHRyYWN0ICovCkBAIC0xMzU0LDcwICsxMjUzLDkxIEBAIGhl YXBfZGVmb3JtX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwgVHVwbGVEZXNjIHR1cGxlRGVzYywKIAlj aGFyCSAgICp0cDsJCQkJLyogcHRyIHRvIHR1cGxlIGRhdGEgKi8KIAl1aW50MzIJCW9mZjsJCQkv KiBvZmZzZXQgaW4gdHVwbGUgZGF0YSAqLwogCWJpdHM4CSAgICpicCA9IHR1cC0+dF9iaXRzOwkv KiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4gdHVwbGUgKi8KLQlib29sCQlzbG93ID0gZmFsc2U7CS8q IGNhbiB3ZSB1c2Uvc2V0IGF0dGNhY2hlb2ZmPyAqLworCWludAkJCWNhY2hlb2ZmYXR0cnM7CisJ aW50CQkJZmlyc3RudWxsYXR0cjsKIAogCW5hdHRzID0gSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMo dHVwKTsKIAorCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBjYWxsIFR1cGxlRGVzY0ZpbmFsaXpl KCk/ICovCisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyID49IDApOwor CiAJLyoKIAkgKiBJbiBpbmhlcml0YW5jZSBzaXR1YXRpb25zLCBpdCBpcyBwb3NzaWJsZSB0aGF0 IHRoZSBnaXZlbiB0dXBsZSBhY3R1YWxseQogCSAqIGhhcyBtb3JlIGZpZWxkcyB0aGFuIHRoZSBj YWxsZXIgaXMgZXhwZWN0aW5nLiAgRG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mCiAJICogdGhlIGNh bGxlcidzIGFycmF5cy4KIAkgKi8KIAluYXR0cyA9IE1pbihuYXR0cywgdGRlc2NfbmF0dHMpOwor CWNhY2hlb2ZmYXR0cnMgPSBNaW4odHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIsIG5h dHRzKTsKKworCWlmIChoYXNudWxscykKKwl7CisJCWZpcnN0bnVsbGF0dHIgPSBmaXJzdF9udWxs X2F0dHIoYnAsIG5hdHRzKTsKKwkJY2FjaGVvZmZhdHRycyA9IE1pbihjYWNoZW9mZmF0dHJzLCBm aXJzdG51bGxhdHRyKTsKKwl9CisJZWxzZQorCQlmaXJzdG51bGxhdHRyID0gbmF0dHM7CiAKIAl0 cCA9IChjaGFyICopIHR1cCArIHR1cC0+dF9ob2ZmOworCWF0dG51bSA9IDA7CiAKLQlvZmYgPSAw OworCWlmIChjYWNoZW9mZmF0dHJzID4gMCkKKwl7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lO RworCQkvKiBJbiBBc3NlcnQgZW5hYmxlZCBidWlsZHMsIHZlcmlmeSBhdHRjYWNoZW9mZiBpcyBj b3JyZWN0ICovCisJCW9mZiA9IDA7CisjZW5kaWYKKwkJZG8KKwkJeworCQkJY2F0dHIgPSBUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisKKyNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCisJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFs aWduYnkpOworCQkJQXNzZXJ0KG9mZiA9PSBjYXR0ci0+YXR0Y2FjaGVvZmYpOworCQkJb2ZmICs9 IGNhdHRyLT5hdHRsZW47CisjZW5kaWYKIAotCWZvciAoYXR0bnVtID0gMDsgYXR0bnVtIDwgbmF0 dHM7IGF0dG51bSsrKQorCQkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaF9hdHQodHAgKyBjYXR0ci0+ YXR0Y2FjaGVvZmYsCisJCQkJCQkJCQkgICBjYXR0ci0+YXR0Ynl2YWwsCisJCQkJCQkJCQkgICBj YXR0ci0+YXR0bGVuKTsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCX0gd2hpbGUgKCsr YXR0bnVtIDwgY2FjaGVvZmZhdHRycyk7CisJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZiArIGNh dHRyLT5hdHRsZW47CisJfQorCWVsc2UKKwkJb2ZmID0gMDsKKworCWZvciAoOyBhdHRudW0gPCBm aXJzdG51bGxhdHRyOyBhdHRudW0rKykKIAl7Ci0JCUNvbXBhY3RBdHRyaWJ1dGUgKnRoaXNhdHQg PSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisJCWNhdHRyID0gVHVw bGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOwogCi0JCWlmIChoYXNudWxscyAm JiBhdHRfaXNudWxsKGF0dG51bSwgYnApKQotCQl7Ci0JCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1 bSkgMDsKLQkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2Fu J3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUgKi8KLQkJCWNvbnRpbnVlOwotCQl9CisJCW9mZiA9 IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSwgY2F0dHItPmF0dGxl biwKKwkJCQkJCQkJICB0cCArIG9mZik7CiAKIAkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJ dmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYpOwogCi0JCWlmICghc2xv dyAmJiB0aGlzYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJb2ZmID0gdGhpc2F0dC0+YXR0Y2Fj aGVvZmY7Ci0JCWVsc2UgaWYgKHRoaXNhdHQtPmF0dGxlbiA9PSAtMSkKLQkJewotCQkJLyoKLQkJ CSAqIFdlIGNhbiBvbmx5IGNhY2hlIHRoZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRyaWJ1dGUg aWYgdGhlCi0JCQkgKiBvZmZzZXQgaXMgYWxyZWFkeSBzdWl0YWJseSBhbGlnbmVkLCBzbyB0aGF0 IHRoZXJlIHdvdWxkIGJlIG5vCi0JCQkgKiBwYWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRoZW4gdGhl IG9mZnNldCB3aWxsIGJlIHZhbGlkIGZvciBlaXRoZXIKLQkJCSAqIGFuIGFsaWduZWQgb3IgdW5h bGlnbmVkIHZhbHVlLgotCQkJICovCi0JCQlpZiAoIXNsb3cgJiYKLQkJCQlvZmYgPT0gYXR0X25v bWluYWxfYWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnkpKQotCQkJCXRoaXNhdHQtPmF0 dGNhY2hlb2ZmID0gb2ZmOwotCQkJZWxzZQotCQkJewotCQkJCW9mZiA9IGF0dF9wb2ludGVyX2Fs aWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5LCAtMSwKLQkJCQkJCQkJCQkgIHRwICsgb2Zm KTsKLQkJCQlzbG93ID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIG5vdCB2 YXJsZW5hLCBzbyBzYWZlIHRvIHVzZSBhdHRfbm9taW5hbF9hbGlnbmJ5ICovCi0JCQlvZmYgPSBh dHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSk7CisJCW9mZiA9IGF0 dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGNhdHRyLT5hdHRsZW4sIHRwICsgb2ZmKTsKKwl9CisK Kwlmb3IgKDsgYXR0bnVtIDwgbmF0dHM7IGF0dG51bSsrKQorCXsKKwkJQXNzZXJ0KGhhc251bGxz KTsKIAotCQkJaWYgKCFzbG93KQotCQkJCXRoaXNhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOworCQlp ZiAoYXR0X2lzbnVsbChhdHRudW0sIGJwKSkKKwkJeworCQkJdmFsdWVzW2F0dG51bV0gPSAoRGF0 dW0pIDA7CisJCQlpc251bGxbYXR0bnVtXSA9IHRydWU7CisJCQljb250aW51ZTsKIAkJfQogCi0J CXZhbHVlc1thdHRudW1dID0gZmV0Y2hhdHQodGhpc2F0dCwgdHAgKyBvZmYpOworCQljYXR0ciA9 IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwkJb2ZmID0gYXR0X3Bv aW50ZXJfYWxpZ25ieShvZmYsIGNhdHRyLT5hdHRhbGlnbmJ5LCBjYXR0ci0+YXR0bGVuLAorCQkJ CQkJCQkgIHRwICsgb2ZmKTsKIAotCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0 aGlzYXR0LT5hdHRsZW4sIHRwICsgb2ZmKTsKKwkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKKwkJ dmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dChjYXR0ciwgdHAgKyBvZmYpOwogCi0JCWlmICh0aGlz YXR0LT5hdHRsZW4gPD0gMCkKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2FuJ3QgdXNlIGF0dGNhY2hl b2ZmIGFueW1vcmUgKi8KKwkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHIt PmF0dGxlbiwgdHAgKyBvZmYpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvY29tbW9uL2luZGV4dHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5k ZXh0dXBsZS5jCmluZGV4IGQ3YzhjNTNmZDhkLi4wODRlMDkzN2E2MCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMKQEAgLTIyMywxOCArMjIzLDYgQEAgaW5kZXhfZm9ybV90 dXBsZV9jb250ZXh0KFR1cGxlRGVzYyB0dXBsZURlc2NyaXB0b3IsCiAgKgogICoJCVRoaXMgZ2V0 cyBjYWxsZWQgZnJvbSBpbmRleF9nZXRhdHRyKCkgbWFjcm8sIGFuZCBvbmx5IGluIGNhc2VzCiAg KgkJd2hlcmUgd2UgY2FuJ3QgdXNlIGNhY2hlb2Zmc2V0IGFuZCB0aGUgdmFsdWUgaXMgbm90IG51 bGwuCi0gKgotICoJCVRoaXMgY2FjaGVzIGF0dHJpYnV0ZSBvZmZzZXRzIGluIHRoZSBhdHRyaWJ1 dGUgZGVzY3JpcHRvci4KLSAqCi0gKgkJQW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwZWVkIHRoaW5n cyB1cCB3b3VsZCBiZSB0byBjYWNoZSBvZmZzZXRzCi0gKgkJd2l0aCB0aGUgdHVwbGUsIGJ1dCB0 aGF0IHNlZW1zIG1vcmUgZGlmZmljdWx0IHVubGVzcyB5b3UgdGFrZQotICoJCXRoZSBzdG9yYWdl IGhpdCBvZiBhY3R1YWxseSBwdXR0aW5nIHRob3NlIG9mZnNldHMgaW50byB0aGUKLSAqCQl0dXBs ZSB5b3Ugc2VuZCB0byBkaXNrLiAgWXVjay4KLSAqCi0gKgkJVGhpcyBzY2hlbWUgd2lsbCBiZSBz bGlnaHRseSBzbG93ZXIgdGhhbiB0aGF0LCBidXQgc2hvdWxkCi0gKgkJcGVyZm9ybSB3ZWxsIGZv ciBxdWVyaWVzIHdoaWNoIGhpdCBsYXJnZSAjJ3Mgb2YgdHVwbGVzLiAgQWZ0ZXIKLSAqCQl5b3Ug Y2FjaGUgdGhlIG9mZnNldHMgb25jZSwgZXhhbWluaW5nIGFsbCB0aGUgb3RoZXIgdHVwbGVzIHVz aW5nCi0gKgkJdGhlIHNhbWUgYXR0cmlidXRlIGRlc2NyaXB0b3Igd2lsbCBnbyBtdWNoIHF1aWNr ZXIuIC1jaW0gNS80LzkxCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIERhdHVtCkBAIC0yNDIs MjA1ICsyMzAsMTI5IEBAIG5vY2FjaGVfaW5kZXhfZ2V0YXR0cihJbmRleFR1cGxlIHR1cCwKIAkJ CQkJICBpbnQgYXR0bnVtLAogCQkJCQkgIFR1cGxlRGVzYyB0dXBsZURlc2MpCiB7CisJQ29tcGFj dEF0dHJpYnV0ZSAqY2F0dHI7CiAJY2hhcgkgICAqdHA7CQkJCS8qIHB0ciB0byBkYXRhIHBhcnQg b2YgdHVwbGUgKi8KIAliaXRzOAkgICAqYnAgPSBOVUxMOwkJLyogcHRyIHRvIG51bGwgYml0bWFw IGluIHR1cGxlICovCi0JYm9vbAkJc2xvdyA9IGZhbHNlOwkvKiBkbyB3ZSBoYXZlIHRvIHdhbGsg YXR0cnM/ICovCiAJaW50CQkJZGF0YV9vZmY7CQkvKiB0dXBsZSBkYXRhIG9mZnNldCAqLwogCWlu dAkJCW9mZjsJCQkvKiBjdXJyZW50IG9mZnNldCB3aXRoaW4gZGF0YSAqLworCWludAkJCXN0YXJ0 QXR0cjsKKwlpbnQJCQlmaXJzdG51bGxhdHRyOworCWJvb2wJCWhhc251bGxzID0gSW5kZXhUdXBs ZUhhc051bGxzKHR1cCk7CisJaW50CQkJaTsKIAotCS8qIC0tLS0tLS0tLS0tLS0tLS0KLQkgKgkg VGhyZWUgY2FzZXM6Ci0JICoKLQkgKgkgMTogTm8gbnVsbHMgYW5kIG5vIHZhcmlhYmxlLXdpZHRo IGF0dHJpYnV0ZXMuCi0JICoJIDI6IEhhcyBhIG51bGwgb3IgYSB2YXItd2lkdGggQUZURVIgYXR0 LgotCSAqCSAzOiBIYXMgbnVsbHMgb3IgdmFyLXdpZHRocyBCRUZPUkUgYXR0LgotCSAqIC0tLS0t LS0tLS0tLS0tLS0KLQkgKi8KLQotCWRhdGFfb2ZmID0gSW5kZXhJbmZvRmluZERhdGFPZmZzZXQo dHVwLT50X2luZm8pOworCS8qIERpZCBzb21lb25lIGZvcmdldCB0byBjYWxsIFR1cGxlRGVzY0Zp bmFsaXplKCk/ICovCisJQXNzZXJ0KHR1cGxlRGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyID49 IDApOwogCiAJYXR0bnVtLS07CiAKLQlpZiAoSW5kZXhUdXBsZUhhc051bGxzKHR1cCkpCi0Jewot CQkvKgotCQkgKiB0aGVyZSdzIGEgbnVsbCBzb21ld2hlcmUgaW4gdGhlIHR1cGxlCi0JCSAqCi0J CSAqIGNoZWNrIHRvIHNlZSBpZiBkZXNpcmVkIGF0dCBpcyBudWxsCi0JCSAqLworCS8qCisJICog SWYgdGhlcmUgYXJlIG5vIE5VTExzIGJlZm9yZSB0aGUgcmVxdWlyZWQgYXR0bnVtLCB0aGVuIHdl IGNhbiBzdGFydCBhdAorCSAqIHRoZSBoaWdoZXN0IGF0dHJpYnV0ZSB3aXRoIGEga25vd24gb2Zm c2V0LCBvciB0aGUgZmlyc3QgYXR0cmlidXRlIGlmCisJICogbm9uZSBoYXZlIGEgY2FjaGVkIG9m ZnNldC4gIElmIHRoZSB0dXBsZSBoYXMgbm8gdmFyaWFibGUgd2lkdGggdHlwZXMsCisJICogd2hp Y2ggaXMgY29tbW9uIHdpdGggaW5kZXhlcywgdGhlbiB3ZSBjYW4gdXNlIGEgc2xpZ2h0bHkgY2hl YXBlciBtZXRob2QKKwkgKiBvZiBvZmZzZXQgY2FsY3VsYXRpb24sIGFzIHdlIGp1c3QgbmVlZCB0 byBhZGQgdGhlIGF0dGxlbiB0byB0aGUgYWxpZ25lZAorCSAqIG9mZnNldCB3aGVuIHNraXBwaW5n IG92ZXIgY29sdW1ucy4gIFdoZW4gdGhlIHR1cGxlIGNvbnRhaW5zCisJICogdmFyaWFibGUtd2lk dGggdHlwZXMsIHdlIG11c3QgdXNlIGF0dF9hZGRsZW5ndGhfcG9pbnRlcigpLCB3aGljaCBkb2Vz IGEKKwkgKiBiaXQgbW9yZSBicmFuY2hpbmcgYW5kIGlzIHNsaWdodGx5IGxlc3MgZWZmaWNpZW50 LgorCSAqLworCWRhdGFfb2ZmID0gSW5kZXhJbmZvRmluZERhdGFPZmZzZXQodHVwLT50X2luZm8p OworCXRwID0gKGNoYXIgKikgdHVwICsgZGF0YV9vZmY7CiAKLQkJLyogWFhYICJrbm93cyIgdF9i aXRzIGFyZSBqdXN0IGFmdGVyIGZpeGVkIHR1cGxlIGhlYWRlciEgKi8KKwkvKgorCSAqIEZpbmQg dGhlIGZpcnN0IE5VTEwgY29sdW1uLCBvciBpZiB0aGVyZSdzIG5vbmUgc2V0IHRoZSBmaXJzdCBO VUxMIHRvCisJICogYXR0bnVtIHNvIHRoYXQgd2UgY2FuIGZvcmVnbyBOVUxMIGNoZWNraW5nIGFs bCB0aGUgd2F5IHRvIGF0dG51bS4KKwkgKi8KKwlpZiAoaGFzbnVsbHMpCisJewogCQlicCA9IChi aXRzOCAqKSAoKGNoYXIgKikgdHVwICsgc2l6ZW9mKEluZGV4VHVwbGVEYXRhKSk7Ci0KLQkJLyoK LQkJICogTm93IGNoZWNrIHRvIHNlZSBpZiBhbnkgcHJlY2VkaW5nIGJpdHMgYXJlIG51bGwuLi4K LQkJICovCi0JCXsKLQkJCWludAkJCWJ5dGUgPSBhdHRudW0gPj4gMzsKLQkJCWludAkJCWZpbmFs Yml0ID0gYXR0bnVtICYgMHgwNzsKLQotCQkJLyogY2hlY2sgZm9yIG51bGxzICJiZWZvcmUiIGZp bmFsIGJpdCBvZiBsYXN0IGJ5dGUgKi8KLQkJCWlmICgofmJwW2J5dGVdKSAmICgoMSA8PCBmaW5h bGJpdCkgLSAxKSkKLQkJCQlzbG93ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBjaGVj ayBmb3IgbnVsbHMgaW4gYW55ICJlYXJsaWVyIiBieXRlcyAqLwotCQkJCWludAkJCWk7Ci0KLQkJ CQlmb3IgKGkgPSAwOyBpIDwgYnl0ZTsgaSsrKQotCQkJCXsKLQkJCQkJaWYgKGJwW2ldICE9IDB4 RkYpCi0JCQkJCXsKLQkJCQkJCXNsb3cgPSB0cnVlOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJ CQl9Ci0JCQl9Ci0JCX0KKwkJZmlyc3RudWxsYXR0ciA9IGZpcnN0X251bGxfYXR0cihicCwgYXR0 bnVtKTsKIAl9CisJZWxzZQorCQlmaXJzdG51bGxhdHRyID0gYXR0bnVtOwogCi0JdHAgPSAoY2hh ciAqKSB0dXAgKyBkYXRhX29mZjsKLQotCWlmICghc2xvdykKKwlpZiAodHVwbGVEZXNjLT5maXJz dE5vbkNhY2hlZE9mZkF0dHIgPiAwKQogCXsKLQkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0OwotCi0J CS8qCi0JCSAqIElmIHdlIGdldCBoZXJlLCB0aGVyZSBhcmUgbm8gbnVsbHMgdXAgdG8gYW5kIGlu Y2x1ZGluZyB0aGUgdGFyZ2V0Ci0JCSAqIGF0dHJpYnV0ZS4gIElmIHdlIGhhdmUgYSBjYWNoZWQg b2Zmc2V0LCB3ZSBjYW4gdXNlIGl0LgotCQkgKi8KLQkJYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIodHVwbGVEZXNjLCBhdHRudW0pOwotCQlpZiAoYXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJ cmV0dXJuIGZldGNoYXR0KGF0dCwgdHAgKyBhdHQtPmF0dGNhY2hlb2ZmKTsKLQotCQkvKgotCQkg KiBPdGhlcndpc2UsIGNoZWNrIGZvciBub24tZml4ZWQtbGVuZ3RoIGF0dHJzIHVwIHRvIGFuZCBp bmNsdWRpbmcKLQkJICogdGFyZ2V0LiAgSWYgdGhlcmUgYXJlbid0IGFueSwgaXQncyBzYWZlIHRv IGNoZWFwbHkgaW5pdGlhbGl6ZSB0aGUKLQkJICogY2FjaGVkIG9mZnNldHMgZm9yIHRoZXNlIGF0 dHJzLgotCQkgKi8KLQkJaWYgKEluZGV4VHVwbGVIYXNWYXJ3aWR0aHModHVwKSkKLQkJewotCQkJ aW50CQkJajsKLQotCQkJZm9yIChqID0gMDsgaiA8PSBhdHRudW07IGorKykKLQkJCXsKLQkJCQlp ZiAoVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBqKS0+YXR0bGVuIDw9IDApCi0JCQkJ ewotCQkJCQlzbG93ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9CisJCXN0 YXJ0QXR0ciA9IE1pbih0dXBsZURlc2MtPmZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciAtIDEsIGZpcnN0 bnVsbGF0dHIpOworCQlvZmYgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIHN0YXJ0 QXR0ciktPmF0dGNhY2hlb2ZmOwogCX0KLQotCWlmICghc2xvdykKKwllbHNlCiAJewotCQlpbnQJ CQluYXR0cyA9IHR1cGxlRGVzYy0+bmF0dHM7Ci0JCWludAkJCWogPSAxOwotCi0JCS8qCi0JCSAq IElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgdHVwbGUgd2l0aCBubyBudWxscyBvciB2YXItd2lk dGhzIHVwIHRvCi0JCSAqIGFuZCBpbmNsdWRpbmcgdGhlIHRhcmdldCBhdHRyaWJ1dGUsIHNvIHdl IGNhbiB1c2UgdGhlIGNhY2hlZCBvZmZzZXQKLQkJICogLi4uIG9ubHkgd2UgZG9uJ3QgaGF2ZSBp dCB5ZXQsIG9yIHdlJ2Qgbm90IGhhdmUgZ290IGhlcmUuICBTaW5jZQotCQkgKiBpdCdzIGNoZWFw IHRvIGNvbXB1dGUgb2Zmc2V0cyBmb3IgZml4ZWQtd2lkdGggY29sdW1ucywgd2UgdGFrZSB0aGUK LQkJICogb3Bwb3J0dW5pdHkgdG8gaW5pdGlhbGl6ZSB0aGUgY2FjaGVkIG9mZnNldHMgZm9yICph bGwqIHRoZSBsZWFkaW5nCi0JCSAqIGZpeGVkLXdpZHRoIGNvbHVtbnMsIGluIGhvcGUgb2YgYXZv aWRpbmcgZnV0dXJlIHZpc2l0cyB0byB0aGlzCi0JCSAqIHJvdXRpbmUuCi0JCSAqLwotCQlUdXBs ZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIDApLT5hdHRjYWNoZW9mZiA9IDA7CisJCXN0YXJ0 QXR0ciA9IDA7CisJCW9mZiA9IDA7CisJfQogCi0JCS8qIHdlIG1pZ2h0IGhhdmUgc2V0IHNvbWUg b2Zmc2V0cyBpbiB0aGUgc2xvdyBwYXRoIHByZXZpb3VzbHkgKi8KLQkJd2hpbGUgKGogPCBuYXR0 cyAmJiBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGopLT5hdHRjYWNoZW9mZiA+IDAp Ci0JCQlqKys7CisJLyogSGFuZGxlIHR1cGxlcyB3aXRoIHZhci13aWR0aCBhdHRyaWJ1dGVzICov CisJaWYgKEluZGV4VHVwbGVIYXNWYXJ3aWR0aHModHVwKSkKKwl7CisJCS8qIENhbGN1bGF0ZSB0 aGUgb2Zmc2V0IHVwIHVudGlsIHRoZSBmaXJzdCBOVUxMICovCisJCWZvciAoaSA9IHN0YXJ0QXR0 cjsgaSA8IGZpcnN0bnVsbGF0dHI7IGkrKykKKwkJeworCQkJY2F0dHIgPSBUdXBsZURlc2NDb21w YWN0QXR0cih0dXBsZURlc2MsIGkpOwogCi0JCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzYywgaiAtIDEpLT5hdHRjYWNoZW9mZiArCi0JCQlUdXBsZURlc2NDb21wYWN0QXR0cih0 dXBsZURlc2MsIGogLSAxKS0+YXR0bGVuOworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJICBjYXR0ci0+YXR0 bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50 ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CisJCX0KIAotCQlmb3IgKDsgaiA8IG5h dHRzOyBqKyspCisJCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGZvciBhbnkgcmVtYWluaW5nIGNv bHVtbnMuICovCisJCWZvciAoOyBpIDwgYXR0bnVtOyBpKyspCiAJCXsKLQkJCUNvbXBhY3RBdHRy aWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaik7CisJCQlBc3Nl cnQoaGFzbnVsbHMpOwogCi0JCQlpZiAoYXR0LT5hdHRsZW4gPD0gMCkKLQkJCQlicmVhazsKKwkJ CWlmIChhdHRfaXNudWxsKGksIGJwKSkKKwkJCQljb250aW51ZTsKIAotCQkJb2ZmID0gYXR0X25v bWluYWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSk7CisJCQljYXR0ciA9IFR1cGxlRGVz Y0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7CiAKLQkJCWF0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7 Ci0KLQkJCW9mZiArPSBhdHQtPmF0dGxlbjsKKwkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnko b2ZmLAorCQkJCQkJCQkJICBjYXR0ci0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCSAgY2F0dHItPmF0 dGxlbiwKKwkJCQkJCQkJCSAgdHAgKyBvZmYpOworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2lu dGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOwogCQl9Ci0KLQkJQXNzZXJ0KGogPiBh dHRudW0pOwotCi0JCW9mZiA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVt KS0+YXR0Y2FjaGVvZmY7CiAJfQogCWVsc2UKIAl7Ci0JCWJvb2wJCXVzZWNhY2hlID0gdHJ1ZTsK LQkJaW50CQkJaTsKKwkJLyogSGFuZGxlIHR1cGxlcyB3aXRoIG9ubHkgZml4ZWQtd2lkdGggYXR0 cmlidXRlcyAqLwogCi0JCS8qCi0JCSAqIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSB0byB3YWxr IHRoZSB0dXBsZSBDQVJFRlVMTFkuICBCdXQgd2Ugc3RpbGwKLQkJICogbWlnaHQgYmUgYWJsZSB0 byBjYWNoZSBzb21lIG9mZnNldHMgZm9yIG5leHQgdGltZS4KLQkJICoKLQkJICogTm90ZSAtIFRo aXMgbG9vcCBpcyBhIGxpdHRsZSB0cmlja3kuICBGb3IgZWFjaCBub24tbnVsbCBhdHRyaWJ1dGUs Ci0JCSAqIHdlIGhhdmUgdG8gZmlyc3QgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRpbmcgYmVm b3JlIHRoZSBhdHRyLAotCQkgKiB0aGVuIGFkdmFuY2Ugb3ZlciB0aGUgYXR0ciBiYXNlZCBvbiBp dHMgbGVuZ3RoLiAgTnVsbHMgaGF2ZSBubwotCQkgKiBzdG9yYWdlIGFuZCBubyBhbGlnbm1lbnQg cGFkZGluZyBlaXRoZXIuICBXZSBjYW4gdXNlL3NldAotCQkgKiBhdHRjYWNoZW9mZiB1bnRpbCB3 ZSByZWFjaCBlaXRoZXIgYSBudWxsIG9yIGEgdmFyLXdpZHRoIGF0dHJpYnV0ZS4KLQkJICovCi0J CW9mZiA9IDA7Ci0JCWZvciAoaSA9IDA7OyBpKyspCQkvKiBsb29wIGV4aXQgaXMgYXQgImJyZWFr IiAqLworCQkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCB1cCB1bnRpbCB0aGUgZmlyc3QgTlVMTCAq LworCQlmb3IgKGkgPSBzdGFydEF0dHI7IGkgPCBmaXJzdG51bGxhdHRyOyBpKyspCiAJCXsKLQkJ CUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywg aSk7Ci0KLQkJCWlmIChJbmRleFR1cGxlSGFzTnVsbHModHVwKSAmJiBhdHRfaXNudWxsKGksIGJw KSkKLQkJCXsKLQkJCQl1c2VjYWNoZSA9IGZhbHNlOwotCQkJCWNvbnRpbnVlOwkJLyogdGhpcyBj YW5ub3QgYmUgdGhlIHRhcmdldCBhdHQgKi8KLQkJCX0KLQotCQkJLyogSWYgd2Uga25vdyB0aGUg bmV4dCBvZmZzZXQsIHdlIGNhbiBza2lwIHRoZSByZXN0ICovCi0JCQlpZiAodXNlY2FjaGUgJiYg YXR0LT5hdHRjYWNoZW9mZiA+PSAwKQotCQkJCW9mZiA9IGF0dC0+YXR0Y2FjaGVvZmY7Ci0JCQll bHNlIGlmIChhdHQtPmF0dGxlbiA9PSAtMSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFdlIGNhbiBv bmx5IGNhY2hlIHRoZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRyaWJ1dGUgaWYgdGhlCi0JCQkJ ICogb2Zmc2V0IGlzIGFscmVhZHkgc3VpdGFibHkgYWxpZ25lZCwgc28gdGhhdCB0aGVyZSB3b3Vs ZCBiZQotCQkJCSAqIG5vIHBhZCBieXRlcyBpbiBhbnkgY2FzZTogdGhlbiB0aGUgb2Zmc2V0IHdp bGwgYmUgdmFsaWQgZm9yCi0JCQkJICogZWl0aGVyIGFuIGFsaWduZWQgb3IgdW5hbGlnbmVkIHZh bHVlLgotCQkJCSAqLwotCQkJCWlmICh1c2VjYWNoZSAmJgotCQkJCQlvZmYgPT0gYXR0X25vbWlu YWxfYWxpZ25ieShvZmYsIGF0dC0+YXR0YWxpZ25ieSkpCi0JCQkJCWF0dC0+YXR0Y2FjaGVvZmYg PSBvZmY7Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShv ZmYsIGF0dC0+YXR0YWxpZ25ieSwgLTEsCi0JCQkJCQkJCQkJCSAgdHAgKyBvZmYpOwotCQkJCQl1 c2VjYWNoZSA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBub3Qg dmFybGVuYSwgc28gc2FmZSB0byB1c2UgYXR0X25vbWluYWxfYWxpZ25ieSAqLwotCQkJCW9mZiA9 IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBhdHQtPmF0dGFsaWduYnkpOworCQkJY2F0dHIgPSBU dXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGkpOworCisJCQlBc3NlcnQoY2F0dHItPmF0 dGxlbiA+IDApOworCQkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCQkg IGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJ ICB0cCArIG9mZik7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxlbjsKKwkJfQogCi0JCQkJaWYgKHVz ZWNhY2hlKQotCQkJCQlhdHQtPmF0dGNhY2hlb2ZmID0gb2ZmOwotCQkJfQorCQkvKiBDYWxjdWxh dGUgdGhlIG9mZnNldCBmb3IgYW55IHJlbWFpbmluZyBjb2x1bW5zLiAqLworCQlmb3IgKDsgaSA8 IGF0dG51bTsgaSsrKQorCQl7CisJCQlBc3NlcnQoaGFzbnVsbHMpOwogCi0JCQlpZiAoaSA9PSBh dHRudW0pCi0JCQkJYnJlYWs7CisJCQlpZiAoYXR0X2lzbnVsbChpLCBicCkpCisJCQkJY29udGlu dWU7CiAKLQkJCW9mZiA9IGF0dF9hZGRsZW5ndGhfcG9pbnRlcihvZmYsIGF0dC0+YXR0bGVuLCB0 cCArIG9mZik7CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgaSk7 CiAKLQkJCWlmICh1c2VjYWNoZSAmJiBhdHQtPmF0dGxlbiA8PSAwKQotCQkJCXVzZWNhY2hlID0g ZmFsc2U7CisJCQlBc3NlcnQoY2F0dHItPmF0dGxlbiA+IDApOworCQkJb2ZmID0gYXR0X3BvaW50 ZXJfYWxpZ25ieShvZmYsCisJCQkJCQkJCQkgIGNhdHRyLT5hdHRhbGlnbmJ5LAorCQkJCQkJCQkJ ICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkJICB0cCArIG9mZik7CisJCQlvZmYgKz0gY2F0dHIt PmF0dGxlbjsKIAkJfQogCX0KIAotCXJldHVybiBmZXRjaGF0dChUdXBsZURlc2NDb21wYWN0QXR0 cih0dXBsZURlc2MsIGF0dG51bSksIHRwICsgb2ZmKTsKKwljYXR0ciA9IFR1cGxlRGVzY0NvbXBh Y3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKwlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9m ZiwgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJICBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7 CisJcmV0dXJuIGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CiB9CiAKIC8qCkBAIC00ODAsNjMg KzM5Miw4NiBAQCBpbmRleF9kZWZvcm1fdHVwbGVfaW50ZXJuYWwoVHVwbGVEZXNjIHR1cGxlRGVz Y3JpcHRvciwKIAkJCQkJCQlEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCQkJY2hh ciAqdHAsIGJpdHM4ICpicCwgaW50IGhhc251bGxzKQogeworCUNvbXBhY3RBdHRyaWJ1dGUgKmNh dHRyOwogCWludAkJCW5hdHRzID0gdHVwbGVEZXNjcmlwdG9yLT5uYXR0czsgLyogbnVtYmVyIG9m IGF0dHMgdG8gZXh0cmFjdCAqLwotCWludAkJCWF0dG51bTsKKwlpbnQJCQlhdHRudW0gPSAwOwog CWludAkJCW9mZiA9IDA7CQkvKiBvZmZzZXQgaW4gdHVwbGUgZGF0YSAqLwotCWJvb2wJCXNsb3cg PSBmYWxzZTsJLyogY2FuIHdlIHVzZS9zZXQgYXR0Y2FjaGVvZmY/ICovCisJaW50CQkJY2FjaGVv ZmZhdHRyczsKKwlpbnQJCQlmaXJzdG51bGxhdHRyOwogCiAJLyogQXNzZXJ0IHRvIHByb3RlY3Qg Y2FsbGVycyB3aG8gYWxsb2NhdGUgZml4ZWQtc2l6ZSBhcnJheXMgKi8KIAlBc3NlcnQobmF0dHMg PD0gSU5ERVhfTUFYX0tFWVMpOwogCi0JZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCBuYXR0czsg YXR0bnVtKyspCisJLyogRGlkIHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxp emUoKT8gKi8KKwlBc3NlcnQodHVwbGVEZXNjcmlwdG9yLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIg Pj0gMCk7CisKKwljYWNoZW9mZmF0dHJzID0gTWluKHR1cGxlRGVzY3JpcHRvci0+Zmlyc3ROb25D YWNoZWRPZmZBdHRyLCBuYXR0cyk7CisKKwlpZiAoaGFzbnVsbHMpCisJeworCQlmaXJzdG51bGxh dHRyID0gZmlyc3RfbnVsbF9hdHRyKGJwLCBuYXR0cyk7CisJCWNhY2hlb2ZmYXR0cnMgPSBNaW4o Y2FjaGVvZmZhdHRycywgZmlyc3RudWxsYXR0cik7CisJfQorCWVsc2UKKwkJZmlyc3RudWxsYXR0 ciA9IG5hdHRzOworCisJaWYgKGNhY2hlb2ZmYXR0cnMgPiAwKQogCXsKLQkJQ29tcGFjdEF0dHJp YnV0ZSAqdGhpc2F0dCA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzY3JpcHRvciwgYXR0 bnVtKTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCS8qIEluIEFzc2VydCBlbmFibGVk IGJ1aWxkcywgdmVyaWZ5IGF0dGNhY2hlb2ZmIGlzIGNvcnJlY3QgKi8KKwkJb2ZmID0gMDsKKyNl bmRpZgogCi0JCWlmIChoYXNudWxscyAmJiBhdHRfaXNudWxsKGF0dG51bSwgYnApKQorCQlkbwog CQl7Ci0JCQl2YWx1ZXNbYXR0bnVtXSA9IChEYXR1bSkgMDsKLQkJCWlzbnVsbFthdHRudW1dID0g dHJ1ZTsKLQkJCXNsb3cgPSB0cnVlOwkJLyogY2FuJ3QgdXNlIGF0dGNhY2hlb2ZmIGFueW1vcmUg Ki8KLQkJCWNvbnRpbnVlOwotCQl9CisJCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1 cGxlRGVzY3JpcHRvciwgYXR0bnVtKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkJ CW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCBjYXR0ci0+YXR0YWxpZ25ieSk7CisJCQlB c3NlcnQob2ZmID09IGNhdHRyLT5hdHRjYWNoZW9mZik7CisJCQlvZmYgKz0gY2F0dHItPmF0dGxl bjsKKyNlbmRpZgorCisJCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoX2F0dCh0cCArIGNhdHRyLT5h dHRjYWNoZW9mZiwgY2F0dHItPmF0dGJ5dmFsLAorCQkJCQkJCQkJICAgY2F0dHItPmF0dGxlbik7 CisJCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQl9IHdoaWxlICgrK2F0dG51bSA8IGNhY2hl b2ZmYXR0cnMpOworCisJCW9mZiA9IGNhdHRyLT5hdHRjYWNoZW9mZiArIGNhdHRyLT5hdHRsZW47 CisJfQorCisJZm9yICg7IGF0dG51bSA8IGZpcnN0bnVsbGF0dHI7IGF0dG51bSsrKQorCXsKKwkJ Y2F0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2NyaXB0b3IsIGF0dG51bSk7CisK KwkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25ieShvZmYsIGNhdHRyLT5hdHRhbGlnbmJ5LCBjYXR0 ci0+YXR0bGVuLAorCQkJCQkJCQkgIHRwICsgb2ZmKTsKIAogCQlpc251bGxbYXR0bnVtXSA9IGZh bHNlOworCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CiAKLQkJ aWYgKCFzbG93ICYmIHRoaXNhdHQtPmF0dGNhY2hlb2ZmID49IDApCi0JCQlvZmYgPSB0aGlzYXR0 LT5hdHRjYWNoZW9mZjsKLQkJZWxzZSBpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQotCQl7Ci0J CQkvKgotCQkJICogV2UgY2FuIG9ubHkgY2FjaGUgdGhlIG9mZnNldCBmb3IgYSB2YXJsZW5hIGF0 dHJpYnV0ZSBpZiB0aGUKLQkJCSAqIG9mZnNldCBpcyBhbHJlYWR5IHN1aXRhYmx5IGFsaWduZWQs IHNvIHRoYXQgdGhlcmUgd291bGQgYmUgbm8KLQkJCSAqIHBhZCBieXRlcyBpbiBhbnkgY2FzZTog dGhlbiB0aGUgb2Zmc2V0IHdpbGwgYmUgdmFsaWQgZm9yIGVpdGhlcgotCQkJICogYW4gYWxpZ25l ZCBvciB1bmFsaWduZWQgdmFsdWUuCi0JCQkgKi8KLQkJCWlmICghc2xvdyAmJgotCQkJCW9mZiA9 PSBhdHRfbm9taW5hbF9hbGlnbmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSkpCi0JCQkJdGhp c2F0dC0+YXR0Y2FjaGVvZmYgPSBvZmY7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJb2ZmID0gYXR0X3Bv aW50ZXJfYWxpZ25ieShvZmYsIHRoaXNhdHQtPmF0dGFsaWduYnksIC0xLAotCQkJCQkJCQkJCSAg dHAgKyBvZmYpOwotCQkJCXNsb3cgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJ Lyogbm90IHZhcmxlbmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJ CW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2ZmLCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKKwkJ b2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYp OworCX0KKworCWZvciAoOyBhdHRudW0gPCBuYXR0czsgYXR0bnVtKyspCisJeworCQlBc3NlcnQo aGFzbnVsbHMpOwogCi0JCQlpZiAoIXNsb3cpCi0JCQkJdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPSBv ZmY7CisJCWlmIChhdHRfaXNudWxsKGF0dG51bSwgYnApKQorCQl7CisJCQl2YWx1ZXNbYXR0bnVt XSA9IChEYXR1bSkgMDsKKwkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOwog CQl9CiAKLQkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0dCh0aGlzYXR0LCB0cCArIG9mZik7CisJ CWNhdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjcmlwdG9yLCBhdHRudW0pOwor CQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwgY2F0dHItPmF0dGFsaWduYnksIGNhdHRy LT5hdHRsZW4sCisJCQkJCQkJCSAgdHAgKyBvZmYpOwogCi0JCW9mZiA9IGF0dF9hZGRsZW5ndGhf cG9pbnRlcihvZmYsIHRoaXNhdHQtPmF0dGxlbiwgdHAgKyBvZmYpOworCQlpc251bGxbYXR0bnVt XSA9IGZhbHNlOworCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7 CiAKLQkJaWYgKHRoaXNhdHQtPmF0dGxlbiA8PSAwKQotCQkJc2xvdyA9IHRydWU7CQkvKiBjYW4n dCB1c2UgYXR0Y2FjaGVvZmYgYW55bW9yZSAqLworCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50 ZXIob2ZmLCBjYXR0ci0+YXR0bGVuLCB0cCArIG9mZik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3R1cGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vdHVwZGVzYy5jCmluZGV4IGU5OGRlODA2YTc3Li4yNTM2NGRiNjMwYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90dXBkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2NvbW1vbi90dXBkZXNjLmMKQEAgLTIxNCw2ICsyMTQsOSBAQCBDcmVhdGVUZW1wbGF0 ZVR1cGxlRGVzYyhpbnQgbmF0dHMpCiAJZGVzYy0+dGR0eXBtb2QgPSAtMTsKIAlkZXNjLT50ZHJl ZmNvdW50ID0gLTE7CQkvKiBhc3N1bWUgbm90IHJlZmVyZW5jZS1jb3VudGVkICovCiAKKwkvKiBU aGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBjb3JyZWN0IHZhbHVlIGJ5IFR1cGxlRGVzY0ZpbmFsaXpl KCkgKi8KKwlkZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPSAtMTsKKwogCXJldHVybiBkZXNj OwogfQogCkBAIC00NzQsNiArNDc3LDkgQEAgVHVwbGVEZXNjQ29weShUdXBsZURlc2MgZHN0LCBU dXBsZURlc2Mgc3JjKQogICoJCWRlc2NyaXB0b3IgdG8gYW5vdGhlci4KICAqCiAgKiAhISEgQ29u c3RyYWludHMgYW5kIGRlZmF1bHRzIGFyZSBub3QgY29waWVkICEhIQorICoKKyAqIFRoZSBjYWxs ZXIgbXVzdCB0YWtlIGNhcmUgb2YgY2FsbGluZyBUdXBsZURlc2NGaW5hbGl6ZSgpIG9uIG9uY2Ug YWxsCisgKiBUdXBsZURlc2MgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KICAqLwogdm9pZAogVHVw bGVEZXNjQ29weUVudHJ5KFR1cGxlRGVzYyBkc3QsIEF0dHJOdW1iZXIgZHN0QXR0bm8sCkBAIC01 MDYsNiArNTEyLDM3IEBAIFR1cGxlRGVzY0NvcHlFbnRyeShUdXBsZURlc2MgZHN0LCBBdHRyTnVt YmVyIGRzdEF0dG5vLAogCXBvcHVsYXRlX2NvbXBhY3RfYXR0cmlidXRlKGRzdCwgZHN0QXR0bm8g LSAxKTsKIH0KIAorLyoKKyAqIFR1cGxlRGVzY0ZpbmFsaXplCisgKgkJRmluYWxpemUgdGhlIGdp dmVuIFR1cGxlRGVzYy4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlCisgKgkJYXR0cmli dXRlcyBhcnJheXMgaGF2ZSBiZWVuIHBvcHVsYXRlZCBvciBhZGp1c3RlZCBieSBhbnkgY29kZS4K KyAqCisgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZSgp IGFuZCBiZWZvcmUKKyAqIEJsZXNzVHVwbGVEZXNjKCkuCisgKi8KK3ZvaWQKK1R1cGxlRGVzY0Zp bmFsaXplKFR1cGxlRGVzYyB0dXBkZXNjKQoreworCWludAkJCWZpcnN0Tm9uQ2FjaGVkT2ZmQXR0 ciA9IDA7CisJaW50CQkJb2ZmcCA9IDA7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2Mt Pm5hdHRzOyBpKyspCisJeworCQlDb21wYWN0QXR0cmlidXRlICpjYXR0ciA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKHR1cGRlc2MsIGkpOworCisJCWlmIChjYXR0ci0+YXR0bGVuIDw9IDApCisJCQli cmVhazsKKworCQlvZmZwID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmZwLCBjYXR0ci0+YXR0YWxp Z25ieSk7CisJCWNhdHRyLT5hdHRjYWNoZW9mZiA9IG9mZnA7CisKKwkJb2ZmcCArPSBjYXR0ci0+ YXR0bGVuOworCQlmaXJzdE5vbkNhY2hlZE9mZkF0dHIgPSBpICsgMTsKKwl9CisKKwl0dXBkZXNj LT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPSBmaXJzdE5vbkNhY2hlZE9mZkF0dHI7Cit9CisKIC8q CiAgKiBGcmVlIGEgVHVwbGVEZXNjIGluY2x1ZGluZyBhbGwgc3Vic3RydWN0dXJlCiAgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBiMjQ2ZTgxMjdkYi4uYTQ2OTRiZDgw NjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTMzNSw5ICszMzUsNiBA QCBnZXRTcEdpc3RUdXBsZURlc2MoUmVsYXRpb24gaW5kZXgsIFNwR2lzdFR5cGVEZXNjICprZXlU eXBlKQogCQkvKiBXZSBzaG91bGRuJ3QgbmVlZCB0byBib3RoZXIgd2l0aCBtYWtpbmcgdGhlc2Ug dmFsaWQ6ICovCiAJCWF0dC0+YXR0Y29tcHJlc3Npb24gPSBJbnZhbGlkQ29tcHJlc3Npb25NZXRo b2Q7CiAJCWF0dC0+YXR0Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKLQkJLyogSW4gY2FzZSB3ZSBj aGFuZ2VkIHR5cGxlbiwgd2UnZCBiZXR0ZXIgcmVzZXQgZm9sbG93aW5nIG9mZnNldHMgKi8KLQkJ Zm9yIChpbnQgaSA9IHNwZ0ZpcnN0SW5jbHVkZUNvbHVtbjsgaSA8IG91dFR1cERlc2MtPm5hdHRz OyBpKyspCi0JCQlUdXBsZURlc2NDb21wYWN0QXR0cihvdXRUdXBEZXNjLCBpKS0+YXR0Y2FjaGVv ZmYgPSAtMTsKIAogCQlwb3B1bGF0ZV9jb21wYWN0X2F0dHJpYnV0ZShvdXRUdXBEZXNjLCBzcGdL ZXlDb2x1bW4pOwogCQlUdXBsZURlc2NGaW5hbGl6ZShvdXRUdXBEZXNjKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNUdXBsZXMuYwppbmRleCBlNmFiNTFlNjQwNC4uODlmMThiZTVkODIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjVHVwbGVzLmMKQEAgLTk5MiwxMTggKzk5Miw2IEBAIHR0c19idWZmZXJfaGVhcF9z dG9yZV90dXBsZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1cGxlIHR1cGxlLAogCX0KIH0K IAotLyoKLSAqIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwKLSAqCQlBbiBhbHdheXMg aW5saW5lIGhlbHBlciBmdW5jdGlvbiBmb3IgdXNlIGluIHNsb3RfZGVmb3JtX2hlYXBfdHVwbGUg dG8KLSAqCQlhbGxvdyB0aGUgY29tcGlsZXIgdG8gZW1pdCBzcGVjaWFsaXplZCB2ZXJzaW9ucyBv ZiB0aGlzIGZ1bmN0aW9uIGZvcgotICoJCXZhcmlvdXMgY29tYmluYXRpb25zIG9mICJzbG93IiBh bmQgImhhc251bGxzIi4gIEZvciBleGFtcGxlLCBpZiBhCi0gKgkJZ2l2ZW4gdHVwbGUgaGFzIG5v IG51bGxzLCB0aGVuIHdlIG5lZWRuJ3QgY2hlY2sgImhhc251bGxzIiBmb3IgZXZlcnkKLSAqCQlh dHRyaWJ1dGUgdGhhdCB3ZSdyZSBkZWZvcm1pbmcuICBUaGUgY2FsbGVyIGNhbiBqdXN0IGNhbGwg dGhpcwotICoJCWZ1bmN0aW9uIHdpdGggaGFzbnVsbHMgc2V0IHRvIGNvbnN0YW50LWZhbHNlIGFu ZCBoYXZlIHRoZSBjb21waWxlcgotICoJCXJlbW92ZSB0aGUgY29uc3RhbnQtZmFsc2UgYnJhbmNo ZXMgYW5kIGVtaXQgbW9yZSBvcHRpbWFsIGNvZGUuCi0gKgotICogUmV0dXJucyB0aGUgbmV4dCBh dHRudW0gdG8gZGVmb3JtLCB3aGljaCBjYW4gYmUgZXF1YWwgdG8gbmF0dHMgd2hlbiB0aGUKLSAq IGZ1bmN0aW9uIG1hbmFnZXMgdG8gZGVmb3JtIGFsbCByZXF1ZXN0ZWQgYXR0cmlidXRlcy4gICpv ZmZwIGlzIGFuIGlucHV0IGFuZAotICogb3V0cHV0IHBhcmFtZXRlciB3aGljaCBpcyB0aGUgYnl0 ZSBvZmZzZXQgd2l0aGluIHRoZSB0dXBsZSB0byBzdGFydCBkZWZvcm1pbmcKLSAqIGZyb20gd2hp Y2gsIG9uIHJldHVybiwgZ2V0cyBzZXQgdG8gdGhlIG9mZnNldCB3aGVyZSB0aGUgbmV4dCBhdHRy aWJ1dGUKLSAqIHNob3VsZCBiZSBkZWZvcm1lZCBmcm9tLiAgKnNsb3dwIGlzIHNldCB0byB0cnVl IHdoZW4gc3Vic2VxdWVudCBkZWZvcm1pbmcKLSAqIG9mIHRoaXMgdHVwbGUgbXVzdCB1c2UgYSB2 ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCAic2xvdyIgcGFzc2VkIGFzCi0gKiB0cnVlLgot ICoKLSAqIENhbGxlcnMgY2Fubm90IGFzc3VtZSB3aGVuIHdlIHJldHVybiAiYXR0bnVtIiAoaS5l LiBhbGwgcmVxdWVzdGVkCi0gKiBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBkZWZvcm1lZCkgdGhhdCBz bG93IG1vZGUgaXNuJ3QgcmVxdWlyZWQgZm9yIGFueQotICogYWRkaXRpb25hbCBkZWZvcm1pbmcg YXMgdGhlIGZpbmFsIGF0dHJpYnV0ZSBtYXkgaGF2ZSBjYXVzZWQgYSBzd2l0Y2ggdG8KLSAqIHNs b3cgbW9kZS4KLSAqLwotc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGludAotc2xv dF9kZWZvcm1faGVhcF90dXBsZV9pbnRlcm5hbChUdXBsZVRhYmxlU2xvdCAqc2xvdCwgSGVhcFR1 cGxlIHR1cGxlLAotCQkJCQkJCQlpbnQgYXR0bnVtLCBpbnQgbmF0dHMsIGJvb2wgc2xvdywKLQkJ CQkJCQkJYm9vbCBoYXNudWxscywgdWludDMyICpvZmZwLCBib29sICpzbG93cCkKLXsKLQlUdXBs ZURlc2MJdHVwbGVEZXNjID0gc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvcjsKLQlEYXR1bQkgICAq dmFsdWVzID0gc2xvdC0+dHRzX3ZhbHVlczsKLQlib29sCSAgICppc251bGwgPSBzbG90LT50dHNf aXNudWxsOwotCUhlYXBUdXBsZUhlYWRlciB0dXAgPSB0dXBsZS0+dF9kYXRhOwotCWNoYXIJICAg KnRwOwkJCQkvKiBwdHIgdG8gdHVwbGUgZGF0YSAqLwotCWJpdHM4CSAgICpicCA9IHR1cC0+dF9i aXRzOwkvKiBwdHIgdG8gbnVsbCBiaXRtYXAgaW4gdHVwbGUgKi8KLQlib29sCQlzbG93bmV4dCA9 IGZhbHNlOwotCi0JdHAgPSAoY2hhciAqKSB0dXAgKyB0dXAtPnRfaG9mZjsKLQotCWZvciAoOyBh dHRudW0gPCBuYXR0czsgYXR0bnVtKyspCi0JewotCQlDb21wYWN0QXR0cmlidXRlICp0aGlzYXR0 ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0pOwotCi0JCWlmIChoYXNu dWxscyAmJiBhdHRfaXNudWxsKGF0dG51bSwgYnApKQotCQl7Ci0JCQl2YWx1ZXNbYXR0bnVtXSA9 IChEYXR1bSkgMDsKLQkJCWlzbnVsbFthdHRudW1dID0gdHJ1ZTsKLQkJCWlmICghc2xvdykKLQkJ CXsKLQkJCQkqc2xvd3AgPSB0cnVlOwotCQkJCXJldHVybiBhdHRudW0gKyAxOwotCQkJfQotCQkJ ZWxzZQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaXNudWxsW2F0dG51bV0gPSBmYWxzZTsKLQot CQkvKiBjYWxjdWxhdGUgdGhlIG9mZnNldCBvZiB0aGlzIGF0dHJpYnV0ZSAqLwotCQlpZiAoIXNs b3cgJiYgdGhpc2F0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCSpvZmZwID0gdGhpc2F0dC0+YXR0 Y2FjaGVvZmY7Ci0JCWVsc2UgaWYgKHRoaXNhdHQtPmF0dGxlbiA9PSAtMSkKLQkJewotCQkJLyoK LQkJCSAqIFdlIGNhbiBvbmx5IGNhY2hlIHRoZSBvZmZzZXQgZm9yIGEgdmFybGVuYSBhdHRyaWJ1 dGUgaWYgdGhlCi0JCQkgKiBvZmZzZXQgaXMgYWxyZWFkeSBzdWl0YWJseSBhbGlnbmVkLCBzbyB0 aGF0IHRoZXJlIHdvdWxkIGJlIG5vCi0JCQkgKiBwYWQgYnl0ZXMgaW4gYW55IGNhc2U6IHRoZW4g dGhlIG9mZnNldCB3aWxsIGJlIHZhbGlkIGZvciBlaXRoZXIKLQkJCSAqIGFuIGFsaWduZWQgb3Ig dW5hbGlnbmVkIHZhbHVlLgotCQkJICovCi0JCQlpZiAoIXNsb3cgJiYgKm9mZnAgPT0gYXR0X25v bWluYWxfYWxpZ25ieSgqb2ZmcCwgdGhpc2F0dC0+YXR0YWxpZ25ieSkpCi0JCQkJdGhpc2F0dC0+ YXR0Y2FjaGVvZmYgPSAqb2ZmcDsKLQkJCWVsc2UKLQkJCXsKLQkJCQkqb2ZmcCA9IGF0dF9wb2lu dGVyX2FsaWduYnkoKm9mZnAsCi0JCQkJCQkJCQkJCXRoaXNhdHQtPmF0dGFsaWduYnksCi0JCQkJ CQkJCQkJCS0xLAotCQkJCQkJCQkJCQl0cCArICpvZmZwKTsKLQotCQkJCWlmICghc2xvdykKLQkJ CQkJc2xvd25leHQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHZh cmxlbmEsIHNvIHNhZmUgdG8gdXNlIGF0dF9ub21pbmFsX2FsaWduYnkgKi8KLQkJCSpvZmZwID0g YXR0X25vbWluYWxfYWxpZ25ieSgqb2ZmcCwgdGhpc2F0dC0+YXR0YWxpZ25ieSk7Ci0KLQkJCWlm ICghc2xvdykKLQkJCQl0aGlzYXR0LT5hdHRjYWNoZW9mZiA9ICpvZmZwOwotCQl9Ci0KLQkJdmFs dWVzW2F0dG51bV0gPSBmZXRjaGF0dCh0aGlzYXR0LCB0cCArICpvZmZwKTsKLQotCQkqb2ZmcCA9 IGF0dF9hZGRsZW5ndGhfcG9pbnRlcigqb2ZmcCwgdGhpc2F0dC0+YXR0bGVuLCB0cCArICpvZmZw KTsKLQotCQkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHN3aXRjaCB0byBzbG93IG1vZGUgKi8KLQkJ aWYgKCFzbG93KQotCQl7Ci0JCQkvKgotCQkJICogV2UncmUgdW5hYmxlIHRvIGRlZm9ybSBhbnkg ZnVydGhlciBpZiB0aGUgYWJvdmUgY29kZSBzZXQKLQkJCSAqICdzbG93bmV4dCcsIG9yIGlmIHRo aXMgaXNuJ3QgYSBmaXhlZC13aWR0aCBhdHRyaWJ1dGUuCi0JCQkgKi8KLQkJCWlmIChzbG93bmV4 dCB8fCB0aGlzYXR0LT5hdHRsZW4gPD0gMCkKLQkJCXsKLQkJCQkqc2xvd3AgPSB0cnVlOwotCQkJ CXJldHVybiBhdHRudW0gKyAxOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIG5hdHRzOwotfQot CiAvKgogICogc2xvdF9kZWZvcm1faGVhcF90dXBsZQogICoJCUdpdmVuIGEgVHVwbGVUYWJsZVNs b3QsIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBzbG90J3MgcGh5c2ljYWwgdHVwbGUKQEAgLTExMjIs NzggKzEwMTAsMTQwIEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkCiBz bG90X2RlZm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVw bGUsIHVpbnQzMiAqb2ZmcCwKIAkJCQkJICAgaW50IG5hdHRzKQogeworCUNvbXBhY3RBdHRyaWJ1 dGUgKmNhdHRyOworCVR1cGxlRGVzYwl0dXBsZURlc2MgPSBzbG90LT50dHNfdHVwbGVEZXNjcmlw dG9yOwogCWJvb2wJCWhhc251bGxzID0gSGVhcFR1cGxlSGFzTnVsbHModHVwbGUpOworCUhlYXBU dXBsZUhlYWRlciB0dXAgPSB0dXBsZS0+dF9kYXRhOworCWJpdHM4CSAgICpicDsJCQkJLyogcHRy IHRvIG51bGwgYml0bWFwIGluIHR1cGxlICovCiAJaW50CQkJYXR0bnVtOworCWludAkJCWZpcnN0 Tm9uQ2FjaGVPZmZzZXRBdHRyOworCWludAkJCWZpcnN0TnVsbEF0dHI7CisJRGF0dW0JICAgKnZh bHVlczsKKwlib29sCSAgICppc251bGw7CisJY2hhcgkgICAqdHA7CQkJCS8qIHB0ciB0byB0dXBs ZSBkYXRhICovCiAJdWludDMyCQlvZmY7CQkJLyogb2Zmc2V0IGluIHR1cGxlIGRhdGEgKi8KLQli b29sCQlzbG93OwkJCS8qIGNhbiB3ZSB1c2Uvc2V0IGF0dGNhY2hlb2ZmPyAqLworCisJLyogRGlk IHNvbWVvbmUgZm9yZ2V0IHRvIGNhbGwgVHVwbGVEZXNjRmluYWxpemUoKT8gKi8KKwlBc3NlcnQo dHVwbGVEZXNjLT5maXJzdE5vbkNhY2hlZE9mZkF0dHIgPj0gMCk7CiAKIAkvKiBXZSBjYW4gb25s eSBmZXRjaCBhcyBtYW55IGF0dHJpYnV0ZXMgYXMgdGhlIHR1cGxlIGhhcy4gKi8KLQluYXR0cyA9 IE1pbihIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXBsZS0+dF9kYXRhKSwgbmF0dHMpOworCW5h dHRzID0gTWluKEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cCksIG5hdHRzKTsKKwlhdHRudW0g PSBzbG90LT50dHNfbnZhbGlkOworCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyID0gTWluKHR1cGxl RGVzYy0+Zmlyc3ROb25DYWNoZWRPZmZBdHRyLCBuYXR0cyk7CisKKwlpZiAoaGFzbnVsbHMpCisJ eworCQlicCA9IHR1cC0+dF9iaXRzOworCQlmaXJzdE51bGxBdHRyID0gZmlyc3RfbnVsbF9hdHRy KGJwLCBuYXR0cyk7CisJCWZpcnN0Tm9uQ2FjaGVPZmZzZXRBdHRyID0gTWluKGZpcnN0Tm9uQ2Fj aGVPZmZzZXRBdHRyLCBmaXJzdE51bGxBdHRyKTsKKwl9CisJZWxzZQorCXsKKwkJYnAgPSBOVUxM OworCQlmaXJzdE51bGxBdHRyID0gbmF0dHM7CisJfQorCisJdmFsdWVzID0gc2xvdC0+dHRzX3Zh bHVlczsKKwlpc251bGwgPSBzbG90LT50dHNfaXNudWxsOworCXRwID0gKGNoYXIgKikgdHVwICsg dHVwLT50X2hvZmY7CiAKIAkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIGZpcnN0IGNhbGwgZm9y IHRoaXMgdHVwbGUsIGFuZCBpbml0aWFsaXplIG9yIHJlc3RvcmUKLQkgKiBsb29wIHN0YXRlLgor CSAqIEhhbmRsZSB0aGUgcG9ydGlvbiBvZiB0aGUgdHVwbGUgdGhhdCB3ZSBoYXZlIGNhY2hlZCB0 aGUgb2Zmc2V0IGZvciB1cAorCSAqIHRvIHRoZSBmaXJzdCBOVUxMIGF0dHJpYnV0ZS4gIFRoZSBv ZmZzZXQgaXMgZWZmZWN0aXZlbHkgZml4ZWQgZm9yIHRoZXNlCisJICogc28gd2UgY2FuIHVzZSB0 aGUgQ29tcGFjdEF0dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmLgogCSAqLwotCWF0dG51bSA9IHNsb3Qt PnR0c19udmFsaWQ7Ci0JaWYgKGF0dG51bSA9PSAwKQorCWlmIChhdHRudW0gPCBmaXJzdE5vbkNh Y2hlT2Zmc2V0QXR0cikKKwl7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQlpbnQJCQlv ZmZjaGVjazsKKworCQkvKiBJbiBBc3NlcnQgZW5hYmxlZCBidWlsZHMsIHZlcmlmeSBhdHRjYWNo ZW9mZiBpcyBjb3JyZWN0ICovCisJCWlmIChhdHRudW0gPT0gMCkKKwkJCW9mZmNoZWNrID0gMDsK KwkJZWxzZQorCQkJb2ZmY2hlY2sgPSAqb2ZmcDsKKyNlbmRpZgorCQlkbworCQl7CisJCQljYXR0 ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVzYywgYXR0bnVtKTsKKworI2lmZGVmIFVT RV9BU1NFUlRfQ0hFQ0tJTkcKKwkJCW9mZmNoZWNrID0gYXR0X25vbWluYWxfYWxpZ25ieShvZmZj aGVjaywgY2F0dHItPmF0dGFsaWduYnkpOworCQkJQXNzZXJ0KG9mZmNoZWNrID09IGNhdHRyLT5h dHRjYWNoZW9mZik7CisJCQlvZmZjaGVjayArPSBjYXR0ci0+YXR0bGVuOworI2VuZGlmCisKKwkJ CXZhbHVlc1thdHRudW1dID0gZmV0Y2hhdHQoY2F0dHIsIHRwICsgY2F0dHItPmF0dGNhY2hlb2Zm KTsKKwkJCWlzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCX0gd2hpbGUgKCsrYXR0bnVtIDwgZmly c3ROb25DYWNoZU9mZnNldEF0dHIpOworCisJCS8qCisJCSAqIFBvaW50IHRoZSBvZmZzZXQgYWZ0 ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBhdHRyaWJ1dGUgd2l0aCBhIGNhY2hlZAorCQkgKiBvZmZz ZXQuICBXZSBleHBlY3QgdGhlIGZpbmFsIGNhY2hlZCBvZmZzZXQgYXR0cmlidXRlIHRvIGhhdmUg YQorCQkgKiBmaXhlZCB3aWR0aCwgc28ganVzdCBhZGQgdGhlIGF0dGxlbiB0byB0aGUgYXR0Y2Fj aGVvZmYKKwkJICovCisJCUFzc2VydChjYXR0ci0+YXR0bGVuID4gMCk7CisJCW9mZiA9IGNhdHRy LT5hdHRjYWNoZW9mZiArIGNhdHRyLT5hdHRsZW47CisJfQorCWVsc2UgaWYgKGF0dG51bSA9PSAw KQogCXsKIAkJLyogU3RhcnQgZnJvbSB0aGUgZmlyc3QgYXR0cmlidXRlICovCiAJCW9mZiA9IDA7 Ci0JCXNsb3cgPSBmYWxzZTsKIAl9CiAJZWxzZQogCXsKIAkJLyogUmVzdG9yZSBzdGF0ZSBmcm9t IHByZXZpb3VzIGV4ZWN1dGlvbiAqLwogCQlvZmYgPSAqb2ZmcDsKLQkJc2xvdyA9IFRUU19TTE9X KHNsb3QpOwogCX0KIAogCS8qCi0JICogSWYgJ3Nsb3cnIGlzbid0IHNldCwgdHJ5IGRlZm9ybWlu ZyB1c2luZyBkZWZvcm1pbmcgY29kZSB0aGF0IGRvZXMgbm90Ci0JICogY29udGFpbiBhbnkgb2Yg dGhlIGV4dHJhIGNoZWNrcyByZXF1aXJlZCBmb3Igbm9uLWZpeGVkIG9mZnNldAotCSAqIGRlZm9y bWluZy4gIER1cmluZyBkZWZvcm1pbmcsIGlmIG9yIHdoZW4gd2UgZmluZCBhIE5VTEwgb3IgYSB2 YXJpYWJsZQotCSAqIGxlbmd0aCBhdHRyaWJ1dGUsIHdlJ2xsIHN3aXRjaCB0byBhIGRlZm9ybWlu ZyBtZXRob2Qgd2hpY2ggaW5jbHVkZXMgdGhlCi0JICogZXh0cmEgY29kZSByZXF1aXJlZCBmb3Ig bm9uLWZpeGVkIG9mZnNldCBkZWZvcm1pbmcsIGEuay5hIHNsb3cgbW9kZS4KLQkgKiBCZWNhdXNl IHRoaXMgaXMgcGVyZm9ybWFuY2UgY3JpdGljYWwsIHdlIGlubGluZQotCSAqIHNsb3RfZGVmb3Jt X2hlYXBfdHVwbGVfaW50ZXJuYWwgcGFzc2luZyB0aGUgJ3Nsb3cnIGFuZCAnaGFzbnVsbCcKLQkg KiBwYXJhbWV0ZXJzIGFzIGNvbnN0YW50cyB0byBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZW1pdCBz cGVjaWFsaXplZCBjb2RlCi0JICogd2l0aCB0aGUga25vd24tY29uc3QgZmFsc2UgY29tcGFyaXNv bnMgYW5kIHN1YnNlcXVlbnQgYnJhbmNoZXMgcmVtb3ZlZC4KKwkgKiBIYW5kbGUgYW55IHBvcnRp b24gb2YgdGhlIHR1cGxlIHRoYXQgZG9lc24ndCBoYXZlIGEgZml4ZWQgb2Zmc2V0IHVwCisJICog dW50aWwgdGhlIGZpcnN0IE5VTEwgYXR0cmlidXRlLiAgVGhpcyBsb29wcyBvbmx5IGRpZmZlcnMg ZnJvbSB0aGUgb25lCisJICogYWZ0ZXIgaXQgYnkgdGhlIE5VTEwgY2hlY2tzLgogCSAqLwotCWlm ICghc2xvdykKKwlmb3IgKDsgYXR0bnVtIDwgZmlyc3ROdWxsQXR0cjsgYXR0bnVtKyspCiAJewot CQkvKiBUdXBsZSB3aXRob3V0IGFueSBOVUxMcz8gV2UgY2FuIHNraXAgZG9pbmcgYW55IE5VTEwg Y2hlY2tpbmcgKi8KLQkJaWYgKCFoYXNudWxscykKLQkJCWF0dG51bSA9IHNsb3RfZGVmb3JtX2hl YXBfdHVwbGVfaW50ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJ CQkJIGF0dG51bSwKLQkJCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJCQkJIGZhbHNlLCAv KiBzbG93ICovCi0JCQkJCQkJCQkJCQkJIGZhbHNlLCAvKiBoYXNudWxscyAqLwotCQkJCQkJCQkJ CQkJCSAmb2ZmLAotCQkJCQkJCQkJCQkJCSAmc2xvdyk7Ci0JCWVsc2UKLQkJCWF0dG51bSA9IHNs b3RfZGVmb3JtX2hlYXBfdHVwbGVfaW50ZXJuYWwoc2xvdCwKLQkJCQkJCQkJCQkJCQkgdHVwbGUs Ci0JCQkJCQkJCQkJCQkJIGF0dG51bSwKLQkJCQkJCQkJCQkJCQkgbmF0dHMsCi0JCQkJCQkJCQkJ CQkJIGZhbHNlLCAvKiBzbG93ICovCi0JCQkJCQkJCQkJCQkJIHRydWUsCS8qIGhhc251bGxzICov Ci0JCQkJCQkJCQkJCQkJICZvZmYsCi0JCQkJCQkJCQkJCQkJICZzbG93KTsKKwkJY2F0dHIgPSBU dXBsZURlc2NDb21wYWN0QXR0cih0dXBsZURlc2MsIGF0dG51bSk7CisKKwkJLyogYWxpZ24gdGhl IG9mZnNldCBmb3IgdGhpcyBhdHRyaWJ1dGUgKi8KKwkJb2ZmID0gYXR0X3BvaW50ZXJfYWxpZ25i eShvZmYsCisJCQkJCQkJCSAgY2F0dHItPmF0dGFsaWduYnksCisJCQkJCQkJCSAgY2F0dHItPmF0 dGxlbiwKKwkJCQkJCQkJICB0cCArIG9mZik7CisKKwkJdmFsdWVzW2F0dG51bV0gPSBmZXRjaGF0 dChjYXR0ciwgdHAgKyBvZmYpOworCQlpc251bGxbYXR0bnVtXSA9IGZhbHNlOworCisJCS8qIG1v dmUgdGhlIG9mZnNldCBiZXlvbmQgdGhpcyBhdHRyaWJ1dGUgKi8KKwkJb2ZmID0gYXR0X2FkZGxl bmd0aF9wb2ludGVyKG9mZiwgY2F0dHItPmF0dGxlbiwgdHAgKyBvZmYpOwogCX0KIAotCS8qIElm IHRoZXJlJ3Mgc3RpbGwgd29yayB0byBkbyB0aGVuIHdlIG11c3QgYmUgaW4gc2xvdyBtb2RlICov Ci0JaWYgKGF0dG51bSA8IG5hdHRzKQorCS8qCisJICogTm93IGhhbmRsZSBhbnkgcmVtYWluaW5n IHR1cGxlcywgdGhpcyB0aW1lIGluY2x1ZGUgTlVMTCBjaGVja3MgYXMgd2UncmUKKwkgKiBub3cg YXQgdGhlIGZpcnN0IE5VTEwgYXR0cmlidXRlLgorCSAqLworCWZvciAoOyBhdHRudW0gPCBuYXR0 czsgYXR0bnVtKyspCiAJewotCQkvKiBYWFggaXMgaXQgd29ydGggYWRkaW5nIGEgc2VwYXJhdGUg Y2FsbCB3aGVuIGhhc251bGxzIGlzIGZhbHNlPyAqLwotCQlhdHRudW0gPSBzbG90X2RlZm9ybV9o ZWFwX3R1cGxlX2ludGVybmFsKHNsb3QsCi0JCQkJCQkJCQkJCQkgdHVwbGUsCi0JCQkJCQkJCQkJ CQkgYXR0bnVtLAotCQkJCQkJCQkJCQkJIG5hdHRzLAotCQkJCQkJCQkJCQkJIHRydWUsCS8qIHNs b3cgKi8KLQkJCQkJCQkJCQkJCSBoYXNudWxscywKLQkJCQkJCQkJCQkJCSAmb2ZmLAotCQkJCQkJ CQkJCQkJICZzbG93KTsKKwkJaWYgKGF0dF9pc251bGwoYXR0bnVtLCBicCkpCisJCXsKKwkJCXZh bHVlc1thdHRudW1dID0gKERhdHVtKSAwOworCQkJaXNudWxsW2F0dG51bV0gPSB0cnVlOworCQkJ Y29udGludWU7CisJCX0KKworCQljYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGxlRGVz YywgYXR0bnVtKTsKKworCQkvKiBhbGlnbiB0aGUgb2Zmc2V0IGZvciB0aGlzIGF0dHJpYnV0ZSAq LworCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJICBjYXR0ci0+YXR0 YWxpZ25ieSwKKwkJCQkJCQkJICBjYXR0ci0+YXR0bGVuLAorCQkJCQkJCQkgIHRwICsgb2ZmKTsK KworCQl2YWx1ZXNbYXR0bnVtXSA9IGZldGNoYXR0KGNhdHRyLCB0cCArIG9mZik7CisJCWlzbnVs bFthdHRudW1dID0gZmFsc2U7CisKKwkJLyogbW92ZSB0aGUgb2Zmc2V0IGJleW9uZCB0aGlzIGF0 dHJpYnV0ZSAqLworCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCBjYXR0ci0+YXR0 bGVuLCB0cCArIG9mZik7CiAJfQogCiAJLyoKQEAgLTEyMDEsMTAgKzExNTEsNiBAQCBzbG90X2Rl Zm9ybV9oZWFwX3R1cGxlKFR1cGxlVGFibGVTbG90ICpzbG90LCBIZWFwVHVwbGUgdHVwbGUsIHVp bnQzMiAqb2ZmcCwKIAkgKi8KIAlzbG90LT50dHNfbnZhbGlkID0gYXR0bnVtOwogCSpvZmZwID0g b2ZmOwotCWlmIChzbG93KQotCQlzbG90LT50dHNfZmxhZ3MgfD0gVFRTX0ZMQUdfU0xPVzsKLQll bHNlCi0JCXNsb3QtPnR0c19mbGFncyAmPSB+VFRTX0ZMQUdfU0xPVzsKIH0KIAogY29uc3QgVHVw bGVUYWJsZVNsb3RPcHMgVFRTT3BzVmlydHVhbCA9IHsKQEAgLTIyNTksMTAgKzIyMDUsMTYgQEAg RXhlY1R5cGVTZXRDb2xOYW1lcyhUdXBsZURlc2MgdHlwZUluZm8sIExpc3QgKm5hbWVzTGlzdCkK ICAqIFRoaXMgaGFwcGVucyAiZm9yIGZyZWUiIGlmIHRoZSB0dXBkZXNjIGNhbWUgZnJvbSBhIHJl bGNhY2hlIGVudHJ5LCBidXQKICAqIG5vdCBpZiB3ZSBoYXZlIG1hbnVmYWN0dXJlZCBhIHR1cGRl c2MgZm9yIGEgdHJhbnNpZW50IFJFQ09SRCBkYXRhdHlwZS4KICAqIEluIHRoYXQgY2FzZSB3ZSBo YXZlIHRvIG5vdGlmeSB0eXBjYWNoZS5jIG9mIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHR5cGUuCisg KgorICogVHVwbGVEZXNjRmluYWxpemUoKSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgVHVwbGVEZXNj IGJlZm9yZSBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uLgogICovCiBUdXBsZURlc2MKIEJsZXNz VHVwbGVEZXNjKFR1cGxlRGVzYyB0dXBkZXNjKQogeworCS8qIERpZCBzb21lb25lIGZvcmdldCB0 byBjYWxsIFR1cGxlRGVzY0ZpbmFsaXplKCk/ICovCisJQXNzZXJ0KHR1cGRlc2MtPmZpcnN0Tm9u Q2FjaGVkT2ZmQXR0ciA+PSAwKTsKKwogCWlmICh0dXBkZXNjLT50ZHR5cGVpZCA9PSBSRUNPUkRP SUQgJiYKIAkJdHVwZGVzYy0+dGR0eXBtb2QgPCAwKQogCQlhc3NpZ25fcmVjb3JkX3R5cGVfdHlw bW9kKHR1cGRlc2MpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9k ZWZvcm0uYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZGVmb3JtLmMKaW5kZXggM2Vi MDg3ZWI1NmIuLjEyNTIxZTNlNDZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9s bHZtaml0X2RlZm9ybS5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZGVmb3Jt LmMKQEAgLTYyLDcgKzYyLDYgQEAgc2xvdF9jb21waWxlX2RlZm9ybShMTFZNSml0Q29udGV4dCAq Y29udGV4dCwgVHVwbGVEZXNjIGRlc2MsCiAJTExWTVZhbHVlUmVmIHZfdHRzX3ZhbHVlczsKIAlM TFZNVmFsdWVSZWYgdl90dHNfbnVsbHM7CiAJTExWTVZhbHVlUmVmIHZfc2xvdG9mZnA7Ci0JTExW TVZhbHVlUmVmIHZfZmxhZ3NwOwogCUxMVk1WYWx1ZVJlZiB2X252YWxpZHA7CiAJTExWTVZhbHVl UmVmIHZfbnZhbGlkOwogCUxMVk1WYWx1ZVJlZiB2X21heGF0dDsKQEAgLTE3OCw3ICsxNzcsNiBA QCBzbG90X2NvbXBpbGVfZGVmb3JtKExMVk1KaXRDb250ZXh0ICpjb250ZXh0LCBUdXBsZURlc2Mg ZGVzYywKIAl2X3R0c19udWxscyA9CiAJCWxfbG9hZF9zdHJ1Y3RfZ2VwKGIsIFN0cnVjdFR1cGxl VGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJMRVNMT1RfSVNOVUxMLAogCQkJCQkJ ICAidHRzX0lTTlVMTCIpOwotCXZfZmxhZ3NwID0gbF9zdHJ1Y3RfZ2VwKGIsIFN0cnVjdFR1cGxl VGFibGVTbG90LCB2X3Nsb3QsIEZJRUxETk9fVFVQTEVUQUJMRVNMT1RfRkxBR1MsICIiKTsKIAl2 X252YWxpZHAgPSBsX3N0cnVjdF9nZXAoYiwgU3RydWN0VHVwbGVUYWJsZVNsb3QsIHZfc2xvdCwg RklFTEROT19UVVBMRVRBQkxFU0xPVF9OVkFMSUQsICIiKTsKIAogCWlmIChvcHMgPT0gJlRUU09w c0hlYXBUdXBsZSB8fCBvcHMgPT0gJlRUU09wc0J1ZmZlckhlYXBUdXBsZSkKQEAgLTc0NywxNCAr NzQ1LDEwIEBAIHNsb3RfY29tcGlsZV9kZWZvcm0oTExWTUppdENvbnRleHQgKmNvbnRleHQsIFR1 cGxlRGVzYyBkZXNjLAogCiAJewogCQlMTFZNVmFsdWVSZWYgdl9vZmYgPSBsX2xvYWQoYiwgVHlw ZVNpemVULCB2X29mZnAsICIiKTsKLQkJTExWTVZhbHVlUmVmIHZfZmxhZ3M7CiAKIAkJTExWTUJ1 aWxkU3RvcmUoYiwgbF9pbnQxNl9jb25zdChsYywgbmF0dHMpLCB2X252YWxpZHApOwogCQl2X29m ZiA9IExMVk1CdWlsZFRydW5jKGIsIHZfb2ZmLCBMTFZNSW50MzJUeXBlSW5Db250ZXh0KGxjKSwg IiIpOwogCQlMTFZNQnVpbGRTdG9yZShiLCB2X29mZiwgdl9zbG90b2ZmcCk7Ci0JCXZfZmxhZ3Mg PSBsX2xvYWQoYiwgTExWTUludDE2VHlwZUluQ29udGV4dChsYyksIHZfZmxhZ3NwLCAidHRzX2Zs YWdzIik7Ci0JCXZfZmxhZ3MgPSBMTFZNQnVpbGRPcihiLCB2X2ZsYWdzLCBsX2ludDE2X2NvbnN0 KGxjLCBUVFNfRkxBR19TTE9XKSwgIiIpOwotCQlMTFZNQnVpbGRTdG9yZShiLCB2X2ZsYWdzLCB2 X2ZsYWdzcCk7CiAJCUxMVk1CdWlsZFJldFZvaWQoYik7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cmVsY2FjaGUuYwppbmRleCA3NzBlZGIzNGUwOC4uOTk4YmUyNGFjNDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYwpAQCAtNjY2LDE0ICs2NjYsNiBAQCBSZWxhdGlvbkJ1aWxkVHVwbGVE ZXNjKFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbG9nKEVSUk9SLCAicGdfYXR0cmlidXRlIGNhdGFs b2cgaXMgbWlzc2luZyAlZCBhdHRyaWJ1dGUocykgZm9yIHJlbGF0aW9uIE9JRCAldSIsCiAJCQkg bmVlZCwgUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpOwogCi0JLyoKLQkgKiBXZSBjYW4gZWFz aWx5IHNldCB0aGUgYXR0Y2FjaGVvZmYgdmFsdWUgZm9yIHRoZSBmaXJzdCBhdHRyaWJ1dGU6IGl0 Ci0JICogbXVzdCBiZSB6ZXJvLiAgVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBzcGVjaWFs IGNhc2VzIGZvciBhdHRudW09MQotCSAqIHRoYXQgdXNlZCB0byBleGlzdCBpbiBmYXN0Z2V0YXR0 cigpIGFuZCBpbmRleF9nZXRhdHRyKCkuCi0JICovCi0JaWYgKFJlbGF0aW9uR2V0TnVtYmVyT2ZB dHRyaWJ1dGVzKHJlbGF0aW9uKSA+IDApCi0JCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlbGF0aW9u LT5yZF9hdHQsIDApLT5hdHRjYWNoZW9mZiA9IDA7Ci0KIAkvKgogCSAqIFNldCB1cCBjb25zdHJh aW50L2RlZmF1bHQgaW5mbwogCSAqLwpAQCAtMTk4NSw4ICsxOTc3LDYgQEAgZm9ybXJkZXNjKGNv bnN0IGNoYXIgKnJlbGF0aW9uTmFtZSwgT2lkIHJlbGF0aW9uUmVsdHlwZSwKIAkJcG9wdWxhdGVf Y29tcGFjdF9hdHRyaWJ1dGUocmVsYXRpb24tPnJkX2F0dCwgaSk7CiAJfQogCi0JLyogaW5pdGlh bGl6ZSBmaXJzdCBhdHRyaWJ1dGUncyBhdHRjYWNoZW9mZiwgY2YgUmVsYXRpb25CdWlsZFR1cGxl RGVzYyAqLwotCVR1cGxlRGVzY0NvbXBhY3RBdHRyKHJlbGF0aW9uLT5yZF9hdHQsIDApLT5hdHRj YWNoZW9mZiA9IDA7CiAJVHVwbGVEZXNjRmluYWxpemUocmVsYXRpb24tPnJkX2F0dCk7CiAKIAkv KiBtYXJrIG5vdC1udWxsIHN0YXR1cyAqLwpAQCAtNDQ0Niw4ICs0NDM2LDYgQEAgQnVpbGRIYXJk Y29kZWREZXNjcmlwdG9yKGludCBuYXR0cywgY29uc3QgRm9ybURhdGFfcGdfYXR0cmlidXRlICph dHRycykKIAkJcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUocmVzdWx0LCBpKTsKIAl9CiAKLQkv KiBpbml0aWFsaXplIGZpcnN0IGF0dHJpYnV0ZSdzIGF0dGNhY2hlb2ZmLCBjZiBSZWxhdGlvbkJ1 aWxkVHVwbGVEZXNjICovCi0JVHVwbGVEZXNjQ29tcGFjdEF0dHIocmVzdWx0LCAwKS0+YXR0Y2Fj aGVvZmYgPSAwOwogCVR1cGxlRGVzY0ZpbmFsaXplKHJlc3VsdCk7CiAKIAkvKiBOb3RlOiB3ZSBk b24ndCBib3RoZXIgdG8gc2V0IHVwIGEgVHVwbGVDb25zdHIgZW50cnkgKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o dHVwX2RldGFpbHMuaAppbmRleCBkNDA2ODI1ZmYyMi4uOTRiNDI3OWI3ZjEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaHR1cF9kZXRhaWxzLmgKQEAgLTg2NSwyMCArODY1LDE3IEBAIGV4dGVybiBNaW5pbWFsVHVw bGUgbWluaW1hbF9leHBhbmRfdHVwbGUoSGVhcFR1cGxlIHNvdXJjZVR1cGxlLCBUdXBsZURlc2Mg dHVwbGVECiBzdGF0aWMgaW5saW5lIERhdHVtCiBmYXN0Z2V0YXR0cihIZWFwVHVwbGUgdHVwLCBp bnQgYXR0bnVtLCBUdXBsZURlc2MgdHVwbGVEZXNjLCBib29sICppc251bGwpCiB7Ci0JQXNzZXJ0 KGF0dG51bSA+IDApOworCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dCA9IFR1cGxlRGVzY0NvbXBhY3RB dHRyKHR1cGxlRGVzYywgYXR0bnVtIC0gMSk7CiAKKwlBc3NlcnQoYXR0bnVtID4gMCk7CiAJKmlz bnVsbCA9IGZhbHNlOwotCWlmIChIZWFwVHVwbGVOb051bGxzKHR1cCkpCi0JewotCQlDb21wYWN0 QXR0cmlidXRlICphdHQ7CiAKLQkJYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNj LCBhdHRudW0gLSAxKTsKLQkJaWYgKGF0dC0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJCXJldHVybiBm ZXRjaGF0dChhdHQsIChjaGFyICopIHR1cC0+dF9kYXRhICsgdHVwLT50X2RhdGEtPnRfaG9mZiAr Ci0JCQkJCQkJYXR0LT5hdHRjYWNoZW9mZik7Ci0JCWVsc2UKLQkJCXJldHVybiBub2NhY2hlZ2V0 YXR0cih0dXAsIGF0dG51bSwgdHVwbGVEZXNjKTsKLQl9CisJaWYgKGF0dC0+YXR0Y2FjaGVvZmYg Pj0gMCAmJiAhSGVhcFR1cGxlSGFzTnVsbHModHVwKSkKKwkJcmV0dXJuIGZldGNoYXR0KGF0dCwg KGNoYXIgKikgdHVwLT50X2RhdGEgKyB0dXAtPnRfZGF0YS0+dF9ob2ZmICsKKwkJCQkJCWF0dC0+ YXR0Y2FjaGVvZmYpOworCisJaWYgKEhlYXBUdXBsZU5vTnVsbHModHVwKSkKKwkJcmV0dXJuIG5v Y2FjaGVnZXRhdHRyKHR1cCwgYXR0bnVtLCB0dXBsZURlc2MpOwogCWVsc2UKIAl7CiAJCWlmIChh dHRfaXNudWxsKGF0dG51bSAtIDEsIHR1cC0+dF9kYXRhLT50X2JpdHMpKQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pdHVwLmgKaW5k ZXggNTdlNGRhYWZiMGQuLmU0YmIyN2I3ZTU4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaXR1cC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pdHVwLmgKQEAgLTEzMSwyNCArMTMx LDIwIEBAIEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0KHVuc2lnbmVkIHNob3J0IHRfaW5mbykKIHN0 YXRpYyBpbmxpbmUgRGF0dW0KIGluZGV4X2dldGF0dHIoSW5kZXhUdXBsZSB0dXAsIGludCBhdHRu dW0sIFR1cGxlRGVzYyB0dXBsZURlc2MsIGJvb2wgKmlzbnVsbCkKIHsKKwlDb21wYWN0QXR0cmli dXRlICphdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0gLSAxKTsK KwogCUFzc2VydChpc251bGwpOwogCUFzc2VydChhdHRudW0gPiAwKTsKIAogCSppc251bGwgPSBm YWxzZTsKIAotCWlmICghSW5kZXhUdXBsZUhhc051bGxzKHR1cCkpCi0JewotCQlDb21wYWN0QXR0 cmlidXRlICphdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwbGVEZXNjLCBhdHRudW0gLSAx KTsKKwlpZiAoYXR0ci0+YXR0Y2FjaGVvZmYgPj0gMCAmJiAhSW5kZXhUdXBsZUhhc051bGxzKHR1 cCkpCisJCXJldHVybiBmZXRjaGF0dChhdHRyLAorCQkJCQkJKGNoYXIgKikgdHVwICsgSW5kZXhJ bmZvRmluZERhdGFPZmZzZXQodHVwLT50X2luZm8pICsKKwkJCQkJCWF0dHItPmF0dGNhY2hlb2Zm KTsKIAotCQlpZiAoYXR0ci0+YXR0Y2FjaGVvZmYgPj0gMCkKLQkJewotCQkJcmV0dXJuIGZldGNo YXR0KGF0dHIsCi0JCQkJCQkJKGNoYXIgKikgdHVwICsgSW5kZXhJbmZvRmluZERhdGFPZmZzZXQo dHVwLT50X2luZm8pICsKLQkJCQkJCQlhdHRyLT5hdHRjYWNoZW9mZik7Ci0JCX0KLQkJZWxzZQot CQkJcmV0dXJuIG5vY2FjaGVfaW5kZXhfZ2V0YXR0cih0dXAsIGF0dG51bSwgdHVwbGVEZXNjKTsK LQl9CisJaWYgKCFJbmRleFR1cGxlSGFzTnVsbHModHVwKSkKKwkJcmV0dXJuIG5vY2FjaGVfaW5k ZXhfZ2V0YXR0cih0dXAsIGF0dG51bSwgdHVwbGVEZXNjKTsKIAllbHNlCiAJewogCQlpZiAoYXR0 X2lzbnVsbChhdHRudW0gLSAxLCAoYml0czggKikgdHVwICsgc2l6ZW9mKEluZGV4VHVwbGVEYXRh KSkpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwZGVzYy5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3R1cGRlc2MuaAppbmRleCA1OTU0MTNkYmJjNS4uOTlkOTAxN2QxYTYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3R1cGRlc2MuaApAQCAtMTMxLDYgKzEzMSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBDb21wYWN0 QXR0cmlidXRlCiAgKiBBbnkgY29kZSBtYWtpbmcgY2hhbmdlcyBtYW51YWxseSB0byBhbmQgZmll bGRzIGluIHRoZSBGb3JtRGF0YV9wZ19hdHRyaWJ1dGUKICAqIGFycmF5IG11c3Qgc3Vic2VxdWVu dGx5IGNhbGwgcG9wdWxhdGVfY29tcGFjdF9hdHRyaWJ1dGUoKSB0byBmbHVzaCB0aGUKICAqIGNo YW5nZXMgb3V0IHRvIHRoZSBjb3JyZXNwb25kaW5nICdjb21wYWN0X2F0dHJzJyBlbGVtZW50Lgor ICoKKyAqIGZpcnN0Tm9uQ2FjaGVkT2ZmQXR0ciBzdG9yZXMgdGhlIGluZGV4IGludG8gdGhlIGNv bXBhY3RfYXR0cnMgYXJyYXkgZm9yIHRoZQorICogZmlyc3QgYXR0cmlidXRlIHRoYXQgd2UgZG9u J3QgaGF2ZSBhIGtub3duIGF0dGNhY2hlb2ZmIGZvci4KKyAqCisgKiBPbmNlIGEgVHVwbGVEZXNj IGhhcyBiZWVuIHBvcHVsYXRlZCwgYmVmb3JlIGl0IGlzIHVzZWQgZm9yIGFueSBwdXJwb3NlCisg KiBUdXBsZURlc2NGaW5hbGl6ZSgpIG11c3QgYmUgY2FsbGVkIG9uIGl0LgogICovCiB0eXBlZGVm IHN0cnVjdCBUdXBsZURlc2NEYXRhCiB7CkBAIC0xMzgsNiArMTQ0LDggQEAgdHlwZWRlZiBzdHJ1 Y3QgVHVwbGVEZXNjRGF0YQogCU9pZAkJCXRkdHlwZWlkOwkJLyogY29tcG9zaXRlIHR5cGUgSUQg Zm9yIHR1cGxlIHR5cGUgKi8KIAlpbnQzMgkJdGR0eXBtb2Q7CQkvKiB0eXBtb2QgZm9yIHR1cGxl IHR5cGUgKi8KIAlpbnQJCQl0ZHJlZmNvdW50OwkJLyogcmVmZXJlbmNlIGNvdW50LCBvciAtMSBp ZiBub3QgY291bnRpbmcgKi8KKwlpbnQJCQlmaXJzdE5vbkNhY2hlZE9mZkF0dHI7CS8qIGluZGV4 IG9mIHRoZSBmaXJzdCBhdHQgd2l0aG91dCBhbgorCQkJCQkJCQkJCSAqIGF0dGNhY2hlb2ZmICov CiAJVHVwbGVDb25zdHIgKmNvbnN0cjsJCS8qIGNvbnN0cmFpbnRzLCBvciBOVUxMIGlmIG5vbmUg Ki8KIAkvKiBjb21wYWN0X2F0dHJzW05dIGlzIHRoZSBjb21wYWN0IG1ldGFkYXRhIG9mIEF0dHJp YnV0ZSBOdW1iZXIgTisxICovCiAJQ29tcGFjdEF0dHJpYnV0ZSBjb21wYWN0X2F0dHJzW0ZMRVhJ QkxFX0FSUkFZX01FTUJFUl07CkBAIC0xOTUsNyArMjAzLDYgQEAgZXh0ZXJuIFR1cGxlRGVzYyBD cmVhdGVUdXBsZURlc2NUcnVuY2F0ZWRDb3B5KFR1cGxlRGVzYyB0dXBkZXNjLCBpbnQgbmF0dHMp OwogCiBleHRlcm4gVHVwbGVEZXNjIENyZWF0ZVR1cGxlRGVzY0NvcHlDb25zdHIoVHVwbGVEZXNj IHR1cGRlc2MpOwogCi0jZGVmaW5lIFR1cGxlRGVzY0ZpbmFsaXplKGQpICgodm9pZCkgMCkKICNk ZWZpbmUgVHVwbGVEZXNjU2l6ZShzcmMpIFwKIAkob2Zmc2V0b2Yoc3RydWN0IFR1cGxlRGVzY0Rh dGEsIGNvbXBhY3RfYXR0cnMpICsgXAogCSAoc3JjKS0+bmF0dHMgKiBzaXplb2YoQ29tcGFjdEF0 dHJpYnV0ZSkgKyBcCkBAIC0yMDYsNiArMjEzLDcgQEAgZXh0ZXJuIHZvaWQgVHVwbGVEZXNjQ29w eShUdXBsZURlc2MgZHN0LCBUdXBsZURlc2Mgc3JjKTsKIGV4dGVybiB2b2lkIFR1cGxlRGVzY0Nv cHlFbnRyeShUdXBsZURlc2MgZHN0LCBBdHRyTnVtYmVyIGRzdEF0dG5vLAogCQkJCQkJCSAgIFR1 cGxlRGVzYyBzcmMsIEF0dHJOdW1iZXIgc3JjQXR0bm8pOwogCitleHRlcm4gdm9pZCBUdXBsZURl c2NGaW5hbGl6ZShUdXBsZURlc2MgdHVwZGVzYyk7CiBleHRlcm4gdm9pZCBGcmVlVHVwbGVEZXNj KFR1cGxlRGVzYyB0dXBkZXNjKTsKIAogZXh0ZXJuIHZvaWQgSW5jclR1cGxlRGVzY1JlZkNvdW50 KFR1cGxlRGVzYyB0dXBkZXNjKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90dXBt YWNzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwbWFjcy5oCmluZGV4IDNlNTUzMDY1OGM5Li4x NTBhN2EyNDc4NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R1cG1hY3MuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHVwbWFjcy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5l IFRVUE1BQ1NfSAogCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlX2QuaCIJLyogZm9yIFRZUEFM SUdOIG1hY3JvcyAqLworI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKIAogCiAvKgpAQCAt NjksNiArNzAsODcgQEAgZmV0Y2hfYXR0KGNvbnN0IHZvaWQgKlQsIGJvb2wgYXR0Ynl2YWwsIGlu dCBhdHRsZW4pCiAJZWxzZQogCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKFQpOwogfQorCisjaWZu ZGVmIEhBVkVfX0JVSUxUSU5fQ1RaCisvKgorICogRm9yIHJldHVybmluZyB0aGUgMC1iYXNlZCBw b3NpdGlvbiBvZiB0aGUgcmlnaHQtbW9zdCAwIGJpdCBvZiBhIHVpbnQ4LCBvciA4CisgKiBpZiBh bGwgYml0cyBhcmUgMSBiaXRzLgorICovCitzdGF0aWMgY29uc3QgdWludDggcGdfcmlnaHRtb3N0 X3plcm9fcG9zWzI1Nl0gPSB7CisJMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwg MCwgMSwgMCwgNCwKKwkwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAw LCA1LAorCTAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisJ MCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNiwKKwkwLCAxLCAw LCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LAorCTAsIDEsIDAsIDIsIDAs IDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisJMCwgMSwgMCwgMiwgMCwgMSwgMCwg MywgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKKwkwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAx LCAwLCAyLCAwLCAxLCAwLCA3LAorCTAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIs IDAsIDEsIDAsIDQsCisJMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwg MCwgNSwKKwkwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA0LAor CTAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDYsCisJMCwgMSwg MCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKKwkwLCAxLCAwLCAyLCAw LCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCA1LAorCTAsIDEsIDAsIDIsIDAsIDEsIDAs IDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisJMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwg MSwgMCwgMiwgMCwgMSwgMCwgOAorfTsKKyNlbmRpZgorCisvKgorICogZmlyc3RfbnVsbF9hdHRy CisgKgkJSW5zcGVjdCBhIE5VTEwgYml0bWFzayBmcm9tIGEgdHVwbGUgYW5kIHJldHVybiB0aGUg MC1iYXNlZCBhdHRudW0gb2YgdGhlCisgKgkJZmlyc3QgTlVMTCBhdHRyaWJ1dGUuICBSZXR1cm5z IG5hdHRzIGlmIG5vIE5VTExzIHdlcmUgZm91bmQuCisgKgorICogV2UgZXhwZWN0IHRoYXQgJ2Jp dHMnIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSAwIGJpdCBzb21ld2hlcmUgaW4gdGhlIG1hc2ssCisg KiBub3QgbmVjZXNzYXJpbHkgPCBuYXR0cy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2ZpcnN0 X251bGxfYXR0cihjb25zdCBiaXRzOCAqYml0cywgaW50IG5hdHRzKQoreworCWludAkJCWxhc3RC eXRlID0gbmF0dHMgPj4gMzsKKwlpbnQJCQlieXRlbnVtOworCWludAkJCXJlczsKKworI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpbnQJCQlmaXJzdG51bGxfY2hlY2sgPSBuYXR0czsKKwor CS8qIERvIGl0IHRoZSBzbG93IHdheSBhbmQgY2hlY2sgd2UgZ2V0IHRoZSBzYW1lIGFuc3dlci4g Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQlpZiAoYXR0X2lzbnVs bChpLCBiaXRzKSkKKwkJeworCQkJZmlyc3RudWxsX2NoZWNrID0gaTsKKwkJCWJyZWFrOworCQl9 CisJfQorI2VuZGlmCisKKwkvKiBQcm9jZXNzIGFsbCBieXRlcyB1cCB0byBqdXN0IGJlZm9yZSB0 aGUgYnl0ZSBmb3IgdGhlIG5hdHRzIGluZGV4ICovCisJZm9yIChieXRlbnVtID0gMDsgYnl0ZW51 bSA8IGxhc3RCeXRlOyBieXRlbnVtKyspCisJeworCQkvKiBicmVhayBpZiB0aGVyZSdzIGFueSBO VUxMIGF0dHJzIChhIDAgYml0KSAqLworCQlpZiAoYml0c1tieXRlbnVtXSAhPSAweEZGKQorCQkJ YnJlYWs7CisJfQorCisJcmVzID0gYnl0ZW51bSA8PCAzOworCisjaWZkZWYgSEFWRV9fQlVJTFRJ Tl9DVFoKKwlyZXMgKz0gX19idWlsdGluX2N0eih+Yml0c1tieXRlbnVtXSk7CisjZWxzZQorCXJl cyArPSBwZ19yaWdodG1vc3RfemVyb19wb3NbYml0c1tieXRlbnVtXV07CisjZW5kaWYKKworCS8q CisJICogU2luY2Ugd2UgZGlkIG5vIG1hc2tpbmcgdG8gbWFzayBvdXQgYml0cyBiZXlvbmQgbmF0 dHMsIHdlIG1heSBoYXZlCisJICogZm91bmQgYSBiaXQgaGlnaGVyIHRoYW4gbmF0dHMsIHNvIHdl IG11c3QgY2FwIHRvIG5hdHRzCisJICovCisJcmVzID0gTWluKHJlcywgbmF0dHMpOworCisJQXNz ZXJ0KHJlcyA9PSBmaXJzdG51bGxfY2hlY2spOworCisJcmV0dXJuIHJlczsKK30KICNlbmRpZgkJ CQkJCQkvKiBGUk9OVEVORCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvdHVwdGFibGUuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKaW5kZXggYTJk ZmQ3MDdlNzguLjM2M2M1ZjMzNjk3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci90 dXB0YWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKQEAgLTg0LDkg Kzg0LDYgQEAKICAqIHR0c192YWx1ZXMvdHRzX2lzbnVsbCBhcmUgYWxsb2NhdGVkIGVpdGhlciB3 aGVuIHRoZSBzbG90IGlzIGNyZWF0ZWQgKHdoZW4KICAqIHRoZSBkZXNjcmlwdG9yIGlzIHByb3Zp ZGVkKSwgb3Igd2hlbiBhIGRlc2NyaXB0b3IgaXMgYXNzaWduZWQgdG8gdGhlIHNsb3Q7CiAgKiB0 aGV5IGFyZSBvZiBsZW5ndGggZXF1YWwgdG8gdGhlIGRlc2NyaXB0b3IncyBuYXR0cy4KLSAqCi0g KiBUaGUgVFRTX0ZMQUdfU0xPVyBmbGFnIGlzIHNhdmVkIHN0YXRlIGZvcgotICogc2xvdF9kZWZv cm1faGVhcF90dXBsZSwgYW5kIHNob3VsZCBub3QgYmUgdG91Y2hlZCBieSBhbnkgb3RoZXIgY29k ZS4KICAqLS0tLS0tLS0tLQogICovCiAKQEAgLTk4LDEyICs5NSw4IEBACiAjZGVmaW5lCQkJVFRT X0ZMQUdfU0hPVUxERlJFRQkJKDEgPDwgMikKICNkZWZpbmUgVFRTX1NIT1VMREZSRUUoc2xvdCkg KCgoc2xvdCktPnR0c19mbGFncyAmIFRUU19GTEFHX1NIT1VMREZSRUUpICE9IDApCiAKLS8qIHNh dmVkIHN0YXRlIGZvciBzbG90X2RlZm9ybV9oZWFwX3R1cGxlICovCi0jZGVmaW5lCQkJVFRTX0ZM QUdfU0xPVwkJKDEgPDwgMykKLSNkZWZpbmUgVFRTX1NMT1coc2xvdCkgKCgoc2xvdCktPnR0c19m bGFncyAmIFRUU19GTEFHX1NMT1cpICE9IDApCi0KIC8qIGZpeGVkIHR1cGxlIGRlc2NyaXB0b3Ig Ki8KLSNkZWZpbmUJCQlUVFNfRkxBR19GSVhFRAkJKDEgPDwgNCkKKyNkZWZpbmUJCQlUVFNfRkxB R19GSVhFRAkJKDEgPDwgNCkJLyogWFhYIGNoYW5nZSB0byAjMz8gKi8KICNkZWZpbmUgVFRTX0ZJ WEVEKHNsb3QpICgoKHNsb3QpLT50dHNfZmxhZ3MgJiBUVFNfRkxBR19GSVhFRCkgIT0gMCkKIAog c3RydWN0IFR1cGxlVGFibGVTbG90T3BzOwotLSAKMi41MS4wCgo= --0000000000007232f506495eaf62 Content-Type: text/plain; charset="US-ASCII"; name="v6-0003-Introduce-deform_bench-test-module.patch" Content-Disposition: attachment; filename="v6-0003-Introduce-deform_bench-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwm933f5 RnJvbSAwYjg0NjUyMTkzNGM3ZmIyNzNjMjY2NzVjNTA1NGVhMjk5MDM2NmQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAyNyBKYW4gMjAyNiAxNTowODowOSArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjYgMy8z XSBJbnRyb2R1Y2UgZGVmb3JtX2JlbmNoIHRlc3QgbW9kdWxlCgpGb3IgYmVuY2htYXJpbmcgdHVw bGUgZGVmb3JtYXRpb24uCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvLmdpdGln bm9yZSAgICAgIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL01ha2VmaWxl ICAgICAgICB8ICAyMSArKysrCiAuLi4vZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC0tMS4wLnNx bCAgICAgICAgfCAgIDggKysKIHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9i ZW5jaC5jICB8IDEwNSArKysrKysrKysrKysrKysrKysKIC4uLi9tb2R1bGVzL2RlZm9ybV9iZW5j aC9kZWZvcm1fYmVuY2guY29udHJvbCB8ICAgNCArCiBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9i ZW5jaC9tZXNvbi5idWlsZCAgICAgfCAgMjIgKysrKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5i dWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5j aC8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1f YmVuY2gvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2RlZm9y bV9iZW5jaC9kZWZvcm1fYmVuY2gtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jb250cm9sCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvbWVzb24uYnVpbGQK CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0aWdub3JlIGIv c3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWRjYjNmZjk3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAor IyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9sb2cvCisvcmVzdWx0cy8KKy90bXBfY2hlY2sv CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9NYWtlZmlsZSBiL3Ny Yy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5iNWZjMGY3YTU4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL01ha2VmaWxlCkBAIC0wLDAgKzEsMjEgQEAKKyMgc3Jj L3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IGRlZm9y bV9iZW5jaAorT0JKUyA9IGRlZm9ybV9iZW5jaC5vCisKK0VYVEVOU0lPTiA9IGRlZm9ybV9iZW5j aAorREFUQSA9IGRlZm9ybV9iZW5jaC0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJkZWZvcm1fYmVu Y2ggLSB0dXBsZSBkZWZvcm0gYmVuY2htYXJraW5nIgorCitSRUdSRVNTID0gZGVmb3JtX2JlbmNo CisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVs bCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBz cmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaAordG9wX2J1aWxkZGlyID0gLi4vLi4KK2luY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3Jj ZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAuc3FsIGIvc3JjL3Rlc3Qv bW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2JlbmNoLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTJiNzFkYmEzYgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC0tMS4wLnNxbApAQCAt MCwwICsxLDggQEAKKy8qIGRlZm9ybV9iZW5jaC0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBp ZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVO U0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIGRlZm9ybV9iZW5jaCIgdG8gbG9hZCB0 aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBkZWZvcm1fYmVuY2godGFibGVvaWQg T2lkLCBhdHRudW0gaW50W10pIFJFVFVSTlMgRkxPQVQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAn ZGVmb3JtX2JlbmNoJworTEFOR1VBR0UgQyBWT0xBVElMRSBTVFJJQ1Q7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2guYyBiL3NyYy90ZXN0L21v ZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44OTVmZjNmNDIyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvZGVmb3JtX2JlbmNoL2RlZm9ybV9iZW5jaC5jCkBAIC0wLDAgKzEsMTA1IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZWZvcm1fYmVuY2guYworICoKKyAqIGZvciBiZW5j aG1hcmtpbmcgdHVwbGUgZGVmb3JtYXRpb24gcm91dGluZXMKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRl IDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImFj Y2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ190eXBlX2QuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJh eWFjY2Vzcy5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisKK1BHX01PRFVMRV9NQUdJ QzsKKworUEdfRlVOQ1RJT05fSU5GT19WMShkZWZvcm1fYmVuY2gpOworCitEYXR1bQorZGVmb3Jt X2JlbmNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQl0YWJsZW9pZCA9IFBHX0dFVEFSR19P SUQoMCk7CisJQXJyYXlUeXBlICphcnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwlU YWJsZVNjYW5EZXNjIHNjYW47CisJUmVsYXRpb24JcmVsOworCVR1cGxlRGVzYwl0dXBkZXNjOwor CVR1cGxlVGFibGVTbG90ICpzbG90OworCURhdHVtICplbGVtX2RhdHVtcyA9IE5VTEw7CisJYm9v bCAqZWxlbV9udWxscyA9IE5VTEw7CisJaW50IGVsZW1fY291bnQ7CisJaW50ICphdHRudW1zOwor CWNsb2NrX3Qgc3RhcnQsIGVuZDsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4odGFibGVvaWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlpZiAocmVsLT5yZF9yZWwtPnJlbGFtICE9IEhFQVBfVEFCTEVf QU1fT0lEKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJvbmx5IGhlYXAgQU0gaXMgc3VwcG9ydGVkIikp KTsKKworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2xvdCA9IE1ha2VUdXBs ZVRhYmxlU2xvdCh0dXBkZXNjLCAmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKKwlzY2FuID0gdGFi bGVfYmVnaW5zY2FuX3N0cmF0KHJlbCwgR2V0QWN0aXZlU25hcHNob3QoKSwgMCwgTlVMTCwgdHJ1 ZSwgZmFsc2UpOworCisJLyoKKwkgKiBUaGUgYXJyYXkgaXMgdXNlZCB0byBhbGxvdyBjYWxsZXJz IHRvIGRlZmluZSBob3cgbWFueSBhdHRzIHRvIGRlZm9ybS4KKwkgKiBlLmc6ICd7MSwxMH0nOjpp bnRbXSB3b3VsZCBkZWZvcm0gYXR0bnVtPTEsIHRoZW4gaW4gYSAybmQgcGFzcyBkZWZvcm0KKwkg KiB0aGUgcmVtYWluZGVyIHVwIHRvIGF0dG51bT0xMC4gIFBhc3NpbmcgYW4gZWxlbWVudCBhcyBO VUxMIG1lYW5zIGFsbAorCSAqIGF0dG51bXMuICBUaGlzIGFsbG93cyBzaW11bGF0aW9uIG9mIGlu Y3JlbWVudGFsIGRlZm9ybWF0aW9uLiAgR2VuZXJhbGx5CisJICogaWYgeW91J3JlIHBhc3Npbmcg YW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMSBlbGVtZW50LCB0aGVuIHRoZSBhcnJheQorCSAqIHNo b3VsZCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIuICBEb2luZyBzb21ldGhpbmcgbGlrZSAnezEwLDF9 JyB3b3VsZCBtZWFuCisJICogd2UndmUgYWxyZWFkeSBkZWZvcm1lZCAxMCBhdHRyaWJ1dGVzIGFu ZCBvbiB0aGUgMm5kIHBhc3MgdGhlcmUncworCSAqIG5vdGhpbmcgdG8gZG8gc2luY2UgYXR0bnVt PTEgd2FzIGFscmVhZHkgZGVmb3JtZWQgaW4gdGhlIGZpcnN0IHBhc3MuCisJICoKKwkgKiBZb3Un bGwgZ2V0IGFuIEVSUk9SIGlmIHlvdSBwYXNzIGEgbnVtYmVyIGhpZ2hlciB0aGFuIHRoZSBudW1i ZXIgb2YKKwkgKiBhdHRyaWJ1dGVzIGluIHRoZSB0YWJsZS4KKwkgKi8KKwlkZWNvbnN0cnVjdF9h cnJheShhcnJheSwKKwkJCQkJICBJTlQ0T0lELAorCQkJCQkgIHNpemVvZihpbnQzMiksCisJCQkJ CSAgdHJ1ZSwKKwkJCQkJICAnaScsCisJCQkJCSAgJmVsZW1fZGF0dW1zLAorCQkJCQkgICZlbGVt X251bGxzLAorCQkJCQkgICZlbGVtX2NvdW50KTsKKworCWF0dG51bXMgPSBwYWxsb2NfYXJyYXko aW50LCBlbGVtX2NvdW50KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbV9jb3VudDsgaSsr KQorCXsKKwkJLyogTWFrZSBhIE5VTEwgZWxlbWVudCBtZWFuIGFsbCBhdHRyaWJ1dGVzICovCisJ CWlmIChlbGVtX251bGxzW2ldKQorCQkJYXR0bnVtc1tpXSA9IHR1cGRlc2MtPm5hdHRzOworCQll bHNlCisJCQlhdHRudW1zW2ldID0gRGF0dW1HZXRJbnQzMihlbGVtX2RhdHVtc1tpXSk7CisJfQor CisJc3RhcnQgPSBjbG9jaygpOworCisJd2hpbGUgKGhlYXBfZ2V0bmV4dHNsb3Qoc2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCXsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KworCQkvKiBEZWZvcm0gaW4gc3RhZ2VzIGFjY29yZGluZyB0byB0aGUgYXR0bnVtcyBhcnJheSAq LworCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1fY291bnQ7IGkrKykKKwkJCXNsb3RfZ2V0c29t ZWF0dHJzX2ludChzbG90LCBhdHRudW1zW2ldKTsKKwl9CisKKwlFeGVjRHJvcFNpbmdsZVR1cGxl VGFibGVTbG90KHNsb3QpOworCXRhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25fY2xvc2Uo cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZW5kID0gY2xvY2soKTsKKworCS8qIFJldHVybnMg dGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gcnVuIHRoZSB0ZXN0ICovCisJUEdfUkVUVVJO X0ZMT0FUOCgoZG91YmxlKSAoZW5kIC0gc3RhcnQpIC8gKENMT0NLU19QRVJfU0VDIC8gMTAwMCkp OworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kZWZvcm1fYmVuY2gvZGVmb3JtX2Jl bmNoLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZvcm1fYmVuY2gu Y29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTIwMjNmOWQ3 MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9kZWZv cm1fYmVuY2guY29udHJvbApAQCAtMCwwICsxLDQgQEAKKyMgZGVmb3JtX2JlbmNoIGV4dGVuc2lv bgorY29tbWVudCA9ICdmdW5jdGlvbnMgZm9yIGJlbmNobWFya2luZyB0dXBsZSBkZWZvcm1hdGlv bicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9k ZWZvcm1fYmVuY2gnCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2RlZm9ybV9iZW5jaC9t ZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL21lc29uLmJ1aWxkCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MjA0OTU4NTI0NAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZGVmb3JtX2JlbmNoL21lc29uLmJ1aWxkCkBA IC0wLDAgKzEsMjIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorCitkZWZvcm1fYmVuY2hfc291cmNlcyA9IGZpbGVzKAorICAnZGVm b3JtX2JlbmNoLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgZGVmb3Jt X2JlbmNoX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9h cmdzOiBbCisgICAgJy0tTkFNRScsICdkZWZvcm1fYmVuY2gnLAorICAgICctLUZJTEVERVNDJywg J2RlZm9ybV9iZW5jaCAtIGJlbmNobWFya2luZyB0dXBsZSBkZWZvcm1hdGlvbicsXSkKK2VuZGlm CisKK2RlZm9ybV9iZW5jaCA9IHNoYXJlZF9tb2R1bGUoJ2RlZm9ybV9iZW5jaCcsCisgIGRlZm9y bV9iZW5jaF9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0X2lu c3RhbGxfbGlicyArPSBkZWZvcm1fYmVuY2gKKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMo CisgICdkZWZvcm1fYmVuY2gtLTEuMC5zcWwnLAorICAnZGVmb3JtX2JlbmNoLmNvbnRyb2wnLAor KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21v ZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggMjYzNGE1MTk5MzUuLmVmMmIwYWY0NTgxIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv bWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAKIHN1YmRpcignYnJpbicpCiBzdWJkaXIoJ2Nv bW1pdF90cycpCitzdWJkaXIoJ2RlZm9ybV9iZW5jaCcpCiBzdWJkaXIoJ2RlbGF5X2V4ZWN1dGlv bicpCiBzdWJkaXIoJ2R1bW15X2luZGV4X2FtJykKIHN1YmRpcignZHVtbXlfc2VjbGFiZWwnKQot LSAKMi41MS4wCgo= --0000000000007232f506495eaf62 Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name="Deform_bench_test_module_results_2026-01-28.xlsx" Content-Disposition: attachment; filename="Deform_bench_test_module_results_2026-01-28.xlsx" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwn0hml5 UEsDBBQACAgIAC4sO1wAAAAAAAAAAAAAAAAUAAAAeGwvY2hhcnRzL2NoYXJ0MS54bWztmvtu2zYU h59g76AJAbpiSOhb7MSIXaQOUrS5OU3W/2mKsrnwIpC0a/fpd6hb5Chp7FQJNkw2IFEU+ePROR+P ZNFHH5aCewuqDVNy4Df3Gr5HJVEBk9OB/9ft6e6B7xmLZYC5knTgr6jxPwx/OyJ9MsPa3kSYUA80 pOnjgT+zNuojZMiMCmz2VEQlnAuVFtjCoZ6iQOPvoC04ajUaXSQwk37an7ygf2xEJqA3EVBhyAg9 UWQuqLSJiqYcW3CAmbHIZGpiI3sE1nfzaJcoEYHEhHFmV7FoLrMY+HMt+6nGrmBEK6NC6/r0BSb9 heC5C5qd0qB5hz3okJqfucGN1EMHqJU6YpjFxRUss5zGhaXbakZmwyPcn6hgNdbIFbmxN3bFaXwQ xZux9viCD/yG7w4DGn6Fmkl2bBRnwSnjPD7Q08mIa2+BoX1v3319UEIPmjnXSs+uIhoCKwP/TyF3 uU1bJgPExcjtcT/ZvOqgOhnJDo8vTtqHh42lNyXEW3Q9CCGZeQvjgd8t1a6tTXokFsI28yPK3Kpg 8nC8SgxqxCMUXB9xZY81xa4MrdTcIlecYD3KwgTlE5ZeEFHcjxsYqt2OBcuCMAymA6rXahIjjNVf aehK4fBdfiGamjm35t3vO192Ws6sMDYua5xfgkldv+5ohx/NXY0JgenSfNTX0iMiCga+kdNnAtaI P2UR5FQS42JbSD84n3DjCnIuToX1kjk3UgEE8xOVVGOYNEbNNaHnTN5RGL6ZeSS5mu05R/cc5tFO 1MCumfp+TqdUBmd0tRYBd+Yb5kld875uhO0lFrTU9obqR+vHVDsXl+o/zicTTm/YD7rOWO4hgu0m DHzeafdh03sUhFQDBkh9/gxOIPUll4o7jDAAk1iWdUepIMp5foh1s4R1cxuszyrCulVjXWPtcAKp swqwbpWwbm2D9XlFWLdrrGusHU4gdV4B1u0S1u1tsL6oCOtOjXWNtcMJpC4qwLpTwrqzDdaXFWH9 +O+YGuv/GdaXTuqyAqz3S1jvb4P1VUVYd2usa6wdTiB1VQHW3RLW3W2wHlf2JiSmZC6uwjB9Fipy mnWp0a/RHzupcQXo90ro97ZB/7qytyU1+jX6G6F/7aSuX4A+Xn4O0uzebR50ur1W6rD7E61Gp9dt N/cPs+ssvlQHM4+XPxUyBHMmp8mEYuDPeAUoaSqYvMDLVLbQMKCc2vWA4OVYmaRmkmL1lssuT82T V112eeGg+bLL5VxMIIOp0KNLq7FHFCQTaSpYbtk6Bwj8t9K3jNxdYH2XiEolaXqSyadPuvzzi2nE +boJhv2AXbfxRqEuJSy3umiOl09MqnwiwemHM2q98WtMKV6I0ifNAuhFTfFu5W4GP3Pax577Pn8f QY8NEsf/RcOO4k8cUMyjGS7imjfdxKaSBRVnlzeG72GeeeXh84yT3jLxlHphvLTr2RmW6TKv9wcW Qb4O/P6/lYYs1MP9PZ8xElLqrbpPUQmtaO2R6dcy1r8iT63dzFGendCDFff4Oey+lHtJp0/SpSi+ tnOax+5btXNQ8VKdA74xcyX5qvCoifI/hqDiX3eG/wBQSwcIuyTv9ZsEAAABJAAAUEsDBBQACAgI AC4sO1wAAAAAAAAAAAAAAAAUAAAAeGwvY2hhcnRzL2NoYXJ0Mi54bWztmv1v2jgYx/+C+x9yUaXd dGrNOxQVpo6p09Y3uvb2u3Ec8NUvkW0Y7K8/23ECNGwtXVrd6QJScBz7+zx+/PGTgDl5t2Q0WGCp iOCDsH5UCwPMkYgInw7Cv+7ODnthoDTkEaSC40G4wip8N/ztBPXRDEp9m0CEA6PBVR8OwpnWSR8A hWaYQXUkEszNtVhIBrU5lVMQSfjNaDMKGrVaBzBIeOj7o2f0d05kAvIpAiKOCcIfBJozzHWqIjGF 2gRAzUiiMjX2JH8YlPfz5BAJlhiJCaFEr5xoLrMYhHPJ+17jkBEkhRKxtn36DKL+gtE8BPVWwWje 4ch08O5nYbCWuqAHGj4Qw2xebEETTbErLO1REjQbnsD+RESrsQS2SJW+1SuK3UniDmMZ0AUdhLXQ nkY4/mJqJtm5EpREZ4RSdyKnkxGVwQKa9t22fYdGCTxoZkPLA71KcGxYGYR/Mn5ItW+ZGnDFxH7C fnp4UaMytaSHp5cfuset9mwZTBEKFp3AzCGaBQsVmMBrLG1jnXZJXTTHLJAgi6swq4fCVepRzZnY iH1ChT6VGNqyaSXmGtjiBMpRNk+m/IH4ESFBQ9dAYWk/SLTcEDbGZITlVk3qhNLyC45tKR6+yQci sZpTrd78fvD5oNe1fsXOu6x1Pgblg78dagsgzoMNETILpr4z2jxALIkGoeLTR6as5l5FEWBVUuec L6gfXUyosgU+Z2dMB+mqG4nITOdHzLGEZtkoMZcIXxB+j435ehaSdDT7kw7WJObTnaoZv2bi2wWe Yh6d49XWFNgrXyFN6+rruhHUV5DhQttbLHfWj7G0IS7Uv59PJhTfku94G7I8Qgjqp0Dw6aDX65vj cWMnCl7FmPBRf4woI/Z5Lea6jKCBJvUuEwBeEuRQP2S7XmC7vg/b52Wx3ajYrtj2RBmx8zLYbhTY buzD9kVZbDcrtiu2PVFG7KIMtpsFtpv7sH1ZFtutiu2KbU+UEbssg+1Wge3WPmxflcX27m83Fdv/ O7avnNhVGWy3C2y392H7uiy2OxXbFdueKCN2XQbbnQLbnX3YHpf3O4lDZc6u49g/G23CmnWp+K/4 d9QZsXEZ/HcL/Hf34f+mvN9SKv4r/p/I/40Tu3kO/3D5KfLBarbbzXanc+xHu75iqnvNVq3V8WPd /PHdOHq6/LmQQpASPk2XFTFBdXtFaVtG+CVcet2NhhGmWG/PClyOhUprJp6t19yg+dFiedENmmca zTdoruZsYvKYiAO81BIGSJiMwlUJ+zJ7JwIG/xbyjqD7SyjvU1EuOPYXCf/xRZuEfjGX2FjXjWPf zUen9kpTXchadh9SnS53L6p8IZmrD1fUVtuXWFB0Y44+ShKZXlht3rDs/eBnIXvfte/HbyVglxE3 +88yO3IvN52QJjO4CWve9Ck+FTwoObe8MnoPs8wLm8/zjb9rwikOYrcDHOgZ5H43OPgDsmi9X/z2 v5WFtKk39/h8yXCTUe/EOkOluIKtx6ZfS1j/ijS1fTMHeXoCD7bm3cPYupSHSfrn6cI0vnR06qf2 XXZ0wOZQbQC+EnXN6WrjeRPkfyEBm3/yGf4DUEsHCN60zs+fBAAAKyQAAFBLAwQUAAgICAAuLDtc AAAAAAAAAAAAAAAAFAAAAHhsL2NoYXJ0cy9jaGFydDMueG1s7Zp/b9o4GMdfwb2HXDRpN51aE6DA UGHqmDptbSlde/vfOA746h+RbRjs1Z/t/CAQtpYure50ASlxHPvrJ48/z5MQc/puxai3xFIRwQd+ cNzwPcyRCAmfDfy/7s6Per6nNOQhpILjgb/Gyn83/O0U9dEcSn0bQ4Q9o8FVHw78udZxHwCF5phB dSxizM25SEgGtTmUMxBK+M1oMwqajUYHMEi4n/ZHT+jvjMgE5GMERBQRhD8ItGCY60RFYgq1cYCa k1hlauxR9jAo7xfxERIsNhJTQoleO9FcZjnwF5L3U40jRpAUSkTa9ukziPpLRnMXBO3SoHmHY9Mh NT9zgx2pC3qgmTpimM2LLWiiKXaFld1KgubDU9ifinA9kcAWqdK3ek2xO4jdZiI9uqQDv+HbwxBH X0zNNDtWgpLwnFDqDuRsOqLSW0LTvntiv75RAjvNrGu5p9cxjgwrA/9Pxo+oTlsmA7hibPewn2ye dVCZjKSHZ3FMsXfV9BCFfOYtO56ZRDT3lsozntdY2tY66ZPYaLaZJ0HmWGHCh8J1YlLDjVFwfkyF PpMY2rJpJRYa2OIUylE2Uab8gaSXhAT1XQOFpd2RcFUQNoPJEMutmsQIpeUXHNlSNHydX4jEakG1 ev37q8+vgm7bGhY587Lm+UWo1P3bzrYI4tzdECETMsFef3MPsTgc+IrPHpi0hvuURYBVSYxztqB+ eDmlyhb4gp0z7SVxNxKhmdCPmGMJTeAosZAIXxJ+j83wQeaT5GoOZx1sWMznO1Ezds3Ft0s8wzy8 wOutObBnvkKa1AWbuhHUY8hwqe0tlnvrJ1haF5fq3y+mU4pvyXe8TVnuIQT1Yyj4ZCg46bvd270w pDpmkNTvD0Jl5D4X5FynETTgJBZmEiAVBTnZu4AHJcCDQwC/qAzwZg14DfgGKiN3UQngzRLgzUMA v6wM8FYNeA34Biojd1kJ4K0S4K1DAL+qDPB2DXgN+AYqI3dVCeDtEuDtQwAfVwb4/t88NeD/Q8DH idy4EsBPSoCfHAL4dWWAd2rAa8A3UBm560oA75QA7xwC+KTCtyiOlwW7jqL0WalIbNalDoI6CDLw jNykkiDoloKge0gQ3FT4pqUOgjoIHh0EN4nczZOCAK4+hanDOie9Zid420qp35zp9Nq9Vq/b6aTX W3xJb0w9W/1cSCFICZ8lsUWMY92iUtKWEX4FV6luoWGIKdbbMwNXE6GSmmnK10uu5PwoYJ51JeeJ g+YrOeMFm5pkJiIPr7SEHhImq3BVwfrNwcmAwb+FvCPo/grK+0SUC47Tk4T/+KRNRL+YT6yvA2PY d0tn44WmupS57IKlOlvtD6o8kMzZ3YjaavscAUULc/RRktD0wqp407L3hJ+57H3Xfh++nYB9g7jZ f9KwI/dx0wlpPIdFWPOmj7GpZEHFueWF0dvNMs88fJ5v0jsnnGEvcivFnp5Dnq4ae39At7DMmm/+ WwlIm3pzi8+jhZtkeic2ySkhFWw9Nf1arvpXZKjt+zjIMxPYWb13z2KbUu4mmT5Pl6bxub0TnNlv 1d4BxUu1DvhK1DWn68LjJsj/ZgKKfwQa/gNQSwcIpVm3KaMEAABPJAAAUEsDBBQACAgIAC4sO1wA AAAAAAAAAAAAAAAUAAAAeGwvY2hhcnRzL2NoYXJ0NC54bWztmvFv2jgUx/+C+x9yUaXddGqTUAgt Kkxdq05boaVrb78bx4FcHTuyDQv76892nBAIa6FLqztdQAq2Y3/fy/PHLwFz9iGNsbVAjEeU9G3v yLUtRCANIjLt2389XB2e2BYXgAQAU4L69hJx+8PgtzPYgzPAxH0CILKkBuE90LdnQiQ9x+FwhmLA j2iCiDwXUhYDIats6gQMfJfaMXZarus7MYiIbcbDF4zXTuQCbBcBGoYRRJcUzmNERKbCEAZCBoDP ooTnavFO/sSAPc6TQ0jjREpMIhyJpRYtZBZ9e85Iz2gcxhFklNNQqDG9GMDeIsZFCLx2xWgx4EgO MO7nYVCWus6J0zKBGOTzogoiEhjpQqqOLIKzwRnoTWiwHDNHFTEX92KJka4k+jBmFl7gvu3aqhqg 8KtsmeR1TnEUXEUY6wqbTi4wsxZA9u921NuWSs5GNxVaYollgkLJSt/+MyaHWJiemQFdTNQn6GWH VzXKMkticD66PD49dVMLYkCm1sK35CTCmbXgloy8QEz1FtmYzEd5zCPp5IHFYEnnOuIxIHOAh0U9 HdEAZa6iYIqUedhbbmtMswb3yG2dnPqu1+m0T92u3+0ed82ookN2vZvGnLIfVC5oWTNDTP8ChwRT cc4QWPmuLUwAu8jRkeXLyAQZUpy5wBFTH1GQloSlMRYgttaShYUL9hWFqhQO3hWhZYjPseDvfj/4 ctDuKL9C7V3eu4gqNzysz75aE6iYfwChXMPeVgCIBeMk6NucTJ+hyNWvqoijVDLntC+wFwwnmKsC mcdXsbCyRHAh57Nvf0IEMSBXMqdzBtEwIo9ImvfykGRXs//ic1aLowAwU5N+zej3IZoiElyj5doU qDPfAM7avFXbBRA3IEaVvveIbW0fI6ZCXGn/OJ9MMLqPfqB1yIoIQSB2geDzQdvvyWPH3YqCUZEm TNSfI0qKfVmJ6SEXQEKTeZcLOEbSKaDeZNursO3tw/Z1XWy3GrYbtg1RUuy6DrZbFbZb+7A9rIvt 44bthm1DlBQb1sH2cYXt433YHtXFdrthu2HbECXFRnWw3a6w3d6H7Zu62N7+hath+3/H9o0Wu6mD 7U6F7c4+bN/WxbbfsN2wbYiSYrd1sO1X2Pb3YXtc3+8kGpV5fBuG5tmoDGs+pOG/4V9TJ8XGdfDf rfDf3Yf/u/p+S2n4b/jfkf87LXb3Ev5B+jkwwer4nud7fss8qK/OdE7brn9y0vbMtZZ/fJeOnqdP C3EIcESm2bKKZFD19lXWN47ICKRGt9QxQBiJ9VkB6ZjyrGVi2HrLPaOfLZZX3TN6odFiz+hmHk9k HqOhhVLBgAWpzCiE77RT9PS+zN6JIAZ/U/YQwccRYI+ZKKHE7ChJDH5+UiWhX8wlKtaedOyH/PDd N5rqStZSW6P8PN2+qIqFJM9urqi1vq+xoHBpjj6xKJCjEC/fsNT94KmQfeyq9/O3EmebET37LzJ7 oV96OgFOZqAMa9F1F58qHtScW94Yvc0s88rmi3xj7ppgiqxQ70lbYgaI2Z+2/gBxUNrCfv/fSkNC tsubfLFmiEypD3SVojJenbXnpl/LWP+KPLV+N3eK/ORs7M3rp7FVqQgTMw/UlWl87eh45+pdd3Sc 8qWqAHyL+C3By9IDp1P8rcUp//Fo8A9QSwcI4uUfltoEAAC/JAAAUEsDBBQACAgIAC4sO1wAAAAA AAAAAAAAAAAUAAAAeGwvY2hhcnRzL2NoYXJ0NS54bWztmvtu2zYUh59g76AJBbpiSGg5jp0asYvU QYo2N6fJ+j9NUTYXXgSSdu0+/Q51sxwlTZwqwYbJBiSKIn88PPzOkWLm8MNScG9BtWFKDvxgt+V7 VBIVMjkd+H/dnOwc+J6xWIaYK0kH/ooa/8Pwt0PSJzOs7XWMCfVAQ5o+Hvgza+M+QobMqMBmV8VU wr1IaYEtXOopCjX+DtqCo3ar1UUCM+ln/ckz+idG5AL6KQIqihihx4rMBZU2VdGUYwsOMDMWm1xN PMkegfXtPN4hSsQgMWGc2VUiWsgsBv5cy36msSMY0cqoyLo+fYFJfyF44YKgUxm06LALHTLzcze4 kXroALUzRwzzdXEFyyynSWHpjpqR2fAQ9ycqXI01ckVu7LVdcZpcxMlhrD2+4AO/5bvLkEZfoWaS XxvFWXjCOE8u9HQy4tpbYGjf23dfH5TQnWbOtdKzq5hGwMrA/1PIHW6zlukASTF2Z9xPDy86qE5H ssOj8+Pe+87+bOkRjuXUW3Q9WEUy8xbGA9dbql1zm3ZKjYRj7kqUe1ZB/HC8Sm1qJYOUvB9zZY80 xa4MrdTcIlecYD3KVwrKxyybE1HcTxoYqt2JhcuSMAymQ6o3alIjjNVfaeRK0fBtMRFNzZxb8/b3 N1/eBHstZ1iUmJc3LyZhMv9vetsxSAt/Y0IgZoJ7HS49IuJw4Bs5fWTVWsmnKoKcSmpcYgvph2cT blxBzsWJsF4aeCMVwop+opJqDJFj1FwTesbkLYXhg9wn6Wy2hx2tYSzWO1UDu2bq+xmdUhme0tXG Grg73zBP64J13QjbCyxope011ffWj6l2Lq7Uf5xPJpxesx90k7LCQwTbp1DwGSgI+slp/14YMh0Y JPP7o1CB3JeSXNJphAGc1MJcAmWiqCD7LuBBBfBgG8BPawO83QDeAL6GCuROawG8XQG8vQ3gZ7UB vtcA3gC+hgrkzmoBfK8C+N42gJ/XBninAbwBfA0VyJ3XAninAnhnG8AvagP8/j96GsD/h4BfpHIX tQC+XwF8fxvAL2sDvNsA3gC+hgrkLmsBvFsBvLsN4OMaf0VJeJmLyyjK3pXKxOZdmiBogiAHD+TG tQRBrxIEvW2C4KrGX1qaIGiC4MlBcJXKXT0rCPDyc5g5rNXuHnQ7B0E249Kd992gDQh2e9mEy7/S g61Hy58rGYI5k9M0uBh4NtlWStsKJs/xMtMtNQwpp3ZzafByrExaM8kAe829nIci5kX3cp45aLGX czEXE8hmKvLo0mrsEQVpRZoaNnC2zgYC/630DSO351jfpqJSSZrdZPLhmy4T/WJCcb4OwLAfcOq2 XmmpK6nLbVmao+UDUVVEEtyuhNRG45cIKV5apU+ahdCLmvJzyz0Wfua0jz33ffyJgu4bJFn/Zw07 Sj7JgmIez3AZ16LpU2yqWFBzdnll+O7mmRcevsg42cMTT6kXJZvFnp1hmW0ce39gEZY3l9/9tzKR hXp42BdBIyGr3qh1lkqBRRvvT7+WtP4dqWrjgY6KDIXu7OMnb2XrUuEmnb1ZV5bxpb0THLlv3d5B 5ak6B3xj5lLyVenFExX/cYLK/xM0/AdQSwcIXYbqfqQEAABaJAAAUEsDBBQACAgIAC4sO1wAAAAA AAAAAAAAAAAYAAAAeGwvZHJhd2luZ3MvZHJhd2luZzEueG1s5ZfdbtowFMefYO8Q+b44HwRIRFJN RZ0mTVulrtq15zjEIrYj20B4+zkJZqRlE0TTKsENOh85f59z9Isj5vc1K50NkYoKngBv5AKHcCwy ypcJePn+eDcDjtKIZ6gUnCRgRxS4Tz/M60zGW7WQjqnnKjZuAgqtqxhChQvCkBqJinCTzYVkSBtX LmEm0dYosxL6rjuBqpIEZaogRC+6DNjroQFqDFFu68/qRuQ5xWQh8JoRrjsRSUqkzS5UQStl1fCA bnCBpD4I1G8UGMVSKJHrERZs34rVMAreuFMg9W8N72KREEZw9lqInTUOQ3K1ru6MbmUW8pOWVO/a yaxMtmQD1pJRtJSIWZE6eOGri8dyoSpNSFoVVRIvvFjFtyppS7PB+4GU5UeOCyG7UC4F6ywsynQ2 h9a0sW95nvqzcBoeUk2kzUqxTadduDFtrMl7QRCE7iHXlsD+eaTWTgNNNDN9+iFw8C4BEzecRq4L YPeM2WNVUPxo1km6CN98Ooo97afAXzdP0qGZeb2Bw00iAQ8NEY5xNdWl9a2ueb4vA/ftnZavc2ma RrFZsGM6NhfIrvmFTcyO4XYDtFF4XLSf4chcII2ctaSDX7l0juPWcmTcDC0/Z157bu+IY3/f09t9 4pKai6HtKP8i8Er9oLp4bq6r41lOgDOUJS9yLRivWYqC0zCdyVE09SdTy5E3aZ3BHPl9jvxb4ci/ Ao68afSHW6mpeQ+agj5Nwa3QFFwBTUefscEw/dNP3LgP0/hWYBpfAUxeMPkLTe9wM4V9mMJbgSn8 nzBB+1cy/QVQSwcILnjXbFcCAACNDgAAUEsDBBQACAgIAC4sO1wAAAAAAAAAAAAAAAAjAAAAeGwv ZHJhd2luZ3MvX3JlbHMvZHJhd2luZzEueG1sLnJlbHO90ksKwjAQgOETeIcwe5O2PhBp6kYEt6IH GNLpA9skJFH09gZUUJDiqstkmD/fIvnm1nfsSs63RktIeQKMtDJlq2sJp+NuugLmA+oSO6NJwp08 bIpJfqAOQ9zxTWs9ixHtJTQh2LUQXjXUo+fGko6TyrgeQzy6WlhUZ6xJZEmyFO6zAcVXk+1LCW5f psCOd0v/tE1VtYq2Rl160uHHE0I16EIMoqspSOD8efMapDwGQfx2ZOM5siHHbDzHbMgxH88xH3Is xnMs3g7x9fmLB1BLBwh8AYQ0zgAAAEQDAABQSwMEFAAICAgALiw7XAAAAAAAAAAAAAAAABgAAAB4 bC93b3Jrc2hlZXRzL3NoZWV0MS54bWydfVuzHDeO5i/Y/6DQ085Dl3i/OGxvbKsuR0d19fTsPmvs Y1vRlo5Dkts98+sXKFVWEviYldXbPeFxgwBOFkiQAAiA3/6vf3747cU/nj59fv/88buXdmFevnj6 +OPzT+8//vLdy//42/ov5eWLz1/effzp3W/PH5++e/lfT59f/q/v/8e3fz5/+vvnX5+evrwgBh8/ f/fy1y9ffv/m1avPP/769OHd58Xz708faeTn508f3n2h//npl1eff//09O6nM9GH3145Y9KrD+/e f3z5lcM3n+7h8fzzz+9/fFo+//jHh6ePX74y+fT027sv9Pmff33/++eB24d/ArsP73/89Pz5+ecv ix+fP1w40Rf8+Orpnz8+nT+oiA/68OM9X/Th3ae///H7X4jl7/QV//n+t/df/uv8XVc2//ju5R+f Pn5z4fGX62cwzTf097/5x4ffBuR/2nDfd4Mw66sqvv6fNv7/cbLmlbWKVXiHsrj/s979eOX04T42 1xm5LJHvvz2zPH76/tvnP7789v7j0/HTi89/fCDh/9dfn357/vO7l7RwL4Af3v/y6xcGvPr+29/f /fL0709f/uN3wv/5/Ze/PR8JQOucx15deZ7/5f+8f/rzc/PvL3iJ/+fz89/5f7z56cLwFeCuz4uB +P/4x+cvzx8enr7+efvyxU9PP7/747cvr59/+7/vf/ryK8HcIvkr/IfnP6/IcZEjsz9zXL778u77 bz89//niE/P5/tsf+V/+N3H8fOZLBJ8J+o/vzbev/kGf9OMF469fMRwzOgNea8BSA1YasG4Ar+gT rt/hrt/h4Dus+g7EcBLjNWJ4ibFEjCAxVogRJcYaMZLE2HzF8A1GlhgPA49BQG++AsL0NDx+xYgN RpEYbxGjSowtYlj1Z3YdFDUR+w6KmolDB0VNxbGDoubi1EFRk/EDitqOsyGWmr8uNX+mSV+xF3q5 t6NGj75uR51ZeDWxy6/j+UKda6zJJZudLcGrZbISvOxC//y15FVKdMY5l3wuyamZ3XzFLYT781kU v7779PTTyxefnn7mwW82gQX1/qz4K//qtf8LTerPl59IDGlPLFkzffOVae2L4rH5k/fzfCuowqvX 4Ur1FyKzRBGqs1Wt7a0gi69eR0Hmii/B5RoU2U6QpVevkySjYymUGvUCF1T51evc/jKeS19NMWop HgRVefW6iL/low3R5KgWwVFQ1Vevq6Tin2VT1jp4EmR0uL62Rv057w3Jo9FMoQ3hqg2hXYWgDeGm Nghatwh6uw1iBVefqiPRpeRDNQp3pXgZ9YvXklchaYYUMqlXyElrQ+hrw1cFeDW32N6EZt1bXPhB yN6S7G2zQGwM1tccvVLnt5LMEZlr15WhD6H/0nyrzXQrCUnTrBd/rxpaws4rge4kGamaDS1Z8t7R UobFL8lI1WxsyFwoTBay2vgOkoxUzab2r/n69cep33aUZKRrVipbjkSXvdNHg6QjbbOl/XPG5kQq Gmp/9cfr6o/NqvOw+uPN1R/lilWLcBnlgo0hm1KKp/+fvFpxK8XKaZtD8kolEIuciosueCXSTbxr 8U9tmW9is/gdLv4oBE8blpU7Vo7B06lnk1pXbwWhox3LyR0rGjrV6IgL2miRhKRuzraENtIe7gvo 207Skb45J+hc9pnOqKBW8l7Skbq5Vt1CcN5k3siUAkgyUjcn1c1VInNFK4AkI3VzUZyj1fpgYqhq RZwkHemba/XNBJcc/TZrcl8D0lUDUrP0AmhAuqkBSS7botbSMkkVoK0/Osd6QEaR3v8Vr6AEtW55 kbFEO4MJwZAe1KpmfpPu04D+6f8mNQrgUQGSEDztWK7dsWyptPE42rLU8pdktGG5IufLG0tGoj5C t5KO9M1VsT5KssVGb5VdsRN0ntTNm3YbN6kWQ1+pF78kI2Xz7dkWk7GJtrCk/tpBkpGu+fZsI+00 dGL4pCbqKMnYhhRGZOBtnORi1FeeJB3pmg/yREzWR+Mmdv98Xfu5WXMR1n6+ufbbUbLes1LQZdb2 SnBsyDnvolVb3Erw8gu9pa+zWPvexpgjHak0+1Hv/nl27d+wYd/kZu0HXPtZyJ02K99uVpb2fWLr o5qut5KM9iov9qp0/hjjtUm4lXSkaj5L+906G0smwarFLwlJ2bw0xqMrKSdb1TzsJR0pm2+VjahK CRV09CDIAulaELrmSyHRELVa/ZKMdC1YIZZKOhpLyNr2l3SkbEEYkrQ2ckqxajvyh6901pwJ3/3j 6dO7X57+56P/5pT/baQmO806RyxiX3nKVXlKs2gTKE+5qTztqAsLfQYvS7PgySwzJtIul2mRhKjP jSJ1R9sd6yJ0xxY6eSJtYrFEfQRtyl3nBnpyQkD1KqDafFkGAdWbAmpH6TTUBuOyyt0l0GEWyd8j o8ZpA2pV5U6lt4y14pVpe3GRfPdIR6sObdX7RIRuq5DReQ1e4o+m+boCUhLDKCYxzHJS37u8IIxB FO9zzmRoxhr0PrWS3EhSCmGtuFUSevIp0d5uY9ZWyAV5fjnd9tRtE6u1NyNXcrgjrHbck60HwrJC VyptkenssNCEao9FMqt0KGlZWbVESyaHzJDhHLzXDvsF+fax1fGspaTGaLJ1N6MaYrgnqXY82I6k nJRUTWSKJlN5z9YblGamY5hrxYzOT2ISyRq0zhQtKHfP+d6LJUhRjdFQ24Yh0QUWwz1RtePRL/TP X9o2jEmuLW3ANWXSGDJC9E4lmCW30Lb5WjGjYy74RJZ89a7AmpqIiao1BdETKagxUGbbCBV6SmK4 J6ggBaU9waVtI1xkBJpCu4JjHz2CnIKUExx6gldcEI9Kv9SSxRMD7FPz0bJuuEjKaQyp2DaYgVa1 GO7JqR0PYaFNAxuV6pGaVHIHyZuJ+jJHfkpcFC2mKERO/leMpHkm+qL9+42dj6tMh8ceL9TxeuPz FiBbgOwAsgfIASBHgJxaiJy2MQ5gWwcc7Tkx3Ju2djymhVbHpU1iSdJmSZtmJlOc3Bh9MyK/JSwK bJkts7yoztKZQmY27Z36Lmpj58MB0wHKxyv1OHEasgXIDiB7gBwAcgTIqYXIiRudWNt6j2hniuHe xGWpb1rWS9t6n7TveUOzxgcUmYdgQQlmZaGD0mvFzBnyhkOgbTyWFPXE3efLToSIH6/k48xpyBYg O4DsAXIAyBEgpxYiZ270oGzru3Rs3zIzc+148Asdc1ra1vchK4hE7H0h6966BDNX5MxZ2CuLmLlK Xnch4ZPHYQ0cKfOeVDdIf5m4AhOnIVuA7ACyB8gBIEeAnFqInLjRs7OtS9UxxIXH1Zk44Rka8MiW tkpZJ++8tdHlUuDeTDBLdNbreWt52QVfQpDvSqdU9Aa2yvvcu6kY/+OVfpw5DdkCZAeQPUAOADkC 5NRCZJbJ6G464eLBzMlhnDkxnsNCB0KXzgiVI3fFJVt9NeQh6pmTzAyEz9eaGXlj2dMR5UoGlXP3 eZtTtyyPV/rr1AFkC5AdQPYAOQDkCJBTC5FTN3q/TnicOHV2Zura8crerZ46K5SO1rgjq/JsEIJP J5hl2i31OeekK+3J6ck2eI5h6TWzcfPOb/+eS0qqyaUSHidKys1Iqh0vtbPIW4eVzh1yLUpyMfEF v44TCGYkKX1MrwUz0shkfE20xfDJAIt83vvt3+xJSY3OrxPeK0rKz0hK+atVb+RO+qvWekOb+TlQ oJfMSjCrBm4U1oIZLWAfPK+o6F3VZuvG3eP8du4ypaBG59cJjxMFFWYEJcgrOKxL1zqsiawLOlyM o2OKptFpQbXMilnou9G1YEazYkMh5yAWjmprI9Pd5/3C7a0U1Oj9utblRGtcDPcE1Y4X0l3YpaL4 bXwdUSxZYDZFiNFJZhmio2vBjFztyAcL2/choKDu8X9799VSUqPD6VonD61fMdyTlCCPCwuSSuLH uWQMWZw18I8E3RPMCgQKFK9Y6ExIhS+zqw5ibdw9/ubsBb0bHTwnPDgUVDuMF9avxXjFSO3SZbGk Ct/Q50LTSGse0mPFt9iCWYtOXlYakpSNZAMlawOcfPd4eJ0rdSmp0aFy4jIIJVVmJFXUj4PtXDpU 2dDJV3NxHM+MWlKCmfNgmDt5yeVpdyEROXJkdbxv4+7xp3o5BFJQowPjWqehY0vVGUEJ/yc6Ui4t qdbrIOWmUyZU0pZM06ijPYpbb0213Oh04Biy919vqWBNzfsw/bwJmS08ugy+NdPRmhLDHVmJcZrf hb5TW/rWzLccFCnWp+iCddpaWklu2S30Pr0W3FhWHPLlZBmyifSe7uedhm6uiBTVaKL71ixGc0oM 90QlL7DYBteiskJnjCOB8tdl0h6tgJJb8gsdJBfMaNXRfxzZntbxxqcldc8FVSc9RkpqNNF9axaj PSWGe5ISF1iuYuqVb81qOh2dp7OGk2lC0pdKK8ktVwjergW3sjgnT5RMyypmHere+HuuqDopQVJU Tbp+axejRSWGe6ISF1g5oePnhV1NhjctpkxTGThapkUluLGBpk0Fyc2zKWtTSoH+q5O/N/4eK72X BiVlNZrpXpjGKKswI6ugVAYiU741revCOVKWSMZi8Rau0yU3diT1ESi42bigE8xGtmdpcwdZ3WWo z6R++dFQ9+IeCkUlrqE6ohLkjvYqLakoVIYLAUsqlTPfdaB2JZmFonOJ14JZXHgureBEqxrh8mTj 7zHUO7laUlCjne6FIY6CSjOCSuq3aUtp6ZOQVAnF0BFI/l8kn0ZLSnCLeaGTeNZemurkzpD3xuvK FW35bvxdpnonP03KajTVvbDFUVZ5RlbCuianRud+Lb2w1fnCkeRUaNXnCJcxiptd6K16LbiRNgdP JijteoFjClpW87b6RE6eFNZorXtx5YDCKjPCKmp70QHWpRe5X4FWVuB7ppCS09niK8mNzkDIPRDc Mh0jdEiE4KoNOot24+/LJMM0RCmq0V73rYncMazqjKiEhe34UNKiqmKDCS5mx7Y6nT26QmAluZHg dTB5LbiRqFKoIVfywIu+Vff3WOudxEtZzDQa66G1j9GuEsMdQYlxy1kaWlDByO2F034KucyleqPT NCS3Sj9EGwtBGuuW3ORIy5P8ErjP3IS7jHVMNpWiGo31IGLYKCo7IyppXtO+re2qYMWPy+TYkpjI IbE6g3YlmRWz0Kni6yCNdWdrMDmbYmiv0Ysq3GOs9/JrpahGaz2IiDiKys2IStjXKUPEchmcUJjs K/l2hZ0Jr4vbVpJbzmhWBWmt0wFGO7JlQeWqj8BwV0JZJ6dYymo018NXm3Ys/v4rQF4DZHmB2LEk egVIa4Ek/35Tz/jVThSV5LAyLzhNyfoF1P61MPnXRisyRPxrenUgii5c76BAKeUFxd+oXe+w0dGB HhttQF5wbtWvX//StYD9Agk3xP4YhjSk6Rr2DoquB+ugQBV7DwcKHTs4uo69h6ML2Xs4UK7YwdGl 7B2xT0WnwmidB2EQ49Z0u4BLDHMNI2iKLOHKPhaTInm0xQZdc7SS3DppW5pbMMYyr8jJBHoVTtjm X0vaQ/pmU+LXbYr2afrTr+jHtGUQhbP5CpnGai7ehLbAq1Pd+3X4nPj587/C+K2mzEQpC1bIRDBk gEIgfKtJC5HK+jDyY2j3zrpSYqcpK1GKCrFER2W0/A+9/iVlNK9eRyMpTTJ8maOrvTSlJUpRk0nT GkyohQ5oXe+uaR3RivIVMs45z6XqwO5JU3qiFOVimW37GvzURUEY/bQgKq5Qa26XfknqAhndy6Du QMjsoVUeSHnop2mlEczyQpcJrQUzsoyqi3yXQo4DxEjCDR/NNSUHE8vwTWjrv3qV71lOQaApEJV3 3tAPrEVbb281IXdwEHWuiRzOamjFQPG7oiR1jLLSNeQSc3b6Tm+nKUkdoyguJ+8tFL6fAs1QlKSN sdVG51wM0UZ963HQhKSMsVVGLrsLPsClxVERJtLFZIRgiZC2SV0KpulIE5MoImOrjVy5aCbirGF0 x4O4HUOduF3RJYZdhGW8DEUsY9qTMoewSDey04JcSW5pAd6AZJZpsyFbmbNJfQpg4t7wxt0YZZ3Y Yd9cyCcr4i/j1zmgHS21O5rNhv7r4Xr+rSakDS2Jzg7O20qur8taJxQhqWFq1dDUlII7/1PrhKIk PUyihNPSnJA+6UjZXhNyL5UkVYJkTx5e0SqhCEkLUxbVkbQt+uC0o33UhKSESSgh15HbCv7RSROS EqYqdMmet6g0dUyMYZcg4iqoErdr+MQwmUP63i/IwjvSUkcOVjHVe6eToVeSWcKMM82tGq7g85Z+ LES7NuFG2GVUiSnT4c2FfLJG/jI+TEGm7SyL7czxHadLOnD0VhPSfpalZeE9F8bQzwK3QJGSGmbR 8MGEFGKiydeXOjtNSoqYvSSt3C4gQMbsXpOSKuZWFb11Jlv6YvAsFCFpYhaaGCtphdXmwlHTkSJm 0WmFxEr7jUO1UITc10gch4HsieSznXI64hhli21gC8ORYrjTN8VIvQD3PKqizVA4TmoK7TBRb4Yr yS0udGb7WnAjY4yvrHwxXDgABlS8EWNr9aJvGL+5kE/Wz1/Gr3NAe1ouyvjNZL9WfanzVlPSppZV qyhObqtcCaUUQ5EWUsYiW69wpSH3E9ATsdOkpI5FqqMlm82F0OmiokhJHYs4FVPhwoFUtA2lCUkZ izDzyW4tLvEsKtXQlKSLRRyLNnMCboFcnZOmJGUswjyN0RTyfKMW7g8DZXwpiurJPSWmTVl9qXTg kJ3jJuywOMZlYxsLxRC2GO4ol0iDLlhaH2VmMu0wwZNHEXK1uuZtBcz0oSOYcUF0IBEl53Mkxx4a E90IyzbeyaTv+HBh4MeoE0AeL5Cm0A4gW4DsALIHyAEgR4CcWoic3zGYHEVGNM6vuz2/Ink7YDZf dGJKsiXzimxjUyP9V8eSJbcICcxrxY0vG8lU48v+YiD1Kt6IJTe754SD/xAdTK+GPEYH06shW4Ds ALIHyAEgR4CcWoic3jH+HdsMEbwrEMOd6RUZ536hZ2wZZVfIFEtw3MOO9A4TgCW3uCj6TlNzK+QB OetzqhEaam3ijWyVcXo7UZjL9HqYXg15vEDa6dWQLUB2ANkD5ACQI0BOLURO73i9EEVSC07vTBW4 GPcV87ujrAI3nL9H1gp3FtDmxkowC2RI6fxuwcwuznpHq8TXWqD2K97Ir7nO7lSA5+FC3U6uhjxe IO3kasgWIDuA7AFyAMgRIKcWIie36QYosvNxcmdK18V4yJi9EVXyPqdGuxoiGwZ6bkXpuoHizrXg ZRchZDKJyOznrg86dyPeSAlqNuaJGNxDjDC5GvIYocAdIFuA7ACyB8gBIEeAnFqInNzxpiS2txOd Xo8zBe5iPFmsk45JTG4llQ3GOw5tQBqTZBbwCjeqggPPTb/ITjs3FNazeyOLqY1v9eOkDxfydnY1 5PECaWdXQ7YA2QFkD5ADQI4AObUQObtjRD+K1Cqc3ZkqeDFOs6tjNVHWSJDHk2kvdRxYRaNK8IrY Rkgw8wsfi3e0EfjictINX+J8SP9GKPvhQt5OroY8XiDt5GrIFiA7gOwBcgDIESCnFiIndwxNxzYc 3Ik3zBTKi3GubYdDV9Z1+MhlGC54cte0/7SS31IwV1ows3QI1ERHbvK008Pk3hOZnrpteLhQt3Or IY8XSDu3GrIFyA4ge4AcAHIEyKmFyLkdY6xR1K/j3NaZuRXkeE4uYxsX9YtYDZ22tdZoE2QsC2YZ re91lGlyxdAen21yZE7phgmbeE+MdepG6OFC3U6uhjxeIO3kasgWIDuA7AFyAMgRIKcWInvLjoHC JErcsbusuT25YjwabIOXZGyv8I1AKny5WfR8rCSzTFquJlcw427m2XLWFJnLUXcj36R7AoUTt3YP F+JmbgHyeIE0cwuQLUB2ANkD5ACQI0BOLUTO7RinSm1wCB1dMdybW1ErRPuk9nSTFdNRSqkcHTW0 E+pCppVkFhdandZJRr3o2I6JO3GHBNmDaT5M1b9YvUwuBKkA8pggSAWQLUB2ANkD5ACQI0BOaSpI lcYgVRJJhji5My0ExHjmCx89ubI8qSbPaUX1nNVg9eSK7Etyy/SuLJidWwhYrgkLMSfoypjuiVFN Xdk+JAhRAeQxQYgKIFuA7ACyB8gBIEeAnNJUiCqNIaokwkI4uTNdD8Q419/rIze1USW/oBnlXBUy TwNuyqrpAUytZEVGUHA1V263CfGpdE98aupS/SFBeAogjwnCUwDZAmQHkD1ADgA5AuSUpsJTaQxP JRFfwqmd6dMgxkvE24MkWytkcklz5MRggy96CGYV+1OtBTNuP5Arp9HHWB00SUn3hKcmEx8eEsSn APKYID4FkC1AdgDZA+QAkCNATmkqPpXG+FQSASac3ZnmEmK8BKxETjI+xY2igk3VBeOgElIwq8RM 560JZn7hIjfK5ZsIsru1rZzuCVBNJac8JIhPAeQxQXwKIFuA7ACyB8gBIEeAnNJUfCqN8akkOiji 5M70wxDj2UJh3DLJ+BS5HTkZf+4lBY6QYFYyVpkLZnFB5rYjR7dUPnnBVr4nPjWVQPSQIDwFkMcE 4SmAbAGyA8geIAeAHAFySlPhqTSGp5KICeHk5pnJbcdLwkZDSfZVDJYUxflc6djVvssqyVhYXuha v7XgRuPZJZ9I/XzBCq50T4BqKsvrIUF8CiCPCeJTANkCZAeQPUAOADkC5JSm4lNpjE+lNibUcXPL zOwWObtQyJhkfIomlWbX0uQ6aDu+SkXNri75WQtudeHOTeNdNrQ/47F7V4RqIhXvIUGECiCPCSJU ANkCZAeQPUAOADkC5JSmIlRpjFClNirUcXRnuj1K8oSvpKUqZteT4xEKZ8bEoBOUVoJZzQutjmvB jNsP0MzQeRtthBydTbonQtVJl7xMLkSoAPKYIEIFkC1AdgDZA+QAkCNATmkqQpXHCFUWISh8A2am u4skN2WhTZtlbqNKfkEHXOW3LLLFp7tWkhu/gqfjGFkFvGidVGst37frKoRNvitGNZGK+ZAhSAWQ xwxBKoBsAbIDyB4gB4AcAXLKU0GqPAapsshgwumd6Ugjxq1PcC+UZY0r9y7g9sgm0f4MsyuZ0ddo q0pw8/zIFRcEF59d1U/CbfJ92VRT+bIPGeJUAHnMEKcCyBYgO4DsAXIAyBEgpzwVp8pjnCqLRjk4 vzN9dMQ4l7Lrp4SWWdbS0sZsyS06lw5r3JXiZvARM8HN1gUd5LlwO0jv9a37Js9Hqm5lNT9kiFUB 5DFDrAogW4DsALIHyAEgR4Cc8lSsKo+xqtwGiNDlFcO9CZb9ekindJg5txEm0mB/brEbcglBV/it JLccYLmsBTeaYH6eIqcYadXgU13z8apbuecPGSJWAHnMELECyBYgO4DsAXIAyBEgpzwVscpjxCqL dzFwgmdaFolxSwYPdKvNMsoU+Nk/R86RswY6YUluoWKZheBmI1+928h97RI807HJ98SspioEHjKE rADymCFkBZAtQHYA2QPkAJAjQE55KmSVx5BVbsNE6PiK4d70ys5IYaG3yWWWrZEcb8/Rp2hshWsi yS1lsNbWghtNL3dWNbHaECs0Ost3Ba36dRwPGWJWAHnMELMCyBYgO4DsAXIAyBEgpzwVs8pjzCqL oBPObpqZXZFzlSrcyS6zePaTa0X4oY7CGTM63CyZldI5fZOcXFe4IYml47zoO6VNvidoNVVs85Ah aAWQxwxBK4BsAbIDyB4gB4AcAXLKU0GrPAatsog64ezONJ4V4zYbeA1kmbOcEO7elnOq2Rd9HbxS 3PJC13muBTdHW7OrtfDzULZAM518V1pVpyTqMr8QtgLIY4awFUC2ANkBZA+QA0COADnlqbBVHsNW WYSKcH5nGnBJ8ujgqaYsnwyhU646l22ufNGrp1cwSw7ex1oLbmkRi+XeVCF6bkWpp/eukt+paquH DHErgDxmiFsBZAuQHUD2ADkA5AiQU56KW+UxbpVFYAqnd6ZpmBg/dwUF9ZVteS15mTYnV63XWREr xcxDRbfglcmK4xin98WS5wuzOx+3ulUR95AhcgWQxwyRK4BsAbIDyB4gB4AcAXLKU5GrMkauighN wfSK4c70inHHDSz12VtErMmSsRRT9paL5KFgX3Ej11dbVpJbPHMr3Gy+GO26bsp85OpW3eJDgdgV QB4LxK4AsgXIDiB7gBwAcgTIqUzFrsoYuyqiAxtO8EyDNjFOFigkmS9LG246+6qRn9IL1mPaq+JG xpP2jAQ3bmNN7naqxXGxLLy0e1/waqq69KFA8AogjwWCVwDZAmQHkD1ADgA5AuRUpoJXZQxelTZe hK6vGO5NsAg3xYBdHUsbbgoLsnLJ1yRnptLGChMsg1cWOxsLbnz1kM5uUU2+6Hu9TbkrzWqiBvih QOgKII8FQlcA2QJkB5A9QA4AOQLkVKZCV2UMXRXxOgxOr5+ZXq8mBHpRFi+m1wbryCPhXtEGKk4k t8q90/X0itBVIe+I38vgRMkCJSflrlLAqUrthwKRK4A8FohcAWQLkB1A9gA5AOQIkFOZilyVMXJV 2mAROr9iuDe/ItZUC74yXGQtIDecJfuKnzuFZveCmTMWe7IKZnVBehvIds7cuVRfLZS7cq2mqukf CgSuAPJYIHAFkC1AdgDZA+QAkCNATmUqcFXGwFURyVI4uzP9wcW4rRXboxaVH5VtMRzZqNHDzYLg 5mznrTjBjYw1x6+hhpSysbojxqbcVQ441fPgoUDoCiCPBUJXANkCZAeQPUAOADkC5FSmQldlDF2V Szu5K9VfL5CmTylAlgNV06cUkNaI9FAgIASQxwIBIYBsAbIDyB4gB4AcAXIqUwGhMgaEyqXdWNui smjFyCBFDVkOfFopaqQ1Ij1c//4oxa+QcOOLHssQCpluO9pB0f2FOijQdrSHoztp9XB0c6Aejm47 2sPRbUd7OLrtaBkCV/NtR8sYOioFV4JeCIii+952UHSMYUC51fe2w0bfrPfY6FynUkASuhdcaXvB YX+f4a/wLsN9ZOqr16XKZoWGju8QdLLsW0VZzavXVTbpCRwTPb9CpxemIrVEqrpxkiXGT7/DQ707 TeuIVjbNKs56OkQgorPXpJ5IZfc6Q6YfGY9WL25FGIhQtOkhQvqT1WnD4qgpI1GKNj3BB36Ny+iz 9qQpE1GKLpKW/CdvuRBPq8eFMuO+OEbayu33gMVwx1SQ71/hAxlFPuHLyX+ZH6/KpUIKkWTW6RMn mJEhwV2J+L17fm4KGgeUiUjb1ya8pX6zsee3yd6z2vwrC/5NaVvIdVqNXsavM5Zpxtp2ZdZ47mru daO8t5qwEGERS9rxi5fndy+1JilS+jVV/BrShVKK0S9z7hShNaS+9A/ZKcvnFBN3adGKpIktE7dd PD3HuSqnnmhV0qSOSUWbrcCXW6HqY+gIpJ5JZdc78iY9/V/Wt3InIA5MHOSmY8l5rIlMWlCpOqVS dYxu1tsPNYthVCkxbPNCq8myyhZzORhfAi0LTtfQO9ZKcksLnZW51tzI/eZrSsPVClrym3ojuOnH 2NfUfv+mtk3mOv1IL+Pj5ESenCiaEtoSTLU6YeEtkCYmTWpzjuRRRB0d2gJtZlrZ/9pE7oHsc9Y5 6TugLkxdhMLzM65RFxHtgbIyZau2kQs1iVLvqwdNalltbduoktsAVJe81vgjkLLSWis3qELuetHB rROQstJa0QObHOvMuft6of0w0HZUZ4wb19sPZYvhjurIdz0WusxuWWXPt1T5pV5veIMz8PwzcNPH keLG7yzFSLYDhyr1tfqm3ggbN6ozae+8uTCYbFx6GR/nhndF25o1dEwGfnVS72pvgZT3RCsMG1PD 13aq2uDfAjHrrBW2jaE/HPjZPF25uANi1lqbhOZF+mJ7/qdWH03Mamvbk5YfQM/cXki39gVS1lnb 6ixtp2xUgPF4BFJWWivOWu9rLilBCvxJ0zrWWmfkJnXuQZZ0b44fBtqO/oxh+Xr7+XQx3NEf+TwL pCksq2ypVyNfgdG0luKj7hi1ktwiVtkpboU2jcxV8rVWfEOv3ojKN/ozZfO/udBP9je9jI9Tw7ui a3dFflmxVlf0PvAWSHlXdLJjKL947oJumbYFUlZapxr4Gk7KzlDGuANiVlsnmtrbc7PXqmOueyBl pXVRnjyeHzDXx8cBSFllnThoPdmZZN9DXuARaFljnexsT7tnCkU/n3oCUtZYp6xjvrQLsEX9MNCq TqelfENs/6059ujPJuunHqus4/1Iba8k8PpLDHf0zEvN0Nleyyp7G3JvEG9cDDaTu6OTxyS3zisM mlukDcqRFRUKnX2gZzeuR/z19gsdZCmp8aahttF9vEkSwx1JyVc9sey3BvnbSuISlVDZjoW3KiW3 DA1I14KbXThyl3xlZ41saxDUjZuGq6AmAwKP12+5RkwBsgXIDiB7gBwAcgTIqYXImRtvEWobuMc7 IjHcmbko1zjcIdQoZo4MVRJypPkrZJDpHA3JrefGKG6VC9HIVaClYOGNw3rjEmGcuqmIzOP1Y8ap 05AtQHYA2QPkAJAjQE4tRE7deEFQRQ00Tt3tl5XEMAlbN+9cVvkWUqIdhetK6Njltzz11CluOuqx VtxyjpZrdfkQiDrisKk3clvHqZsKiT1eP2acOg3ZAmQHkD1ADgA5AuTUQuTUjfcUVeSK4tTNNAMU 45xICiacfN+HjNToHFnN52fp9dSp93303K4VM0cuEJeR2egCdAOsN9JWx4NlIjT2eP2UceI0ZAuQ HUD2ADkA5AiQUwuREzdeK1RRKY0TN9PoT4x7kqWeN5lC6msMObiUbcV8GMmLfBnYLWWfv5gqP1/N 73wXyHeqN/JRG8N7KjL5eP2YceY0ZAuQHUD2ADkA5AiQUwuRMzeGwGsbd+4EHWba+EnyAGHrZZUx cHIMK+1PZGqy56SnTjHTIZi1YEbLzGXHr2HHarEBZ72RbNqYKBAZFoKyZoxs8r/f8i/leEdWEsG7 hY6TLAeMaw/KWOggdsbQrgIGHbDTyfJrzY77WdIq9dnZpH2MzYA8t9Y78XAlMtuITPR364hsptmc RHAJtHk5YAxrwpLnVjxtxNZV6PAq2fmEtQia3fm5keS5TSuUiQ24t5fY1CXA40De5A0gaIugHYL2 CDog6IigkwCpeXTNPLbhDHRk5Hh3HkXjuYrtPgeMsRlcyJmLhkItOhFmJdnRTqFjC2vNjvYb5xw3 ziGG2iQekGeO54krmceRvJlIDdoiaIegPYIOCDoi6CRAaiJ9M5Gtv4x+jRzvTqQo3CV9030TBoxh 0+F+RSbbRHaN0xdSK8WOTmOYR8ktch4sx5LIXdLNwjYD8uxxPXE/9jgyaGZSg7YI2iFoj6ADgo4C pKYtNNMm+rt1pm3m+QKJ4PHJgeWAcT16SFs465i2LqfP4RWy00mpmh2HovmYLaZiA8ABefZ+YOpq 8nHk0EycBm0RtEPQHkEHBB0RdBIgNZexmUvhznfmcqYbnETwndL4AWM8xGIh5aMziFN7YS5FRqRf aMtgrdmda+Ij2RAhZchBHZBnDsWJm8zHkbyZSA3aImiHoD2CDgg6IugkQGoiUzORorNbZyJnOr9J BJY87qWi8nVRLRfNxVj47g6NG8EuYCmPZEd7N1fgcReZSvszKuVd0Yape+XHkb6ZSQ3aImiHoD2C Dgg6IugkQGomczOToiK2M5Mzbd4kQuTtDmZSPkRguTWMj+TxF6cTdVfADmp2NLtYI3mwic7ZAvcs mwF5dnvt3PIrmZVGZqLKtCOzmeZpEoGbhOv0qQFjKFyJ3nPNduTAZsBtTLCLELhbS3ZlkfiJD0MT QetXF61uBuS5iI3ObVDyqo28Wue25wrNtCOTCL7gC2IDxrAoXMohkIPs+Fk2fUGpvqfqDklrzS1V fh/OhOLJKEdx3eNtdxI6pLxs423b1rvtuBxivCcvgRAc9l4cMK7HpCUNot/IPfrAUBXcosPnIzQ3 n6shx9GXklPSuUQD8m15dbJYlLwaV9u2rm3HshfjXXmJusQKQbgBYYjC0SpIkVMQk4GqQ8ks4nN3 a8mN/lr6euUQDf0HziJ7j6fdydxR4mo8Wiuak3fENdMpXSKQuKDByYBxVUdPVg+dlrX6BA1sJDva 8mHHV9xS9TYYWmElOJ19sBmQZ87uTrqSEljjOVrhGXYENtPRSSJEvp8Hgcm6OBeCcfxcTzDwOPhK sksOWzpJdnFBVk4MvOWT+4hmq73n6reTRKQE1vhsVpR2dQQ20yFJIqQIPewGhKESiburF7LmaMfQ NeErxSwtHHhsghs/XUVnID/eEH2FhJQBeWaB9RKnlMAax8gKv6YjsJmeQxIhhwWY01Y7Mv58QFZD ZgVuYYJbhPW61uwyL9aQzDnSBEaYvevetZctpiTWeCBWWPwdic308ZEIvb7xA8a1/J+cyBoKN52F XhGKm+l4koIb9xbnfIXM73EFfQG3GZDnzNZOipySWGPpW2FZdyQ20xtHMfBwLbgcMK5PH/iveUiF H4gHn02wK7SLQSDTymvGWrOhg5LVKmjHfzMgz5hhmBioBNaY+bY1q3tmWJkTmGAQMK9uwBgElsiD ISOMVpkFw2kl2ZWEnVY1O8+tYhw3SXZZew2bAXkmWoHpkEpgjZ1vxVtUHYHVOYFVue/AMx0DxrV+ 3NZQaXGRF561yq0UuwKu6Vqyi/xEDsmLz7madXLWZkCesywwCVRKzDWWvmtN644pJsZ7EhMIuUIH hOWAMfxEX+35MZFqStAJMiv1PZ0nPCU7WtLnJ5qTrZkMPJCYu8fU76W+Kok1tr4T12Ydic20GJEI iXxJ2PedbGkbOVUisTlWO0op2BWaQtj4FbtMu37mBm785gfsYu4ea7+TkaoE1lj7TljzHYHNtOyQ CMUv9E6yHDCuAouhOvpGOt2MvphdSXY141OTml023DTem5qd0XfsmwF5xj3CPFwlsMbad8Ka7whs pgmGRCCtwC42A8rwE/nleU5+4vwlePtA8qu9bUyxi8ypZBIalweBxO67KeqkHyuZNQa/E40jOjKb aSwhESo+QLocMIbfyE+H0lZrS01G34yvJDvyPKHF6lrzc55WrQ3soRa8pXH32PydrGslscbid+Kx 5I7EZpo1SATyasAYc62JXhe063vavwr3GYVmDZKbNQEbfWt+kfxG+r38zKfXAcfNgDwbFNO55kpg jcHvxPvDHYGlOYG1CNVDu5HlgJGHwEdONKVcZ+qhN43ilnvykjcOhddXNi4mzncFed1149BJsFcC a+x919rXHWtMjHcF1iLUquMyywHhaozFxPUgKfNWC164kxmMER+zlPzOKu4tv/ZTDLzTsRmQZySG ZQVKYI2974R93RHYTHNJicDvmGCGgJNx/VxIIWMN5L1AsdJK8wsLfVO1lvz49js5m3kTw0qaAXc2 RQCqKZTIGovffTWJxxYYf0XQawQtB1DbTgPR1hJNfoZvzGh/qTFsWztUPX0XpPbDALS8smo/DNDW HbSH8SsG0JsBFG582OOAdKvZRw9Hd/vo4UC7jy6S7vfRRdINP7pIuuNHF0mX+HSRdM+PAemeph/W Nw6Dt7g2YGkgju770cOBDXHAudX5o8cIdsIeI9Bnb0EiuvnHgDPV/WMYP+8J39O3cQmbl+00uKka d2XSdv9bIOYiNi+K2Oy5Wogc9ACLVdFyDZsXpadkwpIt5eHZyx3QchGbF5Wn5MdHz23ldAEc0HIV m5eFp557ZDujG4YegJar2LwsF8/cQpJ8a33CH4GY69i8rGMz3MCKTlB+ohJ0RJFz9akX1aeGvBw6 gF3ULTF+GIlxF208RX/7AV053jn+JD2dfuAoelVHSi4sHYD8nl9BC0uy65nwil0iW8FZPr74thz8 Hj/hKX5tDELD32zs+f2W97xh/4vK8GZgP9kdRPx94h64BjiIyn0uWuIVoAtNgZRrVIMV5cMpBY5P dBRN0fKPCrJ0n18xDcHqCsMd0LKCh7a03NTIj/bROa17HAAtK3iQRao0T2yaVdAzRcr6HaJoVJBJ tz08hnEEUlbvIIpUK/lAMfusy5JPQMvqHUSRqq3BBGd0J7sfRlJUsCay4G8/YizHewqmXjnWJt5y wBg0wpJHy1f7lV8Agr47kp/txa4Uv0q/vdLi54rtrB/p2wzYXQMzXA3MqTPhzUA/2SZE/AGeId5D Q1u978hX4+1Emw9vgZT3z1CFbtscadcnL8aDDkniyKobRfk+OSqRFiXo7g5oWXejbHZFvyHTth90 nGgPxKy8UVSY82lDv1hfuh2AlHU3Ct01fP/t+HkK3WkHiFl5o1Be2m04lKADoicgZeWN4nDmd0kK /wPPqcmMYN8Em/ztB6PleE+Nglz20EV8wBirSgsdKDG7aLi1M6iR4qfnYq350TrJwfAdgzdBX4xt BuxbanTDPHoz0E92DBF/gKeIN8nYbpLBc6pTgJrzt0DKe2QUe2SOnhvqex2l3AIta29stdcEogzR RZ2+uQNaVt9YxZFA2zIpgs4X3GvSxMqbWuU9P59VIuSSHICUdTeJc5d0lnYNfU1yBEpW3CRO3UR6 l8jS1LG4E9Cy5ibRpy5wdXIs+vj7YSRFBWpij/72m9xyvKdAIliITy0vB4yxuxQXeNYSKhnIGHyU /EonwUzxK9mSzD0/mp57lt6N4OOoQFM+wpuBfrJniPgDPEO8PaZ2eyQjPOcY4frjLZDy9phiexyQ MRH4rSDtf2yBlvU2CeOGq4Y4LVmHy3ZAy4qbRHc62gJM5RcsQIEUKettEj1zyOthWerQxgFIWW2T 7E9XUnC+BOj2pmkz622WDep4EXAFeiekoIhZc7PQXP/1BiHr7JcfBlrdNoS8qG+Y8b814uaONcSp Tt2R+CaA7W8/li7He1qXpNbpD18OGFdrrZzf0I2ukL0Mb08BPyxkUfyIFbfjd6laTOPbDNgz1l/H u1Yia0LY/vYT5HK8JzKRvM5FpSCyLH6iJ0kF0ls6nvmZSxCZSobX8d215GcXpMrJGu6KR2Ya2ss3 QtiNxDoxBSWyJojtb7/rLcd7IityL9YPlSwHjKtxFKOnw8jw++1GY6+QH3rxkl8s5/fNuH9KLNo3 3AzYczLrhlKU1Jo4tr/9XrYc70mtKt2EwL+XPUyjoR/J+daF64HgskTz06bJGvjRImHXpUTPxw5I 7Ubqyngi9iJIUmahCbqH289Qq/GO0ASCy5CXuRwwrn0mkkncJJ59WSxwFuy87xTGKnbR1ljITjWu QrBvMyDfFlknZKME1kSiw+0mh3K8KzDBIEJLleWAMW4/lfb+ELkKDrpFKHbwUPRac3PkVseUuYOU 08GEzYA8s8Q6cSolsCYgGW53tZPjXYE5+QuxXDA4KbBzhMfEkE3RCWArxQ7t3jWw4wxbdoUC25kg sRupK6PEOtE5JbEmwhRu9yeT412JeSkxPDGDrEoOgZaEMaGEBClzK8mOLGnM8VTsIifeGU445N6C ILH5AFM/Jqkk1gQTwu0+ZXK8KzGVy45mWVD1wDFzm6qSaIVpDV4pdgG7j2p2yXIRYoj8Fgc8yD0g 35ZYJxKrBNY4j+F2ezA53hVYlEsM3ggaMK5LjKwxMtVdCtVh8ZtgR0tMl3utNbscSJ1yiryZwSOb A/KMwDD+rATW2P3hdlMuOd4VWFK7GBgXIaltJ5DtRCrkXIRn7xS72rlXUexCItvOR06A1EHzzYA7 p5IYdFcCa6z+cLsVlhzv1ScJBBIYJqoH1cCKeywG2qSrifomY6XYZaxPUtwy7YfkDZMhZV3EXX/e 6O/eNCh5NSZ/uN2BSo335CUSW1hDQF6tje4W/EC8i5zkTO47hHMEu2jx2S7NznDvTXduAYYb2Ly9 3w37K3E1tn643fZJjnfFpcpHsTFPkJ2fyHfzgR+fSgF6A68UuwKN39eaHbe5NZ5MKGwKuhlw5/yj zl2HlFhsLP040/1JjPckJhBihIdylwPG8BOLSTXyNZOPSQeDV4pdL4VYsHPnuJivmVMVLSZ3xnss /d4Nj5JYY+rHmeZPYrwrMZGlbjpV9bE1ztlPJ4vVJi4/sHiXLr+H9nw4JBU7NoBNIN+UpkGXrWwG 5NlFhvdaSmSNsR9n+iyJ8a7IhLeAPSCWA8bYQy3GUEheXPsMhphgF13nmFTsOFHRG/Ims+0kxMZ7 jP3ObZ4SWGPrx5l+RtHPCcwrNQJ5SducjEw6lshZ1iq0UqxKJxtW8OLeSY6fsU6dgPNmwJ2LVnSu L5W0Gjs/zrQREuNdabUIMS0cGBWxNczJTEhkT3CBOHlGOuq1kuxSgBqBtWRHx4I5hz64vW3A4Gu8 y87HS1slsMbOjzO9esR4rzRJIMSARfVR2uX8vGOivSKaUtGTlNwyVKGsJTvu8BJdyLnUlLK+ctoM yDNLrHNTrQTW2PlxpidOnKtIFQj0E7XrtxwwrhtY5BJ48pht1j7BSnIrrtMURHGj1crlb7S4aCMD 1zveY+d37o2VvBozP850nolz9agCoURIX1kOGNeiZ0P2quc+HhUe4F5JdtXCm1Zrzc5HTngnWzjw 67UgsLvs/M5tuZJYY+jHmb4zca4gNaoKUqyvjLKCNJiarfEuVq7BAokVKTGMuAp25LlyN8izFZY7 PSXjPaZ+L0dASayx9eNM55k4V5EqEEpY6O4JywHj2o6ItmdaYpnLsju7WMuu+kXEXb+KCUi0Y0d+ GCYWOHY3A/JcsAIyI6TAUmPqp5nWM2K8JzDJgKwwWGJJ2ubcUM3Q4uJnW7WnuJLsSsE3giU7rhas JZBS1thr9JruMfU7+SBKYI2ln2Z6z4jxrsBahOo6ZUlJ1aNGjqVUjg44rOCV7FInGUmxS9wBnMts UvLaxt0MyHM6qbNglLwaMz/NNJ8R4115CQZxoZPXlgPGUJZEnkxJ3DeAI5xguQp2tIehuJSVnzPf QtGCjRmekB+QZ8TVSf1RAmvM/DTTfCapEDsKrEUovVZ7SdrmhbZX0h3ucOiwflewq3Ghs/jWmh3p kXXsTRZfdOe+zYA8Z7hCwpMSWGPpp5nmM2K8KzDxSHrBxt4DxmDpBzInY/TBVp/0AbGS7Grp3IEI duRp+uqdr4VfK9d23WZAngmIYf6RElhj6aeZ5jMpzglMuApcOAl3IKk1zulcIQvMh1rT+UVQkJgu Ru1sYoofWcA+cxSXb35AZPPGfj/vSsmsMfbTTPuZNFeNmmTUn/w73Pdlxxg6IMkOM6SZzmlvcaX4 2V5/b8WPm0LxAwAx1gqvqA7Ic+Yr5pspmTUGf5ppQJPmClKTLCHNHWssqQ40KXhn43le9eXYSvFz BoyVteZHZjBZdpV7c6NPme6x+DtpdkpijcGfZjrQpLmKVIHATiAqZmuh18X5FtEEH7025leSmbW+ k8sjuJUFuUeVlpiPXF0P4rrH3O+kFipxNdZ+muk/I8a74qpqQeBRKULx5EEFcpHIgCp8mwgCk+zC Ql/GrSU/fxZ/NYE7CTgseU53ZfF0MiqlyHJj7+eZBjRivCeybLROgj2WZQeaYMk/4qYBoXT6qSh+ AZ7+Wkt+bPHT6iJuueqEvc2AOheo7uSRKpE1Fn8e6jfHmucLqC0tziKZxxqo3V4OKNemkuTm0c4e Qs3oait2YaEjNGvJrnCONGdReENsMZyT77LrOzmySi6NZZ8dysWhXDRoeSVsS64BbS3R1Gc09nL2 l89oanlxWXv8MA1aXlmJD9Noa4mmPqyxS3OAD4NC5A4OFCJ3cMBAHXBuFiJ3GOGi6jACJ/GCdKMQ +WH8Y2Nx/AUUbszU44B0szi+gwPF8R0cLI7vIUFxfA8JiuN7SFAk0kOCTPYeEhTHd2Zgsjg+N6Z/ ngnyi/He7q9e+9Mt6ZYDxtXoJI/SB06M4A6bsCIFO7xZX0t2gYxmbriTjXfcARTW5YTdf6n4zfGb jTt383zP8uUyAa7GyG2xmisxuhCTdvXfDMwnK+vbP/4vsX4LpFznkWWN+uR7EFug5kqPLKvUQyGr v1iv7ecdEHOtR5ZV6rGwZ1kh13sPxFztkdtqD1/p4IncVAf0RZIWLvYossLSuZpShBy3I9ByrUeR FZbkBWSOQWi/6QTEXKhVZM13yHQmxxJ01sIPA3HnbWaar0bLZm6G8kzlR1aVGtjkL6vKj5TYkuSU 8FC0QbZCfqhmil+o5Kc7EiNZbNog2wzYXWMi3vGGyZuBw3TxfPsneJq4Jq60NXGFLCey4rz+urdA ysVaRRRr8YflCjXsWyBlHS7yiXNyLPk+oupc4B0QsxYXqcWWW5zzMzPQpkITsxKXtlyr8HQE9iVB lRQpq3Bpy7XIuYjBF6cjBEcgZQUuskjasEfH7oWO1Z80dWUdrrJgix+SShxeh9LfC3FXlZoYQp65 NMwzFUFinB9NBk2SBUHFl8qvx9SaYyf5VLJL0ExyDfzIvk+O9vzEHf9Qk26EEBpNmtq/3wwMpkvo 27/Ak8SbZW0L42h+IieQ6szvt0DKW2Vta1odLWROQtL5g1sgZfWt8rlzV+q5LkxvVzsgZgWuQRJz mpgjxxKKFzUxq3AdVdjSMWxyTdiEQhOy+lZ1CJPmBsPPhoAiKWJW3yrPYJucY/dMb1gnIGYFrurF c1f5JW4oKvhhIO7qURNZyjNXyXmmTEyMc/EgRC+zLOsqtFxjdueKSafjbCvFD3Oc15pf5SsdDupx PSHejOYbwaVGkaZsmTcDg+ki+vYv8CzxXllru7D4iQgbPLorgtIZ2ifpH0KPaCFz80E8kBSpZVJR 1sqli77Sitbx5B0QOyaWpg4/EOB5c9Lhuj1Qe6b2ze+lP80Pfuhz4QCUgSlFMwl+itQEo1NUjkAa mTSqTz73tMxGp0iegDoxtaiX5roVR7/WTHa7y018Mc9kE+SZKkExbv0io7ckM30td/o1qVSuEsTD R7CrC+0WriU7DkG5xEnb1ge8a98M2Ld0ZtqEfzOQT1fNt/x5OjJPR25WkA2JE030I5VvgbIwpez7 ck4mDDqXcAuklUlV35fiyAjjMhrQGElsWVOtKkE/998PupBnD7Ssqta2+kImQKFjoIC+KErWUyvO WVMS9zzXmeJHIGUlteqc9WQ3nGOmoC6KmPXUBiWqXLjzdIJj59KoUdfMk4/NjMeaeccp3Ybv/SYU rjTR6TKTjSLGOwonxulUwYdqilEKx+9hGE5mQH2T3HInmq+4mUw+D99+kNGHnavLjdh0HEOw6PYq eTWh6TKTjCLGe/KyUl7aUVsOGGNnHOf50pufJU/YGUfz0zJda37cH5cOMO4oT/42BHTKjah1ax6j t69k1oSty0xCihjvyUy1qdO6sRwwrjJjg9GSxUpntMPEYM0PnXPFL7PVbcitzqWTX1FuZKS0IsMY hxJZE2IvMykpZa7KVCA4u9A20nLAGEuqEl+PJDJOMt4ZCXa+drLPi8pwsXyF67lfYNF/ezMg31bM TrxBCawJ/ZeZlBQx3hWYqAp1sPUsB4xrGmIgO4mrvl2NmBss2RWo8l1LdnbBpw2ZdznTYsMarXIj JeUqsE6URQmsiUuXmZSUEucEpnJWsI1FkeniZG/TWZwT3wTim26aHeQJKG5shZOdRVtYydj3o9zI Rxl3/l5oSUmsiTGWmYSUkuYkJhiQVsM9blFPqJbEecEx+Ky9v5XiZjpvbilupmTus25p567Y9aPc F2HsxNOUxJpQUplJRyl5TmKiDhXfRVwOGGO+fooxpa/PGKHIRPqLhyjvWrLjTZFsuUoOrK1Jhx83 A/LMLoZRRCWwJmZQZrJRxHhXYCI/PXQeeSiqzpTsC/LQYqlcsw0CU9kv2MBIscvcrImzqcnh12Xi mwH5tsA6sVMlsMZfLDP5KGK8KzCVsILvnhZVaerPCTPkDeWEucGaHTqMgh2peLTZl2q5VQ2+rVvm /cWpiLGUWW1M/jqTkFLNjMyqyljRSfjLAeOqlYZtC7IHaLPGqhDBjmwL7WGuNTtHPnb2tGPFop3C zYA7u49hmFxJrDH668yLSGK8V9kmEMi40NG05YBxNS64OYdN/I1YnCu4Jb/QgYK15MYv4YVCR0ng 4JF2/TcD8m2t7MSslbwag7/OPIhU5wpNBULs1YRU+YKRyYnL2oyNeOUtmKWy0K9ArDUzbsbAXX09 l9HAQVnnzf1unF6JqzH268xzSHWuzFQgZNNxKqt8viikyu0TIv1GrKAR3Ehe2hpda27cr8i5wl5X xavLOm/rT1xOKIk11n6deQxJjHclJhLQbed58Nqa53ztZEzx5+J2oztOrCS7VDtFR4odWWExuug5 KIvuUZ239ieuZJTIGnu/zryGJMa7IhMIFXad5YDRJKKQfU17P+2z+EK4YJcy1EysJTuaZBtzsOTj JE6fBZHNG/ydiyglrsbYrzNvIYnxrrgEgwTZhMsB47rCPBtOJtlsMfdcc0NjX3DjYmeWUibLIlXs JFbvTCfA2zclscbYrzOPIYnxrsSy3MX0Pr0cMK5lR4X2sVLJq0lGr8aVZEc6iZExwS4SgjX8TEJK BWpXNwPyrF2Bd45KZI25X2eeQxLjXZEV+Rs7i0xWm5Jpbc6XE/R/+sn6lWJHJyVYr4odm/tkV/DL 4wHfCa/33RB2blqVyBqDvwqDviOyuXJTiRChaHs5YAyrLJIHTvsOKQH33wSRiepVA5bdWrLzNEW5 uJwzlxZW3MbmDf7etaeQlzOjsc//fssUk+MdeUmEhL2slgPGdZ/2IRUy8/mNEIhXS3YFG0etNTsy 6sgQzvRz+b9KXgPynDEGl71KYLYR2O0Wkmq8JzArfyE85jlgXCteLDfkS9wOJkIFjWKHmWlrza7Q VpW446nhh3ZBYPcY+90rbiUy14jsdhNJOd4VmZO/Edo9DRhjoRaZYYEWWe0Y/MAOnHDNjpsZ1mJT SbSfocjui+/3LvaVzHwjs9ttJOV4V2aqKBUiPQPGVWZspfObpTZBXtpKsisWe1lIdqSXtAtZn0Ii rYRIz4B8ex/DdAYlr9DI63YTSTnelZew+COarwPGNTLGb0lGTztPwcwAya4E7Iko2ZFBFouNjjvV pAI9EQfkmcgYJnEogcVGYLebSMrxrsCi2nh0ZGzAGH4hvxNbq6mx6tuhlWKW0KfUzLxPhp8/zbSX 6SSOzYA8r5KYuKIklhqJ3e4iKce7EkvyR+o3K5YDxvAj2XClHxpydFZXQawUu+42Jtnxu+Px3MLT QdnXZkCe2/nn0nXIr2hEdruPpBzv1LYpBNoHdYB/wLja/BzBstF+7ScJIhMNZhJWzkt2kUOn50YW MVev76Q2A/LtXQxTapS8SiOv230k5XhXXkWuCWjzN2Bct51cuL1Mpm8sOkFiJdlxaWFHYEUIrFTn QqB15r3prLF7AvydTCIlsdpI7HYrSTnelZi8AQiYRzmgDD+Ri9xDcaXSz9QVoivNz0GXsrXmV8i0 46rDRNoO4bEBedavxAwqKTTbGP32djdJNd4RmoUSUe1YDihDgwZSokC+eOHOCiAzxc5B+9O1ZMct LyxtZJwBQKasDsEOyLOOJSSOKZE1Zr+93U5SjndFJhAydo4fMK4So0+zlW9jY8fsF+y4pQUcmIId hxxdInecbP+Y4XZ3QJ6xxyBdTsmrsfnt7V6ScrwrL2WkazN+OWBci5rpoDTnt5xTgZtKyY6fo+8I rOWXFt5xzyY6eU2I0JVnQJ5LuIAsQSWxxuK3t5tJyvGuxLzeyXCJSRud35KplX5Lhoii5oYtideS W+Q2RobvspOJRQdCNgPyrE5ibqQSWWP029sdJeV4V2RBrQp0xq1sNBMTX/oUMgfImoXoheIXsEei 5GdpjfCVQeUnjAq0TRmQ5zd/nROqZHa1+9f878zSOqhOIMevQUvTaLlBy9NopUEr02i1QauTaM6M aM5Mo9kGzU6juQbNTaP5Bs1Po4UGLUyjNbPgpmfBNbPgpmfBNbPgpmfBNbPgpmfBNbPgpmfBN7Pg p2fBN7PgcRZeff716enL8t2Xd99/+/un9x+/HH7/8v754+cXv3x6/9P2/cenz+eS+F+fP73/7+eP X9799vrp45cnWviX4vXf3/3ytHv36Zf3RPKfz1++PH/47qVZcCXoz8/PhMj/iz7u16d3P13/x29P P385Y7188en9L78O//7l+fcL7YXvvz99+eP3Fz+///K354enC+LLF7+/+/3p07+//+8nTq5/8ePT b7+9fv7wgb6KvvTdl9VHUkn6WPrf7/iHfPfyt3cff/r8IxEx6S9Ph0/nD3n+x9Onv/369HH5/OdH /ns/fXr35/uPv7z49M17+mmf3vz0tX3Bn8+f/n6W0Pf/D1BLBwj0y+D1EkcAABNbAQBQSwMEFAAI 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 bFBLBQYAAAAAEQARAHgEAACocgAAAAA= --0000000000007232f506495eaf62--