Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id DF4A1200C08 for ; Thu, 26 Jan 2017 19:43:23 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id DDEE3160B31; Thu, 26 Jan 2017 18:43:23 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 148B5160B4C for ; Thu, 26 Jan 2017 19:43:21 +0100 (CET) Received: (qmail 86371 invoked by uid 500); 26 Jan 2017 18:43:21 -0000 Mailing-List: contact user-help@helix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@helix.apache.org Delivered-To: mailing list user@helix.apache.org Received: (qmail 86204 invoked by uid 99); 26 Jan 2017 18:43:20 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Jan 2017 18:43:20 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 42D8F1A06D0 for ; Thu, 26 Jan 2017 18:43:20 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 3.58 X-Spam-Level: *** X-Spam-Status: No, score=3.58 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, KAM_LINEPADDING=1.2, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_SORBS_SPAM=0.5, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd2-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id t6_TNUTBCFZo for ; Thu, 26 Jan 2017 18:43:13 +0000 (UTC) Received: from mail-ot0-f177.google.com (mail-ot0-f177.google.com [74.125.82.177]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 0E1985F46F for ; Thu, 26 Jan 2017 18:43:13 +0000 (UTC) Received: by mail-ot0-f177.google.com with SMTP id 32so22752372oth.3 for ; Thu, 26 Jan 2017 10:43:13 -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=+gh61ClZNFIh3ckCJ1OaoLRlpo+c3luDqR+VHWdkJ6M=; b=M1oPsNXyNO6ubp5aMTwXovWjLoSPomU2p0BH5xm1XykU2CLHWyMkJOVO11/o5klm1i nHC5GpLXvnOQt7aPwDO4b9QD0V3IaMaKqZLs5YKsJjHZ9OIR7DOush68VG9fI7lR8T+I 8p2LjT14Zr6koxANmsX2raj8I2u1Idz1PiNxRdE+9OJjMV5q9p740z7+IOnpGrpuGHEJ aUhm+/gfWM+MxYPo3jJwwmhB6riWV1GkznAH4WXtVu4ZHj0sFYShhvozRAQd+qihwyVu aU+fCFJw6ovJCTROs+HSZpGumGA+Rzy6qpi0YGVM/CGRm6XADxELBXRuHQbpEDnGDey5 2f3Q== 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=+gh61ClZNFIh3ckCJ1OaoLRlpo+c3luDqR+VHWdkJ6M=; b=WsrzxmoTLPJC3aeJDnMjAUj/HP92d0tt+35yMISap+H8rWlS/KvuEwvKcadMKmyX/b N6KmhTKhMW2pPE/DFTyKelIq7RpfdmNmgm6/AR4XRocnJh+bhuO7iquH/S/+40di8JWu /+oFtJr9duZXZSKZdn72Bys19eUh3OiR6l4iuqUG7gX0FcZC6P4AH/7hjL8uuG3ZzqRY ZxBhV/ziQlVLqV7Cmn00Bzk4kkRZDpXkyuuDr/zJnknmEgxTR2xApPbYDp1r7+c6eYA/ yiFtqy4BiGjCx2zzrwxm05RAomQn4iR6IN4DdJIe8Iy6ViMnmPHpfAeqIIz2wJkl/JVe iS5A== X-Gm-Message-State: AIkVDXIdQI/+bJNpDKCQIIRTFErPw4M+24mx8ksnHQ4yDnNDgGQn//SV3gxYwXxEj8WGt0cNHW59qscn2+3O2A== X-Received: by 10.157.38.162 with SMTP id l31mr1760859otb.58.1485456186310; Thu, 26 Jan 2017 10:43:06 -0800 (PST) MIME-Version: 1.0 Received: by 10.182.108.74 with HTTP; Thu, 26 Jan 2017 10:43:05 -0800 (PST) In-Reply-To: <601506644E25B342B1ACD8B1EC5D43CFA332BFC7@CAEXE01.integral.com> References: <601506644E25B342B1ACD8B1EC5D43CFA332BE76@CAEXE01.integral.com> <601506644E25B342B1ACD8B1EC5D43CFA332BED9@CAEXE01.integral.com> <601506644E25B342B1ACD8B1EC5D43CFA332BFC7@CAEXE01.integral.com> From: kishore g Date: Thu, 26 Jan 2017 10:43:05 -0800 Message-ID: Subject: Re: Double assignment , when participant is not able to establish connection with zookeeper quorum To: "user@helix.apache.org" Cc: "dev@helix.incubator.apache.org" Content-Type: multipart/related; boundary=001a1143921850b9c8054703b884 archived-at: Thu, 26 Jan 2017 18:43:24 -0000 --001a1143921850b9c8054703b884 Content-Type: multipart/alternative; boundary=001a1143921850b9c5054703b883 --001a1143921850b9c5054703b883 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Can you please file a ticket and we can probably add this in the next release. Minor typo in my email. 1. There is a pathological case where all zookeeper nodes get partitioned/crash/GC. In this case, we will make all participants disconnect and assume they don't own the partition. But when zookeepers come out of GC, it can continue as if nothing happened i.e it does not account for the time when its down. I can't think of a good solution for this scenario. Moreover, we *cannot* differentiate between a participant GC'ing/partitioned v/s ZK ensemble crash/partition/GC. This is typically avoided by ensuring ZK servers are deployed on different racks. On Thu, Jan 26, 2017 at 10:34 AM, Subramanian Raghunathan < subramanian.raghunathan@integral.com> wrote: > Totally concur your thought, a config based approach would be better .It > could be tuned based on the acceptable tolerance and consistency. > > > > Thanks, > > Subramanian. > > > > Tel: +1 (650) 424 4655 <(650)%20424-4655> > > > > 3400 Hillview Ave, Building 4 > > Palo Alto, CA 94304 > > www.integral.com > > [image: Logo_signature_block] > > > NOTICE: This e-mail message and any attachments, which may contain > confidential information, are to be viewed solely by the intended recipie= nt > of Integral Development Corp. For further information, please visit > http://www.integral.com/about/disclaimer.html. > > > > > > > > *From:* kishore g [mailto:g.kishore@gmail.com] > *Sent:* Wednesday, January 25, 2017 7:12 PM > > *To:* user@helix.apache.org > *Cc:* dev@helix.incubator.apache.org > *Subject:* Re: Double assignment , when participant is not able to > establish connection with zookeeper quorum > > > > Helix can handle this and probably should. Couple of challenges here are > > 1. How to generalize this across all use cases. This is a > trade-off between availability and ensuring there is only one leader p= er > partition. > 2. There is a pathological case where all zookeeper nodes get > partitioned/crash/GC. In this case, we will make all participants > disconnect and assume they don't own the partition. But when zookeeper= s > come out of GC, it can continue as if nothing happened i.e it does not > account for the time when its down. I can't think of a good solution f= or > this scenario. Moreover, we can differentiate between a participant > GC'ing/partitioned v/s ZK ensemble crash/partition/GC. This is typical= ly > avoided by ensuring ZK servers are deployed on different racks. > > Having said that, I think implementing a config based solution is worth > it. > > > > > > > > > > > > On Wed, Jan 25, 2017 at 4:57 PM, Subramanian Raghunathan < > subramanian.raghunathan@integral.com> wrote: > > Hi Kishore , > > > > Thank you for the confirmation , yes we had solved it in > similar lines and it did work for us (listening on the disconnect event > from ZK). > > > > From the double assignment point of view is it an expecte= d > behavior from Helix and the users to handle the same ? Is there any plans > to fix the same in future ? > > > > Because what I had observed when the network is flapping helix does handl= e > it by calling reset () for the partition(s) from the (disconnect()), then > why not in this case ? > > > > void org.apache.helix.manager.zk.ZkHelixConnection.handleStateChanged(Kee= perState > state) throws Exception > > > > if (isFlapping()) { > > LOG.error("helix-connection: " + this + ", sessionId: " + > _sessionId > > + " is flapping. diconnect it. " + " maxDisconnectThreshold: = " > > + _maxDisconnectThreshold + " disconnects in " + > _flappingTimeWindowMs + "ms"); > > disconnect(); > > } > > > > > > Thanks & Regards, > > Subramanian. > > > > Tel: +1 (650) 424 4655 <(650)%20424-4655> > > > > 3400 Hillview Ave, Building 4 > > Palo Alto, CA 94304 > > www.integral.com > > [image: Logo_signature_block] > > > NOTICE: This e-mail message and any attachments, which may contain > confidential information, are to be viewed solely by the intended recipie= nt > of Integral Development Corp. For further information, please visit > http://www.integral.com/about/disclaimer.html. > > > > > > > > *From:* kishore g [mailto:g.kishore@gmail.com] > *Sent:* Wednesday, January 25, 2017 4:45 PM > *To:* user@helix.apache.org > *Cc:* dev@helix.incubator.apache.org > *Subject:* Re: Double assignment , when participant is not able to > establish connection with zookeeper quorum > > > > After few seconds, the participant N1 gets a disconnect event from ZK. At > this time, schedule a timer task for (30 - X) seconds. 30 is the session > timeout and X can vary from 0 to 30 depending on how long you are ok to n= ot > have a P1 being down. > > > > When the timer task kicks in and N1 is still disconnected from the > cluster, assume that this N1 is no longer the owner of P1. > > > > After 30 seconds, Helix will notice that N1 is network partitioned and > will assign P1 to N2. > > This will ensure that there is no overlap. > > > > Will that work for you? > > > > > > On Wed, Jan 25, 2017 at 4:17 PM, Subramanian Raghunathan < > subramanian.raghunathan@integral.com> wrote: > > Hi , > > > > Double assignment , when participant is not able to establish connection > with zookeeper quorum > > > > Following is the set up. > > > > Version(s) : > > Helix: 0.7.1 > > Zookeeper:3.3.4 > > > > - State Model: OnlineOffline > > - Controller (leader elected from one of the cluster nodes) > > - Single resources with partitions. > > - Full auto rebalancer > > > > -Zookeeper quorum (3 nodes) > > > > When one participant loses the zookeeper connection (It=E2=80=99s not abl= e to > connect to any of the zookeepers , a typical occurrence we faced was swit= ch > failure from that rack) > > > > ---- > The partition (P1) for which this participant (say Node N1) is > online is still maintained > > > > Meanwhile since it loses the ephemeral node in zookeeper , the rebalance= r > gets triggered and it reallocates the partition (P1) to another participa= nt > node (say Node N2) to become online @ time T1 > > > > ---- > *After this both N1 and N2 are acting as online > for the same Partition (P1) * > > > > But as soon as participant in (say Node N1) is able to re-establish the > zookeeper connection @ time T2 > > ---- > Reset gets called on the partition in participant > (say Node N1) > > > > Double assignment: > > The question here is this an expected behavior that both nodes N1 and N2 > could be online for the same Partition (P1) between time (T1-T2) ? Any > responses on the same would be appreciated. > > > > Thanks & Regards, > > Subramanian. > > > > 3400 Hillview Ave, Building 4 > > Palo Alto, CA 94304 > > www.integral.com > > [image: Logo_signature_block] > > > NOTICE: This e-mail message and any attachments, which may contain > confidential information, are to be viewed solely by the intended recipie= nt > of Integral Development Corp. For further information, please visit > http://www.integral.com/about/disclaimer.html. > > > > > > > > > > > --001a1143921850b9c5054703b883 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Can you please file = a ticket and we can probably add this in the next release.=C2=A0

Minor typo in my email.

  1. There is a pathological case where all zookeeper = nodes get partitioned/crash/GC. In this case, we will make all participants= disconnect and assume they don't own the partition. But when zookeeper= s come out of GC, it can continue as if nothing happened i.e it does not ac= count for the time when its down. I can't think of a good solution for = this scenario. Moreover, we c= annot differentiate between a participant GC'ing/partitioned v/s ZK= ensemble crash/partition/GC. This is typically avoided by ensuring ZK serv= ers are deployed on different racks.

On Thu, Jan 26, 2017 at 10:34 AM, Subram= anian Raghunathan <subramanian.raghunathan@integral.com= > wrote:

Totally concur your thought, =C2=A0a config based a= pproach would be better .It could be tuned based on the acceptable toleranc= e and consistency.

=C2=A0

Thanks,

Subramanian.

=C2=A0

Tel: +1 (650) 424 4655

=C2=A0

3400 Hillview Ave, Building 4<= u>

Palo A= lto, CA 94304

www.integral.com<= /u>

3D"Logo_signat=

NOTICE: This e-mail message and any attachments, which may contain confiden= tial information, are to be viewed solely by the intended recipient of Inte= gral Development Corp. For further information, please visit
http://www.integral.co= m/about/disclaimer.html.

=C2=A0

=C2=A0

=C2=A0

From: kishore g [mailto:g.kishore@gmail.com= ]
Sent: Wednesday, January 25, 2017 7:12 PM


To: user@= helix.apache.org
Cc: dev@helix.incubator.apache.org
Subject: Re: Double assignment , when participant is not able to est= ablish connection with zookeeper quorum

=C2=A0

Helix can handle this and probably should. Couple of= challenges here are

  1. How to generalize this across all use cases. This is a trade-off=C2=A0betwe= en availability and ensuring there is only one leader per partition.=C2=A0<= u>
  2. There is a pathological case where all zookeeper nodes get partitioned/cras= h/GC. In this case, we will make all participants disconnect and assume the= y don't own the partition. But when zookeepers come out of GC, it can c= ontinue as if nothing happened i.e it does not account for the time when its down. I can't think of a good s= olution for this scenario. Moreover, we can differentiate between a partici= pant GC'ing/partitioned v/s ZK ensemble crash/partition/GC. This is typ= ically avoided by ensuring ZK servers are deployed on different racks.

Having said that, I think implementing a config base= d solution is worth it.=C2=A0

=C2=A0

=C2=A0

=C2=A0

=C2=A0

=C2=A0

On Wed, Jan 25, 2017 at 4:57 PM, Subramanian Raghuna= than <subramanian.raghunathan@integral.com> wrote:<= /u>

Hi Kishore ,

=C2=A0

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Thank you for the confirmation , ye= s we had solved it in similar lines and it did work for us (listening on the disconnect event from ZK).

=C2=A0

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 From the double assignment point of= view is it an expected behavior from Helix and the users to handle the same ? Is there any plans to fix the same in future ?

=C2=A0

Because what I had observed when the network is flapping helix does handle= it by calling reset () for the partition(s) from the (disconnect()), then = why not in this case ?

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0

void org.apache.helix.manager.zk.ZkHelixConnec= tion.handleStateChanged(KeeperState state) throws Exception<= /u>

=C2=A0

if (isFlapping()) {

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 LOG.erro= r("helix-connection: " + this + ", sessionId: " + _sess= ionId

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 + " is flapping. diconnect it. " + " maxDisc= onnectThreshold: "

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 + _maxDisconnectThreshold + " disconnects in " + = _flappingTimeWindowMs + "ms");

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 disconne= ct();

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }

=C2=A0

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0

Thanks & Regards,

Subramanian.

=C2=A0

Tel: +1 (650) 424 4655

=C2=A0

3400 Hillview Ave, Building 4<= u>

Palo A= lto, CA 94304

www.integral.com

3D"Logo_signature_block"

NOTICE: This e-mail message and any attachments, which may contain confiden= tial information, are to be viewed solely by the intended recipient of Inte= gral Development Corp. For further information, please visit
http://www.integral.co= m/about/disclaimer.html.

=C2=A0

=C2=A0

=C2=A0

From: kishore g [mailto:g.kishore@gmail.com]
Sent: Wednesday, January 25, 2017 4:45 PM
To: user@= helix.apache.org
Cc: dev@helix.incubator.apache.org
Subject: Re: Double assignment , when participant is not able to est= ablish connection with zookeeper quorum

=C2=A0

After few seconds, the participant N1 gets a disconn= ect event from ZK. At this time, schedule a timer task for (30 =C2=A0- X) s= econds. 30 is the session timeout and X can vary from 0 to 30 depending on how long you are ok to not have a P1 being down.=C2=A0<= u>

=C2=A0

When the timer task kicks in and N1 is still disconn= ected from the cluster, assume that this N1 is no longer the owner of P1.

=C2=A0

After 30 seconds, Helix will notice that N1 is netwo= rk partitioned and will assign P1 to N2.=C2=A0

This will ensure that there is no overlap.=

=C2=A0

Will that work for you?

=C2=A0

=C2=A0

On Wed, Jan 25, 2017 at 4:17 PM, Subramanian Raghuna= than <subramanian.raghunathan@integral.com> wrote:<= /u>

Hi ,

=C2=A0

Double assignment , when participant is not able to = establish connection with zookeeper quorum

=C2=A0

Following is the=C2=A0 set up.

=C2=A0

Version(s) :

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Helix: 0.= 7.1

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Zookeeper= :3.3.4

=C2=A0

- State Model: OnlineOffline

- Controller (leader elected from one of the cluster= nodes)

- Single resources with partitions.

- Full auto rebalancer

=C2=A0

-Zookeeper quorum (3 nodes)

=C2=A0

When one participant loses the zookeeper connection = (It=E2=80=99s not able to connect to any of the zookeepers , a typical occu= rrence we faced was switch failure from that rack)

=C2=A0

=C2=A0 ---- >=C2=A0 The partition (P1) for which = this participant (say Node N1) is online is still maintained<= /p>

=C2=A0

Meanwhile since it loses the ephemeral=C2=A0 node in= zookeeper , the rebalancer gets triggered and it reallocates the partition= (P1) to another participant node (say Node N2) to become online =C2=A0@ time T1

=C2=A0

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ---- >=C2=A0 After this both N1 and N2 are acting as online for the same Partition (P= 1)

=C2=A0

But as soon as participant in (say Node N1) is able = to re-establish the zookeeper connection=C2=A0 @ time T2

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ---- >=C2=A0 Reset gets called o= n the partition in participant (say Node N1)

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0

Double assignment:

The question here is this an expected behavior that = both nodes N1 and N2 could be online for the same Partition (P1) between ti= me (T1-T2) ? Any responses on the same would be appreciated.<= /p>

=C2=A0

Thank= s & Regards,

Subra= manian.

=C2= =A0

3400 = Hillview Ave, Building 4

Palo Alto, CA 94304

www.integral.com<= /span>

3D"Logo_signat=

NOTICE: This e-mail message and any attachments, which may contain confiden= tial information, are to be viewed solely by the intended recipient of Inte= gral Development Corp. For further information, please visit
http://www.integral.com/about/disclaimer.html.

=C2=A0

=C2=A0

=C2=A0

=C2=A0

=C2=A0


--001a1143921850b9c5054703b883-- --001a1143921850b9c8054703b884 Content-Type: image/png; name="image001.png" Content-Disposition: inline; filename="image001.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: dca24e2c5d6ccbe4_0.1 iVBORw0KGgoAAAANSUhEUgAAASIAAAB4CAIAAADZvmjEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAA4hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1 OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1NTE5M2ZkYi1iMTU3LTQ0NWMtOTJiMy0yNzIw YjZlMTE2OWYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDU4NDE2ODYzRDY5MTFFNjlEOURE NTIwMTQxNTdCRjYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDU4NDE2ODUzRDY5MTFFNjlE OURENTIwMTQxNTdCRjYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUu NSAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAu aWlkOjM1NTE5MDM2LWRiNDAtNDE1YS1iNjAzLTYwMjFkZjJkNGI1OSIgc3RSZWY6ZG9jdW1lbnRJ RD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjIxYmQ2MWZjLTg1MGMtMTE3OS1iN2U3LWY5NzkxZmMy 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 --001a1143921850b9c8054703b884--