[libre-riscv-dev] Fwd: multi-way LOAD/STORE buffers and misalignment
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 24 Mar 2020 16:05:16 +0000 (16:05 +0000)
committerlibre-riscv-dev <libre-riscv-dev@lists.libre-riscv.org>
Tue, 24 Mar 2020 16:05:50 +0000 (16:05 +0000)
aa/4e696ee3391c2bf3c379e79ed973da67eb310e [new file with mode: 0644]

diff --git a/aa/4e696ee3391c2bf3c379e79ed973da67eb310e b/aa/4e696ee3391c2bf3c379e79ed973da67eb310e
new file mode 100644 (file)
index 0000000..1730318
--- /dev/null
@@ -0,0 +1,182 @@
+Return-path: <libre-riscv-dev-bounces@lists.libre-riscv.org>
+Envelope-to: publicinbox@libre-riscv.org
+Delivery-date: Tue, 24 Mar 2020 16:05:50 +0000
+Received: from localhost ([::1] helo=libre-riscv.org)
+       by libre-riscv.org with esmtp (Exim 4.89)
+       (envelope-from <libre-riscv-dev-bounces@lists.libre-riscv.org>)
+       id 1jGm3q-0004U7-CT; Tue, 24 Mar 2020 16:05:50 +0000
+Received: from lkcl.net ([217.147.94.29])
+ by libre-riscv.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
+ (Exim 4.89) (envelope-from <lkcl@lkcl.net>) id 1jGm3o-0004U1-P2
+ for libre-riscv-dev@lists.libre-riscv.org; Tue, 24 Mar 2020 16:05:48 +0000
+DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lkcl.net;
+ s=201607131; 
+ h=Content-Type:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version;
+ bh=/vYjM3WcKB2HS/8yHM9GETPVFDNFRNIGM+qcBIrFEds=; 
+ b=Ji3SODVzzk0qn/aFdUdMNRSUI3oU0k6rmlNHDMm6qNNjZc/Vd/rKZj7o2hxCdi/5DzzLnahP7BjOH7a5OpDzYESoGwUNVlnLbD/xSlJZIxjXVtLX1TFWgKkYA67VxCf8bSftPnPrd3rbJ0n7+rvGwPPZrt18ilO1zILdjGWR0Iw=;
+Received: from mail-lf1-f54.google.com ([209.85.167.54])
+ by lkcl.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
+ (Exim 4.84_2) (envelope-from <lkcl@lkcl.net>) id 1jGm3o-0006TX-DL
+ for libre-riscv-dev@lists.libre-riscv.org; Tue, 24 Mar 2020 16:05:48 +0000
+Received: by mail-lf1-f54.google.com with SMTP id j17so13694249lfe.7
+ for <libre-riscv-dev@lists.libre-riscv.org>;
+ Tue, 24 Mar 2020 09:05:32 -0700 (PDT)
+X-Gm-Message-State: ANhLgQ3Ov2xf7rr1dKB9/7fnXxTn4WZyFCg6zPTLC/25+DDUg5lKu3lg
+ ZtNEECD6E8ot93rftSpZznxfN9uTkfIVD90ApK4=
+X-Google-Smtp-Source: ADFU+vsS5Ckwa/lzQKHAaLArjLrcyDQz7dRHOenZfsmceuq1KEr2aaCcSqQq+AlabsiYGb5A5ASGVHs3NzM8ZoTcpas=
+X-Received: by 2002:a19:a93:: with SMTP id 141mr8176743lfk.107.1585065927308; 
+ Tue, 24 Mar 2020 09:05:27 -0700 (PDT)
+MIME-Version: 1.0
+References: <69ea9c9d-431c-4b76-ad86-a8eec897ab44@googlegroups.com>
+ <7dcb89ad-c6b2-43dc-8ea9-e72342a2719b@googlegroups.com>
+In-Reply-To: <7dcb89ad-c6b2-43dc-8ea9-e72342a2719b@googlegroups.com>
+From: Luke Kenneth Casson Leighton <lkcl@lkcl.net>
+Date: Tue, 24 Mar 2020 16:05:16 +0000
+X-Gmail-Original-Message-ID: <CAPweEDzMvPvJ7oEfDC1r3eTVZY0KhP_7hkT7+mKisqzK7NKJ7g@mail.gmail.com>
+Message-ID: <CAPweEDzMvPvJ7oEfDC1r3eTVZY0KhP_7hkT7+mKisqzK7NKJ7g@mail.gmail.com>
+To: Libre-RISCV General Development <libre-riscv-dev@lists.libre-riscv.org>, 
+ Staf Verhaegen <staf@fibraservi.eu>
+Subject: [libre-riscv-dev] Fwd: multi-way LOAD/STORE buffers and misalignment
+X-BeenThere: libre-riscv-dev@lists.libre-riscv.org
+X-Mailman-Version: 2.1.23
+Precedence: list
+List-Id: Libre-RISCV General Development
+ <libre-riscv-dev.lists.libre-riscv.org>
+List-Unsubscribe: <http://lists.libre-riscv.org/mailman/options/libre-riscv-dev>, 
+ <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=unsubscribe>
+List-Archive: <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/>
+List-Post: <mailto:libre-riscv-dev@lists.libre-riscv.org>
+List-Help: <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=help>
+List-Subscribe: <http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev>, 
+ <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=subscribe>
+Reply-To: Libre-RISCV General Development
+ <libre-riscv-dev@lists.libre-riscv.org>
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org
+Sender: "libre-riscv-dev" <libre-riscv-dev-bounces@lists.libre-riscv.org>
+
+c3RhZiwgaGksIHRoaXMgY2FtZSBpbiBmcm9tIG1pdGNoIGFsc3VwLCBmcm9tIGNvbXAuYXJjaC4K
+CnRoZSBMMSBjYWNoZSBtZW1vcnkgU1JBTSB0aGF0IHlvdSBhcmUgZG9pbmc6IGlzIGl0LCBhcyBN
+aXRjaCBzdWdnZXN0cywKMVIgKm9yKiAxVywgYW5kIHRodXMgc2luZ2xlLWNsb2NrLWN5Y2xlPyAg
+aSBnYXRoZXIgZnJvbSB3aGF0IGhlJ3MKc2F5aW5nIHRoYXQgaWYgeW91IGhhdmUgYSAxUjFXIFNS
+QU0sIHRoYXQgZWZmZWN0aXZlbHkgbmVlZHMgMiBjbG9jawpjeWNsZXMgdG8gYWNjZXNzLgoKbC4K
+Ci0tLQpjcm93ZC1mdW5kZWQgZWNvLWNvbnNjaW91cyBoYXJkd2FyZTogaHR0cHM6Ly93d3cuY3Jv
+d2RzdXBwbHkuY29tL2VvbWE2OAoKCi0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0t
+LS0tCkZyb206ICdNaXRjaEFsc3VwJyB2aWEgY29tcC5hcmNoIDxjb21wLmFyY2hAZ29vZ2xlZ3Jv
+dXBzLmNvbT4KRGF0ZTogVHVlLCBNYXIgMjQsIDIwMjAgYXQgMzoyNyBQTQpTdWJqZWN0OiBSZTog
+bXVsdGktd2F5IExPQUQvU1RPUkUgYnVmZmVycyBhbmQgbWlzYWxpZ25tZW50ClRvOgoKCk9uIFR1
+ZXNkYXksIE1hcmNoIDI0LCAyMDIwIGF0IDY6NTM6MjkgQU0gVVRDLTUsIGxrY2wgd3JvdGU6Cj4g
+d2UncmUgZG9pbmcgYSBMRC9TVCBidWZmZXIgYXQgdGhlIG1vbWVudCwgYW5kIHNvbWUgZGVzaWdu
+IHJldmlldyBhbmQKPiBjb25zdHJ1Y3RpdmUgZmVlZGJhY2sgYW5kIGFkdmljZSB3b3VsZCBiZSBn
+cmVhdGx5IGFwcHJlY2lhdGVkLgo+IHVubGlrZSBtYW55ICJmaXJzdCB0aW1lIHByb2Nlc3NvcnMi
+LCB3ZSBjYW5ub3QgcG9zc2libHkgZ2V0IGF3YXkKPiB3aXRoIGEgc2ltcGxlIHNpbmdsZS1pc3N1
+ZSBMRC9TVCBkZXNpZ24gYXMgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlCj4gb2YgdGhlIHZl
+Y3RvciBlbmdpbmUgYmVpbmcgZWZmZWN0aXZlbHkgYSBtdWx0aS1pc3N1ZSBtdWx0aXBsaWVyIHRo
+YXQsCj4gZnJvbSBhIHNpbmdsZSBpbnN0cnVjdGlvbiwgaGFtbWVycyB0aGUgaW50ZXJuYWwgZW5n
+aW5lIHdpdGggYSAqYmF0Y2gqCj4gb2YgYWN0dWFsIG9wZXJhdGlvbnMuCj4KPiB0aGlzIGluY2x1
+ZGVzIExEL1NUIGFuZCBzbyBjb25zZXF1ZW50bHkgd2UgbmVlZCBhIG11bHRpLWlzc3VlLWNhcGFi
+bGUKPiBMRC9TVCBidWZmZXIgcmlnaHQgZnJvbSB0aGUgc3RhcnQuICBpdCBpcyBiZWluZyBkb2N1
+bWVudGVkLCBoZXJlOgo+Cj4gaHR0cHM6Ly9saWJyZS1yaXNjdi5vcmcvM2RfZ3B1L2FyY2hpdGVj
+dHVyZS82NjAwc2NvcmVib2FyZC8KPgo+IHdpdGggTWl0Y2gncyBoZWxwIGkgYWxyZWFkeSBoYXZl
+IGEgUkFXIC8gV0FSIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1hdHJpeAo+IGluIHBsYWNlLCB3aGlj
+aCBkZXRlY3RzIChpbi1vcmRlcikgKmJhdGNoZXMqIG9mIExEcywgKmJhdGNoZXMqIG9mIFNUcywK
+PiBhbmQgKmJhdGNoZXMqIG9mIGF0b21pYyBvcGVyYXRpb25zIChkZWZpbmVkIGJ5IGhhdmluZyBM
+RC9TVCBib3RoIHNldCkuCj4KPiBhZGRpdGlvbmFsbHksIHdlIGhhdmUgKGFnYWluLCB0aGFua3Mg
+dG8gTWl0Y2gpLCBhbiAiYWRkcmVzcyBjbGFzaCBkZXRlY3Rpb24iCj4gTWF0cml4LCB3aGVyZSB0
+aGUgb3JpZ2luYWwgZGVzaWduIGNvbmNlcHQgZnJvbSBNaXRjaCB1c2VzIGJpdHMgNCB0aHJ1IDEx
+Cj4gKHN0b3BwaW5nIGF0IGEgVk0gcGFnZSkgdG8gc2F5ICJ0aGlzIExEL1NUIGRlZmluaXRlbHkg
+ZG9lc24ndCBvdmVybGFwIHdpdGgKPiBhbnkgb3RoZXJzLCBidXQgaXQgbWlnaHQgaGF2ZSBwaWNr
+ZWQgdXAgYSBmZXcgdGhhdCAqcG90ZW50aWFsbHkqIGRvbid0Cj4gb3ZlcmxhcCwgYnV0IGhleSBi
+ZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5Ii4KPgo+IHRoaXMgaXMgcXVpdGUgZWZmaWNpZW50IGJlY2F1
+c2UgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gZGV0ZWN0IGEgY2xhc2gKPiBpcyBkcmFzdGlj
+YWxseSByZWR1Y2VkLCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gdGhhdCBpdCdzIGFuIE54Ti8y
+IHNldCBvZgo+IGJpbmFyeS1hZGRyZXNzIGNvbXBhcmF0b3JzIGludm9sdmVkLgo+Cj4gaG93ZXZl
+ciB3ZSAqbW9kaWZpZWQqIHRoaXMgaWRlYSwgYnkgdHVybmluZyB0aGUgYWRkcitsZW4gKGxlbj0x
+LzIvNC84IGJ5dGUpCj4gaW50byBhICpieXRlLW1hc2sqLCB3aGVyZSB0aGUgYnl0ZS1tYXNrIGlz
+IGVmZmVjdGl2ZWx5IG5vdGhpbmcgbW9yZSB0aGFuCj4gKG9yLCAiY2FuIGJlIHVzZWQgYXMiKSBi
+eXRlLWVuYWJsZSBsaW5lcyBvbiB0aGUgTDEgY2FjaGUgbWVtb3J5IHJlYWQvd3JpdGUuCj4KPiB0
+aGlzIG1lYW5zIHR1cm5pbmcgbGVuPTEgaW50byAwYjEsIGxlbj0yIGludG8gMGIxMSwgbGVuPTQg
+aW50byAwYjExMTEKPiBvciBsZW49OCBpbnRvIDBiMTExMSAxMTExIGFuZCB0aGVuIHNoaWZ0aW5n
+IGl0IGJ5IHRoZSBMU0JzIG9mIHRoZSBhZGRyZXNzCj4gKGJpdHMgMC0zKS4KPgo+IGhvd2V2ZXIg
+b2YgY291cnNlLCB0aGF0IGNvdWxkICJ3cmFwIG92ZXIiIHRvIGEgc2Vjb25kIGNhY2hlIGxpbmUs
+IHRoZXJlZm9yZQo+IHdlIHNwbGl0IGl0IGludG8gdHdvOgo+Cj4gKiAxc3QgY2FjaGUgbGluZSwg
+dGFrZSBiaXRzIDAuLjE1IG9mIHRoZSBtYXNrLCB1c2UgYWRkcls0Ol0gYXMgdGhlIGFkZHJlc3MK
+PiAqIDFuZCBjYWNoZSBsaW5lLCB0YWtlIGJpdHMgMTUuLjI3IG9mIHRoZSBtYXNrLCB1c2UgYWRk
+cls0Ol0gUExVUyBPTkUgYXMgYWRkcmVzcwo+Cj4gbm93IGFsbCBMRHMgYXJlIHBvdGVudGlhbGx5
+ICp0d28qIExEcywgYW5kIGFsbCBTVHMgYXJlIHBvdGVudGlhbGx5ICp0d28qIFNUcywKPiByZXF1
+aXJpbmcgc3luY2hyb25pc2F0aW9uLgo+Cj4gdGhpcyBkb2VzIGludGVyZXN0aW5nbHkgbWVhbiB0
+aGF0IHRoZSAiYWRkcmVzcyBjbGFzaCBkZXRlY3Rpb24iIE1hdHJpeCBpcwo+IG5vdyBkb3VibGVk
+IGluIHNpemUsIGJlY2F1c2UgZWFjaCBMRC9TVCBDb21wdXRhdGlvbiBVbml0IGNhbiBub3cgaXNz
+dWUgKnR3byoKPiBMRHMvU1RzLCBub3Qgb25lLgo+Cj4gdGhlcmUgaXMgYSBiaWcgYWR2YW50YWdl
+IHRvIHBhcnRpYWwtY29udmVyc2lvbiBvZiB0aGUgTEQvU1RzIHRvIHVuYXJ5LW1hc2tlZAo+IGZv
+cm1hdDoKPgo+IDEpIHRob3NlICJtYXNrcyIgd2UgY2FuIG5vdyBkZXRlY3QgaW4gdGhlIGFkZHJl
+c3MtY2xhc2ggdW5pdCwgd2hldGhlciB0aGVyZQo+ICAgIGFyZSBvdmVybGFwcywgYnkgc2ltcGxl
+ICJ1bmFyeSIgKEFORGluZykuCj4KPiAyKSBvbmNlIGEgYmF0Y2ggb2YgZ3VhcmFudGVlZC1ub24t
+b3ZlcmxhcHBpbmcgTERzIChvciBTVHMsIGJ1dCBub3QgYm90aCBhdAo+ICAgIG9uY2UpIGhhdmUg
+YmVlbiBpZGVudGlmaWVkLCB0aGUgT1Jpbmcgb2YgdGhvc2UgbWFza3MgKnByZS1pZGVudGlmaWVz
+KiwKPiAgICB3aGVyZSB0aGUgcmVtYWluaW5nIE1TQnMgYXJlIGlkZW50aWNhbCwgd2hpY2ggTERz
+IGFuZCB3aGljaCBTVHMgYXJlCj4gICAgKnBhcnQgb2YgdGhlIHNhbWUgY2FjaGUgbGluZSouCj4K
+PiAzKSB0aGUgT1JlZCBtYXNrcyBjYW4gYmUgZHJvcHBlZCAtIGFzLWlzIC0gZGlyZWN0bHkgb250
+byBieXRlLWxldmVsCj4gICAgcmVhZC93cml0ZS1lbmFibGUgbGluZXMgb24gdGhlIEwxIENhY2hl
+IHVuZGVybHlpbmcgbWVtb3J5IC0gd2l0aCB6ZXJvCj4gICAgc2hpZnRpbmcgb3Igb3RoZXIgbWVz
+c2luZyBhYm91dC4KPgo+IHNvIHRoYXQncyB0aGUgYml0cyB0aGF0IHdlICJrbm93Ii4KPgo+IHRo
+ZSBiaXRzIHRoYXQgd2UgKmRvbid0KiBrbm93IGFyZSB3aGF0IGlzIHRoZSBiZXN0IEwxIGNhY2hl
+IGFycmFuZ2VtZW50Cj4gdG8gdXNlLiAgd2UgZGlzY3Vzc2VkIHRoZSBwb3NzaWJpbGl0eSBvZiBh
+biA4LXdheSBzZXQtYXNzb2NpYXRpdmUgY2FjaGUKPiB3aXRoIDUxMi1iaXQgd2lkZSBkYXRhICgh
+ISEpIC0geWVzLCByZWFsbHksIGJlY2F1c2Ugd2Ugd2lsbCBoYXZlIGEgbWluaW11bQo+IG9mIDQg
+TEQvU1Qgb3BlcmF0aW9ucyBAIDY0LWJpdCBvY2N1cnJpbmcgZXZlcnkgY3ljbGUgKGluIHRoZSBm
+aXJzdCB2ZXJzaW9uCj4gb2YgdGhlIHByb2Nlc3NvcjogdGhpcyAqd2lsbCogZ28gdXAgaW4gbGF0
+ZXIgaXRlcmF0aW9ucykuCj4KPiBvbmUgdGhpbmcgdGhhdCB3b3VsZCBiZSBwYXJ0aWN1bGFybHkg
+bmljZSB0byBhdm9pZCB3b3VsZCBiZSBtdWx0aS1wb3J0ZWQKPiBTUkFNIG9uIHRoZSBMMSBDYWNo
+ZSBNZW1vcmllcy4gIGkgdGhvdWdodCB0aGVyZSBpdCBtYXkgYmUgcG9zc2libGUgdG8KPiAic3Ry
+aXBlIiB0aGUgTDEgQ2FjaGUsIHN1Y2ggdGhhdCBiaXRzIDQtNSBvZiBldmVyeSBhZGRyZXNzIGdv
+IHRocm91Z2ggdG8sCj4gZWZmZWN0aXZlbHksIGEgY29tcGxldGVseSBzZXBhcmF0ZSAoaXNvbGF0
+ZWQsIGluZGVwZW5kZW50KSBMMSBDYWNoZS4KPgo+ICogQWRkciBiaXRzIFswOjNdIGFscmVhZHkg
+dHVybmVkIGludG8gYnl0ZS1tYXAgbWFzayAoZW5hYmxlIGxpbmVzKQo+ICogQWRkciBiaXRzIFs0
+OjVdIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiBmb3VyIElOREVQRU5ERU5UIGNhY2hlcwo+ICogQWRk
+ciBiaXRzIFs2OmVuZF0gdXNlZCAiYXMgbm9ybWFsIgo+Cj4gdGhlIG9ubHkgZG93bnNpZGUgb2Yg
+dGhpcyBiZWluZzogTEQvU1RzIHRoYXQgaGFwcGVuIHRvIGJlIG9uIHRoZSBzYW1lCj4gNjQtYnl0
+ZSBib3VuZGFyeSB3b3VsZCBiZSAicGVuYWxpc2VkIiBieSBiZWluZyBvbmx5IHNpbmdsZS1pc3N1
+ZS1jYXBhYmxlLgo+Cj4gZG8gd2UgY2FyZT8gIGknbSBub3Qgc3VyZSB0aGF0IHdlIGRvIQoKWWVz
+LCB5b3UgZG8gd2FudCB0byBjYXJlOjogeW91IHdhbnQgdG8gY2FyZSB0byAiZ2V0IGl0IGNvcnJl
+Y3QiIGV2ZW4KYXQgc29tZSBtaW5vciBjb3N0IGluIHBlcmYuCj4KPiBfc2hvdWxkXyB3ZSBjYXJl
+PyAgdGhhdCdzIHRoZSBxdWVzdGlvbiBpJ2QgbGlrZSB0byBrbm93IHRoZSBhbnN3ZXIgdG8gOikK
+PiBhbiBhbHRlcm5hdGl2ZSBpcyB0aGF0IHdlIGhhdmUgdG8gbXVsdGktcG9ydCB0aGUgTDEgQ2Fj
+aGUgbWVtb3J5LCB3aGljaAo+IHdvdWxkIGJlIHF1aXRlIGV4cGVuc2l2ZS4KPgo+IHdoYXQgYWx0
+ZXJuYXRpdmVzIGFyZSB0aGVyZT8gIGlzIHRoZXJlIGEgd2F5IHRvLCBmb3IgZXhhbXBsZSwgaGF2
+ZSBhbgo+IDgtd2F5IHNldC1hc3NvY2lhdGl2ZSBjYWNoZSB3aXRoIDggaW5kZXBlbmRlbnQgaW5w
+dXQvb3V0cHV0IGRhdGEgcGF0aHMsCj4geWV0IHRoZXkgZG8gbm90IHJlcXVpcmUgdGhlIHRyaWNr
+IG9mIGEgZnVsbCBzcGxpdCB1c2luZyBhZGRyIGJpdHMgWzQ6NV0sCj4gYnV0IGF0IHRoZSBzYW1l
+IHRpbWUgZG8gbm90IHJlcXVpcmUgNFI0VyBTUkFNcz8KCldoYXQgeW91IHdhbnQgdG8ga25vdyBh
+cmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFNSQU0gbWFjcm9zLiBHaXZlbiB0aGVzZQpkaW1lbnNp
+b25zIHlvdSBhcmUgaW4gYSBwb3NpdGlvbiB0byBzdGFydCBtYWtpbmcgZ29vZCBjaG9pY2VzLCB3
+aXRob3V0CnlvdSBhcmUgbm90LiBBIHR5cGljYWwgU1JBTSBkaW1lbnNpb24gbWlnaHQgYmUgMjU2
+LWJpdHMgd2lkZSBhbmQgNjQtd29yZHMKZGVhcCAoMktCeXRlcykuCgpTaW5jZSB5b3Ugd2FudCB0
+byByZWFkL3dyaXRlIDUxMi1iaXRzIHBlciBwb3J0LCB5b3Ugd2lsbCBuZWVkIDIgU1JBTQptYWNy
+b3MgcGVyIHBvcnQgKHBlciBjeWNsZSkuIFNvIGlmIHlvdSBhcmUgbWFraW5nIDgtd2F5IFNBIGNh
+Y2hlLCB5b3UKd2lsbCBuZWVkIGF0IGxlYXN0IDE2IFNSQU0gbWFjcm9zICgzMktCeXRlcyktLWFu
+ZCAoQSBOIEQpIHlvdSBzdGlsbApoYXZlIGJ1dCBhIHNpbmdsZSBwb3J0IQoKT24gdGhlIG90aGVy
+IGhhbmQsIGRyb3BwaW5nIGJhY2sgdG8gNC13YXkgc2V0LCBhbmQgdGhhdCBzYW1lIFNSQU0gYXJy
+YXkKY2FuIG5vdyBzdXBwb3J0IDItcG9ydHMgb2YgNC13YXkgU0EgZWFjaC4gSW4gdGhpcyBvcmdh
+bml6YXRpb24geW91IHdpbGwKYmUgdXNpbmcgbW9yZSBsb3dlci1hZGRyZXNzIGJpdHMgdG8gY2hv
+b3NlIHBvcnRbMF0gdmVyc3VzIHBvcnRbMV0uIEFuZAp5b3Ugd2lsbCBzZWUgNDAlIGNvbmZsaWN0
+cyBpZiB5b3UgYXJlIHJlYWxseSBydW5uaW5nIDIgcmVxdWVzdCBwZXIgY3ljbGUuCgpIb3dldmVy
+LCBpZiB5b3Uga25vdyB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgImRlbnNlIiwgdGhlbiB5b3Uga25v
+dyB0aGF0CkxEW2ldW2suLmsrM10gYXJlIGFsbCBpbiB0aGUgc2FtZSBsaW5lLCBhbmQgeW91IGNh
+biBUSEVOIG1ha2Ugb25lIGFjY2Vzcwpmb3IgZXZlcnkgNCBhY3R1YWwgTERzIGFuIHRoZW4gc29y
+dCBpdCBvdXQgd2l0aCBtdWx0aXBsZXhlcnMuIEFuZCBOT1cgd2UKaGF2ZSBlbm91Z2ggcG9ydHMg
+YW5kIHdpZHRoIHRvIHVzZSAxMDI0IGJpdHMgcGVyIGN5Y2xlIHRocm91Z2hwdXQgaW4gdGhlCmNh
+Y2hlLiB7WW91IGNhbiBkZXRlcm1pbmUgYW4gYWNjZXNzIHBhdHRlcm4gd2lsbCBiZSBkZW5zZSB3
+aGVuIHRoZSBsb29wCmluY3JlbWVudCBpcyArMSAob3IgLTEpIGFuZCB0aGUgbG9vcCBpbmRleCBp
+cyB1c2VkIGluIHNjYWxlZCBmb3JtIGluCm1lbXJlZiBpbnN0cnVjdGlvbnM6CgogICAgIExEICAg
+UngsW1JiK1JpPDxzY2FsZStESVNQXQoKfSBPdGhlciBmb3JtcyBvZiBkZW5zZSBhY2Nlc3MgYXJl
+IGhhcmRlciBmb3IgSFcgdG8gZGV0ZWN0IGFuZCB1dGlsaXplLgo+Cj4gaSAqdGhpbmsqIHRoaXMg
+aXMgZG9hYmxlLCB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgd2FpdCBjeWNsZXMgaWYKPiBv
+bmUgb2YgdGhlIDggd2F5cyBoYXBwZW5zIHRvIGhhdmUgcmVxdWVzdCBjb250ZW50aW9uLiAgaG9u
+ZXN0bHkgaSBkb24ndCBrbm93Cj4gd2hhdCdzIGJlc3QgaGVyZS4KPgo+IGFkdmljZSBhbmQgZGlz
+Y3Vzc2lvbiBhcHByZWNpYXRlZCBhcyBhbHdheXMsCj4KPiBsLgoKX19fX19fX19fX19fX19fX19f
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlicmUtcmlzY3YtZGV2IG1haWxpbmcgbGlz
+dApsaWJyZS1yaXNjdi1kZXZAbGlzdHMubGlicmUtcmlzY3Yub3JnCmh0dHA6Ly9saXN0cy5saWJy
+ZS1yaXNjdi5vcmcvbWFpbG1hbi9saXN0aW5mby9saWJyZS1yaXNjdi1kZXYK
+