From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Load increase after memory upgrade (part2) Date: Thu, 24 Nov 2011 13:28:44 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5279143288043207915==" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?konrad=2Ewilk?= Cc: =?utf-8?Q?xen-devel?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============5279143288043207915== Content-Type: multipart/alternative; boundary="=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello again, I would like to come back to that thing...sorry that I did n= ot have the time up to now.=0D=0A=0D=0A=C2=A0=0D=0AWe (now) speak about=0D= =0A=0D=0A=C2=A0=0D=0A*=09Xen 4.1.2=0D=0A*=09Dom0 is Jeremy's 2.6.32.46 64= bit=0D=0A*=09DomU in question is now 3.1.2 64 bit=0D=0A*=09Same thing if= DomU is also 2.6.32.46=0D=0A*=09DomU owns two PCI cards (DVB-C) that o D= MA=0D=0A*=09Machine has 8GB, Dom0 pinned at 512MB=0D=0A=0D=0A=C2=A0=0D=0A= As compared to 2.6.34 Kernel with backported patches, the load on the Dom= U is at least twice as high. It=0D=0A=0D=0Awill be "close to normal" if I= reduce the memory used to 4GB.=0D=0A=0D=0A=C2=A0=0D=0AAs you can see fro= m the attachment, you once had an idea. So should we try to find somethin= g...=3F=0D=0A=0D=0A=C2=A0=0D=0ACarsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3=BC= ngliche Nachricht-----=0D=0AAn:konrad.wilk ;=20=0D= =0ACC:linux ; xen-devel ;=20=0D=0AVon:Carsten Schiers =0D=0AGesendet:Mi 2= 9.06.2011 23:17=0D=0ABetreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load= increase after memory upgrade=3F=0D=0A> Lets first do the c) experiment = as that will likely explain your load average increase.=0D=0A...=0D=0A> >= c). If you want to see if the fault here lies in the bounce buffer=20=0D=0A= > being used more=0D=0A> >often in the DomU b/c you have 8GB of memory no= w and you end up using=20=0D=0A> more pages=0D=0A> >past 4GB (in DomU), I= can cook up a patch to figure this out. But an=20=0D=0A> easier way is=0D= =0A> >to just do (on the Xen hypervisor line): mem=3D4G and that will mak= e=20=0D=0A> think you only have=0D=0A> >4GB of physical RAM. =C2=A0If the= load comes back to the normal "amount"=20=0D=0A> then the likely=0D=0A> = >culprit is that and we can think on how to fix this.=0D=0A=0D=0AYou are = on the right track. Load was going down to "normal" 10% when reducing=0D=0A= Xen to 4GB by the parameter. Load seems to be still a little, little bit = lower=0D=0Awith Xenified Kernel (8-9%), but this is drastically lower tha= n the 20% we had=0D=0Abefore.=0D=0A --=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A Load increase= after memory upgrade (part2)=0A =0A=0A=0A

Hello again, I = would like to come back to that thing...sorry that I did not have the tim= e up to now.

 

We (now) speak about

 

    =
  • Xen 4.1.2
  • Dom0 is Jeremy's 2.6.32.46 64 bit
  • DomU = in question is now 3.1.2 64 bit
  • Same thing if DomU is also 2.6.32= =2E46
  • DomU owns two PCI cards (DVB-C) that o DMA
  • Machine = has 8GB, Dom0 pinned at 512MB

 

As compared to 2.6= =2E34 Kernel with backported patches, the load on the DomU is at least tw= ice as high. It

will be "close to normal" if I reduce the= memory used to 4GB.

 

As you can see from the attachmen= t, you once had an idea. So should we try to find something...=3F

&= nbsp;

Carsten.
 

-----Ursprünglic= he Nachricht-----
An:=09konrad.wilk <konrad.wilk= @oracle.com>;
CC:=09linux <linux@eikelenboom= =2Eit>; xen-devel <xen-devel@lists.xensource.com>;
Von:=09Carsten Schiers <carsten@schiers.de>
= Gesendet:=09Mi 29.06.2011 23:17
Betreff:=09= AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrad= e=3F
> Lets first do the c) experiment as that will likely explai= n your load average increase.
...
> >c). If you want to s= ee if the fault here lies in the bounce buffer
> being used more=
> >often in the DomU b/c you have 8GB of memory now and you e= nd up using
> more pages
> >past 4GB (in DomU), I can= cook up a patch to figure this out. But an
> easier way is
> >to just do (on the Xen hypervisor line): mem=3D4G and that will= make
> think you only have
> >4GB of physical RAM. &= nbsp;If the load comes back to the normal "amount"
> t= hen the likely
> >culprit is that and we can think on how to f= ix this.

You are on the right track. Load was going down to &q= uot;normal" 10% when reducing
Xen to 4GB by the parameter. Load= seems to be still a little, little bit lower
with Xenified Kernel (= 8-9%), but this is drastically lower than the 20% we had
before.
=0A=0A --=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac-- --===============5279143288043207915== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============5279143288043207915==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 25 Nov 2011 14:42:33 -0400 Message-ID: <20111125184233.GB26841@andromeda.dapyr.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: xen-devel , "konrad.wilk" List-Id: xen-devel@lists.xenproject.org On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote: > Hello again, I would like to come back to that thing...sorry that I did not have the time up to now. > > ?? > We (now) speak about > > ?? > * Xen 4.1.2 > * Dom0 is Jeremy's 2.6.32.46 64 bit > * DomU in question is now 3.1.2 64 bit > * Same thing if DomU is also 2.6.32.46 > * DomU owns two PCI cards (DVB-C) that o DMA > * Machine has 8GB, Dom0 pinned at 512MB > > ?? > As compared to 2.6.34 Kernel with backported patches, the load on the DomU is at least twice as high. It > > will be "close to normal" if I reduce the memory used to 4GB. That is in the dom0 or just in general on the machine? > > ?? > As you can see from the attachment, you once had an idea. So should we try to find something...? I think that was to instrument swiotlb to give an idea of how often it is called and basically have a matrix of its load. And from there figure out if the issue is that: 1). The drivers allocoate/bounce/deallocate buffers on every interrupt (bad, driver should be using some form of dma pool and most of the ivtv do that) 2). The buffers allocated to the drivers are above the 4GB and we end up bouncing it needlessly. That can happen if the dom0 has most of the precious memory under 4GB. However, that is usually not the case as the domain isusually allocated from the top of the memory. The fix for that was to set dom0_mem=max:XX. .. but with Dom0 kernels before 3.1, the parameter would be ignored, so you had to use 'mem=XX' on the Linux command line as well. 3). Where did you get the load values? Was it dom0? or domU? > > ?? > Carsten. > ?? > -----Urspr??ngliche Nachricht----- > An:konrad.wilk ; > CC:linux ; xen-devel ; > Von:Carsten Schiers > Gesendet:Mi 29.06.2011 23:17 > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrade? > > Lets first do the c) experiment as that will likely explain your load average increase. > ... > > >c). If you want to see if the fault here lies in the bounce buffer > > being used more > > >often in the DomU b/c you have 8GB of memory now and you end up using > > more pages > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an > > easier way is > > >to just do (on the Xen hypervisor line): mem=4G and that will make > > think you only have > > >4GB of physical RAM. ??If the load comes back to the normal "amount" > > then the likely > > >culprit is that and we can think on how to fix this. > > You are on the right track. Load was going down to "normal" 10% when reducing > Xen to 4GB by the parameter. Load seems to be still a little, little bit lower > with Xenified Kernel (8-9%), but this is drastically lower than the 20% we had > before. > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Fri, 25 Nov 2011 23:11:55 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20111125184233.GB26841@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?konrad=2Ewilk?= List-Id: xen-devel@lists.xenproject.org I got the values in DomU. I will have - aprox. 5% load in DomU with 2.6.34 Xenified Kernel - aprox. 15% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with one = card attached - aprox. 30% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with two = cards attached I looked through my old mails from you and you explained already the necess= ity of double bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: w= hy does the Xenified kernel not have this kind of issue? The driver in question is nearly identical between the two kernel versions.= It is in Drivers/media/dvb/ttpci by the way and when I understood the code right, th= e allo in = question is: /* allocate and init buffers */ av7110->debi_virt =3D pci_alloc_consistent(pdev, 8192, &av7110->deb= i_bus); if (!av7110->debi_virt) goto err_saa71466_vfree_4; isn't it? I think the cards are constantly transferring the stream received= through DMA. = I have set dom0_mem=3D512M by the way, shall I change that in some way? I can try out some things, if you want me to. But I have no idea what to do= and where to start, so I rely on your help... Carsten. -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.= xensource.com] Im Auftrag von Konrad Rzeszutek Wilk Gesendet: Freitag, 25. November 2011 19:43 An: Carsten Schiers Cc: xen-devel; konrad.wilk Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote: > Hello again, I would like to come back to that thing...sorry that I did n= ot have the time up to now. > = > ?? > We (now) speak about > = > ?? > * Xen 4.1.2 > * Dom0 is Jeremy's 2.6.32.46 64 bit > * DomU in question is now 3.1.2 64 bit > * Same thing if DomU is also 2.6.32.46 > * DomU owns two PCI cards (DVB-C) that o DMA > * Machine has 8GB, Dom0 pinned at 512MB > = > ?? > As compared to 2.6.34 Kernel with backported patches, the load on the Dom= U is at least twice as high. It > = > will be "close to normal" if I reduce the memory used to 4GB. That is in the dom0 or just in general on the machine? > = > ?? > As you can see from the attachment, you once had an idea. So should we tr= y to find something...? I think that was to instrument swiotlb to give an idea of how often it is called and basically have a matrix of its load. And from there figure out if the issue is that: 1). The drivers allocoate/bounce/deallocate buffers on every interrupt (bad, driver should be using some form of dma pool and most of the ivtv do that) 2). The buffers allocated to the drivers are above the 4GB and we end up bouncing it needlessly. That can happen if the dom0 has most of the precious memory under 4GB. However, that is usually not the case as the domain isusually allocated from the top of the memory. The fix for that was to set dom0_mem=3Dmax:XX. .. but with Dom0 kernels before 3.1, the parameter would be ignored, so you had to use 'mem=3DXX' on the Linux command line as well. 3). Where did you get the load values? Was it dom0? or domU? > = > ?? > Carsten. > ?? > -----Urspr??ngliche Nachricht----- > An:konrad.wilk ; = > CC:linux ; xen-devel ; = > Von:Carsten Schiers > Gesendet:Mi 29.06.2011 23:17 > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memor= y upgrade? > > Lets first do the c) experiment as that will likely explain your load a= verage increase. > ... > > >c). If you want to see if the fault here lies in the bounce buffer = > > being used more > > >often in the DomU b/c you have 8GB of memory now and you end up using = > > more pages > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an = > > easier way is > > >to just do (on the Xen hypervisor line): mem=3D4G and that will make = > > think you only have > > >4GB of physical RAM. ??If the load comes back to the normal "amount" = > > then the likely > > >culprit is that and we can think on how to fix this. > = > You are on the right track. Load was going down to "normal" 10% when redu= cing > Xen to 4GB by the parameter. Load seems to be still a little, little bit = lower > with Xenified Kernel (8-9%), but this is drastically lower than the 20% w= e had > before. > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Sat, 26 Nov 2011 10:14:08 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20111125184233.GB26841@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?konrad=2Ewilk?= List-Id: xen-devel@lists.xenproject.org To add (read from some munin statistics I made over the time): - with load I mean the %CPU of xentop - there is no change in CPU usage of the DomU or Dom0 - xenpm shows the core dedicated to that DomU is doing more work Also I need to say that reduction to 4GB was performed by Xen parameter. Carsten. -----Urspr=FCngliche Nachricht----- Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] = Gesendet: Freitag, 25. November 2011 19:43 An: Carsten Schiers Cc: konrad.wilk; xen-devel Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote: > Hello again, I would like to come back to that thing...sorry that I did n= ot have the time up to now. > = > ?? > We (now) speak about > = > ?? > * Xen 4.1.2 > * Dom0 is Jeremy's 2.6.32.46 64 bit > * DomU in question is now 3.1.2 64 bit > * Same thing if DomU is also 2.6.32.46 > * DomU owns two PCI cards (DVB-C) that o DMA > * Machine has 8GB, Dom0 pinned at 512MB > = > ?? > As compared to 2.6.34 Kernel with backported patches, the load on the Dom= U is at least twice as high. It > = > will be "close to normal" if I reduce the memory used to 4GB. That is in the dom0 or just in general on the machine? > = > ?? > As you can see from the attachment, you once had an idea. So should we tr= y to find something...? I think that was to instrument swiotlb to give an idea of how often it is called and basically have a matrix of its load. And from there figure out if the issue is that: 1). The drivers allocoate/bounce/deallocate buffers on every interrupt (bad, driver should be using some form of dma pool and most of the ivtv do that) 2). The buffers allocated to the drivers are above the 4GB and we end up bouncing it needlessly. That can happen if the dom0 has most of the precious memory under 4GB. However, that is usually not the case as the domain isusually allocated from the top of the memory. The fix for that was to set dom0_mem=3Dmax:XX. .. but with Dom0 kernels before 3.1, the parameter would be ignored, so you had to use 'mem=3DXX' on the Linux command line as well. 3). Where did you get the load values? Was it dom0? or domU? > = > ?? > Carsten. > ?? > -----Urspr??ngliche Nachricht----- > An:konrad.wilk ; = > CC:linux ; xen-devel ; = > Von:Carsten Schiers > Gesendet:Mi 29.06.2011 23:17 > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memor= y upgrade? > > Lets first do the c) experiment as that will likely explain your load a= verage increase. > ... > > >c). If you want to see if the fault here lies in the bounce buffer = > > being used more > > >often in the DomU b/c you have 8GB of memory now and you end up using = > > more pages > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an = > > easier way is > > >to just do (on the Xen hypervisor line): mem=3D4G and that will make = > > think you only have > > >4GB of physical RAM. ??If the load comes back to the normal "amount" = > > then the likely > > >culprit is that and we can think on how to fix this. > = > You are on the right track. Load was going down to "normal" 10% when redu= cing > Xen to 4GB by the parameter. Load seems to be still a little, little bit = lower > with Xenified Kernel (8-9%), but this is drastically lower than the 20% w= e had > before. > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 28 Nov 2011 11:28:29 -0400 Message-ID: <20111128152829.GC9655@andromeda.dapyr.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers , zhenzhong.duan@oracle.com, lersek@redhat.com Cc: xen-devel , "konrad.wilk" List-Id: xen-devel@lists.xenproject.org On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote: > I got the values in DomU. I will have > > - aprox. 5% load in DomU with 2.6.34 Xenified Kernel > - aprox. 15% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with one card attached > - aprox. 30% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with two cards attached HA! I just wonder if the issue is that the reporting of CPU spent is wrong. Laszlo Ersek and Zhenzhong Duan have both reported a bug in the pvops code when it came to account of CPU time. > > I looked through my old mails from you and you explained already the necessity of double > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the > Xenified kernel not have this kind of issue? That is a puzzle. It should not. The code is very much the same - both use the generic SWIOTLB which has not changed for years. > > The driver in question is nearly identical between the two kernel versions. It is in > Drivers/media/dvb/ttpci by the way and when I understood the code right, the allo in > question is: > > /* allocate and init buffers */ > av7110->debi_virt = pci_alloc_consistent(pdev, 8192, &av7110->debi_bus); Good. So it allocates it during init and uses it. > if (!av7110->debi_virt) > goto err_saa71466_vfree_4; > > isn't it? I think the cards are constantly transferring the stream received through DMA. Yeah, and that memory is set aside for the life of the driver. So there should be no bounce buffering happening (as it allocated the memory below the 4GB mark). > > I have set dom0_mem=512M by the way, shall I change that in some way? Does the reporting (CPU usage of DomU) change in any way with that? > > I can try out some things, if you want me to. But I have no idea what to do and where to > start, so I rely on your help... > > Carsten. > > -----Urspr?ngliche Nachricht----- > Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.xensource.com] Im Auftrag von Konrad Rzeszutek Wilk > Gesendet: Freitag, 25. November 2011 19:43 > An: Carsten Schiers > Cc: xen-devel; konrad.wilk > Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > > On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote: > > Hello again, I would like to come back to that thing...sorry that I did not have the time up to now. > > > > ?? > > We (now) speak about > > > > ?? > > * Xen 4.1.2 > > * Dom0 is Jeremy's 2.6.32.46 64 bit > > * DomU in question is now 3.1.2 64 bit > > * Same thing if DomU is also 2.6.32.46 > > * DomU owns two PCI cards (DVB-C) that o DMA > > * Machine has 8GB, Dom0 pinned at 512MB > > > > ?? > > As compared to 2.6.34 Kernel with backported patches, the load on the DomU is at least twice as high. It > > > > will be "close to normal" if I reduce the memory used to 4GB. > > That is in the dom0 or just in general on the machine? > > > > ?? > > As you can see from the attachment, you once had an idea. So should we try to find something...? > > I think that was to instrument swiotlb to give an idea of how > often it is called and basically have a matrix of its load. And > from there figure out if the issue is that: > > 1). The drivers allocoate/bounce/deallocate buffers on every interrupt > (bad, driver should be using some form of dma pool and most of the > ivtv do that) > > 2). The buffers allocated to the drivers are above the 4GB and we end > up bouncing it needlessly. That can happen if the dom0 has most of > the precious memory under 4GB. However, that is usually not the case > as the domain isusually allocated from the top of the memory. The > fix for that was to set dom0_mem=max:XX. .. but with Dom0 kernels > before 3.1, the parameter would be ignored, so you had to use > 'mem=XX' on the Linux command line as well. > > 3). Where did you get the load values? Was it dom0? or domU? > > > > > > > ?? > > Carsten. > > ?? > > -----Urspr??ngliche Nachricht----- > > An:konrad.wilk ; > > CC:linux ; xen-devel ; > > Von:Carsten Schiers > > Gesendet:Mi 29.06.2011 23:17 > > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrade? > > > Lets first do the c) experiment as that will likely explain your load average increase. > > ... > > > >c). If you want to see if the fault here lies in the bounce buffer > > > being used more > > > >often in the DomU b/c you have 8GB of memory now and you end up using > > > more pages > > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an > > > easier way is > > > >to just do (on the Xen hypervisor line): mem=4G and that will make > > > think you only have > > > >4GB of physical RAM. ??If the load comes back to the normal "amount" > > > then the likely > > > >culprit is that and we can think on how to fix this. > > > > You are on the right track. Load was going down to "normal" 10% when reducing > > Xen to 4GB by the parameter. Load seems to be still a little, little bit lower > > with Xenified Kernel (8-9%), but this is drastically lower than the 20% we had > > before. > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 28 Nov 2011 11:30:27 -0400 Message-ID: <20111128153027.GD9655@andromeda.dapyr.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: xen-devel , "konrad.wilk" List-Id: xen-devel@lists.xenproject.org On Sat, Nov 26, 2011 at 10:14:08AM +0100, Carsten Schiers wrote: > To add (read from some munin statistics I made over the time): > > - with load I mean the %CPU of xentop > - there is no change in CPU usage of the DomU or Dom0 Uhh, which matrix are using for that? CPU usage...? This is if you change the DomU or the amount of memory the guest has? This is not the load number (xentop value)? > - xenpm shows the core dedicated to that DomU is doing more work > > Also I need to say that reduction to 4GB was performed by Xen parameter. > > Carsten. > > > -----Urspr?ngliche Nachricht----- > Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] > Gesendet: Freitag, 25. November 2011 19:43 > An: Carsten Schiers > Cc: konrad.wilk; xen-devel > Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > > On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote: > > Hello again, I would like to come back to that thing...sorry that I did not have the time up to now. > > > > ?? > > We (now) speak about > > > > ?? > > * Xen 4.1.2 > > * Dom0 is Jeremy's 2.6.32.46 64 bit > > * DomU in question is now 3.1.2 64 bit > > * Same thing if DomU is also 2.6.32.46 > > * DomU owns two PCI cards (DVB-C) that o DMA > > * Machine has 8GB, Dom0 pinned at 512MB > > > > ?? > > As compared to 2.6.34 Kernel with backported patches, the load on the DomU is at least twice as high. It > > > > will be "close to normal" if I reduce the memory used to 4GB. > > That is in the dom0 or just in general on the machine? > > > > ?? > > As you can see from the attachment, you once had an idea. So should we try to find something...? > > I think that was to instrument swiotlb to give an idea of how > often it is called and basically have a matrix of its load. And > from there figure out if the issue is that: > > 1). The drivers allocoate/bounce/deallocate buffers on every interrupt > (bad, driver should be using some form of dma pool and most of the > ivtv do that) > > 2). The buffers allocated to the drivers are above the 4GB and we end > up bouncing it needlessly. That can happen if the dom0 has most of > the precious memory under 4GB. However, that is usually not the case > as the domain isusually allocated from the top of the memory. The > fix for that was to set dom0_mem=max:XX. .. but with Dom0 kernels > before 3.1, the parameter would be ignored, so you had to use > 'mem=XX' on the Linux command line as well. > > 3). Where did you get the load values? Was it dom0? or domU? > > > > > > > ?? > > Carsten. > > ?? > > -----Urspr??ngliche Nachricht----- > > An:konrad.wilk ; > > CC:linux ; xen-devel ; > > Von:Carsten Schiers > > Gesendet:Mi 29.06.2011 23:17 > > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrade? > > > Lets first do the c) experiment as that will likely explain your load average increase. > > ... > > > >c). If you want to see if the fault here lies in the bounce buffer > > > being used more > > > >often in the DomU b/c you have 8GB of memory now and you end up using > > > more pages > > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an > > > easier way is > > > >to just do (on the Xen hypervisor line): mem=4G and that will make > > > think you only have > > > >4GB of physical RAM. ??If the load comes back to the normal "amount" > > > then the likely > > > >culprit is that and we can think on how to fix this. > > > > You are on the right track. Load was going down to "normal" 10% when reducing > > Xen to 4GB by the parameter. Load seems to be still a little, little bit lower > > with Xenified Kernel (8-9%), but this is drastically lower than the 20% we had > > before. > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 28 Nov 2011 15:40:13 +0000 Message-ID: <1322494816.20646.14.camel@zakaz.uk.xensource.com> References: <20111128152829.GC9655@andromeda.dapyr.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20111128152829.GC9655@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: "lersek@redhat.com" , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "konrad.wilk" List-Id: xen-devel@lists.xenproject.org On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote: > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote: > > I looked through my old mails from you and you explained already the necessity of double > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the > > Xenified kernel not have this kind of issue? > > That is a puzzle. It should not. The code is very much the same - both > use the generic SWIOTLB which has not changed for years. The swiotlb-xen used by classic-xen kernels (which I assume is what Carsten means by "Xenified") isn't exactly the same as the stuff in mainline Linux, it's been heavily refactored for one thing. It's not impossible that mainline is bouncing something it doesn't really need to. It's also possible that the dma mask of the device is different/wrong in mainline leading to such additional bouncing. I guess it's also possible that the classic-Xen kernels are playing fast and loose by not bouncing something they should (although if so they appear to be getting away with it...) or that there is some difference which really means mainline needs to bounce while classic-Xen doesn't. Ian. From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 28 Nov 2011 16:52:17 +0100 Message-ID: References: <20111128152829.GC9655@andromeda.dapyr.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7373466658977440381==" Return-path: In-Reply-To: <20111128152829.GC9655@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?xen-devel?= , =?utf-8?Q?konrad=2Ewilk?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============7373466658977440381== Content-Type: multipart/alternative; boundary="=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi,=0D=0A=0D=0A=C2=A0=0D=0Alet me try to explain a bit more. Here you see= the output of my xentop munin graph for a=0D=0A=0D=0Aweek. Only take a l= ook at the bluish buckle. Notice the small step in front=3F So it's the C= PU=0D=0A=0D=0Apermille used by the DomU that owns the cards. The small bu= ckle is when I only put in=20=0D=0A=0D=0Aone PCI card. Afterwards it's co= nstantly noticable higher load. See that Dom0 (green) is=20=0D=0A=0D=0Ano= t impacted. I am back to the Xenified kernel, as you can see.=0D=0A=0D=0A= =C2=A0=0D=0A=0D=0A=C2=A0=0D=0AIn the next picture you see the output of x= enpm visualized. So this might be an indicator that=0D=0A=0D=0Arealy some= thing happens. It's only the core that I dedicated to that DomU. I have a= three-core=0D=0A=0D=0AAMD CPU by the way:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2= =A0=0D=0AIn CPU usage of the Dom0, there is nothing to see:=0D=0A=0D=0A=C2= =A0=0D=0A=0D=0A=C2=A0=0D=0AIn CPU usage of the DomU, there is also not mu= ch to see, eventually a very slight change of=0D=0A=0D=0Amix:=0D=0A=0D=0A= =C2=A0=0D=0A=0D=0A=C2=A0=0D=0AThere is a slight increase in sleaping jobs= at the time slot in question, I guess nothing we ca=0D=0A=0D=0Adirectly = map to the issue:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2=A0=0D=0AIf you need ot= her charts, I can try to produce them.=20=0D=0A=0D=0A=C2=A0=0D=0ABR,=0D=0A= Carsten.=0D=0A=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D= =0AAn:Carsten Schiers ; zhenzhong.duan@oracle.com; le= rsek@redhat.com;=20=0D=0ACC:xen-devel ; ko= nrad.wilk ;=20=0D=0AVon:Konrad Rzeszutek Wilk =0D=0AGesendet:Mo 28.11.2011 16:33=0D=0ABetreff:Re: [Xen-= devel] Load increase after memory upgrade (part2)=0D=0AOn Fri, Nov 25, 20= 11 at 11:11:55PM +0100, Carsten Schiers wrote:=0D=0A> I got the values in= DomU. I will have=0D=0A>=20=0D=0A> =C2=A0 - aprox. 5% load in DomU with = 2.6.34 Xenified Kernel=0D=0A> =C2=A0 - aprox. 15% load in DomU with 2.6.3= 2.46 Jeremy or 3.1.2 Kernel with one card attached=0D=0A> =C2=A0 - aprox.= 30% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with two cards at= tached=0D=0A=0D=0AHA!=0D=0A=0D=0AI just wonder if the issue is that the r= eporting of CPU spent is wrong.=0D=0ALaszlo Ersek and Zhenzhong Duan have= both reported a bug in the pvops=0D=0Acode when it came to account of CP= U time.=0D=0A=0D=0A>=20=0D=0A> I looked through my old mails from you and= you explained already the necessity of double=0D=0A> bounce buffering (P= CI->below 4GB->above 4GB). What I don't understand is: why does the=0D=0A= > Xenified kernel not have this kind of issue=3F=0D=0A=0D=0AThat is a puz= zle. It should not. The code is very much the same - both=0D=0Ause the ge= neric SWIOTLB which has not changed for years.=0D=0A>=20=0D=0A> The drive= r in question is nearly identical between the two kernel versions. It is = in=0D=0A> Drivers/media/dvb/ttpci by the way and when I understood the co= de right, the allo in=20=0D=0A> question is:=0D=0A>=20=0D=0A> =C2=A0 =C2=A0= =C2=A0 =C2=A0 /* allocate and init buffers */=0D=0A> =C2=A0 =C2=A0 =C2=A0= =C2=A0 av7110->debi_virt =3D pci_alloc_consistent(pdev, 8192, &av7110->d= ebi_bus);=0D=0A=0D=0AGood. So it allocates it during init and uses it.=0D= =0A> =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (!av7110->debi_virt)=0D=0A> =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto err_saa71466_vfree_4;=0D= =0A>=20=0D=0A> isn't it=3F I think the cards are constantly transferring = the stream received through DMA.=20=0D=0A=0D=0AYeah, and that memory is s= et aside for the life of the driver. So there=0D=0Ashould be no bounce bu= ffering happening (as it allocated the memory=0D=0Abelow the 4GB mark).=0D= =0A>=20=0D=0A> I have set dom0_mem=3D512M by the way, shall I change that= in some way=3F=0D=0A=0D=0ADoes the reporting (CPU usage of DomU) change = in any way with that=3F=0D=0A>=20=0D=0A> I can try out some things, if yo= u want me to. But I have no idea what to do and where to=0D=0A> start, so= I rely on your help...=0D=0A>=20=0D=0A> Carsten.=0D=0A>=20=0D=0A> -----U= rspr=3Fngliche Nachricht-----=0D=0A> Von: xen-devel-bounces@lists.xensour= ce.com [mailto:xen-devel-bounces@lists.xensource.com] Im Auftrag von Konr= ad Rzeszutek Wilk=0D=0A> Gesendet: Freitag, 25. November 2011 19:43=0D=0A= > An: Carsten Schiers=0D=0A> Cc: xen-devel; konrad.wilk=0D=0A> Betreff: R= e: [Xen-devel] Load increase after memory upgrade (part2)=0D=0A>=20=0D=0A= > On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:=0D=0A>= > Hello again, I would like to come back to that thing...sorry that I di= d not have the time up to now.=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > We (n= ow) speak about=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > *Xen 4.1.2=0D=0A> > = *Dom0 is Jeremy's 2.6.32.46 64 bit=0D=0A> > *DomU in question is now 3.1.= 2 64 bit=0D=0A> > *Same thing if DomU is also 2.6.32.46=0D=0A> > *DomU ow= ns two PCI cards (DVB-C) that o DMA=0D=0A> > *Machine has 8GB, Dom0 pinne= d at 512MB=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > As compared to 2.6.34 Ker= nel with backported patches, the load on the DomU is at least twice as hi= gh. It=0D=0A> >=20=0D=0A> > will be "close to normal" if I reduce the mem= ory used to 4GB.=0D=0A>=20=0D=0A> That is in the dom0 or just in general = on the machine=3F=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > As you can see fro= m the attachment, you once had an idea. So should we try to find somethin= g...=3F=0D=0A>=20=0D=0A> I think that was to instrument swiotlb to give a= n idea of how=0D=0A> often it is called and basically have a matrix of it= s load. And=0D=0A> from there figure out if the issue is that:=0D=0A>=20=0D= =0A> =C2=A01). The drivers allocoate/bounce/deallocate buffers on every i= nterrupt=0D=0A> =C2=A0 =C2=A0 (bad, driver should be using some form of d= ma pool and most of the=0D=0A> =C2=A0 =C2=A0 ivtv do that)=0D=0A>=20=0D=0A= > =C2=A02). The buffers allocated to the drivers are above the 4GB and we= end=0D=0A> =C2=A0 =C2=A0 up bouncing it needlessly. That can happen if t= he dom0 has most of=0D=0A> =C2=A0 =C2=A0 the precious memory under 4GB. H= owever, that is usually not the case=0D=0A> =C2=A0 =C2=A0 as the domain i= susually allocated from the top of the memory. The=0D=0A> =C2=A0 =C2=A0 f= ix for that was to set dom0_mem=3Dmax:XX. .. but with Dom0 kernels=0D=0A>= =C2=A0 =C2=A0 before 3.1, the parameter would be ignored, so you had to = use=0D=0A> =C2=A0 =C2=A0 'mem=3DXX' on the Linux command line as well.=0D= =0A>=20=0D=0A> =C2=A03). Where did you get the load values=3F Was it dom0= =3F or domU=3F=0D=0A>=20=0D=0A>=20=0D=0A>=20=0D=0A> >=20=0D=0A> > =3F=3F=0D= =0A> > Carsten.=0D=0A> > =3F=3F=0D=0A> > -----Urspr=3F=3Fngliche Nachrich= t-----=0D=0A> > An:konrad.wilk ;=20=0D=0A> > CC:l= inux ; xen-devel ;=20= =0D=0A> > Von:Carsten Schiers =0D=0A> > Gesendet:Mi 2= 9.06.2011 23:17=0D=0A> > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: = Load increase after memory upgrade=3F=0D=0A> > > Lets first do the c) exp= eriment as that will likely explain your load average increase.=0D=0A> > = =2E..=0D=0A> > > >c). If you want to see if the fault here lies in the bo= unce buffer=20=0D=0A> > > being used more=0D=0A> > > >often in the DomU b= /c you have 8GB of memory now and you end up using=20=0D=0A> > > more pag= es=0D=0A> > > >past 4GB (in DomU), I can cook up a patch to figure this o= ut. But an=20=0D=0A> > > easier way is=0D=0A> > > >to just do (on the Xen= hypervisor line): mem=3D4G and that will make=20=0D=0A> > > think you on= ly have=0D=0A> > > >4GB of physical RAM. =3F=3FIf the load comes back to = the normal "amount"=20=0D=0A> > > then the likely=0D=0A> > > >culprit is = that and we can think on how to fix this.=0D=0A> >=20=0D=0A> > You are on= the right track. Load was going down to "normal" 10% when reducing=0D=0A= > > Xen to 4GB by the parameter. Load seems to be still a little, little = bit lower=0D=0A> > with Xenified Kernel (8-9%), but this is drastically l= ower than the 20% we had=0D=0A> > before.=0D=0A>=20=0D=0A> > ____________= ___________________________________=0D=0A> > Xen-devel mailing list=0D=0A= > > Xen-devel@lists.xensource.com=0D=0A> > http://lists.xensource.com/xen= -devel=0D=0A>=20=0D=0A>=20=0D=0A> _______________________________________= ________=0D=0A> Xen-devel mailing list=0D=0A> Xen-devel@lists.xensource.c= om=0D=0A> http://lists.xensource.com/xen-devel=0D=0A>=20=0D=0A=0D=0A_____= __________________________________________=0D=0AXen-devel mailing list=0D= =0AXen-devel@lists.xensource.com=0D=0Ahttp://lists.xensource.com/xen-deve= l=0D=0A --=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlv bmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+PGh0bWw+ CjxoZWFkPgogIDxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iWmFyYWZhIFdlYkFj Y2VzcyB2Ny4wLjItMjk0NzAiPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+QVc6IFtYZW4t ZGV2ZWxdIExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGUgKHBhcnQyKTwvdGl0 bGU+CiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgYm9keQ0KICAgICAgew0KICAg ICAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIFNhbnMtU2VyaWYgISBpbXBvcnRh bnQ7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgcGFkZGluZzogNXB4IDVw eCA1cHggNXB4Ow0KICAgICAgICBtYXJnaW46IDBweDsNCiAgICAgICAgYm9yZGVyLXN0eWxl OiBub25lOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOw0KICAgICAgfQ0K DQogICAgICBwLCB1bCwgbGkNCiAgICAgIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMHB4Ow0K ICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7DQogICAgICB9DQogIDwvc3R5bGU+CjwvaGVh ZD4KPGJvZHk+CjxwPkhpLDwvcD48cD4mbmJzcDs8L3A+PHA+bGV0IG1lIHRyeSB0byBleHBs YWluIGEgYml0IG1vcmUuIEhlcmUgeW91IHNlZSB0aGUgb3V0cHV0IG9mIG15IHhlbnRvcCBt dW5pbiBncmFwaCBmb3IgYTwvcD48cD53ZWVrLiBPbmx5IHRha2UgYSBsb29rIGF0IHRoZSBi bHVpc2ggYnVja2xlLiBOb3RpY2UgdGhlIHNtYWxsIHN0ZXAgaW4gZnJvbnQ/IFNvIGl0JiMz OTtzIHRoZSBDUFU8L3A+PHA+cGVybWlsbGUgdXNlZCBieSB0aGUgRG9tVSB0aGF0IG93bnMg dGhlIGNhcmRzLiBUaGUgc21hbGwgYnVja2xlIGlzIHdoZW4gSSBvbmx5IHB1dCBpbiA8L3A+ PHA+b25lIFBDSSBjYXJkLiBBZnRlcndhcmRzIGl0JiMzOTtzIGNvbnN0YW50bHkgbm90aWNh YmxlIGhpZ2hlciBsb2FkLiBTZWUgdGhhdCBEb20wIChncmVlbikgaXMgPC9wPjxwPm5vdCBp bXBhY3RlZC4gSSBhbSBiYWNrIHRvIHRoZSBYZW5pZmllZCBrZXJuZWwsIGFzIHlvdSBjYW4g c2VlLjwvcD48cD4mbmJzcDs8L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3Bu ZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZFQUFBR0VDQUlBQUFDcHY0NVlB QUFnQUVsRVFWUjRuTzI5ZjNSVTFiMzN2OE1rRUFKbVFpQ1dZRG9RTVNRd2t5QWRpajhlOWZI YmRhdFdYYWdGTHZXcXZiMjFwYmY0STRCV3k3SUw1MUdxVDRVU2JUQmxsaFhTYUJETVRFS0NY TFdJSkNwM0dSMm9UUUVSRTJoUmhKbE15SS85ejEzcitlTjgvOWpKenM3WjU1elpjMmJPelBu eGVhMVpzMmJPZk00NW43Tm5uL2U4WjgrWnowWi9CUUFBQUd4QloyY255bllPQUFBQVFCcm83 T3pjdVhQbnFLWmpBQUFBd01yczNMa1ROQjBBQU1BbWdLWURBQURZQjlCMEFBQUErd0NhRGdB QVlDVmFPTmhYUWRNQlFCbUVVTFpUU0FJelpHdUdISnpEeU1nSVVYUFFkTUFPR0NjZmRNdjhn N1JzMWlETW9LZG15TUVoREEwTmZmcnBwNkZRNlB6NTg2MnRyZXhMb09uTzRyNzc3dnZwVDMv S0x2bVAvL2lQKysrL1A1VnRJb1FRUWprNU9aZGRkbGxOVGMzNjlldlBuajJiV3BwcFJsRnJF a3AyaWdxVllZRXpnNTZhSVFjbmNQTGt5WTZPanE2dXJ0T25UN2UydG43NjZhZnNxNkRwemlJ YWpTNWF0R2puenAzazZhdXZ2dXIxZW1PeFdDcmJwR2R5TkJyOTZLT1Bmdm5MWDVhV2xwNDRj U0xWWE5NSGFMcHpjbkFDNzcvLy92bno1OVZlQlUxM0hFZVBIdjNXdDc1MTdOaXhZOGVPelo0 OW03enZRME5ER3pac21EVnIxdFNwVTFlc1dISGh3Z1VTakJCNjhjVVhQUjVQWGw1ZVRVM05r U05IK0EzeVovS1RUejc1b3gvOWlEenU3Ky8vOTMvLzk4c3V1K3l5eXk3N3lVOSswdC9mVDll cXE2dWJPM2Z1NU1tVEZ5NWMrSmUvL0dYSGpoM3o1ODhuTy9yNDQ0OUoyTi8vL3ZjZi9PQUgw NlpObXpKbHl2ZS8vLzB6Wjg3SWRxb3ZRN29RTWZCYjVoL3c4WW9aYW14V28wRVNIb2dHQ0tG bm4zMjJwS1Nrb0tEZy92dnZqOGZqR09QcnI3OSsxNjVkTk9ia3laT3paODltNWFDOHZQeVRU ejRoajNmczJFRWVmUExKSitYbDVWaTlWMmowRnZMZ2d3OCttRE5uenU5Kzk3dWtEZ0ZJQzZE cFR1UlBmL3FUMSt2MWVyMk5qWTFreVc5Kzg1dnZmZTk3cDA2ZHVuRGh3bjMzM2Zlem4vMk1M RWNJclZpeDRvc3Z2b2hHbzA4OTlaVGY3K2UzeGl2bXlaTW52L1d0YjVISGp6NzY2SzIzM25y bXpKbSt2cjUvK1pkL3FhMnRwV3N0WDc3ODg4OC9qMGFqVHovOTlQVHAwKys1NXg3NjlMdmYv UzRKcTZxcWV1dXR0Mkt4MlBuejU5ZXVYYnQ2OVdyWlR2VmxpTlY5dXNoNGVuMTkvVzIzM1Nh WW9leXBSb01rUEJBTkVFSmtzMmZPbkxuMTFsdlhyVnVITVc1cmE2dXNyQndlSGlZeFAvN3hq NTk1NWhsMnJaLy8vT2QxZFhVWTQxT25UazJmUHAybzg3WnQyOWFzV1lQVmU0VkdiOEVZdDdT MHpKbzFhOCtlUFVubEQ0Z0QxNzBBQ2l4WnNtVHAwcVgwcWNmak9YYnNHSG5jMTlkMytlV1hr OGNJb1hQbnpwSEgwV2cwTnplWDN4UXZlWmN1WGNyTHl5T1BTMHRMUC92c00vTDRyMy85NjV3 NWMraGEvL3puUCttV1pVOFZkeFNOUm1mTm1pWGJxYjRNY1FxYTN0SFJzWGp4WW1wT0UyWW9l NnJSSUFrUFJBT0UwTi8rOWpmeStMUFBQcnZpaWl2SVk3L2YvK3FycjlLRjBXaVVYV3Z2M3Iw clZxekFHRC96ekRPelpzM2F2bjA3eHZpSFAvemhtMisraWRWN2hVWnYrZjN2ZjE5YVd0cloy WmxVOG9BTzRMb1hZSndkTzNaY2ZmWFZWMTk5OVovKzlDZXlKRGMzbHgwdXlNbkpJY3ZWaEVs N0lmbU9UeDY3WEs2aG9TSHllSEJ3a0VxVjlwYnAwL2ZlZSsrNjY2NHJLQ2hRUzB3a3cwbVRK dEVjQ0VORFE1TW1UZExlZ3VJdVB2MzAwL256NTdPL0ZpVE1VUFpVWDRQUWhleDRqdXdseGMz dTJiT25vcUppYUdobzFhcFZXN1pza2ExMThlTEZiMy83MnhoanI5Y2JDb1d1dWVZYWpQRzN2 LzF0SXYxcXZVS2p0OHliTisreHh4N2owd1BTQzF6M0Fveno2YWVmbHBhVy92M3ZmKy9wNlNr dExUMTY5Q2pHdUt5czdJc3Z2dUNEOVduNmswOCtlZSs5OTVMSHBhV2wxRC8rOWE5L0xTMHRG ZGt5ZlRwbnpwekd4c2J6NTgrUGpJeDg4ODAzQ1UyMFlvWWVqK2UvLy91LzJTVWZmZlNSeCtQ UjNnTC80TXlaTXhVVkZRY1BIbVRqRTJZb2U2cXZRUkxDK3ZTLy9lMXYxUDZQakl4NHZkN2Ey bHFQeHpNd01NQ3ZlT09OTi83NXozOG1RejErdjMvUG5qMDMzWFFUZVVtdFYyajBsbE9uVGwx NTVaV2JOMjlPS25rZ0tlQzZGMkNjYURTNmNPSENOOTU0Z3p4OS9mWFh5WFV2VHovOTlLMjMz dHJUMHpNNE9Qanh4eCtUNytNNFNVMG4xNzJzWGJ1V3ZlN2w0WWNmcHVPODMvLys5eDk1NUJH UkxkT25NMmJNMkxOblR6d2UvL3ZmLzc1aXhRcDltdjUvL3MvL1diSmt5ZnZ2dngrUHgrUHgr S0ZEaHhZdlhreDF4KzEyMDVFRXhTM1RCOS85N25mcEQ0a1V0UXpWTnF1dlFSS0NFUHJCRDM1 dzl1elpzMmZQM25iYmJYU1lIbVBjMk5pSUVIcjU1WmNWVjN6bW1XZm16SmxETFB3TEw3eHd4 UlZYUFB2c3MrUWx0VjZoM1Z0T256NWRVVkVSQ0FTU3loOFFCNjU3QWNhNTc3NzdxSWdRZnZu TFg5NTMzMzNEdzhPQlFJQmNkTEZvMFNMNjI2bjRnRUJPVHM2MGFkT3FxNnZYclZ0SHIwN0JH TWRpc1FjZWVHRDY5T25UcDA5LzRJRUg2SFdUZ3ByK3hodHZ6SnMzeitWeWZmdmIzOTZ5Wllz K1RSOFpHZG15Wll2WDY1MHlaY3FVS1ZPOFh1L3ZmLzk3K3VxbVRadW1UWnVtc1dYMkFZdDJo bXFiMWRjZ0NVSE1kUy8zM1hjZnZad0dZL3phYTYvTm56OS9jSEJRY2NValI0N2s1dWFTdnhT Y09YTW1OemVYZnFkUjZ4VUplMHR2YjI5bFplVnZmdk9icEE0QlNBdWc2UUJnYzI2Ly9YYjZq d1RBQnNCMUx3RGdVSWFIaCt2cjY2dXFxdWpsaklBTmtJazRhRG9BT0FXRWtNZmpnU3NMYlVa cmErdWxTNWZJNDB1WExzRjFMd0FBQUJhbXM3UHprMDgrR1J3Y0hCd2MvT1NUVDdxNnV0aFhR ZE1CQUFDc1JIOS8vK0hEaDhQaGNEZ2M3dXpzWkg4UHg2RHBBQUFBbGdiRzB3RUFBT3dEYURv QUFJQ0ZjZEMxakQwSER2UWNPSkR0TEFBQUFES0hiVFY5TUI3ZmR0MTEyNjY3YmpBZXozWXVB QUFBR2NLMm12NlgzLzB1NFBFRVBKNi9RQ1YrQUFDY2lrMDAvZnlwVTVzcktvaW1iNjZvT0gv cVZMWXpBZ0FBTUlSWUxOYloyVW12WlpUTlBaa2RUVzlxYXFxcXFzckx5NnV1cnU3bzZNQVlm L0hGRjlkZWUrM2t5Wk92dmZaYVVzWlRaTW40Qmg5NGdBZzZ1VFU5OEVER2pnVUFBQ0NUSER4 NDhOaXhZNWN1WGJwMDZkTFJvMGRseForem8rbjMzSE5QZDNkM2YzLy85dTNiWjg2Y2lURmV1 WExsaGcwYit2djdOMnpZc0dyVktzRWxNcDU0NGdueTRQVHAweUpwWElwRVJNSkV0aWE0UjVF d3lFbzhETElTRHpOblZsZ3NzVFR1MFp4WkpVVW9GS0lGZklhSGgwT2hFUHRxbHNkZVRwdzRR YVltbURselpsOWZIOGE0cjYrUHFMeklFaGxVMHovODhFT1J2WCt6ZmJ0SW1NaldCUGNvRWda WmlZZEJWdUpoNXN3S2l5V1d4ajJhTTZ1a01LTlBKL1QyOWk1WnNtVHYzcjBZNDBtVEpwRlBu cUdoSVpmTEpiaUVNdlRQZjM3ejBrdVAvL3puK1BCaFNaSUdEeDZVSklrODFyai9mN0ZZd2hq QnJRbnU4WC8rNTM4Z0s4Z0tzbUx2aHpvNk1ybEg4MlQxLytMeGIxNTZhYUM3TzFubGpFYWpw aHRQeHhoM2RuWjZQSjVYWG5tRlBDMHVMcFo1Y0pFbE1wNTQ0Z2xKa2lSSjZ1M3RsUVRBWFYw aVlTSmJFOXlqU0Joa0pSNEdXWW1IbVRNclNTeXhOTzdSVkZrWklhM1owZlQ2K3ZxU2twSjkr L2JSSlN0V3JLQmo1V1FxTEpFbE1xaW1Bd0FBbUI5OSttbkc2MTVrYzRCZHZIang4ODgvWDda c1dWNWUzalhYWEhQcTFDbU1zY2dTR2VEVGRjUUloa0ZXNG1HUVZWSmg0Tk9UeGJ6ajZXa0hm RG9BQUJaQ245Q1orcnFYOUFJK1hVZU1ZQmhrSlI0R1dTVVZCajQ5V2NDbkF3QUFtQkY5UW1m UzYxNk1BSHk2amhqQk1NaEtQQXl5U2lvTWZIcDZzYWVtQXdBQW1COTlRdWVJK3VtWExsMDZj ZUxFVDMvNlUwbVMrdnI2ZW50NysvcjZ5R09OK3hNZEhRbGpCTGNtdU1jalI0NUFWcEFWWk1Y ZTQ2NnVUTzdSUEZsOThjVVhKMDZjMEZFNVFDYmlNbXlpNlFUdzZRQUFXQWg5UXVkRVRZZnhk UEVZd1RESVNqd01za29xRE1iVGs4V0ptZzRBQUdCK2pKQkJlMm82K0hUeEdNRXd5RW84RExK S0tneDhlbnF4cDZZREFBQ1lIeDBxOTlaYmIzVjNkL2YxOVEwTkRTa0daTG5lQzEzUzNOeGNY bDd1Y3JubXpadlgzTnlNazV6bmlBQStYVWVNWUZqR3NrSjF5SVJaSlJVR1dTVVZCajQ5S2I3 NTVwdWVucDVEaHc2MXRyWWVPblNvcDZmbm0yKytZUU95NmROWlRTOHNMQXlIdy9GNFBCUUt1 ZDF1ckhlZUk1RW1Cc3dNMVhRQXNEMnA2T2ZnNEdCZlgxOTNkL2RiYjczRkxqZUxwdnQ4dm5B NFBEQXdFQXFGYW1wcXNONTVqa2hMZ1U4WGp4RU15MHhXcUE0RkFnR3paWlZzR0dTVlZCajQ5 UFJpRmswL2ZQaHdZV0VoUXFpd3NQRHc0Y000dFhtTzRONmk5NmdPZFpSdE1rTW1jQS8zUnQv cm51ZElHN05vK3Z6NTgrbll5MVZYWFlWaG5xTjBiTXB5V2FFNkZFUkJzMldWYkJoa2xWUVkr UFQwWWhaTkx5b3FvbU12TTJiTXdERFBrU01KQkFMK01VMEhBTnVURmlFMVJiMFgyVHhIR09P bXBpYVB4K055dWViT25mdjY2NjlqbU9jb0hadXlYRlpCRlBTRFQwOHlSakRNbkZsSjROTlR4 aFNhYmhEZzA2MU9FQVdsQ0Z6M0FqZ0ZmVUxuaUxxTUJQRHBPbUlFd3pLVGxSOEZwUUJjbjU1 Y2pHQ1lPYk9Td0tlbmpDTTBIYkFvcktackE1ZXhBellnTGJybkNFMEhueTRlSXhobU5wOU9M bzl4Y2xzbEcyYk9yQ1R3NmVuR0pwb3VteE1EN3ExNnY5a3JCWkJJNUYzZWh1eG5DL2R3bjhL OTdqa3hZckVZekVlcWpEbWRpNk96Q2lCQm4rNEhuNTVrbURtemtzQ25KOC9CZ3dlUEhUdDI2 ZEtsUzVjdUhUMTY5T0RCZyt5cjl0UjB3S293bXE0TlhNWU8yQUI5UWhjS2hjZy82akhHdzhQ RG9WQ0lmZFdlbWc0K1hUeEdNQ3hEL3lOZHMxLzB1cGNBeWxoV3lZWkJWa21GZ1U5UEZ2RHBn R1ZnTlQwQmdtRUFZR0wwQ1YwMEdvWHhkSlVHTmFWemNYSlc0Tk4xeEFpR21UTXJDWHg2dWpI TG5CakR3OE1iTjI0c0xTM055Y2toeTFPWkV3T3dLT0RUQVVlaFR6L04rejlTVnRNM2JkcTBZ TUdDN3U3dWtaRVJzaVNWT1RIQXA0dkhDSWFCVHhjUGc2eVNDZ09mbml4RXhLbVVtMVRUUFI2 UDdOZmJWT2JFQUN3SytIVEFVZWhUem5BNGZPSENoVkFvOU0wMzMzenp6VGR0Ylczc3EyYlJk SmZMOWRCREQwMmRPdFhqOGV6WnN3ZW5OaWRHMzk2OWtrQk5ldHpWSlZLOVhtUnJnbnZzN2Uy RnJEUmkwSnI5K05FeW9hd0N5T0Z0Wlkrc0pFbnEvK01mTTdsSDgyU2xlMDZNVHo3NXBMVzE5 ZVRKazIrOTlWWTRIRDUrL0RqN3FsazBmZWJNbWFGUWlNeUpNV3ZXTEp6YW5CaUFSUUdmRGpn S0kzVFZMSnErYXRXcVVDaEU1c1FvS1NuQnFjMkpBZVBwNGpHQ1lUQ2VMaDRHV1NVVkJ1UHB5 V0xHMzBqNU9URk9uejU5d3cwMzVPWGxsWmVYazRIMVZPYkVBQ3dLK0hUQVVSaWhybkI5ZW1M QVQwbmcwNU1KZzZ5U0NnT2ZubDdzcWVtQVJRR2ZEamdLSTJUUW5wb09QbDA4UmpBTWZMcDRH R1NWVkJqNDlQUmlUMDBITEFyNGRIRmdwaWNib0Uvb29INjZlb09hMHJrNE9Tdnc2ZUl4Z1VE QWhGbnBDQU9mbml5T3FNc0k4eHpaNDk2N1lZL2dQRWQ5bTcxWnp6Ykw5MTdIdDRERjczWFBj d1QxMDFVeHAzTnhjbGJnMDVPSVFVZ29MTU5aSlI4R1BqMVpIT0hUQ1RDZWJuVmdQRDBKa09O YndQcm9FenFvbjY3ZW9LWjBMazdPQ254NkVqSGcwM1dGbVNvckkyVFFucG9PV0JUdzZVa0FQ dDM2NkJNNk05WUdNQWp3NlRwaUJNUEFwNHVIZ1U5UEtneDhlcktZc1g0NlA4OFJZZVBHalhR aHpIUGtRRmhOUjNWSTZ4SnM4T25nMDYyUFB2MDBvNllUWkpyZTFkVTFlL1pzdWhEbU9VcDlV NWJMaXRYMGQzdDlhcHFPNmhENGRQRHArc0pNbFpVKzViU0dwdmYzOTN1OTNnTUhEdENGTU0r UkEyRTEzWStDUVJSVURodlRkRWNEUHQzNnBFVklUYXJwYTlldWZmNzU1OW1GTU0rUkE3Tmk1 em02eTlld3ZteVRZbVRQNFRLWTUwaEN5SXhaSmRsV0VzeHpsUHc4UnpKTXF1azVPVG15aXVv d3o1RURrZmwwdjRwUDk2TWcrSFR3NlRaQW4zS2E5N29YL2pkU2RpSE1jNVQ2cGl5WDFZVHJY amI3Wk1KTmg5ZXBwanU1clNRMC9odXlpYkpLUGd6RzAxUEVGSnJPejNQRXZrUWV3RHhIRG1U Qzlla0IrYUE1SFY0SG55NUpFelFkc0NocGtWTlRhTHBCZ0UvWEVTTVlaZ2FmUHY2VGFRQkpB WVRxa0pQYlNrS0lEcitZS0t2a3c4Q25weGQ3YWpwZ1VSUjlPcjFRM1Q5UjA5V3VpbkVLaktZ REZrV2YwSmwzUEQzdGdFL1hFU01ZbGtXZnJxYnBmaFIwY2x1QlQ5Y1hacXFzakpCQmUybzZZ RkVVZlhwdzdFSjFYdE96azZWSkFKOXVmZlFKblNOOHVteE9qTjdlWHBHYTlDYzZPaExHQ0c1 TmNJOUhqaHlCckRSaTJEa3hqangvTzNuc1I4Rzd2QTJvRHQzbGJSaU5ES0MrelY0L0NqcTVy ZnE4WGdraDAyV1ZaRnYxOWZYaHJpN2RlMFIxS05rOUNtYTFmR09aMGUyZ2UwNE1qUEhBd01B Nzc3elQydHA2OXV4WjJVczIwWFFDK0hTcm8ralR5WVhxUWZaYUYvS1N3eTk5QVo4dUdYbVJm a2JhVnAvUUVVRS9kdXpZVjE5OXRXL2Z2dlBuejdPdjJsUFQ2UUNXOXNWZTVoeGhkSEpXaXVQ cDVNcEZ2NUttTzdtdFlEeGRrdVRLbTg3eDlMS3lkRzBxN2VQcGI3LzlOcFhyTDcvOHNxT2pn MzNWbnBvK0RoZ1pTNkY4ZlRvZFBRZWZ6Z0krWFVyL0NUNWVEZFRFUGwybTFjZVBIMmVmSnRE MGd3Y1BWbFJVNU9Ua1lJeFhyMTdkMk5pb0w0bk1vSERkaStZYlkwN240dVNzbEs5UG42anBv d1c4d0tlRFQ1Y004T2tJa1Q5em1kbW5wL1FiNlZWWFhkWFcxa2IrMi9uNTU1L1BuVHRYWHhL WkFYeTYxZEh3NmZScElCQUFueTVKNCtxVDdUeXlTdHBQY0lRa2hBS0JnSmw5ZWtxMWR2UHk4 dUx4T05IMGMrZk9GUlFVNkV0Q0JsOFZvS21wcWFxcUtpOHZyN3E2bWd3UHBUSW5ocS9PTi80 T2FUU29LWjJMazdOQ2EvYWpOZnRId3liNmRQYlNSdkRwa2pUbTB4RXlWMWJKaDVuUXAwdkk3 RDRkNjliMG0yKytlY2VPSFFpaDA2ZFByMTY5ZXZueTVmcVNVSVRWOUh2dXVhZTd1N3UvdjMv Nzl1Mms1bUlxYzJLTXY5UGcweTBGcSttS1BoM1ZqUTNDZ0U5bk5OMjVHT1BUTTlhdytwUXpK VTAvZmZyMG5YZmVXVkJRVUZCUXNIejU4bi84NHgvNmtsQkVzUzdqaVJNblBCNFBUbTFPakY2 ZmIvUzNEdkRwYWRxVVNYeTZUTk9kM0ZiZzB5WEpvVDVkRzNQVjJ1M3Q3VjJ5Wk1uZXZYdHhh bk5pNExJeVZJZnVmcktNblRjQTdzMS9qOWJzdi91QmJhTkxBbWgwZm94SHkwWWZCMUJIMlNZ L0NvNHZNVUhPV2JzbnV1UHdIbDZXN2o1QVd6WHRXK2J1ZGMrSllkNy9rY28wdmJPejArUHh2 UExLSytScEtuTmk5UHA4SWwrZ3pPbGNuSnhWUXA4K09sRUcrSFFKZkxva1NZNzI2U01qSTdK QkdJS3lwaU4xVWtsQ0JydTErdnI2a3BLU2ZmdjIwU1dwekltUjRVRXhJRjBrSEUrZk1KZ080 K25RdzQwZlR6ZjB5aUxkNGprME5QVHBwNStHUXFIejU4KzN0cmF5TDVsbFRnelprb3NYTDZZ eUp3YjRkUEVZd1REeitIVDJxWlBiQ255NkpHWEVwNnRyU0xaOCtzbVRKenM2T3JxNnVrNmZQ dDNhMnZycHA1K3lyOXIwZjZUZzA2MEorUFFrZ0I0dVplUzZsNG03U0s5dDF5ZDA3Ny8vdnF6 R0MwczJ4MTdTRHZoMEhUR0NZU2J4NmJLYms5c0tmTG9rWmNPbk0wL2h1aGZEQVo5dWRYaWZ6 bFlDVUxnNUdlamhVaFo4ZW5yM2FJUU0ybFBUd2FlTHh3aUdaY3VuYTJ1Nms5c0tmTG9rWmMy bmt4RVlpL2wweFo4dXJUTDJBajdkb2xCTnAxSWVsQTJnZzArblFBK1hzdWZUMDdSZkkyVFFK ajVkUHMrUnp6YzZDNHpYSzFsdDVoY25aK1hkc0FldDJVL21yeUh6SE4zbGJaQUNxRyt6Vi9I ZXlXM0Y5bkFUWlpWa1cvV2xOcytSaE5JOXo5RllxK0t5c3ZFbC9CNFJTcjBkVXBublNBT2Jh RG9CZkxyVm9UNDlJcWxjNkFJK25RSTlYQUtmcmtBQ1RkKzllN2ZINDhuSnliSFcyQXVNcDR2 SENJWmxlRHc5aUlLajE3MUVZRHhkQlJoUGw3SjMzWXR3czJ1SEdTR0RDVFI5NXN5WnI3MzIy dERRa0JIN1RqdmcwNjBPMWZRRTloeDh1Z1ErWFpLa1RQdjA4YktBMXZYcFJVVkYwV2pVaUIw YkFmaDBIVEdDWVJuMjZYN3EwelZ2VG00cjhPbVNsSEdmanBEbGZmcFRUejIxY2VQRy92NStJ L2FkZHNDbld4M3c2VWtBUFZ6SytIZzZHcHRieXJvK3ZibTVlY3FVS1dtL2xwSGZtc2lzUnVM ekhJRlBGNDhSRE12MDlla0JCRDQ5UVF6NGRDbExQajJaWnRjT1M0dWN5a2lnNlNVbEpjM056 UWFOcDdPYUxqS3JVWEx6SEkzZG5ENWhvNlZnTlIxOGVnTEFwMHZaOGVscGJIWWpkRFdCcGhj V0ZobzNuczVxdXNpc1Jrbk5jeVRTK3VaMExrN09Dbng2RWpIZzB5WHc2UXBrY3p5ZDFYU1JX WTJTbXVkSXl1QjhKWENmcnZ2eGVZNll1WTIwN2syUWM5YnVZWjRqS1NQekhMRXRuRlpWMFQz UGtUWUpORDFqYzJLSXpHcWtjNTRqOE9ucENBT2ZMaDRHUGoycE1QRHA2Y1VzYzllSnpHcWtj NTRqaHc4NFdnb1lUMDhDNk40U2pLY3JrRURUYzNKeWpOZ3I3LzFGWmpYU09jOFIrUFIwaElG UEZ3OERuNTVVR1BqMDlKSkEwK2ZNbVhQMjdGa2pkbXdFNE5PdER2aDBjWUlvQ04wNy9SZTIy ZDZuUC8vODh3OCsrT0RGaXhlTjJIZmFBWit1STBZd0RIeTZlRmhtc21JMTNUeFo2UWhMMWFj ekp6ajRkSnpkMzBqVER2aDBxd00rWFJ6dzZaSWsxL1MwYmRER1B0MWFnRS9YRVNNWUJqNWRQ QXg4ZWxKaDROUFRpMDAwWFRZbmhrVG1DcUQzQW5YcjRkNE05M1JPREVsOUhvd0o5eWJJT1Z2 M0RkNEdLZEdzTC9hL1Qzc0w4THJCYmordHFwS2RPVEVPSGp4WVVWRkJybjVadlhwMVkyTmpl bmVmWHNDbjY0Z1JEQU9mTGg0R1BqMnBNS3Y0OU5IU1hWYjM2VmRkZFZWYld4dTkzSER1M0xs R0pKRXVZRHpkNnNCNHVqZ3duaTVKbVIxUE4wQlZqSkRCQkpxZWw1Y1hqOGVKcHA4N2Q2Nmdv TUNJSk5JRitIUWRNWUpoNE5QRnc4Q25KeFZtRlovT2E3b2xmZnJOTjkrOFk4Y09oTkRwMDZk WHIxNjlmUGx5STVKSUYrRFRyUTc0ZEhIQXAwdFM1bnk2Zk9ERnVqNzk5T25UZDk1NVowRkJR VUZCd2ZMbHkvL3hqMzhZa1VTNkFKK3VJMFl3REh5NmVCajQ5S1RDVXZIcG80MlF6QjUxK25T a29PbVc5T2tabzdtNXVieTgzT1Z5elpzM3I3bTVHYWMySjRaRmZib3pTNzJ6UncwK1had2dD c29VellHa3Z3WFV4dE9WTkQxMWpOQlNzMmg2WVdGaE9CeU94K09oVU1qdGR1UFU1c1N3cWs5 SHlJeFpTWkprWkZacW1nNCtYVHVHMVhUelpLVWpESHg2ZWxIVjlQZmVlNitxcWlvM043ZXFx dXI5OTk4M1l0OHNQcDh2SEE0UERBeUVRcUdhbWhxYzJwd1lGdlhwVmtvMWZZQlAxd2Y0ZE1s SW54NUV3ZkVsa2kxOCtxSkZpMTU0NFlWb05QckNDeS80ZkQ0ajlzMXkrUERod3NKQ2hGQmhZ ZUhodzRkeGFuTmk5RjE3clNSUXZSNTNkWWxVcisvYnV6Y3RNZmp3NGQ3ZTNnVDErRTJZbGNG dGhlckc1eHhnNThUbzNleExPQ2VHMDlxS3ZRK2lZRWZaSnRKbnpKTlZzbTBsU1ZML0gvK29l NCswQmNUM21QZ2NMQ3VURU9xcWVXUjhDYk9jVlpVVTJ5SFRjMks0WEs2QmdRR01jVHdlbHdt b0VjeWZQNStPdlZ4MTFWVTR0VGt4d0tkYkNQRHArZ0NmTG9GUFYwSlYwOWx5WFJrbzNWVlVW RVRIWG1iTW1JRlRteE1EeHRQVG1aVWtTVVptRlFnRTZHTVlUeGVQZ2ZGMHljang5UGF5cDhl WFNMWVlUK2NyTWhwYWw3R3BxY25qOGJoY3JybHo1NzcrK3VzNHRUa3h3S2RiaUhGREJENDlH Y0NuU3diNGROS3FvMjFMc0kxUHR5TGcwdzNKU3BJa0k3TUtvaUFkZmdHZkxoNERQbDB5d0tk VFFiZWhUN2NpNE5PdGlGOUYwOEduYXdNK1hRS2Zyb1E5TlozNmRPMjMzSFRPeFpFK1hVM1R3 YWRyeDRCUGw4Q25LMkZQVFovdzQ3V0ZqSXlGVWswZmZoU2tQNU9DVHhkSGJpY2RDZmgwSG50 cU92ajBkR1lsU1pMQlBwMmVQK0RUeFdOWTZURlBWanJDd0tlbkY1dG91bXllbzRnME9oZko2 Rnd3V1orTlJYeU9sYXpua1BGNzc0WTlRUlNrajJHZUk4SDdCbTlERUFVYnZBMm96cm50RUVU QjlKNDF0RlZwbnh6ZFBqdkRrYVhuT2JJVzFLYzMrQm9pRW9wSTROTXQ0RDNSbXYxKzhPbkp4 SkNmSDZpalJIWElERm5wRGdPZm5sN3NxZWtUQnNVc05FaHRvVlRUaDVxbXczaTZHakpOZDJh M0ljQjRPbzhOTlIzVm9RWmZnMGlQTjUxekFaOE9QbDBnaHNnTjI4UE5rSlh1TVBEcDZjV0dt azUrR3JXa2k3RlFxdWtEZkhxeThKcWU3WXl5aHRFK0hkV2hpQVErUFh0UVRRZWZuczZzSkVr eTJLZExFYmcrUFlrWThPa1V3MzA2TGVZMUp1VmtqK0tYRzJtSEdTR0RadEgwNGVIaGpSczNs cGFXNXVUa2tLb3krdWM1c3BwUEh5OU1hUHBValdCY3g4R25pd0UrbldMNGVMcW1wcWVPRVZw cUZrM2Z0R25UZ2dVTHVydTdSMFpHeUJMOTh4eFp6YWZMTk4wa1dja3cxS2NyYWpyNGRMVVlj cTBMK0hRSmZMb1NadEYwajhjVENvWFlKZnJuT2JLYVR4L1AwUHlwR2dENDlHU2hzbUtaSG00 WW1mSHBxQTZCVDA4YWw4djEwRU1QVFowNjFlUHg3Tm16QjZjeXp4RkMrNjc5VFJBRk84bzJC VkhRQXZNYzBReWRPYzhSbmRzSTVqa1NpNkY5bS9ad00yU2xyNjJrbE9jNWlranBuT2VJdHVy b1BFZGxaYU1hZ2hBdUs0dElpTXlzMUZHMktmVjJ5UFE4UnhsbTVzeVpvVkNJekhNMGE5WXNu TW84UitEVExRWDQ5R1JodTdjMWVyaGhUTGlRUEgwYmxJK25NeVpkZnZWNmFoaWhwV2JSOUZX clZvVkNJVExQVVVsSkNVNWxuaU9yamFmTE5OMHNXVTBFeHRQRnd6SXduaDVFUVQrTXAzT2Fi dFI0dW9xbXczaTZGcWRQbjc3aGhodnk4dkxLeTh2SndMcitlWTdBcDFzSzhPbkp3bXQ2dGpQ S0d1RFRlY3lpNldrQmZIbzZzNW9JK0hUeE1DZjRkRlNIMk1uQmRXOUtNREcxVGZuQnAzUFlV OVBCcDFzSThPbkpRalhkbjZVZVBuNGRTTGJ4ajFVeFM5Y0d3YWViQ3pXZnJ2YVdtOFhsSVNU Ujg4UThXVTBFZkRvZmxxMSt4V3Q2aHQvQnpaczNpMmg2NW56NldDWjZ1dC9FTjVIMTZlU1VI TDk0Y2FLbUM1YkQxTTdLQ0JtMHA2YkxmSG9hUDhZTkFURUZKWnlIZFgxNnR2cFYxbjM2dUhY Tk5tbG9BYVNzNmZRWTFUUTlMWWR2aEF6YVJOTW56SW5oOVRiNEdtaHRlNG5Vc0ZlcVNYK2lv ME54dWV5K3Q3YzNMVEdTSkIwNWNrUmhPYW12UDVhbldiTEtWRnVOejRNeGNVNk1JOC9mTGlX YUV5UHRXU1djWCtMSWtTTTBSbTArQ3FQZlFkSzM3L0kyK01kNmVJYmZ3UVpmZzhpOEVDSlo5 ZlgxNGE0dTNWblJGaERmb3p3R0lXL2R1RDVRM1dndmU1cWRWNGZlQittTUdWNXZpdWNYeklt UkdFV2Zib0VoZGZEcHB2SHBkR1pVcllUSDdIbDZSM0xGWVgyNkgzeDZ5ajQ5RUFqUW4zekJw NXNMeGZGMGpkWTN5OGoxUkUwM1MxWVRjY2g0ZXNMZnZzZ2xIK1N4V3RmSzVIaTZYKzk0dXRx bmtjaW1HbndOdktiekd6UjZQQjNWb2RUSDAwbExCZ0lCVWxOM3duVXZpVFE5UWZrbXplUUpS c2lnUFRVZGZMcUZNSlZQRjdtZUlUaFdXWnZ0V2dZWmRzWE4ramxOMTdIM1ZCSlc5dW1aNzcw SXBmNU5oZjRzNFo5WTdWSy9UMDhtR1NOazBKNmFEajVkRnFOOUFvTlBwekYrQVovT2E3cnNZ dTAwWnVXcjgvRUxlVTFYREpNaHkwcnQwNU5IZ2RFQUFDQUFTVVJCVkV2UXA4dXU1eHR0RFFi eHkwTDBYL2ZDYWJxTzd1ZG5XeklkUHAxdldQRHArZ0dmcnJvSEUxLzVZeXFmcnEzcGRNaFZr cVNJTlBiRmYwelJqR2prMFVsMnVDVDlFelZkNU91RkRCMnJzQWtrMUhReVNLMTdGMEtrejZm em11N25mTHFncWlUVnNFYklvTGswZmVQR2pXUkNESnphbkJqZzArVXhtcDBlZkxxVXlLY1Rl U0xlTXpoMjhzdUVnT3B2R3JOcThEWHdDM2xOVnd5VEpaOUduMzRYNTlObFQ4bVNkM3NUZjN2 Z0Uwc2lLd044T24xY3kvbDBYdFBCcHllZ3E2dHI5dXpaVk5OVG1STURmTHFNVkV5WjBWakNw eE5acEQralNSTTFuUldGdE9mRHUxMlpwZ2VaLzFMeXdXcC80ayt2VDFmVWRIMjdFSGYzUWVa VFRmZU8xRFFkZkhxcTlQZjNlNzNlQXdjT1VFMVBaVTRNNnRPMUwzVXltMDhudmNHSXJMVGxC bnk2eFBsMG1SVFNVUmRGbnk3VDlEUm1kWmV2SWFHbSsxRndQSXpyNmhGSnVWOWx3S2VUYnc4 MGY5cWsyajgvS0Y1T3F1YUlkZnQwK3JkdE5VMWYvdU1Yd2FlbnhOcTFhNTkvL25tTU1kVjAz WE5pQkZGdy9kaU1BWDRVSkRYc1JXcnpaKzJleklsQnF1OGJzeGUvWVZ0Ty9WNXRUZ3hKY3ph TTBmdDA1N08rYkJPcVEzYy9PVG9IQWwxKzk1TmxxRzUwSm9TT3NrM2tzUjhGMTVkdEltdlJ4 OHJIV0tlbkI2STZ0TDVzazRRUTJmdmRUNWJSZDNOOTJTYTBaai9kNzJnL2w2U09zUnpJSHNr Vy9DaEl0aUNiVFVKSCs1QWM2UGtsV3lKclNkTHJ4ak12SzR0STZPNG55NElvMkhONHdudEhz eVhuTDk4T2ZQNzBUS2ZIcnRqbXNyVklKdVQ5N1pqNDNwRnM2ZU83ZDQ3MmdTQUtrbnQySGhJ TlZSRS9pMjArSndhWldwcUNVNWdUSTRpQ2Qva2EyRyttNE5QQnB3dkdrTEdPUUNEQS93Wkkz aURpMDhtVjBlSStYZkduVHUzQ0kyUUpjY1RFMk5JQXNpOFVHYytCaHZuSGd1bGFKQ0FpSVZ4 V3h1NUNyVXNrYUN1RUpNYW4wNTlHMlorTHBiRXJ4OG0zQjlxU05KUFIvTWNPYXZuR012cXZI elp6OXVhcjg3RXhOSksyQUEzajEyVnY1Qm9oOHY3Nko3NlBwRUZRQkpIYjhzWXk0dFA5RTMy NkgzeDZzbENmcm50T2pBbnY5SnI5YXBwdW9rdEJKbXE2RVJneDFKc3V6RGFlVGdZclpMcER0 WW1vQUJVbW1TNm9TUW5WS1lsUlBWNXUxRFNML0FBYmtSQXIwNnltKzVuY0FvRkFJQkR3andr dUc4UEtvbUtYa09YR1A1WjluckZ0NGgrYnQ1UGMweVV5VFdkSHEwbFRreHZSV1hZSmVjd3Vv ZG9ha2NaM1FUOHF5STJHMGUzVGw5aE55VDVnZUUxSEVhU2g2WDUxcHdqajZYS29wdXVlRTRQ MTZTZ3kzcVc0L211YTZ0dmcwODNrMDNuM2grb1FGWHBmblU4V3crb0NVYlRsRzh1SS9sS1pE azdVVTdMQnpaczNrekR5RXBHaFFDQWdqZjFiM2MvMFpLcWVyS1pMWTdKT3dsZ1hLVXZTajRL MVpVOEh4MzczWXgyOW9vMmxXWkViWFVLMklNdUt5aXRwSmVxQzcySXVQNU01WWxsaWZMYXlH L3ZOTzhVd2pSZ3BrVStuUiswSG41NFpxS1lUYVVCcjltdHJlc0x6UERQUTM5ekFwNXZCcDh2 TXI4elpLY3FsWXJ6SXphL3lPS2l5QzNZNWtSNFJwVlBjam81czFZNDlxUDQwcUJLVHJwdWt0 d1VTYWpyMTZWSUV5VFRkUDZicGlsMElmSG82b1pydWU5ZEgzeGp6KzNTWnBodmswelhHbXND blM0eFAxNzZKT0VGaVBOT3lLWTBZVnRQTms1V09NSkhFMURZbCsxUXp3cWVqaVpwTzl3ZytQ Uk9NKzNUbXc5WVBQajJScG1jWFh0TlJuWmhKTjhDblM0RjArajVEYjZuNGROdmMwdHNDa3BK UEp3LzhFelY5OUZVbHdLZW5FMFdmN25lOFR4LzlRVXo5TXl4YlBuMzBsemNWVGMrd1R5Y2xV OUNhL2RxbnZYa2NNZmgwZndaOXVwLzhLa0MwUGpDNlVOeW5xemtxSTJUUW5wb09QcDJGWEFW aDNKY0EzWXhxZWdUSngxNVFGbnc2K2F0TFFrMDN6NDN0NFk2OXBmZndVUjNTOXVueVY1VlFQ TkZBMDVPR25lZW93ZHZnZTlmbmZkZUxJc2o3cnRkUFprSlJtbDNJSkRNS0JWR1EzTi9sYlpB TW1DVW5PRFluanRvOFB0bWE1K2pkUHE4a1NkNTN2Yko1amhxOERWSm01em55MW5rYmZBM2VP aTlhczUrMGxkcjlUMi9mcnZFcXVmLzEvOTZjTU9ZdWI4TmR2b1pVWXRnZWJwNnNrbTJydTd3 TnRXVlA2OTRqaXFCazk2Z1JFd2dFYUtzdWJ5enI4M3FES09oOTF5c2hKR3R6RkVGcTh4enhh blBreUJGeWpzdVd3enhIaVVuS3B5ditEU1FyVUovdU44WktCMWtib2xMOWd5VmpJKzlCK20x M29rLzNvNkRSUGwxMmpPT1hrSU5QdDlRdHZZZlBPL0hnMlBYUXBHUG85dWxxMzVLTmtFRjdh am83bms3ZWRYcnEwcE01aUlKbUcwLzNHek9lUG40QzFDSHloeFR0VFNscXVuRlh6YXRwdXNo NCt2S05aZnF5a2wwdFRxNjVsbEJpVFRmUHlEWGJ2YzJUbFk0dzg0eW5zNjFLeHRQSE5YM3Nw MUZXMHdYSDAzMTFQdEIwblJCTmx6VTkxWFEwOXZkdTJ2UW11UlRFei93anc2RHRqMjRjamY2 dFRqcytZeVB2ZmpxQ3FkZW42MDQxeVB3SmlQNUhodG94Uzl6QXAvdlQ3ZFA5R2o0OWdxU0px cUxtMC8xY255UWRUTmtxR1lBOU5WM1pwelAvVnlabk5TblNsQkNqZmJwL29xWWI1OVBwUDBl ME44VjNTaU95R3Y4cll3byt2YmJzYVgxWitibS8waEQ3Qmo0ZGZMcWFUMGVjcHF1ZHpySWxw RXlzWXIxSkkyVFFicG8rcWhTY1QyZi9ta3ora0IzVVczWlpHeDNlM3ovMjcyb3BvbWRpU1pI dHkyNko4ekVlV3B4RTRib1hza1RBcCt0T1ZmV1V0b0pQSndjT1BwMDJRdG8zU0ZYYnJ6VHFr cXhQOTZ0NEtjbmVtdDdVMUZSVlZaV1hsMWRkWGQzUjBZSDF6bk5FUEJmdjArVUYyQkF5eUtk cmk3THFCenVqNldtYzM1MWNHS3NnQ3BxYjRnT2tpVDQ5MmIra3l1TEhDMWhUQnlTN1BuM05m clJtdnc2Zkx0NVdmSnRZeUtmTFZNWWtXZWtPUzlHbnM1cWVkcC9PdHphOVJTUUZueTRyamtZ RzkvaHk4eFFqdE5Rc21uN1BQZmQwZDNmMzkvZHYzNzZkMU5IVk44OFJHUkxsZmJxc0FKdGYv Wk16S2ZqTEovUjQvd0NpZjFFTG92RUNmb3E3U0RZOWNuRzY3S2E5bGovaEx3MUpIcVBpMXNp b0M5WDAwWjhyR1UzWDQ5UEZFdE9vSjJVSm40N0cvdllDUHQxUW55Nzc0NmppcjNUOHFZRWk0 NTJRMW1MelQ2eEZUREZDUzgyaTZaUVRKMDU0UEI2c2Q1NGowdnE4VDFlOHRZKzVQRUZ6ellm UkpkUjcwaDlENUJYdkpvYXg2NUxlSTQybDJ0TTFvYzYxMmdkUFFwK082aEQ1d1YyaDQzTEdl VHlaT2tTK0xyQkhJVTMwNlJxZmhWcUZKeWZ1am1pNlgxM1RoZjVIV2p2aG01WmdXeWxxdXJW OHVxeDdteUVyM1dIWjllbXlLbUNzVDZkTCtEWW5DL25lUHVwUm1Hckp0SXdsYTlmbzZXYUVo SnBMMDN0N2U1Y3NXYkozNzE2c2Q1Nmo5V1diVUFUZHZiT012ZmVQelYwaXV3K2lJSm4zcE9m dytDd3FkRFlaOWpHaWM5OXdzNmpRT1doUUhXcDY5RkUvQ2pZOStpaU5aMStWM1krL3VyUE1q NEo0WnhtS0lEcHZDNDFrSDdQNXlPWndrVzJmTE9rNVhCWWs4KzhFME4wN3k2UUF1dnVCYldq TmZqcURqMkp1ZUdkWlJFS3lvNUNZT1dLQ1NqUFJLTjdUZU9WMmlLRFI5K3VCYldST0dUTFAw ZWhzUnlMekhBVW01Q1pySzlwaXNzZUJRRUN4UC9oUjhPNEh0cW4xRnZQY3kzcDQxdlBKNG4z cUxZQW42b05NTjJSS0luK1ZPZGZvN0ZFb2drZ2ZhM3IwMFNDWkVTa3lQdHRVSUJDZ3ZkSG04 eHhoakRzN096MGV6eXV2dkVLZTZwdm55Sy9rMDlXc2VtM1owL1RqbEg2SzhqZGZuWStVbkth VEV0RGI2T1hlRXlkUEdmMk5tNm5mVCtNM2I5NGNHQ000Tm4wQmF3VDhZN1lGTVdXNzJhdnU2 QU9hMVlSdkF4T1hzSFhrWlY4cVpRZEk4aHd0a0QzMlI2M2cySmlWaE5EeWpXV3MrMURiTHo4 ZnplakZBMlBKU3dqMStueWpqY240OU9EWXBZVEorblIyWDhHeCt1QWtINXFuckswVXY3dFkx NmRMQVpUaHJIcmY5YVZyVTRLSlpjdW44L2FjbFJUYXIyaWY5NCtOb05McnFmd282QnRyTHFv em8rWDE3ZTNUNit2clMwcEs5dTNiUjVmb20rZEk3VzFRZTRPRDNFMDJINHJzaWpmRjViSzMw RC94cVVad2NPeXZhM3p2MU40Um43UGlFa1VKUUl4a0syYkYxNlRtTjB2M3FORmMydTNtWnc5 OFRFbVRIVThuUDBXSXZFSCtpWS9WYnBZWW5oYnYzc1lsa1BWR1lKc2lsUzJvYWJyYWtBdjdV YXA0eHZINW9MSFpTMlQ5ME9hYWppWnk4ZUpGbmZNY1JaQ2dUMGNSWkpJUlJrV2Zuc2FzRWtx QXRuTWhOeVBhYWp3bEpVMFg5T2xwYnl2eFRkR0dJai9MMDZjWjl1a29na1NNc3l3cnRka2tS TEx5dmV1VG1PTk41UUFGbXlzclBsMUQwTWxONDNTV05aZGl2N0s1cHFjRnF1a2FLaWFORmNn MnlHdEl5UmZnUnN4ZjFFUk9GUjNiVDhyV3BUMkJ4SWxSVFNlL2w0NzVJTUZMWDlMeU50R0NI dlNwMmpqTTZHY3crU2JCZkI3clRpYjFONVNtTFhFUE5EYVNlZ0t5MXB2UXdobnBSYkwrbytN MjJwRWlhTUlHeFc2Q0Rhc1dESnFlR0cyZlRpLy9rc1kwRkRlbTJlVWxQRlZVYlJjVnNnakNq V1VpNTROZ1ZpSjlrWGN1ZkFJWjh1bXM5elRTcHl1YUtYOGlUU2NqMSt6M0t2NXhldHZLcDJU QStUZVVobWxvdWl3cnRZNHFtSlZjMDdsK3hXWTEzb0I2dndJcVpzVmYwQ25lL1dnbmw1MFg5 SEhhZlRxL0hEUTlNVTg4OFlUR0o2cjRKNjN1MitoMzhNQzRMZ2l0eGVRanBkV3FxM1pIOWNR a0pvZDBKYU80QmZrM3FySDVZOGViUWwzSzJkRjIzVytUU0VQeENmdTVpOXY4U3I1VjM1dVZv SWtTZWNuUi85L0szcjZBOHR1dEwxdUpPMTZKK1ZNcjM2VCtNU01zNzFycCtFNlR5b21zcU9u SjN0UlNva2V0b0VMTWV3R2FuaGlxNmJ4UFY3d3RieXdqNnFEMnV4eFowcnZaTnhvV0dWY1Qy WW9rUmxtaG1FamZoajNzL05lOGtNbXlJanZsTTZSN2xBbmNlRXdFb1RYN05kcUJYY1czWVk4 OGJTWjVjc08xWmVPN1VCRmN4YXhvUE4zNGFDTWtlbmMwZkRyZE9LNHRZMXRHZmdoam1aQTlz am53TjhXMll0K0YwVERhVnV4N1BmRjlKMWxOYUlUSWhMVDV0cHJRSDVqRGtXV2xxQlFLeVNz ZDQvSWZ2OGkvS2RwWnlScWNKcW02dTRtZGh3MVRTSHZzTU1lYks4TDBGcjdQS0xXUGJHdnlO M3JpYmJSSjJYZFF2UitLK1BUZXpUN1pPeXZTdGNhYkZEUmRBem9uQmhxcldBLzNWci9YbUEw RHJkbFBIcHNoVDdpSGUzMzNNQ2RHWXZUNGRJRXdrYTBKN2xFa0RMSWlOK3JUa2FJL1hiTWZy ZGtQYldYMXJBUVRTK01lelpNVitQVEVhSXlud3cxdWNJT2JxVzZnNllrQm53NVpRVmJXeWtv d01mRHA0dGhUMCtFR043akJ6ZVEzMFBURWdFK0hyQ0FyYTJVbG1CajRkSEdzcE9raWMyS0lO REhjNEFZM3VHWDlSalc5NmNjLy92cnp6OU9sazFiU2RKRTVNVWhqZ1UrSHJDQXJTMlFsbUpp OWZYckE0OW04WU1GZmZ2ZTd3ZjcrMUhYU1Nwb3VNaWVHU0JQRERXNXdnMXZXYjZ5bWsxdmQv L3BmZjN2cnJSUjEwa3Fhcmpnbnh0R2pSeDk3N0xFTkR6Lzg2SjEzL24vWFg3L3V2dnNlZSt5 eG45MTExMk9QUFVZZWE5elgvdkNIQ1dNRXR5YTR4NS84NUNlUUZXUUZXYkgzajl4eVN5YjNh SjZzaUdxdC8rbFB4elg5K3V2L3RuOS9panBwSlUwWG1ST0RQRGgrL0xqSUJ2dmZmVmNrVEdS cmduc1VDWU9zeE1NZ0svRXdjMmFGeFJKTDR4NU5tQlVaZTNuMy8vNWZ4NDI5aU15SlFSNE1E QXlJYlBDYjdkdEZ3a1MySnJoSGtURElTandNc2hJUE0yZFdXQ3l4Tk83UmhGazFQZkRBMXlk UGlteEtCQ3RwdXNpY0dFbHRjT2pzMlRTbGxrNGdLM0VnSzNITW1SVTJhMkxtekVvRUsybDZR cnJUUFZzckFBQ0F0YkNWcGdNQUFEZ2MwSFQ5TkRVMVZWVlY1ZVhsVlZkWGQzUjBZR1pXVlZO bHhTOHhRMWFOalkwVkZSVm15NHF3Y2VQR0xMNkpHdjNLVkZrTkR3OXYzTGl4dExRMEp5ZkhW SW14elZWY1hHeVNySnFibTh2THkxMHUxN3g1ODVxYm00M2JOV2k2ZnU2NTU1N3U3dTcrL3Y3 dDI3ZXoxK0ZrVjlQNXJOVHl6RzVXOTk1Nzc0a1RKMkt4MkovLy9PZHNuWGlLTGRQVjFUVjc5 dXdzdm9sOFZ0bnRVUVErcTAyYk5pMVlzS0M3dTN0a1pNUlVpVkVPSFRyMHExLzl5aVJaRlJZ V2hzUGhlRHdlQ29YY2JyZHh1d1pOVHdNblRwendlRHowcVJuT1FNeGxwYmdrODhoeWlNZmpy Ny8rdXMvbnkySkttTW1xdjcvZjYvVWVPSERBREc4aXpRb2hkTmxsbHhVVUZOeDY2NjBuVHB3 d1NWWWVqeWNVQ21VM0dSYStlOTk2NjYxZmZ2bGx0dkloMEt4OFBsODRIQjRZR0FpRlFqVTFO Y2J0RVRROVZYcDdlNWNzV2JKMzcxNjZ4QXh5d0dmRkw4bDZWdVRiY1ZGUjBmdnZ2MitTck5h dVhmdjg4ODlqRTd5Si9QdDE1c3laMnRyYVpjdVdtU1FybDh2MTBFTVBUWjA2MWVQeDdObXpK NHRaWWFYbU9uanc0TDMzM3B2RmxQREVyQTRmUGx4WVdJZ1FLaXdzUEh6NHNIRTdCVTFQaWM3 T1RvL0g4OG9ycjdBTHN5NEhmRmFLZVdZOUs0d3hHWHU1OHNvclRaSVZHUnJPK3VDMTJ2c1Zp OFh5OHZLeWtoTG1zcG81YzJZb0ZDS0RDYk5temNwV1ZueGloSnR2dnZtamp6N0tWa3FZeTJy Ky9QbDA3T1dxcTY0eWJyK2c2ZnFwcjY4dktTblp0MitmYkhsMk5aM1BTaTNQN0dhMWR1M2Fz MmZQeG1LeDExNTc3ZkxMTHpkSlZwUXN2b2xxV1gzOTlkZFBQUEdFMysvUFJsSUtXYTFhdFNv VUNwSEJoSktTa3F4a3BaZ1l4dmlkZDk2NTRZWWJzcFVTVnNxcXFLaUlqcjNNbURIRHVGMkRw dXNIVGVUaXhZdXlKZWJNNnVMRmkyYklxcUdob2JTMGRQTGt5ZC81em5mKzY3LytLL01wS1di RnZwU1ZsQlN6SWcveTgvTnZ2dm5teno3N3pDUlpuVDU5K29ZYmJzakx5eXN2TDgvaXdMcmlt M2pqalRlKzhjWWIyVXBKTWF1bXBpYVB4K055dWViT25mdjY2NjhidDJ2UWRBQUFBUHNBbWc0 QUFHQWZRTk1CQUFEc0EyZzZBQUNBZlFCTkJ3QUFzQStnNlFBQUFQWUJOQjBBQU1BK2dLWURU aWVMbDZJRFFOb0JUYmN3QXdNRER6Lzg4S3haczZaUG4vN01NODlrT3gyemd4QjY3cm5uTU1h Ly9lMXZRY2NUMHQzZGpSQ0NlV1pFTUZYWEFrMjNNT3ZYcjcvenpqdS8vUExMcjcvKytwRkhI c2wyT21ZSElWUlpXVGt5TXJKZ3dZS3NuM2ptWi9QbXpaTW1UZHE4ZVhPMkU3RUFwdXBhb09r V1pzNmNPYklweWRuK1JCOGpoTmF2WDE5UVVFQXJmR2E5MjJVRmhOQjExMTIzYWRPbTY2Ky9u bTBjV2FPOThNSUxNMmJNS0NvcTJqNDJ5N0F6bSt2bW0yLys4WTkvZlBQTk41T25OVFUxWkc2 SDl2YjJ4WXNYWTR5N3Vyb3FLeXZ6OC9NM2JOakF0bWUyRXM0aWZOY2kvU28zTjVmT2lmSHpu Ly84My83dDN6REc5OTU3NzVvMWEraUthVThHTk4zQ3VGeXVvYUVoZG9tYXBqLzMzSFBSYVBU QkJ4L01hSDRtQXlHMGMrZk9TWk1tN2RxMVM3R2h5T050MjdiRllySFcxdFpzelI5aUJxTFI2 TFJwMDc3ODhzdHAwNlpGbzFHTThaWXRXMWF0V29VeFhybHk1ZGF0V3pIR1BwL3Z4UmRmakVh ajI3ZHZkNmFVVTlTNjF0RFEwTUdEQjJmUG5vMHhIaHdjL043M3Z2ZUxYL3ppZTkvNzN1RGdv SEhKZ0taYkdBMmZQamc0eUdyNnBVdVhNcDJjK2REUWNmWXhQZCtjckZNdExTMjAvbFJMU3d2 RytOeTVjMjYzKy9qeDQyNjMrNnV2dnNJWTUrYm14bUl4akhFc0ZuTnlXMkdsN3JSdDJ6YVB4 ek5wMGlTRVVFNU9Ebm1wcTZzTElkVFYxV1ZvTXFEcEZxYTJ0dmJPTysvczdlMDlmLzU4Ylcw dHhuam16Sm43OXUzcjcrK3ZxNnR6K05kaEhrRk5WM3pzTk5hc1dVTitkWC9tbVdmb1FNR0tG U3V1dnZycWxTdFhrcWRlci9jUGYvaERMQmI3NHgvLzZPUzJ3a3JkSmo4L3Y3VzFOUmFMaFVJ aHNpUVdpMVZYVjk5NjY2M1YxZFg5L2YzR0pRT2FibUhpOGZndmYvbkxtVE5uMHV0ZTZ1dnIz VzczakJrenRtN2RxcUhwemp3RCtSTlBWaEJWTVFZN3Nybkt5OHMvL3ZoampQSEhIMzljWGw1 T0ZyYTN0eU9FMnR2YnlkUE96czZLaW9yOC9QeDE2OVpObWpTSkxIUmdXMkdsYnZQVVUwKzUz VzYzMi8zc3M4K1NKZmZmZi8vcTFhc3h4di82ci8vNndBTVA4Q3VtQzlCMEFBRDBNenc4L01Z YmJ5eFlzQ0RiaVFDamdLWURBS0FUTWxoY1hsNmVyVmxOQUI3UWRBQUFBUHNBbWc0QUFHQWZy S0hwenZ6aEJRQUFJRm1TMDNTa2dtSmtUazdPdDc3MXJWLzg0aGZrSXRaTWN2TGt5V1hMbGsy ZVBIblpzbVdmZi81NWh2ZWVNZmoyNTVmRTQvR0hIbnFvcEtSRTdaM0NHRGMzTjNzOG5yeTh2 TzkrOTdzOVBUM1llUTJJRUNvdUxzWktUY0dqMWppQlFNQTI1b1B2U00zTnpRc1hMcHc4ZWZL U0pVdmVlZWNkTE5aSitMV2FtNXZMeTh0ZExsZDVlZm51M2JzemN6aEd3NHNoZjk3eFRjSERO Nm5JV2pLUzEvUUlkMVBSOUpHUmtWT25UcTFhdGVvLy8vTS9SVkpKSTNmZmZmZUdEUnY2Ky9z M2JOaXdZc1dLRE84OXcyaGZxbGhiVzF0VFV4T0pSRVpHUnRTMlVGeGMzTkhSTVRBd0VBcUY3 cmpqRHV5d0JzUVlyMW16NXZISEg4ZEtUY0dqMkRoSGpod2hKM0RHY3M0QTdPR3NXTEVpRW9u RTQvSGR1M2RmZnZubFdLeVQ4R3U1M2U2MnRyWjRQQjRPaDkxdWQwYU93M0Q0OTUwLzcvaW00 T0diVkdRdEdRWnFPbmx3NnRRcDh0Zlk5OTU3cjZxcUtqYzN0NnFxNnIzMzNpTXgzL25PZDFh dVhEbHYzanp5UndieW1jWVdTYUFMMlMzekZUbGtGQmNYOS9YMVlZejcrdnBzL3c5dmJVMHZM UzE5KysyM3RiZFFYRnk4Zi85K0ltUXpac3pBRG12QXI3Lyt1cWlvNlBUcDAxaXBLWGo0eG9u SDQ0c1dMZnJUbi81a1kwMG54R0t4cHFZbWN1V2llQ2RoMTZxdXJtNXZieDhZR05pM2J4K3BH Mk1ERUVKdXQ3dWdvT0NXVzI0NWNlSUVWai92MktiZ1VXdFM3YlZrR0s3cFEwTkR1Ym01R09Q S3lzcVhYMzQ1Rm92VjE5ZFhWVldSR0ZyUGM5cTBhWFJkdGtpQ2JHdFlyQ0xIcEVtVGhvZUhy N3Z1dXFHaElaZkxKZElRMWtWYjAxMHUxNFlOR3dvS0Nzckt5bDU3N1RYRkxUUTJObDV4eFJW VHAwNWR0MjRkYVM1SE5lQ3p6ejVML2d5Q2xacUNoMitjUng5OTlJYy8vQ0cyM1E4L3NzT2hn MVFmZnZnaEZ1NGtzclU2T3p1TGlvb1FRa1ZGUlViL1N6N0RuRDE3dHJhMmR0bXlaVmpsdkpN MUJZOWlreVpjUzBibWZMckw1U0lENjlGb2xLZzhZdjY1aDlTTEpHQk8weE5XNUNndUxqNXo1 Z3gyaHMzVTF2U2lvcUpRS0RRd01ORFIwVUdHakRVNGNPREFuRGx6c0pNYWNIQndzS3lzakJj WDJoUThmT09RSHN1UFFWc2QvbGlpMGVpdVhic1dMVnFFaytrazdGb1ZGUlhoY0RnZWo0ZENv Y3JLU3FOU3p4TDkvZjE1ZVhsWS9ieGptNEpIclVtMTE1Smg3SGo2RjE5ODhhTWYvWWpVaTFE MDZiSjd2a2dDM1ZyQ3h5eDMzWFhYNDQ4L0hvL0hIMy84Y1dLZ2JJeTJwdDkrKysyMGIybWNl Q01qSTBlUEh2WDVmS1J1akhNYXNMR3g4ZHBycjJXWHlKcUNSNk54N0NUb2VPTGgzSC8vL1Nk UG5vekg0MDFOVFdSVVNxU1Q4R3NWRmhhR3crR0JnWUcydGpiYmpLY1RMbHk0c0duVEpyL2Zq NVhPTzc0cGVQZ21GVmxMaG9HYW5wT1RjL25sbC8vc1p6OGp0VG9QSGp4WVdWbnBjcmtxS3l2 cGVMcnNuaStTZ0NhQ3hUVDl4SWtUUzVjdUpWY3ZuRHg1VXFRaHJJaGk0OGlXOVBUMExGMjZO RGMzMStQeE5EYzMweFg1N1pTVWxLeGR1elllajJQSE5DREdlT25TcGV5UUZOOFVtR3N1amNh eGphYnpIU2tZRE02Yk55ODNOM2ZSb2tYaGNCaXJ0SU9zQmZpMUdoc2J5WGZ4dVhQbk5qVTFa ZnpJRElHMDBwUXBVMjY2NmFiUFB2c01LNTEzZkZOZ2dhNmx1SlkyUmwzTENBQUFBR1FlYS96 blNBUDRnQUVBQUtCWVh0TUJBQUFBQ21nNkFBQ0FmY2ljcG91TWlzRElDUUFBUUNwazdqZlNO R282U0w4SXI3enl5cFZYWHBtWGw3ZDQ4ZUlEQnc0b3h2RDFKUnhTNlVXR1NFOTJRcGtYR1h5 emlIUXFmV3RaQ1A0QStTSTJyRHlTNjlQNUpScGJwaHNYV1V0RzhwcStaci84QnBwdVN1Nisr KzZQUC82NHY3Ly9sVmRlVWJzeW5hOHY0YlJLTHl6YS9jbzVaVjVrc0VjbjBxbFNXY3RDc0Fl b1VjU0dsaExTV0tLNFRSa2FhOGt3U3RNLyt1aWp4WXNYdTF3dTlnTkhWcWZsNk5HajExeHpU VjVlM3Z6NTgwbkpNUko4OXV6WkcyKzhjY2VPSFZpbFNvenNvNHpmenRLbFM4bXNpZncvU2h6 SXFWT244dkx5TGwyNnhML0UxNWR3VktVWEdkclM3Snd5THpJVWowNmpVNld5bG9WZ0QxQ3Rp QTFiU2todGlXeWJzcm94SW12Sk1FclRmVDdmMXExYjZiODJzRktkbGlWTGxyejY2cXZ4ZUx5 dHJXMysvUGtrSmhLSjFOVFUwQUplL0w5UE1kZGQrTzNzMnJXTEZBVmJzbVRKM3IxN1JSckNy dnpqSC8vdysvMlBQUEtJNHF0OGZRbEhWWHFSb1MzTnppbnpJb00vT3UxT2xjcGFGb0k5UUxV aU5td3BJYlVsUEd6ZEdQRzFLRVpwZW01dUx2bjdLTHV1ckU1TGJtNHVkZHlrdWd0Q3FMcTZ1 cVNrcEx1N20wVHlWV0l3MTEzNDdRd09EbDU1NVpXdnZmWmFaV1dsUm8xWjIvUGhoeC9PbXpk dnc0WU53OFBEaWdGOGZRbm5WSHJoU2VqVEhWTG1SWWJzMEJKMnFsVFdzaERzQVNvV3NlRkxD YWtWRitLaGRXT1NXb3RnbEtaN3ZkNnRXN2NPREF5dzY4b2UrLzMrbHBhVy92NStkdm1aTTJm MjdOa3piOTQ4OGoxWDBhZFBuanlaL1dMQ2J3ZGovTXd6enhRVUZLZ1Y0M1VDRFEwTmZyK2ZE Rmlwd2RlWGNFNmxGeDV0WFhaT21SY1o3TkdKZEtwVTFySVE3QUVxRnJIaEIzNEZoNExadWpI aWExR00wdlFQUHZpZ3VycWFHQm02THJzZGpQR3hZOGR1dXVtbS9QeDhhbk5vVEVORHc5S2xT Mk94R0Y4bEJtUDg4TU1QazdYSVUzNDdHT04vL3ZPZnhjWEZtWjlpeVR5Z2lWeThlQkVMMUpk d1RxVVhGbGxiMFlWc2pCUEt2TWpnbTBXa1V3bXVaVjM0QTFRc1lpTXJKYVM0UkxIcDJMb3hp bXRwWTg5Nkw4UER3Ny8vL2U4ZmZ2amhiQ2NDQUFDUVVlejVQMUtFVUUxTkRSbTlBUUFBY0E3 MjFIUUFBQUJuQXBvT0FBQmdINkRlQ3dBQWdIMndaTDBYUUFSOXBUbll0MVd3dm9RTmdObzRH ckFGYlpxYm14Y3VYRGg1OHVRbFM1YVEvMnp6OERFaWExa0kvcXhwYm03MmVEemttcWllbmg2 czFEZEUxSkp2S0IybGNwTFdkQ2tndjRHbW14TjlwVGtvNHZVbGJBRFV4bEZEVnRCbXhZb1Zr VWdrSG8vdjNyMzc4c3N2VjF5Rmp4Rlp5M0t3WjAxeGNYRkhSOGZBd0VBb0ZMcmpqanV3ZXQv UWxqaStvWFNVeWpGSzA0MnI5MElyQjdTM3Q3T2xGUUExZEpUbVNLcStoSjJBMmpnc2FnVnRZ ckZZVTFQVGdnVUxOTmJsWTBUV3NoQXlUZCsvZnovUmRESVR0RnJmRUxHdGlnMGxYaXJIS0Uw M3J0N0xsaTFiVnExYWhURmV1WExsMXExYkUrYnNjUFNWNWtpcXZvUnRnTm80TWhRTDJ0Qnh1 UTgvL0ZCdFJUNUdaQzFyd2JaSlkyUGpGVmRjTVhYcTFIWHIxbW4zallTYXJ0aFFTWlhLTVVy VGphdjNjdTdjT2JmYmZmejRjYmZiL2RWWFg0a2NwR1BSVjVvajJmb1M5Z0JxNC9Db0ZiU0pS cU83ZHUxYXRHaVJ4cnA4ak1oYUZrSlI5dzRjT0RCbnpoeXMzamRFZkxxc29aSXRsV09VcGh0 YTcyWEZpaFZYWDMwMXFid0lxS0d2TkFkMlpJRmlxSTJqRGUwaDk5OS8vOG1USitQeGVGTlRF eGxrNE9GalJOYXlITEt6Wm1SazVPalJvejZmcjdhMkZxdjNEVzFONXh0S1I2a2NvelRkMEhv djdlM3RDQ0ZTSVIxUUEwMUVzRFFIVHI2K2hBMFFhU3NuMThhaFRSRU1CdWZObTVlYm03dG8w YUp3T0N4N1ZTMUdjUzNyd3A4MTVFRkpTY25hdFd2SmdEUGZOeFRQdFlSTnA5Z3p0YkZudlJj QXQzYyt0UUFBRm1SSlJFRlVBQUJuQXY4akJRQUFzQStnNlFBQUFQWUJOQjBBQU1BK0dLWHBN TWdPQUFDUWVZejZqUlEwM1NSQUpaT2tFUG5aWDYxeDJMb296a0g3cVBuMjFGSEF4UHp3QjhY S0k2bWJKSExnZkwwWEhkZWhKSDh0WTBSK0EwMDNNMURKUkFmYXZWZXhjV1IxVVJ5QzRGR3pB VG9LbUpnZmpZT2lkWk5FRGx5dE1JNkpOSjJ0M01KWGQ5bXlaWXZINHlFMVlaeDJNbVFlcUdR aWpuWnY1QnRIclM2S3ZSRS9hc1VBOFFJbUZrSjJVSXAxa3hJZU9GL3Z4U3lhTHF2Y3dsZDNt VFp0V2lBUWlFUWk3TjlOQVNPQVNpWkpvWDBLOFkyaldCZkY5b2dmTlIrUVZBRVRxOEFmRkY4 M0tlR0IwK0VhdHQ2TFdUUmRWcm1Gcis3eTVwdHYzbmJiYmZQbno1OCtmZnF2Zi8xcjhhU0Jw SUJLSnNtUzBLZkxHa2V0TG9xOUVUOXEyYXZKRmpDeEJQeEI4WFdUQkErY0w0eGpGazJYVlc3 aHE3c1Fob2VIRHh3NFVGQlFJSjQwSUE1VU10R0I5aW1rMFRqT0VYU1dwSHk2amdJbTVrZnhv R1IxazBRT1hLMHdqbGswblI0SnFkeWlXTjBGSVRScDBxUzVjK2UrK09LTDRra0Q0cUNKUUNV VGJXVE5SUmV5TVJxTkE1b3Vhd0crUFJVN3BOVlJQQ2haM1NTUk16Rmh2UmVSWktEZUN3QUFn SDJBLzVFQ0FBRFlCOUIwQUFBQSt3Q2FEZ0FBWUI4eXJla2FQNmNBQUFBQUtaTE4zMGhCMHcy Q0xjSFIzTnhjWGw3dWNybkt5OHQzNzk2dEdNKy9sVkR2UlNPbXViblo0L0dRNjE1NmVucXdV cGtPcThPM0EzK01JZ1ZNdEF1aFpPWllNb0JJNDRpY2lYd00zOWtTa3JTbSsxRlFkZ05OTnhX eUVoeHV0N3V0clMwZWo0ZkRZYmZicmJnSy8wWkF2UmVOVjR1TGl6czZPZ1lHQmtLaDBCMTMz SUhWeTNSWUhiWWQrR01VTENVa2k3SGxXUy9TT0NKbkloL0RkN2FFR0tqcENLSDE2OWNYRkJU VTFOVFFKZnpZaTNaTkdNWHRBR3J3SlRpcXE2dmIyOXNIQmdiMjdkdTNlUEZpeGJVUVFtNjN1 NkNnNEpaYmJqbHg0Z1NHZWkrSk5IMy8vdjNrTkdQL0dNS1g2YkE2ZkRzb0hxTkk1UllhdzNj MjI2RGRPQ0puSWgrajF0azBNRmJUbjN2dXVXZzArdUNERDdJTDJjY0phOEtvYlFkUWhDL0Iw ZG5aV1ZSVWhCQXFLaXBpLzZiTWMvYnMyZHJhMm1YTGxtR285NktwNlkyTmpWZGNjY1hVcVZQ WHJWdEhHNGY0RlZtWkRxdURsUDVBSkR0R2tjb3RmQXpiMmV4QndzWVJPUlA1R01YT3BvMnht czUvZE1zMFBXRk5HTFh0QUlyd0pUZ3FLaXJDNFhBOEhnK0ZRcFdWbGRxcjkvZjM1K1hsWWFq M0lqWStjT0RBZ1RsejV0Q25mSmtPcThPM2crd1lSUXFZcU1YUXptWWJ0QnRINUV6VWlKRjFO ZzJNMVhUdGhVaXNKb3d0QitDTWhqWmFZV0ZoT0J3ZUdCaG9hMnRURzhValhMaHdZZE9tVFg2 L0gwTzlsMFJkYm1SazVPalJvejZmcjdhMkZxdVg2YkE2YkR2d3h5aFN3RVF0aHUxc05rQ2tj VVRPUk1VWVdXZExTT1kwSFUyRURkQ29DY052QnhDQk5scGpZNlBINHlGRmRacWFtbVN2MHFj SW9TbFRwdHgwMDAyZmZmWVpobm92RXkvTVVHeXVrcEtTdFd2WHh1TnhyRlNtdytydzdaQ3dG SWxpQVJNK2h1OXNOa0NrY1VUT1JENkc3MndKZ1hvdkFBQUE5Z0grUndvQUFHQWZRTk1CQUFE c0EyZzZBQUNBZmNpY3Bxc051MnNNeHljY3I0ZWhmQUFBQUpiTS9VYXFXMzlCMDhWUnJES1Jz QlFKLzFiYXI0QkpVckFGYzNqNFlqaE9LSStqWGJtbHVMaFljUzIrSThYajhZY2Vlb2lVcjdE WitTdXJzNlNqUEE3ZnBDSnJ5VWhhMDRNb0tMdUJwcHNIdnNxRVNDa1N2aG50V3NCRUJGbkJI QjYrR0k0VHl1Tm9WSGRaczJiTjQ0OC9ycmdXMzVGcWEydHJhbW9pa2NqSXlFZ0cwczRZc202 anJ6d09oVFpwVW1zUmpOTDBMVnUyZUR3ZWw4dEZQNDBSUWkrODhNS01HVE9LaW9xMmI5OU9O OGl1cmxidmhkMXlaMmRuWldWbGZuNStiVzB0ZVluZkZ5QXJ3YUZkaWdTcGxPQ3dYd0dUaFBB RmMzajRZamlPS284ajYxcGZmLzExVVZIUjZkT25OVlpoTzFKcGFlbmJiNytkaVVRemlGcTMw VmNlUjdGSlJZcnFFSXpTOUduVHBnVUNnVWdrTWpBd1FOZmR0bTFiTEJacmJXMWwrejI3dWxx OUYzYkxDeGN1Ykdob2lNVmlMNzMwRW5tSjM1ZkRrWlhYb0YvbHRFdVJ5RXB3Q0s1bE0vaUNP VHg4TVJ6bmxNZmhLN2M4Kyt5enExZXYxbGhGMXBGY0x0ZUdEUnNLQ2dyS3lzcllLWmd0aldL M1VUeURSTXJqOEUwcXNoYkZLRTEvODgwM2I3dnR0dm56NTArZlB2M1h2LzQxV1hkd2NKQnVo OTBtZmF4Vzc0WGRjbTV1Yml3V3d4aEhvMUh5RXI4dko2TllYa093Rkltc0JJZjlDcGdraEMr WXc4TVh3M0ZJZVJ5K2F3ME9EcGFWbFduWGhzTVRPMUpSVVZFb0ZCb1lHT2pvNkZBYmhiY2Nh dDFHUjNrY3ZrbEYxbUl4ZGp4OWVIajR3SUVEQlFVRldGM0gyY2VLOVY1bXo1N05mdEF0V3JT SStQVDYrbnAyWFhaZmpvV3ZNaUZlaW9RdHdXSFhBaWJpYVBScXZoaU9FOHJqS0ZadWFXeHN2 UGJhYXpYVzRqdlM3YmZmVGpYZGZwOS90TnZvSzQrRHVTWVZYSXZGS0Uwbm4xZWtjTUdMTDc2 SWxYUWNUUVJqckZqdjVROS8rRU5CUVFGOWV1alFvWXFLaXZ6OC9QWHIxN1BiWWZmbFdHUk5l dkhpUmNWU0pMSzNqQVN6SlRqc1Y4QWtXZFJzQjFZcWh1T0U4amg4MThJWUwxMjZWRForSW1z cnZpUDE5UFFzWGJvME56Zlg0L0UwTnpkbjhoQXlBRDE4ZmVWeE1OZWtpbXRwQS9WZUFBQUE3 QVA4anhRQUFNQStnS1lEQUFEWUI5QjBBQUFBKzJCMlRZZkJlZ0FBQUhITS9oc3BhSHFLSkZW bGdsK0MxRXQ1MkJLUkxxMVczVVc3U296OUVPbGFmRnZadU42TE5pS0MyZHpjWEY1ZTduSzV5 c3ZMZCsvZVRaY24xYldTMXZTSUpMK0JwcHNaOFhvUmlrMnRVY3JEeG1qM09zWHFMZ21yeE5n UGthN0Z0NVZkNjcwa1JLUnZ1TjN1dHJhMmVEd2VEb2ZwZktUSmRpMmpORjJ4M2t0dGJXMStm djZDQlFzNk96c3h4dSs5OTE1VlZWVnVibTVWVlJXNXFQNmpqejVhdkhneFdZdHRpTE5uejk1 NDQ0MDdkdXdRUENxQUoyRzlDUDU5RkNubFlVdTB6eCsrdW90SWxSZ2JvOUcxK0xheVpiMFhF WkJLVlNXVzZ1cnE5dmIyZ1lHQmZmdjJMVjY4R092cVdrWnB1bUs5bC9yNitsZ3MxdERRNFBW Nk1jYVZsWlV2di93eStVZG9WVlVWeHRqbjgyM2R1cFdkU2hVaEZJbEVhbXBxT2pvNkJBOEo0 QkdwRjhHL2p3bExlZGdWN2ZPSHIrNGlVaVhHcm1oM0xiNnRiRm52UlJ4WlZTVVpuWjJkUlVW RkNLR2lvaUpTSGtCSDF6SksweFhydlpBNkxiRllqQlFWY2JsY3RISkxibTR1eGpnM056Y2Fq Y3IyV0YxZFhWSlMwdDNkTFhoSWdBekJlaEd5OTFHd2xJY3RTZWpUWmRWZFJLckUySktFWFl0 dksxdldlMGtLV1ZVbGxvcUtpbkE0SEkvSFE2RlFaV1VsMXRXMWpCMVBsOVY3SWE2OG9hRmg0 Y0tGV01tbmU3M2VyVnUzc3VVVkVVSm56cHpaczJmUHZIbnp5SmM0SUNuRTYwWEkzc2VFcFR4 c2pQYkpvMUhkeFZHQ0x0SzErTGF5ZDcyWGhMQlZsWGdLQ3d2RDRmREF3RUJiV3hzZFR5ZGsz NmVUVHhWWnZSY3lubDVSVVhIbzBDR004Y0dEQnlzcksxMHVWMlZsSmVrWkgzendRWFYxTmZs b2toMUpRMFBEMHFWTGlhOEh4RUVUVWF3eUlZc2hDL2xTSGs1QXNTbGt6YVZSM2NWUm1pN1N0 Zmkyc25lOUZ3MUlLN0ZWbGJDU2tmSjRQRVEybTVxYVpLc0w3c2dDYzljQkFBQUFnbVIvam1r QUFBQWdYWmo5ZjZRQUFBQ0FPS0RwQUFBQTlzR01tZzZqTkFBQUFQb3c4RGRTa0dZejBOemN2 SERod3NtVEp5OVpzdVNkZDk1UmpPSGZSOGNXNWRCWHcwU3RBb3lkVU90SUlxVkkyQmhiZGkx V0RNbEY5L3c1SmRKSmVGRVZPWDlsSkszcEVuY0RUVGN6SzFhc2lFUWk4WGg4OSs3ZGwxOSt1 VVlrKzM0NXRpaUh2aG9taWhWZ2JJWmlSeElwUlNLTHNYZlhrdFZIWWx0R3BKUHdMU2wrL2xL TTBuUkZGNDhRV3I5K2ZVRkJRVTFORFZhcTkwSlhGRWtkRUNjV2l6VTFOUzFZc0VBamhtMTJ4 eGJsb0NSVnc0UmZZbGZZamlSU2lvU1BzWEhYNHVzanNTMGowa21RU2swWWtmT1hrbEdmamhC Njdybm5vdEhvZ3c4K2lKWCtSNnEySXBBSzlDdmhoeDkrcUIxR0h6dThLRWV5TlV6NEpiWkUx cEZFU3BId01UYnVXbng5SkxabHhEdUpyQ2FNNFBsTHliU21zOGFIci9laXRpS1FJdEZvZE5l dVhZc1dMZEtJWVp2ZHlVVTVkTlF3NFpmWUZiWWppWlFpNFdQczJyVVU2eVBKZkxwNEo1SFZo QkU1ZnlrR2F2cmt5Wk5sSlNWbGtlRFRNOEQ5OTk5Lzh1VEplRHplMU5RMFk4WU1qVWkyMlIx YmxFTmZEUk9OQ2pDMlFhTWppWnl3Tk1hdVhVdXhQaExiTXVLZGhLMEpJMzcrVWd6VTlJY2Zm amcvUDE4Mm5zNEc4UFZlMEVSRURnRFFKaGdNenBzM0x6YzNkOUdpUmVGd21DeVV0UzNmN0E0 dnlrRVJyR0dpVVFIR05paDJKSUxHT2M0dnQydlhrdFZINHM4cHhVNmllQ2F5TldFMG1sME5z ODlkQndBQUFJaGp4djhjQVFBQUFQb0FUUWNBQUxBUG9Pa0FBQUQyd2V5YURvUDFBQUFBNHBp OTNndG9lb3FJRkRCSnBaU0h6UkQ1MmQrWjlWNTRSTnFLVlFtMVFpaTJoRDlNa2NvdHpjM05I bytIWEJ2VDA5T0RkWlhIU1ZyVEF4eWc2V1pHcElDSjdsSWVka1g3cUoxWjcwVU53UjZpVVFq RnhyQ0hLVks1cGJpNHVLT2pZMkJnSUJRSzNYSEhIVmhYZVJ5ak5KMTM4WWk3aUxXbXBxYWpv d05qM043ZXZuanhZcXhVQVlaRW5qMTc5c1liYjl5eFk0ZmdVUUU4R2dWTUNNbVc4ckF4Mmtm dDVIb3ZQQ0k5UkxzUWlvM2hEMU83Y2t0eGNmSCsvZnVKcHBOL0dPa29qNU01bjg1citwWXRX MWF0V29VeFhybHk1ZGF0VzdIU1Awc1JRcEZJaEtvL29BL3RBaVpZVnlrUEc2TjkxSTZ0OTZL SVNBL1JMb1JpWTNnTlJKcVZXeG9iRzYrNDRvcXBVNmV1VzdlT2RDUWQ1WEd5b09tRGc0UGs4 Ymx6NTl4dTkvSGp4OTF1OTFkZmZZV1ZLc0FnaEtxcnEwdEtTcnE3dTBXT0IrQkpXTUNFa0d3 cER4dVQwS2M3dHQ0TFQ4THVrYkFRaW8zaEQxT3djc3VCQXdmbXpKbURkWlhITVZEVFpmVmVa czZjdVcvZnZ2NysvcnE2T3JyS2loVXJycjc2NnBVclY1S25pajc5ekpremUvYnNtVGR2SHZs NkN5U0ZTQUdURkV0NTJBL3RvM1ptdlJjMUV2YVFoSVZRYkF4N21JS1ZXMFpHUm80ZVBlcnor V3ByYTdHdThqZ0dhcnFzM2t0OWZiM2I3WjR4WThiV3JWdnB3dmIyZG9SUWUzczdlYXBZQVlh ODFORFFzSFRwVXVMaUFYSFFSQlFMbUFpVzhuQUNzdWFpQzlrWVo5Wjc0UkZwS3l4UUNNV1c4 SWNwWG5tcHBLUms3ZHExOFhnYzZ5cVBBL1ZlQUFBQTdJUFovM01FQUFBQWlBT2FEZ0FBWUI5 QTB3RUFBT3hENWpRZGh0MEJBQUNNSm5PL2tZS21ad0QrSGRGWFpjS1pCVXl3MHYrZmVaeFo3 NFZ2RnZIVG43MDZ6cFlYVnZCbkdkOGwrTE5NWkRzaTlacGtKSy9wZGR3Tk5OMWtzRTJ0cjhx RVl3dVlpUFJTSjlkNzRkc25ZWXNwRmc2eW1ScndaeG5mSmZpelRIQTdDZXMxeVRCSzAyV2Y1 K1QraFJkZW1ERmpSbEZSMGZidDJ4Vmp5SVAxNjljWEZCVFUxTlRnc1UvMTNOemM2dXBxS0E4 Z0NQK09KRnRsd3JFRlRCQkNicmU3b0tEZ2xsdHVrYzJRVG5GeXZaZGtOVjJ0Y0pETk5KM0Fu bVdLblVSMmxvbHNoNUt3WGhNbG81cStiZHUyV0N6VzJ0cEtEbEpOMDU5NzdybG9OUHJnZ3cv U1Y0ZUdoZzRlUERoNzl1eUVHUUk0SFZVbW5GekFCR044OXV6WjJ0cmFaY3VXS2I3cTVIb3Z5 V3E2V3VFZysybTY3Q3pqdXdSL2xvbHNoNUN3WGhPTDRacE9xN3NnaEFZSEI5bFgrUml5a1Aw czJyWnRtOGZqSWVWSGNuSnlSQTRKNE4rUlpLdE1PTG1BQ2FHL3Z6OHZMMC94SlNmWGUwbFcw OVVLQjlsUDAvSEVzMHlqUzlDelRHUTdXTGhlRThVb1RlZXJ1L0R2cUdJRkdOblc4dlB6VzF0 Ylk3RllLQlN5WlQ4d0FyYWg5RldaY0hJQkU0enhoUXNYTm0zYTVQZjdGVjkxY3IwWEhlUHBp bUUyTzVmNXMweXhTOGpPTXBIdGlOUnJrbUdVcHZQVlhYaE5WNndBSTl2YVUwODk1WGE3M1c3 M3M4OCthN04rWUFSb0lsaHZsUWxuRmpEQlkwMHhaY3FVbTI2NjZiUFBQcU1MMlJobjFudmh1 eGEvQkt1TE5SdWc2Tnd0RFgrVzhWMkNQOHV3UU9VbFdYT1JlazNhUUwwWEFBQUErd0QvSXdV QUFMQVBvT2tBQUFEMkFUUWRBQURBUG9DbUE0Q3BnZCtyZ0tRQVRRY0FCWFFyYWRvbFdHT0Rh ZGtYUXVpNTU1N0RHUC8ydDc5TlpZTUlvYzJiTjZlZUdGL2hwTG01dWJ5ODNPVnlsWmVYNzk2 OVcyM3ZzdXMxNHZINFF3ODlSTW9TcU9YRFYyVVJ1ZlNEejFDazRJL0lXdnl1ZFZ5SEFwb09B QW80U3RNckt5dEhSa1lXTEZpUW9xWlhWRlJjdUhBaHhjVDRDaWR1dDd1dHJTMGVqNGZEWWJm YnJaMERmVnhiVzF0VFV4T0pSRVpHUmpUMkphdktJcEk1bjZGSXdSL3h0ZmdjUU5NQklGVVV6 eXMwc2ZUUWxpMWJQQjZQeStXaVRrckU1Y2xjR0xtdnJhM056ODlmc0dCQloyY254cml6czdP eXNqSS9QNysydHBiZE1ydDNmbDlIang2OTVwcHI4dkx5NXMrZlQydHdKcFFEaE5CMTExMjNh ZE9tNjYrL25nUy85OTU3VlZWVnVibTVWVlZWZEZwZ1diRW14ZTBFQW9IZi9PWTNkS2Y4ZG1w cWFrank3ZTN0aXhjdjFrNk1WamlwcnE1dWIyOGZHQmpZdDIrZjlscnN3WmFXbHI3OTl0c2FB VmlwS2d0U0t2aWoxb1kwdzZRSy9pUmNDelFkQU5LUDJsbkVsaDZhTm0xYUlCQ0lSQ0lEQXdN SlYxUU1vSHBkWDE4Zmk4VWFHaHE4WGkvR2VPSENoUTBORGJGWTdLV1hYbUxqWllXUFpQdGFz bVRKcTYrK0dvL0gyOXJhNXMrZkwzNmtPM2Z1bkRScDBxNWR1OGdHS3lzclgzNzU1VmdzVmw5 ZlgxVlZoWldLTlNsdTUrTEZpMWRlZWVYWFgzK3R0cDB0Vzdhc1dyVUtZN3h5NWNxdFc3ZHFa TVZXT09uczdDd3FLa0lJRlJVVmRYVjFhUjhMZmV4eXVUWnMyRkJRVUZCV1ZzWk9jczJpVnFo SHUrQVBuNkY0d1IrUnRVRFRBU0Q5OEdjUlgzcm96VGZmdk8yMjIrYlBuejk5K3ZSZi8vclhh aXVxYlprdGhSU0x4VERHc1ZpTUZKbkp6YzBsUzZMUktJbFJMSHdrMjFkdWJpNTE3dUxGa2Zq UEdKZkxSZmVlbTV1TGxZbzFxVzNubVdlZStkV3ZmcVcyblhQbnpybmQ3dVBIajd2ZDdxKysr a290SlZtRms0cUtpbkE0SEkvSFE2RlFaV1dsNExFVUZSV0ZRcUdCZ1lHT2pvN2k0bUxGZUky cUxCb0ZmL2dNQlF2K0NLNEZtZzRBNlljL2k5UktEdzBQRHg4NGNLQ2dvSUE4blR4NXNscVJY b0ppS1NUaVp4c2FHaFl1WElneFhyUm9FZkhwOWZYMUpFWng3N0o5K2YzK2xwYVcvdjUrM1Vl cTRkTTFXb1pkSG8xRzU4NmRxN1lkalBHS0ZTdXV2dnJxbFN0WHF1WERWemdwTEN3TWg4TURB d050YlczaTQrbTMzMzQ3MVhRMW5WVXIxS05kOElmUFVLVGdqL2hhb09rQWtIN1FSTEJTNlNI eTBxUkprK2JPbmZ2aWl5K1NGUjkrK09IOC9IeU5rMUN4RkJJWlQ2K29xRGgwNkJERytOQ2hR eFVWRmZuNStldlhyMWZiTzcrdlk4ZU8zWFRUVFdRSlhhaGpMT2pnd1lPVmxaVXVsNnV5c3BL T3B5dkdLMjVuOCtiTmF0dkJHTGUzdHlPRTJ0dmJOZkpodVhqeFltTmpJL21PTW5mdTNLYW1K cEcxTU1ZOVBUMUxseTdOemMzMWVEek56YzJLeWF0VlpkRXUrTU5uS0ZMd1IyUXQvaWo0SlFr QlRRZUFMSk9VQ3dNQWJVRFRBU0RMZ0tZRGFRUTBIUUFBd0Q2QXBnTUFBTmdIMEhRQUFBRDdB Sm9PQUFCZ0gwRFRBV3ZRMHRMUzJ0bzZORFRVMnRyYTB0SWl1SXIycTJvQjBXZzBGQW9weG11 c0JRQm1BRFFkc0FZdExTM3Z2dnZ1WC8vNjE3Lzg1Uy9wVWxXMTdYejAwVWY4U3lEbGdDVUFU UWVzUVV0THk3Rmp4OExoOExGang2aTh5aDYwdExSMGQzZUh3K0dqUjQrcUxaUnRrOS9SaFFz WDJ0dmJGVFU5SEE3djM3Ky90N2MzclVjR0FPa0VOQjJ3QmkwdExlZk9uYVAzZENIN29LV2w1 YXV2dm9wR28yVE9kY1dGc20zeU8vcmdndzk2ZW5vVVh4b1pHZW50N2QyM2IxLzZEZ3NBMGd4 b09tQU5XbHBhUmtaRzNucnJyWkdSRVNxNDRYQTRHbzFTbGVjbG5sOG8yNmJpanRUR3pVZEdS czZjT1FPYURwZ1owSFRBR3JBS1N4OGZQWG8wSEE1M2QzZnIwSFNaY1BPdjhnOWFXbHIyNzkv LzVaZGZwdlBBQUNDdGdLWURBQURZQjlCMEFBQUErd0NhRGdBQVlCOUEwd0VBQU93RGFEb0FB SUI5QUUwSEFBQ3dEK09hM3RuWnVSTUFBQUN3UGdnRUhRQUF3RGI4LzFETSs3NmVBZ3hWQUFB QUFFbEZUa1N1UW1DQyIgLz48YnIgLz4mbmJzcDs8L3A+PHA+SW4gdGhlIG5leHQgcGljdHVy ZSB5b3Ugc2VlIHRoZSBvdXRwdXQgb2YgeGVucG0gdmlzdWFsaXplZC4gU28gdGhpcyBtaWdo dCBiZSBhbiBpbmRpY2F0b3IgdGhhdDwvcD48cD5yZWFseSBzb21ldGhpbmcgaGFwcGVucy4g SXQmIzM5O3Mgb25seSB0aGUgY29yZSB0aGF0IEkgZGVkaWNhdGVkIHRvIHRoYXQgRG9tVS4g SSBoYXZlIGEgdGhyZWUtY29yZTwvcD48cD5BTUQgQ1BVIGJ5IHRoZSB3YXk6PC9wPjxwPiZu YnNwOzwvcD48cD48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJP UncwS0dnb0FBQUFOU1VoRVVnQUFBZkVBQUFFa0NBSUFBQUN3bzUrMkFBQWdBRWxFUVZSNG5P MmRhM1JVVlpyM043a1pBcWFTUUJpQ1VDRmdTSUNBWW1nRVdtM2FHVHM5UFRSZUFycG93T25W MHpockFJMEdkSTJqaTZZQnRVVUgydVlpTFNPR1lCUk1WUzRJZ2tZa2FiVVg0U1pta1lBaEYw RXVxVXV1Kzh1c05SL3EvYkRmUG4wNGw2cGRweTduOXYrdFo1MXpzcyt1dmYvbnFWTlBudXlx UEVXK0FRQUFZQWthR3h1SjNob0FBQUJFZ2NiR3hyMTc5LzcvbUU0QkFBQ1ltYjE3OXlLbUF3 Q0FSVUJNQndBQTY0Q1lEZ0FBMWdFeEhRQUF6RVMxRFBGWnhIUVFWd2doa2dPRGMvVG8wZkhq eHh0VHJSRlVHVUdEUFJrYUdtTFJIREVkeEFPMWwzcFVZbm84NDBoeGNmSEJnd2ZqTmwxWUdD R2VHa0dERFJrWUdEaDkrclRMNWJwKy9YcE5UWTM0RkdJNm9HZlBubDIwYUZGbVptWktTc285 OTl5emYvLysyTTJsTGFickdEaFNVMVA3K3ZwaU5IaE5UYzFQZnZLVDFOVFV6TXpNSjU1NG9x dXJLNnlIR3lHZUdrR0QzV2hyYXp0MDZGQlRVMU43ZTN0TlRjM3AwNmZGWnhIVDdjNzU4K2Yv NFIvK1lkdTJiVmV1WFBINy9TZE9uSGo0NFlkak41M3BZbnBNcDM3d3dRZmRibmRQVDA5WFY5 ZktsU3QvOHBPZmhQVndJOFJUSTJpd0cxOTg4Y1gxNjlmVnppS20yNTNISDMvOEQzLzRnK0lw UXNpbVRadXlzN1BUMHRLV0wxL3U5L3VGZGtrM3hjZXlBNy9mdjJ6WnNyUzB0REZqeG16ZXZG a2Uwd2NHQnNyTHkwZVBIajE4K1BEUzB0S2JOMi9LaHhLUVBKWVFzbTNidHR6YzNKU1VsS2xU cDM3MjJXZTdkKytlUEhseWNuTHl6Smt6VDU0OHlUa0ZwZFRuOC8zcnYvN3I3YmZmZnZ2dHQv LzYxNy8yK1h5S1V3djA5Zld0V2JObTFLaFJEb2ZqbFZkZWlkeGpIby9udHR0dWs3Y0hRWEc2 K2ZQbnYvZmVlMEtmdHJhMnNXUEhpa05BWGw3ZXFWT24yUEh1M2J2WndhbFRwL0x5OHFpNnI5 VGFoV3Y1eTEvK01tN2N1TmRmZnoyc1N3QlJCekhkN293Wk0rYnk1Y3VLcHdnaEpTVWxYVjFk WFYxZEpTVWx6ejc3ck5BdTZhYjRXSFpRVmxiR0J1bnM3SHpvb1lma2NmbmxsMTkrOE1FSEwx MjZkUFBteldYTGx2MzJ0NzhOTXBya1IwTElva1dMTGw2ODZQRjRmdmU3MzQwY09mTFJSeDhW ZnZ6UmozN0VQOFV6enp3ajZQeW5mL3Fuc3JLeUlGZEhLVjIzYnQwLy91TS9YcnAwNmRxMWE2 dFhyNDdjWXdjT0hMai8vdnNWNTFKRGNicmEydHFDZ29MQndVSFc1OGtubjl5NGNhUDRVU3RY cnR5MmJSdWw5TktsU3lOSGptVFJlZXZXclU4OTlSUlY5NVZhTzd1VzZ1cnEwYU5ISHpod0lD ejlRQnY0M0FzSVJsSlNVbjkvditJcFFzaTMzMzdManMrZlAzL0hIWGNJN1pKdWlvOWxCK1BH alJNRytlYWJiK1F4M2VsMG5qdDNqaDEzZG5hT0dUTW15R2lTSHdraFY2NWNZY2NlajBmeVkx SlNFdjhVT1RrNTU4K2ZGM1NPR3pjdXlOVlJTdSs0NHc3NVMwYXp4NzcrK3V2YzNOeHdYNE5x MHhVWEY3Lzc3cnRDbzhmakVUL3E0TUdEcGFXbGxOS05HemVPSGoxNng0NGRsTkxISG52c280 OCtvdXErVW1zbmhQejNmLzkzVGs1T1kyTmpXT0pCaE9CekwwQ1o0SG42d01BQU8rN3Y3eGRD WkZneFBURXhVVHlJUEtZbkpTV0psemlHRFJzV1pEVEpqOEdWaERXRlJLZmF4WXI3eTM4WGF2 UFlKNTk4TW1IQ0JMV1lxTGI0RTJTNkF3Y081T2ZuRHd3TUxGbXk1STAzM3BBOHFxZW5aOEtF Q1pUUzZkT251MXl1ZSsrOWwxSTZZY0lFRnZyVmZLWFdUZ2laT0hIaTJyVnJGY1dER0lIUHZR QlZIbi84OFMxYnRpaWVFcWVCMzM3N3JaQzZKaVVsQ2FuZmxTdFgrUFAwOCtmUHk4UHgrUEhq di92dXUrQWlJNHpwUEZQazVPU0kvNTdJeWNsUkhGTWdaSjdPNmJHS2lvcWNuSnltcHFiZzho UlJtMjVvYUdqNjlPbGxaV1ZPcDdPM3QxZit3UHZ2djMvZnZuM0Z4Y1dVMHVMaTRnTUhEanp3 d0FQc2xKcXYxTm9KSVpjdVhabzBhZExtelpzMVhBTFFBRDczQW9KeC92ejVzV1BIL3VsUGY3 cDY5YXJmNzI5c2JCUSs5MElJK2VkLy91ZnU3dTd1N3U2Zi8vem53aEx6ckZtelhucnBKWS9I ODkxMzN6M3l5Q01oMTlQWklHek5WeDZPZi9lNzM1V1VsTFMwdFBUMzk1ODhlWkl0QzBod09C ekNILzQwL0pqT004V2FOV3VFdGVtSEhucm82YWVmVmh4VDRQbm5uMWRjVHcvTFk2KysrdXFF Q1JQT25EbWpPRVZJMUthamxGWlVWQkJDZHU3Y3FmakFqUnMzamhzM2pxWHdXN1pzdWVPT096 WnQyc1JPcWZsS3JaMWRTM3Q3ZTM1Ky9vWU5HN1JkQ0FnTGZPNEZoT0RNbVRPLy9PVXZIUTVI U2twS2NYR3g4UGwwOGNjcWxpMWJ4ajRLUWluOTZxdXY3cnJycnFTa0pLZlR1VzNidHVBeDNl ZnovZXBYdnhvK2ZIaDJkcmJpNTE0R0J3YzNiTmpnZERxVGs1T25UWnRXVVZFaEgyMzkrdlVq Um95UVA1WXpwdk5NNGZWNlY2eFlNWExreUpFalI2NVlzY0xyOVNxT0tkRFgxN2RxMWFyTXpN eU1qSXpYWG50Tm04ZUlqSjZlSHNYcEZGR2JqbEs2Zi8vK3laTW5xNzFUOHZYWFh5Y2xKWFYz ZDFOS3U3cTZrcEtTL3ZyWHZ3YjNsVnE3Y0MwZEhSMEZCUVV2di93eXYzNFFDeERUZ1NwcTRR eW9ZUnlQL2VJWHY5aTdkNi9lS2tCTXdPZGVnRWFNRTZITWdoRThOamc0dUgzNzlzTENRdUhq ak1CaVNJSTRZanJneFFnUnlsd1l3V09FRUtmVGlVOFdXcGlhbWhxaFhrVmZYeDgrOXdJQUFD YW1zYkh4MUtsVC9mMzkvZjM5cDA2ZGtueG9DakVkQUFETWhNL25PM0hpaE52dGRydmRqWTJO NHZmR0tXSTZBQUNZR3F5bkF3Q0FkVUJNQndBQUUyT2p6eksySERuU2N1U0kzaW9BQUNCK1dE YW05L3Y5VytmTjJ6cHZYdi9maWxZREFJRGxzV3hNLyt6MTF6YzRuUnVjenM5UWxSOEFZRmNz RXRPdlg3cTBPVCtmeGZUTitmblhMMTNTV3hFQUFNUUVyOWZiMk5nb2ZKWlJxRTNFc0VoTXIx eXhnZ1YwWnBVclZ1aXRDQUFBWWtKRFE4TzVjK2Y2K3ZyNit2ck9uajNiME5BZ1BtdVJtTTU0 NFlVWDJFRjdlenRQL3o2K0dxYzhvM0hPeU5NTnF2aTdRUlYvTjJPcW9uekNvamlqTVZXRmhj dmxFb3I1REE0T3Vsd3U4VmxyeHZRdnYveVNwLytOSFR0NHV2R014amtqVHplbzR1OEdWZnpk akttSzhnbUw0b3pHVkJVV3RzalQrL3I2V2x0YmYvT2Izd1FDZ2M3T3p2LzkzLy90N094a3gw RzI3ZWZPaGV6RE9Scm5qSmN1WFlJcXFJSXE4ZmIvdk41NHptZ2NWZDk5OTExcmE2dUdMTjdq OFZoL1BaM3h3Z3N2QkFLQlFDRFEwZEVSNElBMk5mRjA0eG1OYzBhZWJsREYzdzJxK0xzWlUx V0FUMWdVWnpTVXFsaUVRV3ZHZEFBQU1EN2FBcDB0UHZmQ1FKNnVvUTluTjZqaTd3WlZZWFZE bmg0dTVsaFBGNzZQVVdpcHJLd3NMQ3hNVGs2ZU1XUEdvVU9IS0tYZmZmZmQzTGx6VTFKUzVz NmRxL2dWNXNqVEFRQW1RbHUwTk5QblhzUXgvZEZISDIxdWJ2YjVmRHQyN0JnMWFoU2xkUEhp eGVYbDVUNmZyN3k4Zk1tU0pmS0hJMC9YMEllekcxVHhkNE9xc0xvaFR3OFhjK1RwRE1Xdi9t cHRiWFU2blpUU1VhTkdkWFoyVWtvN096dFpsSmVBUEIwQVlDSzB4VWt6ZmU1Rkh0TTdPanBt elpwMThPQkJTbWxDUWdMN2kyTmdZQ0F4TVZIY2JlREtsUnR2dmJWdTVVcDY0a1FnRU9nOGVE QVFDTERqSUZ2YTFCU3lEK2RvbkROMmRIUkFGVlJCbFhqcmUvdnRlTTVvSEZYLzUvZmZlT3V0 M3VibTZFWlJROGYweHNaR3A5TzVaODhlOW1OV1ZoYnlkQUNBWmRBV0o4MVVQMTBjMDdkdjM1 NmRuVjFYVnllMGxKYVdDdXZwcGFXbDhvZGpQVjFESDg1dVVNWGZEYXJDNm9iMTlIQ1JCSEVK Um9ucDVGYmtMVDA5UFJjdlhwd3paMDV5Y3ZLOTk5NTdTYW55SXZKMEFJQ0owQll0elJIVG93 THlkQTE5T0x0QkZYODNxQXFyRy9MMGNMRmpUQWNBQU9NVGl6Qm96WmlPUEoyL0QyYzNxT0x2 QmxWaGRVT2VIbDBzRXRNbGRSbXh4UlpiYkEyKzFWYVg4ZkRodzgzTnpaMmRuUU1EQTRvZExC TFRHY2pUTmZUaDdBWlYvTjJnS3F4dXlOUEQ0c2FOR3kwdExjZVBINitwcVRsKy9IaExTOHVO R3pmRUhhd1owd0VBd1BoRUV1NzYrL3M3T3p1Ym01c1BIejRzYnJkbVRFZWV6dCtIc3h0VThY ZURxckM2SVUrUExrYUo2Zks2alBJVzFHVUVBRmlKV01SU284UjBocnplaTdnRmRSbkRIUXFx K0llQ0t2NmhrS2VITlpSTjgzUkc4SmlPdW93QUFDc1JsYkJwbW5vdjhoYlVaWVFxcUxLWXFn RHFNa1pjbDlIRU1SMTFHUUVBVmtKYm5EUnJYVVo1QytveWhqc1VWUEVQQlZYOFEyRTlQYXlo WXIyZWJ0Q1lIckl1STZVVWRSa0JBRllpS3NIVG9ERTlLaUJQMTlDSHN4dFU4WGVEcXJDNklV K1BMdGFNNlFBQVlIeTBCVHF2MTJ1YTd5T05FT1RwR3Zwd2RvTXEvbTVRRlZZMzVPbmgwdERR Y083Y3ViNit2cjYrdnJObnp6WTBOSWpQV2lTbW95NGp0dGhpYTY2dHRycU1sRktYeThVKzFV MHBIUndjZExsYzRyTVdpZWtNNU9rYStuQjJneXIrYmxBVlZqZms2ZUZpaXp5ZGdmVjBBSUNK MEJib1BCNFAxdE5WSEdySXpBV3ErTHRCRlg4M1k2b0tJRStQTmthSjZUeFZHRkdYRVFCZ0pi UkZTN1ArSDZtOENpUHFNb1k3RkZUeER3VlYvRU1oVHc5cnFLam42U3lJQzZIY05ERmRYb1VS ZFJrQkFGWkNXNXgwdTkwM2I5NTB1VnczYnR5NGNlTkdiVzJ0K0t4eFk3cThDaU5QWGNaSFRv d25BYkxtNEZ3U0lPdzR5SFpSMC9pUWZUaEg0NXl4cUtNSXFxQUtxc1RialcvUGpPZU14bEds dVM3anFWT25hbXBxMnRyYURoOCs3SGE3TDF5NElENXIzSmd1cjhMSVU1ZVJCQWdNQm9NWjN6 VG42Y0V4Ymt5WFYySGtxY3ZJbkZYVVVjVGowMFZONDNtNjhZekdPU05QTjZpQ0t2dW80aFFX eFJtTm8wcHpURGZIZTZROFZSaDU2akx5dUJnR2c4RjBOMXZrNlJHQ1BCMnFvTXBjcWppRklV L254NW94SFFhRHdReHVpT21oUVo0T1ZWQmxMbFdjd3BDbjgyT1JtQzdVWlNRQk1yMXpPcmJZ WW91dHdiZWE2ekxhcTM0NmlmYXZZczdSTEo5UFFSVlV4VUlWcHpEazZXTHNWWmVSeDhVd0dB eW11Mm1PNmZhcW44NmNoVHdkcXFES0ZLbzRoU0ZQRnhPRlBIMzM3dDJabVptWm1abnZ2UE9P TmhFYWNMbGNreVpOU2tsSmVlQ0JCOWkvai9MVVplUnhNUXdHZytsdW1tTzZ4dnJwZnI5Zk9N N0l5R2hxYW1wcWFzck16TlFtUWdQWjJka3VsOHZ2OTd0Y3JxVkxsMUsrdW96TVdjalRvUXFx VEtHS1V4anlkSDVVWS9xRUNSTjI3ZG8xTURCQWRZcnBvMGFOY3JsY3ZiMjlMcGRyOU9qUmxL OHVJNCtMWVRBWVRIZUxkMjJBaG9hRytmUG41K2ZuNzl1M2IrZk9uUmtaR1JrWkdidDM3OVlt UWdOVlZWVVRKa3dZUG56NHFsV3JrcEtTS09veVFoVlVXVTRWUVYzRzhPc3lSbFEvM2UxMjMz MzMzVE5uenBTOHRScFBYQzZYMCtta3FNc0lnOEVzWkpIazZWUkRUQmZlRi8zem4vKzhiOSsr L1B6OHVYUG5IanQyVEpzSWJRd05EWjArZmJxd3NQRDN2Lzg5UlYxR3FJSXF5Nm5pRkliMWRE RWFZM3BtWm1aalk2T3doajR3TUxCejU4NEpFeVpvRTZFQlZxQng3Tml4Ly9WZi84V1dYRkNY RVFhRFdjYWk5UjRwYjB4WGZGOVUvR0VZQTRJOEhhcWd5bHlxT0lVaFR3OENiMHpmdFd0WC9O OFhqUkRrNlRBWXpDeG04ZS9FaUFySTA2RUtxc3lsaWxNWTh2UWdXRE9tb3k2ajNiYWQwL1hY Z0MyMmtXdzExMldVWU0yWXprQ2ViaDlWQVdKRVZjYjBsWkZWY1FwRG5zNlBOV002ektURzlw dzlkVmNMZzBWaVdFOFBEZkowczZ0aWU1NmhBc2pUTGFHS1V4anlkSDVDeFBTR2hvYjgvUHho dzRaUlNwOTQ0b21LaW9wWWlGQ2txcW9xTHk4dk1URng0c1NKVlZWVkZIVVpiV0JzejlsVGQ3 VXdXQ1NtVDU1KzU1MTMxdGJXRWtJb3BSY3ZYc3pOemRVbVFnUHA2ZWx1dDV2VlpYUTRIQlIx R1cyZ2l1MTVoZ29nVDdlRUtrNWh5Tk1sOVBiMkhqdDJyS2FtcHJ1N1czSXFSRXhQVGs3Misv MHNwbCs5ZWpVdExVMnppSEFwS2lweXU5MnNMdVBNbVRNcDZqTGF3TmllczZmdWFtR3dTRXh6 VEdjQi9keTVjei84OEVOZFhkMzE2OWZGWjBQRTlBVUxGdXpldlpzUTB0N2Uvc1FUVHl4YXRF aWJDQTJjT0hFaVBUMmRFSktlbm43aXhBbUt1b3cyVUJVZ2hJN25VaFVnZHZlVk5WUVIxR1VN dnk3ajBhTkhoWEI5K2ZMbFE0Y09pYytHaU9udDdlMExGeTVNUzB0TFMwdGJ0R2pSOTk5L0gr NzBtcGs4ZWJLdzluTG5uWGRTMUdXMGdiRTlaMC9kMWNKZ2taam1QRjBTcXk5Y3VDRCswYmlm ZThuSXlCRFdYbGpOR2RSbHRMd3F0dWNaS29EMWRFdW80aFNHOVhReEViMUh5bGJTMVg2TUta V1ZsVTZuTXpFeE1UYzM5LzMzMzZlb3kyZ0RZM3ZPbnJxcmhjRWlzWGpYMm1XSWcvaUZDeGZp K1I2cEJwQ25tMTBWMi9NTUZVQ2ViZ2xWbk1LUXA0dlJHTk9KakxTMHRMVnIxMm9URVIrUXA1 dmQySjZ6cCs1cVliQklUUDg4M2ZnZ1R6ZTdLcmJuR1NxQVBOMFNxamlGSVUvbng3anZrWVlG NmpKYVk5czVmWHFBOFBiVVhTMjIyRWF5MVZ5WE1hTDNTQThlUEppYm16dHMyREJoQlVaNzNJ MDl5TlBOcm9ydGVZWUtJRSszaENwT1ljalQ1UXdORFVrV1lSZ2hZbnBPVHM3Um8wY0pJVGR2 M2x5OWV2WExMNzhjaVloWWcvVjBzeHZiYy9iVVhTME1Gb2xGRXRNSEJnWk9uejd0Y3JtdVg3 OWVVMU1qUGhWNlBYMXdjREFoSWFHdnI4L2o4V1JrWkdnV0VRZVFwNXRkRmR2ekRCVkFubTRK Vlp6Q2tLZUxhV3RyTzNUb1VGTlRVM3Q3ZTAxTnplblRwOFZudWQ0am5UeDVzc3ZsT25yMGFE eGp1dmdqTjFsWldSUjFHVzFnYksvWUhySUZCak9YYVk3cFgzenhoYVRHaXhpdTkwZ1BIRGlR bloyZG5wNitjK2RPYlNJaTRmang0ODgvL3p4RlhVWWJxR0o3ZWJlQVNreTNzNitzb1lwVEdQ SjBma3p3dVplU2twTExseTlUMUdXMGdiRzlZanU1TmJJcmRvUEJUR1Q2eEhRZGF3TXdHaG9h bGk1ZHlvNVJsOUh5cWdJcWRSa0Q1TzliY1U4Nys4b2FxZ2pxTW9aZmx6RTRScThOc0dEQmdx Kysrb29kb3k2ajVZM3RGZHNsWjlWNndtQm1zWGpuNlVhb0RYRHMyTEg3N3J0UCtCRjFHUzJ2 aXUzbDNjUzl4QzEyOXBVMVZIRUt3M282UDRhdURYRC8vZmQvK09HSHdvK295Mmg1WTN1MWR2 Rlp0WjR3bUZuTXZ1K1I4b004M2V5cTJGN2VUZHhMM0dKblgxbERGYWN3NU9uOHFNYjBqejc2 cUtTa2hCMnZXclVxTFMxdDBxUkpmLzNyWDJNaElsb2dUemU3c2IxYXUzQldmQXlEbWRUaUhk UG56WnQzOU9oUlNxbkw1Wm8yYmRxVksxYzJiZHIwMDUvK05CWWlvZ1h5ZExPclludWhXK0RX ckZ3NEt4emIyVmZXVU1VcERIazZQNm94L2JiYmJ2UDcvWlRTMWF0WC8vNzN2NmVVWHIxNmRl VElrYkVRRVRtb3kyaU5yYVF1bzNETTJ1VmJJMmpHRmx0dFc4MTFHWU9qR3ROSGpoeDU1Y29W U21sSlNRbDdvOUxuODkxMjIyM1JuVDY2SUU4M3V5cTJGN29GbFBKMHNkblpWOVpReFNrTWVU by9xakg5b1ljZTJyUnAwOFdMRnpNek03dTd1eW1sbjN6eXlZOS8vT05ZaUlnV1dFODN1N0c5 K0VkeHU5eDBGd3lEYWJaNHgvVFRwMC9uNStlbnBhVnQzcnladFpTVWxMaGNybGlJaUJiSTA4 MnVpdTJGYmdIazZWWlh4U2tNZVRvL3h2MHM0K0RnNElzdnZwaVRrOE8ra1lPaUxxTU5qTzNW anVXbXUyQVlUTFBwR2ROMStjK2o5ZXZYVDVreXBibTVlV2hvaUxXZ0xxUGxWYkU5MjNVVUlV KzN2aXBPWWNqVCtURnVUSGM2blpLbEh0Umx0THl4dmRxeDNIUVhESU5wTnR2RjlNVEV4Tldy Vnc4ZlB0enBkQjQ0Y0lDaUxxTU5WQVZFZFJrN2lvcUVZOVl1MzlyWlY5WlFSVkNYTWM1MUdY VmsxS2hSTHBmTDcvZTdYSzdSbzBkVDFHVzBnYkc5MnJIY2RCY01nMmsyMjcxSHVtVEpFcGZM MWR2YjYzSzVzck96S2VveTJrQVYyN01kMXRQdG9JcFRHTmJUK1ZHTjZXKy8vZmJ5NWN2Rkxj dVdMZHU5ZTNjc1JDalMzdDUrMzMzM0pTY241K1hsc1lWMTFHVzB2TEc5MnJIY2RCY01nMm0y ZU1mMHZMeThscFlXY1V0TFM4dWtTWk5pSVNKYUlFODN1eXEyWnp2azZYWlF4U2tNZVRvL3Fq RTlPVG01cjY5UDNOTGIyNXVTa2hJTEVkRUNlYnJaamUzVmp1V211MkFZVExQRk82WVhGQlEw TkRTSVd6Nzk5Tk9wVTZmR1FrUzBRSjV1ZGxWc3p3NlFwOXRCRmFjdzVPbjhxTWIwZDk1NVor TEVpWFYxZFY2djErdjExdGJXNXVibXZ2dnV1N0VRRVRtb3kyaU5yVkJ0TVVBVWpsR1hFVnNy YmVOZGw1RlN1bi8vL3VMaTR0VFUxTlRVMU5teloxZFZWVVYzN3FpRFBOM3NxdGllM0pxbkJ4 bk16cjZ5aGlwT1ljalQrVEh1WnhrMWdQVjBzeHZiRTFFY0owRmp1dTZDWVRETmhwZ2VHdVRw WmxmRjlnUjV1bTFVY1FwRG5zNlBjV002RWNGYVVKZlI4c2IyQkhrNnpBWm14NWd1YVVGZFJz dXJZbnVDUE4wMnFqaUZJVS9ueDlBeC9mYmJiMDlMU3lzcEtXbHRiYVdveTJnRFkzdUNQSjNQ VjdwcmdFVml0b3Zwaks2dXJyS3lzamx6NWxEVVpiU0Jxc0RmNmpMUzhYK3Z5NmhZa1RGZys3 cU1BV0pFVmVINmlxQXVZOXpxTXBKYmNUZ2NpeGN2L3Y3Nzc2TTdQUTllcnpjNU9abWlMcU1O ak8wSjhuUStYK211QVJhSjZaeW5kM1YxclZ5NThwZS8vR1VzUkFUaDJyVnJMN3p3UW5GeE1V VmRSaHVvWW51QzlYUStYeGxRbFladVdFK1BMbUdzdmR5NGNTTXRMUzBXSWhSaGZ4K2twcVl1 V0xEZy9QbnpGSFVaYldCc1Q1Q244L2xLZHcyd1NNeDJNVjBEeU5QTnJvcnRDZkowUGw4WlVK V0dicEZreEFFUzlvekkwLzgvM2QzZEsxZXVYTGh3WVN4RVJBdms2V1kzdGlmSTAvbDhwYnNH M2MzVVRvaDNUSmU4UjVxZW52N1lZNDkxZDNmSFFrUzBRSjV1ZGxWc1Q1Q25oK01yUTZuUzBB MTVlblF4K21jWk9VRmRSbXRzVVpkUmc2OTBWNkxqMXRRZTBLRXVvK2xBbm01MlZXeFBrS2VI NHl0RHFkTFFEWGw2ZEZHTjZaOS8vbmxoWVdGU1VsSmhZZUVYWDN3Umk3bWpEdGJUelc1c1Q3 Q2VIbzZ2N0d5bTlrQzhZL3EwYWRPMmJObmk4WGkyYk5sU1ZGUVVpN21qRHZKMHM2dGllNEk4 UFJ4ZkdVcVZobTdJMDZPTGFreFBURXpzN2UybGxQcjlmc2svNHNlVEYxOThFWFVaN1dOc1Q1 Q25oK01yTzV1cFBhREQ1MTRVaitOSlUxUFQyTEZqaGRsUmw5SHlxdGllSUUvbjloVnprWEZV YWVpR1BEMjY4SDZXVVZMS1BBNzRmTDdwMDZjZk9YSkVtQlIxR1MxdmJFK1FwM1A3Q2s3UVhZ TjI4WGI3TE9PcVZhdGVlKzAxS3ZvckFYVVpMYThxZ0xxTVlmb3FRSXlsS2x4ZmtjZ3FJTEk3 Skt3WjQ2Q0tjOFo0MTJYVW5XSERoa24rUGtCZFJzc2IyeFBrNmR5K2doTjAxNkJkZkp6ejlM ZmZmbnY1OHVYaWxtWExsdTNldlRzV0lvSWo1T21veTJoNVZXeFBzSjdPN2FzQTF0T2pLbDV3 S2ZzTElLWitpSGRNejh2TGEybHBFYmUwdExSTW1qUXBGaUtDSThSMDFHVzB2TEU5UVo3TzdT czRJVVplallOajR4M1RrNU9UKy9yNnhDMjl2YjBwS1NteEVCRXRrS2ViWFJYYkUrVHAzTDRL SUUrUHFuamgwSUo1ZWtGQlFVTkRnN2psMDA4L25UcDFhaXhFUkF0NW5oNndkeFpqT21ON2dq eWQyMWR3UW95OEdnZkh4anVtdi9QT094TW5UcXlycS9ONnZWNnZ0N2EyTmpjMzk5MTMzNDJG aUdnaHhQU09vaUtlcDl5WW1ZdWRWYkU5UVo3Tzdhc0E4dlNvaWhjT0xaaW5VMHIzNzk5ZlhG eWNtcHFhbXBvNmUvYnNxcXFxV0NpSUNwSzZqSUcvVld2cm5LNS85VFZzK2Jlb3l4aXVyMngr aDBmRkEySlB4dlB1UWwzRzBJanpkT0hYSVlrc1FTQVd6ZklNcFVwNG1vU25MSUE4UFZRZjRk QlFxalIwaXpCUEQ0VDVmVStLdDU4d2puQnN6VHpkZEFneFhldzZIcWZEOUxXQVVreVhIOHRO ZCtYNk9nMU9pSW9IeEo0VW40bTVlTVQwa0NCUE42bXFBUEwwOFBzSWg0WlNwYUdid2ZQMEFK RjJqcFlmYkJmVEt5b3E4dlB6azVPVFo4eVljZWpRSVJwT1hVYXg2M2ljRHRQUjJGNXlMSndu eU5PRCtnMU9pTndEWWsrS3p3aG5KWjJqSnQ1dU1YM3AwcVd0cmExZXIzZmZ2bjFaV1ZrMG5M cU15Tk5OcEVyOE5BbkhBVFBrNlFHVnV5dUtxb1JQY01sTk9BdzVGT3RqelB1S1U1alI4blFl dDRjV2I3ZVl6dkQ3L2UrLy96NzdVZzcrdW94aTEvRTRIYWFqc2Iza1dEaFBESnlueDBGRGtQ SDVuUkIxa2JwN1h1S0VxQXdTQ0NkUGo0b0g3QmpUV2ZXdWpJd005dVY1L0hVWk8rZk9EWWlx MWhGVFZhcXptNm9BK1h0MXZZQ3A2aktLbGNmSVY1MXpJNjNMS1BTSmo2cHc3eXNTY1YxRzhX dWNaMFpKSC9FZEpmYXFiK1pNd2MrUy9zSVdkUm0xd05aZVdKMFovcnFNOGwrMk1NTWEyMHVP aGZQRURIbDY3TVFFR1ZiaUloNlIwYjN3U0FhTWlwaklaUkJackpEOEtKRXFQeHZSMUhiTDAx ZXRXdFhkM2UzMWV2ZnYzejltekJnYVRsMUdyS2ViU0pYNGFSS09BNFpmVHhmYWlDeTR4SG85 WFQ0cHo3STd6d2V1K1ZXSnI1Y28vVlpqejJBUTVVS2o0SzZBK3E5MjRXYVFkeE1QSlg1MlF2 YVJkSkRNcUxpZUx1bU05ZlR3MkxWclYwNU9Ua3BLeWozMzNQUEpKNS9RY09veVNyekg0M2VZ WHNiMmttUGhQQWthMDNXWExWY2JveWtVMjBPNklrYnVrZzhvSDErdFJjMUNkcEJmU0ZTZHJh QkJtRVh4RXFMZ1JydkZkQTBvNXVsQnZHK2ZqRGo0TFlnOFhkSkhhRmJzRmxEL3JST3VyeFNu RUh0RDRnU0pQTUhVOG5UeFQyeVpXTzI2Skg0SXlNS3grRmd0VDVlSVpLcUN5SllMVXpQSkt6 cVNia0g2aUVVaVR6Y0V5TlBWek1oT1lIdkpNZWVqWTZkSFBFWGcxcWdhVXBKY0lYK2Y0Qk54 ZWthaW1jZDdJYWNJTWxySUMrUlhycThSbGVkRjdxVkFOTzQ5eFBUUUlFOVg2eFA4RmpSeW5o N2NvcTRxNUdBOHFuZ1NUODZob3BpZkdsTVZwekRrNmZ4WUpLYkw2ektpZXArazhwenVHb0pY eFpNY0I5UnJNY2IwbWVXY0YxdExib2xTWFVhaFhmRXM2akxHRnVUcGFuMkNPRUZIVllLMkFQ TDBDUHFZV2hXbk1OM3o5SURTeWd6eTlKaUQ5WFExTTdJVDJGNXl6UG5vR0ltQjJkT0krbnE2 MnRsSURERTlOTWpUMWZvRXZ3V1JweFBrNlRxcDRoU0dQSjBmNDhiMHlzckt3c0xDeU9zeUJn eWNva3FmNDVoSk5iSVQyRjV5elBub0dJbUIyZE5JMER4ZDNqbENzMTFNZi9UUlI1dWJtMzAr MzQ0ZE8xZ2xBTTY2akFIWnIySTFueG90VDJkU2thY1Q1T25oOURHMUtrNWhSc2pUNVoyUnAy dWt0YlhWNlhSUzdycU1pdDQzaGNWT3FwR2R3UGFTWTg1SHgwZ01EQlpBbmg0ak9qbzZaczJh ZGZEZ1FjcGRsekZBYnFuTEdLUTZvOUVxSUFhaVhUK1A5UWxabjlMSWRSa0RzbHFNNG0yTWZC Vmt5Nk9LV2ZBK2luZXB0ajZtVmhVZ3hEZHpaanhuNUZjbGZsWEsrMFQrcXJkalhjYkd4a2Fu MDdsbnp4NzJJMmRkUnNWZmlwSC9VbzJEeFVpbndUMGdsaWNjY3o0NlJtSmdzQUR5OUtpemZm djI3T3pzdXJvNm9ZV3pMbU5BYWNsTTBhYzJXVThQZVF0aVBaMWdQVjBuVlp6QzRyT2VMbEhG amdKWVQ0OFc1Rlo2ZW5vNDZ6SXFPcGJIOVhwWmdFZ1BvajYra1QwZ2xpY2NjejQ2Um1KZ3NB RHlkQ05nMGp4ZGZOUEVRbFhJV3hCNU92bGJDZktRZzVrM0l6YW1LazVoeU5QNXNXWk1WM3dD REd1QlcyTjZMTVkzc2hQRTJvUmp6a2RIVndiL3ZEQTdHTnNGa0tmckNQSjB4VDRoNzBKNzV1 bVNTUzJmRVJ0VEZhY3c1T244V0NTbWkrc3lxbFZjTTBJTlFyVmFnRUpGd0JpTmIrVDZsTHJV WmVRY0gxczdiOFd2eWlqZWU4SVdkUmxEZ3p4ZHNVOXdKM0FPWmJFOFhkN0w4aG14TVZWeEN0 TXJUdy9TZ1NCUGp5cTRXS2dBQUJWRVNVUkJWQVBCMTlQRng0YXlBTmJUNDc2ZXJ2ZEZ3MHhn SkZSTWo5QVEwME1UUEUrWFBCa0JYYjkxL3BhbkZuazY4dlFJK3BoYUZhY3c1T244R0RlbUM1 OU1GMW80NnpMeVBHSEVTQ1ZRQXNqVHRlYnBtaTlLNzR1R21jQ0lwanc5eUNscFQ3dkZkSVk0 cG11dXk2aG15TlA1aDRwZHRVaXhObkZIenR4VG15cDVMOHRueE1aVXhTbk1SSGw2UVBaQ1E1 NStDK0tZcnJrdVk1Qm54UWdXaUZlZWJxaXJWcnh3RGNORXhTY3dtQVpUYkZWclYraUptQjVK WFVhMVNuVkdxTXNvVkNJTXhMSXVvM2hya0xxTUFWSEZPNkVsM0ZxRDJsVFpzQUtpTVZVRkRG eVhNV1FmeGJ0ZC92cnFLRUpkUmhIaW1CNUpYVVkxQzZzM1ovK0FiSFU0K0RpQitPYnBNWm9s UW1GcVVrTmFFTWZ5T3dRRzAyRHlKbmw3a1A3STA3bnFNakozaGJ1UXAvamNDTnVpRHRWdlRS SU8rYXY2aWJzcFBrUll1UlpyRUxld0E1NjF2T0JmNlNMcHB1WUJ3VmRxZDYyNG5mbEswazE4 SVlJVFNLaVl6cjlHTEg4NkpLNFRxMUo3bWl5L2NtMU1WWnpDZEZsUEQ5bEhIQm5ZTHVTTTRo TzJpK25rVmlpbFBIVVplWjZ0V0pqYTB4bTcwWWdzVnZMY1hzYThYa2lGMmRIc0Z0TTFvRGxQ RDI3SXA2QUtxbUtraWxPWU1mUDBTRlVocG9kRXh6d2RCb1BCd2pQRTlKQWdUNGNxcURLWEtr NWh5TlA1c1VoTUYrb3lCdlN1NVlZdHR0aGl5N05GWGNiUUlFK0hLcWd5bHlwT1ljalQrYkZt VElmQllEQ2pHMko2U0pDblF4VlVtVXNWcHpEazZmeVlLYWJ6MUdYa2NURU1Cb1BwYjMrTDZa VlBQbm50NHNWb3hVa3p4WFNldW96TVdjalRvUXFxVEtHS1U1aTE4L1FOVHVmbUtWTStlLzMx ZnA4djhqaHBwcGpPVTVlUng4VXdHQXltdjRsaU9yTnRQLzd4dDRjUFJ4Z256UlRURmVzeW5q MTdkdTNhdGVWcjFqeXpjT0ZQNTg5L2R0bXl0V3ZYL3ZiaGg5ZXVYY3VPZzJ6TEhuc3NaQi9P MFRobi9QV3ZmdzFWVUFWVjR1M1RQL3RaUEdjMGppb1d0Wjc3elcvK0h0UG56Ly8yNDQ4ampK Tm1pdWs4ZFJuWndZVUxGM2dHOUgzNktVODNudEU0WitUcEJsWDgzYUNLdjVzeFZWRStZVkdj MFlDcTJOckxwMy80ZyszV1huanFNcktEM3Q1ZW5nRnY3TmpCMDQxbk5NNFplYnBCRlg4M3FP THZaa3hWbEU5WUZHYzBvS3JLRlN1dXRiWHhETVdEbVdJNlQxM0dzQVljNk82T2tyUm9BbFg4 UUJVL3hsUkZqU3JNbUtwNE1GTk1EMGx6dEw4eEJBQUF6SVdsWWpvQUFOZ2N4SFR0VkZaV0Zo WVdKaWNuejVneDQ5Q2hRMVQwUFI2R1VpVnZNWUtxaW9xSy9QeDhvNmxpdlBqaWl6bytpVUh1 SzBPcEdod2NmUEhGRjNOeWNvWU5HMllvWVdKM1pXVmxHVVJWVlZWVlhsNWVZbUxpeElrVHE2 cXFZamMxWXJwMkhuMzAwZWJtWnAvUHQyUEhEdkhuY1BTTjZYSlZhanIxVmJWMDZkTFcxbGF2 MTd0djN6NjlYbmlLbm1scWFobzdkcXlPVDZKY2xiNTNGRU91YXYzNjlWT21UR2x1Ymg0YUdq S1VNSUhqeDQ4Ly8venpCbEdWbnA3dWRydjlmci9MNVhJNEhMR2JHakU5Q3JTMnRqcWRUdUZI STd3Q3FVeVZZa3Y4a1dqdysvM3Z2LzkrVVZHUmpwS29TSlhQNTVzK2ZmcVJJMGVNOENRS3Fn Z2h0OTkrZTFwYVdrbEpTV3RycTBGVU9aMU9sOHVscnhneDh0dTdwS1RrOHVYTGV1bGhDS3FL aW9yY2JuZHZiNi9MNVpvNWMyYnNaa1JNajVTT2pvNVpzMllkUEhoUWFERkNPSkNya3Jmb3Jv cjlkWnlSa2ZIRkYxOFlSTldxVmF0ZWUrMDFhb0FuVWY1OGRYVjFsWldWelprenh5Q3FFaE1U VjY5ZVBYejRjS2ZUZWVEQUFSMVZVU1YzTlRRMExGMjZWRWRKOUZaVkowNmNTRTlQSjRTa3A2 ZWZPSEVpZHBNaXBrZEVZMk9qMCtuY3MyZVB1RkgzY0NCWHBhaFRkMVdVVXJiMk1tblNKSU9v WWt2RHVpOWVxejFmWHE4M09UbFpGMGxVcG1yVXFGRXVsNHN0Sm93ZVBWb3ZWWEpoakFVTEZu ejExVmQ2U2FJeVZaTW5UeGJXWHU2ODg4N1l6WXVZcnAzdDI3ZG5aMmZYMWRWSjJ2V042WEpW YWpyMVZiVnExYXJ1N202djE3dC8vLzR4WThZWVJKV0FqaytpbXFwcjE2Njk4TUlMeGNYRmVv aFNVTFZreVJLWHk4VVdFN0t6czNWUnBTaU1VbnJzMkxINzdydFBMMGxVU1ZWR1JvYXc5cEta bVJtN3FSSFR0VU51cGFlblI5SmlURlU5UFQxR1VMVnIxNjZjbkp5VWxKUjc3cm5uazA4K2li OGtSVlhpVTdwSVVsVEZEbEpUVXhjc1dIRCsvSG1EcUdwdmI3L3Z2dnVTazVQejh2SjBYRmhY ZkJMdnYvLytEei84VUM5Smlxb3FLeXVkVG1kaVltSnVidTc3Nzc4ZnU2a1Iwd0VBd0RvZ3Bn TUFnSFZBVEFjQUFPdUFtQTRBQU5ZQk1SMEFBS3dEWWpvQUFGZ0h4SFFBQUxBT2lPbkFPdWo0 b1hJQURBSmlldnpvN2UxZHMyYk42TkdqUjQ0Y3VYSGpScjNsbUJoQ3lLdXZ2a29wZmVXVlZ4 REhJNkc1dVprUWdpK1RpUkJEM1pDSTZmSGp1ZWVlVzdodzRlWExsNjlkdS9iMDAwL3JMY2ZF RUVJS0NncUdob2FtVEptaSswdkkxR3pldkRraElXSHo1czE2Q3pFM2hyb2hFZFBqeDdoeDR5 VGZJQzUrK29WalFzaHp6ejJYbHBZbUZPVFUvUzR4R29TUWVmUG1yVisvZnY3OCtXSy9TZnk1 WmN1V3pNek1qSXlNSFgvN3ZtQjRVc0tDQlF1ZWZQTEpCUXNXc0I5bnpwekp2c0NodnI3K3Jy dnVvcFEyTlRVVkZCU2twcWFXbDVlTFhhMlhZR01pdnlIWjNaaVVsQ1I4SjhiS2xTdC85YXRm VVVxWExsMzYxRk5QQ1ErTXVoakU5UGlSbUpnNE1EQWdibEdMNmErKytxckg0L20zZi91M3VP b3pENFNRdlh2M0ppUWt2UGZlZTRvK1pNZGJ0MjcxZXIwMU5UVjZmUk9Jd2ZGNFBDTkdqTGg4 K2ZLSUVTTThIZytsOUkwMzNsaXlaQW1sZFBIaXhXKysrU2FsdEtpbzZJOS8vS1BINDlteFl3 ZEN1UnBxTitUQXdFQkRROFBZc1dNcHBmMzkvUTgrK09DLy8vdS9QL2pnZy8zOS9iRVRnNWdl UDRMazZmMzkvZUtZM3RmWEYyOXhwaUpJSEJjZkM2OGNCQ05GcXF1cmhTSlQxZFhWbE5LclY2 ODZISTRMRnk0NEhJNGZmdmlCVXBxVWxPVDFlaW1sWHE4WGJsUkRmaE51M2JyVjZYUW1KQ1FR UW9ZTkc4Wk9OVFUxRVVLYW1wcGlLZ1l4UFg2VWxaVXRYTGl3bzZQait2WHJaV1ZsbE5KUm8w YlYxZFg1Zkw1dDI3YmhEMXQrT0dPNjRqRVFlT3FwcDloNzlSczNiaFJXQTBwTFMrKysrKzdG aXhlekg2ZFBuLzZuUC8zSjYvVysvZmJiY0tNYThwc3ROVFcxcHFiRzYvVzZYQzdXNHZWNlo4 eVlVVkpTTW1QR0RKL1BGenN4aU9ueHcrLzMvOGQvL01lb1VhT0V6NzFzMzc3ZDRYQmtabWEr K2VhYlFXSTZYa3NTNUM4aFNXbFR4VDRVbnJ5VnZMeThreWRQVWtwUG5qeVpsNWZIR3V2cjZ3 a2g5ZlgxN01mR3hzYjgvUHpVMU5Sbm4zMDJJU0dCTmNLTkV1UTMyMHN2dmVSd09Cd094NlpO bTFqTDh1WExuM2ppQ1VycDQ0OC92bUxGQ3ZrRG93VmlPZ0FnQklPRGd4OSsrT0dVS1ZQMEZn SkNnNWdPQUFnR1d4SE95OHZUNjZ0TFFGZ2dwZ01BZ0hWQVRBY0FBT3VBbUE0QUFOWWh2SmhP VkpEM2xOYzJhV3RybXpOblRrcEt5cHc1Y3k1ZXZCajlTekVoVlZWVmVYbDVpWW1KZVhsNUgz endnV0lmdjkrL2V2WHE3T3hzd2RYeUZzRGpFL0VkbTVXVkpXNkpyMWlqc0dmUG5rbVRKaVVu Sjk5MTExMUhqaHloZkM5U3VhdXJxcXFjVG1keWN2S1BmdlNqbHBhV3VGNkRNWkI3Z01jbk1Y cHBoeDNUQXpKVG5GdGUyK1NSUng0cEx5LzMrWHpsNWVXbHBhWGE1Rm9NaDhOUlcxdnI5L3Zk YnJmRDRWRHNVMVpXTm5QbXpETm56Z3dORGFtMWdMQjg4dFJUVDYxYnQwNzQwYll4L1pGSEhq bDU4cVRQNTl1elp3LzdWMXVlRjZuYzFWbFpXWWNPSGVydDdYVzVYUC95TC84U0wva0dRdTRC SHAvRTZLVWRxNWd1LzUvSnJLeXN6czVPU21sblp5ZitWNXN4WThhTSt2cjYzdDdldXJvNlZs NURUazVPenRHalI0TzNBSDZmWEx0MkxTTWpvNzI5WFdpeGJVd1h1SFRwVW5KeWNsOWZIOCtM Vk83cXJLeXNqei8rbU1XdnpNek1PQWcyR25JUDhQZ2tSaS90V01WMGVXMlRoSVNFd2NIQmVm UG1EUXdNSkNZbVJxamJHalEyTm1aa1pCQkNNakl5MVA1ak9ERXhzYnk4UEMwdGJmejQ4ZnYz NzFkc0FmdysyYlJwRS92WER3R2J4L1R2di8rK3VMaVkvVEhOOHlLVnU3cWlvdUtPTys0WVBu ejRzODgrYTgrWHR0d0RQRDZKMFVzN3JubDZWMWNYUlo0dUlqOC8zKzEyKy8xK2w4dFZVRkNn MkNjakk4UGxjdlgyOWg0NmRJaXRBc3RiQUtkUCt2djd4NDhmTC9uMWFlZVkvdVdYWDA2Y09M Rzh2SHh3Y0pEeXZVaUR1UHJJa1NQanhvMkx2V3JqSXZkQUVKL0U2S1VkcTVndXIyM3k4TU1Q cjF1M3p1LzNyMXUzN3JISEh0TW0xMktrcDZlNzNlN2UzdDdhMmxxMTlmUmYvT0lYd3RQTVht YnlGc0RwazRxS2lybHo1MG9hYlJ2VGQrM2FWVnhjL1Bubm53c3RQQzlTUlZjUERRMmRQWHUy cUtpSXZkaHRpTndESVgwU281ZDJyR0s2dkxaSmEydnI3Tm16MlJ2QmJXMXQydVJhaklxS0Ns YThMVGMzdDdLeWtqVksvTm5TMGpKNzl1eWtwQ1NuMDFsVlZhWFlBaFI5SXI4elo4K2VMZjZU TnVUSHQ2eU41UEo3ZW5vVVg2UWhiMGoyOE96czdGV3JWdm45ZmgydVJHL2tIbEQwU1h4ZTJy SDZMQ01BQUlENGcvODVBZ0FBNjRDWURnQUExZ0V4SFFBQXJBTmlPZ0FBV0lmNDFYdkJHNnJ5 RWhBOFBxbXFxcG82ZFdwS1NzcXNXYk9PSFRzbXRHL1lzTUVtenVUeGdGb2ZNZkppR3VKNzJJ YWY5SmRmUGsrVkVybXI4ZEpXclBjUzhvYVUxOXVKU3VXYzhHTzYwb2NaNVQzbDlWNkVFYlFK dFFCcUpTQ0MrNlMwdFBUTW1UTit2LytERHo0WU0yWU1hL3o2NjY5WmJJcXRZbVBBNHdIRlBo S0NGTk9RVklDeEc4TGw4MVFwVVhPMVRlNUdSZVIrNDdraDVmVjJvbEk1SjFZeFhmNS9wTUlJ Mm9SYUFMVVNFRHcrOFhxOWxaV1Y3TXZEL0g3L3RHblQvdWQvL3NkV3p1VHhnTGlQSExWaUd1 SUtNSVNRZSs2NVovSGl4Uk1uVGhTK1o5bmFpQytmdjNLTDNOVzJ1aHNscVBrdCtBMHBJSzYz RTNubG5GakZkSG05RjJFRWJVSXRnRm9KaUpBK0VmNDYvdkxMTHltbHp6enpEUHNmUC9zNGs4 Y0RrajV5MUlwcGlDdkFFRUthbTV2WmRzU0lFVEc4Sk1NZ3Zuek95aTJLcnJiUDNTaEgwVzho YjBpR3VONU9WQ3JuSUUvWEFVa0pDQjZmZUR5ZTk5NTdiOXEwYVpUU2hJU0U0RzltV0JJZUQ0 ajd5RkVzcGlHcEFDT3NzMU43M0t1S0JYQW9SK1VXdWF2dDRLNlFTUHdXL0lha3NubzdhdU9F UmF4aXVyemVpekNDTnFIV1FMRUVSSENmTEYrK3ZLMnR6ZS8zVjFaV1N2NGNzNGt6ZVR3UXBJ K0FZakVOU1FVWXU4VjBlUUdja0ZWSzFGeHRCM2NGUWVJM25odFNYbTlIUG80R1loWFQ1ZlZl eUsxb2sydHEySVhMaTBKSWZDSnh6cC8vL09lSkV5Y21KU1ZObXpiTjdYWkxCb3liZUIzaDhZ QmlINGwvRkl0cHlDdkFVRHZGZE1VQ09NR3JsTWhkalplMjNHODhONlRFYnowOVBZcitEeGZV ZXdFQUFPdUEvemtDQUFEcmdKZ09BQURXQVRFZEFBQ3NBMkk2QUlZRzcxZUJzRUJNQjBBQnpa RTA2aUU0eUlCUm1Zc1E4dXFycjFKS1gzbmxsVWdHSklSczNydzVjbUdLVlZEeTh2SVNFeFB6 OHZJKytPQUR0ZGtsbjllUWwvZVIwOWJXTm1mT25KU1VsRGx6NWx5OGVKSGUrakVRZm9YeUZw NUhCWms5eUhXRkJERWRBQVZzRmRNTENncUdob2FtVEprU1lVelB6OCsvZWZObWhNTGtWVkFj RGtkdGJhM2Y3M2U3M1dwZjJ5dG9FSTZEbFBjUnoxVmVYdTd6K2NyTHkwdExTem1WeXhYS1d6 Z2ZKWmxkZmhWcUxVRkFUQWRBQWNYWEZTRWtLU2xweG93Wmh3NGRvcFMrOGNZYlRxY3pNVEZS eUtSNHNqeEpGc2EyWldWbHFhbXBVNlpNYVd4c3BKUTJOallXRkJTa3BxYVdsWldKUnhiUExw L3I3Tm16OTk1N2IzSnk4dVRKazRWYWdDSERBU0ZrM3J4NTY5ZXZuejkvUHV2OCtlZWZGeFlX SmlVbEZSWVdzditJSVlSczJiSWxNek16SXlOang0NGRhdU5zMkxEaDVaZGZGaWFWanpOejVr d212cjYrL3E2Nzdnb3VUS2lDTW1QR2pQcjYrdDdlM3JxNnV1Q1BFbCtzWW5rZmlUZXlzckk2 T3pzcHBaMmRuU3pPRWtJY0RrZGFXdHJQZnZhejF0Wld4VWZKRlFacENmSW8rZXhxMHlHbUF4 QXBhcStpZ1lHQmhvYUdzV1BIVWtwSGpCaXhZY09HTTJmTzlQYjJobnlnWWdjaFhtL2Z2dDNy OWU3YXRXdjY5T21VMHFsVHArN2F0Y3ZyOWI3MTFsdmkvdUxaNVhQTm1qWHIzWGZmOWZ2OXRi VzFreWRQNXIvU3ZYdjNKaVFrdlBmZWUyekFnb0tDblR0M2VyM2U3ZHUzRnhZV3NqNWJ0Mjcx ZXIwMU5UVnFlU2docEtlblo5S2tTZGV1WFZNYjU0MDMzbGl5WkFtbGRQSGl4VysrK1dZUVZl SXFLSTJOalJrWkdZU1FqSXdNZVJrRGlRYmhXSzI4ajVpRWhJVEJ3Y0Y1OCtZTkRBeUk2NnQw ZDNlWGxaWE5tVE9IVTZGYVMvQkhxYzJPbUE1QTlKRy9pclp1M2VwME9sbXBtV0hEaGxGS1Av cm9vNS8vL09lVEowOGVPWExrZi83bmY2bzlVRzNrL3Y1K0lhWjd2VjVLcWRmclRVNU9wcFFt SlNXeEZvL0h3L3JJWjVmUGxaU1VKR1R1UXArd3JwUWRKeVltQ3JNbkpTV3g5djcrL3VBWHlO bzNidHo0L1BQUHE0MXo5ZXBWaDhOeDRjSUZoOFB4d3c4L3FFbVNWRUhKejg5M3U5MSt2OS9s Y2hVVUZIQmVpMko1SHdsWldWbGRYVjFVbGlsVFNuMCtIM3N1ZUJRcXRvUjhsTnJzaU9rQVJC LzVxeWcxTmJXbXBzYnI5YnBjTHZIWndjSEJJMGVPcEtXbHNSOVRVbEtFdjlrVkdUVnFWRjFk bmMvbjI3WnRteERUV1Q2N2E5ZXVxVk9uVWtxblRadkc4dlR0MjdlelBvcXpTK1lxTGk2dXJx NzIrWHlhcnpSSW5oN0VNK0oyajhlVG01dXJOZzZsdExTMDlPNjc3dzVTeDFoZUJTVTlQZDN0 ZHZmMjl0Ylcxdkt2cHl1Vzk1SHc4TU1QcjF1M3p1LzNyMXUzamxYNlpOeThlWFA5K3ZYRnhj V2NDaFVydDRSOGxOcnNpT2tBUkI5eUs1VFNsMTU2eWVGd09CeU9UWnMyaWRlNEV4SVNjbk56 Ly9qSFA3SUhybG16SmpVMU5jaUxjUHYyN1E2SEl6TXo4ODAzMzVTc3ArZm41eDgvZnB4U2V2 ejQ4Zno4L05UVTFPZWVlMDV0ZHZsYzU4NmRlK0NCQjFpTDBLaGhMYWlob2FHZ29DQXhNYkdn b0VCWVQxZnNyempPNXMyYjFjYWhsTmJYMXhOQzZ1dnJnK2dSMDlQVFUxRlJ3ZjVHeWMzTnJh eXM1SGtVVlNudkl4SGYydG82ZS9aczlyMUNiVzF0d2ppMzNYYmJBdzg4Y1A3OGVjVkh5UlhL VzNpdVMyMTI4VlhJVzBLQ21BNkF6bkMrVmdIZ0FURWRBSjFCVEFkUkJERWRBQUNzQTJJNkFB QllCOFIwQUFDd0RvanBBQUJnSFJEVGdUbW9ycTZ1cWFrWkdCaW9xYW1wcnE3bWZFandzMm9k UEI2UHkrVlM3Qi9rVVFBWUFjUjBZQTZxcTZzLy9mVFRiNzc1NXJQUFBvdFdWRlViNTZ1dnZw S2ZRaWdIcGdBeEhaaUQ2dXJxYytmT3VkM3VjK2ZPQ2VGVmNsQmRYZDNjM094MnU4K2VQYXZX S0JsVFB0SE5temZyNitzVlk3cmI3Zjc0NDQ4N09qcWllbVVBUkJQRWRHQU9xcXVycjE2OUtt eUZSdkZCZFhYMUR6Lzg0UEY0MkRlMUt6Wkt4cFJQOUplLy9LV2xwVVh4MU5EUVVFZEhSMTFk WGZRdUM0QW9nNWdPekVGMWRmWFEwTkRodzRlSGhvYUVnT3QydXowZWp4RGw1U0ZlM2lnWlUz RWl0WFh6b2FHaHJxNHV4SFJnWkJEVGdUa1FSMWpoK096WnMyNjN1N201V1VOTWx3UnUrVm41 UVhWMTljY2ZmM3o1OHVWb1hoZ0FVUVV4SFFBQXJBTmlPZ0FBV0FmRWRBQUFzQTZJNlFBQVlC MFEwd0VBd0RvZ3BnTUFnSFg0ZTB4dmJHemNDd0FBd1B3UUJIUUFBTEFNL3c4ekFuMmUwNzdS bGdBQUFBQkpSVTVFcmtKZ2dnPT0iIC8+PC9wPjxwPiZuYnNwOzwvcD48cD5JbiBDUFUgdXNh Z2Ugb2YgdGhlIERvbTAsIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VlOjwvcD48cD4mbmJzcDs8 L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtH Z29BQUFBTlNVaEVVZ0FBQWZFQUFBRnNDQUlBQUFCVHFCZTNBQUFnQUVsRVFWUjRuTzJkZjNR VGRici94eWFwSlNocEc4b0Mxa0JoUzB0cGk3WGNVcmk3WHI2ZTd4VkZkLzJSVnRjVlBmZXND L2RjUUN1UjVld2VQVzR2b0xzS2dxWFFxeGVGV2l5aVRkcFNZTld0YUZHNWgyckx4VXAvUVZO RWZqWEpoS2I5L1BNOVovL2crOGVzczhQOHlxZHAwc3hNM3Evem5EbnBKNStaZWMrVHlidFBK NU9uelA4Q0FBQXdCRzF0YlV5OE5RQUFBSWdDYlcxdGUvZnUvYnVuRXdBQUFIcG03OTY5OEhR QUFEQUk4SFFBQURBTzhIUUFBREFPOEhRQUFOQVREUktFejhMVEFZZ0pETVBFVzRJbU5JQVlN VG82eXJrNVBCMkFpVUFMZnFvRkRTQVdoRUtoYjc3NXh1MTJYNzU4dWJHeFVmZ1VQQjNFbk03 T3psLys4cGRwYVduSnljbDMzbm5uL3YzN3VYSG1SNlpNbWZMd3d3K2ZQMytlSDVkdVJIZjJw QVhCV3RBQW9rNVBUMDlMUzh2eDQ4ZlBuajNiMk5qNHpUZmZDSitGcDRQWWN2cjA2Wi84NUNj N2R1eTRjT0VDeTdLZmYvNzVndzgreUQzRk84N2c0T0N2ZnZXclgvemlGNkp4SWJxekp5MEkx b0lHRUhVKysreXp5NWN2S3owTFR3ZXg1ZEZISC8zem4vOHMrNVRRY1g3NDRRZXIxU29kbDUy c05Nai82UEY0NXMrZmI3RllIQTdIcmwyN3VNSHZ2dnZ1dnZ2dW16eDU4czAzMy95di8vcXZn NE9EM0xqZjcvLzFyMzl0dFZxblRadTJlZk5tZmlPaFVNamxjazJkT25YU3BFbE9wL1BxMWF2 MFI4MkoyYng1YzBaR2h0VnFYYmx5SmN1eWhKQ2xTNWZ1MjdlUG45UFQwek45K25UaCt6TXJL K3ZycjcvbUhyLzU1cHZjZzYrLy9qb3JLMHRGa3RJNGZ5eGZmUEhGekprelgzMzExVEVkQXRB ajhIUVFXNlpObTNidTNEblpwNFNPZlBIaXhTaDZ1dDF1ZisrOTkxaVc3ZW5wZWVxcHA3akIz TnpjSTBlTytQMyt5NWN2cjFtejVySEhIdVBHbjMzMjJmdnZ2Ly84K2ZQbno1Ky83Nzc3K0ky OCtPS0xkOTk5ZDE5ZjM5V3JWNTk0NG9uZi92YTM5RWZOaVZtK2ZQbmc0T0RnNE9EeTVjdWZl KzQ1UWtoVFUxTk9UczdJeUFnMzU2bW5udHEwYVpOd3JWV3JWdTNZc1lNUTB0ZlhkOHN0dDNE dXZIMzc5dFdyVjZ0SVVocm5qcVdob1dIcTFLa0hEeDRjazM2Z1dYRGZDNGduWnJONWVIaFk5 aW5lUGMrZlAvL0VFMC9jZi8vOW9uSFp5U3FEL0krWm1abmJ0bTNyNit0VFV1WHorYVpPbmNv OW5qbHo1bmZmZmNjOS92YmJiL21OT0J5T1U2ZE9jWSs5WHUrMGFkT1V0aVlMd3pEZmZ2c3Q5 L2owNmRPMzNYWWI5N2k0dVBpZGQ5N2hCMzArbjNDdER6NzR3T2wwRWtJMmJkbzBkZXBVN28r TVJ4NTU1TU1QUDFTUnBEVE9NTXpycjc4K1k4YU10cmEyTVlrSDJnZjN2WUQ0b0Y2bmM5eDY2 NjBQUHZpZzErdmx4cE9Ta2tLaGtIQm1LQlJLU2txUzNZTHNqMjF0YmZmZGQxOTZldnJzMmJN NU55U0VmUHJwcDB1V0xMRmFyZHhPYjdycEptN2NaREx4dXhzZUh1WTNZamFiR1FIOGZObERr SDFLdUZtejJjdzlQbmp3WUhaMmRpZ1VLaTh2MzdwMXEyaXRvYUdoMjIrL25SQ3lZTUVDdDl1 OWVQRmlRc2p0dDkvT1diK1NKS1Z4aG1GbXo1NzkvUFBQUytVQlhZUDdYa0RjZVBUUlIxOTc3 VFhacDVRK3dYTTRIUC96UC84akhQbnFxNjhjRG9kMHB0bHM1dXZjQ3hjdWlEWTRPanJxZHJ0 LzhwT2ZjRC9PbkRtenRyYjI4dVhMbzZPalY2NWM0U2ZQbURGRHRrN1B6TXpzNysrbk9FUjVo SFg2dDk5K08zUG1URjdWZ2dVTEtpb3FIQTVITUJpVXJ2anpuLy84M1hmZkxTNHVKb1FVRnhj ZlBIandycnZ1VXBla05NNHdURjlmMzV3NWM3WnMyUkx4Z1FDdGdmdGVRRHc1ZmZyMDlPblRk KzdjK2NNUFA3QXMyOWJXSnIzdlJjUi8vdWQvRmhVVmZmYlpaeXpMc2l4NzdOaXhoUXNYeXJw U1VWSFJDeSs4NFBQNSt2djdIM3JvSVg2RFpXVmwzM3p6VFRBWWRMdmRkcnVkRzB4TFN6dDQ4 Q0RMc3Q5OTk1M1Q2ZVFuUC9QTU13ODg4TUQzMzMvLy9mZmZDNituLy9HUGYxeStmSGxYVjlm dzhQREpreWU1U3lMME1BeHozMzMzY1pmcDc3MzMzb3FLQ3Y2cDJ0cGFobUYyNzk0dHUrS21U WnRtenB6SmxmQ3Z2ZmJhYmJmZHRubnpablZKU3VQY3Nadzllelk3Tzd1eXNuSk0rb0Ztd1gw dklNNTBkSFQ4NGhlL3NObHN5Y25KeGNYRnd2dlRaZWVQam81dTNicDF3WUlGTjk5ODg4MDMz N3hnd1lMWFgzOWRkdVpYWDMyMWNPRkNzOW5zY0RoMjdOakJiM0Rmdm4zWjJkbG1zM24rL1Bs TlRVM2M0UHZ2dno5NzlteVR5WFQ3N2JkdjNicVZuK3p6K1g3MXExOU5talFwSXlQamozLzhv OFZpNGNaSFJrWXFLeXNkRG9mRllzbkx5NnV0clIzVFVRdnZlM25paVNjQ2dRRC8xUDc5Kytm T25hdjBNY09KRXlmTVpqTjN0LzdnNEtEWmJPYi9hbEdTcERUT0grUEF3RUJPVHM2TEw3NDRw a01BZWdTZURzQS82T3pzbkRWclZxejNzbUxGaXIxNzk4WjZMOENvNEw0WEFNS3dkdTNhaXhj dkRnd01MRisrZk4yNmRiSGIwY2pJU0hWMWRXNXVMbjg3SXdCalJXVGk4SFFBeEx6NjZxdDJ1 MzN5NU1tUFB2cm8wTkJRN0hiRU1JekQ0Y0NkaFdBOE5EWTJYcnQyalh0ODdkbzEzUGNDQUFB NnBxMnQ3ZXV2dng0ZUhoNGVIdjc2NjYrUEh6OHVmQmFlRGdBQWVpSVFDSHorK2VjZWo4Zmo4 YlMxdFFrL2ZpZndkQUFBMERXNG5nNEFBTVlCbmc0QUFEb21nZTVsN0RwNnRPdm8wWGlyQUFD QWljT3duajdNc3R1WExObStaTWt3eThaYkN3QUFUQkNHOWZTL3Z2cHFwY05SNlhEOEZZMy9B UUNKaWtFOC9YSmYzNWJzYk03VHQyUm5YMVp1bkEwQUFMckc3L2UzdGJYeDl6TDYvWDdoczFy eDlOcmEydXpzYkl2RlVsQlEwTkxTUWdqcDcrOHZMUzFOVGs0dUxTM2wrb2hLUjNqcW5ueVNN M1F1NnA1OE1qNkhBUUFBTWFhMXRmWFVxVlBYcmwyN2R1MWFaMmRuYTJ1cjhGbXRlUHJqanov ZTNkM3Q5L3ZmZmZmZDlQUjBRa2haV1puTDVRb0VBaTZYcTd5OFhIWkV4TWFORzdrSFo4K2Vw ZG5wdFk0T21tazBXNlBjSTgwMHFLS2ZCbFgwMDdTcGl0QUppK0lldGFscVRMamRicjVmME1q SWlOdnRGajZyRlUvbllGbjJ2ZmZleTgvUEo0VFk3WGJ1SDk5NHZWNnVCYlowUk1UR2pSdXZk ekRYTzVqMnh2L0xQVkNQd0paQ21tazBXNlBjSTgwMHFJS3F4RkZGS1N5S2U5U09xb2g5VWg5 MU92bngzNENscHFaKzl0bG5oSkNrcENUdWQxRW9GREtaVExJalBLRUxGNjVVVlcxWXRZcnN6 Ynpld1F5L1BlZDZCOE05VmxuKzdkaWtzSE1vdDBhNXgvOTNNdndlb1FxcUVrZlY5UTRtdEh0 Qzk2Z2RWWDlqMlN0VlZjSDI5ckZhcGMvbjA4SDFkQTd1MnN1Y09YTUlJZW5wNmFLcVhEb2ln cS9UQno3SnYwN3grNVBVWnRKTW85a2E1UjVwcGtFVlZDV09La3BoVWR5amhsUmR2eDRMRjlX S3A2OVpzK2I4K2ZOK3YzLy8vdjNjZnoxM09wMzgxWFB1ZjNGSlIwVHdubzVBSUJCYWowZzlY Ui8zdmRUVTFNeVlNU001T2ZuT08rLzh5MS8rUWdqcDdlMHRLU214V0N5TEZ5L3U2K3VUSFJH Qk9oMnFvRXBmcWlpRm9VNFhvcHZyNmVNSGRUb0NnZEJOUk9ycGVycnZaWnlnVG9jcXFOS1hL a3BocU5PRkpFU2RmdTNhdGU3dTd0Lzg1amZYT3hqdkp3dXd4QkpMTERXKzdPL3Y3Kzd1anVE dWRUM2Q5ekpPVUtkREZWVHBTeFdsTU5UcDlCalQweEVJQkVMckVhbW5KMUQvZE5UcFVBVlYr bEpGS1F4MXVoQ1JpWXN3cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRicVFoUEIwM1Bl Q0paWlk2bXNaOFgwdjZoakUwemxRcDBNVlZPbExGYVV3MU9uMEdOUFRFUWdFUXVzUmthY2ZP WEtrdmIzZDYvV0dRaUhaQ2NiMGROVHBVQVZWdWxCRktReDFPcytWSzFlNnVycU9IVHZXMk5o NDdOaXhycTZ1SzFldUNDY1kwOU1SQ0FSQzZ6RytheS9EdzhOZXI3ZTl2ZjNJa1NQQ2NXTjZP dXAwcUlJcVhhaWlGSVk2blI2RGVEcnVlOEVTU3l6MXRjUjlMK0ZCblE1VlVLVXZWWlRDVUtm VFkweFBSeUFRQ0sxSGxEd2QvVjcrRWRxc1hLQUtxaEpIRmFVdzFPa3FKSVNuSXhBSWhOWURm UmxWRUgxR092QkpQczFuRk4xNy9pWHNITXF0VWU3eGhIc0ZWRUVWVkFtWHBEWnpJdmVvSFZY UitvelVtSjdPZ1RvZGdVRG9KbkR0SlN5NG5nNVZVS1V2VlpUQ2NEMmRIcTE0ZWwxZFhXNXVy c1ZpS1Nnb2FHbHBJWVF3QXJnNS9mMzlwYVdseWNuSnBhV2wvZjM5MG8yZ1RrY2dFTHFKU0Qz ZDcvZnI0UCtSUHZ6d3crM3Q3WUZBWU5ldVhYYTduUkRDV3psUFdWbVp5K1VLQkFJdWw2dTh2 Rnk2RWRUcFVBVlYrbEpGS1F4MXVwRFcxdFpUcDA1ZHUzYnQyclZybloyZHJhMnR3bWUxNHVr ODNkM2REb2VERU1Jd3pLMjMzbXExV3Bjdlg5N2QzVTBJc2R2dFhxK1hFT0wxZWpuZkY0RTZI WUZBNkNZaTlYUzMyejB5TXNJOUhoa1pjYnZkd21lMTVla0RBd05GUlVVZmZQQUJQekk0T0Zo UlVWRlNVa0lJU1VwSzRvNGtGQXFaVENiaGlxRUxGNjVVVlcxWXRZcnN6Ynpld1hoM2xsN3ZZ TGpIS2t0U214bDJEdVhXS1BjNDhFaytWRUVWVkFtWGdVMkZFN2xIN2FqNkc4dGVxYW9LdHJl UDFTZDFVNmUzdGJVNUhJNDllL2FJeHYxK3Y4VmlJWVNrcDZlalRrY2dFQWFKU090MG44K25n K3ZwMWRYVkdSa1p6YzNOb3ZGTGx5NXQzTGl4dUxpWUVPSjBPdm5yNlU2blU3b1JYRStIS3Fq U2x5cEtZYmllVG85V1BKMjVrYUdoSWU1QlNrcktzbVhMVHA4K1RRanA3ZTB0S1NteFdDeUxG eS91Nit1VGJnUjFPZ0tCMEUzZ2U2UmhRWjBPVlZDbEwxV1V3bENuQytGTW5MZnloUEIwQkFL QjBIcEU2dWtlaitmcTFhdHV0L3ZLbFN0WHJseHBhbW9TUG1zUVQwZS9GNmlDS2oycThxTGZ5 OWo3dlh6OTlkZU5qWTA5UFQxSGpoenhlRHhuenB3UlBtc1FUK2RBblk1QUlIUVR4djZNTkNy Z2VqcFVRWlcrVkZFS3cvVjBJWW40R1NrQ2dVQm9QVkNuaHdWMU9sUkJsYjVVVVFwRG5VNlBN VDBkZ1VBZ3RCN3dkQlZ3M3d0VVFaVWVWWGx4Mzh1NC84K1JDSU40T2dmcWRBUUNvWnN3ZHYv MHFJRHI2VkFGVmZwU1JTa00xOU9GNktZdjQvaEJuWTVBSUhRVGlkQS9mWnlnVG9jcXFOS1hL a3BocU5PRm9FNUhJQkFJN1lXeCs2ZVBFOXozQWxWUXBVZFZYdHozZ3Z0ZVZFQ2Rqa0FnZEJQ b0RSQVdYRStIS3FqU2x5cEtZYmllTGdUOTB4RUlCRUo3QVU4UEMrcDBxSUlxZmFtaUZJWTZY VWhDZUxyb00xSXNzY1FTUzQwdm8vVVpxVEU5blFOMU9sUkJsYjVVVVFwRG5hNUNRbmc2QW9G QWFEMk1mZDlMWFYxZGJtNnV4V0lwS0Nob2FXa2hoUFQzOTVlV2xpWW5KNWVXbHZiMzk4dU9p RUNkRGxWUXBTOVZsTUpRcDZ1Z1VVOS8rT0dIMjl2YkE0SEFybDI3N0hZN0lhU3NyTXpsY2dV Q0FaZkxWVjVlTGpzaUFuVTZBb0hRVFJqYjAzbTZ1N3NkRGdjaHhHNjNlNzFlUW9qWDYrVmNY am9pQW5VNlZFR1Z2bFJSQ2tPZFRvKzJQSDFnWUtDb3FPaUREejRnaENRbEpYRzl4MEtoa01s a2toM2hDVjI0Y0tXcWFzT3FWV1J2NXZVT0Jrc3NzY1JTNDh1L3NleVZxcXBnZS90WWZWSWYx OU1KSVcxdGJRNkhZOCtlUGR5UDZlbnBvcXBjT2lJQ2RUcFVRWlcrVkZFS1E1MU9qMVk4dmJx Nk9pTWpvN201bVI5eE9wMzgxWE9uMHlrN0lnTFgweEVJaEc3QzJQZTlNRGN5TkRUVTI5dGJV bEppc1ZnV0wxN2MxOWRIQ0pHT2lFQ2REbFZRcFM5VmxNSlFwNHNJQm9NZmYveHhZMlBqK2ZQ blJVOXB4ZE9qQXVwMEJBS2htNGpVMHpsRFAzWHExTVdMRjV1Ym15OWZ2aXg4MXBpZWpqb2Rx cUJLRjZvb2hhRk9GL0xSUngveGRuM3UzRG51Q3owOEJ2RjA5SHZCRWtzczliV011TitMeUt2 UG5Ea2ovTkVnbnM2Qk9oMnFvRXBmcWlpRm9VNFhvby9QU0tNQ3JxY2pFQWpkQkhydGhnVjFP bFJCbGI1VVVRcERuUzRrRVQwZGdVQWd0Qjd3OUxDZ1RvY3FxTktYS2twaHFOUHBNWWluNDc0 WExMSEVVbC9MaU85N1NjVFBTRkduUXhWVTZVSVZwVERVNlZKR1IwZEZGMkU0ak9ucENBUUNv ZlVZaDZlSFFxRnZ2dm5HN1haZnZueTVzYkZSK0pReFBSMTFPbFJCbFM1VVVRcERuUzZrcDZl bnBhWGwrUEhqWjgrZWJXeHMvT2FiYjRUUEd0UFRFUWdFUXVzUnFhZC85dGxub2g0dlFvenA2 YWpUb1FxcWRLR0tVaGpxZEhvTTR1bTQ3d1ZMTExIVTF6TGkrMTdVTVlpbmM2Qk9oeXFvMHBj cVNtR28wK2t4cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4dlIwQkFLQjBIckEw OE9DT2gycW9FcGZxaWlGb1U2bnh5Q2VqdnRlc01RU1MzMHQ0M25meTV0dnZwbVdscGFXbHZi Zi8vM2YwZDE5ZEVHZERsVlFwUzlWbE1KUXA5T2o2T2tzeS9LUFUxTlRqeDgvZnZ6NDhiUzB0 RmlJaUJhNG5vNUFJSFFURSt6cHQ5OStlMDFOVFNnVUloUGk2Y3lQU0VmNHdmNysvdExTMHVU azVOTFMwdjcrZnVsR1VLZERGVlRwU3hXbE1OVHA5Q2g2ZW10cjY5S2xTN096czk5OTk5M2R1 M2VucHFhbXBxYSsrZWFic1JEQkkvSjAwYk5sWldVdWx5c1FDTGhjcnZMeWN1bnFxTk1SQ0lS dUlpNmZrWG84bmp2dXVLT3dzTkR0ZHNkaTl5SkVubjdycmJkYXJkYmx5NWQzZDNjVFF1eDJ1 OWZySllSNHZWNjczUzVkSFhVNlZFR1Z2bFJSQ2tPZFRvK2lwL09maTc3MTFsdnZ2dnR1ZG5a MmFXbnB4eDkvSEFzUlBOTGFmSEJ3c0tLaW9xU2toQkNTbEpRME1qSkNDQW1GUWlhVFNUZ3Rk T0hDbGFxcURhdFdrYjJaMXpzWUxMSEVFa3VOTC8vR3NsZXFxb0x0N2RGMVVVVlBUMHRMYTJ0 cjQ2K2hoMEtoM2J0MzMzNzc3ZEhkdlFpcHB4TkMvSDYveFdJaGhLU25wNk5PaHlxb01wSXFT bUdvMCtsUjlIVFp6MFdGTjhQRUFxbW5YN3AwYWVQR2pjWEZ4WVFRcDlQSlgwOTNPcDNTMVhF OUhZRkE2Q1ltMk5OcmFtb201bk5SRHVaRytKR1VsSlJseTVhZFBuMmFFTkxiMjF0U1VtS3hX Qll2WHR6WDF5ZmRDT3AwcUlJcWZhbWlGSVk2blI2RGZJK1VBM1U2QW9IUVRjRFRWUkQxQmhq NEpKL211N25kZS80bDdCektyVkh1OFlSN0JWUkJGVlFKbDZRMmN5TDNxQjFWK0o4WTRVR2Rq a0FnZEJPbzA4T0M2K2xRQlZYNlVrVXBETmZUNlRHbXB5TVFDSVRXQTU0ZUZ0VHBVQVZWK2xK RktReDFPajNHOUhRRUFvSFFlc0RUVmNCOUwxQUZWWHBVNWNWOUw3anZSUVhVNlFnRVFqZUJP ajBzdUo0T1ZWQ2xMMVdVd25BOW5SNWplam9DZ1VCb1BlRHBZVUdkRGxWUXBTOVZsTUpRcDlO alRFOUhJQkFJclFjOFhRWGM5d0pWVUtWSFZWN2M5NEw3WGxSQW5ZNUFJSFFUcU5QRGd1dnBV QVZWK2xKRktRelgwK2t4cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4dlIwQkFL QjBIckEwMVhBZlM5UUJWVjZWT1hGZlMrNDcwVUYxT2tJQkVJM2dUbzlMTGllRGxWUXBTOVZs TUp3UFowZXJYZzY4eVA4U0g5L2YybHBhWEp5Y21scGFYOS92K3lJQ05UcENBUkNOMkZzVCtj UWVucFpXWm5MNVFvRUFpNlhxN3k4WEhaRUJPcDBxSUlxZmFtaUZJWTZuUjd0ZXJyZGJ2ZDZ2 WVFRcjlkcnQ5dGxSMFNnVGtjZ0VMcUpSUFAwcEtTa2taRVJRa2dvRkRLWlRMSWpQS0VMRjY1 VVZXMVl0WXJzemJ6ZXdYaDNsbDd2WUxqSEtrdFNteGwyRHVYV0tQYzQ4RWsrVkVFVlZBbVhn VTJGRTdsSDdhajZHOHRlcWFvS3RyZEgxMFcxNitucDZlbWlxbHc2SWdKMU9nS0IwRTBrV3Az dWREcjVxK2RPcDFOMlJBU3VwME1WVk9sTEZhVXdYRStuUnl1ZXp0d0lJYVMzdDdla3BNUmlz U3hldkxpdnIwOTJSQVRxZEFRQ29ac3d0cWRIQmRUcFVBVlYrbEpGS1F4MU9qM0c5SFFFQW9I UWVzRFRWVUMvRjZpQ0tqMnE4cUxmQy9xOXFJQTZIWUZBNkNaUXA0Y0YxOU9oQ3FyMHBZcFNH SzZuMDJOTVQwY2dFQWl0Qnp3OUxLalRvUXFxOUtXS1VoanFkSG9NNHVtaXowaXh4QkpMTERX K3hHZWs0VUdkRGxWUXBTOVZsTUpRcDlOalRFOUhJQkFJclFjOFBTeW8wNkVLcXZTbGlsSVk2 blI2ak9ucENBUUNvZldBcDRjRmRUcFVRWlcrVkZFS1E1MU9qMEU4SGZlOVlJa2xsdnBhNHI2 WDhLQk9oeXFvMHBjcVNtR28wK2t4cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4 dlIwQkFLQjBIckEwOE9DT2gycW9FcGZxaWlGb1U2bnh5Q2VqdnRlc01RU1MzMHRjZDlMZUZD blF4VlU2VXNWcFREVTZmUVkwOU1SQ0FSQzY1Rm9uczRJNEViNisvdExTMHVUazVOTFMwdjcr L3VscTZCT2h5cW8wcGNxU21HbzArblJ0S2VMUnNyS3lsd3VWeUFRY0xsYzVlWGwwbFZRcHlN UUNOMUVBbnI2cmJmZWFyVmFseTlmM3QzZFRRaXgyKzFlcjVjUTR2VjY3WGE3ZEJYVTZWQUZW ZnBTUlNrTWRUbzkydlYwanNIQndZcUtpcEtTRWtKSVVsTFN5TWdJSVNRVUNwbE1KdUcwMElV TFY2cXFOcXhhUmZabVh1OWdzTVFTU3l3MXZ2d2J5MTZwcWdxMnQwZlhNN1h1NllRUXY5OXZz VmdJSWVucDZhalRvUXFxaktTS1VoanFkSHEwN3VtWExsM2F1SEZqY1hFeEljVHBkUExYMDUx T3AzUXlycWNqRUFqZFJLSjVPbmZIUzBwS3lySmx5MDZmUGswSTZlM3RMU2twc1Znc2l4Y3Y3 dXZyazY2Q09oMnFvRXBmcWlpRm9VNm5SN3VlSGdHbzB4RUloRzRDbmg0VzFPbFFCVlg2VWtV cERIVTZQUWJ4ZFBSN3dSSkxMUFcxUkwrWDhLQk9oeXFvMHBjcVNtR28wK2t4cHFjakVBaUUx Z09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4dlIwQkFLQjBIckEwOE9DT2gycW9FcGZxaWlGb1U2 bnh5Q2VqdnRlc01RU1MzMHRjZDlMZUZDbjYxSlZwU1pWYVROWGhsTkZLUXgxT2ozRzlIU0Vu a0xCMHhFSWd3YzhQU3lvMC9Xb2lsbDlXSU9xdEprcjQ2bWlGSVk2blI1amVqcENSNkhrNlFp RXdRT2Vyb0xvTTlLQlQvSnBQcVBvM3ZNdlllZFFibzF5anlmY0s2QktOR2VCNjZBR1ZXa3pW OFpUNWYxa0Fhbk5uTWc5YWtjVlBpTU5EK3AwUFFicWRFU0NCdXIwc09CNnVoNVY0WHA2SXF1 aUZJYnI2ZlFZMDlNUk9nclU2WWdFRFhoNldGQ25LODZwVkx0bE1KNnFVS2NudGlwS1lhalQ2 VEdtcHlQRVVYbGp4RjFQQjNQOVJ6ZS93ZE1ySlE4bVBsSHhUZ3ZDYUtGMFVzSFRWY0I5TDJw ektwa0Zyb1BNNnNQOFVoT3FmcnpqNVFZOVd4WmNyMlE0emZIS2xSWmZRVzJlVjlGUTVVMkUr MTcraFB0ZUl1VWZkWG9jeTFMdEZYck02c09paUxza1h0ajF5aHZxZEc1RU5EaVJMNU4ya2tO MUNGcjZxeXVlU1loRlZpc2xQMHFEYnB1S0p4WHE5TEQ4M2RNcm1ZRXQrVFNwai80VlJ0SHVK THVXMzVUdzdJbXVxaTM1bkQrcWUzcThyc1l5UC82KzRSUEYvOGlzUGh4RFZkS3pvdklmdVZJ L2MwUWZCc2pPaVZ5Vndpc29yMGN3SGttdXh0Rm1SMFBYMDIvTVRDVGlLK1cyVnNtUWlzd3do azZUOWtybWVpV1Q3em9vZjFFUm50N2YzMTlhV3BxY25GeGFXdHJmM3krZHNISGpScjdLdThI Q3dyMDJVWXdKM2gyTkhobFBqN2VxdjJzVGVycEU3UVMvVFAvNG95SGVhVkhYT2ZHNTBuSkUv ZkJsM2krQzRpT3k5NUhpekI4OXZlNnBweTcxOWtiTEovWGs2V1ZsWlM2WEt4QUl1Rnl1OHZK eTZZU05HemR5dWM3L0pQL3ZyOFNQcjRmMDFicE85NnY0dXJUcVY1NGplckdsTDd6c3BvUm5U M1JWNWJzTy92MmtWRDBkYVRZMUhsV3l1MU1TeGdmTnBpSlRKYnU3ditjcTNKdDJZRXYrMzAr bkRzVzNhOFNxcEFjclVuWERzNEl6bk4rVXJCN1pzNTNwb0ZLbE5JZkcxR2cyUlprdXhUZk9q eGtZazNpMWsrSEhEZjZ5TnZNR0Q1RUxwZDNKbmxveUw5Q1BubDdwY0d5Wk4rK3ZyNzQ2SEFp TTN5ZjE1T2wydTkzcjlSSkN2RjZ2M1c2WFR0aTRjV1BZbHdHQlFDQzBFRUpQNTJMSFAvL3p0 MGVPak5NbjllVHBTVWxKSXlNamhKQlFLR1F5bWJqQnpzN081NTkvM3JWdTNiTVBQUEIvbGk1 OTdva25ubi8rK2Q4KytPRHp6ei9QUFZaWlZqenlTTmc1bEZ1ajNPTy8vZHUvUVJWVVFaVncr Y3c5OTB6a0hyV2ppbk90OWIvNXpUODhmZW5TYnc4ZkhxZFA2c25UMDlQVHc5YnAzSU16Wjg3 UWJERHd5U2MwMDJpMlJybEhtbWxRUlQ4TnF1aW5hVk1Wb1JNV3hUMXFVQlYzN2VXVFAvODU0 YTY5T0oxTy9ucTYwK21VVHVBOVBSZ00wbXp3eXE1ZE5OTm90a2E1UjVwcFVFVS9EYXJvcDJs VEZhRVRGc1U5YWxCVjNaTlBYdXJwb2RrVURYcnk5TjdlM3BLU0VvdkZzbmp4NHI2K1B1a0Uz dE1wQ1owL0h5VnAwUVNxNklFcWVyU3BpbWhWbURaVjBhQW5UdzlMZTN0N3ZDVUFBRUE4TVpT bkF3QkFnZ05QajV5NnVycmMzRnlMeFZKUVVORFMwa0lJWVg1RVU2cWtJMXBRVlZ0Ym01MmRy VFZWSEgvNHd4L2krQ0txbkZlYVVqVXlNdktIUC94aHhvd1pOOTEwazZhRUNkT1ZucDZ1RVZY MTlmVlpXVmttazJuMjdObjE5Zld4MnpVOFBYSWVmdmpoOXZiMlFDQ3dhOWN1NFgwNDhmVjBx U29sbmZGVjlmampqM2QzZC92OS9uZmZmVGRlYnp6WnpCdy9mbno2OU9seGZCR2xxdUo3Um5G SVZiMzAwa3Z6NXMxcmIyOGZIUjNWbERDZVk4ZU8vZTUzdjlPSXFpbFRwbmc4SHBabDNXNjN6 V2FMM2E3aDZWR2d1N3ZiNFhEd1AycmhIVWdrcW1SSEpoNlJCcFpsMzN2dnZmejgvRGhLSWdK VmdVQmd3WUlGUjQ4ZTFjS0x5S3RpR09iV1cyKzFXcTNMbHkvdjd1N1dpQ3FIdytGMnUrTXJS b2owOUY2K2ZQbTVjK2ZpcFllRFY1V2ZuKy94ZUlMQm9OdnRMaXdzak4wZTRlbmpaV0Jnb0tp bzZJTVBQdUJIdEdBSFVsWFNrYmlyNHY0NlRrMU4vZXl6enpTaWFzMmFOWC82MDUrSUJsNUU2 ZXMxT0RoWVVWRlJVbEtpRVZVbWsybnQycldUSmsxeU9Cd0hEeDZNb3lvaWw2N1cxdGJISDM4 OGpwTElqYW8rLy96ektWT21NQXd6WmNxVXp6Ly9QSFk3aGFlUGk3YTJOb2ZEc1dmUEh1Rmcz TzFBcWtwV1o5eFZFVUs0YXk5ejVzelJpQ3J1MG5EY0wxNHJ2VjUrdjk5aXNjUkZFcEdvc3R2 dGJyZWJ1NWd3ZGVyVWVLbVNDdU5ZdG16WlYxOTlGUzlKUktKcTd0eTUvTFdYbi83MHA3SGJM enc5Y3FxcnF6TXlNcHFibTBYajhmVjBxU29sbmZGVnRXYk5tdlBuei92OS92Mzc5MCtiTmsw anFuamkrQ0lxcWJwMDZkTEdqUnVMaTR2aklVcEdWWGw1dWR2dDVpNG1aR1JreEVXVnJEQkN5 TWNmZi95em4vMHNYcEtJbktyVTFGVCsya3RhV2xyc2RnMVBqeHptUm9hR2hrUWoybFExTkRT a0JWVTFOVFV6WnN4SVRrNis4ODQ3Ly9LWHYweThKRmxWd3FmaUlrbFdGZmNnSlNWbDJiSmxw MCtmMW9pcXMyZlAvdXhuUDdOWUxGbFpXWEc4c0M3N0l2Nzg1ejkvLy8zMzR5VkpWbFZkWFoz RDRUQ1pUTE5telhydnZmZGl0MnQ0T2dBQUdBZDRPZ0FBR0FkNE9nQUFHQWQ0T2dBQUdBZDRP Z0FBR0FkNE9nQUFHQWQ0T2dBQUdBZDRPa2hRNG5nSE9nQ3hBNTZ1SjRMQjRMcDE2NlpPblhy TExiZHMyclFwM25MMEFjTXdyN3p5Q2lIazVaZGZobzlUMHQ3ZXpqQU0vc2tNSlpvNngrRHBl bUw5K3ZVUFBQREF1WFBuTGwyNjlNd3p6OFJiamo1Z0dDWW5KMmQwZEhUZXZIbHhmNy9waFMx YnRpUWxKVzNac2lYZVF2U0JwczR4ZUxxZW1EbHpwdWgva0F0UElQNHh3ekRyMTYrM1dxMThT OCs0bjJkeGhHR1lKVXVXdlBUU1MwdVhMaFdtU0pTNjExNTdMUzB0TFRVMWRkZVAvMXc0a1pP MmJObXlwNTU2YXRteVpkeVBoWVdGM0Q5Mk9IVG8wTUtGQ3draHg0OGZ6OG5KU1VsSmNibGN3 cXpHUzNCOGtaNWozQWxtTnB2NS80bXhhdFdxWC8vNjE0U1F4eDkvZlBYcTFmeUtVUmNEVDlj VEpwTXBGSC83NEhnQUFCeHpTVVJCVkFvSlI1UTgvWlZYWHZINWZFOC8vZlNFNnRNa0RNUHMz YnMzS1NscDM3NTlzdW5pSG0vZnZ0M3Y5emMyTnNicjM0Wm9CNS9QTjNueTVIUG56azJlUE5u bjh4RkN0bTdkV2w1ZVRnZ3BLeXZidG0wYklTUS9QLytOTjk3dytYeTdkdTFLV0N2blVUckhR cUZRYTJ2cjlPblRDU0hEdzhOMzMzMzN2Ly83djk5OTk5M0R3OE94RXdOUDF4TXFkZnJ3OExE UTA2OWR1emJSNHJTS2lvOExIL052TXpoVVEwTUQzM3lxb2FHQkVQTEREei9ZYkxZelo4N1li TGFMRnk4U1FzeG1zOS92SjRUNC9YNWtUSHBlYmQrKzNlRndKQ1VsTVF4ejAwMDNjVThkUDM2 Y1laamp4NC9IVkF3OFhVOVVWRlE4OE1BREF3TURseTlmcnFpb0lJVFk3ZmJtNXVaQUlMQmp4 dzc4Q1N3THBhZkxQazVNVnE5ZXpYMEN2Mm5USnY0cWdkUHB2T09PTzhyS3lyZ2ZGeXhZc0hQ blRyL2YvMS8vOVYvSW1QVDhTVWxKYVd4czlQdjlicmViRy9INy9RVUZCY3VYTHk4b0tBZ0VB ckVUQTAvWEV5ekwvc2QvL0lmZGJ1ZnZlNm11cnJiWmJHbHBhZHUyYlZQeDlFUisxMG5mYjZJ K3FMSnpTQUluTFNzcjYrVEprNFNRa3lkUFptVmxjWU9IRGgxaUdPYlFvVVBjajIxdGJkbloy U2twS2M4OTkxeFNVaEkzbUxBWms1NC9MN3p3Z3MxbXM5bHNtemR2NWtaV3JsejUyR09QRVVJ ZWZmVFJKNTk4VXJwaXRJQ25Bd0FpWkdSazVQMzMzNTgzYjE2OGhZQi9BRThIQUVRQ2Q2VTRL eXNyWHYvU0JNZ0NUd2NBQU9NQVR3Y0FBT01BVHdjQUFPTXdOazluRklpaW9JVDk2RHhhMEx3 b3d0Y3VQVDJkY2kwRE05YWtjU005UFQwbEpTWEp5Y2tsSlNXOXZiMFRvbFFyMEdTc3ZyN2U0 WEJZTEpaLytxZC82dXJxa2gweEtudjI3Smt6WjQ3RllsbTRjT0hSbzBjSklmWDE5ZlBuejA5 T1RpNHFLdnI0NDQ5VjFxMnNyQnpQT1RaMlQrK1FCRHhkZTFDbWNmWHExUnMyYkJqcldrWWxy S2VMUmg1NjZDR1h5eFVJQkZ3dWw5UHBqS0V5cmFLZXNmVDA5SmFXbG1BdzZIYTc3Ny8vZnRr Um8vTFFRdytkUEhreUVBanMyYk9IKzJheTArbnM2T2hnV2ZiQWdRUFRwazFUV3ZIRWlSTVpH Umw4WWlNNHgyTGw2VnUzYm5VNEhDYVRpZjlsdm1qUkl1N20xdHJhMnRMU1V0azUwbEtvczdO ejhlTEZGb3RsN3R5NTNDODNobUh1dlBQT3NyS3kyYk5uODkrQUFDSm8zUG5TcFV1cHFhbG56 NTRkMDFvR0pxeW4yMncycTlWNnp6MzNkSGQzRTBMUzA5TzlYaThoeE92MUptWkhnYkNlZnZq d1ljN0IwOUxTWkVjTVQxOWZuOFZpNGIvWDdmZjc2K3JxbE83K1pGazJMeS92N2JmZjVoTWJ3 VGtXSzArZlBIbHlaV1ZsUjBkSE1CamtSdmJ0MjhkWmNGRlIwUWNmZkNBN2gwak9rcUtpb25m ZWVZZGwyYWFtcHJsejUzSVQrRWFna3lkUHBqbklCSVRHblRkdjNzeDlDV0pNYXhrWW1zTS9m LzU4UlVWRlNVa0pJU1FwS1dsa1pHVEpraVdoVU1oa01zVmVvT1pRejFodGJlMXR0OTAyYWRL azU1NTdqc3VQZE1UWWZQLzk5OFhGeFh3TFZmNXE1NWRmZmlrNy85bG5uMzNra1VlSUlMRVJu R094OHZRUFAvenczbnZ2blR0MzdpMjMzUEw3My8rZUVESThQRHhuenB6OSsvZHpUU2xsNXhE SldXSTJtL25Lbld1YndGZjAwc21BSjJ4bWhvZUhNek16UmEwbkVqeWZsSWNmQ0FRc0Znc2hK RDA5ZlhCd2tLQk9EOGZSbzBkbnpweXBQbUk4dnZ6eXk5bXpaN3RjcnBHUkVYN1E1L1B0Mjdj dkx5OVBkaFd1UDR6d1drVUU1MWhzcjZlUGpJd2NQWHJVYXJWeVAyN2F0TWxxdGZLOVRHWG5K Q2NuYzMvWWNoUVhGemMwTkFqYkk4RFRhUWliR2Y0SzJKaldNalkwaDMvMTZ0V1hYbnFwdUxp WUVQTGdndzl1MkxDQlpka05Help3NVZXaUVUWmpvNk9qbloyZCtmbjVYSHNpMlJGRFVsTlRV MXhjL09tbm4vSWpLMWV1N09ucFlWbTJycTR1N0hVblByRVJuR094OG5UdTkweFNVdEtzV2JQ ZWVPTU5idkRDaFF2cDZlbGNPemVsT2V2V3JVdEpTZUczZWVyVXFidnV1b3Nia2JwNWdudVFM TXlOOElPaWFZc1dMZHEvZjcvNldva0RUZEs0cDI2KytlYTc3cnJyOU9uVGhKRHU3dTVGaXha eGQzSDA5UFRFUVhmOG9NOVlSa2JHbWpWcldKYVZIVEVxb3Z3TURRMjk5ZFpiczJmUE5wdk5l WGw1SG8rSG42YTBPdmNnZ25OczR1NWxIQmtaZWYzMTE5ZXRXMGN6R1FBQVFBUk0zSGVPR0lZ cExDemtQc01GQUFBUUMvQTlVZ0FBTUE3d2RBQUFNQTd3ZEFBQU1BNmE2L2NDeGdsTmd3aHAy dzNocThsMWdFa29hSkltVFpHMHAwZmlRUFBlbCtZbmNVNHoyWnVDd2lhTlpkbTFhOWR5dlFH NGFmWDE5VmxaV1NhVEtTc3I2OENCQXpTN0hydW5yejRzRG5pNmxxQnBFS0hTZGtQVUFTWkJH Rk5YRFQ1RjBwNGVpWWI2ZTE4bFA0WS96YVNab2ZISmlvcUt3c0xDam80TzdsdVpoQkNiemRi VTFNU3lyTWZqc2Rsc05MdU9sYWNMQjduSDB1NHUwbDR1M09UMTY5ZGJyZGJDd2tLYUF3QWlh QnBFS0xYZGtIYUFTUkRvdTJySXBralUweU54b0t6blJQbEpoTk9Na1hRSGtvNUltVEZqeGtj ZmZTUWNLU2dvT0hUb1VEQVliRzV1WHJod0ljMnVKODdUcGQxZHBMMWN1TW12dlBLS3orZDcr dW1uYVE0QWlLQnBFS0hVZGtQYUFTWkJvTytxSVUyUnFLZEhRa0hqNmRMOEpNNXBKdXdPcERR aXhHUXl1Vnd1cTlXYW1abkpmU1d3cmEwdE5UV1ZZWmpVMUZSUkp3OGxZdTdwdzhQRDNHTnBk eGRwTHhkdXhRU3NkNkxJbUJwRUNOdHV5SGFBU1JBb2t5Wk5rV3hQajhRaHJLZEw4NU5vcHhu ZkhVaGxoQ2MxTmRYdGRnZUR3WmFXRnU3emh1enNiSS9IdzdLczIrM095Y21oMldPc1BOMXV0 emMzTndjQ2dSMDdkZ2duQ0x1N1NIdTVFSHpkZjl4UU5vaVF0dDJRN1FDVElGQW1UWlFpYVUr UFJFUDkzU3FibjRRNnpZVGRnWlJHaEt4WXNZTDNkSzYybURKbGlzZmpDUWFEVFUxTmNiNmVY bDFkYmJQWjB0TFN0bTNieGdoNm93dTd1MGg3dVJCNCtyaVJiUkFoeWlxWGNGSGJEVkVIbUlT Q0pta2tYSk9jb2FHaGlWTWNiMFRIemcrcXpPSHlreUNuR1hmSXd1NUEwaEVpeVZoWFY5ZWlS WXZNWnJQRDRhaXZyeWVFMU5iV09od096amJyNnVwb2RvMTdHUUVBd0RqZ08wY0FBR0FjNE9r QUFHQWM0T2tBQUdBY0p0clRjZkVkQUFCaUJ6NGpOUm8wVFVpRXJ4MTNHMnlDdjVvMHh5NU5r YlJ0VHVKQWM1cEo4NE1PT2Vxbm1iUzdTd1R2eWpGNyt2VktjU1NtQzJpV01UVWg0ZHR1NEVV azRaSWdmVmFsYlk3aG9Ubk5wUGxKNUE0NU5HOHhwZTR1bXZCMGhtRmVlKzIxdExTMDFOUlUv cDlLaTM3aGZQWFZWd3NYTHVRNndIQWpzaDFnUUdTRWJVSWliTHZCVURTak1EeGhQVjJVSXFX Mk9RbUZ5bW1ta3A4RTdKQkQ4eFpUNnU2aUZVL2Z2bjI3Mys5dmJHd1Uva0lXVHM3UHo5KzJi WnZ3WDgzS2RvQUJFVURUaEVUYWRrTzlHWVhob1hubkNGT2sxRFluY1ZBL3paVHlrOGdkY3RU ZllrcmRYYlRpNmNQRHcxSkJ3c2Rtczlubjh3blhrdTBBQThZS1RSTVNwYlliS3Mwb0RBL2xP MGVhSW1IYm5NU0J2dGVOTUQ4SjNpR0hxTDdGbExxN2FNWFR3ejVlc0dEQnRtM2IrRGFOUktF RERCZ1RsRTFJWk50dXFEZWpNRHcwN3h4UmlxUnRjeElFeXROTWxCOTB5RkYvaXlsMWQ5R29w ek0zUWdqNTRvc3ZDZ29La3BLUytNbXlIV0RBbUJEbG1XdXlJVTJtYk9zU1VUT0t4RUY2Y2hL RjdpWFNEaDZpdGprSkFzMXBKczJQN0ZvSmd1eGJUSlF4YVhjWDJUTlRIZHpMQ0FBQXhnSGZJ d1VBQU9NQVR3Y0FBT01BVHdjQUFPTVFXMDlYdXRTT2EvRUFBQkFMNHZNWnFkS3RCVUFkMlhz emVMak9MVFJOU0ZpV1hidDJiVVpHQnI4cEEvK0tyYSt2bno5L2ZuSnljbEZSRWZmbFpHblNw QW1SSWsyK1VidVhVSjVtb3F4S2lVcjNFbDBnelpqMDJDUHJrQ1BOZkZqR2ZpOWpoempnNlJP R1NycjR6aTAwVFVncUtpb0tDd3M3T2pwR1IwY3B0NjlmbkU1blIwY0h5N0lIRGh5WU5tMmE4 Q2srYVVvSkVTSk5qbEc3bDlDY1ppcFo1WWxLOXhKZElEMGk2YkZIMWlHSGg4OThXR0xvNmFK ZnlHMXRiVGs1T1NrcEtSVVZGVXFlam40djZqQUtMU09FblZ0b21wRE1tREhqbzQ4K2t0MStq SlRISGIvZlgxZFhOMi9lUEg1RW1EU2xoQWhSU2o0eFhQY1NtdE9NUTVwVklWSHBYcUlMcEJs VE9uWVNVWWNjYWVaVmlHMmRMbnhxL3Z6NU5UVTFmcisvcXFwS3lkUFI3NFVHYWNzSVllY1dt aVlrSnBQSjVYSlpyZGJNekV6Uk40OWlxanhlOEgrNmZ2bmxsL3lnTUdsS0NaRWlUYjVSdTVl b24yWkVJYXRDb3RLOVJFY0lNNlowN0pGMXlKRzJabEpoNGp6ZGJEYjcvWDVDaU0vblUvSjA5 SHVoUk5neVFxbHppMG9Ua3RUVVZMZmJIUXdHVzFwYWhCZnBqUHBtSTRUNGZMNTkrL2JsNWVW eFA0cVNwcFFRV1lUSk4zYjNrckNubVNpcklxTFN2VVJmOEJtVFBmYklPdVFvdmNHVm1EaFB6 OHZMNCtyMDZ1cHFmbno2OU9uQ1gvTG85MEtEcUdXRXRITkwyQ1lrSzFhczRDMU1xV3VtWVZp NWNtVlBUdy9Mc25WMWRmemZzNktrS1NWRWlqRDV4dTVlb242YXlXWlZSRlM2bCtnSVljYWt4 eDVaaHh5aTBKcEpoVmg1T25NamhKQmp4NDVsWjJlbnBLU3NYNytlWDJYbnpwMVdxNVgvRWYx ZTFPSFNJbW9aSWR1NVJkU0VSSlRNcnE2dVJZc1dtYzFtaDhOUlgxOVA1RjR2dy9EV1cyL05u ajNiYkRibjVlVjVQQjV1VUpRMGFVSUlkYjhYSHNOMEw2RTV6V1N6S3NwWVZMcVg2QUpweHNJ ZU8yV0hIQ0xKZkZqUTd3VUFBSXdEdmtjS0FBREdBWjRPQUFER0FaNE9BQURHSVQ3OVh1SzFI UUFBTURhNi9Jd1VGcTlDVDA5UFNVbEpjbkp5U1VsSmIyK3Y3Qnhwc3c2YTloMEdoaVpwMGpt SmZJOEFUY2FFRnNIZDlXL1VqQ2tkVjJWbEpUOUkyZTlGMUNXR0pzOGl4dXpweGN4Ym9vQ25h NHFISG5ySTVYSUZBZ0dYeStWME9tWG5TSnQxMExUdk1EQTBTVk9hazVobkkwM0dlRVM5U295 YU1kRnhuVGh4Z3VzS3gvMUkwKzlGdGtzTWZaNDVZdWpwb2w5Y24zNzZhVzV1cnRsc3pzM041 VzY4ZHpnY1o4NmNJWVI4OTkxM0RvZURYOFZzTmhjVUZMUzB0TWh1Qi9kUXFwT2VudTcxZWdr aFhxOVgvZXN6MG1ZZDZ1MDdEQXhOMHBUbUpPWjVTSCthU1h1VkdEVmp3dU5pV1RZdkwrL3R0 OStXSHF4S3Z4ZHBseGo2UFBQRXRrNFhQcFdUazdONzkyN3VlNlM1dWJtRWtKVXJWKzdjdVpO aG1OMjdkei81NUpQOHpGQW8xTnJhT24zNmRObnRTSDhFUXBLU2trWkdScFlzV1JJS2haVDZ2 UkM1WmgzU2tjU0JKbWxLY3hMemJLUTh6WWhjcnhLalpreDRYTTgrKyt3amp6eENKQWVyM3U5 RjJpV0dQczg4RStmcEpwT0o3L2RpTnBzSklYdjI3TG4zM252dnZQUE9GU3RXdlAzMjI0U1E3 ZHUzYzErK1ltN3M5d0pQcHljOVBYMXdjSkJRL0dLWE51dFFiOTloWUdpU3BqUW5NYzlHeXRO TXRsZUpVVE1tUEM3T3hFUlhGTUwyZTVGMmlhRi9PL1BFczA3djcrK2ZOR25TeXkrL2JMVmF1 VC9OVWxKU0doc2IvWDYvMiswV1hXOFJialk1T1ZuVTdCVHdQUGpnZ3hzMmJHQlpkc09HRFZ5 bElFWGFySU9tZlllQm9VbWEwaHlqT3BRNk5Ca2pDcjFLakpveDJlUGlCMm42dlVpN3hGRG1X VWlzUEoyNUVVSklhMnRyVGs2T3lXVEt5Y25oRHl3N083dTN0NWUvZ1B2Q0N5L1liRGFiemJa NTgyYm14disvSS94MXQyN2RPcTRuRE0wUkpocmQzZDJMRmkzaS9sVktUMDhQTnlqS2xiUlpo Mno3anNTQkptblNPYkluWjRKQWt6R2kwSXpJZUJsVE9TNytSOUVjMlg0djBpNHhzbmxXUjVm M01nSUFBSkFGM3lNRkFBRGpBRThIQUFEakFFOEhBQURqb0k5K0x3QUFBR2pBWjZSR0k3TFdK UkcwbFRBU1NOcFlRY2JHeW9SbGJNeWUvaGJ6bGlqZzZab2lzdFlsRWJTVk1CSkkybGhCeHNi S2hHVXNocDR1ZTZ2bSt2WHJyVlpyWVdFaEllVFlzV1B6NXMwVC9ZZFNNRTRpYTEwU1FWc0pJ NEdralJWa2JLeE1XTVppVzZkTFBmMlZWMTd4K1h4UFAvMDBJV1QrL1BrMU5UVit2NytxcWdx ZUhpMGlhMTBTUVZzSkk0R2tqUlZrYkt4TVdNWW0ydE9GM2NqTVpqUGZBUWFlSGkwaWExMFNR VnNKSTRHa2pSVmtiS3hNV01ZbTJ0T0ZQK2JtNW5KMWVuVjFOVHc5V2tUV3VpU0N0aEpHQWtr Yks4allXSm13ak1YSzAyVnZqQkhOYkcxdC9lbFBmNXFTa3VKeXVlRHAwU0t5MWlVUnRKVXdF a2phV0VIR3hzcUVaVXdyOXpMQzB3RUFZUHhvNVh1azhIUUFBQmcvV3ZGMEFBQUE0d2VlRGdB QXhpSE9ucjV6NTg3Smt5ZUh2ZkNDS3pNQUFFQkRuRDhqblQ1OStva1RKMFM3aUhocmdOQTFp R0JaZHUzYXRSa1pHZnpMbDhpTk9FaWt2VGc0S2lzckUvQ2twWC92Qy9Pelo4K2VPWFBtV0N5 V2hRc1hIajE2Tk1ZYTQ0bjBTSVdHbVo2ZUxydFdmWDE5VmxhV3lXVEt5c282Y09BQU4rSndP TGo3WHJxNnVtaDJQV1pQNzdndWp2R2MwTUovSk0zdkl1S3RBVUxYSUtLaW9xS3dzTENqbzJO MGRKUitMUU1UV1M4T1FzaUpFeWU0WDQwVEpsVlRoRDF3VVg0ZWV1aWhreWRQQmdLQlBYdjJH UHM3UnlwSHVucjE2ZzBiTnNpdVpiUFptcHFhV0piMWVEemMveU5OVDA5dmFXa0pCb051dC92 KysrK24yWFdzUEgzcjFxME9oOE5rTXZHL3pELzk5TlBjM0Z5ejJaeWJtOHY5UDFMWkc5aWx2 LytsNVFDRHZqSEswRFNJbURGanhrY2ZmVFRXdFF4TVpMMDRXSmJOeTh0NysrMjNFL2FzVXo5 d2xmejA5ZlZaTEJiaHQ4cU5pdWhJTDEyNmxKcWFldmJzV2RuSkJRVUZodzRkQ2dhRHpjM05D eGN1SklTa3A2Y2ZQbnlZODNUS2YvNGVLMCtmUEhseVpXVmxSMGRITUJqa1JuSnljbmJ2M3Mx OWF6UTNONWZmb0hRWHN2c1YvWWkrTVVyUU5JZ3dtVXd1bDh0cXRXWm1abkwvQWppUkczR1FT SHR4UFB2c3M5eFgreEwyckZNL2NLWDhmUC85OThYRnhjODg4MHhzeFdrQTZaRnUzcno1c2Nj ZVU1cmYxdGFXbXByS01FeHFhdXJ4NDhjSkliVzF0YmZkZHR1a1NaT2VlKzY1V1BWN29mVDBE ei84OE41Nzc1MDdkKzR0dDl6eSs5Ly9uaEJpTXBuNDdpNW1zNW5mb0hRWHN2c1YvWWkrTVVy UU5JaElUVTExdTkzQllMQ2xwWVc3dEpmSWpUaElwTDA0a3BLU292dk5POTJoZnRTeStmbnl5 eTluejU3dGNybEdSa1ltUkdQY2tCN3A4UEJ3Wm1ZbVo5YXlaR2RuZXp3ZWxtWGRibmRPVG83 d3FhTkhqODZjT1pObXY3RzluajR5TW5MMDZGR3IxVXFvNi9UazVPVHU3bTdwZmxWK1JOOFlJ VFFOSWxhc1dNRjdPbWRQaWR5SWcwVGFpNE1uWWM4NnlnUG5wOVhVMUJRWEYzT1hYbzJON0pI VzF0YVdscGFxckRWbHloU1B4eE1NQnB1YW1yanI2WVNRMGRIUnpzN08vUHo4aW9vS21sM0h5 dE81Mzh4SlNVbXpaczE2NDQwM0NDR3RyYTA1T1RrbWt5a25KNGMvVk9tNjY5YXRTMGxKa2Iz Q0xod1Vyb0srTVVKbzJrcDBkWFV0V3JUSWJEWTdISTc2K25xbHRSS0h5SHB4OENUZ1dVZnp4 aFJPbGwxcmFHaG9ndVJPT0xKSHVtalJJdTVTcDNDYThNZmEybHFIdzhIWlpsMWRIYitkakl5 TU5XdldzQ3hMczJ1dDlIdUpGcG9TQXdBQUU0elJ2a2NLVHdjQUpESkc4M1FBQUVoazRPa0FB R0FjTk8zcEdyeGVEd0FBV21aQ1B5T056SjNoNldPQzVrVVJ2bmJjL2VuMTlmWHo1ODlQVGs0 dUtpcjYrT09QSjBxc1ZxQkptclRmaXpTTmlRUE5DU1BOVCtKVWFaSDFlK0VRZHNpSklHTmo5 dlRya29DbmF4REtwUEd0SjV4T1owZEhCOHV5Qnc0Y21EWnRXb3pWYVJUMXBLbjBoRkhwNEdG VXhuVENpUEtUQ08vb3lQcTlFSVVPUXByd2RHbS9GMmxkMzluWnVYanhZb3ZGTW5mdVhPNVhQ ZmVzMld3dUtDaG9hV21KNEhnQUIwM1NwSzBuL0g1L1hWM2R2SG56WWlsTnU2Z25UYWtuakhv SEQyTkRjOEpJODVOUTcrZ3g5WHRSNnBDakNVK1g5bnVSS2lzcUtucm5uWGRZbG0xcWFwbzdk eTQvSGdxRldsdGJwMCtmSHNIeEFBNmFwSWxhVC9CL0ZYNzU1WmV4bEtaZDFKT20xQk5HdllP SGdhRThZYVQ1U1p4MzlGajd2U2gxeU5HRXAwdjd2VWlWbWMxbXZuTG5tdTV1Mzc2ZCt4b1ZQ ekxXNHdFY1laTW0yM3JDNS9QdDI3Y3ZMeTh2bHRLMFM5ZzZYZG9USm13SEQyTVQ5b1NSelUr Q3ZLTWo2UGVpMUVGSUU1N09JZXozUWlTOVhJcUxpeHNhR2dLQkFEK1NrcExTMk5qbzkvdmRi amUvMmVuVHB5ZHM1Umd4WVU4Q1VldUpsU3RYOXZUMHNDeGJWMWRIMmRMVGVLZ25UYmJmUzln T0hrYUY4b1NSelU4aWVIcGsvVjU0dEZpbmM3OW5oUDFlaUtTWHk2bFRwKzY2Nnk1dWhCdDg0 WVVYYkRhYnpXYmJ2SGt6UDIzbnpwMVdxelVSem9Pb3dOd0lQeWlhSm1vOThkWmJiODJlUGR0 c051Zmw1WGs4bm9tVHF3MW9raWJiNzBYYXdTTkJrRDFod3A1bXNuazJKS0lqcGV6M0loMlBJ R05HNi9jQ0FBQ0pqS2EvY3dRQUFHQk13Tk1CQU1BNHdOTUJBTUE0d05NQjBEVDR2QXFNQ1hn NkFESkU3S1JSdDJDVkRVWmxYd3pEdlBMS0s0U1FsMTkrZVR3YlpCaG15NVl0NHhjbTdaUlNY MStmbFpWbE1wbXlzcklPSERpZ3RIZlIvUm9zeTY1ZHU1YjducjJTSHZVZVBrb0twV3RKTmRN Y2w4cmVWWTRyTFBCMEFHUklLRS9QeWNrWkhSMmROMi9lT0QwOU96djc2dFdyNHhRbTdaUmlz OW1hbXBwWWx2VjRQUHgvNlZUU3dEK3VxS2dvTEN6czZPZ1lIUjFWMlplb2h3K05jdWxhS3Qx ZFZJNUxxWU9RVkFNOEhZRHhJdnUrWW01c1JrVFQxRWg5eS94YUZSVVZLU2twOCtiTmEydHJJ NFMwdGJYbDVPU2twS1JVVkZRSXR5emN1M1JmMGdaS3NnY2kxYk5reVpLWFhucHA2ZEtsM09S UFAvMDBOemZYYkRibjV1WnkzNXBoR09hMTExNUxTMHRMVFUzZHRXdVgwbllxS3l0ZmZQRkZm cWZTN1JRV0ZuTGlEeDA2dEhEaFFuVmhmS2VVZ29LQ1E0Y09CWVBCNXVabTliV0VCenRqeG95 UFB2cElaUUtSNitIRE1Jek5ack5hcmZmY2N3Ly9CY213YTBrMTB4eVgwbmJnNlFCRUg2VjNr YkFaRVUxVEkvVXQ4MzVkWFYzdDkvdHJhbW9XTEZoQUNKay9mMzVOVFkzZjc2K3FxaExPVjIr RnBOUkFLYXlldlh2M0ppVWw3ZHUzajl0Z1RrN083dDI3L1g1L2RYVjFibTR1TjJmNzl1MSt2 Nyt4c1ZHcERtVVlabWhvYU02Y09aY3VYVkxhenRhdFc4dkx5d2toWldWbDI3WnRVMUVsN0pU UzF0YVdtcHJLTUV4cWFxcDZHd1poUWt3bWs4dmxzbHF0bVptWlN0OExVK3JoYy83OCtZcUtp cEtTa2pHdEplM3VvbjVjU3R1QnB3TVFmYVR2SW1reklwcW1SaXBiSGg0ZTVqM2Q3L2NUUXZ4 K3Y4VmlJWVNZeldadXhPZnpjWE5vV2lGSkd5aU45VWk1eHlhVGlkKzcyV3pteG9lSGg5VVBr QnZmdEduVDczNzNPNlh0L1BERER6YWI3Y3laTXphYjdlTEZpMHFTUkoxU3NyT3pQUjRQeTdK dXR6c25KNGZ5V0ZKVFU5MXVkekFZYkdscFVlcFhMdHZEaHlNUUNIQ3ZCZVZhMHU0dVlZOUxh ZS93ZEFDaWovUmRKTnVNaUlScmFpVEZicmMzTnpjSEFvRWRPM2J3bnM3VnN6VTFOZlBuenll RTVPWGxjWFY2ZFhVMU4wZDI3MkViS0kzMVNGWHFkSlhNQ01kOVB0K3NXYk9VdGtNSWNUcWRk OXh4UjFsWm1aSWVhYWVVS1ZPbWVEeWVZRERZMU5SRWZ6MTl4WW9Wdktjci9XMGgyOE9IRUhM MTZ0V1hYbnFwdUxpWWNpM1o3aTVoajB0cDcvQjBBS0lQY3lORXJoa1I5NVI2VXlNcDFkWFZO cHN0TFMxdDI3WnRvdXZwMmRuWng0NGRJNFFjTzNZc096czdKU1ZsL2ZyMVNudVg3a3ZhUUls RWRDMm90YlUxSnlmSFpETGw1T1R3MTlObDU4dHVaOHVXTFVyYklZUWNPblNJWVpoRGh3NnA2 QkV5TkRSVVcxdkwvWTB5YTlhc3VybzZtclVJSVYxZFhZc1dMVEtielE2SG83NitYbGE4dElj UHQvck5OOTk4MTExM25UNTlla3hyQ1RYVEhGZlk3Y2lPaEFXZURrQ2NHVk1WQm9BNjhIUUE0 Z3c4SFVRUmVEb0FBQmdIZURvQUFCZ0hlRG9BQUJnSGVEb0FBQmdIZURyUUJ3ME5EWTJOamFG UXFMR3hzYUdoZ1hJVjlXZVZKdmg4UHJmYkxUdGZaUzBBdEFBOEhlaURob2FHVHo3NTVILy85 My8vK3RlL1JzdFZsYmJ6MVZkZlNaK0NsUU5kQUU4SCtxQ2hvZUhVcVZNZWorZlVxVk84dllv ZU5EUTB0TGUzZXp5ZXpzNU9wVUhSTnFVN3VucjE2cUZEaDJROTNlUHhIRDU4ZUdCZ0lLcEhC a0EwZ2FjRGZkRFEwUERERHovd1MzNVErS0Nob2VIaXhZcytuNC83VC9heWc2SnRTbmYweFJk ZmRIVjF5VDQxT2pvNk1ERFEzTndjdmNNQ0lNckEwNEUrYUdob0dCMGRQWExreU9qb0tHKzRI by9INS9QeExpKzFlT21nYUp1eU8xSzZiajQ2T2pvNE9BaFBCMW9Hbmc3MGdkQmgrY2Vkblow ZWo2ZTl2VDBDVHhjWnQvUlo2WU9HaG9iRGh3K2ZPM2N1bWdjR1FGU0Jwd01BZ0hHQXB3TUFn SEdBcHdNQWdIR0Fwd01BZ0hHQXB3TUFnSEdBcHdNQWdISDRoNmUzdGJYdEJRQUFvSDhZR0Rv QUFCaUcvdzlSMWorN1dPODFFUUFBQUFCSlJVNUVya0pnZ2c9PSIgLz48L3A+PHA+Jm5ic3A7 PC9wPjxwPkluIENQVSB1c2FnZSBvZiB0aGUgRG9tVSwgdGhlcmUgaXMgYWxzbyBub3QgbXVj aCB0byBzZWUsIGV2ZW50dWFsbHkgYSB2ZXJ5IHNsaWdodCBjaGFuZ2Ugb2Y8L3A+PHA+bWl4 OjwvcD48cD4mbmJzcDs8L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZzti YXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZFQUFBRnNDQUlBQUFCVHFCZTNBQUFn QUVsRVFWUjRuTzJkZTNBVVpiNzNtOHhNQ0lObUpnbGhBNFloQVVNdUpNRVFEZ0t2VXJ6V2Uw VFJYWEVEdXF4b25WcFhUaDFBSXhHdDlXaXhXVUIyQlFRbGtDTUhoUkFJb3VuSkRiTENoa3Np Y0lwQXdpS1N5QjNrbXBucHllMzU1NjE2LytEOW8zZmJabnBtK3BsT1pxWXYzMC85cW12eXpE UGQzMzZtK3p1LzlQVDhIdWJ2QUFBQWRFRnpjek1UYlEwQUFBQUdnZWJtNXUzYnQvL0Qwd2tB QUFBdHMzMzdkbmc2QUFEb0JIZzZBQURvQjNnNkFBRG9CM2c2QUFCb2lXb0o0bWZoNlFDRUJZ WmhvaTFCRlJwQW1PanY3K2ZkSEo0T1FDUlFnNStxUVFNSUI3Mjl2YWRQbjJaWjlzNmRPelUx TmVLbjRPa2c3TFMzdC8vcVY3OUtTRWlJalkyZFBIbnlybDI3K0hibW44VEh4Ny80NG92WHIx OFgycVVyMFp3OXFVR3dHalNBUWFlenM3T2hvYUdscGVYU3BVczFOVFduVDU4V1B3dFBCK0hs N05tenYvakZMelp1M1BqVFR6OXhISGYwNk5FWFhuaUJmMHB3bkd2WHJ2M21ONy81NVM5LzZk TXVSblAycEFiQmF0QUFCcDBqUjQ3Y3VYTW4wTFB3ZEJCZVhucnBwYi84NVM5K254STd6czJi TjYxV3E3VGRiK2RBamNLZlRxY3pPenZiWXJFNEhJN05temZ6alQvODhNT3p6ejQ3ZlBqd29V T0gvdXUvL3V1MWE5ZjRkcmZiL2R2Zi90WnF0WTRjT1hMVnFsWENTbnA3ZTB0S1NrYU1HREZz MkxDaW9xSjc5KzdSN3pVdlp0V3FWY25KeVZhcmRlSENoUnpIRVVKbXpKaXhZOGNPb1U5bloy ZEtTb3I0L0V4UFR6OTE2aFQvK1BQUFArY2ZuRHAxS2owOVBZaWtRTzNDdm56MzNYZWpSNC8r K09PUFE5b0ZvRVhnNlNDOGpCdzU4dkxseTM2ZkVqdnlyVnUzQnRIVGs1S1NkdS9lelhGY1oy Zm5hNis5eGpkbVpXWHQzNy9mN1hiZnVYTm44ZUxGTDcvOE10LysxbHR2UGZmY2M5ZXZYNzkr L2Zxenp6NHJyT1RERHo5ODZxbW5MbHk0Y08vZXZWZGVlZVgzdi84OS9WN3pZbWJQbm4zdDJy VnIxNjdObmozNzdiZmZKb1RVMXRabVptYjI5Zlh4ZlY1NzdiV1ZLMWVLWC9YR0cyOXMzTGlS RUhMaHdvV0hIbnFJZCtjTkd6WXNXclFvaUtSQTdmeStWRmRYanhneFl1L2V2U0hwQjZvRjk3 MkFhR0kybTN0NmV2dytKYmpuOWV2WFgzbmxsZWVlZTg2bjNXL25JSTNDbjZtcHFldlhyNzl3 NFVJZ1ZTNlhhOFNJRWZ6ajBhTkgvL0RERC96ajc3Ly9YbGlKdytFNGMrWU0vL2pxMWFzalI0 NE10RGEvTUF6ei9mZmY4NC9QbmozN3lDT1A4SThMQ3d1Ly9QSkxvZEhsY29sZjlmWFhYeGNW RlJGQ1ZxNWNPV0xFQ1A2ZmpGLy8rdGZmZlBOTkVFbUIyaG1HK2VTVFQwYU5HdFhjM0J5U2VL QitjTjhMaUE3QjgzU2VoeDkrK0lVWFhyaDY5U3JmSGhNVDA5dmJLKzdaMjlzYkV4UGpkdzEr LzJ4dWJuNzIyV2NURXhQVDB0SjROeVNFSERwMGFQcjA2VmFybGQvb2tDRkQrSGFUeVNSc3Jx ZW5SMWlKMld4bVJBajkvZTZDMzZmRXF6V2J6Znpqdlh2M1ptUms5UGIyenA4L2Y5MjZkVDZ2 NnVycUdqTm1EQ0ZrNHNTSkxNcysvdmpqaEpBeFk4YncxaDlJVXFCMmhtSFMwdExlZWVjZHFU eWdhWERmQzRnYUw3MzAwdHExYS8wK0ZlZ2JQSWZEOFQvLzh6L2lsdVBIanpzY0RtbFBzOWtz NUxrLy9mU1R6d3I3Ky90Wmx2M0ZMMzdCL3psNjlPaUtpb283ZCs3MDkvZmZ2WHRYNkR4cTFD aS9lWHBxYXVyRml4Y3BkdEUvNGp6OSsrKy9IejE2dEtCcTRzU0p4Y1hGRG9mRDYvVktYL2pr azAvdTNMbXpzTENRRUZKWVdMaDM3OTZaTTJjR2x4U29uV0dZQ3hjdWpCczNidlhxMVlwM0JL Z04zUGNDb3NuWnMyZFRVbEkyYmRwMDgrWk5qdU9hbTV1bDk3MzQ4S2MvL2FtZ29PRElrU01j eDNFY2Qvanc0VW1USnZsMXBZS0NnZzgrK01EbGNsMjhlSEh1M0xuQ0N1Zk5tM2Y2OUdtdjE4 dXliRkpTRXQrWWtKQ3dkKzllanVOKytPR0hvcUlpb2ZPYmI3NzUvUFBQMzdoeDQ4YU5HK0xy NlgvODR4OW56NTU5N3R5NW5wNmVreWRQOHBkRTZHRVk1dGxubitVdjB6L3p6RFBGeGNYQ1V4 VVZGUXpEYk5teXhlOExWNjVjT1hyMGFENkZYN3QyN1NPUFBMSnExYXJna2dLMTgvdHk2ZEts akl5TTB0TFNrUFFEMVlMN1hrQ1VhV3RyKytVdmYybXoyV0pqWXdzTEM4WDNwL3Z0MzkvZnYy N2R1b2tUSnc0ZE9uVG8wS0VUSjA3ODVKTlAvUFk4ZnZ6NHBFbVR6R2F6dytIWXVIR2pzTUlk TzNaa1pHU1l6ZWJzN096YTJscSs4YXV2dmtwTFN6T1pUR1BHakZtM2JwM1EyZVZ5L2VZM3Z4 azJiRmh5Y3ZJZi8vaEhpOFhDdC9mMTlaV1dsam9jRG92RmtwT1RVMUZSRWRKZWkrOTdlZVdW Vnp3ZWovRFVybDI3eG84ZkgraHJoaE1uVHBqTlp2NXUvV3ZYcnBuTlp1Ry9sa0NTQXJVTCsz amx5cFhNek13UFAvd3dwRjBBV2dTZURzRFB0TGUzangwN050eGJtVE5uenZidDI4TzlGYUJY Y044TEFESXNXYkxrMXExYlY2NWNtVDE3OXRLbFM4TzNvYjYrdnJLeXNxeXNMT0YyUmdCQ3hj ZkU0ZWtBK1BMeHh4OG5KU1VOSHo3OHBaZGU2dXJxQ3QrR0dJWnhPQnk0c3hBTWhKcWFtdTd1 YnY1eGQzYzM3bnNCQUFBTjA5emNmT3JVcVo2ZW5wNmVubE9uVHJXMHRJaWZoYWNEQUlDVzhI ZzhSNDhlZFRxZFRxZXp1YmxaL1BVN2dhY0RBSUNtd2ZWMEFBRFFEL0IwQUFEUU1BYTZsL0Zj WStPNXhzWm9xd0FBZ01paFcwL3Y0YmdOMDZkdm1ENjloK09pclFVQUFDS0ViajM5Yng5L1hP cHdsRG9jZjBQaGZ3Q0FVZEdKcDkrNWNHRjFSZ2J2NmFzek11NEVMcHdOQUFDYXh1MTJOemMz Qy9jeXV0MXU4Yk5xOFhScEhlcUxGeTlPbXpZdE5qWjIyclJwZkIxUmFZdEE1YXV2OG9iT1Ir V3JyMFo2QndBQUlDSTBOVFdkT1hPbXU3dTd1N3U3dmIyOXFhbEovS3hhUEoxSDdPbno1czBy S1NueGVEd2xKU1h6NTgvMzIrTERlKys5UndpNWRPa1N6YmE2MjlwaysxQ3VpcVliVk5GM2d5 cjZibEJGMzAyZHFoVEFzcXhRTDZpdnI0OWxXZkd6NnZYMHBLUWtmdUticTFldjhpV3dwUzAr dlBmZWUvZmJtTmFhLzNPL2paRU56K3A4MlQ2VXE2THBCbFZRRlJWVmhjeFdGYXBTNTFoRldK VmluOVJxbmg0VEU4Ti9GdlgyOXBwTUpyOHRBcjAvL1hUM3M4K1d2L0VHMlo3NmYwOE9JOXRU NzdjeHdaZTlXOGJKOXVuNVFyNFA1UmFoQ3FxaW9tcFo2Z29WcWxMbldFVlkxZi9qdUx1ZmZl WnRiUTNWSjEwdWx3YXVwL09JUFQweE1kRW5LNWUyK01EbjZWY081dDZuK0FnbEZhbXlmU2hY UmRNTnFxQXFLcXI0UEYxdHF0UTVWcEZXZGY5K09GeFV2WjVlVkZRa1hEM241K0tTdHZqQWV6 b0NnUkNDOTNTRUdrT3BwMnZzdmhmaDdwY2ZmL3h4NnRTcEZvdmw4Y2NmdjNEaGd0OFdINUNu UXhWVStRVHlkUFdxVXVycFdycWVQa0NRcHlNUVBvRThYYjJoMU5PMWROL0xBRUdlRGxWUTVS UEkwOVdyQ25tNkxNalRFUWlFWmtLcHAydnB2cGNCZ2p3ZHFxQUtxalNqeWdqM3ZRd1E1T2tJ QkVJem9kVFREVkUvdmJ1N3U2T2o0M2UvKzkzOU51WUVPK2QrRzNQMTRNVGdTMUtSS3R2bnlz RmMyVDZVVzRRcXFJSXFxQkl2TDE2ODJOSFJvYUIrZ0krSis2QVRUK2RCbm81QUlEUVRBOGpU Z3p5clEwOVgzVld6VUZZRlZWQUZWVVpSQlUrWEJYazZBb0hRVE9BN1VsbVFwME1WVkVHVlps VEIwMlZCbm81QUlEUVRpang5Ly83OXJhMnRWNjllN2UzdDlkdEJ2WjdPc3V5NGNlTmlZMk5u enB6SmwyTU1NczhSRC9KMHFJSXFxTktNS2tXZWZ2ZnUzWFBuemgwK2ZMaW1wdWJ3NGNQbnpw MjdlL2V1dUlONlBUMDVPWmxsV1k3aldKWmRzR0FCb1p2bmlHYWdFUWdFSXZveHNHc3ZQVDA5 VjY5ZWJXMXQzYjkvdjdoZHZaNmVsSlRFc3F6WDYyVlpkc1NJRVlSNm5pUFZmUnFIc2lxb2dp cW9Nb29xbzExUHI2cXFHak5tekxCaHd4WXZYbXcybXduMVBFZjNLZVlmd1JKTExMR003bEx4 UEVmQlVhK25DN0FzNjNBNENPWTVnaXFvZ2lvOXFUSmFuazRJNmUvdlAzMzZkRlpXMXAvKzlD ZUNlWTRRQ0lTZVlwQThYVFAxWHZnSmoxSlNVdjd6UC8rVHYrU0NlWTZnQ3FxZ1NqK3FqT2Jw Q2tDZWprQWdOQk9veXlnTDhuU29naXFvMG93cTVPbXlJRTlISUJDYUNYaTZMTWpUb1FxcW9F b3pxZ3g0M3dzOTRqa3hhR3JWWTRrbGxsaEdkNmw0VGd5MzI0MzVTSkVqUUJWVVFaWEtWQ25O MDV1YW1zNmNPZFBkM2QzZDNkM2UzdDdVMUNSK1ZvZWVqa0FnRUJvSXBaN09zaXgvZXpjaHBL K3ZqMlZaOGJNNjlIVFZmUnFIc2lxb2dpcW9Nb29xNU9teUlFOUhJQkNhQ2FXZTduSzVjRDNk VHhnOVI0QXFxSUtxNktveTJuMHZWVlZWNmVucEpwTXBMUzJ0cXFxS1VNK0pnVUFnRUJvSW8v Mk9ORDQrM3VsMDhuTmkyR3cyUWowbmh1bytqVU5aRlZSQkZWUVpSZFVBUEoySWZtcWtHVS9Q emMxMU9wMzhuQmo1K2ZtRWVrNE1CQUtCMEVBbzlYU24wM252M2oyV1plL2V2WHYzN3QzYTJs cnhzK3IxOUtOSGo4Ykh4ek1NRXg4ZmYvVG9VVUk5SjhhVmc3azBOZWs5Sy9ObCsxemRORTIy RCtVV29RcXFvQXFxeEV2RmMyS2NPbldxcHFhbXM3TnovLzc5VHFmei9Qbno0bWZWNituang0 OFhycjA4K3VpamhIcE9EQVFDZ2RCQUdPMDdVcnZkTGx4N1NVaElJTlJ6WXFqdXFsa29xNElx cUlJcW82Z3kybmVrbFpXVkRvZkRaREtOSFR0MjkrN2RoSHBPREFRQ2dkQkFHQzFQVndEeWRL aUNLcWpTakNwNHVpekkweEVJaEdZQ25pNEw4blNvZ2lxbzBvd3FlTG9zeU5NUkNJUm1RcW1u bzM2Ni96QjZqZ0JWVUFWVjBWV0Z1b3hCd0R4SFdHS0pwYmFXaXVjNVF2MzBhSDhhcXpOSGdD cW9ncXJvcWtLZUxndXVweU1RQ00wRTZxZkxnandkcXFBS3FqU2pDdmU5eUlJOEhZRkFhQ2FN Vmh0QUFjalRvUXFxb0VvenFveFdQNTBSa1ppWVNERFBFUUtCMEZNWXpkTUZEaDgrL082Nzd4 TE1jd1JWVUFWVmVsSmxXRStmUFh2MjVjdVhDZVk1UWlBUWVvcEIrbzVVWTU3ZTFOUzBZTUVD L2pIbU9ZSXFxSUlxM2FoU1BNK1JEeHJ6OUZtelpoMC9mcHgvakhtT0VBaUVmc0tBOTcwY09I RGdpU2VlRVA3RVBFZFFCVlZRcFI5VkJyejI4dVNUVDM3MTFWZkNuNWpuQ0lGQTZDY002T21o Z2p3ZHFxQUtxalNqQ3I4amxRVjVPZ0tCMEV3WThIcDZxQ0JQaHlxb2dpck5xRUtlTGd2eWRB UUNvWmxBbmg0RThad1lKOWc1OXlscTBwT0tWTmsrVnc3bTB0UzJwOWtpVkVFVlZFR1ZlS2w0 VGd4Q2lOZnJQWERnUUUxTnpmWHIxMzJlMG9tbjh5QlBSeUFRbWdtbGVUcHY2R2ZPbkxsMTYx WmRYZDJkTzNmRXorclEwMVYzMVN5VVZVRVZWRUdWVVZRcDlmUnZ2LzFXc092TGx5ODNORFNJ bjlXaHB5TVFDSVFHUXFtbiszajErZlBueFgvcTBOTlY5MmtjeXFxZ0NxcWd5aWlxOEIycExN alRFUWlFWnNKb3RYYjcrdnJlZi8vOVVhTkdEUmt5aEdFWVFqMG5odW8ralVOWkZWUkJGVlFa UlpYUlBIM0ZpaFVUSmt4b2JXM3Q3Ky9uV3lqbnhFQWdFQWdOaE5FODNlRndzQ3dyYnFHY0Uw TjFuOGFockFxcW9BcXFqS0xLYUw4ak5abE1TNVlzR1Rac21NUGgyTHQzTDZHZUUrTStSYTE2 TExIRUVzdm9MaFhQaWFIVjcwaVRrcEpZbHVVNGptWFpFU05HRU9vNU1WVDNhYXpPSEFHcW9B cXFvcXRxWUhsNmYzKy96MFVZSHZWNit2ejU4MW1XOVhxOUxNc21KeWNUNmpreEVBZ0VRZ014 QUUvdjdlMDlmZm8weTdKMzd0eXBxYWtSUDZWZVQ3OTA2ZElUVHp4aHNWalMwOVA1Qyt1VWMy S283dE00bEZWQkZWUkJsVkZVS2ZYMHpzN09ob2FHbHBhV1M1Y3UxZFRVbkQ1OVd2eXNlajFk QWNqVEVRaUVaa0twcHg4NWNzU254b3NZSFhxNjZqNk5RMWtWVkVFVlZCbEZsZEh1ZTFFQThu UUVBcUdaZ0tmTGdqd2RxcUFLcWpTakNwNHVDL0owQkFLaG1ZQ25Cd0h6SEVFVlZFR1Z0bFFO Wko2aklPakUwM21RcHlNUUNNMEU4blJaY0QwZHFxQUtxalNqQ3A0dUMvSjBCQUtobVlpaXAz LysrZWNKQ1FrSkNRbi8vZC8vSFE0Umd3WHlkS2lDS3FqU2pLb0llenJIY2NKanU5M2UwdExT MHRLU2tKQVFEaEdEQmZKMEJBS2htWWl3cDQ4Wk02YTh2THkzdDVkRXlkTVpFWHdMNWptQ0tx aUNLdjJvaXJDbk56VTF6Wmd4SXlNalkrZk9uVnUyYkxIYjdYYTcvZlBQUHcrSENMOElWaTZB ZVk0UUNJUitJaXJYMDUxTzUyT1BQWmFmbis4ejVWQUVZQmptNFljZnRscXRzMmZQN3Vqb0lK am5DS3FnQ3FyMHBDckNuaTU4TDdwMTY5YWRPM2RtWkdSTW16YnR3SUVENFJBUmhHdlhyaFVY RjArZE9wVmduaU1zc2NSU1IwdkY4eHdGSjZDbkp5UWtORGMzQzlmUWUzdDd0MnpaTW1iTW1N SGRQQTF1dDl0aXNSRE1jd1JWVUFWVmVsSVY0VHpkNy9laTRwdGhJc1B0MjdmZmUrKzl3c0pD Z25tT0VBaUVuaUxDbmw1ZVhoNzU3MFhGOEhlOHhNWEZ6Wm8xNit6WnN3VHpIRUVWVkVHVm5s VGhkNlN5SUU5SElCQ2FDWGk2TE1qVG9RcXFvRW96cXVEcHNpQlBSeUFRbWdsNHVpekkwNkVL cXFCS002cmc2VUVRejRsQlU2c2VTeXl4eERLNlM4eUpJUS95ZEtpQ0txalNqQ3JrNmJMZ2Vq b0NnZEJNd05ObFFaNE9WVkFGVlpwUkJVK1hCWGs2QW9IUVRNRFRaVUdlRGxWUUJWV2FVV1ZN VDMvLy9mZERuUk1EZ1VBZ05CQUc5UFNXbHBhVWxCVEIweW5ueEZEZHAzRW9xNElxcUlJcW82 Z3ltcWQ3UEo2SkV5YzJOallLbms0NUp3WUNnVUJvSUl6bTZZc1hMLzd6bi85TVJKUFlVYzZK Y2VWZ0xrMU5lcy9LZk5rK1Z6ZE5rKzFEdVVXb2dpcW9naXJ4TXRKellrU2RJVU9HK0V3elRU a25CZ0tCUUdnZ2pKYW5Dd2g1T3VXY0dLcTdhaGJLcXFBS3FxREtLS3JnNlpSellpQVFDSVFH d3JDZVRnL3lkS2lDS3FqU2pDcDR1aXpJMHhFSWhHWUNuaTRMOG5Tb2dpcW8wb3dxZUxvc3lO TVJDSVJtQXA0dUMvSjBxSUlxcU5LTUtuaDZFRERQRVpaWVlxbXRKZVk1a2dkNU9sUkJGVlJw UmhYeWRGbHdQUjJCUUdnbTRPbXlJRStIS3FpQ0tzMm9ncWZMZ2p3ZGdVQm9KdURwc2lCUGh5 cW9naXJOcURLYXAxZFVWR1JrWkZnc2xyeTh2SWFHQm9KNWpoQUloSjdDYUo2K1lNR0NqbzRP dDl1OWMrZk94TVJFZ25tT29BcXFvRXBQcW96bTZUd2N4KzNldlRzM041ZGduaU1FQXFHbk1L Q244N05oMk8zMkkwZU9FTXh6QkZWUUJWVTZVbVc0ZVk1NCtHc3Y0OGFOSTVqbkNJRkE2Q21N bHFjdlhyejQrdlhyYnJkNzE2NWRJMGVPSkpqbkNLcWdDcXIwcE1wb25sNWVYajVxMUtqWTJO akpreWYvOWE5L0paam5DSUZBNkNtTTV1a0tRSjRPVlZBRlZacFJCVStYQlhrNkFvSFFUTURU WlVHZURsVlFCVldhVVFWUGx3VjVPZ0tCMEV6QTA0TWduaFBqQkR2blBrVk5lbEtSS3R2bnlz RmNtdHIyTkZ1RUtxaUNLcWdTTHpFbmhqekkweEVJaEdZQ2Vib3N1SjRPVlZBRlZacFJCVStY QlhrNkFvSFFUTURUWlVHZURsVlFCVldhVVFWUGx3VjVPZ0tCMEV3WXpkTXJLeXV6c3JJVXpJ bWh1ay9qVUZZRlZWQUZWVVpSWlRSUGYvSEZGMXRiV3owZXorYk5tL2txakpSellpQVFDSVFH d21pZUx0RFIwZUZ3T0FqMW5CaXErelFPWlZWUUJWVlFaUlJWeHZUMEsxZXVGQlFVZlAzMTE0 UjZUb3o3RkxYcXNjUVNTeXlqdXpUaW5Cak56YzBPaDJQYnRtMzhuNVJ6WXFqdTAxaWRPUUpV UVJWVVJWZVYwZkwwc3JLeTVPVGt1cm82b1lWeVRnd0VBb0hRUUJqTjA1a0g2ZXJxb3B3VFEz V2Z4cUdzQ3FxZ0NxcU1vc3BvbnE0QTVPa0lCRUl6QVUrWEJYazZWRUVWVkdsR0ZUeGRGdVRw Q0FSQ013RlBsd1Y1T2xSQkZWUnBSaFU4WFJiazZRZ0VRak1CVHc4QzVqbUNLcWlDS20ycHdq eEg4aUJQUnlBUW1nbms2YkxnZWpwVVFSVlVhVVlWUEYwVzVPa0lCRUl6QVUrWEJYazZWRUVW VkdsR0ZUeGRGdVRwQ0FSQ00yRTBUeGNxdlFndG1PY0lxcUFLcXZTanltaWV6aVAyZE14emhF QWc5QlB3ZE14ekJGVlFCVlg2VVFWUHh6eEhXR0tKcFc2V1Jwem5pRHpvNlpqbkNLcWdDcXIw b3dwNU91WTVRaUFRK2dtamViclBQRWVFRU14ekJGVlFCVlg2VVdVMFQxY0E4blFFQXFHWmdL ZkxnandkcXFBS3FqU2pDcDR1Qy9KMEJBS2htWUNueTRJOEhhcWdDcW8wb3dxZUhnVHhuQmcw dGVxeHhOSVF5OVVUNzVkR1c0UEtsOUViSDh5SklRL3lkS2lDcWdlaWxHRVc3Vk9kS2pXTkZi Tm9uekJLa1ZhRlBGMFdYRTlISU1UQkxOckhlOWI5MHVpTFVXZndReVQyOU1nRlBGMFdtVHo5 d1NOYkRUbUNOS0JLTTZvQ3VPUmdxbG85MExGaUZ1MWoyaGhtMFQ1U2pIY3dRSjcrejRpQ0tu aTZMTUh5OUZMa0xJakJqSDhjUytIZXhBRFh3RWUwOGxBdGhOVFRJeGZ3ZEZtQzVPbi9TRmhF eDdjYWNnUnBRSlZXVkFVeXlrRlVsVnV5ZDBDckt2M1pzSDVWa1NxYnpTai83MEd5WmsyOGd6 NURKT3dDOHZUSVFUVW5oczlSVy9xUFlOb2VDS0ZkL3lFWkNnMkV6enZZRnVEWlFWbS9zaWdW SlhlRHVGckpKbVJXRzNTN1ArY3hnNXF0KzY2a1ZQSXZTemhHSXp6eHdCRDUvY2ZMNzc0TTFu SCtUMCt2Zk8yMTJ6LytPRmcrcVNWUHA1b1RvNVM1c2pwWEdEWGZ3MXIwL3BIaTFQdWxvbTlJ U24vK0JseUkzSks5NGovRm5jVTlBM1dqWE5YUGY3WXh2M3J0VStrbUtGWDUzV0x3bzhwM3JF VGJFaHJ2bHpMOFdQMTg5b3BlSXZTL3NqcVhYaFcvc3o3cjhhdktSNTY0cDZBcVVKOUFZeVU5 Uy8rUlQ0VTBWdjlNRG53MktsVVZmRldCZ21samNnL21CczgvK0IwTXNnWnhuaTZiemRDb3Vs L0s1QjU4b0p0NEtHUlVTVDRWb3A2blM1MkI4aDBNZUZ3OWVLcnlRK3IzdEdJVzdSTTh2ZFRo V0QxaHd0OCsvcmpINHhtNFQyckowMm5teFBEdjRBaUVUNGl2eGJVRi91eEhoUFV0K09lbis4 OS9pdCtVSUs5cUV4bWwzNWZUdktIUmZ0UEZuczdIeHYvMXY3N2Z2MytBUHFrbFQvYzdKMFo3 ZS9zNzc3eFRzblRwVzg4Ly83OW56SGo3bFZmKzdkLys3ZTFYWG5ubm5YZUNMOTk4K21uWlBy OS80UVhaUHBSYmhDcW9naXFvRWk5NTExcjJ1OS85N09relpueS9iOThBZlZKTG5rNHpKd1lo NVB6NTh6UnI4eHc4S051SGNsVTAzYUNLdmh0VTBYZURLdnB1NmxSRi9ubnQ1ZUJmL21LNGF5 ODBjMklRUXJ4ZUw4M2E3bTdlTE51SGNsVTAzYUNLdmh0VTBYZURLdnB1NmxSRkNLbDg5ZFhi blowMFBXblFrcWZUeklsQnY3YmU2OWNIVDlxZ0FWWDBRQlU5VUVXUE9sWFJveVZQbDZWMXNH ZHJCUUFBYmFFclR3Y0FBSU1EVDFkSVpXVmxWbGFXeFdMSnk4dHJhR2dnb2dsVVZhVksycUlH VlJVVkZSa1pHV3BUeGZQKysrOUg4VTBNY2x5cFNsVmZYOS83Nzc4L2F0U29JVU9HUkV0WThM RktURXhVaWFxcXFxcjA5SFNUeVpTV2xsWlZWUlZ1QWZCMGhiejQ0b3V0cmEwZWoyZno1czNp bTNDaTYrbFNWWUYwUmxmVmdnVUxPam82M0c3M3pwMDdvM1h1K1IyWmxwYVdsSlNVS0w2SlVs WFJQYUo0cEtwV3JGZ3hZY0tFMXRiVy92NSs5YWdTT0h6NDhMdnZ2cXNTVmZIeDhVNm5rK000 bG1WdE5sdTRCY0RUQjBwSFI0ZkQ0UkQrVk1NWlNDU3EvTFpFSGg4TkhNZnQzcjA3TnpjM2lw S0lTSlhINDVrNGNXSmpZNk1hM2tSQkZjTXdEei84c05WcW5UMTdka2RIaDBwVU9Sd09sbVdq SzBaQWVtelBuajM3OHVYTDBkTERJNmpLemMxMU9wMWVyNWRsMmZ6OC9IQnZGNTQrSUs1Y3VW SlFVUEQxMTE4TExXcXdBNmtxYVV2VVZmSC9JTnZ0OWlOSGpxaEUxZUxGaS8vODV6OFRGYnlK MHZmcjJyVnJ4Y1hGVTZkT1ZZa3FrOG0wWk1tU1ljT0dPUnlPdlh2M3FrUVZUMU5UMDRJRkM2 SW9pVHlvNnVqUm8vSHg4UXpEeE1mSEh6MTZOTnliaHFjcnA3bTUyZUZ3Yk51MlRkd1lkVHVR cXZLck0rcXFDQ0g4dFpkeDQ4YXBSQlYvYVRqcUY2OER2Vjl1dDl0aXNVUkZFcEdvU2twS1ls bVd2NTR3WXNRSWxhamltVFZyMXZIang2TWxpVWhValI4L1hyajI4dWlqajRaNzYvQjBoWlNW bFNVbko5ZlYxZm0wUjlmVHBhb0M2WXl1cXNXTEYxKy9mdDN0ZHUvYXRXdmt5SkVxVVNVUXhU Y3hrS3JidDIrLzk5NTdoWVdGMFJEbFI5WDgrZk5abHVXdkp5UW5KNnRFRlNIa3dJRURUenp4 UkZUMDhFaFYyZTEyNGRwTFFrSkN1QVhBMHhYQ1BFaFhWNWRQaXpwVmRYVjFxVUZWZVhuNXFG R2pZbU5qSjArZS9OZS8valh5a3Z5cUVqOFZGVWwrVmZFUDR1TGlaczJhZGZic1daV291blRw MGhOUFBHR3hXTkxUMDZOMVlkM3ZPL2prazA5KzlkVlhVZEVUU0ZWbFphWEQ0VENaVEdQSGp0 MjllM2U0QmNEVEFRQkFQOERUQVFCQVA4RFRBUUJBUDhEVEFRQkFQOERUQVFCQVA4RFRBUUJB UDhEVEFRQkFQOERUZ1VHSjRrM29BSVFQZUxxVzhIcTlTNWN1SFRGaXhFTVBQYlJ5NWNwb3k5 RUdETU9zV2JPR0VQTFJSeC9CeHlscGJXMWxHQWFUekZDaXFtTU1ucTRsbGkxYjl2enp6MSsr ZlBuMjdkdHZ2dmxtdE9Wb0E0WmhNak16Ky92N0oweVlFUFh6VFN1c1hyMDZKaVptOWVyVjBS YWlEVlIxak1IVHRjVG8wYU45WmlJWEgwRENZNFpobGkxYlpyVmFoY0tlVVQvT29nakRNTk9u VDEreFlzV01HVFBFUStRemRHdlhyazFJU0xEYjdadi9PY1d3a1FkdDFxeFpyNzMyMnF4WnMv Zy84L1B6K2VrZDZ1dnJKMDJhUkFocGFXbkp6TXlNaTRzcktTa1JqMnEwQkVjWDZUSEdIMkJt czFtWUdlT05OOTc0N1c5L1N3aFpzR0RCb2tXTGhCY091aGg0dXBZd21VeTl2YjNpbGtDZXZt Yk5HcGZMOWZycnIwZFVueXBoR0diNzl1MHhNVEU3ZHV6d08xejg0dzBiTnJqZDdwcWFtbWpO SEtJZVhDN1g4T0hETDErK1BIejRjSmZMUlFoWnQyN2QvUG56Q1NIejVzMWJ2MzQ5SVNRM04v ZlRUejkxdVZ5Yk4yODJySlVMQkRyR2VudDdtNXFhVWxKU0NDRTlQVDFQUGZYVXYvLzd2ei8x MUZNOVBUM2hFd05QMXhKQjh2U2VuaDZ4cDNkM2QwZGFuRm9KNHVQaXg4SnBCb2VxcnE0V1Ns QlZWMWNUUW03ZXZHbXoyYzZmUDIrejJXN2R1a1VJTVp2TmJyZWJFT0oydXpGaTB1TnF3NFlO RG9jakppYUdZWmdoUTRid1Q3VzB0REFNMDlMU0VsWXg4SFF0VVZ4Yy9Qenp6MSs1Y3VYT25U dkZ4Y1dFa0tTa3BMcTZPby9IczNIalJ2d0w3QmRLVC9mNzJKZ3NXclNJL3daKzVjcVZ3bFdD b3FLaXh4NTdiTjY4ZWZ5ZkV5ZE8zTFJwazl2dC9xLy8raStNbVBUNGlZdUxxNm1wY2J2ZExN dnlMVzYzT3k4dmIvYnMyWGw1ZVI2UEozeGk0T2xhZ3VPNC8vaVAvMGhLU2hMdWV5a3JLN1Ba YkFrSkNldlhydy9pNlVZKzY2VG5tMDgxVkw5OWlJRUhMVDA5L2VUSms0U1FreWRQcHFlbjg0 MzE5ZlVNdzlUWDEvTi9OamMzWjJSa3hNWEZ2ZjMyMnpFeE1YeWpZVWRNZXZ4ODhNRUhOcHZO WnJPdFdyV0tiMW00Y09ITEw3OU1DSG5wcFpkZWZmVlY2UXNIQzNnNkFFQWhmWDE5WDMzMTFZ UUpFNkl0QlB3TVBCMEFvQVQrU25GNmVucTBaalVCZm9HbkF3Q0Fmb0NuQXdDQWZvQ25Bd0NB ZmdqTjA1a0FES0lndzM1MVBsaDBkblpPblRvMU5qWjI2dFNwUC83NG85OCtWVlZWNmVucEpw TXBQVDE5ejU0OWhCQ080NVlzV1pLY25Eem9iNmdtb0JtMGJkdTJqUnMzem1LeFRKbzBxYkd4 a1R4NE9pUW1Ka1pXY3BSUmRwaEp4OUJvbEphV0JqbS9wSTVhVlZXVm5aMGRHeHRiVUZCdzRN QUJtazJFN3VsdGtvQ25xNG01YytlV2xKUjRQSjZTa3BLaW9pSy9mV3cyVzIxdExjZHhUcWZU WnJNUlFvcUxpL1B6ODl2YTJ2cjcrNFpJZDJ3QUFCa2ZTVVJCVkNNcVZ4M1FETnJjdVhOUG5q enA4WGkyYmR2bTgxdlRSWXNXTFYrK1BBSTYxWU95d3l6SUdCcUJFeWRPOEdsVDhHN2lEa1ZG UlcxdGJSekg3ZG16WitUSWtUUmJDWmVucjF1M3p1RndtRXdtNFdObnlwUXAvTTJ0RlJVVjA2 Wk44OXRIbXZ1M3Q3Yy8vdmpqRm90bC9QangvTWNVd3pDVEowK2VOMjllV2xxYThBc0lJSkNZ bUhqMTZsVkN5TldyVndPZE5ubDVlZlgxOVY2dnQ2NnVqaS9mTVdyVXFHKy8vVGFTT2xVRnph QUpYTGh3d1dLeENML1V2WDM3dHQxdXYzVHBVcmhGcWdwbGg1bUF6eGdhQVk3amNuSnl2dmpp aTVBOG5jZnRkbGRXVmxMZU14b3VUeDgrZkhocGFXbGJXNXZYNitWYmR1ell3VnR3UVVIQjEx OS83YmVQZEg4S0NncSsvUEpManVOcWEydkhqeC9QZHhBS2dRNGZQcHhtSncxRlRFeE1YMS9m OU9uVGUzdDdUU2FUM3o3TnpjMTJ1NTFoR0x2ZHp2OVMyV1F5bFpTVVdLM1cxTlRVWGJ0MlJW Wnk5S0VaTko0Yk4yNFVGaGFLaTJLdVdyV0sveTJKb1ZCMm1QRkl4OUFJdlBYV1c3Lys5YThK eGFVSW53N0N4YjFqeDQ3UmJDaGNudjdOTjk4ODg4d3o0OGVQZitpaGgvN3doejhRUW5wNmVz YU5HN2RyMXk2K0tLWGZQdEw5TVp2TlF1Yk9sMDBRLy9BUEYycWtKQ1ltWHJ0MmpRUk5vREl5 TXB4T0o4ZHhMTXRtWm1ZU1F1eDJPOHV5WHErM29hSEJhSmVHQ2QyZ0VVS09IVHVXbHBaV1Vs TFMxOWZIdC9UMDlLU21wb2E3Z29jS1VYYVlFWDlqYUJENDJpODAzMEZLbjNXNVhEdDI3TWpK eWFIWlVIaXZwL2YxOVRVMk5scXRWdjdQbFN0WFdxMVdvWmFwM3o2eHNiRWRIUjNDczRXRmhk WFYxZUx5Q1BEMDRMend3Z3ZMbHkvbk9HNzU4dVY4WGlBbFBqN2U2WFI2dmQ3YTJscitRdWVj T1hNRVR6ZmdoVTZhUVNzdkx5OHNMRHgwNkpDNFViaVFhRFNVSFdaK3g5Qm9oSlNuTDF5NHNM T3prK080eXNyS2hJUUVtdldIeTlQNXo2S1ltSml4WThkKyt1bW5mT05QUC8yVW1KaklsM01M MUdmcDBxVnhjWEhDT3MrY09UTno1a3krUmVybThIUXBIUjBkVTZaTXNWZ3MvL0l2LzlMWjJj azMrZ3hVUlVVRlh6UnU3Tml4bFpXVmhKQno1ODVObVRMRmJEWTdISTZxcXFvbzZJNHFOSVBH UEVoWFZ4Y2haTXFVS1FhOFZFV1VIbVoreDlCb2lFY3ArREZHQ05tNmRXdGFXcHJaYk03SnlY RTZuVFRyajl5OWpIMTlmWjk4OHNuU3BVdHBPZ01BQUZCQTVINXp4REJNZm40Ky8xMDVBQUNB Y0lEZmtRSUFnSDZBcHdNQWdINkFwd01BZ0g1UVhiMFhNRUJvQ25GSTN6aURGK0tnR1RScEh5 TVh5VkYybUJsNXhPamRVbHdUSmlMMVhoYnQ4dzJEdlRjcWg2WVFCNC80alRONElRN0tlaTgr Zll4Y0pFZlpZV2JrRWVPUmRVdWZtakFScWZkQzUrblNlekNsMVYya3RWejR6c3VXTGJOYXJm bjUrVFE3QUh5Z0wxM2k5NDB6WUNFT1FqZG8wajVHTHBLajdEQXo4b2p4QlBmMFFEVmh3bHp2 UmFtblM2dTdTR3U1OEozWHJGbmpjcmxlZi8xMW1oMEFQdENYTHBHK2NjWXN4RUhvQmszYXg4 aEZjcFFkWmtZZU1aN2dudTYzSmd5ZkJJZXoza3VJbnQ3VDA4TS9sbFoza2RaeTRWOW90Q1J4 Y0tFc1hVSWtoNWRoQzNFUXVrR1Q5akZ5a1J4bGg1bVJSNHdudUtjSHFna1Q1bm92ZEo2ZWxK UlVWMWZuOFhnMmJ0d283aUN1N2lLdDVVTHdjLzhCUTFPSWcwYzgxQVl2eEVFemFOSStSaTZT byt3d00vS0k4VkQ2bTlBdEl2VmU2RHk5ckt6TVpyTWxKQ1NzWDcrZUVkVkdGMWQza2RaeW9k OW5FQWdGcFV1a0xVWXJ4RUV6YU5JK1JpNlNvK3d3TS9LSVNVZURCTFk3b1YzVjlWNEFBQUNF Ry96bUNBQUE5QU04SFFBQTlBTThIUUFBOUVPa1BSMFgzd0VBSUh6Z08xSzlFVkloRG9aaCtO dUVhVjZsWTVSVkx6SHlvSVY2bVBFdFZWVlY2ZW5wSnBNcFBUMTl6NTQ5RWRRYmZXamNVdHBI ZXFyS0VyS24zeS8xRFhpNnFxQXZ4RUVJV2JSbzBmTGx5ME45bGY1UVhDVEhzSU5Hcys5U1o3 RFpiTFcxdFJ6SE9aMU9mb1pTbzBIamxuNzdDS2VxTE9IeWRJWmgxcTVkbTVDUVlMZmJoVW1s ZlQ2Q2poOC9QbW5TSkw0Q0ROL2l0d0lNQ0FuNlFoeTNiOSsyMisyWExsMEs2Vlc2UkZuMUVp TVBHczIrTXd4anM5bXNWdXZUVHovTlR4eWZsNWRYWDEvdjlYcnI2dW9tVFpvVVNjRXFRWm1u aTA5VldjTG82UnMyYkhDNzNUVTFOZUszWE53NU56ZDMvZnIxSE1jSkxYNHJ3SUNRb0MvRXNX clZxcGRmZmpuVVYra1NaZFZMakR4bzlQdCsvZnIxNHVMaXFWT25Fa0thbTV2dGRqdkRNSGE3 dmFXbEpWSmlWWVF5VHhlZnFyS0UwZE43ZW5xa0VzV1B6V2F6eStVU3Y4cHZCUmdRRXBTRk9I cDZlbEpUVTRYemlyNThoeTVSVnIzRXlJTVcwcjU3UEI2THhVSUl5Y2pJY0RxZEhNZXhMSnVa bVJrQm5XcERnYWY3bktxeWhOSFRaUjlQbkRoeC9mcjFRcGxHRXFBQ0RBZ0p5a0ljRlJVVjA2 Wk5DL1ZWZWtWWjlSSWpEeHI5dnQrN2QyL0ZpaFdGaFlXRWtQajRlS2ZUNmZWNmEydHJjVDJk c28vUHFTcEw1RHo5d1R0bEdFTElkOTk5bDVlWHg1Y2k0M3Y2clFBRFFvS21FQWNoWk1xVUtl SmlwMzVmWlJ5VVZTOHg4cURSajlqUW9VTm56cHg1OXV4WlFraEZSWVhENGVDTFBsVldWa1pC ZC9TUUhqK0U0aGdqa2xOVkZ0ekxDQUFBK2dHL0l3VUFBUDBBVHdjQUFQMEFUd2NBQVAwUVhr OFBkS2tkMStJQkFDQWNST2M3MGtCZis0TGdTQWU4cXFySzRYRHd0eCtjTzNmT2J4OHBWVlZW MmRuWnNiR3hCUVVGL085MXhlK203aWVLNURodXlaSWx5Y25Kd2tEUjFDR1JIdkI2cmZmaTl6 RHpHWitCSDJiaDNvdElRbk5pYnR1MmJkeTRjUmFMWmRLa1NZMk5qWDdYbyt6STlDSDBleG5i ZkFPZUhtSEVnNWFZbU5qUTBPRDFlbG1XZmU2NTUvejJrVkpVVk5UVzFzWngzSjQ5ZTBhT0hD bCtpcjZzaEhZcExpN096ODl2YTJ2cjcrL25XMmpxa0VpSFZOLzFYc1Q3RzJoOFFqM005SDIr Qno4eDU4NmRlL0xrU1kvSHMyM2J0a0MvMGxKMlpQb1FSay8zK2VCcWJtN096TXlNaTRzckxp NE81T21vOTBLRHo2R3piOTgrL3RBUlQwRkxjL0s0M2U3S3lzb0pFeVlJTFNHVmxkQXVvMGFO K3ZiYmI4VXROSFZJR0VuMUVuM1hleEVmUW9IR0o5VERURHFHZW9MbXhDU0VYTGh3d1dLeGRI ZDNTOWVnN01qMElieDV1dmlwN096czh2Snl0OXY5MldlZkJmSjAxSHVoUVR4b0ZSVVZqenp5 eUxCaHc5NSsrMjF4MlEzWmswMjR6SExzMkRHaE1hU3lFdHJGWkRLVmxKUllyZGJVMUZUKzF4 ejBkVWpFMVV2MFhlL0ZKeUh6T3o3S0RqUHhHT29KbWhQenhvMGJoWVdGYjc3NXB0ODFET1RJ RklpY3A1dk5acmZiVFFoeHVWeUJQQjMxWG1qd08rQ05qWTJqUjQ4TzNzY0hsOHUxWThlT25K d2MvczlReTBwb0Y3dmR6cktzMSt0dGFHamd2endJcVE2SlVMMUUzL1ZleElkUW9QRlJjSmp4 Q0dPb0oyUlB6R1BIanFXbHBaV1VsUFQxOWZsZHd3Q1BUSjdJZVhwT1RnNmZwNWVWbFFudEtT a3A0Zzl3MUh1aHdXZkErL3Y3Mjl2YmMzTnppNHVMQS9YeFllSENoWjJkblJ6SFZWWldDdjhZ aGxwV1Fydk1tVE5IT0hONEw2YXZReUt1WHFMdmVpL2lReWpRK0NnNHpNaURZNmduZ3ArWTVl WGxoWVdGaHc0ZENyS0dnUnlaQXVIeWRPWkJDQ0dIRHgvT3lNaUlpNHRidG15WjhKSk5telpa clZiaFQ5UjdDWTUwVlBrSHljbkppeGN2NXFzV1Mvc1F5ZEcyZGV2V3RMUTBzOW1jazVQamRE cjV4bERMU21pWGMrZk9UWmt5eFd3Mk94eU9xcW9xRXFBT2ljK2c4ZU1wcmw2aTEzb3Ywa05J T2o3S0RqUHBHT29EQlNkbVYxY1hrWXdZNVpFWkhOUjdBUUFBL1lEZmtRSUFnSDZBcHdNQWdI NkFwd01BZ0g2SVRyMlhhSzBIQUFEMGpTYS9JNFhGQjRHbUNJbTBqOEcvN2xZMmFIcXQ5MElE emI0cnEzbWlENElVWWdweWxnWHFVRnBhU245dWh1enBoY3hXbjRDbnF3cWFJaVNCK2hoMllK VU5tcjdydlFTSFp0K1YxVHpSQjlKOXB6KzVmSHFlT0hHQ3IrcEYrZkl3ZXJyUEI4NmhRNGV5 c3JMTVpuTldWaFovNDczRDRUaC8vandoNUljZmZuQTRITUpMekdaelhsNWVRME9EMy9YZ0hz cmcwQlFoQ2RUSHNFT3FiTkQwWGU4bE9KUWpwcURtaVQ2UTdqdERYZXRHZkJweUhKZVRrL1BG RjErb3d0Tjl4R1ZtWm03WnNvWC9IV2xXVmhZaFpPSENoWnMyYldJWVpzdVdMYSsrK3FyUXM3 ZTN0Nm1wS1NVbHhlOTZwSDhDTVRSRlNBTDFNZXpBS2hzMGZkZDdDUTdOdml1cmVhSVBBdTA3 VGEwYjhXbjQxbHR2OFQ5UlZxT25tMHdtb2Q2TDJXd21oR3pidHUyWlo1NlpQSG55bkRsenZ2 amlDMExJaGcwYitCOU5NUS9XZTRHbjAwTlRoQ1JRSDhNT3JMSkIwM2U5bCtDRXRPOGgxVHpS R1Q2Rm1BaEZyUnZ4YWNpYllVaFhKcUtacDErOGVISFlzR0VmZmZTUjFXcmw2N3ZHeGNYVjFO UzQzVzZXWlgydXQ0aFhHeHNicTc5Q25ZTUZUUkdTUUgwTTYrbktCazNmOVY2Q1E3bnZDbXFl NkFhL2haaG9hdDM0UFEyam42ZExiNHhwYW1yS3pNdzBtVXlabVpuQ201cVJrZkhqano4S0pi dy8rT0FEbTgxbXM5bFdyVnJGaU1vbStIeE1MVjI2bEs4SlE3bVRoc0p2RVJLZnNaTDI4VHZP eGtIWm9PbTEzZ3NOTkNQR0gwdXlOVTkwU2FCOTk2bDE0M2ZFL0o2R1lmUjB2MUJ1REFBQVFG akI3MGdCQUVBL3dOTUJBRUEvd05NQkFFQS9hS1BlQ3dBQUFCcndIYW5lUU9rU0JXRFFRZ1Vq RmlvUks4UVVzcWR2WmJiNkJEeGRWYUIwaVFJd2FLR0NFUXVWaUJWaUNxT24rNzNGY3RteVpW YXJOVDgvbnhCeStQRGhDUk1tK014UUNnWUlTcGNvQUlNV0toaXhVSWxZSWFidzV1bFNUMSt6 Wm8zTDVYcjk5ZGNKSWRuWjJlWGw1VzYzKzdQUFBvT25EeFlvWGFJQURGcW9ZTVJDSldLRm1D THQ2ZUpLYkdheldhZ0FBMDhmTEZDNlJBRVl0RkRCaUlWS3hBb3hSZHJUeFg5bVpXWHhlWHBa V1JrOGZiQkE2UklGWU5CQ0JTTVdLaEVyeEJRdVQvZDdZNHhQejZhbXBrY2ZmVFF1THE2a3BB U2VQbGlnZElrQ01HaWhnaEVMbFlnVllsTEx2WXp3ZEFBQUdEaHErUjBwUEIwQUFBYU9Xandk QUFEQXdJR25Bd0NBZm9peXAyL2F0R240OE9HeUYxNXdaUVlBQUdpSThuZWtLU2twSjA2YzhO bUU0clVCUWxjZ29xcXFLanM3T3pZMnRxQ2c0TUNCQTN5THcrSGd2M0EvZCs1Y3BNU3FCZm82 SktXbHBlTDd1QWJ4TmdGdFFiUGpmdTk4RTBoTVRJeUlVclhBY2R5U0pVdVNrNU9EakZ0VlZW VjZlcnJKWkVwUFQ5K3padzlSZEdLRzdPbHQ5MzFqSUFlMGVDSnBZUk9LMXdZRWdnOWpVVkZS VzFzYngzRjc5dXdaT1hJa0lTUXhNYkdob2NIcjliSXMrOXh6ejBWS3BscWdyRU55NHNRSi9w emsvOFN4S3V2cGdaNWF0R2pSOHVYTHc2Qkl2UlFYRitmbjU3ZTF0ZlgzOXdmcVk3UFphbXRy T1k1ek9wMDJtNDBvT2pIRDVlbnIxcTF6T0J3bWswbjRVRHAwNkZCV1ZwYlpiTTdLeXVMbkl3 MytNUzdlcU04bUdOU05rWU5tSE54dWQyVmxKVDhaYkdKaTRyNTkrL2hESnlFaElmd0MxUVZO TFE2TzQzSnljcjc0NGd2eDRXcXoyYXhXNjlOUFAyM01TYzlsUGQzditOeStmZHR1dC9QVHlo dUhVYU5HZmZ2dHQ4SDc1T1hsMWRmWGU3M2V1cnE2U1pNbUVVVW5acmc4ZmZqdzRhV2xwVzF0 YlY2dmwyL0p6TXpjc21VTC82dlJyS3dzWVlYU1RmamRycytmcUJzVEhObHhFUDcvUFhic0dD R2tvcUxpa1VjZUdUWnMyTnR2djIyMFFoeUVyaGJIVzIrOXhmKzB6MmRzcjErL1hseGNQSFhx MUVnSVZSazBwNXQwZkZhdFd2WHl5eStIVTVjYU1abE1KU1VsVnFzMU5UVjExNjVkZnZzME56 ZmI3WGFHWWV4MmUwdExDMUYwWW9iTDA3LzU1cHRubm5sbS9QanhEejMwMEIvKzhBZCtsNFRx TG1heldWaWhkQk4rdCt2ekorckdCSWRtSEZ3dTE0NGRPM0p5Y3NTTmpZMk5vMGVQRHBzdWxV SlRpeU1tSmliUUJYU1B4Mk94V0NLZ1UyMVFubTdpOGVucDZVbE5UZVVOeTFEWTdYYVdaYjFl YjBORFE2RHZFakl5TXB4T0o4ZHhMTXRtWm1hS242SS9NY043UGIydnI2K3hzZEZxdFJMcVBE MDJObGI2YjZ6VTA4Vi9vbTZNbE9EanNIRGh3czdPVG83aktpc3JoWC9vK3Z2NzI5dmJjM056 aTR1TEk2SlJSWVJVaDhSbmJPL2R1N2RpeFlyQ3dzSXc2bE1yTktlYnovaFVWRlJNbXpZdHZM SlV5Wnc1Y3dSUEQ1UTN4TWZITzUxT3I5ZGJXMXZMWDA4bm9aK1k0ZkowUHBlSmlZa1pPM2Jz cDU5K1NnaHBhbXJLek13MG1VeVptWm44OVhUaTc1aFl1blJwWEZ5YzN5dnNnYjZiUXQwWU1U UWp0blhyMXJTME5MUFpuSk9UNDNRNmhWY2xKeWN2WHJ5WTQ3Z282STRxTkxVNEJId096cUZE aDg2Y09mUHMyYk1SMHFvT2FBNHp2K016WmNxVVFGY2U5TTI1YytlbVRKbGlOcHNkRGtkVlZS WGY2RE5pRlJVVkRvZUR0ODNLeWtxaTZNUlVTNzJYd1VKVllnQUFJTUxvN1hlazhIUUFnSkhS bTZjREFJQ1JnYWNEQUlCK1VMV25xL0I2UFFBQXFKbUlma2VxekozaDZTRkJVN3BFL043eHQ4 clNGS1BRTWNycXZVaXJjeGdIbW5OLzI3WnQ0OGFOczFnc2t5Wk5hbXhzSkE4ZWVKRlNHaDJr K3k1dGtSSm9jTVJIblN3aGUvcDlTY0RUVlFWbDZSSWVvZXdHVFRFS0hhT3Mzb3UwT29mUkNI NXV6cDA3OStUSmt4NlBaOXUyYmZ3ZDJjWTVsNlg3TG0wSmhNOG8rUngxc29UTDA2WDFYcVFm MGUzdDdZOC8vcmpGWWhrL2ZqeGZIWkIvMW13MjUrWGxOVFEwK04xREVCeWEwaVU4NHJJYk5N VW9kSXl5ZWkvUzZoeEdnL0xjdkhEaGdzVmk2ZTd1Wm94WElVZlk5eUF0UG9oSFZYclV5Ukl1 VDVmV2V5R1NJNkNnb09ETEw3L2tPSzYydG5iOCtQRkNlMjl2YjFOVFUwcEtpdDlYZ2VEUWxD N2hFWmZkb0NsR29XT1UxWHVSVnVjd0dqVG41bzBiTndvTEM5OTg4MDJoeFRnVmNxVDdMbTJS SWg3VlFGV0dnaEF1VDVmV2U1SEtNcHZOUXViT0Y5M2RzR0VEL3pNcW9TV2tuUUdFcm5RSmta VGRvQ2xHb1dPVTFYc0pVcDNESU1pZW04ZU9IVXRMU3lzcEtlbnI2eE8zRzZGQ2puVGZBNDJH RCtKUkRWSmxLQkRodlo0dXJ2ZENKTFZjQ2dzTHE2dXJQUjZQMEJJWEYxZFRVK04ydTFtV0ZW YWJrcExDMXc0RU5GQ1dMdkVwdTBGVGpFTEhLS3YzNHJjNmg2RUk3akxsNWVXRmhZVkNJUkFC STFUSWtlNTdvTkdRNG5kVW81K244NThxNG5vdlJGTEw1Y3laTXpObnp1UmIrTVlQUHZqQVpy UFpiTFpWcTFZSjNUWnQybVMxV3BHdFUwSlp1c1NuN0liZlloVEdRVm05RjJsMUR1UEFQSWpR R0tSUFYxY1gvOEFJRlhJQzdidTRoY2lObU05VGxKdldXNzBYQUFBd01xcit6UkVBQUlDUWdL Y0RBSUIrZ0tjREFJQitnS2NEb0dyd2ZSVUlDWGc2QUg1UTdLU0Ric0ZCVmpnbzIySVlaczJh TllTUWp6NzZhQ0FyWkJobTllclZBeGNtcll0Q1UxZEhlcjhHVFFtanFxcXE3T3pzMk5qWWdv SUM4VS9aZzkvNklhME9SRlBMUmRwSHVoN3BwaFhjaHdKUEI4QVBodkwwek16TS92NytDUk1t RE5EVE16SXk3dDI3TjBCaDByb285SFYxeE51bEtXRlVWRlRVMXRiR2NkeWVQWHRHamh4SnFW eGFIWWltbG92ZkNqQitxd3hKTmNEVEFSZ29mczhyNXNGaVJEUkZqWUt2V1hoVmNYRnhYRnpj aEFrVG1wdWJDU0hOemMyWm1abHhjWEhGeGNYaU5ZdTNMdDJXdElDUzN4MlI2cGsrZmZxS0ZT dG16SmpCZHo1MDZGQldWcGJaYk03S3l1Si9JOE13ek5xMWF4TVNFdXgyKytiTm13T3RwN1Mw OU1NUFB4UTJLbDFQZm40K0w3Nit2bDYyUW81UUY0VytybzU0Wi8yV01QSTdHbTYzdTdLeWNz S0VDWHdIYVVVYW4xY0ZxUTRrVzh0RjNDZlFldURwQUF3K2djNGljVEVpbXFKR3dkY3MrSFZa V1puYjdTNHZMNTg0Y1NJaEpEczd1N3k4M08xMmYvYlpaK0wrd1VzaEJTcWdKS3RuKy9idE1U RXhPM2JzNEZlWW1abTVaY3NXdDl0ZFZsYVdsWlhGOTltd1lZUGI3YTZwcVFtVWh6SU0wOVhW Tlc3Y3VOdTNid2RhejdwMTYrYlBuMDhJbVRkdjN2cjE2NE9vRXRkRm9hK3JJeDRReWhKRy9J ZGlZbUtpK01mcXdTdlNCS29PUkZQTFJkd24wSHJnNlFBTVB0S3pTRnFNaUthb1VaQTE5L1Qw Q0o3dWRyc0pJVzYzbTYrQ1lqYWIrUmFYeThYM29TbUZKQzJnRk9xZThvOU5KcE93ZGJQWnpM ZjM5UFFFMzBHK2ZlWEtsZSsrKzI2ZzlkeThlZE5tczUwL2Y5NW1zOTI2ZFN1UUpKKzZLUFIx ZGNUYTZFc1l1Vnl1SFR0MjVPVGtpQnVEVktUeFd4MklwcGFMVDU5QVZZYmc2UUFNUHRLenlH OHhJaUpYMUVoS1VsSlNYVjJkeCtQWnVIR2o0T2w4UGx0ZVhwNmRuVTBJeWNuSjRmUDBzckl5 dm8vZnJjc1dVQXAxVDRQazZVRkdSdHp1Y3JuR2poMGJhRDJFa0tLaW9zY2VlMnpldkhtQjlF anJvdERYMVJGcm95bGh0SERod3M3T1RvN2pLaXNyRXhJU2hQYmdGV21rMVlGb2FybEkrd1Nx TWdSUEIyRHdZUjZFK0N0R3hEOFZ2S2lSbExLeU1wdk5scENRc0g3OWVwL3I2UmtaR1ljUEh5 YUVIRDU4T0NNakl5NHVidG15WllHMkx0Mld0SUFTVVhRdHFLbXBLVE16MDJReVpXWm1DdGZU L2ZiM3U1N1ZxMWNIV2c4aHBMNitubUdZK3ZyNklIckVkSFYxMGRUVmtiNWZma3NZK1lqZnVu VnJXbHFhMld6T3ljbHhPcDNDZW53cTB2aThTbG9kU0txWlpyOWsxK08zUlJaNE9nQlJKcVFz RElEZ3dOTUJpREx3ZERDSXdOTUJBRUEvd05NQkFFQS93Tk1CQUVBL3dOTUJBRUEvd05PQk5x aXVycTZwcWVudDdhMnBxYW11cnFaOFNmQm5BM1Z3dVZ3c3kvcnRIK1JWQUtnQmVEclFCdFhW MVFjUEh2ejczLy8rdDcvOWJiQmNOZEI2amg4L0xuMEtWZzQwQVR3ZGFJUHE2dW96Wjg0NG5j NHpaODRJOXVyem9McTZ1clcxMWVsMHRyZTNCMnIwV2FkMFEvZnUzYXV2ci9mcjZVNm5jOSsr ZlZldVhCblVQUU5nTUlHbkEyMVFYVjE5OCtaTllTazBpaDlVVjFmZnVuWEw1WEx4dnduMDIr aXpUdW1HdnZ2dXUzUG56dmw5cXIrLy84cVZLM1YxZFlPM1d3QU1NdkIwb0EycXE2djcrL3Yz NzkvZjM5OHZHSzdUNlhTNVhJTExTeTFlMnVpelRyOGJDblRkdkwrLy85cTFhL0Iwb0diZzZV QWJpQjFXZU56ZTN1NTBPbHRiV3hWNHVvOXhTNStWUHFpdXJ0NjNiOS9seTVjSGM4Y0FHRlRn NlFBQW9CL2c2UUFBb0IvZzZRQUFvQi9nNlFBQW9CL2c2UUFBb0IvZzZRQUFvQjkrOXZUbTV1 YnRBQUFBdEE4RFF3Y0FBTjN3L3dIU0wwMUtqNEZMZ2dBQUFBQkpSVTVFcmtKZ2dnPT0iIC8+ PC9wPjxwPiZuYnNwOzwvcD48cD5UaGVyZSBpcyBhIHNsaWdodCBpbmNyZWFzZSBpbiBzbGVh cGluZyBqb2JzIGF0IHRoZSB0aW1lIHNsb3QgaW4gcXVlc3Rpb24sIEkgZ3Vlc3Mgbm90aGlu ZyB3ZSBjYTwvcD48cD5kaXJlY3RseSBtYXAgdG8gdGhlIGlzc3VlOjwvcD48cD4mbmJzcDs8 L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtH Z29BQUFBTlNVaEVVZ0FBQWZFQUFBRnNDQUlBQUFCVHFCZTNBQUFnQUVsRVFWUjRuTzJkZjNR VDVaNy9oeWFwYllDbVB5akxMME4vMkphMmdCZktiYXRYT1h5dGlGZGR2TjYweTdyK1dBOWUz TE9JbGxiRXk5SERjZ0JscjdKb0xWWTlYS0VXQ21xVGxsYnh4NjJGOUtwN0xBSmlMMm1iMG9M eXM4MlBOdTN6ejU1ei8rRDd4N1BPanZOTWttbWFaRExKKzNVK1owNzY1Sm1aOXp5WnZQdkpr OGxudU84QkFBQkVCVmFybFZOYUF3QUFnQ0JndFZyMzc5Ly92NTVPQUFBQXFKbjkrL2ZEMHdF QUlFcUFwd01BUVBRQVR3Y0FnT2dCbmc0QUFHcWlpVUg0TER3ZGdDRERjWnpTRWlKQ0F3Z3A0 K1BqMU0zaDZRQ0Vsa2p3MDBqUUFFS0h4K1A1N3J2dnpHYnoxYXRYbTV1YmhVL0IwMEdZNEg0 bUtTbnBvWWNldW5qeG90S0tRa1VrK0dra2FBQWhvcWVucDYydHJiT3pzNysvdjdtNStidnZ2 aE0rQzA4SFlZSjNtUXNYTHZ6elAvL3pQLzdqUHlxckozUkVncDlHZ2dZUUlvNGZQMzcxNmxW dno4TFRRWmdRdXN5bFM1ZjBlajNmdm12WHJybHo1MDZaTW9VUTRuUTYvL1ZmLzNYNjlPblRw MDkvNG9rbm5FNG43VFl5TXJKaHc0YTB0RFNEd2ZEeXl5L1RSby9IVTExZFBXUEdqTVRFUkpQ SmRQMzZkZHB1c1ZqeTgvTjFPcDNSYU55N2Q2K1B4Z2x0UWY2Ujd0aXhJejA5WGEvWFAvcm9v eTZYaXhCeSsrMjNIemh3Z08vVDA5TXphOVlzNFRzek16UHo1TW1UOVBFNzc3eERINXc4ZVRJ ek05T0hUbS90L0dqLzlhOS9uVE5uenAvKzlLY0pIUUpRTC9CMEVDYUVubjc1OG1XaHA1dE1K bjRxNXRsbm4xMjFhdFdGQ3hjR0J3ZnZ2dnZ1eXNwSzJyNXAwNmF5c3JLK3ZyNHJWNjQ4L2ZU VHRQR2xsMTY2NjY2Nyt2cjZybCsvL3NnamovemhEMytnN1dscGFZY09IWEs1WEQwOVBZOC8v cmlQeGdsdFFmNlIwa080Y09IQ3FsV3JObTdjU0FocGFXbkp5OHNiR3h1amZSNS8vUEh0Mjdj TDExcTNidDNycjc5T0NPbnI2NXMyYlJwMTV6MTc5anoxMUZNK2RIcHJwNlBkMU5RMFk4YU1E ejc0WUVMNlFZU0Q2MTVBUk1CNytzV0xGeDk1NUpINzc3K2ZiKy92NytlN3paNDkrK3pacy9U eDk5OS9QMmZPSFBwNDd0eTU3Q2xxTkJyUG5EbERIdzhPRHM2Y09aTStuamR2M3U3ZHUvdjYr b1NkSlJzbnRBWDVSL3JERHovUXgyZlBucDA3ZHk1OVhGUlU5TjU3Ny9HTnc4UER3clUrL1BC RGs4bEVDTm0rZmZ1TUdUUG9oNFBmLy83M0gzMzBrUStkM3RvNWp2dXYvL3F2MmJOblc2M1dB QTRCUkQ2NDdnVW9EUDhkNmZUcDB4OTg4TUhCd1VHK1hkaE5vOUY0UEI3NmVIUjBWS3ZWOHUy am82T2liV3ExV2s0QW5iMGhoRml0MXQvKzlyZXBxYWtaR1JuVUU3MDFUbWdMa29jaitaVGtJ WHp3d1FjNU9Ua2VqNmVpb3VLMTExNFRyVFUwTkhUenpUY1RRZ29MQzgxbWMwbEpDU0hrNXB0 dnB0YnZUYWUzZG83ak1qSXlubnZ1T1ZZZWlBSnczUXRRSG0vZjJvbmFaOCtlelNlNTMzLy8v ZXpacytsanlUeDkzcng1ZHJ2ZDJ4N0h4OGZOWnZNLy9NTS8rR2dNWUF0K0VlYnBQL3p3QS85 UlkzeDh2TEN3c0xLeTBtZzB1dDF1ZHNVNzc3enovZmZmTHlvcUlvUVVGUlY5OE1FSHk1Y3Y5 NjNUV3p2SGNYMTlmVmxaV1R0MzdweVFlQkQ1NExvWEVCSEk5UFFOR3pid2s5RXJWNjU4NXBs bmFQdnp6ei9QenFmL3gzLzh4NnBWcTdxN3UwZEhSNy85OWxzNmQwRUlLUzh2Lys2Nzc5eHV0 OWxzVGt0TDg5RTRvUzNJUDlMZi92YTNGeTlldkhqeDRyMzMzc3QvSlVBSXFhK3Y1emp1cmJm ZWtseHgrL2J0YytiTW9TbjhxNisrT25mdTNCMDdkdmpXNmEyZGptcC9mMzlPVHM2MmJkc21w QjlFT0xqdUJVUUVNajNkNFhBODl0aGowNlpObXpadDJtT1BQZVp3T0dqN3lNakkrdlhyVTFK U2twT1RkKzNhUlJ2SHhzYTJiZHRtTkJwMU9sMUJRVUY5ZlQxdFAzRGdRRTVPamxhcnpjL1Bi MmxwOGRFNG9TM0lQMUwrdXBkSEhubUV2M1NIRUhMdzRNSHM3R3gyRW9ueXpUZmZhTFZhK25Y eGhRc1h0RnJ0Zi8vM2Yvdlc2YTJkSDlXQmdZRzh2THlYWG5wcFFvY0ExQXM4SFlEd2NkOTk5 KzNmdjE5cEZVRGQ0TG9YQUpSbmJHeXN0cloyd1lJRi9PV01BQVNHeU1UaDZRQW9BTWR4UnFN UlZ4YUN5ZFBjM0R3eU1rSWZqNHlNNExvWEFBQlFNVmFyOWVUSms2T2pvNk9qb3lkUG51enM3 QlErQzA4SEFBQTE0WFE2VDV3NFliRllMQmFMMVdvVmZnbFA0T2tBQUtCcU1KOE9BQURSQXp3 ZEFBQlVUQXhkeTloOTdGajNzV05LcXdBQWdQQVJ0WjQrNm5MdHVlMjJQYmZkTnVweUthMEZB QURDUk5SNitsLys5S2R0UnVNMm8vRXZLUDhQQUloVm9zVFRyL2IxN2N6Sm9aNitNeWZuYWtC bHJ3RUFJUEp4T0J4V3E1Vy9scEd2aVVTSlhFOXZiR3pNek16VWFEUVpHUm1OalkyRUVMdmRY bHBhR2g4ZlgxcGFLcW92MnZEWVk5VFFhVFE4OXBoQ3FnRUFJTFMwdDdlZk9YTm1aR1JrWkdU azlPblQ3ZTN0d21jajE5T1RrcElzRm92TDVUS2J6UWFEZ1JCU1hsNWVYVjN0ZERxcnE2c3JL aXJZVlRadjNrd0lFZDQweHdjanAwNzU3U056VTNLNlFaWDhibEFsdnh0VXllOFdtYW9Dd0d3 MjgxV0R4c2JHekdhejhObkk5ZlNGQ3hkYUxCWmF3SHJ4NHNXRWtMUzBOSHB6bk1IQlFjbVMx dFRUdi9ycUt6bmJ2eWJqeHNFeU55V25HMVRKN3daVjhydEJsZnh1a2FrcUFOU2FwNTg0Y1NJ cEtZbmp1S1NrcEJNblRoQkM0dUxpNkg4bmo4ZWowV2lFblQwLy9YU3RwbWJUdW5Ya3hJbi8r Wi8vSVNkTzNMaHh3L2ZTMDlibXQ4OW9lN3ZmUGpMM0NGVlFCVlZRSlZ6KzNlVzZWbFBqN3Vx YXFEY09EdytyY2o0OU96dWJuM3U1NVpaYkNDR3BxYWwrOC9RYk4yNE1EQXpja0FIcDdQVGJS K2FtNUhTREt2bmRvRXArTjZpUzN5MENWWVhDT1NQWDA1T1RrL201bDVTVUZFS0l5V1RpNTlQ NWUzUUpvWjRPQUFDcUlEQnZWT3QxTHcwTkRVYWpVYVBSeko4Ly85Q2hRNFNRM3Q3ZTR1Smlu VTVYVWxMU0ozVzFJdkwwaVhhREt2bmRvRXArTjZpUzJTMHdiMVRyZkhvQUlFOW5zVnF0VnF0 VmFSVUFBQWtDTXpxMVh2Y1NBTWpUMlc2K1BSMWpKYjhiVk1udkJsVXl1d1ZtZE1qVFl4ZnJ6 eWd0QklBSUpldEdGZzFGOWg2WTBhbjF1cGNBUUo0dTZtYTFXck51WkNGUEQwcTNNS3V5V3Ey dHJhMSs3Y2JIcG9UL3pxTjdyR1IyWS90WUJTaWlLaFEyR0lXZURuaXNWaXVYZFFONXVocVJ0 SnZBdGhCY1laSjdDZWt1UWdkTmVuem5QU0VsTUtPTG9mcnB5Tk5GM2Z4Nk9zWktmamRoSHg5 MktVZFZhMnVyWHhPeFdxMEx5d2FvM1FUMkNnby9wUVgzMDRPb2haVVgrYS9nRFY1NUl5ZDZq MFIrbmk0eWNSRlI2T21BaC9mMGdOTVFwZVlaSXhrNm5uN2QxdThXL0hiZ3NtNndqak9odlFU M1U1cmtJY3RwRWM0Z0tUaDVMWUsraUZ6V2pVbStSeVpEWUVZWEU1NCtNakppczluV3JsMTc0 OGFOYjc3NTVzYU5HNE9EZzc2WHBMUFRiNStCZ1FHL2ZXVHVVUkZWVnF1MXNHeVF5N3BCYzZ1 SnFxTHBaT3lNbGJkUm91Tnc1TWdSMnNkcXRaWU5sbVhkeUJyY1g4aTMwTGx2bWFwYVcxdTk3 WXZmWTlhTnJQdis1UnN1NjBaaDJTQjlGZWl6d2ozeXF2aDJxb0h2U2RkdGJXMDkrYzQ3L0tz Wm1DclJIb1VhaEV2YWsvWXBHeXp6M1hPU1kxVTJXQmJ3ZVVXMWxRMlcwUkVXdmtmQ2RyYmI3 WGFielJaQW5hK1k4SFFLOG5RaGZLNDNtVVJQdlZPbDN2QjJVRllCYkR0L2RRUWZkR0Q1UDMx dlZxWUdZUWQrRjZLWGp4VmovU1hDWGRCTVg5Z3pnSkVSRFFLZjFmS05vaGFyNEVPTTVOQk5h UDU2UWdNN29XM3k3NDdKdkVjbVNTaHNNQW85blovRHNucmhmMGN6a3VhSWVXRkJ2MnBDK05H U2ZSdklVV1cxV2srKzg0N2ZNMTR0MXlkSW5oSTBjNVMwU0w2ZHptNExYWUFQZm9hRUh5dmYw TjM1aHN1NnNiQnNnSDM1ckQ4N0VSVkQrL3p2aEVZako1TE45eVM3NXJIYm1aQXFmbXNMeXdi WWR1Ri9EanBXdkNwK2ZJUkx1bTZ3eGtwbU43YVBwS2RIL255NmI2TFEwNFh2WHNrRXdScGh1 YWZ3SkF2aU5rVUdGTUQzKy9Ta1YvYkNnQnUvVEJJbkwwUHlyT0RkaDEreUtUbnZSOTQ4WGVS cnZvUGRpN2VkaWo0UWVQdS93dmFVVkJ1d0t0SFdoTU1sYkJFK3VOSEllUnN4djBwRXV3NXNE UDBlcWNqVDVaOWR3WHEzQnVCeW4zenlTVmRYMStEZ29NZmprZXdRYlo0dSttOHMrWExTcHlh YUkyUjUvMkpuTW5tNnlMQmtxdkloaHQ5czJVQ1pYMCtYdkJKQUNGM3hENTFML1o3QkF3TURm bFh4ZS9UOWxtQlZpVjQ3dXFQQXJqQ3hDdjVSOFZFMlVDYXlKOVpEK2F6WnQ1LytvWE9wWCt1 aEw0MWYweEh1a2RYalRaVmt0OVZMTy8wNnFmQ0VrZFFqM0tPa0xmcFFKWE9zdktsaTIrbC9D OUVyNkhkVFdWTC9oSVMySHZCNUpUckg2RmthaWp6OTJyVnIzZDNkSFIwZHpjM05IUjBkM2Qz ZDE2NWRFM2FJTmsrWFBCSFpGR09pRWF4L3krd0x6eHNXVFdxQ0pjYjZ5OCtWM0M4LzgvcldJ L1JRK1ZrTTMwR21QQjQ1UFlPWVR3bTM1czJTZ2hJK1VsUkVaQTcxWk00cjlsazVXNXVNM1ky T2pnNE9EbloxZFgzeXlTZkM5aWowZE9GL2JHOHZudndjUWVpa1dWNisrWkdmSTRpc21kVXBV NVhWK3dRQ3YzRnZ1Wkp3WGZZQUpmOHAwaXpQOTA3NUtXbkpJUktKWi9FOTdLTFhqalpLanBW b2EreUhOdmEvSFNjdnI1VFRoeE5reEQ2TVJ1YW1RcUZxOHB1S1lsVSt6aXZKczkzYmVjNi9F WHc3d3lROTNSdlI1dWx5WG40ZmtlVWx0ZWV5ZnBGV1M3cFNBSWdNWFg3STJYZ0E2d3FQM2Nj SXlEbXVTWFlRZFE1WWlmWG5tUlpSQ3dMQnhpVFBLOUd6dmxjL2N2Skl6SGs2SnlBMU5aVVFZ cmZiUzB0TDQrUGpTMHRMN1hZN3V3cjE5TW5rQ0NJakUyMHE2K2RKRXI4NXVHUitLcGtGaS9Z b1AzUHh1MGNmNCtCTmxkK3g4bjJBZkFjZlBZVnptbnhQMFpES1VTVXpuNUtjamZVMnBIS0dQ YkR6S3JCTlFWWDRWVTNtdkdMUE1lVHAwblIwZER6Ly9QT0VrUEx5Y3Y0K1J4VVZGV3pQeWVm cGZrTmt3WkxmN0xONXJtVG1HOXo1Vm0vSnRad0Q4WDE5Z3N3dHlGK0w3K3pqdjRqZjhMYXV0 NkhHN0RaQ1p2QkpCajF0Sk04Y21lOWwwZXFpa3pOWW5xNitlaStyVnEwNmYvNDhJU1F0TFcz UTMvMUlPVFhuQ0ZBRlZWQVZPNnBpMU5QYjI5c2ZmdmhoK2pndUxvN2UzY1BqOFdnMEdtRTN6 MDgvWGF1cDJiUnUzZStXbnVDeWJtQ0pKWlpZUnZqeTd5N1h0Wm9hZDFmWFJGMVIzWFVaVjZ4 WThmWFhYOVBIcWFtcHlOT2hDcXFnS2pwVXhXS2Uvdm5ubjk5eHh4MzhueWFUaVo5UE41bE1i UDh3ektjakVBaEVVQ0lXUGYzT08rODhjdVFJLzJkdmIyOXhjYkZPcHlzcEtlbnI2MlA3STAr SEtxaUNLcldvVXVhNmw5cmEyc2NmZjV3UVVsNWVQbjM2OUVPSERvVkNSTEJBbm81QUlOUVNB WHU2dytHd0Judy9VcVBSMk5QVDA5TFNjdHR0dDMzNTVaZTV1Ym1CaVFnUHlOT2hDcXFnU2ky cUF2YjA5dmIyTTJmT2pJeU1qSXlNbkQ1OXVyMjlYZmlzSDAvWGFEUWpJeVByMXExNzlkVlhS MGRIdFZwdFlDTENBL0owQkFLaGxnalkwODFtTTcwQ2tCQXlOalptTnB1Rnovcng5T3pzN0Mr KytHTEpraVhkM2QwMm0rM21tMjhPVEVSNFFKNE9WVkFGVldwUnBVeWVmdURBZ2VuVHB6Lzc3 TE9Fa0NlZWVLSzJ0all3RWVFQmVUb0NnVkJMQk96cHc4UERnYytucXd2azZWQUZWVkNsRmxX eFcrOUZQc2pURVFpRVdpSmdUNS9VNzBqYjI5dHpjbkttVEpsQ0NGbXpaazE5ZlgxZ0lrTE55 TWlJeldaYnUzWXRsM1dEdjl1NjcrWHFwWjErK3l3c0cvRGJSK1llb1FxcW9BcXFoRXU3M1c2 ejJmcjcreWRxZDlURWVTdWZtS2ZmY3NzdExTMHRITWNSUW5wN2UrZlBueCtJNDRZTDVPa0lC RUl0RVhDZWJyRllybCsvYmphYnIxMjdkdTNhdFphV0Z1R3pmanhkcDlPNVhDN3E2WmN1WGRM cjlZR0pDQStZVDRjcXFJSXF0YWdLMk5OUG5qelozTnpjMDlQenlTZWZXQ3lXYytmT0NaLzE0 K2tyVnF4NDU1MTNPSTdyNys5ZnMyYk42dFdyQXhNUkhwQ25JeEFJdFlReTM1SDI5L2MvOE1B RGVyMWVyOWV2WHIzNnh4OS9ESVdJWUlFOEhhcWdDcXJVb2txWjcwalZCZkowQkFLaGxzQzFq UDVCbmc1VlVBVlZhbEdGdW96K1FaNk9RQ0RVRXNwNHVvSjFHY2ZHeHJaczJUSjc5dXdwVTZi UUMyL3NkbnRwYVdsOGZIeHBhYW5kYm1kWFFaNE9WVkFGVldwUnBZeW5LMWlYY2V2V3JibTV1 VjFkWGVQajQ3U2x2THljdjg5UlJVVUZ1d3J5ZEFRQ29aWlFwbjY2Z25VWmpVYWpxSVprV2xv YTdrY0tWVkFGVmRHaEt1YnFNbW8wbXFlZmZqb3hNZEZvTkg3d3dRZUVrTGk0T0ZvMTJPUHhh RFFhWVdmUFR6OWRxNm5adEc2ZDR2Y0N4eEpMTExHVXMveTd5M1d0cHNiZDFUVlJiNXhVL1hR RlNVdExNNXZOTHBmTGJEYlBtREdERUpLYW1vbzhIYXFnQ3FxaVE1VXllYnFDVkZSVW1NMW10 OXR0TnB2VDA5TUpJU2FUaVo5UE41bE03Q3FZVDBjZ0VHb0paZXFuSzNndFkzOS8veDEzM0tI VDZUSXpNK21IaTk3ZTN1TGlZcDFPVjFKUzB0Zlh4NjZDUEIycW9BcXExS0lxNXE1bERBRGs2 UWdFUWkyaFRHMEFOZDVqT3RMK0cwOW9VMUFGVlZBVkk2b200K2trNFBycGFyekhOQUtCUUVS K0tPUHBhcnpIZEtUOU41N1FwcUFLcXFBcVJsUXA0K25xQW5rNkFvRlFTd1RyTzlMbzkvUkkr Mjg4b1UxQkZWUkJWWXlvVXNiVDFYS1BhUXJ5ZEFRQ29aWlE1cm9YdGR4amVtUmt4R2F6clYy N2xvdTh1NE5INWozTG9RcXFvRXBaVlhhNzNXYXo5ZmYzVDlMOUp1YnBhcnpITkFLQlFFUitL RFAzb3NaN1RFZmFyTm1FTmdWVlVBVlZNYUlLOTVqMkQvSjBCQUtobHNBOXB2MkRQQjJxb0Fx cTFLSUs5NWoyRC9KMEJBS2hsbEFtVDZmZmpucjdNOUpBbmc1VlVBVlZhbEUxbVR6ZDdYWi8v dm5uemMzTkZ5OWVGRDNsdjRhWDIrM210eElYRnhld2lEQ0FQQjJCUUtnbEF2WjBhdWhuenB5 NWZQbnkwYU5IcjE2OUtueldqNmNYRnhjLzk5eHpseTlmdm56NWNsVlYxYTkvL2V2QVJBUUFK NEMyMk8zMjB0TFMrUGo0MHRKU3U5M09yb0k4SGFxZ0NxclVvaXBnVC8vc3M4OTR1ejUvL254 Ylc1dndXVCtlZnU3Y3VaVXJWeVltSnVyMStudnV1Y2Rtc3dVbUlnRFllWjd5OG5MK1BrY1ZG UlhzS3NqVEVRaUVXaUpnVHhkNTlibHo1NFIvUnU1M3BCekhUWjgrWGEvWHIxcTFpdjR2U1V0 THcvMUlvUXFxb0NvNlZNWG90WXdYTGx5b3JLd3NMaTRtaE1URnhkRzdaWHM4SG8xR0krem0r ZW1uYXpVMW05YXRVL3hlNEZoaWlTV1djcFovZDdtdTFkUzR1N29tNm9xVHFyWDd0Ny85YmVY S2xmUTNSeXRYcmhRbCtlSEI0WERvZERwQ1NHcHFLdkowcUlJcXFJb09WY3JVVDErMmJObm16 WnZwZDZTYk5tMWF0bXhaWUNJQzVzcVZLNXMzYnk0cUtpS0VtRXdtZmo3ZFpES3huVEdmamtB ZzFCTEtlTHBXcTNXNVhQU3gwK21rK1hKNG9GZThKQ1FrckZpeDR1elpzNFNRM3Q3ZTR1Smlu VTVYVWxMUzE5Zkhyb0k4SGFxZ0NxclVva3FaMzVFV0ZSVnQzcno1eXBVclY2NWMyYkpsQzgy WEl4Yms2UWdFUWkyaHpIZWtQL3p3UTFsWldXSmlZbUppWWxsWldYZDNkMkFpd2dQeWRLaUNL cWhTaTZwSjV1bmo0K09pU1JoS3BGLzNNaUdRcHlNUUNMWEVaRHpkNC9GODk5MTNaclA1NnRX cnpjM053cWY4ZURxOWE1MWFRSjRPVlZBRlZXcFJGYkNuOS9UMHRMVzFkWFoyOXZmM056YzNm L2ZkZDhKbi9YajZuRGx6MkJveEVRdnlkQVFDb1pZSTJOT1BIejh1cXZFaXhJK243OXExNjhr bm54d2FHZ3BzMzJFR2VUcFVRUlZVcVVXVk10ZTljQXloRUJFc2tLY2pFQWkxQk82SjRZdVJr UkdiemJaMjdWb3U4dTRPSHBuM0xJY3FxSUlxWlZYWjdYYWJ6ZGJmM3g5Y000d1NUNmNnVDBj Z0VHb0paZkwwNzcvLy91Njc3NmIxWHU2KysyNzZlODZJQmZQcFVBVlZVS1VXVmNwNGVrRkJ3 UXN2dkVCL1I3cDU4K2JDd3NKUWlBZ1d5Tk1SQ0lSYVFobFAxK3Yxd25vdmVyMCtGQ0tDQmZK MHFJSXFxRktMS21VOHZhcXFhc3VXTFh5OWw2cXFxbENJQ0JiSTB4RUloRm9pVXE1bGpPUXJH cEduUXhWVVFaVmFWT0ZhUnY4Z1QwY2dFR3FKR1BYMExWdTI4QjhMN0haN2FXbHBmSHg4YVdt cDNXNW5PeU5QaHlxb2dpcTFxSXBGVCsvczdKdzFheGJ2NmVYbDVmeDlqaW9xS3RqK3lOTVJD SVJhSXVZODNlbDBGaFlXSGp0MmpQZjB0TFEwM0k4VXFxQUtxcUpEVmN4NSt2cjE2M2Z0MmtV STRUMDlMaTV1Ykd5TUVPTHhlRFFhamJDejU2ZWZydFhVYkZxM1R2RjdnV09KSlpaWXlsbisz ZVc2VmxQajd1b0tybk5LZXpwdm93cGU0akpseWhUUmxUYXBxYW5JMDZFS3FxQXFPbFNGTlUr Zk1XTkdSMGZIK1BoNEpGeTJ5R3N3bVV6OGZMckpaR0o3WWo0ZGdVQ29KY0xxNlgvKzg1L256 cDByeXBTVnVqS2QzMmx2YjI5eGNiRk9weXNwS2VucjYyTjdJaytIS3FpQ0tyV29VdXczUjZI WWE0aEFubzVBSU5RU01mY2RhUUFnVDRjcXFJSXF0YWhTeHRQLzlyZS9yVnk1a3RiYVhibHk1 Ymx6NTBJaElsZ2dUMGNnRUdvSlpUeDkyYkpsbXpkdnZuejU4dVhMbHpkdDJyUnMyYkpRaUFn V3lOT2hDcXFnU2kycWxQRjByVllyckxXcjArbENJU0pZSUU5SElCQnFDV1U4dmFpb2FQUG16 WHl0M2FLaW9sQ0lDQmJJMDZFS3FxQktMYXFVOGZRZmZ2aWhyS3dzTVRFeE1UR3hyS3lzdTdz N0ZDSW1qL0FlMDNMdS9Zb2xsbGhpcWV3Uzk1ajJEL0owcUlJcXFGS0xLbHpMNkIvTXB5TVFD TFVFUE4wL3lOT2hDcXFnU2kycTRPbitRWjZPUUNEVUV2QjAveUJQaHlxb2dpcTFxRkxHMDZk TW1SS0t2WVlJNU9rSUJFSXRvWXluejVrejUrTEZpNkhZY1NoQW5nNVZVQVZWYWxHbGpLZnYy clhyeVNlZkhCb2FDc1crZlZOZlg1K1RrNlBUNlJZdFd0VFcxa1prMzJNYWdVQWdJajhVcTdX clZQMzBoeDkrMkdhek9SeU85OTkvUHpVMWxjaSt4M1NrL1RlZTBLYWdDcXFnS2taVXhlaDNw QzZYNjlDaFF3c1hMaVN5N3pHTlFDQVFrUit4Nk9uMGswRnljdkx4NDhlSjdIdE1MeXdia0hP UDErMTN2TzIzejRaVkgvcnRJM09QVUFWVlVBVlZ3bVZZN3pITjA5N2VucE9UUTY5K1diTm1U WDE5ZlhCMzd4YzY5NUtWbFVWazMyTWFnVUFnSWorVXlkTnZ1ZVdXbHBZV09vM2UyOXM3Zi83 OFVJaVFaUDM2OVJjdlhuUTRIQWNQSHB3NWN5YVJmWS9wU0pzMW05Q21vQXFxb0NwR1ZDbmo2 VHFkenVWeVVVKy9kT21TWHE4UGhRaEo2dXJxWnMrZUhSOGZ2M1RwMGs4Ly9aVEl2c2MwQW9G QVJING80K2tyVnF4NDU1MTNPSTdyNys5ZnMyYk42dFdyUXlFaVdDQlBoeXFvZ2lxMXFGTEcw L3Y3K3g5NDRBRjZQOUxWcTFmLytPT1BvUkFSTEpDbkl4QUl0VVFzWHZjeVVaQ25ReFZVUVpW YVZNSFQvWU04SFlGQXFDV1U4ZlR2di8vKzdydnZwbk12ZDk5OTk5bXpaME1oSWxnZ1Q0Y3Fx SUlxdGFoU3h0TUxDZ3BlZU9FRmVvL3B6WnMzRnhZV2hrSkVzRUNlamtBZzFCTEtlTHBlcjNl NVhQU3gwK2tNNTdXTUFZQThIYXFnQ3FyVW9rb1pUNitxcXRxeVpRdk4wN2RzMlZKVlZSVUtF Wk5uWkdURVpyT3RYYnVXVS9wZTRGaGlpU1dXY3BaMnU5MW1zL1gzOXdmWERLVTluUzNIR1A2 NmpBR0FQQjJxb0FxcTFLSUsxNzM0Qi9QcENBUkNMUUZQOXcveWRLaUNLcWhTaXlwbFBQM3c0 Y05HbzNIS2xDa3FtbnRCSUJDSXlBOWxQRDB0TGUzZ3dZTWVqeWNVK3c0NnlOT2hDcXFnU2ky cWxQSDA1T1RrNGVIaFVPdzRGQ0JQUnlBUWFnbGxQUDNGRjEvY3NtV0wwK2tNeGI2RER2SjBx SUlxcUZLTEttVTh2Ykd4OGFhYmJsTGtXc2FHaG9ZRkN4Ym9kTHBGaXhhMXRiVVJRdXgyZTJs cGFYeDhmR2xwcWQxdVoxZEJubzVBSU5RU3luaDZlbnA2WTJPakl2UHBEejMwVUZkWGw5UHAz THQzTDcxVFhYbDVPWCtmbzRxS0NuWVY1T2xRQlZWUXBSWlZ5bmg2VWxLUzR2UHBOcHZOYURR U1F0TFMwbkEvVWdRQ0VSMFJvL1BwQXdNRFM1WXMrZkRERHdraGNYRnhZMk5qaEJDUHg2UFJh SVRkUEQvOWRLMm1adE82ZFJGNGQzRDVmYUFLcXFBcWRsVDkzZVc2VmxQajd1b0tybWY2OFhS bGF3TllyVmFqMGJodjN6NzZaMnBxS3ZKMEJBSVJIUkZ6dnlPdHJhMU5UMDgvZXZRbzMySXlt Zmo1ZEpQSnhLNkMrWFNvZ2lxb1VvdXFtUE4wMGVlRG9hR2gzdDdlNHVKaW5VNVhVbExTMTlm SHJvSThIWUZBcUNXVThYVFVaWlN6S1RYbUNGQUZWVkNsckNxRjgzU0h3L0hDQ3k5czNibzFG Q0tDQmZKMEJBS2hsbEIrN21Wb2FDZ3BLU2tVSW9JRjhuU29naXFvVW9zcWhUM2Q0L0hVMTll bnA2ZUhRa1N3UUo2T1FDRFVFZ3JQcDArWk1zVm9OQjQrZkRnVUlvSUY4blNvZ2lxb1Vvc3E1 ZWRlSWgvazZRZ0VRaTBCVC9jUDhuU29naXFvVW91cWNIdTZ1dTR4UFRJeVlyUFoxcTVkeXls OUwzQXNzY1FTU3psTHU5MXVzOW42Ky91RGE0YXk4dlN4c2JGMzNubm41cHR2WHIxNmRYQjNI MXlRcDBNVlZFR1ZXbFFwTnZmUzFOUlVVRkR3bTkvODV2ang0NkZRRUVRd240NUFJTlFTQ25q NmlSTW5mdk9iM3hRVUZEUTFOWVZpMzBFSGVUcFVRUlZVcVVWVnVEMTk5ZXJWTjk5ODg5dHZ2 MDNMMjZvQzVPa0lCRUl0Z2U5SS9ZTThIYXFnQ3FyVW9nclhNdm9IZVRvQ2dWQkx3TlA5Z3p3 ZHFxQUtxdFNpS3VZOG5aM3RzZHZ0cGFXbDhmSHhwYVdsZHJ1ZFhRVjVPZ0tCVUV2RW5LZFRo SjVlWGw3TzMrZW9vcUtDN1l3OEhhcWdDcXJVb2dxZVR0TFMwbkEvVWdRQ0VSMEJUeWR4Y1hI MHdrcVB4NlBSYUlUZFBELzlkSzJtWnRPNmRSRjRkM0Q1ZmFBS3FxQXFkbFQ5M2VXNlZsUGo3 dW9Lcm1lcXlkTlRVMU9ScHlNUWlPZ0k1T25FWkRMeDgra21rNG50alBsMHFJSXFxRktMcXBq emRQYTNUcjI5dmNYRnhUcWRycVNrcEsrdmoxMEZlVG9DZ1ZCTHhKeW5Cd0R5ZEtpQ0txaFNp eXA0dW4rUXB5TVFDTFVFUE4wL3lOT2hDcXFnU2kycTRPbitRWjZPUUNEVUV2QjAveUJQaHlx b2dpcTFxSUtuK3dkNU9nS0JVRXZBMC8yRFBCMnFvQXFxMUtJS251NkxrWkVSbTgyMmR1MWFU dWw3Z1dPSkpaWll5bG5hN1hhYnpkYmYzeDljTTR3U1Q2Y2dUNGNxcUlJcXRhaENudTRmektj akVBaTFCRHpkUDhqVG9RcXFvRW90cXVEcC9rR2Vqa0FnMUJMd2RQOGdUNGNxcUlJcXRhaUNw L3NIZVRvQ2dWQkx3TlA5Z3p3ZHFxQUtxdFNpQ3A1TzdIWjdhV2xwZkh4OGFXbXAzVzVuT3lC UFJ5QVFhZ25lMHhzZWYveEtiMit3ZkZKTm5sNWVYczdmNTZpaW9vTHRnRHdkcXFBS3F0U2lp dmYwYlVianp0emN2L3pwVDZOTzUrUjlVazJlbnBhV2h2dVJJaENJNkFpaHA5TjQvVGUvK2VH VFR5YnBrMnJ5OUxpNHVMR3hNVUtJeCtQUmFEUzA4ZlRwMDg4OTkxejFoZzNQUHZEQS83djk5 bzJQUFBMRUUwOXNmT1NSNTU1N3p2ZnltWHZ1OGR2bkR3OCs2TGVQekQxQ0ZWUkJGVlFKbDlT MXF0YXUvVDlQdi8zMkh6NytlSkkrcVNaUFQwMU45WnVuRTBMT25Uc25aMnZPTDc3dzIwZm1w dVIwZ3lyNTNhQktmamVva3Q4dE1sV1JuK2RldnZqUC80eTV1UmVUeWNUUHA1dE1KcllEOVhT MzJ5MW5hOWYyN3ZYYlIrYW01SFNES3ZuZG9FcCtONmlTM3kweVZSRkNHaDU3N0VwUGo1eWVj bENUcC9mMjloWVhGK3QwdXBLU2tyNitQcllEOVhTWmVDNWVESjYwb0FGVjhvRXErVUNWZkNK VGxYelU1Ty9QQ0E0QUFCNkZTVVJCVk9sKzZlcnFVbG9DQUFBb1NWUjVPZ0FBeERqdzlBQnBh R2hZc0dDQlRxZGJ0R2hSVzFzYklZVDdtWWhTeGJaRWdxcjYrdnFjbkp4SVUwWFpzbVdMZ2kr aWovTXFvbFNOalkxdDJiSmw5dXpaVTZaTVVVcVk3N0ZLVFUyTkVGV05qWTJabVprYWpTWWpJ Nk94c1RIVUF1RHBBZkxRUXc5MWRYVTVuYzY5ZS9jS0w4SlIxdE5aVmQ1MEtxdnE0WWNmdHRs c0RvZmovZmZmVitxOUp6a3luWjJkczJiTlV2QkZaRlVwZTBaUldGVmJ0MjdOemMzdDZ1b2FI eCtQSEZVOEhSMGR6ei8vZklTb1NrcEtzbGdzTHBmTGJEWWJESVpRQzRDblR4YWJ6V1kwR3Zr L0krRWRTQmhWa2kzaFI2VEI1WElkT25SbzRjS0ZDa29pQWxWT3A3T3dzUERZc1dPUjhDTHlx amlPbXo1OXVsNnZYN1ZxbGMxbWl4QlZScVBSYkRZcks0YUhQYmRYclZwMS92eDVwZlJRZUZV TEZ5NjBXQ3h1dDl0c05pOWV2RGpVKzRXblQ0cUJnWUVsUzVaOCtPR0hmRXNrMkFHcmltMVJY Qlg5Z0p5Y25IejgrUEVJVWJWKy9mcGR1M2FSQ0hnUjJkZnJ3b1VMbFpXVnhjWEZFYUpLbzlF OC9mVFRpWW1KUnFQeGd3OCtpQkJWbFBiMjlvY2ZmbGhCU2VTWHFrNmNPSkdVbE1SeFhGSlMw b2tUSjBLOWEzaDY0Rml0VnFQUnVHL2ZQbUdqNG5iQXFwTFVxYmdxUWdpZGU4bkt5b29RVlhS cVdQSEphMit2bDhQaDBPbDBpa2dpaktxMHREU3oyVXpuRTJiTW1CRWhxaWdyVnF6NCt1dXZs WkpFR0ZYWjJkbjgzTXN0dDl3UzZyM0Qwd09rdHJZMlBUMzk2Tkdqb25abFBaMVY1VTJuc3Fy V3IxOS84ZUpGaDhOeDhPREJtVE5uUm9ncUhnVmZSRytxcmx5NXNubno1cUtpSWlWRVNhaXFx S2d3bTgxMFBpRTlQVDFDVkJGQ1B2Lzg4enZ1dUVNUlBSUldWWEp5TWovM2twS1NFbW9COFBR QTRYN0owTkNRcUNVeVZRME5EVVdDcXJxNnV0bXpaOGZIeHk5ZHV2VFRUejhOdnlSSlZjS25G SkVrcVlvK1NFaElXTEZpeGRtelp5TkVWWDkvL3gxMzNLSFQ2VEl6TTVXYVdKZDhCZSs4ODg0 alI0NG9vc2VicW9hR0JxUFJxTkZvNXMrZmYralFvVkFMZ0tjREFFRDBBRThIQUlEb0FaNE9B QURSQXp3ZEFBQ2lCM2c2QUFCRUQvQjBBQUNJSHVEcEFBQVFQY0RUQVpnVUNsN01EZ0FMUEIx STQzYTdOMnpZTUdQR2pHblRwbTNmdmwxcE9jckRjZHdycjd4Q0NIbjU1WmZoNDRTUXJxNHVq dU53SXhvU1llY0dQQjFJVTFWVjljQURENXcvZi83S2xTdlBQUE9NMG5LVWgrTzR2THk4OGZI eDNOeGN4ZCsza2NET25Udmo0dUoyN3R5cHRCRGxpYWh6QTU0T3BKa3paNDdvcnVmQ2s1Vi96 SEZjVlZXVlhxL25pNGdxZms2SENJN2picnZ0dHExYnQ5NSsrKzNDd3hjTnk2dXZ2cHFTa3BL Y25MejM1MXNWUit1QXJGaXg0dkhISDEreFlnWDljL0hpeGZRV0VLMnRyYmZlZWlzaHBMT3pN eTh2THlFaG9icTZXamhpU2drT0hleTVRVThNclZiTDN4bGozYnAxLy9Jdi8wSUllZmpoaDU5 NjZpbCt4YUNMZ2FjRGFUUWFqY2ZqRWJaNDgvUlhYbmxsZUhqNHlTZWZES3Urc01OeDNQNzkr K1BpNGc0Y09DQTVGUFR4bmoxN0hBNUhjM096VW5jZ0NRL0R3OE5UcDA0OWYvNzgxS2xUaDRl SENTR3Z2ZlphUlVVRklhUzh2SHozN3QyRWtJVUxGNzd4eGh2RHc4Tjc5KzZOU2l2bjhYWnVl RHllOXZiMldiTm1FVUpHUjBmdnV1dXVmL3UzZjd2cnJydEdSMGRESndhZURxVHhrYWVQam80 S1BYMWtaQ1RjNHBUQWg0OExIL052MStoMnNhYW1KcjVNVlZOVEV5SGswcVZMQm9QaDNMbHpC b1BoOHVYTGhCQ3RWdXR3T0FnaERvY2p1a2VEUFIvMjdObGpOQnJqNHVJNGpwc3laUXA5cXJP emsrTzR6czdPa0lxQnB3TnBLaXNySDNqZ2dZR0JnYXRYcjFaV1ZoSkMwdExTamg0OTZuUTZY My85OWVqK0tDMkpURStYZkJ4OVBQWFVVL1NiOCszYnQvTXpDU2FUNlZlLytsVjVlVG45czdD dzhNMDMzM1E0SEcrLy9YWjBqd2I3dWlja0pEUTNOenNjRHJQWlRGc2NEc2VpUll0V3JWcTFh TkVpcDlNWk9qSHdkQ0NOeStYNjkzLy85N1MwTlA2Nmw5cmFXb1BCa0pLU3NudjNiaCtlSHEz dlh2WjlLNnFxS3RtSFJPbUFaR1ptZnZ2dHQ0U1FiNy85TmpNemt6YTJ0clp5SE5mYTJrci90 RnF0T1RrNUNRa0pHemR1akl1TG80MVJPUnJzNi83aWl5OGFEQWFEd2JCanh3N2E4dWlqajY1 WnM0WVE4ay8vOUUrUFBmWVl1Mkt3Z0tjREFFTEkyTmpZa1NOSGNuTnpsUllTSzhEVEFRQ2hn czRtWjJabUtuWG5reGdFbmc0QUFORURQQjBBQUtLSE1IbTY4SHVrWUcwd1dKc0NBSUNvWVdL ZXpubEI1czVneENwQytQcW1wcVlTUW5wNmVvcUxpK1BqNDR1TGkzdDdleVhYYW14c3pNek0x R2cwbVptWmh3OGZwaTM1K2ZueDhmRkxsaXo1L1BQUHczb01RY1hsY2ozOTlOUHA2ZW44T2Qv WTJHZzBHblU2M2E5Ly9ldnU3bTdKdGRoQkMzcCtvd2pzNmJGdjM3NnNyQ3lkVG5mcnJiY2VP M1pNY2kyMmo1d3hqSHpZMFdCYldOaGpEOEJVV1NidTZWazN4QUZQajJxZWV1cXBUWnMyRVVK Kzk3dmZWVmRYTzUzTzZ1cHFrOGtrMmRsZ01MUzB0TGhjTG92RllqQVlDQ0VtaytuVXFWTXVs K3Z3NGNNelo4NE1wL0xnVWxsWnVYang0bE9uVG8yUGo5T1cxTlRVdHJZMnQ5dHROcHZ2di85 K3liVzhEVnJVdkJlRXA4ZTMzMzdyZERyMzdkdm43VGUwYkI4NVk2Z2krTkh3MGNMREhudFF6 b3BRZWZwcnI3MW1OQm8xR28zd2Y0Nm81K25UcDB0S1NuUTZYWFoyTnMzZzJCYU80eW9yS3hN U0VuSnpjNjFXNi8vSjhGbGtRN0xRQkFpQUsxZXVKQ2NuOS9mM0UwSlNVMU1IQndjSklZT0Rn OTdldElzV0xXcHRiWFc3M1VlUEhxVkZQeWdPaDZPaG9VSFZGN1RObmozN3M4OCtFN2FrcHFa Ky9QSEg5RDJaa3BJaXVaYTNRWXVPMDFKNGV2RDA5ZlhwZERyZnZ5N20rOGdaUTdYQWpvYmsr UEN3eDg1eG5NRmcwT3YxOTl4emo4MW1DMHhHcUR4OTZ0U3AyN1p0TzNYcWxOdnRGcTR1N0xO a3laTDMzbnZQNVhLMXRMUmtaMmRMdG5BY1YxdGI2M0E0NnVycUNnc0xKVGZGTVVVMllxZlFS S2pac1dNSC9hRUVJU1F1TG01c2JPeTIyMjd6ZUR3YWpVYXl2OVZxVFU1TzVqZ3VPVG1aL3cw MC93bjBxNisrQ3BQdUVLRFJhS3FycS9WNi9ieDU4dzRlUEVnSXFhK3ZuenQzYm1KaTRzYU5H NzBOaUxkQmk0N1RVbmg2VUg3ODhjZWlvaUxmaFR5RmZlU01vVnBnUjROdEVlTHQyQzlldkZo WldWbGNYQnlZakZCNStrY2ZmWFR2dmZkbVoyZFBtemJ0ajMvOEk3KzZzSTlXcStVbmoyaEpC TGFGNHppK1pJUk9weE1xRVQ0V0ZkbUluVUlUSVdWMGRIVGV2SG04TmFlbXBsNjRjSUg0ek5O emNuSXNGb3ZMNVRLYnpYbDVlWHo3OFBEd2dRTUhDZ29LUXE4NlZDUW5KNXZOWnJmYjNkYldK cG9oUFhiczJKdzVjeVRYOGpab1VYQmFpazRQUXNoWFgzMlZrWkZSWFYwOU5qYm1iUzF2Zlh5 TW9TcGdSNE50OFFaNzdFNm5VMmgzRXlLMDgrbGpZMlBIamgzVDYvWDB6MW16WmdrenRhS2lv cWFtSm1IcEE3YUY0N2kzM25xTDV1bjUrZm5DZGgrUFk2ZlFSRWlwcjY4dkxTM2wvM3p3d1Fj M2JkcmtjcmsyYmRyMCs5Ly9YbktWcEtRa2k4WGlkcnRiV2xyb2ZQcWpqejdhMDlQamNya2FH aHBVL2VINnZ2dnU0ejJkZCtmeDhmSFRwMDh2WExpUWxzUmg4VFpvVVhCYWlrNlB1cnE2b3FL aUw3Lzgwc2Nxa24zOGpxRXFFSTJHWkF1TDVMRmZ2MzU5NjlhdFJVVkZnU2tKbGFmVFhEc3VM bTcrL1BsdnZQRUdiWHp6elRmMWVqM2YvOHlaTTh1WEwwOUlTT0RueDlrV2ZqNDlKeWVubzZP RDM3THcyMkhXMHlVTFRZQ0pzbXpaTWpySlFMSFpiTXVXTGFOZjAvZjA5TkJHMGF0ZlgxOVB5 OUhObnorL29hR0JFUEx1dSs5bVpHUm90ZHFDZ2dLTHhSSk8vY0dsdTd0NzJiSmxXcTNXYURR Mk5qYVNuMC9GOVBUMDlldlh1MXd1MmswMElPeWdzU2V3U2hHZEhxTGpHaG9hSXN4b3NIMGt4 MUNOaUVaRHNrVnlOSVRIVGx0dXV1bW01Y3VYbnoxN05qQWxZYjJXTVFBbXMzRVVtZ0FBeEJx Ui9qdlNnRDJkUTZFSkFFRHNFZW1lRGdBQVFEN3dkQUFBaUI2aXpkTlYvYVVUQUFCTWttaXI5 d0pQRHgxeTZyMndmZVNzcFZJd0lFSXdHa0lVSEkwSmUvb3BKdURwTVlLY2VpOXNIemxycVJR TWlCQ01oaEFGUnlOVW5zN1dlMkh6K2krLy9ITEJnZ1ZhclhiQmdnWDBad2djVTkyRmJXRnJ3 bGl0VmxyZHBiS3lFcDRlT3VUVWUySDd5RmxMcFdCQWhHQTBoQ2c0R3FIeWREbjFYdkx5OHVo dlJHdHJheGNzV0VDa3FydXdMV3hObVB6OC9McTZPb2ZEVVZOVEEwOFBIWExxdmJCOTVLeWxV akFnUWpBYVFoUWNqVkI1dXB4Nkx4cU5obFpsR1I0ZTFtcTFSS3E2QzlzaVdTV0czdzQ4UFhU SXFmZkM5cEd6bGtyQmdBakJhQWhSY0RSQ081OHVxdmNTSHg4dkxDQXBtYWVMcXJ1d0xXeE5t SUtDQXBxbjE5Yld3dE5EaDV4Nkwyd2ZPV3VwRkF5SUVJeUdFQVZISTFTZVR2Tm9VYjJYRFJz MjBGb3U5TS8yOXZhOHZEeU5ScE9YbHllYVR4ZFdkeEcxc0RWaE9qbzZhSFdYcXFvcWVIcm9r RlB2aGUwanVWWjBnQUVSZ3RFUW91Qm9SRmE5RjNaVDhHZ0FBSkJQWlAzbUNKNE9BQUNUSWJJ OEhRQUF3R1NBcHdNQVFQUVFXWjd1YmFZRk16QUFBQ0NIU1ArT0ZFUU9LT2doQWdNaUJLTWhS RTMxWHQ1bEFwNGVJNkNnaHdnTWlCQ01oaEExMVh1UjZlbkNMSDdxMUtuRVMzV1hwVXVYbHBl WFoyUmtsSmVYMDVhcXFxckV4RVMrdWd1L0tYN0xiTDBYRUI1UTBFTUVCa1FJUmtPSW11cTlU Q2hQcjZtcG1UNTlPblZ3eVYrTmRuVjEwU1gxZldGMWw0S0NBdUYrK2Nkc3ZSY1FIbERRUXdR R1JBaEdRNGlhNnIzSTkvVDYrdnJrNU9Uang0L1RQeVdydTdCTFVYVVhmci84WTdiZUN3Z1BL T2doQWdNaUJLTWhSRTMxWG1SNmVuTno4NHdaTS9qNUUrSWxUMmVYZkhVWFdvV1IzeS8vbUsz M0FzSURDbnFJd0lBSXdXZ0lVVk85RjVtZXJ0ZnJSUmZHU0ZaM1laZDhkUmUrZnJwb08yeTlG eEFlVU5CREJBWkVDRVpEQ09xOUFBQUFDQUtSOVpzakFBQUFrd0dlRGdBQTBRTThIUUFBb29k d2VIcGdFKzZZcGdjQWdJa1NqdTlJNGVuUkFRcDZpTUNBQ01Gb0NGRlR2WmNiVE1EVFl3UVU5 QkNCQVJHQzBSQ2lwbm92TWozZGFyWG01ZVVsSkNSVVZsYlNEbXlkRnByamE3WGFSWXNXdGJX MVNhNEZJZ2NVOUJDQkFSR0MwUkNpcG5vdk1qMDlQeisvcnE3TzRYRFUxTlRRRHQ3cXRIZzhu dmIyOWxtelprbXVCU0lIRlBRUWdRRVJndEVRb3FaNkx6STlYYXZWOHRWZGFBZTJUc3VlUFh1 TVJtTmNYQnpmd3E0RklnY1U5QkNCQVJHQzBSQ2lwbm92TWoyOW9LQ0FadHkxdGJXMEExdW5K U0Vob2JtNTJlRndtTTFtMm9kZEMwUU9LT2doQWdNaUJLTWhSRTMxWG1SNmVrZEhSMDVPVGtK Q1FsVlZsYmM2TFMrKytLTEJZREFZRER0MjdLQXQ3Rm9nY2tCQkR4RVlFQ0VZRFNHbzl3SUFB Q0FJNEhla0FBQVFQY0RUQVFBZ2VvQ25Bd0JBOUJDSm5vNEplZ0FBQ0F4OFJ3cmtnb0llSWpB Z1FqQWFRdFJVNzRYNzZDTnh3Tk5qQXhUMEVJRUJFWUxSRUtLbWVpOHlQWjM3K2M2aXVibTV3 anVMQ3F1N2RIWjIwdW91MWRYVi9FWkVpVC9IY2ErKyttcEtTa3B5Y3ZMZXZYdTlyUVhDQUFw NmlNQ0FDTUZvQ0ZGVHZSZjVubDViVyt0d09PcnE2Z29MQy9sMllYV1hoUXNYdnZIR0c4UER3 M3YzN2hYNXVQRHhuajE3SEE1SGMzTXpQVWh2YTRGUWc0SWVJakFnUWpBYVF0UlU3MFcrcDlQ S0xRNkhRNmZURVovVlhSd09odzlQSHgwZEZiWjdXd3VFR2hUMEVJRUJFWUxSRUtLbWVpL3lQ ZjJ0dDk2aWVYcCtmajZScXU1U1dGajQ1cHR2T2h5T3Q5OSsyNGVuaXg1N1d3dUVHaFQwRUlF QkVZTFJFS0ttZWk4VG5VL1B5Y25wNk9nZ1V0VmRyRllycmU2eWNlUEd1TGc0d2x4WFE2UThu VjBMaEFjVTlCQ0JBUkdDMFJBU2hmVmU1R2ZRWTJOalI0NGN5YzNOblpEdXdOWUNBSURvSmxT L09aTHA2WFJ1UFRNejg5TlBQNTNReGdOWUN3QUFvcDVJL0IwcEFBQ0F3SUNuQXdCQTlLQzhw MGYrdFN2ZXJzTWhnaThZd2k0S0FBQWtVRUc5bDNBNnB0OTlUZklMWVZXRGdoNGlZbWRBMkhj NjJ5TG51Qm9iRzQxR0k3MnVvN3U3VzNJNzBVRmpZMk4rZm41OGZQeVNKVXMrLy94emIzMjhq UWJIY2FtcHFZSHRldUwzcm1zVUJ6dzkrczVJU1ZEUVEwU3NEUWg3bmd0YjVCeFhhbXBxVzF1 YjIrMDJtODMzMzMrL2p5MnJIWlBKZE9yVUtaZkxkZmp3NFprelowcjI4VFlhaEpDbm5ucHEw NlpOZ2UwNlZKN096bGR3VE9VV0lxTzZDL3RwNFBUcDB5VWxKVHFkTGpzN20vOEh5SEZjVlZX VlhxOWZ2SGl4Wkl1a0hzbUtOSkw1aVBEUHFxcXF4TVJFZmkzQ25KR1NDcU1BRlBRUUVXc0Q0 dHZUWlk3R3h4OS9URjBzSlNWRmNqc2N4eTFkdXJTOHZEd2pJNk84dkR5SStzT1B3K0ZvYUdq d2RzbTF0OUc0Y3VWS2NuSnlmMzkvWURzTnE2ZUxLcmRJOW1UN2lMYS9aTW1TOTk1N3orVnl0 YlMwWkdkbjgzMWVlZVdWNGVIaEo1OThVckpGVWc5YmtVYk9zZkJyRlJRVXlGY1lCYUNnaDRo WUd4RGZuaTdudU9ycjYrZk9uWnVZbUxoeDQwWmhIOUZickt1cml5Nm5UcDBhMUNNSUsvd1V5 bGRmZlNYWndkdG83Tml4WTgyYU5RSHZOK1NlUGpvNnludW9xSEtMNUdPMmoyajdXcTJXejZa cDNSamFaMlJrUkNSQTJDS3BSMVNSaHQyWHBFSy9hMGtxakFKUTBFTkVyQTJJM3p4ZC9uRWRP M1pzenB3NWt0dmgzNTZTZTFRWHc4UERCdzRjNEpNL2J3aEhZM1IwZE42OGVaMmRuUUh2TkZT ZW5wYVdkdlRvVWFmVCtmcnJyN012ejRRZXg4ZkgyMncydnIyb3FLaXBxY25wZElxRXNWTDk2 aEZWcEdIM0phbUtYNHZQN21mTm1pWDhWeXlwTUFwQVFROFJzVFlndnQ5bE1vOXJmSHo4OU9u VEN4Y3VyS3lzbE54T2RIajZvNDgrMnRQVDQzSzVHaG9haFBNcUl0alJxSyt2THkwdG5jeXVR K1hwdGJXMUJvTWhKU1ZsOSs3ZDNqeWQreVdTZlFnaEd6WnNTRWhJNFA4OGMrYk04dVhMYVl1 M1hKNXRrZFFqcWtqRDdrdFNJYjhXUDUvKzVwdHY2dlY2M3dxakFCVDBFQkU3QXlMNVJoQzF5 QmtOMmprOVBYMzkrdlV1bDh2YmxvbjZQZjNkZDkvTnlNalFhclVGQlFVV2k0VTIraDBOUXNp eVpjc09Ianc0bVYycjRGckdFS0ZTMlFBQTRBUGxmM09rRlBCMEFFRDBFYnVlRGdBQTBRYzhI UUFBb2dmMWVicms5d3lZU0FFQUFLTEc3MGdsZHdkUER3TnlYbTYyai9BOENiaUVSZmhoYTNG SXRtUm1abW8wbXN6TXpNT0hEOHZjVHJSbUlYS095MXRObUczYnRrWFpnT3pidHk4ckswdW4w OTE2NjYzSGpoMlQ3QlBZR2VXWENYdDYxbzBzVWNEVFl3bzVReTNaWnpJbExNSVBXNHVEYlRF WURDMHRMUzZYeTJLeEdBd0dtZHVoUk9zWjYvdTRKR3ZDZlBQTk4rbnA2VkUySUwvNzNlKysv ZlpicDlPNWI5OCtINzlIQytDTThrc0lQWjJUVVhHRnJlNGlXZTlGcTlVdVdyU29yYTJOMzJ4 c1ZseUpCQUx6OUVtV3NBZy9iQzBPdG1YUm9rV3RyYTF1dC92bzBhTzMzbnFyek8xUVJHK0hx S2x3NHZ2MFlHdkN1Rnl1Z29LQ1AvLzV6MUhtNlR4OWZYMDZuVTcwSzNkS1lHZVVYMExyNlg0 cnJvaXF1N0F0RkkvSDA5N2VQbXZXTEJMYkZWY2lnY0E4ZlpJbExNSVBXNHVEYmJGYXJjbkp5 UnpISlNjbmUvc3hkMHhWT0NIK1RnKzJKc3l6eno1TGYzUWFsWjcrNDQ4L0ZoVVZQZlBNTTVM UEJuWkcrU1cwbnU2MzRvcW91Z3Zic21mUEhxUFJHQmNYeC8xY080V0w0WW9ya1VBQW5qNzVF aFlLSXFwTUltekp5Y214V0N3dWw4dHNOdWZsNVUxb081SXBEbEcvdGZuTjAwVTFZZWhiT3lx L1kvanFxNjh5TWpLcXE2dkh4c1o4OXd6c2pQSkdhRDFkK0tlY0NqQnNTMEpDUW5OenM4UGhN SnZOZkorWXJiZ1NDUVRnNlpNdllhRUliQzBPVVV0U1VwTEZZbkc3M1MwdExUNW1QMk9rd2du RnQzNGZOV0hVZnVBaTZ1cnFpb3FLdnZ6eVM5L2RBanVqZkJNK1Q1ZFpBVWJVOHVLTEx4b01C b1BCc0dQSERyNVB6RlpjVVJidWwvQ05mdnRNdm9SRitLSDYyY29rd3BiNitucjZJWEwrL1Br TkRRMzhpbksySXh5aTZQQjBPYWVIajFvMzZqMXdTVVNqTVRRMFJHU2NHNUpuMUVSUjM3V01B QUFBdktHKzN4d0JBQUR3Qmp3ZEFBQ2lCM2c2QUFCRUR4SHQ2Wml2QndDQUNSSEM3MGpsZUhH dytvQ2dJM3g5YVowV09TVXMySUllM2twOHFBNTJRT1RrSE96aFIwZW13bzVHWTJOamZuNStm SHo4a2lWTGZQOTRtNjN1b3ZaNkw1S2pJYXJsd3VLdHp5UkhZOEtlYm1XQXAwYzNmSjBXT1NV czJJSWVraVUrVkkyb2NJM3Y4OVBiNFVmTldjMlBoc2xrT25YcWxNdmxPbno0OE15Wk03MzFa NnU3UkZPOUYzNDB2Tlg1RVNMWlovS2pFU3BQWjdQNEw3Lzhjc0dDQlZxdGRzR0NCZlJTZkxZ UGZTeXM3a0tpNk94WEk1SjFXbnlYc0JBVjlHQmJWQTA3SUw3UFQyK0hIeDFuTlRzYURvZWpv YUVoTnpkWHNqOWIzU1dhNnIwSVI4TmJuUjhoYkorZ2pFYjQ4dlM4dkR6Nis4L2EydG9GQ3ha STlxRUlxN3Q0NndQQ0ExdW54WGNKQzdhZ0I5dWlhdGdCOFgxK2Vqdjg2RGlyUmFQQlR6NElm OVF0aEszdUVrMzFYb1NqNGEzT2p4QzJUMUJHSTN5ZXJ0Rm9hSjJXNGVGaHJWWXIyWWV0N3NM MkFXR0RyZFBpdDRRRlc5Q0RiVkV2a29Wci9PYnBrb2NmQldlMTVHZ01EdzhmT0hDQUw2NG5n cTN1RWpYMVhyd1ZOV0xyQmJId2ZZSXlHaUgwOVBqNGVKdk54djhwbWFlTCtyRFZYUWhUeXdX RURWR2RGamtsTE5pQ0hqNUtmS2dPeWNJMXZ0OTczZzVmMWY1RkVZM0dvNDgrMnRQVDQzSzVH aG9hdk0wMjhMQ0hyL1lCWWM4TnlUby9JcnoxaWRBOGZjT0dEYlRpQ3YyenZiMDlMeTlQbzlI azVlWHh2aURxdzFaM0lVd3RGeEEyUkhWYXVGOGlXY0tDTGVqaG84U0g2dkE5SUh5amNCWDI4 Q1hYVWlPaTBYajMzWGN6TWpLMFdtMUJRWUhGWXFHTk1qL0UrK2lwRmlUUERXRXRGeUtqM292 d3FZQ1ZvTjRMQUFCRUR4SDlteU1BQUFBVEFwNE9BQURSQXp3ZEFBQ2lCM2c2QUJFTnZxOENF d0tlRG9BRUFUdHAwQzNZeHdhRHNpK080MTU1NVJWQ3lNc3Z2enlaRFhJY3QzUG56c2tMWThz S05UWTJabVptYWpTYXpNek13NGNQZTl1NzZIb05sOHYxOU5OUDA5L1plOVBEMXFpUmMra0hX OE5IVHEwYjlyamsxQUlLNERvVWVEb0FFc1NVcCtmbDVZMlBqK2ZtNWs3UzAzTnljcTVmdno1 SllXeFpJWVBCME5MUzRuSzVMQmFMNzd0MEN2ZGJXVm01ZVBIaVU2ZE9qWStQZSt2UDFxaVJv NXl0NFNPbjFnMTdYUEpyQWNIVEFaZ3NrdThyN3BmRmlGNTc3VFdqMGFqUmFQaE1TazZXSjhy Q2lPQVd1N201dWZRV3UxYXJOUzh2THlFaG9iS3lVcmhsNGQ3WmZaMCtmYnFrcEVTbjAyVm5a L1Bab2w4NzREanV0dHR1MjdwMTYrMjMzMDQ3UzVabWV2WFZWMU5TVXBLVGsvZnUzZXR0Tzl1 MmJYdnBwWmY0bmJMYldieDRNUlhmMnRwNjY2MjMraGJHbHhWYXRHaFJhMnVyMiswK2V2U283 N1dFQnp0Nzl1elBQdnZNUndjZVlZMGFqdU1NQm9OZXI3L25ubnY0bjBPSzF2Sld3OGQzclJ2 MnVPVFhBb0tuQXpCWnZMMkxoTVdJcGs2ZHVtM2J0bE9uVHJuZGJyOHJTbmJnL2JxMnR0Ymhj TlRWMVJVV0ZoSkM4dlB6NitycUhBNUhUVTJOc0wvdlVraExsaXg1NzczM1hDNVhTMHRMZG5h Mi9DUGR2MzkvWEZ6Y2dRTUg2QWJabjN4ekhMZG56eDZIdzlIYzNPeXR3QVBIY1VORFExbFpX VmV1WFBHMm5kZGVlNjJpb29JUVVsNWV2bnYzYmgrcWhHV0ZyRlpyY25JeXgzSEp5Y25zais5 Rkd2akhHbzJtdXJwYXI5ZlBtemZQeHkzTzZUOUZVWTJhaXhjdlZsWldGaGNYUzY0aVdjTkhj anUrajB0K0xTQjRPZ0NUaFgwWHNjV0lQdnJvbzN2dnZUYzdPM3ZhdEdsLy9PTWZ2YTNvYmN1 am82TzhwOU5TU0E2SFE2ZlRFVUswV2kxZkhJbjJrVk1LU2F2VjhwazczMmRDUjBvZnM2V1pP STRiSFIzMWZZQzBmZnYyN2M4Ly83eTM3Vnk2ZE1sZ01KdzdkODVnTUZ5K2ZObWJKRkZab1p5 Y0hJdkY0bks1ekdaelhsNmV6R05KVGs0Mm04MXV0N3V0clkzV05QZUdaSTBhcDlOSlh3c1di elY4Zk5lNllZOUxmaTBnZURvQWs0VjlGMGtXSXlLRWpJMk5IVHQyVEsvWDB6OUZKWXhZMHRM U2poNDk2blE2WDMvOWRkN1RhVDViVjFlWG41OVBDQ2tvS0tCNWVtMXRMZTBqdVhmUnZvcUtp cHFhbXB4T1o4Qkg2aU5QOXpFeXd2Ymg0ZUg1OCtkNzJ3NGh4R1F5L2VwWHZ5b3ZML2VtaHkw cmxKU1VaTEZZM0c1M1MwdUwvUG4wKys2N2ovZDBiNTh0dk5Xb3VYNzkrdGF0VzR1S2lpVFhZ bXY0eUtsMXd4NlgvRnBBOEhRQUpndjNTNGhVTVNMNlZGeGMzUHo1ODk5NDR3MjZvcWlFRVV0 dGJhM0JZRWhKU2RtOWU3ZG9QajBuSjZlam80TVEwdEhSa1pPVGs1Q1FVRlZWNVczdjdMN09u RG16ZlBseTJzSTNCakFYeEpabWt1L3BoSkNkTzNkNjJ3NGhwTFcxbGVPNDF0WldIM3FFREEw TjFkZlgwODhvOCtmUGIyaG9rTE1XSWFTN3UzdlpzbVZhcmRab05EWTJOa3FLWjJ2VTBOVnZ1 dW1tNWN1WG56MTdWbkl0dG9hUFpLMGJ2OGNscHhZUTIrSVhlRG9BQ2pPaExBd0EzOERUQVZB WWVEb0lJdkIwQUFDSUh1RHBBQUFRUGNEVEFRQWdlb0NuQXdCQTlBQlBCK3FncWFtcHViblo0 L0UwTnpjM05UWEpYTVgzczk0NkRBOFBtODFteWY0KzFnSWdFb0NuQTNYUTFOVDB4UmRmZlAv OTkzLzV5MStDNWFyZXR2UDExMSt6VDhIS2dTcUFwd04xME5UVWRPYk1HWXZGY3ViTUdkNWVS USthbXBxNnVyb3NGc3ZwMDZlOU5ZcTJ5ZTdvK3ZYcnJhMnRrcDV1c1ZnKy92ampnWUdCb0I0 WkFNRUVuZzdVUVZOVDA2VkxsL2dsM3loODBOVFVkUG55NWVIaFlmcGJQc2xHMFRiWkhmMzFy My90N3U2V2ZHcDhmSHhnWU9EbzBhUEJPeXdBZ2d3OEhhaURwcWFtOGZIeFR6NzVaSHg4bkRk Y2k4VXlQRHpNdXp4cjhXeWphSnVTTy9JMmJ6NCtQbjdod2dWNE9vaGs0T2xBSFFnZGxuOTgr dlJwaThYUzFkVVZnS2VMakp0OWxuM1ExTlQwOGNjZm56OS9QcGdIQmtCUWdhY0RBRUQwQUU4 SEFJRG9BWjRPQUFEUkF6d2RBQUNpQjNnNkFBQkVEL0IwQUFDSUh2N1AwNjFXNjM0QUFBRHFo NE9oQXdCQTFQRC9BWjRFWUVWMjZ4WHVBQUFBQUVsRlRrU3VRbUNDIiAvPjwvcD48cD4mbmJz cDs8L3A+PHA+SWYgeW91IG5lZWQgb3RoZXIgY2hhcnRzLCBJIGNhbiB0cnkgdG8gcHJvZHVj ZSB0aGVtLiA8L3A+PHA+Jm5ic3A7PC9wPjxwPkJSLDxiciAvPkNhcnN0ZW4uPC9wPjxwPiZu YnNwOzwvcD48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMzI1 RkJBOyBwYWRkaW5nLWxlZnQ6IDVweDttYXJnaW4tbGVmdDo1cHg7Ij4tLS0tLVVyc3ByJnV1 bWw7bmdsaWNoZSBOYWNocmljaHQtLS0tLTxiciAvPjxzdHJvbmc+QW46PC9zdHJvbmc+CUNh cnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3RlbkBzY2hpZXJzLmRlJmd0Ozsgemhlbnpob25nLmR1 YW5Ab3JhY2xlLmNvbTsgbGVyc2VrQHJlZGhhdC5jb207IDxiciAvPjxzdHJvbmc+Q0M6PC9z dHJvbmc+CXhlbi1kZXZlbCAmbHQ7eGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20mZ3Q7 OyBrb25yYWQud2lsayAmbHQ7a29ucmFkLndpbGtAb3JhY2xlLmNvbSZndDs7IDxiciAvPjxz dHJvbmc+Vm9uOjwvc3Ryb25nPglLb25yYWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJhZEBk YXJub2sub3JnJmd0OzxiciAvPjxzdHJvbmc+R2VzZW5kZXQ6PC9zdHJvbmc+CU1vIDI4LjEx LjIwMTEgMTY6MzM8YnIgLz48c3Ryb25nPkJldHJlZmY6PC9zdHJvbmc+CVJlOiBbWGVuLWRl dmVsXSBMb2FkIGluY3JlYXNlIGFmdGVyIG1lbW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz5P biBGcmksIE5vdiAyNSwgMjAxMSBhdCAxMToxMTo1NVBNICswMTAwLCBDYXJzdGVuIFNjaGll cnMgd3JvdGU6PGJyIC8+Jmd0OyBJIGdvdCB0aGUgdmFsdWVzIGluIERvbVUuIEkgd2lsbCBo YXZlPGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7ICZuYnNwOyAtIGFwcm94LiA1JSBsb2FkIGluIERv bVUgd2l0aCAyLjYuMzQgWGVuaWZpZWQgS2VybmVsPGJyIC8+Jmd0OyAmbmJzcDsgLSBhcHJv eC4gMTUlIGxvYWQgaW4gRG9tVSB3aXRoIDIuNi4zMi40NiBKZXJlbXkgb3IgMy4xLjIgS2Vy bmVsIHdpdGggb25lIGNhcmQgYXR0YWNoZWQ8YnIgLz4mZ3Q7ICZuYnNwOyAtIGFwcm94LiAz MCUgbG9hZCBpbiBEb21VIHdpdGggMi42LjMyLjQ2IEplcmVteSBvciAzLjEuMiBLZXJuZWwg d2l0aCB0d28gY2FyZHMgYXR0YWNoZWQ8YnIgLz48YnIgLz5IQSE8YnIgLz48YnIgLz5JIGp1 c3Qgd29uZGVyIGlmIHRoZSBpc3N1ZSBpcyB0aGF0IHRoZSByZXBvcnRpbmcgb2YgQ1BVIHNw ZW50IGlzIHdyb25nLjxiciAvPkxhc3psbyBFcnNlayBhbmQgWmhlbnpob25nIER1YW4gaGF2 ZSBib3RoIHJlcG9ydGVkIGEgYnVnIGluIHRoZSBwdm9wczxiciAvPmNvZGUgd2hlbiBpdCBj YW1lIHRvIGFjY291bnQgb2YgQ1BVIHRpbWUuPGJyIC8+PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7 IEkgbG9va2VkIHRocm91Z2ggbXkgb2xkIG1haWxzIGZyb20geW91IGFuZCB5b3UgZXhwbGFp bmVkIGFscmVhZHkgdGhlIG5lY2Vzc2l0eSBvZiBkb3VibGU8YnIgLz4mZ3Q7IGJvdW5jZSBi dWZmZXJpbmcgKFBDSS0mZ3Q7YmVsb3cgNEdCLSZndDthYm92ZSA0R0IpLiBXaGF0IEkgZG9u JiMzOTt0IHVuZGVyc3RhbmQgaXM6IHdoeSBkb2VzIHRoZTxiciAvPiZndDsgWGVuaWZpZWQg a2VybmVsIG5vdCBoYXZlIHRoaXMga2luZCBvZiBpc3N1ZT88YnIgLz48YnIgLz5UaGF0IGlz IGEgcHV6emxlLiBJdCBzaG91bGQgbm90LiBUaGUgY29kZSBpcyB2ZXJ5IG11Y2ggdGhlIHNh bWUgLSBib3RoPGJyIC8+dXNlIHRoZSBnZW5lcmljIFNXSU9UTEIgd2hpY2ggaGFzIG5vdCBj aGFuZ2VkIGZvciB5ZWFycy48YnIgLz4mZ3Q7IDxiciAvPiZndDsgVGhlIGRyaXZlciBpbiBx dWVzdGlvbiBpcyBuZWFybHkgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHR3byBrZXJuZWwgdmVy c2lvbnMuIEl0IGlzIGluPGJyIC8+Jmd0OyBEcml2ZXJzL21lZGlhL2R2Yi90dHBjaSBieSB0 aGUgd2F5IGFuZCB3aGVuIEkgdW5kZXJzdG9vZCB0aGUgY29kZSByaWdodCwgdGhlIGFsbG8g aW4gPGJyIC8+Jmd0OyBxdWVzdGlvbiBpczo8YnIgLz4mZ3Q7IDxiciAvPiZndDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8qIGFsbG9jYXRlIGFuZCBpbml0IGJ1ZmZlcnMgKi88 YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBhdjcxMTAtJmd0O2RlYmlf dmlydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIDgxOTIsICZhbXA7YXY3MTEwLSZn dDtkZWJpX2J1cyk7PGJyIC8+PGJyIC8+R29vZC4gU28gaXQgYWxsb2NhdGVzIGl0IGR1cmlu ZyBpbml0IGFuZCB1c2VzIGl0LjxiciAvPiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7IGlmICghYXY3MTEwLSZndDtkZWJpX3ZpcnQpPGJyIC8+Jmd0OyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGdvdG8gZXJyX3Nh YTcxNDY2X3ZmcmVlXzQ7PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7IGlzbiYjMzk7dCBpdD8gSSB0 aGluayB0aGUgY2FyZHMgYXJlIGNvbnN0YW50bHkgdHJhbnNmZXJyaW5nIHRoZSBzdHJlYW0g cmVjZWl2ZWQgdGhyb3VnaCBETUEuIDxiciAvPjxiciAvPlllYWgsIGFuZCB0aGF0IG1lbW9y eSBpcyBzZXQgYXNpZGUgZm9yIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFNvIHRoZXJlPGJy IC8+c2hvdWxkIGJlIG5vIGJvdW5jZSBidWZmZXJpbmcgaGFwcGVuaW5nIChhcyBpdCBhbGxv Y2F0ZWQgdGhlIG1lbW9yeTxiciAvPmJlbG93IHRoZSA0R0IgbWFyaykuPGJyIC8+Jmd0OyA8 YnIgLz4mZ3Q7IEkgaGF2ZSBzZXQgZG9tMF9tZW09NTEyTSBieSB0aGUgd2F5LCBzaGFsbCBJ IGNoYW5nZSB0aGF0IGluIHNvbWUgd2F5PzxiciAvPjxiciAvPkRvZXMgdGhlIHJlcG9ydGlu ZyAoQ1BVIHVzYWdlIG9mIERvbVUpIGNoYW5nZSBpbiBhbnkgd2F5IHdpdGggdGhhdD88YnIg Lz4mZ3Q7IDxiciAvPiZndDsgSSBjYW4gdHJ5IG91dCBzb21lIHRoaW5ncywgaWYgeW91IHdh bnQgbWUgdG8uIEJ1dCBJIGhhdmUgbm8gaWRlYSB3aGF0IHRvIGRvIGFuZCB3aGVyZSB0bzxi ciAvPiZndDsgc3RhcnQsIHNvIEkgcmVseSBvbiB5b3VyIGhlbHAuLi48YnIgLz4mZ3Q7IDxi ciAvPiZndDsgQ2Fyc3Rlbi48YnIgLz4mZ3Q7IDxiciAvPiZndDsgLS0tLS1VcnNwcj9uZ2xp Y2hlIE5hY2hyaWNodC0tLS0tPGJyIC8+Jmd0OyBWb246IHhlbi1kZXZlbC1ib3VuY2VzQGxp c3RzLnhlbnNvdXJjZS5jb20gW21haWx0bzp4ZW4tZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5z b3VyY2UuY29tXSBJbSBBdWZ0cmFnIHZvbiBLb25yYWQgUnplc3p1dGVrIFdpbGs8YnIgLz4m Z3Q7IEdlc2VuZGV0OiBGcmVpdGFnLCAyNS4gTm92ZW1iZXIgMjAxMSAxOTo0MzxiciAvPiZn dDsgQW46IENhcnN0ZW4gU2NoaWVyczxiciAvPiZndDsgQ2M6IHhlbi1kZXZlbDsga29ucmFk LndpbGs8YnIgLz4mZ3Q7IEJldHJlZmY6IFJlOiBbWGVuLWRldmVsXSBMb2FkIGluY3JlYXNl IGFmdGVyIG1lbW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz4mZ3Q7IDxiciAvPiZndDsgT24g VGh1LCBOb3YgMjQsIDIwMTEgYXQgMDE6Mjg6NDRQTSArMDEwMCwgQ2Fyc3RlbiBTY2hpZXJz IHdyb3RlOjxiciAvPiZndDsgJmd0OyBIZWxsbyBhZ2FpbiwgSSB3b3VsZCBsaWtlIHRvIGNv bWUgYmFjayB0byB0aGF0IHRoaW5nLi4uc29ycnkgdGhhdCBJIGRpZCBub3QgaGF2ZSB0aGUg dGltZSB1cCB0byBub3cuPGJyIC8+Jmd0OyAmZ3Q7IDxiciAvPiZndDsgJmd0OyA/PzxiciAv PiZndDsgJmd0OyBXZSAobm93KSBzcGVhayBhYm91dDxiciAvPiZndDsgJmd0OyA8YnIgLz4m Z3Q7ICZndDsgPz88YnIgLz4mZ3Q7ICZndDsgKglYZW4gNC4xLjI8YnIgLz4mZ3Q7ICZndDsg KglEb20wIGlzIEplcmVteSYjMzk7cyAyLjYuMzIuNDYgNjQgYml0PGJyIC8+Jmd0OyAmZ3Q7 ICoJRG9tVSBpbiBxdWVzdGlvbiBpcyBub3cgMy4xLjIgNjQgYml0PGJyIC8+Jmd0OyAmZ3Q7 ICoJU2FtZSB0aGluZyBpZiBEb21VIGlzIGFsc28gMi42LjMyLjQ2PGJyIC8+Jmd0OyAmZ3Q7 ICoJRG9tVSBvd25zIHR3byBQQ0kgY2FyZHMgKERWQi1DKSB0aGF0IG8gRE1BPGJyIC8+Jmd0 OyAmZ3Q7ICoJTWFjaGluZSBoYXMgOEdCLCBEb20wIHBpbm5lZCBhdCA1MTJNQjxiciAvPiZn dDsgJmd0OyA8YnIgLz4mZ3Q7ICZndDsgPz88YnIgLz4mZ3Q7ICZndDsgQXMgY29tcGFyZWQg dG8gMi42LjM0IEtlcm5lbCB3aXRoIGJhY2twb3J0ZWQgcGF0Y2hlcywgdGhlIGxvYWQgb24g dGhlIERvbVUgaXMgYXQgbGVhc3QgdHdpY2UgYXMgaGlnaC4gSXQ8YnIgLz4mZ3Q7ICZndDsg PGJyIC8+Jmd0OyAmZ3Q7IHdpbGwgYmUgJnF1b3Q7Y2xvc2UgdG8gbm9ybWFsJnF1b3Q7IGlm IEkgcmVkdWNlIHRoZSBtZW1vcnkgdXNlZCB0byA0R0IuPGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7 IFRoYXQgaXMgaW4gdGhlIGRvbTAgb3IganVzdCBpbiBnZW5lcmFsIG9uIHRoZSBtYWNoaW5l PzxiciAvPiZndDsgJmd0OyA8YnIgLz4mZ3Q7ICZndDsgPz88YnIgLz4mZ3Q7ICZndDsgQXMg eW91IGNhbiBzZWUgZnJvbSB0aGUgYXR0YWNobWVudCwgeW91IG9uY2UgaGFkIGFuIGlkZWEu IFNvIHNob3VsZCB3ZSB0cnkgdG8gZmluZCBzb21ldGhpbmcuLi4/PGJyIC8+Jmd0OyA8YnIg Lz4mZ3Q7IEkgdGhpbmsgdGhhdCB3YXMgdG8gaW5zdHJ1bWVudCBzd2lvdGxiIHRvIGdpdmUg YW4gaWRlYSBvZiBob3c8YnIgLz4mZ3Q7IG9mdGVuIGl0IGlzIGNhbGxlZCBhbmQgYmFzaWNh bGx5IGhhdmUgYSBtYXRyaXggb2YgaXRzIGxvYWQuIEFuZDxiciAvPiZndDsgZnJvbSB0aGVy ZSBmaWd1cmUgb3V0IGlmIHRoZSBpc3N1ZSBpcyB0aGF0OjxiciAvPiZndDsgPGJyIC8+Jmd0 OyAmbmJzcDsxKS4gVGhlIGRyaXZlcnMgYWxsb2NvYXRlL2JvdW5jZS9kZWFsbG9jYXRlIGJ1 ZmZlcnMgb24gZXZlcnkgaW50ZXJydXB0PGJyIC8+Jmd0OyAmbmJzcDsgJm5ic3A7IChiYWQs IGRyaXZlciBzaG91bGQgYmUgdXNpbmcgc29tZSBmb3JtIG9mIGRtYSBwb29sIGFuZCBtb3N0 IG9mIHRoZTxiciAvPiZndDsgJm5ic3A7ICZuYnNwOyBpdnR2IGRvIHRoYXQpPGJyIC8+Jmd0 OyA8YnIgLz4mZ3Q7ICZuYnNwOzIpLiBUaGUgYnVmZmVycyBhbGxvY2F0ZWQgdG8gdGhlIGRy aXZlcnMgYXJlIGFib3ZlIHRoZSA0R0IgYW5kIHdlIGVuZDxiciAvPiZndDsgJm5ic3A7ICZu YnNwOyB1cCBib3VuY2luZyBpdCBuZWVkbGVzc2x5LiBUaGF0IGNhbiBoYXBwZW4gaWYgdGhl IGRvbTAgaGFzIG1vc3Qgb2Y8YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgdGhlIHByZWNpb3Vz IG1lbW9yeSB1bmRlciA0R0IuIEhvd2V2ZXIsIHRoYXQgaXMgdXN1YWxseSBub3QgdGhlIGNh c2U8YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgYXMgdGhlIGRvbWFpbiBpc3VzdWFsbHkgYWxs b2NhdGVkIGZyb20gdGhlIHRvcCBvZiB0aGUgbWVtb3J5LiBUaGU8YnIgLz4mZ3Q7ICZuYnNw OyAmbmJzcDsgZml4IGZvciB0aGF0IHdhcyB0byBzZXQgZG9tMF9tZW09bWF4OlhYLiAuLiBi dXQgd2l0aCBEb20wIGtlcm5lbHM8YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgYmVmb3JlIDMu MSwgdGhlIHBhcmFtZXRlciB3b3VsZCBiZSBpZ25vcmVkLCBzbyB5b3UgaGFkIHRvIHVzZTxi ciAvPiZndDsgJm5ic3A7ICZuYnNwOyAmIzM5O21lbT1YWCYjMzk7IG9uIHRoZSBMaW51eCBj b21tYW5kIGxpbmUgYXMgd2VsbC48YnIgLz4mZ3Q7IDxiciAvPiZndDsgJm5ic3A7MykuIFdo ZXJlIGRpZCB5b3UgZ2V0IHRoZSBsb2FkIHZhbHVlcz8gV2FzIGl0IGRvbTA/IG9yIGRvbVU/ PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7IDxiciAvPiZndDsgPGJyIC8+Jmd0OyAmZ3Q7IDxiciAv PiZndDsgJmd0OyA/PzxiciAvPiZndDsgJmd0OyBDYXJzdGVuLjxiciAvPiZndDsgJmd0OyA/ PzxiciAvPiZndDsgJmd0OyAtLS0tLVVyc3ByPz9uZ2xpY2hlIE5hY2hyaWNodC0tLS0tPGJy IC8+Jmd0OyAmZ3Q7IEFuOmtvbnJhZC53aWxrICZsdDtrb25yYWQud2lsa0BvcmFjbGUuY29t Jmd0OzsgPGJyIC8+Jmd0OyAmZ3Q7IENDOmxpbnV4ICZsdDtsaW51eEBlaWtlbGVuYm9vbS5p dCZndDs7IHhlbi1kZXZlbCAmbHQ7eGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20mZ3Q7 OyA8YnIgLz4mZ3Q7ICZndDsgVm9uOkNhcnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3RlbkBzY2hp ZXJzLmRlJmd0OzxiciAvPiZndDsgJmd0OyBHZXNlbmRldDpNaSAyOS4wNi4yMDExIDIzOjE3 PGJyIC8+Jmd0OyAmZ3Q7IEJldHJlZmY6QVc6IFJlOiBSZTogUmU6IEFXOiBSZTogW1hlbi1k ZXZlbF0gQVc6IExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGU/PGJyIC8+Jmd0 OyAmZ3Q7ICZndDsgTGV0cyBmaXJzdCBkbyB0aGUgYykgZXhwZXJpbWVudCBhcyB0aGF0IHdp bGwgbGlrZWx5IGV4cGxhaW4geW91ciBsb2FkIGF2ZXJhZ2UgaW5jcmVhc2UuPGJyIC8+Jmd0 OyAmZ3Q7IC4uLjxiciAvPiZndDsgJmd0OyAmZ3Q7ICZndDtjKS4gSWYgeW91IHdhbnQgdG8g c2VlIGlmIHRoZSBmYXVsdCBoZXJlIGxpZXMgaW4gdGhlIGJvdW5jZSBidWZmZXIgPGJyIC8+ Jmd0OyAmZ3Q7ICZndDsgYmVpbmcgdXNlZCBtb3JlPGJyIC8+Jmd0OyAmZ3Q7ICZndDsgJmd0 O29mdGVuIGluIHRoZSBEb21VIGIvYyB5b3UgaGF2ZSA4R0Igb2YgbWVtb3J5IG5vdyBhbmQg eW91IGVuZCB1cCB1c2luZyA8YnIgLz4mZ3Q7ICZndDsgJmd0OyBtb3JlIHBhZ2VzPGJyIC8+ Jmd0OyAmZ3Q7ICZndDsgJmd0O3Bhc3QgNEdCIChpbiBEb21VKSwgSSBjYW4gY29vayB1cCBh IHBhdGNoIHRvIGZpZ3VyZSB0aGlzIG91dC4gQnV0IGFuIDxiciAvPiZndDsgJmd0OyAmZ3Q7 IGVhc2llciB3YXkgaXM8YnIgLz4mZ3Q7ICZndDsgJmd0OyAmZ3Q7dG8ganVzdCBkbyAob24g dGhlIFhlbiBoeXBlcnZpc29yIGxpbmUpOiBtZW09NEcgYW5kIHRoYXQgd2lsbCBtYWtlIDxi ciAvPiZndDsgJmd0OyAmZ3Q7IHRoaW5rIHlvdSBvbmx5IGhhdmU8YnIgLz4mZ3Q7ICZndDsg Jmd0OyAmZ3Q7NEdCIG9mIHBoeXNpY2FsIFJBTS4gPz9JZiB0aGUgbG9hZCBjb21lcyBiYWNr IHRvIHRoZSBub3JtYWwgJnF1b3Q7YW1vdW50JnF1b3Q7IDxiciAvPiZndDsgJmd0OyAmZ3Q7 IHRoZW4gdGhlIGxpa2VseTxiciAvPiZndDsgJmd0OyAmZ3Q7ICZndDtjdWxwcml0IGlzIHRo YXQgYW5kIHdlIGNhbiB0aGluayBvbiBob3cgdG8gZml4IHRoaXMuPGJyIC8+Jmd0OyAmZ3Q7 IDxiciAvPiZndDsgJmd0OyBZb3UgYXJlIG9uIHRoZSByaWdodCB0cmFjay4gTG9hZCB3YXMg Z29pbmcgZG93biB0byAmcXVvdDtub3JtYWwmcXVvdDsgMTAlIHdoZW4gcmVkdWNpbmc8YnIg Lz4mZ3Q7ICZndDsgWGVuIHRvIDRHQiBieSB0aGUgcGFyYW1ldGVyLiBMb2FkIHNlZW1zIHRv IGJlIHN0aWxsIGEgbGl0dGxlLCBsaXR0bGUgYml0IGxvd2VyPGJyIC8+Jmd0OyAmZ3Q7IHdp dGggWGVuaWZpZWQgS2VybmVsICg4LTklKSwgYnV0IHRoaXMgaXMgZHJhc3RpY2FsbHkgbG93 ZXIgdGhhbiB0aGUgMjAlIHdlIGhhZDxiciAvPiZndDsgJmd0OyBiZWZvcmUuPGJyIC8+Jmd0 OyA8YnIgLz4mZ3Q7ICZndDsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX188YnIgLz4mZ3Q7ICZndDsgWGVuLWRldmVsIG1haWxpbmcgbGlzdDxiciAv PiZndDsgJmd0OyBYZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbTxiciAvPiZndDsgJmd0 OyBodHRwOi8vbGlzdHMueGVuc291cmNlLmNvbS94ZW4tZGV2ZWw8YnIgLz4mZ3Q7IDxiciAv PiZndDsgPGJyIC8+Jmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXzxiciAvPiZndDsgWGVuLWRldmVsIG1haWxpbmcgbGlzdDxiciAvPiZndDsg WGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb208YnIgLz4mZ3Q7IGh0dHA6Ly9saXN0cy54 ZW5zb3VyY2UuY29tL3hlbi1kZXZlbDxiciAvPiZndDsgPGJyIC8+PGJyIC8+X19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIgLz5YZW4tZGV2ZWwg bWFpbGluZyBsaXN0PGJyIC8+WGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb208YnIgLz5o dHRwOi8vbGlzdHMueGVuc291cmNlLmNvbS94ZW4tZGV2ZWw8YnIgLz48L2Jsb2NrcXVvdGU+ CjwvYm9keT4KPC9odG1sPg== --=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I-- --===============7373466658977440381== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============7373466658977440381==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 28 Nov 2011 11:45:16 -0500 Message-ID: <20111128164516.GA26664@phenom.dumpdata.com> References: <20111128152829.GC9655@andromeda.dapyr.net> <1322494816.20646.14.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1322494816.20646.14.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "lersek@redhat.com" List-Id: xen-devel@lists.xenproject.org On Mon, Nov 28, 2011 at 03:40:13PM +0000, Ian Campbell wrote: > On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote: > > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote: > > > > I looked through my old mails from you and you explained already the necessity of double > > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the > > > Xenified kernel not have this kind of issue? > > > > That is a puzzle. It should not. The code is very much the same - both > > use the generic SWIOTLB which has not changed for years. > > The swiotlb-xen used by classic-xen kernels (which I assume is what > Carsten means by "Xenified") isn't exactly the same as the stuff in > mainline Linux, it's been heavily refactored for one thing. It's not > impossible that mainline is bouncing something it doesn't really need > to. The usage, at least with 'pci_alloc_coherent' is that there is no bouncing being done. The alloc_coherent will allocate a nice page, underneath the 4GB mark and give it to the driver. The driver can use it as it wishes and there is no need to bounce buffer. But I can't find the implementation of that in the classic Xen-SWIOTLB. It looks as if it is using map_single which would be taking the memory out of the pool for a very long time, instead of allocating memory and "swizzling" the MFNs. [Note, I looked at the 2.6.18 hg tree for classic, the 2.6.34 is probably improved much better so let me check that] Carsten, let me prep up a patch that will print some diagnostic information during the runtime - to see how often it does the bounce, the usage, etc.. > > It's also possible that the dma mask of the device is different/wrong in > mainline leading to such additional bouncing. If one were to use map_page and such - yes. But the alloc_coherent bypasses that and ends up allocating it right under the 4GB (or rather it allocates based on the dev->coherent_mask and swizzles the MFNs as required). > > I guess it's also possible that the classic-Xen kernels are playing fast > and loose by not bouncing something they should (although if so they > appear to be getting away with it...) or that there is some difference > which really means mainline needs to bounce while classic-Xen doesn't. Could be very well. > > Ian. > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laszlo Ersek Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 28 Nov 2011 17:58:01 +0100 Message-ID: <4ED3BD99.8050902@redhat.com> References: <20111128152829.GC9655@andromeda.dapyr.net> <1322494816.20646.14.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1322494816.20646.14.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "konrad.wilk" List-Id: xen-devel@lists.xenproject.org On 11/28/11 16:40, Ian Campbell wrote: > On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote: >> On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote: > >>> I looked through my old mails from you and you explained already the necessity of double >>> bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the >>> Xenified kernel not have this kind of issue? >> >> That is a puzzle. It should not. The code is very much the same - both >> use the generic SWIOTLB which has not changed for years. > > The swiotlb-xen used by classic-xen kernels (which I assume is what > Carsten means by "Xenified") isn't exactly the same as the stuff in > mainline Linux, it's been heavily refactored for one thing. It's not > impossible that mainline is bouncing something it doesn't really need > to. Please excuse me if I'm completely mistaken; my only point of reference is that we recently had to backport . > It's also possible that the dma mask of the device is different/wrong in > mainline leading to such additional bouncing. dma_alloc_coherent() -- which I guess is the precursor of pci_alloc_consistent() -- asks xen_create_contiguous_region() to back the vaddr range with frames machine-addressible inside the device's dma mask. xen_create_contiguous_region() seems to land in a XENMEM_exchange hypercall (among others). Perhaps this extra layer of indirection allows the driver to use low pages directly, without bounce buffers. > I guess it's also possible that the classic-Xen kernels are playing fast > and loose by not bouncing something they should (although if so they > appear to be getting away with it...) or that there is some difference > which really means mainline needs to bounce while classic-Xen doesn't. I'm sorry if what I just posted is painfully stupid. I'm taking the risk for the 1% chance that it could be helpful. Wrt. the idle time accounting problem, after Niall's two pings, I'm also waiting for a verdict, and/or for myself finding the time and fishing out the current patches. Laszlo From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 08:31:04 +0000 Message-ID: <4ED4A6580200007800063F87@nat28.tlf.novell.com> References: <20111128152829.GC9655@andromeda.dapyr.net> <1322494816.20646.14.camel@zakaz.uk.xensource.com> <20111128164516.GA26664@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20111128164516.GA26664@phenom.dumpdata.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: xen-devel , Ian Campbell , "lersek@redhat.com" , "zhenzhong.duan@oracle.com" , Konrad Rzeszutek Wilk , Carsten Schiers List-Id: xen-devel@lists.xenproject.org >>> On 28.11.11 at 17:45, Konrad Rzeszutek Wilk wrote: > But I can't find the implementation of that in the classic Xen-SWIOTLB. linux-2.6.18-xen.hg/arch/i386/kernel/pci-dma-xen.c:dma_alloc_coherent(). Jan From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 10:31:02 +0100 Message-ID: References: <4ED4A6580200007800063F87@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm" Return-path: In-Reply-To: <4ED4A6580200007800063F87@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Jan_Beulich?= , =?utf-8?Q?Konrad_Rzesz?= =?utf-8?Q?utek_Wilk?= Cc: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Ian_Campbell?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm Content-Type: multipart/alternative; boundary="=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA" --=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable I attached the actualy used 2.6.34 file here, if that helps. BR,C.=0D=0A=C2= =A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D=0AAn:Konrad Rzeszutek = Wilk ;=20=0D=0ACC:Ian Campbell ; Konrad Rzeszutek Wilk ; xen-devel ; zhenzhong.duan@oracle.com; lersek@redhat.com; Carst= en Schiers ;=20=0D=0AVon:Jan Beulich =0D=0AGesendet:Di 29.11.2011 09:52=0D=0ABetreff:Re: [Xen-devel] Load i= ncrease after memory upgrade (part2)=0D=0A>>> On 28.11.11 at 17:45, Konra= d Rzeszutek Wilk wrote:=0D=0A> But I can't find = the implementation of that in the classic Xen-SWIOTLB.=0D=0A=0D=0Alinux-2= =2E6.18-xen.hg/arch/i386/kernel/pci-dma-xen.c:dma_alloc_coherent().=0D=0A= =0D=0AJan=0D=0A=0D=0A --=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= p>I attached the actualy used 2.6.34 file here, if that helps. BR,C.
 

-----Ursprüngliche Nachricht-----
An:=09Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>= ;
CC:=09Ian Campbell <Ian.Campbell@citrix.com&g= t;; Konrad Rzeszutek Wilk <konrad@darnok.org>; xen-devel <xen-de= vel@lists.xensource.com>; zhenzhong.duan@oracle.com; lersek@redhat.com= ; Carsten Schiers <carsten@schiers.de>;
Von:= =09Jan Beulich <JBeulich@suse.com>
Gesendet:=09= Di 29.11.2011 09:52
Betreff:=09Re: [Xen-devel] Load= increase after memory upgrade (part2)
>>> On 28.11.11 at 1= 7:45, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
&g= t; But I can't find the implementation of that in the classic Xen-SWI= OTLB.

linux-2.6.18-xen.hg/arch/i386/kernel/pci-dma-xen.c:dma_a= lloc_coherent().

Jan

=0A=0A --=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA-- --=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm Content-Type: application/octet-stream; name=pci-dma-xen.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=pci-dma-xen.c I2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiNpbmNsdWRlIDxsaW51eC9kbWEtZGVi dWcuaD4KI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0u aD4KI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgojaW5jbHVkZSA8bGludXgvcGNpLmg+CiNpbmNs dWRlIDxsaW51eC9rbWVtbGVhay5oPgoKI2luY2x1ZGUgPGFzbS9wcm90by5oPgojaW5jbHVk ZSA8YXNtL2RtYS5oPgojaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiNpbmNsdWRlIDxhc20vZ2Fy dC5oPgojaW5jbHVkZSA8YXNtL2NhbGdhcnkuaD4KI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUu aD4KI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgoKc3RhdGljIGludCBmb3JiaWRfZGFjIF9f cmVhZF9tb3N0bHk7CgpzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHMgPSAmbm9tbXVfZG1h X29wczsKRVhQT1JUX1NZTUJPTChkbWFfb3BzKTsKCnN0YXRpYyBpbnQgaW9tbXVfc2FjX2Zv cmNlIF9fcmVhZF9tb3N0bHk7CgojaWZkZWYgQ09ORklHX0lPTU1VX0RFQlVHCmludCBwYW5p Y19vbl9vdmVyZmxvdyBfX3JlYWRfbW9zdGx5ID0gMTsKaW50IGZvcmNlX2lvbW11IF9fcmVh ZF9tb3N0bHkgPSAxOwojZWxzZQppbnQgcGFuaWNfb25fb3ZlcmZsb3cgX19yZWFkX21vc3Rs eSA9IDA7CmludCBmb3JjZV9pb21tdSBfX3JlYWRfbW9zdGx5ID0gMDsKI2VuZGlmCgppbnQg aW9tbXVfbWVyZ2UgX19yZWFkX21vc3RseSA9IDA7CgppbnQgbm9faW9tbXUgX19yZWFkX21v c3RseTsKLyogU2V0IHRoaXMgdG8gMSBpZiB0aGVyZSBpcyBhIEhXIElPTU1VIGluIHRoZSBz eXN0ZW0gKi8KaW50IGlvbW11X2RldGVjdGVkIF9fcmVhZF9tb3N0bHkgPSAwOwoKLyoKICog VGhpcyB2YXJpYWJsZSBiZWNvbWVzIDEgaWYgaW9tbXU9cHQgaXMgcGFzc2VkIG9uIHRoZSBr ZXJuZWwgY29tbWFuZCBsaW5lLgogKiBJZiB0aGlzIHZhcmlhYmxlIGlzIDEsIElPTU1VIGlt cGxlbWVudGF0aW9ucyBkbyBubyBETUEgdHJhbnNsYXRpb24gZm9yCiAqIGRldmljZXMgYW5k IGFsbG93IGV2ZXJ5IGRldmljZSB0byBhY2Nlc3MgdG8gd2hvbGUgcGh5c2ljYWwgbWVtb3J5 LiBUaGlzIGlzCiAqIHVzZWZ1bCBpZiBhIHVzZXIgd2FudHMgdG8gdXNlIGFuIElPTU1VIG9u bHkgZm9yIEtWTSBkZXZpY2UgYXNzaWdubWVudCB0bwogKiBndWVzdHMgYW5kIG5vdCBmb3Ig ZHJpdmVyIGRtYSB0cmFuc2xhdGlvbi4KICovCmludCBpb21tdV9wYXNzX3Rocm91Z2ggX19y ZWFkX21vc3RseTsKCi8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAo bm9ybWFsbHkgSVNBKS4gKi8Kc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldiA9 IHsKCS5pbml0X25hbWUgPSAiZmFsbGJhY2sgZGV2aWNlIiwKCS5jb2hlcmVudF9kbWFfbWFz ayA9IElTQV9ETUFfQklUX01BU0ssCgkuZG1hX21hc2sgPSAmeDg2X2RtYV9mYWxsYmFja19k ZXYuY29oZXJlbnRfZG1hX21hc2ssCn07CkVYUE9SVF9TWU1CT0woeDg2X2RtYV9mYWxsYmFj a19kZXYpOwoKLyogTnVtYmVyIG9mIGVudHJpZXMgcHJlYWxsb2NhdGVkIGZvciBETUEtQVBJ IGRlYnVnZ2luZyAqLwojZGVmaW5lIFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTICAgICAg IDMyNzY4CgppbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2sp CnsKCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQoJ CXJldHVybiAtRUlPOwoKCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKCglyZXR1cm4gMDsKfQpF WFBPUlRfU1lNQk9MKGRtYV9zZXRfbWFzayk7CgojaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0 KSAmJiAhZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgIWRlZmluZWQoQ09ORklHX1hFTikKc3Rh dGljIF9faW5pdGRhdGEgdm9pZCAqZG1hMzJfYm9vdG1lbV9wdHI7CnN0YXRpYyB1bnNpZ25l ZCBsb25nIGRtYTMyX2Jvb3RtZW1fc2l6ZSBfX2luaXRkYXRhID0gKDEyOFVMTDw8MjApOwoK c3RhdGljIGludCBfX2luaXQgcGFyc2VfZG1hMzJfc2l6ZV9vcHQoY2hhciAqcCkKewoJaWYg KCFwKQoJCXJldHVybiAtRUlOVkFMOwoJZG1hMzJfYm9vdG1lbV9zaXplID0gbWVtcGFyc2Uo cCwgJnApOwoJcmV0dXJuIDA7Cn0KZWFybHlfcGFyYW0oImRtYTMyX3NpemUiLCBwYXJzZV9k bWEzMl9zaXplX29wdCk7Cgp2b2lkIF9faW5pdCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9p ZCkKewoJdW5zaWduZWQgbG9uZyBzaXplLCBhbGlnbjsKCWlmIChtYXhfcGZuIDw9IE1BWF9E TUEzMl9QRk4pCgkJcmV0dXJuOwoKCS8qCgkgKiBjaGVjayBhcGVydHVyZV82NC5jIGFsbG9j YXRlX2FwZXJ0dXJlKCkgZm9yIHJlYXNvbiBhYm91dAoJICogdXNpbmcgNTEyTSBhcyBnb2Fs CgkgKi8KCWFsaWduID0gNjRVTEw8PDIwOwoJc2l6ZSA9IHJvdW5kdXAoZG1hMzJfYm9vdG1l bV9zaXplLCBhbGlnbik7CglkbWEzMl9ib290bWVtX3B0ciA9IF9fYWxsb2NfYm9vdG1lbV9u b3BhbmljKHNpemUsIGFsaWduLAoJCQkJIDUxMlVMTDw8MjApOwoJLyoKCSAqIEttZW1sZWFr IHNob3VsZCBub3Qgc2NhbiB0aGlzIGJsb2NrIGFzIGl0IG1heSBub3QgYmUgbWFwcGVkIHZp YSB0aGUKCSAqIGtlcm5lbCBkaXJlY3QgbWFwcGluZy4KCSAqLwoJa21lbWxlYWtfaWdub3Jl KGRtYTMyX2Jvb3RtZW1fcHRyKTsKCWlmIChkbWEzMl9ib290bWVtX3B0cikKCQlkbWEzMl9i b290bWVtX3NpemUgPSBzaXplOwoJZWxzZQoJCWRtYTMyX2Jvb3RtZW1fc2l6ZSA9IDA7Cn0K c3RhdGljIHZvaWQgX19pbml0IGRtYTMyX2ZyZWVfYm9vdG1lbSh2b2lkKQp7CgoJaWYgKG1h eF9wZm4gPD0gTUFYX0RNQTMyX1BGTikKCQlyZXR1cm47CgoJaWYgKCFkbWEzMl9ib290bWVt X3B0cikKCQlyZXR1cm47CgoJZnJlZV9ib290bWVtKF9fcGEoZG1hMzJfYm9vdG1lbV9wdHIp LCBkbWEzMl9ib290bWVtX3NpemUpOwoKCWRtYTMyX2Jvb3RtZW1fcHRyID0gTlVMTDsKCWRt YTMyX2Jvb3RtZW1fc2l6ZSA9IDA7Cn0KI2Vsc2UKdm9pZCBfX2luaXQgZG1hMzJfcmVzZXJ2 ZV9ib290bWVtKHZvaWQpCnsKfQpzdGF0aWMgdm9pZCBfX2luaXQgZG1hMzJfZnJlZV9ib290 bWVtKHZvaWQpCnsKfQoKI2VuZGlmCgpzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIHN3aW90 bGJfZG1hX29wcyA9IHsKCS5hbGxvY19jb2hlcmVudCA9IGRtYV9nZW5lcmljX2FsbG9jX2Nv aGVyZW50LAoJLmZyZWVfY29oZXJlbnQgPSBkbWFfZ2VuZXJpY19mcmVlX2NvaGVyZW50LAoJ Lm1hcHBpbmdfZXJyb3IgPSBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAoJLm1hcF9wYWdl ID0gc3dpb3RsYl9tYXBfcGFnZSwKCS51bm1hcF9wYWdlID0gc3dpb3RsYl91bm1hcF9wYWdl LAoJLnN5bmNfc2luZ2xlX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUs Cgkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2Rl dmljZSwKCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3Npbmds ZV9yYW5nZV9mb3JfY3B1LAoJLnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UgPSBzd2lv dGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UsCgkuc3luY19zZ19mb3JfY3B1ID0g c3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCgkuc3luY19zZ19mb3JfZGV2aWNlID0gc3dpb3Rs Yl9zeW5jX3NnX2Zvcl9kZXZpY2UsCgkubWFwX3NnID0gc3dpb3RsYl9tYXBfc2dfYXR0cnMs CgkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnX2F0dHJzLAoJLmRtYV9zdXBwb3J0ZWQg PSBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQKfTsKCnZvaWQgX19pbml0IHBjaV9pb21tdV9hbGxv Yyh2b2lkKQp7CgkvKiBmcmVlIHRoZSByYW5nZSBzbyBpb21tdSBjb3VsZCBnZXQgc29tZSBy YW5nZSBsZXNzIHRoYW4gNEcgKi8KCWRtYTMyX2ZyZWVfYm9vdG1lbSgpOwoKCWlmIChwY2lf c3dpb3RsYl9kZXRlY3QoKSkKCQlnb3RvIG91dDsKCglnYXJ0X2lvbW11X2hvbGVfaW5pdCgp OwoKCWRldGVjdF9jYWxnYXJ5KCk7CgoJZGV0ZWN0X2ludGVsX2lvbW11KCk7CgoJLyogbmVl ZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGdhcnRfaW9tbXVfaG9sZV9pbml0ICovCglhbWRfaW9t bXVfZGV0ZWN0KCk7Cm91dDoKCXN3aW90bGJfaW5pdCgxKTsKCWlmIChzd2lvdGxiKSB7CgkJ cHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogVXNpbmcgc29mdHdhcmUgYm91bmNlIGJ1ZmZl cmluZyBmb3IgSU8gKFNXSU9UTEIpXG4iKTsKCQlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29w czsKCX0KfQoKdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmlj ZSAqZGV2LCBzaXplX3Qgc2l6ZSwKCQkJCSBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3Qg ZmxhZykKewoJdW5zaWduZWQgbG9uZyBkbWFfbWFzazsKCXN0cnVjdCBwYWdlICpwYWdlOwoj aWZuZGVmIENPTkZJR19YRU4KCWRtYV9hZGRyX3QgYWRkcjsKI2Vsc2UKCXZvaWQgKm1lbW9y eTsKI2VuZGlmCgl1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CgoJZG1h X21hc2sgPSBkbWFfYWxsb2NfY29oZXJlbnRfbWFzayhkZXYsIGZsYWcpOwoKI2lmbmRlZiBD T05GSUdfWEVOCglmbGFnIHw9IF9fR0ZQX1pFUk87CmFnYWluOgojZWxzZQoJZmxhZyAmPSB+ KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyKTsKI2VuZGlmCglwYWdlID0gYWxsb2NfcGFnZXNf bm9kZShkZXZfdG9fbm9kZShkZXYpLCBmbGFnLCBvcmRlcik7CglpZiAoIXBhZ2UpCgkJcmV0 dXJuIE5VTEw7CgojaWZuZGVmIENPTkZJR19YRU4KCWFkZHIgPSBwYWdlX3RvX3BoeXMocGFn ZSk7CglpZiAoYWRkciArIHNpemUgPiBkbWFfbWFzaykgewoJCV9fZnJlZV9wYWdlcyhwYWdl LCBvcmRlcik7CgoJCWlmIChkbWFfbWFzayA8IERNQV9CSVRfTUFTSygzMikgJiYgIShmbGFn ICYgR0ZQX0RNQSkpIHsKCQkJZmxhZyA9IChmbGFnICYgfkdGUF9ETUEzMikgfCBHRlBfRE1B OwoJCQlnb3RvIGFnYWluOwoJCX0KCgkJcmV0dXJuIE5VTEw7Cgl9CgoJKmRtYV9hZGRyID0g YWRkcjsKCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiNlbHNlCgltZW1vcnkgPSBwYWdl X2FkZHJlc3MocGFnZSk7CglpZiAoeGVuX2NyZWF0ZV9jb250aWd1b3VzX3JlZ2lvbigodW5z aWduZWQgbG9uZyltZW1vcnksIG9yZGVyLAoJCQkJCSBmbHM2NChkbWFfbWFzaykpKSB7CgkJ X19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKCQlyZXR1cm4gTlVMTDsKCX0KCgkqZG1hX2Fk ZHIgPSB2aXJ0X3RvX2J1cyhtZW1vcnkpOwoJcmV0dXJuIG1lbXNldChtZW1vcnksIDAsIHNp emUpOwojZW5kaWYKfQoKI2lmZGVmIENPTkZJR19YRU4Kdm9pZCBkbWFfZ2VuZXJpY19mcmVl X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRy LAoJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfYWRkcikKewoJdW5zaWduZWQgaW50IG9yZGVy ID0gZ2V0X29yZGVyKHNpemUpOwoJdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNpZ25lZCBsb25n KXZhZGRyOwoKCXhlbl9kZXN0cm95X2NvbnRpZ3VvdXNfcmVnaW9uKHZhLCBvcmRlcik7Cglm cmVlX3BhZ2VzKHZhLCBvcmRlcik7Cn0KI2VuZGlmCgovKgogKiBTZWUgPERvY3VtZW50YXRp b24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQ+IGZvciB0aGUgaW9tbXUga2VybmVsIHBhcmFt ZXRlcgogKiBkb2N1bWVudGF0aW9uLgogKi8Kc3RhdGljIF9faW5pdCBpbnQgaW9tbXVfc2V0 dXAoY2hhciAqcCkKewoJaW9tbXVfbWVyZ2UgPSAxOwoKCWlmICghcCkKCQlyZXR1cm4gLUVJ TlZBTDsKCgl3aGlsZSAoKnApIHsKCQlpZiAoIXN0cm5jbXAocCwgIm9mZiIsIDMpKQoJCQlu b19pb21tdSA9IDE7CgkJLyogZ2FydF9wYXJzZV9vcHRpb25zIGhhcyBtb3JlIGZvcmNlIHN1 cHBvcnQgKi8KCQlpZiAoIXN0cm5jbXAocCwgImZvcmNlIiwgNSkpCgkJCWZvcmNlX2lvbW11 ID0gMTsKCQlpZiAoIXN0cm5jbXAocCwgIm5vZm9yY2UiLCA3KSkgewoJCQlpb21tdV9tZXJn ZSA9IDA7CgkJCWZvcmNlX2lvbW11ID0gMDsKCQl9CgoJCWlmICghc3RybmNtcChwLCAiYmlv bWVyZ2UiLCA4KSkgewoJCQlpb21tdV9tZXJnZSA9IDE7CgkJCWZvcmNlX2lvbW11ID0gMTsK CQl9CgkJaWYgKCFzdHJuY21wKHAsICJwYW5pYyIsIDUpKQoJCQlwYW5pY19vbl9vdmVyZmxv dyA9IDE7CgkJaWYgKCFzdHJuY21wKHAsICJub3BhbmljIiwgNykpCgkJCXBhbmljX29uX292 ZXJmbG93ID0gMDsKCQlpZiAoIXN0cm5jbXAocCwgIm1lcmdlIiwgNSkpIHsKCQkJaW9tbXVf bWVyZ2UgPSAxOwoJCQlmb3JjZV9pb21tdSA9IDE7CgkJfQoJCWlmICghc3RybmNtcChwLCAi bm9tZXJnZSIsIDcpKQoJCQlpb21tdV9tZXJnZSA9IDA7CgkJaWYgKCFzdHJuY21wKHAsICJm b3JjZXNhYyIsIDgpKQoJCQlpb21tdV9zYWNfZm9yY2UgPSAxOwoJCWlmICghc3RybmNtcChw LCAiYWxsb3dkYWMiLCA4KSkKCQkJZm9yYmlkX2RhYyA9IDA7CgkJaWYgKCFzdHJuY21wKHAs ICJub2RhYyIsIDUpKQoJCQlmb3JiaWRfZGFjID0gMTsKCQlpZiAoIXN0cm5jbXAocCwgInVz ZWRhYyIsIDYpKSB7CgkJCWZvcmJpZF9kYWMgPSAtMTsKCQkJcmV0dXJuIDE7CgkJfQojaWZk ZWYgQ09ORklHX1NXSU9UTEIKCQlpZiAoIXN0cm5jbXAocCwgInNvZnQiLCA0KSkKCQkJc3dp b3RsYiA9IDE7CiNlbmRpZgoJCWlmICghc3RybmNtcChwLCAicHQiLCAyKSkKCQkJaW9tbXVf cGFzc190aHJvdWdoID0gMTsKCgkJZ2FydF9wYXJzZV9vcHRpb25zKHApOwoKI2lmZGVmIENP TkZJR19DQUxHQVJZX0lPTU1VCgkJaWYgKCFzdHJuY21wKHAsICJjYWxnYXJ5IiwgNykpCgkJ CXVzZV9jYWxnYXJ5ID0gMTsKI2VuZGlmIC8qIENPTkZJR19DQUxHQVJZX0lPTU1VICovCgoJ CXAgKz0gc3RyY3NwbihwLCAiLCIpOwoJCWlmICgqcCA9PSAnLCcpCgkJCSsrcDsKCX0KCXJl dHVybiAwOwp9CmVhcmx5X3BhcmFtKCJpb21tdSIsIGlvbW11X3NldHVwKTsKCnN0YXRpYyBp bnQgY2hlY2tfcGFnZXNfcGh5c2ljYWxseV9jb250aWd1b3VzKHVuc2lnbmVkIGxvbmcgcGZu LAoJCQkJCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKCQkJCQkgICAgIHNpemVfdCBsZW5n dGgpCnsKCXVuc2lnbmVkIGxvbmcgbmV4dF9tZm47CglpbnQgaTsKCWludCBucl9wYWdlczsK CgluZXh0X21mbiA9IHBmbl90b19tZm4ocGZuKTsKCW5yX3BhZ2VzID0gKG9mZnNldCArIGxl bmd0aCArIFBBR0VfU0laRS0xKSA+PiBQQUdFX1NISUZUOwoKCWZvciAoaSA9IDE7IGkgPCBu cl9wYWdlczsgaSsrKSB7CgkJaWYgKHBmbl90b19tZm4oKytwZm4pICE9ICsrbmV4dF9tZm4p CgkJCXJldHVybiAwOwoJfQoJcmV0dXJuIDE7Cn0KCmludCByYW5nZV9zdHJhZGRsZXNfcGFn ZV9ib3VuZGFyeShwYWRkcl90IHAsIHNpemVfdCBzaXplKQp7Cgl1bnNpZ25lZCBsb25nIHBm biA9IHAgPj4gUEFHRV9TSElGVDsKCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwICYgflBBR0Vf TUFTSzsKCglyZXR1cm4gKChvZmZzZXQgKyBzaXplID4gUEFHRV9TSVpFKSAmJgoJCSFjaGVj a19wYWdlc19waHlzaWNhbGx5X2NvbnRpZ3VvdXMocGZuLCBvZmZzZXQsIHNpemUpKTsKfQoK aW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKewoJc3Ry dWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwoKI2lmZGVmIENPTkZJ R19QQ0kKCWlmIChtYXNrID4gMHhmZmZmZmZmZiAmJiBmb3JiaWRfZGFjID4gMCkgewoJCWRl dl9pbmZvKGRldiwgIlBDSTogRGlzYWxsb3dpbmcgREFDIGZvciBkZXZpY2VcbiIpOwoJCXJl dHVybiAwOwoJfQojZW5kaWYKCglpZiAob3BzLT5kbWFfc3VwcG9ydGVkKQoJCXJldHVybiBv cHMtPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKCgkvKiBDb3BpZWQgZnJvbSBpMzg2LiBE b2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgYmVjYXVzZSBpdCB3aWxsCgkgICBvbmx5IHdvcmsg Zm9yIHBjaV9hbGxvY19jb2hlcmVudC4KCSAgIFRoZSBjYWxsZXIganVzdCBoYXMgdG8gdXNl IEdGUF9ETUEgaW4gdGhpcyBjYXNlLiAqLwoJaWYgKG1hc2sgPCBETUFfQklUX01BU0soMjQp KQoJCXJldHVybiAwOwoKCS8qIFRlbGwgdGhlIGRldmljZSB0byB1c2UgU0FDIHdoZW4gSU9N TVUgZm9yY2UgaXMgb24uICBUaGlzCgkgICBhbGxvd3MgdGhlIGRyaXZlciB0byB1c2UgY2hl YXBlciBhY2Nlc3NlcyBpbiBzb21lIGNhc2VzLgoKCSAgIFByb2JsZW0gd2l0aCB0aGlzIGlz IHRoYXQgaWYgd2Ugb3ZlcmZsb3cgdGhlIElPTU1VIGFyZWEgYW5kCgkgICByZXR1cm4gREFD IGFzIGZhbGxiYWNrIGFkZHJlc3MgdGhlIGRldmljZSBtYXkgbm90IGhhbmRsZSBpdAoJICAg Y29ycmVjdGx5LgoKCSAgIEFzIGEgc3BlY2lhbCBjYXNlIHNvbWUgY29udHJvbGxlcnMgaGF2 ZSBhIDM5Yml0IGFkZHJlc3MKCSAgIG1vZGUgdGhhdCBpcyBhcyBlZmZpY2llbnQgYXMgMzJi aXQgKGFpYzc5eHgpLiBEb24ndCBmb3JjZQoJICAgU0FDIGZvciB0aGVzZS4gIEFzc3VtZSBh bGwgbWFza3MgPD0gNDAgYml0cyBhcmUgb2YgdGhpcwoJICAgdHlwZS4gTm9ybWFsbHkgdGhp cyBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UsIGJ1dCBnaXZlcwoJICAgbW9yZSBnZW50 bGUgaGFuZGxpbmcgb2YgSU9NTVUgb3ZlcmZsb3cuICovCglpZiAoaW9tbXVfc2FjX2ZvcmNl ICYmIChtYXNrID49IERNQV9CSVRfTUFTSyg0MCkpKSB7CgkJZGV2X2luZm8oZGV2LCAiRm9y Y2UgU0FDIHdpdGggbWFzayAlTHhcbiIsIG1hc2spOwoJCXJldHVybiAwOwoJfQoKCXJldHVy biAxOwp9CkVYUE9SVF9TWU1CT0woZG1hX3N1cHBvcnRlZCk7CgpzdGF0aWMgaW50IF9faW5p dCBwY2lfaW9tbXVfaW5pdCh2b2lkKQp7CglkbWFfZGVidWdfaW5pdChQUkVBTExPQ19ETUFf REVCVUdfRU5UUklFUyk7CgojaWZkZWYgQ09ORklHX1BDSQoJZG1hX2RlYnVnX2FkZF9idXMo JnBjaV9idXNfdHlwZSk7CiNlbmRpZgoJeDg2X2luaXQuaW9tbXUuaW9tbXVfaW5pdCgpOwoK I2lmbmRlZiBDT05GSUdfWEVOCglpZiAoc3dpb3RsYikgewoJCXByaW50ayhLRVJOX0lORk8g IlBDSS1ETUE6ICIKCQkgICAgICAgIlVzaW5nIHNvZnR3YXJlIGJvdW5jZSBidWZmZXJpbmcg Zm9yIElPIChTV0lPVExCKVxuIik7CgkJc3dpb3RsYl9wcmludF9pbmZvKCk7Cgl9IGVsc2UK CQlzd2lvdGxiX2ZyZWUoKTsKI2VuZGlmCgoJcmV0dXJuIDA7Cn0KLyogTXVzdCBleGVjdXRl IGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8Kcm9vdGZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0 KTsKCiNpZmRlZiBDT05GSUdfUENJCi8qIE1hbnkgVklBIGJyaWRnZXMgc2VlbSB0byBjb3Jy dXB0IGRhdGEgZm9yIERBQy4gRGlzYWJsZSBpdCBoZXJlICovCgpzdGF0aWMgX19kZXZpbml0 IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQp7CglpZiAoKGRldi0+Y2xh c3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9QQ0kgJiYgZm9yYmlkX2RhYyA9PSAwKSB7 CgkJZGV2X2luZm8oJmRldi0+ZGV2LCAiZGlzYWJsaW5nIERBQyBvbiBWSUEgUENJIGJyaWRn ZVxuIik7CgkJZm9yYmlkX2RhYyA9IDE7Cgl9Cn0KREVDTEFSRV9QQ0lfRklYVVBfRklOQUwo UENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9BTllfSUQsIHZpYV9ub19kYWMpOwojZW5kaWYK --=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 10:37:12 +0100 Message-ID: References: <1322494816.20646.14.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3475373792260686772==" Return-path: In-Reply-To: <1322494816.20646.14.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?Ian_Campbell?= Cc: =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?konrad=2Ewilk?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============3475373792260686772== Content-Type: multipart/alternative; boundary="=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable The swiotlb-xen used by classic-xen kernels (which I assume is what=0D=0A= Carsten means by "Xenified") isn't exactly the same as the stuff in=0D=0A= mainline Linux, it's been heavily refactored for one thing. It's not=0D=0A= impossible that mainline is bouncing something it doesn't really need=0D=0A= to.=0D=0A=0D=0AYes, it's a 2.6.34 kernel with Andrew Lyon's backported pa= tches found here:=0D=0A=0D=0A=C2=A0=0D=0A=C2=A0 http://code.google.com/p/= gentoo-xen-kernel/downloads/list=0D=0A=0D=0A=C2=A0=0D=0AGrC.=0D=0A=0D=0A --=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= br />
The swiotlb-xen used by classic-xen kernels (which I= assume is what
Carsten means by "Xenified") isn't exa= ctly the same as the stuff in
mainline Linux, it's been heavily = refactored for one thing. It's not
impossible that mainline is b= ouncing something it doesn't really need
to.
<= p>Yes, it's a 2.6.34 kernel with Andrew Lyon's backported patches= found here:

 

  http://code.google.com/p/gentoo-xe= n-kernel/downloads/list

 

GrC.

=0A=0A --=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78-- --===============3475373792260686772== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============3475373792260686772==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 10:42:45 +0100 Message-ID: References: <20111128153027.GD9655@andromeda.dapyr.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8311085662891811754==" Return-path: In-Reply-To: <20111128153027.GD9655@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?xen-devel?= , =?utf-8?Q?konrad=2Ewilk?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============8311085662891811754== Content-Type: multipart/alternative; boundary="=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable =C2=A0=0D=0A=0D=0A> =C2=A0 - with load I mean the %CPU of xentop=0D=0A> =C2= =A0 - there is no change in CPU usage of the DomU or Dom0=0D=0A=0D=0AUhh,= which matrix are using for that=3F CPU usage...=3F This is if you=0D=0Ac= hange the DomU or the amount of memory the guest has=3F This is not=0D=0A= the load number (xentop value)=3F=0D=0A=0D=0AI had a quick look into the = munin plugin. It reads the output of "xm li", Time in seconds and normali= zes it.=20=0D=0ABut the effect is also visible in the CPU(%) column of xe= ntop, if the DomU is on higher load.=0D=0A=0D=0A=C2=A0=0D=0ABR,C.=0D=0A=0D= =0A --=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= p> 

>   - with load I mean the %CPU of xe= ntop
>   - there is no change in CPU usage of the DomU or Do= m0

Uhh, which matrix are using for that=3F CPU usage...=3F Thi= s is if you
change the DomU or the amount of memory the guest has=3F= This is not
the load number (xentop value)=3F

= I had a quick look into the munin plugin. It reads the output of "xm= li", Time in seconds and normalizes it.
But the effect is als= o visible in the CPU(%) column of xentop, if the DomU is on higher load.<= /p>

 

BR,C.

=0A=0A --=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5-- --===============8311085662891811754== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============8311085662891811754==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 10:46:02 +0100 Message-ID: References: <20111128164516.GA26664@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6505958179899237990==" Return-path: In-Reply-To: <20111128164516.GA26664@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Ian_Campbell?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============6505958179899237990== Content-Type: multipart/alternative; boundary="=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Carsten, let me prep up a patch that will print some diagnostic informati= on=0D=0Aduring the runtime - to see how often it does the bounce, the usa= ge, etc..=0D=0A=0D=0A=C2=A0=0D=0AJup, looking forward to implementing it.= I can include them into any kernel. 2.6.18 would be=0D=0A=0D=0Aa bit dif= ficult though, as the driver pack isn't compatible any longer...so I'd pr= efer 2.6.34 Xenified=0D=0A=0D=0Avs. 3.1.2 pvops.=0D=0A=0D=0A=C2=A0=0D=0AB= R,C.=0D=0A=0D=0A --=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= br />
Carsten, let me prep up a patch that will print some= diagnostic information
during the runtime - to see how often it doe= s the bounce, the usage, etc..

 

Jup, looking f= orward to implementing it. I can include them into any kernel. 2.6.18 wou= ld be

a bit difficult though, as the driver pack isn't compatib= le any longer...so I'd prefer 2.6.34 Xenified

vs. 3.1.2 pvops.<= /p>

 

BR,C.

=0A=0A --=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp-- --===============6505958179899237990== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============6505958179899237990==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 10:23:18 +0000 Message-ID: <1322562199.20646.30.camel@zakaz.uk.xensource.com> References: <20111128152829.GC9655@andromeda.dapyr.net> <1322494816.20646.14.camel@zakaz.uk.xensource.com> <20111128164516.GA26664@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20111128164516.GA26664@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "lersek@redhat.com" List-Id: xen-devel@lists.xenproject.org On Mon, 2011-11-28 at 16:45 +0000, Konrad Rzeszutek Wilk wrote: > On Mon, Nov 28, 2011 at 03:40:13PM +0000, Ian Campbell wrote: > > On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote: > > > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote: > > > > > > I looked through my old mails from you and you explained already the necessity of double > > > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the > > > > Xenified kernel not have this kind of issue? > > > > > > That is a puzzle. It should not. The code is very much the same - both > > > use the generic SWIOTLB which has not changed for years. > > > > The swiotlb-xen used by classic-xen kernels (which I assume is what > > Carsten means by "Xenified") isn't exactly the same as the stuff in > > mainline Linux, it's been heavily refactored for one thing. It's not > > impossible that mainline is bouncing something it doesn't really need > > to. > > The usage, at least with 'pci_alloc_coherent' is that there is no bouncing > being done. The alloc_coherent will allocate a nice page, underneath the 4GB > mark and give it to the driver. The driver can use it as it wishes and there > is no need to bounce buffer. Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a subset of swiotlb is in use then, all the bouncing stuff _should_ be idle/unused -- but has that been confirmed? > > But I can't find the implementation of that in the classic Xen-SWIOTLB. It looks > as if it is using map_single which would be taking the memory out of the > pool for a very long time, instead of allocating memory and "swizzling" the MFNs. > [Note, I looked at the 2.6.18 hg tree for classic, the 2.6.34 is probably > improved much better so let me check that] > > Carsten, let me prep up a patch that will print some diagnostic information > during the runtime - to see how often it does the bounce, the usage, etc.. > > > > > It's also possible that the dma mask of the device is different/wrong in > > mainline leading to such additional bouncing. > > If one were to use map_page and such - yes. But the alloc_coherent bypasses > that and ends up allocating it right under the 4GB (or rather it allocates > based on the dev->coherent_mask and swizzles the MFNs as required). > > > > > I guess it's also possible that the classic-Xen kernels are playing fast > > and loose by not bouncing something they should (although if so they > > appear to be getting away with it...) or that there is some difference > > which really means mainline needs to bounce while classic-Xen doesn't. > > Could be very well. > > > > Ian. > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 29 Nov 2011 10:33:06 -0500 Message-ID: <20111129153306.GA30908@phenom.dumpdata.com> References: <20111128152829.GC9655@andromeda.dapyr.net> <1322494816.20646.14.camel@zakaz.uk.xensource.com> <20111128164516.GA26664@phenom.dumpdata.com> <1322562199.20646.30.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1322562199.20646.30.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "lersek@redhat.com" List-Id: xen-devel@lists.xenproject.org On Tue, Nov 29, 2011 at 10:23:18AM +0000, Ian Campbell wrote: > On Mon, 2011-11-28 at 16:45 +0000, Konrad Rzeszutek Wilk wrote: > > On Mon, Nov 28, 2011 at 03:40:13PM +0000, Ian Campbell wrote: > > > On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote: > > > > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote: > > > > > > > > I looked through my old mails from you and you explained already the necessity of double > > > > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the > > > > > Xenified kernel not have this kind of issue? > > > > > > > > That is a puzzle. It should not. The code is very much the same - both > > > > use the generic SWIOTLB which has not changed for years. > > > > > > The swiotlb-xen used by classic-xen kernels (which I assume is what > > > Carsten means by "Xenified") isn't exactly the same as the stuff in > > > mainline Linux, it's been heavily refactored for one thing. It's not > > > impossible that mainline is bouncing something it doesn't really need > > > to. > > > > The usage, at least with 'pci_alloc_coherent' is that there is no bouncing > > being done. The alloc_coherent will allocate a nice page, underneath the 4GB > > mark and give it to the driver. The driver can use it as it wishes and there > > is no need to bounce buffer. > > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a > subset of swiotlb is in use then, all the bouncing stuff _should_ be > idle/unused -- but has that been confirmed? Nope. I hope that the diagnostic patch I have in mind will prove/disprove that. Now I just need to find a moment to write it :-) From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 2 Dec 2011 11:23:39 -0400 Message-ID: <20111202152339.GA2687@andromeda.dapyr.net> References: <20111128152829.GC9655@andromeda.dapyr.net> <1322494816.20646.14.camel@zakaz.uk.xensource.com> <20111128164516.GA26664@phenom.dumpdata.com> <1322562199.20646.30.camel@zakaz.uk.xensource.com> <20111129153306.GA30908@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd" Return-path: Content-Disposition: inline In-Reply-To: <20111129153306.GA30908@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: "lersek@redhat.com" , xen-devel , Carsten Schiers , Ian Campbell , "zhenzhong.duan@oracle.com" List-Id: xen-devel@lists.xenproject.org --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline > > > > > That is a puzzle. It should not. The code is very much the same - both > > > > > use the generic SWIOTLB which has not changed for years. > > > > > > > > The swiotlb-xen used by classic-xen kernels (which I assume is what > > > > Carsten means by "Xenified") isn't exactly the same as the stuff in > > > > mainline Linux, it's been heavily refactored for one thing. It's not > > > > impossible that mainline is bouncing something it doesn't really need > > > > to. > > > > > > The usage, at least with 'pci_alloc_coherent' is that there is no bouncing > > > being done. The alloc_coherent will allocate a nice page, underneath the 4GB > > > mark and give it to the driver. The driver can use it as it wishes and there > > > is no need to bounce buffer. > > > > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a > > subset of swiotlb is in use then, all the bouncing stuff _should_ be > > idle/unused -- but has that been confirmed? > > Nope. I hope that the diagnostic patch I have in mind will prove/disprove that. > Now I just need to find a moment to write it :-) Done! Carsten, can you please patch your kernel with this hacky patch and when you have booted the new kernel, just do modprobe dump_swiotlb it should give an idea of how many bounces are happening, coherent allocations, syncs, and so on.. along with the last driver that did those operations. --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="swiotlb-debug.patch" diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index a59638b..d513c8d 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig @@ -105,4 +105,10 @@ config SWIOTLB_XEN depends on PCI select SWIOTLB +config SWIOTLB_DEBUG + tristate "swiotlb debug facility" + default m + help + Do not enable it unless you know what you are doing. + endmenu diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile index bbc1825..1dea490 100644 --- a/drivers/xen/Makefile +++ b/drivers/xen/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_XENFS) += xenfs/ obj-$(CONFIG_XEN_SYS_HYPERVISOR) += sys-hypervisor.o obj-$(CONFIG_XEN_PLATFORM_PCI) += xen-platform-pci.o obj-$(CONFIG_SWIOTLB_XEN) += swiotlb-xen.o +obj-$(CONFIG_SWIOTLB_DEBUG) += dump_swiotlb.o obj-$(CONFIG_XEN_DOM0) += pci.o xen-evtchn-y := evtchn.o diff --git a/drivers/xen/dump_swiotlb.c b/drivers/xen/dump_swiotlb.c new file mode 100644 index 0000000..e0e4a0b --- /dev/null +++ b/drivers/xen/dump_swiotlb.c @@ -0,0 +1,72 @@ +/* + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License v2.0 as published by + * the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#define DUMP_SWIOTLB_FUN "0.1" + +MODULE_AUTHOR("Konrad Rzeszutek Wilk "); +MODULE_DESCRIPTION("dump swiotlb"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(DUMP_SWIOTLB_FUN); + +extern int xen_swiotlb_start_thread(void); +extern void xen_swiotlb_stop_thread(void); +static int __init dump_swiotlb_init(void) +{ + printk(KERN_INFO "Starting SWIOTLB debug thread.\n"); + swiotlb_start_thread(); + xen_swiotlb_start_thread(); + return 0; +} + +static void __exit dump_swiotlb_exit(void) +{ + swiotlb_stop_thread(); + xen_swiotlb_stop_thread(); +} + +module_init(dump_swiotlb_init); +module_exit(dump_swiotlb_exit); diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c index 6e8c15a..c833501 100644 --- a/drivers/xen/swiotlb-xen.c +++ b/drivers/xen/swiotlb-xen.c @@ -143,6 +143,63 @@ xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs) return 0; } +#include +struct xen_swiotlb_debug { + unsigned long alloc; + unsigned long dealloc; + char dev_name[64]; +}; +static DEFINE_PER_CPU(struct xen_swiotlb_debug, xen_tlb_debug); +#include +static int xen_swiotlb_debug_thread(void *arg) +{ + int cpu; + do { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout_interruptible(HZ*10); + + for_each_online_cpu(cpu) { + struct xen_swiotlb_debug *d; + + d = &per_cpu(xen_tlb_debug, cpu); + /* Can't really happend.*/ + if (!d) + continue; + + if (d->dev_name[0] == 0) + continue; + + printk(KERN_INFO "%u %s alloc coherent: %ld, free: %ld\n", + cpu, + d->dev_name ? d->dev_name : "?", + d->alloc, d->dealloc); + + memset(d, 0, sizeof(struct xen_swiotlb_debug)); + } + + } while (!kthread_should_stop()); + return 0; +} +static struct task_struct *xen_debug_thread = NULL; + +int xen_swiotlb_start_thread(void) { + + if (xen_debug_thread) + return -EINVAL; + printk(KERN_INFO "%s: Go!\n",__func__); + xen_debug_thread = kthread_run(xen_swiotlb_debug_thread, NULL, "xen_swiotlb_debug"); + return 0; +} +EXPORT_SYMBOL_GPL(xen_swiotlb_start_thread); +void xen_swiotlb_stop_thread(void) { + + printk(KERN_INFO "%s: Stop!\n",__func__); + if (xen_debug_thread) + kthread_stop(xen_debug_thread); + xen_debug_thread = NULL; +} +EXPORT_SYMBOL_GPL(xen_swiotlb_stop_thread); + void __init xen_swiotlb_init(int verbose) { unsigned long bytes; @@ -194,7 +251,14 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size, int order = get_order(size); u64 dma_mask = DMA_BIT_MASK(32); unsigned long vstart; - + struct xen_swiotlb_debug *d; + + preempt_disable(); + d = &__get_cpu_var(xen_tlb_debug); + preempt_enable(); + d->alloc++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); /* * Ignore region specifiers - the kernel's ideas of * pseudo-phys memory layout has nothing to do with the @@ -230,6 +294,14 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr, dma_addr_t dev_addr) { int order = get_order(size); + struct xen_swiotlb_debug *d; + + preempt_disable(); + d = &__get_cpu_var(xen_tlb_debug); + preempt_enable(); + d->dealloc++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); if (dma_release_from_coherent(hwdev, order, vaddr)) return; diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index 445702c..0d2e049 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h @@ -26,6 +26,8 @@ extern void swiotlb_init(int verbose); extern void swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose); extern unsigned long swioltb_nr_tbl(void); +extern int swiotlb_start_thread(void); +extern void swiotlb_stop_thread(void); /* * Enumeration for sync targets */ diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 99093b3..5446076 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c @@ -92,6 +92,74 @@ static DEFINE_SPINLOCK(io_tlb_lock); static int late_alloc; +#include +struct swiotlb_debug { + unsigned long bounce_to; + unsigned long bounce_from; + unsigned long bounce_slow; + unsigned long map; + unsigned long unmap; + unsigned long sync; + char dev_name[64]; +}; +static DEFINE_PER_CPU(struct swiotlb_debug, tlb_debug); +#include +static int swiotlb_debug_thread(void *arg) +{ + int cpu; + int size = io_tlb_nslabs; + do { + int i; + unsigned long filled = 0; + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout_interruptible(HZ*5); + + for_each_online_cpu(cpu) { + struct swiotlb_debug *d = &per_cpu(tlb_debug, cpu); + /* Can't really happend.*/ + if (!d) + continue; + if (d->dev_name[0] == 0) + continue; + + printk(KERN_INFO "%d [%s] bounce: from:%ld(slow:%ld)to:%ld map:%ld unmap:%ld sync:%ld\n", + cpu, + d->dev_name ? d->dev_name : "?", + d->bounce_from, + d->bounce_slow, + d->bounce_to, + d->map, d->unmap, d->sync); + memset(d, 0, sizeof(struct swiotlb_debug)); + } + /* Very crude calculation. */ + for (i = 0; i < size; i++) { + if (io_tlb_list[i] == 0) + filled++; + } + printk(KERN_INFO "SWIOTLB is %ld%% full\n", (filled * 100) / size); + + } while (!kthread_should_stop()); + return 0; +} +static struct task_struct *debug_thread = NULL; + +int swiotlb_start_thread(void) { + + if (debug_thread) + return -EINVAL; + printk(KERN_INFO "%s: Go!\n",__func__); + debug_thread = kthread_run(swiotlb_debug_thread, NULL, "swiotlb_debug"); +} +EXPORT_SYMBOL_GPL(swiotlb_start_thread); +void swiotlb_stop_thread(void) { + + printk(KERN_INFO "%s: Stop!\n",__func__); + if (debug_thread) + kthread_stop(debug_thread); + debug_thread = NULL; +} +EXPORT_SYMBOL_GPL(swiotlb_stop_thread); + static int __init setup_io_tlb_npages(char *str) { @@ -166,6 +234,7 @@ void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose) panic("Cannot allocate SWIOTLB overflow buffer!\n"); if (verbose) swiotlb_print_info(); + } /* @@ -336,6 +405,7 @@ void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size, enum dma_data_direction dir) { unsigned long pfn = PFN_DOWN(phys); + struct swiotlb_debug *d = &__get_cpu_var(tlb_debug); if (PageHighMem(pfn_to_page(pfn))) { /* The buffer does not have a mapping. Map it in and copy */ @@ -362,11 +432,16 @@ void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size, dma_addr += sz; offset = 0; } + d->bounce_slow++; } else { - if (dir == DMA_TO_DEVICE) + if (dir == DMA_TO_DEVICE) { memcpy(dma_addr, phys_to_virt(phys), size); - else + d->bounce_to++; + } + else { memcpy(phys_to_virt(phys), dma_addr, size); + d->bounce_from++; + } } } EXPORT_SYMBOL_GPL(swiotlb_bounce); @@ -471,7 +546,15 @@ found: io_tlb_orig_addr[index+i] = phys + (i << IO_TLB_SHIFT); if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) swiotlb_bounce(phys, dma_addr, size, DMA_TO_DEVICE); - + { + struct swiotlb_debug *d; + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); + d->map++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); + } return dma_addr; } EXPORT_SYMBOL_GPL(swiotlb_tbl_map_single); @@ -531,6 +614,15 @@ swiotlb_tbl_unmap_single(struct device *hwdev, char *dma_addr, size_t size, io_tlb_list[i] = ++count; } spin_unlock_irqrestore(&io_tlb_lock, flags); + { + struct swiotlb_debug *d; + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); + d->unmap++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); + } } EXPORT_SYMBOL_GPL(swiotlb_tbl_unmap_single); @@ -541,7 +633,13 @@ swiotlb_tbl_sync_single(struct device *hwdev, char *dma_addr, size_t size, { int index = (dma_addr - io_tlb_start) >> IO_TLB_SHIFT; phys_addr_t phys = io_tlb_orig_addr[index]; - + struct swiotlb_debug *d; + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); + d->sync++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); phys += ((unsigned long)dma_addr & ((1 << IO_TLB_SHIFT) - 1)); switch (target) { --vkogqOf2sHV7VnPd Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --vkogqOf2sHV7VnPd-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Sun, 4 Dec 2011 12:59:08 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20111202152339.GA2687@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?= List-Id: xen-devel@lists.xenproject.org Thank you, Konrad. I applied the patch to 3.1.2. In order to have a clear picture, I only enab= led one PCI card. The result is: [ 28.028032] Starting SWIOTLB debug thread. [ 28.028076] swiotlb_start_thread: Go! [ 28.028622] xen_swiotlb_start_thread: Go! [ 33.028153] 0 [budget_av 0000:00:00.0] bounce: from:555352(slow:0)to:0 m= ap:329 unmap:0 sync:555352 [ 33.028294] SWIOTLB is 2% full [ 38.028178] 0 budget_av 0000:00:00.0 alloc coherent: 4, free: 0 [ 38.028230] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m= ap:0 unmap:0 sync:127981 [ 38.028352] SWIOTLB is 2% full [ 43.028170] 0 [budget_av 0000:00:00.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 43.028310] SWIOTLB is 2% full [ 48.028199] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m= ap:0 unmap:0 sync:127981 [ 48.028334] SWIOTLB is 2% full [ 53.028170] 0 [budget_av 0000:00:00.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 53.028309] SWIOTLB is 2% full [ 58.028138] 0 [budget_av 0000:00:00.0] bounce: from:126994(slow:0)to:0 m= ap:0 unmap:0 sync:126994 [ 58.028195] SWIOTLB is 2% full [ 63.028170] 0 [budget_av 0000:00:00.0] bounce: from:121401(slow:0)to:0 m= ap:0 unmap:0 sync:121401 [ 63.029560] SWIOTLB is 2% full [ 68.028193] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m= ap:0 unmap:0 sync:127981 [ 68.028329] SWIOTLB is 2% full [ 73.028104] 0 [budget_av 0000:00:00.0] bounce: from:122717(slow:0)to:0 m= ap:0 unmap:0 sync:122717 [ 73.028244] SWIOTLB is 2% full [ 78.028191] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m= ap:0 unmap:0 sync:127981 [ 78.028331] SWIOTLB is 2% full [ 83.028112] 0 [budget_av 0000:00:00.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 83.028171] SWIOTLB is 2% full Was that long enough? I hope this helps. Carsten. -----Urspr=FCngliche Nachricht----- Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] = Gesendet: Freitag, 2. Dezember 2011 16:24 An: Konrad Rzeszutek Wilk Cc: Ian Campbell; xen-devel; Carsten Schiers; zhenzhong.duan@oracle.com; le= rsek@redhat.com Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > > > > > That is a puzzle. It should not. The code is very much the same -= both > > > > > use the generic SWIOTLB which has not changed for years. > > > > = > > > > The swiotlb-xen used by classic-xen kernels (which I assume is what > > > > Carsten means by "Xenified") isn't exactly the same as the stuff in > > > > mainline Linux, it's been heavily refactored for one thing. It's not > > > > impossible that mainline is bouncing something it doesn't really ne= ed > > > > to. > > > = > > > The usage, at least with 'pci_alloc_coherent' is that there is no bou= ncing > > > being done. The alloc_coherent will allocate a nice page, underneath = the 4GB > > > mark and give it to the driver. The driver can use it as it wishes an= d there > > > is no need to bounce buffer. > > = > > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a > > subset of swiotlb is in use then, all the bouncing stuff _should_ be > > idle/unused -- but has that been confirmed? > = > Nope. I hope that the diagnostic patch I have in mind will prove/disprove= that. > Now I just need to find a moment to write it :-) Done! Carsten, can you please patch your kernel with this hacky patch and when you have booted the new kernel, just do modprobe dump_swiotlb it should give an idea of how many bounces are happening, coherent allocations, syncs, and so on.. along with the last driver that did those operations. From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Sun, 4 Dec 2011 13:09:28 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20111202152339.GA2687@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?= List-Id: xen-devel@lists.xenproject.org Here with two cards enabled and creating a bit "work" by watching TV with o= ne oft hem: [ 23.842720] Starting SWIOTLB debug thread. [ 23.842750] swiotlb_start_thread: Go! [ 23.842838] xen_swiotlb_start_thread: Go! [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 m= ap:658 unmap:0 sync:435596 [ 28.841592] SWIOTLB is 4% full [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 m= ap:0 unmap:0 sync:127652 [ 33.840283] SWIOTLB is 4% full [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0 [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 38.840361] SWIOTLB is 4% full [ 43.840182] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 43.840323] SWIOTLB is 4% full [ 48.840094] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 m= ap:0 unmap:0 sync:127652 [ 48.840154] SWIOTLB is 4% full [ 53.840160] 0 [budget_av 0000:00:01.0] bounce: from:119756(slow:0)to:0 m= ap:0 unmap:0 sync:119756 [ 53.840301] SWIOTLB is 4% full [ 58.840202] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 58.840339] SWIOTLB is 4% full [ 63.840626] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m= ap:0 unmap:0 sync:128310 [ 63.840686] SWIOTLB is 4% full [ 68.840122] 0 [budget_av 0000:00:01.0] bounce: from:127323(slow:0)to:0 m= ap:0 unmap:0 sync:127323 [ 68.840180] SWIOTLB is 4% full [ 73.840647] 0 [budget_av 0000:00:01.0] bounce: from:211547(slow:0)to:0 m= ap:0 unmap:0 sync:211547 [ 73.840784] SWIOTLB is 4% full [ 78.840204] 0 [budget_av 0000:00:01.0] bounce: from:255962(slow:0)to:0 m= ap:0 unmap:0 sync:255962 [ 78.840344] SWIOTLB is 4% full [ 83.840114] 0 [budget_av 0000:00:01.0] bounce: from:255304(slow:0)to:0 m= ap:0 unmap:0 sync:255304 [ 83.840178] SWIOTLB is 4% full [ 88.840158] 0 [budget_av 0000:00:01.0] bounce: from:256620(slow:0)to:0 m= ap:0 unmap:0 sync:256620 [ 88.840302] SWIOTLB is 4% full [ 93.840185] 0 [budget_av 0000:00:00.0] bounce: from:250040(slow:0)to:0 m= ap:0 unmap:0 sync:250040 [ 93.840319] SWIOTLB is 4% full [ 98.840181] 0 [budget_av 0000:00:00.0] bounce: from:255962(slow:0)to:0 m= ap:0 unmap:0 sync:255962 [ 98.841563] SWIOTLB is 4% full [ 103.841221] 0 [budget_av 0000:00:00.0] bounce: from:255962(slow:0)to:0 m= ap:0 unmap:0 sync:255962 [ 103.841361] SWIOTLB is 4% full [ 108.840247] 0 [budget_av 0000:00:00.0] bounce: from:255962(slow:0)to:0 m= ap:0 unmap:0 sync:255962 [ 108.840389] SWIOTLB is 4% full [ 113.840157] 0 [budget_av 0000:00:00.0] bounce: from:261555(slow:0)to:0 m= ap:0 unmap:0 sync:261555 [ 113.840298] SWIOTLB is 4% full [ 118.840119] 0 [budget_av 0000:00:00.0] bounce: from:295442(slow:0)to:0 m= ap:0 unmap:0 sync:295442 [ 118.840259] SWIOTLB is 4% full [ 123.841025] 0 [budget_av 0000:00:00.0] bounce: from:295113(slow:0)to:0 m= ap:0 unmap:0 sync:295113 [ 123.841164] SWIOTLB is 4% full [ 128.840175] 0 [budget_av 0000:00:00.0] bounce: from:294784(slow:0)to:0 m= ap:0 unmap:0 sync:294784 [ 128.840310] SWIOTLB is 4% full [ 133.840194] 0 [budget_av 0000:00:00.0] bounce: from:293797(slow:0)to:0 m= ap:0 unmap:0 sync:293797 [ 133.840330] SWIOTLB is 4% full [ 138.840498] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m= ap:0 unmap:0 sync:341502 [ 138.840637] SWIOTLB is 4% full [ 143.840173] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m= ap:0 unmap:0 sync:341502 [ 143.840313] SWIOTLB is 4% full [ 148.840215] 0 [budget_av 0000:00:00.0] bounce: from:341831(slow:0)to:0 m= ap:0 unmap:0 sync:341831 [ 148.840355] SWIOTLB is 4% full [ 153.840205] 0 [budget_av 0000:00:01.0] bounce: from:329658(slow:0)to:0 m= ap:0 unmap:0 sync:329658 [ 153.840341] SWIOTLB is 4% full [ 158.840137] 0 [budget_av 0000:00:00.0] bounce: from:342160(slow:0)to:0 m= ap:0 unmap:0 sync:342160 [ 158.840277] SWIOTLB is 4% full [ 163.841288] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m= ap:0 unmap:0 sync:341502 [ 163.841424] SWIOTLB is 4% full [ 168.840198] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m= ap:0 unmap:0 sync:341502 [ 168.840339] SWIOTLB is 4% full [ 173.840167] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m= ap:0 unmap:0 sync:341502 [ 173.840304] SWIOTLB is 4% full [ 178.840184] 0 [budget_av 0000:00:00.0] bounce: from:328013(slow:0)to:0 m= ap:0 unmap:0 sync:328013 [ 178.840324] SWIOTLB is 4% full [ 183.840129] 0 [budget_av 0000:00:00.0] bounce: from:341831(slow:0)to:0 m= ap:0 unmap:0 sync:341831 [ 183.840269] SWIOTLB is 4% full [ 188.840123] 0 [budget_av 0000:00:01.0] bounce: from:340515(slow:0)to:0 m= ap:0 unmap:0 sync:340515 [ 188.841647] SWIOTLB is 4% full [ 193.840192] 0 [budget_av 0000:00:00.0] bounce: from:338541(slow:0)to:0 m= ap:0 unmap:0 sync:338541 [ 193.840329] SWIOTLB is 4% full [ 198.840148] 0 [budget_av 0000:00:01.0] bounce: from:330316(slow:0)to:0 m= ap:0 unmap:0 sync:330316 [ 198.840230] SWIOTLB is 4% full [ 203.840860] 0 [budget_av 0000:00:00.0] bounce: from:341831(slow:0)to:0 m= ap:0 unmap:0 sync:341831 [ 203.841000] SWIOTLB is 4% full [ 208.840562] 0 [budget_av 0000:00:01.0] bounce: from:337883(slow:0)to:0 m= ap:0 unmap:0 sync:337883 [ 208.840698] SWIOTLB is 4% full [ 213.840171] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m= ap:0 unmap:0 sync:341502 [ 213.840311] SWIOTLB is 4% full [ 218.840214] 0 [budget_av 0000:00:01.0] bounce: from:320117(slow:0)to:0 m= ap:0 unmap:0 sync:320117 [ 218.840354] SWIOTLB is 4% full [ 223.840238] 0 [budget_av 0000:00:01.0] bounce: from:299390(slow:0)to:0 m= ap:0 unmap:0 sync:299390 [ 223.840373] SWIOTLB is 4% full [ 228.841415] 0 [budget_av 0000:00:01.0] bounce: from:298732(slow:0)to:0 m= ap:0 unmap:0 sync:298732 [ 228.841560] SWIOTLB is 4% full [ 233.840705] 0 [budget_av 0000:00:00.0] bounce: from:299061(slow:0)to:0 m= ap:0 unmap:0 sync:299061 [ 233.840844] SWIOTLB is 4% full [ 238.840145] 0 [budget_av 0000:00:01.0] bounce: from:293468(slow:0)to:0 m= ap:0 unmap:0 sync:293468 [ 238.840280] SWIOTLB is 4% full -----Urspr=FCngliche Nachricht----- Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] = Gesendet: Freitag, 2. Dezember 2011 16:24 An: Konrad Rzeszutek Wilk Cc: Ian Campbell; xen-devel; Carsten Schiers; zhenzhong.duan@oracle.com; le= rsek@redhat.com Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > > > > > That is a puzzle. It should not. The code is very much the same -= both > > > > > use the generic SWIOTLB which has not changed for years. > > > > = > > > > The swiotlb-xen used by classic-xen kernels (which I assume is what > > > > Carsten means by "Xenified") isn't exactly the same as the stuff in > > > > mainline Linux, it's been heavily refactored for one thing. It's not > > > > impossible that mainline is bouncing something it doesn't really ne= ed > > > > to. > > > = > > > The usage, at least with 'pci_alloc_coherent' is that there is no bou= ncing > > > being done. The alloc_coherent will allocate a nice page, underneath = the 4GB > > > mark and give it to the driver. The driver can use it as it wishes an= d there > > > is no need to bounce buffer. > > = > > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a > > subset of swiotlb is in use then, all the bouncing stuff _should_ be > > idle/unused -- but has that been confirmed? > = > Nope. I hope that the diagnostic patch I have in mind will prove/disprove= that. > Now I just need to find a moment to write it :-) Done! Carsten, can you please patch your kernel with this hacky patch and when you have booted the new kernel, just do modprobe dump_swiotlb it should give an idea of how many bounces are happening, coherent allocations, syncs, and so on.. along with the last driver that did those operations. From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Sun, 4 Dec 2011 13:18:22 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20111202152339.GA2687@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?= List-Id: xen-devel@lists.xenproject.org Should eventually mention that I create the DomU with only the parameter io= mmu=3Dsoft. I hope Nothing more is required. For Xenified, it's swiotlb=3D32,force. Carsten. -----Urspr=FCngliche Nachricht----- Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] = Gesendet: Freitag, 2. Dezember 2011 16:24 An: Konrad Rzeszutek Wilk Cc: Ian Campbell; xen-devel; Carsten Schiers; zhenzhong.duan@oracle.com; le= rsek@redhat.com Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > > > > > That is a puzzle. It should not. The code is very much the same -= both > > > > > use the generic SWIOTLB which has not changed for years. > > > > = > > > > The swiotlb-xen used by classic-xen kernels (which I assume is what > > > > Carsten means by "Xenified") isn't exactly the same as the stuff in > > > > mainline Linux, it's been heavily refactored for one thing. It's not > > > > impossible that mainline is bouncing something it doesn't really ne= ed > > > > to. > > > = > > > The usage, at least with 'pci_alloc_coherent' is that there is no bou= ncing > > > being done. The alloc_coherent will allocate a nice page, underneath = the 4GB > > > mark and give it to the driver. The driver can use it as it wishes an= d there > > > is no need to bounce buffer. > > = > > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a > > subset of swiotlb is in use then, all the bouncing stuff _should_ be > > idle/unused -- but has that been confirmed? > = > Nope. I hope that the diagnostic patch I have in mind will prove/disprove= that. > Now I just need to find a moment to write it :-) Done! Carsten, can you please patch your kernel with this hacky patch and when you have booted the new kernel, just do modprobe dump_swiotlb it should give an idea of how many bounces are happening, coherent allocations, syncs, and so on.. along with the last driver that did those operations. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 5 Dec 2011 22:26:21 -0500 Message-ID: <20111206032621.GA6568@phenom.dumpdata.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: Konrad Rzeszutek Wilk , xen-devel , "lersek@redhat.com" , Ian Campbell , "zhenzhong.duan@oracle.com" List-Id: xen-devel@lists.xenproject.org On Sun, Dec 04, 2011 at 01:09:28PM +0100, Carsten Schiers wrote: > Here with two cards enabled and creating a bit "work" by watching TV with one oft hem: > > [ 23.842720] Starting SWIOTLB debug thread. > [ 23.842750] swiotlb_start_thread: Go! > [ 23.842838] xen_swiotlb_start_thread: Go! > [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 map:658 unmap:0 sync:435596 > [ 28.841592] SWIOTLB is 4% full > [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 map:0 unmap:0 sync:127652 > [ 33.840283] SWIOTLB is 4% full > [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0 > [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 map:0 unmap:0 sync:128310 Whoa. Yes. You are definitly using the bounce buffer :-) Now it is time to look at why the drive is not using those coherent ones - it looks to allocate just eight of them but does not use them.. Unless it is using them _and_ bouncing them (which would be odd). And BTW, you can lower your 'swiotlb=XX' value. The 4% is how much you are using of the default size. I should find out_why_ the old Xen kernels do not use the bounce buffer so much... From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 14 Dec 2011 16:23:51 -0400 Message-ID: <20111214202351.GA25896@andromeda.dapyr.net> References: <20111206032621.GA6568@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <20111206032621.GA6568@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: "lersek@redhat.com" , xen-devel , Carsten Schiers , Ian Campbell , "zhenzhong.duan@oracle.com" List-Id: xen-devel@lists.xenproject.org On Mon, Dec 05, 2011 at 10:26:21PM -0500, Konrad Rzeszutek Wilk wrote: > On Sun, Dec 04, 2011 at 01:09:28PM +0100, Carsten Schiers wrote: > > Here with two cards enabled and creating a bit "work" by watching TV with one oft hem: > > > > [ 23.842720] Starting SWIOTLB debug thread. > > [ 23.842750] swiotlb_start_thread: Go! > > [ 23.842838] xen_swiotlb_start_thread: Go! > > [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 map:658 unmap:0 sync:435596 > > [ 28.841592] SWIOTLB is 4% full > > [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 map:0 unmap:0 sync:127652 > > [ 33.840283] SWIOTLB is 4% full > > [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0 > > [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 map:0 unmap:0 sync:128310 > > Whoa. Yes. You are definitly using the bounce buffer :-) > > Now it is time to look at why the drive is not using those coherent ones - it > looks to allocate just eight of them but does not use them.. Unless it is > using them _and_ bouncing them (which would be odd). > > And BTW, you can lower your 'swiotlb=XX' value. The 4% is how much you > are using of the default size. So I able to see this with an atl1c ethernet driver on my SandyBridge i3 box. It looks as if the card is truly 32-bit so on a box with 8GB it bounces the data. If I booted the Xen hypervisor with 'mem=4GB' I get no bounces (no surprise there). In other words - I see the same behavior you are seeing. Now off to: > > I should find out_why_ the old Xen kernels do not use the bounce buffer > so much... which will require some fiddling around. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 14 Dec 2011 17:07:00 -0500 Message-ID: <20111214220700.GA9926@phenom.dumpdata.com> References: <20111206032621.GA6568@phenom.dumpdata.com> <20111214202351.GA25896@andromeda.dapyr.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="45Z9DzgjV8m4Oswq" Return-path: Content-Disposition: inline In-Reply-To: <20111214202351.GA25896@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: xen-devel , Ian Campbell , Carsten Schiers , "zhenzhong.duan@oracle.com" , linux@eikelenboom.it, "lersek@redhat.com" List-Id: xen-devel@lists.xenproject.org --45Z9DzgjV8m4Oswq Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Dec 14, 2011 at 04:23:51PM -0400, Konrad Rzeszutek Wilk wrote: > On Mon, Dec 05, 2011 at 10:26:21PM -0500, Konrad Rzeszutek Wilk wrote: > > On Sun, Dec 04, 2011 at 01:09:28PM +0100, Carsten Schiers wrote: > > > Here with two cards enabled and creating a bit "work" by watching TV with one oft hem: > > > > > > [ 23.842720] Starting SWIOTLB debug thread. > > > [ 23.842750] swiotlb_start_thread: Go! > > > [ 23.842838] xen_swiotlb_start_thread: Go! > > > [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 map:658 unmap:0 sync:435596 > > > [ 28.841592] SWIOTLB is 4% full > > > [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 map:0 unmap:0 sync:127652 > > > [ 33.840283] SWIOTLB is 4% full > > > [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0 > > > [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 map:0 unmap:0 sync:128310 > > > > Whoa. Yes. You are definitly using the bounce buffer :-) > > > > Now it is time to look at why the drive is not using those coherent ones - it > > looks to allocate just eight of them but does not use them.. Unless it is > > using them _and_ bouncing them (which would be odd). > > > > And BTW, you can lower your 'swiotlb=XX' value. The 4% is how much you > > are using of the default size. > > So I able to see this with an atl1c ethernet driver on my SandyBridge i3 > box. It looks as if the card is truly 32-bit so on a box with 8GB it > bounces the data. If I booted the Xen hypervisor with 'mem=4GB' I get no > bounces (no surprise there). > > In other words - I see the same behavior you are seeing. Now off to: > > > > I should find out_why_ the old Xen kernels do not use the bounce buffer > > so much... > > which will require some fiddling around. And I am not seeing any difference - the swiotlb is used with the same usage when booting a classic (old style XEnoLinux) 2.6.32 vs using a brand new pvops (3.2). Obviously if I limit the physical amount of memory (so 'mem=4GB' on Xen hypervisor line), the bounce usage disappears. Hmm, I wonder if there is a nice way to tell the hypervisor - hey, please stuff dom0 under 4GB. Here is the patch I used against classic XenLinux. Any chance you could run it with your classis guests and see what numbers you get? --45Z9DzgjV8m4Oswq Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="swiotlb-against-old-type.patch" diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index ab0bb23..17faefd 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig @@ -469,3 +469,10 @@ config XEN_SYS_HYPERVISOR hypervisor environment. When running native or in another virtual environment, /sys/hypervisor will still be present, but will have no xen contents. + +config SWIOTLB_DEBUG + tristate "swiotlb debug facility." + default m + help + Do not enable it. + diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile index 28fb50a..df84614 100644 --- a/drivers/xen/Makefile +++ b/drivers/xen/Makefile @@ -42,3 +42,4 @@ obj-$(CONFIG_XEN_GRANT_DEV) += gntdev/ obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL) += sfc_netutil/ obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND) += sfc_netfront/ obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND) += sfc_netback/ +obj-$(CONFIG_SWIOTLB_DEBUG) += dump_swiotlb.o diff --git a/drivers/xen/dump_swiotlb.c b/drivers/xen/dump_swiotlb.c new file mode 100644 index 0000000..7168eed --- /dev/null +++ b/drivers/xen/dump_swiotlb.c @@ -0,0 +1,72 @@ +/* + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License v2.0 as published by + * the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#define DUMP_SWIOTLB_FUN "0.1" + +MODULE_AUTHOR("Konrad Rzeszutek Wilk "); +MODULE_DESCRIPTION("dump swiotlb"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(DUMP_SWIOTLB_FUN); +/* +extern int xen_swiotlb_start_thread(void); +extern void xen_swiotlb_stop_thread(void);*/ +static int __init dump_swiotlb_init(void) +{ + printk(KERN_INFO "Starting SWIOTLB debug thread.\n"); + swiotlb_start_thread(); + //xen_swiotlb_start_thread(); + return 0; +} + +static void __exit dump_swiotlb_exit(void) +{ + swiotlb_stop_thread(); + //xen_swiotlb_stop_thread(); +} + +module_init(dump_swiotlb_init); +module_exit(dump_swiotlb_exit); diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index 73b1f1c..81f5a1e 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h @@ -7,6 +7,9 @@ struct device; struct dma_attrs; struct scatterlist; + +extern int swiotlb_start_thread(void); +extern void swiotlb_stop_thread(void); /* * Maximum allowable number of contiguous slabs to map, * must be a power of 2. What is the appropriate value ? diff --git a/lib/swiotlb-xen.c b/lib/swiotlb-xen.c index 152696c..d1df462 100644 --- a/lib/swiotlb-xen.c +++ b/lib/swiotlb-xen.c @@ -118,6 +118,78 @@ setup_io_tlb_npages(char *str) } __setup("swiotlb=", setup_io_tlb_npages); /* make io_tlb_overflow tunable too? */ + +#include +struct swiotlb_debug { + unsigned long bounce_to; + unsigned long bounce_from; + unsigned long bounce_slow; + unsigned long map; + unsigned long unmap; + unsigned long sync; + char dev_name[64]; +}; + +; +static DEFINE_PER_CPU(struct swiotlb_debug, tlb_debug); +#include +static int swiotlb_debug_thread(void *arg) +{ + int cpu; + int size = io_tlb_nslabs; + do { + int i; + unsigned long filled = 0; + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout_interruptible(HZ*5); + + for_each_online_cpu(cpu) { + struct swiotlb_debug *d = &per_cpu(tlb_debug, cpu); + /* Can't really happend.*/ + if (!d) + continue; + if (d->dev_name[0] == 0) + continue; + + printk(KERN_INFO "%d [%s] bounce: from:%ld(slow:%ld)to:%ld map:%ld unmap:%ld sync:%ld\n", + cpu, + d->dev_name ? d->dev_name : "?", + d->bounce_from, + d->bounce_slow, + d->bounce_to, + d->map, d->unmap, d->sync); + memset(d, 0, sizeof(struct swiotlb_debug)); + } + /* Very crude calculation. */ + for (i = 0; i < size; i++) { + if (io_tlb_list[i] == 0) + filled++; + } + printk(KERN_INFO "SWIOTLB is %ld%% full\n", (filled * 100) / size); + + } while (!kthread_should_stop()); + return 0; +} +static struct task_struct *debug_thread = NULL; + + +int swiotlb_start_thread(void) { + + if (debug_thread) + return -EINVAL; + printk(KERN_INFO "%s: Go!\n",__func__); + debug_thread = kthread_run(swiotlb_debug_thread, NULL, "swiotlb_debug"); +} +EXPORT_SYMBOL_GPL(swiotlb_start_thread); +void swiotlb_stop_thread(void) { + + printk(KERN_INFO "%s: Stop!\n",__func__); + if (debug_thread) + kthread_stop(debug_thread); + debug_thread = NULL; +} +EXPORT_SYMBOL_GPL(swiotlb_stop_thread); + /* Note that this doesn't work with highmem page */ static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev, @@ -270,6 +342,11 @@ static void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size, enum dma_data_direction dir) { unsigned long pfn = PFN_DOWN(phys); + struct swiotlb_debug *d; + + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); if (PageHighMem(pfn_to_page(pfn))) { /* The buffer does not have a mapping. Map it in and copy */ @@ -297,12 +374,18 @@ static void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size, dma_addr += sz; offset = 0; } + d->bounce_slow++; } else { - if (dir == DMA_TO_DEVICE) + if (dir == DMA_TO_DEVICE) { memcpy(dma_addr, phys_to_virt(phys), size); - else if (__copy_to_user_inatomic(phys_to_virt(phys), + d->bounce_to++; + } + else { + if (__copy_to_user_inatomic(phys_to_virt(phys), dma_addr, size)) /* inaccessible */; + d->bounce_from++; + } } } @@ -406,6 +489,16 @@ found: if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) swiotlb_bounce(phys, dma_addr, size, DMA_TO_DEVICE); + { + struct swiotlb_debug *d; + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); + d->map++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); + } + return dma_addr; } @@ -453,6 +546,17 @@ do_unmap_single(struct device *hwdev, char *dma_addr, size_t size, int dir) io_tlb_list[i] = ++count; } spin_unlock_irqrestore(&io_tlb_lock, flags); + + { + struct swiotlb_debug *d; + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); + d->unmap++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); + } + } static void @@ -462,6 +566,14 @@ sync_single(struct device *hwdev, char *dma_addr, size_t size, int index = (dma_addr - io_tlb_start) >> IO_TLB_SHIFT; phys_addr_t phys = io_tlb_orig_addr[index]; + struct swiotlb_debug *d; + preempt_disable(); + d = &__get_cpu_var(tlb_debug); + preempt_enable(); + d->sync++; + snprintf(d->dev_name, sizeof(d->dev_name), "%s %s", + dev_driver_string(hwdev), dev_name(hwdev)); + phys += ((unsigned long)dma_addr & ((1 << IO_TLB_SHIFT) - 1)); switch (target) { --45Z9DzgjV8m4Oswq Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --45Z9DzgjV8m4Oswq-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 15 Dec 2011 15:52:57 +0100 Message-ID: References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7247085704404214916==" Return-path: In-Reply-To: <20111214220700.GA9926@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?linux=40eikelenboom=2Eit?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Ian_Campbell?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============7247085704404214916== Content-Type: multipart/alternative; boundary="=_9DwWwI6ax7gA7HB4hXr1oJEcEVzmpTNJg692Nj8zUE-q9awT" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_9DwWwI6ax7gA7HB4hXr1oJEcEVzmpTNJg692Nj8zUE-q9awT Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable =2E..=0D=0A=0D=0A> which will require some fiddling around.=0D=0A=0D=0AHe= re is the patch I used against classic XenLinux. Any chance you could run= =0D=0Ait with your classis guests and see what numbers you get=3F=0D=0A=0D= =0ASure, it might take a bit, but I'll try it with my 2.6.34 classic kern= el.=0D=0A=0D=0A=C2=A0=0D=0ACarsten.=0D=0A=0D=0A --=_9DwWwI6ax7gA7HB4hXr1oJEcEVzmpTNJg692Nj8zUE-q9awT Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= p>...

> which will require some fiddling around.

Here is the patch I used against classic XenLinux. Any chance you cou= ld run
it with your classis guests and see what numbers you get=3F

Sure, it might take a bit, but I'll try it with my 2.6.= 34 classic kernel.

 

Carsten.

=0A=0A --=_9DwWwI6ax7gA7HB4hXr1oJEcEVzmpTNJg692Nj8zUE-q9awT-- --===============7247085704404214916== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============7247085704404214916==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 16 Dec 2011 15:56:10 +0100 Message-ID: References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7808909783111654366==" Return-path: In-Reply-To: <> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?linux=40eikelenboom=2Eit?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Ian_Campbell?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============7808909783111654366== Content-Type: multipart/alternative; boundary="=_aMRW6iVVGB-NCUiHa3cI7TggifUX-+QJOOaVvEt1VAOcLQRR" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_aMRW6iVVGB-NCUiHa3cI7TggifUX-+QJOOaVvEt1VAOcLQRR Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Well, it will do nothing but print out =E2=80=9CSWIOTLB is 0% full=E2=80=9D= =2E=0D=0A=0D=0A=C2=A0=0D=0ADoes that help=3F Or do you think something we= nt wrong with the patch=E2=80=A6=0D=0A=0D=0A=C2=A0=0D=0ABR,=0D=0A=0D=0ACa= rsten.=0D=0A=0D=0A=C2=A0=0D=0A=C2=A0=0D=0A=C2=A0=0D=0AVon: Carsten Schier= s=20=0D=0AGesendet: Donnerstag, 15. Dezember 2011 15:53=0D=0AAn: Konrad R= zeszutek Wilk; Konrad Rzeszutek Wilk=0D=0ACc: linux@eikelenboom.it; zhenz= hong.duan@oracle.com; Ian Campbell; lersek@redhat.com; xen-devel=0D=0ABet= reff: AW: [Xen-devel] Load increase after memory upgrade (part2)=0D=0A=0D= =0A=C2=A0=0D=0A...=0D=0A=0D=0A> which will require some fiddling around.=0D= =0A=0D=0AHere is the patch I used against classic XenLinux. Any chance yo= u could run=0D=0Ait with your classis guests and see what numbers you get= =3F=0D=0A=0D=0ASure, it might take a bit, but I'll try it with my 2.6.34 = classic kernel.=0D=0A=0D=0A=C2=A0=0D=0ACarsten.=0D=0A=0D=0A --=_aMRW6iVVGB-NCUiHa3cI7TggifUX-+QJOOaVvEt1VAOcLQRR Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0D=0AAW: [Xen-devel] Load inc= rease after memory upgrade (part2)=0D=0A=0D=0A=0D=0A

Well, it will do = nothing but print out =E2=80=9CSWIOTLB is 0% full=E2=80=9D.

 

Does that help=3F Or do = you think something went wrong with the patch=E2=80=A6<= /p>

 

BR,

Carsten.

 

 

 

Von: Carsten Schiers
Gesendet: Do= nnerstag, 15. Dezember 2011 15:53
An: Konrad Rzeszutek Wilk; Ko= nrad Rzeszutek Wilk
Cc: linux@eikelenboom.it; zhenzhong.duan@or= acle.com; Ian Campbell; lersek@redhat.com; xen-devel
Betreff: A= W: [Xen-devel] Load increase after memory upgrade (part2)

 

...

> which will require some fiddling around.

Here is the patch I used against classic XenLinux. Any chance = you could run
it with your classis guests and see what numbers you get= =3F

Sure, it might take a bit, but I'll try = it with my 2.6.34 classic kernel.

 

= Carsten.

--=_aMRW6iVVGB-NCUiHa3cI7TggifUX-+QJOOaVvEt1VAOcLQRR-- --===============7808909783111654366== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============7808909783111654366==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 16 Dec 2011 10:04:40 -0500 Message-ID: <20111216150440.GD31755@phenom.dumpdata.com> References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: "linux@eikelenboom.it" , xen-devel , "lersek@redhat.com" , "zhenzhong.duan@oracle.com" , Ian Campbell List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBEZWMgMTYsIDIwMTEgYXQgMDM6NTY6MTBQTSArMDEwMCwgQ2Fyc3RlbiBTY2hpZXJz IHdyb3RlOgo+IFdlbGwsIGl0IHdpbGwgZG8gbm90aGluZyBidXQgcHJpbnQgb3V0IOKAnFNXSU9U TEIgaXMgMCUgZnVsbOKAnS4KPiAKPiDCoAo+IERvZXMgdGhhdCBoZWxwPyBPciBkbyB5b3UgdGhp bmsgc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgcGF0Y2jigKYKPiAKCkFuZCB5b3UgYXJl IHVzaW5nIHN3aW90bGI9Zm9yY2Ugb24gdGhlIDIuNi4zNCBjbGFzc2ljIGtlcm5lbCBhbmQgcGFz c2luZwppbiB5b3VyIGJ1ZGdldC1hdiBjYXJkIGluIGl0PyBDb3VsZCB5b3UgYXBwZW5kIHRoZSBk bWVzZyBvdXRwdXQgcGxlYXNlPwoKClRoYW5rcy4KPiDCoAo+IEJSLAo+IAo+IENhcnN0ZW4uCj4g Cj4gwqAKPiDCoAo+IMKgCj4gVm9uOiBDYXJzdGVuIFNjaGllcnMgCj4gR2VzZW5kZXQ6IERvbm5l cnN0YWcsIDE1LiBEZXplbWJlciAyMDExIDE1OjUzCj4gQW46IEtvbnJhZCBSemVzenV0ZWsgV2ls azsgS29ucmFkIFJ6ZXN6dXRlayBXaWxrCj4gQ2M6IGxpbnV4QGVpa2VsZW5ib29tLml0OyB6aGVu emhvbmcuZHVhbkBvcmFjbGUuY29tOyBJYW4gQ2FtcGJlbGw7IGxlcnNla0ByZWRoYXQuY29tOyB4 ZW4tZGV2ZWwKPiBCZXRyZWZmOiBBVzogW1hlbi1kZXZlbF0gTG9hZCBpbmNyZWFzZSBhZnRlciBt ZW1vcnkgdXBncmFkZSAocGFydDIpCj4gCj4gwqAKPiAuLi4KPiAKPiA+IHdoaWNoIHdpbGwgcmVx dWlyZSBzb21lIGZpZGRsaW5nIGFyb3VuZC4KPiAKPiBIZXJlIGlzIHRoZSBwYXRjaCBJIHVzZWQg YWdhaW5zdCBjbGFzc2ljIFhlbkxpbnV4LiBBbnkgY2hhbmNlIHlvdSBjb3VsZCBydW4KPiBpdCB3 aXRoIHlvdXIgY2xhc3NpcyBndWVzdHMgYW5kIHNlZSB3aGF0IG51bWJlcnMgeW91IGdldD8KPiAK PiBTdXJlLCBpdCBtaWdodCB0YWtlIGEgYml0LCBidXQgSSdsbCB0cnkgaXQgd2l0aCBteSAyLjYu MzQgY2xhc3NpYyBrZXJuZWwuCj4gCj4gwqAKPiBDYXJzdGVuLgo+IAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbQpodHRwOi8vbGlzdHMueGVuc291cmNlLmNvbS94 ZW4tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 16 Dec 2011 16:51:47 +0100 Message-ID: References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_jASWBVRfAzzjZ2gubxT7JfE4rOPAtg-rILiWQbFgI4tLQ-VX" Return-path: In-Reply-To: <20111216150440.GD31755@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?linux=40eikelenboom=2Eit?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Ian_Campbell?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_jASWBVRfAzzjZ2gubxT7JfE4rOPAtg-rILiWQbFgI4tLQ-VX Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > And you are using swiotlb=3Dforce on the 2.6.34 classic kernel and passing in your budget-av card in it=3F Yes, two of them with swiotlb=3D32,force. > Could you append the dmesg output please=3F Attached. You find a "normal" boot after the one with the patched kernel. Carsten. --=_jASWBVRfAzzjZ2gubxT7JfE4rOPAtg-rILiWQbFgI4tLQ-VX Content-Type: application/octet-stream; name=dmesg.txt Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=dmesg.txt RGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogTGludXggdmVyc2lvbiAyLjYuMzQuNy4x LXhlbi1hbWQ2NCAocm9vdEBjaGVrb3RleSkgKGdjYyB2ZXJzaW9uIDQuNC41IChEZWJpYW4g NC40LjUtOCkgKSAjNyBTTVAgRnJpIERlYyAxNiAxMzozNjozMyBDRVQgMjAxMQpEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBDb21tYW5kIGxpbmU6IHJvb3Q9L2Rldi94dmRhMSBy byBzd2lvdGxiPTMyLGZvcmNlIHhlbmNvbnM9dHR5CkRlYyAxNiAxNTo1MzoxMSByaWtlciBr ZXJuZWw6IFhlbi1wcm92aWRlZCBwaHlzaWNhbCBSQU0gbWFwOgpEZWMgMTYgMTU6NTM6MTEg cmlrZXIga2VybmVsOiBYZW46IDAwMDAwMDAwMDAwMDAwMDAgLSAwMDAwMDAwMDE0ODAwMDAw ICh1c2FibGUpCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IE5YIChFeGVjdXRlIERp c2FibGUpIHByb3RlY3Rpb246IGFjdGl2ZQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVs OiBsYXN0X3BmbiA9IDB4MTQ4MDAgbWF4X2FyY2hfcGZuID0gMHg4MDAwMDAwMApEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBpbml0X21lbW9yeV9tYXBwaW5nOiAwMDAwMDAwMDAw MDAwMDAwLTAwMDAwMDAwMTQ4MDAwMDAKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDog UkFNRElTSzogMDA3ZmIwMDAgLSAwMTAwNjAwMApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2Vy bmVsOiBBQ1BJIGluIHVucHJpdmlsZWdlZCBkb21haW4gZGlzYWJsZWQKRGVjIDE2IDE1OjUz OjExIHJpa2VyIGtlcm5lbDogWm9uZSBQRk4gcmFuZ2VzOgpEZWMgMTYgMTU6NTM6MTEgcmlr ZXIga2VybmVsOiAgRE1BICAgICAgMHgwMDAwMDAwMCAtPiAweDAwMDAxMDAwCkRlYyAxNiAx NTo1MzoxMSByaWtlciBrZXJuZWw6ICBETUEzMiAgICAweDAwMDAxMDAwIC0+IDB4MDAxMDAw MDAKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogIE5vcm1hbCAgIGVtcHR5CkRlYyAx NiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IE1vdmFibGUgem9uZSBzdGFydCBQRk4gZm9yIGVh Y2ggbm9kZQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBlYXJseV9ub2RlX21hcFsy XSBhY3RpdmUgUEZOIHJhbmdlcwpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgICAw OiAweDAwMDAwMDAwIC0+IDB4MDAwMTQwMDAKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5l bDogICAgMDogMHgwMDAxNDgwMCAtPiAweDAwMDE0ODAwCkRlYyAxNiAxNTo1MzoxMSByaWtl ciBrZXJuZWw6IHNldHVwX3BlcmNwdTogTlJfQ1BVUzozMiBucl9jcHVtYXNrX2JpdHM6MzIg bnJfY3B1X2lkczoxIG5yX25vZGVfaWRzOjEKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5l bDogUEVSQ1BVOiBFbWJlZGRlZCAxNyBwYWdlcy9jcHUgQGZmZmY4ODAwMDEwMGEwMDAgczM5 NjU2IHI4MTkyIGQyMTc4NCB1Njk2MzIKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDog cGNwdS1hbGxvYzogczM5NjU2IHI4MTkyIGQyMTc4NCB1Njk2MzIgYWxsb2M9MTcqNDA5NgpE ZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBwY3B1LWFsbG9jOiBbMF0gMCAKRGVjIDE2 IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogQnVpbHQgMSB6b25lbGlzdHMgaW4gWm9uZSBvcmRl ciwgbW9iaWxpdHkgZ3JvdXBpbmcgb24uICBUb3RhbCBwYWdlczogODA3NzIKRGVjIDE2IDE1 OjUzOjExIHJpa2VyIGtlcm5lbDogS2VybmVsIGNvbW1hbmQgbGluZTogcm9vdD0vZGV2L3h2 ZGExIHJvIHN3aW90bGI9MzIsZm9yY2UgeGVuY29ucz10dHkKRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogUElEIGhhc2ggdGFibGUgZW50cmllczogMjA0OCAob3JkZXI6IDIsIDE2 Mzg0IGJ5dGVzKQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBEZW50cnkgY2FjaGUg aGFzaCB0YWJsZSBlbnRyaWVzOiA2NTUzNiAob3JkZXI6IDcsIDUyNDI4OCBieXRlcykKRGVj IDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogSW5vZGUtY2FjaGUgaGFzaCB0YWJsZSBlbnRy aWVzOiAzMjc2OCAob3JkZXI6IDYsIDI2MjE0NCBieXRlcykKRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogU29mdHdhcmUgSU8gVExCIGVuYWJsZWQ6IApEZWMgMTYgMTU6NTM6MTEg cmlrZXIga2VybmVsOiBBcGVydHVyZTogICAgIDMyIG1lZ2FieXRlcwpEZWMgMTYgMTU6NTM6 MTEgcmlrZXIga2VybmVsOiBBZGRyZXNzIHNpemU6IDI4IGJpdHMKRGVjIDE2IDE1OjUzOjEx IHJpa2VyIGtlcm5lbDogS2VybmVsIHJhbmdlOiBmZmZmODgwMDAxNmMzMDAwIC0gZmZmZjg4 MDAwMzZjMzAwMApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBQQ0ktRE1BOiBVc2lu ZyBzb2Z0d2FyZSBib3VuY2UgYnVmZmVyaW5nIGZvciBJTyAoU1dJT1RMQikKRGVjIDE2IDE1 OjUzOjExIHJpa2VyIGtlcm5lbDogU3VidHJhY3QgKDM1IGVhcmx5IHJlc2VydmF0aW9ucykK RGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICMxIFswMDAwN2ZiMDAwIC0gMDAwMTAw NjAwMF0gICAgWGVuIHByb3ZpZGVkCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6ICAj MiBbMDAwMDIwMDAwMCAtIDAwMDA3ZGFhOTRdICAgVEVYVCBEQVRBIEJTUwpEZWMgMTYgMTU6 NTM6MTEgcmlrZXIga2VybmVsOiAgIzMgWzAwMDEwYjYwMDAgLSAwMDAxMTVjMDAwXSAgICAg ICAgIFBHVEFCTEUKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICM0IFswMDE0MDAw MDAwIC0gMDAxNDgwMDAwMF0gICAgICAgICBCQUxMT09OCkRlYyAxNiAxNTo1MzoxMSByaWtl ciBrZXJuZWw6ICAjNSBbMDAwMTE1YzAwMCAtIDAwMDE1ZDgwMDBdICAgICAgICAgQk9PVE1F TQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzYgWzAwMDE1ZDgwMDAgLSAwMDAx NWQ4MDA4XSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDog ICM3IFswMDAxNWQ4MDQwIC0gMDAwMTVkODFjMF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAx NTo1MzoxMSByaWtlciBrZXJuZWw6ICAjOCBbMDAwMTVkODFjMCAtIDAwMDE1ZDgxZTBdICAg ICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzkgWzAwMDE1 ZDgyMDAgLSAwMDAxNWRiMjAwXSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogICMxMCBbMDAwMTVkYzAwMCAtIDAwMDE1ZGQwMDBdICAgICAgICAgQk9P VE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzExIFswMDAxNWRkMDAwIC0g MDAwMTVkZTAwMF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJu ZWw6ICAjMTIgWzAwMDE1ZGUwMDAgLSAwMDAxNWRmMDAwXSAgICAgICAgIEJPT1RNRU0KRGVj IDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICMxMyBbMDAwMTVkZjAwMCAtIDAwMDE2ODMw MDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzE0 IFswMDAxMGE2MDAwIC0gMDAwMTBiNjAwMF0gICAgWGVuIHByb3ZpZGVkCkRlYyAxNiAxNTo1 MzoxMSByaWtlciBrZXJuZWw6ICAjMTUgWzAwMDEwMDYwMDAgLSAwMDAxMDA2MDEwXSAgICAg ICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICMxNiBbMDAwMTAw NjA0MCAtIDAwMDEwMDYwNDhdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlr ZXIga2VybmVsOiAgIzE3IFswMDAxMDA3MDAwIC0gMDAwMTAwODAwMF0gICAgICAgICBCT09U TUVNCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6ICAjMTggWzAwMDEwMDYwODAgLSAw MDAxMDA2MGIwXSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5l bDogICMxOSBbMDAwMTAwNjBjMCAtIDAwMDEwMDYwZjBdICAgICAgICAgQk9PVE1FTQpEZWMg MTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzIwIFswMDAxMDBhMDAwIC0gMDAwMTAxYjAw MF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6ICAjMjEg WzAwMDEwMDYxMDAgLSAwMDAxMDA2MTA4XSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUz OjExIHJpa2VyIGtlcm5lbDogICMyMiBbMDAwMTAwNjE0MCAtIDAwMDEwMDYxNDhdICAgICAg ICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzIzIFswMDAxMDA2 MTgwIC0gMDAwMTAwNjE4NF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1MzoxMSByaWtl ciBrZXJuZWw6ICAjMjQgWzAwMDEwMDYxYzAgLSAwMDAxMDA2MWM4XSAgICAgICAgIEJPT1RN RU0KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICMyNSBbMDAwMTAwNjIwMCAtIDAw MDEwMDYzMDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVs OiAgIzI2IFswMDAxMDA2MzAwIC0gMDAwMTAwNjM0OF0gICAgICAgICBCT09UTUVNCkRlYyAx NiAxNTo1MzoxMSByaWtlciBrZXJuZWw6ICAjMjcgWzAwMDEwMDYzODAgLSAwMDAxMDA2M2M4 XSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICMyOCBb MDAwMTAxYjAwMCAtIDAwMDEwMWYwMDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6 MTEgcmlrZXIga2VybmVsOiAgIzI5IFswMDAxMDFmMDAwIC0gMDAwMTA5ZjAwMF0gICAgICAg ICBCT09UTUVNCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6ICAjMzAgWzAwMDE2ODMw MDAgLSAwMDAxNmMzMDAwXSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjUzOjExIHJpa2Vy IGtlcm5lbDogICMzMSBbMDAwMTZjMzAwMCAtIDAwMDM2YzMwMDBdICAgICAgICAgQk9PVE1F TQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiAgIzMyIFswMDAzNmMzMDAwIC0gMDAw MzZkMzAwMF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6 ICAjMzMgWzAwMDM2ZDMwMDAgLSAwMDAzNmYzMDAwXSAgICAgICAgIEJPT1RNRU0KRGVjIDE2 IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogICMzNCBbMDAwMzZmMzAwMCAtIDAwMDM2ZmIwMDBd ICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBNZW1vcnk6 IDI3MzU5MmsvMzM1ODcyayBhdmFpbGFibGUgKDMyMjlrIGtlcm5lbCBjb2RlLCA4MTkyayBh YnNlbnQsIDU0MDg4ayByZXNlcnZlZCwgMTcyMmsgZGF0YSwgMzIwayBpbml0KQpEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBIaWVyYXJjaGljYWwgUkNVIGltcGxlbWVudGF0aW9u LgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBSQ1UtYmFzZWQgZGV0ZWN0aW9uIG9m IHN0YWxsZWQgQ1BVcyBpcyBlbmFibGVkLgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVs OiBOUl9JUlFTOjE2MDAKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogWGVuIHJlcG9y dGVkOiAyMjEwLjAzOCBNSHogcHJvY2Vzc29yLgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2Vy bmVsOiBDb25zb2xlOiBjb2xvdXIgZHVtbXkgZGV2aWNlIDgweDI1CkRlYyAxNiAxNTo1Mzox MSByaWtlciBrZXJuZWw6IGNvbnNvbGUgW3R0eTBdIGVuYWJsZWQKRGVjIDE2IDE1OjUzOjEx IHJpa2VyIGtlcm5lbDogY29uc29sZSBbdHR5LTFdIGVuYWJsZWQKRGVjIDE2IDE1OjUzOjEx IHJpa2VyIGtlcm5lbDogQ2FsaWJyYXRpbmcgZGVsYXkgdXNpbmcgdGltZXIgc3BlY2lmaWMg cm91dGluZS4uIDQ0NzguNTggQm9nb01JUFMgKGxwaj04OTU3MTczKQpEZWMgMTYgMTU6NTM6 MTEgcmlrZXIga2VybmVsOiBTZWN1cml0eSBGcmFtZXdvcmsgaW5pdGlhbGl6ZWQKRGVjIDE2 IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogU0VMaW51eDogIERpc2FibGVkIGF0IGJvb3QuCkRl YyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IE1vdW50LWNhY2hlIGhhc2ggdGFibGUgZW50 cmllczogMjU2CkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFNNUCBhbHRlcm5hdGl2 ZXM6IHN3aXRjaGluZyB0byBVUCBjb2RlCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6 IEZyZWVpbmcgU01QIGFsdGVybmF0aXZlczogMzZrIGZyZWVkCkRlYyAxNiAxNTo1MzoxMSBy aWtlciBrZXJuZWw6IEJyb3VnaHQgdXAgMSBDUFVzCkRlYyAxNiAxNTo1MzoxMSByaWtlciBr ZXJuZWw6IE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgMTYKRGVjIDE2IDE1OjUz OjExIHJpa2VyIGtlcm5lbDogQnJvdWdodCB1cCAxIENQVXMKRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogUENJOiBzZXR0aW5nIHVwIFhlbiBQQ0kgZnJvbnRlbmQgc3R1YgpEZWMg MTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBiaW86IGNyZWF0ZSBzbGFiIDxiaW8tMD4gYXQg MApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBBQ1BJOiBJbnRlcnByZXRlciBkaXNh YmxlZC4KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogdmdhYXJiOiBsb2FkZWQKRGVj IDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogeGVuX21lbTogSW5pdGlhbGlzaW5nIGJhbGxv b24gZHJpdmVyLgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBTQ1NJIHN1YnN5c3Rl bSBpbml0aWFsaXplZApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiB1c2Jjb3JlOiBy ZWdpc3RlcmVkIG5ldyBpbnRlcmZhY2UgZHJpdmVyIHVzYmZzCkRlYyAxNiAxNTo1MzoxMSBy aWtlciBrZXJuZWw6IHVzYmNvcmU6IHJlZ2lzdGVyZWQgbmV3IGludGVyZmFjZSBkcml2ZXIg aHViCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IHVzYmNvcmU6IHJlZ2lzdGVyZWQg bmV3IGRldmljZSBkcml2ZXIgdXNiCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFBD STogU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgUENJCkRlYyAxNiAxNTo1MzoxMSByaWtlciBr ZXJuZWw6IFBDSTogU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgUENJCkRlYyAxNiAxNTo1Mzox MSByaWtlciBrZXJuZWw6IE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgOApEZWMg MTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFt aWx5IDIwCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFN3aXRjaGluZyB0byBjbG9j a3NvdXJjZSB4ZW4KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogcG5wOiBQblAgQUNQ STogZGlzYWJsZWQKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogTkVUOiBSZWdpc3Rl cmVkIHByb3RvY29sIGZhbWlseSAyCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IElQ IHJvdXRlIGNhY2hlIGhhc2ggdGFibGUgZW50cmllczogNDA5NiAob3JkZXI6IDMsIDMyNzY4 IGJ5dGVzKQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBUQ1AgZXN0YWJsaXNoZWQg aGFzaCB0YWJsZSBlbnRyaWVzOiAxNjM4NCAob3JkZXI6IDYsIDI2MjE0NCBieXRlcykKRGVj IDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogVENQIGJpbmQgaGFzaCB0YWJsZSBlbnRyaWVz OiAxNjM4NCAob3JkZXI6IDYsIDI2MjE0NCBieXRlcykKRGVjIDE2IDE1OjUzOjExIHJpa2Vy IGtlcm5lbDogVENQOiBIYXNoIHRhYmxlcyBjb25maWd1cmVkIChlc3RhYmxpc2hlZCAxNjM4 NCBiaW5kIDE2Mzg0KQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBUQ1AgcmVubyBy ZWdpc3RlcmVkCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFVEUCBoYXNoIHRhYmxl IGVudHJpZXM6IDI1NiAob3JkZXI6IDEsIDgxOTIgYnl0ZXMpCkRlYyAxNiAxNTo1MzoxMSBy aWtlciBrZXJuZWw6IFVEUC1MaXRlIGhhc2ggdGFibGUgZW50cmllczogMjU2IChvcmRlcjog MSwgODE5MiBieXRlcykKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogTkVUOiBSZWdp c3RlcmVkIHByb3RvY29sIGZhbWlseSAxCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6 IFRyeWluZyB0byB1bnBhY2sgcm9vdGZzIGltYWdlIGFzIGluaXRyYW1mcy4uLgpEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBwY2lmcm9udCBwY2ktMDogSW5zdGFsbGluZyBQQ0kg ZnJvbnRlbmQKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogcGNpZnJvbnQgcGNpLTA6 IENyZWF0aW5nIFBDSSBGcm9udGVuZCBCdXMgMDAwMDowMApEZWMgMTYgMTU6NTM6MTEgcmlr ZXIga2VybmVsOiBGcmVlaW5nIGluaXRyZCBtZW1vcnk6IDgyMzZrIGZyZWVkCkRlYyAxNiAx NTo1MzoxMSByaWtlciBrZXJuZWw6IHBsYXRmb3JtIHJ0Y19jbW9zOiByZWdpc3RlcmVkIHBs YXRmb3JtIFJUQyBkZXZpY2UgKG5vIFBOUCBkZXZpY2UgZm91bmQpCkRlYyAxNiAxNTo1Mzox MSByaWtlciBrZXJuZWw6IGF1ZGl0OiBpbml0aWFsaXppbmcgbmV0bGluayBzb2NrZXQgKGRp c2FibGVkKQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiB0eXBlPTIwMDAgYXVkaXQo MTMyNDA0NzE4Ni4zMzQ6MSk6IGluaXRpYWxpemVkCkRlYyAxNiAxNTo1MzoxMSByaWtlciBr ZXJuZWw6IFZGUzogRGlzayBxdW90YXMgZHF1b3RfNi41LjIKRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogRHF1b3QtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiA1MTIgKG9yZGVy IDAsIDQwOTYgYnl0ZXMpCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IE5URlMgZHJp dmVyIDIuMS4yOSBbRmxhZ3M6IFIvV10uCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6 IG1zZ21uaSBoYXMgYmVlbiBzZXQgdG8gNjU2CkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJu ZWw6IGFsZzogTm8gdGVzdCBmb3Igc3Rkcm5nIChrcm5nKQpEZWMgMTYgMTU6NTM6MTEgcmlr ZXIga2VybmVsOiBCbG9jayBsYXllciBTQ1NJIGdlbmVyaWMgKGJzZykgZHJpdmVyIHZlcnNp b24gMC40IGxvYWRlZCAobWFqb3IgMjU0KQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVs OiBpbyBzY2hlZHVsZXIgbm9vcCByZWdpc3RlcmVkCkRlYyAxNiAxNTo1MzoxMSByaWtlciBr ZXJuZWw6IGlvIHNjaGVkdWxlciBkZWFkbGluZSByZWdpc3RlcmVkCkRlYyAxNiAxNTo1Mzox MSByaWtlciBrZXJuZWw6IGlvIHNjaGVkdWxlciBjZnEgcmVnaXN0ZXJlZCAoZGVmYXVsdCkK RGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogTGludXggYWdwZ2FydCBpbnRlcmZhY2Ug djAuMTAzCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IGJyZDogbW9kdWxlIGxvYWRl ZApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBYZW4gdmlydHVhbCBjb25zb2xlIHN1 Y2Nlc3NmdWxseSBpbnN0YWxsZWQgYXMgdHR5MQpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2Vy bmVsOiBFdmVudC1jaGFubmVsIGRldmljZSBpbnN0YWxsZWQuCkRlYyAxNiAxNTo1MzoxMSBy aWtlciBrZXJuZWw6IGJsa3RhcF9kZXZpY2VfaW5pdDogYmxrdGFwIGRldmljZSBtYWpvciAy NTQKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogYmxrdGFwX3JpbmdfaW5pdDogYmxr dGFwIHJpbmcgbWFqb3I6IDI1MgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBuZXRm cm9udDogSW5pdGlhbGlzaW5nIHZpcnR1YWwgZXRoZXJuZXQgZHJpdmVyLgpEZWMgMTYgMTU6 NTM6MTEgcmlrZXIga2VybmVsOiB4ZW4tdmJkOiByZWdpc3RlcmVkIGJsb2NrIGRldmljZSBt YWpvciAyMDIKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogYmxrZnJvbnQ6IHh2ZGEx OiBiYXJyaWVycyBlbmFibGVkCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IGJsa2Zy b250OiB4dmRhMjogYmFycmllcnMgZW5hYmxlZApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2Vy bmVsOiBTZXR0aW5nIGNhcGFjaXR5IHRvIDgzODg2MDgKRGVjIDE2IDE1OjUzOjExIHJpa2Vy IGtlcm5lbDogeHZkYTE6IGRldGVjdGVkIGNhcGFjaXR5IGNoYW5nZSBmcm9tIDAgdG8gNDI5 NDk2NzI5NgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBibGtmcm9udDogeHZkYjE6 IGJhcnJpZXJzIGVuYWJsZWQKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogU2V0dGlu ZyBjYXBhY2l0eSB0byAyMDk3MTUyCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IHh2 ZGEyOiBkZXRlY3RlZCBjYXBhY2l0eSBjaGFuZ2UgZnJvbSAwIHRvIDEwNzM3NDE4MjQKRGVj IDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogU2V0dGluZyBjYXBhY2l0eSB0byAyOTMwMjcy MDAyCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IHh2ZGIxOiBkZXRlY3RlZCBjYXBh Y2l0eSBjaGFuZ2UgZnJvbSAwIHRvIDE1MDAyOTkyNjUwMjQKRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogdXNiY29yZTogcmVnaXN0ZXJlZCBuZXcgaW50ZXJmYWNlIGRyaXZlciB1 c2JiYWNrCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFBQUCBnZW5lcmljIGRyaXZl ciB2ZXJzaW9uIDIuNC4yCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFBOUDogTm8g UFMvMiBjb250cm9sbGVyIGZvdW5kLiBQcm9iaW5nIHBvcnRzIGRpcmVjdGx5LgpEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBtaWNlOiBQUy8yIG1vdXNlIGRldmljZSBjb21tb24g Zm9yIGFsbCBtaWNlCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFRDUCBiaWMgcmVn aXN0ZXJlZApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBORVQ6IFJlZ2lzdGVyZWQg cHJvdG9jb2wgZmFtaWx5IDE3CkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFBDSSBJ TyBtdWx0aXBsZXhlciBkZXZpY2UgaW5zdGFsbGVkLgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIg a2VybmVsOiBGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiAzMjBrIGZyZWVkCkRlYyAx NiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IGtqb3VybmFsZCBzdGFydGluZy4gIENvbW1pdCBp bnRlcnZhbCA1IHNlY29uZHMKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogRVhUMy1m cyAoeHZkYTEpOiBtb3VudGVkIGZpbGVzeXN0ZW0gd2l0aCB3cml0ZWJhY2sgZGF0YSBtb2Rl CkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IHVkZXZbMTc3XTogc3RhcnRpbmcgdmVy c2lvbiAxNjQKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogTGludXggdmlkZW8gY2Fw dHVyZSBpbnRlcmZhY2U6IHYyLjAwCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IHNh YTcxNDY6IHJlZ2lzdGVyIGV4dGVuc2lvbiAnYnVkZ2V0X2F2Jy4KRGVjIDE2IDE1OjUzOjEx IHJpa2VyIGtlcm5lbDogYnVkZ2V0X2F2IDAwMDA6MDA6MDAuMDogZW5hYmxpbmcgZGV2aWNl ICgwMDAwIC0+IDAwMDIpCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IElSUSAxNy86 IElSUUZfRElTQUJMRUQgaXMgbm90IGd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXMKRGVjIDE2 IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogc2FhNzE0NjogZm91bmQgc2FhNzE0NiBAIG1lbSBm ZmZmYzkwMDAwMjQ2MDAwIChyZXZpc2lvbiAxLCBpcnEgMTcpICgweDE4OTQsMHgwMDI4KS4K RGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogc2FhNzE0NiAoMCk6IGRtYSBidWZmZXIg c2l6ZSAxMzQ3NTg0CkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IERWQjogcmVnaXN0 ZXJpbmcgbmV3IGFkYXB0ZXIgKEtOQzEgRFZCLUMgTUszKQpEZWMgMTYgMTU6NTM6MTEgcmlr ZXIga2VybmVsOiBhZGFwdGVyIGZhaWxlZCBNQUMgc2lnbmF0dXJlIGNoZWNrCkRlYyAxNiAx NTo1MzoxMSByaWtlciBrZXJuZWw6IGVuY29kZWQgTUFDIGZyb20gRUVQUk9NIHdhcyBmZjpm ZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpm ZgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBLTkMxLTA6IE1BQyBhZGRyID0gMDA6 MDk6ZDY6NmQ6YjM6MGEKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogRFZCOiByZWdp c3RlcmluZyBhZGFwdGVyIDAgZnJvbnRlbmQgMCAoUGhpbGlwcyBUREExMDAyMyBEVkItQyku Li4KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogYnVkZ2V0LWF2OiBjaSBpbnRlcmZh Y2UgaW5pdGlhbGlzZWQuCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IGJ1ZGdldF9h diAwMDAwOjAwOjAxLjA6IGVuYWJsaW5nIGRldmljZSAoMDAwMCAtPiAwMDAyKQpEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBJUlEgMTgvOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCBn dWFyYW50ZWVkIG9uIHNoYXJlZCBJUlFzCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6 IHNhYTcxNDY6IGZvdW5kIHNhYTcxNDYgQCBtZW0gZmZmZmM5MDAwMDRkZTAwMCAocmV2aXNp b24gMSwgaXJxIDE4KSAoMHgxODk0LDB4MDAyYykuCkRlYyAxNiAxNTo1MzoxMSByaWtlciBr ZXJuZWw6IHNhYTcxNDYgKDEpOiBkbWEgYnVmZmVyIHNpemUgMTM0NzU4NApEZWMgMTYgMTU6 NTM6MTEgcmlrZXIga2VybmVsOiBEVkI6IHJlZ2lzdGVyaW5nIG5ldyBhZGFwdGVyIChTYXRl bGNvIEVhc3lXYXRjaCBEVkItQyBNSzMpCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6 IGFkYXB0ZXIgZmFpbGVkIE1BQyBzaWduYXR1cmUgY2hlY2sKRGVjIDE2IDE1OjUzOjExIHJp a2VyIGtlcm5lbDogZW5jb2RlZCBNQUMgZnJvbSBFRVBST00gd2FzIGZmOmZmOmZmOmZmOmZm OmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmCkRlYyAxNiAx NTo1MzoxMSByaWtlciBrZXJuZWw6IEtOQzEtMTogTUFDIGFkZHIgPSAwMDowOTpkNjo2ZDpi MDozMwpEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBEVkI6IHJlZ2lzdGVyaW5nIGFk YXB0ZXIgMSBmcm9udGVuZCAwIChQaGlsaXBzIFREQTEwMDIzIERWQi1DKS4uLgpEZWMgMTYg MTU6NTM6MTEgcmlrZXIga2VybmVsOiBidWRnZXQtYXY6IGNpIGludGVyZmFjZSBpbml0aWFs aXNlZC4KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogQWRkaW5nIDEwNDg1NzJrIHN3 YXAgb24gL2Rldi94dmRhMi4gIFByaW9yaXR5Oi0xIGV4dGVudHM6MSBhY3Jvc3M6MTA0ODU3 MmsgU1MKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogRVhUMy1mcyAoeHZkYTEpOiB3 YXJuaW5nOiBtYXhpbWFsIG1vdW50IGNvdW50IHJlYWNoZWQsIHJ1bm5pbmcgZTJmc2NrIGlz IHJlY29tbWVuZGVkCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IEVYVDMtZnMgKHh2 ZGExKTogdXNpbmcgaW50ZXJuYWwgam91cm5hbApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2Vy bmVsOiBram91cm5hbGQgc3RhcnRpbmcuICBDb21taXQgaW50ZXJ2YWwgNSBzZWNvbmRzCkRl YyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IEVYVDMtZnMgKHh2ZGIxKTogd2FybmluZzog bWF4aW1hbCBtb3VudCBjb3VudCByZWFjaGVkLCBydW5uaW5nIGUyZnNjayBpcyByZWNvbW1l bmRlZApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBFWFQzLWZzICh4dmRiMSk6IHVz aW5nIGludGVybmFsIGpvdXJuYWwKRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogRVhU My1mcyAoeHZkYjEpOiBtb3VudGVkIGZpbGVzeXN0ZW0gd2l0aCB3cml0ZWJhY2sgZGF0YSBt b2RlCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IFJQQzogUmVnaXN0ZXJlZCB1ZHAg dHJhbnNwb3J0IG1vZHVsZS4KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogUlBDOiBS ZWdpc3RlcmVkIHRjcCB0cmFuc3BvcnQgbW9kdWxlLgpEZWMgMTYgMTU6NTM6MTEgcmlrZXIg a2VybmVsOiBSUEM6IFJlZ2lzdGVyZWQgdGNwIE5GU3Y0LjEgYmFja2NoYW5uZWwgdHJhbnNw b3J0IG1vZHVsZS4KRGVjIDE2IDE1OjUzOjExIHJpa2VyIGtlcm5lbDogSW5zdGFsbGluZyBr bmZzZCAoY29weXJpZ2h0IChDKSAxOTk2IG9raXJAbW9uYWQuc3diLmRlKS4KRGVjIDE2IDE1 OjUzOjExIHJpa2VyIGtlcm5lbDogTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAx MApEZWMgMTYgMTU6NTM6MTEgcmlrZXIga2VybmVsOiBsbzogRGlzYWJsZWQgUHJpdmFjeSBF eHRlbnNpb25zCkRlYyAxNiAxNTo1MzoxMSByaWtlciBrZXJuZWw6IHN2YzogZmFpbGVkIHRv IHJlZ2lzdGVyIGxvY2tkdjEgUlBDIHNlcnZpY2UgKGVycm5vIDk3KS4KRGVjIDE2IDE1OjUz OjExIHJpa2VyIGtlcm5lbDogTkZTRDogVXNpbmcgL3Zhci9saWIvbmZzL3Y0cmVjb3Zlcnkg YXMgdGhlIE5GU3Y0IHN0YXRlIHJlY292ZXJ5IGRpcmVjdG9yeQpEZWMgMTYgMTU6NTM6MTEg cmlrZXIga2VybmVsOiBORlNEOiBzdGFydGluZyA5MC1zZWNvbmQgZ3JhY2UgcGVyaW9kCkRl YyAxNiAxNTo1MzoyOSByaWtlciBrZXJuZWw6IFN0YXJ0aW5nIFNXSU9UTEIgZGVidWcgdGhy ZWFkLgpEZWMgMTYgMTU6NTM6MjkgcmlrZXIga2VybmVsOiBzd2lvdGxiX3N0YXJ0X3RocmVh ZDogR28hCkRlYyAxNiAxNTo1MzozNCByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVs bApEZWMgMTYgMTU6NTM6MzkgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVj IDE2IDE1OjUzOjQ0IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAx NTo1Mzo0OSByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTM6 NTQgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjUzOjU5IHJp a2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1NDowNCByaWtlciBr ZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTQ6MDkgcmlrZXIga2VybmVs OiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjU0OjE0IHJpa2VyIGtlcm5lbDogU1dJ T1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1NDoxOSByaWtlciBrZXJuZWw6IFNXSU9UTEIg aXMgMCUgZnVsbApEZWMgMTYgMTU6NTQ6MjQgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAl IGZ1bGwKRGVjIDE2IDE1OjU0OjI5IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxs CkRlYyAxNiAxNTo1NDozNCByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMg MTYgMTU6NTQ6MzkgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1 OjU0OjQ0IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1NDo0 OSByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTQ6NTQgcmlr ZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjU0OjU5IHJpa2VyIGtl cm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1NTowNCByaWtlciBrZXJuZWw6 IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTU6MDkgcmlrZXIga2VybmVsOiBTV0lP VExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjU1OjE0IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBp cyAwJSBmdWxsCkRlYyAxNiAxNTo1NToxOSByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUg ZnVsbApEZWMgMTYgMTU6NTU6MjQgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwK RGVjIDE2IDE1OjU1OjI5IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAx NiAxNTo1NTozNCByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6 NTU6MzkgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjU1OjQz IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1NTo0OCByaWtl ciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTU6NTMgcmlrZXIga2Vy bmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjU1OjU4IHJpa2VyIGtlcm5lbDog U1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1NjowMyByaWtlciBrZXJuZWw6IFNXSU9U TEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTY6MDggcmlrZXIga2VybmVsOiBTV0lPVExCIGlz IDAlIGZ1bGwKRGVjIDE2IDE1OjU2OjEzIHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBm dWxsCkRlYyAxNiAxNTo1NjoxOCByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApE ZWMgMTYgMTU6NTY6MjMgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2 IDE1OjU2OjI4IHJpa2VyIGtlcm5lbDogU1dJT1RMQiBpcyAwJSBmdWxsCkRlYyAxNiAxNTo1 NjozMyByaWtlciBrZXJuZWw6IFNXSU9UTEIgaXMgMCUgZnVsbApEZWMgMTYgMTU6NTY6MzYg cmlrZXIga2VybmVsOiBzd2lvdGxiX3N0b3BfdGhyZWFkOiBTdG9wIQpEZWMgMTYgMTU6NTY6 MzYgcmlrZXIga2VybmVsOiBTV0lPVExCIGlzIDAlIGZ1bGwKRGVjIDE2IDE1OjU3OjIyIHJp a2VyIHNodXRkb3duWzEyODFdOiBzaHV0dGluZyBkb3duIGZvciBzeXN0ZW0gaGFsdApEZWMg MTYgMTU6NTc6MjMgcmlrZXIga2VybmVsOiBuZnNkOiBsYXN0IHNlcnZlciBoYXMgZXhpdGVk LCBmbHVzaGluZyBleHBvcnQgY2FjaGUKRGVjIDE2IDE1OjU3OjI1IHJpa2VyIGtlcm5lbDog S2VybmVsIGxvZ2dpbmcgKHByb2MpIHN0b3BwZWQuCkRlYyAxNiAxNTo1NzoyNSByaWtlciBy c3lzbG9nZDogW29yaWdpbiBzb2Z0d2FyZT0icnN5c2xvZ2QiIHN3VmVyc2lvbj0iNC42LjQi IHgtcGlkPSI2MTAiIHgtaW5mbz0iaHR0cDovL3d3dy5yc3lzbG9nLmNvbSJdIGV4aXRpbmcg b24gc2lnbmFsIDE1LgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBpbWtsb2cgNC42 LjQsIGxvZyBzb3VyY2UgPSAvcHJvYy9rbXNnIHN0YXJ0ZWQuCkRlYyAxNiAxNTo1ODowMCBy aWtlciByc3lzbG9nZDogW29yaWdpbiBzb2Z0d2FyZT0icnN5c2xvZ2QiIHN3VmVyc2lvbj0i NC42LjQiIHgtcGlkPSI2MTQiIHgtaW5mbz0iaHR0cDovL3d3dy5yc3lzbG9nLmNvbSJdIChy ZSlzdGFydAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIG5vcm1hbCBib290 ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCkRlYyAxNiAx NTo1ODowMCByaWtlciBrZXJuZWw6IExpbnV4IHZlcnNpb24gMi42LjM0LjcuMS14ZW4tYW1k NjQgKHJvb3RAY2hla290ZXkpIChnY2MgdmVyc2lvbiA0LjQuNSAoRGViaWFuIDQuNC41LTgp ICkgIzYgU01QIFdlZCBBdWcgMTcgMTE6NDk6NTMgQ0VTVCAyMDExCkRlYyAxNiAxNTo1ODow MCByaWtlciBrZXJuZWw6IENvbW1hbmQgbGluZTogcm9vdD0vZGV2L3h2ZGExIHJvIHN3aW90 bGI9MzIsZm9yY2UgeGVuY29ucz10dHkKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDog WGVuLXByb3ZpZGVkIHBoeXNpY2FsIFJBTSBtYXA6CkRlYyAxNiAxNTo1ODowMCByaWtlciBr ZXJuZWw6IFhlbjogMDAwMDAwMDAwMDAwMDAwMCAtIDAwMDAwMDAwMTQ4MDAwMDAgKHVzYWJs ZSkKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogTlggKEV4ZWN1dGUgRGlzYWJsZSkg cHJvdGVjdGlvbjogYWN0aXZlCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGxhc3Rf cGZuID0gMHgxNDgwMCBtYXhfYXJjaF9wZm4gPSAweDgwMDAwMDAwCkRlYyAxNiAxNTo1ODow MCByaWtlciBrZXJuZWw6IGluaXRfbWVtb3J5X21hcHBpbmc6IDAwMDAwMDAwMDAwMDAwMDAt MDAwMDAwMDAxNDgwMDAwMApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBSQU1ESVNL OiAwMDdmYjAwMCAtIDAxMDA2MDAwCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IEFD UEkgaW4gdW5wcml2aWxlZ2VkIGRvbWFpbiBkaXNhYmxlZApEZWMgMTYgMTU6NTg6MDAgcmlr ZXIga2VybmVsOiBab25lIFBGTiByYW5nZXM6CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJu ZWw6ICBETUEgICAgICAweDAwMDAwMDAwIC0+IDB4MDAwMDEwMDAKRGVjIDE2IDE1OjU4OjAw IHJpa2VyIGtlcm5lbDogIERNQTMyICAgIDB4MDAwMDEwMDAgLT4gMHgwMDEwMDAwMApEZWMg MTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgTm9ybWFsICAgZW1wdHkKRGVjIDE2IDE1OjU4 OjAwIHJpa2VyIGtlcm5lbDogTW92YWJsZSB6b25lIHN0YXJ0IFBGTiBmb3IgZWFjaCBub2Rl CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGVhcmx5X25vZGVfbWFwWzJdIGFjdGl2 ZSBQRk4gcmFuZ2VzCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAgIDA6IDB4MDAw MDAwMDAgLT4gMHgwMDAxNDAwMApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgICAw OiAweDAwMDE0ODAwIC0+IDB4MDAwMTQ4MDAKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5l bDogc2V0dXBfcGVyY3B1OiBOUl9DUFVTOjMyIG5yX2NwdW1hc2tfYml0czozMiBucl9jcHVf aWRzOjEgbnJfbm9kZV9pZHM6MQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBQRVJD UFU6IEVtYmVkZGVkIDE3IHBhZ2VzL2NwdSBAZmZmZjg4MDAwMTAwYTAwMCBzMzk1OTIgcjgx OTIgZDIxODQ4IHU2OTYzMgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBwY3B1LWFs bG9jOiBzMzk1OTIgcjgxOTIgZDIxODQ4IHU2OTYzMiBhbGxvYz0xNyo0MDk2CkRlYyAxNiAx NTo1ODowMCByaWtlciBrZXJuZWw6IHBjcHUtYWxsb2M6IFswXSAwIApEZWMgMTYgMTU6NTg6 MDAgcmlrZXIga2VybmVsOiBCdWlsdCAxIHpvbmVsaXN0cyBpbiBab25lIG9yZGVyLCBtb2Jp bGl0eSBncm91cGluZyBvbi4gIFRvdGFsIHBhZ2VzOiA4MDc3MgpEZWMgMTYgMTU6NTg6MDAg cmlrZXIga2VybmVsOiBLZXJuZWwgY29tbWFuZCBsaW5lOiByb290PS9kZXYveHZkYTEgcm8g c3dpb3RsYj0zMixmb3JjZSB4ZW5jb25zPXR0eQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2Vy bmVsOiBQSUQgaGFzaCB0YWJsZSBlbnRyaWVzOiAyMDQ4IChvcmRlcjogMiwgMTYzODQgYnl0 ZXMpCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IERlbnRyeSBjYWNoZSBoYXNoIHRh YmxlIGVudHJpZXM6IDY1NTM2IChvcmRlcjogNywgNTI0Mjg4IGJ5dGVzKQpEZWMgMTYgMTU6 NTg6MDAgcmlrZXIga2VybmVsOiBJbm9kZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDMy NzY4IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2Vy bmVsOiBTb2Z0d2FyZSBJTyBUTEIgZW5hYmxlZDogCkRlYyAxNiAxNTo1ODowMCByaWtlciBr ZXJuZWw6IEFwZXJ0dXJlOiAgICAgMzIgbWVnYWJ5dGVzCkRlYyAxNiAxNTo1ODowMCByaWtl ciBrZXJuZWw6IEFkZHJlc3Mgc2l6ZTogMjggYml0cwpEZWMgMTYgMTU6NTg6MDAgcmlrZXIg a2VybmVsOiBLZXJuZWwgcmFuZ2U6IGZmZmY4ODAwMDE2YzMwMDAgLSBmZmZmODgwMDAzNmMz MDAwCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFBDSS1ETUE6IFVzaW5nIHNvZnR3 YXJlIGJvdW5jZSBidWZmZXJpbmcgZm9yIElPIChTV0lPVExCKQpEZWMgMTYgMTU6NTg6MDAg cmlrZXIga2VybmVsOiBTdWJ0cmFjdCAoMzUgZWFybHkgcmVzZXJ2YXRpb25zKQpEZWMgMTYg MTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzEgWzAwMDA3ZmIwMDAgLSAwMDAxMDA2MDAwXSAg ICBYZW4gcHJvdmlkZWQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogICMyIFswMDAw MjAwMDAwIC0gMDAwMDdkYWE5NF0gICBURVhUIERBVEEgQlNTCkRlYyAxNiAxNTo1ODowMCBy aWtlciBrZXJuZWw6ICAjMyBbMDAwMTBiNjAwMCAtIDAwMDExNWMwMDBdICAgICAgICAgUEdU QUJMRQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzQgWzAwMTQwMDAwMDAgLSAw MDE0ODAwMDAwXSAgICAgICAgIEJBTExPT04KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5l bDogICM1IFswMDAxMTVjMDAwIC0gMDAwMTVkODAwMF0gICAgICAgICBCT09UTUVNCkRlYyAx NiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjNiBbMDAwMTVkODAwMCAtIDAwMDE1ZDgwMDhd ICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzcgWzAw MDE1ZDgwNDAgLSAwMDAxNWQ4MWMwXSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjU4OjAw IHJpa2VyIGtlcm5lbDogICM4IFswMDAxNWQ4MWMwIC0gMDAwMTVkODFlMF0gICAgICAgICBC T09UTUVNCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjOSBbMDAwMTVkODIwMCAt IDAwMDE1ZGIyMDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2Vy bmVsOiAgIzEwIFswMDAxNWRjMDAwIC0gMDAwMTVkZDAwMF0gICAgICAgICBCT09UTUVNCkRl YyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjMTEgWzAwMDE1ZGQwMDAgLSAwMDAxNWRl MDAwXSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogICMx MiBbMDAwMTVkZTAwMCAtIDAwMDE1ZGYwMDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6 NTg6MDAgcmlrZXIga2VybmVsOiAgIzEzIFswMDAxNWRmMDAwIC0gMDAwMTY4MzAwMF0gICAg ICAgICBCT09UTUVNCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjMTQgWzAwMDEw YTYwMDAgLSAwMDAxMGI2MDAwXSAgICBYZW4gcHJvdmlkZWQKRGVjIDE2IDE1OjU4OjAwIHJp a2VyIGtlcm5lbDogICMxNSBbMDAwMTAwNjAwMCAtIDAwMDEwMDYwMTBdICAgICAgICAgQk9P VE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzE2IFswMDAxMDA2MDQwIC0g MDAwMTAwNjA0OF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJu ZWw6ICAjMTcgWzAwMDEwMDcwMDAgLSAwMDAxMDA4MDAwXSAgICAgICAgIEJPT1RNRU0KRGVj IDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogICMxOCBbMDAwMTAwNjA4MCAtIDAwMDEwMDYw YjBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzE5 IFswMDAxMDA2MGMwIC0gMDAwMTAwNjBmMF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1 ODowMCByaWtlciBrZXJuZWw6ICAjMjAgWzAwMDEwMGEwMDAgLSAwMDAxMDFiMDAwXSAgICAg ICAgIEJPT1RNRU0KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogICMyMSBbMDAwMTAw NjEwMCAtIDAwMDEwMDYxMDhdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlr ZXIga2VybmVsOiAgIzIyIFswMDAxMDA2MTQwIC0gMDAwMTAwNjE0OF0gICAgICAgICBCT09U TUVNCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjMjMgWzAwMDEwMDYxODAgLSAw MDAxMDA2MTg0XSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5l bDogICMyNCBbMDAwMTAwNjFjMCAtIDAwMDEwMDYxYzhdICAgICAgICAgQk9PVE1FTQpEZWMg MTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzI1IFswMDAxMDA2MjAwIC0gMDAwMTAwNjMw MF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjMjYg WzAwMDEwMDYzMDAgLSAwMDAxMDA2MzQ4XSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjU4 OjAwIHJpa2VyIGtlcm5lbDogICMyNyBbMDAwMTAwNjM4MCAtIDAwMDEwMDYzYzhdICAgICAg ICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiAgIzI4IFswMDAxMDFi MDAwIC0gMDAwMTAxZjAwMF0gICAgICAgICBCT09UTUVNCkRlYyAxNiAxNTo1ODowMCByaWtl ciBrZXJuZWw6ICAjMjkgWzAwMDEwMWYwMDAgLSAwMDAxMDlmMDAwXSAgICAgICAgIEJPT1RN RU0KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogICMzMCBbMDAwMTY4MzAwMCAtIDAw MDE2YzMwMDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVs OiAgIzMxIFswMDAxNmMzMDAwIC0gMDAwMzZjMzAwMF0gICAgICAgICBCT09UTUVNCkRlYyAx NiAxNTo1ODowMCByaWtlciBrZXJuZWw6ICAjMzIgWzAwMDM2YzMwMDAgLSAwMDAzNmQzMDAw XSAgICAgICAgIEJPT1RNRU0KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogICMzMyBb MDAwMzZkMzAwMCAtIDAwMDM2ZjMwMDBdICAgICAgICAgQk9PVE1FTQpEZWMgMTYgMTU6NTg6 MDAgcmlrZXIga2VybmVsOiAgIzM0IFswMDAzNmYzMDAwIC0gMDAwMzZmYjAwMF0gICAgICAg ICBCT09UTUVNCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IE1lbW9yeTogMjczNTky ay8zMzU4NzJrIGF2YWlsYWJsZSAoMzIyOGsga2VybmVsIGNvZGUsIDgxOTJrIGFic2VudCwg NTQwODhrIHJlc2VydmVkLCAxNzIzayBkYXRhLCAzMjBrIGluaXQpCkRlYyAxNiAxNTo1ODow MCByaWtlciBrZXJuZWw6IEhpZXJhcmNoaWNhbCBSQ1UgaW1wbGVtZW50YXRpb24uCkRlYyAx NiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFJDVS1iYXNlZCBkZXRlY3Rpb24gb2Ygc3RhbGxl ZCBDUFVzIGlzIGVuYWJsZWQuCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IE5SX0lS UVM6MTYwMApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBYZW4gcmVwb3J0ZWQ6IDIy MTAuMDM4IE1IeiBwcm9jZXNzb3IuCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IENv bnNvbGU6IGNvbG91ciBkdW1teSBkZXZpY2UgODB4MjUKRGVjIDE2IDE1OjU4OjAwIHJpa2Vy IGtlcm5lbDogY29uc29sZSBbdHR5MF0gZW5hYmxlZApEZWMgMTYgMTU6NTg6MDAgcmlrZXIg a2VybmVsOiBjb25zb2xlIFt0dHktMV0gZW5hYmxlZApEZWMgMTYgMTU6NTg6MDAgcmlrZXIg a2VybmVsOiBDYWxpYnJhdGluZyBkZWxheSB1c2luZyB0aW1lciBzcGVjaWZpYyByb3V0aW5l Li4gNDQ3OC42MyBCb2dvTUlQUyAobHBqPTg5NTcyNzYpCkRlYyAxNiAxNTo1ODowMCByaWtl ciBrZXJuZWw6IFNlY3VyaXR5IEZyYW1ld29yayBpbml0aWFsaXplZApEZWMgMTYgMTU6NTg6 MDAgcmlrZXIga2VybmVsOiBTRUxpbnV4OiAgRGlzYWJsZWQgYXQgYm9vdC4KRGVjIDE2IDE1 OjU4OjAwIHJpa2VyIGtlcm5lbDogTW91bnQtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAy NTYKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogU01QIGFsdGVybmF0aXZlczogc3dp dGNoaW5nIHRvIFVQIGNvZGUKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogRnJlZWlu ZyBTTVAgYWx0ZXJuYXRpdmVzOiAzNmsgZnJlZWQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtl cm5lbDogQnJvdWdodCB1cCAxIENQVXMKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDog TkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxNgpEZWMgMTYgMTU6NTg6MDAgcmlr ZXIga2VybmVsOiBCcm91Z2h0IHVwIDEgQ1BVcwpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2Vy bmVsOiBQQ0k6IHNldHRpbmcgdXAgWGVuIFBDSSBmcm9udGVuZCBzdHViCkRlYyAxNiAxNTo1 ODowMCByaWtlciBrZXJuZWw6IGJpbzogY3JlYXRlIHNsYWIgPGJpby0wPiBhdCAwCkRlYyAx NiAxNTo1ODowMCByaWtlciBrZXJuZWw6IEFDUEk6IEludGVycHJldGVyIGRpc2FibGVkLgpE ZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiB2Z2FhcmI6IGxvYWRlZApEZWMgMTYgMTU6 NTg6MDAgcmlrZXIga2VybmVsOiB4ZW5fbWVtOiBJbml0aWFsaXNpbmcgYmFsbG9vbiBkcml2 ZXIuCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFNDU0kgc3Vic3lzdGVtIGluaXRp YWxpemVkCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IHVzYmNvcmU6IHJlZ2lzdGVy ZWQgbmV3IGludGVyZmFjZSBkcml2ZXIgdXNiZnMKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtl cm5lbDogdXNiY29yZTogcmVnaXN0ZXJlZCBuZXcgaW50ZXJmYWNlIGRyaXZlciBodWIKRGVj IDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogdXNiY29yZTogcmVnaXN0ZXJlZCBuZXcgZGV2 aWNlIGRyaXZlciB1c2IKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogUENJOiBTeXN0 ZW0gZG9lcyBub3Qgc3VwcG9ydCBQQ0kKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDog UENJOiBTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQQ0kKRGVjIDE2IDE1OjU4OjAwIHJpa2Vy IGtlcm5lbDogTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSA4CkRlYyAxNiAxNTo1 ODowMCByaWtlciBrZXJuZWw6IE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgMjAK RGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogU3dpdGNoaW5nIHRvIGNsb2Nrc291cmNl IHhlbgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBwbnA6IFBuUCBBQ1BJOiBkaXNh YmxlZApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBORVQ6IFJlZ2lzdGVyZWQgcHJv dG9jb2wgZmFtaWx5IDIKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogSVAgcm91dGUg Y2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiA0MDk2IChvcmRlcjogMywgMzI3NjggYnl0ZXMp CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFRDUCBlc3RhYmxpc2hlZCBoYXNoIHRh YmxlIGVudHJpZXM6IDE2Mzg0IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQpEZWMgMTYgMTU6 NTg6MDAgcmlrZXIga2VybmVsOiBUQ1AgYmluZCBoYXNoIHRhYmxlIGVudHJpZXM6IDE2Mzg0 IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVs OiBUQ1A6IEhhc2ggdGFibGVzIGNvbmZpZ3VyZWQgKGVzdGFibGlzaGVkIDE2Mzg0IGJpbmQg MTYzODQpCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFRDUCByZW5vIHJlZ2lzdGVy ZWQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogVURQIGhhc2ggdGFibGUgZW50cmll czogMjU2IChvcmRlcjogMSwgODE5MiBieXRlcykKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtl cm5lbDogVURQLUxpdGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAyNTYgKG9yZGVyOiAxLCA4MTky IGJ5dGVzKQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBORVQ6IFJlZ2lzdGVyZWQg cHJvdG9jb2wgZmFtaWx5IDEKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogVHJ5aW5n IHRvIHVucGFjayByb290ZnMgaW1hZ2UgYXMgaW5pdHJhbWZzLi4uCkRlYyAxNiAxNTo1ODow MCByaWtlciBrZXJuZWw6IEZyZWVpbmcgaW5pdHJkIG1lbW9yeTogODIzNmsgZnJlZWQKRGVj IDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogcGxhdGZvcm0gcnRjX2Ntb3M6IHJlZ2lzdGVy ZWQgcGxhdGZvcm0gUlRDIGRldmljZSAobm8gUE5QIGRldmljZSBmb3VuZCkKRGVjIDE2IDE1 OjU4OjAwIHJpa2VyIGtlcm5lbDogYXVkaXQ6IGluaXRpYWxpemluZyBuZXRsaW5rIHNvY2tl dCAoZGlzYWJsZWQpCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IHR5cGU9MjAwMCBh dWRpdCgxMzI0MDQ3NDc1LjMxMjoxKTogaW5pdGlhbGl6ZWQKRGVjIDE2IDE1OjU4OjAwIHJp a2VyIGtlcm5lbDogVkZTOiBEaXNrIHF1b3RhcyBkcXVvdF82LjUuMgpEZWMgMTYgMTU6NTg6 MDAgcmlrZXIga2VybmVsOiBEcXVvdC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDUxMiAo b3JkZXIgMCwgNDA5NiBieXRlcykKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogTlRG UyBkcml2ZXIgMi4xLjI5IFtGbGFnczogUi9XXS4KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtl cm5lbDogbXNnbW5pIGhhcyBiZWVuIHNldCB0byA2NTYKRGVjIDE2IDE1OjU4OjAwIHJpa2Vy IGtlcm5lbDogcGNpZnJvbnQgcGNpLTA6IEluc3RhbGxpbmcgUENJIGZyb250ZW5kCkRlYyAx NiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGFsZzogTm8gdGVzdCBmb3Igc3Rkcm5nIChrcm5n KQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBCbG9jayBsYXllciBTQ1NJIGdlbmVy aWMgKGJzZykgZHJpdmVyIHZlcnNpb24gMC40IGxvYWRlZCAobWFqb3IgMjU0KQpEZWMgMTYg MTU6NTg6MDAgcmlrZXIga2VybmVsOiBpbyBzY2hlZHVsZXIgbm9vcCByZWdpc3RlcmVkCkRl YyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGlvIHNjaGVkdWxlciBkZWFkbGluZSByZWdp c3RlcmVkCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGlvIHNjaGVkdWxlciBjZnEg cmVnaXN0ZXJlZCAoZGVmYXVsdCkKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogTGlu dXggYWdwZ2FydCBpbnRlcmZhY2UgdjAuMTAzCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJu ZWw6IGJyZDogbW9kdWxlIGxvYWRlZApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBY ZW4gdmlydHVhbCBjb25zb2xlIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgYXMgdHR5MQpEZWMg MTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBFdmVudC1jaGFubmVsIGRldmljZSBpbnN0YWxs ZWQuCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IHBjaWZyb250IHBjaS0wOiBDcmVh dGluZyBQQ0kgRnJvbnRlbmQgQnVzIDAwMDA6MDAKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtl cm5lbDogYmxrdGFwX2RldmljZV9pbml0OiBibGt0YXAgZGV2aWNlIG1ham9yIDI1NApEZWMg MTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBibGt0YXBfcmluZ19pbml0OiBibGt0YXAgcmlu ZyBtYWpvcjogMjUyCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IG5ldGZyb250OiBJ bml0aWFsaXNpbmcgdmlydHVhbCBldGhlcm5ldCBkcml2ZXIuCkRlYyAxNiAxNTo1ODowMCBy aWtlciBrZXJuZWw6IHhlbi12YmQ6IHJlZ2lzdGVyZWQgYmxvY2sgZGV2aWNlIG1ham9yIDIw MgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBibGtmcm9udDogeHZkYTE6IGJhcnJp ZXJzIGVuYWJsZWQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogYmxrZnJvbnQ6IHh2 ZGEyOiBiYXJyaWVycyBlbmFibGVkCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFNl dHRpbmcgY2FwYWNpdHkgdG8gODM4ODYwOApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVs OiB4dmRhMTogZGV0ZWN0ZWQgY2FwYWNpdHkgY2hhbmdlIGZyb20gMCB0byA0Mjk0OTY3Mjk2 CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IFNldHRpbmcgY2FwYWNpdHkgdG8gMjA5 NzE1MgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiB4dmRhMjogZGV0ZWN0ZWQgY2Fw YWNpdHkgY2hhbmdlIGZyb20gMCB0byAxMDczNzQxODI0CkRlYyAxNiAxNTo1ODowMCByaWtl ciBrZXJuZWw6IGJsa2Zyb250OiB4dmRiMTogYmFycmllcnMgZW5hYmxlZApEZWMgMTYgMTU6 NTg6MDAgcmlrZXIga2VybmVsOiB1c2Jjb3JlOiByZWdpc3RlcmVkIG5ldyBpbnRlcmZhY2Ug ZHJpdmVyIHVzYmJhY2sKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogUFBQIGdlbmVy aWMgZHJpdmVyIHZlcnNpb24gMi40LjIKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDog UE5QOiBObyBQUy8yIGNvbnRyb2xsZXIgZm91bmQuIFByb2JpbmcgcG9ydHMgZGlyZWN0bHku CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IG1pY2U6IFBTLzIgbW91c2UgZGV2aWNl IGNvbW1vbiBmb3IgYWxsIG1pY2UKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogVENQ IGJpYyByZWdpc3RlcmVkCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IE5FVDogUmVn aXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgMTcKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5l bDogUENJIElPIG11bHRpcGxleGVyIGRldmljZSBpbnN0YWxsZWQuCkRlYyAxNiAxNTo1ODow MCByaWtlciBrZXJuZWw6IEZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6IDMyMGsgZnJl ZWQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDoga2pvdXJuYWxkIHN0YXJ0aW5nLiAg Q29tbWl0IGludGVydmFsIDUgc2Vjb25kcwpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVs OiBFWFQzLWZzICh4dmRhMSk6IG1vdW50ZWQgZmlsZXN5c3RlbSB3aXRoIHdyaXRlYmFjayBk YXRhIG1vZGUKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogdWRldlsxODZdOiBzdGFy dGluZyB2ZXJzaW9uIDE2NApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBMaW51eCB2 aWRlbyBjYXB0dXJlIGludGVyZmFjZTogdjIuMDAKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtl cm5lbDogc2FhNzE0NjogcmVnaXN0ZXIgZXh0ZW5zaW9uICdidWRnZXRfYXYnLgpEZWMgMTYg MTU6NTg6MDAgcmlrZXIga2VybmVsOiBidWRnZXRfYXYgMDAwMDowMDowMC4wOiBlbmFibGlu ZyBkZXZpY2UgKDAwMDAgLT4gMDAwMikKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDog SVJRIDE3LzogSVJRRl9ESVNBQkxFRCBpcyBub3QgZ3VhcmFudGVlZCBvbiBzaGFyZWQgSVJR cwpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBzYWE3MTQ2OiBmb3VuZCBzYWE3MTQ2 IEAgbWVtIGZmZmZjOTAwMDAyM2UwMDAgKHJldmlzaW9uIDEsIGlycSAxNykgKDB4MTg5NCww eDAwMjgpLgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBzYWE3MTQ2ICgwKTogZG1h IGJ1ZmZlciBzaXplIDEzNDc1ODQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogRFZC OiByZWdpc3RlcmluZyBuZXcgYWRhcHRlciAoS05DMSBEVkItQyBNSzMpCkRlYyAxNiAxNTo1 ODowMCByaWtlciBrZXJuZWw6IGFkYXB0ZXIgZmFpbGVkIE1BQyBzaWduYXR1cmUgY2hlY2sK RGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogZW5jb2RlZCBNQUMgZnJvbSBFRVBST00g d2FzIGZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZm OmZmOmZmOmZmCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IEtOQzEtMDogTUFDIGFk ZHIgPSAwMDowOTpkNjo2ZDpiMzowYQpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBE VkI6IHJlZ2lzdGVyaW5nIGFkYXB0ZXIgMCBmcm9udGVuZCAwIChQaGlsaXBzIFREQTEwMDIz IERWQi1DKS4uLgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBidWRnZXQtYXY6IGNp IGludGVyZmFjZSBpbml0aWFsaXNlZC4KRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDog YnVkZ2V0X2F2IDAwMDA6MDA6MDEuMDogZW5hYmxpbmcgZGV2aWNlICgwMDAwIC0+IDAwMDIp CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IElSUSAxOC86IElSUUZfRElTQUJMRUQg aXMgbm90IGd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXMKRGVjIDE2IDE1OjU4OjAwIHJpa2Vy IGtlcm5lbDogc2FhNzE0NjogZm91bmQgc2FhNzE0NiBAIG1lbSBmZmZmYzkwMDAwNGQ2MDAw IChyZXZpc2lvbiAxLCBpcnEgMTgpICgweDE4OTQsMHgwMDJjKS4KRGVjIDE2IDE1OjU4OjAw IHJpa2VyIGtlcm5lbDogc2FhNzE0NiAoMSk6IGRtYSBidWZmZXIgc2l6ZSAxMzQ3NTg0CkRl YyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IERWQjogcmVnaXN0ZXJpbmcgbmV3IGFkYXB0 ZXIgKFNhdGVsY28gRWFzeVdhdGNoIERWQi1DIE1LMykKRGVjIDE2IDE1OjU4OjAwIHJpa2Vy IGtlcm5lbDogYWRhcHRlciBmYWlsZWQgTUFDIHNpZ25hdHVyZSBjaGVjawpEZWMgMTYgMTU6 NTg6MDAgcmlrZXIga2VybmVsOiBlbmNvZGVkIE1BQyBmcm9tIEVFUFJPTSB3YXMgZmY6ZmY6 ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmYK RGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogS05DMS0xOiBNQUMgYWRkciA9IDAwOjA5 OmQ2OjZkOmIwOjMzCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IERWQjogcmVnaXN0 ZXJpbmcgYWRhcHRlciAxIGZyb250ZW5kIDAgKFBoaWxpcHMgVERBMTAwMjMgRFZCLUMpLi4u CkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGJ1ZGdldC1hdjogY2kgaW50ZXJmYWNl IGluaXRpYWxpc2VkLgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBBZGRpbmcgMTA0 ODU3Mmsgc3dhcCBvbiAvZGV2L3h2ZGEyLiAgUHJpb3JpdHk6LTEgZXh0ZW50czoxIGFjcm9z czoxMDQ4NTcyayBTUwpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBFWFQzLWZzICh4 dmRhMSk6IHdhcm5pbmc6IG1heGltYWwgbW91bnQgY291bnQgcmVhY2hlZCwgcnVubmluZyBl MmZzY2sgaXMgcmVjb21tZW5kZWQKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogRVhU My1mcyAoeHZkYTEpOiB1c2luZyBpbnRlcm5hbCBqb3VybmFsCkRlYyAxNiAxNTo1ODowMCBy aWtlciBrZXJuZWw6IGtqb3VybmFsZCBzdGFydGluZy4gIENvbW1pdCBpbnRlcnZhbCA1IHNl Y29uZHMKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogRVhUMy1mcyAoeHZkYjEpOiB3 YXJuaW5nOiBtYXhpbWFsIG1vdW50IGNvdW50IHJlYWNoZWQsIHJ1bm5pbmcgZTJmc2NrIGlz IHJlY29tbWVuZGVkCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IEVYVDMtZnMgKHh2 ZGIxKTogdXNpbmcgaW50ZXJuYWwgam91cm5hbApEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2Vy bmVsOiBFWFQzLWZzICh4dmRiMSk6IG1vdW50ZWQgZmlsZXN5c3RlbSB3aXRoIHdyaXRlYmFj ayBkYXRhIG1vZGUKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogUlBDOiBSZWdpc3Rl cmVkIHVkcCB0cmFuc3BvcnQgbW9kdWxlLgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVs OiBSUEM6IFJlZ2lzdGVyZWQgdGNwIHRyYW5zcG9ydCBtb2R1bGUuCkRlYyAxNiAxNTo1ODow MCByaWtlciBrZXJuZWw6IFJQQzogUmVnaXN0ZXJlZCB0Y3AgTkZTdjQuMSBiYWNrY2hhbm5l bCB0cmFuc3BvcnQgbW9kdWxlLgpEZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBJbnN0 YWxsaW5nIGtuZnNkIChjb3B5cmlnaHQgKEMpIDE5OTYgb2tpckBtb25hZC5zd2IuZGUpLgpE ZWMgMTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wg ZmFtaWx5IDEwCkRlYyAxNiAxNTo1ODowMCByaWtlciBrZXJuZWw6IGxvOiBEaXNhYmxlZCBQ cml2YWN5IEV4dGVuc2lvbnMKRGVjIDE2IDE1OjU4OjAwIHJpa2VyIGtlcm5lbDogc3ZjOiBm YWlsZWQgdG8gcmVnaXN0ZXIgbG9ja2R2MSBSUEMgc2VydmljZSAoZXJybm8gOTcpLgpEZWMg MTYgMTU6NTg6MDAgcmlrZXIga2VybmVsOiBORlNEOiBVc2luZyAvdmFyL2xpYi9uZnMvdjRy ZWNvdmVyeSBhcyB0aGUgTkZTdjQgc3RhdGUgcmVjb3ZlcnkgZGlyZWN0b3J5CkRlYyAxNiAx NTo1ODowMCByaWtlciBrZXJuZWw6IE5GU0Q6IHN0YXJ0aW5nIDkwLXNlY29uZCBncmFjZSBw ZXJpb2QK --=_jASWBVRfAzzjZ2gubxT7JfE4rOPAtg-rILiWQbFgI4tLQ-VX Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=_jASWBVRfAzzjZ2gubxT7JfE4rOPAtg-rILiWQbFgI4tLQ-VX-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 16 Dec 2011 11:19:22 -0500 Message-ID: <20111216161922.GH31755@phenom.dumpdata.com> References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: "linux@eikelenboom.it" , xen-devel , "lersek@redhat.com" , "zhenzhong.duan@oracle.com" , Ian Campbell List-Id: xen-devel@lists.xenproject.org On Fri, Dec 16, 2011 at 04:51:47PM +0100, Carsten Schiers wrote: > > And you are using swiotlb=force on the 2.6.34 classic kernel and passing in your budget-av card in it? > > Yes, two of them with swiotlb=32,force. > > > > Could you append the dmesg output please? > > Attached. You find a "normal" boot after the one with the patched kernel. Uh, what happens when you run the driver, meaning capture stuff. I remember with the pvops you had about ~30K or so of bounces, but not sure about the bootup? Thanks for being willing to be a guinea pig while trying to fix this. > > Carsten. > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Sat, 17 Dec 2011 23:12:45 +0100 Message-ID: References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20111216161922.GH31755@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?linux=40eikelenboom=2Eit?= , =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= List-Id: xen-devel@lists.xenproject.org OK, double checked. Both PCI cards enabled, running, working, but nothing b= ut "SWIOTLB is 0% full". Any chance to check that the patch is working? Does it print out something else with y= our setting? BR, Carsten. -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.= xensource.com] Im Auftrag von Konrad Rzeszutek Wilk Gesendet: Freitag, 16. Dezember 2011 17:19 An: Carsten Schiers Cc: linux@eikelenboom.it; xen-devel; lersek@redhat.com; zhenzhong.duan@orac= le.com; Ian Campbell Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Fri, Dec 16, 2011 at 04:51:47PM +0100, Carsten Schiers wrote: > > And you are using swiotlb=3Dforce on the 2.6.34 classic kernel and pass= ing in your budget-av card in it? > = > Yes, two of them with swiotlb=3D32,force. > = > = > > Could you append the dmesg output please? > = > Attached. You find a "normal" boot after the one with the patched kernel. Uh, what happens when you run the driver, meaning capture stuff. I remember= with the pvops you had about ~30K or so of bounces, but not sure about the= bootup? Thanks for being willing to be a guinea pig while trying to fix this. > = > Carsten. > = > = _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sander Eikelenboom Subject: Re: Load increase after memory upgrade (part2) Date: Sun, 18 Dec 2011 01:19:16 +0100 Message-ID: <783969451.20111218011916@eikelenboom.it> References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: Ian Campbell , xen-devel , lersek@redhat.com, zhenzhong.duan@oracle.com, Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org I also have done some experiments with the patch, in domU i also get the 0%= full for my usb controllers with video grabbers , in dom0 my i get 12% ful= l, both my realtek 8169 ethernet controllers seem to use the bounce bufferi= ng ... And that with a iommu (amd) ? it all seems kind of strange, although it is = also working ... I'm not having much time now, hoping to get back with a full report soon. -- Sander Saturday, December 17, 2011, 11:12:45 PM, you wrote: > OK, double checked. Both PCI cards enabled, running, working, but nothing= but "SWIOTLB is 0% full". Any chance > to check that the patch is working? Does it print out something else with= your setting? BR, Carsten. > -----Urspr=FCngliche Nachricht----- > Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@list= s.xensource.com] Im Auftrag von Konrad Rzeszutek Wilk > Gesendet: Freitag, 16. Dezember 2011 17:19 > An: Carsten Schiers > Cc: linux@eikelenboom.it; xen-devel; lersek@redhat.com; zhenzhong.duan@or= acle.com; Ian Campbell > Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > On Fri, Dec 16, 2011 at 04:51:47PM +0100, Carsten Schiers wrote: >> > And you are using swiotlb=3Dforce on the 2.6.34 classic kernel and pas= sing in your budget-av card in it? >> = >> Yes, two of them with swiotlb=3D32,force. >> = >> = >> > Could you append the dmesg output please? >> = >> Attached. You find a "normal" boot after the one with the patched kernel. > Uh, what happens when you run the driver, meaning capture stuff. I rememb= er with the pvops you had about ~30K or so of bounces, but not sure about t= he bootup? > Thanks for being willing to be a guinea pig while trying to fix this. >> = >> Carsten. >> = >> = > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel -- = Best regards, Sander mailto:linux@eikelenboom.it From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 19 Dec 2011 10:54:39 -0400 Message-ID: <20111219145439.GA28969@andromeda.dapyr.net> References: <20111214220700.GA9926@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: xen-devel , Ian Campbell , Konrad Rzeszutek Wilk , "zhenzhong.duan@oracle.com" , "linux@eikelenboom.it" , "lersek@redhat.com" List-Id: xen-devel@lists.xenproject.org On Sat, Dec 17, 2011 at 11:12:45PM +0100, Carsten Schiers wrote: > OK, double checked. Both PCI cards enabled, running, working, but nothing but "SWIOTLB is 0% full". Any chance > to check that the patch is working? Does it print out something else with your setting? BR, Carsten. Hm, and with the pvops you got some numbers along with tons of 'bounce'. The one thing that I neglected in this patch is the alloc_coherent part.. which I don't thing is that important as we did show that the alloc buffers are used. I don't have anything concrete yet, but after the holidays should have a better idea of what is happening. Thanks for being willing to test this! > > -----Urspr?ngliche Nachricht----- > Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.xensource.com] Im Auftrag von Konrad Rzeszutek Wilk > Gesendet: Freitag, 16. Dezember 2011 17:19 > An: Carsten Schiers > Cc: linux@eikelenboom.it; xen-devel; lersek@redhat.com; zhenzhong.duan@oracle.com; Ian Campbell > Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) > > On Fri, Dec 16, 2011 at 04:51:47PM +0100, Carsten Schiers wrote: > > > And you are using swiotlb=force on the 2.6.34 classic kernel and passing in your budget-av card in it? > > > > Yes, two of them with swiotlb=32,force. > > > > > > > Could you append the dmesg output please? > > > > Attached. You find a "normal" boot after the one with the patched kernel. > > Uh, what happens when you run the driver, meaning capture stuff. I remember with the pvops you had about ~30K or so of bounces, but not sure about the bootup? > > Thanks for being willing to be a guinea pig while trying to fix this. > > > > Carsten. > > > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 19 Dec 2011 10:56:09 -0400 Message-ID: <20111219145609.GB28969@andromeda.dapyr.net> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <783969451.20111218011916@eikelenboom.it> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Sander Eikelenboom Cc: xen-devel , Ian Campbell , Konrad Rzeszutek Wilk , Carsten Schiers , zhenzhong.duan@oracle.com, lersek@redhat.com List-Id: xen-devel@lists.xenproject.org On Sun, Dec 18, 2011 at 01:19:16AM +0100, Sander Eikelenboom wrote: > I also have done some experiments with the patch, in domU i also get the 0% full for my usb controllers with video grabbers , in dom0 my i get 12% full, both my realtek 8169 ethernet controllers seem to use the bounce buffering ... > And that with a iommu (amd) ? it all seems kind of strange, although it is also working ... > I'm not having much time now, hoping to get back with a full report soon. Hm, so domU nothing, but dom0 it reports. Maybe the patch is incorrect when running as PV guest .. Will look in more details after the holidays. Thanks for being willing to try it out. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 10 Jan 2012 16:55:33 -0500 Message-ID: <20120110215533.GA21862@phenom.dumpdata.com> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <20111219145609.GB28969@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: xen-devel , Ian Campbell , lersek@redhat.com, zhenzhong.duan@oracle.com, Sander Eikelenboom , Carsten Schiers List-Id: xen-devel@lists.xenproject.org On Mon, Dec 19, 2011 at 10:56:09AM -0400, Konrad Rzeszutek Wilk wrote: > On Sun, Dec 18, 2011 at 01:19:16AM +0100, Sander Eikelenboom wrote: > > I also have done some experiments with the patch, in domU i also get the 0% full for my usb controllers with video grabbers , in dom0 my i get 12% full, both my realtek 8169 ethernet controllers seem to use the bounce buffering ... > > And that with a iommu (amd) ? it all seems kind of strange, although it is also working ... > > I'm not having much time now, hoping to get back with a full report soon. > > Hm, so domU nothing, but dom0 it reports. Maybe the patch is incorrect > when running as PV guest .. Will look in more details after the > holidays. Thanks for being willing to try it out. Good news is I am able to reproduce this with my 32-bit NIC with 3.2 domU: [ 771.896140] SWIOTLB is 11% full [ 776.896116] 0 [e1000 0000:00:00.0] bounce: from:222028(slow:0)to:2 map:222037 unmap:227220 sync:0 [ 776.896126] 1 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:5188 map:5188 unmap:0 sync:0 [ 776.896133] 3 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:1 map:1 unmap:0 sync:0 but interestingly enough, if I boot the guest as the first one I do not get these bounce requests. I will shortly bootup a Xen-O-Linux kernel and see if I get these same numbers. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sander Eikelenboom Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 12 Jan 2012 23:06:01 +0100 Message-ID: <1442969761.20120112230601@eikelenboom.it> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120110215533.GA21862@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: xen-devel List-Id: xen-devel@lists.xenproject.org Hello Konrad, Tuesday, January 10, 2012, 10:55:33 PM, you wrote: > On Mon, Dec 19, 2011 at 10:56:09AM -0400, Konrad Rzeszutek Wilk wrote: >> On Sun, Dec 18, 2011 at 01:19:16AM +0100, Sander Eikelenboom wrote: >> > I also have done some experiments with the patch, in domU i also get the 0% full for my usb controllers with video grabbers , in dom0 my i get 12% full, both my realtek 8169 ethernet controllers seem to use the bounce buffering ... >> > And that with a iommu (amd) ? it all seems kind of strange, although it is also working ... >> > I'm not having much time now, hoping to get back with a full report soon. >> >> Hm, so domU nothing, but dom0 it reports. Maybe the patch is incorrect >> when running as PV guest .. Will look in more details after the >> holidays. Thanks for being willing to try it out. > Good news is I am able to reproduce this with my 32-bit NIC with 3.2 domU: > [ 771.896140] SWIOTLB is 11% full > [ 776.896116] 0 [e1000 0000:00:00.0] bounce: from:222028(slow:0)to:2 map:222037 unmap:227220 sync:0 > [ 776.896126] 1 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:5188 map:5188 unmap:0 sync:0 > [ 776.896133] 3 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:1 map:1 unmap:0 sync:0 > but interestingly enough, if I boot the guest as the first one I do not get these bounce > requests. I will shortly bootup a Xen-O-Linux kernel and see if I get these same > numbers. I started to expiriment some more with what i encountered. On dom0 i was seeing that my r8169 ethernet controllers where using bounce buffering with the dump-swiotlb module. It was showing "12% full". Checking in sysfs shows: serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat consistent_dma_mask_bits 32 serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat dma_mask_bits 32 If i remember correctly wasn't the allocation for dom0 changed to be to the top of memory instead of low .. somewhere between 2.6.32 and 3.0 ? Could that change cause the need for all devices to need bounce buffering and could it therefore explain some people seeing more cpu usage for dom0 ? I have forced my r8169 to use 64bits dma mask (using use_dac=1) serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat consistent_dma_mask_bits 32 serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat dma_mask_bits 64 This results in dump-swiotlb reporting: [ 1265.616106] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 [ 1265.625043] SWIOTLB is 0% full [ 1270.626085] 0 [r8169 0000:08:00.0] bounce: from:6(slow:0)to:0 map:0 unmap:0 sync:12 [ 1270.635024] SWIOTLB is 0% full [ 1275.635091] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 [ 1275.644261] SWIOTLB is 0% full [ 1280.654097] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 So it has changed from 12% to 0%, although it still reports something about bouncing ? or am i mis interpreting stuff ? Another thing i was wondering about, couldn't the hypervisor offer a small window in 32bit addressable mem to all (or only when pci passthrough is used) domU's to be used for DMA ? (oh yes, i haven't got i clue what i'm talking about ... so it probably make no sense at all :-) ) -- Sander From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 13 Jan 2012 08:12:07 +0000 Message-ID: <4F0FF567020000780006C5B6@nat28.tlf.novell.com> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1442969761.20120112230601@eikelenboom.it> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Sander Eikelenboom Cc: xen-devel , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org >>> On 12.01.12 at 23:06, Sander Eikelenboom wrote: > Another thing i was wondering about, couldn't the hypervisor offer a small > window in 32bit addressable mem to all (or only when pci passthrough is used) > domU's to be used for DMA ? How would use of such a range be arbitrated/protected? You'd have to ask for reservation (aka allocation) of a chunk anyway, which is as good as using the existing interfaces to obtain address restricted memory (and the hypervisor has a [rudimentary] mechanism to preserve some low memory for DMA allocations). Jan From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 13 Jan 2012 10:13:07 -0500 Message-ID: <20120113151307.GC5025@phenom.dumpdata.com> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1442969761.20120112230601@eikelenboom.it> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Sander Eikelenboom Cc: xen-devel List-Id: xen-devel@lists.xenproject.org > >> > I also have done some experiments with the patch, in domU i also get the 0% full for my usb controllers with video grabbers , in dom0 my i get 12% full, both my realtek 8169 ethernet controllers seem to use the bounce buffering ... > >> > And that with a iommu (amd) ? it all seems kind of strange, although it is also working ... > >> > I'm not having much time now, hoping to get back with a full report soon. > >> > >> Hm, so domU nothing, but dom0 it reports. Maybe the patch is incorrect > >> when running as PV guest .. Will look in more details after the > >> holidays. Thanks for being willing to try it out. > > > Good news is I am able to reproduce this with my 32-bit NIC with 3.2 domU: > > > [ 771.896140] SWIOTLB is 11% full > > [ 776.896116] 0 [e1000 0000:00:00.0] bounce: from:222028(slow:0)to:2 map:222037 unmap:227220 sync:0 > > [ 776.896126] 1 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:5188 map:5188 unmap:0 sync:0 > > [ 776.896133] 3 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:1 map:1 unmap:0 sync:0 > > > but interestingly enough, if I boot the guest as the first one I do not get these bounce > > requests. I will shortly bootup a Xen-O-Linux kernel and see if I get these same > > numbers. > > > I started to expiriment some more with what i encountered. > > On dom0 i was seeing that my r8169 ethernet controllers where using bounce buffering with the dump-swiotlb module. > It was showing "12% full". > Checking in sysfs shows: > serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat consistent_dma_mask_bits > 32 > serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat dma_mask_bits > 32 > > If i remember correctly wasn't the allocation for dom0 changed to be to the top of memory instead of low .. somewhere between 2.6.32 and 3.0 ? ? We never actually had dom0 support in the upstream kernel until 2.6.37.. The 2.6.32<->2.6.36 you are referring to must have been the trees that I spun up - but the implementation of SWIOTLB in them had not really changed. > Could that change cause the need for all devices to need bounce buffering and could it therefore explain some people seeing more cpu usage for dom0 ? The issue I am seeing is not CPU usage in dom0, but rather the CPU usage in domU with guests. And that the older domU's (XenOLinux) do not have this. That I can't understand - the implementation in both cases _looks_ to do the same thing. There was one issue I found in the upstream one, but even with that fix I still get that "bounce" usage in domU. Interestingly enough, I get that only if I have launched, destroyed, launched, etc, the guest multiple times before I get this. Which leads me to believe this is not a kernel issue but that we are simply fragmented the Xen memory so much, so that when it launches the guest all of the memory is above 4GB. But that seems counter-intuive as by default Xen starts guests at the far end of memory (so on my 16GB box it would stick a 4GB guest at 12GB->16GB roughly). The SWIOTLB swizzles some memory under the 4GB , and this is where we get the bounce buffer effect (as the memory from 4GB is then copied to the memory 12GB->16GB). But it does not explain why on the first couple of starts I did not see this with pvops. And it does not seem to happen with the XenOLinux kernel, so there must be something else in here. > > I have forced my r8169 to use 64bits dma mask (using use_dac=1) Ah yes. > serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat consistent_dma_mask_bits > 32 > serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat dma_mask_bits > 64 > > This results in dump-swiotlb reporting: > > [ 1265.616106] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 > [ 1265.625043] SWIOTLB is 0% full > [ 1270.626085] 0 [r8169 0000:08:00.0] bounce: from:6(slow:0)to:0 map:0 unmap:0 sync:12 > [ 1270.635024] SWIOTLB is 0% full > [ 1275.635091] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 > [ 1275.644261] SWIOTLB is 0% full > [ 1280.654097] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 Which is what we expect. No need to bounce since the PCI adapter can reach memory above the 4GB mark. > > > > So it has changed from 12% to 0%, although it still reports something about bouncing ? or am i mis interpreting stuff ? The bouncing can happen due to two cases: - Memory is above 4GB - Memory crosses a page-boundary (rarely happens). > > > Another thing i was wondering about, couldn't the hypervisor offer a small window in 32bit addressable mem to all (or only when pci passthrough is used) domU's to be used for DMA ? It does. That is what the Xen SWIOTLB does with "swizzling" the pages in its pool. But it can't do it for every part of memory. That is why there are DMA pools which are used by graphics adapters, video capture devices,storage and network drivers. They are used for small packet sizes so that the driver does not have to allocate DMA buffers when it gets a 100bytes ping response. But for large packets (say that ISO file you are downloading) it allocates memory on the fly and "maps" it into the PCI space using the DMA API. That "mapping" sets up an "physical memory" -> "guest memory" translation - and if that allocated memory is above 4GB, part of this mapping is to copy ("bounce") the memory under the 4GB (where XenSWIOTLB has allocated a pool), so that the adapter can physically fetch/put the data. Once that is completed it is "sync"-ed back, which is bouncing that data to the "allocated memory". So having a DMA pool is very good - and most drivers use it. The thing I can't figure out is: - why the DVB do not seem to use it, even thought they look to use the videobuf_dma driver. - why the XenOLinux does not seem to have this problem (and this might be false - perhaps it does have this problem and it just takes a couple of guest launches, destructions, starts, etc to actually see it). - are there any flags in the domain builder to say: "ok, this domain is going to service 32-bit cards, hence build the memory from 0->4GB". This seems like a good know at first, but it probably is a bad idea (imagine using it by mistake on every guest). And also nowadays most cards are PCIe and they can do 64-bit, so it would not be that important in the future. > > (oh yes, i haven't got i clue what i'm talking about ... so it probably make no sense at all :-) ) Nonsense. You were on the correct path . Hopefully the level of details hasn't scared you off now :-) > > > -- > Sander > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sander Eikelenboom Subject: Re: Load increase after memory upgrade (part2) Date: Sun, 15 Jan 2012 12:32:59 +0100 Message-ID: <1383590207.20120115123259@eikelenboom.it> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120113151307.GC5025@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: xen-devel List-Id: xen-devel@lists.xenproject.org Friday, January 13, 2012, 4:13:07 PM, you wrote: >> >> > I also have done some experiments with the patch, in domU i also get the 0% full for my usb controllers with video grabbers , in dom0 my i get 12% full, both my realtek 8169 ethernet controllers seem to use the bounce buffering ... >> >> > And that with a iommu (amd) ? it all seems kind of strange, although it is also working ... >> >> > I'm not having much time now, hoping to get back with a full report soon. >> >> >> >> Hm, so domU nothing, but dom0 it reports. Maybe the patch is incorrect >> >> when running as PV guest .. Will look in more details after the >> >> holidays. Thanks for being willing to try it out. >> >> > Good news is I am able to reproduce this with my 32-bit NIC with 3.2 domU: >> >> > [ 771.896140] SWIOTLB is 11% full >> > [ 776.896116] 0 [e1000 0000:00:00.0] bounce: from:222028(slow:0)to:2 map:222037 unmap:227220 sync:0 >> > [ 776.896126] 1 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:5188 map:5188 unmap:0 sync:0 >> > [ 776.896133] 3 [e1000 0000:00:00.0] bounce: from:0(slow:0)to:1 map:1 unmap:0 sync:0 >> >> > but interestingly enough, if I boot the guest as the first one I do not get these bounce >> > requests. I will shortly bootup a Xen-O-Linux kernel and see if I get these same >> > numbers. >> >> >> I started to expiriment some more with what i encountered. >> >> On dom0 i was seeing that my r8169 ethernet controllers where using bounce buffering with the dump-swiotlb module. >> It was showing "12% full". >> Checking in sysfs shows: >> serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat consistent_dma_mask_bits >> 32 >> serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat dma_mask_bits >> 32 >> >> If i remember correctly wasn't the allocation for dom0 changed to be to the top of memory instead of low .. somewhere between 2.6.32 and 3.0 ? > ? We never actually had dom0 support in the upstream kernel until 2.6.37.. The 2.6.32<->2.6.36 you are > referring to must have been the trees that I spun up - but the implementation of SWIOTLB in them > had not really changed. >> Could that change cause the need for all devices to need bounce buffering and could it therefore explain some people seeing more cpu usage for dom0 ? > The issue I am seeing is not CPU usage in dom0, but rather the CPU usage in domU with guests. > And that the older domU's (XenOLinux) do not have this. > That I can't understand - the implementation in both cases _looks_ to do the same thing. > There was one issue I found in the upstream one, but even with that fix I still > get that "bounce" usage in domU. > Interestingly enough, I get that only if I have launched, destroyed, launched, etc, the guest multiple > times before I get this. Which leads me to believe this is not a kernel issue but that we > are simply fragmented the Xen memory so much, so that when it launches the guest all of the > memory is above 4GB. But that seems counter-intuive as by default Xen starts guests at the far end of > memory (so on my 16GB box it would stick a 4GB guest at 12GB->16GB roughly). The SWIOTLB > swizzles some memory under the 4GB , and this is where we get the bounce buffer effect > (as the memory from 4GB is then copied to the memory 12GB->16GB). > But it does not explain why on the first couple of starts I did not see this with pvops. > And it does not seem to happen with the XenOLinux kernel, so there must be something else > in here. >> >> I have forced my r8169 to use 64bits dma mask (using use_dac=1) > Ah yes. >> serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat consistent_dma_mask_bits >> 32 >> serveerstertje:/sys/bus/pci/devices/0000:09:00.0# cat dma_mask_bits >> 64 >> >> This results in dump-swiotlb reporting: >> >> [ 1265.616106] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 >> [ 1265.625043] SWIOTLB is 0% full >> [ 1270.626085] 0 [r8169 0000:08:00.0] bounce: from:6(slow:0)to:0 map:0 unmap:0 sync:12 >> [ 1270.635024] SWIOTLB is 0% full >> [ 1275.635091] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 >> [ 1275.644261] SWIOTLB is 0% full >> [ 1280.654097] 0 [r8169 0000:09:00.0] bounce: from:5(slow:0)to:0 map:0 unmap:0 sync:10 > Which is what we expect. No need to bounce since the PCI adapter can reach memory > above the 4GB mark. >> >> >> >> So it has changed from 12% to 0%, although it still reports something about bouncing ? or am i mis interpreting stuff ? > The bouncing can happen due to two cases: > - Memory is above 4GB > - Memory crosses a page-boundary (rarely happens). >> >> >> Another thing i was wondering about, couldn't the hypervisor offer a small window in 32bit addressable mem to all (or only when pci passthrough is used) domU's to be used for DMA ? > It does. That is what the Xen SWIOTLB does with "swizzling" the pages in its pool. > But it can't do it for every part of memory. That is why there are DMA pools > which are used by graphics adapters, video capture devices,storage and network > drivers. They are used for small packet sizes so that the driver does not have > to allocate DMA buffers when it gets a 100bytes ping response. But for large > packets (say that ISO file you are downloading) it allocates memory on the fly > and "maps" it into the PCI space using the DMA API. That "mapping" sets up > an "physical memory" -> "guest memory" translation - and if that allocated > memory is above 4GB, part of this mapping is to copy ("bounce") the memory > under the 4GB (where XenSWIOTLB has allocated a pool), so that the adapter > can physically fetch/put the data. Once that is completed it is "sync"-ed > back, which is bouncing that data to the "allocated memory". > So having a DMA pool is very good - and most drivers use it. The thing I can't > figure out is: > - why the DVB do not seem to use it, even thought they look to use the videobuf_dma > driver. > - why the XenOLinux does not seem to have this problem (and this might be false - > perhaps it does have this problem and it just takes a couple of guest launches, > destructions, starts, etc to actually see it). > - are there any flags in the domain builder to say: "ok, this domain is going to > service 32-bit cards, hence build the memory from 0->4GB". This seems like > a good know at first, but it probably is a bad idea (imagine using it by mistake > on every guest). And also nowadays most cards are PCIe and they can do 64-bit, so > it would not be that important in the future. >> >> (oh yes, i haven't got i clue what i'm talking about ... so it probably make no sense at all :-) ) > Nonsense. You were on the correct path . Hopefully the level of details hasn't > scared you off now :-) Well it only gives some more questions :-) The thing is, pci passthrough and especially the DMA part of it, all work behind the scenes without giving much output about the way it is actually working. The thing i was wondering about is if my AMD IOMMU is actually doing something for PV guests. When booting with iommu=off machine has 8GB mem, dom0 limited to 1024M and just starting one domU with iommu=soft, with pci-passthrough and the USB pci-cards with USB videograbbers attached to it, i would expect to find some bounce buffering going. (HV_START_LOW 18446603336221196288) (FEATURES '!writable_page_tables|pae_pgdir_above_4gb') (VIRT_BASE 18446744071562067968) (GUEST_VERSION 2.6) (PADDR_OFFSET 0) (GUEST_OS linux) (HYPERCALL_PAGE 18446744071578849280) (LOADER generic) (SUSPEND_CANCEL 1) (PAE_MODE yes) (ENTRY 18446744071594476032) (XEN_VERSION xen-3.0) Still i only see: [ 47.449072] Starting SWIOTLB debug thread. [ 47.449090] swiotlb_start_thread: Go! [ 47.449262] xen_swiotlb_start_thread: Go! [ 52.449158] 0 [ehci_hcd 0000:0a:00.3] bounce: from:432(slow:0)to:1329 map:1756 unmap:1781 sync:0 [ 52.449180] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:16 map:23 unmap:0 sync:0 [ 52.449187] 2 [ohci_hcd 0000:0a:00.4] bounce: from:0(slow:0)to:4 map:5 unmap:0 sync:0 [ 52.449226] SWIOTLB is 0% full [ 57.449180] 0 ehci_hcd 0000:0a:00.3 alloc coherent: 35, free: 0 [ 57.449219] 1 ohci_hcd 0000:0a:00.6 alloc coherent: 1, free: 0 [ 57.449265] SWIOTLB is 0% full [ 62.449176] SWIOTLB is 0% full [ 67.449336] SWIOTLB is 0% full [ 72.449279] SWIOTLB is 0% full [ 77.449121] SWIOTLB is 0% full [ 82.449236] SWIOTLB is 0% full [ 87.449242] SWIOTLB is 0% full [ 92.449241] SWIOTLB is 0% full [ 172.449102] 0 [ehci_hcd 0000:0a:00.7] bounce: from:3839(slow:0)to:664 map:4486 unmap:4617 sync:0 [ 172.449123] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:82 map:111 unmap:0 sync:0 [ 172.449130] 2 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:32 map:36 unmap:0 sync:0 [ 172.449170] SWIOTLB is 0% full [ 177.449109] 0 [ehci_hcd 0000:0a:00.7] bounce: from:5348(slow:0)to:524 map:5834 unmap:5952 sync:0 [ 177.449131] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:76 map:112 unmap:0 sync:0 [ 177.449138] 2 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:4 map:6 unmap:0 sync:0 [ 177.449178] SWIOTLB is 0% full [ 182.449143] 0 [ehci_hcd 0000:0a:00.7] bounce: from:5349(slow:0)to:563 map:5899 unmap:5949 sync:0 [ 182.449157] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:27 map:35 unmap:0 sync:0 [ 182.449164] 2 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:10 map:15 unmap:0 sync:0 [ 182.449204] SWIOTLB is 0% full [ 187.449112] 0 [ehci_hcd 0000:0a:00.7] bounce: from:5375(slow:0)to:592 map:5941 unmap:6022 sync:0 [ 187.449126] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:46 map:69 unmap:0 sync:0 [ 187.449133] 2 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:9 map:12 unmap:0 sync:0 [ 187.449173] SWIOTLB is 0% full [ 192.449183] 0 [ehci_hcd 0000:0a:00.7] bounce: from:5360(slow:0)to:556 map:5890 unmap:5978 sync:0 [ 192.449226] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:52 map:74 unmap:0 sync:0 [ 192.449234] 2 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:10 map:14 unmap:0 sync:0 [ 192.449275] SWIOTLB is 0% full And the devices do work ... so how does that work ... Thx for your explanation so far ! -- Sander >> >> >> -- >> Sander >> >> -- Best regards, Sander mailto:linux@eikelenboom.it From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 17 Jan 2012 16:02:25 -0500 Message-ID: <20120117210225.GA23782@phenom.dumpdata.com> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1383590207.20120115123259@eikelenboom.it> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Sander Eikelenboom Cc: xen-devel List-Id: xen-devel@lists.xenproject.org > The thing i was wondering about is if my AMD IOMMU is actually doing something for PV guests. > When booting with iommu=off machine has 8GB mem, dom0 limited to 1024M and just starting one domU with iommu=soft, with pci-passthrough and the USB pci-cards with USB videograbbers attached to it, i would expect to find some bounce buffering going. > > (HV_START_LOW 18446603336221196288) > (FEATURES '!writable_page_tables|pae_pgdir_above_4gb') > (VIRT_BASE 18446744071562067968) > (GUEST_VERSION 2.6) > (PADDR_OFFSET 0) > (GUEST_OS linux) > (HYPERCALL_PAGE 18446744071578849280) > (LOADER generic) > (SUSPEND_CANCEL 1) > (PAE_MODE yes) > (ENTRY 18446744071594476032) > (XEN_VERSION xen-3.0) > > Still i only see: > > [ 47.449072] Starting SWIOTLB debug thread. > [ 47.449090] swiotlb_start_thread: Go! > [ 47.449262] xen_swiotlb_start_thread: Go! > [ 52.449158] 0 [ehci_hcd 0000:0a:00.3] bounce: from:432(slow:0)to:1329 map:1756 unmap:1781 sync:0 There is bouncing there. .. > [ 172.449102] 0 [ehci_hcd 0000:0a:00.7] bounce: from:3839(slow:0)to:664 map:4486 unmap:4617 sync:0 And there.. 3839 of them. > [ 172.449123] 1 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:82 map:111 unmap:0 sync:0 > [ 172.449130] 2 [ehci_hcd 0000:0a:00.7] bounce: from:0(slow:0)to:32 map:36 unmap:0 sync:0 > [ 172.449170] SWIOTLB is 0% full > [ 177.449109] 0 [ehci_hcd 0000:0a:00.7] bounce: from:5348(slow:0)to:524 map:5834 unmap:5952 sync:0 And 5348 here! So bounce-buffering is definitly happening with this guest. .. snip.. > > And the devices do work ... so how does that work ... Most (all?) drivers are written to work with bounce-buffering. That has never been a problem. The issue as I understand is that the DVB drivers allocate their buffers from 0->4GB most (all the time?) so they never have to do bounce-buffering. While the pv-ops one ends up quite frequently doing the bounce-buffering, which implies that the DVB drivers end up allocating their buffers above the 4GB. This means we end up spending some CPU time (in the guest) copying the memory from >4GB to 0-4GB region (And vice-versa). And I am not clear why this is happening. Hence my thought was to run an Xen-O-Linux kernel v2.6.3X and a PVOPS v2.6.3X (where X is the same) with the same PCI device (and the test would entail rebooting the box in between the launches) to confirm that the Xen-O-Linux is doing something that the PVOPS is not. So far, I've haven't had much luck compiling a Xen-O-Linux v2.6.38 kernel so :-( > > Thx for your explanation so far ! Sure thing. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pasi =?iso-8859-1?Q?K=E4rkk=E4inen?= Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 18 Jan 2012 13:28:12 +0200 Message-ID: <20120118112812.GR12984@reaktio.net> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <20120117210225.GA23782@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: Sander Eikelenboom , xen-devel List-Id: xen-devel@lists.xenproject.org On Tue, Jan 17, 2012 at 04:02:25PM -0500, Konrad Rzeszutek Wilk wrote: > > > > And the devices do work ... so how does that work ... > > Most (all?) drivers are written to work with bounce-buffering. > That has never been a problem. > > The issue as I understand is that the DVB drivers allocate their buffers > from 0->4GB most (all the time?) so they never have to do bounce-buffering. > > While the pv-ops one ends up quite frequently doing the bounce-buffering, which > implies that the DVB drivers end up allocating their buffers above the 4GB. > This means we end up spending some CPU time (in the guest) copying the memory > from >4GB to 0-4GB region (And vice-versa). > > And I am not clear why this is happening. Hence my thought > was to run an Xen-O-Linux kernel v2.6.3X and a PVOPS v2.6.3X (where X is the > same) with the same PCI device (and the test would entail rebooting the > box in between the launches) to confirm that the Xen-O-Linux is doing something > that the PVOPS is not. > > So far, I've haven't had much luck compiling a Xen-O-Linux v2.6.38 kernel > so :-( > Did you try downloading a binary rpm (or src.rpm) from OpenSuse? I think they have 2.6.38 xenlinux kernel available. -- Pasi From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 18 Jan 2012 11:35:35 +0000 Message-ID: <4F16BC97020000780006D6D6@nat28.tlf.novell.com> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120117210225.GA23782@phenom.dumpdata.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Sander Eikelenboom , Konrad Rzeszutek Wilk Cc: xen-devel List-Id: xen-devel@lists.xenproject.org >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: > The issue as I understand is that the DVB drivers allocate their buffers > from 0->4GB most (all the time?) so they never have to do bounce-buffering. > > While the pv-ops one ends up quite frequently doing the bounce-buffering, > which > implies that the DVB drivers end up allocating their buffers above the 4GB. > This means we end up spending some CPU time (in the guest) copying the > memory > from >4GB to 0-4GB region (And vice-versa). This reminds me of something (not sure what XenoLinux you use for comparison) - how are they allocating that memory? Not vmalloc_32() by chance (I remember having seen numerous uses under - iirc - drivers/media/)? Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do what their (driver) callers might expect in a PV guest (including the contiguity assumption for the latter, recalling that you earlier said you were able to see the problem after several guest starts), and I had put into our kernels an adjustment to make vmalloc_32() actually behave as expected. Jan From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 18 Jan 2012 11:39:03 +0000 Message-ID: <4F16BD67020000780006D6E0@nat28.tlf.novell.com> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> <20120118112812.GR12984@reaktio.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20120118112812.GR12984@reaktio.net> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?UTF-8?B?UGFzaSBLw6Rya2vDpGluZW4=?= , Konrad Rzeszutek Wilk Cc: Sander Eikelenboom , xen-devel List-Id: xen-devel@lists.xenproject.org Pj4+IE9uIDE4LjAxLjEyIGF0IDEyOjI4LCBQYXNpIEvDpHJra8OkaW5lbjxwYXNpa0Bpa2kuZmk+ IHdyb3RlOgo+IE9uIFR1ZSwgSmFuIDE3LCAyMDEyIGF0IDA0OjAyOjI1UE0gLTA1MDAsIEtvbnJh ZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPj4gPiAKPj4gPiBBbmQgdGhlIGRldmljZXMgZG8gd29y ayAuLi4gc28gaG93IGRvZXMgdGhhdCB3b3JrIC4uLgo+PiAKPj4gTW9zdCAoYWxsPykgZHJpdmVy cyBhcmUgd3JpdHRlbiB0byB3b3JrIHdpdGggYm91bmNlLWJ1ZmZlcmluZy4KPj4gVGhhdCBoYXMg bmV2ZXIgYmVlbiBhIHByb2JsZW0uCj4+IAo+PiBUaGUgaXNzdWUgYXMgSSB1bmRlcnN0YW5kIGlz IHRoYXQgdGhlIERWQiBkcml2ZXJzIGFsbG9jYXRlIHRoZWlyIGJ1ZmZlcnMKPj4gZnJvbSAwLT40 R0IgbW9zdCAoYWxsIHRoZSB0aW1lPykgc28gdGhleSBuZXZlciBoYXZlIHRvIGRvIGJvdW5jZS1i dWZmZXJpbmcuCj4+IAo+PiBXaGlsZSB0aGUgcHYtb3BzIG9uZSBlbmRzIHVwIHF1aXRlIGZyZXF1 ZW50bHkgZG9pbmcgdGhlIGJvdW5jZS1idWZmZXJpbmcsIAo+IHdoaWNoCj4+IGltcGxpZXMgdGhh dCB0aGUgRFZCIGRyaXZlcnMgZW5kIHVwIGFsbG9jYXRpbmcgdGhlaXIgYnVmZmVycyBhYm92ZSB0 aGUgNEdCLgo+PiBUaGlzIG1lYW5zIHdlIGVuZCB1cCBzcGVuZGluZyBzb21lIENQVSB0aW1lIChp biB0aGUgZ3Vlc3QpIGNvcHlpbmcgdGhlIAo+IG1lbW9yeQo+PiBmcm9tID40R0IgdG8gMC00R0Ig cmVnaW9uIChBbmQgdmljZS12ZXJzYSkuCj4+IAo+PiBBbmQgSSBhbSBub3QgY2xlYXIgd2h5IHRo aXMgaXMgaGFwcGVuaW5nLiBIZW5jZSBteSB0aG91Z2h0Cj4+IHdhcyB0byBydW4gYW4gWGVuLU8t TGludXgga2VybmVsIHYyLjYuM1ggYW5kIGEgUFZPUFMgdjIuNi4zWCAod2hlcmUgWCBpcyB0aGUK Pj4gc2FtZSkgd2l0aCB0aGUgc2FtZSBQQ0kgZGV2aWNlIChhbmQgdGhlIHRlc3Qgd291bGQgZW50 YWlsIHJlYm9vdGluZyB0aGUKPj4gYm94IGluIGJldHdlZW4gdGhlIGxhdW5jaGVzKSB0byBjb25m aXJtIHRoYXQgdGhlIFhlbi1PLUxpbnV4IGlzIGRvaW5nIAo+IHNvbWV0aGluZwo+PiB0aGF0IHRo ZSBQVk9QUyBpcyBub3QuCj4+IAo+PiBTbyBmYXIsIEkndmUgaGF2ZW4ndCBoYWQgbXVjaCBsdWNr IGNvbXBpbGluZyBhIFhlbi1PLUxpbnV4IHYyLjYuMzgga2VybmVsCj4+IHNvIDotKAo+PiAKPiAK PiBEaWQgeW91IHRyeSBkb3dubG9hZGluZyBhIGJpbmFyeSBycG0gKG9yIHNyYy5ycG0pIGZyb20g T3BlblN1c2U/IAo+IEkgdGhpbmsgdGhleSBoYXZlIDIuNi4zOCB4ZW5saW51eCBrZXJuZWwgYXZh aWxhYmxlLgoKb3BlblNVU0UgMTEuNCBpcyB1c2luZyAyLjYuMzc7IDEyLjEgaXMgb24gMy4xIChh bmQgU0xFIGlzIG9uIDMuMCkuClB1bGxpbmcgb3V0IChjb25zaXN0ZW50KSBwYXRjaGVzIGF0IDIu Ni4zOCBsZXZlbCBtaWdodCBiZSBhIGxpdHRsZQppbnZvbHZlZC4KCkphbgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbQpodHRwOi8vbGlzdHMueGVuc291cmNlLmNv bS94ZW4tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 18 Jan 2012 10:29:23 -0400 Message-ID: <20120118142923.GA6052@andromeda.dapyr.net> References: <20111214220700.GA9926@phenom.dumpdata.com> <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> <4F16BC97020000780006D6D6@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <4F16BC97020000780006D6D6@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jan Beulich Cc: Sander Eikelenboom , xen-devel , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote: > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: > > The issue as I understand is that the DVB drivers allocate their buffers > > from 0->4GB most (all the time?) so they never have to do bounce-buffering. > > > > While the pv-ops one ends up quite frequently doing the bounce-buffering, > > which > > implies that the DVB drivers end up allocating their buffers above the 4GB. > > This means we end up spending some CPU time (in the guest) copying the > > memory > > from >4GB to 0-4GB region (And vice-versa). > > This reminds me of something (not sure what XenoLinux you use for > comparison) - how are they allocating that memory? Not vmalloc_32() I was using the 2.6.18, then the one I saw on Google for Gentoo, and now I am going to look at the 2.6.38 from OpenSuSE. > by chance (I remember having seen numerous uses under - iirc - > drivers/media/)? > > Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do > what their (driver) callers might expect in a PV guest (including the > contiguity assumption for the latter, recalling that you earlier said > you were able to see the problem after several guest starts), and I > had put into our kernels an adjustment to make vmalloc_32() actually > behave as expected. Aaah.. The plot thickens! Let me look in the sources! Thanks for the pointer. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Mon, 23 Jan 2012 17:32:13 -0500 Message-ID: <20120123223213.GA31929@phenom.dumpdata.com> References: <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> <4F16BC97020000780006D6D6@nat28.tlf.novell.com> <20120118142923.GA6052@andromeda.dapyr.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="a8Wt8u1KmwUX3Y2C" Return-path: Content-Disposition: inline In-Reply-To: <20120118142923.GA6052@andromeda.dapyr.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: Sander Eikelenboom , xen-devel , Jan Beulich List-Id: xen-devel@lists.xenproject.org --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk wrote: > On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote: > > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: > > > The issue as I understand is that the DVB drivers allocate their buffers > > > from 0->4GB most (all the time?) so they never have to do bounce-buffering. > > > > > > While the pv-ops one ends up quite frequently doing the bounce-buffering, > > > which > > > implies that the DVB drivers end up allocating their buffers above the 4GB. > > > This means we end up spending some CPU time (in the guest) copying the > > > memory > > > from >4GB to 0-4GB region (And vice-versa). > > > > This reminds me of something (not sure what XenoLinux you use for > > comparison) - how are they allocating that memory? Not vmalloc_32() > > I was using the 2.6.18, then the one I saw on Google for Gentoo, and now > I am going to look at the 2.6.38 from OpenSuSE. > > > by chance (I remember having seen numerous uses under - iirc - > > drivers/media/)? > > > > Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do > > what their (driver) callers might expect in a PV guest (including the > > contiguity assumption for the latter, recalling that you earlier said > > you were able to see the problem after several guest starts), and I > > had put into our kernels an adjustment to make vmalloc_32() actually > > behave as expected. > > Aaah.. The plot thickens! Let me look in the sources! Thanks for the > pointer. Jan hints lead me to the videobuf-dma-sg.c which does indeed to vmalloc_32 and then performs PCI DMA operations on the allocted vmalloc_32 area. So I cobbled up the attached patch (hadn't actually tested it and sadly won't until next week) which removes the call to vmalloc_32 and instead sets up DMA allocated set of pages. If that fixes it for you that is awesome, but if it breaks please send me your logs. Cheers, Konrad --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=vmalloc commit 0b5428f4a22be4855b5f03aa1369f9e30e095014 Author: Konrad Rzeszutek Wilk Date: Mon Jan 23 15:52:01 2012 -0500 vmalloc_sg: make sure all pages in vmalloc area are really DMA-ready Under Xen, vmalloc_32() isn't guaranteed to return pages which are really under 4G in machine physical addresses (only in virtual pseudo-physical addresses). To work around this, implement a vmalloc variant which allocates each page with dma_alloc_coherent() to guarantee that each page is suitable for the device in question. Signed-off-by: Konrad Rzeszutek Wilk diff --git a/drivers/media/video/videobuf-dma-sg.c b/drivers/media/video/videobuf-dma-sg.c index f300dea..3da2428 100644 --- a/drivers/media/video/videobuf-dma-sg.c +++ b/drivers/media/video/videobuf-dma-sg.c @@ -211,13 +211,36 @@ EXPORT_SYMBOL_GPL(videobuf_dma_init_user); int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction, int nr_pages) { + int i; + dprintk(1, "init kernel [%d pages]\n", nr_pages); dma->direction = direction; - dma->vaddr = vmalloc_32(nr_pages << PAGE_SHIFT); + dma->vaddr_pages = kcalloc(nr_pages, sizeof(*dma->vaddr_pages), + GFP_KERNEL); + if (!dma->vaddr_pages) + return -ENOMEM; + + dma->dma_addr = kcalloc(nr_pages, sizeof(*dma->dma_addr), GFP_KERNEL); + if (!dma->dma_addr) { + kfree(dma->vaddr_pages); + return -ENOMEM; + } + for (i = 0; i < nr_pages; i++) { + void *addr; + + addr = dma_alloc_coherent(dma->dev, PAGE_SIZE, + &(dma->dma_addr[i]), GFP_KERNEL); + if (addr == NULL) + goto out_free_pages; + + dma->vaddr_pages[i] = virt_to_page(addr); + } + dma->vaddr = vmap(dma->vaddr_pages, nr_pages, VM_MAP | VM_IOREMAP, + PAGE_KERNEL); if (NULL == dma->vaddr) { dprintk(1, "vmalloc_32(%d pages) failed\n", nr_pages); - return -ENOMEM; + goto out_free_pages; } dprintk(1, "vmalloc is at addr 0x%08lx, size=%d\n", @@ -228,6 +251,18 @@ int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction, dma->nr_pages = nr_pages; return 0; +out_free_pages: + while (i > 0) { + void *addr = page_address(dma->vaddr_pages[i]); + dma_free_coherent(dma->dev, PAGE_SIZE, addr, dma->dma_addr[i]); + i--; + } + kfree(dma->dma_addr); + dma->dma_addr = NULL; + kfree(dma->vaddr_pages); + dma->vaddr_pages = NULL; + + return -ENOMEM; } EXPORT_SYMBOL_GPL(videobuf_dma_init_kernel); @@ -322,8 +357,21 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma) dma->pages = NULL; } - vfree(dma->vaddr); - dma->vaddr = NULL; + if (dma->dma_addr) { + for (i = 0; i < dma->nr_pages; i++) { + void *addr; + + addr = page_address(dma->vaddr_pages[i]); + dma_free_coherent(dma->dev, PAGE_SIZE, addr, + dma->dma_addr[i]); + } + kfree(dma->dma_addr); + dma->dma_addr = NULL; + kfree(dma->vaddr_pages); + dma->vaddr_pages = NULL; + vunmap(dma->vaddr); + dma->vaddr = NULL; + } if (dma->bus_addr) dma->bus_addr = 0; @@ -461,6 +509,11 @@ static int __videobuf_iolock(struct videobuf_queue *q, MAGIC_CHECK(mem->magic, MAGIC_SG_MEM); + if (!mem->dma.dev) + mem->dma.dev = q->dev; + else + WARN_ON(mem->dma.dev != q->dev); + switch (vb->memory) { case V4L2_MEMORY_MMAP: case V4L2_MEMORY_USERPTR: diff --git a/include/media/videobuf-dma-sg.h b/include/media/videobuf-dma-sg.h index d8fb601..870cb21 100644 --- a/include/media/videobuf-dma-sg.h +++ b/include/media/videobuf-dma-sg.h @@ -53,6 +53,9 @@ struct videobuf_dmabuf { /* for kernel buffers */ void *vaddr; + struct page **vaddr_pages; + dma_addr_t *dma_addr; + struct device *dev; /* for overlay buffers (pci-pci dma) */ dma_addr_t bus_addr; --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --a8Wt8u1KmwUX3Y2C-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 24 Jan 2012 08:58:22 +0000 Message-ID: <4F1E80BE020000780006E9FB@nat28.tlf.novell.com> References: <783969451.20111218011916@eikelenboom.it> <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> <4F16BC97020000780006D6D6@nat28.tlf.novell.com> <20120118142923.GA6052@andromeda.dapyr.net> <20120123223213.GA31929@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120123223213.GA31929@phenom.dumpdata.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk , Konrad Rzeszutek Wilk Cc: Sander Eikelenboom , xen-devel List-Id: xen-devel@lists.xenproject.org >>> On 23.01.12 at 23:32, Konrad Rzeszutek Wilk wrote: > On Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk wrote: >> On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote: >> > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: >> > > The issue as I understand is that the DVB drivers allocate their buffers >> > > from 0->4GB most (all the time?) so they never have to do bounce-buffering. >> > > >> > > While the pv-ops one ends up quite frequently doing the bounce-buffering, >> > > which >> > > implies that the DVB drivers end up allocating their buffers above the > 4GB. >> > > This means we end up spending some CPU time (in the guest) copying the >> > > memory >> > > from >4GB to 0-4GB region (And vice-versa). >> > >> > This reminds me of something (not sure what XenoLinux you use for >> > comparison) - how are they allocating that memory? Not vmalloc_32() >> >> I was using the 2.6.18, then the one I saw on Google for Gentoo, and now >> I am going to look at the 2.6.38 from OpenSuSE. >> >> > by chance (I remember having seen numerous uses under - iirc - >> > drivers/media/)? >> > >> > Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do >> > what their (driver) callers might expect in a PV guest (including the >> > contiguity assumption for the latter, recalling that you earlier said >> > you were able to see the problem after several guest starts), and I >> > had put into our kernels an adjustment to make vmalloc_32() actually >> > behave as expected. >> >> Aaah.. The plot thickens! Let me look in the sources! Thanks for the >> pointer. > > Jan hints lead me to the videobuf-dma-sg.c which does indeed to vmalloc_32 > and then performs PCI DMA operations on the allocted vmalloc_32 > area. > > So I cobbled up the attached patch (hadn't actually tested it and sadly > won't until next week) which removes the call to vmalloc_32 and instead > sets up DMA allocated set of pages. What a big patch (which would need re-doing for every vmalloc_32() caller)! Fixing vmalloc_32() would be much less intrusive (reproducing our 3.2 version of the affected function below, but clearly that's not pv-ops ready). Jan static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, pgprot_t prot, int node, void *caller) { const int order = 0; struct page **pages; unsigned int nr_pages, array_size, i; gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; #ifdef CONFIG_XEN gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); BUILD_BUG_ON((__GFP_DMA | __GFP_DMA32) != (__GFP_DMA + __GFP_DMA32)); if (dma_mask == (__GFP_DMA | __GFP_DMA32)) gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); #endif nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; array_size = (nr_pages * sizeof(struct page *)); area->nr_pages = nr_pages; /* Please note that the recursion is strictly bounded. */ if (array_size > PAGE_SIZE) { pages = __vmalloc_node(array_size, 1, nested_gfp|__GFP_HIGHMEM, PAGE_KERNEL, node, caller); area->flags |= VM_VPAGES; } else { pages = kmalloc_node(array_size, nested_gfp, node); } area->pages = pages; area->caller = caller; if (!area->pages) { remove_vm_area(area->addr); kfree(area); return NULL; } for (i = 0; i < area->nr_pages; i++) { struct page *page; gfp_t tmp_mask = gfp_mask | __GFP_NOWARN; if (node < 0) page = alloc_page(tmp_mask); else page = alloc_pages_node(node, tmp_mask, order); if (unlikely(!page)) { /* Successfully allocated i pages, free them in __vunmap() */ area->nr_pages = i; goto fail; } area->pages[i] = page; #ifdef CONFIG_XEN if (dma_mask) { if (xen_limit_pages_to_max_mfn(page, 0, 32)) { area->nr_pages = i + 1; goto fail; } if (gfp_mask & __GFP_ZERO) clear_highpage(page); } #endif } if (map_vm_area(area, prot, &pages)) goto fail; return area->addr; fail: warn_alloc_failed(gfp_mask, order, "vmalloc: allocation failure, allocated %ld of %ld bytes\n", (area->nr_pages*PAGE_SIZE), area->size); vfree(area->addr); return NULL; } ... #if defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA32) #define GFP_VMALLOC32 GFP_DMA32 | GFP_KERNEL #elif defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA) #define GFP_VMALLOC32 GFP_DMA | GFP_KERNEL #elif defined(CONFIG_XEN) #define GFP_VMALLOC32 __GFP_DMA | __GFP_DMA32 | GFP_KERNEL #else #define GFP_VMALLOC32 GFP_KERNEL #endif From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 24 Jan 2012 09:17:35 -0500 Message-ID: <20120124141735.GA31731@phenom.dumpdata.com> References: <20111219145609.GB28969@andromeda.dapyr.net> <20120110215533.GA21862@phenom.dumpdata.com> <1442969761.20120112230601@eikelenboom.it> <20120113151307.GC5025@phenom.dumpdata.com> <1383590207.20120115123259@eikelenboom.it> <20120117210225.GA23782@phenom.dumpdata.com> <4F16BC97020000780006D6D6@nat28.tlf.novell.com> <20120118142923.GA6052@andromeda.dapyr.net> <20120123223213.GA31929@phenom.dumpdata.com> <4F1E80BE020000780006E9FB@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <4F1E80BE020000780006E9FB@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jan Beulich Cc: Konrad Rzeszutek Wilk , xen-devel , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Tue, Jan 24, 2012 at 08:58:22AM +0000, Jan Beulich wrote: > >>> On 23.01.12 at 23:32, Konrad Rzeszutek Wilk wrote: > > On Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk wrote: > >> On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote: > >> > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: > >> > > The issue as I understand is that the DVB drivers allocate their buffers > >> > > from 0->4GB most (all the time?) so they never have to do bounce-buffering. > >> > > > >> > > While the pv-ops one ends up quite frequently doing the bounce-buffering, > >> > > which > >> > > implies that the DVB drivers end up allocating their buffers above the > > 4GB. > >> > > This means we end up spending some CPU time (in the guest) copying the > >> > > memory > >> > > from >4GB to 0-4GB region (And vice-versa). > >> > > >> > This reminds me of something (not sure what XenoLinux you use for > >> > comparison) - how are they allocating that memory? Not vmalloc_32() > >> > >> I was using the 2.6.18, then the one I saw on Google for Gentoo, and now > >> I am going to look at the 2.6.38 from OpenSuSE. > >> > >> > by chance (I remember having seen numerous uses under - iirc - > >> > drivers/media/)? > >> > > >> > Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do > >> > what their (driver) callers might expect in a PV guest (including the > >> > contiguity assumption for the latter, recalling that you earlier said > >> > you were able to see the problem after several guest starts), and I > >> > had put into our kernels an adjustment to make vmalloc_32() actually > >> > behave as expected. > >> > >> Aaah.. The plot thickens! Let me look in the sources! Thanks for the > >> pointer. > > > > Jan hints lead me to the videobuf-dma-sg.c which does indeed to vmalloc_32 > > and then performs PCI DMA operations on the allocted vmalloc_32 > > area. > > > > So I cobbled up the attached patch (hadn't actually tested it and sadly > > won't until next week) which removes the call to vmalloc_32 and instead > > sets up DMA allocated set of pages. > > What a big patch (which would need re-doing for every vmalloc_32() > caller)! Fixing vmalloc_32() would be much less intrusive (reproducing > our 3.2 version of the affected function below, but clearly that's not > pv-ops ready). I just want to get to the bottom of this before attempting a proper fix. > > Jan > > static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > pgprot_t prot, int node, void *caller) > { > const int order = 0; > struct page **pages; > unsigned int nr_pages, array_size, i; > gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > #ifdef CONFIG_XEN > gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); > > BUILD_BUG_ON((__GFP_DMA | __GFP_DMA32) != (__GFP_DMA + __GFP_DMA32)); > if (dma_mask == (__GFP_DMA | __GFP_DMA32)) > gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); > #endif > > nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; > array_size = (nr_pages * sizeof(struct page *)); > > area->nr_pages = nr_pages; > /* Please note that the recursion is strictly bounded. */ > if (array_size > PAGE_SIZE) { > pages = __vmalloc_node(array_size, 1, nested_gfp|__GFP_HIGHMEM, > PAGE_KERNEL, node, caller); > area->flags |= VM_VPAGES; > } else { > pages = kmalloc_node(array_size, nested_gfp, node); > } > area->pages = pages; > area->caller = caller; > if (!area->pages) { > remove_vm_area(area->addr); > kfree(area); > return NULL; > } > > for (i = 0; i < area->nr_pages; i++) { > struct page *page; > gfp_t tmp_mask = gfp_mask | __GFP_NOWARN; > > if (node < 0) > page = alloc_page(tmp_mask); > else > page = alloc_pages_node(node, tmp_mask, order); > > if (unlikely(!page)) { > /* Successfully allocated i pages, free them in __vunmap() */ > area->nr_pages = i; > goto fail; > } > area->pages[i] = page; > #ifdef CONFIG_XEN > if (dma_mask) { > if (xen_limit_pages_to_max_mfn(page, 0, 32)) { > area->nr_pages = i + 1; > goto fail; > } > if (gfp_mask & __GFP_ZERO) > clear_highpage(page); > } > #endif > } > > if (map_vm_area(area, prot, &pages)) > goto fail; > return area->addr; > > fail: > warn_alloc_failed(gfp_mask, order, > "vmalloc: allocation failure, allocated %ld of %ld bytes\n", > (area->nr_pages*PAGE_SIZE), area->size); > vfree(area->addr); > return NULL; > } > > ... > > #if defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA32) > #define GFP_VMALLOC32 GFP_DMA32 | GFP_KERNEL > #elif defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA) > #define GFP_VMALLOC32 GFP_DMA | GFP_KERNEL > #elif defined(CONFIG_XEN) > #define GFP_VMALLOC32 __GFP_DMA | __GFP_DMA32 | GFP_KERNEL > #else > #define GFP_VMALLOC32 GFP_KERNEL > #endif From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Tue, 24 Jan 2012 22:32:31 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20120123223213.GA31929@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?Sander_Eikelenboom?= , =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?Jan_Beulich?= List-Id: xen-devel@lists.xenproject.org Konrad, = I implemented the patch into a 3.1.2 but the patched function doesn't seem = to be called (I set debug=3D1 for the module). I think it's only for video capturing devices. But I greped around and found a vmalloc_32 in drivers/media/common/saa7146_= core.c line 182 function saa7146_vmalloc_build_pgtable which is included in module saa7146.ko. This would be the DVB chip. Maybe y= ou can rework the patch so that we can just test what you intended to test. Consequently, the patch you did so far doesn't change the load. Carsten. -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.= xensource.com] Im Auftrag von Konrad Rzeszutek Wilk Gesendet: Montag, 23. Januar 2012 23:32 An: Konrad Rzeszutek Wilk Cc: Sander Eikelenboom; xen-devel; Jan Beulich Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk wrote: > On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote: > > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: > > > The issue as I understand is that the DVB drivers allocate their = > > > buffers from 0->4GB most (all the time?) so they never have to do bou= nce-buffering. > > > = > > > While the pv-ops one ends up quite frequently doing the = > > > bounce-buffering, which implies that the DVB drivers end up = > > > allocating their buffers above the 4GB. > > > This means we end up spending some CPU time (in the guest) copying = > > > the memory from >4GB to 0-4GB region (And vice-versa). > > = > > This reminds me of something (not sure what XenoLinux you use for > > comparison) - how are they allocating that memory? Not vmalloc_32() > = > I was using the 2.6.18, then the one I saw on Google for Gentoo, and = > now I am going to look at the 2.6.38 from OpenSuSE. > = > > by chance (I remember having seen numerous uses under - iirc - = > > drivers/media/)? > > = > > Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do = > > what their (driver) callers might expect in a PV guest (including = > > the contiguity assumption for the latter, recalling that you earlier = > > said you were able to see the problem after several guest starts), = > > and I had put into our kernels an adjustment to make vmalloc_32() = > > actually behave as expected. > = > Aaah.. The plot thickens! Let me look in the sources! Thanks for the = > pointer. Jan hints lead me to the videobuf-dma-sg.c which does indeed to vmalloc_32 = and then performs PCI DMA operations on the allocted vmalloc_32 area. So I cobbled up the attached patch (hadn't actually tested it and sadly won= 't until next week) which removes the call to vmalloc_32 and instead sets u= p DMA allocated set of pages. If that fixes it for you that is awesome, but if it breaks please send me y= our logs. Cheers, Konrad _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 25 Jan 2012 13:02:43 +0100 Message-ID: References: <20120123223213.GA31929@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6935847097306474898==" Return-path: In-Reply-To: <20120123223213.GA31929@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?Sander_Eikelenboom?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?Jan_Beulich?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============6935847097306474898== Content-Type: multipart/alternative; boundary="=_zZ-7LHgDF3de04T61sXBDaWrO7U7ur3zjzypBiz0AOzPZbPX" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_zZ-7LHgDF3de04T61sXBDaWrO7U7ur3zjzypBiz0AOzPZbPX Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable I can now confirm that saa7146_vmalloc_build_pgtable and vmalloc_to_sg ar= e called once per=0D=0A=0D=0APCI card and will allocate 329 pages. Sorry,= but I am not in the position to modify your patch=20=0D=0A=0D=0Ato patch= the functions in the right way, but happy to test...=0D=0A=0D=0A=C2=A0=0D= =0ABR, Carsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D= =0AAn:Konrad Rzeszutek Wilk ;=20=0D=0ACC:Sander Eikele= nboom ; xen-devel ; = Jan Beulich ;=20=0D=0AVon:Konrad Rzeszutek Wilk =0D=0AGesendet:Mo 23.01.2012 23:42=0D=0ABetreff:Re: [Xe= n-devel] Load increase after memory upgrade (part2)=0D=0AAnlage:vmalloc=0D= =0AOn Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk wrote:= =0D=0A> On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote:=0D=0A= > > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote:=0D=0A> > > The issue as I understand is that the DVB drivers a= llocate their buffers=0D=0A> > > from 0->4GB most (all the time=3F) so th= ey never have to do bounce-buffering.=0D=0A> > >=20=0D=0A> > > While the = pv-ops one ends up quite frequently doing the bounce-buffering,=20=0D=0A>= > > which=0D=0A> > > implies that the DVB drivers end up allocating thei= r buffers above the 4GB.=0D=0A> > > This means we end up spending some CP= U time (in the guest) copying the=20=0D=0A> > > memory=0D=0A> > > from >4= GB to 0-4GB region (And vice-versa).=0D=0A> >=20=0D=0A> > This reminds me= of something (not sure what XenoLinux you use for=0D=0A> > comparison) -= how are they allocating that memory=3F Not vmalloc_32()=0D=0A>=20=0D=0A>= I was using the 2.6.18, then the one I saw on Google for Gentoo, and now= =0D=0A> I am going to look at the 2.6.38 from OpenSuSE.=0D=0A>=20=0D=0A> = > by chance (I remember having seen numerous uses under - iirc -=0D=0A> >= drivers/media/)=3F=0D=0A> >=20=0D=0A> > Obviously, vmalloc_32() and any = GFP_DMA32 allocations do *not* do=0D=0A> > what their (driver) callers mi= ght expect in a PV guest (including the=0D=0A> > contiguity assumption fo= r the latter, recalling that you earlier said=0D=0A> > you were able to s= ee the problem after several guest starts), and I=0D=0A> > had put into o= ur kernels an adjustment to make vmalloc_32() actually=0D=0A> > behave as= expected.=0D=0A>=20=0D=0A> Aaah.. The plot thickens! Let me look in the = sources! Thanks for the=0D=0A> pointer.=0D=0A=0D=0AJan hints lead me to t= he videobuf-dma-sg.c which does indeed to vmalloc_32=0D=0Aand then perfor= ms PCI DMA operations on the allocted vmalloc_32=0D=0Aarea.=0D=0A=0D=0ASo= I cobbled up the attached patch (hadn't actually tested it and sadly=0D=0A= won't until next week) which removes the call to vmalloc_32 and instead=0D= =0Asets up DMA allocated set of pages.=0D=0A=0D=0AIf that fixes it for yo= u that is awesome, but if it breaks please=0D=0Asend me your logs.=0D=0A=0D= =0ACheers,=0D=0AKonrad=0D=0A_____________________________________________= __=0D=0AXen-devel mailing list=0D=0AXen-devel@lists.xensource.com=0D=0Aht= tp://lists.xensource.com/xen-devel=0D=0A --=_zZ-7LHgDF3de04T61sXBDaWrO7U7ur3zjzypBiz0AOzPZbPX Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= p>I can now confirm that saa7146_vmalloc_build_pgtable and vmalloc_to_sg = are called once per

PCI card and will allocate 329 pages. Sorry, bu= t I am not in the position to modify your patch

to patch the funct= ions in the right way, but happy to test...

 

BR, Carste= n.
 

-----Ursprüngliche Nachricht-----<= br />An:=09Konrad Rzeszutek Wilk <konrad@darnok.org&g= t;;
CC:=09Sander Eikelenboom <linux@eikelenboom= =2Eit>; xen-devel <xen-devel@lists.xensource.com>; Jan Beulich &= lt;JBeulich@suse.com>;
Von:=09Konrad Rzeszutek = Wilk <konrad.wilk@oracle.com>
Gesendet:=09Mo = 23.01.2012 23:42
Betreff:=09Re: [Xen-devel] Load in= crease after memory upgrade (part2)
Anlage:=09vmall= oc
On Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk w= rote:
> On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wro= te:
> > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wi= lk <konrad.wilk@oracle.com> wrote:
> > > The issue as= I understand is that the DVB drivers allocate their buffers
> &g= t; > from 0->4GB most (all the time=3F) so they never have to do bo= unce-buffering.
> > >
> > > While the pv-ops= one ends up quite frequently doing the bounce-buffering,
> >= > which
> > > implies that the DVB drivers end up alloc= ating their buffers above the 4GB.
> > > This means we end = up spending some CPU time (in the guest) copying the
> > >= memory
> > > from >4GB to 0-4GB region (And vice-versa)= =2E
> >
> > This reminds me of something (not sure= what XenoLinux you use for
> > comparison) - how are they all= ocating that memory=3F Not vmalloc_32()
>
> I was using = the 2.6.18, then the one I saw on Google for Gentoo, and now
> I = am going to look at the 2.6.38 from OpenSuSE.
>
> > b= y chance (I remember having seen numerous uses under - iirc -
> &= gt; drivers/media/)=3F
> >
> > Obviously, vmalloc_= 32() and any GFP_DMA32 allocations do *not* do
> > what their = (driver) callers might expect in a PV guest (including the
> >= contiguity assumption for the latter, recalling that you earlier said> > you were able to see the problem after several guest starts)= , and I
> > had put into our kernels an adjustment to make vma= lloc_32() actually
> > behave as expected.
>
>= ; Aaah.. The plot thickens! Let me look in the sources! Thanks for the> pointer.

Jan hints lead me to the videobuf-dma-sg.c wh= ich does indeed to vmalloc_32
and then performs PCI DMA operations o= n the allocted vmalloc_32
area.

So I cobbled up the attac= hed patch (hadn't actually tested it and sadly
won't until n= ext week) which removes the call to vmalloc_32 and instead
sets up D= MA allocated set of pages.

If that fixes it for you that is aw= esome, but if it breaks please
send me your logs.

Cheers,=
Konrad
_______________________________________________
Xe= n-devel mailing list
Xen-devel@lists.xensource.com
http://lists= =2Exensource.com/xen-devel
=0A=0A --=_zZ-7LHgDF3de04T61sXBDaWrO7U7ur3zjzypBiz0AOzPZbPX-- --===============6935847097306474898== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============6935847097306474898==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Wed, 25 Jan 2012 20:06:12 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20120123223213.GA31929@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?Sander_Eikelenboom?= , =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?Jan_Beulich?= List-Id: xen-devel@lists.xenproject.org Some news: in order to prepare a clean setting, I upgraded to 3.2.1 kernel.= I noticed that the load increase is reduced a bit, but noticably. It's only a simple test, running the DomU for= 2 minutes, but the idle load is aprox. - 2.6.32 pvops 12-13% - 3.2.1 pvops 10-11% - 2.6.34 XenoLinux 7-8% BR, Carsten. -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.= xensource.com] Im Auftrag von Konrad Rzeszutek Wilk Gesendet: Montag, 23. Januar 2012 23:32 An: Konrad Rzeszutek Wilk Cc: Sander Eikelenboom; xen-devel; Jan Beulich Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Wed, Jan 18, 2012 at 10:29:23AM -0400, Konrad Rzeszutek Wilk wrote: > On Wed, Jan 18, 2012 at 11:35:35AM +0000, Jan Beulich wrote: > > >>> On 17.01.12 at 22:02, Konrad Rzeszutek Wilk wrote: > > > The issue as I understand is that the DVB drivers allocate their = > > > buffers from 0->4GB most (all the time?) so they never have to do bou= nce-buffering. > > > = > > > While the pv-ops one ends up quite frequently doing the = > > > bounce-buffering, which implies that the DVB drivers end up = > > > allocating their buffers above the 4GB. > > > This means we end up spending some CPU time (in the guest) copying = > > > the memory from >4GB to 0-4GB region (And vice-versa). > > = > > This reminds me of something (not sure what XenoLinux you use for > > comparison) - how are they allocating that memory? Not vmalloc_32() > = > I was using the 2.6.18, then the one I saw on Google for Gentoo, and = > now I am going to look at the 2.6.38 from OpenSuSE. > = > > by chance (I remember having seen numerous uses under - iirc - = > > drivers/media/)? > > = > > Obviously, vmalloc_32() and any GFP_DMA32 allocations do *not* do = > > what their (driver) callers might expect in a PV guest (including = > > the contiguity assumption for the latter, recalling that you earlier = > > said you were able to see the problem after several guest starts), = > > and I had put into our kernels an adjustment to make vmalloc_32() = > > actually behave as expected. > = > Aaah.. The plot thickens! Let me look in the sources! Thanks for the = > pointer. Jan hints lead me to the videobuf-dma-sg.c which does indeed to vmalloc_32 = and then performs PCI DMA operations on the allocted vmalloc_32 area. So I cobbled up the attached patch (hadn't actually tested it and sadly won= 't until next week) which removes the call to vmalloc_32 and instead sets u= p DMA allocated set of pages. If that fixes it for you that is awesome, but if it breaks please send me y= our logs. Cheers, Konrad _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 25 Jan 2012 16:02:32 -0500 Message-ID: <20120125210232.GA29196@phenom.dumpdata.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: Konrad Rzeszutek Wilk , xen-devel , Jan Beulich , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Wed, Jan 25, 2012 at 08:06:12PM +0100, Carsten Schiers wrote: > Some news: in order to prepare a clean setting, I upgraded to 3.2.1 kernel. I noticed that the load increase is > reduced a bit, but noticably. It's only a simple test, running the DomU for 2 minutes, but the idle load is aprox. > > - 2.6.32 pvops 12-13% > - 3.2.1 pvops 10-11% Yeah. I think this idue to the fix I added in xen-swiotlb to not always do the bounce copying. > - 2.6.34 XenoLinux 7-8% > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 15 Feb 2012 14:28:04 -0500 Message-ID: <20120215192804.GA21695@phenom.dumpdata.com> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="LZvS9be/3tNcYl/X" Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Carsten Schiers Cc: Konrad Rzeszutek Wilk , xen-devel , Jan Beulich , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org --LZvS9be/3tNcYl/X Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Jan 25, 2012 at 08:06:12PM +0100, Carsten Schiers wrote: > Some news: in order to prepare a clean setting, I upgraded to 3.2.1 kernel. I noticed that the load increase is > reduced a bit, but noticably. It's only a simple test, running the DomU for 2 minutes, but the idle load is aprox. > > - 2.6.32 pvops 12-13% > - 3.2.1 pvops 10-11% > - 2.6.34 XenoLinux 7-8% I took a stab at Jan's idea - it compiles but I hadn't been able to properly test it. --LZvS9be/3tNcYl/X Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="vmalloc_using_xen_limit_pages.patch" diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 87f6673..6bb6f68 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -47,6 +47,7 @@ #include #include #include +#include #include @@ -2073,6 +2074,7 @@ void __init xen_init_mmu_ops(void) /* Protected by xen_reservation_lock. */ #define MAX_CONTIG_ORDER 9 /* 2MB */ static unsigned long discontig_frames[1< MAX_CONTIG_ORDER)) + return -ENOMEM; + + if (BITS_PER_LONG >> order) { + limit_map = kzalloc(BITS_TO_LONGS(1U << order) * + sizeof(*limit_map), GFP_KERNEL); + if (unlikely(!limit_map)) + return -ENOMEM; + } else + limit_map = &_limit_map; + + /* 0. Construct our per page bitmap lookup. */ + + if (address_bits && (address_bits < PAGE_SHIFT)) + return -EINVAL; + + if (order) + bitmap_zero(limit_map, 1U << order); + else + __set_bit(0, limit_map); + + /* 1. Clear the pages */ + for (i = 0; i < 1ULL << order; i++) { + void *vaddr; + page = &pages[i]; + vaddr = page_address(page); + if (address_bits) { + if (!pfn_to_mfn(virt_to_mfn(vaddr)) >> (address_bits - PAGE_SHIFT)) + continue; + __set_bit(i, limit_map); + } + if (!PageHighMem(page)) + memset(vaddr, 0, PAGE_SIZE); + else { + memset(kmap(page), 0, PAGE_SIZE); + kunmap(page); + ++n; + } + } + /* Check to see if we actually have to do any work. */ + if (bitmap_empty(limit_map, 1U << order)) { + if (limit_map != &_limit_map) + kfree(limit_map); + return 0; + } + if (n) + kmap_flush_unused(); + + spin_lock_irqsave(&xen_reservation_lock, flags); + + /* 2. Zap current PTEs. */ + n = xen_zap_page_range(pages, order, in_frames, NULL /*out_frames */, limit_map); + + /* 3. Do the exchange for non-contiguous MFNs. */ + success = xen_exchange_memory(n, 0, in_frames, + n, 0, out_frames, address_bits); + + /* 4. Map new pages in place of old pages. */ + if (success) + xen_remap_exchanged_pages(pages, order, out_frames, 0, limit_map); + else + xen_remap_exchanged_pages(pages, order, NULL, *in_frames, limit_map); + + spin_unlock_irqrestore(&xen_reservation_lock, flags); + if (limit_map != &_limit_map) + kfree(limit_map); + + return success ? 0 : -ENOMEM; +} +EXPORT_SYMBOL_GPL(xen_limit_pages_to_max_mfn); #ifdef CONFIG_XEN_PVHVM static void xen_hvm_exit_mmap(struct mm_struct *mm) { diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 03c85d7..ae5b1ef 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -28,4 +28,6 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma, unsigned long mfn, int nr, pgprot_t prot, unsigned domid); +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits); #endif /* INCLUDE_XEN_OPS_H */ diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 27be2f0..4fa2066 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -31,6 +31,8 @@ #include #include +#include +#include /*** Page table manipulation functions ***/ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end) @@ -1550,7 +1552,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, struct page **pages; unsigned int nr_pages, array_size, i; gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; - + gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); + if (xen_pv_domain()) { + if (dma_mask == (__GFP_DMA | __GFP_DMA32)) + gfp_mask &= (__GFP_DMA | __GFP_DMA32); + } nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; array_size = (nr_pages * sizeof(struct page *)); @@ -1586,6 +1592,16 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, goto fail; } area->pages[i] = page; + if (xen_pv_domain()) { + if (dma_mask) { + if (xen_limit_pages_to_max_mfn(page, 0, 32)) { + area->nr_pages = i + 1; + goto fail; + } + if (gfp_mask & __GFP_ZERO) + clear_highpage(page); + } + } } if (map_vm_area(area, prot, &pages)) --LZvS9be/3tNcYl/X Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --LZvS9be/3tNcYl/X-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 16 Feb 2012 08:56:53 +0000 Message-ID: <4F3CD2E502000078000735E4@nat28.tlf.novell.com> References: <20120215192804.GA21695@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120215192804.GA21695@phenom.dumpdata.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Konrad Rzeszutek Wilk Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org >>> On 15.02.12 at 20:28, Konrad Rzeszutek Wilk wrote: >@@ -1550,7 +1552,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > struct page **pages; > unsigned int nr_pages, array_size, i; > gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; >- >+ gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); >+ if (xen_pv_domain()) { >+ if (dma_mask == (__GFP_DMA | __GFP_DMA32)) I didn't spot where you force this normally invalid combination, without which the change won't affect vmalloc32() in a 32-bit kernel. >+ gfp_mask &= (__GFP_DMA | __GFP_DMA32); gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); Jan >+ } > nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; > array_size = (nr_pages * sizeof(struct page *)); > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 17 Feb 2012 10:07:59 -0500 Message-ID: <20120217150759.GA29554@phenom.dumpdata.com> References: <20120215192804.GA21695@phenom.dumpdata.com> <4F3CD2E502000078000735E4@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <4F3CD2E502000078000735E4@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jan Beulich Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Thu, Feb 16, 2012 at 08:56:53AM +0000, Jan Beulich wrote: > >>> On 15.02.12 at 20:28, Konrad Rzeszutek Wilk wrote: > >@@ -1550,7 +1552,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > > struct page **pages; > > unsigned int nr_pages, array_size, i; > > gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > >- > >+ gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); > >+ if (xen_pv_domain()) { > >+ if (dma_mask == (__GFP_DMA | __GFP_DMA32)) > > I didn't spot where you force this normally invalid combination, without > which the change won't affect vmalloc32() in a 32-bit kernel. > > >+ gfp_mask &= (__GFP_DMA | __GFP_DMA32); > > gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); > > Jan Duh! Good eyes. Thanks for catching that. > > >+ } > > nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; > > array_size = (nr_pages * sizeof(struct page *)); > > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Tue, 28 Feb 2012 15:35:02 +0100 Message-ID: References: <20120217150759.GA29554@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1900018042941023838==" Return-path: In-Reply-To: <20120217150759.GA29554@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?Sander_Eikel?= =?utf-8?Q?enboom?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?Jan_Beulich?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============1900018042941023838== Content-Type: multipart/alternative; boundary="=_moejqVqBTqpWyxsFKDF12xZofkJ2aLsa6Hz0GQ9oD1zXNEXG" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_moejqVqBTqpWyxsFKDF12xZofkJ2aLsa6Hz0GQ9oD1zXNEXG Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Well let me check for a longer period of time, and especially, whether th= e DomU is still=0D=0A=0D=0Aworking (can do that only from at home), but l= oad looks pretty well after applying the=0D=0A=0D=0Apatch to 3.2.8 :-D.=0D= =0A=0D=0A=C2=A0=0D=0ABR,=0D=0A=0D=0ACarsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3= =BCngliche Nachricht-----=0D=0AAn:Jan Beulich ;=20=0D=0A= CC:Konrad Rzeszutek Wilk ; xen-devel ; Carsten Schiers ; Sander Eikelenboom = ;=20=0D=0AVon:Konrad Rzeszutek Wilk =0D=0AGesendet:Fr 17.02.2012 16:18=0D=0ABetreff:Re: [Xen-devel] = Load increase after memory upgrade (part2)=0D=0AOn Thu, Feb 16, 2012 at 0= 8:56:53AM +0000, Jan Beulich wrote:=0D=0A> >>> On 15.02.12 at 20:28, Konr= ad Rzeszutek Wilk wrote:=0D=0A> >@@ -1550,7 +155= 2,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gf= p_mask,=0D=0A> > struct page **pages;=0D=0A> > unsigned int nr_pages, arr= ay_size, i;=0D=0A> > gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) |= __GFP_ZERO;=0D=0A> >-=0D=0A> >+gfp_t dma_mask =3D gfp_mask & (__GFP_DMA = | __GFP_DMA32);=0D=0A> >+if (xen_pv_domain()) {=0D=0A> >+if (dma_mask =3D= =3D (__GFP_DMA | __GFP_DMA32))=0D=0A>=20=0D=0A> I didn't spot where you f= orce this normally invalid combination, without=0D=0A> which the change w= on't affect vmalloc32() in a 32-bit kernel.=0D=0A>=20=0D=0A> >+gfp_mask &= =3D (__GFP_DMA | __GFP_DMA32);=0D=0A>=20=0D=0A> gfp_mask &=3D ~(__GFP_DMA= | __GFP_DMA32);=0D=0A>=20=0D=0A> Jan=0D=0A=0D=0ADuh!=0D=0AGood eyes. Tha= nks for catching that.=0D=0A=0D=0A>=20=0D=0A> >+}=0D=0A> > nr_pages =3D (= area->size - PAGE_SIZE) >> PAGE_SHIFT;=0D=0A> > array_size =3D (nr_pages = * sizeof(struct page *));=0D=0A> >=20=0D=0A>=20=0D=0A=0D=0A______________= _________________________________=0D=0AXen-devel mailing list=0D=0AXen-de= vel@lists.xensource.com=0D=0Ahttp://lists.xensource.com/xen-devel=0D=0A --=_moejqVqBTqpWyxsFKDF12xZofkJ2aLsa6Hz0GQ9oD1zXNEXG Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= p>Well let me check for a longer period of time, and especially, whether = the DomU is still

working (can do that only from at home), but load= looks pretty well after applying the

patch to 3.2.8 :-D.

&nb= sp;

BR,

Carsten.
 

-----Urspr&uu= ml;ngliche Nachricht-----
An:=09Jan Beulich <JBe= ulich@suse.com>;
CC:=09Konrad Rzeszutek Wilk &l= t;konrad@darnok.org>; xen-devel <xen-devel@lists.xensource.com>;= Carsten Schiers <carsten@schiers.de>; Sander Eikelenboom <linux= @eikelenboom.it>;
Von:=09Konrad Rzeszutek Wilk = <konrad.wilk@oracle.com>
Gesendet:=09Fr 17.02= =2E2012 16:18
Betreff:=09Re: [Xen-devel] Load incre= ase after memory upgrade (part2)
On Thu, Feb 16, 2012 at 08:56:53AM = +0000, Jan Beulich wrote:
> >>> On 15.02.12 at 20:28, Ko= nrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
> >@= @ -1550,7 +1552,11 @@ static void *__vmalloc_area_node(struct vm_struct *= area, gfp_t gfp_mask,
> > =09struct page **pages;
> &g= t; =09unsigned int nr_pages, array_size, i;
> > =09gfp_t neste= d_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
> >-=
> >+=09gfp_t dma_mask =3D gfp_mask & (__GFP_DMA | __GFP_D= MA32);
> >+=09if (xen_pv_domain()) {
> >+=09=09if (= dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32))
>
> I didn= 9;t spot where you force this normally invalid combination, without
= > which the change won't affect vmalloc32() in a 32-bit kernel.>
> >+=09=09=09gfp_mask &=3D (__GFP_DMA | __GFP_DMA= 32);
>
> =09=09=09gfp_mask &=3D ~(__GFP_DMA | __GFP_= DMA32);
>
> Jan

Duh!
Good eyes. Thanks f= or catching that.

>
> >+=09}
> > =09= nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT;
> &= gt; =09array_size =3D (nr_pages * sizeof(struct page *));
> > =
>

_______________________________________________Xen-devel mailing list
Xen-devel@lists.xensource.com
http://= lists.xensource.com/xen-devel
=0A=0A --=_moejqVqBTqpWyxsFKDF12xZofkJ2aLsa6Hz0GQ9oD1zXNEXG-- --===============1900018042941023838== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============1900018042941023838==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 29 Feb 2012 13:10:29 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3070970385178588289==" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?Jan_Beulich?= , =?utf-8?Q?Sander_Eikelenboom?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============3070970385178588289== Content-Type: multipart/alternative; boundary="=_RmxjJNJsrwnVui3cj4DPBppoz3cSlsTnPeMw6PZpGIQPD9Xj" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_RmxjJNJsrwnVui3cj4DPBppoz3cSlsTnPeMw6PZpGIQPD9Xj Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Great news: it works and load is back to normal. In the attached graph yo= u can see the peak=0D=0A=0D=0Ain blue (compilation of the patched 3.2.8 K= ernel) and then after 16.00 the going life of the=20=0D=0A=0D=0Avideo Dom= U. We are below an avaerage of 7% usage (figures are in Permille).=0D=0A=0D= =0A=0D=0AThanks so much. Is that already "the final patch"=3F=20=0D=0A=0D= =0A=C2=A0=0D=0ABR, Carsten.=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2=A0=0D=0A----= -Urspr=C3=BCngliche Nachricht-----=0D=0AAn:Konrad Rzeszutek Wilk ;=20=0D=0ACC:Sander Eikelenboom ; x= en-devel ; Jan Beulich = ; Konrad Rzeszutek Wilk ;=20=0D=0AVon:Carsten Schiers = =0D=0AGesendet:Di 28.02.2012 15:39=0D=0ABetreff:Re: [= Xen-devel] Load increase after memory upgrade (part2)=0D=0AAnlage:inline.= txt=0D=0A=20=0D=0A=0D=0AWell let me check for a longer period of time, an= d especially, whether the DomU is still=0D=0A=0D=0Aworking (can do that o= nly from at home), but load looks pretty well after applying the=0D=0A=0D= =0Apatch to 3.2.8 :-D.=0D=0A=0D=0A=C2=A0=0D=0ABR,=0D=0A=0D=0ACarsten.=0D=0A= =C2=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D=0AAn:Jan Beulich ;=20=0D=0ACC:Konrad Rzeszutek Wilk ; = xen-devel ; Carsten Schiers ; Sander Eikelenboom ;=20=0D=0AVon:Konrad Rze= szutek Wilk =0D=0AGesendet:Fr 17.02.2012 16:18=0D= =0ABetreff:Re: [Xen-devel] Load increase after memory upgrade (part2)=0D=0A= On Thu, Feb 16, 2012 at 08:56:53AM +0000, Jan Beulich wrote:=0D=0A> >>> O= n 15.02.12 at 20:28, Konrad Rzeszutek Wilk wrote= :=0D=0A> >@@ -1550,7 +1552,11 @@ static void *__vmalloc_area_node(struct = vm_struct *area, gfp_t gfp_mask,=0D=0A> > struct page **pages;=0D=0A> > u= nsigned int nr_pages, array_size, i;=0D=0A> > gfp_t nested_gfp =3D (gfp_m= ask & GFP_RECLAIM_MASK) | __GFP_ZERO;=0D=0A> >-=0D=0A> >+gfp_t dma_mask =3D= gfp_mask & (__GFP_DMA | __GFP_DMA32);=0D=0A> >+if (xen_pv_domain()) {=0D= =0A> >+if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32))=0D=0A>=20=0D=0A> I = didn't spot where you force this normally invalid combination, without=0D= =0A> which the change won't affect vmalloc32() in a 32-bit kernel.=0D=0A>= =20=0D=0A> >+gfp_mask &=3D (__GFP_DMA | __GFP_DMA32);=0D=0A>=20=0D=0A> gf= p_mask &=3D ~(__GFP_DMA | __GFP_DMA32);=0D=0A>=20=0D=0A> Jan=0D=0A=0D=0AD= uh!=0D=0AGood eyes. Thanks for catching that.=0D=0A=0D=0A>=20=0D=0A> >+}=0D= =0A> > nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT;=0D=0A> > arra= y_size =3D (nr_pages * sizeof(struct page *));=0D=0A> >=20=0D=0A>=20=0D=0A= =0D=0A_______________________________________________=0D=0AXen-devel mail= ing list=0D=0AXen-devel@lists.xensource.com=0D=0Ahttp://lists.xensource.c= om/xen-devel=0D=0A=20 --=_RmxjJNJsrwnVui3cj4DPBppoz3cSlsTnPeMw6PZpGIQPD9Xj Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable =0A=0A =0A =0A AW: [Xen-deve= l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<= p>Great news: it works and load is back to normal. In the attached graph = you can see the peak

in blue (compilation of the patched 3.2.8 Kern= el) and then after 16.00 the going life of the

video DomU. We are = below an avaerage of 7% usage (figures are in Permille).


Than= ks so much. Is that already "the final patch"=3F

 <= /p>

BR, Carsten.

 


 3D""

-= ----Ursprüngliche Nachricht-----
An:=09Konrad = Rzeszutek Wilk <konrad.wilk@oracle.com>;
CC:= =09Sander Eikelenboom <linux@eikelenboom.it>; xen-devel <xen-dev= el@lists.xensource.com>; Jan Beulich <jbeulich@suse.com>; Konrad= Rzeszutek Wilk <konrad@darnok.org>;
Von:=09= Carsten Schiers <carsten@schiers.de>
Gesendet:=09Di 28.02.2012 15:39
Betreff:=09Re: [Xen-devel] = Load increase after memory upgrade (part2)
Anlage:=09= inline.txt

Well let me check for a longer period of time,= and especially, whether the DomU is still

working (can do that onl= y from at home), but load looks pretty well after applying the

patc= h to 3.2.8 :-D.

 

BR,

Carsten.
 

-----Ursprüngliche Nachricht-----
An:=09Jan Beulich <JBeulich@suse.com>;
CC:=09= Konrad Rzeszutek Wilk <konrad@darnok.org>; xen-devel <xen-devel@= lists.xensource.com>; Carsten Schiers <carsten@schiers.de>; Sand= er Eikelenboom <linux@eikelenboom.it>;
Von:=09= Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Gesende= t:=09Fr 17.02.2012 16:18
Betreff:=09Re: [X= en-devel] Load increase after memory upgrade (part2)
On Thu, Feb 16,= 2012 at 08:56:53AM +0000, Jan Beulich wrote:
> >>> On 1= 5.02.12 at 20:28, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wr= ote:
> >@@ -1550,7 +1552,11 @@ static void *__vmalloc_area_nod= e(struct vm_struct *area, gfp_t gfp_mask,
> > =09struct page *= *pages;
> > =09unsigned int nr_pages, array_size, i;
>= > =09gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_Z= ERO;
> >-
> >+=09gfp_t dma_mask =3D gfp_mask & = (__GFP_DMA | __GFP_DMA32);
> >+=09if (xen_pv_domain()) {
= > >+=09=09if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32))
> =
> I didn't spot where you force this normally invalid combin= ation, without
> which the change won't affect vmalloc32() in= a 32-bit kernel.
>
> >+=09=09=09gfp_mask &=3D (_= _GFP_DMA | __GFP_DMA32);
>
> =09=09=09gfp_mask &=3D = ~(__GFP_DMA | __GFP_DMA32);
>
> Jan

Duh!
Good eyes. Thanks for catching that.

>
> >+=09= }
> > =09nr_pages =3D (area->size - PAGE_SIZE) >> PAG= E_SHIFT;
> > =09array_size =3D (nr_pages * sizeof(struct page = *));
> >
>

______________________________= _________________
Xen-devel mailing list
Xen-devel@lists.xensou= rce.com
http://lists.xensource.com/xen-devel
=0A=0A --=_RmxjJNJsrwnVui3cj4DPBppoz3cSlsTnPeMw6PZpGIQPD9Xj-- --===============3070970385178588289== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============3070970385178588289==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 29 Feb 2012 13:56:09 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_F1yjpLocfe5Ra5tK65RmHGcdd2qVYzUzBxBqAXkQZGBAcVOw" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?Sander_Eikelenboom?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?Jan_Beulich?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_F1yjpLocfe5Ra5tK65RmHGcdd2qVYzUzBxBqAXkQZGBAcVOw Content-Type: multipart/alternative; boundary="=_F1yjPY0x5Rt03QtpR+eAjTruBumDA6U+Yn3CBd30zLybmgQg" --=_F1yjPY0x5Rt03QtpR+eAjTruBumDA6U+Yn3CBd30zLybmgQg Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable I am very sorry. I accidently started the DomU with the wrong config file= , thus it's clear why there is no difference=0D=0A=0D=0Abetween the two. = And unfortunately, the DomU with the correct config file is having a BUG:= =0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=0A[ 14.674883] BUG: unable to handle ker= nel paging request at ffffc7fffffff000=0A[ 14.674910] IP: [] swiotlb_bounce+0x2e/0x31=0A[ 14.674930] PGD 0=20=0A[ 14.67494= 0] Oops: 0002 [#1] SMP=20=0A[ 14.674952] CPU 0=20=0A[ 14.674957] Modu= les linked in: nfsd exportfs nfs lockd fscache auth_rpcgss nfs_acl sunrpc= tda10023 budget_av evdev saa7146_vv videodev v4l2_compat_ioctl32 videobu= f_dma_sg videobuf_core budget_core snd_pcm dvb_core snd_timer saa7146 snd= ttpci_eeprom soundcore snd_page_alloc i2c_core pcspkr ext3 jbd mbcache x= en_netfront xen_blkfront=0A[ 14.675057]=20=0A[ 14.675065] Pid: 0, com= m: swapper/0 Not tainted 3.2.8-amd64 #1 =20=0A[ 14.675079] RIP: e030:[<= ffffffff811b4c0b>] [] swiotlb_bounce+0x2e/0x31=0A[ 1= 4.675097] RSP: e02b:ffff880013fabe58 EFLAGS: 00010202=0A[ 14.675106] R= AX: ffff880012800000 RBX: 0000000000000001 RCX: 0000000000001000=0A[ 14= =2E675116] RDX: 0000000000001000 RSI: ffff880012800000 RDI: ffffc7fffffff= 000=0A[ 14.675126] RBP: 0000000000000002 R08: ffffc7fffffff000 R09: fff= f880013f98000=0A[ 14.675137] R10: 0000000000000001 R11: ffff88000337600= 0 R12: ffff8800032c5090=0A[ 14.675147] R13: 0000000000000149 R14: ffff8= 800033e0000 R15: ffffffff81601fd8=0A[ 14.675163] FS: 00007f3ff9893700(= 0000) GS:ffff880013fa8000(0000) knlGS:0000000000000000=0A[ 14.675175] C= S: e033 DS: 0000 ES: 0000 CR0: 000000008005003b=0A[ 14.675184] CR2: ff= ffc7fffffff000 CR3: 0000000012683000 CR4: 0000000000000660=0A[ 14.67519= 5] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000=0A[ = 14.675205] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400=0A[ 14.675216] Process swapper/0 (pid: 0, threadinfo ffffffff8160= 0000, task ffffffff8160d020)=0A[ 14.675227] Stack:=0A[ 14.675232] ff= ffffff81211826 ffff880002eda000 0000000000000000 ffffc90000408000=0A[ 1= 4.675251] 00000000000b0150 0000000000000006 ffffffffa013ec4a ffffffff810= 946cd=0A[ 14.675270] ffffffff81099203 ffff880003376000 000000000000000= 0 ffff880002eda4b0=0A[ 14.675289] Call Trace:=0A[ 14.675295] =20= =0A[ 14.675307] [] =3F xen_swiotlb_sync_sg_for_cpu+0= x2e/0x47=0A[ 14.675322] [] =3F vpeirq+0x7f/0x198 [bu= dget_core]=0A[ 14.675337] [] =3F handle_irq_event_pe= rcpu+0x166/0x184=0A[ 14.675350] [] =3F __rcu_process= _callbacks+0x71/0x2f8=0A[ 14.675364] [] =3F tasklet_= action+0x76/0xc5=0A[ 14.675376] [] =3F eoi_pirq+0x5b= /0x77=0A[ 14.675388] [] =3F __do_softirq+0xc4/0x1a0=0A= [ 14.675400] [] =3F __xen_evtchn_do_upcall+0x1c7/0x2= 05=0A[ 14.675412] [] =3F call_softirq+0x1c/0x30=0A[ = 14.675425] [] =3F do_softirq+0x3f/0x79=0A[ 14.6754= 36] [] =3F irq_exit+0x44/0xb5=0A[ 14.675452] [] =3F xen_evtchn_do_upcall+0x27/0x32=0A[ 14.675464] [] =3F xen_do_hypervisor_callback+0x1e/0x30=0A[ 14.675473]= =20=0D=0A=0D=0A=C2=A0=0D=0AComplete log is attached.=0D=0A=0D=0A=C2= =A0=0D=0ABR, Carsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-= ----=0D=0AAn:Konrad Rzeszutek Wilk ;=20=0D=0ACC:K= onrad Rzeszutek Wilk ; xen-devel ; Jan Beulich ; Sander Eikelenboom ;=20=0D=0AVon:Carsten Schiers =0D=0AGese= ndet:Mi 29.02.2012 13:16=0D=0ABetreff:Re: [Xen-devel] Load increase after= memory upgrade (part2)=0D=0AAnlage:inline.txt=0D=0A=20=0D=0A=0D=0AGreat = news: it works and load is back to normal. In the attached graph you can = see the peak=0D=0A=0D=0Ain blue (compilation of the patched 3.2.8 Kernel)= and then after 16.00 the going life of the=0D=0A=0D=0Avideo DomU. We are= below an avaerage of 7% usage (figures are in Permille).=0D=0A=0D=0A=0D=0A= Thanks so much. Is that already "the final patch"=3F=0D=0A=0D=0A=C2=A0=0D= =0ABR, Carsten.=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2=A0=0D=0A-----Urspr=C3=BC= ngliche Nachricht-----=0D=0AAn:Konrad Rzeszutek Wilk ;=20=0D=0ACC:Sander Eikelenboom ; xen-devel ; Jan Beulich ; Konrad Rze= szutek Wilk ;=20=0D=0AVon:Carsten Schiers =0D=0AGesendet:Di 28.02.2012 15:39=0D=0ABetreff:Re: [Xen-devel] L= oad increase after memory upgrade (part2)=0D=0AAnlage:inline.txt=0D=0A=20= =0D=0A=0D=0AWell let me check for a longer period of time, and especially= , whether the DomU is still=0D=0A=0D=0Aworking (can do that only from at = home), but load looks pretty well after applying the=0D=0A=0D=0Apatch to = 3.2.8 :-D.=0D=0A=0D=0A=C2=A0=0D=0ABR,=0D=0A=0D=0ACarsten.=0D=0A=C2=A0=0D=0A= -----Urspr=C3=BCngliche Nachricht-----=0D=0AAn:Jan Beulich ;=20=0D=0ACC:Konrad Rzeszutek Wilk ; xen-devel = ; Carsten Schiers ; Sa= nder Eikelenboom ;=20=0D=0AVon:Konrad Rzeszutek Wil= k =0D=0AGesendet:Fr 17.02.2012 16:18=0D=0ABetreff= :Re: [Xen-devel] Load increase after memory upgrade (part2)=0D=0AOn Thu, = Feb 16, 2012 at 08:56:53AM +0000, Jan Beulich wrote:=0D=0A> >>> On 15.02.= 12 at 20:28, Konrad Rzeszutek Wilk wrote:=0D=0A>= >@@ -1550,7 +1552,11 @@ static void *__vmalloc_area_node(struct vm_struc= t *area, gfp_t gfp_mask,=0D=0A> > struct page **pages;=0D=0A> > unsigned = int nr_pages, array_size, i;=0D=0A> > gfp_t nested_gfp =3D (gfp_mask & GF= P_RECLAIM_MASK) | __GFP_ZERO;=0D=0A> >-=0D=0A> >+gfp_t dma_mask =3D gfp_m= ask & (__GFP_DMA | __GFP_DMA32);=0D=0A> >+if (xen_pv_domain()) {=0D=0A> >= +if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32))=0D=0A>=20=0D=0A> I didn't= spot where you force this normally invalid combination, without=0D=0A> w= hich the change won't affect vmalloc32() in a 32-bit kernel.=0D=0A>=20=0D= =0A> >+gfp_mask &=3D (__GFP_DMA | __GFP_DMA32);=0D=0A>=20=0D=0A> gfp_mask= &=3D ~(__GFP_DMA | __GFP_DMA32);=0D=0A>=20=0D=0A> Jan=0D=0A=0D=0ADuh!=0D= =0AGood eyes. Thanks for catching that.=0D=0A=0D=0A>=20=0D=0A> >+}=0D=0A>= > nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT;=0D=0A> > array_si= ze =3D (nr_pages * sizeof(struct page *));=0D=0A> >=20=0D=0A>=20=0D=0A=0D= =0A_______________________________________________=0D=0AXen-devel mailing= list=0D=0AXen-devel@lists.xensource.com=0D=0Ahttp://lists.xensource.com/= xen-devel=0D=0A=20=0D=0A=20=0D=0A=0D=0A=C2=A0=0D=0A --=_F1yjPY0x5Rt03QtpR+eAjTruBumDA6U+Yn3CBd30zLybmgQg Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlv bmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+PGh0bWw+ CjxoZWFkPgogIDxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iWmFyYWZhIFdlYkFj Y2VzcyB2Ny4wLjItMjk0NzAiPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+QVc6IFtYZW4t ZGV2ZWxdIExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGUgKHBhcnQyKTwvdGl0 bGU+CiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgYm9keQ0KICAgICAgew0KICAg ICAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIFNhbnMtU2VyaWYgISBpbXBvcnRh bnQ7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgcGFkZGluZzogNXB4IDVw eCA1cHggNXB4Ow0KICAgICAgICBtYXJnaW46IDBweDsNCiAgICAgICAgYm9yZGVyLXN0eWxl OiBub25lOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOw0KICAgICAgfQ0K DQogICAgICBwLCB1bCwgbGkNCiAgICAgIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMHB4Ow0K ICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7DQogICAgICB9DQogIDwvc3R5bGU+CjwvaGVh ZD4KPGJvZHk+CjxwPkkgYW0gdmVyeSBzb3JyeS4gSSBhY2NpZGVudGx5IHN0YXJ0ZWQgdGhl IERvbVUgd2l0aCB0aGUgd3JvbmcgY29uZmlnIGZpbGUsIHRodXMgaXQmIzM5O3MgY2xlYXIg d2h5IHRoZXJlIGlzIG5vIGRpZmZlcmVuY2U8L3A+PHA+YmV0d2VlbiB0aGUgdHdvLiBBbmQg dW5mb3J0dW5hdGVseSwgdGhlIERvbVUgd2l0aCB0aGUgY29ycmVjdCBjb25maWcgZmlsZSBp cyBoYXZpbmcgYSBCVUc6PC9wPjxwPiZuYnNwOzwvcD48cHJlPgpbICAgMTQuNjc0ODgzXSBC VUc6IHVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyByZXF1ZXN0IGF0IGZmZmZjN2Zm ZmZmZmYwMDAKWyAgIDE0LjY3NDkxMF0gSVA6IFsmbHQ7ZmZmZmZmZmY4MTFiNGMwYiZndDtd IHN3aW90bGJfYm91bmNlKzB4MmUvMHgzMQpbICAgMTQuNjc0OTMwXSBQR0QgMCAKWyAgIDE0 LjY3NDk0MF0gT29wczogMDAwMiBbIzFdIFNNUCAKWyAgIDE0LjY3NDk1Ml0gQ1BVIDAgClsg ICAxNC42NzQ5NTddIE1vZHVsZXMgbGlua2VkIGluOiBuZnNkIGV4cG9ydGZzIG5mcyBsb2Nr ZCBmc2NhY2hlIGF1dGhfcnBjZ3NzIG5mc19hY2wgc3VucnBjIHRkYTEwMDIzIGJ1ZGdldF9h diBldmRldiBzYWE3MTQ2X3Z2IHZpZGVvZGV2IHY0bDJfY29tcGF0X2lvY3RsMzIgdmlkZW9i dWZfZG1hX3NnIHZpZGVvYnVmX2NvcmUgYnVkZ2V0X2NvcmUgc25kX3BjbSBkdmJfY29yZSBz bmRfdGltZXIgc2FhNzE0NiBzbmQgdHRwY2lfZWVwcm9tIHNvdW5kY29yZSBzbmRfcGFnZV9h bGxvYyBpMmNfY29yZSBwY3Nwa3IgZXh0MyBqYmQgbWJjYWNoZSB4ZW5fbmV0ZnJvbnQgeGVu X2Jsa2Zyb250ClsgICAxNC42NzUwNTddIApbICAgMTQuNjc1MDY1XSBQaWQ6IDAsIGNvbW06 IHN3YXBwZXIvMCBOb3QgdGFpbnRlZCAzLjIuOC1hbWQ2NCAjMSAgClsgICAxNC42NzUwNzld IFJJUDogZTAzMDpbJmx0O2ZmZmZmZmZmODExYjRjMGImZ3Q7XSAgWyZsdDtmZmZmZmZmZjgx MWI0YzBiJmd0O10gc3dpb3RsYl9ib3VuY2UrMHgyZS8weDMxClsgICAxNC42NzUwOTddIFJT UDogZTAyYjpmZmZmODgwMDEzZmFiZTU4ICBFRkxBR1M6IDAwMDEwMjAyClsgICAxNC42NzUx MDZdIFJBWDogZmZmZjg4MDAxMjgwMDAwMCBSQlg6IDAwMDAwMDAwMDAwMDAwMDEgUkNYOiAw MDAwMDAwMDAwMDAxMDAwClsgICAxNC42NzUxMTZdIFJEWDogMDAwMDAwMDAwMDAwMTAwMCBS U0k6IGZmZmY4ODAwMTI4MDAwMDAgUkRJOiBmZmZmYzdmZmZmZmZmMDAwClsgICAxNC42NzUx MjZdIFJCUDogMDAwMDAwMDAwMDAwMDAwMiBSMDg6IGZmZmZjN2ZmZmZmZmYwMDAgUjA5OiBm ZmZmODgwMDEzZjk4MDAwClsgICAxNC42NzUxMzddIFIxMDogMDAwMDAwMDAwMDAwMDAwMSBS MTE6IGZmZmY4ODAwMDMzNzYwMDAgUjEyOiBmZmZmODgwMDAzMmM1MDkwClsgICAxNC42NzUx NDddIFIxMzogMDAwMDAwMDAwMDAwMDE0OSBSMTQ6IGZmZmY4ODAwMDMzZTAwMDAgUjE1OiBm ZmZmZmZmZjgxNjAxZmQ4ClsgICAxNC42NzUxNjNdIEZTOiAgMDAwMDdmM2ZmOTg5MzcwMCgw MDAwKSBHUzpmZmZmODgwMDEzZmE4MDAwKDAwMDApIGtubEdTOjAwMDAwMDAwMDAwMDAwMDAK WyAgIDE0LjY3NTE3NV0gQ1M6ICBlMDMzIERTOiAwMDAwIEVTOiAwMDAwIENSMDogMDAwMDAw MDA4MDA1MDAzYgpbICAgMTQuNjc1MTg0XSBDUjI6IGZmZmZjN2ZmZmZmZmYwMDAgQ1IzOiAw MDAwMDAwMDEyNjgzMDAwIENSNDogMDAwMDAwMDAwMDAwMDY2MApbICAgMTQuNjc1MTk1XSBE UjA6IDAwMDAwMDAwMDAwMDAwMDAgRFIxOiAwMDAwMDAwMDAwMDAwMDAwIERSMjogMDAwMDAw MDAwMDAwMDAwMApbICAgMTQuNjc1MjA1XSBEUjM6IDAwMDAwMDAwMDAwMDAwMDAgRFI2OiAw MDAwMDAwMGZmZmYwZmYwIERSNzogMDAwMDAwMDAwMDAwMDQwMApbICAgMTQuNjc1MjE2XSBQ cm9jZXNzIHN3YXBwZXIvMCAocGlkOiAwLCB0aHJlYWRpbmZvIGZmZmZmZmZmODE2MDAwMDAs IHRhc2sgZmZmZmZmZmY4MTYwZDAyMCkKWyAgIDE0LjY3NTIyN10gU3RhY2s6ClsgICAxNC42 NzUyMzJdICBmZmZmZmZmZjgxMjExODI2IGZmZmY4ODAwMDJlZGEwMDAgMDAwMDAwMDAwMDAw MDAwMCBmZmZmYzkwMDAwNDA4MDAwClsgICAxNC42NzUyNTFdICAwMDAwMDAwMDAwMGIwMTUw IDAwMDAwMDAwMDAwMDAwMDYgZmZmZmZmZmZhMDEzZWM0YSBmZmZmZmZmZjgxMDk0NmNkClsg ICAxNC42NzUyNzBdICBmZmZmZmZmZjgxMDk5MjAzIGZmZmY4ODAwMDMzNzYwMDAgMDAwMDAw MDAwMDAwMDAwMCBmZmZmODgwMDAyZWRhNGIwClsgICAxNC42NzUyODldIENhbGwgVHJhY2U6 ClsgICAxNC42NzUyOTVdICAmbHQ7SVJRJmd0OyAKWyAgIDE0LjY3NTMwN10gIFsmbHQ7ZmZm ZmZmZmY4MTIxMTgyNiZndDtdID8geGVuX3N3aW90bGJfc3luY19zZ19mb3JfY3B1KzB4MmUv MHg0NwpbICAgMTQuNjc1MzIyXSAgWyZsdDtmZmZmZmZmZmEwMTNlYzRhJmd0O10gPyB2cGVp cnErMHg3Zi8weDE5OCBbYnVkZ2V0X2NvcmVdClsgICAxNC42NzUzMzddICBbJmx0O2ZmZmZm ZmZmODEwOTQ2Y2QmZ3Q7XSA/IGhhbmRsZV9pcnFfZXZlbnRfcGVyY3B1KzB4MTY2LzB4MTg0 ClsgICAxNC42NzUzNTBdICBbJmx0O2ZmZmZmZmZmODEwOTkyMDMmZ3Q7XSA/IF9fcmN1X3By b2Nlc3NfY2FsbGJhY2tzKzB4NzEvMHgyZjgKWyAgIDE0LjY3NTM2NF0gIFsmbHQ7ZmZmZmZm ZmY4MTA0ZDE3NSZndDtdID8gdGFza2xldF9hY3Rpb24rMHg3Ni8weGM1ClsgICAxNC42NzUz NzZdICBbJmx0O2ZmZmZmZmZmODEyMGE5YWMmZ3Q7XSA/IGVvaV9waXJxKzB4NWIvMHg3Nwpb ICAgMTQuNjc1Mzg4XSAgWyZsdDtmZmZmZmZmZjgxMDRjYmM2Jmd0O10gPyBfX2RvX3NvZnRp cnErMHhjNC8weDFhMApbICAgMTQuNjc1NDAwXSAgWyZsdDtmZmZmZmZmZjgxMjBhMDIyJmd0 O10gPyBfX3hlbl9ldnRjaG5fZG9fdXBjYWxsKzB4MWM3LzB4MjA1ClsgICAxNC42NzU0MTJd ICBbJmx0O2ZmZmZmZmZmODEzNGIwNmMmZ3Q7XSA/IGNhbGxfc29mdGlycSsweDFjLzB4MzAK WyAgIDE0LjY3NTQyNV0gIFsmbHQ7ZmZmZmZmZmY4MTAwZmE0NyZndDtdID8gZG9fc29mdGly cSsweDNmLzB4NzkKWyAgIDE0LjY3NTQzNl0gIFsmbHQ7ZmZmZmZmZmY4MTA0Yzk5NiZndDtd ID8gaXJxX2V4aXQrMHg0NC8weGI1ClsgICAxNC42NzU0NTJdICBbJmx0O2ZmZmZmZmZmODEy MGIwMzImZ3Q7XSA/IHhlbl9ldnRjaG5fZG9fdXBjYWxsKzB4MjcvMHgzMgpbICAgMTQuNjc1 NDY0XSAgWyZsdDtmZmZmZmZmZjgxMzRiMGJlJmd0O10gPyB4ZW5fZG9faHlwZXJ2aXNvcl9j YWxsYmFjaysweDFlLzB4MzAKWyAgIDE0LjY3NTQ3M10gICZsdDtFT0kmZ3Q7IDwvcHJlPjxw PiZuYnNwOzwvcD48cD5Db21wbGV0ZSBsb2cgaXMgYXR0YWNoZWQuPC9wPjxwPiZuYnNwOzwv cD48cD5CUiwgQ2Fyc3Rlbi48YnIgLz4mbmJzcDs8L3A+PGJsb2NrcXVvdGUgc3R5bGU9ImJv cmRlci1sZWZ0OiAycHggc29saWQgIzMyNUZCQTsgcGFkZGluZy1sZWZ0OiA1cHg7bWFyZ2lu LWxlZnQ6NXB4OyI+LS0tLS1VcnNwciZ1dW1sO25nbGljaGUgTmFjaHJpY2h0LS0tLS08YnIg Lz48c3Ryb25nPkFuOjwvc3Ryb25nPglLb25yYWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJh ZC53aWxrQG9yYWNsZS5jb20mZ3Q7OyA8YnIgLz48c3Ryb25nPkNDOjwvc3Ryb25nPglLb25y YWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJhZEBkYXJub2sub3JnJmd0OzsgeGVuLWRldmVs ICZsdDt4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbSZndDs7IEphbiBCZXVsaWNoICZs dDtqYmV1bGljaEBzdXNlLmNvbSZndDs7IFNhbmRlciBFaWtlbGVuYm9vbSAmbHQ7bGludXhA ZWlrZWxlbmJvb20uaXQmZ3Q7OyA8YnIgLz48c3Ryb25nPlZvbjo8L3N0cm9uZz4JQ2Fyc3Rl biBTY2hpZXJzICZsdDtjYXJzdGVuQHNjaGllcnMuZGUmZ3Q7PGJyIC8+PHN0cm9uZz5HZXNl bmRldDo8L3N0cm9uZz4JTWkgMjkuMDIuMjAxMiAxMzoxNjxiciAvPjxzdHJvbmc+QmV0cmVm Zjo8L3N0cm9uZz4JUmU6IFtYZW4tZGV2ZWxdIExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5 IHVwZ3JhZGUgKHBhcnQyKTxiciAvPjxzdHJvbmc+QW5sYWdlOjwvc3Ryb25nPglpbmxpbmUu dHh0PGJyIC8+PHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5IHsgZm9udC1mYW1pbHk6IG1v bm9zcGFjZTsgfTwvc3R5bGU+ICAgICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3Nz Ij4gICAgICAgLmJvZHljbGFzcyAgICAgICB7ICAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFs LCBWZXJkYW5hLCBTYW5zLVNlcmlmICEgaW1wb3J0YW50OyAgICAgICAgIGZvbnQtc2l6ZTog MTJweDsgICAgICAgICBwYWRkaW5nOiA1cHggNXB4IDVweCA1cHg7ICAgICAgICAgbWFyZ2lu OiAwcHg7ICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lOyAgICAgICAgIGJhY2tncm91bmQt Y29sb3I6ICNmZmZmZmY7ICAgICAgIH0gICAgICAgIHAsIHVsLCBsaSAgICAgICB7ICAgICAg ICAgbWFyZ2luLXRvcDogMHB4OyAgICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsgICAgICAg fSAgIDwvc3R5bGU+ICA8ZGl2PjxwPkdyZWF0IG5ld3M6IGl0IHdvcmtzIGFuZCBsb2FkIGlz IGJhY2sgdG8gbm9ybWFsLiBJbiB0aGUgYXR0YWNoZWQgZ3JhcGggeW91IGNhbiBzZWUgdGhl IHBlYWs8L3A+PHA+aW4gYmx1ZSAoY29tcGlsYXRpb24gb2YgdGhlIHBhdGNoZWQgMy4yLjgg S2VybmVsKSBhbmQgdGhlbiBhZnRlciAxNi4wMCB0aGUgZ29pbmcgbGlmZSBvZiB0aGU8L3A+ PHA+dmlkZW8gRG9tVS4gV2UgYXJlIGJlbG93IGFuIGF2YWVyYWdlIG9mIDclIHVzYWdlIChm aWd1cmVzIGFyZSBpbiBQZXJtaWxsZSkuPC9wPjxwPjxiciAvPlRoYW5rcyBzbyBtdWNoLiBJ cyB0aGF0IGFscmVhZHkgJnF1b3Q7dGhlIGZpbmFsIHBhdGNoJnF1b3Q7PzwvcD48cD4mbmJz cDs8L3A+PHA+QlIsIENhcnN0ZW4uPC9wPjxwPiZuYnNwOzwvcD48cD48YnIgLz4mbmJzcDs8 aW1nIHNyYz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB QUFmRUFBQUdFQ0FJQUFBQ3B2NDVZQUFBZ0FFbEVRVlI0bk8yZGZYUVVWWjczYjBnQ0lTQUp3 U0JndGtuRWtKQTN6QVlWZlVhUGoyY2RIY2VET0lGbFpnQjNkcHhoUmtRajZLb2M1MkN2c0Rv S0F6akJMRG1vWklOQk1OMkJCRmxmRUVrRTl4QUo2S0JFakx3NEtFaDNPcS8zbnozbitTUFBI eGV1UmQycTZwdnVydXJxcXUvbjlPblRYWDNyM3Z1N2RldmJ2OXl1K29aOEJnQUF3QkcwdHJh U2VQY0JBQUJBREdodGJYM2pqVGN1YVRvRkFBQ1F5THp4eGh2UWRBQUFjQWpRZEFBQWNBN1Fk QUFBY0E3UWRBQUFTQ1FhQlpTZlF0TUJrSUlRRXU4dURJTlk5VGF4b25ZVmc0T0RUTTJoNmND Qm1DYzl2R2J4UlV5cU5RbG91clBwNys4L2N1U0l6K2M3Zi81OFUxT1Q4aU5vdXF0WnVIRGhi My83VytXV2YvM1hmMTIwYUZFMGRSSkNDQ0ZKU1VsWFhYVlZXVm5aOHVYTHo1NDlHMTAzWTR5 bVRvV1Y3Q2pWeldKeGhLWTdtTTdPenBhV2xyYTJ0cTZ1cnFhbXBpTkhqaWcvaGFhN21rQWdV RlJVOU1ZYmI3QzNyNy8rZW5GeGNUQVlqS1pPcmdLQlFPRFFvVU1QUC96dzVNbVRUNXc0RVcx Zll3YzAzZnA2UUF6NTZLT1B6cDgvci9jcE5OM3RIRDE2OUpwcnJqbDI3Tml4WThjbVRackVw a0YvZi8rS0ZTdXV2dnJxMGFOSFYxWlcvdkRERDZ3d0lXVGp4bzBlanljMU5iV3NyT3lUVHo0 Ukt4UlY0T21ubi83bEwzL0pYbmQzZC8vTHYvekxWVmRkZGRWVlYvM21ONy9wN3U3bWUyM1lz R0hxMUtralI0NmNNV1BHQng5OHNIbno1bW5UcHJHR0RoOCt6SXA5OGNVWFAvdlp6OGFNR1RO cTFLaTc3cnJyekprenFrWWo2eUhmU0JTSU5Zc3Z4UEthUFRTbzFtQkF3Z1ppQUNGazllclYy ZG5aNmVucGl4WXRDb1ZDbE5KYmI3MTE2OWF0dkV4blorZWtTWk5VNmhBS2hSWXVYSmllbmo1 eDRzUTFhOVlZeHlWVEliQVlhRHFncjczMlduRnhjWEZ4Y1YxZEhkdnlwei85NmM0Nzd6eDU4 dVFQUC95d2NPSEMzLzN1ZDJ3N0lhU3lzdkxycjc4T0JBTFBQdnRzUlVXRldKdW9tSjJkbmRk Y2N3MTcvZGhqajkxOTk5MW56cHc1ZmZyMFAvM1RQMVZWVmZHOTVzeVo4OVZYWHdVQ2dlZWVl MjdzMkxFUFBQQUFmM3ZqalRleVlvV0ZoZSs4ODA0d0dEeC8vdnpTcFVzWExGaWdhalN5SGxM OVBGMW1QYjI2dXZxZWUrNlI3S0hxcmNHQWhBM0VBRUlJcS9iTW1UTjMzMzMzNDQ4L1RpbmR0 V3RYUVVIQndNQUFLL1BnZ3c4Ky8venpxaDJycXFwNGYrNjY2eTdlVDgyNFpDb0VNUWZYdllE d2xKZVh6NW8xaTcvMWVEekhqaDFqcjArZlBqMXg0a1QybWhCeTd0dzU5am9RQ0tTa3BJaFZp WkxYMjl1Ym1wcktYaytlUFBuenp6OW5yei83N0xNcFU2Ynd2ZjcrOTcvem1sVnZOUnNLQkFK WFgzMjFxdEhJZWtpajBQU1dscGFaTTJmeVAyWEM5bEQxMW1CQXdnWmlBQ0hrYjMvN0czdjkr ZWVmWDN2dHRleDFSVVhGNjYrL3pqY0dBZ0hWamxPbVRPRTdmdmJaWjVwanBZd3JiSVhBSkhE ZEM5Qmw4K2JOTjl4d3d3MDMzUERhYTYreExTa3BLY3JsZ3FTa0pMWmRUNWlNTjdJL3lkbnI1 T1RrL3Y1KzlycXZyNDlMbFhITi9PMkhIMzU0eXkyM3BLZW42M1ZNcG9jalJvemdmV0QwOS9l UEdESEN1QWJOSm80Y09USnQyalRscndWaGU2aDZHOW1BOEkzSzlSelZSNXJWN3RpeEl6OC92 NysvZi83OCtXdlhyaFYzVlBVbjdNaUhyUkNZQWE1N0Fib2NPWEprOHVUSlgzenh4ZkhqeHlk UG5uejA2RkZLYVU1T3p0ZGZmeTBXamt6VG4zNzY2Vi85NmxmczllVEprNVZwNE9USmsyVnE1 bStuVEpsU1YxZDMvdno1d2NIQkN4Y3VoRTJpTlh2bzhYais1My8rUjdubDBLRkRIby9IdUFi eHhaa3paL0x6OC9mdDI2Y3NIN2FIcXJlUkRVaFlsSG42My83Mk41NytEdzRPRmhjWFYxVlZl VHllbnA0ZWNVZGxudjc1NTUrSEhmbXdGWUtZZyt0ZWdDNkJRR0RHakJsdnZmVVdlL3ZtbTIr eTYxNmVlKzY1dSsrKysvang0MzE5ZlljUEg2NnNyR1FGaHFYcDdMcVhwVXVYS3E5N1diWnNH Vi9udmV1dXV4NTk5RkdabXZuYjhlUEg3OWl4SXhRS2ZmSEZGNVdWbFpGcCtyLy8rNytYbDVk LzlORkhvVkFvRkFydDM3OS81c3laYTlhc1laOW1aR1R3ZFNmTm12bUxHMis4Y2ZQbXphcks5 WHFvVjIxa0F4SVdRc2pQZnZhenMyZlBuajE3OXA1Nzd1SEw5SlRTdXJvNlFzaXJyNzZxdVdO VlZSWGJrUzNFaHgzNXNCV0NtSVByWG9BdUN4Y3U1Q0xDZVBqaGh4Y3VYRGd3TU9EMWV0bEZG MFZGUmZ5M1Uva0ZnYVNrcERGanhwU1dsajcrK09QODZoUkthVEFZWEx4NDhkaXhZOGVPSGJ0 NDhXSiszYVNrcHIvMTFsdTV1Ym5KeWNuLzhBLy9zSGJ0MnNnMGZYQndjTzNhdGNYRnhhTkdq Um8xYWxSeGNmRmYvdklYL3VtcVZhdkdqQmxqVUxQeWhSTGpIdXBWRzltQWhJVW9ybnRadUhB aHY1eUdVcnB0MjdacDA2YjE5ZlZwN3RqZDNmM3JYLzk2OU9qUjJkblp5dXRlOU9JS1d5R3dH R2c2QU83aTNudnY1WGNrMkxOQ1lBeXVld0VBVUVycHdNQkFkWFYxWVdFaHYvclFiaFVDR1ZR aURrMEh3S1VRUWp3ZVQydHJxMjByQkRJME5UWDE5dmF5MTcyOXZianVCUUFBRXBqVzF0WlBQ LzIwcjYrdnI2L3YwMDgvYld0clUzNEtUUWNBZ0VTaXU3djd3SUVEZnIvZjcvZTN0cllxZndD bjBIUUFBRWhvc0o0T0FBRE9BWm9PQUFBSmpJdXVaVHkrZCsveHZYdmozUXNBQUxBT3gycDZY eWkwL3BaYjF0OXlTMThvRk8rK0FBQ0FSVGhXMHo5NDZTV3Z4K1AxZUQ1NDZhVjQ5d1VBQU9L RFF6VDkvTW1UYS9Mem1hYXZ5YzgvZi9Ka3ZIc0VBQUNtRUF3R1cxdGIrYldNcW44MjZSQk5y MSs4bUFrNmU5UXZYaHp2SGdFQWdDbnMyN2Z2MkxGanZiMjl2YjI5UjQ4ZVZiazlPMFRUR1U4 OTlaUk1zYTZ1THV1THlaZnM3ZWlJUzd1STE1cDJFYTgxN2RvODNtancrWHpjWUdkZ1lNRG44 eWsvZGFPbUh6eDQwUHBpOGlVdmJOb1VsM1lScnpYdElsNXIyclY1dk5IZ2lqeTl0N2YzeElr VHYvM3RiNGVHaGs2ZlBtMzgvTC8vKzc5aHl3d05EWjA4ZVRLR3RjbVg3RHAyTEM3dElsN0Vp M2d0aTNkb2FPanJyNzgrY2VLRS9COEtuRUFnNFB6MWRNWlRUejAxSk1HcFU2ZXNMeVpma3Jh MXhhVmR4R3ROdTRqWG1uWnRIdStsd2liZ1JrMEhBQUE3RUpuUXVlSzZGd2J5OUdoS0lsNXIy a1c4MXJScjgzZ3ZGWTRJTzY2bjE5ZlhGeFlXcHFhbWxwYVd0clMwOE8wclY2N2svK2Z3NjYr L25qMTc5c2lSSTJmUG5zMytoNzI0UlFYeWRBQkFBaEdaZnRyeHVwY0hIbmlndmIyOXU3dDcw NlpORXlaTVlCdmIydG9tVFpyRU5YM2V2SGtyVnF6bzd1NWVzV0xGL1Buek5iZW9RSjRlVFVu RWEwMjdpTmVhZG0wZTc2WENFV0hIUEoxejRzUUpqOGRES2UzdTdpNHVMdDY3ZHkvWDlBa1RK cHcrZlpwU2V2cjBhYWI3NGhZVnlOTUJBQWxFWkxKcDMrdGVUcDA2VlY1ZXZuUG5Ua3JwMHFW TFgzenhSVW9wMS9RUkkwYXd2eS82Ky91VGs1TTF0M0Q2Ly83M0M2Kzg4dVR2ZjA4UEhCZ2FH akorUHIxelo5Z3k5TUNCVTZkT3hiQTIrWkswclMwdTdTSmV4SXQ0TFl1WEhqancvMEtoQzYr ODB0UGVIbHRkalp1bXQ3YTJlanllTFZ1MnNMZEpTVWxFQWFVMEt5dExsWldMVzFRZ1R3Y0FK QkNSaWFjZC9kT3JxNnV6czdOMzc5NHRmc1R6OU1yS1NyNTZYbGxacWJsRkJkYlRveW1KZUsx cEYvRmEwNjdONDcxVU9DSlVJcTRpUHBwT3J1VGl4WXZLajlpTHI3NzY2cWFiYmtwTlRiMzU1 cHRQbmp5cHVVVUY4blFBUUFJUm1YN2FVZE5OQW5sNk5DVVJyelh0SWw1cjJyVjV2SmNLUndR MEhRQUE3SWdaTXVoR1RYZkc5N3piOGhyRUcyVkp4R3ROdS9CN2lRM0Q4bVhFTTU3eGpPZTRQ MGZteS9qT08rKzB0N2VmUG4yNnY3OWZzNEJETkoyQlBEMmFrb2pYbW5ZUnJ6WHQyanplUzRX SHo0VUxGNDRmUDc1Ly8vNm1wcWI5Ky9jZlAzNzh3b1VMeWdKdTFIUUFBTEFEMGNoZFgxL2Y2 ZE9uMjl2YjMzbm5IZVYyTjJxNk03N24zWmJYSU40b1N5SmVhOXAxNlhxNjZNc29ib0V2SXdE QTJaaWhybmJ4WlJTM3dKZlI0bllScnpYdElsNXIyclY1dkpjS200QmRmQm5GTGZCbEJBQTRt NWlvcUMzOFhoaW5GTDZNNGhiNE1zTEhEdkVpWHFmR1MyUG55MmdYVFZmNU1vcGI0TXNJQUhB MmtZbG5Zdmd5aWx2Z3kyaHh1NGpYbW5ZUnJ6WHQyanplUzRWamdTMDBYZlJsRkxmQWx4RUE0 R3hpSXFlMjBIU1RRSjRlVFVuRWEwMjdpTmVhZG0wZTc2WENKdUJHVFFjQUFEc1FtZEFGZzBH Yi9qL1NtSU04UFpxU2lOZWFkaEd2TmUzYVBONUxoU05pMzc1OXg0NGQ2KzN0N2UzdFBYcjA2 TDU5KzVTZk9rVFQ0Y3VJWnp6ak9iR2VJL05scEpUNmZENTJWVGVsZEdCZ3dPZnpLVDkxaUtZ em5KZW5rdzJFYkNEV3RHdUhlSzFzRi9GYTB5N2lOU29jRWE3STB4bk9XMDgzMEhRQVFLSVRt ZEFGQWdHc3AxOUJBbjNQZHd5UmppSGs2YWEwaTNpdGFSZnhHaFUyQWJ2NE1zcTRNTHJFbDFH Wm05ZVMybHBTRzkvK0FBQk1Jakw5dE9OOXBKRzVNRHJQbDVGck45Tng5cGl6TW9mTGVnV3By ZERSZExmbE5ZZzN5cEtJMTVwMkxjalRtWWh6S2JlRnBuT0c1Y0xvUEY5R2xhWVBFVUkyRUsv WDJ6RkVXSHB1b09rQWdFUW5NdG4wKy8wLy9QQ0R6K2U3Y09IQ2hRc1hkdTNhcGZ6VUxyNk1N aTZNenZObHJIL3NNZmJhNi9XMjVLeXFKYlV0T2F1YWM1NXJ5VmxWUVdycGdRTVZwSFo1enFx WXQ1dUlQbmFJRi9FNktWNGFoUy9qcDU5KzJ0VFUxTm5aK2M0NzcvajkvaSsvL0ZMNXFWMThH V1ZjR0ozbnk4alh5bXRKYllYd0dCb2FJa3Yya0NWNzR0cEhBSUJabUNHdGR2RmxsSEZoZEo0 dlk0V1dwbGZsUENlajZXNWJmMFM4VVpaRXZOYTBhODE2dXUxK0k0M01oZEY1dm94YzB5K0p1 SmZ3RjB6S2thY0Q0R0RNVUZkY24yNVJNYzJTU2sxbjhrMlc3Sm56NEVZdTVjalR6V3NYOFZy VEx1STFLbXdDYnRSMCs4RDFtZ3U2OGpHRVBCMEFSMk9HRExwUjArM3pQYStwNmNqVHJXa1g4 VnJUTHVJMUttd0NEdEgwQlBWbEpFdjJzTmZGSzNhUUpYdFV6M3g3M1B1Slp6empPZWJQRWZz eXdqOWRqWDIrNTVHbkR5R1BzNnBkeEd0TnUvQmxqQ1ZZVHdjQUpCQ1JDUjM4MDlYWTUzc2Vl Zm9ROGppcjJrVzgxclRyMGp5ZFg1bk90elEwTk9UbDVTVW5KK2ZtNWpZME5GQjMrRElpVHdm QXpVU21uL2IxVDFkcStyaHg0L3grZnlnVTh2bDhHUmtaMUNXK2pNalRrY2RaMVM3aXRhWmRW MS8zb3RUMGtwSVN2OS9mMDlQajgvbkt5c3FvUzN3WmthY0Q0R0lpVTA0N2VnTXdsSnArNE1D QmNlUEdFVUxHalJ0MzRNQUI2ZzVmeHJtTDE3UFhaTW1ldVl2WHMrYzVEMjVrci9uMm1MZWJp RDUyaUJmeE9pbGVHb1V2bzMzOTA1V2FQbTNhTkw3MmN2MzExMU4zK0RJaVR3ZkF6VVNtbklt aDZabVptWHp0WmZ6NDhkUWR2b3hreVo1TC85NEk2K21XdDR0NHJXa1g4Um9WamdnN2Fyckts NUZTV2w5ZjcvRjRrcE9UcDA2ZCt1YWJiMUozK0RKcWFqcnlkQUJjUWt6azFCYWFiaEtKbUtl ei95S05QTjM2ZGhHdk5lMGlYcVBDc1FDYWJpUElrajNNTUIxNU9nQXVKREtocys5MUx6RW5F Zk4wVWRPUnAxdlRMdUsxcGwzRWExUTRGamhUMHhQWGwvSCs0cG9LVWd0ZlJqemoyVzNQRWZz eXFuQ21wak1TTVU4WEg4alRyV2tYOFZyVEx1STFLbXdDYnRSMG02QjN1UXZXMHdGd0NaRUpI ZGJUMWRqa2UxNVAwNUduVzlNdTRyV21YY1JyVk5nRTdPTExPREF3c0hMbHlzbVRKeWNsSmJI dGp2ZGw3QmdLazZkejBZOTNUd0VBcGhDWmZ0bzNUMWRxK3FwVnE2WlBuOTdlM2o0NE9NaTJP TjZYc1ZibkVrYWVwL01Dc1czWG1tTHlKWkhIV2RNdTRyV21YV3Z5OUo2ZW52ZmVlNitwcWVu czJiT3FqK3lpNlI2UFIvWGZPaHp2eTZoM1dUcC9WQmhxT2dBZzBZbE1PWm1nSHp0MjdMdnZ2 dHU5ZS9mNTgrZVZuOXBGMDVPVGt4OTU1SkhSbzBkN1BKNGRPM1pRRi9neVZwQmE3c1ZJdEh3 WmwrZXNJdkJsUkx5STE0bngwaWg4R2Q5OTkxMHUxOTk4ODAxTFM0dnlVN3RvK29RSkUzdytI L05sdlBycXE2a0xmQm1ScHdQZ2NpSlRUcFZXZi9ubGw4cTNZVFI5Mzc1OStmbjVTVWxKbE5J RkN4YlUxZFZGMWdsTmxKbytmLzU4bjgvSGZCbXpzN09wQzN3WjlhU2NyNmNiYTdyYjFoOFJi NVFsRWE4MTdWcmp5eGo1YjZUWFgzLzlybDI3bVBoKzlkVlhVNmRPamF3VEtrUmZ4cTZ1cnAv ODVDZXBxYWw1ZVhsc1lkM3h2b3hoTG5xNThrSjFBSUR6aUV3L28vTGFUVTFORFlWQ1RIYlBu VHVYbnA0ZVdTZXN3V0Y1dXJHbXV5MnZRYnhSbGtTODFyUnJkLy8wTys2NFkvUG16WVNRcnE2 dUJRc1d6Smt6SjdKT1dBUHlkQUJBQWhHWjBFV2w2VjFkWGZmZGQxOTZlbnA2ZXZxY09YTysv ZmJieURwaERjalRveWxwODd3RzhVWlpFdkZhMDY1TDd5T05PWW5veTZqcHhhajViSWZlNGhu UGVJN3RjOFMralBhOWp6VG1JRStQcHFUTjh4ckVHMlZKeEd0TnU1Ymw2WU9EZzZwRkdJYTJw aE45b3VtRTJXQTlIUUNRUUVTc2RmMzkvVWVPSFBINWZPZlBuMjlxYWxKK2hEemRvbUppU2VU cERPUngxclNMZUsxcDE0STh2Yk96czZXbHBhMnRyYXVycTZtcDZjaVJJOHBQN2VMTHlGaTVj aVhmNkhoZlJ1VHBBTGljeVBUem80OCtVbm04S0lubjJvdXF0cmEydGttVEp2R05qdmRsUko3 T1FCNW5UYnVJMTVwMlhYM2RpMUxUdTd1N2k0dUw5KzdkeXpjNjNwY1JlVG9BTHNjTVhiV0xw aTlkdXZURkYxOVViblM4THlNUkhCbkpsYjZNL0RtMjdjWXJYcjFuK1BZaFhoZkdTNlB3WlRS R1Y5T1p0bHEyOXNMK3ZaR3lGY2Y3TWlKUEI4RGx4RkJPT1hiSjA4V044R1hFZXJxcDdTSmVh OXBGdkVhRlRTRE8xNzJJdVQ5L0MxOUc1T2tBT0JzejFEV01wbS9mdnQzajhTZ1hSc3pvUkt4 QW5oNU5TWnZuTllnM3lwS0kxNXAyN1o2blQ1Z3dZZHUyYmYzOS9XYTBIWE9RcHdNQUVnZ3pa RENNcG1kbVpnWUNBVE1hTmdQazZkR1V0SGxlZzNpakxJbDRyV25YN25uNnM4OCt1M0xseXU3 dWJqUGFqaUh3WmNRem52R2NXTThSK3pJYUUwYlRHeG9hUm8wYTVUQVBMNXQ4enlOUFp5Q1Bz NlpkeEd0TnUzYlAwN096c3hzYUdyQ2ViZ1pZVHdmQTVaZ2hnMkUwZmR5NGNWaFBqMGt4c1NU eWRBYnlPR3ZhUmJ6V3RHdjNQTjJrOVhSeEphZSt2cjZ3c0RBMU5iVzB0TFNscFlYQ2x4RjVP Z0JPSjdhNnlnaWo2Wlo1QXp6d3dBUHQ3ZTNkM2QyYk5tMWk5LzNEbHhGNXVxbnRJbDVyMmtX OFJvVk53SGJlQUNkT25QQjRQQlMrak1ySEJoTHZ6Z0lBWW84WnVocEcwNU9Ta3N4b2xTRnEr cWxUcDhyTHkzZnUzRW5oeTZqY3ZvSEF4dzd4SWw0bnhVdXQ5MlZrVEpreTVlelpzN0Z0a3FQ UzlOYldWby9IczJYTEZ2WVd2b3o4NGZWNjQ5MVpBRURzTVVOWHcyajZpeSsrK05CREQxMjhl TkdNdHBXYVhsMWRuWjJkdlh2M2JyNEZ2b3o4VVV0cVk5aXVOY1hrUzJLOTFacDJFYTgxN2Rw OVBkMmszMGpGT2xWYkxsNjhDRjlHWTAwSEFDUTZNWkZURmZIOGpUVG1PRFZQcjBDZWpuaWpM b2w0clduWDdubDZZdUhVUEYxVDB3RUFpWTRaTWhoRzAvZnQyNWVmbjgrdWZsbXdZRUZkWFow Wm5ZZ1Z5Tk9qNmFITjh4ckVHMlZKeEd0TnUzYlAwNisvL3ZwZHUzYXhKZSt2dnZwcTZ0U3Ba blFpZWh6dXkvaCtjZHg3aTJjODR6bTJ6L0h4WlV4TlRRMkZRa3pUejUwN2w1NmVIdHZtWTR0 VDgvUWhyOFk5UjI3TGE2eU1WM21UbHh2aU5iVmR4R3RVMkFUQ2FQb2RkOXl4ZWZObVFraFhW OWVDQlF2bXpKbGpSaWRpaFZQWDB3a3NYNndGTis0Q2F6QkRCc05vZWxkWDEzMzMzWmVlbnA2 ZW5qNW56cHh2di8zV2pFN0VDcWZtNlpxYTdyYThCbmw2bENWeGZLMXAxKzU1dWttSVY3dkx1 REM2MXBjUmVickZJRThIMW1DR3V0ckZ3MHZHaGRHMXZvekkwODFvRjNtNk5lMGlYcVBDSnFD cjZSOSsrR0ZoWVdGS1NrcGhZZUZISDMxa1J0dEtUWmR4WVhTdkx5UHlkR3RCbmc2c3dReGQx ZFgwb3FLaWwxOStPUkFJdlB6eXl5VWxKV2EwcmRSMEdSZEc5L295THRrREh6c3I0NTM3ZEk2 cjRuWGI4YlZEdk5SNlg4Yms1T1Nlbmg1S2FTZ1VVZ2xvckZCcXVvd0xvMnQ5R1pHbld3elpR SkNxQXdzd1ExZDFOVjBwdUxIOTkwYWExY3E0TUxyV2x4SHI2V2EwYTd5ZXpqWGREZkdhMmk3 aU5TcHNBa2FhcmtsTVdoWHJsSEZoZEswdkkvSjBpMEdlRHF3aEpuS3F3bzBlWGpiNW5rZWV6 ckJoSG9jOFBZWWxFYTlSWVJOd282YmJCT1RwdGdWNU9yQUdNMlRRalpwdWsrOTU1T2tNRyta eHlOTmpXQkx4R2hVMkFZZG91ck45R1l0WDdJaDdiMTMxVERhUTRnM3d3c1N6dWMveDhXVk1M SkNuUjlORG0rYzF5Tk9qTEluamEwMjd5Tk5qQ2RiVFFVekFlanF3QmpOazBJMmFicFB2ZWVU cERCdm1jY2pUWTFnUzhSb1ZOZ0c3YUhwRFEwTmVYbDV5Y25KdWJtNURRd09GTHlQeTlQaUJQ QjFZZ3hsYWFoZE5IemR1bk4vdkQ0VkNQcDh2SXlPRHdwY1JlYnJKN1NKUHQ2WmR4R3RVMkFU c291a2xKU1YrdjcrbnA4Zm44NVdWbFZINE1pSlBqeC9JMDRFMW1LR2xkdEgwQXdjT2pCczNq aEF5YnR5NEF3Y09VUGd5d3BjeGZ2SE9mVHFIYkNEdWlkZHR4OWNPOFZMcmZSa3RadHEwYVh6 dDVmcnJyNmZ3WlVTZUhqK1Fwd05yTUVOTDdhTHBtWm1aZk8xbC9QanhGTDZNV0U4M3VWMnNw MXZUTHVJMUttd0NkdEgwK3ZwNmo4ZVRuSnc4ZGVyVU45OThrOEtYRVhsNi9FQ2VEcXpCREMy MWk2YkhCT1RwMGZUUTVua044dlFvUytMNFd0TXU4dlJZZ2p3ZHhBVGs2Y0FhekpCQk4ycTZU Yjdua2FjemJKakhJVStQWVVuRWExVFlCQnlpNmZCbHhITU1uK0hMaUdjTG51SExHQjdrNmRI MDBPWjVEZkwwS0V2aStGclRMdkwwV0lMMWRCQVRzSjRPekVDY1ZHYklvQnMxM1NiZjg4alRH VGJNNDVDbng3QWs0dVc0UzlNSEJnWldybHc1ZWZMa3BLUWtRZ2lGTHlQeTlQaUJQQjJZZ2Jz MGZkV3FWZE9uVDI5dmJ4OGNIR1JiNE10b2t6eGROUkhka01jaFQ0OWhTY1RMY1plbWV6d2Vu OCtuM0FKZlJwdms2Y1BOV0IyUTVEb2dCR0JEM0tYcHljbkpqenp5eU9qUm96MGV6NDRkT3lo OEdWWGJuODZKVmJ2RGpaYzdGRXJXUmpZUTF0dkU5ZTJETHlQaU5TTmUxVm5zY0YvR0NSTW0r SHcrNXN0NDlkVlhVL2d5cWg1eFRCc0o4blFBWW9DNzh2VDU4K2Y3ZkQ3bXk1aWRuVTNoeTNq bHcrdjF4cXJkNFJhckpiWERxNDBROWpXUXVPdXRXRStQWVVuRXkzR1hwbmQxZGYza0p6OUpU VTNOeTh0akMrdndaVlErVk1KcUpjTnR1cGJVeHJHM01RRjVPakFEZDJsNlRIQndubDRocUtS dDgzU3U2WW1ieHlGUGoyRkp4TXVCcGc4YkIrZnBvcVpiQnZKMEFHSUNOSDNZSUUrUHBvZGlN VFlGa2FmSHRsMGJ4bXRxdTRpWEEwMGZCbzczWmF3Z3RYSG80WVppc29IVUZOY01hNithNHBy YWVQUTJ0bEhEbHhIUE1YOG1HNGh5QzN3Wnc0TThQWm9laXNXOFhpL1pRTnlXcDdNa0hYbDZy RW9pWGc3eTlHR1RRT3ZwWkFNWjN2WHA4YmlWdEpiVWRneXBOVjFtcjRSZVQxZHBPZ0N4QXBv K2JCSW9UemZRZE0wOFhkUjBDL0lhcHM3R2VibzRUWkduRzJPM2VNMXVGL0Z5M0tqcEsxZXVa S2FNMU9tK2pMV2tOaUh5OUxCSnQ0R21KeWpJMDRGSnVFN1QyOXJhSmsyYXhEWGQyYjZNQnBw dWh6eWRpWnBNbmk3S04vSjBZK3dXcjludElsNk91elM5dTd1N3VMaDQ3OTY5WE5PZDZzdkk5 S0xDM25tNmdhYXJNTkQwQkNYaDh2UUU2cXJMY1plbUwxMjY5TVVYWDZTVWNrMTNxaS9qM0tk enZGN3Y4cHhWWkZpK2pJdlhSOW51c09KbDNvcTFwTFlsWjFVdHFUV29UZlVwMjlLU3MwcStY YnY1OXJIWUU4aVhjZG5UczZPSjEreHh0dHZ4aldPODd2SmxaUC9laUVPZDY4dm85WHByU2Ez TjgzU3YxOHY2aVR6ZC9pVDBhTHNLZCtYcEhKNm5POVdYa1VtZWdhYmJZVDJkcS9tbHJpcm1J dGJUbzJ3MzV2SFdsTlRFc0VMN3g0djFkR1BzcStsTzlXVzhKSGxlVzErZmJxRHBZa25OZlUz dW9Ja2dUd2NtNFZKTmo0WkV5ZE9ORjE3TXk5T05wY280VDlmTFc1R25EN2RkNU9uV3RHdkRl S0hwd3lZaDh2U0tpQmJUbzgvVHlRYkNWc25EWnFEOGlwZUt5dytEMU5VWmVib3lPaDVzb3FU cXRZWi9TQUU3d0E0UU5IM1lKRVNlSGxiVFRjclR1VkxyL1M4NlhrelU5RnBTeTc4UFZKZXg2 Mm02cXFRQk1ubWNmRzFET2lNamFyUjRQYjd5TmQ5aS83eTFwcVNtWXlpOHB0c3dielcxWFZ2 RkMwMGZOZ25reTFoQmF1OHZyaUhTam93L1BrZm5GT2oxZXU4dnJxa2d0Y1kraThVYmlvY0lZ U1haYy9IN3hiV2tscmt0cmxtelJsV25XTnVsdlRZVUQxMzJPSXpld1M1NmwwUlZUNVRPaTh4 N2tudEpjbDlHc2VjeDcxVk1ubXZESFZPN1BjZDMzT0xTT3BzNThHVWNOaEhrNlpMcnk1SzF5 WlNNT0U4WDAwek5KUUpWdnNsTEt2TnVnKzd4U3kxL1hIanBJTXFFWFZ4Mkg3cHlHUGx5RFd1 WC9TZFZnM0UyeUd1VURVV1RUMmtNRkNIdm55cTV0SVVRNVhxUlFaNnUvTWc0OFRjSXg0dzhY V2F4Sys1NXEzSm1XdEN1d2U4bGVzV01sN0NRcDhlQkNOYlRJMWcybFN5dlZ5eXl4WFN5Wk04 UXVhS3JvcmlJaXFOOGhOVjB4aFhGT29oSzAxWFh3TlR5Mm9oYTA5bnlDMStIMFJ0blplY05R bEJWb2hvSDQ2T2dYRTNTZkt1NkRGL1Y2SlhWYVdpNnpCUXlkYjNiZ2g4d1l0Si9BMDAzZFh6 azJ6S3ZHOUQwQ05IVWRIRTBXZjdJUDlYTHZQajZzbkd4a2cwbHh2bXlxdDJ3MnEyWHB5c2xp V3dnSlJ0S2hnaGhPZVlWSFJOMHAyUkRTZTJWMHF3WEw5bEFWQms2ZXlnMzhuaUgrRFU4Vjhv ZjEzVFc3cVdQaU1ib3NkZHpWdWFveDVhb0EyRzFzWGcxS3hISFdYblV2RjZ2TW5EV0s3WU1y ZFIwMVY2c3ZQTDRLb2ZhNi9XcWdsS09qQXJsZWpkdGF4T25pbDRVTXZKblFaNnV1VjR2bjdl U3kzOFA4ZHBVVVhpOVh0WGZuUWJ5S2grSWFnQTFhMVlXTTlaMHBXNm9VUGJjNFBpS0I5b01H YlNMcHRmWDF4Y1dGcWFtcHBhV2xyYTB0TkJJZlJuRjRZdnlJVXFrWmhtWllwZHE2eGoybGVs c2w0ckwwc004elZXL1lmS1BLa2h0eHhEaFpYaDVQVTFYUHJqMkdXaTZNdDRLaGFiL3VNYmlK VVBlSDF1dlVDcW1ZcFZEYkoxMW00VXdSSWd5TGpGZXljT25HaXZXZ1FxZEI2dVdLUTZMam0z aHZ3K0xxVDN2dG5FM1ZCM21vc2FIWFhYQ0t3ZUVYUGxOb3lwRHJ2eWJRMDlFTkN2Uks4RGpW ZlZmVDh2MFpPdUthYThZQkRHckVBK29ja2hWYWl0NTZEVzZKSGVTUnY5UU5hUTNYUjJ1NlE4 ODhFQjdlM3QzZC9lbVRadllmZitSK1RMV0NpYzhreHYrMXV2MXZuK3FoRjMrd1EvQWoxcERM dVZmUTRTdzlFZXBJRnhyT29aK1ROUFdyRm5ERllIdHlCNnNHS3VRRlQ1VlV2S2pVQTRyVDcr czZjckgvU1UxZXRxa1daSzFPK1FsUXgySzFRWkZSc3k2cDFMelMzc3BaTDNtY3J0TWZKWEtl Mm1RTDM4TjhKTDhVNjZuYkVEWU04M0pNZEJadlhpVjN5dEs1V1VMNVdIbFcyOEEyWUhqaDd1 QzFKNHFLUkcvbnpRZmJGNnBqcnR5YnJBdGMxYm1LS2NmRDRIdnlEYnl3OEcvRGxsMHJCaWZ0 ME9Fc0VDVSs3SmlGZnhmbWhEaTlYcjVuMDJzSkN2RGVzZ0ZsSTFlN1pXVG1idEVxQ1JKL0R0 TWVSN3hIaDV2eXhFSHR2YnlhUE12Uzk1dTdlVmpwL3dlVlo3Q2E5YXNxVlZNQUhXWmNPa0FB Q0FBU1VSQlZQWnA3ZVdycy9nNHN3RmtKVlc1Z25KZmZueDVaN2d4QmcrZm43K3FBVlRHeTdm VG5CemVCRzlYVkhiMlY0c1pXbW9YVGVlY09ISEM0L0hRU0gwWkpXVXVqbyt3bXE2ZHAxK1pM RWZlcmtSVlExY0t1dkdPeWkrYlMyZDRMSG9iNTJPazBIUTg4SWorb1Z5bDVCdGRvZW1uVHAw cUx5L2Z1WE1uamRTWGNYbk9xZ3BTYS96OC9Pdy9oUzJ6UEdmVi9TVTFNYXlObDV6N1JnN3BJ SFBmeUNIeXZvd2RaTzRiT1RGcnQ0TVl4RHQwdVl6ZXM2cGRzVGJlVzhrZVZ1VThaOFk0UjNO ODV6NmQwekZFVEdyWGh2R2EyaTdpVmM0cjVSYUgrekpTU2x0Yld6MGV6NVl0VzlqYnlId1pL K0w5aFJ6MjhXUGFPOHc4ZmNnYlZlWW9tYWZyWmVoNisycHVTZlE4WFdZdENBODhodnZnYTJL WDNqbzdUNit1cnM3T3p0NjllemZmRXBrdm84eklTcTVFeDdaWXhaWHIyZ2FhcnIyZUxnamwv U1UxdklCeXUrYksrMUM0SlJTTjd1azhsUEhxcVR6YnlOb04rMVZVbGZPY0dlT3NQcDJ1L0ZW QXBrSTJrbEcyYTAyOFF4SmZvaWJONXdqaTFleHR6TnUxVDd4NkQ0ZHJPcm1TaXhjdlJ1akxL Snk2b3NacGJtUlhhNGdibFNVdlhhOHQ3Q3NLcTBHN1YwaWs4cTFPZW03R1kranlReU5laVR5 ZHg2dlVkRDU2eWxaNEFkNlc1bGlwZXNMZWlvZmowblg2M3ZESFYyUGZLNzkrcmhqenl5OVUx K09UeXo5Tjg3bWhtZ3lhRTBhMVVXOWVpZkhxelVuMTRJUUx6YmhkWlcyNjdXck9EUzBoRmt2 cXpTdmx3TEszZXFNbkRxRE04ZFdOMXlzUnI4UXgwanZvbXZ1cW1oaTY4aFQ0Y2J1ek5UMG1Q UFhVVXpLS1Z2SitpZlhGNUV2T2VYQ2pXdTR0YVRmNllrd3lkRXZxUkhRcFhzdkgyYUNZVWl0 amYzenJjb3dIaEcyL29qYit4Uk5OdkN0MkdCVzQvUFdtMGE2cURDOTV1Y0pMcVlEZThlWHhH alN0R1lWbTY4cEFZaklzY3JNMGt1TXJWRnVoTk5udWNNMTFMOUVncWVsNDRHSDhxSkJZZzhJ RGorRStWUE1LbWg0ZWgrVHBZZk1hYzlwRnZJZ1g4Vm9XTDRHbUc4TjlHVWtIS1g2L0dNOTR4 ak9lYmY0TVg4YndJRTlIdklnWDhTWkV2QVI1dWd4WVQ4Y0REendTNVFGTkR3L3lkTVNMZUJG dlFzUkxvT2xVMHBkUmJqVHh3QU1QUE9MNzRKcGUvK0NEMzMvMVZheDBNcEUwWGNhWFVXWW9u ZkU5NzdhOEJ2RWlYaWZGU3hTYTd2VjQxa3lmL3NGTEwvVjFkMGV2azRtazZUSytqSktqaVFj ZWVPQVIzNGRTMDlsancvLzVQMzk3NTUwb2RUS1JORjNUbC9IbzBhTlBQUEhFaW1YTEhydnZ2 djk3NjYyUEwxejR4Qk5QR0QvLzd2Nzd3NVo1Zk9IQzMvem1OekdzVGI1azFTOStFWmQyRVMv aVJieVd4ZnY0d29WTXRaYi85cmMvYXZxdHQvNXR6NTRvZFRLUk5GM0dsMUdtbmkrLy9OTDZZ dklsdTk5L1B5N3RJbDVyMmtXODFyUnI4M2lWc0xXWDkvLzhaOWV0dmNqNE1zclUwOVBUWTMw eCtaSVhObTJLUzd1STE1cDJFYTgxN2RvOFhpWDFpeGQvMzlrNTNMMzBTQ1JObC9GbHRMNVhN YWYvN05sNGQ4RlNFSyt6UWJ3V2swaWFIcGIyV1AvSEVBQUFTQ3djcGVtSkFpRWszbDBBNW9K RDdHenNmSHloNlNiQy9yL0hxRkdqcGsrZi90eHp6L1gzOXhzVVU4NlMrdnI2d3NMQzFOVFUw dExTbHBZV1pXSHh4cXV3dDJJQmt5Q0UvTmQvL1JkLyt4Ly84Ujk2cC9xd2pob09zVTJRUDc2 Mk9vV2g2U2JDam5GdmIrL0hIMzk4NDQwMy90dS8vVnZZd293SEhuaWd2YjI5dTd0NzA2Wk5x aXQ4eEJ1dnd0NktCVXlDRURKNzl1ekJ3VUZLYVc5dmIybHBxZDQ1UDZ5amhrTnNFK1NQTHkv UFg4ZnhGSWFtbTRqeUdIZDBkRng3N2JYaWRzM0NuQk1uVG5nOEh1V240bzFYWVcvRkFpWkJD UG5qSC8rNFk4Y09TdW5telp1ZmVPSUpmcGhVUjFQbXFPRVEydzM1NDJ1dzBmcFRHSnB1SXNw ajNOdmJtNUtTSW03WExNdzRkZXBVZVhuNXpwMDdsUnZGRzY4MGI4VUNGa0FJT1g3OGVFVkZ4 ZURnWUdscDZjbVRKL1hPK1dFZE5SeGlteUIvZlBVMnh1VVVocWFiaVBJWUh6MTZOQ2NuUjl5 dVdaaFMydHJhNnZGNHRtelpvaW9tM25nVjlsWXNZQkxza04xMzMzMi8vLzN2Zi9HTFgxREZR VlFkeldFZE5SeGlteUIvZkRVM3h1c1VocWFiQ0Y5UFAzVG8wT3pacy9sNmV0Z0pVVjFkbloy ZHZYdjNickdZZU9OVjJGdXhnRW13US9iKysrOFRRdmJ0MjBmMXovbGhIVFVjWXBzZ2YzekZq WEU4aGFIcEpzSitDaDg1Y2lTNzdxV3ZyNDl2RjRzcGZ6cFhiYmw0OFNMZlJienhLdXl0V01B a3hCTmI3NXlYT1dvNHhIWkQvdmphNmhTR3BnTUFnSE9BcGdNQWdIT0FwZ01BZ0hPQXBnTUFn SE9BcGdNQWdIT0FwZ01BZ0hPQXBnTUFnSE9BcGdPM1kyek1CRUJpQVUxUFlIcDZlcFl0VzNi MTFWZVBIVHYyK2VlZmozZDM3QTRoNUlVWFhxQ0dwcW1BMDk3ZVRnakIvNW1Sd1ZaVEM1cWV3 Q3hmdnZ5KysrNzc1cHR2dnYvKyswY2ZmVFRlM2JFN2hKQ0Nnb0xCd2NIcDA2ZkgvY1N6UDJ2 V3JCa3hZc1NhTld2aTNaRUV3RlpUQzVxZXdFeVpNa1gxdjh5VjgwbDVIL1B5NWN2VDA5UEx5 c3JFWXU2QkVITExMYmVzV3JYcTFsdHZWUTZPYXRCZWZ2bmw4ZVBIWjJabWJycjh6NExkT1Z4 MzNISEhndzgrZU1jZGQ3QzNaV1ZsN0g4N05EYzN6NXc1azFMYTF0WldVRkNRbHBhMllzVUtZ eU1VeHlOT0xUYXZVbEpTK1AvRStQM3ZmLy9yWC8rYVV2cXJYLzFxeVpJbGZNZVlkd2FhbnNB a0p5ZXIvbmVTbnFhLzhNSUxnVURnb1ljZXNyUi9Ob01ROHNZYmI0d1lNV0xyMXEyYUE4VmVy MSsvUGhnTU5qVTF1ZGtCTVJBSWpCa3o1cHR2dmhrelprd2dFS0NVcmwyN2x2OERoM1hyMWxG S1MwcEtObTdjR0FnRU5tM2E1RTRwNStoTnJmNysvbjM3OWsyYU5JbFMydGZYZCtlZGQvN2hE Mys0ODg0N3VmV1RHVURURXhpRFBMMnZyMCtwNmIyOXZWWjN6bjRZNkxqeXRaN1ZtcXRvYkd6 ay9sT05qWTJVMG5QbnptVmtaSHo1NVpjWkdSbmZmZmNkcFRRbEpTVVlERkpLZzhHZ204ZUth azJuOWV2WGV6eWVFU05HRUVLU2twTFlSMjF0YllTUXRyWTJVenNEVFU5Z3FxcXE3cnZ2dmxP blRwMC9mNzZxcW9wU09tSENoTjI3ZDNkM2QyL1lzTUhsZnc2TFNHcTY1bXUzc1dUSkV2YXIr L1BQUDg4WENpb3JLMis0NFlaNTgrYXh0OFhGeFgvOTYxK0R3ZUIvL3VkL3VubXNxTmEwU1V0 TGEycHFDZ2FEUHArUGJRa0dnNldscFhmZmZYZHBhV2wzZDdkNW5ZR21KekNoVU9qaGh4K2VN R0VDdis2bHVybzZJeU5qL1BqeDY5YXRNOUIwZDU2QjRvbW5hWkVxbG5maGNPWGw1UjArZkpo U2V2anc0Ynk4UExheHVibVpFTkxjM016ZXRyYTI1dWZucDZXbFBmNzQ0eU5HakdBYlhUaFdW R3ZhUFB2c3N4a1pHUmtaR2F0WHIyWmJGaTFhdEdEQkFrcnBQLy96UHk5ZXZGamNNVlpBMHdF QWtUTXdNUERXVzI5Tm56NDkzaDBCbDRDbUF3QWloQzBXNStYbC9mZC8vM2U4K3dJdUFVMEhB QURuQUUwSEFBRG5rQmlhN3M0ZlhnQUFZTGdNVDlPSkRwb2xrNUtTcnJubW1qLzg0US9zSWxZ cjZlenN2T21tbTBhT0hIblRUVGQ5OWRWWEZyZHVHZUw0TnpRMHpKZ3hZK1RJa2VYbDVlKzk5 eDdia3BlWGw1eWNuSmVYdDMzN2RzMTZHaG9hUEI1UGFtcnFqVGZlZVB6NGNVcnBsaTFicnJ2 dXV0VFUxSmt6Wis3ZHU5ZWFjTXhHSEM1eFN5Z1VldVNSUjdLenMvVW1OdFVhWk9OeklSSFJD OGZyOWZLTjRyU1JxVWM1VmxsWldTYjEzMkxFS1NGS2tJd29pZWVkeklSVU1YeE43eEFlT3Bv K09EaDQ4dVRKK2ZQbi8vR1BmNVRwU2d5Wk8zZnVpaFVydXJ1N1Y2eFlVVmxaYVhIckZxTWMv OHJLeW82T2psQW90SDM3OW9rVEoxSktNekl5ZHUzYUZRcUYvSDUvUmthR1pnMVpXVmt0TFMw OVBUMCtuKy9uUC84NXBYVHUzTG1IRHgvdTd1N2VzbVdMdzI2bk5MNnlzNnFxcXF5c3JLT2pZ M0J3VUs4R2NaQWRJK1VxVkhGOThza25URnpZVzNIYVNOYkRXTEpreVpOUFBobkQzc1lSY1Vx SUVpUWpTdUo1SnpNaFZaaW82ZXpGeVpNbjJhMnhIMzc0WVdGaFlVcEtTbUZoNFljZmZzaksv T00vL3VPOGVmTnljM1BaalF6c3UwaHBrc0EzS21zV0hUbFVaR1ZsblQ1OW1sSjYrdlJwaDBt U2lEait3V0N3dnI2ZVhWNVdXbHJhM056YzA5T3plL2R1WnRNaGtwV1Z0V2ZQSG5aeWpoOC9Y dm5SeVpNblUxTlRuWFFicXJHbVQ1NDgrZDEzMzVXcFJ6bkloSkNNakl6MDlQU2YvdlNuSjA2 Y2lHRnY0NHZxTDVpaW9xTFhYbnROcWVsNjA4YWdIc2IzMzMrZm1abloxZFVWOHo3SEVlV1VF Q1ZvV0tMRXp6djVDY2t4WGRQNysvdFRVbElvcFFVRkJhKysrbW93R0t5dXJpNHNMR1JsdUov bm1ERmorTDVLa3dSVmJWVE9rV1BFaUJFREF3TzMzSEpMZjM5L2NuS3l6RUFrTHFyeDUzL1ZI ang0a0ZMYTJ0cWFtWmxKQ01uTXpOUzdLYm11cnU3YWE2OGRQWHIwNDQ4L3JoeXViNy85dHFL aXdtR09qOGFhbnB5Y3ZHTEZpdlQwOUp5Y25HM2J0aGxVb2h4a3h0bXpaNnVxcW02NjZhYVk5 emxlS0VmbXNjY2UrOFV2ZnFIY3FEZHRqT3RockY2OW10MkE0eGhVVTBLVUlIbFJVcDUza2hO U2lYVjVlbkp5TWx0WUR3UUNUT1dKNHM0OW9tK1NRQVZORCt2SWtaV1ZkZWJNR2VyV1BEMFFD R3pkdXJXb3FJaFNtcCtmNy9mN1E2R1F6K2NyS0Nnd3JtcnYzcjFUcGt4aHJ3OGVQSmlibTd0 aXhZcUJnUUV6dWgwdmpEVTlNelBUNS9QMTlQUzB0TFFZci9ZcUI1blQzZDJkbXBvYXc5N0dG K1hJc0xOU2M1MWRPVzNDMWtNcDdldnJ5OG5KTWR2MnhIcVVVMEtVSUVsUlVwMTM4aE9TWSs1 Nit0ZGZmLzNMWC82UytVVm81dW1xWjlFa2dkY1c5cldTKysrLy84a25ud3lGUWs4KytTUkxM aHlNY2hBV0xWclUyZGtaQ29YcTYrdlpuOFBqeG8zeisvMDlQVDI3ZHUzU1cwK25sQTRPRGg0 OWVyU2twSVQ1eHRUVTFGUlVWTEFsTW9kaHJPbjMzbnN2UDRYMFRqeHhrQmsvL1BERHFsV3JL aW9xWXQvcE9HR2NybEZoMmtqV1UxZFhOM3YyN0ZoMTBnNklVMEtVSUJsUkVzODdtUW1wd2tS TlQwcEttamh4NHU5Kzl6dm0xYmx2Mzc2Q2dvTGs1T1NDZ2dLK25xNTZGazBTeUpWUU9VMC9j ZUxFckZtejJDL3luWjJkTWdPUmlJaURVMXRibTV1Ym01S1NVbFJVNVBmN0thVjFkWFhzVDUr cFU2ZlcxOWZ6SGNWNnNyT3pseTVkR2dxRnhKb3ZYcnhvZVhDeFIzTXVxYlljUDM1ODFxeFpL U2twSG8rbm9hR0I3NmlzUnh4a3R2dW9VYU51di8zMnp6Ly8zUExJWW84NE1zcVBsR1dVMDRi cVRDMVZQYk5telpKY1JrZ1V4Q2toU3BDbUtCa1AxOFdMRnpVbnBERm1YY3NJQUFEQWVoTGpu aU1EOEFVREFBQ2NoTmQwQUFBQUhHZzZBQUE0QitzMFhXWlZCQ3NuQUFBUURkYjlSaHBEVFlm MHl5QnpkUFE4S0pTMkhtNUF4b3RETENQanBaUFFpR1lqTWtaQVlobUgvZFlsaGlQT0JMMkJN ajZ6WXVLOE5IeE5YN0pIL1lDbTJ4ampzZEwwb0ZEWmVyZ0JTUzhPVlJrWkw1MkVSalFia1RF QzBpdmpzQm1sREVlY0NacURFUGJNaW9uemtsbWFmdWpRb1prelp5WW5KeFBGMWF3cW41YWpS NC9lZlBQTnFhbXAwNlpONC81MmxOS3paOC9lZHR0dG16ZHZwam91TWFydlNiR2VXYk5tc2Yr YTZMeTdHNGFMOFlra2VsQ0l0aDV1UU1hTFF5d2o0NldUMEJpWWpjZ1lBYW5LT0d4R0tjTXht QWw4RUdUT3JKZzRMNW1sNlNVbEpldldyZU4zSWxBdG41Ynk4dkxYWDM4OUZBcnQyclZyMnJS cHJFeEhSMGRaV1JrMzhCTHZQcVhDNUJEcjJicDFLek1GS3k4djM3bHpaOWk0SEl6eGlTUjZV SWkySG01QXhvdERMQ1BqcFpQUTZKbU55QmdCaVdVY05xT1U0ZWpOQk9VZ3lKeFpNWEZlTWt2 VFUxSlMyTzJqeW4xVlBpMHBLU2s4NDJidUxvU1EwdExTN096czl2WjJWbEowaWFIQ29JajE5 UFgxWFhmZGRkdTJiU3NvS0pEM3FIUWtZZk4wbFFlRmdhMkhnNUh4NGhETERNdExKeEhSTkJ1 Uk1RTFNMT093NmFRTVIzTW1xQVpoV0dkV05NNUxabWw2Y1hIeHVuWHJlbnA2bFB1cVhsZFVW RFEyTm5aM2R5dTNuemx6WnNlT0hibTV1ZXp2WE0wOGZlVElrVXBIVTdFZVN1bnp6eitmbnA2 dVo4YnJIb3huajRFSGhjUE9RR05rdkRqRU1wSmVPb21MYURZaVl3U2tWOFpoTTBvWmpqZ1RE QWJLZUJ5aWQxNHlTOU0vL3ZqajB0SlM5dFVrUnNKZUh6dDI3UGJiYjA5TFMrTmZYTHhNVFUz TnJGbXpnc0dnNkJKREtWMjJiQm5iaTcwVjY2R1UvdjN2ZjgvS3lyTCtYeXpaQjNJbGZLT3lq SUV4anNQT1FHTmt2RGpFTXBwZU9rNUNOQnRSVFNwbUJLUWFLTEdNNWxSTVhNUnd4Sm1nT1ZC OGQ4M1hmSzhvblplYzZmY3lNRER3bDcvOFpkbXlaZkh1Q0FBQVdJb3o3eU1saEpTVmxiSFZH d0FBY0EvTzFIUUFBSEFuMEhRQUFIQU84SHNCQUFEbmtKQitMMEFlR2I4STBjbEV4di9Fa2No TWFRd1hRMmFzUkFNVGNZdXJDT3Yzb3ZLTmlXQzRocTNwUTE3MUE1cHVaeVFOT2xST0pqTCtK dzdHZUI1aXVKUVlqNVZvWUNKdWNROWgvVjVFMzVnSWhzc3NUVGZQNzRVN0J6UTNOenZTWk1N a0RQd2lSQ2NUR2Y4VEJ4TldwekJjbkxCanBUSXdNYkEwY1RZeWZpK2liMHdFdzJXV3Bwdm45 N0oyN2RyNTgrZFRTdWZObTdkdTNUcVpJSUd4WDRUb1pDTGpmK0pnakhVS3c2WEVlS3hFQXhN OVN4UEhJK1AzSXZyR1JEQmNabW02ZVg0djU4NmR5OGpJK1BMTEx6TXlNcjc3N2p1WklGMU9X TDhJMGNsRXh2L0V3WVROUFRGY0hNbjFVcVdCaWQ0V1p5UGo5MkxnSUNRL1hHWnB1cWwrTDVX VmxUZmNjQU56WGdUR3lQaEZpRTRtTXY0bkRzWllwekJjU3NKcXVzckFSSE9McXpBWU1VMEhv ZUVPbDFtYWJxcmZTM056TXlHRU9hUURZMVJYS0drYWRJaE9KZ1krTU01Rzg0SXVESmNtTW1Q RlBoSU5USlJiM0lhb2hCdzkzNWhoRFpjei9WNEFBTUNkNEQ1U0FBQndEdEIwQUFCd0R0QjBB QUJ3RG1acE9oYlpBUURBZXN6NmpSU2FiaFBnOXpJc1pINzJ4M0F4WktaV1EwUERqQmt6Um80 Y1dWNWV6dTRWRDRWQ2p6enlDTHRGM3NFcUlVNGtwV0R5Zis2cWlkSVRKb0twTmZ4ckdUdlVE Mmk2bllIZlN3UVl6MTRNRjBObWFsVldWblowZElSQ29lM2J0MCtjT0pGU1dsVlZWVlpXMXRI UjRZWi8vcTQ1a1pZc1dmTGtrMC9xN2FMeWhJbGdhcG1yNlVybkZ0SGRaZTNhdFI2UGgzbkM0 RHZBYk9EM0lvL3hiTVJ3cVRDWVdveGdNRmhmWHo5OStuUks2ZVRKazk5OTkxMExleGRQeElu MC9mZmZaMlptZG5WMWFaWVhQV0VpbUZvbWFyckt1VVYwZHhrelpvelg2KzNvNkZEZWJnck1B SDR2dzhKWTB6RmNTb3luRnIyODVwQ1ZsWFh3NEVGS2FYSnk4b29WSzlMVDAzTnljclp0MjJa aFQrT0FPSkZXcjE2OVlNRUN2ZktpSjB3RVU4dEVUVmM1dDRqdUxtKy8vZlk5OTl3emJkcTBz V1BIUHZQTU16TGRCUkVBdjVmaEVqWlB4M0F4d2s0dFJpQVEyTHAxYTFGUkVhVTBNelBUNS9Q MTlQUzB0TFFZTHlzN0FOVkU2dXZyeThuSlllWmNtb2llTUJGTUxSTTFYZVhjSXJxN01BWUdC dmJ1M1p1ZW5pN1RYVEJjNFBjU0FjYWFqdUZpeUV5dFJZc1dkWFoyaGtLaCt2cDZaaFY3Nzcz M2NrMTMvUGNmRVc3OW56MTc5ckIyakdCcW1mNGJLWGR1MFhSM0lZUXdjNE9OR3pmS2RCY01G OVVWU3ZCN01VWTFYSHlqc2d5R2l5RXp0V3ByYTNOemMxTlNVb3FLaXZ4K1A2WDArUEhqczJi TlNrbEo4WGc4RFEwTjhlbTYrV2hPcEZtelpxbVdtL1N5Qjc0OWdxa0Z2eGNBQUhBT3VJOFVB QUNjQXpRZEFBQ2NBelFkQUFDY2c5V2FybHg4eDBJOEFBREVsbmorUmdwTmp6bWltVVpEUTBO ZVhsNXljbkplWHQ3MjdkczE5MnBvYVBCNFBPeTM5ZVBIajJ2VzR4SmtQRXpFd1hHRDM0c1l0 VklCOUs0MEY2ZWZ6SVIwQU9JNUpUTkpZbUlsTkd4TnJ5QzFxZ2MwM1Q2SVpob1pHUm03ZHUw S2hVSit2NS8vaDBNVldWbFpMUzB0UFQwOVBwL3Y1ei8vdVdZOUxrSEd3MFFjSERmNHZSaE1D UU1ERTNINnlVeElCeUNlVXpLVEpDWldRaVpxT2lGaytmTGw2ZW5wWldWbGZJdTQ5bUxzQ2FO WkQ5QkROTk1vTFMxdGJtN3U2ZW5adlh2M3pKa3pOZmZLeXNyYXMyY1BtMy9zeGhCWG1YSm9Z dUJoSWc2T0cveGU5S2FFc1lHSk9QMWtKcVFERU04cG1Va1NFeXNoY3pYOWhSZGVDQVFDRHoz MGtIS2o4blZZVHhpOWVvQW1vcGxHYTJ0clptWW1JU1F6TTFQdnB1UzZ1cnBycjcxMjlPalJq ei8rT1BPVWNKVXBoNGl4aDRrNE9HN3dlOUdiRXNZR0p1TDBrNW1RRGtBOHAyUW1TVXlzaE16 VmRESE5VV2w2V0U4WXZYcUFKcUtaUm41K3Z0L3ZENFZDUHArdm9LREFlUGU5ZS9kT21USkZz eDczRU5iRFJCd2NOL2k5YUU2SnNBWW00dlFiMW9SMEFQeWNrcGtrTWJFU01sZlRqVGNTT1U4 WUxMdkxJNXBwakJzM3p1LzM5L1QwN05xMXkyRDVjbkJ3OE9qUm95VWxKVlZWVlpyMXVBUVpE eE54Y056Zzk2STVKY0lhbUlqVFQzSkNPZ0RWT1NVelNXSmlKV1NkcG91WHl2QUNCcDR3WWoz QUFORk1vNjZ1enVQeE1GT2QrdnA2Vmt6ejBHUm5aeTlkdWpRVUNtblc0eEpVczFUVHcwUWNI RGY0dldoT2liQUdKdUwwMDV5UXprTThwelFuaVdxNFltSWxCTDhYQUFCd0RyaVBGQUFBbkFN MEhRQUFuQU0wSFFBQW5JTjFtajZzeTJQNFI4YnI5VmpLQndBQUpkYjlSaHF4L2tMVG8wSEd1 UVYrTHh5WldhMW53ZUgxZWgwOFZ1S3dORFEwekpneFkrVElrZVhsNWZ5dWJ4WGlXRG5TNzBX MENSSW5rdVNacUJxY0NLNURHYmFtMTVKYTFRT2FibWRrbkZ2Zzk4S1JtVkdhRmh5ZmZQSUpP MTNON1YrOFVRWllXVm5aMGRFUkNvVzJiOTgrY2VKRXpmTGlXRG5TNzBXMENSSm5nc3c1cFRj NHR0RDB0V3ZYZWp5ZTVPUmsvaVZEQ0huNTVaZkhqeCtmbVptNWFkTW1YcUZ5ZHoyL0YyWE5y YTJ0QlFVRmFXbHBWVlZWN0NPeExjQ1JjVzZCM3d1SEVKS1JrWkdlbnY3VG4vNzB4SWtUbW1W RUM0NVFLRlJVVlBUYWE2ODVmdnFKQVFhRHdmcjYrdW5UcDJ1V0Y4ZksyWDR2M0NaSW5FZ3k1 NVRlNE5oQzA4ZU1HZVAxZWpzNk9ucDZldmkrNjlldkR3YURUVTFOeWxzVGxidnIrYjBvYTU0 eFkwWk5UVTB3R0h6bGxWZllSMkpiZ0NQajNBSy9GeFZuejU2dHFxcTY2YWFiTkQ4VkxUZ2Vl K3d4ZG8rZjJ6U2RaVkZaV1ZrSER4N1VMQytPbFlQOVhrU2JJT1ZFa2ptbjlBYkhGcHIrOXR0 djMzUFBQZE9tVFJzN2R1d3p6enpEOXUzcjZ4TzdxSHl0NS9laXJEa2xKU1VZREZKS0E0RUEr MGhzQzNDRzVkd0N2eGRPZDNkM2FtcXE1a2VpQmNlSUVTT0crL05TZ2lKR0Z3Z0V0bTdkV2xS VXBGbGVIQ3VuK3IzbzJRVHhpU1J6VHVrTmppMDBuVEV3TUxCMzc5NzA5SFNxcitQSzE1cCtM NU1tVFZKbUFVVkZSU3hQcjY2dVZ1NnJiQXR3SkoxYjRQZWk1SWNmZmxpMWFsVkZSWVhtcHdZ V0hNNFdkSHBsZ0lzV0xlcnM3QXlGUXZYMTlXekpUa1FjSzBmNnZlalpCQ2tua3N3NXBUYzR0 dEIwbHJBd1Y0ZU5HemRTTFIwblYwSXAxZlI3K2V0Zi81cWVuczdmN3QrL1B6OC9QeTB0YmZu eTVjcDZsRzBCanFaTmgrWmYwUEI3b1plSFl0U29VYmZmZnZ2bm4zL09OeXJMR0Zod09GalR4 Yk8xdHJZMk56YzNKU1dscUtqSTcvZnpZc3E5eExGeXBOK0xhbkF1WHJ3b1RpU1pNMUVjSEhI WXd3Sy9Gd0FBY0E2NGp4UUFBSndETkIwQUFKd0ROQjBBQUp5RDNUVWRpL1VBQUNDUDNYOGpo YVpIaWVoRUlTS2FjdWhabWpnZW1TbU40V0xJakpWb0plUkl2eGQ1akUyQnhNRVJCekFzdzli MGppSDFBNXB1WjBRbkNzMHlLbE1PVFVzVDkyQTg2ekJjU296SFNyUVNjcVRmaXlSaFRZSEV3 UkVITUN4bWFicW0zMHRWVlZWYVd0cjA2ZE5iVzFzcHBSOSsrR0ZoWVdGS1NrcGhZU0c3WFAv UW9VTXpaODVrZS9FV0thVm56NTY5N2JiYk5tL2VMQk1TMElRN1VZZ2ZpYVljNGhaWEVWYW5N Rnljc0dPbHNoSnl0dCtMQVRLbVFPTGdpQU1ZRnJNMFhkUHZwYnE2T2hnTTF0VFVGQmNYVTBv TENncGVmZlZWZGtkb1lXRWhwYlNrcEdUZHVuWHN0cGNmVyt6b0tDc3JhMmxwa1lrSGFDSTZV U2dSVFRuRUxhN0NXS2N3WEVxTXgwcTBFbkt3MzRzeE1xWkE0dUNJQXhnV3N6UmQwKytGK2JR RWcwRm1nSkNjbk15ZFcxSlNVaWlsS1NrcGdVQkExV0pwYVdsMmRuWjdlN3RNUEVCRXo0bUNJ NXB5aUZ0Y1JkamNFOFBGa1Z3ZDVWWkNUdlY3Q1l1TUtaREI0UEFCREl1NTYra3F2eGVXbGRm VTFNeVlNWU5xNWVuRnhjWHIxcTFUMmlzU1FzNmNPYk5qeDQ3YzNGejI1eTBZRm5wT0ZFcEVV dzREU3hNM1lLeFRHQzRsWVRWZFpTWGtTTCtYWVdFd1lwcURveHJBc0ppbDZleTdTT1gzd3Ri VDgvUHo5Ky9mVHluZHQyOWZRVUZCY25KeVFVRUJFNTJQUC82NHRMU1VmYUdwNHErcHFaazFh eGJMNjRFOHFpdVVMbDY4U0NWTU9Rd3NUWnlONWdWZEdDNU5aTWFLZmFTMEVuS2szOHV3VUE2 UmFyajAvRjZVQXhpV0JQamZkUUFBQUNTSi8vK1lCZ0FBRUN2c2ZoOHBBQUFBZWFEcEFBRGdI T3lvNlZpbEFRQ0F5RER4TjFKSXN4MW9hR2lZTVdQR3lKRWp5OHZMMzN2dlBjMHlNRERod0I1 SEhwbXgwck1yTWJZOWNUQmgvVjVVd3lVenlDcUdyZWxEd2dPYWJtY3FLeXM3T2pwQ29kRDI3 ZHNuVHB5b1dRWUdKaHpZNDhnak0xYWFkaVZoYlUrY1N0akF4ZUdTR1dRVlptbTZaaFpQQ0Zt K2ZIbDZlbnBaV1JuVjhudmhPOHAwSGNnVERBYnI2K3VuVDUrdStTa01URVJnanlPUDhWaXA3 RXBrYkU4Y2lVemdCdTR1Qm9Pc3d0SThuUkR5d2dzdkJBS0JoeDU2aUdyZFI2cTNJNGdHOWpX WmxaVjE4T0JCelFJd01GRUJleHg1ak1kS3RDdVJzVDF4SkRLQjY3bTdHQSt5Q3FzMVhmazlJ L3E5Nk8wSW9pUVFDR3pkdXJXb3FFanpVeGlZS0lFOWpqeGh4NHJEN1Vwa2JFOGN5YkFDVjdx N3lBOHl3MFJOSHpseTVJa1RKMVM3Szk4aVQ3ZUFSWXNXZFhaMmhrS2grdnA2UGE5T0dKaHdZ SThqajh4WVVYMjdFdGVlNXNhQnE0WkxjcENWbUtqcHk1WXRTMHRMVTYybkt3dUlmaThSV0E0 QVkycHJhM056YzFOU1VvcUtpdngrUDl1b0dsc1ltSEJVTXhEMk9BYklqQlg3U05PdXhMVW51 SUVraXNPbE9jakcyUDEvMXdFQUFKREhqdmNjQVFBQWlBeG9PZ0FBT0Fkb09nQUFPQWU3YXpv VzZ3RUFRQjY3KzcxQTA2TkU1bmRzR0pod01Genl5SXhWUTBORFhsNWVjbkp5WGw3ZTl1M2JK ZmR5QUdLWWtzT2w4bnVKWUxpR3JlbGVBV2k2L1RFZVJoaVlxTUJ3eVdNOFZoa1pHYnQyN1Fx RlFuNi9YL25mUjExeVhvdGhHZ2V1YVk4VGRpOFZabW02bU1VVDRhck1zckt5bHBZV1NtbHpj L1BNbVRPcGxnTU1LM24yN05uYmJydHQ4K2JOOG9FQkpXRm5FZ3hNbEdDNDVERWVxOUxTMHVi bTVwNmVudDI3ZDdOelhHWXZ4eENCcG12NnZkaEMwOFYraUpxK2R1M2ErZlBuVTBybnpadTNi dDA2cW5WbktTR2tvNk9EcXorSURPTTVBUU1URlJndWVZekhxclcxTlRNemt4Q1NtWm5aMXRZ bXVaZGpHSzZtNi9tOTJGM1QrL3I2Mk90ejU4NWxaR1I4K2VXWEdSa1ozMzMzSGRWeWdDR0Vs SmFXWm1kbnQ3ZTN5MGNGVklUTkRtQmdvZ1RESlkveFdPWG41L3Y5L2xBbzVQUDVDZ29LSlBk eURNUFZkSTdTNzBWK0w0YUptcTd5ZTVrd1ljTHUzYnU3dTdzM2JOakFkNm1zckx6aGhodm16 WnZIM21ybTZXZk9uTm14WTBkdWJpNzcvTXdGcGdBQUNIWkpSRUZVOHhaRWdQR2NnSUdKQ2d5 WFBNWmpOVzdjT0wvZjM5UFRzMnZYTHF5bmEyNVJvV21QWXhkTlYvbTlWRmRYWjJSa2pCOC9m dDI2ZFh4amMzTXpJYVM1dVptOTFYU0FZUi9WMU5UTW1qV0xaZkZBSG5JbGZLT3lEQXhNT0Jn dWVXVEdxcTZ1enVQeGpCZ3hZdXJVcWZYMTlYcDdPUTh4VEpuaFloOForTDNJTkEyL0Z3QUFj QTUyditjSUFBQ0FQTkIwQUFCd0R0QjBBQUJ3RHRacE9wYmRBUURBYkt6N2pSU2FiZ0Y2UjhU ZzhpVHFZbE1PRWVXc3pzckswaXlqNSs1aVBNaUp6cFl0VzY2NzdyclUxTlNaTTJmdTNidVhV dHJRMERCanhveVJJMGVXbDVlLzk5NTdtbnVKRTBtc3h3R0laNURvM0NJVGVHU0RyR0w0bXI1 QmVFRFRiWVpxcUQvNTVKUHM3R3lEOFhlNUtZY21TNVlzZWZMSkp6VS8wblIzQ1R2SWljN2N1 WE1QSHo3YzNkMjlaY3NXZGw5VlpXVmxSMGRIS0JUYXZuMzd4SWtURGZaVkRvdFlqd01RenlE UnVVVW04R2dHbVdPV3BpczM4c3N6WDM3NTVmSGp4MmRtWm03YXRFbXpESHV4ZlBueTlQVDBz ckl5ZXZsN1BpVWxwYlMwRlBZQWtpZ0hOaFFLRlJVVnZmYmFhd1p5NDNKVERwSHZ2LzgrTXpP enE2dEw4MVBSM1VWbWtCM0R5Wk1uVTFOVGUzdDcyZHRnTUZoZlh6OTkrblNEWFRTSFJWVlBR aU9lUVhyT0xWUXU4QWdHbVdPcHBxOWZ2ejRZRERZMU5iRXpRVS9UWDNqaGhVQWc4TkJERC9G UCsvdjc5KzNiTjJuU0pKbVFnSEpnSDN2c01YWm5vNEhjdU55VVEyVDE2dFVMRml6USsxUjBk NUVaWkdmdzdiZmZWbFJVUFByb28rd3RYNlE2ZVBDZ3dWN2lzS2pxU1hURU0walB1VVVtOE1n R21XTzZwbk4zRjBKSVgxK2Y4bE94RE51by9BWmJ2MzQ5dXcrTkVKS1VsQ1FURWxBZUVUWjB4 dXZqTGpmbFVOSFgxNWVUazZQOGJsTWh1cnZJRExJRE9IandZRzV1N29vVkt3WUdCdmpHUUND d2RldldvcUlpZ3gxVlk2SlpUMEtqZHdiUks1MWJaQUtQZUpBNVptbTY2TzRpWnVXYURqQ3Ey dExTMHBxYW1vTEJvTS9uYy9EWkVsdkMvdVdrd3VXbUhDcnE2dXBtejU1dFVNREEzY1hCSTFa VFUxTlJVY0VjT3hpTEZpM3E3T3dNaFVMMTlmV3E1UVVWeW1FUjYzRUFtbWVReXJsRkp2Qm9C cGxqbHFhTDdpNmlwbXM2d0tocWUvYlpaek15TWpJeU1sYXZYdTNnRXlaV2tDdFJmYVQ1bXJy WWxFT1RXYk5tYmR1MlRibEZOUUlHN2k0T0hpdlZsTGg0OFdKdGJXMXVibTVLU2twUlVaSGY3 K2ZGRFBiU3JDY093Y1FhdlRQSXdMbUZCVzQ4WEhxRGJBejhYZ0FBd0RuZ1BsSUFBSEFPMEhR QUFIQU8wSFFBQUhBTzBIUUFiSTNkZnErS3BqOTJpOFdSUU5NQjBDQmk5WW01YkJsVUdIMWIv SjVZU3VtcFU2ZjBMRzVrR3BXNWJrS213NXFlSnlydkZJUFcrUllacHhUUnVrZlB6TWU0TFpt clJjUzR4TGJFZWlLd3g0R21BNkNCU3pUOTVwdHZmdSs5OXlaUG5qeGx5cFIzMzMzWCtNSjg0 MFpsT2lOVFJ2UThFYjFUWk9xWGNVb1JyWHMwelh3a1l6R09Ub3hMcnkxbFBSSFk0MERUQWRC QTg0d2xWMW9QclYyNzF1UHhKQ2NuODl4SzVnSmZWWDdIbnF1cXF0TFMwcVpQbjk3YTJrb3Bi VzF0TFNnb1NFdExxNnFxVXRhc2JGMXM2K2pSb3pmZmZITnFhdXEwYWRONFptb3NOSXNXTFZx OWV2WFVxVk05SHMrYU5Xc1dMMTZzV1kvWUg1a1JFK3NoaEN4ZnZuejA2TkU4VWdPNDU0bUJk MHJZUHFpY1VsUUZST3NlY1l0bXRab2JKYjlpbFhHSmJlblZJMitQQTAwSFFBTzk4MU5wUFRS bXpCaXYxOXZSMGRIVDB4TjJSODBDWEsrcnE2dUR3V0JOVFUxeGNUR2xkTWFNR1RVMU5jRmc4 SlZYWGxHV1Z4a2ZxZG9xTHk5Ly9mWFhRNkhRcmwyN3BrMmJKaFBtNnRXcmI3enh4bm56NWxW V1Z0NTQ0NDFyMXF6UnJFZXZQNnE0VkY4ellqM0tTSTN2ZEZkNm51aDVwMmoyUWV5U2dWT0th TjBqYnBGc1MzT0xjVng2YlluMURNc2VCNW9PZ0FiaWVTVmFENzM5OXR2MzNIUFB0R25UeG80 ZCs4d3p6K2p0cUZlejBnb3BHQXhTU29QQllHcHFLcVUwSlNXRmJRa0VBcXlNcHZHUnFxMlVs QlF1cVpMbVNEdDI3RWhLU25ycHBaZisvT2MvSnlVbDdkeTVVN01lc1Q4eUl5YldJMGFxaVo0 dml0STdSYklQeGs0cG9uV1B1RVcrcmJDSFhoV1hYbHVxZW9acmp3Tk5CMEFEOGZ6VXN4NGFH QmpZdTNkdmVubzZlenR5NU1nVEowNFkxS3hwaGZUcXE2K3k3SFhHakJtVTBxS2lJcFlYVjFk WHN6S2FyYXZhcXFpb2FHeHM3Tzd1bGcvejJMRmpoSkFEQnc1ODlORkhoQkFtQW1JOVluOUV4 TzFpUGNwSTJWOGtJcHErS0NydkZEMlVmWkJ4U2hHdGV3ek1mTUxHYTZ6cFlseDZiU25yaWNB ZUI1b09nQWJpU29Kb1BjUStZaTRmR3pkdVpEc3VXN1lzTFMzTjRQVFd0RUppNituNStmbjc5 KytubE83ZnZ6OC9Qejh0TFczNTh1VjZyWXR0SFR0MjdQYmJiMmRiK0Vaam9lbnQ3UjB6Wmt4 UFQwOG9GQm96Wmd4elRoWHJFZnVqT1dLcUxXSTl5a2oxMXROVkkzL3g0a1gyUXVtZEVuWXZT cW1NSFkxbzNhTnA1cVBhUzJ4TDNDSVRsOWhXMkpwbDdIR2c2UURFR1dQWkJXQllRTk1CaURQ UWRCQkRvT2tBQU9BY29Pa0FBT0Fjb09rQUFPQWNvT2tBQU9BY29Pa2dNV2hzYkd4cWF1cnY3 MjlxYW1wc2JKVGN4ZmhUdlFLQlFNRG44Mm1XTjlnTEFEc0FUUWVKUVdOajQvdnZ2Ly9aWjU5 OThNRUhzVkpWdlhvT0hUb2tmZ1FwQndrQk5CMGtCbzJOamNlT0hmUDcvY2VPSGVQeXFuclIy TmpZM3Q3dTkvdVBIajJxdDFGVnA5alFEei84ME56Y3JLbnBmcjkvejU0OXAwNmRpbWxrQU1R U2FEcElEQm9iRzgrZE84ZWYrVWJsaThiR3h1KysreTRRQ0xEN0JqVTNxdW9VRy9yNDQ0K1BI eit1K2RIZzRPQ3BVNmQyNzk0ZHU3QUFpREhRZEpBWU5EWTJEZzRPdnZQT080T0RnMXh3L1g1 L0lCRGdLaTlLdkxoUlZhZG1RM3JyNW9PRGcyZk9uSUdtQXpzRFRRZUpnVkpoK2V1alI0LzYv ZjcyOXZZSU5GMGwzT0tuNG92R3hzWTllL1o4ODgwM3NRd01nSmdDVFFjQUFPY0FUUWNBQU9j QVRRY0FBT2NBVFFjQUFPY0FUUWNBQU9jQVRRY0FBT2Z3bzZhM3RyYStBUUFBSVBFaEVIUUFB SEFNL3gvT2JoNTFrd0JER2dBQUFBQkpSVTVFcmtKZ2dnPT0iIGFsdD0iIiAvPjwvcD48Ymxv Y2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMzI1RkJBOyBwYWRkaW5n LWxlZnQ6IDVweDttYXJnaW4tbGVmdDo1cHg7Ij4tLS0tLVVyc3ByJnV1bWw7bmdsaWNoZSBO YWNocmljaHQtLS0tLTxiciAvPjxzdHJvbmc+QW46PC9zdHJvbmc+CUtvbnJhZCBSemVzenV0 ZWsgV2lsayAmbHQ7a29ucmFkLndpbGtAb3JhY2xlLmNvbSZndDs7IDxiciAvPjxzdHJvbmc+ Q0M6PC9zdHJvbmc+CVNhbmRlciBFaWtlbGVuYm9vbSAmbHQ7bGludXhAZWlrZWxlbmJvb20u aXQmZ3Q7OyB4ZW4tZGV2ZWwgJmx0O3hlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tJmd0 OzsgSmFuIEJldWxpY2ggJmx0O2piZXVsaWNoQHN1c2UuY29tJmd0OzsgS29ucmFkIFJ6ZXN6 dXRlayBXaWxrICZsdDtrb25yYWRAZGFybm9rLm9yZyZndDs7IDxiciAvPjxzdHJvbmc+Vm9u Ojwvc3Ryb25nPglDYXJzdGVuIFNjaGllcnMgJmx0O2NhcnN0ZW5Ac2NoaWVycy5kZSZndDs8 YnIgLz48c3Ryb25nPkdlc2VuZGV0Ojwvc3Ryb25nPglEaSAyOC4wMi4yMDEyIDE1OjM5PGJy IC8+PHN0cm9uZz5CZXRyZWZmOjwvc3Ryb25nPglSZTogW1hlbi1kZXZlbF0gTG9hZCBpbmNy ZWFzZSBhZnRlciBtZW1vcnkgdXBncmFkZSAocGFydDIpPGJyIC8+PHN0cm9uZz5BbmxhZ2U6 PC9zdHJvbmc+CWlubGluZS50eHQ8YnIgLz48c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5ib2R5 Y2xhc3MgeyBmb250LWZhbWlseTogbW9ub3NwYWNlOyB9PC9zdHlsZT4gICAgICAgICAgICAg ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAgICAgICAuYm9keWNsYXNzICAgICAgIHsgICAg ICAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIFNhbnMtU2VyaWYgISBpbXBvcnRh bnQ7ICAgICAgICAgZm9udC1zaXplOiAxMnB4OyAgICAgICAgIHBhZGRpbmc6IDVweCA1cHgg NXB4IDVweDsgICAgICAgICBtYXJnaW46IDBweDsgICAgICAgICBib3JkZXItc3R5bGU6IG5v bmU7ICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsgICAgICAgfSAgICAgICAg cCwgdWwsIGxpICAgICAgIHsgICAgICAgICBtYXJnaW4tdG9wOiAwcHg7ICAgICAgICAgbWFy Z2luLWJvdHRvbTogMHB4OyAgICAgICB9ICAgPC9zdHlsZT4gIDxkaXY+PHA+V2VsbCBsZXQg bWUgY2hlY2sgZm9yIGEgbG9uZ2VyIHBlcmlvZCBvZiB0aW1lLCBhbmQgZXNwZWNpYWxseSwg d2hldGhlciB0aGUgRG9tVSBpcyBzdGlsbDwvcD48cD53b3JraW5nIChjYW4gZG8gdGhhdCBv bmx5IGZyb20gYXQgaG9tZSksIGJ1dCBsb2FkIGxvb2tzIHByZXR0eSB3ZWxsIGFmdGVyIGFw cGx5aW5nIHRoZTwvcD48cD5wYXRjaCB0byAzLjIuOCA6LUQuPC9wPjxwPiZuYnNwOzwvcD48 cD5CUiw8L3A+PHA+Q2Fyc3Rlbi48YnIgLz4mbmJzcDs8L3A+PGJsb2NrcXVvdGUgc3R5bGU9 ImJvcmRlci1sZWZ0OiAycHggc29saWQgIzMyNUZCQTsgcGFkZGluZy1sZWZ0OiA1cHg7bWFy Z2luLWxlZnQ6NXB4OyI+LS0tLS1VcnNwciZ1dW1sO25nbGljaGUgTmFjaHJpY2h0LS0tLS08 YnIgLz48c3Ryb25nPkFuOjwvc3Ryb25nPglKYW4gQmV1bGljaCAmbHQ7SkJldWxpY2hAc3Vz ZS5jb20mZ3Q7OyA8YnIgLz48c3Ryb25nPkNDOjwvc3Ryb25nPglLb25yYWQgUnplc3p1dGVr IFdpbGsgJmx0O2tvbnJhZEBkYXJub2sub3JnJmd0OzsgeGVuLWRldmVsICZsdDt4ZW4tZGV2 ZWxAbGlzdHMueGVuc291cmNlLmNvbSZndDs7IENhcnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3Rl bkBzY2hpZXJzLmRlJmd0OzsgU2FuZGVyIEVpa2VsZW5ib29tICZsdDtsaW51eEBlaWtlbGVu Ym9vbS5pdCZndDs7IDxiciAvPjxzdHJvbmc+Vm9uOjwvc3Ryb25nPglLb25yYWQgUnplc3p1 dGVrIFdpbGsgJmx0O2tvbnJhZC53aWxrQG9yYWNsZS5jb20mZ3Q7PGJyIC8+PHN0cm9uZz5H ZXNlbmRldDo8L3N0cm9uZz4JRnIgMTcuMDIuMjAxMiAxNjoxODxiciAvPjxzdHJvbmc+QmV0 cmVmZjo8L3N0cm9uZz4JUmU6IFtYZW4tZGV2ZWxdIExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVt b3J5IHVwZ3JhZGUgKHBhcnQyKTxiciAvPk9uIFRodSwgRmViIDE2LCAyMDEyIGF0IDA4OjU2 OjUzQU0gKzAwMDAsIEphbiBCZXVsaWNoIHdyb3RlOjxiciAvPiZndDsgJmd0OyZndDsmZ3Q7 IE9uIDE1LjAyLjEyIGF0IDIwOjI4LCBLb25yYWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJh ZC53aWxrQG9yYWNsZS5jb20mZ3Q7IHdyb3RlOjxiciAvPiZndDsgJmd0O0BAIC0xNTUwLDcg KzE1NTIsMTEgQEAgc3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZt X3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssPGJyIC8+Jmd0OyAmZ3Q7IAlzdHJ1Y3Qg cGFnZSAqKnBhZ2VzOzxiciAvPiZndDsgJmd0OyAJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBh cnJheV9zaXplLCBpOzxiciAvPiZndDsgJmd0OyAJZ2ZwX3QgbmVzdGVkX2dmcCA9IChnZnBf bWFzayAmYW1wOyBHRlBfUkVDTEFJTV9NQVNLKSB8IF9fR0ZQX1pFUk87PGJyIC8+Jmd0OyAm Z3Q7LTxiciAvPiZndDsgJmd0OysJZ2ZwX3QgZG1hX21hc2sgPSBnZnBfbWFzayAmYW1wOyAo X19HRlBfRE1BIHwgX19HRlBfRE1BMzIpOzxiciAvPiZndDsgJmd0OysJaWYgKHhlbl9wdl9k b21haW4oKSkgezxiciAvPiZndDsgJmd0OysJCWlmIChkbWFfbWFzayA9PSAoX19HRlBfRE1B IHwgX19HRlBfRE1BMzIpKTxiciAvPiZndDsgPGJyIC8+Jmd0OyBJIGRpZG4mIzM5O3Qgc3Bv dCB3aGVyZSB5b3UgZm9yY2UgdGhpcyBub3JtYWxseSBpbnZhbGlkIGNvbWJpbmF0aW9uLCB3 aXRob3V0PGJyIC8+Jmd0OyB3aGljaCB0aGUgY2hhbmdlIHdvbiYjMzk7dCBhZmZlY3Qgdm1h bGxvYzMyKCkgaW4gYSAzMi1iaXQga2VybmVsLjxiciAvPiZndDsgPGJyIC8+Jmd0OyAmZ3Q7 KwkJCWdmcF9tYXNrICZhbXA7PSAoX19HRlBfRE1BIHwgX19HRlBfRE1BMzIpOzxiciAvPiZn dDsgPGJyIC8+Jmd0OyAJCQlnZnBfbWFzayAmYW1wOz0gfihfX0dGUF9ETUEgfCBfX0dGUF9E TUEzMik7PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7IEphbjxiciAvPjxiciAvPkR1aCE8YnIgLz5H b29kIGV5ZXMuIFRoYW5rcyBmb3IgY2F0Y2hpbmcgdGhhdC48YnIgLz48YnIgLz4mZ3Q7IDxi ciAvPiZndDsgJmd0OysJfTxiciAvPiZndDsgJmd0OyAJbnJfcGFnZXMgPSAoYXJlYS0mZ3Q7 c2l6ZSAtIFBBR0VfU0laRSkgJmd0OyZndDsgUEFHRV9TSElGVDs8YnIgLz4mZ3Q7ICZndDsg CWFycmF5X3NpemUgPSAobnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOzxiciAv PiZndDsgJmd0OyA8YnIgLz4mZ3Q7IDxiciAvPjxiciAvPl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyIC8+WGVuLWRldmVsIG1haWxpbmcgbGlz dDxiciAvPlhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tPGJyIC8+aHR0cDovL2xpc3Rz LnhlbnNvdXJjZS5jb20veGVuLWRldmVsPGJyIC8+PC9ibG9ja3F1b3RlPjwvZGl2PiAgIDwv YmxvY2txdW90ZT48L2Rpdj4gICA8L2Jsb2NrcXVvdGU+PHA+Jm5ic3A7PC9wPgo8L2JvZHk+ CjwvaHRtbD4= --=_F1yjPY0x5Rt03QtpR+eAjTruBumDA6U+Yn3CBd30zLybmgQg-- --=_F1yjpLocfe5Ra5tK65RmHGcdd2qVYzUzBxBqAXkQZGBAcVOw Content-Type: application/octet-stream; name=debug.log Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=debug.log VXNpbmcgY29uZmlnIGZpbGUgIi9ldGMveGVuL3Jpa2VyLjMyIi4KU3RhcnRlZCBkb21haW4g cmlrZXIgKGlkPTE1KQpbICAgIDAuMDAwMDAwXSBJbml0aWFsaXppbmcgY2dyb3VwIHN1YnN5 cyBjcHVzZXQNClsgICAgMC4wMDAwMDBdIEluaXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGNw dQ0KWyAgICAwLjAwMDAwMF0gTGludXggdmVyc2lvbiAzLjIuOC1hbWQ2NCAocm9vdEBjaGVr b3RleSkgKGdjYyB2ZXJzaW9uIDQuNC41IChEZWJpYW4gNC40LjUtOCkgKSAjMSBTTVAgVHVl IEZlYiAyOCAxMTozMjoyNyBDRVQgMjAxMg0KWyAgICAwLjAwMDAwMF0gQ29tbWFuZCBsaW5l OiByb290PS9kZXYveHZkYTEgcm8gaW9tbXU9c29mdCBzd2lvdGxiPTQwOTYgeGVuY29ucz10 dHkNClsgICAgMC4wMDAwMDBdIEFDUEkgaW4gdW5wcml2aWxlZ2VkIGRvbWFpbiBkaXNhYmxl ZA0KWyAgICAwLjAwMDAwMF0gUmVsZWFzZWQgMCBwYWdlcyBvZiB1bnVzZWQgbWVtb3J5DQpb ICAgIDAuMDAwMDAwXSBTZXQgMCBwYWdlKHMpIHRvIDEtMSBtYXBwaW5nDQpbICAgIDAuMDAw MDAwXSBCSU9TLXByb3ZpZGVkIHBoeXNpY2FsIFJBTSBtYXA6DQpbICAgIDAuMDAwMDAwXSAg WGVuOiAwMDAwMDAwMDAwMDAwMDAwIC0gMDAwMDAwMDAwMDBhMDAwMCAodXNhYmxlKQ0KWyAg ICAwLjAwMDAwMF0gIFhlbjogMDAwMDAwMDAwMDBhMDAwMCAtIDAwMDAwMDAwMDAxMDAwMDAg KHJlc2VydmVkKQ0KWyAgICAwLjAwMDAwMF0gIFhlbjogMDAwMDAwMDAwMDEwMDAwMCAtIDAw MDAwMDAwMTQ4MDAwMDAgKHVzYWJsZSkNClsgICAgMC4wMDAwMDBdIE5YIChFeGVjdXRlIERp c2FibGUpIHByb3RlY3Rpb246IGFjdGl2ZQ0KWyAgICAwLjAwMDAwMF0gRE1JIG5vdCBwcmVz ZW50IG9yIGludmFsaWQuDQpbICAgIDAuMDAwMDAwXSBObyBBR1AgYnJpZGdlIGZvdW5kDQpb ICAgIDAuMDAwMDAwXSBsYXN0X3BmbiA9IDB4MTQ4MDAgbWF4X2FyY2hfcGZuID0gMHg0MDAw MDAwMDANClsgICAgMC4wMDAwMDBdIGluaXRfbWVtb3J5X21hcHBpbmc6IDAwMDAwMDAwMDAw MDAwMDAtMDAwMDAwMDAxNDgwMDAwMA0KWyAgICAwLjAwMDAwMF0gUkFNRElTSzogMDE5Mjgw MDAgLSAwMzUwYTAwMA0KWyAgICAwLjAwMDAwMF0gTm8gTlVNQSBjb25maWd1cmF0aW9uIGZv dW5kDQpbICAgIDAuMDAwMDAwXSBGYWtpbmcgYSBub2RlIGF0IDAwMDAwMDAwMDAwMDAwMDAt MDAwMDAwMDAxNDgwMDAwMA0KWyAgICAwLjAwMDAwMF0gSW5pdG1lbSBzZXR1cCBub2RlIDAg MDAwMDAwMDAwMDAwMDAwMC0wMDAwMDAwMDE0ODAwMDAwDQpbICAgIDAuMDAwMDAwXSAgIE5P REVfREFUQSBbMDAwMDAwMDAxM2ZmYjAwMCAtIDAwMDAwMDAwMTNmZmZmZmZdDQpbICAgIDAu MDAwMDAwXSBab25lIFBGTiByYW5nZXM6DQpbICAgIDAuMDAwMDAwXSAgIERNQSAgICAgIDB4 MDAwMDAwMTAgLT4gMHgwMDAwMTAwMA0KWyAgICAwLjAwMDAwMF0gICBETUEzMiAgICAweDAw MDAxMDAwIC0+IDB4MDAxMDAwMDANClsgICAgMC4wMDAwMDBdICAgTm9ybWFsICAgZW1wdHkN ClsgICAgMC4wMDAwMDBdIE1vdmFibGUgem9uZSBzdGFydCBQRk4gZm9yIGVhY2ggbm9kZQ0K WyAgICAwLjAwMDAwMF0gZWFybHlfbm9kZV9tYXBbMl0gYWN0aXZlIFBGTiByYW5nZXMNClsg ICAgMC4wMDAwMDBdICAgICAwOiAweDAwMDAwMDEwIC0+IDB4MDAwMDAwYTANClsgICAgMC4w MDAwMDBdICAgICAwOiAweDAwMDAwMTAwIC0+IDB4MDAwMTQ4MDANClsgICAgMC4wMDAwMDBd IFNGSTogU2ltcGxlIEZpcm13YXJlIEludGVyZmFjZSB2MC44MSBodHRwOi8vc2ltcGxlZmly bXdhcmUub3JnDQpbICAgIDAuMDAwMDAwXSBTTVA6IEFsbG93aW5nIDEgQ1BVcywgMCBob3Rw bHVnIENQVXMNClsgICAgMC4wMDAwMDBdIE5vIGxvY2FsIEFQSUMgcHJlc2VudA0KWyAgICAw LjAwMDAwMF0gQVBJQzogZGlzYWJsZSBhcGljIGZhY2lsaXR5DQpbICAgIDAuMDAwMDAwXSBB UElDOiBzd2l0Y2hlZCB0byBhcGljIE5PT1ANClsgICAgMC4wMDAwMDBdIFBNOiBSZWdpc3Rl cmVkIG5vc2F2ZSBtZW1vcnk6IDAwMDAwMDAwMDAwYTAwMDAgLSAwMDAwMDAwMDAwMTAwMDAw DQpbICAgIDAuMDAwMDAwXSBBbGxvY2F0aW5nIFBDSSByZXNvdXJjZXMgc3RhcnRpbmcgYXQg MTQ4MDAwMDAgKGdhcDogMTQ4MDAwMDA6ZWI4MDAwMDApDQpbICAgIDAuMDAwMDAwXSBCb290 aW5nIHBhcmF2aXJ0dWFsaXplZCBrZXJuZWwgb24gWGVuDQpbICAgIDAuMDAwMDAwXSBYZW4g dmVyc2lvbjogNC4xLjIgKHByZXNlcnZlLUFEKQ0KWyAgICAwLjAwMDAwMF0gc2V0dXBfcGVy Y3B1OiBOUl9DUFVTOjUxMiBucl9jcHVtYXNrX2JpdHM6NTEyIG5yX2NwdV9pZHM6MSBucl9u b2RlX2lkczoxDQpbICAgIDAuMDAwMDAwXSBQRVJDUFU6IEVtYmVkZGVkIDI3IHBhZ2VzL2Nw dSBAZmZmZjg4MDAxM2ZhODAwMCBzODE2MDAgcjgxOTIgZDIwODAwIHUxMTA1OTINClsgICAg MC4wMDAwMDBdIEJ1aWx0IDEgem9uZWxpc3RzIGluIE5vZGUgb3JkZXIsIG1vYmlsaXR5IGdy b3VwaW5nIG9uLiAgVG90YWwgcGFnZXM6IDgyNTM5DQpbICAgIDAuMDAwMDAwXSBQb2xpY3kg em9uZTogRE1BMzINClsgICAgMC4wMDAwMDBdIEtlcm5lbCBjb21tYW5kIGxpbmU6IHJvb3Q9 L2Rldi94dmRhMSBybyBpb21tdT1zb2Z0IHN3aW90bGI9NDA5NiB4ZW5jb25zPXR0eQ0KWyAg ICAwLjAwMDAwMF0gUElEIGhhc2ggdGFibGUgZW50cmllczogMjA0OCAob3JkZXI6IDIsIDE2 Mzg0IGJ5dGVzKQ0KWyAgICAwLjAwMDAwMF0gUGxhY2luZyA4TUIgc29mdHdhcmUgSU8gVExC IGJldHdlZW4gZmZmZjg4MDAxMjgwMDAwMCAtIGZmZmY4ODAwMTMwMDAwMDANClsgICAgMC4w MDAwMDBdIHNvZnR3YXJlIElPIFRMQiBhdCBwaHlzIDB4MTI4MDAwMDAgLSAweDEzMDAwMDAw DQpbICAgIDAuMDAwMDAwXSBNZW1vcnk6IDI3NDM0OGsvMzM1ODcyayBhdmFpbGFibGUgKDMz ODJrIGtlcm5lbCBjb2RlLCA0NDhrIGFic2VudCwgNjEwNzZrIHJlc2VydmVkLCAzMjkxayBk YXRhLCA1NjhrIGluaXQpDQpbICAgIDAuMDAwMDAwXSBTTFVCOiBHZW5zbGFicz0xNSwgSFdh bGlnbj02NCwgT3JkZXI9MC0zLCBNaW5PYmplY3RzPTAsIENQVXM9MSwgTm9kZXM9MQ0KWyAg ICAwLjAwMDAwMF0gSGllcmFyY2hpY2FsIFJDVSBpbXBsZW1lbnRhdGlvbi4NClsgICAgMC4w MDAwMDBdIE5SX0lSUVM6MzMwMjQgbnJfaXJxczoyNTYgMTYNClsgICAgMC4wMDAwMDBdIENv bnNvbGU6IGNvbG91ciBkdW1teSBkZXZpY2UgODB4MjUNClsgICAgMC4wMDAwMDBdIGNvbnNv bGUgW3R0eTBdIGVuYWJsZWQNClsgICAgMC4wMDAwMDBdIGNvbnNvbGUgW2h2YzBdIGVuYWJs ZWQNClsgICAgMC4wMDAwMDBdIGluc3RhbGxpbmcgWGVuIHRpbWVyIGZvciBDUFUgMA0KWyAg ICAwLjAwMDAwMF0gRGV0ZWN0ZWQgMjIxMC4wMzggTUh6IHByb2Nlc3Nvci4NClsgICAgMC4w MDQwMDBdIENhbGlicmF0aW5nIGRlbGF5IGxvb3AgKHNraXBwZWQpLCB2YWx1ZSBjYWxjdWxh dGVkIHVzaW5nIHRpbWVyIGZyZXF1ZW5jeS4uIDQ0MjAuMDcgQm9nb01JUFMgKGxwaj04ODQw MTUyKQ0KWyAgICAwLjAwNDAwMF0gcGlkX21heDogZGVmYXVsdDogMzI3NjggbWluaW11bTog MzAxDQpbICAgIDAuMDA0MDAwXSBTZWN1cml0eSBGcmFtZXdvcmsgaW5pdGlhbGl6ZWQNClsg ICAgMC4wMDQwMDBdIFNFTGludXg6ICBEaXNhYmxlZCBhdCBib290Lg0KWyAgICAwLjAwNDAw MF0gRGVudHJ5IGNhY2hlIGhhc2ggdGFibGUgZW50cmllczogNjU1MzYgKG9yZGVyOiA3LCA1 MjQyODggYnl0ZXMpDQpbICAgIDAuMDA0MDAwXSBJbm9kZS1jYWNoZSBoYXNoIHRhYmxlIGVu dHJpZXM6IDMyNzY4IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQ0KWyAgICAwLjAwNDAwMF0g TW91bnQtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAyNTYNClsgICAgMC4wMDQwMDBdIElu aXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGNwdWFjY3QNClsgICAgMC4wMDQwMDBdIEluaXRp YWxpemluZyBjZ3JvdXAgc3Vic3lzIGRldmljZXMNClsgICAgMC4wMDQwMDBdIEluaXRpYWxp emluZyBjZ3JvdXAgc3Vic3lzIGZyZWV6ZXINClsgICAgMC4wMDQwMDBdIEluaXRpYWxpemlu ZyBjZ3JvdXAgc3Vic3lzIG5ldF9jbHMNClsgICAgMC4wMDQwMDBdIENQVTogUGh5c2ljYWwg UHJvY2Vzc29yIElEOiAwDQpbICAgIDAuMDA0MDAwXSBDUFU6IFByb2Nlc3NvciBDb3JlIElE OiAyDQpbICAgIDAuMDA0MDAwXSBTTVAgYWx0ZXJuYXRpdmVzOiBzd2l0Y2hpbmcgdG8gVVAg Y29kZQ0KWyAgICAwLjAwNDAyNl0gRnJlZWluZyBTTVAgYWx0ZXJuYXRpdmVzOiAxNmsgZnJl ZWQNClsgICAgMC4wMDQxNTFdIFBlcmZvcm1hbmNlIEV2ZW50czogDQpbICAgIDAuMDA0MTU4 XSBubyBBUElDLCBib290IHdpdGggdGhlICJsYXBpYyIgYm9vdCBwYXJhbWV0ZXIgdG8gZm9y Y2UtZW5hYmxlIGl0Lg0KWyAgICAwLjAwNDE2Nl0gbm8gaGFyZHdhcmUgc2FtcGxpbmcgaW50 ZXJydXB0IGF2YWlsYWJsZS4NClsgICAgMC4wMDQxODRdIEJyb2tlbiBQTVUgaGFyZHdhcmUg ZGV0ZWN0ZWQsIHVzaW5nIHNvZnR3YXJlIGV2ZW50cyBvbmx5Lg0KWyAgICAwLjAwNDQ0NV0g QnJvdWdodCB1cCAxIENQVXMNClsgICAgMC4wMDQ2NDJdIGRldnRtcGZzOiBpbml0aWFsaXpl ZA0KWyAgICAwLjAxMDU3OV0gR3JhbnQgdGFibGUgaW5pdGlhbGl6ZWQNClsgICAgMC4wMTA2 NDVdIHByaW50X2NvbnN0cmFpbnRzOiBkdW1teTogDQpbICAgIDAuMDEwNjkzXSBORVQ6IFJl Z2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDE2DQpbICAgIDAuMDEwODc2XSBFeHRlbmRlZCBD b25maWcgU3BhY2UgZW5hYmxlZCBvbiAwIG5vZGVzDQpbICAgIDAuMDEwOTMyXSBQQ0k6IHNl dHRpbmcgdXAgWGVuIFBDSSBmcm9udGVuZCBzdHViDQpbICAgIDAuMDEwOTMyXSBiaW86IGNy ZWF0ZSBzbGFiIDxiaW8tMD4gYXQgMA0KWyAgICAwLjAxMDkzMl0gQUNQSTogSW50ZXJwcmV0 ZXIgZGlzYWJsZWQuDQpbICAgIDAuMDEyMDM0XSB4ZW4vYmFsbG9vbjogSW5pdGlhbGlzaW5n IGJhbGxvb24gZHJpdmVyLg0KWyAgICAwLjAxMjA3M10geGVuLWJhbGxvb246IEluaXRpYWxp c2luZyBiYWxsb29uIGRyaXZlci4NClsgICAgMC4wMTIwNzNdIHZnYWFyYjogbG9hZGVkDQpb ICAgIDAuMDEyMTE2XSBQQ0k6IFN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IFBDSQ0KWyAgICAw LjAxMjEyMl0gUENJOiBTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQQ0kNClsgICAgMC4wMTIy MjhdIFN3aXRjaGluZyB0byBjbG9ja3NvdXJjZSB4ZW4NClsgICAgMC4wMTM2NjZdIHBucDog UG5QIEFDUEk6IGRpc2FibGVkDQpbICAgIDAuMDE1MjcxXSBORVQ6IFJlZ2lzdGVyZWQgcHJv dG9jb2wgZmFtaWx5IDINClsgICAgMC4wMTUzNTddIElQIHJvdXRlIGNhY2hlIGhhc2ggdGFi bGUgZW50cmllczogNDA5NiAob3JkZXI6IDMsIDMyNzY4IGJ5dGVzKQ0KWyAgICAwLjAxNTYy Ml0gVENQIGVzdGFibGlzaGVkIGhhc2ggdGFibGUgZW50cmllczogMTYzODQgKG9yZGVyOiA2 LCAyNjIxNDQgYnl0ZXMpDQpbICAgIDAuMDE1Nzk5XSBUQ1AgYmluZCBoYXNoIHRhYmxlIGVu dHJpZXM6IDE2Mzg0IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQ0KWyAgICAwLjAxNTg5Ml0g VENQOiBIYXNoIHRhYmxlcyBjb25maWd1cmVkIChlc3RhYmxpc2hlZCAxNjM4NCBiaW5kIDE2 Mzg0KQ0KWyAgICAwLjAxNTkwMF0gVENQIHJlbm8gcmVnaXN0ZXJlZA0KWyAgICAwLjAxNTkx NF0gVURQIGhhc2ggdGFibGUgZW50cmllczogMjU2IChvcmRlcjogMSwgODE5MiBieXRlcykN ClsgICAgMC4wMTU5MjhdIFVEUC1MaXRlIGhhc2ggdGFibGUgZW50cmllczogMjU2IChvcmRl cjogMSwgODE5MiBieXRlcykNClsgICAgMC4wMTYwMTFdIE5FVDogUmVnaXN0ZXJlZCBwcm90 b2NvbCBmYW1pbHkgMQ0KWyAgICAwLjAxNjExNl0gVW5wYWNraW5nIGluaXRyYW1mcy4uLg0K WyAgICAwLjA1NjczMV0gRnJlZWluZyBpbml0cmQgbWVtb3J5OiAyODU1MmsgZnJlZWQNClsg ICAgMC4wNjczMDhdIHBsYXRmb3JtIHJ0Y19jbW9zOiByZWdpc3RlcmVkIHBsYXRmb3JtIFJU QyBkZXZpY2UgKG5vIFBOUCBkZXZpY2UgZm91bmQpDQpbICAgIDAuMDY3NTQ3XSBhdWRpdDog aW5pdGlhbGl6aW5nIG5ldGxpbmsgc29ja2V0IChkaXNhYmxlZCkNClsgICAgMC4wNjc1NjNd IHR5cGU9MjAwMCBhdWRpdCgxMzMwNTE5NDkzLjQ3MToxKTogaW5pdGlhbGl6ZWQNClsgICAg MC4wNzk4MjldIEh1Z2VUTEIgcmVnaXN0ZXJlZCAyIE1CIHBhZ2Ugc2l6ZSwgcHJlLWFsbG9j YXRlZCAwIHBhZ2VzDQpbICAgIDAuMDgxNzAxXSBWRlM6IERpc2sgcXVvdGFzIGRxdW90XzYu NS4yDQpbICAgIDAuMDgxNzY2XSBEcXVvdC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDUx MiAob3JkZXIgMCwgNDA5NiBieXRlcykNClsgICAgMC4wODE4NjRdIG1zZ21uaSBoYXMgYmVl biBzZXQgdG8gNTkxDQpbICAgIDAuMDgyMDc4XSBCbG9jayBsYXllciBTQ1NJIGdlbmVyaWMg KGJzZykgZHJpdmVyIHZlcnNpb24gMC40IGxvYWRlZCAobWFqb3IgMjUzKQ0KWyAgICAwLjA4 MjA4N10gaW8gc2NoZWR1bGVyIG5vb3AgcmVnaXN0ZXJlZA0KWyAgICAwLjA4MjA5Ml0gaW8g c2NoZWR1bGVyIGRlYWRsaW5lIHJlZ2lzdGVyZWQNClsgICAgMC4wODIxMjZdIGlvIHNjaGVk dWxlciBjZnEgcmVnaXN0ZXJlZCAoZGVmYXVsdCkNClsgICAgMC4wOTg0MDRdIFNlcmlhbDog ODI1MC8xNjU1MCBkcml2ZXIsIDQgcG9ydHMsIElSUSBzaGFyaW5nIGVuYWJsZWQNClsgICAg MC4wOTg2OThdIExpbnV4IGFncGdhcnQgaW50ZXJmYWNlIHYwLjEwMw0KWyAgICAwLjA5OTIx OV0gaTgwNDI6IFBOUDogTm8gUFMvMiBjb250cm9sbGVyIGZvdW5kLiBQcm9iaW5nIHBvcnRz IGRpcmVjdGx5Lg0KWyAgICAwLjEwMDAzN10gaTgwNDI6IE5vIGNvbnRyb2xsZXIgZm91bmQN ClsgICAgMC4xMDAxMjJdIG1vdXNlZGV2OiBQUy8yIG1vdXNlIGRldmljZSBjb21tb24gZm9y IGFsbCBtaWNlDQpbICAgIDAuMTQwMTA3XSBydGNfY21vcyBydGNfY21vczogcnRjIGNvcmU6 IHJlZ2lzdGVyZWQgcnRjX2Ntb3MgYXMgcnRjMA0KWyAgICAwLjE0MDE4MV0gcnRjX2Ntb3M6 IHByb2JlIG9mIHJ0Y19jbW9zIGZhaWxlZCB3aXRoIGVycm9yIC0zOA0KWyAgICAwLjE0MDI2 NV0gcGNpZnJvbnQgcGNpLTA6IEluc3RhbGxpbmcgUENJIGZyb250ZW5kDQpbICAgIDAuMTQw NDU4XSBwY2lmcm9udCBwY2ktMDogQ3JlYXRpbmcgUENJIEZyb250ZW5kIEJ1cyAwMDAwOjAw DQpbICAgIDAuMTU2MzA3XSBUQ1AgY3ViaWMgcmVnaXN0ZXJlZA0KWyAgICAwLjE1NjQzNF0g TkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxMA0KWyAgICAwLjE1Njk5OV0gTW9i aWxlIElQdjYNClsgICAgMC4xNTcwMTNdIE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1p bHkgMTcNClsgICAgMC4xNTcwMjFdIFJlZ2lzdGVyaW5nIHRoZSBkbnNfcmVzb2x2ZXIga2V5 IHR5cGUNClsgICAgMC4xNTcxNjJdIHJlZ2lzdGVyZWQgdGFza3N0YXRzIHZlcnNpb24gMQ0K WyAgICAwLjE2OTQ1NV0gcGNpZnJvbnQgcGNpLTA6IGNsYWltaW5nIHJlc291cmNlIDAwMDA6 MDA6MDAuMC8wDQpbICAgIDAuMTY5NDY3XSBwY2lmcm9udCBwY2ktMDogY2xhaW1pbmcgcmVz b3VyY2UgMDAwMDowMDowMS4wLzANClsgICAgMC4xNjk0NzNdIHBjaWZyb250IHBjaS0wOiBj bGFpbWluZyByZXNvdXJjZSAwMDAwOjAwOjAyLjAvMA0KWyAgICAwLjI1NjE1OF0gWEVOQlVT OiBEZXZpY2Ugd2l0aCBubyBkcml2ZXI6IGRldmljZS92YmQvNTE3MTMNClsgICAgMC4yNTYx OTNdIFhFTkJVUzogRGV2aWNlIHdpdGggbm8gZHJpdmVyOiBkZXZpY2UvdmJkLzUxNzE0DQpb ICAgIDAuMjU2MjEwXSBYRU5CVVM6IERldmljZSB3aXRoIG5vIGRyaXZlcjogZGV2aWNlL3Zi ZC81MTcyOQ0KWyAgICAwLjI1NjIyNV0gWEVOQlVTOiBEZXZpY2Ugd2l0aCBubyBkcml2ZXI6 IGRldmljZS92aWYvMA0KWyAgICAwLjI1NjIzOV0gWEVOQlVTOiBEZXZpY2Ugd2l0aCBubyBk cml2ZXI6IGRldmljZS9jb25zb2xlLzANClsgICAgMC4yNTYyODldIGRyaXZlcnMvcnRjL2hj dG9zeXMuYzogdW5hYmxlIHRvIG9wZW4gcnRjIGRldmljZSAocnRjMCkNClsgICAgMC4yNTYz NjVdIEluaXRpYWxpemluZyBuZXR3b3JrIGRyb3AgbW9uaXRvciBzZXJ2aWNlDQpbICAgIDAu MjU3MTkxXSBGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiA1NjhrIGZyZWVkDQpbICAg IDAuMjU3NTczXSBXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgcmVhZC1vbmx5IGRhdGE6 IDYxNDRrDQpbICAgIDAuMjY2NDUwXSBGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiA2 OTZrIGZyZWVkDQpbICAgIDAuMjY4MDAzXSBGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5 OiA4NDRrIGZyZWVkDQpMb2FkaW5nLCBwbGVhc2Ugd2FpdC4uLg0KWyAgICAwLjMyNDM4NF0g dWRldls0NF06IHN0YXJ0aW5nIHZlcnNpb24gMTY0DQpbICAgIDAuMzY2MDcxXSBJbml0aWFs aXNpbmcgWGVuIHZpcnR1YWwgZXRoZXJuZXQgZHJpdmVyLg0KWyAgICAwLjQ3NzIxNF0gYmxr ZnJvbnQ6IHh2ZGExOiBiYXJyaWVyOiBlbmFibGVkDQpbICAgIDAuNDkzNDI4XSBibGtmcm9u dDogeHZkYTI6IGJhcnJpZXI6IGVuYWJsZWQNClsgICAgMC41MDE4NDVdIFNldHRpbmcgY2Fw YWNpdHkgdG8gODM4ODYwOA0KWyAgICAwLjUwMTg2MF0geHZkYTE6IGRldGVjdGVkIGNhcGFj aXR5IGNoYW5nZSBmcm9tIDAgdG8gNDI5NDk2NzI5Ng0KWyAgICAwLjUwMjcwMF0gYmxrZnJv bnQ6IHh2ZGIxOiBiYXJyaWVyOiBlbmFibGVkDQpbICAgIDAuNTA2MTg2XSBTZXR0aW5nIGNh cGFjaXR5IHRvIDIwOTcxNTINClsgICAgMC41MDYyMDNdIHh2ZGEyOiBkZXRlY3RlZCBjYXBh Y2l0eSBjaGFuZ2UgZnJvbSAwIHRvIDEwNzM3NDE4MjQNClsgICAgMC41MDY1NzJdIFNldHRp bmcgY2FwYWNpdHkgdG8gMjkzMDI3MjAwMg0KWyAgICAwLjUwNjU4MV0geHZkYjE6IGRldGVj dGVkIGNhcGFjaXR5IGNoYW5nZSBmcm9tIDAgdG8gMTUwMDI5OTI2NTAyNA0KQmVnaW46IExv YWRpbmcgZXNzZW50aWFsIGRyaXZlcnMgLi4uIGRvbmUuDQpCZWdpbjogUnVubmluZyAvc2Ny aXB0cy9pbml0LXByZW1vdW50IC4uLiBkb25lLg0KQmVnaW46IE1vdW50aW5nIHJvb3QgZmls ZSBzeXN0ZW0gLi4uIEJlZ2luOiBSdW5uaW5nIC9zY3JpcHRzL2xvY2FsLXRvcCAuLi4gZG9u ZS4NCkJlZ2luOiBSdW5uaW5nIC9zY3JpcHRzL2xvY2FsLXByZW1vdW50IC4uLiBbICAgIDAu Njk1NzM2XSBQTTogU3RhcnRpbmcgbWFudWFsIHJlc3VtZSBmcm9tIGRpc2sNCmRvbmUuDQpb ICAgIDAuNzI5Njg4XSBram91cm5hbGQgc3RhcnRpbmcuICBDb21taXQgaW50ZXJ2YWwgNSBz ZWNvbmRzDQpbICAgIDAuNzI5NzM1XSBFWFQzLWZzICh4dmRhMSk6IG1vdW50ZWQgZmlsZXN5 c3RlbSB3aXRoIG9yZGVyZWQgZGF0YSBtb2RlDQpCZWdpbjogUnVubmluZyAvc2NyaXB0cy9s b2NhbC1ib3R0b20gLi4uIGRvbmUuDQpkb25lLg0KQmVnaW46IFJ1bm5pbmcgL3NjcmlwdHMv aW5pdC1ib3R0b20gLi4uIGRvbmUuDQoNSU5JVDogdmVyc2lvbiAyLjg4IGJvb3RpbmcNDQpV c2luZyBtYWtlZmlsZS1zdHlsZSBjb25jdXJyZW50IGJvb3QgaW4gcnVubGV2ZWwgUy4NClN0 YXJ0aW5nIHRoZSBob3RwbHVnIGV2ZW50cyBkaXNwYXRjaGVyOiB1ZGV2ZFsgICAgMS42OTg2 NjVdIHVkZXZbMTU1XTogc3RhcnRpbmcgdmVyc2lvbiAxNjQNCi4NClN5bnRoZXNpemluZyB0 aGUgaW5pdGlhbCBob3RwbHVnIGV2ZW50cy4uLmRvbmUuDQpXYWl0aW5nIGZvciAvZGV2IHRv IGJlIGZ1bGx5IHBvcHVsYXRlZC4uLlsgICAgMS45NTY1NDFdIGlucHV0OiBQQyBTcGVha2Vy IGFzIC9kZXZpY2VzL3BsYXRmb3JtL3Bjc3Brci9pbnB1dC9pbnB1dDANClsgICAgMi4yODIw MTZdIEVycm9yOiBEcml2ZXIgJ3Bjc3BrcicgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCBhYm9y dGluZy4uLg0KWyAgICAyLjMzMTEyNl0gTGludXggdmlkZW8gY2FwdHVyZSBpbnRlcmZhY2U6 IHYyLjAwDQpbICAgIDIuMzUxOTgxXSBzYWE3MTQ2OiByZWdpc3RlciBleHRlbnNpb24gJ2J1 ZGdldF9hdicNClsgICAgMi4zNTI2MjJdIGJ1ZGdldF9hdiAwMDAwOjAwOjAwLjA6IGVuYWJs aW5nIGRldmljZSAoMDAwMCAtPiAwMDAyKQ0KWyAgICAyLjM1MzYyOF0gYnVkZ2V0X2F2IDAw MDA6MDA6MDAuMDogWGVuIFBDSSBtYXBwZWQgR1NJMTcgdG8gSVJRMjgNClsgICAgMi4zNTQz MTZdIHNhYTcxNDY6IGZvdW5kIHNhYTcxNDYgQCBtZW0gZmZmZmM5MDAwMDQwNjAwMCAocmV2 aXNpb24gMSwgaXJxIDI4KSAoMHgxODk0LDB4MDAyOCkNClsgICAgMi4zNTQzNDRdIHNhYTcx NDYgKDApOiBkbWEgYnVmZmVyIHNpemUgMTM0NzU4NA0KWyAgICAyLjM1NDM2MF0gRFZCOiBy ZWdpc3RlcmluZyBuZXcgYWRhcHRlciAoS05DMSBEVkItQyBUREExMDAyNCkNClsgICAgMi4z ODkzNzhdIGFkYXB0ZXIgZmFpbGVkIE1BQyBzaWduYXR1cmUgY2hlY2sNClsgICAgMi4zODk0 MDVdIGVuY29kZWQgTUFDIGZyb20gRUVQUk9NIHdhcyBmZjpmZjpmZjpmZjpmZjpmZjpmZjpm ZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZg0KWyAgICAyLjY2MDU5NV0g YnVkZ2V0X2F2OiBLTkMxLTA6IE1BQyBhZGRyID0gMDA6MDk6ZDY6NmQ6YjM6MGENClsgICAg Mi44MjkxNzJdIERWQjogcmVnaXN0ZXJpbmcgYWRhcHRlciAwIGZyb250ZW5kIDAgKFBoaWxp cHMgVERBMTAwMjMgRFZCLUMpLi4uDQpbICAgIDIuODI5ODQ3XSBidWRnZXRfYXY6IGNpIGlu dGVyZmFjZSBpbml0aWFsaXNlZA0KWyAgICAyLjgzMDM3MV0gYnVkZ2V0X2F2IDAwMDA6MDA6 MDEuMDogWGVuIFBDSSBtYXBwZWQgR1NJMTggdG8gSVJRMjkNClsgICAgMi44MzExOTBdIHNh YTcxNDY6IGZvdW5kIHNhYTcxNDYgQCBtZW0gZmZmZmM5MDAwMDY5ODAwMCAocmV2aXNpb24g MSwgaXJxIDI5KSAoMHgxODk0LDB4MDAyYykNClsgICAgMi44MzEyMTddIHNhYTcxNDYgKDEp OiBkbWEgYnVmZmVyIHNpemUgMTM0NzU4NA0KWyAgICAyLjgzMTIzM10gRFZCOiByZWdpc3Rl cmluZyBuZXcgYWRhcHRlciAoU2F0ZWxjbyBFYXN5V2F0Y2ggRFZCLUMgTUszKQ0KWyAgICAy Ljg2NjAwOV0gYWRhcHRlciBmYWlsZWQgTUFDIHNpZ25hdHVyZSBjaGVjaw0KWyAgICAyLjg2 NjAzNl0gZW5jb2RlZCBNQUMgZnJvbSBFRVBST00gd2FzIGZmOmZmOmZmOmZmOmZmOmZmOmZm OmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmDQpbICAgIDMuMTQwNzM2 XSBidWRnZXRfYXY6IEtOQzEtMTogTUFDIGFkZHIgPSAwMDowOTpkNjo2ZDpiMDozMw0KWyAg ICAzLjI4MTE3MF0gRFZCOiByZWdpc3RlcmluZyBhZGFwdGVyIDEgZnJvbnRlbmQgMCAoUGhp bGlwcyBUREExMDAyMyBEVkItQykuLi4NClsgICAgMy4yODM3OTBdIGJ1ZGdldF9hdjogY2kg aW50ZXJmYWNlIGluaXRpYWxpc2VkDQpbICAgIDMuMjg0NTA3XSBidWRnZXRfYXYgMDAwMDow MDowMi4wOiBYZW4gUENJIG1hcHBlZCBHU0kxOSB0byBJUlEzMA0KWyAgICAzLjI4NTEyNV0g c2FhNzE0NjogZm91bmQgc2FhNzE0NiBAIG1lbSBmZmZmYzkwMDAwOTI2MDAwIChyZXZpc2lv biAxLCBpcnEgMzApICgweDE4OTQsMHgwMDIyKQ0KWyAgICAzLjI4NTE1NV0gc2FhNzE0NiAo Mik6IGRtYSBidWZmZXIgc2l6ZSAxMzQ3NTg0DQpbICAgIDMuMjg1MTcxXSBEVkI6IHJlZ2lz dGVyaW5nIG5ldyBhZGFwdGVyIChLTkMxIERWQi1DIE1LMykNClsgICAgMy4zMjE0MzddIGFk YXB0ZXIgZmFpbGVkIE1BQyBzaWduYXR1cmUgY2hlY2sNClsgICAgMy4zMjE0NjZdIGVuY29k ZWQgTUFDIGZyb20gRUVQUk9NIHdhcyBmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpm ZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZg0KWyAgICAzLjU5NjYwMl0gYnVkZ2V0X2F2 OiBLTkMxLTI6IE1BQyBhZGRyID0gMDA6MDk6ZDY6NmQ6NmQ6N2ENClsgICAgMy43MzcxNjZd IERWQjogcmVnaXN0ZXJpbmcgYWRhcHRlciAyIGZyb250ZW5kIDAgKFBoaWxpcHMgVERBMTAw MjMgRFZCLUMpLi4uDQpbICAgIDMuNzM3ODI2XSBidWRnZXRfYXY6IGNpIGludGVyZmFjZSBp bml0aWFsaXNlZA0KZG9uZS4NCkFjdGl2YXRpbmcgc3dhcC4uLlsgICAgMy45NzczNDJdIEFk ZGluZyAxMDQ4NTcyayBzd2FwIG9uIC9kZXYveHZkYTIuICBQcmlvcml0eTotMSBleHRlbnRz OjEgYWNyb3NzOjEwNDg1NzJrIFNTDQpkb25lLg0KWyAgICAzLjk4NTY1N10gRVhUMy1mcyAo eHZkYTEpOiB3YXJuaW5nOiBtYXhpbWFsIG1vdW50IGNvdW50IHJlYWNoZWQsIHJ1bm5pbmcg ZTJmc2NrIGlzIHJlY29tbWVuZGVkDQpbICAgIDMuOTg2MDYxXSBFWFQzLWZzICh4dmRhMSk6 IHVzaW5nIGludGVybmFsIGpvdXJuYWwNCkxvYWRpbmcga2VybmVsIG1vZHVsZXMuLi5kb25l Lg0KQ2xlYW5pbmcgdXAgaWZ1cGRvd24uLi4uDQpTZXR0aW5nIHVwIG5ldHdvcmtpbmcuLi4u DQpBY3RpdmF0aW5nIGx2bSBhbmQgbWQgc3dhcC4uLmRvbmUuDQpDaGVja2luZyBmaWxlIHN5 c3RlbXMuLi5mc2NrIGZyb20gdXRpbC1saW51eC1uZyAyLjE3LjINCmRvbmUuDQpNb3VudGlu ZyBsb2NhbCBmaWxlc3lzdGVtcy4uLlsgICAgNC40Mjg1NDBdIGtqb3VybmFsZCBzdGFydGlu Zy4gIENvbW1pdCBpbnRlcnZhbCA1IHNlY29uZHMNClsgICAgNC40Mjk2ODBdIEVYVDMtZnMg KHh2ZGIxKTogd2FybmluZzogbWF4aW1hbCBtb3VudCBjb3VudCByZWFjaGVkLCBydW5uaW5n IGUyZnNjayBpcyByZWNvbW1lbmRlZA0KWyAgICA0LjQzMjM3MF0gRVhUMy1mcyAoeHZkYjEp OiB1c2luZyBpbnRlcm5hbCBqb3VybmFsDQpbICAgIDQuNDMyMzk5XSBFWFQzLWZzICh4dmRi MSk6IHJlY292ZXJ5IGNvbXBsZXRlDQpbICAgIDQuNDMyNDE5XSBFWFQzLWZzICh4dmRiMSk6 IG1vdW50ZWQgZmlsZXN5c3RlbSB3aXRoIG9yZGVyZWQgZGF0YSBtb2RlDQpkb25lLg0KQWN0 aXZhdGluZyBzd2FwZmlsZSBzd2FwLi4uZG9uZS4NCkNsZWFuaW5nIHVwIHRlbXBvcmFyeSBm aWxlcy4uLi4NCkNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLlNldHRpbmcga2Vy bmVsIHZhcmlhYmxlcyAuLi5lcnJvcjogInhlbi5pbmRlcGVuZGVudF93YWxsY2xvY2siIGlz IGFuIHVua25vd24ga2V5DQobWzMxbWZhaWxlZC4bWzM5OzQ5bQ0KZG9uZS4NClN0YXJ0aW5n IHBvcnRtYXAgZGFlbW9uLi4uLg0KU3RhcnRpbmcgTkZTIGNvbW1vbiB1dGlsaXRpZXM6IHN0 YXRkWyAgICA1LjQ2OTgxN10gUlBDOiBSZWdpc3RlcmVkIG5hbWVkIFVOSVggc29ja2V0IHRy YW5zcG9ydCBtb2R1bGUuDQpbICAgIDUuNDY5ODU0XSBSUEM6IFJlZ2lzdGVyZWQgdWRwIHRy YW5zcG9ydCBtb2R1bGUuDQpbICAgIDUuNDY5ODcwXSBSUEM6IFJlZ2lzdGVyZWQgdGNwIHRy YW5zcG9ydCBtb2R1bGUuDQpbICAgIDUuNDY5ODg0XSBSUEM6IFJlZ2lzdGVyZWQgdGNwIE5G U3Y0LjEgYmFja2NoYW5uZWwgdHJhbnNwb3J0IG1vZHVsZS4NClsgICAgNS41MzU3ODddIEZT LUNhY2hlOiBMb2FkZWQNClsgICAgNS41NjY1NDJdIEZTLUNhY2hlOiBOZXRmcyAnbmZzJyBy ZWdpc3RlcmVkIGZvciBjYWNoaW5nDQpbICAgIDUuNjAxNzU5XSBJbnN0YWxsaW5nIGtuZnNk IChjb3B5cmlnaHQgKEMpIDE5OTYgb2tpckBtb25hZC5zd2IuZGUpLg0KIGlkbWFwZC4NCkNs ZWFuaW5nIHVwIHRlbXBvcmFyeSBmaWxlcy4uLi4NClNldHRpbmcgY29uc29sZSBzY3JlZW4g bW9kZXMgYW5kIGZvbnRzLg0KG11SY2Fubm90ICh1bilzZXQgcG93ZXJzYXZlIG1vZGUNChtb OTszMF0bWzE0OzMwXQ1JTklUOiBFbnRlcmluZyBydW5sZXZlbDogMg0NClVzaW5nIG1ha2Vm aWxlLXN0eWxlIGNvbmN1cnJlbnQgYm9vdCBpbiBydW5sZXZlbCAyLg0KU3RhcnRpbmcgcG9y dG1hcCBkYWVtb24uLi5BbHJlYWR5IHJ1bm5pbmcuLg0KU3RhcnRpbmcgTkZTIGNvbW1vbiB1 dGlsaXRpZXM6IHN0YXRkIGlkbWFwZC4NClN0YXJ0aW5nIGVuaGFuY2VkIHN5c2xvZ2Q6IHJz eXNsb2dkLg0KWyAgICA2LjUwMDgyM10gc3ZjOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbG9ja2R2 MSBSUEMgc2VydmljZSAoZXJybm8gOTcpLg0KWyAgICA2LjUwNDM5OV0gTkZTRDogVXNpbmcg L3Zhci9saWIvbmZzL3Y0cmVjb3ZlcnkgYXMgdGhlIE5GU3Y0IHN0YXRlIHJlY292ZXJ5IGRp cmVjdG9yeQ0KWyAgICA2LjUyNjY4OF0gTkZTRDogc3RhcnRpbmcgOTAtc2Vjb25kIGdyYWNl IHBlcmlvZA0KRXhwb3J0aW5nIGRpcmVjdG9yaWVzIGZvciBORlMga2VybmVsIGRhZW1vbi4u Li4NClN0YXJ0aW5nIE5GUyBrZXJuZWwgZGFlbW9uOiBuZnNkIG1vdW50ZC4NClN0YXJ0aW5n IHBlcmlvZGljIGNvbW1hbmQgc2NoZWR1bGVyOiBjcm9uLg0KU3RhcnRpbmcgc3lzdGVtIG1l c3NhZ2UgYnVzOiBkYnVzLg0KU3RhcnRpbmcgTlRQIHNlcnZlcjogbnRwZC4NClN0YXJ0aW5n IFNhbWJhIGRhZW1vbnM6IG5tYmQgc21iZC4NClN0YXJ0aW5nIE9wZW5CU0QgU2VjdXJlIFNo ZWxsIHNlcnZlcjogc3NoZFsgICAgNy45NDE2NDldIHNzaGQgKDcwMyk6IC9wcm9jLzcwMy9v b21fYWRqIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgL3Byb2MvNzAzL29vbV9zY29yZV9h ZGogaW5zdGVhZC4NCi4NClN0YXJ0aW5nIExpbnV4IFZpZGVvIERpc2sgUmVjb3JkZXI6IHZk cg0KU2VhcmNoaW5nIGZvciBwbHVnaW5zIChWRFIgMS43LjIxLzEuNy4yMSkgKGNhY2hlIGhp dCk6dmRyYWRtaW4tYW06IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkNCiBlcGdzZWFyY2hv bmx5IHh2ZHIgZXBnc2VhcmNoIHZvbXBzZXJ2ZXIgZmVtb24gcXVpY2tlcGdzZWFyY2ggY29u ZmxpY3RjaGVja29ubHkgd2lyYmVsc2Nhbi4NClN0YXJ0aW5nIE11bmluLU5vZGU6IGRvbmUu DQpzdGFydHBhcjogc2VydmljZShzKSByZXR1cm5lZCBmYWlsdXJlOiB2ZHJhZG1pbi1hbSAu Li4gG1szMW1mYWlsZWQhG1szOTs0OW0NClsgICAxNC42NzQ4ODNdIEJVRzogdW5hYmxlIHRv IGhhbmRsZSBrZXJuZWwgcGFnaW5nIHJlcXVlc3QgYXQgZmZmZmM3ZmZmZmZmZjAwMA0KWyAg IDE0LjY3NDkxMF0gSVA6IFs8ZmZmZmZmZmY4MTFiNGMwYj5dIHN3aW90bGJfYm91bmNlKzB4 MmUvMHgzMQ0KWyAgIDE0LjY3NDkzMF0gUEdEIDAgDQpbICAgMTQuNjc0OTQwXSBPb3BzOiAw MDAyIFsjMV0gU01QIA0KWyAgIDE0LjY3NDk1Ml0gQ1BVIDAgDQpbICAgMTQuNjc0OTU3XSBN b2R1bGVzIGxpbmtlZCBpbjogbmZzZCBleHBvcnRmcyBuZnMgbG9ja2QgZnNjYWNoZSBhdXRo X3JwY2dzcyBuZnNfYWNsIHN1bnJwYyB0ZGExMDAyMyBidWRnZXRfYXYgZXZkZXYgc2FhNzE0 Nl92diB2aWRlb2RldiB2NGwyX2NvbXBhdF9pb2N0bDMyIHZpZGVvYnVmX2RtYV9zZyB2aWRl b2J1Zl9jb3JlIGJ1ZGdldF9jb3JlIHNuZF9wY20gZHZiX2NvcmUgc25kX3RpbWVyIHNhYTcx NDYgc25kIHR0cGNpX2VlcHJvbSBzb3VuZGNvcmUgc25kX3BhZ2VfYWxsb2MgaTJjX2NvcmUg cGNzcGtyIGV4dDMgamJkIG1iY2FjaGUgeGVuX25ldGZyb250IHhlbl9ibGtmcm9udA0KWyAg IDE0LjY3NTA1N10gDQpbICAgMTQuNjc1MDY1XSBQaWQ6IDAsIGNvbW06IHN3YXBwZXIvMCBO b3QgdGFpbnRlZCAzLjIuOC1hbWQ2NCAjMSAgDQpbICAgMTQuNjc1MDc5XSBSSVA6IGUwMzA6 WzxmZmZmZmZmZjgxMWI0YzBiPl0gIFs8ZmZmZmZmZmY4MTFiNGMwYj5dIHN3aW90bGJfYm91 bmNlKzB4MmUvMHgzMQ0KWyAgIDE0LjY3NTA5N10gUlNQOiBlMDJiOmZmZmY4ODAwMTNmYWJl NTggIEVGTEFHUzogMDAwMTAyMDINClsgICAxNC42NzUxMDZdIFJBWDogZmZmZjg4MDAxMjgw MDAwMCBSQlg6IDAwMDAwMDAwMDAwMDAwMDEgUkNYOiAwMDAwMDAwMDAwMDAxMDAwDQpbICAg MTQuNjc1MTE2XSBSRFg6IDAwMDAwMDAwMDAwMDEwMDAgUlNJOiBmZmZmODgwMDEyODAwMDAw IFJESTogZmZmZmM3ZmZmZmZmZjAwMA0KWyAgIDE0LjY3NTEyNl0gUkJQOiAwMDAwMDAwMDAw MDAwMDAyIFIwODogZmZmZmM3ZmZmZmZmZjAwMCBSMDk6IGZmZmY4ODAwMTNmOTgwMDANClsg ICAxNC42NzUxMzddIFIxMDogMDAwMDAwMDAwMDAwMDAwMSBSMTE6IGZmZmY4ODAwMDMzNzYw MDAgUjEyOiBmZmZmODgwMDAzMmM1MDkwDQpbICAgMTQuNjc1MTQ3XSBSMTM6IDAwMDAwMDAw MDAwMDAxNDkgUjE0OiBmZmZmODgwMDAzM2UwMDAwIFIxNTogZmZmZmZmZmY4MTYwMWZkOA0K WyAgIDE0LjY3NTE2M10gRlM6ICAwMDAwN2YzZmY5ODkzNzAwKDAwMDApIEdTOmZmZmY4ODAw MTNmYTgwMDAoMDAwMCkga25sR1M6MDAwMDAwMDAwMDAwMDAwMA0KWyAgIDE0LjY3NTE3NV0g Q1M6ICBlMDMzIERTOiAwMDAwIEVTOiAwMDAwIENSMDogMDAwMDAwMDA4MDA1MDAzYg0KWyAg IDE0LjY3NTE4NF0gQ1IyOiBmZmZmYzdmZmZmZmZmMDAwIENSMzogMDAwMDAwMDAxMjY4MzAw MCBDUjQ6IDAwMDAwMDAwMDAwMDA2NjANClsgICAxNC42NzUxOTVdIERSMDogMDAwMDAwMDAw MDAwMDAwMCBEUjE6IDAwMDAwMDAwMDAwMDAwMDAgRFIyOiAwMDAwMDAwMDAwMDAwMDAwDQpb ICAgMTQuNjc1MjA1XSBEUjM6IDAwMDAwMDAwMDAwMDAwMDAgRFI2OiAwMDAwMDAwMGZmZmYw ZmYwIERSNzogMDAwMDAwMDAwMDAwMDQwMA0KWyAgIDE0LjY3NTIxNl0gUHJvY2VzcyBzd2Fw cGVyLzAgKHBpZDogMCwgdGhyZWFkaW5mbyBmZmZmZmZmZjgxNjAwMDAwLCB0YXNrIGZmZmZm ZmZmODE2MGQwMjApDQpbICAgMTQuNjc1MjI3XSBTdGFjazoNClsgICAxNC42NzUyMzJdICBm ZmZmZmZmZjgxMjExODI2IGZmZmY4ODAwMDJlZGEwMDAgMDAwMDAwMDAwMDAwMDAwMCBmZmZm YzkwMDAwNDA4MDAwDQpbICAgMTQuNjc1MjUxXSAgMDAwMDAwMDAwMDBiMDE1MCAwMDAwMDAw MDAwMDAwMDA2IGZmZmZmZmZmYTAxM2VjNGEgZmZmZmZmZmY4MTA5NDZjZA0KWyAgIDE0LjY3 NTI3MF0gIGZmZmZmZmZmODEwOTkyMDMgZmZmZjg4MDAwMzM3NjAwMCAwMDAwMDAwMDAwMDAw MDAwIGZmZmY4ODAwMDJlZGE0YjANClsgICAxNC42NzUyODldIENhbGwgVHJhY2U6DQpbICAg MTQuNjc1Mjk1XSAgPElSUT4gDQpbICAgMTQuNjc1MzA3XSAgWzxmZmZmZmZmZjgxMjExODI2 Pl0gPyB4ZW5fc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUrMHgyZS8weDQ3DQpbICAgMTQuNjc1 MzIyXSAgWzxmZmZmZmZmZmEwMTNlYzRhPl0gPyB2cGVpcnErMHg3Zi8weDE5OCBbYnVkZ2V0 X2NvcmVdDQpbICAgMTQuNjc1MzM3XSAgWzxmZmZmZmZmZjgxMDk0NmNkPl0gPyBoYW5kbGVf aXJxX2V2ZW50X3BlcmNwdSsweDE2Ni8weDE4NA0KWyAgIDE0LjY3NTM1MF0gIFs8ZmZmZmZm ZmY4MTA5OTIwMz5dID8gX19yY3VfcHJvY2Vzc19jYWxsYmFja3MrMHg3MS8weDJmOA0KWyAg IDE0LjY3NTM2NF0gIFs8ZmZmZmZmZmY4MTA0ZDE3NT5dID8gdGFza2xldF9hY3Rpb24rMHg3 Ni8weGM1DQpbICAgMTQuNjc1Mzc2XSAgWzxmZmZmZmZmZjgxMjBhOWFjPl0gPyBlb2lfcGly cSsweDViLzB4NzcNClsgICAxNC42NzUzODhdICBbPGZmZmZmZmZmODEwNGNiYzY+XSA/IF9f ZG9fc29mdGlycSsweGM0LzB4MWEwDQpbICAgMTQuNjc1NDAwXSAgWzxmZmZmZmZmZjgxMjBh MDIyPl0gPyBfX3hlbl9ldnRjaG5fZG9fdXBjYWxsKzB4MWM3LzB4MjA1DQpbICAgMTQuNjc1 NDEyXSAgWzxmZmZmZmZmZjgxMzRiMDZjPl0gPyBjYWxsX3NvZnRpcnErMHgxYy8weDMwDQpb ICAgMTQuNjc1NDI1XSAgWzxmZmZmZmZmZjgxMDBmYTQ3Pl0gPyBkb19zb2Z0aXJxKzB4M2Yv MHg3OQ0KWyAgIDE0LjY3NTQzNl0gIFs8ZmZmZmZmZmY4MTA0Yzk5Nj5dID8gaXJxX2V4aXQr MHg0NC8weGI1DQpbICAgMTQuNjc1NDUyXSAgWzxmZmZmZmZmZjgxMjBiMDMyPl0gPyB4ZW5f ZXZ0Y2huX2RvX3VwY2FsbCsweDI3LzB4MzINClsgICAxNC42NzU0NjRdICBbPGZmZmZmZmZm ODEzNGIwYmU+XSA/IHhlbl9kb19oeXBlcnZpc29yX2NhbGxiYWNrKzB4MWUvMHgzMA0KWyAg IDE0LjY3NTQ3M10gIDxFT0k+IA0KWyAgIDE0LjY3NTQ4NF0gIFs8ZmZmZmZmZmY4MTAwNzM2 Zj5dID8geGVuX3Jlc3RvcmVfZmxfZGlyZWN0X3JlbG9jKzB4NC8weDQNClsgICAxNC42NzU0 OTZdICBbPGZmZmZmZmZmODEwMDEzYWE+XSA/IGh5cGVyY2FsbF9wYWdlKzB4M2FhLzB4MTAw MA0KWyAgIDE0LjY3NTUwN10gIFs8ZmZmZmZmZmY4MTAwMTNhYT5dID8gaHlwZXJjYWxsX3Bh Z2UrMHgzYWEvMHgxMDAwDQpbICAgMTQuNjc1NTIxXSAgWzxmZmZmZmZmZjgxMjZhZTE3Pl0g PyBjcHVpZGxlX2lkbGVfY2FsbCsweDE2LzB4MWFmDQpbICAgMTQuNjc1NTMzXSAgWzxmZmZm ZmZmZjgxMDA2ZDE0Pl0gPyB4ZW5fc2FmZV9oYWx0KzB4Yy8weDE1DQpbICAgMTQuNjc1NTQ1 XSAgWzxmZmZmZmZmZjgxMDE1MGEyPl0gPyBkZWZhdWx0X2lkbGUrMHg0Yi8weDg0DQpbICAg MTQuNjc1NTU2XSAgWzxmZmZmZmZmZjgxMDBkZGY2Pl0gPyBjcHVfaWRsZSsweGI5LzB4ZWYN ClsgICAxNC42NzU1NjhdICBbPGZmZmZmZmZmODE2OWFiZmY+XSA/IHN0YXJ0X2tlcm5lbCsw eDM5NS8weDNhMA0KWyAgIDE0LjY3NTU4MF0gIFs8ZmZmZmZmZmY4MTY5YzhhNT5dID8geGVu X3N0YXJ0X2tlcm5lbCsweDU5My8weDU5OA0KWyAgIDE0LjY3NTU4OV0gQ29kZTogODkgZjAg NzUgMTMgNDggYmUgMDAgMDAgMDAgMDAgMDAgODggZmYgZmYgNDggOGQgMzQgMzcgNDggODkg YzcgZWIgMTEgNDkgYjggMDAgMDAgMDAgMDAgMDAgODggZmYgZmYgNGUgOGQgMDQgMDcgNGMg ODkgYzcgNDggODkgZDEgPGYzPiBhNCBjMyA0OCA4OSBmMCA0OCAyYiAwNSA3MCA5NiA2MiAw MCA0YyA4YiAwZCA5OSA5NiA2MiAwMCA0OCANClsgICAxNC42NzU3MzVdIFJJUCAgWzxmZmZm ZmZmZjgxMWI0YzBiPl0gc3dpb3RsYl9ib3VuY2UrMHgyZS8weDMxDQpbICAgMTQuNjc1NzQ4 XSAgUlNQIDxmZmZmODgwMDEzZmFiZTU4Pg0KWyAgIDE0LjY3NTc1NV0gQ1IyOiBmZmZmYzdm ZmZmZmZmMDAwDQpbICAgMTQuNjc1NzY1XSAtLS1bIGVuZCB0cmFjZSA2Mjg4NzIyZmU5MTkw OGNkIF0tLS0NClsgICAxNC42NzU3NzRdIEtlcm5lbCBwYW5pYyAtIG5vdCBzeW5jaW5nOiBG YXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0DQpbICAgMTQuNjc1Nzg0XSBQaWQ6IDAsIGNv bW06IHN3YXBwZXIvMCBUYWludGVkOiBHICAgICAgRCAgICAgIDMuMi44LWFtZDY0ICMxDQpb ICAgMTQuNjc1NzkzXSBDYWxsIFRyYWNlOg0KWyAgIDE0LjY3NTc5OV0gIDxJUlE+ICBbPGZm ZmZmZmZmODEzNDBiYWM+XSA/IHBhbmljKzB4OTIvMHgxYTANClsgICAxNC42NzU4MTddICBb PGZmZmZmZmZmODEwNDc5Njg+XSA/IGttc2dfZHVtcCsweDQxLzB4ZGQNClsgICAxNC42NzU4 MjhdICBbPGZmZmZmZmZmODEzNDM4NDE+XSA/IG9vcHNfZW5kKzB4YTkvMHhiNg0KWyAgIDE0 LjY3NTgzOV0gIFs8ZmZmZmZmZmY4MTAyZWM3NT5dID8gbm9fY29udGV4dCsweDFmZi8weDIw Yw0KWyAgIDE0LjY3NTg1Ml0gIFs8ZmZmZmZmZmY4MTA0M2JmYT5dID8gdHJ5X3RvX3dha2Vf dXArMHgxODEvMHgxOTENClsgICAxNC42NzU4NjNdICBbPGZmZmZmZmZmODEzNDU5MWQ+XSA/ IGRvX3BhZ2VfZmF1bHQrMHgxYWQvMHgzNGMNClsgICAxNC42NzU4NzVdICBbPGZmZmZmZmZm ODEwMmMxMjI+XSA/IHB2Y2xvY2tfY2xvY2tzb3VyY2VfcmVhZCsweDQ2LzB4YjQNClsgICAx NC42NzU4ODhdICBbPGZmZmZmZmZmODEwYjc2YzY+XSA/IHBlcmZfZXZlbnRfdGFza190aWNr KzB4MjUvMHgyM2ENClsgICAxNC42NzU5MDFdICBbPGZmZmZmZmZmODEwNjMxYjg+XSA/IHJ1 bl9wb3NpeF9jcHVfdGltZXJzKzB4MjcvMHg2MWINClsgICAxNC42NzU5MTNdICBbPGZmZmZm ZmZmODEwNmRmN2I+XSA/IHRpY2tfbm9oel9oYW5kbGVyKzB4Y2IvMHhjYg0KWyAgIDE0LjY3 NTkyNV0gIFs8ZmZmZmZmZmY4MTAxMzk2ZD5dID8gc2NoZWRfY2xvY2srMHg1LzB4OA0KWyAg IDE0LjY3NTkzNl0gIFs8ZmZmZmZmZmY4MTAyYzEyMj5dID8gcHZjbG9ja19jbG9ja3NvdXJj ZV9yZWFkKzB4NDYvMHhiNA0KWyAgIDE0LjY3NTk0OF0gIFs8ZmZmZmZmZmY4MTM0MmYzNT5d ID8gcGFnZV9mYXVsdCsweDI1LzB4MzANClsgICAxNC42NzU5NTldICBbPGZmZmZmZmZmODEx YjRjMGI+XSA/IHN3aW90bGJfYm91bmNlKzB4MmUvMHgzMQ0KWyAgIDE0LjY3NTk3MV0gIFs8 ZmZmZmZmZmY4MTIxMTgyNj5dID8geGVuX3N3aW90bGJfc3luY19zZ19mb3JfY3B1KzB4MmUv MHg0Nw0KWyAgIDE0LjY3NTk4NV0gIFs8ZmZmZmZmZmZhMDEzZWM0YT5dID8gdnBlaXJxKzB4 N2YvMHgxOTggW2J1ZGdldF9jb3JlXQ0KWyAgIDE0LjY3NTk5N10gIFs8ZmZmZmZmZmY4MTA5 NDZjZD5dID8gaGFuZGxlX2lycV9ldmVudF9wZXJjcHUrMHgxNjYvMHgxODQNClsgICAxNC42 NzYwMDldICBbPGZmZmZmZmZmODEwOTkyMDM+XSA/IF9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tz KzB4NzEvMHgyZjgNClsgICAxNC42NzYwMjJdICBbPGZmZmZmZmZmODEwNGQxNzU+XSA/IHRh c2tsZXRfYWN0aW9uKzB4NzYvMHhjNQ0KWyAgIDE0LjY3NjAzM10gIFs8ZmZmZmZmZmY4MTIw YTlhYz5dID8gZW9pX3BpcnErMHg1Yi8weDc3DQpbICAgMTQuNjc2MDQ0XSAgWzxmZmZmZmZm ZjgxMDRjYmM2Pl0gPyBfX2RvX3NvZnRpcnErMHhjNC8weDFhMA0KWyAgIDE0LjY3NjA1OV0g IFs8ZmZmZmZmZmY4MTIwYTAyMj5dID8gX194ZW5fZXZ0Y2huX2RvX3VwY2FsbCsweDFjNy8w eDIwNQ0KWyAgIDE0LjY3NjA3Ml0gIFs8ZmZmZmZmZmY4MTM0YjA2Yz5dID8gY2FsbF9zb2Z0 aXJxKzB4MWMvMHgzMA0KWyAgIDE0LjY3NjA4M10gIFs8ZmZmZmZmZmY4MTAwZmE0Nz5dID8g ZG9fc29mdGlycSsweDNmLzB4NzkNClsgICAxNC42NzYwOTRdICBbPGZmZmZmZmZmODEwNGM5 OTY+XSA/IGlycV9leGl0KzB4NDQvMHhiNQ0KWyAgIDE0LjY3NjEwNl0gIFs8ZmZmZmZmZmY4 MTIwYjAzMj5dID8geGVuX2V2dGNobl9kb191cGNhbGwrMHgyNy8weDMyDQpbICAgMTQuNjc2 MTIwXSAgWzxmZmZmZmZmZjgxMzRiMGJlPl0gPyB4ZW5fZG9faHlwZXJ2aXNvcl9jYWxsYmFj aysweDFlLzB4MzANClsgICAxNC42NzYxMjldICA8RU9JPiAgWzxmZmZmZmZmZjgxMDA3MzZm Pl0gPyB4ZW5fcmVzdG9yZV9mbF9kaXJlY3RfcmVsb2MrMHg0LzB4NA0KWyAgIDE0LjY3NjE0 OV0gIFs8ZmZmZmZmZmY4MTAwMTNhYT5dID8gaHlwZXJjYWxsX3BhZ2UrMHgzYWEvMHgxMDAw DQpbICAgMTQuNjc2MTYwXSAgWzxmZmZmZmZmZjgxMDAxM2FhPl0gPyBoeXBlcmNhbGxfcGFn ZSsweDNhYS8weDEwMDANClsgICAxNC42NzYxNzJdICBbPGZmZmZmZmZmODEyNmFlMTc+XSA/ IGNwdWlkbGVfaWRsZV9jYWxsKzB4MTYvMHgxYWYNClsgICAxNC42NzYxODRdICBbPGZmZmZm ZmZmODEwMDZkMTQ+XSA/IHhlbl9zYWZlX2hhbHQrMHhjLzB4MTUNClsgICAxNC42NzYxOTVd ICBbPGZmZmZmZmZmODEwMTUwYTI+XSA/IGRlZmF1bHRfaWRsZSsweDRiLzB4ODQNClsgICAx NC42NzYyMDZdICBbPGZmZmZmZmZmODEwMGRkZjY+XSA/IGNwdV9pZGxlKzB4YjkvMHhlZg0K WyAgIDE0LjY3NjIxN10gIFs8ZmZmZmZmZmY4MTY5YWJmZj5dID8gc3RhcnRfa2VybmVsKzB4 Mzk1LzB4M2EwDQpbICAgMTQuNjc2MjI5XSAgWzxmZmZmZmZmZjgxNjljOGE1Pl0gPyB4ZW5f c3RhcnRfa2VybmVsKzB4NTkzLzB4NTk4DQo= --=_F1yjpLocfe5Ra5tK65RmHGcdd2qVYzUzBxBqAXkQZGBAcVOw Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --=_F1yjpLocfe5Ra5tK65RmHGcdd2qVYzUzBxBqAXkQZGBAcVOw-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?Carsten_Schiers?= Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 11 May 2012 11:39:08 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1809693732979586600==" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= Cc: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?Jan_Beulich?= , =?utf-8?Q?Sander_Eikelenboom?= List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --===============1809693732979586600== Content-Type: multipart/alternative; boundary="=_YUdH-dvcOkdqumcxjwwOCt1SaC2W6cO+GX5lCiR8bVByKT8d" This is a multi-part message in MIME format. Your mail reader does not understand MIME message format. --=_YUdH-dvcOkdqumcxjwwOCt1SaC2W6cO+GX5lCiR8bVByKT8d Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Konrad,=0D=0A=0D=0A=C2=A0=0D=0Adon't want to be pushy, as I have no re= al issue. I simply use the Xenified kernel or take the double load.=20=0D= =0A=0D=0ABut I think this mistery is still open. My last status was that = the latest patch you produced resulted in a BUG,=20=0D=0A=0D=0Aso we stil= l have not checked whether our theory is correct.=0D=0A=0D=0A=C2=A0=0D=0A= BR,=0D=0A=0D=0ACarsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Nachrich= t-----=0D=0AVon:Carsten Schiers =0D=0AGesendet:Mi 29.= 02.2012 14:01=0D=0ABetreff:Re: [Xen-devel] Load increase after memory upg= rade (part2)=0D=0AAnlage:debug.log, inline.txt=0D=0AAn:Konrad Rzeszutek W= ilk ;=20=0D=0ACC:Sander Eikelenboom ; xen-devel ; Jan Beulich ; Konrad Rzeszutek Wilk ;=20=0D=0A=20=0D=0A= =0D=0AI am very sorry. I accidently started the DomU with the wrong confi= g file, thus it's clear why there is no difference=0D=0A=0D=0Abetween the= two. And unfortunately, the DomU with the correct config file is having = a BUG:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=0A [ 14.674883] BUG: unable to han= dle kernel paging request at ffffc7fffffff000 [ 14.674910] IP: [] swiotlb_bounce+0x2e/0x31 [ 14.674930] PGD 0 [ 14.674940= ] Oops: 0002 [#1] SMP [ 14.674952] CPU 0 [ 14.674957] Modules linke= d in: nfsd exportfs nfs lockd fscache auth_rpcgss nfs_acl sunrpc tda10023= budget_av evdev saa7146_vv videodev v4l2_compat_ioctl32 videobuf_dma_sg = videobuf_core budget_core snd_pcm dvb_core snd_timer saa7146 snd ttpci_ee= prom soundcore snd_page_alloc i2c_core pcspkr ext3 jbd mbcache xen_netfro= nt xen_blkfront [ 14.675057] [ 14.675065] Pid: 0, comm: swapper/0 No= t tainted 3.2.8-amd64 #1 [ 14.675079] RIP: e030:[] = [] swiotlb_bounce+0x2e/0x31 [ 14.675097] RSP: e02b:f= fff880013fabe58 EFLAGS: 00010202 [ 14.675106] RAX: ffff880012800000 RB= X: 0000000000000001 RCX: 0000000000001000 [ 14.675116] RDX: 00000000000= 01000 RSI: ffff880012800000 RDI: ffffc7fffffff000 [ 14.675126] RBP: 000= 0000000000002 R08: ffffc7fffffff000 R09: ffff880013f98000 [ 14.675137] = R10: 0000000000000001 R11: ffff880003376000 R12: ffff8800032c5090 [ 14.= 675147] R13: 0000000000000149 R14: ffff8800033e0000 R15: ffffffff81601fd8= [ 14.675163] FS: 00007f3ff9893700(0000) GS:ffff880013fa8000(0000) knl= GS:0000000000000000 [ 14.675175] CS: e033 DS: 0000 ES: 0000 CR0: 00000= 0008005003b [ 14.675184] CR2: ffffc7fffffff000 CR3: 0000000012683000 CR= 4: 0000000000000660 [ 14.675195] DR0: 0000000000000000 DR1: 00000000000= 00000 DR2: 0000000000000000 [ 14.675205] DR3: 0000000000000000 DR6: 000= 00000ffff0ff0 DR7: 0000000000000400 [ 14.675216] Process swapper/0 (pid= : 0, threadinfo ffffffff81600000, task ffffffff8160d020) [ 14.675227] S= tack: [ 14.675232] ffffffff81211826 ffff880002eda000 0000000000000000 = ffffc90000408000 [ 14.675251] 00000000000b0150 0000000000000006 ffffff= ffa013ec4a ffffffff810946cd [ 14.675270] ffffffff81099203 ffff88000337= 6000 0000000000000000 ffff880002eda4b0 [ 14.675289] Call Trace: [ 14.= 675295] [ 14.675307] [] =3F xen_swiotlb_sync= _sg_for_cpu+0x2e/0x47 [ 14.675322] [] =3F vpeirq+0x7= f/0x198 [budget_core] [ 14.675337] [] =3F handle_irq= _event_percpu+0x166/0x184 [ 14.675350] [] =3F __rcu_= process_callbacks+0x71/0x2f8 [ 14.675364] [] =3F tas= klet_action+0x76/0xc5 [ 14.675376] [] =3F eoi_pirq+0= x5b/0x77 [ 14.675388] [] =3F __do_softirq+0xc4/0x1a0= [ 14.675400] [] =3F __xen_evtchn_do_upcall+0x1c7/0x= 205 [ 14.675412] [] =3F call_softirq+0x1c/0x30 [ 1= 4.675425] [] =3F do_softirq+0x3f/0x79 [ 14.675436] = [] =3F irq_exit+0x44/0xb5 [ 14.675452] [] =3F xen_evtchn_do_upcall+0x27/0x32 [ 14.675464] [] =3F xen_do_hypervisor_callback+0x1e/0x30 [ 14.675473] =20=0D= =0A=0D=0A=C2=A0=0D=0AComplete log is attached.=0D=0A=0D=0A=C2=A0=0D=0ABR,= Carsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D=0AAn= :Konrad Rzeszutek Wilk ;=20=0D=0ACC:Konrad Rzeszu= tek Wilk ; xen-devel ; = Jan Beulich ; Sander Eikelenboom ;=20=0D=0AVon:Carsten Schiers =0D=0AGesendet:Mi 29.0= 2.2012 13:16=0D=0ABetreff:Re: [Xen-devel] Load increase after memory upgr= ade (part2)=0D=0AAnlage:inline.txt=0D=0A=20=0D=0A=0D=0AGreat news: it wor= ks and load is back to normal. In the attached graph you can see the peak= =0D=0A=0D=0Ain blue (compilation of the patched 3.2.8 Kernel) and then af= ter 16.00 the going life of the=0D=0A=0D=0Avideo DomU. We are below an av= aerage of 7% usage (figures are in Permille).=0D=0A=0D=0A=0D=0AThanks so = much. Is that already "the final patch"=3F=0D=0A=0D=0A=C2=A0=0D=0ABR, Car= sten.=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Na= chricht-----=0D=0AAn:Konrad Rzeszutek Wilk ;=20=0D= =0ACC:Sander Eikelenboom ; xen-devel ; Jan Beulich ; Konrad Rzeszutek Wilk= ;=20=0D=0AVon:Carsten Schiers =0D= =0AGesendet:Di 28.02.2012 15:39=0D=0ABetreff:Re: [Xen-devel] Load increas= e after memory upgrade (part2)=0D=0AAnlage:inline.txt=0D=0A=20=0D=0A=0D=0A= Well let me check for a longer period of time, and especially, whether th= e DomU is still=0D=0A=0D=0Aworking (can do that only from at home), but l= oad looks pretty well after applying the=0D=0A=0D=0Apatch to 3.2.8 :-D.=0D= =0A=0D=0A=C2=A0=0D=0ABR,=0D=0A=0D=0ACarsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3= =BCngliche Nachricht-----=0D=0AAn:Jan Beulich ;=20=0D=0A= CC:Konrad Rzeszutek Wilk ; xen-devel ; Carsten Schiers ; Sander Eikelenboom = ;=20=0D=0AVon:Konrad Rzeszutek Wilk =0D=0AGesendet:Fr 17.02.2012 16:18=0D=0ABetreff:Re: [Xen-devel] = Load increase after memory upgrade (part2)=0D=0AOn Thu, Feb 16, 2012 at 0= 8:56:53AM +0000, Jan Beulich wrote:=0D=0A> >>> On 15.02.12 at 20:28, Konr= ad Rzeszutek Wilk wrote:=0D=0A> >@@ -1550,7 +155= 2,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gf= p_mask,=0D=0A> > struct page **pages;=0D=0A> > unsigned int nr_pages, arr= ay_size, i;=0D=0A> > gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) |= __GFP_ZERO;=0D=0A> >-=0D=0A> >+gfp_t dma_mask =3D gfp_mask & (__GFP_DMA = | __GFP_DMA32);=0D=0A> >+if (xen_pv_domain()) {=0D=0A> >+if (dma_mask =3D= =3D (__GFP_DMA | __GFP_DMA32))=0D=0A>=20=0D=0A> I didn't spot where you f= orce this normally invalid combination, without=0D=0A> which the change w= on't affect vmalloc32() in a 32-bit kernel.=0D=0A>=20=0D=0A> >+gfp_mask &= =3D (__GFP_DMA | __GFP_DMA32);=0D=0A>=20=0D=0A> gfp_mask &=3D ~(__GFP_DMA= | __GFP_DMA32);=0D=0A>=20=0D=0A> Jan=0D=0A=0D=0ADuh!=0D=0AGood eyes. Tha= nks for catching that.=0D=0A=0D=0A>=20=0D=0A> >+}=0D=0A> > nr_pages =3D (= area->size - PAGE_SIZE) >> PAGE_SHIFT;=0D=0A> > array_size =3D (nr_pages = * sizeof(struct page *));=0D=0A> >=20=0D=0A>=20=0D=0A=0D=0A______________= _________________________________=0D=0AXen-devel mailing list=0D=0AXen-de= vel@lists.xensource.com=0D=0Ahttp://lists.xensource.com/xen-devel=0D=0A=20= =0D=0A=20=0D=0A=0D=0A=C2=A0=0D=0A --------------------------------=0D=0AE= -Mail ist virenfrei.=0D=0A Von AVG =C3=BCberpr=C3=BCft - www.avg.de=0D=0A= Version: 2012.0.2127 / Virendatenbank: 2411/4932 - Ausgabedatum: 12.04.2= 012=0D=0A=20 --=_YUdH-dvcOkdqumcxjwwOCt1SaC2W6cO+GX5lCiR8bVByKT8d Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlv bmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+PGh0bWw+ CjxoZWFkPgogIDxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iWmFyYWZhIFdlYkFj Y2VzcyB2Ny4wLjYtMzI3NTIiPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+QVc6IFtYZW4t ZGV2ZWxdIExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGUgKHBhcnQyKTwvdGl0 bGU+CiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgYm9keQ0KICAgICAgew0KICAg ICAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIFNhbnMtU2VyaWYgISBpbXBvcnRh bnQ7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgcGFkZGluZzogNXB4IDVw eCA1cHggNXB4Ow0KICAgICAgICBtYXJnaW46IDBweDsNCiAgICAgICAgYm9yZGVyLXN0eWxl OiBub25lOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOw0KICAgICAgfQ0K DQogICAgICBwLCB1bCwgbGkNCiAgICAgIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMHB4Ow0K ICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7DQogICAgICB9DQogIDwvc3R5bGU+CjwvaGVh ZD4KPGJvZHk+CjxwPkhpIEtvbnJhZCw8L3A+PHA+Jm5ic3A7PC9wPjxwPmRvbiYjMzk7dCB3 YW50IHRvIGJlIHB1c2h5LCBhcyBJIGhhdmUgbm8gcmVhbCBpc3N1ZS4gSSBzaW1wbHkgdXNl IHRoZSBYZW5pZmllZCBrZXJuZWwgb3IgdGFrZSB0aGUgZG91YmxlIGxvYWQuIDwvcD48cD5C dXQgSSB0aGluayB0aGlzIG1pc3RlcnkgaXMgc3RpbGwgb3Blbi4gTXkgbGFzdCBzdGF0dXMg d2FzIHRoYXQgdGhlIGxhdGVzdCBwYXRjaCB5b3UgcHJvZHVjZWQgcmVzdWx0ZWQgaW4gYSBC VUcsIDwvcD48cD5zbyB3ZSBzdGlsbCBoYXZlIG5vdCBjaGVja2VkIHdoZXRoZXIgb3VyIHRo ZW9yeSBpcyBjb3JyZWN0LjwvcD48cD4mbmJzcDs8L3A+PHA+QlIsPC9wPjxwPkNhcnN0ZW4u PGJyIC8+Jm5ic3A7PC9wPjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDogMnB4IHNv bGlkICMzMjVGQkE7IHBhZGRpbmctbGVmdDogNXB4O21hcmdpbi1sZWZ0OjVweDsiPi0tLS0t VXJzcHImdXVtbDtuZ2xpY2hlIE5hY2hyaWNodC0tLS0tPGJyIC8+PHN0cm9uZz5Wb246PC9z dHJvbmc+CUNhcnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3RlbkBzY2hpZXJzLmRlJmd0OzxiciAv PjxzdHJvbmc+R2VzZW5kZXQ6PC9zdHJvbmc+CU1pIDI5LjAyLjIwMTIgMTQ6MDE8YnIgLz48 c3Ryb25nPkJldHJlZmY6PC9zdHJvbmc+CVJlOiBbWGVuLWRldmVsXSBMb2FkIGluY3JlYXNl IGFmdGVyIG1lbW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz48c3Ryb25nPkFubGFnZTo8L3N0 cm9uZz4JZGVidWcubG9nLCBpbmxpbmUudHh0PGJyIC8+PHN0cm9uZz5Bbjo8L3N0cm9uZz4J S29ucmFkIFJ6ZXN6dXRlayBXaWxrICZsdDtrb25yYWQud2lsa0BvcmFjbGUuY29tJmd0Ozsg PGJyIC8+PHN0cm9uZz5DQzo8L3N0cm9uZz4JU2FuZGVyIEVpa2VsZW5ib29tICZsdDtsaW51 eEBlaWtlbGVuYm9vbS5pdCZndDs7IHhlbi1kZXZlbCAmbHQ7eGVuLWRldmVsQGxpc3RzLnhl bnNvdXJjZS5jb20mZ3Q7OyBKYW4gQmV1bGljaCAmbHQ7amJldWxpY2hAc3VzZS5jb20mZ3Q7 OyBLb25yYWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJhZEBkYXJub2sub3JnJmd0OzsgPGJy IC8+PHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5IHsgZm9udC1mYW1pbHk6IG1vbm9zcGFj ZTsgfTwvc3R5bGU+ICAgICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAg ICAgLmJvZHljbGFzcyAgICAgICB7ICAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBWZXJk YW5hLCBTYW5zLVNlcmlmICEgaW1wb3J0YW50OyAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsg ICAgICAgICBwYWRkaW5nOiA1cHggNXB4IDVweCA1cHg7ICAgICAgICAgbWFyZ2luOiAwcHg7 ICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lOyAgICAgICAgIGJhY2tncm91bmQtY29sb3I6 ICNmZmZmZmY7ICAgICAgIH0gICAgICAgIHAsIHVsLCBsaSAgICAgICB7ICAgICAgICAgbWFy Z2luLXRvcDogMHB4OyAgICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsgICAgICAgfSAgIDwv c3R5bGU+ICA8ZGl2PjxwPkkgYW0gdmVyeSBzb3JyeS4gSSBhY2NpZGVudGx5IHN0YXJ0ZWQg dGhlIERvbVUgd2l0aCB0aGUgd3JvbmcgY29uZmlnIGZpbGUsIHRodXMgaXQmIzM5O3MgY2xl YXIgd2h5IHRoZXJlIGlzIG5vIGRpZmZlcmVuY2U8L3A+PHA+YmV0d2VlbiB0aGUgdHdvLiBB bmQgdW5mb3J0dW5hdGVseSwgdGhlIERvbVUgd2l0aCB0aGUgY29ycmVjdCBjb25maWcgZmls ZSBpcyBoYXZpbmcgYSBCVUc6PC9wPjxwPiZuYnNwOzwvcD48cHJlPgogWyAgIDE0LjY3NDg4 M10gQlVHOiB1bmFibGUgdG8gaGFuZGxlIGtlcm5lbCBwYWdpbmcgcmVxdWVzdCBhdCBmZmZm YzdmZmZmZmZmMDAwIFsgICAxNC42NzQ5MTBdIElQOiBbJmx0O2ZmZmZmZmZmODExYjRjMGIm Z3Q7XSBzd2lvdGxiX2JvdW5jZSsweDJlLzB4MzEgWyAgIDE0LjY3NDkzMF0gUEdEIDAgIFsg ICAxNC42NzQ5NDBdIE9vcHM6IDAwMDIgWyMxXSBTTVAgIFsgICAxNC42NzQ5NTJdIENQVSAw ICBbICAgMTQuNjc0OTU3XSBNb2R1bGVzIGxpbmtlZCBpbjogbmZzZCBleHBvcnRmcyBuZnMg bG9ja2QgZnNjYWNoZSBhdXRoX3JwY2dzcyBuZnNfYWNsIHN1bnJwYyB0ZGExMDAyMyBidWRn ZXRfYXYgZXZkZXYgc2FhNzE0Nl92diB2aWRlb2RldiB2NGwyX2NvbXBhdF9pb2N0bDMyIHZp ZGVvYnVmX2RtYV9zZyB2aWRlb2J1Zl9jb3JlIGJ1ZGdldF9jb3JlIHNuZF9wY20gZHZiX2Nv cmUgc25kX3RpbWVyIHNhYTcxNDYgc25kIHR0cGNpX2VlcHJvbSBzb3VuZGNvcmUgc25kX3Bh Z2VfYWxsb2MgaTJjX2NvcmUgcGNzcGtyIGV4dDMgamJkIG1iY2FjaGUgeGVuX25ldGZyb250 IHhlbl9ibGtmcm9udCBbICAgMTQuNjc1MDU3XSAgWyAgIDE0LjY3NTA2NV0gUGlkOiAwLCBj b21tOiBzd2FwcGVyLzAgTm90IHRhaW50ZWQgMy4yLjgtYW1kNjQgIzEgICBbICAgMTQuNjc1 MDc5XSBSSVA6IGUwMzA6WyZsdDtmZmZmZmZmZjgxMWI0YzBiJmd0O10gIFsmbHQ7ZmZmZmZm ZmY4MTFiNGMwYiZndDtdIHN3aW90bGJfYm91bmNlKzB4MmUvMHgzMSBbICAgMTQuNjc1MDk3 XSBSU1A6IGUwMmI6ZmZmZjg4MDAxM2ZhYmU1OCAgRUZMQUdTOiAwMDAxMDIwMiBbICAgMTQu Njc1MTA2XSBSQVg6IGZmZmY4ODAwMTI4MDAwMDAgUkJYOiAwMDAwMDAwMDAwMDAwMDAxIFJD WDogMDAwMDAwMDAwMDAwMTAwMCBbICAgMTQuNjc1MTE2XSBSRFg6IDAwMDAwMDAwMDAwMDEw MDAgUlNJOiBmZmZmODgwMDEyODAwMDAwIFJESTogZmZmZmM3ZmZmZmZmZjAwMCBbICAgMTQu Njc1MTI2XSBSQlA6IDAwMDAwMDAwMDAwMDAwMDIgUjA4OiBmZmZmYzdmZmZmZmZmMDAwIFIw OTogZmZmZjg4MDAxM2Y5ODAwMCBbICAgMTQuNjc1MTM3XSBSMTA6IDAwMDAwMDAwMDAwMDAw MDEgUjExOiBmZmZmODgwMDAzMzc2MDAwIFIxMjogZmZmZjg4MDAwMzJjNTA5MCBbICAgMTQu Njc1MTQ3XSBSMTM6IDAwMDAwMDAwMDAwMDAxNDkgUjE0OiBmZmZmODgwMDAzM2UwMDAwIFIx NTogZmZmZmZmZmY4MTYwMWZkOCBbICAgMTQuNjc1MTYzXSBGUzogIDAwMDA3ZjNmZjk4OTM3 MDAoMDAwMCkgR1M6ZmZmZjg4MDAxM2ZhODAwMCgwMDAwKSBrbmxHUzowMDAwMDAwMDAwMDAw MDAwIFsgICAxNC42NzUxNzVdIENTOiAgZTAzMyBEUzogMDAwMCBFUzogMDAwMCBDUjA6IDAw MDAwMDAwODAwNTAwM2IgWyAgIDE0LjY3NTE4NF0gQ1IyOiBmZmZmYzdmZmZmZmZmMDAwIENS MzogMDAwMDAwMDAxMjY4MzAwMCBDUjQ6IDAwMDAwMDAwMDAwMDA2NjAgWyAgIDE0LjY3NTE5 NV0gRFIwOiAwMDAwMDAwMDAwMDAwMDAwIERSMTogMDAwMDAwMDAwMDAwMDAwMCBEUjI6IDAw MDAwMDAwMDAwMDAwMDAgWyAgIDE0LjY3NTIwNV0gRFIzOiAwMDAwMDAwMDAwMDAwMDAwIERS NjogMDAwMDAwMDBmZmZmMGZmMCBEUjc6IDAwMDAwMDAwMDAwMDA0MDAgWyAgIDE0LjY3NTIx Nl0gUHJvY2VzcyBzd2FwcGVyLzAgKHBpZDogMCwgdGhyZWFkaW5mbyBmZmZmZmZmZjgxNjAw MDAwLCB0YXNrIGZmZmZmZmZmODE2MGQwMjApIFsgICAxNC42NzUyMjddIFN0YWNrOiBbICAg MTQuNjc1MjMyXSAgZmZmZmZmZmY4MTIxMTgyNiBmZmZmODgwMDAyZWRhMDAwIDAwMDAwMDAw MDAwMDAwMDAgZmZmZmM5MDAwMDQwODAwMCBbICAgMTQuNjc1MjUxXSAgMDAwMDAwMDAwMDBi MDE1MCAwMDAwMDAwMDAwMDAwMDA2IGZmZmZmZmZmYTAxM2VjNGEgZmZmZmZmZmY4MTA5NDZj ZCBbICAgMTQuNjc1MjcwXSAgZmZmZmZmZmY4MTA5OTIwMyBmZmZmODgwMDAzMzc2MDAwIDAw MDAwMDAwMDAwMDAwMDAgZmZmZjg4MDAwMmVkYTRiMCBbICAgMTQuNjc1Mjg5XSBDYWxsIFRy YWNlOiBbICAgMTQuNjc1Mjk1XSAgJmx0O0lSUSZndDsgIFsgICAxNC42NzUzMDddICBbJmx0 O2ZmZmZmZmZmODEyMTE4MjYmZ3Q7XSA/IHhlbl9zd2lvdGxiX3N5bmNfc2dfZm9yX2NwdSsw eDJlLzB4NDcgWyAgIDE0LjY3NTMyMl0gIFsmbHQ7ZmZmZmZmZmZhMDEzZWM0YSZndDtdID8g dnBlaXJxKzB4N2YvMHgxOTggW2J1ZGdldF9jb3JlXSBbICAgMTQuNjc1MzM3XSAgWyZsdDtm ZmZmZmZmZjgxMDk0NmNkJmd0O10gPyBoYW5kbGVfaXJxX2V2ZW50X3BlcmNwdSsweDE2Ni8w eDE4NCBbICAgMTQuNjc1MzUwXSAgWyZsdDtmZmZmZmZmZjgxMDk5MjAzJmd0O10gPyBfX3Jj dV9wcm9jZXNzX2NhbGxiYWNrcysweDcxLzB4MmY4IFsgICAxNC42NzUzNjRdICBbJmx0O2Zm ZmZmZmZmODEwNGQxNzUmZ3Q7XSA/IHRhc2tsZXRfYWN0aW9uKzB4NzYvMHhjNSBbICAgMTQu Njc1Mzc2XSAgWyZsdDtmZmZmZmZmZjgxMjBhOWFjJmd0O10gPyBlb2lfcGlycSsweDViLzB4 NzcgWyAgIDE0LjY3NTM4OF0gIFsmbHQ7ZmZmZmZmZmY4MTA0Y2JjNiZndDtdID8gX19kb19z b2Z0aXJxKzB4YzQvMHgxYTAgWyAgIDE0LjY3NTQwMF0gIFsmbHQ7ZmZmZmZmZmY4MTIwYTAy MiZndDtdID8gX194ZW5fZXZ0Y2huX2RvX3VwY2FsbCsweDFjNy8weDIwNSBbICAgMTQuNjc1 NDEyXSAgWyZsdDtmZmZmZmZmZjgxMzRiMDZjJmd0O10gPyBjYWxsX3NvZnRpcnErMHgxYy8w eDMwIFsgICAxNC42NzU0MjVdICBbJmx0O2ZmZmZmZmZmODEwMGZhNDcmZ3Q7XSA/IGRvX3Nv ZnRpcnErMHgzZi8weDc5IFsgICAxNC42NzU0MzZdICBbJmx0O2ZmZmZmZmZmODEwNGM5OTYm Z3Q7XSA/IGlycV9leGl0KzB4NDQvMHhiNSBbICAgMTQuNjc1NDUyXSAgWyZsdDtmZmZmZmZm ZjgxMjBiMDMyJmd0O10gPyB4ZW5fZXZ0Y2huX2RvX3VwY2FsbCsweDI3LzB4MzIgWyAgIDE0 LjY3NTQ2NF0gIFsmbHQ7ZmZmZmZmZmY4MTM0YjBiZSZndDtdID8geGVuX2RvX2h5cGVydmlz b3JfY2FsbGJhY2srMHgxZS8weDMwIFsgICAxNC42NzU0NzNdICAmbHQ7RU9JJmd0OyA8L3By ZT48cD4mbmJzcDs8L3A+PHA+Q29tcGxldGUgbG9nIGlzIGF0dGFjaGVkLjwvcD48cD4mbmJz cDs8L3A+PHA+QlIsIENhcnN0ZW4uPGJyIC8+Jm5ic3A7PC9wPjxibG9ja3F1b3RlIHN0eWxl PSJib3JkZXItbGVmdDogMnB4IHNvbGlkICMzMjVGQkE7IHBhZGRpbmctbGVmdDogNXB4O21h cmdpbi1sZWZ0OjVweDsiPi0tLS0tVXJzcHImdXVtbDtuZ2xpY2hlIE5hY2hyaWNodC0tLS0t PGJyIC8+PHN0cm9uZz5Bbjo8L3N0cm9uZz4JS29ucmFkIFJ6ZXN6dXRlayBXaWxrICZsdDtr b25yYWQud2lsa0BvcmFjbGUuY29tJmd0OzsgPGJyIC8+PHN0cm9uZz5DQzo8L3N0cm9uZz4J S29ucmFkIFJ6ZXN6dXRlayBXaWxrICZsdDtrb25yYWRAZGFybm9rLm9yZyZndDs7IHhlbi1k ZXZlbCAmbHQ7eGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20mZ3Q7OyBKYW4gQmV1bGlj aCAmbHQ7amJldWxpY2hAc3VzZS5jb20mZ3Q7OyBTYW5kZXIgRWlrZWxlbmJvb20gJmx0O2xp bnV4QGVpa2VsZW5ib29tLml0Jmd0OzsgPGJyIC8+PHN0cm9uZz5Wb246PC9zdHJvbmc+CUNh cnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3RlbkBzY2hpZXJzLmRlJmd0OzxiciAvPjxzdHJvbmc+ R2VzZW5kZXQ6PC9zdHJvbmc+CU1pIDI5LjAyLjIwMTIgMTM6MTY8YnIgLz48c3Ryb25nPkJl dHJlZmY6PC9zdHJvbmc+CVJlOiBbWGVuLWRldmVsXSBMb2FkIGluY3JlYXNlIGFmdGVyIG1l bW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz48c3Ryb25nPkFubGFnZTo8L3N0cm9uZz4JaW5s aW5lLnR4dDxiciAvPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LmJvZHljbGFzcyB7IGZvbnQt ZmFtaWx5OiBtb25vc3BhY2U7IH08L3N0eWxlPiAgICAgICAgICAgICAgIDxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+ICAgICAgIC5ib2R5Y2xhc3MgICAgICAgeyAgICAgICAgIGZvbnQtZmFt aWx5OiBBcmlhbCwgVmVyZGFuYSwgU2Fucy1TZXJpZiAhIGltcG9ydGFudDsgICAgICAgICBm b250LXNpemU6IDEycHg7ICAgICAgICAgcGFkZGluZzogNXB4IDVweCA1cHggNXB4OyAgICAg ICAgIG1hcmdpbjogMHB4OyAgICAgICAgIGJvcmRlci1zdHlsZTogbm9uZTsgICAgICAgICBi YWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyAgICAgICB9ICAgICAgICBwLCB1bCwgbGkgICAg ICAgeyAgICAgICAgIG1hcmdpbi10b3A6IDBweDsgICAgICAgICBtYXJnaW4tYm90dG9tOiAw cHg7ICAgICAgIH0gICA8L3N0eWxlPiAgPGRpdj48cD5HcmVhdCBuZXdzOiBpdCB3b3JrcyBh bmQgbG9hZCBpcyBiYWNrIHRvIG5vcm1hbC4gSW4gdGhlIGF0dGFjaGVkIGdyYXBoIHlvdSBj YW4gc2VlIHRoZSBwZWFrPC9wPjxwPmluIGJsdWUgKGNvbXBpbGF0aW9uIG9mIHRoZSBwYXRj aGVkIDMuMi44IEtlcm5lbCkgYW5kIHRoZW4gYWZ0ZXIgMTYuMDAgdGhlIGdvaW5nIGxpZmUg b2YgdGhlPC9wPjxwPnZpZGVvIERvbVUuIFdlIGFyZSBiZWxvdyBhbiBhdmFlcmFnZSBvZiA3 JSB1c2FnZSAoZmlndXJlcyBhcmUgaW4gUGVybWlsbGUpLjwvcD48cD48YnIgLz5UaGFua3Mg c28gbXVjaC4gSXMgdGhhdCBhbHJlYWR5ICZxdW90O3RoZSBmaW5hbCBwYXRjaCZxdW90Oz88 L3A+PHA+Jm5ic3A7PC9wPjxwPkJSLCBDYXJzdGVuLjwvcD48cD4mbmJzcDs8L3A+PHA+PGJy IC8+Jm5ic3A7PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3 MEtHZ29BQUFBTlNVaEVVZ0FBQWZFQUFBR0VDQUlBQUFDcHY0NVlBQUFnQUVsRVFWUjRuTzJk ZlhRVVZaNzNiMGdDSVNBSndTQmd0a25Fa0pBM3pBWVZmVWFQajJjZEhjZURPSUZsWmdCM2Rw eGhSa1FqNktvYzUyQ3ZzRG9LQXpqQkxEbW9aSU5CTU4yQkJGbGZFRWtFOXhBSjZLQkVqTHc0 S0VoM09xLzNuejNuK1NQUEh4ZXVSZDJxNnB2dXJ1cnFxdS9uOU9uVFhYM3IzdnU3ZGV2YnY5 eXUrb1o4QmdBQXdCRzB0cmFTZVBjQkFBQkFER2h0YlgzampUY3VhVG9GQUFDUXlMenh4aHZR ZEFBQWNBalFkQUFBY0E3UWRBQUFjQTdRZEFBQVNDUWFCWlNmUXRNQmtJSVFFdTh1RElOWTlU YXhvbllWZzRPRFRNMmg2Y0NCbUNjOXZHYnhSVXlxTlFsb3VyUHA3KzgvY3VTSXorYzdmLzU4 VTFPVDhpTm91cXRadUhEaGIzLzdXK1dXZi8zWGYxMjBhRkUwZFJKQ0NDRkpTVWxYWFhWVldW blo4dVhMejU0OUcxMDNZNHltVG9XVjdDalZ6V0p4aEtZN21NN096cGFXbHJhMnRxNnVycWFt cGlOSGppZy9oYWE3bWtBZ1VGUlU5TVliYjdDM3I3LytlbkZ4Y1RBWWpLWk9yZ0tCUU9EUW9V TVBQL3p3NU1tVFQ1dzRFVzFmWXdjMDNmcDZRQXo1NktPUHpwOC9yL2NwTk4zdEhEMTY5SnBy cmpsMjdOaXhZOGNtVFpyRXBrRi9mLytLRlN1dXZ2cnEwYU5IVjFaVy92RERENnd3SVdUanhv MGVqeWMxTmJXc3JPeVRUejRSS3hSVjRPbW5uLzdsTDMvSlhuZDNkLy9Mdi96TFZWZGRkZFZW Vi8zbU43L3A3dTdtZTIzWXNHSHExS2tqUjQ2Y01XUEdCeDk4c0huejVtblRwckdHRGg4K3pJ cDk4Y1VYUC92Wno4YU1HVE5xMUtpNzdycnJ6Smt6cWtZajZ5SGZTQlNJTllzdnhQS2FQVFNv MW1CQXdnWmlBQ0ZrOWVyVjJkblo2ZW5waXhZdENvVkNsTkpiYjcxMTY5YXR2RXhuWitla1Na TlU2aEFLaFJZdVhKaWVuajV4NHNRMWE5WVl4eVZUSWJBWWFEcWdyNzMyV25GeGNYRnhjVjFk SGR2eXB6Lzk2YzQ3N3p4NTh1UVBQL3l3Y09IQzMvM3VkMnc3SWFTeXN2THJyNzhPQkFMUFB2 dHNSVVdGV0p1b21KMmRuZGRjY3cxNy9kaGpqOTE5OTkxbnpwdzVmZnIwUC8zVFAxVlZWZkc5 NXN5Wjg5VlhYd1VDZ2VlZWUyN3MyTEVQUFBBQWYzdmpqVGV5WW9XRmhlKzg4MDR3R0R4Ly92 elNwVXNYTEZpZ2FqU3lIbEw5UEYxbVBiMjZ1dnFlZSs2UjdLSHFyY0dBaEEzRUFFSUlxL2JN bVROMzMzMzM0NDgvVGluZHRXdFhRVUhCd01BQUsvUGdndzgrLy96enFoMnJxcXA0Zis2NjZ5 N2VUODI0WkNvRU1RZlh2WUR3bEplWHo1bzFpNy8xZUR6SGpoMWpyMCtmUGoxeDRrVDJtaEJ5 N3R3NTlqb1FDS1NrcEloVmlaTFgyOXVibXByS1hrK2VQUG56eno5bnJ6Lzc3TE1wVTZid3Zm Nys5Ny96bWxWdk5Sc0tCQUpYWDMyMXF0SElla2lqMFBTV2xwYVpNMmZ5UDJYQzlsRDExbUJB d2daaUFDSGtiMy83RzN2OStlZWZYM3Z0dGV4MVJVWEY2NisvempjR0FnSFZqbE9tVE9FN2Z2 YlpaNXBqcFl3cmJJWEFKSERkQzlCbDgrYk5OOXh3d3cwMzNQRGFhNit4TFNrcEtjcmxncVNr SkxaZFQ1aU1ON0kveWRucjVPVGsvdjUrOXJxdnI0OUxsWEhOL08ySEgzNTR5eTIzcEtlbjYz Vk1wb2NqUm96Z2ZXRDA5L2VQR0RIQ3VBYk5KbzRjT1RKdDJqVGxyd1ZoZTZoNkc5bUE4STNL OVJ6VlI1clY3dGl4SXo4L3Y3Ky9mLzc4K1d2WHJoVjNWUFVuN01pSHJSQ1lBYTU3QWJvY09Y Sms4dVRKWDN6eHhmSGp4eWRQbm56MDZGRkthVTVPenRkZmZ5MFdqa3pUbjM3NjZWLzk2bGZz OWVUSms1VnA0T1RKazJWcTVtK25USmxTVjFkMy92ejV3Y0hCQ3hjdWhFMmlOWHZvOFhqKzUz LytSN25sMEtGREhvL0h1QWJ4eFprelovTHo4L2Z0MjZjc0g3YUhxcmVSRFVoWWxIbjYzLzcy TjU3K0R3NE9GaGNYVjFWVmVUeWVucDRlY1VkbG52NzU1NStISGZtd0ZZS1lnK3RlZ0M2QlFH REdqQmx2dmZVV2Uvdm1tMit5NjE2ZWUrNjV1KysrKy9qeDQzMTlmWWNQSDY2c3JHUUZocVhw N0xxWHBVdVhLcTk3V2Jac0dWL252ZXV1dXg1OTlGR1ptdm5iOGVQSDc5aXhJeFFLZmZIRkY1 V1ZsWkZwK3IvLys3K1hsNWQvOU5GSG9WQW9GQXJ0Mzc5LzVzeVphOWFzWVo5bVpHVHdkU2ZO bXZtTEcyKzhjZlBtemFySzlYcW9WMjFrQXhJV1FzalBmdmF6czJmUG5qMTc5cDU3N3VITDlK VFN1cm82UXNpcnI3NnF1V05WVlJYYmtTM0VoeDM1c0JXQ21JUHJYb0F1Q3hjdTVDTENlUGpo aHhjdVhEZ3dNT0QxZXRsRkYwVkZSZnkzVS9rRmdhU2twREZqeHBTV2xqNysrT1A4NmhSS2FU QVlYTHg0OGRpeFk4ZU9IYnQ0OFdKKzNhU2twci8xMWx1NXVibkp5Y24vOEEvL3NIYnQyc2cw ZlhCd2NPM2F0Y1hGeGFOR2pSbzFhbFJ4Y2ZGZi92SVgvdW1xVmF2R2pCbGpVTFB5aFJMakh1 cFZHOW1BaElVb3JudFp1SEFodjV5R1VycHQyN1pwMDZiMTlmVnA3dGpkM2YzclgvOTY5T2pS MmRuWnl1dGU5T0lLV3lHd0dHZzZBTzdpM252djVYY2syTE5DWUF5dWV3RUFVRXJwd01CQWRY VjFZV0Vodi9yUWJoVUNHVlFpRGswSHdLVVFRandlVDJ0cnEyMHJCREkwTlRYMTl2YXkxNzI5 dmJqdUJRQUFFcGpXMXRaUFAvMjByNit2cjYvdjAwOC9iV3RyVTM0S1RRY0FnRVNpdTd2N3dJ RURmci9mNy9lM3RyWXFmd0NuMEhRQUFFaG9zSjRPQUFET0Fab09BQUFKakl1dVpUeStkKy94 dlh2ajNRc0FBTEFPeDJwNlh5aTAvcFpiMXQ5eVMxOG9GTysrQUFDQVJUaFcwejk0NlNXdngr UDFlRDU0NmFWNDl3VUFBT0tEUXpUOS9NbVRhL0x6bWFhdnljOC9mL0prdkhzRUFBQ21FQXdH VzF0YitiV01xbjgyNlJCTnIxKzhtQWs2ZTlRdlhoenZIZ0VBZ0NuczI3ZnYyTEZqdmIyOXZi MjlSNDhlVmJrOU8wVFRHVTg5OVpSTXNhNnVMdXVMeVpmczdlaUlTN3VJMTVwMkVhODE3ZG84 M21qdytYemNZR2RnWU1Ebjh5ay9kYU9tSHp4NDBQcGk4aVV2Yk5vVWwzWVJyelh0SWw1cjJy VjV2TkhnaWp5OXQ3ZjN4SWtUdi8zdGI0ZUdoazZmUG0zOC9MLy8rNzloeXd3TkRaMDhlVEtH dGNtWDdEcDJMQzd0SWw3RWkzZ3RpM2RvYU9qcnI3OCtjZUtFL0I4S25FQWc0UHoxZE1aVFR6 MDFKTUdwVTZlc0x5WmZrcmExeGFWZHhHdE51NGpYbW5adEh1K2x3aWJnUmswSEFBQTdFSm5R dWVLNkZ3Ynk5R2hLSWw1cjJrVzgxclJyODNndkZZNElPNjZuMTlmWEZ4WVdwcWFtbHBhV3Ry UzA4TzByVjY3ay8rZnc2NisvbmoxNzlzaVJJMmZQbnMzK2g3MjRSUVh5ZEFCQUFoR1pmdHJ4 dXBjSEhuaWd2YjI5dTd0NzA2Wk5FeVpNWUJ2YjJ0b21UWnJFTlgzZXZIa3JWcXpvN3U1ZXNX TEYvUG56TmJlb1FKNGVUVW5FYTAyN2lOZWFkbTBlNzZYQ0VXSEhQSjF6NHNRSmo4ZERLZTN1 N2k0dUx0NjdkeS9YOUFrVEpwdytmWnBTZXZyMGFhYjc0aFlWeU5NQkFBbEVaTEpwMyt0ZVRw MDZWVjVldm5QblRrcnAwcVZMWDN6eFJVb3AxL1FSSTBhd3Z5LzYrL3VUazVNMXQzRDYvLzcz QzYrODh1VHZmMDhQSEJnYUdqSitQcjF6WjlneTlNQ0JVNmRPeGJBMitaSzByUzB1N1NKZXhJ dDRMWXVYSGpqdy8wS2hDNis4MHRQZUhsdGRqWnVtdDdhMmVqeWVMVnUyc0xkSlNVbEVBYVUw S3l0TGxaV0xXMVFnVHdjQUpCQ1JpYWNkL2RPcnE2dXpzN04zNzk0dGZzVHo5TXJLU3I1Nlhs bFpxYmxGQmRiVG95bUplSzFwRi9GYTA2N040NzFVT0NKVUlxNGlQcHBPcnVUaXhZdktqOWlM cjc3NjZxYWJia3BOVGIzNTVwdFBuanlwdVVVRjhuUUFRQUlSbVg3YVVkTk5Bbmw2TkNVUnJ6 WHRJbDVyMnJWNXZKY0tSd1EwSFFBQTdJZ1pNdWhHVFhmRzk3emI4aHJFRzJWSnhHdE51L0I3 aVEzRDhtWEVNNTd4ak9lNFAwZm15L2pPTysrMHQ3ZWZQbjI2djc5ZnM0QkROSjJCUEQyYWtv alhtbllScnpYdDJqemVTNFdIejRVTEY0NGZQNzUvLy82bXBxYjkrL2NmUDM3OHdvVUx5Z0p1 MUhRQUFMQUQwY2hkWDEvZjZkT24yOXZiMzNubkhlVjJOMnE2TTc3bjNaYlhJTjRvU3lKZWE5 cDE2WHE2Nk1zb2JvRXZJd0RBMlppaHJuYnhaUlMzd0pmUjRuWVJyelh0SWw1cjJyVjV2SmNL bTRCZGZCbkZMZkJsQkFBNG01aW9xQzM4WGhpbkZMNk00aGI0TXNMSER2RWlYcWZHUzJQbnky Z1hUVmY1TW9wYjRNc0lBSEEya1lsbll2Z3lpbHZneTJoeHU0alhtbllScnpYdDJqemVTNFZq Z1MwMFhmUmxGTGZBbHhFQTRHeGlJcWUyMEhTVFFKNGVUVW5FYTAyN2lOZWFkbTBlNzZYQ0p1 QkdUUWNBQURzUW1kQUZnMEdiL2ovU21JTThQWnFTaU5lYWRoR3ZOZTNhUE41TGhTTmkzNzU5 eDQ0ZDYrM3Q3ZTN0UFhyMDZMNTkrNVNmT2tUVDRjdUlaenpqT2JHZUkvTmxwSlQ2ZkQ1MlZU ZWxkR0Jnd09mektUOTFpS1l6bkplbmt3MkViQ0RXdEd1SGVLMXNGL0ZhMHk3aU5Tb2NFYTdJ MHhuT1cwODMwSFFBUUtJVG1kQUZBZ0dzcDE5QkFuM1Bkd3lSamlIazZhYTBpM2l0YVJmeEdo VTJBYnY0TXNxNE1MckVsMUdabTllUzJscFNHOS8rQUFCTUlqTDl0T045cEpHNU1EclBsNUZy TjlOeDlwaXpNb2ZMZWdXcHJkRFJkTGZsTllnM3lwS0kxNXAyTGNqVG1ZaHpLYmVGcG5PRzVj TG9QRjlHbGFZUEVVSTJFSy9YMnpGRVdIcHVvT2tBZ0VRbk10bjArLzAvL1BDRHorZTdjT0hD aFFzWGR1M2FwZnpVTHI2TU1pNk16dk5sckgvc01mYmE2L1cyNUt5cUpiVXRPYXVhYzU1cnlW bFZRV3JwZ1FNVnBIWjV6cXFZdDV1SVBuYUlGL0U2S1Y0YWhTL2pwNTkrMnRUVTFOblorYzQ3 Ny9qOS9pKy8vRkw1cVYxOEdXVmNHSjNueThqWHltdEpiWVh3R0JvYUlrdjJrQ1Y3NHRwSEFJ QlptQ0d0ZHZGbGxIRmhkSjR2WTRXV3BsZmxQQ2VqNlc1YmYwUzhVWlpFdk5hMGE4MTZ1dTEr STQzTWhkRjV2b3hjMHkrSnVKZndGMHpLa2FjRDRHRE1VRmRjbjI1Uk1jMlNTazFuOGsyVzdK bno0RVl1NWNqVHpXc1g4VnJUTHVJMUttd0NidFIwKzhEMW1ndTY4akdFUEIwQVIyT0dETHBS MCszelBhK3A2Y2pUcldrWDhWclRMdUkxS213Q0R0SDBCUFZsSkV2MnNOZkZLM2FRSlh0VXoz eDczUHVKWnp6ak9lYlBFZnN5d2o5ZGpYMis1NUduRHlHUHM2cGR4R3ROdS9CbGpDVllUd2NB SkJDUkNSMzgwOVhZNTNzZWVmb1E4amlyMmtXODFyVHIwanlkWDVuT3R6UTBOT1RsNVNVbkor Zm01alkwTkZCMytESWlUd2ZBelVTbW4vYjFUMWRxK3JoeDQveCtmeWdVOHZsOEdSa1oxQ1cr ak1qVGtjZFoxUzdpdGFaZFYxLzNvdFQwa3BJU3Y5L2YwOVBqOC9uS3lzcW9TM3daa2FjRDRH SWlVMDQ3ZWdNd2xKcCs0TUNCY2VQR0VVTEdqUnQzNE1BQjZnNWZ4cm1MMTdQWFpNbWV1WXZY cytjNUQyNWtyL24ybUxlYmlENTJpQmZ4T2lsZUdvVXZvMzM5MDVXYVBtM2FOTDcyY3YzMTEx TjMrRElpVHdmQXpVU21uSW1oNlptWm1YenRaZno0OGRRZHZveGt5WjVMLzk0STYrbVd0NHQ0 cldrWDhSb1ZqZ2c3YXJyS2w1RlNXbDlmNy9GNGtwT1RwMDZkK3VhYmIxSjMrREpxYWpyeWRB QmNRa3prMUJhYWJoS0ptS2V6L3lLTlBOMzZkaEd2TmUwaVhxUENzUUNhYmlQSWtqM01NQjE1 T2dBdUpES2hzKzkxTHpFbkVmTjBVZE9ScDF2VEx1SzFwbDNFYTFRNEZqaFQweFBYbC9IKzRw b0tVZ3RmUmp6ajJXM1BFZnN5cW5DbXBqTVNNVThYSDhqVHJXa1g4VnJUTHVJMUttd0NidFIw bTZCM3VRdlcwd0Z3Q1pFSkhkYlQxZGprZTE1UDA1R25XOU11NHJXbVhjUnJWTmdFN09MTE9E QXdzSExseXNtVEp5Y2xKYkh0anZkbDdCZ0trNmR6MFk5M1R3RUFwaENaZnRvM1QxZHErcXBW cTZaUG45N2UzajQ0T01pMk9ONlhzVmJuRWthZXAvTUNzVzNYbW1MeUpaSEhXZE11NHJXbVhX dnk5SjZlbnZmZWU2K3BxZW5zMmJPcWoreWk2UjZQUi9YZk9oenZ5NmgzV1RwL1ZCaHFPZ0Fn MFlsTU9abWdIenQyN0x2dnZ0dTllL2Y1OCtlVm45cEYwNU9Ua3g5NTVKSFJvMGQ3UEo0ZE8z WlFGL2d5VnBCYTdzVkl0SHdabCtlc0l2QmxSTHlJMTRueDBpaDhHZDk5OTEwdTE5OTg4MDFM UzR2eVU3dG8rb1FKRTN3K0gvTmx2UHJxcTZrTGZCbVJwd1BnY2lKVFRwVldmL25sbDhxM1lU UjkzNzU5K2ZuNVNVbEpsTklGQ3hiVTFkVkYxZ2xObEpvK2YvNThuOC9IZkJtenM3T3BDM3da OWFTY3I2Y2JhN3JiMWg4UmI1UWxFYTgxN1Zyanl4ajViNlRYWDMvOXJsMjdtUGgrOWRWWFU2 ZE9qYXdUS2tSZnhxNnVycC84NUNlcHFhbDVlWGxzWWQzeHZveGhMbnE1OGtKMUFJRHppRXcv by9MYVRVMU5EWVZDVEhiUG5UdVhucDRlV1Nlc3dXRjV1ckdtdXkydlFieFJsa1M4MXJScmQv LzBPKzY0WS9QbXpZU1FycTZ1QlFzV3pKa3pKN0pPV0FQeWRBQkFBaEdaMEVXbDZWMWRYZmZk ZDE5NmVucDZldnFjT1hPKy9mYmJ5RHBoRGNqVG95bHA4N3dHOFVaWkV2RmEwNjVMN3lPTk9Z bm95NmpweGFqNWJJZmU0aG5QZUk3dGM4UytqUGE5anpUbUlFK1BwcVROOHhyRUcyVkp4R3RO dTVibDZZT0RnNnBGR0lhMnBoTjlvdW1FMldBOUhRQ1FRRVNzZGYzOS9VZU9IUEg1Zk9mUG4y OXFhbEoraER6ZG9tSmlTZVRwRE9SeDFyU0xlSzFwMTRJOHZiT3pzNldscGEydHJhdXJxNm1w NmNpUkk4cFA3ZUxMeUZpNWNpWGY2SGhmUnVUcEFMaWN5UFR6bzQ4K1VubThLSW5uMm91cXRy YTJ0a21USnZHTmp2ZGxSSjdPUUI1blRidUkxNXAyWFgzZGkxTFR1N3U3aTR1TDkrN2R5emM2 M3BjUmVUb0FMc2NNWGJXTHBpOWR1dlRGRjE5VWJuUzhMeU1SSEJuSmxiNk0vRG0yN2NZclhy MW4rUFloWGhmR1M2UHdaVFJHVjlPWnRscTI5c0wrdlpHeUZjZjdNaUpQQjhEbHhGQk9PWGJK MDhXTjhHWEVlcnFwN1NKZWE5cEZ2RWFGVFNETzE3Mkl1VDkvQzE5RzVPa0FPQnN6MURXTXBt L2Z2dDNqOFNnWFJzem9SS3hBbmg1TlNadm5OWWczeXBLSTE1cDI3WjZuVDVnd1lkdTJiZjM5 L1dhMEhYT1Fwd01BRWdnelpEQ01wbWRtWmdZQ0FUTWFOZ1BrNmRHVXRIbGVnM2lqTElsNHJX blg3bm42czg4K3UzTGx5dTd1YmpQYWppSHdaY1F6bnZHY1dNOFIreklhRTBiVEd4b2FSbzBh NVRBUEw1dDh6eU5QWnlDUHM2WmR4R3ROdTNiUDA3T3pzeHNhR3JDZWJnWllUd2ZBNVpnaGcy RTBmZHk0Y1ZoUGowa3hzU1R5ZEFieU9HdmFSYnpXdEd2M1BOMms5WFJ4SmFlK3ZyNndzREEx TmJXMHRMU2xwWVhDbHhGNU9nQk9KN2E2eWdpajZaWjVBenp3d0FQdDdlM2QzZDJiTm0xaTkv M0RseEY1dXFudElsNXIya1c4Um9WTndIYmVBQ2RPblBCNFBCUytqTXJIQmhMdnpnSUFZbzha dWhwRzA1T1Nrc3hvbFNGcStxbFRwOHJMeTNmdTNFbmh5Nmpjdm9IQXh3N3hJbDRueFV1dDky VmtUSmt5NWV6WnM3RnRrcVBTOU5iV1ZvL0hzMlhMRnZZV3Zvejg0ZlY2NDkxWkFFRHNNVU5Y dzJqNml5KysrTkJERDEyOGVOR010cFdhWGwxZG5aMmR2WHYzYnI0RnZvejhVVXRxWTlpdU5j WGtTMks5MVpwMkVhODE3ZHA5UGQyazMwakZPbFZiTGw2OENGOUdZMDBIQUNRNk1aRlRGZkg4 alRUbU9EVlByMENlam5pakxvbDRyV25YN25sNll1SFVQRjFUMHdFQWlZNFpNaGhHMC9mdDI1 ZWZuOCt1Zmxtd1lFRmRYWjBabllnVnlOT2o2YUhOOHhyRUcyVkp4R3ROdTNiUDA2Ky8vdnBk dTNheEplK3Z2dnBxNnRTcFpuUWllaHp1eS9oK2NkeDdpMmM4NHptMnovSHhaVXhOVFEyRlFr elR6NTA3bDU2ZUh0dm1ZNHRUOC9RaHI4WTlSMjdMYTZ5TVYzbVRseHZpTmJWZHhHdFUyQVRD YVBvZGQ5eXhlZk5tUWtoWFY5ZUNCUXZtekpsalJpZGloVlBYMHdrc1g2d0ZOKzRDYXpCREJz Tm9lbGRYMTMzMzNaZWVucDZlbmo1bnpweHZ2LzNXakU3RUNxZm02WnFhN3JhOEJubDZsQ1Z4 ZksxcDErNTV1a21JVjd2THVEQzYxcGNSZWJyRklFOEgxbUNHdXRyRncwdkdoZEcxdm96STA4 MW9GM202TmUwaVhxUENKcUNyNlI5KytHRmhZV0ZLU2twaFllRkhIMzFrUnR0S1RaZHhZWFN2 THlQeWRHdEJuZzZzd1F4ZDFkWDBvcUtpbDE5K09SQUl2UHp5eXlVbEpXYTByZFIwR1JkRzkv b3lMdGtESHpzcjQ1MzdkSTZyNG5YYjhiVkR2TlI2WDhiazVPU2VuaDVLYVNnVVVnbG9yRkJx dW93TG8ydDlHWkduV3d6WlFKQ3FBd3N3UTFkMU5WMHB1TEg5OTBhYTFjcTRNTHJXbHhIcjZX YTBhN3llempYZERmR2EyaTdpTlNwc0FrYWFya2xNV2hYcmxIRmhkSzB2SS9KMGkwR2VEcXdo Sm5LcXdvMGVYamI1bmtlZXpyQmhIb2M4UFlZbEVhOVJZUk53bzZiYkJPVHB0Z1Y1T3JBR00y VFFqWnB1ays5NTVPa01HK1p4eU5OaldCTHhHaFUyQVlkb3VyTjlHWXRYN0loN2IxMzFURGFR NGczd3dzU3p1Yy94OFdWTUxKQ25SOU5EbStjMXlOT2pMSW5qYTAyN3lOTmpDZGJUUVV6QWVq cXdCak5rMEkyYWJwUHZlZVRwREJ2bWNjalRZMWdTOFJvVk5nRzdhSHBEUTBOZVhsNXljbkp1 Ym01RFF3T0ZMeVB5OVBpQlBCMVlneGxhYWhkTkh6ZHVuTi92RDRWQ1BwOHZJeU9Ed3BjUmVi cko3U0pQdDZaZHhHdFUyQVRzb3VrbEpTVit2NytucDhmbjg1V1ZsVkg0TWlKUGp4L0kwNEUx bUtHbGR0SDBBd2NPakJzM2poQXlidHk0QXdjT1VQZ3l3cGN4ZnZIT2ZUcUhiQ0R1aWRkdHg5 Y084VkxyZlJrdFp0cTBhWHp0NWZycnI2ZndaVVNlSGorUXB3TnJNRU5MN2FMcG1abVpmTzFs L1BqeEZMNk1XRTgzdVYyc3AxdlRMdUkxS213Q2R0SDArdnA2ajhlVG5KdzhkZXJVTjk5OGs4 S1hFWGw2L0VDZURxekJEQzIxaTZiSEJPVHAwZlRRNW5rTjh2UW9TK0w0V3RNdTh2Ullnandk eEFUazZjQWF6SkJCTjJxNlRiN25rYWN6YkpqSElVK1BZVW5FYTFUWUJCeWk2ZkJseEhNTW4r SExpR2NMbnVITEdCN2s2ZEgwME9aNURmTDBLRXZpK0ZyVEx2TDBXSUwxZEJBVHNKNE96RUNj VkdiSW9CczEzU2JmODhqVEdUYk00NUNueDdBazR1VzRTOU1IQmdaV3JsdzVlZkxrcEtRa1Fn aUZMeVB5OVBpQlBCMllnYnMwZmRXcVZkT25UMjl2Yng4Y0hHUmI0TXRva3p4ZE5SSGRrTWNo VDQ5aFNjVExjWmVtZXp3ZW44K24zQUpmUnB2azZjUE5XQjJRNURvZ0JHQkQzS1hweWNuSmp6 enl5T2pSb3owZXo0NGRPeWg4R1ZYYm44NkpWYnZEalpjN0ZFcldSallRMXR2RTllMkRMeVBp TlNOZTFWbnNjRi9HQ1JNbStIdys1c3Q0OWRWWFUvZ3lxaDV4VEJzSjhuUUFZb0M3OHZUNTgr ZjdmRDdteTVpZG5VM2h5M2psdyt2MXhxcmQ0UmFySmJYRHE0MFE5aldRdU91dFdFK1BZVW5F eTNHWHBuZDFkZjNrSno5SlRVM055OHRqQyt2d1pWUStWTUpxSmNOdHVwYlV4ckczTVFGNU9q QURkMmw2VEhCd25sNGhxS1J0ODNTdTZZbWJ4eUZQajJGSnhNdUJwZzhiQitmcG9xWmJCdkow QUdJQ05IM1lJRStQcG9kaU1UWUZrYWZIdGwwYnhtdHF1NGlYQTAwZkJvNzNaYXdndFhIbzRZ Wmlzb0hVRk5jTWE2K2E0cHJhZVBRMnRsSERseEhQTVg4bUc0aHlDM3dadzRNOFBab2Vpc1c4 WGkvWlFOeVdwN01rSFhsNnJFb2lYZzd5OUdHVFFPdnBaQU1aM3ZYcDhiaVZ0SmJVZGd5cE5W MW1yNFJlVDFkcE9nQ3hBcG8rYkJJb1R6ZlFkTTA4WGRSMEMvSWFwczdHZWJvNFRaR25HMk8z ZU0xdUYvRnkzS2pwSzFldVpLYU0xT20rakxXa05pSHk5TEJKdDRHbUp5akkwNEZKdUU3VDI5 cmFKazJheERYZDJiNk1CcHB1aHp5ZGlacE1uaTdLTi9KMFkrd1dyOW50SWw2T3V6Uzl1N3U3 dUxoNDc5NjlYTk9kNnN2STlLTEMzbm02Z2Fhck1ORDBCQ1hoOHZRRTZxckxjWmVtTDEyNjlN VVhYNlNVY2sxM3FpL2ozS2R6dkY3djhweFZaRmkrakl2WFI5bnVzT0psM29xMXBMWWxaMVV0 cVRXb1RmVXAyOUtTczBxK1hidjU5ckhZRThpWGNkblRzNk9KMSt4eHR0dnhqV084N3ZKbFpQ L2VpRU9kNjh2bzlYcHJTYTNOODNTdjE4djZpVHpkL2lUMGFMc0tkK1hwSEo2bk85V1hrVW1l Z2FiYllUMmRxL21scmlybUl0YlRvMnczNXZIV2xOVEVzRUw3eDR2MWRHUHNxK2xPOVdXOEpI bGVXMStmYnFEcFlrbk5mVTN1b0lrZ1R3Y200VkpOajRaRXlkT05GMTdNeTlPTnBjbzRUOWZM VzVHbkQ3ZGQ1T25XdEd2RGVLSHB3eVloOHZTS2lCYlRvOC9UeVFiQ1ZzbkRacUQ4aXBlS3l3 K0QxTlVaZWJveU9oNXNvcVRxdFlaL1NBRTd3QTRRTkgzWUpFU2VIbGJUVGNyVHVWTHIvUzg2 WGt6VTlGcFN5NzhQVkpleDYybTZxcVFCTW5tY2ZHMURPaU1qYXJSNFBiN3lOZDlpLzd5MXBx U21ZeWk4cHRzd2J6VzFYVnZGQzAwZk5nbmt5MWhCYXU4dnJpSFNqb3cvUGtmbkZPajFldTh2 cnFrZ3RjWStpOFViaW9jSVlTWFpjL0g3eGJXa2xya3RybG16UmxXbldOdWx2VFlVRDEzMk9J emV3UzU2bDBSVlQ1VE9pOHg3a250SmNsOUdzZWN4NzFWTW5tdkRIVk83UGNkMzNPTFNPcHM1 OEdVY05oSGs2WkxyeTVLMXlaU01PRThYMDB6TkpRSlZ2c2xMS3ZOdWcrN3hTeTEvWEhqcElN cUVYVngySDdweUdQbHlEV3VYL1NkVmczRTJ5R3VVRFVXVFQya01GQ0h2bnlxNXRJVVE1WHFS UVo2dS9NZzQ4VGNJeDR3OFhXYXhLKzU1cTNKbVd0Q3V3ZThsZXNXTWw3Q1FwOGVCQ05iVEkx ZzJsU3l2Vnl5eXhYU3laTThRdWFLcm9yaUlpcU44aE5WMHhoWEZPb2hLMDFYWHdOVHkyb2hh MDlueUMxK0gwUnRuWmVjTlFsQlZvaG9INDZPZ1hFM1NmS3U2REYvVjZKWFZhV2k2ekJReWRi M2JnaDh3WXRKL0EwMDNkWHprMnpLdkc5RDBDTkhVZEhFMFdmN0lQOVhMdlBqNnNuR3hrZzBs eHZteXF0MncycTJYcHlzbGlXd2dKUnRLaGdoaE9lWVZIUk4wcDJSRFNlMlYwcXdYTDlsQVZC azZleWczOG5pSCtEVThWOG9mMTNUVzdxV1BpTWJvc2RkelZ1YW94NWFvQTJHMXNYZzFLeEhI V1huVXZGNnZNbkRXSzdZTXJkUjAxVjZzdlBMNEtvZmE2L1dxZ2xLT2pBcmxlamR0YXhPbmls NFVNdkpuUVo2dXVWNHZuN2VTeTM4UDhkcFVVWGk5WHRYZm5RYnlLaCtJYWdBMWExWVdNOVow cFc2b1VQYmM0UGlLQjlvTUdiU0xwdGZYMXhjV0ZxYW1wcGFXbHJhMHROQklmUm5GNFl2eUlV cWtaaG1aWXBkcTZ4ajJsZWxzbDRyTDBzTTh6VlcvWWZLUEtraHR4eERoWlhoNVBVMVhQcmoy R1dpNk10NEtoYWIvdU1iaUpVUGVIMXV2VUNxbVlwVkRiSjExbTRVd1JJZ3lMakZleWNPbkdp dldnUXFkQjZ1V0tRNkxqbTNodncrTHFUM3Z0bkUzVkIzbW9zYUhYWFhDS3dlRVhQbE5veXBE cnZ5YlEwOUVOQ3ZSSzhEalZmVmZUOHYwWk91S2FhOFlCREdyRUErb2NraFZhaXQ1NkRXNkpI ZVNSdjlRTmFRM1hSMnU2UTg4OEVCN2UzdDNkL2VtVFp2WWZmK1IrVExXQ2ljOGt4disxdXYx dm4rcWhGMyt3US9BajFwREx1VmZRNFN3OUVlcElGeHJPb1orVE5QV3JGbkRGWUh0eUI2c0dL dVFGVDVWVXZLalVBNHJUNytzNmNySC9TVTFldHFrV1pLMU8rUWxReDJLMVFaRlJzeTZwMUx6 UzNzcFpMM21jcnRNZkpYS2UybVFMMzhOOEpMOFU2Nm5iRURZTTgzSk1kQlp2WGlWM3l0SzVX VUw1V0hsVzI4QTJZSGpoN3VDMUo0cUtSRy9uelFmYkY2cGpydHlickF0YzFibUtLY2ZENEh2 eURieXc4Ry9EbGwwckJpZnQwT0VzRUNVKzdKaUZmeGZtaERpOVhyNW4wMnNKQ3ZEZXNnRmxJ MWU3WldUbWJ0RXFDUkovRHRNZVI3eEhoNXZ5eEVIdHZieWFQTXZTOTV1N2VWanAvd2VWWjdD YTlhc3FWVk1BSFdaY09rQUFDQUFTVVJCVlBacDdlV3JzL2c0c3dGa0pWVzVnbkpmZm54NVo3 Z3hCZytmbjcrcUFWVEd5N2ZUbkJ6ZUJHOVhWSGIyVjRzWldtb1hUZWVjT0hIQzQvSFFTSDBa SldVdWpvK3dtcTZkcDErWkxFZmVya1JWUTFjS3V2R095aStiUzJkNExIb2I1Mk9rMEhRODhJ aitvVnlsNUJ0ZG9lbW5UcDBxTHkvZnVYTW5qZFNYY1huT3FncFNhL3o4L093L2hTMnpQR2ZW L1NVMU1heU5sNXo3Umc3cElIUGZ5Q0h5dm93ZFpPNGJPVEZydDRNWXhEdDB1WXplczZwZHNU YmVXOGtlVnVVOFo4WTRSM044NXo2ZDB6RkVUR3JYaHZHYTJpN2lWYzRyNVJhSCt6SlNTbHRi V3owZXo1WXRXOWpieUh3WksrTDloUnoyOFdQYU84dzhmY2diVmVZb21hZnJaZWg2KzJwdVNm UThYV1l0Q0E4OGh2dmdhMktYM2pvN1Q2K3VyczdPenQ2OWV6ZmZFcGt2bzh6SVNxNUV4N1pZ eFpYcjJnYWFycjJlTGdqbC9TVTF2SUJ5dStiSysxQzRKUlNON3VrOGxQSHFxVHpieU5vTisx VlVsZk9jR2VPc1BwMnUvRlZBcGtJMmtsRzJhMDI4UXhKZm9pYk41d2ppMWV4dHpOdTFUN3g2 RDRkck9ybVNpeGN2UnVqTEtKeTZvc1pwYm1SWGE0Z2JsU1V2WGE4dDdDc0txMEc3VjBpazhx MU9lbTdHWStqeVF5TmVpVHlkeDZ2VWRENTZ5bFo0QWQ2VzVsaXBlc0xlaW9majBuWDYzdkRI VjJQZks3OStyaGp6eXk5VTErT1R5ejlOODdtaG1neWFFMGExVVc5ZWlmSHF6VW4xNElRTHpi aGRaVzI2N1dyT0RTMGhGa3ZxelN2bHdMSzNlcU1uRHFETThkV04xeXNScjhReDBqdm9tdnVx bWhpNjhoVDRjYnV6TlQwbVBQWFVVektLVnZKK2lmWEY1RXZPZVhDald1NHRhVGY2WWt3eWRF dnFSSFFwWHN2SDJhQ1lVaXRqZjN6cmNvd0hoRzIvb2piK3hSTk52Q3QyR0JXNC9QV20wYTZx REM5NXVjSkxxWURlOGVYeEdqU3RHWVZtNjhwQVlqSXNjck0wa3VNclZGdWhOTm51Y00xMUw5 RWdxZWw0NEdIOHFKQllnOElEaitFK1ZQTUttaDRlaCtUcFlmTWFjOXBGdklnWDhWb1dMNEdt RzhOOUdVa0hLWDYvR005NHhqT2ViZjRNWDhid0lFOUh2SWdYOFNaRXZBUjV1Z3hZVDhjRER6 d1M1UUZORHcveWRNU0xlQkZ2UXNSTG9PbFUwcGRSYmpUeHdBTVBQT0w3NEpwZS8rQ0QzMy8x VmF4ME1wRTBYY2FYVVdZb25mRTk3N2E4QnZFaVhpZkZTeFNhN3ZWNDFreWYvc0ZMTC9WMWQw ZXZrNG1rNlRLK2pKS2ppUWNlZU9BUjM0ZFMwOWxqdy8vNVAzOTc1NTBvZFRLUk5GM1RsL0hv MGFOUFBQSEVpbVhMSHJ2dnZ2OTc2NjJQTDF6NHhCTlBHRC8vN3Y3N3c1WjVmT0hDMy96bU56 R3NUYjVrMVM5K0VaZDJFUy9pUmJ5V3hmdjR3b1ZNdFpiLzlyYy9hdnF0dC81dHo1NG9kVEtS TkYzR2wxR21uaSsvL05MNll2SWx1OTkvUHk3dElsNXIya1c4MXJScjgzaVZzTFdYOS8vOFo5 ZXR2Y2o0TXNyVTA5UFRZMzB4K1pJWE5tMktTN3VJMTVwMkVhODE3ZG84WGlYMWl4ZC8zOWs1 M0wzMFNDUk5sL0ZsdEw1WE1hZi83Tmw0ZDhGU0VLK3pRYndXazBpYUhwYjJXUC9IRUFBQVND d2NwZW1KQWlFazNsMEE1b0pEN0d6c2ZIeWg2U2JDL3IvSHFGR2pwaytmL3R4enovWDM5eHNV VTg2Uyt2cjZ3c0xDMU5UVTB0TFNscFlXWldIeHhxdXd0MklCa3lDRS9OZC8vUmQvK3gvLzhS OTZwL3F3amhvT3NVMlFQNzYyT29XaDZTYkNqbkZ2YisvSEgzOTg0NDAzL3R1Ly9Wdll3b3dI SG5pZ3ZiMjl1N3Q3MDZaTnFpdDh4QnV2d3Q2S0JVeUNFREo3OXV6QndVRkthVzl2YjJscHFk NDVQNnlqaGtOc0UrU1BMeS9QWDhmeEZJYW1tNGp5R0hkMGRGeDc3YlhpZHMzQ25CTW5Ubmc4 SHVXbjRvMVhZVy9GQWlaQkNQbmpILys0WThjT1N1bm16WnVmZU9JSmZwaFVSMVBtcU9FUTJ3 MzU0MnV3MGZwVEdKcHVJc3BqM052Ym01S1NJbTdYTE13NGRlcFVlWG41enAwN2xSdkZHNjgw YjhVQ0ZrQUlPWDc4ZUVWRnhlRGdZR2xwNmNtVEovWE8rV0VkTlJ4aW15Qi9mUFUyeHVVVWhx YWJpUElZSHoxNk5DY25SOXl1V1poUzJ0cmE2dkY0dG16Wm9pb20zbmdWOWxZc1lCTHNrTjEz MzMyLy8vM3ZmL0dMWDFERlFWUWR6V0VkTlJ4aW15Qi9mRFUzeHVzVWhxYWJDRjlQUDNUbzBP elpzL2w2ZXRnSlVWMWRuWjJkdlh2M2JyR1llT05WMkZ1eGdFbXdRL2IrKys4VFF2YnQyMGYx ei9saEhUVWNZcHNnZjN6RmpYRThoYUhwSnNKK0NoODVjaVM3N3FXdnI0OXZGNHNwZnpwWGJi bDQ4U0xmUmJ6eEt1eXRXTUFreEJOYjc1eVhPV280eEhaRC92amE2aFNHcGdNQWdIT0FwZ01B Z0hPQXBnTUFnSE9BcGdNQWdIT0FwZ01BZ0hPQXBnTUFnSE9BcGdNQWdIT0FwZ08zWTJ6TUJF QmlBVTFQWUhwNmVwWXRXM2IxMVZlUEhUdjIrZWVmajNkMzdBNGg1SVVYWHFDR3BxbUEwOTdl VGdqQi81bVJ3VlpUQzVxZXdDeGZ2dnkrKys3NzVwdHZ2di8rKzBjZmZUVGUzYkU3aEpDQ2dv TEJ3Y0hwMDZmSC9jU3pQMnZXckJreFlzU2FOV3ZpM1pFRXdGWlRDNXFld0V5Wk1rWDF2OHlW ODBsNUgvUHk1Y3ZUMDlQTHlzckVZdTZCRUhMTExiZXNXclhxMWx0dlZRNk9hdEJlZnZubDhl UEhaMlptYnJyOHo0TGRPVngzM0hISGd3OCtlTWNkZDdDM1pXVmw3SDg3TkRjM3o1dzVrMUxh MXRaV1VGQ1FscGEyWXNVS1l5TVV4eU5PTFRhdlVsSlMrUC9FK1AzdmYvL3JYLythVXZxclgv MXF5WklsZk1lWWR3YWFuc0FrSnllci9uZVNucWEvOE1JTGdVRGdvWWNlc3JSL05vTVE4c1li YjR3WU1XTHIxcTJhQThWZXIxKy9QaGdNTmpVMXVka0JNUkFJakJrejVwdHZ2aGt6Wmt3Z0VL Q1VybDI3bHY4RGgzWHIxbEZLUzBwS05tN2NHQWdFTm0zYTVFNHA1K2hOcmY3Ky9uMzc5azJh TklsUzJ0ZlhkK2VkZC83aEQzKzQ4ODQ3dWZXVEdVRFRFeGlEUEwydnIwK3A2YjI5dlZaM3pu NFk2TGp5dFo3Vm1xdG9iR3prL2xPTmpZMlUwblBuem1Wa1pIejU1WmNaR1JuZmZmY2RwVFFs SlNVWURGSktnOEdnbThlS2FrMm45ZXZYZXp5ZUVTTkdFRUtTa3BMWVIyMXRiWVNRdHJZMlV6 c0RUVTlncXFxcTdydnZ2bE9uVHAwL2Y3NnFxb3BTT21IQ2hOMjdkM2QzZDIvWXNNSGxmdzZM U0dxNjVtdTNzV1RKRXZhcisvUFBQODhYQ2lvcksyKzQ0WVo1OCtheHQ4WEZ4WC85NjErRHdl Qi8vdWQvdW5tc3FOYTBTVXRMYTJwcUNnYURQcCtQYlFrR2c2V2xwWGZmZlhkcGFXbDNkN2Q1 bllHbUp6Q2hVT2poaHgrZU1HRUN2KzZsdXJvNkl5TmovUGp4NjlhdE05QjBkNTZCNG9tbmFa RXFsbmZoY09YbDVSMCtmSmhTZXZqdzRieThQTGF4dWJtWkVOTGMzTXpldHJhMjV1Zm5wNlds UGY3NDR5TkdqR0FiWFRoV1ZHdmFQUHZzc3hrWkdSa1pHYXRYcjJaYkZpMWF0R0RCQWtycFAv L3pQeTlldkZqY01WWkEwd0VBa1RNd01QRFdXMjlObno0OTNoMEJsNENtQXdBaWhDMFc1K1hs L2ZkLy8zZTgrd0l1QVUwSEFBRG5BRTBIQUFEbmtCaWE3czRmWGdBQVlMZ01UOU9KRHBvbGs1 S1Nycm5tbWovODRRL3NJbFlyNmV6c3ZPbW1tMGFPSEhuVFRUZDk5ZFZYRnJkdUdlTDROelEw ekpneFkrVElrZVhsNWUrOTl4N2JrcGVYbDV5Y25KZVh0MzM3ZHMxNkdob2FQQjVQYW1ycWpU ZmVlUHo0Y1VycGxpMWJycnZ1dXRUVTFKa3paKzdkdTllYWNNeEdIQzV4U3lnVWV1U1JSN0t6 cy9VbU50VWFaT056SVJIUkM4ZnI5ZktONHJTUnFVYzVWbGxaV1NiMTMyTEVLU0ZLa0l3b2ll ZWR6SVJVTVh4Tjd4QWVPcG8rT0RoNDh1VEorZlBuLy9HUGY1VHBTZ3laTzNmdWloVXJ1cnU3 VjZ4WVVWbFphWEhyRnFNYy84ckt5bzZPamxBb3RIMzc5b2tUSjFKS016SXlkdTNhRlFxRi9I NS9Sa2FHWmcxWldWa3RMUzA5UFQwK24rL25QLzg1cFhUdTNMbUhEeC91N3U3ZXNtV0x3MjZu Tkw2eXM2cXFxcXlzcktPalkzQndVSzhHY1pBZEkrVXFWSEY5OHNrblRGellXM0hhU05iRFdM Smt5Wk5QUGhuRDNzWVJjVXFJRWlRalN1SjVKek1oVlppbzZlekZ5Wk1uMmEyeEgzNzRZV0Zo WVVwS1NtRmg0WWNmZnNqSy9PTS8vdU84ZWZOeWMzUFpqUXpzdTBocGtzQTNLbXNXSFRsVVpH VmxuVDU5bWxKNit2UnBoMG1TaURqK3dXQ3d2cjZlWFY1V1dscmEzTnpjMDlPemUvZHVadE1o a3BXVnRXZlBIblp5amg4L1h2blJ5Wk1uVTFOVG5YUWJxckdtVDU0OCtkMTMzNVdwUnpuSWhK Q01qSXowOVBTZi92U25KMDZjaUdGdjQ0dnFMNWlpb3FMWFhudE5xZWw2MDhhZ0hzYjMzMytm bVpuWjFkVVY4ejdIRWVXVUVDVm9XS0xFenp2NUNja3hYZFA3Ky90VFVsSW9wUVVGQmErKytt b3dHS3l1cmk0c0xHUmx1Si9ubURGaitMNUtrd1JWYlZUT2tXUEVpQkVEQXdPMzNISkxmMzkv Y25LeXpFQWtMcXJ4NTMvVkhqeDRrRkxhMnRxYW1abEpDTW5Nek5TN0tibXVydTdhYTY4ZFBY cjA0NDgvcmh5dWI3Lzl0cUtpd21HT2o4YWFucHljdkdMRml2VDA5SnljbkczYnRobFVvaHhr eHRtelo2dXFxbTY2NmFhWTl6bGVLRWZtc2NjZSs4VXZmcUhjcURkdGpPdGhyRjY5bXQyQTR4 aFVVMEtVSUhsUlVwNTNraE5TaVhWNWVuSnlNbHRZRHdRQ1RPV0o0czQ5b20rU1FBVk5EK3ZJ a1pXVmRlYk1HZXJXUEQwUUNHemR1cldvcUloU21wK2Y3L2Y3UTZHUXorY3JLQ2d3cm1ydjNy MVRwa3hocnc4ZVBKaWJtN3RpeFlxQmdRRXp1aDB2akRVOU16UFQ1L1AxOVBTMHRMUVlyL1lx QjVuVDNkMmRtcG9hdzk3R0YrWElzTE5TYzUxZE9XM0Mxa01wN2V2cnk4bkpNZHYyeEhxVVUw S1VJRWxSVXAxMzhoT1NZKzU2K3RkZmYvM0xYLzZTK1VWbzV1bXFaOUVrZ2RjVzlyV1MrKysv Lzhrbm53eUZRazgrK1NSTExoeU1jaEFXTFZyVTJka1pDb1hxNit2Wm44UGp4bzN6Ky8wOVBU MjdkdTNTVzArbmxBNE9EaDQ5ZXJTa3BJVDV4dFRVMUZSVVZMQWxNb2Rock9uMzNuc3ZQNFgw VGp4eGtCay8vUEREcWxXcktpb3FZdC9wT0dHY3JsRmgya2pXVTFkWE4zdjI3RmgxMGc2SVUw S1VJQmxSRXM4N21RbXB3a1JOVDBwS21qaHg0dTkrOXp2bTFibHYzNzZDZ29MazVPU0NnZ0sr bnE1NkZrMFN5SlZRT1UwL2NlTEVyRm16MkMveW5aMmRNZ09SaUlpRFUxdGJtNXVibTVLU1Vs UlU1UGY3S2FWMWRYWHNUNStwVTZmVzE5ZnpIY1Y2c3JPemx5NWRHZ3FGeEpvdlhyeG9lWEN4 UjNNdXFiWWNQMzU4MXF4WktTa3BIbytub2FHQjc2aXNSeHhrdHZ1b1VhTnV2LzMyenovLzNQ TElZbzg0TXNxUGxHV1UwNGJxVEMxVlBiTm16WkpjUmtnVXhDa2hTcENtS0JrUDE4V0xGelVu cERGbVhjc0lBQURBZWhMam5pTUQ4QVVEQUFDY2hOZDBBQUFBSEdnNkFBQTRCK3MwWFdaVkJD c25BQUFRRGRiOVJocERUWWYweXlCemRQUThLSlMySG01QXhvdERMQ1BqcFpQUWlHWWpNa1pB WWhtSC9kWWxoaVBPQkwyQk1qNnpZdUs4Tkh4Tlg3SkgvWUNtMnhqanNkTDBvRkRaZXJnQlNT OE9WUmtaTDUyRVJqUWJrVEVDMGl2anNCbWxERWVjQ1pxREVQYk1pb256a2xtYWZ1alFvWmt6 WnlZbkp4UEYxYXdxbjVhalI0L2VmUFBOcWFtcDA2Wk40LzUybE5Lelo4L2VkdHR0bXpkdnBq b3VNYXJ2U2JHZVdiTm1zZithNkx5N0c0YUw4WWtrZWxDSXRoNXVRTWFMUXl3ajQ2V1QwQmlZ amNnWUFhbktPR3hHS2NNeG1BbDhFR1RPckpnNEw1bWw2U1VsSmV2V3JlTjNJbEF0bjVieTh2 TFhYMzg5RkFydDJyVnIyclJwckV4SFIwZFpXUmszOEJMdlBxWEM1QkRyMmJwMUt6TUZLeTh2 Mzdselo5aTRISXp4aVNSNlVJaTJIbTVBeG90RExDUGpwWlBRNkptTnlCZ0JpV1VjTnFPVTRl ak5CT1VneUp4Wk1YRmVNa3ZUVTFKUzJPMmp5bjFWUGkwcEtTazg0MmJ1TG9TUTB0TFM3T3pz OXZaMlZsSjBpYUhDb0lqMTlQWDFYWGZkZGR1MmJTc29LSkQzcUhRa1lmTjBsUWVGZ2EySGc1 SHg0aERMRE10TEp4SFJOQnVSTVFMU0xPT3c2YVFNUjNNbXFBWmhXR2RXTk01TFptbDZjWEh4 dW5YcmVucDZsUHVxWGxkVVZEUTJOblozZHl1M256bHpac2VPSGJtNXVlenZYTTA4ZmVUSWtV cEhVN0VlU3Vuenp6K2ZucDZ1WjhickhveG5qNEVIaGNQT1FHTmt2RGpFTXBKZU9vbUxhRFlp WXdTa1Y4WmhNMG9aampnVERBYktlQnlpZDE0eVM5TS8vdmpqMHRKUzl0VWtSc0plSHp0MjdQ YmJiMDlMUytOZlhMeE1UVTNOckZtemdzR2c2QkpES1YyMmJCbmJpNzBWNjZHVS92M3ZmOC9L eXJMK1h5elpCM0lsZktPeWpJRXhqc1BPUUdOa3ZEakVNcHBlT2s1Q05CdFJUU3BtQktRYUtM R001bFJNWE1Sd3hKbWdPVkI4ZDgzWGZLOG9uWmVjNmZjeU1ERHdsNy84WmRteVpmSHVDQUFB V0lvejd5TWxoSlNWbGJIVkd3QUFjQS9PMUhRQUFIQW4wSFFBQUhBTzhIc0JBQURua0pCK0ww QWVHYjhJMGNsRXh2L0VrY2hNYVF3WFEyYXNSQU1UY1l1ckNPdjNvdktOaVdDNGhxM3BRMTcx QTVwdVp5UU5PbFJPSmpMK0p3N0dlQjVpdUpRWWo1Vm9ZQ0p1Y1E5aC9WNUUzNWdJaHNzc1RU ZlA3NFU3QnpRM056dlNaTU1rRFB3aVJDY1RHZjhUQnhOV3B6QmNuTEJqcFRJd01iQTBjVFl5 ZmkraWIwd0V3MldXcHB2bjk3SjI3ZHI1OCtkVFN1Zk5tN2R1M1RxWklJR3hYNFRvWkNMamYr SmdqSFVLdzZYRWVLeEVBeE05U3hQSEkrUDNJdnJHUkRCY1ptbTZlWDR2NTg2ZHk4akkrUExM THpNeU1yNzc3anVaSUYxT1dMOEkwY2xFeHYvRXdZVE5QVEZjSE1uMVVxV0JpZDRXWnlQajky TGdJQ1EvWEdacHVxbCtMNVdWbFRmY2NBTnpYZ1RHeVBoRmlFNG1NdjRuRHNaWXB6QmNTc0px dXNyQVJIT0xxekFZTVUwSG9lRU9sMW1hYnFyZlMzTnpNeUdFT2FRRFkxUlhLR2thZEloT0pn WStNTTVHODRJdURKY21NbVBGUGhJTlRKUmIzSWFvaEJ3OTM1aGhEWmN6L1Y0QUFNQ2Q0RDVT QUFCd0R0QjBBQUJ3RHRCMEFBQndEbVpwT2hiWkFRREFlc3o2alJTYWJoUGc5eklzWkg3Mngz QXhaS1pXUTBQRGpCa3pSbzRjV1Y1ZXp1NFZENFZDanp6eUNMdEYzc0VxSVU0a3BXRHlmKzZx aWRJVEpvS3BOZnhyR1R2VUQyaTZuWUhmU3dRWXoxNE1GME5tYWxWV1ZuWjBkSVJDb2UzYnQw K2NPSkZTV2xWVlZWWlcxdEhSNFlaLy9xNDVrWllzV2ZMa2swL3E3YUx5aElsZ2FwbXI2VXJu RnRIZFplM2F0UjZQaDNuQzREdkFiT0QzSW8veGJNUndxVENZV294Z01GaGZYejk5K25SSzZl VEprOTk5OTEwTGV4ZFB4SW4wL2ZmZloyWm1kblYxYVpZWFBXRWltRm9tYXJyS3VVVjBkeGt6 Wm96WDYrM282RkRlYmdyTUFINHZ3OEpZMHpGY1NveW5GcjI4NXBDVmxYWHc0RUZLYVhKeThv b1ZLOUxUMDNOeWNyWnQyMlpoVCtPQU9KRldyMTY5WU1FQ3ZmS2lKMHdFVTh0RVRWYzV0NGp1 TG0rLy9mWTk5OXd6YmRxMHNXUEhQdlBNTXpMZEJSRUF2NWZoRWpaUHgzQXh3azR0UmlBUTJM cDFhMUZSRWFVME16UFQ1L1AxOVBTMHRMUVlMeXM3QU5WRTZ1dnJ5OG5KWWVaY21vaWVNQkZN TFJNMVhlWGNJcnE3TUFZR0J2YnUzWnVlbmk3VFhUQmM0UGNTQWNhYWp1Rml5RXl0UllzV2RY WjJoa0toK3ZwNlpoVjc3NzMzY2sxMy9QY2ZFVzc5bnoxNzlyQjJqR0JxbWY0YktYZHUwWFIz SVlRd2M0T05HemZLZEJjTUY5VVZTdkI3TVVZMVhIeWpzZ3lHaXlFenRXcHJhM056YzFOU1Vv cUtpdngrUDZYMCtQSGpzMmJOU2tsSjhYZzhEUTBOOGVtNitXaE9wRm16WnFtV20vU3lCNzQ5 Z3FrRnZ4Y0FBSEFPdUk4VUFBQ2NBelFkQUFDY0F6UWRBQUNjZzlXYXJseDh4MEk4QUFERWxu aitSZ3BOanptaW1VWkRRME5lWGw1eWNuSmVYdDcyN2RzMTkycG9hUEI0UE95MzllUEhqMnZX NHhKa1BFekV3WEdEMzRzWXRWSUI5SzQwRjZlZnpJUjBBT0k1SlROSlltSWxOR3hOcnlDMXFn YzAzVDZJWmhvWkdSbTdkdTBLaFVKK3Y1Ly9oME1WV1ZsWkxTMHRQVDA5UHAvdjV6Ly91V1k5 TGtIR3cwUWNIRGY0dlJoTUNRTURFM0g2eVV4SUJ5Q2VVektUSkNaV1FpWnFPaUZrK2ZMbDZl bnBaV1ZsZkl1NDltTHNDYU5aRDlCRE5OTW9MUzF0Ym03dTZlblp2WHYzekprek5mZkt5c3Jh czJjUG0zL3N4aEJYbVhKb1l1QmhJZzZPRy94ZTlLYUVzWUdKT1Axa0pxUURFTThwbVVrU0V5 c2hjelg5aFJkZUNBUUNEejMwa0hLajhuVllUeGk5ZW9BbW9wbEdhMnRyWm1ZbUlTUXpNMVB2 cHVTNnVycHJyNzEyOU9qUmp6LytPUE9VY0pVcGg0aXhoNGs0T0c3d2U5R2JFc1lHSnVMMGs1 bVFEa0E4cDJRbVNVeXNoTXpWZERITlVXbDZXRThZdlhxQUpxS1pSbjUrdnQvdkQ0VkNQcCt2 b0tEQWVQZTllL2RPbVRKRnN4NzNFTmJEUkJ3Y04vaTlhRTZKc0FZbTR2UWIxb1IwQVB5Y2tw a2tNYkVTTWxmVGpUY1NPVThZTEx2TEk1cHBqQnMzenUvMzkvVDA3TnExeTJENWNuQnc4T2pS b3lVbEpWVlZWWnIxdUFRWkR4TnhjTnpnOTZJNUpjSWFtSWpUVDNKQ09nRFZPU1V6U1dKaUpX U2Rwb3VYeXZBQ0JwNHdZajNBQU5GTW82NnV6dVB4TUZPZCt2cDZWa3p6MEdSblp5OWR1alFV Q21uVzR4SlVzMVRUdzBRY0hEZjR2V2hPaWJBR0p1TDAwNXlRemtNOHB6UW5pV3E0WW1JbEJM OFhBQUJ3RHJpUEZBQUFuQU0wSFFBQW5BTTBIUUFBbklOMW1qNnN5MlA0UjhicjlWaktCd0FB SmRiOVJocXgva0xUbzBIR3VRVitMeHlaV2ExbndlSDFlaDA4VnVLd05EUTB6Smd4WStUSWtl WGw1Znl1YnhYaVdEblM3MFcwQ1JJbmt1U1pxQnFjQ0s1REdiYW0xNUphMVFPYWJtZGtuRnZn OThLUm1WR2FGaHlmZlBJSk8xM043Vis4VVFaWVdWblowZEVSQ29XMmI5OCtjZUpFemZMaVdE blM3MFcwQ1JKbmdzdzVwVGM0dHREMHRXdlhlanllNU9Say9pVkRDSG41NVpmSGp4K2ZtWm01 YWRNbVhxRnlkejIvRjJYTnJhMnRCUVVGYVdscFZWVlY3Q094TGNDUmNXNkIzd3VIRUpLUmta R2VudjdUbi83MHhJa1RtbVZFQzQ1UUtGUlVWUFRhYTY4NWZ2cUpBUWFEd2ZyNit1blRwMnVX RjhmSzJYNHYzQ1pJbkVneTU1VGU0TmhDMDhlTUdlUDFlanM2T25wNmV2aSs2OWV2RHdhRFRV MU55bHNUbGJ2citiMG9hNTR4WTBaTlRVMHdHSHpsbFZmWVIySmJnQ1BqM0FLL0Z4Vm56NTZ0 cXFxNjZhYWJORDhWTFRnZWUrd3hkbytmMnpTZFpWRlpXVmtIRHg3VUxDK09sWVA5WGtTYklP VkVram1uOUFiSEZwcis5dHR2MzNQUFBkT21UUnM3ZHV3enp6ekQ5dTNyNnhPN3FIeXQ1L2Vp ckRrbEpTVVlERkpLQTRFQSswaHNDM0NHNWR3Q3Z4ZE9kM2QzYW1xcTVrZWlCY2VJRVNPRysv TlNnaUpHRndnRXRtN2RXbFJVcEZsZUhDdW4rcjNvMlFUeGlTUnpUdWtOamkwMG5URXdNTEIz Nzk3MDlIU3FyK1BLMTVwK0w1TW1UVkptQVVWRlJTeFByNjZ1VnU2cmJBdHdKSjFiNFBlaTVJ Y2ZmbGkxYWxWRlJZWG1wd1lXSE00V2RIcGxnSXNXTGVyczdBeUZRdlgxOVd6SlRrUWNLMGY2 dmVqWkJDa25rc3c1cFRjNHR0QjBsckF3VjRlTkd6ZFNMUjBuVjBJcDFmUjcrZXRmLzVxZW5z N2Y3dCsvUHo4L1B5MHRiZm55NWNwNmxHMEJqcVpOaCtaZjBQQjdvWmVIWXRTb1ViZmZmdnZu bjMvT055ckxHRmh3T0ZqVHhiTzF0clkyTnpjM0pTV2xxS2pJNy9mellzcTl4TEZ5cE4rTGFu QXVYcndvVGlTWk0xRWNISEhZd3dLL0Z3QUFjQTY0anhRQUFKd0ROQjBBQUp3RE5CMEFBSnlE M1RVZGkvVUFBQ0NQM1g4amhhWkhpZWhFSVNLYWN1aFptamdlbVNtTjRXTElqSlZvSmVSSXZ4 ZDVqRTJCeE1FUkJ6QXN3OWIwamlIMUE1cHVaMFFuQ3MweUtsTU9UVXNUOTJBODZ6QmNTb3pI U3JRU2NxVGZpeVJoVFlIRXdSRUhNQ3htYWJxbTMwdFZWVlZhV3RyMDZkTmJXMXNwcFI5KytH RmhZV0ZLU2twaFlTRzdYUC9Rb1VNelo4NWtlL0VXS2FWbno1Njk3YmJiTm0vZUxCTVMwSVE3 VVlnZmlhWWM0aFpYRVZhbk1GeWNzR09sc2hKeXR0K0xBVEttUU9MZ2lBTVlGck0wWGRQdnBi cTZPaGdNMXRUVUZCY1hVMG9MQ2dwZWZmVlZka2RvWVdFaHBiU2twR1RkdW5Yc3RwY2ZXK3pv S0NzcmEybHBrWWtIYUNJNlVTZ1JUVG5FTGE3Q1dLY3dYRXFNeDBxMEVuS3czNHN4TXFaQTR1 Q0lBeGdXc3pSZDArK0YrYlFFZzBGbWdKQ2NuTXlkVzFKU1VpaWxLU2twZ1VCQTFXSnBhV2wy ZG5aN2U3dE1QRUJFejRtQ0k1cHlpRnRjUmRqY0U4UEZrVndkNVZaQ1R2VjdDWXVNS1pEQjRQ QUJESXU1NitrcXZ4ZVdsZGZVMU15WU1ZTnE1ZW5GeGNYcjFxMVQyaXNTUXM2Y09iTmp4NDdj M0Z6MjV5MFlGbnBPRkVwRVV3NERTeE0zWUt4VEdDNGxZVFZkWlNYa1NMK1hZV0V3WXBxRG94 ckFzSmlsNmV5N1NPWDN3dGJUOC9QejkrL2ZUeW5kdDI5ZlFVRkJjbkp5UVVFQkU1MlBQLzY0 dExTVWZhR3A0cStwcVprMWF4Ykw2NEU4cWl1VUxsNjhTQ1ZNT1F3c1RaeU41Z1ZkR0M1TlpN YUtmYVMwRW5LazM4dXdVQTZSYXJqMC9GNlVBeGlXQlBqZmRRQUFBQ1NKLy8rWUJnQUFFQ3Zz Zmg4cEFBQUFlYURwQUFEZ0hPeW82VmlsQVFDQXlERHhOMUpJc3gxb2FHaVlNV1BHeUpFank4 dkwzM3Z2UGMweU1ERGh3QjVISHBteDByTXJNYlk5Y1RCaC9WNVV3eVV6eUNxR3JlbER3Z09h Ym1jcUt5czdPanBDb2REMjdkc25UcHlvV1FZR0poelk0OGdqTTFhYWRpVmhiVStjU3RqQXhl R1NHV1FWWm1tNlpoWlBDRm0rZkhsNmVucFpXUm5WOG52aE84cDBIY2dUREFicjYrdW5UNSt1 K1NrTVRFUmdqeU9QOFZpcDdFcGtiRThjaVV6Z0J1NHVCb09zd3RJOG5SRHl3Z3N2QkFLQmh4 NTZpR3JkUjZxM0k0Z0c5aldabFpWMThPQkJ6UUl3TUZFQmV4eDVqTWRLdEN1UnNUMXhKREtC NjdtN0dBK3lDcXMxWGZrOUkvcTk2TzBJb2lRUUNHemR1cldvcUVqelV4aVlLSUU5amp4aHg0 ckQ3VXBrYkU4Y3liQUNWN3E3eUE4eXcwUk5Iemx5NUlrVEoxUzdLOThpVDdlQVJZc1dkWFoy aGtLaCt2cDZQYTlPR0pod1lJOGpqOHhZVVgyN0V0ZWU1c2FCcTRaTGNwQ1ZtS2pweTVZdFMw dExVNjJuS3d1SWZpOFJXQTRBWTJwcmEzTnpjMU5TVW9xS2l2eCtQOXVvR2xzWW1IQlVNeEQy T0FiSWpCWDdTTk91eExVbnVJRWtpc09sT2NqRzJQMS8xd0VBQUpESGp2Y2NBUUFBaUF4b09n QUFPQWRvT2dBQU9BZTdhem9XNndFQVFCNjcrNzFBMDZORTVuZHNHSmh3TUZ6eXlJeFZRME5E WGw1ZWNuSnlYbDdlOXUzYkpmZHlBR0tZa3NPbDhudUpZTGlHcmVsZUFXaTYvVEVlUmhpWXFN Qnd5V004VmhrWkdidDI3UXFGUW42L1gvbmZSMTF5WG90aEdnZXVhWThUZGk4VlptbTZtTVVU NGFyTXNyS3lscFlXU21semMvUE1tVE9wbGdNTUszbjI3Tm5iYnJ0dDgrYk44b0VCSldGbkVn eE1sR0M0NURFZXE5TFMwdWJtNXA2ZW50MjdkN056WEdZdnh4Q0JwbXY2dmRoQzA4VitpSnEr ZHUzYStmUG5VMHJuelp1M2J0MDZxblZuS1NHa282T0RxeitJRE9NNUFRTVRGUmd1ZVl6SHFy VzFOVE16a3hDU21abloxdFltdVpkakdLNm02L205MkYzVCsvcjYyT3R6NTg1bFpHUjgrZVdY R1JrWjMzMzNIZFZ5Z0NHRWxKYVdabWRudDdlM3kwY0ZWSVRORG1CZ29nVERKWS94V09YbjUv djkvbEFvNVBQNUNnb0tKUGR5RE1QVmRJN1M3MFYrTDRhSm1xN3llNWt3WWNMdTNidTd1N3Mz Yk5qQWQ2bXNyTHpoaGh2bXpadkgzbXJtNldmT25ObXhZMGR1Ymk3Ny9Nd0ZwZ0FBQ0haSlJF RlU4eFpFZ1BHY2dJR0pDZ3lYUE1aak5XN2NPTC9mMzlQVHMydlhMcXluYTI1Um9XbVBZeGRO Vi9tOVZGZFhaMlJrakI4L2Z0MjZkWHhqYzNNeklhUzV1Wm05MVhTQVlSL1YxTlRNbWpXTFpm RkFIbklsZktPeURBeE1PQmd1ZVdUR3FxNnV6dVB4akJneFl1clVxZlgxOVhwN09ROHhUSm5o WWg4WitMM0lOQTIvRndBQWNBNTJ2K2NJQUFDQVBOQjBBQUJ3RHRCMEFBQndEdFpwT3BiZEFR REFiS3o3alJTYWJnRjZSOFRnOGlUcVlsTU9FZVdzenNySzBpeWo1KzVpUE1pSnpwWXRXNjY3 N3JyVTFOU1pNMmZ1M2J1WFV0clEwREJqeG95UkkwZVdsNWUvOTk1N21udUpFMG1zeHdHSVo1 RG8zQ0lUZUdTRHJHTDRtcjVCZUVEVGJZWnFxRC81NUpQczdHeUQ4WGU1S1ljbVM1WXNlZkxK SnpVLzBuUjNDVHZJaWM3Y3VYTVBIejdjM2QyOVpjc1dkbDlWWldWbFIwZEhLQlRhdm4zN3hJ a1REZlpWRG90WWp3TVF6eURSdVVVbThHZ0dtV09XcGlzMzhzc3pYMzc1NWZIangyZG1abTdh dEVtekRIdXhmUG55OVBUMHNySXlldmw3UGlVbHBiUzBGUFlBa2lnSE5oUUtGUlVWdmZiYWF3 Wnk0M0pURHBIdnYvOCtNek96cTZ0TDgxUFIzVVZta0IzRHlaTW5VMU5UZTN0NzJkdGdNRmhm WHo5OStuU0RYVFNIUlZWUFFpT2VRWHJPTFZRdThBZ0dtV09wcHE5ZnZ6NFlERFkxTmJFelFV L1RYM2poaFVBZzhOQkREL0ZQKy92NzkrM2JOMm5TSkptUWdISmdIM3ZzTVhabm80SGN1TnlV UTJUMTZ0VUxGaXpRKzFSMGQ1RVpaR2Z3N2JmZlZsUlVQUHJvbyt3dFg2UTZlUENnd1Y3aXNL anFTWFRFTTBqUHVVVW04TWdHbVdPNnBuTjNGMEpJWDErZjhsT3hETnVvL0FaYnYzNDl1dytO RUpLVWxDUVRFbEFlRVRaMHh1dmpMamZsVU5IWDE1ZVRrNlA4YmxNaHVydklETElET0hqd1lH NXU3b29WS3dZR0J2akdRQ0N3ZGV2V29xSWlneDFWWTZKWlQwS2pkd2JSSzUxYlpBS1BlSkE1 Wm1tNjZPNGladVdhRGpDcTJ0TFMwcHFhbW9MQm9NL25jL0RaRWx2Qy91V2t3dVdtSENycTZ1 cG16NTV0VU1EQTNjWEJJMVpUVTFOUlVjRWNPeGlMRmkzcTdPd01oVUwxOWZXcTVRVVZ5bUVS NjNFQW1tZVF5cmxGSnZCb0JwbGpscWFMN2k2aXBtczZ3S2hxZS9iWlp6TXlNakl5TWxhdlh1 M2dFeVpXa0N0UmZhVDVtcnJZbEVPVFdiTm1iZHUyVGJsRk5RSUc3aTRPSGl2VmxMaDQ4V0p0 YlcxdWJtNUtTa3BSVVpIZjcrZkZEUGJTckNjT3djUWF2VFBJd0xtRkJXNDhYSHFEYkF6OFhn QUF3RG5nUGxJQUFIQU8wSFFBQUhBTzBIUUFBSEFPMEhRQWJJM2RmcStLcGo5Mmk4V1JRTk1C MENCaTlZbTViQmxVR0gxYi9KNVlTdW1wVTZmMExHNWtHcFc1YmtLbXc1cWVKeXJ2RklQVytS WVpweFRSdWtmUHpNZTRMWm1yUmNTNHhMYkVlaUt3eDRHbUE2Q0JTelQ5NXB0dmZ1Kzk5eVpQ bmp4bHlwUjMzMzNYK01KODQwWmxPaU5UUnZROEViMVRaT3FYY1VvUnJYczB6WHdrWXpHT1Rv eExyeTFsUFJIWTQwRFRBZEJBODR3bFYxb1ByVjI3MXVQeEpDY244OXhLNWdKZlZYN0hucXVx cXRMUzBxWlBuOTdhMmtvcGJXMXRMU2dvU0V0THE2cXFVdGFzYkYxczYralJvemZmZkhOcWF1 cTBhZE40Wm1vc05Jc1dMVnE5ZXZYVXFWTTlIcythTldzV0wxNnNXWS9ZSDVrUkUrc2hoQ3hm dm56MDZORThVZ080NTRtQmQwcllQcWljVWxRRlJPc2VjWXRtdFpvYkpiOWlsWEdKYmVuVkky K1BBMDBIUUFPOTgxTnBQVFJtekJpdjE5dlIwZEhUMHhOMlI4MENYSytycTZ1RHdXQk5UVTF4 Y1RHbGRNYU1HVFUxTmNGZzhKVlhYbEdXVnhrZnFkb3FMeTkvL2ZYWFE2SFFybDI3cGsyYkpo UG02dFdyYjd6eHhubno1bFZXVnQ1NDQ0MXIxcXpSckVldlA2cTRWRjh6WWozS1NJM3ZkRmQ2 bnVoNXAyajJRZXlTZ1ZPS2FOMGpicEZzUzNPTGNWeDZiWW4xRE1zZUI1b09nQWJpZVNWYUQ3 Mzk5dHYzM0hQUHRHblR4bzRkKzh3enoranRxRmV6MGdvcEdBeFNTb1BCWUdwcUtxVTBKU1dG YlFrRUFxeU1wdkdScXEyVWxCUXVxWkxtU0R0MjdFaEtTbnJwcFpmKy9PYy9KeVVsN2R5NVU3 TWVzVDh5SXliV0kwYXFpWjR2aXRJN1JiSVB4azRwb25XUHVFVytyYkNIWGhXWFhsdXFlb1py andOTkIwQUQ4ZnpVc3g0YUdCall1M2R2ZW5vNmV6dHk1TWdUSjA0WTFLeHBoZlRxcTYreTdI WEdqQm1VMHFLaUlwWVhWMWRYc3pLYXJhdmFxcWlvYUd4czdPN3VsZy96MkxGamhKQURCdzU4 OU5GSGhCQW1BbUk5WW45RXhPMWlQY3BJMlY4a0lwcStLQ3J2RkQyVWZaQnhTaEd0ZXd6TWZN TEdhNnpwWWx4NmJTbnJpY0FlQjVvT2dBYmlTb0pvUGNRK1lpNGZHemR1WkRzdVc3WXNMUzNO NFBUV3RFSmk2K241K2ZuNzkrK25sTzdmdno4L1B6OHRMVzM1OHVWNnJZdHRIVHQyN1BiYmIy ZGIrRVpqb2VudDdSMHpaa3hQVDA4b0ZCb3paZ3h6VGhYckVmdWpPV0txTFdJOXlrajExdE5W STMveDRrWDJRdW1kRW5ZdlNxbU1IWTFvM2FOcDVxUGFTMnhMM0NJVGw5aFcySnBsN0hHZzZR REVHV1BaQldCWVFOTUJpRFBRZEJCRG9Pa0FBT0Fjb09rQUFPQWNvT2tBQU9BY29Pa0FBT0Fj b09rZ01XaHNiR3hxYXVydjcyOXFhbXBzYkpUY3hmaFR2UUtCUU1EbjgybVdOOWdMQURzQVRR ZUpRV05qNC92dnYvL1paNTk5OE1FSHNWSlZ2WG9PSFRva2ZnUXBCd2tCTkIwa0JvMk5qY2VP SGZQNy9jZU9IZVB5cW5yUjJOalkzdDd1OS91UEhqMnF0MUZWcDlqUUR6LzgwTnpjcktucGZy OS96NTQ5cDA2ZGltbGtBTVFTYURwSURCb2JHOCtkTzhlZitVYmxpOGJHeHUrKyt5NFFDTEQ3 QmpVM3F1b1VHL3I0NDQrUEh6K3UrZEhnNE9DcFU2ZDI3OTRkdTdBQWlESFFkSkFZTkRZMkRn NE92dlBPTzRPRGcxeHcvWDUvSUJEZ0tpOUt2TGhSVmFkbVEzcnI1b09EZzJmT25JR21BenNE VFFlSmdWSmgrZXVqUjQvNi9mNzI5dllJTkYwbDNPS240b3ZHeHNZOWUvWjg4ODAzc1F3TWdK Z0NUUWNBQU9jQVRRY0FBT2NBVFFjQUFPY0FUUWNBQU9jQVRRY0FBT2NBVFFjQUFPZndvNmEz dHJhK0FRQUFJUEVoRUhRQUFIQU0veC9PYmg1MWt3QkRHZ0FBQUFCSlJVNUVya0pnZ2c9PSIg Lz48L3A+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OiAycHggc29saWQgIzMyNUZC QTsgcGFkZGluZy1sZWZ0OiA1cHg7bWFyZ2luLWxlZnQ6NXB4OyI+LS0tLS1VcnNwciZ1dW1s O25nbGljaGUgTmFjaHJpY2h0LS0tLS08YnIgLz48c3Ryb25nPkFuOjwvc3Ryb25nPglLb25y YWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJhZC53aWxrQG9yYWNsZS5jb20mZ3Q7OyA8YnIg Lz48c3Ryb25nPkNDOjwvc3Ryb25nPglTYW5kZXIgRWlrZWxlbmJvb20gJmx0O2xpbnV4QGVp a2VsZW5ib29tLml0Jmd0OzsgeGVuLWRldmVsICZsdDt4ZW4tZGV2ZWxAbGlzdHMueGVuc291 cmNlLmNvbSZndDs7IEphbiBCZXVsaWNoICZsdDtqYmV1bGljaEBzdXNlLmNvbSZndDs7IEtv bnJhZCBSemVzenV0ZWsgV2lsayAmbHQ7a29ucmFkQGRhcm5vay5vcmcmZ3Q7OyA8YnIgLz48 c3Ryb25nPlZvbjo8L3N0cm9uZz4JQ2Fyc3RlbiBTY2hpZXJzICZsdDtjYXJzdGVuQHNjaGll cnMuZGUmZ3Q7PGJyIC8+PHN0cm9uZz5HZXNlbmRldDo8L3N0cm9uZz4JRGkgMjguMDIuMjAx MiAxNTozOTxiciAvPjxzdHJvbmc+QmV0cmVmZjo8L3N0cm9uZz4JUmU6IFtYZW4tZGV2ZWxd IExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGUgKHBhcnQyKTxiciAvPjxzdHJv bmc+QW5sYWdlOjwvc3Ryb25nPglpbmxpbmUudHh0PGJyIC8+PHN0eWxlIHR5cGU9InRleHQv Y3NzIj4uYm9keWNsYXNzIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgfTwvc3R5bGU+ICAg ICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gICAgICAgLmJvZHljbGFzcyAg ICAgICB7ICAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBWZXJkYW5hLCBTYW5zLVNlcmlm ICEgaW1wb3J0YW50OyAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsgICAgICAgICBwYWRkaW5n OiA1cHggNXB4IDVweCA1cHg7ICAgICAgICAgbWFyZ2luOiAwcHg7ICAgICAgICAgYm9yZGVy LXN0eWxlOiBub25lOyAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7ICAgICAg IH0gICAgICAgIHAsIHVsLCBsaSAgICAgICB7ICAgICAgICAgbWFyZ2luLXRvcDogMHB4OyAg ICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsgICAgICAgfSAgIDwvc3R5bGU+ICA8ZGl2Pjxw PldlbGwgbGV0IG1lIGNoZWNrIGZvciBhIGxvbmdlciBwZXJpb2Qgb2YgdGltZSwgYW5kIGVz cGVjaWFsbHksIHdoZXRoZXIgdGhlIERvbVUgaXMgc3RpbGw8L3A+PHA+d29ya2luZyAoY2Fu IGRvIHRoYXQgb25seSBmcm9tIGF0IGhvbWUpLCBidXQgbG9hZCBsb29rcyBwcmV0dHkgd2Vs bCBhZnRlciBhcHBseWluZyB0aGU8L3A+PHA+cGF0Y2ggdG8gMy4yLjggOi1ELjwvcD48cD4m bmJzcDs8L3A+PHA+QlIsPC9wPjxwPkNhcnN0ZW4uPGJyIC8+Jm5ic3A7PC9wPjxibG9ja3F1 b3RlIHN0eWxlPSJib3JkZXItbGVmdDogMnB4IHNvbGlkICMzMjVGQkE7IHBhZGRpbmctbGVm dDogNXB4O21hcmdpbi1sZWZ0OjVweDsiPi0tLS0tVXJzcHImdXVtbDtuZ2xpY2hlIE5hY2hy aWNodC0tLS0tPGJyIC8+PHN0cm9uZz5Bbjo8L3N0cm9uZz4JSmFuIEJldWxpY2ggJmx0O0pC ZXVsaWNoQHN1c2UuY29tJmd0OzsgPGJyIC8+PHN0cm9uZz5DQzo8L3N0cm9uZz4JS29ucmFk IFJ6ZXN6dXRlayBXaWxrICZsdDtrb25yYWRAZGFybm9rLm9yZyZndDs7IHhlbi1kZXZlbCAm bHQ7eGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20mZ3Q7OyBDYXJzdGVuIFNjaGllcnMg Jmx0O2NhcnN0ZW5Ac2NoaWVycy5kZSZndDs7IFNhbmRlciBFaWtlbGVuYm9vbSAmbHQ7bGlu dXhAZWlrZWxlbmJvb20uaXQmZ3Q7OyA8YnIgLz48c3Ryb25nPlZvbjo8L3N0cm9uZz4JS29u cmFkIFJ6ZXN6dXRlayBXaWxrICZsdDtrb25yYWQud2lsa0BvcmFjbGUuY29tJmd0OzxiciAv PjxzdHJvbmc+R2VzZW5kZXQ6PC9zdHJvbmc+CUZyIDE3LjAyLjIwMTIgMTY6MTg8YnIgLz48 c3Ryb25nPkJldHJlZmY6PC9zdHJvbmc+CVJlOiBbWGVuLWRldmVsXSBMb2FkIGluY3JlYXNl IGFmdGVyIG1lbW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz5PbiBUaHUsIEZlYiAxNiwgMjAx MiBhdCAwODo1Njo1M0FNICswMDAwLCBKYW4gQmV1bGljaCB3cm90ZTo8YnIgLz4mZ3Q7ICZn dDsmZ3Q7Jmd0OyBPbiAxNS4wMi4xMiBhdCAyMDoyOCwgS29ucmFkIFJ6ZXN6dXRlayBXaWxr ICZsdDtrb25yYWQud2lsa0BvcmFjbGUuY29tJmd0OyB3cm90ZTo8YnIgLz4mZ3Q7ICZndDtA QCAtMTU1MCw3ICsxNTUyLDExIEBAIHN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2Rl KHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLDxiciAvPiZndDsgJmd0 OyAJc3RydWN0IHBhZ2UgKipwYWdlczs8YnIgLz4mZ3Q7ICZndDsgCXVuc2lnbmVkIGludCBu cl9wYWdlcywgYXJyYXlfc2l6ZSwgaTs8YnIgLz4mZ3Q7ICZndDsgCWdmcF90IG5lc3RlZF9n ZnAgPSAoZ2ZwX21hc2sgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSykgfCBfX0dGUF9aRVJPOzxi ciAvPiZndDsgJmd0Oy08YnIgLz4mZ3Q7ICZndDsrCWdmcF90IGRtYV9tYXNrID0gZ2ZwX21h c2sgJmFtcDsgKF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyKTs8YnIgLz4mZ3Q7ICZndDsrCWlm ICh4ZW5fcHZfZG9tYWluKCkpIHs8YnIgLz4mZ3Q7ICZndDsrCQlpZiAoZG1hX21hc2sgPT0g KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyKSk8YnIgLz4mZ3Q7IDxiciAvPiZndDsgSSBkaWRu JiMzOTt0IHNwb3Qgd2hlcmUgeW91IGZvcmNlIHRoaXMgbm9ybWFsbHkgaW52YWxpZCBjb21i aW5hdGlvbiwgd2l0aG91dDxiciAvPiZndDsgd2hpY2ggdGhlIGNoYW5nZSB3b24mIzM5O3Qg YWZmZWN0IHZtYWxsb2MzMigpIGluIGEgMzItYml0IGtlcm5lbC48YnIgLz4mZ3Q7IDxiciAv PiZndDsgJmd0OysJCQlnZnBfbWFzayAmYW1wOz0gKF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMy KTs8YnIgLz4mZ3Q7IDxiciAvPiZndDsgCQkJZ2ZwX21hc2sgJmFtcDs9IH4oX19HRlBfRE1B IHwgX19HRlBfRE1BMzIpOzxiciAvPiZndDsgPGJyIC8+Jmd0OyBKYW48YnIgLz48YnIgLz5E dWghPGJyIC8+R29vZCBleWVzLiBUaGFua3MgZm9yIGNhdGNoaW5nIHRoYXQuPGJyIC8+PGJy IC8+Jmd0OyA8YnIgLz4mZ3Q7ICZndDsrCX08YnIgLz4mZ3Q7ICZndDsgCW5yX3BhZ2VzID0g KGFyZWEtJmd0O3NpemUgLSBQQUdFX1NJWkUpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7PGJyIC8+ Jmd0OyAmZ3Q7IAlhcnJheV9zaXplID0gKG5yX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdl ICopKTs8YnIgLz4mZ3Q7ICZndDsgPGJyIC8+Jmd0OyA8YnIgLz48YnIgLz5fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxiciAvPlhlbi1kZXZlbCBt YWlsaW5nIGxpc3Q8YnIgLz5YZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbTxiciAvPmh0 dHA6Ly9saXN0cy54ZW5zb3VyY2UuY29tL3hlbi1kZXZlbDxiciAvPjwvYmxvY2txdW90ZT48 L2Rpdj4gICA8L2Jsb2NrcXVvdGU+PC9kaXY+ICAgPC9ibG9ja3F1b3RlPjxwPiZuYnNwOzwv cD4gPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+RS1NYWlsIGlzdCB2aXJlbmZy ZWkuPGJyIC8+IFZvbiBBVkcgJnV1bWw7YmVycHImdXVtbDtmdCAtIDxhIHRpdGxlPSJEaWVz ZXIgZXh0ZXJuZSBMaW5rIHdpcmQgaW4gZWluZW0gbmV1ZW4gRmVuc3RlciBnZSZvdW1sO2Zm bmV0IiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5hdmcuZGUiPnd3dy5hdmcu ZGU8L2E+PGJyIC8+IFZlcnNpb246IDIwMTIuMC4yMTI3IC8gVmlyZW5kYXRlbmJhbms6IDI0 MTEvNDkzMiAtIEF1c2dhYmVkYXR1bTogMTIuMDQuMjAxMjwvZGl2PiAgIDwvYmxvY2txdW90 ZT4KPC9ib2R5Pgo8L2h0bWw+ --=_YUdH-dvcOkdqumcxjwwOCt1SaC2W6cO+GX5lCiR8bVByKT8d-- --===============1809693732979586600== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --===============1809693732979586600==-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Fri, 11 May 2012 15:41:38 -0400 Message-ID: <20120511194138.GA30099@phenom.dumpdata.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Carsten Schiers Cc: Konrad Rzeszutek Wilk , xen-devel , Jan Beulich , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Fri, May 11, 2012 at 11:39:08AM +0200, Carsten Schiers wrote: > Hi Konrad, > = > =A0 > don't want to be pushy, as I have no real issue. I simply use the Xenifie= d kernel or take the double load. = > = > But I think this mistery is still open. My last status was that the lates= t patch you produced resulted in a BUG, = Yes, that is right. Thank you for reminding me. > = > so we still have not checked whether our theory is correct. No we haven't. And I should be have no trouble reproducing this. I can just= write a tiny module that allocates vmalloc_32(). But your timming sucks - I am going on a week vacation next week :-( Ah, if there was just a cloning machine - I could stick myself in it, and Baseline_0 goes on vacation, while Clone_1 goes on working. Then git merge Baseline_0 and Clone_1 in a week and fixup the merge conflicts and continue on. Sigh. Can I ask you to be patient with me once more and ping me in a week - when I am back from vacation and my brain is fresh to work on this? From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Wed, 13 Jun 2012 12:55:29 -0400 Message-ID: <20120613165529.GA10986@phenom.dumpdata.com> References: <20120511194138.GA30099@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: <20120511194138.GA30099@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Carsten Schiers Cc: Konrad Rzeszutek Wilk , xen-devel , Jan Beulich , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Fri, May 11, 2012 at 03:41:38PM -0400, Konrad Rzeszutek Wilk wrote: > On Fri, May 11, 2012 at 11:39:08AM +0200, Carsten Schiers wrote: > > Hi Konrad, > > = > > =A0 > > don't want to be pushy, as I have no real issue. I simply use the Xenif= ied kernel or take the double load. = > > = > > But I think this mistery is still open. My last status was that the lat= est patch you produced resulted in a BUG, = > = > Yes, that is right. Thank you for reminding me. > > = > > so we still have not checked whether our theory is correct. > = > No we haven't. And I should be have no trouble reproducing this. I can ju= st write > a tiny module that allocates vmalloc_32(). Done. Found some bugs.. and here is anew version. Can you please try it out? It has the #define DEBUG 1 set so it should print a lot of stuff when the DVB module loads. If it crashes please send me the full log. Thanks. >>From 5afb4ab1fb3d2b059fe1a6db93ab65cb76f43b8a Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Thu, 31 May 2012 14:21:04 -0400 Subject: [PATCH] xen/vmalloc_32: Use xen_exchange_.. when GFP flags are DMA. [v3] Signed-off-by: Konrad Rzeszutek Wilk --- arch/x86/xen/mmu.c | 187 +++++++++++++++++++++++++++++++++++++++++++++= ++- include/xen/xen-ops.h | 2 + mm/vmalloc.c | 18 +++++- 3 files changed, 202 insertions(+), 5 deletions(-) diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 3a73785..960d206 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -47,6 +47,7 @@ #include #include #include +#include = #include = @@ -2051,6 +2052,7 @@ void __init xen_init_mmu_ops(void) /* Protected by xen_reservation_lock. */ #define MAX_CONTIG_ORDER 9 /* 2MB */ static unsigned long discontig_frames[1< 0x%lx (mfn)\n", __func__,pfns_in[i= ], mfns_out[i]); + } +#endif BUG_ON(!success && ((exchange.nr_exchanged !=3D 0) || (rc =3D=3D 0))); BUG_ON(success && (rc !=3D 0)); = @@ -2231,8 +2322,8 @@ void xen_destroy_contiguous_region(unsigned long vsta= rt, unsigned int order) xen_zap_pfn_range(vstart, order, NULL, out_frames); = /* 3. Do the exchange for non-contiguous MFNs. */ - success =3D xen_exchange_memory(1, order, &in_frame, 1UL << order, - 0, out_frames, 0); + success =3D xen_exchange_memory(1, order, &in_frame, + 1UL << order, 0, out_frames, 0); = /* 4. Map new pages in place of old pages. */ if (success) @@ -2244,6 +2335,94 @@ void xen_destroy_contiguous_region(unsigned long vst= art, unsigned int order) } EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region); = +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits) +{ + unsigned long *in_frames =3D discontig_frames, *out_frames =3D limited_fr= ames; + unsigned long flags; + struct page *page; + int success; + int i, n =3D 0; + unsigned long _limit_map; + unsigned long *limit_map; + + if (xen_feature(XENFEAT_auto_translated_physmap)) + return 0; + + if (unlikely(order > MAX_CONTIG_ORDER)) + return -ENOMEM; + + if (BITS_PER_LONG >> order) { + limit_map =3D kzalloc(BITS_TO_LONGS(1U << order) * + sizeof(*limit_map), GFP_KERNEL); + if (unlikely(!limit_map)) + return -ENOMEM; + } else + limit_map =3D &_limit_map; + + /* 0. Construct our per page bitmap lookup. */ + + if (address_bits && (address_bits < PAGE_SHIFT)) + return -EINVAL; + + if (order) + bitmap_zero(limit_map, 1U << order); + else + __set_bit(0, limit_map); + + /* 1. Clear the pages */ + for (i =3D 0; i < (1ULL << order); i++) { + void *vaddr; + page =3D &pages[i]; + + vaddr =3D page_address(page); +#ifdef DEBUG + printk(KERN_INFO "%s: page: %p vaddr: %p 0x%lx(mfn) 0x%lx(pfn)\n", __fun= c__, page, vaddr, virt_to_mfn(vaddr), mfn_to_pfn(virt_to_mfn(vaddr))); +#endif + if (address_bits) { + if (!(virt_to_mfn(vaddr) >> (address_bits - PAGE_SHIFT))) + continue; + __set_bit(i, limit_map); + } + if (!PageHighMem(page)) + memset(vaddr, 0, PAGE_SIZE); + else { + memset(kmap(page), 0, PAGE_SIZE); + kunmap(page); + ++n; + } + } + /* Check to see if we actually have to do any work. */ + if (bitmap_empty(limit_map, 1U << order)) { + if (limit_map !=3D &_limit_map) + kfree(limit_map); + return 0; + } + if (n) + kmap_flush_unused(); + + spin_lock_irqsave(&xen_reservation_lock, flags); + + /* 2. Zap current PTEs. */ + n =3D xen_zap_page_range(pages, order, in_frames, NULL /*out_frames */, l= imit_map); + + /* 3. Do the exchange for non-contiguous MFNs. */ + success =3D xen_exchange_memory(n, 0 /* this is always called per page */= , in_frames, + n, 0, out_frames, address_bits); + + /* 4. Map new pages in place of old pages. */ + if (success) + xen_remap_exchanged_pages(pages, order, out_frames, 0, limit_map); + else + xen_remap_exchanged_pages(pages, order, NULL, *in_frames, limit_map); + + spin_unlock_irqrestore(&xen_reservation_lock, flags); + if (limit_map !=3D &_limit_map) + kfree(limit_map); + + return success ? 0 : -ENOMEM; +} +EXPORT_SYMBOL_GPL(xen_limit_pages_to_max_mfn); #ifdef CONFIG_XEN_PVHVM static void xen_hvm_exit_mmap(struct mm_struct *mm) { diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 6a198e4..2f8709f 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -29,4 +29,6 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma, unsigned long mfn, int nr, pgprot_t prot, unsigned domid); = +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits); #endif /* INCLUDE_XEN_OPS_H */ diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 2aad499..194af07 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -31,6 +31,8 @@ #include #include = +#include +#include /*** Page table manipulation functions ***/ = static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long= end) @@ -1576,7 +1578,11 @@ static void *__vmalloc_area_node(struct vm_struct *a= rea, gfp_t gfp_mask, struct page **pages; unsigned int nr_pages, array_size, i; gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; - + gfp_t dma_mask =3D gfp_mask & (__GFP_DMA | __GFP_DMA32); + if (xen_pv_domain()) { + if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32)) + gfp_mask &=3D ~(__GFP_DMA | __GFP_DMA32); + } nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT; array_size =3D (nr_pages * sizeof(struct page *)); = @@ -1612,6 +1618,16 @@ static void *__vmalloc_area_node(struct vm_struct *a= rea, gfp_t gfp_mask, goto fail; } area->pages[i] =3D page; + if (xen_pv_domain()) { + if (dma_mask) { + if (xen_limit_pages_to_max_mfn(page, 0, 32)) { + area->nr_pages =3D i + 1; + goto fail; + } + if (gfp_mask & __GFP_ZERO) + clear_highpage(page); + } + } } = if (map_vm_area(area, prot, &pages)) -- = 1.7.7.6 From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 14 Jun 2012 08:07:55 +0100 Message-ID: <4FD9A9EB0200007800089E02@nat28.tlf.novell.com> References: <20120511194138.GA30099@phenom.dumpdata.com> <20120613165529.GA10986@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120613165529.GA10986@phenom.dumpdata.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Konrad Rzeszutek Wilk Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org >>> On 13.06.12 at 18:55, Konrad Rzeszutek Wilk wrote: > @@ -1576,7 +1578,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > struct page **pages; > unsigned int nr_pages, array_size, i; > gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > - > + gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); > + if (xen_pv_domain()) { > + if (dma_mask == (__GFP_DMA | __GFP_DMA32)) As said in an earlier reply - without having any place that would ever set both flags at once, this whole conditional is meaningless. In our code - which I suppose is where you cloned this from - we set GFP_VMALLOC32 to such a value for 32-bit kernels (which otherwise would merely use GFP_KERNEL, and hence not trigger the code calling xen_limit_pages_to_max_mfn()). I don't recall though whether Carsten's problem was on a 32- or 64-bit kernel. Jan > + gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); > + } > nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; > array_size = (nr_pages * sizeof(struct page *)); > From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 14 Jun 2012 09:38:31 +0100 Message-ID: <4FD9A307.9030203@cantab.net> References: <20120511194138.GA30099@phenom.dumpdata.com> <20120613165529.GA10986@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20120613165529.GA10986@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Konrad Rzeszutek Wilk Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , Jan Beulich , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On 13/06/12 17:55, Konrad Rzeszutek Wilk wrote: > > + /* 3. Do the exchange for non-contiguous MFNs. */ > + success = xen_exchange_memory(n, 0 /* this is always called per page */, in_frames, > + n, 0, out_frames, address_bits); vmalloc() does not require physically contiguous MFNs. David From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Thu, 14 Jun 2012 20:40:19 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20120613165529.GA10986@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?Jan_Beulich?= , =?iso-8859-1?Q?Sander_Eikelenboom?= List-Id: xen-devel@lists.xenproject.org Konrad, against which kernel version did you produce this patch? It will no= t succeed with 3.4.2 at least, will look up some older version now... -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xen.org [mailto:xen-devel-bounces@lists.xen.or= g] Im Auftrag von Konrad Rzeszutek Wilk Gesendet: Mittwoch, 13. Juni 2012 18:55 An: Carsten Schiers Cc: Konrad Rzeszutek Wilk; xen-devel; Jan Beulich; Sander Eikelenboom Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Fri, May 11, 2012 at 03:41:38PM -0400, Konrad Rzeszutek Wilk wrote: > On Fri, May 11, 2012 at 11:39:08AM +0200, Carsten Schiers wrote: > > Hi Konrad, > > = > > =A0 > > don't want to be pushy, as I have no real issue. I simply use the Xenif= ied kernel or take the double load. = > > = > > But I think this mistery is still open. My last status was that the = > > latest patch you produced resulted in a BUG, > = > Yes, that is right. Thank you for reminding me. > > = > > so we still have not checked whether our theory is correct. > = > No we haven't. And I should be have no trouble reproducing this. I can = > just write a tiny module that allocates vmalloc_32(). Done. Found some bugs.. and here is anew version. Can you please try it out= ? It has the #define DEBUG 1 set so it should print a lot of stuff when the= DVB module loads. If it crashes please send me the full log. Thanks. >>From 5afb4ab1fb3d2b059fe1a6db93ab65cb76f43b8a Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Thu, 31 May 2012 14:21:04 -0400 Subject: [PATCH] xen/vmalloc_32: Use xen_exchange_.. when GFP flags are DMA. [v3] Signed-off-by: Konrad Rzeszutek Wilk --- arch/x86/xen/mmu.c | 187 +++++++++++++++++++++++++++++++++++++++++++++= ++- include/xen/xen-ops.h | 2 + mm/vmalloc.c | 18 +++++- 3 files changed, 202 insertions(+), 5 deletions(-) diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 3a73785..960d206= 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -47,6 +47,7 @@ #include #include #include +#include = #include = @@ -2051,6 +2052,7 @@ void __init xen_init_mmu_ops(void) /* Protected by xen_reservation_lock. */ #define MAX_CONTIG_ORDER 9 /* 2M= B */ static unsigned long discontig_frames[1< 0x%lx (mfn)\n", __func__,pfns_in[i= ], mfns_out[i]); + } +#endif BUG_ON(!success && ((exchange.nr_exchanged !=3D 0) || (rc =3D=3D 0))); BUG_ON(success && (rc !=3D 0)); = @@ -2231,8 +2322,8 @@ void xen_destroy_contiguous_region(unsigned long vsta= rt, unsigned int order) xen_zap_pfn_range(vstart, order, NULL, out_frames); = /* 3. Do the exchange for non-contiguous MFNs. */ - success =3D xen_exchange_memory(1, order, &in_frame, 1UL << order, - 0, out_frames, 0); + success =3D xen_exchange_memory(1, order, &in_frame, + 1UL << order, 0, out_frames, 0); = /* 4. Map new pages in place of old pages. */ if (success) @@ -2244,6 +2335,94 @@ void xen_destroy_contiguous_region(unsigned long vst= art, unsigned int order) } EXPORT_SYMBOL_GPL(xen_destroy_contiguous_regio= n); = +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits) +{ + unsigned long *in_frames =3D discontig_frames, *out_frames =3D limited_fr= ames; + unsigned long flags; + struct page *page; + int success; + int i, n =3D 0; + unsigned long _limit_map; + unsigned long *limit_map; + + if (xen_feature(XENFEAT_auto_translated_physmap)) + return 0; + + if (unlikely(order > MAX_CONTIG_ORDER)) + return -ENOMEM; + + if (BITS_PER_LONG >> order) { + limit_map =3D kzalloc(BITS_TO_LONGS(1U << order) * + sizeof(*limit_map), GFP_KERNEL); + if (unlikely(!limit_map)) + return -ENOMEM; + } else + limit_map =3D &_limit_map; + + /* 0. Construct our per page bitmap lookup. */ + + if (address_bits && (address_bits < PAGE_SHIFT)) + return -EINVAL; + + if (order) + bitmap_zero(limit_map, 1U << order); + else + __set_bit(0, limit_map); + + /* 1. Clear the pages */ + for (i =3D 0; i < (1ULL << order); i++) { + void *vaddr; + page =3D &pages[i]; + + vaddr =3D page_address(page); +#ifdef DEBUG + printk(KERN_INFO "%s: page: %p vaddr: %p 0x%lx(mfn) 0x%lx(pfn)\n", = +__func__, page, vaddr, virt_to_mfn(vaddr), mfn_to_pfn(virt_to_mfn(vaddr)))= ; #endif + if (address_bits) { + if (!(virt_to_mfn(vaddr) >> (address_bits - PAGE_SHIFT))) + continue; + __set_bit(i, limit_map); + } + if (!PageHighMem(page)) + memset(vaddr, 0, PAGE_SIZE); + else { + memset(kmap(page), 0, PAGE_SIZE); + kunmap(page); + ++n; + } + } + /* Check to see if we actually have to do any work. */ + if (bitmap_empty(limit_map, 1U << order)) { + if (limit_map !=3D &_limit_map) + kfree(limit_map); + return 0; + } + if (n) + kmap_flush_unused(); + + spin_lock_irqsave(&xen_reservation_lock, flags); + + /* 2. Zap current PTEs. */ + n =3D xen_zap_page_range(pages, order, in_frames, NULL /*out_frames */, = +limit_map); + + /* 3. Do the exchange for non-contiguous MFNs. */ + success =3D xen_exchange_memory(n, 0 /* this is always called per page */= , in_frames, + n, 0, out_frames, address_bits); + + /* 4. Map new pages in place of old pages. */ + if (success) + xen_remap_exchanged_pages(pages, order, out_frames, 0, limit_map); + else + xen_remap_exchanged_pages(pages, order, NULL, *in_frames, limit_map); + + spin_unlock_irqrestore(&xen_reservation_lock, flags); + if (limit_map !=3D &_limit_map) + kfree(limit_map); + + return success ? 0 : -ENOMEM; +} +EXPORT_SYMBOL_GPL(xen_limit_pages_to_max_mfn); #ifdef CONFIG_XEN_PVHVM static void xen_hvm_exit_mmap(struct mm_struct *mm) { diff --git a/includ= e/xen/xen-ops.h b/include/xen/xen-ops.h index 6a198e4..2f8709f 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -29,4 +29,6 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma, unsigned long mfn, int nr, pgprot_t prot, unsigned domid); = +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits); #endif /* INCLUDE_XEN_OPS_H */ diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 2aad499..194af07 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -31,6 +31,8 @@ #include #include = +#include +#include /*** Page table manipulation functions ***/ = static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long= end) @@ -1576,7 +1578,11 @@ static void *__vmalloc_area_node(struct vm_str= uct *area, gfp_t gfp_mask, struct page **pages; unsigned int nr_pages, array_size, i; gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; - + gfp_t dma_mask =3D gfp_mask & (__GFP_DMA | __GFP_DMA32); + if (xen_pv_domain()) { + if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32)) + gfp_mask &=3D ~(__GFP_DMA | __GFP_DMA32); + } nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT; array_size =3D (nr_pages * sizeof(struct page *)); = @@ -1612,6 +1618,16 @@ static void *__vmalloc_area_node(struct vm_struct *a= rea, gfp_t gfp_mask, goto fail; } area->pages[i] =3D page; + if (xen_pv_domain()) { + if (dma_mask) { + if (xen_limit_pages_to_max_mfn(page, 0, 32)) { + area->nr_pages =3D i + 1; + goto fail; + } + if (gfp_mask & __GFP_ZERO) + clear_highpage(page); + } + } } = if (map_vm_area(area, prot, &pages)) -- 1.7.7.6 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel ----- E-Mail ist virenfrei. Von AVG =FCberpr=FCft - www.avg.de Version: 2012.0.2180 / Virendatenbank: 2433/5067 - Ausgabedatum: 13.06.2012 = From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 14 Jun 2012 14:31:52 -0400 Message-ID: <20120614183152.GC21956@phenom.dumpdata.com> References: <20120511194138.GA30099@phenom.dumpdata.com> <20120613165529.GA10986@phenom.dumpdata.com> <4FD9A307.9030203@cantab.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <4FD9A307.9030203@cantab.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: David Vrabel Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , Jan Beulich , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Thu, Jun 14, 2012 at 09:38:31AM +0100, David Vrabel wrote: > On 13/06/12 17:55, Konrad Rzeszutek Wilk wrote: > > > > + /* 3. Do the exchange for non-contiguous MFNs. */ > > + success = xen_exchange_memory(n, 0 /* this is always called per page */, in_frames, > > + n, 0, out_frames, address_bits); > > vmalloc() does not require physically contiguous MFNs. It doesn't matter that much in this context as the vmalloc calls this per-page - so it is only one page that is swizzled. > > David From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Load increase after memory upgrade (part2) Date: Thu, 14 Jun 2012 14:33:03 -0400 Message-ID: <20120614183303.GD21956@phenom.dumpdata.com> References: <20120511194138.GA30099@phenom.dumpdata.com> <20120613165529.GA10986@phenom.dumpdata.com> <4FD9A9EB0200007800089E02@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <4FD9A9EB0200007800089E02@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , Sander Eikelenboom List-Id: xen-devel@lists.xenproject.org On Thu, Jun 14, 2012 at 08:07:55AM +0100, Jan Beulich wrote: > >>> On 13.06.12 at 18:55, Konrad Rzeszutek Wilk wrote: > > @@ -1576,7 +1578,11 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > > struct page **pages; > > unsigned int nr_pages, array_size, i; > > gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > > - > > + gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); > > + if (xen_pv_domain()) { > > + if (dma_mask == (__GFP_DMA | __GFP_DMA32)) > > As said in an earlier reply - without having any place that would > ever set both flags at once, this whole conditional is meaningless. > In our code - which I suppose is where you cloned this from - we Yup. > set GFP_VMALLOC32 to such a value for 32-bit kernels (which > otherwise would merely use GFP_KERNEL, and hence not trigger Ah, let me double check. Thanks for looking out for this. > the code calling xen_limit_pages_to_max_mfn()). I don't recall > though whether Carsten's problem was on a 32- or 64-bit kernel. > > Jan > > > + gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); > > + } > > nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; > > array_size = (nr_pages * sizeof(struct page *)); > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Thu, 14 Jun 2012 20:43:30 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <4FD9A9EB0200007800089E02@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?iso-8859-1?Q?Jan_Beulich?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?Sander_Eikelenboom?= List-Id: xen-devel@lists.xenproject.org It's a 64 Bit kernel... -----Urspr=FCngliche Nachricht----- Von: Jan Beulich [mailto:JBeulich@suse.com] = Gesendet: Donnerstag, 14. Juni 2012 09:08 An: Konrad Rzeszutek Wilk Cc: Konrad Rzeszutek Wilk; Sander Eikelenboom; xen-devel; Carsten Schiers Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) >>> On 13.06.12 at 18:55, Konrad Rzeszutek Wilk wr= ote: > @@ -1576,7 +1578,11 @@ static void *__vmalloc_area_node(struct vm_struct = *area, gfp_t gfp_mask, > struct page **pages; > unsigned int nr_pages, array_size, i; > gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; > - > + gfp_t dma_mask =3D gfp_mask & (__GFP_DMA | __GFP_DMA32); > + if (xen_pv_domain()) { > + if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32)) As said in an earlier reply - without having any place that would ever set = both flags at once, this whole conditional is meaningless. In our code - which I suppose is where you cloned this from - we set GFP_VM= ALLOC32 to such a value for 32-bit kernels (which otherwise would merely us= e GFP_KERNEL, and hence not trigger the code calling xen_limit_pages_to_max= _mfn()). I don't recall though whether Carsten's problem was on a 32- or 64= -bit kernel. Jan > + gfp_mask &=3D ~(__GFP_DMA | __GFP_DMA32); > + } > nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT; > array_size =3D (nr_pages * sizeof(struct page *)); > = ----- E-Mail ist virenfrei. Von AVG =FCberpr=FCft - www.avg.de Version: 2012.0.2180 / Virendatenbank: 2433/5069 - Ausgabedatum: 14.06.2012 = From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?iso-8859-1?Q?Carsten_Schiers?= Subject: Re: =?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?= =?iso-8859-1?q?part2=29?= Date: Thu, 14 Jun 2012 21:16:31 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= Cc: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?Jan_Beulich?= , =?iso-8859-1?Q?Sander_Eikelenboom?= List-Id: xen-devel@lists.xenproject.org OK, found the problem in the patch file, baking 3.4.2...BR, Carsten. -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xen.org [mailto:xen-devel-bounces@lists.xen.or= g] Im Auftrag von Carsten Schiers Gesendet: Donnerstag, 14. Juni 2012 20:40 An: Konrad Rzeszutek Wilk Cc: Konrad Rzeszutek Wilk; xen-devel; Jan Beulich; Sander Eikelenboom Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) Konrad, against which kernel version did you produce this patch? It will no= t succeed with 3.4.2 at least, will look up some older version now... -----Urspr=FCngliche Nachricht----- Von: xen-devel-bounces@lists.xen.org [mailto:xen-devel-bounces@lists.xen.or= g] Im Auftrag von Konrad Rzeszutek Wilk Gesendet: Mittwoch, 13. Juni 2012 18:55 An: Carsten Schiers Cc: Konrad Rzeszutek Wilk; xen-devel; Jan Beulich; Sander Eikelenboom Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2) On Fri, May 11, 2012 at 03:41:38PM -0400, Konrad Rzeszutek Wilk wrote: > On Fri, May 11, 2012 at 11:39:08AM +0200, Carsten Schiers wrote: > > Hi Konrad, > > = > > =A0 > > don't want to be pushy, as I have no real issue. I simply use the Xenif= ied kernel or take the double load. = > > = > > But I think this mistery is still open. My last status was that the = > > latest patch you produced resulted in a BUG, > = > Yes, that is right. Thank you for reminding me. > > = > > so we still have not checked whether our theory is correct. > = > No we haven't. And I should be have no trouble reproducing this. I can = > just write a tiny module that allocates vmalloc_32(). Done. Found some bugs.. and here is anew version. Can you please try it out= ? It has the #define DEBUG 1 set so it should print a lot of stuff when the= DVB module loads. If it crashes please send me the full log. Thanks. >>From 5afb4ab1fb3d2b059fe1a6db93ab65cb76f43b8a Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Thu, 31 May 2012 14:21:04 -0400 Subject: [PATCH] xen/vmalloc_32: Use xen_exchange_.. when GFP flags are DMA. [v3] Signed-off-by: Konrad Rzeszutek Wilk --- arch/x86/xen/mmu.c | 187 +++++++++++++++++++++++++++++++++++++++++++++= ++- include/xen/xen-ops.h | 2 + mm/vmalloc.c | 18 +++++- 3 files changed, 202 insertions(+), 5 deletions(-) diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 3a73785..960d206= 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -47,6 +47,7 @@ #include #include #include +#include = #include = @@ -2051,6 +2052,7 @@ void __init xen_init_mmu_ops(void) /* Protected by xen_reservation_lock. */ #define MAX_CONTIG_ORDER 9 /* 2M= B */ static unsigned long discontig_frames[1< 0x%lx (mfn)\n", __func__,pfns_in[i= ], mfns_out[i]); + } +#endif BUG_ON(!success && ((exchange.nr_exchanged !=3D 0) || (rc =3D=3D 0))); BUG_ON(success && (rc !=3D 0)); = @@ -2231,8 +2322,8 @@ void xen_destroy_contiguous_region(unsigned long vsta= rt, unsigned int order) xen_zap_pfn_range(vstart, order, NULL, out_frames); = /* 3. Do the exchange for non-contiguous MFNs. */ - success =3D xen_exchange_memory(1, order, &in_frame, 1UL << order, - 0, out_frames, 0); + success =3D xen_exchange_memory(1, order, &in_frame, + 1UL << order, 0, out_frames, 0); = /* 4. Map new pages in place of old pages. */ if (success) @@ -2244,6 +2335,94 @@ void xen_destroy_contiguous_region(unsigned long vst= art, unsigned int order) } EXPORT_SYMBOL_GPL(xen_destroy_contiguous_regio= n); = +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits) +{ + unsigned long *in_frames =3D discontig_frames, *out_frames =3D limited_fr= ames; + unsigned long flags; + struct page *page; + int success; + int i, n =3D 0; + unsigned long _limit_map; + unsigned long *limit_map; + + if (xen_feature(XENFEAT_auto_translated_physmap)) + return 0; + + if (unlikely(order > MAX_CONTIG_ORDER)) + return -ENOMEM; + + if (BITS_PER_LONG >> order) { + limit_map =3D kzalloc(BITS_TO_LONGS(1U << order) * + sizeof(*limit_map), GFP_KERNEL); + if (unlikely(!limit_map)) + return -ENOMEM; + } else + limit_map =3D &_limit_map; + + /* 0. Construct our per page bitmap lookup. */ + + if (address_bits && (address_bits < PAGE_SHIFT)) + return -EINVAL; + + if (order) + bitmap_zero(limit_map, 1U << order); + else + __set_bit(0, limit_map); + + /* 1. Clear the pages */ + for (i =3D 0; i < (1ULL << order); i++) { + void *vaddr; + page =3D &pages[i]; + + vaddr =3D page_address(page); +#ifdef DEBUG + printk(KERN_INFO "%s: page: %p vaddr: %p 0x%lx(mfn) 0x%lx(pfn)\n", = +__func__, page, vaddr, virt_to_mfn(vaddr), mfn_to_pfn(virt_to_mfn(vaddr)))= ; #endif + if (address_bits) { + if (!(virt_to_mfn(vaddr) >> (address_bits - PAGE_SHIFT))) + continue; + __set_bit(i, limit_map); + } + if (!PageHighMem(page)) + memset(vaddr, 0, PAGE_SIZE); + else { + memset(kmap(page), 0, PAGE_SIZE); + kunmap(page); + ++n; + } + } + /* Check to see if we actually have to do any work. */ + if (bitmap_empty(limit_map, 1U << order)) { + if (limit_map !=3D &_limit_map) + kfree(limit_map); + return 0; + } + if (n) + kmap_flush_unused(); + + spin_lock_irqsave(&xen_reservation_lock, flags); + + /* 2. Zap current PTEs. */ + n =3D xen_zap_page_range(pages, order, in_frames, NULL /*out_frames */, = +limit_map); + + /* 3. Do the exchange for non-contiguous MFNs. */ + success =3D xen_exchange_memory(n, 0 /* this is always called per page */= , in_frames, + n, 0, out_frames, address_bits); + + /* 4. Map new pages in place of old pages. */ + if (success) + xen_remap_exchanged_pages(pages, order, out_frames, 0, limit_map); + else + xen_remap_exchanged_pages(pages, order, NULL, *in_frames, limit_map); + + spin_unlock_irqrestore(&xen_reservation_lock, flags); + if (limit_map !=3D &_limit_map) + kfree(limit_map); + + return success ? 0 : -ENOMEM; +} +EXPORT_SYMBOL_GPL(xen_limit_pages_to_max_mfn); #ifdef CONFIG_XEN_PVHVM static void xen_hvm_exit_mmap(struct mm_struct *mm) { diff --git a/includ= e/xen/xen-ops.h b/include/xen/xen-ops.h index 6a198e4..2f8709f 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -29,4 +29,6 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma, unsigned long mfn, int nr, pgprot_t prot, unsigned domid); = +int xen_limit_pages_to_max_mfn(struct page *pages, unsigned int order, + unsigned int address_bits); #endif /* INCLUDE_XEN_OPS_H */ diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 2aad499..194af07 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -31,6 +31,8 @@ #include #include = +#include +#include /*** Page table manipulation functions ***/ = static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long= end) @@ -1576,7 +1578,11 @@ static void *__vmalloc_area_node(struct vm_str= uct *area, gfp_t gfp_mask, struct page **pages; unsigned int nr_pages, array_size, i; gfp_t nested_gfp =3D (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; - + gfp_t dma_mask =3D gfp_mask & (__GFP_DMA | __GFP_DMA32); + if (xen_pv_domain()) { + if (dma_mask =3D=3D (__GFP_DMA | __GFP_DMA32)) + gfp_mask &=3D ~(__GFP_DMA | __GFP_DMA32); + } nr_pages =3D (area->size - PAGE_SIZE) >> PAGE_SHIFT; array_size =3D (nr_pages * sizeof(struct page *)); = @@ -1612,6 +1618,16 @@ static void *__vmalloc_area_node(struct vm_struct *a= rea, gfp_t gfp_mask, goto fail; } area->pages[i] =3D page; + if (xen_pv_domain()) { + if (dma_mask) { + if (xen_limit_pages_to_max_mfn(page, 0, 32)) { + area->nr_pages =3D i + 1; + goto fail; + } + if (gfp_mask & __GFP_ZERO) + clear_highpage(page); + } + } } = if (map_vm_area(area, prot, &pages)) -- 1.7.7.6 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel ----- E-Mail ist virenfrei. Von AVG =FCberpr=FCft - www.avg.de Version: 2012.0.2180 / Virendatenbank: 2433/5067 - Ausgabedatum: 13.06.2012 = _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel ----- E-Mail ist virenfrei. Von AVG =FCberpr=FCft - www.avg.de Version: 2012.0.2180 / Virendatenbank: 2433/5069 - Ausgabedatum: 14.06.2012 =