Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u3eDe-001Amp-LI for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Apr 2025 17:00:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u3eDc-006xho-Gp for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Apr 2025 17:00:36 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u3eDc-006xhe-28 for pgsql-hackers@lists.postgresql.org; Sat, 12 Apr 2025 17:00:36 +0000 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u3eDZ-004zwa-2k for pgsql-hackers@lists.postgresql.org; Sat, 12 Apr 2025 17:00:36 +0000 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-3f8579af0afso55216b6e.2 for ; Sat, 12 Apr 2025 10:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744477231; x=1745082031; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Qs8vmBehxzWmXbSl7fYSR7UDw2xDRc2Yr9S2ISKXUxE=; b=aHUpIWIu/APQ7G7ixmMJD3zQnvMrb2payUbZcv2Ry+n4xEFkCvhXv4v0hgu+OhA2gC 4+Ssccs0w2wBhhDpYkfmoXqYmNfpc1ilOZum9HZhQ/PocZ2ISOcAd+0mZd1xmZheiP+D /E4MLc0RsIfmUO7vcT0yT/iyocojzSnZnz0PwCA/ix/EQl78qHf7M4yFGOYbvWVChUf7 drkxjYWJ7xzNnRdRbbChl1Eh5+/ovmOeKzBmxQthxADlmTdEL+0MgGt5A/fS5WhNDwkm y2du3OuTeN0ZH+w7nypi6Rx8D66U40bdhCq3kz+qeyvqC3K2w7vpymluHkPQH0maJA6V IuNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744477231; x=1745082031; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Qs8vmBehxzWmXbSl7fYSR7UDw2xDRc2Yr9S2ISKXUxE=; b=JL+m9V7uZuj66p9lteeV7Zq8j7R0edv85xlH5E19LgJHZ9HxO0kOccrXUB7w+nNjMA GrNj2uMHKUhDeD/gKAiAEfuE0f7+5l31f7vH53EUnMRdvtilsNaurm28SMV+wffxqxOw z/B4rM4ldIwMPgP2R8q/51ZxFyaloBS29V6tbftNRiJLDumn/dHBU07Nr3KnbtMEdeKI qXqfx79+jZQ1YeRE/NEhM+TStvi2WURyunLtrUKhMzS4VzQhIBKkfVEvoo9ilw8Axz4Y tEbH0K1lArStERQZ5MsdQ2GesjA4LUXZOzeNOWXjc0JdVBQb9JKyTN1IFo5Dxbr/upHD iCew== X-Gm-Message-State: AOJu0YxFcEBObBEpkW/DJCL+dxfsXuF64aaqk66qXQYB6LFjJChojVMb gKtewW9nt7yXte+u8DWsAkP2CUcq71lgo9I5YMCIle6lt6Ltyy9/+Qyb7w5sN+fhun+7kYLqVde A/2Vmqz7qHaviOcvcFwf2GFclmsJEyDwLpeY= X-Gm-Gg: ASbGncum2S4aRyAfagPAkvlcMY30GJRT/Kp7B2kknJzvCNMdElt2/ugtKnZICOSxRLQ YOFadEFCsgZHTkRYJEHodL4zuJeZSnGmbH3HiY2zdGxY8mJmaIGUvZocVMGz+scY6jeR9ZKd7J9 1UwJ/QhMZjZFn2gxgbgGh+1Nw= X-Google-Smtp-Source: AGHT+IHWz+BYf1vdfoZPStNP2fvbmP81nLlJ4vNGivTqJjW8nXAuAc5OLax6YX1j9wzZcrZZkiviJUqVjHgZaRT7rek= X-Received: by 2002:a05:6808:1493:b0:3f6:729c:811 with SMTP id 5614622812f47-4008510012dmr1184968b6e.6.1744477231286; Sat, 12 Apr 2025 10:00:31 -0700 (PDT) MIME-Version: 1.0 From: Thomas Munro Date: Sun, 13 Apr 2025 04:59:54 +1200 X-Gm-Features: ATxdqUHBa_ZIPfwpUe4r6DTBQDhY0Vh0PH-a5imQAtPkfXCJsMDQY0VDLkD15Jo Message-ID: Subject: Automatically sizing the IO worker pool To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000b0ce4a063297c1e4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b0ce4a063297c1e4 Content-Type: text/plain; charset="UTF-8" It's hard to know how to set io_workers=3. If it's too small, io_method=worker's small submission queue overflows and it silently falls back to synchronous IO. If it's too high, it generates a lot of pointless wakeups and scheduling overhead, which might be considered an independent problem or not, but having the right size pool certainly mitigates it. Here's a patch to replace that GUC with: io_min_workers=1 io_max_workers=8 io_worker_idle_timeout=60s io_worker_launch_interval=500ms It grows the pool when a backlog is detected (better ideas for this logic welcome), and lets idle workers time out. IO jobs were already concentrated into the lowest numbered workers, partly because that seemed to have marginally better latency than anything else tried so far due to latch collapsing with lucky timing, and partly in anticipation of this. The patch also reduces bogus wakeups a bit by being a bit more cautious about fanout. That could probably be improved a lot more and needs more research. It's quite tricky to figure out how to suppress wakeups without throwing potential concurrency away. The first couple of patches are independent of this topic, and might be potential cleanups/fixes for master/v18. The last is a simple latency test. Ideas, testing, flames etc welcome. --000000000000b0ce4a063297c1e4 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-aio-Regularize-io_method-worker-naming-conventions.patch" Content-Disposition: attachment; filename="0001-aio-Regularize-io_method-worker-naming-conventions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9egcvhh0 RnJvbSAxZGJiYTM2ZjY3ZGY1ZDNkMzRhOTkwNjEzZDZkNjhkMTVjYWYxYjE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjkgTWFyIDIwMjUgMTM6MjU6MjcgKzEzMDAKU3ViamVjdDogW1BBVENIIDEv NV0gYWlvOiBSZWd1bGFyaXplIGlvX21ldGhvZD13b3JrZXIgbmFtaW5nIGNvbnZlbnRpb25zLgoK bWV0aG9kX3dvcmtlci5jIGRpZG4ndCBrZWVwIHVwIHdpdGggdGhlIHBhdHRlcm4gb2YgUGdBaW9Y WFggZm9yIHR5cGUKbmFtZXMgaW4gdGhlIHBnYWlvIG1vZHVsZS4gIEFkZCB0aGUgbWlzc2luZyAi UGciIHByZWZpeCB1c2VkIGVsc2Ugd2hlcmUuCgpMaWtld2lzZSBmb3IgcGdhaW9fY2hvb3NlX2lk bGVfd29ya2VyKCkgd2hpY2ggYWxvbmUgZmFpbGVkIHRvIHVzZSBhCnBnYWlvX3dvcmtlcl9YWFgo KSBuYW1lIHJlZmVjdGluZyBpdHMgc3VibW9kdWxlLiAgUmVuYW1lLgoKU3RhbmRhcmRpemUgb24g cGFyYW1ldGVyIG5hbWVzIG51bV9zdGFnZWRfaW9zLCBzdGFnZWRfaW9zIGZvciB0aGUKaW50ZXJu YWwgc3VibWlzc2lvbiBmdW5jdGlvbi4KClJlbmFtZSB0aGUgYXJyYXkgb2YgaGFuZGxlIElEcyBp biBQZ0Fpb1N1Ym1pc3Npb25RdWV1ZSB0byBzcWVzLApzaW5jZSB0aGF0J3MgYSB0ZXJtIG9mIGFy dCBzZWVuIGluIG1hbnkgb2YgdGhlc2UgdHlwZXMgb2Ygc3lzdGVtcy4KLS0tCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMgfCA1NCArKysrKysrKysrKystLS0tLS0tLS0t LS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgfCAgNiArLS0KIDIg ZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmluZGV4IDhhZDE3ZWMxZWY3Li5iYTViYzVl NDRiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwpAQCAtNTEsMjYg KzUxLDI2IEBACiAjZGVmaW5lIElPX1dPUktFUl9XQUtFVVBfRkFOT1VUIDIKIAogCi10eXBlZGVm IHN0cnVjdCBBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUKK3R5cGVkZWYgc3RydWN0IFBnQWlvV29y a2VyU3VibWlzc2lvblF1ZXVlCiB7CiAJdWludDMyCQlzaXplOwogCXVpbnQzMgkJbWFzazsKIAl1 aW50MzIJCWhlYWQ7CiAJdWludDMyCQl0YWlsOwotCXVpbnQzMgkJaW9zW0ZMRVhJQkxFX0FSUkFZ X01FTUJFUl07Ci19IEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZTsKKwl1aW50MzIJCXNxZXNbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKK30gUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWU7CiAKLXR5 cGVkZWYgc3RydWN0IEFpb1dvcmtlclNsb3QKK3R5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU2xv dAogewogCUxhdGNoCSAgICpsYXRjaDsKIAlib29sCQlpbl91c2U7Ci19IEFpb1dvcmtlclNsb3Q7 Cit9IFBnQWlvV29ya2VyU2xvdDsKIAotdHlwZWRlZiBzdHJ1Y3QgQWlvV29ya2VyQ29udHJvbAor dHlwZWRlZiBzdHJ1Y3QgUGdBaW9Xb3JrZXJDb250cm9sCiB7CiAJdWludDY0CQlpZGxlX3dvcmtl cl9tYXNrOwotCUFpb1dvcmtlclNsb3Qgd29ya2Vyc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwot fSBBaW9Xb3JrZXJDb250cm9sOworCVBnQWlvV29ya2VyU2xvdCB3b3JrZXJzW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07Cit9IFBnQWlvV29ya2VyQ29udHJvbDsKIAogCiBzdGF0aWMgc2l6ZV90IHBn YWlvX3dvcmtlcl9zaG1lbV9zaXplKHZvaWQpOwpAQCAtOTUsOCArOTUsOCBAQCBpbnQJCQlpb193 b3JrZXJzID0gMzsKIAogc3RhdGljIGludAlpb193b3JrZXJfcXVldWVfc2l6ZSA9IDY0Owogc3Rh dGljIGludAlNeUlvV29ya2VySWQ7Ci1zdGF0aWMgQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICpp b193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZTsKLXN0YXRpYyBBaW9Xb3JrZXJDb250cm9sICppb193 b3JrZXJfY29udHJvbDsKK3N0YXRpYyBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqaW9fd29y a2VyX3N1Ym1pc3Npb25fcXVldWU7CitzdGF0aWMgUGdBaW9Xb3JrZXJDb250cm9sICppb193b3Jr ZXJfY29udHJvbDsKIAogCiBzdGF0aWMgc2l6ZV90CkBAIC0xMDUsMTUgKzEwNSwxNSBAQCBwZ2Fp b193b3JrZXJfcXVldWVfc2htZW1fc2l6ZShpbnQgKnF1ZXVlX3NpemUpCiAJLyogUm91bmQgc2l6 ZSB1cCB0byBuZXh0IHBvd2VyIG9mIHR3byBzbyB3ZSBjYW4gbWFrZSBhIG1hc2suICovCiAJKnF1 ZXVlX3NpemUgPSBwZ19uZXh0cG93ZXIyXzMyKGlvX3dvcmtlcl9xdWV1ZV9zaXplKTsKIAotCXJl dHVybiBvZmZzZXRvZihBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUsIGlvcykgKworCXJldHVybiBv ZmZzZXRvZihQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSwgc3FlcykgKwogCQlzaXplb2YodWlu dDMyKSAqICpxdWV1ZV9zaXplOwogfQogCiBzdGF0aWMgc2l6ZV90CiBwZ2Fpb193b3JrZXJfY29u dHJvbF9zaG1lbV9zaXplKHZvaWQpCiB7Ci0JcmV0dXJuIG9mZnNldG9mKEFpb1dvcmtlckNvbnRy b2wsIHdvcmtlcnMpICsKLQkJc2l6ZW9mKEFpb1dvcmtlclNsb3QpICogTUFYX0lPX1dPUktFUlM7 CisJcmV0dXJuIG9mZnNldG9mKFBnQWlvV29ya2VyQ29udHJvbCwgd29ya2VycykgKworCQlzaXpl b2YoUGdBaW9Xb3JrZXJTbG90KSAqIE1BWF9JT19XT1JLRVJTOwogfQogCiBzdGF0aWMgc2l6ZV90 CkBAIC0xNjEsNyArMTYxLDcgQEAgcGdhaW9fd29ya2VyX3NobWVtX2luaXQoYm9vbCBmaXJzdF90 aW1lKQogfQogCiBzdGF0aWMgaW50Ci1wZ2Fpb19jaG9vc2VfaWRsZV93b3JrZXIodm9pZCkKK3Bn YWlvX3dvcmtlcl9jaG9vc2VfaWRsZSh2b2lkKQogewogCWludAkJCXdvcmtlcjsKIApAQCAtMTc4 LDcgKzE3OCw3IEBAIHBnYWlvX2Nob29zZV9pZGxlX3dvcmtlcih2b2lkKQogc3RhdGljIGJvb2wK IHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2luc2VydChQZ0Fpb0hhbmRsZSAqaW9oKQog ewotCUFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqcXVldWU7CisJUGdBaW9Xb3JrZXJTdWJtaXNz aW9uUXVldWUgKnF1ZXVlOwogCXVpbnQzMgkJbmV3X2hlYWQ7CiAKIAlxdWV1ZSA9IGlvX3dvcmtl cl9zdWJtaXNzaW9uX3F1ZXVlOwpAQCAtMTkwLDcgKzE5MCw3IEBAIHBnYWlvX3dvcmtlcl9zdWJt aXNzaW9uX3F1ZXVlX2luc2VydChQZ0Fpb0hhbmRsZSAqaW9oKQogCQlyZXR1cm4gZmFsc2U7CQkJ LyogZnVsbCAqLwogCX0KIAotCXF1ZXVlLT5pb3NbcXVldWUtPmhlYWRdID0gcGdhaW9faW9fZ2V0 X2lkKGlvaCk7CisJcXVldWUtPnNxZXNbcXVldWUtPmhlYWRdID0gcGdhaW9faW9fZ2V0X2lkKGlv aCk7CiAJcXVldWUtPmhlYWQgPSBuZXdfaGVhZDsKIAogCXJldHVybiB0cnVlOwpAQCAtMTk5LDE0 ICsxOTksMTQgQEAgcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfaW5zZXJ0KFBnQWlvSGFu ZGxlICppb2gpCiBzdGF0aWMgdWludDMyCiBwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9j b25zdW1lKHZvaWQpCiB7Ci0JQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICpxdWV1ZTsKKwlQZ0Fp b1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqcXVldWU7CiAJdWludDMyCQlyZXN1bHQ7CiAKIAlxdWV1 ZSA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogCWlmIChxdWV1ZS0+dGFpbCA9PSBxdWV1 ZS0+aGVhZCkKIAkJcmV0dXJuIFVJTlQzMl9NQVg7CQkvKiBlbXB0eSAqLwogCi0JcmVzdWx0ID0g cXVldWUtPmlvc1txdWV1ZS0+dGFpbF07CisJcmVzdWx0ID0gcXVldWUtPnNxZXNbcXVldWUtPnRh aWxdOwogCXF1ZXVlLT50YWlsID0gKHF1ZXVlLT50YWlsICsgMSkgJiAocXVldWUtPnNpemUgLSAx KTsKIAogCXJldHVybiByZXN1bHQ7CkBAIC0yMzksMzcgKzIzOSwzNyBAQCBwZ2Fpb193b3JrZXJf bmVlZHNfc3luY2hyb25vdXNfZXhlY3V0aW9uKFBnQWlvSGFuZGxlICppb2gpCiB9CiAKIHN0YXRp YyB2b2lkCi1wZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBuaW9zLCBQZ0Fpb0hhbmRs ZSAqaW9zW10pCitwZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBudW1fc3RhZ2VkX2lv cywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCVBnQWlvSGFuZGxlICpzeW5jaHJvbm91 c19pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwogCWludAkJCW5zeW5jID0gMDsKIAlMYXRj aAkgICAqd2FrZXVwID0gTlVMTDsKIAlpbnQJCQl3b3JrZXI7CiAKLQlBc3NlcnQobmlvcyA8PSBQ R0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7CisJQXNzZXJ0KG51bV9zdGFnZWRfaW9zIDw9IFBHQUlP X1NVQk1JVF9CQVRDSF9TSVpFKTsKIAogCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lv blF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IG5pb3M7ICsr aSkKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zdGFnZWRfaW9zOyArK2kpCiAJewotCQlBc3Nl cnQoIXBnYWlvX3dvcmtlcl9uZWVkc19zeW5jaHJvbm91c19leGVjdXRpb24oaW9zW2ldKSk7Ci0J CWlmICghcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfaW5zZXJ0KGlvc1tpXSkpCisJCUFz c2VydCghcGdhaW9fd29ya2VyX25lZWRzX3N5bmNocm9ub3VzX2V4ZWN1dGlvbihzdGFnZWRfaW9z W2ldKSk7CisJCWlmICghcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfaW5zZXJ0KHN0YWdl ZF9pb3NbaV0pKQogCQl7CiAJCQkvKgogCQkJICogV2UnbGwgZG8gaXQgc3luY2hyb25vdXNseSwg YnV0IG9ubHkgYWZ0ZXIgd2UndmUgc2VudCBhcyBtYW55IGFzCiAJCQkgKiB3ZSBjYW4gdG8gd29y a2VycywgdG8gbWF4aW1pemUgY29uY3VycmVuY3kuCiAJCQkgKi8KLQkJCXN5bmNocm9ub3VzX2lv c1tuc3luYysrXSA9IGlvc1tpXTsKKwkJCXN5bmNocm9ub3VzX2lvc1tuc3luYysrXSA9IHN0YWdl ZF9pb3NbaV07CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICh3YWtldXAgPT0gTlVMTCkKIAkJ ewogCQkJLyogQ2hvb3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2ZW4ndCBh bHJlYWR5LiAqLwotCQkJd29ya2VyID0gcGdhaW9fY2hvb3NlX2lkbGVfd29ya2VyKCk7CisJCQl3 b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoKTsKIAkJCWlmICh3b3JrZXIgPj0gMCkK IAkJCQl3YWtldXAgPSBpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1t3b3JrZXJdLmxhdGNoOwog Ci0JCQlwZ2Fpb19kZWJ1Z19pbyhERUJVRzQsIGlvc1tpXSwKKwkJCXBnYWlvX2RlYnVnX2lvKERF QlVHNCwgc3RhZ2VkX2lvc1tpXSwKIAkJCQkJCSAgICJjaG9vc2luZyB3b3JrZXIgJWQiLAogCQkJ CQkJICAgd29ya2VyKTsKIAkJfQpAQCAtNDgyLDcgKzQ4Miw3IEBAIElvV29ya2VyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJCQkJICAg SU9fV09SS0VSX1dBS0VVUF9GQU5PVVQpOwogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBud2FrZXVw czsgKytpKQogCQkJewotCQkJCWlmICgod29ya2VyID0gcGdhaW9fY2hvb3NlX2lkbGVfd29ya2Vy KCkpIDwgMCkKKwkJCQlpZiAoKHdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpKSA8 IDApCiAJCQkJCWJyZWFrOwogCQkJCWxhdGNoZXNbbmxhdGNoZXMrK10gPSBpb193b3JrZXJfY29u dHJvbC0+d29ya2Vyc1t3b3JrZXJdLmxhdGNoOwogCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCBkMTZiYzIwODY1NC4uOTk0NmNmY2VjNDEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC01NSw5ICs1NSw2IEBAIEFnZ1N0cmF0ZWd5CiBBZ2dUcmFuc0luZm8KIEFnZ3JlZgog QWdncmVnYXRlSW5zdHJ1bWVudGF0aW9uCi1BaW9Xb3JrZXJDb250cm9sCi1BaW9Xb3JrZXJTbG90 Ci1BaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUKIEFsZW5TdGF0ZQogQWxpYXMKIEFsbG9jQmxvY2sK QEAgLTIxNzUsNiArMjE3Miw5IEBAIFBnQWlvVGFyZ2V0SUQKIFBnQWlvVGFyZ2V0SW5mbwogUGdB aW9VcmluZ0NvbnRleHQKIFBnQWlvV2FpdFJlZgorUGdBaW9Xb3JrZXJDb250cm9sCitQZ0Fpb1dv cmtlclNsb3QKK1BnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlCiBQZ0FyY2hEYXRhCiBQZ0JhY2tl bmRHU1NTdGF0dXMKIFBnQmFja2VuZFNTTFN0YXR1cwotLSAKMi4zOS41Cgo= --000000000000b0ce4a063297c1e4 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-aio-Remove-IO-worker-ID-references-from-postmaster.c.patch" Content-Disposition: attachment; filename="0002-aio-Remove-IO-worker-ID-references-from-postmaster.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9egcz7k1 RnJvbSA5OWM5YTMwM2QzN2Q3ZTIyMzJkM2MyOGVlMDkxYWVkODJmZTViOGViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTEgQXByIDIwMjUgMjM6MTA6MTAgKzEyMDAKU3ViamVjdDogW1BBVENIIDIv NV0gYWlvOiBSZW1vdmUgSU8gd29ya2VyIElEIHJlZmVyZW5jZXMgZnJvbSBwb3N0bWFzdGVyLmMu CgpBbiBhbmNpZW50IGFuY2VzdG9yIG9mIHRoaXMgY29kZSBoYWQgdGhlIHBvc3RtYXN0ZXIgYXNz aWduIElEcyB0byBJTwp3b3JrZXJzLiAgTm93IGl0IHRyYWNrcyB0aGVtIGluIGFuIHVub3JkZXJl ZCBhcnJheSwgYW5kIGl0IG1pZ2h0IGJlCmNvbmZ1c2luZyB0byByZWFkZXJzIHRoYXQgaXQgcmVm ZXJzIHRvIHRoZWlyIGluZGV4ZXMgYXMgSURzIGluIHZhcmlvdXMKcGxhY2VzLiAgRml4LgotLS0K IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIHwgMjggKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDE0IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggMTdmZWQ5NmZlMjAu LjBlODYyM2RlYTE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0 ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtNDMzNywx NSArNDMzNywxNSBAQCBtYXliZV9zdGFydF9iZ3dvcmtlcnModm9pZCkKIHN0YXRpYyBib29sCiBt YXliZV9yZWFwX2lvX3dvcmtlcihpbnQgcGlkKQogewotCWZvciAoaW50IGlkID0gMDsgaWQgPCBN QVhfSU9fV09SS0VSUzsgKytpZCkKKwlmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JT19XT1JLRVJT OyArK2kpCiAJewotCQlpZiAoaW9fd29ya2VyX2NoaWxkcmVuW2lkXSAmJgotCQkJaW9fd29ya2Vy X2NoaWxkcmVuW2lkXS0+cGlkID09IHBpZCkKKwkJaWYgKGlvX3dvcmtlcl9jaGlsZHJlbltpXSAm JgorCQkJaW9fd29ya2VyX2NoaWxkcmVuW2ldLT5waWQgPT0gcGlkKQogCQl7Ci0JCQlSZWxlYXNl UG9zdG1hc3RlckNoaWxkU2xvdChpb193b3JrZXJfY2hpbGRyZW5baWRdKTsKKwkJCVJlbGVhc2VQ b3N0bWFzdGVyQ2hpbGRTbG90KGlvX3dvcmtlcl9jaGlsZHJlbltpXSk7CiAKIAkJCS0taW9fd29y a2VyX2NvdW50OwotCQkJaW9fd29ya2VyX2NoaWxkcmVuW2lkXSA9IE5VTEw7CisJCQlpb193b3Jr ZXJfY2hpbGRyZW5baV0gPSBOVUxMOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAl9CkBAIC00Mzg5 LDIyICs0Mzg5LDIyIEBAIG1heWJlX2FkanVzdF9pb193b3JrZXJzKHZvaWQpCiAJd2hpbGUgKGlv X3dvcmtlcl9jb3VudCA8IGlvX3dvcmtlcnMpCiAJewogCQlQTUNoaWxkICAgICpjaGlsZDsKLQkJ aW50CQkJaWQ7CisJCWludAkJCWk7CiAKIAkJLyogZmluZCB1bnVzZWQgZW50cnkgaW4gaW9fd29y a2VyX2NoaWxkcmVuIGFycmF5ICovCi0JCWZvciAoaWQgPSAwOyBpZCA8IE1BWF9JT19XT1JLRVJT OyArK2lkKQorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKIAkJewotCQkJ aWYgKGlvX3dvcmtlcl9jaGlsZHJlbltpZF0gPT0gTlVMTCkKKwkJCWlmIChpb193b3JrZXJfY2hp bGRyZW5baV0gPT0gTlVMTCkKIAkJCQlicmVhazsKIAkJfQotCQlpZiAoaWQgPT0gTUFYX0lPX1dP UktFUlMpCi0JCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgYSBmcmVlIElPIHdvcmtlciBJ RCIpOworCQlpZiAoaSA9PSBNQVhfSU9fV09SS0VSUykKKwkJCWVsb2coRVJST1IsICJjb3VsZCBu b3QgZmluZCBhIGZyZWUgSU8gd29ya2VyIHNsb3QiKTsKIAogCQkvKiBUcnkgdG8gbGF1bmNoIG9u ZS4gKi8KIAkJY2hpbGQgPSBTdGFydENoaWxkUHJvY2VzcyhCX0lPX1dPUktFUik7CiAJCWlmIChj aGlsZCAhPSBOVUxMKQogCQl7Ci0JCQlpb193b3JrZXJfY2hpbGRyZW5baWRdID0gY2hpbGQ7CisJ CQlpb193b3JrZXJfY2hpbGRyZW5baV0gPSBjaGlsZDsKIAkJCSsraW9fd29ya2VyX2NvdW50Owog CQl9CiAJCWVsc2UKQEAgLTQ0MTUsMTEgKzQ0MTUsMTEgQEAgbWF5YmVfYWRqdXN0X2lvX3dvcmtl cnModm9pZCkKIAlpZiAoaW9fd29ya2VyX2NvdW50ID4gaW9fd29ya2VycykKIAl7CiAJCS8qIGFz ayB0aGUgSU8gd29ya2VyIGluIHRoZSBoaWdoZXN0IHNsb3QgdG8gZXhpdCAqLwotCQlmb3IgKGlu dCBpZCA9IE1BWF9JT19XT1JLRVJTIC0gMTsgaWQgPj0gMDsgLS1pZCkKKwkJZm9yIChpbnQgaSA9 IE1BWF9JT19XT1JLRVJTIC0gMTsgaSA+PSAwOyAtLWkpCiAJCXsKLQkJCWlmIChpb193b3JrZXJf Y2hpbGRyZW5baWRdICE9IE5VTEwpCisJCQlpZiAoaW9fd29ya2VyX2NoaWxkcmVuW2ldICE9IE5V TEwpCiAJCQl7Ci0JCQkJa2lsbChpb193b3JrZXJfY2hpbGRyZW5baWRdLT5waWQsIFNJR1VTUjIp OworCQkJCWtpbGwoaW9fd29ya2VyX2NoaWxkcmVuW2ldLT5waWQsIFNJR1VTUjIpOwogCQkJCWJy ZWFrOwogCQkJfQogCQl9Ci0tIAoyLjM5LjUKCg== --000000000000b0ce4a063297c1e4 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-aio-Try-repeatedly-to-give-batched-IOs-to-workers.patch" Content-Disposition: attachment; filename="0003-aio-Try-repeatedly-to-give-batched-IOs-to-workers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9egd43k2 RnJvbSBhOTBhNjkyNzI1ZWVkZDY5MmY5MzRiZjNlZDU2YTJlM2E3ZjNmYzJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTEgQXByIDIwMjUgMjE6MTc6MjYgKzEyMDAKU3ViamVjdDogW1BBVENIIDMv NV0gYWlvOiBUcnkgcmVwZWF0ZWRseSB0byBnaXZlIGJhdGNoZWQgSU9zIHRvIHdvcmtlcnMuCgpQ cmV2aW91c2x5LCBpZiB0aGUgZmlyc3Qgb2YgYSBiYXRjaCBvZiBJT3MgZGlkbid0IGZpdCBpbiBh IGJhdGNoIHdlJ2QKcnVuIGFsbCBvZiB0aGVtIHN5bmNocm9ub3VzbHkuICBBbmRyZXMgcmlnaHRs eSBwb2ludGVkIG91dCB0aGF0IHdlCnNob3VsZCByZWFsbHkgdHJ5IGFnYWluIGJldHdlZW4gc3lu Y2hyb25vdXMgSU9zLCBzaW5jZSB0aGUgd29ya2VycyBtaWdodApoYXZlIG1hZGUgcHJvZ3Jlc3Mu CgpTdWdnZXN0ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KLS0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMgfCAzMCArKysrKysrKysrKysr KysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKaW5kZXggYmE1YmM1 ZTQ0YmEuLmMyMGQ2ZDBmMThiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9t ZXRob2Rfd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtl ci5jCkBAIC0yODAsMTIgKzI4MCwzNiBAQCBwZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGlu dCBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCQlTZXRMYXRjaCh3 YWtldXApOwogCiAJLyogUnVuIHdoYXRldmVyIGlzIGxlZnQgc3luY2hyb25vdXNseS4gKi8KLQlp ZiAobnN5bmMgPiAwKQorCWZvciAoaW50IGkgPSAwOyBpIDwgbnN5bmM7ICsraSkKIAl7Ci0JCWZv ciAoaW50IGkgPSAwOyBpIDwgbnN5bmM7ICsraSkKKwkJd2FrZXVwID0gTlVMTDsKKworCQkvKgor CQkgKiBCZXR3ZWVuIHN5bmNocm9ub3VzIElPIG9wZXJhdGlvbnMsIHRyeSBhZ2FpbiB0byBlbnF1 ZXVlIGFzIG1hbnkgYXMKKwkJICogd2UgY2FuLgorCQkgKi8KKwkJaWYgKGkgPiAwKQogCQl7Ci0J CQlwZ2Fpb19pb19wZXJmb3JtX3N5bmNocm9ub3VzbHkoc3luY2hyb25vdXNfaW9zW2ldKTsKKwkJ CXdha2V1cCA9IE5VTEw7CisKKwkJCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJCXdoaWxlIChpIDwgbnN5bmMgJiYKKwkJCQkgICBw Z2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9pbnNlcnQoc3luY2hyb25vdXNfaW9zW2ldKSkK KwkJCXsKKwkJCQlpZiAod2FrZXVwID09IE5VTEwgJiYgKHdvcmtlciA9IHBnYWlvX3dvcmtlcl9j aG9vc2VfaWRsZSgpKSA+PSAwKQorCQkJCQl3YWtldXAgPSBpb193b3JrZXJfY29udHJvbC0+d29y a2Vyc1t3b3JrZXJdLmxhdGNoOworCQkJCWkrKzsKKwkJCX0KKwkJCUxXTG9ja1JlbGVhc2UoQWlv V29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisKKwkJCWlmICh3YWtldXApCisJCQkJU2V0TGF0 Y2god2FrZXVwKTsKKworCQkJaWYgKGkgPT0gbnN5bmMpCisJCQkJYnJlYWs7CiAJCX0KKworCQlw Z2Fpb19pb19wZXJmb3JtX3N5bmNocm9ub3VzbHkoc3luY2hyb25vdXNfaW9zW2ldKTsKIAl9CiB9 CiAKLS0gCjIuMzkuNQoK --000000000000b0ce4a063297c1e4 Content-Type: text/x-patch; charset="US-ASCII"; name="0004-aio-Adjust-IO-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="0004-aio-Adjust-IO-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9egd84k3 RnJvbSAwMjMyNTQ0MmJlYTQ0MGU2NWI1ZjM4MTdjM2ZiOGJkNDY4MWJiZDI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIDQv NV0gYWlvOiBBZGp1c3QgSU8gd29ya2VyIHBvb2wgc2l6ZSBhdXRvbWF0aWNhbGx5LgoKUmVwbGFj ZSB0aGUgc2ltcGxlIGlvX3dvcmtlcnMgc2V0dGluZyB3aXRoOgoKICBpb19taW5fd29ya2Vycz0x CiAgaW9fbWF4X3dvcmtlcnM9OAogIGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ9NjBzCiAgaW9fd29y a2VyX2xhdW5jaF9pbnRlcnZhbD01MDBtcwoKVGhlIHBvb2wgaXMgYXV0b21hdGljYWxseSBzaXpl ZCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgcmFuZ2UgYWNjb3JkaW5nCnRvIGRlbWFuZC4KClhYWCBX SVAKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAg NzAgKystCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAgICAgICAgICAgfCAg NjQgKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMgICAgICAgfCA0 NTAgKysrKysrKysrKysrKystLS0tCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1l cy50eHQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg ICAgICAgICAgIHwgIDQ2ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29ya2VyLmggICAgICAg ICAgICAgICB8ICAgOSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaCAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMu cGwgfCAgMTUgKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDU0MSBpbnNlcnRpb25zKCspLCAxMjEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGMxNjc0YzIyY2IyLi45ZjJlN2FlNjc4NSAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcu c2dtbApAQCAtMjc2OSwxNiArMjc2OSw3NiBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwogICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAotICAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLWlvLXdvcmtlcnMiIHhyZWZsYWJlbD0iaW9fd29ya2VycyI+Ci0gICAgICAgPHRl cm0+PHZhcm5hbWU+aW9fd29ya2VyczwvdmFybmFtZT4gKDx0eXBlPmludDwvdHlwZT4pCisgICAg ICA8dmFybGlzdGVudHJ5IGlkPSJndWMtaW8tbWluLXdvcmtlcnMiIHhyZWZsYWJlbD0iaW9fbWlu X3dvcmtlcnMiPgorICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX21pbl93b3JrZXJzPC92YXJuYW1l PiAoPHR5cGU+aW50PC90eXBlPikKICAgICAgICA8aW5kZXh0ZXJtPgotICAgICAgICA8cHJpbWFy eT48dmFybmFtZT5pb193b3JrZXJzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aW9fbWluX3dvcmtlcnM8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgogICAgICAgIDwvaW5kZXh0ZXJt PgogICAgICAgIDwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgotICAg ICAgICAgU2VsZWN0cyB0aGUgbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4g VGhlIGRlZmF1bHQgaXMKLSAgICAgICAgIDMuIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNl dCBpbiB0aGUKKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIg cHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgIDEuIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3Fs LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAgICAg bGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIE9ubHkgaGFz IGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMtaW8tbWV0aG9kIi8+IGlzIHNldCB0bwor ICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJhPgorICAg ICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Imd1Yy1pby1tYXgtd29ya2VycyIgeHJlZmxhYmVsPSJpb19tYXhfd29ya2VycyI+Cisg ICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWF4X3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnQ8 L3R5cGU+KQorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmlv X21heF93b3JrZXJzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIEkvTyB3 b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgIDguIFRoaXMg cGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIDxmaWxlbmFtZT5wb3N0 Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAg ICAgICAgbGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIE9u bHkgaGFzIGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMtaW8tbWV0aG9kIi8+IGlzIHNl dCB0bworICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJh PgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXItaWRsZS10aW1lb3V0IiB4cmVmbGFiZWw9ImlvX3dv cmtlcl9pZGxlX3RpbWVvdXQiPgorICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX3dvcmtlcl9pZGxl X3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnQ8L3R5cGU+KQorICAgICAgIDxpbmRleHRlcm0+ CisgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJt PgorICAgICAgIDwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgU2V0cyB0aGUgdGltZSBhZnRlciB3aGljaCBpZGxlIEkvTyB3b3JrZXIgcHJvY2Vzc2Vz IHdpbGwgZXhpdCwgcmVkdWNpbmcgdGhlCisgICAgICAgICBtYXhpbXVtIHNpemUgb2YgdGhlIEkv TyB3b3JrZXIgcG9vbCB0b3dhcmRzIHRoZSBtaW5pbXVtLiAgVGhlIGRlZmF1bHQKKyAgICAgICAg IGlzIDEgbWludXRlLgorICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGlu IHRoZQorICAgICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUg b3Igb24gdGhlIHNlcnZlciBjb21tYW5kCisgICAgICAgICBsaW5lLgorICAgICAgICA8L3BhcmE+ CisgICAgICAgIDxwYXJhPgorICAgICAgICAgT25seSBoYXMgYW4gZWZmZWN0IGlmIDx4cmVmIGxp bmtlbmQ9Imd1Yy1pby1tZXRob2QiLz4gaXMgc2V0IHRvCisgICAgICAgICA8bGl0ZXJhbD53b3Jr ZXI8L2xpdGVyYWw+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWlvLXdvcmtlci1s YXVuY2gtaW50ZXJ2YWwiIHhyZWZsYWJlbD0iaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCI+Cisg ICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbDwvdmFybmFtZT4g KDx0eXBlPmludDwvdHlwZT4pCisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+aW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbDwvdmFybmFtZT4gY29uZmlndXJhdGlv biBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJt PgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBTZXRzIHRoZSBt aW5pbXVtIHRpbWUgYmV0d2VlbiBsYXVuY2hpbmcgbmV3IEkvTyB3b3JrZXJzLiAgVGhpcyBjYW4g YmUgdXNlZCB0byBhdm9pZAorICAgICAgICAgc3VkZGVuIGJ1cnN0cyBvZiBuZXcgSS9PIHdvcmtl cnMuICBUaGUgZGVmYXVsdCBpcyAxMDBtcy4KKyAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBv bmx5IGJlIHNldCBpbiB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2Zp bGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAogICAgICAgICAgbGluZS4KICAg ICAgICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCAwZTg2MjNk ZWExOC4uYjNmNjg4OTcxOTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00 MDgsNiArNDA4LDcgQEAgc3RhdGljIEROU1NlcnZpY2VSZWYgYm9uam91cl9zZHJlZiA9IE5VTEw7 CiAjZW5kaWYKIAogLyogU3RhdGUgZm9yIElPIHdvcmtlciBtYW5hZ2VtZW50LiAqLworc3RhdGlj IFRpbWVzdGFtcFR6IGlvX3dvcmtlcl9sYXVuY2hfZGVsYXlfdW50aWwgPSAwOwogc3RhdGljIGlu dAlpb193b3JrZXJfY291bnQgPSAwOwogc3RhdGljIFBNQ2hpbGQgKmlvX3dvcmtlcl9jaGlsZHJl bltNQVhfSU9fV09SS0VSU107CiAKQEAgLTE1NjksNiArMTU3MCwxNSBAQCBEZXRlcm1pbmVTbGVl cFRpbWUodm9pZCkKIAlpZiAoU3RhcnRXb3JrZXJOZWVkZWQpCiAJCXJldHVybiAwOwogCisJLyog SWYgd2UgbmVlZCBhIG5ldyBJTyB3b3JrZXIsIGRlZmVyIHVudGlsIGxhdW5jaCBkZWxheSBleHBp cmVzLiAqLworCWlmIChwZ2Fpb193b3JrZXJfdGVzdF9uZXdfd29ya2VyX25lZWRlZCgpICYmCisJ CWlvX3dvcmtlcl9jb3VudCA8IGlvX21heF93b3JrZXJzKQorCXsKKwkJaWYgKGlvX3dvcmtlcl9s YXVuY2hfZGVsYXlfdW50aWwgPT0gMCkKKwkJCXJldHVybiAwOworCQluZXh0X3dha2V1cCA9IGlv X3dvcmtlcl9sYXVuY2hfZGVsYXlfdW50aWw7CisJfQorCiAJaWYgKEhhdmVDcmFzaGVkV29ya2Vy KQogCXsKIAkJZGxpc3RfbXV0YWJsZV9pdGVyIGl0ZXI7CkBAIC0zNzUwLDYgKzM3NjAsMTUgQEAg cHJvY2Vzc19wbV9wbXNpZ25hbCh2b2lkKQogCQlTdGFydFdvcmtlck5lZWRlZCA9IHRydWU7CiAJ fQogCisJLyogUHJvY2VzcyBJTyB3b3JrZXIgc3RhcnQgcmVxdWV0cy4gKi8KKwlpZiAoQ2hlY2tQ b3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9DSEFOR0UpKQorCXsKKwkJLyoKKwkJ ICogTm8gbG9jYWwgZmxhZywgYXMgdGhlIHN0YXRlIGlzIGV4cG9zZWQgdGhyb3VnaCBwZ2Fpb193 b3JrZXJfKigpCisJCSAqIGZ1bmN0aW9ucy4gIFRoaXMgc2lnbmFsIGlzIHJlY2VpdmVkIG9uIHBv dGVudGlhbGx5IGFjdGlvbmFibGUgbGV2ZWwKKwkJICogY2hhbmdlcywgc28gdGhhdCBtYXliZV9h ZGp1c3RfaW9fd29ya2VycygpIHdpbGwgcnVuLgorCQkgKi8KKwl9CiAJLyogUHJvY2VzcyBiYWNr Z3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2VzLiAqLwogCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWdu YWwoUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJfQ0hBTkdFKSkKIAl7CkBAIC00MzU1LDggKzQz NzQsOSBAQCBtYXliZV9yZWFwX2lvX3dvcmtlcihpbnQgcGlkKQogLyoKICAqIFN0YXJ0IG9yIHN0 b3AgSU8gd29ya2VycywgdG8gY2xvc2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgcnVu bmluZwogICogd29ya2VycyBhbmQgdGhlIG51bWJlciBvZiBjb25maWd1cmVkIHdvcmtlcnMuICBV c2VkIHRvIHJlc3BvbmQgdG8gY2hhbmdlIG9mCi0gKiB0aGUgaW9fd29ya2VycyBHVUMgKGJ5IGlu Y3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgdGhlIG51bWJlciBvZiB3b3JrZXJzKSwgYXMKLSAqIHdl bGwgYXMgd29ya2VycyB0ZXJtaW5hdGluZyBpbiByZXNwb25zZSB0byBlcnJvcnMgKGJ5IHN0YXJ0 aW5nCisgKiB0aGUgaW9fe21pbixtYXh9X3dvcmtlcnMgR1VDcyAoYnkgaW5jcmVhc2luZyBhbmQg ZGVjcmVhc2luZyB0aGUgbnVtYmVyIG9mCisgKiB3b3JrZXJzKSBhbmQgcmVxdWVzdHMgdG8gc3Rh cnQgYSBuZXcgb25lIGR1ZSB0byBzdWJtaXNzaW9uIHF1ZXVlIGJhY2tsb2csCisgKiBhcyB3ZWxs IGFzIHdvcmtlcnMgdGVybWluYXRpbmcgaW4gcmVzcG9uc2UgdG8gZXJyb3JzIChieSBzdGFydGlu ZwogICogInJlcGxhY2VtZW50IiB3b3JrZXJzKS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTQzODUs OCArNDQwNSwxNiBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKQogCiAJQXNzZXJ0KHBt U3RhdGUgPCBQTV9XQUlUX0lPX1dPUktFUlMpOwogCi0JLyogTm90IGVub3VnaCBydW5uaW5nPyAq LwotCXdoaWxlIChpb193b3JrZXJfY291bnQgPCBpb193b3JrZXJzKQorCS8qIENhbmNlbCB0aGUg bGF1bmNoIGRlbGF5IHdoZW4gaXQgZXhwaXJlcyB0byBtaW5pbWl6ZSBjbG9jayBhY2Nlc3MuICov CisJaWYgKGlvX3dvcmtlcl9sYXVuY2hfZGVsYXlfdW50aWwgIT0gMCAmJgorCQlpb193b3JrZXJf bGF1bmNoX2RlbGF5X3VudGlsIDw9IEdldEN1cnJlbnRUaW1lc3RhbXAoKSkKKwkJaW9fd29ya2Vy X2xhdW5jaF9kZWxheV91bnRpbCA9IDA7CisKKwkvKiBOb3QgZW5vdWdoIHdvcmtlcnMgcnVubmlu Zz8gKi8KKwl3aGlsZSAoaW9fd29ya2VyX2xhdW5jaF9kZWxheV91bnRpbCA9PSAwICYmCisJCSAg IGlvX3dvcmtlcl9jb3VudCA8IGlvX21heF93b3JrZXJzICYmCisJCSAgICgoaW9fd29ya2VyX2Nv dW50IDwgaW9fbWluX3dvcmtlcnMgfHwKKwkJCSBwZ2Fpb193b3JrZXJfY2xlYXJfbmV3X3dvcmtl cl9uZWVkZWQoKSkpKQogCXsKIAkJUE1DaGlsZCAgICAqY2hpbGQ7CiAJCWludAkJCWk7CkBAIC00 NDAwLDYgKzQ0MjgsMTYgQEAgbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnModm9pZCkKIAkJaWYgKGkg PT0gTUFYX0lPX1dPUktFUlMpCiAJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgYSBmcmVl IElPIHdvcmtlciBzbG90Iik7CiAKKwkJLyoKKwkJICogQXBwbHkgbGF1bmNoIGRlbGF5IGV2ZW4g Zm9yIGZhaWx1cmVzIHRvIGF2b2lkIHJldHJ5aW5nIHRvbyBmYXN0IG9uCisJCSAqIGZvcmsoKSBm YWlsdXJlLCBidXQgbm90IHdoaWxlIHdlJ3JlIHN0aWxsIGJ1aWxkaW5nIHRoZSBtaW5pbXVtIHBv b2wKKwkJICogc2l6ZS4KKwkJICovCisJCWlmIChpb193b3JrZXJfY291bnQgPj0gaW9fbWluX3dv cmtlcnMpCisJCQlpb193b3JrZXJfbGF1bmNoX2RlbGF5X3VudGlsID0KKwkJCQlUaW1lc3RhbXBU elBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJCQkJCQlpb193 b3JrZXJfbGF1bmNoX2ludGVydmFsKTsKKwogCQkvKiBUcnkgdG8gbGF1bmNoIG9uZS4gKi8KIAkJ Y2hpbGQgPSBTdGFydENoaWxkUHJvY2VzcyhCX0lPX1dPUktFUik7CiAJCWlmIChjaGlsZCAhPSBO VUxMKQpAQCAtNDQxMSwxOSArNDQ0OSwxMSBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lk KQogCQkJYnJlYWs7CQkJCS8qIHRyeSBhZ2FpbiBuZXh0IHRpbWUgKi8KIAl9CiAKLQkvKiBUb28g bWFueSBydW5uaW5nPyAqLwotCWlmIChpb193b3JrZXJfY291bnQgPiBpb193b3JrZXJzKQotCXsK LQkJLyogYXNrIHRoZSBJTyB3b3JrZXIgaW4gdGhlIGhpZ2hlc3Qgc2xvdCB0byBleGl0ICovCi0J CWZvciAoaW50IGkgPSBNQVhfSU9fV09SS0VSUyAtIDE7IGkgPj0gMDsgLS1pKQotCQl7Ci0JCQlp ZiAoaW9fd29ya2VyX2NoaWxkcmVuW2ldICE9IE5VTEwpCi0JCQl7Ci0JCQkJa2lsbChpb193b3Jr ZXJfY2hpbGRyZW5baV0tPnBpZCwgU0lHVVNSMik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9 CisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcnVubmluZyBiZWNhdXNlIGlvX21heF93 b3JrZXJzIGNoYW5nZWQsIHRoYXQgd2lsbAorCSAqIGJlIGhhbmRsZWQgYnkgdGhlIElPIHdvcmtl cnMgdGhlbXNlbHZlcyBzbyB0aGV5IGNhbiBzaHV0IGRvd24gaW4KKwkgKiBwcmVmZXJyZWQgb3Jk ZXIuCisJICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0 aG9kX3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmlu ZGV4IGMyMGQ2ZDBmMThiLi43ODgxN2JiNDE5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF93b3JrZXIuYwpAQCAtMTEsOSArMTEsMTAgQEAKICAqIGluZnJhc3RydWN0dXJlIGZvciBy ZW9wZW5pbmcgdGhlIGZpbGUsIGFuZCBtdXN0IHByb2Nlc3NlZCBzeW5jaHJvbm91c2x5IGJ5CiAg KiB0aGUgY2xpZW50IGNvZGUgd2hlbiBzdWJtaXR0ZWQuCiAgKgotICogU28gdGhhdCB0aGUgc3Vi bWl0dGVyIGNhbiBtYWtlIGp1c3Qgb25lIHN5c3RlbSBjYWxsIHdoZW4gc3VibWl0dGluZyBhIGJh dGNoCi0gKiBvZiBJT3MsIHdha2V1cHMgImZhbiBvdXQiOyBlYWNoIHdva2VuIElPIHdvcmtlciBj YW4gd2FrZSB0d28gbW9yZS4gWFhYIFRoaXMKLSAqIGNvdWxkIGJlIGltcHJvdmVkIGJ5IHVzaW5n IGZ1dGV4ZXMgaW5zdGVhZCBvZiBsYXRjaGVzIHRvIHdha2UgTiB3YWl0ZXJzLgorICogV2hlbiBh IGJhdGNoIG9mIElPcyBpcyBzdWJtaXR0ZWQsIHRoZSBsb3dlc3QgbnVtYmVyZWQgaWRsZSB3b3Jr ZXIgaXMgd29rZW4KKyAqIHVwLiAgSWYgaXQgc2VlcyBtb3JlIHdvcmsgaW4gdGhlIHF1ZXVlIGl0 IHdha2VzIGEgcGVlciB0byBoZWxwLCBhbmQgc28gb24KKyAqIGluIGEgY2hhaW4uICBXaGVuIGEg YmFja2xvZyBpcyBkZXRlY3RlZCwgdGhlIHBvb2wgc2l6ZSBpcyBpbmNyZWFzZWQuICBXaGVuCisg KiB0aGUgaGlnaGVzdCBudW1iZXJlZCB3b3JrZXIgdGltZXMgb3V0IGFmdGVyIGEgcGVyaW9kIG9m IGluYWN0aXZpdHkuCiAgKgogICogVGhpcyBtZXRob2Qgb2YgQUlPIGlzIGF2YWlsYWJsZSBpbiBh bGwgYnVpbGRzIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kCiAgKiBpcyB0aGUgZGVmYXVs dC4KQEAgLTQwLDE2ICs0MSwxNiBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaW9fd29ya2VyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5j bHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAj aW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCi0KLS8qIEhvdyBtYW55IHdvcmtlcnMgc2hv dWxkIGVhY2ggd29ya2VyIHdha2UgdXAgaWYgbmVlZGVkPyAqLwotI2RlZmluZSBJT19XT1JLRVJf V0FLRVVQX0ZBTk9VVCAyCi0KKy8qIFNhdHVyYXRpb24gZm9yIHN0YXRzIGNvdW50ZXJzIHVzZWQg dG8gZXN0aW1hdGUgd2FrZXVwOndvcmsgcmF0aW8uICovCisjZGVmaW5lIFBHQUlPX1dPUktFUl9T VEFUU19NQVggNjQKIAogdHlwZWRlZiBzdHJ1Y3QgUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUK IHsKQEAgLTYyLDE3ICs2MywyNSBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Np b25RdWV1ZQogCiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclNsb3QKIHsKLQlMYXRjaAkgICAq bGF0Y2g7Ci0JYm9vbAkJaW5fdXNlOworCVByb2NOdW1iZXIJcHJvY19udW1iZXI7CiB9IFBnQWlv V29ya2VyU2xvdDsKIAogdHlwZWRlZiBzdHJ1Y3QgUGdBaW9Xb3JrZXJDb250cm9sCiB7CisJLyog U2VlbiBieSBwb3N0bWFzdGVyICovCisJdm9sYXRpbGUgYm9vbCBuZXdfd29ya2VyX25lZWRlZDsK KworCS8qIFBvdGVjdGVkIGJ5IEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2suICovCiAJdWlu dDY0CQlpZGxlX3dvcmtlcl9tYXNrOworCisJLyogUHJvdGVjdGVkIGJ5IEFpb1dvcmtlckNvbnRy b2xMb2NrLiAqLworCXVpbnQ2NAkJd29ya2VyX3NldDsKKwlpbnQJCQlud29ya2VyczsKKworCS8q IFByb3RlY3RlZCBieSBBaW9Xb3JrZXJDb250cm9sTG9jay4gKi8KIAlQZ0Fpb1dvcmtlclNsb3Qg d29ya2Vyc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBQZ0Fpb1dvcmtlckNvbnRyb2w7CiAK LQogc3RhdGljIHNpemVfdCBwZ2Fpb193b3JrZXJfc2htZW1fc2l6ZSh2b2lkKTsKIHN0YXRpYyB2 b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wgZmlyc3RfdGltZSk7CiAKQEAgLTkwLDEx ICs5OSwxNCBAQCBjb25zdCBJb01ldGhvZE9wcyBwZ2Fpb193b3JrZXJfb3BzID0gewogCiAKIC8q IEdVQ3MgKi8KLWludAkJCWlvX3dvcmtlcnMgPSAzOworaW50CQkJaW9fbWluX3dvcmtlcnMgPSAx OworaW50CQkJaW9fbWF4X3dvcmtlcnMgPSA4OworaW50CQkJaW9fd29ya2VyX2lkbGVfdGltZW91 dCA9IDYwMDAwOworaW50CQkJaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCA9IDUwMDsKIAogCiBz dGF0aWMgaW50CWlvX3dvcmtlcl9xdWV1ZV9zaXplID0gNjQ7Ci1zdGF0aWMgaW50CU15SW9Xb3Jr ZXJJZDsKK3N0YXRpYyBpbnQJTXlJb1dvcmtlcklkID0gLTE7CiBzdGF0aWMgUGdBaW9Xb3JrZXJT dWJtaXNzaW9uUXVldWUgKmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlv V29ya2VyQ29udHJvbCAqaW9fd29ya2VyX2NvbnRyb2w7CiAKQEAgLTE1MSwzNiArMTYzLDE3MSBA QCBwZ2Fpb193b3JrZXJfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpCiAJCQkJCQkmZm91bmQp OwogCWlmICghZm91bmQpCiAJewotCQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFz ayA9IDA7CisJCWlvX3dvcmtlcl9jb250cm9sLT5uZXdfd29ya2VyX25lZWRlZCA9IGZhbHNlOwor CQlpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCA9IDA7CiAJCWZvciAoaW50IGkgPSAwOyBp IDwgTUFYX0lPX1dPUktFUlM7ICsraSkKLQkJewotCQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtl cnNbaV0ubGF0Y2ggPSBOVUxMOwotCQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5f dXNlID0gZmFsc2U7Ci0JCX0KKwkJCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW2ldLnByb2Nf bnVtYmVyID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwZ2Fp b193b3JrZXJfY29uc2lkZXJfbmV3X3dvcmtlcih1aW50MzIgcXVldWVfZGVwdGgpCit7CisJLyoK KwkgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHNpdGVzIHRoYXQgZG9uJ3QgaG9sZCBBaW9Xb3JrZXJD b250cm9sTG9jaywgYnV0IGl0CisJICogY2hhbmdlcyBpbmZyZXF1ZW50bHkgYW5kIGFuIHVwIHRv IGRhdGUgdmFsdWUgaXMgbm90IHJlcXVpcmVkIGZvciB0aGlzCisJICogaGV1cmlzdGljIHB1cnBv c2UuCisJICovCisJaWYgKCFpb193b3JrZXJfY29udHJvbC0+bmV3X3dvcmtlcl9uZWVkZWQgJiYK KwkJcXVldWVfZGVwdGggPj0gaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKQorCXsKKwkJaW9f d29ya2VyX2NvbnRyb2wtPm5ld193b3JrZXJfbmVlZGVkID0gdHJ1ZTsKKwkJU2VuZFBvc3RtYXN0 ZXJTaWduYWwoUE1TSUdOQUxfSU9fV09SS0VSX0NIQU5HRSk7CiAJfQogfQogCisvKgorICogQ2Fs bGVkIGJ5IGEgd29ya2VyIHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LCB0byB0cnkgdG8gcHJldmVu dCBhIGRlbGF5ZWQKKyAqIHJlYWN0aW9uIHRvIGEgYnJpZWYgYnVyc3QuICBUaGlzIHJhY2VzIGFn YWluc3QgdGhlIHBvc3RtYXN0ZXIgYWN0aW5nIG9uIHRoZQorICogb2xkIHZhbHVlIGlmIGl0IHdh cyByZWNlbnRseSBzZXQgdG8gdHJ1ZSwgYnV0IHRoYXQncyBPSywgdGhlIG9yZGVyaW5nIHdvdWxk CisgKiBiZSBpbmRldGVybWluYXRlIGFueXdheSBldmVuIGlmIHdlIGNvdWxkIHVzZSBsb2NrcyBp biB0aGUgcG9zdG1hc3Rlci4KKyAqLworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl9jYW5jZWxf bmV3X3dvcmtlcih2b2lkKQoreworCWlvX3dvcmtlcl9jb250cm9sLT5uZXdfd29ya2VyX25lZWRl ZCA9IGZhbHNlOworfQorCisvKgorICogQ2FsbGVkIGJ5IHRoZSBwb3N0bWFzdGVyIHRvIGNoZWNr IGlmIGEgbmV3IHdvcmtlciBpcyBuZWVkZWQuCisgKi8KK2Jvb2wKK3BnYWlvX3dvcmtlcl90ZXN0 X25ld193b3JrZXJfbmVlZGVkKHZvaWQpCit7CisJcmV0dXJuIGlvX3dvcmtlcl9jb250cm9sLT5u ZXdfd29ya2VyX25lZWRlZDsKK30KKworLyoKKyAqIENhbGxlZCBieSB0aGUgcG9zdG1hc3RlciB0 byBjaGVjayBpZiBhIG5ldyB3b3JrZXIgaXMgbmVlZGVkIHdoZW4gaXQncyByZWFkeQorICogdG8g bGF1bmNoIG9uZSwgYW5kIGNsZWFyIHRoZSBmbGFnLgorICovCitib29sCitwZ2Fpb193b3JrZXJf Y2xlYXJfbmV3X3dvcmtlcl9uZWVkZWQodm9pZCkKK3sKKwlib29sCQlyZXN1bHQ7CisKKwlyZXN1 bHQgPSBpb193b3JrZXJfY29udHJvbC0+bmV3X3dvcmtlcl9uZWVkZWQ7CisJaWYgKHJlc3VsdCkK KwkJaW9fd29ya2VyX2NvbnRyb2wtPm5ld193b3JrZXJfbmVlZGVkID0gZmFsc2U7CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCitzdGF0aWMgdWludDY0CitwZ2Fpb193b3JrZXJfbWFzayhpbnQgd29y a2VyKQoreworCXJldHVybiBVSU5UNjRfQygxKSA8PCB3b3JrZXI7Cit9CisKK3N0YXRpYyB2b2lk CitwZ2Fpb193b3JrZXJfYWRkKHVpbnQ2NCAqc2V0LCBpbnQgd29ya2VyKQoreworCSpzZXQgfD0g cGdhaW9fd29ya2VyX21hc2sod29ya2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtl cl9yZW1vdmUodWludDY0ICpzZXQsIGludCB3b3JrZXIpCit7CisJKnNldCAmPSB+cGdhaW9fd29y a2VyX21hc2sod29ya2VyKTsKK30KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKK3N0YXRp YyBib29sCitwZ2Fpb193b3JrZXJfaW4odWludDY0IHNldCwgaW50IHdvcmtlcikKK3sKKwlyZXR1 cm4gKHNldCAmIHBnYWlvX3dvcmtlcl9tYXNrKHdvcmtlcikpICE9IDA7Cit9CisjZW5kaWYKKwor c3RhdGljIHVpbnQ2NAorcGdhaW9fd29ya2VyX2hpZ2hlc3QodWludDY0IHNldCkKK3sKKwlyZXR1 cm4gcGdfbGVmdG1vc3Rfb25lX3BvczY0KHNldCk7Cit9CisKK3N0YXRpYyB1aW50NjQKK3BnYWlv X3dvcmtlcl9sb3dlc3QodWludDY0IHNldCkKK3sKKwlyZXR1cm4gcGdfcmlnaHRtb3N0X29uZV9w b3M2NChzZXQpOworfQorCitzdGF0aWMgaW50CitwZ2Fpb193b3JrZXJfcG9wKHVpbnQ2NCAqc2V0 KQoreworCWludAkJCXdvcmtlcjsKKworCUFzc2VydChzZXQgIT0gMCk7CisJd29ya2VyID0gcGdh aW9fd29ya2VyX2xvd2VzdCgqc2V0KTsKKwlwZ2Fpb193b3JrZXJfcmVtb3ZlKHNldCwgd29ya2Vy KTsKKwlyZXR1cm4gd29ya2VyOworfQorCiBzdGF0aWMgaW50CiBwZ2Fpb193b3JrZXJfY2hvb3Nl X2lkbGUodm9pZCkKIHsKKwl1aW50NjQJCWlkbGVfd29ya2VyX21hc2s7CiAJaW50CQkJd29ya2Vy OwogCi0JaWYgKGlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrID09IDApCisJQXNz ZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExX X0VYQ0xVU0lWRSkpOworCisJLyoKKwkgKiBXb3JrZXJzIG9ubHkgd2FrZSBoaWdoZXIgbnVtYmVy ZWQgd29ya2VycywgdG8gdHJ5IHRvIGVuY291cmFnZSBhbgorCSAqIG9yZGVyaW5nIG9mIHdha2V1 cDp3b3JrIHJhdGlvcywgcmVkdWNpbmcgc3B1cmlvdXMgd2FrZXVwcyBpbiBsb3dlcgorCSAqIG51 bWJlcmVkIHdvcmtlcnMuCisJICovCisJaWRsZV93b3JrZXJfbWFzayA9IGlvX3dvcmtlcl9jb250 cm9sLT5pZGxlX3dvcmtlcl9tYXNrOworCWlmIChNeUlvV29ya2VySWQgIT0gLTEpCisJCWlkbGVf d29ya2VyX21hc2sgJj0gfihwZ2Fpb193b3JrZXJfbWFzayhNeUlvV29ya2VySWQpIC0gMSk7CisK KwlpZiAoaWRsZV93b3JrZXJfbWFzayA9PSAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBGaW5kIHRo ZSBsb3dlc3QgYml0IHBvc2l0aW9uLCBhbmQgY2xlYXIgaXQuICovCi0Jd29ya2VyID0gcGdfcmln aHRtb3N0X29uZV9wb3M2NChpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayk7Ci0J aW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgJj0gfihVSU5UNjRfQygxKSA8PCB3 b3JrZXIpOworCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9sb3dlc3QoaWRsZV93b3JrZXJfbWFzayk7 CisJcGdhaW9fd29ya2VyX3JlbW92ZSgmaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21h c2ssIHdvcmtlcik7CiAKIAlyZXR1cm4gd29ya2VyOwogfQogCisvKgorICogVHJ5IHRvIHdha2Ug YSB3b3JrZXIgYnkgc2V0dGluZyBpdHMgbGF0Y2gsIHRvIHRlbGwgaXQgdGhlcmUgYXJlIElPcyB0 bworICogcHJvY2VzcyBpbiB0aGUgc3VibWlzc2lvbiBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQK K3BnYWlvX3dvcmtlcl93YWtlKGludCB3b3JrZXIpCit7CisJUHJvY051bWJlcglwcm9jX251bWJl cjsKKworCS8qCisJICogSWYgdGhlIHNlbGVjdGVkIHdvcmtlciBpcyBjb25jdXJyZW50bHkgZXhp dGluZywgdGhlbiBwZ2Fpb193b3JrZXJfZGllKCkKKwkgKiBoYWQgbm90IHlldCByZW1vdmVkIGl0 IGFzIG9mIHdoZW4gd2Ugc2F3IGl0IGluIGlkbGVfd29ya2VyX21hc2suIFRoYXQncworCSAqIE9L LCBiZWNhdXNlIGl0IHdpbGwgd2FrZSBhbGwgcmVtYWluaW5nIHdvcmtlcnMgdG8gY2xvc2Ugd2Fr ZXVwLXZzLWV4aXQKKwkgKiByYWNlczogKnNvbWVvbmUqIHdpbGwgc2VlIHRoZSBxdWV1ZWQgSU8u ICBJZiB0aGVyZSBhcmUgbm8gd29ya2VycworCSAqIHJ1bm5pbmcsIHRoZSBwb3N0bWFzdGVyIHdp bGwgc3RhcnQgYSBuZXcgb25lLgorCSAqLworCXByb2NfbnVtYmVyID0gaW9fd29ya2VyX2NvbnRy b2wtPndvcmtlcnNbd29ya2VyXS5wcm9jX251bWJlcjsKKwlpZiAocHJvY19udW1iZXIgIT0gSU5W QUxJRF9QUk9DX05VTUJFUikKKwkJU2V0TGF0Y2goJkdldFBHUHJvY0J5TnVtYmVyKHByb2NfbnVt YmVyKS0+cHJvY0xhdGNoKTsKK30KKwogc3RhdGljIGJvb2wKIHBnYWlvX3dvcmtlcl9zdWJtaXNz aW9uX3F1ZXVlX2luc2VydChQZ0Fpb0hhbmRsZSAqaW9oKQogewogCVBnQWlvV29ya2VyU3VibWlz c2lvblF1ZXVlICpxdWV1ZTsKIAl1aW50MzIJCW5ld19oZWFkOwogCisJQXNzZXJ0KExXTG9ja0hl bGRCeU1lSW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSkp OworCiAJcXVldWUgPSBpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZTsKIAluZXdfaGVhZCA9IChx dWV1ZS0+aGVhZCArIDEpICYgKHF1ZXVlLT5zaXplIC0gMSk7CiAJaWYgKG5ld19oZWFkID09IHF1 ZXVlLT50YWlsKQpAQCAtMjAyLDYgKzM0OSw4IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1 ZXVlX2NvbnN1bWUodm9pZCkKIAlQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqcXVldWU7CiAJ dWludDMyCQlyZXN1bHQ7CiAKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQWlvV29ya2Vy U3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKSk7CisKIAlxdWV1ZSA9IGlvX3dvcmtl cl9zdWJtaXNzaW9uX3F1ZXVlOwogCWlmIChxdWV1ZS0+dGFpbCA9PSBxdWV1ZS0+aGVhZCkKIAkJ cmV0dXJuIFVJTlQzMl9NQVg7CQkvKiBlbXB0eSAqLwpAQCAtMjE4LDYgKzM2Nyw4IEBAIHBnYWlv X3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2RlcHRoKHZvaWQpCiAJdWludDMyCQloZWFkOwogCXVp bnQzMgkJdGFpbDsKIAorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShBaW9Xb3JrZXJTdWJt aXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKwogCWhlYWQgPSBpb193b3JrZXJfc3Vi bWlzc2lvbl9xdWV1ZS0+aGVhZDsKIAl0YWlsID0gaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUt PnRhaWw7CiAKQEAgLTI0Miw5ICszOTMsOSBAQCBzdGF0aWMgdm9pZAogcGdhaW9fd29ya2VyX3N1 Ym1pdF9pbnRlcm5hbChpbnQgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lv cykKIHsKIAlQZ0Fpb0hhbmRsZSAqc3luY2hyb25vdXNfaW9zW1BHQUlPX1NVQk1JVF9CQVRDSF9T SVpFXTsKKwl1aW50MzIJCXF1ZXVlX2RlcHRoOworCWludAkJCXdvcmtlciA9IC0xOwogCWludAkJ CW5zeW5jID0gMDsKLQlMYXRjaAkgICAqd2FrZXVwID0gTlVMTDsKLQlpbnQJCQl3b3JrZXI7CiAK IAlBc3NlcnQobnVtX3N0YWdlZF9pb3MgPD0gUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwogCkBA IC0yNTksNTEgKzQxMCw0OCBAQCBwZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBudW1f c3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCQkJICogd2UgY2FuIHRvIHdv cmtlcnMsIHRvIG1heGltaXplIGNvbmN1cnJlbmN5LgogCQkJICovCiAJCQlzeW5jaHJvbm91c19p b3NbbnN5bmMrK10gPSBzdGFnZWRfaW9zW2ldOwotCQkJY29udGludWU7CiAJCX0KLQotCQlpZiAo d2FrZXVwID09IE5VTEwpCisJCWVsc2UgaWYgKHdvcmtlciA9PSAtMSkKIAkJewogCQkJLyogQ2hv b3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LiAqLwog CQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCk7Ci0JCQlpZiAod29ya2VyID49 IDApCi0JCQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5sYXRj aDsKIAogCQkJcGdhaW9fZGVidWdfaW8oREVCVUc0LCBzdGFnZWRfaW9zW2ldLAogCQkJCQkJICAg ImNob29zaW5nIHdvcmtlciAlZCIsCiAJCQkJCQkgICB3b3JrZXIpOwogCQl9CiAJfQorCXF1ZXVl X2RlcHRoID0gcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfZGVwdGgoKTsKIAlMV0xvY2tS ZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2spOwogCi0JaWYgKHdha2V1cCkKLQkJ U2V0TGF0Y2god2FrZXVwKTsKKwlpZiAod29ya2VyICE9IC0xKQorCQlwZ2Fpb193b3JrZXJfd2Fr ZSh3b3JrZXIpOworCWVsc2UKKwkJcGdhaW9fd29ya2VyX2NvbnNpZGVyX25ld193b3JrZXIocXVl dWVfZGVwdGgpOwogCiAJLyogUnVuIHdoYXRldmVyIGlzIGxlZnQgc3luY2hyb25vdXNseS4gKi8K IAlmb3IgKGludCBpID0gMDsgaSA8IG5zeW5jOyArK2kpCiAJewotCQl3YWtldXAgPSBOVUxMOwot CiAJCS8qCiAJCSAqIEJldHdlZW4gc3luY2hyb25vdXMgSU8gb3BlcmF0aW9ucywgdHJ5IGFnYWlu IHRvIGVucXVldWUgYXMgbWFueSBhcwogCQkgKiB3ZSBjYW4uCiAJCSAqLwogCQlpZiAoaSA+IDAp CiAJCXsKLQkJCXdha2V1cCA9IE5VTEw7CisJCQl3b3JrZXIgPSAtMTsKIAogCQkJTFdMb2NrQWNx dWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwogCQkJd2hp bGUgKGkgPCBuc3luYyAmJgogCQkJCSAgIHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2lu c2VydChzeW5jaHJvbm91c19pb3NbaV0pKQogCQkJewotCQkJCWlmICh3YWtldXAgPT0gTlVMTCAm JiAod29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCkpID49IDApCi0JCQkJCXdha2V1 cCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7CisJCQkJaWYgKHdv cmtlciA9PSAtMSkKKwkJCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCk7CiAJ CQkJaSsrOwogCQkJfQogCQkJTFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVM b2NrKTsKIAotCQkJaWYgKHdha2V1cCkKLQkJCQlTZXRMYXRjaCh3YWtldXApOworCQkJaWYgKHdv cmtlciAhPSAtMSkKKwkJCQlwZ2Fpb193b3JrZXJfd2FrZSh3b3JrZXIpOwogCiAJCQlpZiAoaSA9 PSBuc3luYykKIAkJCQlicmVhazsKQEAgLTMzNSwxMyArNDgzLDI3IEBAIHBnYWlvX3dvcmtlcl9z dWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiBz dGF0aWMgdm9pZAogcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogewotCUxX TG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsK LQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5pbl91c2Up OwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNo ID09IE15TGF0Y2gpOworCXVpbnQ2NAkJbm90aWZ5X3NldDsKIAotCWlvX3dvcmtlcl9jb250cm9s LT53b3JrZXJzW015SW9Xb3JrZXJJZF0uaW5fdXNlID0gZmFsc2U7Ci0JaW9fd29ya2VyX2NvbnRy b2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5sYXRjaCA9IE5VTEw7CisJTFdMb2NrQWNxdWlyZShB aW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCXBnYWlvX3dvcmtl cl9yZW1vdmUoJmlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrLCBNeUlvV29ya2Vy SWQpOwogCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisKKwlM V0xvY2tBY3F1aXJlKEFpb1dvcmtlckNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOworCUFzc2Vy dChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLnByb2NfbnVtYmVyID09 IE15UHJvY051bWJlcik7CisJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklk XS5wcm9jX251bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisJQXNzZXJ0KHBnYWlvX3dvcmtl cl9pbihpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCwgTXlJb1dvcmtlcklkKSk7CisJcGdh aW9fd29ya2VyX3JlbW92ZSgmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQsIE15SW9Xb3Jr ZXJJZCk7CisJbm90aWZ5X3NldCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJfc2V0OworCUFz c2VydChpb193b3JrZXJfY29udHJvbC0+bndvcmtlcnMgPiAwKTsKKwlpb193b3JrZXJfY29udHJv bC0+bndvcmtlcnMtLTsKKwlBc3NlcnQocGdfcG9wY291bnQ2NChpb193b3JrZXJfY29udHJvbC0+ d29ya2VyX3NldCkgPT0KKwkJICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xv Y2tSZWxlYXNlKEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCS8qIE5vdGlmeSBvdGhlciB3b3Jr ZXJzIG9uIHBvb2wgY2hhbmdlLiAqLworCXdoaWxlIChub3RpZnlfc2V0ICE9IDApCisJCXBnYWlv X3dvcmtlcl93YWtlKHBnYWlvX3dvcmtlcl9wb3AoJm5vdGlmeV9zZXQpKTsKIH0KIAogLyoKQEAg LTM1MSwzMyArNTEzLDM3IEBAIHBnYWlvX3dvcmtlcl9kaWUoaW50IGNvZGUsIERhdHVtIGFyZykK IHN0YXRpYyB2b2lkCiBwZ2Fpb193b3JrZXJfcmVnaXN0ZXIodm9pZCkKIHsKLQlNeUlvV29ya2Vy SWQgPSAtMTsKKwl1aW50NjQJCXdvcmtlcl9zZXRfaW52ZXJ0ZWQ7CisJdWludDY0CQlvbGRfd29y a2VyX3NldDsKIAotCS8qCi0JICogWFhYOiBUaGlzIGNvdWxkIGRvIHdpdGggbW9yZSBmaW5lLWdy YWluZWQgbG9ja2luZy4gQnV0IGl0J3MgYWxzbyBub3QKLQkgKiB2ZXJ5IGNvbW1vbiBmb3IgdGhl IG51bWJlciBvZiB3b3JrZXJzIHRvIGNoYW5nZSBhdCB0aGUgbW9tZW50Li4uCi0JICovCi0JTFdM b2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwor CU15SW9Xb3JrZXJJZCA9IC0xOwogCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU9fV09SS0VS UzsgKytpKQorCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyQ29udHJvbExvY2ssIExXX0VYQ0xVU0lW RSk7CisJd29ya2VyX3NldF9pbnZlcnRlZCA9IH5pb193b3JrZXJfY29udHJvbC0+d29ya2VyX3Nl dDsKKwlpZiAod29ya2VyX3NldF9pbnZlcnRlZCAhPSAwKQogCXsKLQkJaWYgKCFpb193b3JrZXJf Y29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UpCi0JCXsKLQkJCUFzc2VydChpb193b3JrZXJfY29u dHJvbC0+d29ya2Vyc1tpXS5sYXRjaCA9PSBOVUxMKTsKLQkJCWlvX3dvcmtlcl9jb250cm9sLT53 b3JrZXJzW2ldLmluX3VzZSA9IHRydWU7Ci0JCQlNeUlvV29ya2VySWQgPSBpOwotCQkJYnJlYWs7 Ci0JCX0KLQkJZWxzZQotCQkJQXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW2ldLmxh dGNoICE9IE5VTEwpOworCQlNeUlvV29ya2VySWQgPSBwZ2Fpb193b3JrZXJfbG93ZXN0KHdvcmtl cl9zZXRfaW52ZXJ0ZWQpOworCQlpZiAoTXlJb1dvcmtlcklkID49IE1BWF9JT19XT1JLRVJTKQor CQkJTXlJb1dvcmtlcklkID0gLTE7CiAJfQotCiAJaWYgKE15SW9Xb3JrZXJJZCA9PSAtMSkKIAkJ ZWxvZyhFUlJPUiwgImNvdWxkbid0IGZpbmQgYSBmcmVlIHdvcmtlciBzbG90Iik7CiAKLQlpb193 b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayB8PSAoVUlOVDY0X0MoMSkgPDwgTXlJb1dv cmtlcklkKTsKLQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNo ID0gTXlMYXRjaDsKLQlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2sp OworCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLnByb2Nf bnVtYmVyID09CisJCSAgIElOVkFMSURfUFJPQ19OVU1CRVIpOworCWlvX3dvcmtlcl9jb250cm9s LT53b3JrZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1iZXIgPSBNeVByb2NOdW1iZXI7CisKKwlv bGRfd29ya2VyX3NldCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJfc2V0OworCUFzc2VydCgh cGdhaW9fd29ya2VyX2luKG9sZF93b3JrZXJfc2V0LCBNeUlvV29ya2VySWQpKTsKKwlwZ2Fpb193 b3JrZXJfYWRkKCZpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCwgTXlJb1dvcmtlcklkKTsK Kwlpb193b3JrZXJfY29udHJvbC0+bndvcmtlcnMrKzsKKwlBc3NlcnQocGdfcG9wY291bnQ2NChp b193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCkgPT0KKwkJICAgaW9fd29ya2VyX2NvbnRyb2wt Pm53b3JrZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCS8q IE5vdGlmeSBvdGhlciB3b3JrZXJzIG9uIHBvb2wgY2hhbmdlLiAqLworCXdoaWxlIChvbGRfd29y a2VyX3NldCAhPSAwKQorCQlwZ2Fpb193b3JrZXJfd2FrZShwZ2Fpb193b3JrZXJfcG9wKCZvbGRf d29ya2VyX3NldCkpOwogCiAJb25fc2htZW1fZXhpdChwZ2Fpb193b3JrZXJfZGllLCAwKTsKIH0K QEAgLTQwMywxNCArNTY5LDQ3IEBAIHBnYWlvX3dvcmtlcl9lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpCiAJZXJyY29udGV4dCgiSS9PIHdvcmtlciBleGVjdXRpbmcgSS9PIG9uIGJlaGFsZiBvZiBw cm9jZXNzICVkIiwgb3duZXJfcGlkKTsKIH0KIAorLyoKKyAqIENoZWNrIGlmIHRoaXMgYmFja2Vu ZCBpcyBhbGxvd2VkIHRvIHRpbWUgb3V0LCBhbmQgdGh1cyBzaG91bGQgdXNlIGEKKyAqIG5vbi1p bmZpbml0ZSBzbGVlcCB0aW1lLiAgT25seSB0aGUgaGlnaGVzdC1udW1iZXJlZCB3b3JrZXIgaXMg YWxsb3dlZCB0bworICogdGltZSBvdXQsIGFuZCBvbmx5IGlmIHRoZSBwb29sIGlzIGFib3ZlIGlv X21pbl93b3JrZXJzLiAgU2VyaWFsaXppbmcKKyAqIHRpbWVvdXRzIGtlZXBzIElEcyBpbiBhIHJh bmdlIDAuLk4gd2l0aG91dCBnYXBzLCBhbmQgYXZvaWRzIHVuZGVyc2hvb3RpbmcKKyAqIGlvX21p bl93b3JrZXJzLgorICoKKyAqIFRoZSByZXN1bHQgaXMgb25seSBpbnN0YW50YW5lb3VzbHkgdHJ1 ZSBhbmQgbWF5IGJlIHRlbXBvcmFyaWx5IGluY29uc2lzdGVudAorICogaW4gZGlmZmVyZW50IHdv cmtlcnMgYXJvdW5kIHRyYW5zaXRpb25zLCBidXQgYWxsIHdvcmtlcnMgYXJlIHdva2VuIHVwIG9u CisgKiBwb29sIHNpemUgb3IgR1VDIGNoYW5nZXMgbWFraW5nIHRoZSByZXN1bHQgZXZlbnR1YWxs eSBjb25zaXN0ZW50LgorICovCitzdGF0aWMgYm9vbAorcGdhaW9fd29ya2VyX2Nhbl90aW1lb3V0 KHZvaWQpCit7CisJdWludDY0CQl3b3JrZXJfc2V0OworCisJLyogU2VyaWFsaXplIGFnYWluc3Qg cG9vbCBzaXplZCBjaGFuZ2VzLiAqLworCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyQ29udHJvbExv Y2ssIExXX1NIQVJFRCk7CisJd29ya2VyX3NldCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJf c2V0OworCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyQ29udHJvbExvY2spOworCisJaWYgKE15SW9X b3JrZXJJZCAhPSBwZ2Fpb193b3JrZXJfaGlnaGVzdCh3b3JrZXJfc2V0KSkKKwkJcmV0dXJuIGZh bHNlOworCWlmIChNeUlvV29ya2VySWQgPCBpb19taW5fd29ya2VycykKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIHRydWU7Cit9CisKIHZvaWQKIElvV29ya2VyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewogCXNpZ2ptcF9idWYJbG9j YWxfc2lnam1wX2J1ZjsKKwlUaW1lc3RhbXBUeiBpZGxlX3RpbWVvdXRfYWJzID0gMDsKKwlpbnQJ CQl0aW1lb3V0X2d1Y191c2VkID0gMDsKIAlQZ0Fpb0hhbmRsZSAqdm9sYXRpbGUgZXJyb3JfaW9o ID0gTlVMTDsKIAlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjayA9IHswfTsKIAl2b2xh dGlsZSBpbnQgZXJyb3JfZXJybm8gPSAwOwogCWNoYXIJCWNtZFsxMjhdOworCWludAkJCWlvcyA9 IDA7CisJaW50CQkJd2FrZXVwcyA9IDA7CiAKIAlNeUJhY2tlbmRUeXBlID0gQl9JT19XT1JLRVI7 CiAJQXV4aWxpYXJ5UHJvY2Vzc01haW5Db21tb24oKTsKQEAgLTQ3OSw0NyArNjc4LDUzIEBAIElv V29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFf bGVuKQogCXdoaWxlICghU2h1dGRvd25SZXF1ZXN0UGVuZGluZykKIAl7CiAJCXVpbnQzMgkJaW9f aW5kZXg7Ci0JCUxhdGNoCSAgICpsYXRjaGVzW0lPX1dPUktFUl9XQUtFVVBfRkFOT1VUXTsKLQkJ aW50CQkJbmxhdGNoZXMgPSAwOwotCQlpbnQJCQlud2FrZXVwcyA9IDA7Ci0JCWludAkJCXdvcmtl cjsKKwkJdWludDMyCQlxdWV1ZV9kZXB0aDsKKwkJaW50CQkJd29ya2VyID0gLTE7CiAKIAkJLyog VHJ5IHRvIGdldCBhIGpvYiB0byBkby4gKi8KIAkJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJt aXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwotCQlpZiAoKGlvX2luZGV4ID0gcGdhaW9f d29ya2VyX3N1Ym1pc3Npb25fcXVldWVfY29uc3VtZSgpKSA9PSBVSU5UMzJfTUFYKQorCQlpb19p bmRleCA9IHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2NvbnN1bWUoKTsKKwkJcXVldWVf ZGVwdGggPSBwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9kZXB0aCgpOworCQlpZiAoaW9f aW5kZXggPT0gVUlOVDMyX01BWCkKIAkJewotCQkJLyoKLQkJCSAqIE5vdGhpbmcgdG8gZG8uICBN YXJrIHNlbGYgaWRsZS4KLQkJCSAqCi0JCQkgKiBYWFg6IEludmVudCBzb21lIGtpbmQgb2YgYmFj ayBwcmVzc3VyZSB0byByZWR1Y2UgdXNlbGVzcwotCQkJICogd2FrZXVwcz8KLQkJCSAqLwotCQkJ aW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgfD0gKFVJTlQ2NF9DKDEpIDw8IE15 SW9Xb3JrZXJJZCk7CisJCQkvKiBOb3RoaW5nIHRvIGRvLiAgTWFyayBzZWxmIGlkbGUuICovCisJ CQlwZ2Fpb193b3JrZXJfYWRkKCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzaywK KwkJCQkJCQkgTXlJb1dvcmtlcklkKTsKIAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIEdvdCBvbmUu ICBDbGVhciBpZGxlIGZsYWcuICovCi0JCQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJf bWFzayAmPSB+KFVJTlQ2NF9DKDEpIDw8IE15SW9Xb3JrZXJJZCk7CisJCQlwZ2Fpb193b3JrZXJf cmVtb3ZlKCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzaywKKwkJCQkJCQkJTXlJ b1dvcmtlcklkKTsKIAotCQkJLyogU2VlIGlmIHdlIGNhbiB3YWtlIHVwIHNvbWUgcGVlcnMuICov Ci0JCQlud2FrZXVwcyA9IE1pbihwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9kZXB0aCgp LAotCQkJCQkJICAgSU9fV09SS0VSX1dBS0VVUF9GQU5PVVQpOwotCQkJZm9yIChpbnQgaSA9IDA7 IGkgPCBud2FrZXVwczsgKytpKQotCQkJewotCQkJCWlmICgod29ya2VyID0gcGdhaW9fd29ya2Vy X2Nob29zZV9pZGxlKCkpIDwgMCkKLQkJCQkJYnJlYWs7Ci0JCQkJbGF0Y2hlc1tubGF0Y2hlcysr XSA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7Ci0JCQl9CisJCQkv KgorCQkJICogU2VlIGlmIHdlIHNob3VsZCB3YWtlIHVwIGEgcGVlci4gIE9ubHkgZG8gdGhpcyBp ZiB0aGlzIHdvcmtlcgorCQkJICogaXMgbm90IGV4cGVyaWVuY2luZyBzcHVyaW91cyB3YWtldXBz IGl0c2VsZiwgdG8gZW5kIGEgY2hhaW4gb2YKKwkJCSAqIHdhc3RlZCBzY2hlZHVsaW5nLgorCQkJ ICovCisJCQlpZiAocXVldWVfZGVwdGggPiAwICYmIHdha2V1cHMgPD0gaW9zKQorCQkJCXdvcmtl ciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpOwogCQl9CiAJCUxXTG9ja1JlbGVhc2UoQWlv V29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CiAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBubGF0 Y2hlczsgKytpKQotCQkJU2V0TGF0Y2gobGF0Y2hlc1tpXSk7CisJCS8qIFByb3BhZ2F0ZSB3YWtl dXBzLiAqLworCQlpZiAod29ya2VyICE9IC0xKQorCQkJcGdhaW9fd29ya2VyX3dha2Uod29ya2Vy KTsKKwkJZWxzZSBpZiAod2FrZXVwcyA8PSBpb3MpCisJCQlwZ2Fpb193b3JrZXJfY29uc2lkZXJf bmV3X3dvcmtlcihxdWV1ZV9kZXB0aCk7CiAKIAkJaWYgKGlvX2luZGV4ICE9IFVJTlQzMl9NQVgp CiAJCXsKIAkJCVBnQWlvSGFuZGxlICppb2ggPSBOVUxMOwogCisJCQkvKiBDYW5jZWwgdGltZW91 dCBhbmQgdXBkYXRlIHdha2V1cDp3b3JrIHJhdGlvLiAqLworCQkJaWRsZV90aW1lb3V0X2FicyA9 IDA7CisJCQlpZiAoKytpb3MgPT0gUEdBSU9fV09SS0VSX1NUQVRTX01BWCkKKwkJCXsKKwkJCQlp b3MgLz0gMjsKKwkJCQl3YWtldXBzIC89IDI7CisJCQl9CisKIAkJCWlvaCA9ICZwZ2Fpb19jdGwt PmlvX2hhbmRsZXNbaW9faW5kZXhdOwogCQkJZXJyb3JfaW9oID0gaW9oOwogCQkJZXJyY2FsbGJh Y2suYXJnID0gaW9oOwpAQCAtNTg1LDEyICs3OTAsODMgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZv aWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCX0KIAkJZWxzZQog CQl7Ci0JCQlXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwgLTEsCi0JCQkJCSAgV0FJVF9FVkVOVF9JT19XT1JLRVJfTUFJTik7CisJCQlpbnQJCQl0 aW1lb3V0X21zOworCisJCQkvKiBDYW5jZWwgbmV3IHdvcmtlciBpZiBwZW5kaW5nLiAqLworCQkJ cGdhaW9fd29ya2VyX2NhbmNlbF9uZXdfd29ya2VyKCk7CisKKwkJCS8qIENvbXB1dGUgdGhlIHJl bWFpbmluZyBhbGxvd2VkIGlkbGUgdGltZS4gKi8KKwkJCWlmIChpb193b3JrZXJfaWRsZV90aW1l b3V0ID09IC0xKQorCQkJeworCQkJCS8qIE5ldmVyIHRpbWUgb3V0LiAqLworCQkJCXRpbWVvdXRf bXMgPSAtMTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlUaW1lc3RhbXBUeiBub3cgPSBHZXRD dXJyZW50VGltZXN0YW1wKCk7CisKKwkJCQkvKiBJZiB0aGUgR1VDIGNoYW5nZXMsIHJlc2V0IHRp bWVyLiAqLworCQkJCWlmIChpZGxlX3RpbWVvdXRfYWJzICE9IDAgJiYKKwkJCQkJaW9fd29ya2Vy X2lkbGVfdGltZW91dCAhPSB0aW1lb3V0X2d1Y191c2VkKQorCQkJCQlpZGxlX3RpbWVvdXRfYWJz ID0gMDsKKworCQkJCS8qIE9uIGZpcnN0IHNsZWVwLCBjb21wdXRlIGFic29sdXRlIHRpbWVvdXQu ICovCisJCQkJaWYgKGlkbGVfdGltZW91dF9hYnMgPT0gMCkKKwkJCQl7CisJCQkJCWlkbGVfdGlt ZW91dF9hYnMgPQorCQkJCQkJVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKG5vdywKKwkJCQkJ CQkJCQkJCQlpb193b3JrZXJfaWRsZV90aW1lb3V0KTsKKwkJCQkJdGltZW91dF9ndWNfdXNlZCA9 IGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBBbGwgd29y a2VycyBtYWludGFpbiB0aGUgYWJzb2x1dGUgdGltZW91dCB2YWx1ZSwgYnV0IG9ubHkKKwkJCQkg KiB0aGUgaGlnaGVzdCB3b3JrZXIgY2FuIGFjdHVhbGx5IHRpbWUgb3V0IGFuZCBvbmx5IGlmCisJ CQkJICogaW9fbWluX3dvcmtlcnMgaXMgZXhjZWVkZWQuICBBbGwgb3RoZXJzIHdhaXQgb25seSBm b3IKKwkJCQkgKiBleHBsaWNpdCB3YWtldXBzIGNhdXNlZCBieSBxdWV1ZSBpbnNlcnRpb24sIHdh a2V1cAorCQkJCSAqIHByb3BhZ2F0aW9uLCBjaGFuZ2Ugb2YgcG9vbCBzaXplIChwb3NzaWJseSBt YWtpbmcgdGhlbQorCQkJCSAqIGhpZ2hlc3QpLCBvciBHVUMgcmVsb2FkLgorCQkJCSAqLworCQkJ CWlmIChwZ2Fpb193b3JrZXJfY2FuX3RpbWVvdXQoKSkKKwkJCQkJdGltZW91dF9tcyA9CisJCQkJ CQlUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKG5vdywKKwkJCQkJCQkJCQkJCQkJaWRs ZV90aW1lb3V0X2Ficyk7CisJCQkJZWxzZQorCQkJCQl0aW1lb3V0X21zID0gLTE7CisJCQl9CisK KwkJCWlmIChXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCB8IFdMX1RJTUVPVVQsCisJCQkJCQkgIHRpbWVvdXRfbXMsCisJCQkJCQkgIFdBSVRfRVZF TlRfSU9fV09SS0VSX01BSU4pID09IFdMX1RJTUVPVVQpCisJCQl7CisJCQkJLyogV0xfVElNRU9V VCAqLworCQkJCWlmIChwZ2Fpb193b3JrZXJfY2FuX3RpbWVvdXQoKSkKKwkJCQkJaWYgKEdldEN1 cnJlbnRUaW1lc3RhbXAoKSA+PSBpZGxlX3RpbWVvdXRfYWJzKQorCQkJCQkJYnJlYWs7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJLyogV0xfTEFUQ0hfU0VUICovCisJCQkJaWYgKCsrd2FrZXVw cyA9PSBQR0FJT19XT1JLRVJfU1RBVFNfTUFYKQorCQkJCXsKKwkJCQkJaW9zIC89IDI7CisJCQkJ CXdha2V1cHMgLz0gMjsKKwkJCQl9CisJCQl9CiAJCQlSZXNldExhdGNoKE15TGF0Y2gpOwogCQl9 CiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGlu ZykKKwkJeworCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQkJUHJvY2Vzc0NvbmZp Z0ZpbGUoUEdDX1NJR0hVUCk7CisKKwkJCS8qIElmIGlvX21heF93b3JrZXJzIGhhcyBiZWVuIGRl Y3JlYXNlZCwgZXhpdCBoaWdoZXN0IGZpcnN0LiAqLworCQkJaWYgKE15SW9Xb3JrZXJJZCA+PSBp b19tYXhfd29ya2VycykKKwkJCQlicmVhazsKKwkJfQogCX0KIAogCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggOTMwMzIxOTA1ZjEuLjA2N2EzYTFiYjIxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApA QCAtMzUzLDYgKzM1Myw3IEBAIERTTVJlZ2lzdHJ5CSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRl IHRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgcmVnaXN0cnkuIgogSW5qZWN0aW9uUG9pbnQJIldh aXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBpbmplY3Rpb24g cG9pbnRzLiIKIFNlcmlhbENvbnRyb2wJIldhaXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgc2hhcmVk IDxmaWxlbmFtZT5wZ19zZXJpYWw8L2ZpbGVuYW1lPiBzdGF0ZS4iCiBBaW9Xb3JrZXJTdWJtaXNz aW9uUXVldWUJIldhaXRpbmcgdG8gYWNjZXNzIEFJTyB3b3JrZXIgc3VibWlzc2lvbiBxdWV1ZS4i CitBaW9Xb3JrZXJDb250cm9sCSJXYWl0aW5nIHRvIHVwZGF0ZSBBSU8gd29ya2VyIGluZm9ybWF0 aW9uLiIKIAogIwogIyBFTkQgT0YgUFJFREVGSU5FRCBMV0xPQ0tTIChETyBOT1QgQ0hBTkdFIFRI SVMgTElORSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNjBiMTI0NDZhMWMu LmJiYjg4NTViMTJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMzMwNiwx NCArMzMwNiw1MiBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAl9 LAogCiAJewotCQl7ImlvX3dvcmtlcnMiLAorCQl7ImlvX21heF93b3JrZXJzIiwKIAkJCVBHQ19T SUdIVVAsCiAJCQlSRVNPVVJDRVNfSU8sCi0JCQlnZXR0ZXh0X25vb3AoIk51bWJlciBvZiBJTyB3 b3JrZXIgcHJvY2Vzc2VzLCBmb3IgaW9fbWV0aG9kPXdvcmtlci4iKSwKKwkJCWdldHRleHRfbm9v cCgiTWF4aW11bSBudW1iZXIgb2YgSU8gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13 b3JrZXIuIiksCiAJCQlOVUxMLAogCQl9LAotCQkmaW9fd29ya2VycywKLQkJMywgMSwgTUFYX0lP X1dPUktFUlMsCisJCSZpb19tYXhfd29ya2VycywKKwkJOCwgMSwgTUFYX0lPX1dPUktFUlMsCisJ CU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7ImlvX21pbl93b3JrZXJzIiwKKwkJCVBH Q19TSUdIVVAsCisJCQlSRVNPVVJDRVNfSU8sCisJCQlnZXR0ZXh0X25vb3AoIk1pbmltdW0gbnVt YmVyIG9mIElPIHdvcmtlciBwcm9jZXNzZXMsIGZvciBpb19tZXRob2Q9d29ya2VyLiIpLAorCQkJ TlVMTCwKKwkJfSwKKwkJJmlvX21pbl93b3JrZXJzLAorCQkxLCAxLCBNQVhfSU9fV09SS0VSUywK KwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsiaW9fd29ya2VyX2lkbGVfdGltZW91 dCIsCisJCQlQR0NfU0lHSFVQLAorCQkJUkVTT1VSQ0VTX0lPLAorCQkJZ2V0dGV4dF9ub29wKCJN YXhpbXVtIGlkbGUgdGltZSBiZWZvcmUgSU8gd29ya2VycyBleGl0LCBmb3IgaW9fbWV0aG9kPXdv cmtlci4iKSwKKwkJCU5VTEwsCisJCQlHVUNfVU5JVF9NUworCQl9LAorCQkmaW9fd29ya2VyX2lk bGVfdGltZW91dCwKKwkJNjAgKiAxMDAwLCAtMSwgSU5UX01BWCwKKwkJTlVMTCwgTlVMTCwgTlVM TAorCX0sCisKKwl7CisJCXsiaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCIsCisJCQlQR0NfU0lH SFVQLAorCQkJUkVTT1VSQ0VTX0lPLAorCQkJZ2V0dGV4dF9ub29wKCJNYXhpbXVtIGlkbGUgdGlt ZSBiZXR3ZWVuIGxhdW5jaGluZyBJTyB3b3JrZXJzLCBmb3IgaW9fbWV0aG9kPXdvcmtlci4iKSwK KwkJCU5VTEwsCisJCQlHVUNfVU5JVF9NUworCQl9LAorCQkmaW9fd29ya2VyX2xhdW5jaF9pbnRl cnZhbCwKKwkJNTAwLCAwLCBJTlRfTUFYLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDM0ODI2 ZDAxMzgwLi40MzcwZjY3MzgyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZQpAQCAtMjE0LDcgKzIxNCwxMCBAQAogCQkJCQkjIGNhbiBleGVjdXRl IHNpbXVsdGFuZW91c2x5CiAJCQkJCSMgLTEgc2V0cyBiYXNlZCBvbiBzaGFyZWRfYnVmZmVycwog CQkJCQkjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKLSNpb193b3JrZXJzID0gMwkJCQkjIDEt MzI7CisjaW9fbWluX3dvcmtlcnMgPSAxCQkJIyAxLTMyOworI2lvX21heF93b3JrZXJzID0gOAkJ CSMgMS0zMjsKKyNpb193b3JrZXJfaWRsZV90aW1lb3V0ID0gNjBzCQkjIG1pbiAxMDBtcworI2lv X3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwgPSA1MDBtcwkjIG1pbiAwbXMKIAogIyAtIFdvcmtlciBQ cm9jZXNzZXMgLQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9pb193b3JrZXIuaAppbmRleCA3YmRlN2U4OWM4YS4uZGU5 YzgwMTA5ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29ya2VyLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9pb193b3JrZXIuaApAQCAtMTcsNiArMTcsMTMgQEAKIAog cGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pOwogCi1leHRlcm4gUEdETExJTVBPUlQgaW50 IGlvX3dvcmtlcnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX21pbl93b3JrZXJzOworZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBpb19tYXhfd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9SVCBp bnQgaW9fd29ya2VyX2lkbGVfdGltZW91dDsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fd29y a2VyX2xhdW5jaF9pbnRlcnZhbDsKKworLyogSW50ZXJmYWNlcyB2aXNpYmxlIHRvIHRoZSBwb3N0 bWFzdGVyLiAqLworZXh0ZXJuIGJvb2wgcGdhaW9fd29ya2VyX3Rlc3RfbmV3X3dvcmtlcl9uZWVk ZWQodm9pZCk7CitleHRlcm4gYm9vbCBwZ2Fpb193b3JrZXJfY2xlYXJfbmV3X3dvcmtlcl9uZWVk ZWQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBJT19XT1JLRVJfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3 bG9ja2xpc3QuaAppbmRleCBhOTY4MTczODE0Ni4uYzE4MDFkMDg4MzMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv bHdsb2NrbGlzdC5oCkBAIC04NCwzICs4NCw0IEBAIFBHX0xXTE9DSyg1MCwgRFNNUmVnaXN0cnkp CiBQR19MV0xPQ0soNTEsIEluamVjdGlvblBvaW50KQogUEdfTFdMT0NLKDUyLCBTZXJpYWxDb250 cm9sKQogUEdfTFdMT0NLKDUzLCBBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUpCitQR19MV0xPQ0so NTQsIEFpb1dvcmtlckNvbnRyb2wpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Bt c2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKaW5kZXggNjdmYTlhYzA2 ZTEuLjEwYTk2N2Y2NzM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCkBAIC0zOCw2ICszOCw3IEBA IHR5cGVkZWYgZW51bQogCVBNU0lHTkFMX1JPVEFURV9MT0dGSUxFLAkvKiBzZW5kIFNJR1VTUjEg dG8gc3lzbG9nZ2VyIHRvIHJvdGF0ZSBsb2dmaWxlICovCiAJUE1TSUdOQUxfU1RBUlRfQVVUT1ZB Q19MQVVOQ0hFUiwJLyogc3RhcnQgYW4gYXV0b3ZhY3V1bSBsYXVuY2hlciAqLwogCVBNU0lHTkFM X1NUQVJUX0FVVE9WQUNfV09SS0VSLAkvKiBzdGFydCBhbiBhdXRvdmFjdXVtIHdvcmtlciAqLwor CVBNU0lHTkFMX0lPX1dPUktFUl9DSEFOR0UsCS8qIElPIHdvcmtlciBwb29sIGNoYW5nZSAqLwog CVBNU0lHTkFMX0JBQ0tHUk9VTkRfV09SS0VSX0NIQU5HRSwJLyogYmFja2dyb3VuZCB3b3JrZXIg c3RhdGUgY2hhbmdlICovCiAJUE1TSUdOQUxfU1RBUlRfV0FMUkVDRUlWRVIsIC8qIHN0YXJ0IGEg d2FscmVjZWl2ZXIgKi8KIAlQTVNJR05BTF9BRFZBTkNFX1NUQVRFX01BQ0hJTkUsIC8qIGFkdmFu Y2UgcG9zdG1hc3RlcidzIHN0YXRlIG1hY2hpbmUgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9haW8vdC8wMDJfaW9fd29ya2Vycy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDJfaW9fd29ya2Vycy5wbAppbmRleCBhZjVmYWUxNWVhNy4uYTAyNTI4NTc3OTgg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDJfaW9fd29ya2Vycy5w bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwKQEAg LTE0LDYgKzE0LDkgQEAgJG5vZGUtPmluaXQoKTsKICRub2RlLT5hcHBlbmRfY29uZigKIAkncG9z dGdyZXNxbC5jb25mJywgcXEoCiBpb19tZXRob2Q9d29ya2VyCitpb193b3JrZXJfaWRsZV90aW1l b3V0PTBtcworaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbD0wbXMKK2lvX21heF93b3JrZXJzPTMy CiApKTsKIAogJG5vZGUtPnN0YXJ0KCk7CkBAIC0zMSw3ICszNCw3IEBAIHN1YiB0ZXN0X251bWJl cl9vZl9pb193b3JrZXJzX2R5bmFtaWMKIHsKIAlteSAkbm9kZSA9IHNoaWZ0OwogCi0JbXkgJHBy ZXZfd29ya2VyX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0hPVyBpb193 b3JrZXJzJyk7CisJbXkgJHByZXZfd29ya2VyX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAnU0hPVyBpb19taW5fd29ya2VycycpOwogCiAJIyBWZXJpZnkgdGhhdCB3b3JrZXIg Y291bnQgY2FuJ3QgYmUgc2V0IHRvIDAKIAljaGFuZ2VfbnVtYmVyX29mX2lvX3dvcmtlcnMoJG5v ZGUsIDAsICRwcmV2X3dvcmtlcl9jb3VudCwgMSk7CkBAIC02MiwyMyArNjUsMjMgQEAgc3ViIGNo YW5nZV9udW1iZXJfb2ZfaW9fd29ya2VycwogCW15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJy KTsKIAogCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9Ci0JICAkbm9kZS0+cHNxbCgncG9z dGdyZXMnLCAiQUxURVIgU1lTVEVNIFNFVCBpb193b3JrZXJzID0gJHdvcmtlcl9jb3VudCIpOwor CSAgJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFNZU1RFTSBTRVQgaW9fbWluX3dvcmtl cnMgPSAkd29ya2VyX2NvdW50Iik7CiAJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VM RUNUIHBnX3JlbG9hZF9jb25mKCknKTsKIAogCWlmICgkZXhwZWN0X2ZhaWx1cmUpCiAJewogCQlv ayggJHN0ZGVyciA9fgotCQkJICAvJHdvcmtlcl9jb3VudCBpcyBvdXRzaWRlIHRoZSB2YWxpZCBy YW5nZSBmb3IgcGFyYW1ldGVyICJpb193b3JrZXJzIi8sCi0JCQkidXBkYXRpbmcgbnVtYmVyIG9m IGlvX3dvcmtlcnMgdG8gJHdvcmtlcl9jb3VudCBmYWlsZWQsIGFzIGV4cGVjdGVkIgorCQkJICAv JHdvcmtlcl9jb3VudCBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZSBmb3IgcGFyYW1ldGVyICJp b19taW5fd29ya2VycyIvLAorCQkJInVwZGF0aW5nIG51bWJlciBvZiBpb19taW5fd29ya2VycyB0 byAkd29ya2VyX2NvdW50IGZhaWxlZCwgYXMgZXhwZWN0ZWQiCiAJCSk7CiAKIAkJcmV0dXJuICRw cmV2X3dvcmtlcl9jb3VudDsKIAl9CiAJZWxzZQogCXsKLQkJaXMoICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NIT1cgaW9fd29ya2VycycpLAorCQlpcyggJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAnU0hPVyBpb19taW5fd29ya2VycycpLAogCQkJJHdvcmtlcl9jb3VudCwKLQkJ CSJ1cGRhdGluZyBudW1iZXIgb2YgaW9fd29ya2VycyBmcm9tICRwcmV2X3dvcmtlcl9jb3VudCB0 byAkd29ya2VyX2NvdW50IgorCQkJInVwZGF0aW5nIG51bWJlciBvZiBpb19taW5fd29ya2VycyBm cm9tICRwcmV2X3dvcmtlcl9jb3VudCB0byAkd29ya2VyX2NvdW50IgogCQkpOwogCiAJCWNoZWNr X2lvX3dvcmtlcl9jb3VudCgkbm9kZSwgJHdvcmtlcl9jb3VudCk7Ci0tIAoyLjM5LjUKCg== --000000000000b0ce4a063297c1e4 Content-Type: text/x-patch; charset="US-ASCII"; name="0005-XXX-read_buffer_loop.patch" Content-Disposition: attachment; filename="0005-XXX-read_buffer_loop.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9egdc1k4 RnJvbSA0M2ZlYTQ4ZjVmNmU5YjMzMDFhMDIxNmYwNDAyYjI1NTg4NjJkNjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgNSBBcHIgMjAyNSAxMToxNDoyNiArMTMwMApTdWJqZWN0OiBbUEFUQ0ggNS81 XSBYWFggcmVhZF9idWZmZXJfbG9vcAoKc2VsZWN0IHJlYWRfYnVmZmVyX2xvb3Aobikgd2l0aCBk aWZmZXJlbnQgdmFsdWVzIG9mIG4gaW4gZWFjaApzZXNzaW9uIHRvIHRlc3QgbGF0ZW5jeSBvZiBy ZWFkaW5nIG9uZSBibG9jay4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlv LS0xLjAuc3FsIHwgIDQgKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAg ICAgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNjMgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9h aW8tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3Fs CmluZGV4IGU0OTU0ODFjNDFlLi5jMzdiMzhhZmNiMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC0xMDYsMyArMTA2LDcgQEAgQVMgJ01PRFVMRV9Q QVRITkFNRScgTEFOR1VBR0UgQzsKIENSRUFURSBGVU5DVElPTiBpbmpfaW9fcmVvcGVuX2RldGFj aCgpCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiByZWFkX2J1ZmZlcl9sb29wKGJsb2NrIGlu dCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScg TEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9h aW8uYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwppbmRleCAxZDc3NjAx MGVmNC4uMjY1NDMwMmExM2MgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8v dGVzdF9haW8uYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKQEAg LTE4LDYgKzE4LDggQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlIDxtYXRo Lmg+CisKICNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJmbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9haW8uaCIKQEAgLTI3LDYgKzI5LDcgQEAKICNpbmNsdWRlICJzdG9y YWdlL2NoZWNrc3VtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9y YWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJlYW0uaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtODA2LDMgKzgwOSw1OSBAQCBpbmpfaW9fcmVvcGVu X2RldGFjaChQR19GVU5DVElPTl9BUkdTKQogI2VuZGlmCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0K Kworc3RhdGljIEJsb2NrTnVtYmVyCit6ZXJvX2NhbGxiYWNrKFJlYWRTdHJlYW0gKnN0cmVhbSwg dm9pZCAqdXNlcl9kYXRhLCB2b2lkICpwYmQpCit7CisJcmV0dXJuICooQmxvY2tOdW1iZXIgKikg dXNlcl9kYXRhOworfQorCitQR19GVU5DVElPTl9JTkZPX1YxKHJlYWRfYnVmZmVyX2xvb3ApOwor RGF0dW0KK3JlYWRfYnVmZmVyX2xvb3AoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCbG9ja051bWJl ciBibG9jayA9IFBHX0dFVEFSR19VSU5UMzIoMCk7CisJUmVsYXRpb24JcmVsOworCVJlYWRTdHJl YW0gKnN0cmVhbTsKKwlCdWZmZXIJCWJ1ZmZlcjsKKwlUaW1lc3RhbXBUeiBzdGFydDsKKworCXJl bCA9IHJlbGF0aW9uX29wZW4oVHlwZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJc3Ry ZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oMCwgTlVMTCwgcmVsLCBNQUlOX0ZPUktO VU0sIHplcm9fY2FsbGJhY2ssICZibG9jaywgMCk7CisJZm9yIChpbnQgbG9vcCA9IDA7IGxvb3Ag PCAxMDsgbG9vcCsrKQorCXsKKwkJZG91YmxlCQlzYW1wbGVzWzI1MDAwXTsKKwkJZG91YmxlCQlh dmcgPSAwOworCQlkb3VibGUJCXN1bSA9IDA7CisJCWRvdWJsZQkJdmFyID0gMDsKKwkJZG91Ymxl CQlkZXY7CisJCWRvdWJsZQkJc3RkZGV2OworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro b2Yoc2FtcGxlcyk7ICsraSkKKwkJeworCQkJYm9vbCBmbHVzaGVkOworCisJCQlzdGFydCA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJCWJ1ZmZlciA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVy KHN0cmVhbSwgTlVMTCk7CisJCQlzYW1wbGVzW2ldID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpIC0g c3RhcnQ7CisJCQlzdW0gKz0gc2FtcGxlc1tpXTsKKworCQkJUmVsZWFzZUJ1ZmZlcihidWZmZXIp OworCQkJcmVhZF9zdHJlYW1fcmVzZXQoc3RyZWFtKTsKKwkJCUV2aWN0VW5waW5uZWRCdWZmZXIo YnVmZmVyLCAmZmx1c2hlZCk7CisJCX0KKwkJYXZnID0gc3VtIC8gbGVuZ3Rob2Yoc2FtcGxlcyk7 CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Rob2Yoc2FtcGxlcyk7IGkrKykKKwkJeworCQkJ ZGV2ID0gc2FtcGxlc1tpXSAtIGF2ZzsKKwkJCXZhciArPSBkZXYgKiBkZXY7CisJCX0KKwkJc3Rk ZGV2ID0gc3FydCh2YXIgLyBsZW5ndGhvZihzYW1wbGVzKSk7CisKKwkJZWxvZyhOT1RJQ0UsICJu ID0gJXp1LCBhdmcgPSAlLjFmdXMsIHN0ZGRldiA9ICUuMWYiLCBsZW5ndGhvZihzYW1wbGVzKSwg YXZnLCBzdGRkZXYpOworCX0KKwlyZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKwlyZWxhdGlvbl9j bG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQotLSAK Mi4zOS41Cgo= --000000000000b0ce4a063297c1e4--