From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt0-x229.google.com (mail-qt0-x229.google.com [IPv6:2607:f8b0:400d:c0d::229]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.bufferbloat.net (Postfix) with ESMTPS id EA5373B2A4 for ; Mon, 27 Nov 2017 11:17:29 -0500 (EST) Received: by mail-qt0-x229.google.com with SMTP id p44so39739885qtj.6 for ; Mon, 27 Nov 2017 08:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=DOFjEgZYT2a8HLrEaKD7tzrl4fg3V9TJL/aye5CyHrA=; b=TXRwFBUYeFGEAvouYupr/JVFtMeFs16ETZ/rqBNRVY+BykS8Zng/ahjw/vSNBoAFAN B0RYCVmrNIuc2EpAsGlcSjJgbIuZRZpedTDeoFf0xBvfAmnfoVIDbLaTcZY1reZx49pW B6b2NsFv3EioMCdzZWlqQF76hF/6V5xmrF8FZJcsip/m380SPi1Te+6s8l+fFVPOq2WQ 7l2csSdAgtR8/L6YHDG5WKShU3jO99cuWjd8ZWmSoobxrs/uDRwBKNIYQlce8Oj19+nm BqRQRvFkicCWoMOGuiS+UvVD6t7HWumh0AQCu4qfE+Oo2Xc8vB60lEpxFgtsxZqXiduM aFBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=DOFjEgZYT2a8HLrEaKD7tzrl4fg3V9TJL/aye5CyHrA=; b=kTyWfmyVJZAyIRGissWeDEoEQuao5Ug/Z4UoVmb45SS45/fUUGqBWRTjx6LC/Mhv4D +ExnMBKO+clSBmkvvO2IcvkDjSydvAcQX7rMGg1IyvU4p9ekS4K4yw66IsHzx5LICqWT SYZHAYIrxtGMvcafKkJa25Rz0MwOsUzwdCFWHqnR472dV8SQmHKla+tjrLZDQz0VmqQC gZ4wqpS2EMmPpyj3UZXOkmVyTSm7jkoQ3IOL63cE9p0mqR1/ejEyO5i4OSsydoAU0kVJ Mn9ld4RuhQWN2132cSs1op22MDlcUj2XmKUsvEdD23QlZmaQ+gBR88XLLASc/P+y5AD5 ZSpQ== X-Gm-Message-State: AJaThX6A9Y0ETrOTh3+qHokucgAQYZJqhAR53Cd19yFM9sXFEvG9cqo/ y7dOIcGG//hbfSnyrLc5avwoj+74RLtPQGvZhmWZTA== X-Google-Smtp-Source: AGs4zMZUc6Xp2KaEERqCfaZfHdiXL80O6HMmlbXsuUZctd5QN/6GdcBmLsF5ycchHMeYBT6k/6QMjVvkF1VNG6EtItA= X-Received: by 10.200.53.139 with SMTP id k11mr59933857qtb.77.1511799449251; Mon, 27 Nov 2017 08:17:29 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.95.69 with HTTP; Mon, 27 Nov 2017 08:17:28 -0800 (PST) In-Reply-To: References: <85E1A7B2-8AA7-418A-BE43-209A1EC8881A@gmail.com> <87d1447z9w.fsf@toke.dk> <27F95EB1-490B-404C-8F77-98646B6159E7@gmail.com> <1C937A63-CEC1-4173-8812-EA2A85972B73@gmail.com> <20D304DC-494E-4A00-9B39-1E9F4B0F0CB6@gmail.com> <67B1612D-895D-4E3A-8CBD-21580B470696@gmail.com> From: Georgios Amanakis Date: Mon, 27 Nov 2017 11:17:28 -0500 Message-ID: To: Pete Heist Cc: Cake List Content-Type: multipart/alternative; boundary="001a1140a86824f235055ef93d59" Subject: Re: [Cake] cake flenter results round 1 X-BeenThere: cake@lists.bufferbloat.net X-Mailman-Version: 2.1.20 Precedence: list List-Id: Cake - FQ_codel the next generation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Nov 2017 16:17:30 -0000 --001a1140a86824f235055ef93d59 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Dear Pete, I am trying to replicate the unfair behaviour you are seeing with dual-{src,dst}host, albeit on different hardware and I am getting a fair distribution. Hardware are Xeon E3-1220Lv2 (router), i3-3110M(Clients). All running Archlinux, latest cake and patched iproute2-4.14.1, connected with Gbit ethernet, TSO/GSO/GRO enabled. Qdisc setup: ---------------- Router: qdisc cake 8003: dev ens4 root refcnt 2 bandwidth 900Mbit diffserv3 dual-dsthost rtt 100.0ms raw Client A(kernel default): qdisc fq_codel 0: dev eno2 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Client B (kernel default): qdisc fq_codel 0: dev enp1s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn ---------------- Cli: ---------------- Router: netserver & Client A: flent tcp_1down -H router Client B: flent tcp_12down -H router ---------------- Results: ---------------- Router: qdisc cake 8003: root refcnt 2 bandwidth 900Mbit diffserv3 dual-dsthost rtt 100.0ms raw Sent 7126680117 bytes 4725904 pkt (dropped 10, overlimits 4439745 requeues 0) backlog 0b 0p requeues 0 memory used: 1224872b of 15140Kb capacity estimate: 900Mbit Bulk Best Effort Voice thresh 56250Kbit 900Mbit 225Mbit target 5.0ms 5.0ms 5.0ms interval 100.0ms 100.0ms 100.0ms pk_delay 14us 751us 7us av_delay 2us 642us 1us sp_delay 1us 1us 1us pkts 109948 4601651 14315 bytes 160183242 6964893773 1618242 way_inds 0 21009 0 way_miss 160 188 5 way_cols 0 0 0 drops 0 10 0 marks 0 0 0 ack_drop 0 0 0 sp_flows 0 1 1 bk_flows 1 0 0 un_flows 0 0 0 max_len 7570 68130 1022 Client A: avg median # data pts Ping (ms) ICMP : 0.11 0.08 ms 350 TCP download : 443.65 430.38 Mbits/s 301 Client B: avg median # data pts Ping (ms) ICMP : 0.09 0.06 ms 350 TCP download avg : 37.03 35.87 Mbits/s 301 TCP download sum : 444.35 430.40 Mbits/s 301 TCP download::1 : 37.00 35.87 Mbits/s 301 TCP download::10 : 37.01 35.87 Mbits/s 301 TCP download::11 : 37.02 35.87 Mbits/s 301 TCP download::12 : 37.00 35.87 Mbits/s 301 TCP download::2 : 37.03 35.87 Mbits/s 301 TCP download::3 : 36.99 35.87 Mbits/s 301 TCP download::4 : 37.03 35.87 Mbits/s 301 TCP download::5 : 37.07 35.87 Mbits/s 301 TCP download::6 : 37.00 35.87 Mbits/s 301 TCP download::7 : 37.12 35.87 Mbits/s 301 TCP download::8 : 37.05 35.87 Mbits/s 301 TCP download::9 : 37.03 35.87 Mbits/s 301 ---------------- Does this suggest that it is indeed a problem of an underpowered CPU in your case? George On Mon, Nov 27, 2017 at 10:53 AM, Pete Heist wrote: > > On Nov 27, 2017, at 3:48 PM, Jonathan Morton > wrote: > > It's not at all obvious how we'd detect that. Packets are staying in the > queue for less time than the codel target, which is exactly what you'd ge= t > if you weren't saturated at all. > > That makes complete sense when you put it that way. Cake has no way of > knowing why the input rate is lower than expected, even if it=E2=80=99s p= art of the > cause. > > I don=E2=80=99t think flent can know this either. It can=E2=80=99t easily= know the cause > for its total output to be lower than expected. > > All I know is, this is a common problem in deployments, particularly on > low-end hardware like ER-Xs, that can be tricky for users to figure out. > > I don=E2=80=99t even think monitoring CPU in general would work. The CPU = could be > high because it=E2=80=99s doing other calculations, but there=E2=80=99s s= till enough for > cake at a low rate, and there=E2=80=99s no need to warn in that case. I= =E2=80=99d be > interested in any ideas on how to know this is happening in the system as= a > whole. So far, there are just various clues that one needs to piece > together (no or few drops or marks, less total throughput that expected, > high cpu without other external usage, etc). Then it needs to be proven > with a test. > > Anyway thanks, your clue was what I needed! I need to remember to review > the qdisc stats when something unexpected happens. > > _______________________________________________ > Cake mailing list > Cake@lists.bufferbloat.net > https://lists.bufferbloat.net/listinfo/cake > > --001a1140a86824f235055ef93d59 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+RGVhciBQZXRlLDxi cj48YnI+PC9kaXY+SSBhbSB0cnlpbmcgdG8gcmVwbGljYXRlIHRoZSB1bmZhaXIgYmVoYXZpb3Vy IHlvdSBhcmUgc2VlaW5nIHdpdGggZHVhbC17c3JjLGRzdH1ob3N0LCBhbGJlaXQgb24gZGlmZmVy ZW50IGhhcmR3YXJlIGFuZCBJIGFtIGdldHRpbmcgYSBmYWlyIGRpc3RyaWJ1dGlvbi4gSGFyZHdh cmUgYXJlIFhlb24gRTMtMTIyMEx2MiAocm91dGVyKSwgaTMtMzExME0oQ2xpZW50cykuIEFsbCBy dW5uaW5nIEFyY2hsaW51eCwgbGF0ZXN0IGNha2UgYW5kIHBhdGNoZWQgaXByb3V0ZTItNC4xNC4x LCBjb25uZWN0ZWQgd2l0aCBHYml0IGV0aGVybmV0LCBUU08vR1NPL0dSTyBlbmFibGVkLjxicj48 L2Rpdj48ZGl2Pjxicj48L2Rpdj5RZGlzYyBzZXR1cDo8L2Rpdj48ZGl2Pi0tLS0tLS0tLS0tLS0t LS08YnI+PC9kaXY+Um91dGVyOiA8YnI+PC9kaXY+PGRpdj5xZGlzYyBjYWtlIDgwMDM6IGRldiBl bnM0IHJvb3QgcmVmY250IDIgYmFuZHdpZHRoIDkwME1iaXQgZGlmZnNlcnYzIGR1YWwtZHN0aG9z dCBydHQgMTAwLjBtcyByYXc8YnI+PC9kaXY+PGJyPjwvZGl2PjxkaXY+Q2xpZW50IEEoa2VybmVs IGRlZmF1bHQpOjwvZGl2PjxkaXY+cWRpc2MgZnFfY29kZWwgMDogZGV2IGVubzIgcm9vdCByZWZj bnQgMiBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIDE1MTQgdGFyZ2V0IDUuMG1zIGlu dGVydmFsIDEwMC4wbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuPGJyPjwvZGl2Pjxicj5DbGllbnQg QiAoa2VybmVsIGRlZmF1bHQpOiA8YnI+cWRpc2MgZnFfY29kZWwgMDogZGV2IGVucDFzMCByb290 IHJlZmNudCAyIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gMTUxNCB0YXJnZXQgNS4w bXMgaW50ZXJ2YWwgMTAwLjBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY248YnI+LS0tLS0tLS0tLS0t LS0tLTxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj5DbGk6PGJyPjxkaXY+ LS0tLS0tLS0tLS0tLS0tLTwvZGl2PjxkaXY+Um91dGVyOjwvZGl2PjxkaXY+bmV0c2VydmVyICZh bXA7PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5DbGllbnQgQTo8L2Rpdj48ZGl2PmZsZW50IHRj cF8xZG93biAtSCByb3V0ZXI8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkNsaWVudCBCOjwvZGl2 PjxkaXY+PGRpdj5mbGVudCB0Y3BfMTJkb3duIC1IIHJvdXRlcjwvZGl2PjwvZGl2PjxkaXY+LS0t LS0tLS0tLS0tLS0tLTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+UmVz dWx0czo8YnI+PC9kaXY+PGRpdj4tLS0tLS0tLS0tLS0tLS0tPGJyPjwvZGl2PjxkaXY+Um91dGVy OjwvZGl2PjxkaXY+cWRpc2MgY2FrZSA4MDAzOiByb290IHJlZmNudCAyIGJhbmR3aWR0aCA5MDBN Yml0IGRpZmZzZXJ2MyBkdWFsLWRzdGhvc3QgcnR0IDEwMC4wbXMgcmF3PGJyPsKgU2VudCA3MTI2 NjgwMTE3IGJ5dGVzIDQ3MjU5MDQgcGt0IChkcm9wcGVkIDEwLCBvdmVybGltaXRzIDQ0Mzk3NDUg cmVxdWV1ZXMgMCk8YnI+wqBiYWNrbG9nIDBiIDBwIHJlcXVldWVzIDA8YnI+wqBtZW1vcnkgdXNl ZDogMTIyNDg3MmIgb2YgMTUxNDBLYjxicj7CoGNhcGFjaXR5IGVzdGltYXRlOiA5MDBNYml0PGJy PsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJ1bGvCoMKgIEJlc3QgRWZmb3J0wqDC oMKgwqDCoCBWb2ljZTxicj7CoCB0aHJlc2jCoMKgwqDCoCA1NjI1MEtiaXTCoMKgwqDCoCA5MDBN Yml0wqDCoMKgwqAgMjI1TWJpdDxicj7CoCB0YXJnZXTCoMKgwqDCoMKgwqDCoMKgIDUuMG1zwqDC oMKgwqDCoMKgIDUuMG1zwqDCoMKgwqDCoMKgIDUuMG1zPGJyPsKgIGludGVydmFswqDCoMKgwqAg MTAwLjBtc8KgwqDCoMKgIDEwMC4wbXPCoMKgwqDCoCAxMDAuMG1zPGJyPsKgIHBrX2RlbGF5wqDC oMKgwqDCoMKgwqAgMTR1c8KgwqDCoMKgwqDCoCA3NTF1c8KgwqDCoMKgwqDCoMKgwqAgN3VzPGJy PsKgIGF2X2RlbGF5wqDCoMKgwqDCoMKgwqDCoCAydXPCoMKgwqDCoMKgwqAgNjQydXPCoMKgwqDC oMKgwqDCoMKgIDF1czxicj7CoCBzcF9kZWxhecKgwqDCoMKgwqDCoMKgwqAgMXVzwqDCoMKgwqDC oMKgwqDCoCAxdXPCoMKgwqDCoMKgwqDCoMKgIDF1czxicj7CoCBwa3RzwqDCoMKgwqDCoMKgwqDC oMKgIDEwOTk0OMKgwqDCoMKgIDQ2MDE2NTHCoMKgwqDCoMKgwqAgMTQzMTU8YnI+wqAgYnl0ZXPC oMKgwqDCoMKgIDE2MDE4MzI0MsKgIDY5NjQ4OTM3NzPCoMKgwqDCoCAxNjE4MjQyPGJyPsKgIHdh eV9pbmRzwqDCoMKgwqDCoMKgwqDCoMKgwqAgMMKgwqDCoMKgwqDCoCAyMTAwOcKgwqDCoMKgwqDC oMKgwqDCoMKgIDA8YnI+wqAgd2F5X21pc3PCoMKgwqDCoMKgwqDCoMKgIDE2MMKgwqDCoMKgwqDC oMKgwqAgMTg4wqDCoMKgwqDCoMKgwqDCoMKgwqAgNTxicj7CoCB3YXlfY29sc8KgwqDCoMKgwqDC oMKgwqDCoMKgIDDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwwqDCoMKgwqDCoMKgwqDCoMKgwqAgMDxi cj7CoCBkcm9wc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDDCoMKgwqDCoMKgwqDCoMKgwqAg MTDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwPGJyPsKgIG1hcmtzwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgMMKgwqDCoMKgwqDCoMKgwqDCoMKgIDDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwPGJyPsKg IGFja19kcm9wwqDCoMKgwqDCoMKgwqDCoMKgwqAgMMKgwqDCoMKgwqDCoMKgwqDCoMKgIDDCoMKg wqDCoMKgwqDCoMKgwqDCoCAwPGJyPsKgIHNwX2Zsb3dzwqDCoMKgwqDCoMKgwqDCoMKgwqAgMMKg wqDCoMKgwqDCoMKgwqDCoMKgIDHCoMKgwqDCoMKgwqDCoMKgwqDCoCAxPGJyPsKgIGJrX2Zsb3dz wqDCoMKgwqDCoMKgwqDCoMKgwqAgMcKgwqDCoMKgwqDCoMKgwqDCoMKgIDDCoMKgwqDCoMKgwqDC oMKgwqDCoCAwPGJyPsKgIHVuX2Zsb3dzwqDCoMKgwqDCoMKgwqDCoMKgwqAgMMKgwqDCoMKgwqDC oMKgwqDCoMKgIDDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwPGJyPsKgIG1heF9sZW7CoMKgwqDCoMKg wqDCoMKgIDc1NzDCoMKgwqDCoMKgwqAgNjgxMzDCoMKgwqDCoMKgwqDCoCAxMDIyPGJyPjwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PC9kaXY+PGRpdj5DbGllbnQgQTo8 L2Rpdj48ZGl2PsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXZnwqDCoMKgwqDCoMKgIG1lZGlhbsKgwqDCoMKgwqDCoMKgwqDCoCAjIGRhdGEgcHRz PGJyPsKgUGluZyAobXMpIElDTVAgOsKgwqDCoMKgwqDCoMKgwqAgMC4xMcKgwqDCoMKgwqDCoMKg wqAgMC4wOCBtc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDM1MDxicj7CoFRDUCBkb3dubG9h ZMKgwqAgOsKgwqDCoMKgwqDCoCA0NDMuNjXCoMKgwqDCoMKgwqAgNDMwLjM4IE1iaXRzL3PCoMKg wqDCoMKgwqDCoMKgIDMwMTxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48 ZGl2PjwvZGl2PjxkaXY+Q2xpZW50IEI6PC9kaXY+PGRpdj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmfCoMKgwqDCoMKgwqAgbWVkaWFu wqDCoMKgwqDCoMKgwqDCoMKgICMgZGF0YSBwdHM8YnI+wqBQaW5nIChtcykgSUNNUMKgwqAgOsKg wqDCoMKgwqDCoMKgwqAgMC4wOcKgwqDCoMKgwqDCoMKgwqAgMC4wNiBtc8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDM1MDxicj7CoFRDUCBkb3dubG9hZCBhdmcgOsKgwqDCoMKgwqDCoMKgIDM3 LjAzwqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKg VENQIGRvd25sb2FkIHN1bSA6wqDCoMKgwqDCoMKgIDQ0NC4zNcKgwqDCoMKgwqDCoCA0MzAuNDAg TWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjoxwqAgOsKgwqDC oMKgwqDCoMKgIDM3LjAwwqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKg wqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjoxMCA6wqDCoMKgwqDCoMKgwqAgMzcuMDHCoMKgwqDC oMKgwqDCoCAzNS44NyBNYml0cy9zwqDCoMKgwqDCoMKgwqDCoCAzMDE8YnI+wqBUQ1AgZG93bmxv YWQ6OjExIDrCoMKgwqDCoMKgwqDCoCAzNy4wMsKgwqDCoMKgwqDCoMKgIDM1Ljg3IE1iaXRzL3PC oMKgwqDCoMKgwqDCoMKgIDMwMTxicj7CoFRDUCBkb3dubG9hZDo6MTIgOsKgwqDCoMKgwqDCoMKg IDM3LjAwwqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJy PsKgVENQIGRvd25sb2FkOjoywqAgOsKgwqDCoMKgwqDCoMKgIDM3LjAzwqDCoMKgwqDCoMKgwqAg MzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjozwqAg OsKgwqDCoMKgwqDCoMKgIDM2Ljk5wqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKg wqDCoMKgwqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjo0wqAgOsKgwqDCoMKgwqDCoMKgIDM3LjAz wqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKgVENQ IGRvd25sb2FkOjo1wqAgOsKgwqDCoMKgwqDCoMKgIDM3LjA3wqDCoMKgwqDCoMKgwqAgMzUuODcg TWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjo2wqAgOsKgwqDC oMKgwqDCoMKgIDM3LjAwwqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKg wqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjo3wqAgOsKgwqDCoMKgwqDCoMKgIDM3LjEywqDCoMKg wqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKgVENQIGRvd25s b2FkOjo4wqAgOsKgwqDCoMKgwqDCoMKgIDM3LjA1wqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMv c8KgwqDCoMKgwqDCoMKgwqAgMzAxPGJyPsKgVENQIGRvd25sb2FkOjo5wqAgOsKgwqDCoMKgwqDC oMKgIDM3LjAzwqDCoMKgwqDCoMKgwqAgMzUuODcgTWJpdHMvc8KgwqDCoMKgwqDCoMKgwqAgMzAx PGJyPi0tLS0tLS0tLS0tLS0tLS08L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkRvZXMgdGhpcyBz dWdnZXN0IHRoYXQgaXQgaXMgaW5kZWVkIGEgcHJvYmxlbSBvZiBhbiB1bmRlcnBvd2VyZWQgQ1BV IGluIHlvdXIgY2FzZT88L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pkdlb3JnZTxicj48L2Rpdj48 ZGl2Pjxicj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xh c3M9ImdtYWlsX3F1b3RlIj5PbiBNb24sIE5vdiAyNywgMjAxNyBhdCAxMDo1MyBBTSwgUGV0ZSBI ZWlzdCA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzpwZXRlaGVpc3RAZ21haWwu Y29tIiB0YXJnZXQ9Il9ibGFuayI+cGV0ZWhlaXN0QGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3 cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAg MCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRp diBzdHlsZT0id29yZC13cmFwOmJyZWFrLXdvcmQiPjxzcGFuIGNsYXNzPSIiPjxicj48ZGl2Pjxi bG9ja3F1b3RlIHR5cGU9ImNpdGUiPjxkaXY+T24gTm92IDI3LCAyMDE3LCBhdCAzOjQ4IFBNLCBK b25hdGhhbiBNb3J0b24gJmx0OzxhIGhyZWY9Im1haWx0bzpjaHJvbWF0aXg5OUBnbWFpbC5jb20i IHRhcmdldD0iX2JsYW5rIj5jaHJvbWF0aXg5OUBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8L2Rp dj48ZGl2PjxwIGRpcj0ibHRyIj5JdCYjMzk7cyBub3QgYXQgYWxsIG9idmlvdXMgaG93IHdlJiMz OTtkIGRldGVjdCB0aGF0LsKgIFBhY2tldHMgYXJlIHN0YXlpbmcgaW4gdGhlIHF1ZXVlIGZvciBs ZXNzIHRpbWUgdGhhbiB0aGUgY29kZWwgdGFyZ2V0LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgeW91 JiMzOTtkIGdldCBpZiB5b3Ugd2VyZW4mIzM5O3Qgc2F0dXJhdGVkIGF0IGFsbC48L3A+PC9kaXY+ PC9ibG9ja3F1b3RlPjwvZGl2Pjwvc3Bhbj48ZGl2PlRoYXQgbWFrZXMgY29tcGxldGUgc2Vuc2Ug d2hlbiB5b3UgcHV0IGl0IHRoYXQgd2F5LiBDYWtlIGhhcyBubyB3YXkgb2Yga25vd2luZyB3aHkg dGhlIGlucHV0IHJhdGUgaXMgbG93ZXIgdGhhbiBleHBlY3RlZCwgZXZlbiBpZiBpdOKAmXMgcGFy dCBvZiB0aGUgY2F1c2UuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIGRvbuKAmXQgdGhpbmsg ZmxlbnQgY2FuIGtub3cgdGhpcyBlaXRoZXIuIEl0IGNhbuKAmXQgZWFzaWx5IGtub3cgdGhlIGNh dXNlIGZvciBpdHMgdG90YWwgb3V0cHV0IHRvIGJlIGxvd2VyIHRoYW4gZXhwZWN0ZWQuPC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj5BbGwgSSBrbm93IGlzLCB0aGlzIGlzIGEgY29tbW9uIHByb2Js ZW0gaW4gZGVwbG95bWVudHMsIHBhcnRpY3VsYXJseSBvbiBsb3ctZW5kIGhhcmR3YXJlIGxpa2Ug RVItWHMsIHRoYXQgY2FuIGJlIHRyaWNreSBmb3IgdXNlcnMgdG8gZmlndXJlIG91dC48L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PkkgZG9u4oCZdCBldmVuIHRoaW5rIG1vbml0b3JpbmcgQ1BVIGlu IGdlbmVyYWwgd291bGQgd29yay4gVGhlIENQVSBjb3VsZCBiZSBoaWdoIGJlY2F1c2UgaXTigJlz IGRvaW5nIG90aGVyIGNhbGN1bGF0aW9ucywgYnV0IHRoZXJl4oCZcyBzdGlsbCBlbm91Z2ggZm9y IGNha2UgYXQgYSBsb3cgcmF0ZSwgYW5kIHRoZXJl4oCZcyBubyBuZWVkIHRvIHdhcm4gaW4gdGhh dCBjYXNlLiBJ4oCZZCBiZSBpbnRlcmVzdGVkIGluIGFueSBpZGVhcyBvbiBob3cgdG8ga25vdyB0 aGlzIGlzIGhhcHBlbmluZyBpbiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIFNvIGZhciwgdGhlcmUg YXJlIGp1c3QgdmFyaW91cyBjbHVlcyB0aGF0IG9uZSBuZWVkcyB0byBwaWVjZSB0b2dldGhlciAo bm8gb3IgZmV3IGRyb3BzIG9yIG1hcmtzLCBsZXNzIHRvdGFsIHRocm91Z2hwdXQgdGhhdCBleHBl Y3RlZCwgaGlnaCBjcHUgd2l0aG91dCBvdGhlciBleHRlcm5hbCB1c2FnZSwgZXRjKS4gVGhlbiBp dCBuZWVkcyB0byBiZSBwcm92ZW4gd2l0aCBhIHRlc3QuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp dj5Bbnl3YXkgdGhhbmtzLCB5b3VyIGNsdWUgd2FzIHdoYXQgSSBuZWVkZWQhIEkgbmVlZCB0byBy ZW1lbWJlciB0byByZXZpZXcgdGhlIHFkaXNjIHN0YXRzIHdoZW4gc29tZXRoaW5nIHVuZXhwZWN0 ZWQgaGFwcGVucy48L2Rpdj48L2Rpdj48YnI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19f PHdicj5fX19fX19fX19fX19fX19fXzxicj4NCkNha2UgbWFpbGluZyBsaXN0PGJyPg0KPGEgaHJl Zj0ibWFpbHRvOkNha2VAbGlzdHMuYnVmZmVyYmxvYXQubmV0Ij5DYWtlQGxpc3RzLmJ1ZmZlcmJs b2F0Lm5ldDwvYT48YnI+DQo8YSBocmVmPSJodHRwczovL2xpc3RzLmJ1ZmZlcmJsb2F0Lm5ldC9s aXN0aW5mby9jYWtlIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2xp c3RzLmJ1ZmZlcmJsb2F0Lm5ldC88d2JyPmxpc3RpbmZvL2Nha2U8L2E+PGJyPg0KPGJyPjwvYmxv Y2txdW90ZT48L2Rpdj48YnI+PC9kaXY+DQo= --001a1140a86824f235055ef93d59--