From stan@hardwarefreak.com Wed Feb 1 01:29:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q117TW09230203 for ; Wed, 1 Feb 2012 01:29:33 -0600 X-ASG-Debug-ID: 1328081370-04bdf07516463540001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id JluxSH7BaNPkWXcg for ; Tue, 31 Jan 2012 23:29:31 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id 13CAD6C1A4 for ; Wed, 1 Feb 2012 01:29:30 -0600 (CST) Message-ID: <4F28E9DA.8030407@hardwarefreak.com> Date: Wed, 01 Feb 2012 01:29:30 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131141604.GB46571@nsrc.org> <20120131202526.GJ9090@dastard> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes In-Reply-To: <20120131202526.GJ9090@dastard> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1328081370 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87274 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 On 1/31/2012 2:25 PM, Dave Chinner wrote: > On Tue, Jan 31, 2012 at 02:16:04PM +0000, Brian Candler wrote: >> Here we appear to be limited by real seeks. 225 seeks/sec is still very good > > That number indicates 225 IOs/s, not 225 seeks/s. Yeah, the voice coil actuator and spindle rotation limits the peak random seek rate of good 7.2k drive/controller combos to about 150/s. 15k drives do about 250-300 seeks/s max. Simple tool to test max random seeks/sec for a device: 32bit binary: http://www.hardwarefreak.com/seekerb source: http://www.hardwarefreak.com/seeker_baryluk.c I'm not the author. The original seeker program is single threaded. Baryluk did the thread hacking. Background info: http://www.linuxinsight.com/how_fast_is_your_disk.html Usage: ./seekerb device [threads] Results for a single WD 7.2K drive, no NCQ, deadline elevator: 1 threads Results: 64 seeks/second, 15.416 ms random access time 16 threads Results: 97 seeks/second, 10.285 ms random access time 128 threads Results: 121 seeks/second, 8.208 ms random access time Actual output: $ seekerb /dev/sda 128 Seeker v3.0, 2009-06-17, http://www.linuxinsight.com/how_fast_is_your_disk.html Benchmarking /dev/sda [976773168 blocks, 500107862016 bytes, 465 GB, 476940 MB, 500 GiB, 500107 MiB] [512 logical sector size, 512 physical sector size] [128 threads] Wait 30 seconds............................. Results: 121 seeks/second, 8.208 ms random access time (52614775 < offsets < 499769984475) Targeting array devices (mdraid or hardware, or FC SAN LUN) with lots of spindles, and/or SSDs should yield some interesting results. -- Stan From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 04:24:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11AOleG238808 for ; Wed, 1 Feb 2012 04:24:47 -0600 X-ASG-Debug-ID: 1328091879-04bdf07516478500001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id POI4wZcptosQv1TB (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 Feb 2012 02:24:39 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsXMi-00086T-Nx; Wed, 01 Feb 2012 10:24:36 +0000 Date: Wed, 1 Feb 2012 05:24:36 -0500 From: Christoph Hellwig To: Dave Chinner Cc: Ben Myers , Christoph Hellwig , Nathan Scott , xfs@oss.sgi.com Subject: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC Message-ID: <20120201102436.GB26638@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_quota: remove calls to XFS_QSYNC References: <20120130115024.GA884@infradead.org> <20120131162617.GF7762@sgi.com> <20120131210110.GN9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131210110.GN9090@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328091879 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Feb 01, 2012 at 08:01:10AM +1100, Dave Chinner wrote: > So effectively what that says to me is that quota only exports the > real block usage, even though it internally tracks delalloc > reservations. Perhaps an additionaly change to make in this case is > to fold the reserved blocks into what is reported to the quota > utilities? > > Indeed, what is exported to userspace via xfs_qm_export_dquot() is > the information in the dquot core - the on-disk information - so > perhaps all we need to do is export dqp->q_res_bcount (the count of > real + reserved blocks) instead of the on-disk info? That seems like a good idea, given that enforcement takes the reservation into account. To retain compatbility for the case of new userspace and an old kernel I'd have to disable Q_XQUOTASYNC in the kernel intead of in the tool, though. From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 04:45:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11Aj6Ct239807 for ; Wed, 1 Feb 2012 04:45:07 -0600 X-ASG-Debug-ID: 1328093105-04cbb01fb24d5090001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id njuZar0fizd4QdQF (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 Feb 2012 02:45:05 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsXgT-0003ZW-4c; Wed, 01 Feb 2012 10:45:01 +0000 Date: Wed, 1 Feb 2012 05:45:01 -0500 From: Christoph Hellwig To: Dave Chinner Cc: Dan Carpenter , xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: remove an unneeded NULL check Message-ID: <20120201104500.GA13672@infradead.org> X-ASG-Orig-Subj: Re: [patch] xfs: remove an unneeded NULL check References: <20120128105501.GB25092@elgon.mountain> <20120131225601.GQ9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131225601.GQ9090@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328093105 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Feb 01, 2012 at 09:56:01AM +1100, Dave Chinner wrote: > > /* lock out background commit */ > > down_read(&log->l_cilp->xc_ctx_lock); > > - if (commit_lsn) > > - *commit_lsn = log->l_cilp->xc_ctx->sequence; > > + *commit_lsn = log->l_cilp->xc_ctx->sequence; > > > > xlog_cil_insert_items(log, log_vector, tp->t_ticket); > > There's a set of reviewed patches (for 3.3) that change all this > code. The null check might still be there, but that needs to be > checked. Which series is that? I mut have to admit I've lost track by now. From pg_mh@V01.sabi.co.uk Wed Feb 1 06:32:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11CWDe7248088 for ; Wed, 1 Feb 2012 06:32:14 -0600 X-ASG-Debug-ID: 1328099531-04bdf075174883d0001-ps1ADW Received: from woodbine.london.02.net (woodbine.london.02.net [87.194.255.145]) by cuda.sgi.com with ESMTP id 4PZYa8jjIlH4rArC for ; Wed, 01 Feb 2012 04:32:12 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.145 Received: from ty.sabi.co.UK (87.194.99.40) by woodbine.london.02.net (8.5.140) id 4EEB647400CE5CE1 for xfs@OSS.SGI.com; Wed, 1 Feb 2012 12:32:11 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RsZLt-00087l-RX for ; Wed, 01 Feb 2012 12:31:53 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20265.12473.715630.925704@tree.ty.sabi.co.UK> Date: Wed, 1 Feb 2012 12:31:53 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <20120131120859.1f1d6a17@harpe.intellique.com> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131120859.1f1d6a17@harpe.intellique.com> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: woodbine.london.02.net[87.194.255.145] X-Barracuda-Start-Time: 1328099532 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_SA210e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87294 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC5_SA210e Custom Rule SA210e [ ... ] > Is there a filesystem that's really suitable for EC2? What > about workloads? my impression is that EC2 is fine for > whatever doesn't need any QoS. Prototyping, for instance. That's one use, but it is wider than that. Services like that are good for "emarassingly parallel" workloads, where the QoS of *a single* element does not matter, or even the *performance* (or the *reliability*) of a single element is less important, at least compared to the ability to throw a lot of cheap ones at a problem. Largely the same domain of application as the Google platform, where their "embarassingly parallel" workload is log generation and analysis. Which advises that on EC2 simpler is better, and 'ext2' might be most appropriate for non-shared applications. XFS, being like JFS a rather general purpose design, looks appropriate, even if as mentioned in another reply, it is aimed at massive and highly parallel storage layers with highly threaded applications. Aside note: I think that on most VM systems using "virtual disks" of any sort except to store he OS filetree which is mostly RO is a bad idea, and I suffered a lot last year dealing with a rather hastily thrown together setup of that sort. In that case I eliminated all but the root filetree VM disks and replaced them with filetrees exported via NFS from XFS on the underlying VM host itself (that is not over the network). This improved performance tremendously (in part because in most VM layers virtual NICs are more efficient than virtual disk adapters) but in particular much faster check/repair and much reduced crazy latencies during backups, because I could run check/repair and the backups *on the real machine*, where XFS performed a lot better without the VM overheads and "skewed" latencies. From pg_mh@V01.sabi.co.uk Wed Feb 1 06:32:15 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11CWE0W248089 for ; Wed, 1 Feb 2012 06:32:15 -0600 X-ASG-Debug-ID: 1328099531-04cb6c22613cae20001-ps1ADW Received: from woodbine.london.02.net (woodbine.london.02.net [87.194.255.145]) by cuda.sgi.com with ESMTP id l51DIt87SOM4UjEf for ; Wed, 01 Feb 2012 04:32:12 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.145 Received: from ty.sabi.co.UK (87.194.99.40) by woodbine.london.02.net (8.5.140) id 4EEB647400CE5CDB for xfs@OSS.SGI.com; Wed, 1 Feb 2012 12:32:11 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RsYY0-00086q-S1 for ; Wed, 01 Feb 2012 11:40:20 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Message-ID: <20265.9379.139218.148520@tree.ty.sabi.co.UK> Date: Wed, 1 Feb 2012 11:40:19 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <4F288561.5040803@hardwarefreak.com> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131205014.GM9090@dastard> <4F288561.5040803@hardwarefreak.com> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.to.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: woodbine.london.02.net[87.194.255.145] X-Barracuda-Start-Time: 1328099531 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87294 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [ ... ] >>> We are using Amazon EC2 instances. >>> [ ... ] one of the the worst possible platforms for XFS. >> I don't agree with you there. If the workload works best on >> XFs, it doesn't matter what the underlying storage device is. >> e.g. if it's a fsync heavy workload, it will still perform >> better on XFS on EC2 than btrfs on EC2... There are special cases, but =ABfsync heavy=BB is a bit of bad example. In general file system designs are not at all independent of the expected storage platform, and some designs are far better than others for specific storage platforms, and viceversa. This goes all the way back to the 4BSD filesystem being specifically optimized for rotational latency. [ ... ] >> You'd be wrong about that. There are as many good uses of >> cloud services as there are bad ones, VMs are not "cloud" services, those are more like remotely hosted services, used via SOAP/REST. VMs are more like colocation on the cheap. >> yet the same decisions about storage need to be made even >> when services are remotely hosted.... The basic problem with VM platforms is that they have completely different latency (and somewhat different bandwidth) and scheduling characteristics from "real" hardware, in particular the relative costs of several operations are very different than on "real" hardware, and the design tradeoffs that are good for "real" hardware may not be relevant or may even be bad for VMs. In addition VM "disks" can be implemented in crazy ways, like with sparse files, and those impact severely achievable performance levels. > [ ... ] workloads that would require XFS, or benefit most from > it, are probably going to need more guarantees WRT bandwidth > and IOPS being available consistently, vs sharing said > resources with other systems in the cloud infrastructure. This is almost there, but =ABconsistently=BB is a bit of an understatement. It is not just that in VMs resources are shared and subject to externally induced loads. What matters is that the storage layer performance envelope have roughly the same tradeoffs as those for which a certain design has been aimed at. Even differently shaped hardware, like flash SSD, can have very different performance envelopes than rotating disks, or sets of rotating disks. A VM running on its own on a certain platform still has different latencies and tradeoffs than the underlying platform. > Additionally, you have driven the point home many times WRT > tuning XFS to the underlying hardware, specifically stripe > alignment. That as usual only matters for RMW-oriented storage layers, and we don't really know what storage layer EC2 uses (hopefully not one with RMW problems as parity RAID is known to be quite ill suited to VM disks). [ ... ] > [ ... ] EC2 is probably bad for the typical workloads where > XFS best flexes its muscles. That's probably a good point but not quite the apposite one here. In the case raised by the OP, he had a large delay and "forgot" to say he was running the system under layers (of unknown structure) of virtualization. In that case the latency (and bandwidth) profiles of both the computing and the storage platforms can be very different from those XFS has been aimed at, and I would not be surprised by starvation or locking problems. Eventually DaveC pointed out a known locking one during 'growfs', so not dependent on the latency profile of the platform. From T.Crane@rhul.ac.uk Wed Feb 1 07:36:21 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11DaK4w251919 for ; Wed, 1 Feb 2012 07:36:21 -0600 X-ASG-Debug-ID: 1328103377-04cb6c22603d0750001-NocioJ Received: from thb-mta-17.emailfiltering.com (thb-mta-17-tx.emailfiltering.com [194.116.199.149]) by cuda.sgi.com with ESMTP id utZ0tWrq162mdO1B (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 05:36:18 -0800 (PST) X-Barracuda-Envelope-From: T.Crane@rhul.ac.uk X-Barracuda-Apparent-Source-IP: 194.116.199.149 Received: from exch-hub02.rhul.ac.uk ([134.219.208.108]) by thb-mta-17.emailfiltering.com with emfmta (version 4.8.5.86) by TLS id 2984374506 ;9a6f6161007fa22c; Wed, 01 Feb 2012 13:36:16 +0000 Received: from exch-cas01.cc.rhul.local (2002:86db:d06d::86db:d06d) by EXCH-HUB02.cc.rhul.local (2002:86db:d06c::86db:d06c) with Microsoft SMTP Server (TLS) id 14.1.339.1; Wed, 1 Feb 2012 13:36:16 +0000 Received: from teak.pp.rhul.ac.uk (134.219.208.226) by secure-smtp.rhul.ac.uk (134.219.208.109) with Microsoft SMTP Server id 14.1.339.1; Wed, 1 Feb 2012 13:36:15 +0000 Message-ID: <4F293FCC.7010101@rhul.ac.uk> Date: Wed, 1 Feb 2012 13:36:12 +0000 From: Tom Crane User-Agent: Thunderbird 2.0.0.24 (X11/20111109) MIME-Version: 1.0 To: CC: Subject: xfs_repair segfaults with ag_stride option Content-Type: text/plain; charset="ISO-8859-1"; format=flowed X-ASG-Orig-Subj: xfs_repair segfaults with ag_stride option Content-Transfer-Encoding: 7bit X-Barracuda-Connect: thb-mta-17-tx.emailfiltering.com[194.116.199.149] X-Barracuda-Start-Time: 1328103378 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87298 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Dear XFS Support, I am attempting to use xfs_repair to fix a damaged FS but always get a segfault if and only if -o ag_stride is specified. I have tried ag_stride=2,8,16 & 32. The FS is approx 60T. I can't find reports of this particular problem on the mailing list archive. Further details are; xfs_repair version 3.1.7, recently downloaded via git repository. uname -a Linux store3 2.6.18-274.17.1.el5 #1 SMP Wed Jan 11 11:10:32 CET 2012 x86_64 x86_64 x86_64 GNU/Linux Running with -P and/or -m 9000 did not help. The host has 10GB memory. I built xfs_repair with './configure CFLAGS="-g -O2" && make' Here is the log from a gdb session. Is there any other information/tests that I can supply? Please help. Many thanks Tom Crane > [root@store3 tcrane]# gdb xfsprogs/repair/xfs_repair > GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-37.el5_7.1) > Copyright (C) 2009 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later > > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. Type "show copying" > and "show warranty" for details. > This GDB was configured as "x86_64-redhat-linux-gnu". > For bug reporting instructions, please see: > ... > Reading symbols from /data/tcrane/xfsprogs/repair/xfs_repair...done. > (gdb) set arg -n -m 9000 -o ag_stride=2 /dev/mapper/vg0-lvol0 > (gdb) ru > Starting program: /data/tcrane/xfsprogs/repair/xfs_repair -n -m 9000 > -o ag_stride=2 /dev/mapper/vg0-lvol0 > warning: no loadable sections found in added symbol-file > system-supplied DSO at 0x2aaaaaaab000 > [Thread debugging using libthread_db enabled] > Phase 1 - find and verify superblock... > [New Thread 0x40a00940 (LWP 12803)] > - reporting progress in intervals of 15 minutes > Phase 2 - using internal log > - scan filesystem freespace and inode maps... > [New Thread 0x41401940 (LWP 12804)] > [New Thread 0x41e02940 (LWP 12805)] > [New Thread 0x42803940 (LWP 12806)] > [New Thread 0x43204940 (LWP 12807)] > [New Thread 0x43c05940 (LWP 12808)] > [New Thread 0x44606940 (LWP 12809)] > [New Thread 0x45007940 (LWP 12810)] > [New Thread 0x45a08940 (LWP 12811)] > [New Thread 0x46409940 (LWP 12812)] > [New Thread 0x46e0a940 (LWP 12813)] > [New Thread 0x4780b940 (LWP 12814)] > [New Thread 0x4820c940 (LWP 12815)] > [New Thread 0x48c0d940 (LWP 12816)] > [New Thread 0x4960e940 (LWP 12817)] > [New Thread 0x4a00f940 (LWP 12818)] > [New Thread 0x4aa10940 (LWP 12819)] > [New Thread 0x4b411940 (LWP 12820)] > [New Thread 0x4be12940 (LWP 12821)] > [New Thread 0x4c813940 (LWP 12822)] > [New Thread 0x4d214940 (LWP 12823)] > [New Thread 0x4dc15940 (LWP 12824)] > [New Thread 0x4e616940 (LWP 12825)] > [New Thread 0x4f017940 (LWP 12826)] > [New Thread 0x4fa18940 (LWP 12827)] > [New Thread 0x50419940 (LWP 12828)] > [New Thread 0x50e1a940 (LWP 12829)] > [New Thread 0x5181b940 (LWP 12830)] > [New Thread 0x5221c940 (LWP 12831)] > [New Thread 0x52c1d940 (LWP 12832)] > [New Thread 0x5361e940 (LWP 12833)] > [New Thread 0x5401f940 (LWP 12834)] > [New Thread 0x54a20940 (LWP 12835)] > [Thread 0x4820c940 (LWP 12815) exited] > [Thread 0x4f017940 (LWP 12826) exited] > [Thread 0x5401f940 (LWP 12834) exited] > [Thread 0x54a20940 (LWP 12835) exited] > [Thread 0x48c0d940 (LWP 12816) exited] > [Thread 0x46409940 (LWP 12812) exited] > [Thread 0x4780b940 (LWP 12814) exited] > [Thread 0x46e0a940 (LWP 12813) exited] > [Thread 0x44606940 (LWP 12809) exited] > [Thread 0x5361e940 (LWP 12833) exited] > [Thread 0x50e1a940 (LWP 12829) exited] > [Thread 0x45a08940 (LWP 12811) exited] > [Thread 0x52c1d940 (LWP 12832) exited] > [Thread 0x4c813940 (LWP 12822) exited] > [Thread 0x41401940 (LWP 12804) exited] > [Thread 0x5221c940 (LWP 12831) exited] > [Thread 0x4fa18940 (LWP 12827) exited] > [Thread 0x4be12940 (LWP 12821) exited] > [Thread 0x4a00f940 (LWP 12818) exited] > [Thread 0x43204940 (LWP 12807) exited] > [Thread 0x5181b940 (LWP 12830) exited] > [Thread 0x4b411940 (LWP 12820) exited] > [Thread 0x4e616940 (LWP 12825) exited] > [Thread 0x41e02940 (LWP 12805) exited] > [Thread 0x4dc15940 (LWP 12824) exited] > [Thread 0x50419940 (LWP 12828) exited] > [Thread 0x42803940 (LWP 12806) exited] > [Thread 0x4d214940 (LWP 12823) exited] > [Thread 0x4aa10940 (LWP 12819) exited] > [Thread 0x43c05940 (LWP 12808) exited] > [Thread 0x45007940 (LWP 12810) exited] > [Thread 0x4960e940 (LWP 12817) exited] > - 12:58:56: scanning filesystem freespace - 59 of 59 > allocation groups done > - found root inode chunk > Phase 3 - for each AG... > - scan (but don't clear) agi unlinked lists... > - 12:58:56: scanning agi unlinked lists - 59 of 59 allocation > groups done > - process known inodes and perform inode discovery... > [New Thread 0x54a20940 (LWP 12837)] > [New Thread 0x5401f940 (LWP 12838)] > [New Thread 0x41401940 (LWP 12840)] > [New Thread 0x5361e940 (LWP 12839)] > [New Thread 0x41e02940 (LWP 12841)] > [New Thread 0x42803940 (LWP 12842)] > [New Thread 0x43c05940 (LWP 12844)] > [New Thread 0x43204940 (LWP 12843)] > [New Thread 0x44606940 (LWP 12845)] > [New Thread 0x46409940 (LWP 12849)] > [New Thread 0x46e0a940 (LWP 12850)] > [New Thread 0x45a08940 (LWP 12848)] > [New Thread 0x45007940 (LWP 12847)] > [New Thread 0x4780b940 (LWP 12851)] > [New Thread 0x48c0d940 (LWP 12853)] > [New Thread 0x4820c940 (LWP 12852)] > [New Thread 0x4a00f940 (LWP 12856)] > [New Thread 0x4960e940 (LWP 12855)] > - agno = 0 > [New Thread 0x4aa10940 (LWP 12858)] > [New Thread 0x4b411940 (LWP 12857)] > [New Thread 0x4be12940 (LWP 12859)] > [New Thread 0x4c813940 (LWP 12861)] > [New Thread 0x4d214940 (LWP 12860)] > [New Thread 0x4dc15940 (LWP 12862)] > - agno = 4 > [New Thread 0x4f017940 (LWP 12864)] > [New Thread 0x4e616940 (LWP 12863)] > - agno = 2 > [Thread 0x4be12940 (LWP 12859) exited] > [New Thread 0x4fa18940 (LWP 12866)] > [Thread 0x43c05940 (LWP 12844) exited] > [New Thread 0x50419940 (LWP 12867)] > [Thread 0x46409940 (LWP 12849) exited] > [Thread 0x4820c940 (LWP 12852) exited] > [New Thread 0x43c05940 (LWP 12869)] > [New Thread 0x46409940 (LWP 12868)] > [Thread 0x4c813940 (LWP 12861) exited] > [Thread 0x4a00f940 (LWP 12856) exited] > [New Thread 0x5181b940 (LWP 12871)] > [New Thread 0x50e1a940 (LWP 12870)] > [New Thread 0x52c1d940 (LWP 12873)] > [Thread 0x46e0a940 (LWP 12850) exited] > [New Thread 0x5221c940 (LWP 12872)] > - agno = 6 > [Thread 0x4dc15940 (LWP 12862) exited] > [Thread 0x5221c940 (LWP 12872) exited] > [New Thread 0x55421940 (LWP 12875)] > [Thread 0x4b411940 (LWP 12857) exited] > [Thread 0x50419940 (LWP 12867) exited] > [New Thread 0x4be12940 (LWP 12876)] > [Thread 0x4960e940 (LWP 12855) exited] > [New Thread 0x50419940 (LWP 12878)] > [New Thread 0x5221c940 (LWP 12877)] > [New Thread 0x4c813940 (LWP 12879)] > - agno = 10 > [Thread 0x50419940 (LWP 12878) exited] > [New Thread 0x55e22940 (LWP 12883)] > [New Thread 0x4dc15940 (LWP 12882)] > [Thread 0x42803940 (LWP 12842) exited] > [New Thread 0x56823940 (LWP 12884)] > [New Thread 0x4960e940 (LWP 12881)] > [Thread 0x52c1d940 (LWP 12873) exited] > [Thread 0x43c05940 (LWP 12869) exited] > [New Thread 0x42803940 (LWP 12886)] > [New Thread 0x43c05940 (LWP 12885)] > [New Thread 0x57224940 (LWP 12887)] > - agno = 8 > [Thread 0x50e1a940 (LWP 12870) exited] > [Thread 0x44606940 (LWP 12845) exited] > [New Thread 0x50419940 (LWP 12888)] > [New Thread 0x52c1d940 (LWP 12889)] > [Thread 0x55e22940 (LWP 12883) exited] > [New Thread 0x50e1a940 (LWP 12891)] > [New Thread 0x44606940 (LWP 12890)] > [Thread 0x5221c940 (LWP 12877) exited] > [Thread 0x4f017940 (LWP 12864) exited] > [New Thread 0x57c25940 (LWP 12893)] > - agno = 3 > [Thread 0x50e1a940 (LWP 12891) exited] > [Thread 0x4fa18940 (LWP 12866) exited] > [New Thread 0x4f017940 (LWP 12894)] > [New Thread 0x58626940 (LWP 12895)] > [Thread 0x52c1d940 (LWP 12889) exited] > [New Thread 0x4fa18940 (LWP 12896)] > [New Thread 0x59027940 (LWP 12897)] > [New Thread 0x59a28940 (LWP 12898)] > [Thread 0x4dc15940 (LWP 12882) exited] > [New Thread 0x5a429940 (LWP 12899)] > [New Thread 0x4dc15940 (LWP 12900)] > [Thread 0x48c0d940 (LWP 12853) exited] > [New Thread 0x5ae2a940 (LWP 12901)] > - agno = 5 > [Thread 0x55421940 (LWP 12875) exited] > [New Thread 0x55e22940 (LWP 12902)] > [New Thread 0x5221c940 (LWP 12903)] > [Thread 0x5ae2a940 (LWP 12901) exited] > [Thread 0x59a28940 (LWP 12898) exited] > [Thread 0x43c05940 (LWP 12885) exited] > [Thread 0x4f017940 (LWP 12894) exited] > [New Thread 0x5ae2a940 (LWP 12904)] > [Thread 0x56823940 (LWP 12884) exited] > - agno = 11 > - agno = 12 > [Thread 0x4c813940 (LWP 12879) exited] > [New Thread 0x59a28940 (LWP 12932)] > [Thread 0x5a429940 (LWP 12899) exited] > [Thread 0x5221c940 (LWP 12903) exited] > [New Thread 0x4c813940 (LWP 12933)] > [Thread 0x5ae2a940 (LWP 12904) exited] > [Thread 0x59027940 (LWP 12897) exited] > [Thread 0x4fa18940 (LWP 12896) exited] > [Thread 0x58626940 (LWP 12895) exited] > [New Thread 0x50e1a940 (LWP 12952)] > [Thread 0x50419940 (LWP 12888) exited] > > Program received signal SIGSEGV, Segmentation fault. > [Switching to Thread 0x54a20940 (LWP 12837)] > 0x000000380ac7b29f in memset () from /lib64/libc.so.6 > (gdb) bt > #0 0x000000380ac7b29f in memset () from /lib64/libc.so.6 > #1 0x0000000000403998 in process_leaf_attr_block (mp=0x7fffffffe560, > leaf=0x2aab2bfb4400, da_bno=0, ino=1718, blkmap=0x2aab280787d0, > last_hashval=0, > current_hashval=0x54a1fd44, repair=0x54a1fdc4) at attr_repair.c:522 > #2 0x000000000040494b in process_longform_attr (mp=0x7fffffffe560, > ino=1718, dip=0x18e4e00, blkmap=0x2aab280787d0, repair=0x54a1fdc4) > at attr_repair.c:900 > #3 0x000000000040d971 in process_inode_attr_fork (mp=0x7fffffffe560, > agno=0, ino=1718, dino=0x18e4e00, type=5, dirty=0x54a1ffe0, > atotblocks=0x54a1fe70, > anextents=0x54a1fe60, check_dups=0, extra_attr_check=1, > retval=0x54a1fe80) at dinode.c:2301 > #4 0x000000000040f368 in process_dinode_int (mp=0x7fffffffe560, > dino=0x18e4e00, agno=0, ino=1718, was_free=0, dirty=0x54a1ffe0, > used=0x54a1ffe4, > verify_mode=0, uncertain=0, ino_discovery=1, check_dups=0, > extra_attr_check=1, isa_dir=0x54a1ffdc, parent=0x54a1ffd0) at > dinode.c:2764 > #5 0x000000000040fd0e in process_dinode (mp=0x0, dino=0x0, agno=0, > ino=1024, was_free=8192, dirty=0x2000, used=0x54a1ffe4, ino_discovery=1, > check_dups=0, extra_attr_check=1, isa_dir=0x54a1ffdc, > parent=0x54a1ffd0) at dinode.c:2898 > #6 0x0000000000409361 in process_inode_chunk (mp=0x7fffffffe560, > agno=0, num_inos=, first_irec=0x2aab283c9ef0, > ino_discovery=1, > check_dups=0, extra_attr_check=1, bogus=0x54a20064) at > dino_chunks.c:779 > #7 0x0000000000409a6c in process_aginodes (mp=0x7fffffffe560, > pf_args=0x68ea10, agno=0, ino_discovery=1, check_dups=0, > extra_attr_check=1) > at dino_chunks.c:1018 > #8 0x000000000041c8df in process_ag_func (wq=0x68fb50, agno=0, > arg=0x68ea10) at phase3.c:154 > #9 0x000000000042f86d in worker_thread (arg=) at > threads.c:46 > #10 0x000000380b40673d in start_thread () from /lib64/libpthread.so.0 > #11 0x000000380acd44bd in clone () from /lib64/libc.so.6 > (gdb) list > 522 * doesn't get flushed out if no_modify is set > 523 */ > 524 mp->m_sb.sb_rsumino = first_prealloc_ino + 2; > 525 } > 526 > 527 } > 528 > 529 int > 530 main(int argc, char **argv) > 531 { > (gdb) q From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0hH9253124 for ; Wed, 1 Feb 2012 08:00:43 -0600 X-ASG-Debug-ID: 1328104840-04cb6c22613d2af0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 4nPiDJd7CGXiYr8s (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:40 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajn-0003ID-Uc; Wed, 01 Feb 2012 14:00:40 +0000 Message-Id: <20120201140039.890810863@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:22 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 3/7] xfs: use per-filesystem radix trees for dquot lookup References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 3/7] xfs: use per-filesystem radix trees for dquot lookup Content-Disposition: inline; filename=xfs-quota-radix-tree X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104840 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Replace the global hash tables for looking up in-memory dquot structures with per-filesystem radix trees to allow scaling to a large number of in-memory dquot structures. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 175 ++++++++++-------------------------------------- fs/xfs/xfs_dquot.h | 12 --- fs/xfs/xfs_qm.c | 95 ++------------------------ fs/xfs/xfs_qm.h | 19 ++--- fs/xfs/xfs_quota_priv.h | 11 --- fs/xfs/xfs_trace.h | 4 - 6 files changed, 58 insertions(+), 258 deletions(-) Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:24:27.234457429 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:25:23.134154595 +0100 @@ -54,9 +54,6 @@ struct xfs_qm *xfs_Gqm; kmem_zone_t *qm_dqzone; kmem_zone_t *qm_dqtrxzone; -STATIC void xfs_qm_list_init(xfs_dqlist_t *, char *, int); -STATIC void xfs_qm_list_destroy(xfs_dqlist_t *); - STATIC int xfs_qm_init_quotainos(xfs_mount_t *); STATIC int xfs_qm_init_quotainfo(xfs_mount_t *); STATIC int xfs_qm_shake(struct shrinker *, struct shrink_control *); @@ -68,37 +65,9 @@ STATIC int xfs_qm_shake(struct shrinker STATIC struct xfs_qm * xfs_Gqm_init(void) { - xfs_dqhash_t *udqhash, *gdqhash; xfs_qm_t *xqm; - size_t hsize; - uint i; - - /* - * Initialize the dquot hash tables. - */ - udqhash = kmem_zalloc_greedy(&hsize, - XFS_QM_HASHSIZE_LOW * sizeof(xfs_dqhash_t), - XFS_QM_HASHSIZE_HIGH * sizeof(xfs_dqhash_t)); - if (!udqhash) - goto out; - - gdqhash = kmem_zalloc_large(hsize); - if (!gdqhash) - goto out_free_udqhash; - - hsize /= sizeof(xfs_dqhash_t); xqm = kmem_zalloc(sizeof(xfs_qm_t), KM_SLEEP); - xqm->qm_dqhashmask = hsize - 1; - xqm->qm_usr_dqhtable = udqhash; - xqm->qm_grp_dqhtable = gdqhash; - ASSERT(xqm->qm_usr_dqhtable != NULL); - ASSERT(xqm->qm_grp_dqhtable != NULL); - - for (i = 0; i < hsize; i++) { - xfs_qm_list_init(&(xqm->qm_usr_dqhtable[i]), "uxdqh", i); - xfs_qm_list_init(&(xqm->qm_grp_dqhtable[i]), "gxdqh", i); - } /* * dquot zone. we register our own low-memory callback. @@ -123,11 +92,6 @@ xfs_Gqm_init(void) atomic_set(&xqm->qm_totaldquots, 0); xqm->qm_nrefs = 0; return xqm; - - out_free_udqhash: - kmem_free_large(udqhash); - out: - return NULL; } /* @@ -137,22 +101,9 @@ STATIC void xfs_qm_destroy( struct xfs_qm *xqm) { - int hsize, i; - ASSERT(xqm != NULL); ASSERT(xqm->qm_nrefs == 0); - hsize = xqm->qm_dqhashmask + 1; - for (i = 0; i < hsize; i++) { - xfs_qm_list_destroy(&(xqm->qm_usr_dqhtable[i])); - xfs_qm_list_destroy(&(xqm->qm_grp_dqhtable[i])); - } - kmem_free_large(xqm->qm_usr_dqhtable); - kmem_free_large(xqm->qm_grp_dqhtable); - xqm->qm_usr_dqhtable = NULL; - xqm->qm_grp_dqhtable = NULL; - xqm->qm_dqhashmask = 0; - kmem_free(xqm); } @@ -763,14 +714,6 @@ xfs_qm_dqdetach( } /* - * The hash chains and the mplist use the same xfs_dqhash structure as - * their list head, but we can take the mplist qh_lock and one of the - * hash qh_locks at the same time without any problem as they aren't - * related. - */ -static struct lock_class_key xfs_quota_mplist_class; - -/* * This initializes all the quota information that's kept in the * mount structure */ @@ -803,9 +746,12 @@ xfs_qm_init_quotainfo( return error; } + INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS); + INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); + mutex_init(&qinf->qi_tree_lock); + INIT_LIST_HEAD(&qinf->qi_dqlist); mutex_init(&qinf->qi_dqlist_lock); - lockdep_set_class(&qinf->qi_dqlist_lock, &xfs_quota_mplist_class); INIT_LIST_HEAD(&qinf->qi_lru_list); qinf->qi_lru_count = 0; @@ -925,30 +871,6 @@ xfs_qm_destroy_quotainfo( mp->m_quotainfo = NULL; } - - -/* ------------------- PRIVATE STATIC FUNCTIONS ----------------------- */ - -/* ARGSUSED */ -STATIC void -xfs_qm_list_init( - xfs_dqlist_t *list, - char *str, - int n) -{ - mutex_init(&list->qh_lock); - INIT_LIST_HEAD(&list->qh_list); - list->qh_version = 0; - list->qh_nelems = 0; -} - -STATIC void -xfs_qm_list_destroy( - xfs_dqlist_t *list) -{ - mutex_destroy(&(list->qh_lock)); -} - /* * Create an inode and return with a reference already taken, but unlocked * This is how we create quota inodes @@ -1593,10 +1515,10 @@ xfs_qm_dqfree_one( struct xfs_mount *mp = dqp->q_mount; struct xfs_quotainfo *qi = mp->m_quotainfo; - mutex_lock(&dqp->q_hash->qh_lock); - list_del_init(&dqp->q_hashlist); - dqp->q_hash->qh_version++; - mutex_unlock(&dqp->q_hash->qh_lock); + mutex_lock(&mp->m_quotainfo->qi_tree_lock); + radix_tree_delete(XFS_DQUOT_TREE(mp, dqp->q_core.d_flags), + be32_to_cpu(dqp->q_core.d_id)); + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); mutex_lock(&qi->qi_dqlist_lock); list_del_init(&dqp->q_mplist); @@ -1634,7 +1556,6 @@ xfs_qm_dqreclaim_one( return; } - ASSERT(dqp->q_hash); ASSERT(!list_empty(&dqp->q_mplist)); /* Index: xfs/fs/xfs/xfs_qm.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm.h 2012-02-01 12:22:12.345188187 +0100 +++ xfs/fs/xfs/xfs_qm.h 2012-02-01 12:24:50.577664301 +0100 @@ -32,12 +32,6 @@ extern kmem_zone_t *qm_dqzone; extern kmem_zone_t *qm_dqtrxzone; /* - * Dquot hashtable constants/threshold values. - */ -#define XFS_QM_HASHSIZE_LOW (PAGE_SIZE / sizeof(xfs_dqhash_t)) -#define XFS_QM_HASHSIZE_HIGH ((PAGE_SIZE * 4) / sizeof(xfs_dqhash_t)) - -/* * This defines the unit of allocation of dquots. * Currently, it is just one file system block, and a 4K blk contains 30 * (136 * 30 = 4080) dquots. It's probably not worth trying to make @@ -48,15 +42,10 @@ extern kmem_zone_t *qm_dqtrxzone; */ #define XFS_DQUOT_CLUSTER_SIZE_FSB (xfs_filblks_t)1 -typedef xfs_dqhash_t xfs_dqlist_t; - /* * Quota Manager (global) structure. Lives only in core. */ typedef struct xfs_qm { - xfs_dqlist_t *qm_usr_dqhtable;/* udquot hash table */ - xfs_dqlist_t *qm_grp_dqhtable;/* gdquot hash table */ - uint qm_dqhashmask; /* # buckets in dq hashtab - 1 */ atomic_t qm_totaldquots; /* total incore dquots */ uint qm_nrefs; /* file systems with quota on */ kmem_zone_t *qm_dqzone; /* dquot mem-alloc zone */ @@ -68,6 +57,9 @@ typedef struct xfs_qm { * The mount structure keeps a pointer to this. */ typedef struct xfs_quotainfo { + struct radix_tree_root qi_uquota_tree; + struct radix_tree_root qi_gquota_tree; + struct mutex qi_tree_lock; xfs_inode_t *qi_uquotaip; /* user quota inode */ xfs_inode_t *qi_gquotaip; /* group quota inode */ struct list_head qi_lru_list; @@ -96,6 +88,11 @@ typedef struct xfs_quotainfo { struct shrinker qi_shrinker; } xfs_quotainfo_t; +#define XFS_DQUOT_TREE(mp, type) \ + ((type & XFS_DQ_USER) ? \ + &((mp)->m_quotainfo->qi_uquota_tree) : \ + &((mp)->m_quotainfo->qi_gquota_tree)) + extern void xfs_trans_mod_dquot(xfs_trans_t *, xfs_dquot_t *, uint, long); extern int xfs_trans_reserve_quota_bydquots(xfs_trans_t *, xfs_mount_t *, Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:22:12.341854872 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:24:50.577664301 +0100 @@ -43,7 +43,7 @@ * Lock order: * * ip->i_lock - * qh->qh_lock + * qi->qi_tree_lock * qi->qi_dqlist_lock * dquot->q_qlock (xfs_dqlock() and friends) * dquot->q_flush (xfs_dqflock() and friends) @@ -602,60 +602,6 @@ error0: } /* - * Lookup a dquot in the incore dquot hashtable. We keep two separate - * hashtables for user and group dquots; and, these are global tables - * inside the XQM, not per-filesystem tables. - * The hash chain must be locked by caller, and it is left locked - * on return. Returning dquot is locked. - */ -STATIC int -xfs_qm_dqlookup( - xfs_mount_t *mp, - xfs_dqid_t id, - xfs_dqhash_t *qh, - xfs_dquot_t **O_dqpp) -{ - xfs_dquot_t *dqp; - - ASSERT(mutex_is_locked(&qh->qh_lock)); - - /* - * Traverse the hashchain looking for a match - */ - list_for_each_entry(dqp, &qh->qh_list, q_hashlist) { - /* - * We already have the hashlock. We don't need the - * dqlock to look at the id field of the dquot, since the - * id can't be modified without the hashlock anyway. - */ - if (be32_to_cpu(dqp->q_core.d_id) != id || dqp->q_mount != mp) - continue; - - trace_xfs_dqlookup_found(dqp); - - xfs_dqlock(dqp); - if (dqp->dq_flags & XFS_DQ_FREEING) { - *O_dqpp = NULL; - xfs_dqunlock(dqp); - return -1; - } - - dqp->q_nrefs++; - - /* - * move the dquot to the front of the hashchain - */ - list_move(&dqp->q_hashlist, &qh->qh_list); - trace_xfs_dqlookup_done(dqp); - *O_dqpp = dqp; - return 0; - } - - *O_dqpp = NULL; - return 1; -} - -/* * Given the file system, inode OR id, and type (UDQUOT/GDQUOT), return a * a locked dquot, doing an allocation (if requested) as needed. * When both an inode and an id are given, the inode's id takes precedence. @@ -672,9 +618,8 @@ xfs_qm_dqget( uint flags, /* DQALLOC, DQSUSER, DQREPAIR, DOWARN */ xfs_dquot_t **O_dqpp) /* OUT : locked incore dquot */ { + struct radix_tree_root *tree = XFS_DQUOT_TREE(mp, type); xfs_dquot_t *dqp; - xfs_dqhash_t *h; - uint version; int error; ASSERT(XFS_IS_QUOTA_RUNNING(mp)); @@ -683,7 +628,6 @@ xfs_qm_dqget( (! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) { return (ESRCH); } - h = XFS_DQ_HASH(mp, id, type); #ifdef DEBUG if (xfs_do_dqerror) { @@ -707,34 +651,29 @@ xfs_qm_dqget( #endif restart: - mutex_lock(&h->qh_lock); + mutex_lock(&mp->m_quotainfo->qi_tree_lock); + dqp = radix_tree_lookup(tree, id); + if (dqp) { + xfs_dqlock(dqp); + if (dqp->dq_flags & XFS_DQ_FREEING) { + xfs_dqunlock(dqp); + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + trace_xfs_dqget_freeing(dqp); + delay(1); + goto restart; + } - /* - * Look in the cache (hashtable). - * The chain is kept locked during lookup. - */ - switch (xfs_qm_dqlookup(mp, id, h, O_dqpp)) { - case -1: - XQM_STATS_INC(xqmstats.xs_qm_dquot_dups); - mutex_unlock(&h->qh_lock); - delay(1); - goto restart; - case 0: + dqp->q_nrefs++; + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + + trace_xfs_dqget_hit(dqp); XQM_STATS_INC(xqmstats.xs_qm_dqcachehits); - /* - * The dquot was found, moved to the front of the chain, - * taken off the freelist if it was on it, and locked - * at this point. Just unlock the hashchain and return. - */ - ASSERT(*O_dqpp); - ASSERT(XFS_DQ_IS_LOCKED(*O_dqpp)); - mutex_unlock(&h->qh_lock); - trace_xfs_dqget_hit(*O_dqpp); - return 0; /* success */ - default: - XQM_STATS_INC(xqmstats.xs_qm_dqcachemisses); - break; + *O_dqpp = dqp; + return 0; } + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + + XQM_STATS_INC(xqmstats.xs_qm_dqcachemisses); /* * Dquot cache miss. We don't want to keep the inode lock across @@ -745,12 +684,6 @@ restart: */ if (ip) xfs_iunlock(ip, XFS_ILOCK_EXCL); - /* - * Save the hashchain version stamp, and unlock the chain, so that - * we don't keep the lock across a disk read - */ - version = h->qh_version; - mutex_unlock(&h->qh_lock); error = xfs_qm_dqread(mp, id, type, flags, &dqp); @@ -760,9 +693,6 @@ restart: if (error) return error; - /* - * Dquot lock comes after hashlock in the lock ordering - */ if (ip) { /* * A dquot could be attached to this inode by now, since @@ -795,46 +725,21 @@ restart: } } - /* - * Hashlock comes after ilock in lock order - */ - mutex_lock(&h->qh_lock); - if (version != h->qh_version) { - xfs_dquot_t *tmpdqp; + mutex_lock(&mp->m_quotainfo->qi_tree_lock); + error = -radix_tree_insert(tree, id, dqp); + if (unlikely(error)) { + WARN_ON(error != EEXIST); + /* - * Now, see if somebody else put the dquot in the - * hashtable before us. This can happen because we didn't - * keep the hashchain lock. We don't have to worry about - * lock order between the two dquots here since dqp isn't - * on any findable lists yet. + * Duplicate found. Just throw away the new dquot and start + * over. */ - switch (xfs_qm_dqlookup(mp, id, h, &tmpdqp)) { - case 0: - case -1: - /* - * Duplicate found, either in cache or on its way out. - * Just throw away the new dquot and start over. - */ - if (tmpdqp) - xfs_qm_dqput(tmpdqp); - mutex_unlock(&h->qh_lock); - xfs_qm_dqdestroy(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dquot_dups); - goto restart; - default: - break; - } + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + trace_xfs_dqget_dup(dqp); + xfs_qm_dqdestroy(dqp); + XQM_STATS_INC(xqmstats.xs_qm_dquot_dups); + goto restart; } - - /* - * Put the dquot at the beginning of the hash-chain and mp's list - * LOCK ORDER: hashlock, freelistlock, mplistlock, udqlock, gdqlock .. - */ - ASSERT(mutex_is_locked(&h->qh_lock)); - dqp->q_hash = h; - list_add(&dqp->q_hashlist, &h->qh_list); - h->qh_version++; - /* * Attach this dquot to this filesystem's list of all dquots, * kept inside the mount structure in m_quotainfo field @@ -850,7 +755,8 @@ restart: list_add(&dqp->q_mplist, &mp->m_quotainfo->qi_dqlist); mp->m_quotainfo->qi_dquots++; mutex_unlock(&mp->m_quotainfo->qi_dqlist_lock); - mutex_unlock(&h->qh_lock); + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + dqret: ASSERT((ip == NULL) || xfs_isilocked(ip, XFS_ILOCK_EXCL)); trace_xfs_dqget_miss(dqp); @@ -1139,7 +1045,6 @@ xfs_qm_dqpurge( struct xfs_dquot *dqp) { struct xfs_mount *mp = dqp->q_mount; - struct xfs_dqhash *qh = dqp->q_hash; struct xfs_quotainfo *qi = mp->m_quotainfo; xfs_dqlock(dqp); @@ -1186,10 +1091,10 @@ xfs_qm_dqpurge( xfs_dqfunlock(dqp); xfs_dqunlock(dqp); - mutex_lock(&qh->qh_lock); - list_del_init(&dqp->q_hashlist); - qh->qh_version++; - mutex_unlock(&qh->qh_lock); + mutex_lock(&mp->m_quotainfo->qi_tree_lock); + radix_tree_delete(XFS_DQUOT_TREE(mp, dqp->q_core.d_flags), + be32_to_cpu(dqp->q_core.d_id)); + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); mutex_lock(&qi->qi_dqlist_lock); list_del_init(&dqp->q_mplist); Index: xfs/fs/xfs/xfs_dquot.h =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.h 2012-02-01 12:22:12.341854872 +0100 +++ xfs/fs/xfs/xfs_dquot.h 2012-02-01 12:24:50.577664301 +0100 @@ -29,16 +29,6 @@ * when quotas are off. */ -/* - * The hash chain headers (hash buckets) - */ -typedef struct xfs_dqhash { - struct list_head qh_list; - struct mutex qh_lock; - uint qh_version; /* ever increasing version */ - uint qh_nelems; /* number of dquots on the list */ -} xfs_dqhash_t; - struct xfs_mount; struct xfs_trans; @@ -49,8 +39,6 @@ typedef struct xfs_dquot { uint dq_flags; /* various flags (XFS_DQ_*) */ struct list_head q_lru; /* global free list of dquots */ struct list_head q_mplist; /* mount's list of dquots */ - struct list_head q_hashlist; /* gloabl hash list of dquots */ - xfs_dqhash_t *q_hash; /* the hashchain header */ struct xfs_mount*q_mount; /* filesystem this relates to */ struct xfs_trans*q_transp; /* trans this belongs to currently */ uint q_nrefs; /* # active refs from inodes */ Index: xfs/fs/xfs/xfs_quota_priv.h =================================================================== --- xfs.orig/fs/xfs/xfs_quota_priv.h 2012-02-01 12:05:07.000000000 +0100 +++ xfs/fs/xfs/xfs_quota_priv.h 2012-02-01 12:24:50.577664301 +0100 @@ -24,17 +24,6 @@ */ #define XFS_DQITER_MAP_SIZE 10 -/* - * Hash into a bucket in the dquot hash table, based on . - */ -#define XFS_DQ_HASHVAL(mp, id) (((__psunsigned_t)(mp) + \ - (__psunsigned_t)(id)) & \ - (xfs_Gqm->qm_dqhashmask - 1)) -#define XFS_DQ_HASH(mp, id, type) (type == XFS_DQ_USER ? \ - (xfs_Gqm->qm_usr_dqhtable + \ - XFS_DQ_HASHVAL(mp, id)) : \ - (xfs_Gqm->qm_grp_dqhtable + \ - XFS_DQ_HASHVAL(mp, id))) #define XFS_IS_DQUOT_UNINITIALIZED(dqp) ( \ !dqp->q_core.d_blk_hardlimit && \ !dqp->q_core.d_blk_softlimit && \ Index: xfs/fs/xfs/xfs_trace.h =================================================================== --- xfs.orig/fs/xfs/xfs_trace.h 2012-02-01 12:06:55.000000000 +0100 +++ xfs/fs/xfs/xfs_trace.h 2012-02-01 12:24:50.580997617 +0100 @@ -741,10 +741,10 @@ DEFINE_DQUOT_EVENT(xfs_dqalloc); DEFINE_DQUOT_EVENT(xfs_dqtobp_read); DEFINE_DQUOT_EVENT(xfs_dqread); DEFINE_DQUOT_EVENT(xfs_dqread_fail); -DEFINE_DQUOT_EVENT(xfs_dqlookup_found); -DEFINE_DQUOT_EVENT(xfs_dqlookup_done); DEFINE_DQUOT_EVENT(xfs_dqget_hit); DEFINE_DQUOT_EVENT(xfs_dqget_miss); +DEFINE_DQUOT_EVENT(xfs_dqget_freeing); +DEFINE_DQUOT_EVENT(xfs_dqget_dup); DEFINE_DQUOT_EVENT(xfs_dqput); DEFINE_DQUOT_EVENT(xfs_dqput_wait); DEFINE_DQUOT_EVENT(xfs_dqput_free); From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0hjG253123 for ; Wed, 1 Feb 2012 08:00:43 -0600 X-ASG-Debug-ID: 1328104839-04cbb01fb44ea290001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id Yh6yJpBUZvbjQOsy (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:39 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajm-0003GQ-R2; Wed, 01 Feb 2012 14:00:38 +0000 Message-Id: <20120201135719.202171828@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:19 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 0/7] better dquot caching X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-ASG-Orig-Subj: [PATCH 0/7] better dquot caching X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104839 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This series improves handling of large number of dquots. It replaced the direct recycling of dquots from the freelist with a shrinker, removes the upper bound of dquots, and uses per-filesystem structures for all quota state, including switching from a hash to a radix-tree for lookups. For repeated lookups of dquots out of a large pool I see improvements betwen 50% and 500% compared to the previous code. All these tests have been performed with Q_XQUOTASYNC already disabled as it would change the result to much for both the old and new code. Note that the first patch probably is a candidate for Linux 3.3, as the previous quota updates caused a lock order reversal in the old quota reclaim code. See the actual patch for more details. From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0g9H253121 for ; Wed, 1 Feb 2012 08:00:43 -0600 X-ASG-Debug-ID: 1328104839-04cb6c225f3d2ae0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 7PMD9sfWk6hJy2CL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:40 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajn-0003Gz-21; Wed, 01 Feb 2012 14:00:39 +0000 Message-Id: <20120201140039.011990931@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:20 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 1/7] xfs: use a normal shrinker for the dquot freelist References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 1/7] xfs: use a normal shrinker for the dquot freelist Content-Disposition: inline; filename=xfs-quota-fix-shrinker X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104839 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Stop reusing dquots from the freelist when allocating new ones directly, and implement a shrinker that actually follows the specifications for the interface. The shrinker implementation is still highly suboptimal at this point, but we can gradually work on it. This also fixes an bug in the previous lock ordering, where we would take the hash and dqlist locks inside of the freelist lock against the normal lock ordering. This is only solvable by introducing the dispose list, and thus not when using direct reclaim of unused dquots for new allocations. As a side-effect the quota upper bound and used to free ratio values in /proc/fs/xfs/xqm are set to 0 as these values don't make any sense in the new world order. Signed-off-by: Christoph Hellwig --- fs/xfs/kmem.h | 6 - fs/xfs/xfs_dquot.c | 103 ++++------------- fs/xfs/xfs_qm.c | 293 +++++++++++++++++++------------------------------- fs/xfs/xfs_qm.h | 14 -- fs/xfs/xfs_qm_stats.c | 4 fs/xfs/xfs_trace.h | 5 6 files changed, 142 insertions(+), 283 deletions(-) Index: xfs/fs/xfs/kmem.h =================================================================== --- xfs.orig/fs/xfs/kmem.h 2012-02-01 12:05:12.530712997 +0100 +++ xfs/fs/xfs/kmem.h 2012-02-01 12:06:55.620154512 +0100 @@ -110,10 +110,4 @@ kmem_zone_destroy(kmem_zone_t *zone) extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast); extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast); -static inline int -kmem_shake_allow(gfp_t gfp_mask) -{ - return ((gfp_mask & __GFP_WAIT) && (gfp_mask & __GFP_FS)); -} - #endif /* __XFS_SUPPORT_KMEM_H__ */ Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:05:12.540712942 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:22:08.051878113 +0100 @@ -50,7 +50,6 @@ */ struct mutex xfs_Gqm_lock; struct xfs_qm *xfs_Gqm; -uint ndquot; kmem_zone_t *qm_dqzone; kmem_zone_t *qm_dqtrxzone; @@ -93,7 +92,6 @@ xfs_Gqm_init(void) goto out_free_udqhash; hsize /= sizeof(xfs_dqhash_t); - ndquot = hsize << 8; xqm = kmem_zalloc(sizeof(xfs_qm_t), KM_SLEEP); xqm->qm_dqhashmask = hsize - 1; @@ -137,7 +135,6 @@ xfs_Gqm_init(void) xqm->qm_dqtrxzone = qm_dqtrxzone; atomic_set(&xqm->qm_totaldquots, 0); - xqm->qm_dqfree_ratio = XFS_QM_DQFREE_RATIO; xqm->qm_nrefs = 0; return xqm; @@ -1600,216 +1597,150 @@ xfs_qm_init_quotainos( return 0; } +STATIC void +xfs_qm_dqfree_one( + struct xfs_dquot *dqp) +{ + struct xfs_mount *mp = dqp->q_mount; + struct xfs_quotainfo *qi = mp->m_quotainfo; + mutex_lock(&dqp->q_hash->qh_lock); + list_del_init(&dqp->q_hashlist); + dqp->q_hash->qh_version++; + mutex_unlock(&dqp->q_hash->qh_lock); + + mutex_lock(&qi->qi_dqlist_lock); + list_del_init(&dqp->q_mplist); + qi->qi_dquots--; + qi->qi_dqreclaims++; + mutex_unlock(&qi->qi_dqlist_lock); -/* - * Pop the least recently used dquot off the freelist and recycle it. - */ -STATIC struct xfs_dquot * -xfs_qm_dqreclaim_one(void) + xfs_qm_dqdestroy(dqp); +} + +STATIC void +xfs_qm_dqreclaim_one( + struct xfs_dquot *dqp, + struct list_head *dispose_list) { - struct xfs_dquot *dqp; - int restarts = 0; + struct xfs_mount *mp = dqp->q_mount; + int error; - mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); -restart: - list_for_each_entry(dqp, &xfs_Gqm->qm_dqfrlist, q_freelist) { - struct xfs_mount *mp = dqp->q_mount; + if (!xfs_dqlock_nowait(dqp)) + goto out_busy; - if (!xfs_dqlock_nowait(dqp)) - continue; + /* + * This dquot has acquired a reference in the meantime remove it from + * the freelist and try again. + */ + if (dqp->q_nrefs) { + xfs_dqunlock(dqp); - /* - * This dquot has already been grabbed by dqlookup. - * Remove it from the freelist and try again. - */ - if (dqp->q_nrefs) { - trace_xfs_dqreclaim_want(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dqwants); - - list_del_init(&dqp->q_freelist); - xfs_Gqm->qm_dqfrlist_cnt--; - restarts++; - goto dqunlock; - } + trace_xfs_dqreclaim_want(dqp); + XQM_STATS_INC(xqmstats.xs_qm_dqwants); - ASSERT(dqp->q_hash); - ASSERT(!list_empty(&dqp->q_mplist)); + list_del_init(&dqp->q_freelist); + xfs_Gqm->qm_dqfrlist_cnt--; + return; + } - /* - * Try to grab the flush lock. If this dquot is in the process - * of getting flushed to disk, we don't want to reclaim it. - */ - if (!xfs_dqflock_nowait(dqp)) - goto dqunlock; + ASSERT(dqp->q_hash); + ASSERT(!list_empty(&dqp->q_mplist)); - /* - * We have the flush lock so we know that this is not in the - * process of being flushed. So, if this is dirty, flush it - * DELWRI so that we don't get a freelist infested with - * dirty dquots. - */ - if (XFS_DQ_IS_DIRTY(dqp)) { - int error; + /* + * Try to grab the flush lock. If this dquot is in the process of + * getting flushed to disk, we don't want to reclaim it. + */ + if (!xfs_dqflock_nowait(dqp)) + goto out_busy; - trace_xfs_dqreclaim_dirty(dqp); + /* + * We have the flush lock so we know that this is not in the + * process of being flushed. So, if this is dirty, flush it + * DELWRI so that we don't get a freelist infested with + * dirty dquots. + */ + if (XFS_DQ_IS_DIRTY(dqp)) { + trace_xfs_dqreclaim_dirty(dqp); - /* - * We flush it delayed write, so don't bother - * releasing the freelist lock. - */ - error = xfs_qm_dqflush(dqp, SYNC_TRYLOCK); - if (error) { - xfs_warn(mp, "%s: dquot %p flush failed", - __func__, dqp); - } - goto dqunlock; + /* + * We flush it delayed write, so don't bother releasing the + * freelist lock. + */ + error = xfs_qm_dqflush(dqp, 0); + if (error) { + xfs_warn(mp, "%s: dquot %p flush failed", + __func__, dqp); } - xfs_dqfunlock(dqp); /* - * Prevent lookup now that we are going to reclaim the dquot. - * Once XFS_DQ_FREEING is set lookup won't touch the dquot, - * thus we can drop the lock now. + * Give the dquot another try on the freelist, as the + * flushing will take some time. */ - dqp->dq_flags |= XFS_DQ_FREEING; - xfs_dqunlock(dqp); - - mutex_lock(&dqp->q_hash->qh_lock); - list_del_init(&dqp->q_hashlist); - dqp->q_hash->qh_version++; - mutex_unlock(&dqp->q_hash->qh_lock); - - mutex_lock(&mp->m_quotainfo->qi_dqlist_lock); - list_del_init(&dqp->q_mplist); - mp->m_quotainfo->qi_dquots--; - mp->m_quotainfo->qi_dqreclaims++; - mutex_unlock(&mp->m_quotainfo->qi_dqlist_lock); - - ASSERT(dqp->q_nrefs == 0); - list_del_init(&dqp->q_freelist); - xfs_Gqm->qm_dqfrlist_cnt--; - - mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); - return dqp; -dqunlock: - xfs_dqunlock(dqp); - if (restarts >= XFS_QM_RECLAIM_MAX_RESTARTS) - break; - goto restart; + goto out_busy; } + xfs_dqfunlock(dqp); - mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); - return NULL; -} + /* + * Prevent lookups now that we are past the point of no return. + */ + dqp->dq_flags |= XFS_DQ_FREEING; + xfs_dqunlock(dqp); -/* - * Traverse the freelist of dquots and attempt to reclaim a maximum of - * 'howmany' dquots. This operation races with dqlookup(), and attempts to - * favor the lookup function ... - */ -STATIC int -xfs_qm_shake_freelist( - int howmany) -{ - int nreclaimed = 0; - xfs_dquot_t *dqp; + ASSERT(dqp->q_nrefs == 0); + list_move_tail(&dqp->q_freelist, dispose_list); + xfs_Gqm->qm_dqfrlist_cnt--; + + trace_xfs_dqreclaim_done(dqp); + XQM_STATS_INC(xqmstats.xs_qm_dqreclaims); + return; - if (howmany <= 0) - return 0; +out_busy: + xfs_dqunlock(dqp); - while (nreclaimed < howmany) { - dqp = xfs_qm_dqreclaim_one(); - if (!dqp) - return nreclaimed; - xfs_qm_dqdestroy(dqp); - nreclaimed++; - } - return nreclaimed; + /* + * Move the dquot to the tail of the list so that we don't spin on it. + */ + list_move_tail(&dqp->q_freelist, &xfs_Gqm->qm_dqfrlist); + + trace_xfs_dqreclaim_busy(dqp); + XQM_STATS_INC(xqmstats.xs_qm_dqreclaim_misses); } -/* - * The kmem_shake interface is invoked when memory is running low. - */ -/* ARGSUSED */ STATIC int xfs_qm_shake( - struct shrinker *shrink, - struct shrink_control *sc) + struct shrinker *shrink, + struct shrink_control *sc) { - int ndqused, nfree, n; - gfp_t gfp_mask = sc->gfp_mask; - - if (!kmem_shake_allow(gfp_mask)) - return 0; - if (!xfs_Gqm) - return 0; - - nfree = xfs_Gqm->qm_dqfrlist_cnt; /* free dquots */ - /* incore dquots in all f/s's */ - ndqused = atomic_read(&xfs_Gqm->qm_totaldquots) - nfree; - - ASSERT(ndqused >= 0); + int nr_to_scan = sc->nr_to_scan; + LIST_HEAD (dispose_list); + struct xfs_dquot *dqp; - if (nfree <= ndqused && nfree < ndquot) + if ((sc->gfp_mask & (__GFP_FS|__GFP_WAIT)) != (__GFP_FS|__GFP_WAIT)) return 0; + if (!nr_to_scan) + goto out; - ndqused *= xfs_Gqm->qm_dqfree_ratio; /* target # of free dquots */ - n = nfree - ndqused - ndquot; /* # over target */ - - return xfs_qm_shake_freelist(MAX(nfree, n)); -} - - -/*------------------------------------------------------------------*/ - -/* - * Return a new incore dquot. Depending on the number of - * dquots in the system, we either allocate a new one on the kernel heap, - * or reclaim a free one. - * Return value is B_TRUE if we allocated a new dquot, B_FALSE if we managed - * to reclaim an existing one from the freelist. - */ -boolean_t -xfs_qm_dqalloc_incore( - xfs_dquot_t **O_dqpp) -{ - xfs_dquot_t *dqp; - - /* - * Check against high water mark to see if we want to pop - * a nincompoop dquot off the freelist. - */ - if (atomic_read(&xfs_Gqm->qm_totaldquots) >= ndquot) { - /* - * Try to recycle a dquot from the freelist. - */ - if ((dqp = xfs_qm_dqreclaim_one())) { - XQM_STATS_INC(xqmstats.xs_qm_dqreclaims); - /* - * Just zero the core here. The rest will get - * reinitialized by caller. XXX we shouldn't even - * do this zero ... - */ - memset(&dqp->q_core, 0, sizeof(dqp->q_core)); - *O_dqpp = dqp; - return B_FALSE; - } - XQM_STATS_INC(xqmstats.xs_qm_dqreclaim_misses); + mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); + while (!list_empty(&xfs_Gqm->qm_dqfrlist)) { + if (nr_to_scan-- <= 0) + break; + dqp = list_first_entry(&xfs_Gqm->qm_dqfrlist, struct xfs_dquot, + q_freelist); + xfs_qm_dqreclaim_one(dqp, &dispose_list); } + mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); - /* - * Allocate a brand new dquot on the kernel heap and return it - * to the caller to initialize. - */ - ASSERT(xfs_Gqm->qm_dqzone != NULL); - *O_dqpp = kmem_zone_zalloc(xfs_Gqm->qm_dqzone, KM_SLEEP); - atomic_inc(&xfs_Gqm->qm_totaldquots); - - return B_TRUE; + while (!list_empty(&dispose_list)) { + dqp = list_first_entry(&dispose_list, struct xfs_dquot, + q_freelist); + list_del_init(&dqp->q_freelist); + xfs_qm_dqfree_one(dqp); + } +out: + return (xfs_Gqm->qm_dqfrlist_cnt / 100) * sysctl_vfs_cache_pressure; } - /* * Start a transaction and write the incore superblock changes to * disk. flags parameter indicates which fields have changed. Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:05:12.554046204 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:22:02.135243499 +0100 @@ -63,82 +63,6 @@ int xfs_dqerror_mod = 33; static struct lock_class_key xfs_dquot_other_class; /* - * Allocate and initialize a dquot. We don't always allocate fresh memory; - * we try to reclaim a free dquot if the number of incore dquots are above - * a threshold. - * The only field inside the core that gets initialized at this point - * is the d_id field. The idea is to fill in the entire q_core - * when we read in the on disk dquot. - */ -STATIC xfs_dquot_t * -xfs_qm_dqinit( - xfs_mount_t *mp, - xfs_dqid_t id, - uint type) -{ - xfs_dquot_t *dqp; - boolean_t brandnewdquot; - - brandnewdquot = xfs_qm_dqalloc_incore(&dqp); - dqp->dq_flags = type; - dqp->q_core.d_id = cpu_to_be32(id); - dqp->q_mount = mp; - - /* - * No need to re-initialize these if this is a reclaimed dquot. - */ - if (brandnewdquot) { - INIT_LIST_HEAD(&dqp->q_freelist); - mutex_init(&dqp->q_qlock); - init_waitqueue_head(&dqp->q_pinwait); - - /* - * Because we want to use a counting completion, complete - * the flush completion once to allow a single access to - * the flush completion without blocking. - */ - init_completion(&dqp->q_flush); - complete(&dqp->q_flush); - - trace_xfs_dqinit(dqp); - } else { - /* - * Only the q_core portion was zeroed in dqreclaim_one(). - * So, we need to reset others. - */ - dqp->q_nrefs = 0; - dqp->q_blkno = 0; - INIT_LIST_HEAD(&dqp->q_mplist); - INIT_LIST_HEAD(&dqp->q_hashlist); - dqp->q_bufoffset = 0; - dqp->q_fileoffset = 0; - dqp->q_transp = NULL; - dqp->q_gdquot = NULL; - dqp->q_res_bcount = 0; - dqp->q_res_icount = 0; - dqp->q_res_rtbcount = 0; - atomic_set(&dqp->q_pincount, 0); - dqp->q_hash = NULL; - ASSERT(list_empty(&dqp->q_freelist)); - - trace_xfs_dqreuse(dqp); - } - - /* - * In either case we need to make sure group quotas have a different - * lock class than user quotas, to make sure lockdep knows we can - * locks of one of each at the same time. - */ - if (!(type & XFS_DQ_USER)) - lockdep_set_class(&dqp->q_qlock, &xfs_dquot_other_class); - - /* - * log item gets initialized later - */ - return (dqp); -} - -/* * This is called to free all the memory associated with a dquot */ void @@ -567,7 +491,32 @@ xfs_qm_dqread( int error; int cancelflags = 0; - dqp = xfs_qm_dqinit(mp, id, type); + + dqp = kmem_zone_zalloc(xfs_Gqm->qm_dqzone, KM_SLEEP); + + dqp->dq_flags = type; + dqp->q_core.d_id = cpu_to_be32(id); + dqp->q_mount = mp; + INIT_LIST_HEAD(&dqp->q_freelist); + mutex_init(&dqp->q_qlock); + init_waitqueue_head(&dqp->q_pinwait); + + /* + * Because we want to use a counting completion, complete + * the flush completion once to allow a single access to + * the flush completion without blocking. + */ + init_completion(&dqp->q_flush); + complete(&dqp->q_flush); + + /* + * Make sure group quotas have a different lock class than user + * quotas. + */ + if (!(type & XFS_DQ_USER)) + lockdep_set_class(&dqp->q_qlock, &xfs_dquot_other_class); + + atomic_inc(&xfs_Gqm->qm_totaldquots); trace_xfs_dqread(dqp); Index: xfs/fs/xfs/xfs_qm.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm.h 2012-02-01 12:05:12.564046150 +0100 +++ xfs/fs/xfs/xfs_qm.h 2012-02-01 12:22:02.171909967 +0100 @@ -26,24 +26,12 @@ struct xfs_qm; struct xfs_inode; -extern uint ndquot; extern struct mutex xfs_Gqm_lock; extern struct xfs_qm *xfs_Gqm; extern kmem_zone_t *qm_dqzone; extern kmem_zone_t *qm_dqtrxzone; /* - * Ditto, for xfs_qm_dqreclaim_one. - */ -#define XFS_QM_RECLAIM_MAX_RESTARTS 4 - -/* - * Ideal ratio of free to in use dquots. Quota manager makes an attempt - * to keep this balance. - */ -#define XFS_QM_DQFREE_RATIO 2 - -/* * Dquot hashtable constants/threshold values. */ #define XFS_QM_HASHSIZE_LOW (PAGE_SIZE / sizeof(xfs_dqhash_t)) @@ -74,7 +62,6 @@ typedef struct xfs_qm { int qm_dqfrlist_cnt; atomic_t qm_totaldquots; /* total incore dquots */ uint qm_nrefs; /* file systems with quota on */ - int qm_dqfree_ratio;/* ratio of free to inuse dquots */ kmem_zone_t *qm_dqzone; /* dquot mem-alloc zone */ kmem_zone_t *qm_dqtrxzone; /* t_dqinfo of transactions */ } xfs_qm_t; @@ -143,7 +130,6 @@ extern int xfs_qm_quotacheck(xfs_mount_ extern int xfs_qm_write_sb_changes(xfs_mount_t *, __int64_t); /* dquot stuff */ -extern boolean_t xfs_qm_dqalloc_incore(xfs_dquot_t **); extern int xfs_qm_dqpurge_all(xfs_mount_t *, uint); extern void xfs_qm_dqrele_all_inodes(xfs_mount_t *, uint); Index: xfs/fs/xfs/xfs_trace.h =================================================================== --- xfs.orig/fs/xfs/xfs_trace.h 2012-02-01 12:05:12.577379410 +0100 +++ xfs/fs/xfs/xfs_trace.h 2012-02-01 12:06:55.623487828 +0100 @@ -733,11 +733,10 @@ DEFINE_EVENT(xfs_dquot_class, name, \ DEFINE_DQUOT_EVENT(xfs_dqadjust); DEFINE_DQUOT_EVENT(xfs_dqreclaim_want); DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty); -DEFINE_DQUOT_EVENT(xfs_dqreclaim_unlink); +DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy); +DEFINE_DQUOT_EVENT(xfs_dqreclaim_done); DEFINE_DQUOT_EVENT(xfs_dqattach_found); DEFINE_DQUOT_EVENT(xfs_dqattach_get); -DEFINE_DQUOT_EVENT(xfs_dqinit); -DEFINE_DQUOT_EVENT(xfs_dqreuse); DEFINE_DQUOT_EVENT(xfs_dqalloc); DEFINE_DQUOT_EVENT(xfs_dqtobp_read); DEFINE_DQUOT_EVENT(xfs_dqread); Index: xfs/fs/xfs/xfs_qm_stats.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_stats.c 2012-02-01 12:05:12.590712672 +0100 +++ xfs/fs/xfs/xfs_qm_stats.c 2012-02-01 12:22:02.185243229 +0100 @@ -42,9 +42,9 @@ static int xqm_proc_show(struct seq_file { /* maximum; incore; ratio free to inuse; freelist */ seq_printf(m, "%d\t%d\t%d\t%u\n", - ndquot, + 0, xfs_Gqm? atomic_read(&xfs_Gqm->qm_totaldquots) : 0, - xfs_Gqm? xfs_Gqm->qm_dqfree_ratio : 0, + 0, xfs_Gqm? xfs_Gqm->qm_dqfrlist_cnt : 0); return 0; } From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:44 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_62, J_CHICKENPOX_63,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0hDJ253138 for ; Wed, 1 Feb 2012 08:00:44 -0600 X-ASG-Debug-ID: 1328104839-04cb6c225e3d2ae0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id rLj7AOcXY9P6rAuN (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:40 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajn-0003Hg-IX; Wed, 01 Feb 2012 14:00:39 +0000 Message-Id: <20120201140039.512547202@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:21 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 2/7] xfs: per-filesystem dquot LRU lists References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 2/7] xfs: per-filesystem dquot LRU lists Content-Disposition: inline; filename=xfs-quota-per-mount-lru-2 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104840 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Replace the global dquot lru lists with a per-filesystem one. Note that the shrinker isn't wire up to the per-superblock VFS shrinker infrastructure as would have problems summing up and splitting the counts for inodes and dquots. I don't think this is a major problem as the quota cache isn't as interwinded with the inode cache as the dentry cache is, because an inode that is dropped from the cache will generally release a dquot reference, but most of the time it won't be the last one. This patch temporarily stops tracking the system-wide counting of dquots on the LRU lists for /proc/fs/xfs/xqm, which will be added back later in the series. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 37 +++++++++++++++-------------- fs/xfs/xfs_dquot.h | 2 - fs/xfs/xfs_qm.c | 62 +++++++++++++++++++++----------------------------- fs/xfs/xfs_qm.h | 7 +++-- fs/xfs/xfs_qm_stats.c | 2 - 5 files changed, 52 insertions(+), 58 deletions(-) Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:22:02.135243499 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:22:12.341854872 +0100 @@ -47,7 +47,7 @@ * qi->qi_dqlist_lock * dquot->q_qlock (xfs_dqlock() and friends) * dquot->q_flush (xfs_dqflock() and friends) - * xfs_Gqm->qm_dqfrlist_lock + * qi->qi_lru_lock * * If two dquots need to be locked the order is user before group/project, * otherwise by the lowest id first, see xfs_dqlock2. @@ -69,7 +69,7 @@ void xfs_qm_dqdestroy( xfs_dquot_t *dqp) { - ASSERT(list_empty(&dqp->q_freelist)); + ASSERT(list_empty(&dqp->q_lru)); mutex_destroy(&dqp->q_qlock); kmem_zone_free(xfs_Gqm->qm_dqzone, dqp); @@ -497,7 +497,7 @@ xfs_qm_dqread( dqp->dq_flags = type; dqp->q_core.d_id = cpu_to_be32(id); dqp->q_mount = mp; - INIT_LIST_HEAD(&dqp->q_freelist); + INIT_LIST_HEAD(&dqp->q_lru); mutex_init(&dqp->q_qlock); init_waitqueue_head(&dqp->q_pinwait); @@ -858,7 +858,6 @@ restart: return (0); } - /* * Release a reference to the dquot (decrement ref-count) * and unlock it. If there is a group quota attached to this @@ -884,12 +883,13 @@ recurse: trace_xfs_dqput_free(dqp); - mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); - if (list_empty(&dqp->q_freelist)) { - list_add_tail(&dqp->q_freelist, &xfs_Gqm->qm_dqfrlist); - xfs_Gqm->qm_dqfrlist_cnt++; + mutex_lock(&dqp->q_mount->m_quotainfo->qi_lru_lock); + if (list_empty(&dqp->q_lru)) { + list_add_tail(&dqp->q_lru, + &dqp->q_mount->m_quotainfo->qi_lru_list); + dqp->q_mount->m_quotainfo->qi_lru_count++; } - mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); + mutex_unlock(&dqp->q_mount->m_quotainfo->qi_lru_lock); /* * If we just added a udquot to the freelist, then we want to release @@ -1140,6 +1140,7 @@ xfs_qm_dqpurge( { struct xfs_mount *mp = dqp->q_mount; struct xfs_dqhash *qh = dqp->q_hash; + struct xfs_quotainfo *qi = mp->m_quotainfo; xfs_dqlock(dqp); @@ -1190,21 +1191,21 @@ xfs_qm_dqpurge( qh->qh_version++; mutex_unlock(&qh->qh_lock); - mutex_lock(&mp->m_quotainfo->qi_dqlist_lock); + mutex_lock(&qi->qi_dqlist_lock); list_del_init(&dqp->q_mplist); - mp->m_quotainfo->qi_dqreclaims++; - mp->m_quotainfo->qi_dquots--; - mutex_unlock(&mp->m_quotainfo->qi_dqlist_lock); + qi->qi_dqreclaims++; + qi->qi_dquots--; + mutex_unlock(&qi->qi_dqlist_lock); /* * We move dquots to the freelist as soon as their reference count * hits zero, so it really should be on the freelist here. */ - mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); - ASSERT(!list_empty(&dqp->q_freelist)); - list_del_init(&dqp->q_freelist); - xfs_Gqm->qm_dqfrlist_cnt--; - mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); + mutex_lock(&qi->qi_lru_lock); + ASSERT(!list_empty(&dqp->q_lru)); + list_del_init(&dqp->q_lru); + qi->qi_lru_count--; + mutex_unlock(&qi->qi_lru_lock); xfs_qm_dqdestroy(dqp); } Index: xfs/fs/xfs/xfs_dquot.h =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.h 2012-02-01 12:22:02.000000000 +0100 +++ xfs/fs/xfs/xfs_dquot.h 2012-02-01 12:22:12.341854872 +0100 @@ -47,7 +47,7 @@ struct xfs_trans; */ typedef struct xfs_dquot { uint dq_flags; /* various flags (XFS_DQ_*) */ - struct list_head q_freelist; /* global free list of dquots */ + struct list_head q_lru; /* global free list of dquots */ struct list_head q_mplist; /* mount's list of dquots */ struct list_head q_hashlist; /* gloabl hash list of dquots */ xfs_dqhash_t *q_hash; /* the hashchain header */ Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:22:08.051878113 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:24:27.234457429 +0100 @@ -61,11 +61,6 @@ STATIC int xfs_qm_init_quotainos(xfs_mou STATIC int xfs_qm_init_quotainfo(xfs_mount_t *); STATIC int xfs_qm_shake(struct shrinker *, struct shrink_control *); -static struct shrinker xfs_qm_shaker = { - .shrink = xfs_qm_shake, - .seeks = DEFAULT_SEEKS, -}; - /* * Initialize the XQM structure. * Note that there is not one quota manager per file system. @@ -106,13 +101,6 @@ xfs_Gqm_init(void) } /* - * Freelist of all dquots of all file systems - */ - INIT_LIST_HEAD(&xqm->qm_dqfrlist); - xqm->qm_dqfrlist_cnt = 0; - mutex_init(&xqm->qm_dqfrlist_lock); - - /* * dquot zone. we register our own low-memory callback. */ if (!qm_dqzone) { @@ -122,8 +110,6 @@ xfs_Gqm_init(void) } else xqm->qm_dqzone = qm_dqzone; - register_shrinker(&xfs_qm_shaker); - /* * The t_dqinfo portion of transactions. */ @@ -156,12 +142,6 @@ xfs_qm_destroy( ASSERT(xqm != NULL); ASSERT(xqm->qm_nrefs == 0); - unregister_shrinker(&xfs_qm_shaker); - - mutex_lock(&xqm->qm_dqfrlist_lock); - ASSERT(list_empty(&xqm->qm_dqfrlist)); - mutex_unlock(&xqm->qm_dqfrlist_lock); - hsize = xqm->qm_dqhashmask + 1; for (i = 0; i < hsize; i++) { xfs_qm_list_destroy(&(xqm->qm_usr_dqhtable[i])); @@ -827,6 +807,10 @@ xfs_qm_init_quotainfo( mutex_init(&qinf->qi_dqlist_lock); lockdep_set_class(&qinf->qi_dqlist_lock, &xfs_quota_mplist_class); + INIT_LIST_HEAD(&qinf->qi_lru_list); + qinf->qi_lru_count = 0; + mutex_init(&qinf->qi_lru_lock); + qinf->qi_dqreclaims = 0; /* mutex used to serialize quotaoffs */ @@ -894,6 +878,9 @@ xfs_qm_init_quotainfo( qinf->qi_rtbwarnlimit = XFS_QM_RTBWARNLIMIT; } + qinf->qi_shrinker.shrink = xfs_qm_shake; + qinf->qi_shrinker.seeks = DEFAULT_SEEKS; + register_shrinker(&qinf->qi_shrinker); return 0; } @@ -913,6 +900,8 @@ xfs_qm_destroy_quotainfo( ASSERT(qi != NULL); ASSERT(xfs_Gqm != NULL); + unregister_shrinker(&qi->qi_shrinker); + /* * Release the reference that XQM kept, so that we know * when the XQM structure should be freed. We cannot assume @@ -1624,6 +1613,7 @@ xfs_qm_dqreclaim_one( struct list_head *dispose_list) { struct xfs_mount *mp = dqp->q_mount; + struct xfs_quotainfo *qi = mp->m_quotainfo; int error; if (!xfs_dqlock_nowait(dqp)) @@ -1639,8 +1629,8 @@ xfs_qm_dqreclaim_one( trace_xfs_dqreclaim_want(dqp); XQM_STATS_INC(xqmstats.xs_qm_dqwants); - list_del_init(&dqp->q_freelist); - xfs_Gqm->qm_dqfrlist_cnt--; + list_del_init(&dqp->q_lru); + qi->qi_lru_count--; return; } @@ -1688,8 +1678,8 @@ xfs_qm_dqreclaim_one( xfs_dqunlock(dqp); ASSERT(dqp->q_nrefs == 0); - list_move_tail(&dqp->q_freelist, dispose_list); - xfs_Gqm->qm_dqfrlist_cnt--; + list_move_tail(&dqp->q_lru, dispose_list); + qi->qi_lru_count--; trace_xfs_dqreclaim_done(dqp); XQM_STATS_INC(xqmstats.xs_qm_dqreclaims); @@ -1701,7 +1691,7 @@ out_busy: /* * Move the dquot to the tail of the list so that we don't spin on it. */ - list_move_tail(&dqp->q_freelist, &xfs_Gqm->qm_dqfrlist); + list_move_tail(&dqp->q_lru, &qi->qi_lru_list); trace_xfs_dqreclaim_busy(dqp); XQM_STATS_INC(xqmstats.xs_qm_dqreclaim_misses); @@ -1712,6 +1702,8 @@ xfs_qm_shake( struct shrinker *shrink, struct shrink_control *sc) { + struct xfs_quotainfo *qi = + container_of(shrink, struct xfs_quotainfo, qi_shrinker); int nr_to_scan = sc->nr_to_scan; LIST_HEAD (dispose_list); struct xfs_dquot *dqp; @@ -1721,24 +1713,23 @@ xfs_qm_shake( if (!nr_to_scan) goto out; - mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); - while (!list_empty(&xfs_Gqm->qm_dqfrlist)) { + mutex_lock(&qi->qi_lru_lock); + while (!list_empty(&qi->qi_lru_list)) { if (nr_to_scan-- <= 0) break; - dqp = list_first_entry(&xfs_Gqm->qm_dqfrlist, struct xfs_dquot, - q_freelist); + dqp = list_first_entry(&qi->qi_lru_list, struct xfs_dquot, + q_lru); xfs_qm_dqreclaim_one(dqp, &dispose_list); } - mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); + mutex_unlock(&qi->qi_lru_lock); while (!list_empty(&dispose_list)) { - dqp = list_first_entry(&dispose_list, struct xfs_dquot, - q_freelist); - list_del_init(&dqp->q_freelist); + dqp = list_first_entry(&dispose_list, struct xfs_dquot, q_lru); + list_del_init(&dqp->q_lru); xfs_qm_dqfree_one(dqp); } out: - return (xfs_Gqm->qm_dqfrlist_cnt / 100) * sysctl_vfs_cache_pressure; + return (qi->qi_lru_count / 100) * sysctl_vfs_cache_pressure; } /* Index: xfs/fs/xfs/xfs_qm.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm.h 2012-02-01 12:22:02.000000000 +0100 +++ xfs/fs/xfs/xfs_qm.h 2012-02-01 12:22:12.345188187 +0100 @@ -57,9 +57,6 @@ typedef struct xfs_qm { xfs_dqlist_t *qm_usr_dqhtable;/* udquot hash table */ xfs_dqlist_t *qm_grp_dqhtable;/* gdquot hash table */ uint qm_dqhashmask; /* # buckets in dq hashtab - 1 */ - struct list_head qm_dqfrlist; /* freelist of dquots */ - struct mutex qm_dqfrlist_lock; - int qm_dqfrlist_cnt; atomic_t qm_totaldquots; /* total incore dquots */ uint qm_nrefs; /* file systems with quota on */ kmem_zone_t *qm_dqzone; /* dquot mem-alloc zone */ @@ -73,6 +70,9 @@ typedef struct xfs_qm { typedef struct xfs_quotainfo { xfs_inode_t *qi_uquotaip; /* user quota inode */ xfs_inode_t *qi_gquotaip; /* group quota inode */ + struct list_head qi_lru_list; + struct mutex qi_lru_lock; + int qi_lru_count; struct list_head qi_dqlist; /* all dquots in filesys */ struct mutex qi_dqlist_lock; int qi_dquots; @@ -93,6 +93,7 @@ typedef struct xfs_quotainfo { xfs_qcnt_t qi_isoftlimit; /* default inode count soft limit */ xfs_qcnt_t qi_rtbhardlimit;/* default realtime blk hard limit */ xfs_qcnt_t qi_rtbsoftlimit;/* default realtime blk soft limit */ + struct shrinker qi_shrinker; } xfs_quotainfo_t; Index: xfs/fs/xfs/xfs_qm_stats.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_stats.c 2012-02-01 12:22:02.000000000 +0100 +++ xfs/fs/xfs/xfs_qm_stats.c 2012-02-01 12:22:12.345188187 +0100 @@ -45,7 +45,7 @@ static int xqm_proc_show(struct seq_file 0, xfs_Gqm? atomic_read(&xfs_Gqm->qm_totaldquots) : 0, 0, - xfs_Gqm? xfs_Gqm->qm_dqfrlist_cnt : 0); + 0); return 0; } From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:45 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_57 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0jxm253169 for ; Wed, 1 Feb 2012 08:00:45 -0600 X-ASG-Debug-ID: 1328104840-04bdf07516493a60001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id OIUWIGk2urMhNMw2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:41 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajo-0003Ik-4j; Wed, 01 Feb 2012 14:00:40 +0000 Message-Id: <20120201140040.093762788@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:23 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 4/7] xfs: remove the per-filesystem list of dquots References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 4/7] xfs: remove the per-filesystem list of dquots Content-Disposition: inline; filename=xfs-quota-remove-mplist X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104840 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Instead of keeping a separate per-filesystem list of dquots we can walk the radix tree for the two places where we need to iterate all quota structures. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 35 ++---- fs/xfs/xfs_dquot.h | 2 fs/xfs/xfs_qm.c | 287 +++++++++++++++++++++++------------------------------ fs/xfs/xfs_qm.h | 4 4 files changed, 143 insertions(+), 185 deletions(-) Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:24:50.577664301 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:26:36.210425373 +0100 @@ -44,10 +44,9 @@ * * ip->i_lock * qi->qi_tree_lock - * qi->qi_dqlist_lock - * dquot->q_qlock (xfs_dqlock() and friends) - * dquot->q_flush (xfs_dqflock() and friends) - * qi->qi_lru_lock + * dquot->q_qlock (xfs_dqlock() and friends) + * dquot->q_flush (xfs_dqflock() and friends) + * qi->qi_lru_lock * * If two dquots need to be locked the order is user before group/project, * otherwise by the lowest id first, see xfs_dqlock2. @@ -740,11 +739,6 @@ restart: XQM_STATS_INC(xqmstats.xs_qm_dquot_dups); goto restart; } - /* - * Attach this dquot to this filesystem's list of all dquots, - * kept inside the mount structure in m_quotainfo field - */ - mutex_lock(&mp->m_quotainfo->qi_dqlist_lock); /* * We return a locked dquot to the caller, with a reference taken @@ -752,9 +746,7 @@ restart: xfs_dqlock(dqp); dqp->q_nrefs = 1; - list_add(&dqp->q_mplist, &mp->m_quotainfo->qi_dqlist); mp->m_quotainfo->qi_dquots++; - mutex_unlock(&mp->m_quotainfo->qi_dqlist_lock); mutex_unlock(&mp->m_quotainfo->qi_tree_lock); dqret: @@ -1038,16 +1030,23 @@ xfs_dqlock2( /* * Take a dquot out of the mount's dqlist as well as the hashlist. This is - * called via unmount as well as quotaoff, and the purge will always succeed. + * called via unmount as well as quotaoff. */ -void +int xfs_qm_dqpurge( - struct xfs_dquot *dqp) + struct xfs_dquot *dqp, + int flags) { struct xfs_mount *mp = dqp->q_mount; struct xfs_quotainfo *qi = mp->m_quotainfo; xfs_dqlock(dqp); + if ((dqp->dq_flags & XFS_DQ_FREEING) || dqp->q_nrefs != 0) { + xfs_dqlock(dqp); + return EAGAIN; + } + + dqp->dq_flags |= XFS_DQ_FREEING; /* * If we're turning off quotas, we have to make sure that, for @@ -1091,16 +1090,9 @@ xfs_qm_dqpurge( xfs_dqfunlock(dqp); xfs_dqunlock(dqp); - mutex_lock(&mp->m_quotainfo->qi_tree_lock); radix_tree_delete(XFS_DQUOT_TREE(mp, dqp->q_core.d_flags), be32_to_cpu(dqp->q_core.d_id)); - mutex_unlock(&mp->m_quotainfo->qi_tree_lock); - - mutex_lock(&qi->qi_dqlist_lock); - list_del_init(&dqp->q_mplist); - qi->qi_dqreclaims++; qi->qi_dquots--; - mutex_unlock(&qi->qi_dqlist_lock); /* * We move dquots to the freelist as soon as their reference count @@ -1113,6 +1105,7 @@ xfs_qm_dqpurge( mutex_unlock(&qi->qi_lru_lock); xfs_qm_dqdestroy(dqp); + return 0; } /* Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:25:23.134154595 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:26:36.210425373 +0100 @@ -308,172 +308,157 @@ xfs_qm_unmount_quotas( } /* - * Flush all dquots of the given file system to disk. The dquots are - * _not_ purged from memory here, just their data written to disk. + * The quota lookup is done in batches to keep the amount of lock traffic and + * radix tree lookups to a minimum. The batch size is a trade off between + * lookup reduction and stack usage. */ +#define XFS_DQ_LOOKUP_BATCH 32 + STATIC int -xfs_qm_dqflush_all( - struct xfs_mount *mp) -{ - struct xfs_quotainfo *q = mp->m_quotainfo; - int recl; - struct xfs_dquot *dqp; - int error; +xfs_qm_dquot_walk( + struct xfs_mount *mp, + int type, + int (*execute)(struct xfs_dquot *dqp, int flags), + int flags) +{ + struct radix_tree_root *tree = XFS_DQUOT_TREE(mp, type); + uint32_t first_index; + int last_error = 0; + int skipped; + int nr_found; + +restart: + skipped = 0; + first_index = 0; + nr_found = 0; - if (!q) - return 0; -again: - mutex_lock(&q->qi_dqlist_lock); - list_for_each_entry(dqp, &q->qi_dqlist, q_mplist) { - xfs_dqlock(dqp); - if ((dqp->dq_flags & XFS_DQ_FREEING) || - !XFS_DQ_IS_DIRTY(dqp)) { - xfs_dqunlock(dqp); - continue; - } + mutex_lock(&mp->m_quotainfo->qi_tree_lock); + do { + struct xfs_dquot *batch[XFS_DQ_LOOKUP_BATCH]; + int error = 0; + int i; + + nr_found = radix_tree_gang_lookup(tree, (void **)batch, + first_index, XFS_DQ_LOOKUP_BATCH); + if (!nr_found) + break; - /* XXX a sentinel would be better */ - recl = q->qi_dqreclaims; - if (!xfs_dqflock_nowait(dqp)) { - /* - * If we can't grab the flush lock then check - * to see if the dquot has been flushed delayed - * write. If so, grab its buffer and send it - * out immediately. We'll be able to acquire - * the flush lock when the I/O completes. - */ - xfs_dqflock_pushbuf_wait(dqp); + for (i = 0; i < nr_found; i++) { + struct xfs_dquot *dqp = batch[i]; + + first_index = be32_to_cpu(dqp->q_core.d_id) + 1; + + error = execute(batch[i], flags); + if (error == EAGAIN) { + skipped++; + continue; + } + if (error && last_error != EFSCORRUPTED) + last_error = error; + } + /* bail out if the filesystem is corrupted. */ + if (error == EFSCORRUPTED) { + skipped = 0; + break; } - /* - * Let go of the mplist lock. We don't want to hold it - * across a disk write. - */ - mutex_unlock(&q->qi_dqlist_lock); - error = xfs_qm_dqflush(dqp, 0); - xfs_dqunlock(dqp); - if (error) - return error; - mutex_lock(&q->qi_dqlist_lock); - if (recl != q->qi_dqreclaims) { - mutex_unlock(&q->qi_dqlist_lock); - /* XXX restart limit */ - goto again; + if (need_resched()) { + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + cond_resched(); + mutex_lock(&mp->m_quotainfo->qi_tree_lock); } + } while (nr_found); + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); + + if (skipped) { + delay(1); + goto restart; } - mutex_unlock(&q->qi_dqlist_lock); - /* return ! busy */ - return 0; + return last_error; } -/* - * Release the group dquot pointers the user dquots may be - * carrying around as a hint. mplist is locked on entry and exit. - */ -STATIC void -xfs_qm_detach_gdquots( - struct xfs_mount *mp) +STATIC int +xfs_qm_flush_one( + struct xfs_dquot *dqp, + int flags) { - struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_dquot *dqp, *gdqp; + int error = 0; - again: - ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); - list_for_each_entry(dqp, &q->qi_dqlist, q_mplist) { - xfs_dqlock(dqp); - if (dqp->dq_flags & XFS_DQ_FREEING) { - xfs_dqunlock(dqp); - mutex_unlock(&q->qi_dqlist_lock); - delay(1); - mutex_lock(&q->qi_dqlist_lock); - goto again; - } + xfs_dqlock(dqp); + if (dqp->dq_flags & XFS_DQ_FREEING) + goto out_unlock; + if (!XFS_DQ_IS_DIRTY(dqp)) + goto out_unlock; - gdqp = dqp->q_gdquot; - if (gdqp) - dqp->q_gdquot = NULL; - xfs_dqunlock(dqp); + if (!xfs_dqflock_nowait(dqp)) + xfs_dqflock_pushbuf_wait(dqp); - if (gdqp) - xfs_qm_dqrele(gdqp); - } + error = xfs_qm_dqflush(dqp, flags); + +out_unlock: + xfs_dqunlock(dqp); + return error; } /* - * Go through all the incore dquots of this file system and take them - * off the mplist and hashlist, if the dquot type matches the dqtype - * parameter. This is used when turning off quota accounting for - * users and/or groups, as well as when the filesystem is unmounting. + * Release the group dquot pointer the user dquot may be carrying around + * as a hint. */ STATIC int -xfs_qm_dqpurge_int( +xfs_qm_detach_gdquot( + struct xfs_dquot *dqp, + int flags) +{ + struct xfs_dquot *gdqp; + + xfs_dqlock(dqp); + /* XXX(hch): should we bother with freeeing dquots here? */ + if (dqp->dq_flags & XFS_DQ_FREEING) { + xfs_dqunlock(dqp); + return 0; + } + gdqp = dqp->q_gdquot; + if (gdqp) { + xfs_dqlock(gdqp); + dqp->q_gdquot = NULL; + } + xfs_dqunlock(dqp); + if (gdqp) + xfs_qm_dqput(gdqp); + return 0; +} + +/* + * Purge the dquot cache. + * + * None of the dquots should really be busy at this point. + */ +int +xfs_qm_dqpurge_all( struct xfs_mount *mp, uint flags) { - struct xfs_quotainfo *q = mp->m_quotainfo; - struct xfs_dquot *dqp, *n; - uint dqtype; - int nmisses = 0; - LIST_HEAD (dispose_list); + int error = 0; - if (!q) + if (!mp->m_quotainfo) return 0; - dqtype = (flags & XFS_QMOPT_UQUOTA) ? XFS_DQ_USER : 0; - dqtype |= (flags & XFS_QMOPT_PQUOTA) ? XFS_DQ_PROJ : 0; - dqtype |= (flags & XFS_QMOPT_GQUOTA) ? XFS_DQ_GROUP : 0; - - mutex_lock(&q->qi_dqlist_lock); - /* * In the first pass through all incore dquots of this filesystem, * we release the group dquot pointers the user dquots may be * carrying around as a hint. We need to do this irrespective of * what's being turned off. */ - xfs_qm_detach_gdquots(mp); - - /* - * Try to get rid of all of the unwanted dquots. - */ - list_for_each_entry_safe(dqp, n, &q->qi_dqlist, q_mplist) { - xfs_dqlock(dqp); - if ((dqp->dq_flags & dqtype) != 0 && - !(dqp->dq_flags & XFS_DQ_FREEING)) { - if (dqp->q_nrefs == 0) { - dqp->dq_flags |= XFS_DQ_FREEING; - list_move_tail(&dqp->q_mplist, &dispose_list); - } else - nmisses++; - } - xfs_dqunlock(dqp); - } - mutex_unlock(&q->qi_dqlist_lock); - - list_for_each_entry_safe(dqp, n, &dispose_list, q_mplist) - xfs_qm_dqpurge(dqp); - - return nmisses; -} - -int -xfs_qm_dqpurge_all( - xfs_mount_t *mp, - uint flags) -{ - int ndquots; + xfs_qm_dquot_walk(mp, XFS_DQ_USER, xfs_qm_detach_gdquot, 0); - /* - * Purge the dquot cache. - * None of the dquots should really be busy at this point. - */ - if (mp->m_quotainfo) { - while ((ndquots = xfs_qm_dqpurge_int(mp, flags))) { - delay(ndquots * 10); - } - } - return 0; + if (!error && (flags & XFS_QMOPT_UQUOTA)) + error = xfs_qm_dquot_walk(mp, XFS_DQ_USER, xfs_qm_dqpurge, 0); + if (!error && (flags & XFS_QMOPT_GQUOTA)) + error = xfs_qm_dquot_walk(mp, XFS_DQ_GROUP, xfs_qm_dqpurge, 0); + if (!error && (flags & XFS_QMOPT_PQUOTA)) + error = xfs_qm_dquot_walk(mp, XFS_DQ_PROJ, xfs_qm_dqpurge, 0); + return error; } STATIC int @@ -750,15 +735,10 @@ xfs_qm_init_quotainfo( INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); mutex_init(&qinf->qi_tree_lock); - INIT_LIST_HEAD(&qinf->qi_dqlist); - mutex_init(&qinf->qi_dqlist_lock); - INIT_LIST_HEAD(&qinf->qi_lru_list); qinf->qi_lru_count = 0; mutex_init(&qinf->qi_lru_lock); - qinf->qi_dqreclaims = 0; - /* mutex used to serialize quotaoffs */ mutex_init(&qinf->qi_quotaofflock); @@ -855,9 +835,6 @@ xfs_qm_destroy_quotainfo( */ xfs_qm_rele_quotafs_ref(mp); - ASSERT(list_empty(&qi->qi_dqlist)); - mutex_destroy(&qi->qi_dqlist_lock); - if (qi->qi_uquotaip) { IRELE(qi->qi_uquotaip); qi->qi_uquotaip = NULL; /* paranoia */ @@ -1330,12 +1307,6 @@ xfs_qm_quotacheck( ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); ASSERT(XFS_IS_QUOTA_RUNNING(mp)); - /* - * There should be no cached dquots. The (simplistic) quotacheck - * algorithm doesn't like that. - */ - ASSERT(list_empty(&mp->m_quotainfo->qi_dqlist)); - xfs_notice(mp, "Quotacheck needed: Please wait."); /* @@ -1374,12 +1345,15 @@ xfs_qm_quotacheck( } while (!done); /* - * We've made all the changes that we need to make incore. - * Flush them down to disk buffers if everything was updated - * successfully. + * We've made all the changes that we need to make incore. Flush them + * down to disk buffers if everything was updated successfully. */ - if (!error) - error = xfs_qm_dqflush_all(mp); + if (!error && XFS_IS_UQUOTA_ON(mp)) + error = xfs_qm_dquot_walk(mp, XFS_DQ_USER, xfs_qm_flush_one, 0); + if (!error && XFS_IS_GQUOTA_ON(mp)) + error = xfs_qm_dquot_walk(mp, XFS_DQ_GROUP, xfs_qm_flush_one, 0); + if (!error && XFS_IS_PQUOTA_ON(mp)) + error = xfs_qm_dquot_walk(mp, XFS_DQ_PROJ, xfs_qm_flush_one, 0); /* * We can get this error if we couldn't do a dquot allocation inside @@ -1518,13 +1492,8 @@ xfs_qm_dqfree_one( mutex_lock(&mp->m_quotainfo->qi_tree_lock); radix_tree_delete(XFS_DQUOT_TREE(mp, dqp->q_core.d_flags), be32_to_cpu(dqp->q_core.d_id)); - mutex_unlock(&mp->m_quotainfo->qi_tree_lock); - - mutex_lock(&qi->qi_dqlist_lock); - list_del_init(&dqp->q_mplist); qi->qi_dquots--; - qi->qi_dqreclaims++; - mutex_unlock(&qi->qi_dqlist_lock); + mutex_unlock(&mp->m_quotainfo->qi_tree_lock); xfs_qm_dqdestroy(dqp); } Index: xfs/fs/xfs/xfs_qm.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm.h 2012-02-01 12:24:50.577664301 +0100 +++ xfs/fs/xfs/xfs_qm.h 2012-02-01 12:26:36.210425373 +0100 @@ -65,11 +65,7 @@ typedef struct xfs_quotainfo { struct list_head qi_lru_list; struct mutex qi_lru_lock; int qi_lru_count; - struct list_head qi_dqlist; /* all dquots in filesys */ - struct mutex qi_dqlist_lock; int qi_dquots; - int qi_dqreclaims; /* a change here indicates - a removal in the dqlist */ time_t qi_btimelimit; /* limit for blks timer */ time_t qi_itimelimit; /* limit for inodes timer */ time_t qi_rtbtimelimit;/* limit for rt blks timer */ Index: xfs/fs/xfs/xfs_dquot.h =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.h 2012-02-01 12:24:50.577664301 +0100 +++ xfs/fs/xfs/xfs_dquot.h 2012-02-01 12:26:36.210425373 +0100 @@ -121,7 +121,7 @@ extern int xfs_qm_dqread(struct xfs_mou uint, struct xfs_dquot **); extern void xfs_qm_dqdestroy(xfs_dquot_t *); extern int xfs_qm_dqflush(xfs_dquot_t *, uint); -extern void xfs_qm_dqpurge(xfs_dquot_t *); +extern int xfs_qm_dqpurge(xfs_dquot_t *, int); extern void xfs_qm_dqunpin_wait(xfs_dquot_t *); extern void xfs_qm_adjust_dqtimers(xfs_mount_t *, xfs_disk_dquot_t *); From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_33, LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0hSe253128 for ; Wed, 1 Feb 2012 08:00:43 -0600 X-ASG-Debug-ID: 1328104840-04cbb01fb54ea2a0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id SFPbFsaDqUuCmqPF (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:40 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajo-0003JH-Au; Wed, 01 Feb 2012 14:00:40 +0000 Message-Id: <20120201140040.286774465@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:24 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 5/7] xfs: use per-cpu data for the quota statistics References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 5/7] xfs: use per-cpu data for the quota statistics Content-Disposition: inline; filename=xfs-quota-percpu-stats X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104840 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Use the same per-cpu scheme used in the main XFS statistics, as well as the VFS inode and dcache statistics for the quota code. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 6 +++--- fs/xfs/xfs_qm.c | 6 +++--- fs/xfs/xfs_qm_stats.c | 28 +++++++++++++++++----------- fs/xfs/xfs_qm_stats.h | 11 ++++++++--- 4 files changed, 31 insertions(+), 20 deletions(-) Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:29:56.000000000 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:30:02.839305968 +0100 @@ -666,13 +666,13 @@ restart: mutex_unlock(&mp->m_quotainfo->qi_tree_lock); trace_xfs_dqget_hit(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dqcachehits); + XQM_STATS_INC(xs_qm_dqcachehits); *O_dqpp = dqp; return 0; } mutex_unlock(&mp->m_quotainfo->qi_tree_lock); - XQM_STATS_INC(xqmstats.xs_qm_dqcachemisses); + XQM_STATS_INC(xs_qm_dqcachemisses); /* * Dquot cache miss. We don't want to keep the inode lock across @@ -736,7 +736,7 @@ restart: mutex_unlock(&mp->m_quotainfo->qi_tree_lock); trace_xfs_dqget_dup(dqp); xfs_qm_dqdestroy(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dquot_dups); + XQM_STATS_INC(xs_qm_dquot_dups); goto restart; } Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:29:56.000000000 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:30:26.685843449 +0100 @@ -1518,7 +1518,7 @@ xfs_qm_dqreclaim_one( xfs_dqunlock(dqp); trace_xfs_dqreclaim_want(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dqwants); + XQM_STATS_INC(xs_qm_dqwants); list_del_init(&dqp->q_lru); qi->qi_lru_count--; @@ -1572,7 +1572,7 @@ xfs_qm_dqreclaim_one( qi->qi_lru_count--; trace_xfs_dqreclaim_done(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dqreclaims); + XQM_STATS_INC(xs_qm_dqreclaims); return; out_busy: @@ -1584,7 +1584,7 @@ out_busy: list_move_tail(&dqp->q_lru, &qi->qi_lru_list); trace_xfs_dqreclaim_busy(dqp); - XQM_STATS_INC(xqmstats.xs_qm_dqreclaim_misses); + XQM_STATS_INC(xs_qm_dqreclaim_misses); } STATIC int Index: xfs/fs/xfs/xfs_qm_stats.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_stats.c 2012-02-01 12:22:12.000000000 +0100 +++ xfs/fs/xfs/xfs_qm_stats.c 2012-02-01 12:30:02.842639283 +0100 @@ -36,7 +36,16 @@ #include "xfs_buf_item.h" #include "xfs_qm.h" -struct xqmstats xqmstats; +DEFINE_PER_CPU(struct xqmstats, xqmstats); + +static int xqmstats_sum(int idx) +{ + int val = 0, cpu; + + for_each_possible_cpu(cpu) + val += *(((__u32 *)&per_cpu(xqmstats, cpu) + idx)); + return max(val, 0); +} static int xqm_proc_show(struct seq_file *m, void *v) { @@ -64,16 +73,13 @@ static const struct file_operations xqm_ static int xqmstat_proc_show(struct seq_file *m, void *v) { - /* quota performance statistics */ - seq_printf(m, "qm %u %u %u %u %u %u %u %u\n", - xqmstats.xs_qm_dqreclaims, - xqmstats.xs_qm_dqreclaim_misses, - xqmstats.xs_qm_dquot_dups, - xqmstats.xs_qm_dqcachemisses, - xqmstats.xs_qm_dqcachehits, - xqmstats.xs_qm_dqwants, - xqmstats.xs_qm_dqshake_reclaims, - xqmstats.xs_qm_dqinact_reclaims); + int j; + + seq_printf(m, "qm"); + for (j = 0; j < XQMSTAT_END_XQMSTAT; j++) + seq_printf(m, " %u", xqmstats_sum(j)); + seq_putc(m, '\n'); + return 0; } Index: xfs/fs/xfs/xfs_qm_stats.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm_stats.h 2012-02-01 12:05:06.000000000 +0100 +++ xfs/fs/xfs/xfs_qm_stats.h 2012-02-01 12:30:02.842639283 +0100 @@ -32,18 +32,23 @@ struct xqmstats { __uint32_t xs_qm_dqwants; __uint32_t xs_qm_dqshake_reclaims; __uint32_t xs_qm_dqinact_reclaims; +#define XQMSTAT_END_XQMSTAT 8 }; -extern struct xqmstats xqmstats; +DECLARE_PER_CPU(struct xqmstats, xqmstats); -# define XQM_STATS_INC(count) ( (count)++ ) +/* + * We don't disable preempt, not too worried about poking the + * wrong CPU's stat for now (also aggregated before reporting). + */ +# define XQM_STATS_INC(v) (per_cpu(xqmstats, current_cpu()).v++) extern void xfs_qm_init_procfs(void); extern void xfs_qm_cleanup_procfs(void); #else -# define XQM_STATS_INC(count) do { } while (0) +# define XQM_STATS_INC(v) do { } while (0) static inline void xfs_qm_init_procfs(void) { }; static inline void xfs_qm_cleanup_procfs(void) { }; From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0gHK253120 for ; Wed, 1 Feb 2012 08:00:43 -0600 X-ASG-Debug-ID: 1328104841-04bdf07518493a70001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id MfjUVO0zvOo3p8xs (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:41 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajo-0003Jo-Ig; Wed, 01 Feb 2012 14:00:40 +0000 Message-Id: <20120201140040.528279999@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:25 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 6/7] xfs: user per-cpu stats for the total dquot numbers References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 6/7] xfs: user per-cpu stats for the total dquot numbers Content-Disposition: inline; filename=xfs-quota-percpu-stats-2 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104841 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Switch the total number of dquots counter over to use the per-cpu stats implementation, and reintroduce the number of unused dquots counter dropped earlier in the series. Btw, I wonder if we should simply add these counters to /proc/fs/xfs/xqmstat instead of keeping the odd format and mostly superflous /proc/fs/xfs/xqm around. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 7 ++++--- fs/xfs/xfs_qm.c | 3 ++- fs/xfs/xfs_qm.h | 1 - fs/xfs/xfs_qm_stats.c | 4 ++-- fs/xfs/xfs_qm_stats.h | 5 +++++ 5 files changed, 13 insertions(+), 7 deletions(-) Index: xfs/fs/xfs/xfs_qm_stats.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_stats.c 2012-02-01 12:30:02.000000000 +0100 +++ xfs/fs/xfs/xfs_qm_stats.c 2012-02-01 12:30:48.359059367 +0100 @@ -52,9 +52,9 @@ static int xqm_proc_show(struct seq_file /* maximum; incore; ratio free to inuse; freelist */ seq_printf(m, "%d\t%d\t%d\t%u\n", 0, - xfs_Gqm? atomic_read(&xfs_Gqm->qm_totaldquots) : 0, + xqmstats_sum(XQMSTAT_END_XQMSTAT), 0, - 0); + xqmstats_sum(XQMSTAT_END_XQMSTAT + 1)); return 0; } Index: xfs/fs/xfs/xfs_qm_stats.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm_stats.h 2012-02-01 12:30:02.000000000 +0100 +++ xfs/fs/xfs/xfs_qm_stats.h 2012-02-01 12:30:48.362392682 +0100 @@ -33,6 +33,9 @@ struct xqmstats { __uint32_t xs_qm_dqshake_reclaims; __uint32_t xs_qm_dqinact_reclaims; #define XQMSTAT_END_XQMSTAT 8 + __uint32_t xs_qm_dquots; + __uint32_t xs_qm_dquots_unused; +#define XQMSTAT_END_XQM (XQMSTAT_END_XQMSTAT + 4) }; DECLARE_PER_CPU(struct xqmstats, xqmstats); @@ -42,6 +45,7 @@ DECLARE_PER_CPU(struct xqmstats, xqmstat * wrong CPU's stat for now (also aggregated before reporting). */ # define XQM_STATS_INC(v) (per_cpu(xqmstats, current_cpu()).v++) +# define XQM_STATS_DEC(v) (per_cpu(xqmstats, current_cpu()).v--) extern void xfs_qm_init_procfs(void); extern void xfs_qm_cleanup_procfs(void); @@ -49,6 +53,7 @@ extern void xfs_qm_cleanup_procfs(void); #else # define XQM_STATS_INC(v) do { } while (0) +# define XQM_STATS_DEC(v) do { } while (0) static inline void xfs_qm_init_procfs(void) { }; static inline void xfs_qm_cleanup_procfs(void) { }; Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:30:02.000000000 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:30:48.362392682 +0100 @@ -72,8 +72,7 @@ xfs_qm_dqdestroy( mutex_destroy(&dqp->q_qlock); kmem_zone_free(xfs_Gqm->qm_dqzone, dqp); - - atomic_dec(&xfs_Gqm->qm_totaldquots); + XQM_STATS_DEC(xs_qm_dquots); } /* @@ -515,7 +514,7 @@ xfs_qm_dqread( if (!(type & XFS_DQ_USER)) lockdep_set_class(&dqp->q_qlock, &xfs_dquot_other_class); - atomic_inc(&xfs_Gqm->qm_totaldquots); + XQM_STATS_INC(xs_qm_dquots); trace_xfs_dqread(dqp); @@ -786,6 +785,7 @@ recurse: list_add_tail(&dqp->q_lru, &dqp->q_mount->m_quotainfo->qi_lru_list); dqp->q_mount->m_quotainfo->qi_lru_count++; + XQM_STATS_INC(xs_qm_dquots_unused); } mutex_unlock(&dqp->q_mount->m_quotainfo->qi_lru_lock); @@ -1104,6 +1104,7 @@ xfs_qm_dqpurge( qi->qi_lru_count--; mutex_unlock(&qi->qi_lru_lock); + XQM_STATS_DEC(xs_qm_dquots_unused); xfs_qm_dqdestroy(dqp); return 0; } Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:30:26.000000000 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:31:11.988931351 +0100 @@ -89,7 +89,6 @@ xfs_Gqm_init(void) } else xqm->qm_dqtrxzone = qm_dqtrxzone; - atomic_set(&xqm->qm_totaldquots, 0); xqm->qm_nrefs = 0; return xqm; } @@ -1522,6 +1521,7 @@ xfs_qm_dqreclaim_one( list_del_init(&dqp->q_lru); qi->qi_lru_count--; + XQM_STATS_DEC(xs_qm_dquots_unused); return; } @@ -1570,6 +1570,7 @@ xfs_qm_dqreclaim_one( ASSERT(dqp->q_nrefs == 0); list_move_tail(&dqp->q_lru, dispose_list); qi->qi_lru_count--; + XQM_STATS_DEC(xs_qm_dquots_unused); trace_xfs_dqreclaim_done(dqp); XQM_STATS_INC(xs_qm_dqreclaims); Index: xfs/fs/xfs/xfs_qm.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm.h 2012-02-01 12:26:36.000000000 +0100 +++ xfs/fs/xfs/xfs_qm.h 2012-02-01 12:30:48.365725997 +0100 @@ -46,7 +46,6 @@ extern kmem_zone_t *qm_dqtrxzone; * Quota Manager (global) structure. Lives only in core. */ typedef struct xfs_qm { - atomic_t qm_totaldquots; /* total incore dquots */ uint qm_nrefs; /* file systems with quota on */ kmem_zone_t *qm_dqzone; /* dquot mem-alloc zone */ kmem_zone_t *qm_dqtrxzone; /* t_dqinfo of transactions */ From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 08:00:43 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_62, J_CHICKENPOX_63,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11E0g3V253122 for ; Wed, 1 Feb 2012 08:00:43 -0600 X-ASG-Debug-ID: 1328104841-04cb6c22613d2b00001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id aKlXmNSECLQ958YW (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 06:00:41 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsajo-0003KL-VR; Wed, 01 Feb 2012 14:00:41 +0000 Message-Id: <20120201140040.919945715@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Wed, 01 Feb 2012 08:57:26 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl Subject: [PATCH 7/7] xfs: remove the globalk xfs_Gqm structure References: <20120201135719.202171828@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 7/7] xfs: remove the globalk xfs_Gqm structure Content-Disposition: inline; filename=xfs-quota-kill-xfs-qm X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328104841 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87300 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 If we initialize the slab caches for the quote code when XFS is loaded there is no need for a global and reference counted quota manager structure. Drop all this overhead and also fix the error handling during quota initialization. Signed-off-by: Christoph Hellwig --- fs/xfs/xfs_dquot.c | 38 ++++++++++++ fs/xfs/xfs_qm.c | 138 ----------------------------------------------- fs/xfs/xfs_qm.h | 15 ----- fs/xfs/xfs_qm_bhv.c | 18 ------ fs/xfs/xfs_super.c | 10 ++- fs/xfs/xfs_super.h | 8 +- fs/xfs/xfs_trans_dquot.c | 4 - 7 files changed, 49 insertions(+), 182 deletions(-) Index: xfs/fs/xfs/xfs_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_dquot.c 2012-02-01 12:37:45.280134045 +0100 +++ xfs/fs/xfs/xfs_dquot.c 2012-02-01 12:37:45.296800621 +0100 @@ -59,6 +59,9 @@ int xfs_dqreq_num; int xfs_dqerror_mod = 33; #endif +struct kmem_zone *xfs_qm_dqtrxzone; +static struct kmem_zone *xfs_qm_dqzone; + static struct lock_class_key xfs_dquot_other_class; /* @@ -71,7 +74,7 @@ xfs_qm_dqdestroy( ASSERT(list_empty(&dqp->q_lru)); mutex_destroy(&dqp->q_qlock); - kmem_zone_free(xfs_Gqm->qm_dqzone, dqp); + kmem_zone_free(xfs_qm_dqzone, dqp); XQM_STATS_DEC(xs_qm_dquots); } @@ -490,7 +493,7 @@ xfs_qm_dqread( int cancelflags = 0; - dqp = kmem_zone_zalloc(xfs_Gqm->qm_dqzone, KM_SLEEP); + dqp = kmem_zone_zalloc(xfs_qm_dqzone, KM_SLEEP); dqp->dq_flags = type; dqp->q_core.d_id = cpu_to_be32(id); @@ -1141,3 +1144,34 @@ xfs_dqflock_pushbuf_wait( out_lock: xfs_dqflock(dqp); } + +int __init +xfs_qm_init(void) +{ + xfs_qm_dqzone = + kmem_zone_init(sizeof(struct xfs_dquot), "xfs_dquot"); + if (!xfs_qm_dqzone) + goto out; + + xfs_qm_dqtrxzone = + kmem_zone_init(sizeof(struct xfs_dquot_acct), "xfs_dqtrx"); + if (!xfs_qm_dqtrxzone) + goto out_free_dqzone; + + xfs_qm_init_procfs(); + return 0; + +out_free_dqzone: + kmem_zone_destroy(xfs_qm_dqzone); +out: + return -ENOMEM; +} + +void __exit +xfs_qm_exit(void) +{ + xfs_qm_cleanup_procfs(); + + kmem_zone_destroy(xfs_qm_dqtrxzone); + kmem_zone_destroy(xfs_qm_dqzone); +} Index: xfs/fs/xfs/xfs_qm.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm.c 2012-02-01 12:37:45.280134045 +0100 +++ xfs/fs/xfs/xfs_qm.c 2012-02-01 12:37:45.000000000 +0100 @@ -42,133 +42,11 @@ #include "xfs_qm.h" #include "xfs_trace.h" -/* - * The global quota manager. There is only one of these for the entire - * system, _not_ one per file system. XQM keeps track of the overall - * quota functionality, including maintaining the freelist and hash - * tables of dquots. - */ -struct mutex xfs_Gqm_lock; -struct xfs_qm *xfs_Gqm; - -kmem_zone_t *qm_dqzone; -kmem_zone_t *qm_dqtrxzone; - STATIC int xfs_qm_init_quotainos(xfs_mount_t *); STATIC int xfs_qm_init_quotainfo(xfs_mount_t *); STATIC int xfs_qm_shake(struct shrinker *, struct shrink_control *); /* - * Initialize the XQM structure. - * Note that there is not one quota manager per file system. - */ -STATIC struct xfs_qm * -xfs_Gqm_init(void) -{ - xfs_qm_t *xqm; - - xqm = kmem_zalloc(sizeof(xfs_qm_t), KM_SLEEP); - - /* - * dquot zone. we register our own low-memory callback. - */ - if (!qm_dqzone) { - xqm->qm_dqzone = kmem_zone_init(sizeof(xfs_dquot_t), - "xfs_dquots"); - qm_dqzone = xqm->qm_dqzone; - } else - xqm->qm_dqzone = qm_dqzone; - - /* - * The t_dqinfo portion of transactions. - */ - if (!qm_dqtrxzone) { - xqm->qm_dqtrxzone = kmem_zone_init(sizeof(xfs_dquot_acct_t), - "xfs_dqtrx"); - qm_dqtrxzone = xqm->qm_dqtrxzone; - } else - xqm->qm_dqtrxzone = qm_dqtrxzone; - - xqm->qm_nrefs = 0; - return xqm; -} - -/* - * Destroy the global quota manager when its reference count goes to zero. - */ -STATIC void -xfs_qm_destroy( - struct xfs_qm *xqm) -{ - ASSERT(xqm != NULL); - ASSERT(xqm->qm_nrefs == 0); - - kmem_free(xqm); -} - -/* - * Called at mount time to let XQM know that another file system is - * starting quotas. This isn't crucial information as the individual mount - * structures are pretty independent, but it helps the XQM keep a - * global view of what's going on. - */ -/* ARGSUSED */ -STATIC int -xfs_qm_hold_quotafs_ref( - struct xfs_mount *mp) -{ - /* - * Need to lock the xfs_Gqm structure for things like this. For example, - * the structure could disappear between the entry to this routine and - * a HOLD operation if not locked. - */ - mutex_lock(&xfs_Gqm_lock); - - if (!xfs_Gqm) { - xfs_Gqm = xfs_Gqm_init(); - if (!xfs_Gqm) { - mutex_unlock(&xfs_Gqm_lock); - return ENOMEM; - } - } - - /* - * We can keep a list of all filesystems with quotas mounted for - * debugging and statistical purposes, but ... - * Just take a reference and get out. - */ - xfs_Gqm->qm_nrefs++; - mutex_unlock(&xfs_Gqm_lock); - - return 0; -} - - -/* - * Release the reference that a filesystem took at mount time, - * so that we know when we need to destroy the entire quota manager. - */ -/* ARGSUSED */ -STATIC void -xfs_qm_rele_quotafs_ref( - struct xfs_mount *mp) -{ - ASSERT(xfs_Gqm); - ASSERT(xfs_Gqm->qm_nrefs > 0); - - /* - * Destroy the entire XQM. If somebody mounts with quotaon, this'll - * be restarted. - */ - mutex_lock(&xfs_Gqm_lock); - if (--xfs_Gqm->qm_nrefs == 0) { - xfs_qm_destroy(xfs_Gqm); - xfs_Gqm = NULL; - } - mutex_unlock(&xfs_Gqm_lock); -} - -/* * Just destroy the quotainfo structure. */ void @@ -711,13 +589,6 @@ xfs_qm_init_quotainfo( ASSERT(XFS_IS_QUOTA_RUNNING(mp)); - /* - * Tell XQM that we exist as soon as possible. - */ - if ((error = xfs_qm_hold_quotafs_ref(mp))) { - return error; - } - qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP); /* @@ -823,17 +694,9 @@ xfs_qm_destroy_quotainfo( qi = mp->m_quotainfo; ASSERT(qi != NULL); - ASSERT(xfs_Gqm != NULL); unregister_shrinker(&qi->qi_shrinker); - /* - * Release the reference that XQM kept, so that we know - * when the XQM structure should be freed. We cannot assume - * that xfs_Gqm is non-null after this point. - */ - xfs_qm_rele_quotafs_ref(mp); - if (qi->qi_uquotaip) { IRELE(qi->qi_uquotaip); qi->qi_uquotaip = NULL; /* paranoia */ @@ -1392,7 +1255,6 @@ xfs_qm_quotacheck( * We must turn off quotas. */ ASSERT(mp->m_quotainfo != NULL); - ASSERT(xfs_Gqm != NULL); xfs_qm_destroy_quotainfo(mp); if (xfs_mount_reset_sbqflags(mp)) { xfs_warn(mp, Index: xfs/fs/xfs/xfs_qm.h =================================================================== --- xfs.orig/fs/xfs/xfs_qm.h 2012-02-01 12:37:45.280134045 +0100 +++ xfs/fs/xfs/xfs_qm.h 2012-02-01 12:37:45.300133937 +0100 @@ -23,13 +23,9 @@ #include "xfs_quota_priv.h" #include "xfs_qm_stats.h" -struct xfs_qm; struct xfs_inode; -extern struct mutex xfs_Gqm_lock; -extern struct xfs_qm *xfs_Gqm; -extern kmem_zone_t *qm_dqzone; -extern kmem_zone_t *qm_dqtrxzone; +extern struct kmem_zone *xfs_qm_dqtrxzone; /* * This defines the unit of allocation of dquots. @@ -43,15 +39,6 @@ extern kmem_zone_t *qm_dqtrxzone; #define XFS_DQUOT_CLUSTER_SIZE_FSB (xfs_filblks_t)1 /* - * Quota Manager (global) structure. Lives only in core. - */ -typedef struct xfs_qm { - uint qm_nrefs; /* file systems with quota on */ - kmem_zone_t *qm_dqzone; /* dquot mem-alloc zone */ - kmem_zone_t *qm_dqtrxzone; /* t_dqinfo of transactions */ -} xfs_qm_t; - -/* * Various quota information for individual filesystems. * The mount structure keeps a pointer to this. */ Index: xfs/fs/xfs/xfs_qm_bhv.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_bhv.c 2012-02-01 12:34:07.194648849 +0100 +++ xfs/fs/xfs/xfs_qm_bhv.c 2012-02-01 12:37:45.300133937 +0100 @@ -86,21 +86,3 @@ xfs_qm_statvfs( xfs_qm_dqput(dqp); } } - -void __init -xfs_qm_init(void) -{ - printk(KERN_INFO "SGI XFS Quota Management subsystem\n"); - mutex_init(&xfs_Gqm_lock); - xfs_qm_init_procfs(); -} - -void __exit -xfs_qm_exit(void) -{ - xfs_qm_cleanup_procfs(); - if (qm_dqzone) - kmem_zone_destroy(qm_dqzone); - if (qm_dqtrxzone) - kmem_zone_destroy(qm_dqtrxzone); -} Index: xfs/fs/xfs/xfs_trans_dquot.c =================================================================== --- xfs.orig/fs/xfs/xfs_trans_dquot.c 2012-02-01 12:34:07.204648795 +0100 +++ xfs/fs/xfs/xfs_trans_dquot.c 2012-02-01 12:37:45.300133937 +0100 @@ -876,7 +876,7 @@ STATIC void xfs_trans_alloc_dqinfo( xfs_trans_t *tp) { - tp->t_dqinfo = kmem_zone_zalloc(xfs_Gqm->qm_dqtrxzone, KM_SLEEP); + tp->t_dqinfo = kmem_zone_zalloc(xfs_qm_dqtrxzone, KM_SLEEP); } void @@ -885,6 +885,6 @@ xfs_trans_free_dqinfo( { if (!tp->t_dqinfo) return; - kmem_zone_free(xfs_Gqm->qm_dqtrxzone, tp->t_dqinfo); + kmem_zone_free(xfs_qm_dqtrxzone, tp->t_dqinfo); tp->t_dqinfo = NULL; } Index: xfs/fs/xfs/xfs_super.c =================================================================== --- xfs.orig/fs/xfs/xfs_super.c 2012-02-01 12:34:07.214648740 +0100 +++ xfs/fs/xfs/xfs_super.c 2012-02-01 12:37:45.303467252 +0100 @@ -1652,13 +1652,17 @@ init_xfs_fs(void) if (error) goto out_cleanup_procfs; - vfs_initquota(); + error = xfs_qm_init(); + if (error) + goto out_sysctl_unregister; error = register_filesystem(&xfs_fs_type); if (error) - goto out_sysctl_unregister; + goto out_qm_exit; return 0; + out_qm_exit: + xfs_qm_exit(); out_sysctl_unregister: xfs_sysctl_unregister(); out_cleanup_procfs: @@ -1680,7 +1684,7 @@ init_xfs_fs(void) STATIC void __exit exit_xfs_fs(void) { - vfs_exitquota(); + xfs_qm_exit(); unregister_filesystem(&xfs_fs_type); xfs_sysctl_unregister(); xfs_cleanup_procfs(); Index: xfs/fs/xfs/xfs_super.h =================================================================== --- xfs.orig/fs/xfs/xfs_super.h 2012-02-01 12:34:07.231315317 +0100 +++ xfs/fs/xfs/xfs_super.h 2012-02-01 12:37:45.303467252 +0100 @@ -21,13 +21,11 @@ #include #ifdef CONFIG_XFS_QUOTA -extern void xfs_qm_init(void); +extern int xfs_qm_init(void); extern void xfs_qm_exit(void); -# define vfs_initquota() xfs_qm_init() -# define vfs_exitquota() xfs_qm_exit() #else -# define vfs_initquota() do { } while (0) -# define vfs_exitquota() do { } while (0) +# define xfs_qm_init() (0) +# define xfs_qm_exit() do { } while (0) #endif #ifdef CONFIG_XFS_POSIX_ACL From eflorac@intellique.com Wed Feb 1 08:31:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11EV6l2254693 for ; Wed, 1 Feb 2012 08:31:08 -0600 X-ASG-Debug-ID: 1328106662-04cbb01fb54ecb90001-NocioJ Received: from smtp4-g21.free.fr (smtp4-g21.free.fr [212.27.42.4]) by cuda.sgi.com with ESMTP id ye1kreNPeIDCAub8 for ; Wed, 01 Feb 2012 06:31:04 -0800 (PST) X-Barracuda-Envelope-From: eflorac@intellique.com X-Barracuda-Apparent-Source-IP: 212.27.42.4 Received: from harpe.intellique.com (unknown [82.225.196.72]) by smtp4-g21.free.fr (Postfix) with ESMTP id 2AE194C82AA; Wed, 1 Feb 2012 15:30:58 +0100 (CET) Date: Wed, 1 Feb 2012 15:31:00 +0100 From: Emmanuel Florac To: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) Cc: Linux fs XFS Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120201153100.41d1586d@harpe.intellique.com> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <20265.12473.715630.925704@tree.ty.sabi.co.UK> References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131120859.1f1d6a17@harpe.intellique.com> <20265.12473.715630.925704@tree.ty.sabi.co.UK> Organization: Intellique X-Mailer: Claws Mail 3.7.9 (GTK+ 2.16.6; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp4-g21.free.fr[212.27.42.4] X-Barracuda-Start-Time: 1328106663 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Le Wed, 1 Feb 2012 12:31:53 +0000 pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) =E9crivait: > In that case I eliminated all but the root filetree VM disks and > replaced them with filetrees exported via NFS from XFS on the > underlying VM host itself (that is not over the network). >=20 > This improved performance tremendously (in part because in most VM > layers virtual NICs are more efficient than virtual disk adapters) > but in particular much faster check/repair and much reduced crazy > latencies during backups, because I could run check/repair and the > backups *on the real machine*, where XFS performed a lot better > without the VM overheads and "skewed" latencies. >=20 Thank you for all the good info. To add a last note, I use iSCSI to export lvm LVs to VMs from the host, and it works fine. Exporting files living on an XFS works well enough, too, though slightly slower. It can be useful particularly for windows VM, because many windows app really behave poorly with network shares (or refuse to use them altogether). --=20 ------------------------------------------------------------------------ Emmanuel Florac | Direction technique | Intellique | | +33 1 78 94 84 02 ------------------------------------------------------------------------ From bpm@sgi.com Wed Feb 1 12:33:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11IXe1X003396 for ; Wed, 1 Feb 2012 12:33:40 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id A70C8AC002; Wed, 1 Feb 2012 10:33:36 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 76D93426DA7; Wed, 1 Feb 2012 12:33:40 -0600 (CST) Date: Wed, 1 Feb 2012 12:33:40 -0600 From: Ben Myers To: Dave Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH 1/2] xfs: clean up minor sparse warnings Message-ID: <20120201183340.GG13095@sgi.com> References: <1324426062-21505-1-git-send-email-david@fromorbit.com> <1324426062-21505-2-git-send-email-david@fromorbit.com> <20111221161349.GB7001@infradead.org> <20111221235904.GH23662@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111221235904.GH23662@dastard> User-Agent: Mutt/1.5.18 (2008-05-17) Hey Dave, On Thu, Dec 22, 2011 at 10:59:04AM +1100, Dave Chinner wrote: > On Wed, Dec 21, 2011 at 11:13:50AM -0500, Christoph Hellwig wrote: > > > diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c > > > index d99a905..2f3f56a 100644 > > > --- a/fs/xfs/xfs_ioctl.c > > > +++ b/fs/xfs/xfs_ioctl.c > > > @@ -230,24 +230,22 @@ xfs_open_by_handle( > > > > > > /* Put open permission in namei format. */ > > > permflag = hreq->oflags; > > > - if ((permflag+1) & O_ACCMODE) > > > - permflag++; > > > if (permflag & O_TRUNC) > > > - permflag |= 2; > > > + permflag |= O_RDWR; > > > > > > if ((!(permflag & O_APPEND) || (permflag & O_TRUNC)) && > > > - (permflag & FMODE_WRITE) && IS_APPEND(inode)) { > > > + (OPEN_FMODE(permflag) & FMODE_WRITE) && IS_APPEND(inode)) { > > > error = -XFS_ERROR(EPERM); > > > goto out_dput; > > > } > > > > > > - if ((permflag & FMODE_WRITE) && IS_IMMUTABLE(inode)) { > > > + if ((OPEN_FMODE(permflag) & FMODE_WRITE) && IS_IMMUTABLE(inode)) { > > > error = -XFS_ERROR(EACCES); > > > goto out_dput; > > > } > > > > > > /* Can't write directories. */ > > > - if (S_ISDIR(inode->i_mode) && (permflag & FMODE_WRITE)) { > > > + if (S_ISDIR(inode->i_mode) && (OPEN_FMODE(permflag) & FMODE_WRITE)) { > > > error = -XFS_ERROR(EISDIR); > > > goto out_dput; > > > } > > > > I think this one is complicated enough that is deserves a separate > > patch and a better description. > > Ok, I've also just found a problem with it(*) so I'll separate it > and resend when I've fixed it. Did you resend this? Thanks, Ben From tinguely@sgi.com Wed Feb 1 13:24:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_35, J_CHICKENPOX_52,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11JOo0x005337 for ; Wed, 1 Feb 2012 13:24:50 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8934D30404E; Wed, 1 Feb 2012 11:24:47 -0800 (PST) Message-ID: <4F299182.7010606@sgi.com> Date: Wed, 01 Feb 2012 13:24:50 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: jeff.liu@oracle.com CC: xfs@oss.sgi.com, Christoph Hellwig Subject: Re: [PATCH] xfstests: Introduce a new SEEK_DATA/SEEK_HOLE tester References: <4EFC6BC6.6020405@oracle.com> In-Reply-To: <4EFC6BC6.6020405@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/-10/63 13:59, Jeff Liu wrote: > Hello, > > This is another SEEK_DATA/SEEK_HOLE tester which is intended to cover multiple extents checking. > I have ran it against btrfs to ensure the tester works, and ran it against XFS to ensure the SEEK_DATA/SEEK_HOLE patch works too. > > diff --git a/src/seek_copy_tester.c b/src/seek_copy_tester.c > new file mode 100755 > index 0000000..4971f34 > --- /dev/null > +++ b/src/seek_copy_tester.c > @@ -0,0 +1,674 @@ Do you want to add Author/Copyright and description? > +#include > +#include > +#include > +#include ... > +int > +full_write(int fd, const void *buf, size_t count) > +{ > + int ret = 0; > + const char *ptr = (const char *) buf; > + > + while (count> 0) { > + ssize_t n = write(fd, ptr, count); > + if (n< 0) { > + if (errno == EINTR) > + continue; > + error("full_write failed as %s", strerror(errno)); > + ret = -1; > + break; > + } > + > + if (n == 0) > + break; Callers of this routine expect the count number of bytes to be written. Write a message if leaving this routine early? An error? > + > + ptr += n; > + count -= n; > + } > + > + return ret; > +} ... > +int > +create_data_and_holes(int fd, size_t nr_total_bytes, off_t start_offset, > + uint64_t nr_skip_bytes, uint64_t nr_data_bytes, > + int wrote_hole_at_eof) > +{ > + int ret = 0; > + off_t total = nr_total_bytes; > + off_t data_len = nr_data_bytes; > + off_t off = start_offset; > + char buf[4096]; > + > + memset(buf, 'A', sizeof(buf)); > + > + total -= start_offset; > + while (total> 0) { > + do { You can actually write more than total byte on the last data write. If writing exact total is important, then give do_pwrite() the count: cnt = MIN(total, sizeof(buf)) > + ssize_t nr_write = do_pwrite(fd, buf, sizeof(buf), off); > + if (nr_write< 0) { > + error("do_pwrite() failed as %s", strerror(errno)); > + ret = -1; > + goto out; > + } > + if (nr_write == 0) > + break; > + do_pwrite will return 0 if not an error. > + off += nr_write; > + data_len -= nr_write; These are probably sizeof(buf0 or my cnt not nr_write > + } while (data_len> 0); > + > + off += (nr_skip_bytes + nr_data_bytes); > + total -= off; ... > + > +/* > + * Copy a data extent from source file to dest file. > + * @data_off: data offset > + * @hole_off: hole offset > + * The length of this extent is (hole_off - data_off). > + */ > +int > +do_extent_copy(int src_fd, int dest_fd, off_t data_off, off_t hole_off) > +{ > + uint64_t len = (uint64_t)(hole_off - data_off); > + char buf[BUF_SIZE]; > + int ret; > + > + /* Seek to data_off for data reading */ > + ret = lseek(src_fd, data_off, SEEK_SET); > + if (ret< 0) { > + error("seek source file to %llu failed as %s", > + (uint64_t)data_off, strerror(errno)); > + return ret; > + } > + > + /* Seek to data_off for data writing, make holes as well */ > + ret = lseek(dest_fd, data_off, SEEK_SET); > + if (ret< 0) { > + error("seek dest file to %llu failed as %s", > + (uint64_t)data_off, strerror(errno)); > + return ret; > + } > + > + while (len> 0) { > + memset(buf, 0, sizeof(buf)); > + ssize_t n_read = read(src_fd, buf, BUF_SIZE); > + if (n_read< 0) { > + if (errno == EINTR) > + continue; > + > + error("read source file extent failed as %s", > + strerror(errno)); > + return n_read; > + } > + > + if (n_read == 0) > + break; Message? Error? --Mark Tinguely From greg@kroah.com Wed Feb 1 15:08:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64, T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11L8oCg009382 for ; Wed, 1 Feb 2012 15:08:51 -0600 X-ASG-Debug-ID: 1328130529-04bdf075164c5600001-NocioJ Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by cuda.sgi.com with ESMTP id jw7rrvGQnFF7Uecr (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 13:08:49 -0800 (PST) X-Barracuda-Envelope-From: greg@kroah.com X-Barracuda-Apparent-Source-IP: 66.111.4.25 Received: from compute2.internal (compute2.nyi.mail.srv.osa [10.202.2.42]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id 3F1BB21219 for ; Wed, 1 Feb 2012 16:08:49 -0500 (EST) Received: from frontend1.nyi.mail.srv.osa ([10.202.2.160]) by compute2.internal (MEProxy); Wed, 01 Feb 2012 16:08:49 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=message-id:date:from:to:cc:subject :in-reply-to; s=smtpout; bh=4wFk5XtZfCwZlFvoVPK3gN4ET9M=; b=CZUS ZNYdcG4SAIx3LQCLJUFc89JH//Eo+gUqs9e2JW3jLheqOzZ4su56P2D+vXgMdJRO Z3A4p+sW6UvAvI7I1RxvqkyZB7QoQuSnsmvCHfTU3miXABqRQ89yFGeKwu9ztwb6 QMDa++7rYvLPbMaerhILT2+9U3YP4Wxd4AY1c4A= X-Sasl-enc: An05Yg/J+V2T9RdFrqP62mAiBJVeyUDvkL7WYtjIHEAp 1328130528 Received: from localhost (c-76-121-69-168.hsd1.wa.comcast.net [76.121.69.168]) by mail.messagingengine.com (Postfix) with ESMTPSA id BC0868E00A5; Wed, 1 Feb 2012 16:08:48 -0500 (EST) X-Mailbox-Line: From gregkh@clark.kroah.org Wed Feb 1 12:57:38 2012 Message-Id: <20120201205738.890000901@clark.kroah.org> User-Agent: quilt/0.51-15.1 Date: Wed, 01 Feb 2012 12:55:56 -0800 From: Greg KH To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Dave Chinner , Christoph Hellwig Subject: [16/65] xfs: fix endian conversion issue in discard code In-Reply-To: <20120201210236.GA25966@kroah.com> X-ASG-Orig-Subj: [16/65] xfs: fix endian conversion issue in discard code X-Barracuda-Connect: out1-smtp.messagingengine.com[66.111.4.25] X-Barracuda-Start-Time: 1328130529 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87328 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 3.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Dave Chinner commit b1c770c273a4787069306fc82aab245e9ac72e9d upstream When finding the longest extent in an AG, we read the value directly out of the AGF buffer without endian conversion. This will give an incorrect length, resulting in FITRIM operations potentially not trimming everything that it should. Note, for 3.0-stable this has been modified to apply to fs/xfs/linux-2.6/xfs_discard.c instead of fs/xfs/xfs_discard.c. -bpm Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers Signed-off-by: Greg Kroah-Hartman --- fs/xfs/linux-2.6/xfs_discard.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/fs/xfs/linux-2.6/xfs_discard.c +++ b/fs/xfs/linux-2.6/xfs_discard.c @@ -68,7 +68,7 @@ xfs_trim_extents( * Look up the longest btree in the AGF and start with it. */ error = xfs_alloc_lookup_le(cur, 0, - XFS_BUF_TO_AGF(agbp)->agf_longest, &i); + be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest), &i); if (error) goto out_del_cursor; @@ -84,7 +84,7 @@ xfs_trim_extents( if (error) goto out_del_cursor; XFS_WANT_CORRUPTED_GOTO(i == 1, out_del_cursor); - ASSERT(flen <= XFS_BUF_TO_AGF(agbp)->agf_longest); + ASSERT(flen <= be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest)); /* * Too small? Give up. From david@fromorbit.com Wed Feb 1 15:13:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11LDVuL009507 for ; Wed, 1 Feb 2012 15:13:31 -0600 X-ASG-Debug-ID: 1328130808-04bdf075194c5ac0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id HLostbPeglJ5kEIo; Wed, 01 Feb 2012 13:13:28 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAEqqKU95LD+b/2dsb2JhbABDrn2BBoFyAQEFJxMcIxAIAw4KLhQlAyETwCgTiyUCAgkFDAcGAQsBCAUDAwkGBA8DAwGEHQEDAQQMEoM5BJUgkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Feb 2012 07:43:28 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RshUc-0001CU-Pk; Thu, 02 Feb 2012 08:13:26 +1100 Date: Thu, 2 Feb 2012 08:13:26 +1100 From: Dave Chinner To: Christoph Hellwig Cc: Dan Carpenter , xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: remove an unneeded NULL check Message-ID: <20120201211326.GU9090@dastard> X-ASG-Orig-Subj: Re: [patch] xfs: remove an unneeded NULL check References: <20120128105501.GB25092@elgon.mountain> <20120131225601.GQ9090@dastard> <20120201104500.GA13672@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120201104500.GA13672@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328130808 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87328 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Feb 01, 2012 at 05:45:01AM -0500, Christoph Hellwig wrote: > On Wed, Feb 01, 2012 at 09:56:01AM +1100, Dave Chinner wrote: > > > /* lock out background commit */ > > > down_read(&log->l_cilp->xc_ctx_lock); > > > - if (commit_lsn) > > > - *commit_lsn = log->l_cilp->xc_ctx->sequence; > > > + *commit_lsn = log->l_cilp->xc_ctx->sequence; > > > > > > xlog_cil_insert_items(log, log_vector, tp->t_ticket); > > > > There's a set of reviewed patches (for 3.3) that change all this > > code. The null check might still be there, but that needs to be > > checked. > > Which series is that? I mut have to admit I've lost track by now. The removal of all the old log code. Cheers, Dave. -- Dave Chinner david@fromorbit.com From BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org Wed Feb 1 15:15:51 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11LFo6m009583 for ; Wed, 1 Feb 2012 15:15:51 -0600 X-ASG-Debug-ID: 1328130946-04bdf075164c5ce0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 75hYU7gsX2dveG9z (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 Feb 2012 13:15:47 -0800 (PST) X-Barracuda-Envelope-From: BATV+173f961978f75518cd23+3083+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RshWm-0000wp-Rm; Wed, 01 Feb 2012 21:15:40 +0000 Date: Wed, 1 Feb 2012 16:15:40 -0500 From: Christoph Hellwig To: Dave Chinner Cc: Christoph Hellwig , Dan Carpenter , xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: remove an unneeded NULL check Message-ID: <20120201211540.GA3619@infradead.org> X-ASG-Orig-Subj: Re: [patch] xfs: remove an unneeded NULL check References: <20120128105501.GB25092@elgon.mountain> <20120131225601.GQ9090@dastard> <20120201104500.GA13672@infradead.org> <20120201211326.GU9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120201211326.GU9090@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328130947 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87328 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Thu, Feb 02, 2012 at 08:13:26AM +1100, Dave Chinner wrote: > > > There's a set of reviewed patches (for 3.3) that change all this > > > code. The null check might still be there, but that needs to be > > > checked. > > > > Which series is that? I mut have to admit I've lost track by now. > > The removal of all the old log code. That stuff actually still went into 3.3-rc1. From pg_mh@V01.sabi.co.uk Wed Feb 1 16:20:49 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11MKl61012838 for ; Wed, 1 Feb 2012 16:20:48 -0600 X-ASG-Debug-ID: 1328134839-04bdf075194c9780001-NocioJ Received: from woodbine.london.02.net (woodbine.london.02.net [87.194.255.145]) by cuda.sgi.com with ESMTP id ATY7eHAvDO2eUPNX for ; Wed, 01 Feb 2012 14:20:41 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.145 Received: from ty.sabi.co.UK (87.194.99.40) by woodbine.london.02.net (8.5.140) id 4EEB647400D09C73 for xfs@oss.sgi.com; Wed, 1 Feb 2012 22:20:39 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1RsiXU-0001GS-5j for ; Wed, 01 Feb 2012 22:20:28 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Message-ID: <20265.47788.31216.173521@tree.ty.sabi.co.UK> Date: Wed, 1 Feb 2012 22:20:28 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <20120201153100.41d1586d@harpe.intellique.com> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131120859.1f1d6a17@harpe.intellique.com> <20265.12473.715630.925704@tree.ty.sabi.co.UK> <20120201153100.41d1586d@harpe.intellique.com> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: woodbine.london.02.net[87.194.255.145] X-Barracuda-Start-Time: 1328134841 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87332 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- >>> [ ... ] my impression is that EC2 is fine for whatever >>> doesn't need any QoS. Prototyping, for instance. [ ... ] >> [ ... ] *performance* (or the *reliability*) of a single >> element is less important, at least compared to the ability >> to throw a lot of cheap ones at a problem. BTW, here I am not implying that EC2 allows one to =ABthrow a lot of cheap ones at a problem=BB, because the published "retail" price list is fairly expensive. But I guess that if one wants to buy =ABa lot=BB of VMs as bulk purchase Amazon can do a deal. >> In that case I eliminated all but the root filetree VM disks >> and replaced them with filetrees exported via NFS from XFS on >> the underlying VM host itself (that is not over the network). >> [ ... ] because I could run check/repair and the backups *on >> the real machine*, where XFS performed a lot better without >> the VM overheads and "skewed" latencies. > [ ... ] iSCSI to export lvm LVs to VMs from the host, and it > works fine. Exporting files living on an XFS works well > enough, too, though slightly slower. iSCSI is a good alternative because it uses the better NIC emulation in most VM layers, but I think that NFS is really a better alternative overall, if suitable, because it gives the inestimable option of running all the heavy hitting "maintenance" stuff on the server itself, without any overheads, while otherwise you must run it inside each VM. Even if NFS has three problems that iSCSI does not have: * It is a bit of a not awesome network filesystem, with a number of limitations, but NFSv4 seems Oki-ish. * It has a reputation of not playing that well with NFS, but IIRC the stack issues happen only on 32b systems. * While the server side is fairly good performance in Linux, the NFS client in Linux has some non trivial performance issues. The problem is that there aren't much better network filesystems around. Samba/SMB have a particularly rich and well done Linux implementation, and are fully POSIX compatible, but performance can be disappointing with the client in older kernels. A number of sires have been discovering Gluster, and now that it is a Red Hat product I guess we will here more of it especially in relation to XFS. BTW an attractive alternative to my usual favorite filesystems, JFS and XFS, is the somewhat underestimated OCFS2, which is well-maintained, and which can work pretty well in standalone more, but also in share-disk mode, and that might be useful with iSCSI to do backups etc. on another system than the client VM, for example the server itself. Also, an alternative to VMs is often using the pretty good Linux-VServer.org "containers" (extended 'chroot's in effect), which have zero overheads and where the only limitation is that all "containers" must share the same running kernel, and can share the same filesystem like exporting from NFS but without the networking overhead. Xen (or UML) style paravirtualization is next best (no need to emulate complicated "real" devices). > It can be useful particularly for windows VM, because many > windows app really behave poorly with network shares (or > refuse to use them altogether). That's a good point, and then one can also use the iSCSI daemon on Linux to turn into a SAN server, but I guess you been there and done that. From david@fromorbit.com Wed Feb 1 17:16:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11NG9XR015294 for ; Wed, 1 Feb 2012 17:16:10 -0600 X-ASG-Debug-ID: 1328138166-04bdf075174cc330001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id qQd2zAk3LrvQRlVi; Wed, 01 Feb 2012 15:16:07 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAILGKU95LD+b/2dsb2JhbABDrwGBBoFyAQEFOhwjEAgDDgouFCUDIRPALBOLPAICCQUMBwYBCwEIBQMDCQYEDwMDAYQdAQMBBAwSgzkElSCSaQ Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Feb 2012 09:46:06 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RsjPI-0001df-RA; Thu, 02 Feb 2012 10:16:04 +1100 Date: Thu, 2 Feb 2012 10:16:04 +1100 From: Dave Chinner To: Christoph Hellwig Cc: Dan Carpenter , xfs-masters@oss.sgi.com, Ben Myers , Alex Elder , kernel-janitors@vger.kernel.org, xfs@oss.sgi.com Subject: Re: [patch] xfs: remove an unneeded NULL check Message-ID: <20120201231604.GV9090@dastard> X-ASG-Orig-Subj: Re: [patch] xfs: remove an unneeded NULL check References: <20120128105501.GB25092@elgon.mountain> <20120131225601.GQ9090@dastard> <20120201104500.GA13672@infradead.org> <20120201211326.GU9090@dastard> <20120201211540.GA3619@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120201211540.GA3619@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328138166 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87335 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Feb 01, 2012 at 04:15:40PM -0500, Christoph Hellwig wrote: > On Thu, Feb 02, 2012 at 08:13:26AM +1100, Dave Chinner wrote: > > > > There's a set of reviewed patches (for 3.3) that change all this > > > > code. The null check might still be there, but that needs to be > > > > checked. > > > > > > Which series is that? I mut have to admit I've lost track by now. > > > > The removal of all the old log code. > > That stuff actually still went into 3.3-rc1. Hmmm. That means my cscope trees are not automatically updating properly for some reason. That's my problem, sorry for the noise. Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Feb 1 17:55:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q11NtAq7018044 for ; Wed, 1 Feb 2012 17:55:10 -0600 X-ASG-Debug-ID: 1328140508-04cbb01fb2520890001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id AHXgIJ59GJ3PsNIO for ; Wed, 01 Feb 2012 15:55:08 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAJPNKU95LD+b/2dsb2JhbABDrwKBBoFyAQEEATIBIyMFCwgDDgouFCUDIROHfLgnE4s2AQQDAg0CBwcEBgELAQgFAwMJBgQPBoQeAQMBBBgCgz0ElSCSaQ Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Feb 2012 10:25:07 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rsk0z-0001hd-Ay; Thu, 02 Feb 2012 10:55:01 +1100 Date: Thu, 2 Feb 2012 10:55:01 +1100 From: Dave Chinner To: Peter Grandi Cc: Linux fs XFS Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120201235501.GX9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131205014.GM9090@dastard> <4F288561.5040803@hardwarefreak.com> <20265.9379.139218.148520@tree.ty.sabi.co.UK> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20265.9379.139218.148520@tree.ty.sabi.co.UK> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328140508 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87339 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Feb 01, 2012 at 11:40:19AM +0000, Peter Grandi wrote: > [ ... ] > > >>> We are using Amazon EC2 instances. > > >>> [ ... ] one of the the worst possible platforms for XFS. > > >> I don't agree with you there. If the workload works best on > >> XFs, it doesn't matter what the underlying storage device is. > >> e.g. if it's a fsync heavy workload, it will still perform > >> better on XFS on EC2 than btrfs on EC2... > > There are special cases, but «fsync heavy» is a bit of bad > example. It's actually a really good example of where XFS will be better than other filesystems. Why? Because XFS does less log IO due to aggregation of log writes during concurrent fsyncs. The more latency there is on a log write, the more aggregation that occurs. On a platform where the IO subsystem is going to give you unpredictable IO latencies, that's exactly what want. Sure, it was designed to optimise spinning rust performance, but that same design is also optimal for virtual devices with unpredictable IO latency... > In general file system designs are not at all independent of the > expected storage platform, and some designs are far better than > others for specific storage platforms, and viceversa. Sure, but filesystems also have inherent capabilities that are independent of the underlying storage. In these cases, the underlying storage really doesn't matter if the filesystem can't do what the application needs. Allocation parallelism, CPU parallelism, minimal concurrent fsync latency, etc are all characteristics of filesystems that are independent of the underlying storage. If you need those characteristics in your remotely hosted VMs, then XFS is what you want regardless of how much storage capability you buy for those VMs.... Cheers, Dave. -- Dave Chinner david@fromorbit.com From david@fromorbit.com Wed Feb 1 18:26:12 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q120QCZX020014 for ; Wed, 1 Feb 2012 18:26:12 -0600 X-ASG-Debug-ID: 1328142370-04cb6c225e4000c0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id OfxkbhGHn2dA0CBj for ; Wed, 01 Feb 2012 16:26:10 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAIDUKU95LD+b/2dsb2JhbABCrwKBBoFyAQEEATocKAsIAxguFCUDNId8uDQTizwCAgkFDAcGAQsBCAUDAwkGBA8GhB4BAwEEDgoCBwEBGIMcBJUgkmk Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 02 Feb 2012 10:56:09 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1RskV6-0001lH-6m for xfs@oss.sgi.com; Thu, 02 Feb 2012 11:26:08 +1100 Date: Thu, 2 Feb 2012 11:26:08 +1100 From: Dave Chinner To: xfs@oss.sgi.com Subject: Re: xfs task blocked for more than 120 seconds Message-ID: <20120202002608.GY9090@dastard> X-ASG-Orig-Subj: Re: xfs task blocked for more than 120 seconds References: <20120130002026.GG10174@sli.dy.fi> <20120130010530.GI15102@dastard> <2504_1327964557_4F27218D_2504_92_2_20120130223527.GH10174@sli.dy.fi> <20120131233034.GK10174@sli.dy.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131233034.GK10174@sli.dy.fi> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328142370 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87341 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Feb 01, 2012 at 01:30:34AM +0200, Sami Liedes wrote: > On Tue, Jan 31, 2012 at 12:35:28AM +0200, Sami Liedes wrote: > > The workloads do eventually complete. I tried the tar extraction again > > but this time extracting the tar from a different disk and saw no such > > warnings (and the time taken seems reasonable at 96 minutes). > > Extracting a 105 GB tar that resides on the same (target) XFS > partition on an otherwise idle disk does trigger warnings, but only > for kworker, not the tar process. The time taken to extract was a > reasonable-sounding 140 minutes, so maybe these are just harmless > warnings. It is indicating that superblock IO is taking more than 120s to complete. That's an indication that the IO subsystem is not throttling the IO queue (and so queuing up minutes worth of IO) or not processing the IO queue in a fair/timely manner. IO should never take more than a couple of seconds to complete unless there is something wrong, so the warnings are quite valid at the default timeout of 120s.... I'd suggest reporting the problem to the dm-crypt folks and see if they have any ideas on why IO completion is taking so long. > Perhaps something should/could be done to silence them in > that case? You can turn the hangcheck timer off or adjust it's timeout yourself via these proc files: $ ls /proc/sys/kernel/ |grep hung hung_task_check_count hung_task_panic hung_task_timeout_secs hung_task_warnings Cheers, Dave. -- Dave Chinner david@fromorbit.com From kdasu.kdev@gmail.com Wed Feb 1 18:44:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_22,J_CHICKENPOX_45,J_CHICKENPOX_46,J_CHICKENPOX_47, J_CHICKENPOX_48,J_CHICKENPOX_52,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q120iIHe020905 for ; Wed, 1 Feb 2012 18:44:19 -0600 X-ASG-Debug-ID: 1328143454-04cb6c225f400de0001-NocioJ Received: from mail-qw0-f53.google.com (mail-qw0-f53.google.com [209.85.216.53]) by cuda.sgi.com with ESMTP id fjqmcdPL36Bxv8Ot (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 01 Feb 2012 16:44:14 -0800 (PST) X-Barracuda-Envelope-From: kdasu.kdev@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.53 Received: by qafk1 with SMTP id k1so1444553qaf.5 for ; Wed, 01 Feb 2012 16:44:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; bh=iX6SaFmQ7tf4Pl6F63CvNoaFpW/6jo7W6gOWDivtBfs=; b=tbazOT2QcCU3NP21bh0B+bAQZOKWSrTRO4u5E9eikEvOYihcMMhnTewNqGzrzVuZh/ 63gTFOmE+8LcXl1D5zeZUqS8ZX7oIwqtDxjHdn7ruPuDxYBpivLGxyUD3H0sezm5DVUe nuRBOLC39fitL3z/dWa32H8q0QBAV+Mk0dRGE= MIME-Version: 1.0 Received: by 10.224.203.67 with SMTP id fh3mr1444571qab.13.1328143454035; Wed, 01 Feb 2012 16:44:14 -0800 (PST) Received: by 10.229.8.4 with HTTP; Wed, 1 Feb 2012 16:44:13 -0800 (PST) Date: Wed, 1 Feb 2012 19:44:13 -0500 Message-ID: Subject: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume From: Kamal Dasu X-ASG-Orig-Subj: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume To: xfs@oss.sgi.com Cc: cernekee@gmail.com Content-Type: multipart/mixed; boundary=20cf300fb08dc9dd3004b7f07e2a X-Barracuda-Connect: mail-qw0-f53.google.com[209.85.216.53] X-Barracuda-Start-Time: 1328143454 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87341 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature --20cf300fb08dc9dd3004b7f07e2a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Need some help understanding the state of xfs with rt subvolume support on 2.6.37. When using xfs rt subvolume on a harddisk partition with kernel 2.6.37.6,and normal r/w/delete file operations=A0 causes deadlock like hangs .=A0 Failure=A0 symptoms are lockups and mount failure on reboot= . On further investigation it was found that one of the changes could be the cause. The same tests seem to pass with xfs in 2.6.31 kernel. xfs: simplify xfs_trans_iget=A0 : aa72a5cf00001d0b952c7c755be404b9118ceb2e http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3Dcom= mitdiff;h=3Daa72a5cf00001d0b952c7c755be404b9118ceb2e Reverting the change and forward porting to the xfs_trans_inode() seems to get rid of the deadlock and mount issues . Below is the change Signed-off-by: Kamal Dasu --- =A0linux-2.6.37/fs/xfs/xfs_trans_inode.c |=A0=A0 21 +++++++++++++++++++++ =A01 files changed, 21 insertions(+), 0 deletions(-) diff --git a/linux-2.6.37/fs/xfs/xfs_trans_inode.c b/linux-2.6.37/fs/xfs/xfs_trans_inode.c index ccb3453..c2861d5 100644 --- a/stblinux-2.6.37/fs/xfs/xfs_trans_inode.c +++ b/stblinux-2.6.37/fs/xfs/xfs_trans_inode.c @@ -56,6 +56,27 @@ xfs_trans_iget( =A0=A0=A0=A0=A0=A0=A0 xfs_inode_t=A0=A0=A0=A0 **ipp) =A0{ =A0=A0=A0=A0=A0=A0=A0 int=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 error; +=A0=A0=A0=A0=A0=A0 xfs_inode_t=A0=A0=A0=A0 *ip =3D NULL; +=A0=A0=A0=A0=A0=A0 xfs_perag_t=A0=A0=A0=A0 *pag =3D NULL; + +=A0=A0=A0=A0=A0=A0 /* +=A0=A0=A0=A0=A0=A0 * If we find the inode in core with this transaction +=A0=A0=A0=A0=A0=A0 * pointer in its i_transp field, then we know we alread= y +=A0=A0=A0=A0=A0=A0 * have it locked. +=A0=A0=A0=A0=A0=A0 */ +=A0=A0=A0=A0=A0=A0 if(tp !=3D NULL) { +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 pag =3D xfs_perag_get(mp,=A0 XF= S_INO_TO_AGNO(mp, ino)); +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 read_lock(&pag->pag_ici_lock); +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ip =3D radix_tree_lookup(&pag->= pag_ici_root, XFS_INO_TO_AGNO(mp, ino)); +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 read_unlock(&pag->pag_ici_lock)= ; +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 xfs_perag_put(pag); +=A0=A0=A0=A0=A0=A0 } + +=A0=A0=A0=A0=A0=A0 /* the returned inode must match the transaction */ +=A0=A0=A0=A0=A0=A0 if (ip && (ip->i_transp =3D=3D tp)) { +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 *ipp =3D ip; +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return 0; +=A0=A0=A0=A0=A0=A0 } =A0=A0=A0=A0=A0=A0=A0 error =3D xfs_iget(mp, tp, ino, flags, lock_flags, ip= p); =A0=A0=A0=A0=A0=A0=A0 if (!error && tp) { -- 1.7.6 I have also attached the xfs_logprint text output when the mount fails. Regards Kamal --20cf300fb08dc9dd3004b7f07e2a Content-Type: text/plain; charset=US-ASCII; name="xfslog-2.6.37.6-mount-fail.txt" Content-Disposition: attachment; filename="xfslog-2.6.37.6-mount-fail.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gy528zxc1 eGZzX2xvZ3ByaW50OgogICAgZGF0YSBkZXZpY2U6IDB4ODAyCiAgICBsb2cgZGV2aWNlOiAweDgw MiBkYWRkcjogMTU3MzU2OTYgbGVuZ3RoOiAyMDQ4MAoKICAgIGxvZyB0YWlsOiA2MSBoZWFkOiAz NjAgc3RhdGU6IDxESVJUWT4KCgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDYxICgweDEs IDB4M2QpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGIyMTI0ZGZhICB0eXBlOlNF VEFUVFIgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoy IGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0NjlhMDggbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBp bm86MHgxMDAwMDgzICBmbGFnczoweDEgICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklO ICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAg bmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjQ4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0 ZXI6MgoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVu dHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2Vu OjE0MjAwMTIzNzUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4OTk3Y2M3NDkgIHR5 cGU6U0VUQVRUUiAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRv dGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OWEwOCBsZW46OTYgCglJTk9ERTogI3JlZ3M6 MiAgIGlubzoweDEwMDAwODMgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFn aWM6SU4gIG1vZGU6MHg4MWE0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdp ZDowICBubGluazoxIHByb2ppZDowCgkJYXRpbWU6NDggIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZs dXNoaXRlcjoyCgkJc2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFu ZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgw ICBnZW46MTQyMDAxMjM3NQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg2MmE1YjAw ICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzogY250 OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5NiAKCUlOT0RFOiAj cmVnczoyICAgaW5vOjB4MTAwMDA4MiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBpbm9kZToK CQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6 MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6NDggIGN0aW1lOjQ4 CgkJZmx1c2hpdGVyOjQKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6 MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFn czoweDAgIGdlbjoxNDIwMDEyMzc1Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGZj MTEyZTNiICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklO TzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5NiAKCUlO T0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDA4MyAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBp bm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAK CQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6NDggIGN0 aW1lOjQ4CgkJZmx1c2hpdGVyOjIKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4 dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTow ICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzc1Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRp ZDoweDQyY2Q4ZTIxICB0eXBlOlJFTkFNRSAgI2l0ZW1zOjYgIHRyYW5zOjB4MCAgcToweDQ2OTcz MApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OWEwOCBsZW46OTYg YToweDQ2OWE3MCBsZW46MTQwIAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgxMDAwMDgxICBmbGFn czoweDMgICBkc2l6ZToxNDAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0MWVkICB2 ZXI6MiAgZm9ybWF0OjEgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazo1IHByb2ppZDow CgkJYXRpbWU6NjYgIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjozCgkJc2l6ZToweDhj ICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6 MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzMKCQlE QVRBIEZPUksgTE9DQUwgaW5vZGUgZGF0YToKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliMDAg bGVuOjU2IGE6MHg0NjliNjAgbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgxMDAwMDgz ICBmbGFnczoweDEgICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFh NCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9q aWQ6MAoJCWF0aW1lOjQ4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MgoJCXNpemU6 MHgwICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtv ZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzUK SU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NzFjMjggbGVuOjU2IGE6MHg0NzFjNjggbGVuOjk2IAoJ SU5PREU6ICNyZWdzOjIgICBpbm86MHgxMDAwMDgyICBmbGFnczoweDEgICBkc2l6ZTowCglDT1JF IGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6 MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MCBwcm9qaWQ6MAoJCWF0aW1lOjQ4ICBtdGltZTo0OCAg Y3RpbWU6NDgKCQlmbHVzaGl0ZXI6NAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTowICBu ZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRl OjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzUKQlVGOiBjbnQ6MSB0b3RhbDoxIGE6MHg0NzFj ZDAgbGVuOjI4IAoJQlVGOiAgI3JlZ3M6MSAgIHN0YXJ0IGJsa25vOjB4NzgwZGYwICAgbGVuOjgg ICBibWFwIHNpemU6MiAgIGZsYWdzOjB4MgpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ3MWQxMCBs ZW46MjQgYToweDQ3MWQ3MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4 NzgwZGJhICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJQUdJIEJ1ZmZlcjogKFhB R0kpCkVGSTogY250OjEgdG90YWw6MSBhOjB4NDcxZGY4IGxlbjozMiAKCUVGSTogICNyZWdzOjEg ICAgbnVtX2V4dGVudHM6MSAgaWQ6MHhmZmZmZmZmZmM5MThiMDQ4CgkoczogMHgxMDAwMDcsIGw6 IDEpIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg0MmNkOGUyMiAgdHlwZTpSRU5B TUUgICNpdGVtczo0ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKRUZEOiBjbnQ6MSB0b3RhbDoxIGE6 MHg0NzFkZjggbGVuOjMyIAoJRUZEOiAgI3JlZ3M6IDEgICAgbnVtX2V4dGVudHM6IDEgIGlkOiAw eGZmZmZmZmZmYzkxOGIwNDgKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NzFkMzAgbGVuOjI0IGE6 MHg0NzFkNzAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRiOSAg IGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHRiBCdWZmZXI6IChYQUdGKQpCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ3MWNmMCBsZW46MjggYToweDQ2OWEwOCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4NzgwZGMwICAgbGVuOjggICBibWFwIHNpemU6MiAg IGZsYWdzOjB4MAoJQlVGIERBVEEKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliYzggbGVuOjI4 IGE6MHg0NzFlNjggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRj OCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KVFJBTlM6IHRpZDoweDZhNTIyMDFjICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MyAg dHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1 NiBhOjB4NDY5YjYwIGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDA4MiAgZmxh Z3M6MHgxICAgZHNpemU6MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDAgIHZlcjoy ICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjAgcHJvamlkOjAKCQlh dGltZTo0OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjQKCQlzaXplOjB4MCAgbmJs a3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRt ZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzc2CkJVRjogY250 OjIgdG90YWw6MiBhOjB4NDY5YmM4IGxlbjoyNCBhOjB4NDY5YTA4IGxlbjoxMjggCglCVUY6ICAj cmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYmEgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxh Z3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njk3ZTAg bGVuOjI4IGE6MHg0NzFjMDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzow eDc4MTA0OCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDdlNDRkYmFhICB0eXBlOlJFTU9WRSAgI2l0ZW1z OjQgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBs ZW46NTYgYToweDQ2OTc0MCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDgwICBmbGFn czoweDEgICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4NDFlZCAgdmVy OjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MjMgcHJvamlkOjAK CQlhdGltZTo2OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MTAw MCAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2Zm OjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjowCklOTzogY250OjIg dG90YWw6MiBhOjB4NDY5N2E4IGxlbjo1NiBhOjB4NDY5YWQwIGxlbjo5NiAKCUlOT0RFOiAjcmVn czoyICAgaW5vOjB4ODYgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6 SU4gIG1vZGU6MHg4MWI0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDow ICBubGluazowIHByb2ppZDowCgkJYXRpbWU6MTMyNjkwODA3MCAgbXRpbWU6MTMyNjkwODA3MCAg Y3RpbWU6NDgKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHg2NCAgbmJsa3M6MHgxICBleHNpemU6MCAg bmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0 ZTowICBmbGFnczoweDAgIGdlbjoxCkJVRjogY250OjMgdG90YWw6MyBhOjB4NDY5YjM4IGxlbjoy OCBhOjB4NDcxYzA4IGxlbjoyNTYgYToweDQ3MWQxMCBsZW46MjU2IAoJQlVGOiAgI3JlZ3M6MyAg IHN0YXJ0IGJsa25vOjB4YjggICBsZW46OCAgIGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYg REFUQQoJQlVGIERBVEEKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliYTAgbGVuOjI0IGE6MHg0 NzFlMTggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDIgICBsZW46MSAg IGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpUUkFOUzogdGlkOjB4MzgzNWUwNjQgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczoyICB0 cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njk3NDAgbGVuOjU2 IGE6MHg0Njk3ODAgbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHg4NiAgZmxhZ3M6MHgx ICAgZHNpemU6MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYjQgIHZlcjoyICBm b3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjAgcHJvamlkOjAKCQlhdGlt ZToxMzI2OTA4MDcwICBtdGltZToxMzI2OTA4MDcwICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJ c2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJ Zm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MQpFRkk6 IGNudDoxIHRvdGFsOjEgYToweDQ2OWEwOCBsZW46MzIgCglFRkk6ICAjcmVnczoxICAgIG51bV9l eHRlbnRzOjEgIGlkOjB4ZmZmZmZmZmZjOTE4YjFhOAoJKHM6IDB4MWMsIGw6IDEpIAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHgzODM1ZTA2NSAgdHlwZTpJTkFDVElWRSAgI2l0ZW1z OjYgIHRyYW5zOjB4MCAgcToweDQ2OTczMApFRkQ6IGNudDoxIHRvdGFsOjEgYToweDQ2OWEwOCBs ZW46MzIgCglFRkQ6ICAjcmVnczogMSAgICBudW1fZXh0ZW50czogMSAgaWQ6IDB4ZmZmZmZmZmZj OTE4YjFhOApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWJjMCBsZW46MjQgYToweDQ2OWE4OCBs ZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MSAgIGxlbjoxICAgYm1hcCBz aXplOjEgICBmbGFnczoweDAKCUFHRiBCdWZmZXI6IChYQUdGKQpCVUY6IGNudDoyIHRvdGFsOjIg YToweDQ2OWIxMCBsZW46MjQgYToweDQ3MWMwOCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0 YXJ0IGJsa25vOjB4MyAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUJVRiBEQVRB CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YjcwIGxlbjoyOCBhOjB4NDcxYzkwIGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxOCAgIGxlbjo4ICAgYm1hcCBzaXplOjIg ICBmbGFnczoweDAKCUJVRiBEQVRBCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5N2MwIGxlbjoy OCBhOjB4NDcxZDM4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxMCAg IGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCklOTzogY250OjIgdG90 YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDcxZTAwIGxlbjo5NiAKCUlOT0RFOiAjcmVnczoy ICAgaW5vOjB4ODYgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4g IG1vZGU6MHg4MWI0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBu bGluazowIHByb2ppZDowCgkJYXRpbWU6MTMyNjkwODA3MCAgbXRpbWU6MTMyNjkwODA3MCAgY3Rp bWU6NDgKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0 ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAg IGZsYWdzOjB4MCAgZ2VuOjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MzgzNWUw NjYgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczozICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBj bnQ6MiB0b3RhbDoyIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0Njk3ODAgbGVuOjk2IAoJSU5PREU6 ICNyZWdzOjIgICBpbm86MHg4NiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBpbm9kZToKCQlt YWdpYzpJTiAgbW9kZToweDAgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lk OjAgIG5saW5rOjAgcHJvamlkOjAKCQlhdGltZToxMzI2OTA4MDcwICBtdGltZToxMzI2OTA4MDcw ICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJc2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAg IG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3Rh dGU6MCAgZmxhZ3M6MHgwICBnZW46MgpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ3MWMwOCBsZW46 MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MiAg IGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBCdWZmZXI6IChYQUdJKQpCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ3MWNmMCBsZW46MjggYToweDQ2OWEwOCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4OCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFn czoweDAKCUJVRiBEQVRBCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDViZDU0MTUz ICB0eXBlOkNSRUFURSAgI2l0ZW1zOjUgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoy IHRvdGFsOjIgYToweDQ3MWQzMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3Jl Z3M6MiAgIHN0YXJ0IGJsa25vOjB4MiAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAK CUFHSSBCdWZmZXI6IChYQUdJKQpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ3MWMyOCBsZW46Mjgg YToweDQ2OWEwOCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4OCAgIGxl bjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCklOTzogY250OjIgdG90YWw6 MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YTkwIGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAg aW5vOjB4ODYgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1v ZGU6MHg4MWE0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGlu azoxIHByb2ppZDowCgkJYXRpbWU6NDggIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjow CgkJc2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czow CgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MgpJ Tk86IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmOCBsZW46NTYgYToweDQ2OWI3OCBsZW46OTYgCglJ Tk9ERTogI3JlZ3M6MiAgIGlubzoweDgwICBmbGFnczoweDEgICBkc2l6ZTowCglDT1JFIGlub2Rl OgoJCW1hZ2ljOklOICBtb2RlOjB4NDFlZCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVp ZDowICBnaWQ6MCAgbmxpbms6MjMgcHJvamlkOjAKCQlhdGltZTo2OCAgbXRpbWU6NDggIGN0aW1l OjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MTAwMCAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4 dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTow ICBmbGFnczoweDAgIGdlbjowCkJVRjogY250OjQgdG90YWw6NCBhOjB4NDY5YmUwIGxlbjoyOCBh OjB4NDcxZTAwIGxlbjoyNTYgYToweDQ3MWYwOCBsZW46MTI4IGE6MHg0NzFmOTAgbGVuOjM4NCAK CUJVRjogICNyZWdzOjQgICBzdGFydCBibGtubzoweGI4ICAgbGVuOjggICBibWFwIHNpemU6MiAg IGZsYWdzOjB4MAoJQlVGIERBVEEKCUJVRiBEQVRBCglCVUYgREFUQQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClRSQU5TOiB0aWQ6MHhjYzEzOGQ3ZCAgdHlwZTpJTkFDVElWRSAgI2l0ZW1zOjEgIHRyYW5z OjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYTow eDQ3MWMwOCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDg2ICBmbGFnczoweDEgICBk c2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1h dDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjQ4 ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDAg IGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6 MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFO UzogdGlkOjB4YmU4MWIxYzQgIHR5cGU6U0VUQVRUUiAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcTow eDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYToweDQ3MWMwOCBs ZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDg2ICBmbGFnczoweDEgICBkc2l6ZTowCglD T1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxp bms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjEzMjY5MDgwNzAg IG10aW1lOjEzMjY5MDgwNzAgIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MCAgbmJs a3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRt ZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoyCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KVFJBTlM6IHRpZDoweDVlZGRjMjI2ICB0eXBlOlNFVEFUVFIgICNpdGVtczoxICB0cmFuczow eDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0 NzFjMDggbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHg4NiAgZmxhZ3M6MHgxICAgZHNp emU6MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6 MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZToxMzI2 OTA4MDcwICBtdGltZToxMzI2OTA4MDcwICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJc2l6ZTow eDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29m ZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46Mgo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClRSQU5TOiB0aWQ6MHg3NDdlMmEzOSAgdHlwZTpTRVRBVFRSICAjaXRlbXM6MSAg dHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1 NiBhOjB4NDcxYzA4IGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4ODYgIGZsYWdzOjB4 MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MWI0ICB2ZXI6MiAg Zm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazoxIHByb2ppZDowCgkJYXRp bWU6MTMyNjkwODA3MCAgbXRpbWU6MTMyNjkwODA3MCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MAoJ CXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJ CWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MzJkMTBhMyAgdHlwZTpSTURJUiAgI2l0ZW1z OjMgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBs ZW46NTYgYToweDQ3MWMwOCBsZW46OTYgYToweDQ3MWM3MCBsZW46MTIwIAoJSU5PREU6ICNyZWdz OjMgICBpbm86MHhiYyAgZmxhZ3M6MHgzICAgZHNpemU6MTIwCglDT1JFIGlub2RlOgoJCW1hZ2lj OklOICBtb2RlOjB4NDFlZCAgdmVyOjIgIGZvcm1hdDoxICBvbmxpbms6MAoJCXVpZDowICBnaWQ6 MCAgbmxpbms6OCBwcm9qaWQ6MAoJCWF0aW1lOjY4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVz aGl0ZXI6MAoJCXNpemU6MHg3NiAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5l eHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAg IGdlbjowCgkJREFUQSBGT1JLIExPQ0FMIGlub2RlIGRhdGE6CklOTzogY250OjIgdG90YWw6MiBh OjB4NDcxY2YwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5v OjB4YmQgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6 MHg0MWVkICB2ZXI6MiAgZm9ybWF0OjEgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazow IHByb2ppZDowCgkJYXRpbWU6NjggIG10aW1lOjY4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJ c2l6ZToweDYgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJ Zm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MApCVUY6 IGNudDozIHRvdGFsOjMgYToweDQ2OWE3MCBsZW46MjQgYToweDQ2OWFkOCBsZW46MTI4IGE6MHg0 NjliNjAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjMgICBzdGFydCBibGtubzoweDIgICBsZW46MSAg IGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKCUJVRiBEQVRBCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDUxYWFjY2M5ICB0eXBlOklOQUNUSVZFICAj aXRlbXM6MyAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDcx Y2YwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4YmQg IGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHgwICB2 ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDow CgkJYXRpbWU6NjggIG10aW1lOjY4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJc2l6ZToweDYg IG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjow ICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MQpCVUY6IGNudDozIHRv dGFsOjMgYToweDQ2OTc4MCBsZW46MjQgYToweDQ3MWMwOCBsZW46MTI4IGE6MHg0NjlhZDggbGVu OjEyOCAKCUJVRjogICNyZWdzOjMgICBzdGFydCBibGtubzoweDIgICBsZW46MSAgIGJtYXAgc2l6 ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKCUJVRiBEQVRBCkJVRjogY250OjIg dG90YWw6MiBhOjB4NDcxZDUwIGxlbjoyOCBhOjB4NDcxZGE4IGxlbjoxMjggCglCVUY6ICAjcmVn czoyICAgc3RhcnQgYmxrbm86MHg4ICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZsYWdzOjB4MAoJ QlVGIERBVEEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MjFlODRjMmEgIHR5cGU6 UkVNT1ZFICAjaXRlbXM6MyAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzogY250OjMgdG90YWw6 MyBhOjB4NDY5YmEwIGxlbjo1NiBhOjB4NDY5NzY4IGxlbjo5NiBhOjB4NDY5YTA4IGxlbjo2MCAK CUlOT0RFOiAjcmVnczozICAgaW5vOjB4MjAwYTBiMSAgZmxhZ3M6MHgzICAgZHNpemU6NjAKCUNP UkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0MWVkICB2ZXI6MiAgZm9ybWF0OjEgIG9ubGlu azowCgkJdWlkOjAgIGdpZDowICBubGluazoyIHByb2ppZDowCgkJYXRpbWU6NjggIG10aW1lOjQ4 ICBjdGltZTo0OAoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDNhICBuYmxrczoweDAgIGV4c2l6ZTow ICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0 YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOi05MjM5ODQyMjQKCQlEQVRBIEZPUksgTE9DQUwgaW5vZGUg ZGF0YToKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhNDggbGVuOjU2IGE6MHg0NjlhODggbGVu Ojk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgyMDBhMGI1ICBmbGFnczoweDEgICBkc2l6ZTow CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4YTFmZiAgdmVyOjIgIGZvcm1hdDoxICBv bmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MCBwcm9qaWQ6MAoJCWF0aW1lOjY4ICBtdGlt ZTo2OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgzMyAgbmJsa3M6MHgwICBleHNp emU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAg ZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjI0CkJVRjogY250OjIgdG90YWw6MiBh OjB4NDY5YWYwIGxlbjoyNCBhOjB4NDcxYzA4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3Rh cnQgYmxrbm86MHhmMDFiNzIgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglCVUYg REFUQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHhkNTM4NmZjYiAgdHlwZTpJTkFD VElWRSAgI2l0ZW1zOjMgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIg YToweDQ2OTc0MCBsZW46NTYgYToweDQ2OWIzMCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlu bzoweDIwMGEwYjUgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4g IG1vZGU6MHgwICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGlu azowIHByb2ppZDowCgkJYXRpbWU6NjggIG10aW1lOjY4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjox CgkJc2l6ZToweDMzICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6 MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOi05 MjM5ODQyMjMKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliOTggbGVuOjI0IGE6MHg0NjlhMDgg bGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweGYwMWI3MiAgIGxlbjoxICAg Ym1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBCdWZmZXI6IChYQUdJKQpCVUY6IGNudDoyIHRv dGFsOjIgYToweDQ2OTc4MCBsZW46MjggYToweDQ3MWMyOCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6 MiAgIHN0YXJ0IGJsa25vOjB4ZjAxYjc4ICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZsYWdzOjB4 MAoJQlVGIERBVEEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4NTAzMjJhOCAgdHlw ZTpSRU1PVkUgICNpdGVtczozICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MyB0b3Rh bDozIGE6MHg0Njk3YzAgbGVuOjU2IGE6MHg0NjlhMDggbGVuOjk2IGE6MHg0NjlhNzAgbGVuOjQw IAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgyMDBhMGIxICBmbGFnczoweDMgICBkc2l6ZTo0MAoJ Q09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDQxZWQgIHZlcjoyICBmb3JtYXQ6MSAgb25s aW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjIgcHJvamlkOjAKCQlhdGltZTo2OCAgbXRpbWU6 NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjEKCQlzaXplOjB4MjggIG5ibGtzOjB4MCAgZXhzaXpl OjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRt c3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46LTkyMzk4NDIyNAoJCURBVEEgRk9SSyBMT0NBTCBpbm9k ZSBkYXRhOgpJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OWFhMCBsZW46NTYgYToweDQ2OWIwMCBs ZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDIwMGEwYjMgIGZsYWdzOjB4MSAgIGRzaXpl OjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHhhMWZmICB2ZXI6MiAgZm9ybWF0OjEg IG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6NjggIG10 aW1lOjY4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDMzICBuYmxrczoweDAgIGV4 c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgw ICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOi05MjM5ODQyMjQKQlVGOiBjbnQ6MiB0b3RhbDoy IGE6MHg0NjliNjggbGVuOjI0IGE6MHg0NzFjMjggbGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBz dGFydCBibGtubzoweGYwMWI3MiAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFH SSBCdWZmZXI6IChYQUdJKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg4ZmJjYTJi ZiAgdHlwZTpJTkFDVElWRSAgI2l0ZW1zOjMgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNu dDoyIHRvdGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OTc4MCBsZW46OTYgCglJTk9ERTog I3JlZ3M6MiAgIGlubzoweDIwMGEwYjMgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6 CgkJbWFnaWM6SU4gIG1vZGU6MHgwICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAg IGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6NjggIG10aW1lOjY4ICBjdGltZTo0OAoJ CWZsdXNoaXRlcjoxCgkJc2l6ZToweDMzICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czow ICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdz OjB4MCAgZ2VuOi05MjM5ODQyMjMKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliYzggbGVuOjI0 IGE6MHg0NjlhNDggbGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweGYwMWI3 MiAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBCdWZmZXI6IChYQUdJKQpC VUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWI1MCBsZW46MjggYToweDQ3MWM0OCBsZW46MTI4IAoJ QlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4ZjAxYjc4ICAgbGVuOjggICBibWFwIHNpemU6 MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4 YTAzYjMxZjcgIHR5cGU6UkVNT1ZFICAjaXRlbXM6MyAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklO TzogY250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5NiBhOjB4 NDcxYzI4IGxlbjoyNCAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MjAwYTBiMSAgZmxhZ3M6MHgz ICAgZHNpemU6MjQKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0MWVkICB2ZXI6MiAg Zm9ybWF0OjEgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazoyIHByb2ppZDowCgkJYXRp bWU6NjggIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDE3ICBuYmxr czoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1l dm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOi05MjM5ODQyMjQKCQlEQVRBIEZP UksgTE9DQUwgaW5vZGUgZGF0YToKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhNzAgbGVuOjU2 IGE6MHg0NjlhZjAgbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgyMDBhMGI0ICBmbGFn czoweDEgICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4YTFmZiAgdmVy OjIgIGZvcm1hdDoxICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MCBwcm9qaWQ6MAoJ CWF0aW1lOjY4ICBtdGltZTo2OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgzMyAg bmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAg IGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjI0CkJVRjog Y250OjIgdG90YWw6MiBhOjB4NDY5YjU4IGxlbjoyNCBhOjB4NDcxYzQ4IGxlbjoyNTYgCglCVUY6 ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHhmMDFiNzIgICBsZW46MSAgIGJtYXAgc2l6ZToxICAg ZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzog dGlkOjB4NTY1NjYwNjYgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczozICB0cmFuczoweDAgIHE6MHg0 Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliYjggbGVuOjU2IGE6MHg0Njk3NDAgbGVu Ojk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgyMDBhMGI0ICBmbGFnczoweDEgICBkc2l6ZTow CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4MCAgdmVyOjIgIGZvcm1hdDoyICBvbmxp bms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MCBwcm9qaWQ6MAoJCWF0aW1lOjY4ICBtdGltZTo2 OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgzMyAgbmJsa3M6MHgwICBleHNpemU6 MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1z dGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjIzCkJVRjogY250OjIgdG90YWw6MiBhOjB4 NDY5N2E4IGxlbjoyNCBhOjB4NDY5YTI4IGxlbjoyNTYgCglCVUY6ICAjcmVnczoyICAgc3RhcnQg Ymxrbm86MHhmMDFiNzIgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVm ZmVyOiAoWEFHSSkKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliMzAgbGVuOjI4IGE6MHg0NzFj MjggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweGYwMWI3OCAgIGxlbjo4 ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K VFJBTlM6IHRpZDoweGE1YmEyYjcgIHR5cGU6UkVNT1ZFICAjaXRlbXM6MyAgdHJhbnM6MHgwICBx OjB4NDY5NzMwCklOTzogY250OjMgdG90YWw6MyBhOjB4NDY5Yjc4IGxlbjo1NiBhOjB4NDY5NzQw IGxlbjo5NiBhOjB4NDY5N2E4IGxlbjo4IAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgyMDBhMGIx ICBmbGFnczoweDMgICBkc2l6ZTo4CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4NDFl ZCAgdmVyOjIgIGZvcm1hdDoxICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MiBwcm9q aWQ6MAoJCWF0aW1lOjY4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6 MHg2ICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtv ZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOi05MjM5ODQyMjQK CQlEQVRBIEZPUksgTE9DQUwgaW5vZGUgZGF0YToKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njli YjggbGVuOjU2IGE6MHg0NjlhMDggbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgyMDBh MGIyICBmbGFnczoweDEgICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4 YTFmZiAgdmVyOjIgIGZvcm1hdDoxICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MCBw cm9qaWQ6MAoJCWF0aW1lOjY4ICBtdGltZTo2OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNp emU6MHgzMyAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlm b3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0 MjI0CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTcwIGxlbjoyNCBhOjB4NDcxYzI4IGxlbjoy NTYgCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHhmMDFiNzIgICBsZW46MSAgIGJtYXAg c2l6ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpUUkFOUzogdGlkOjB4ZTQ4ODUxNzkgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczozICB0cmFuczow eDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZDAgbGVuOjU2IGE6MHg0 NjliMTAgbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgyMDBhMGIyICBmbGFnczoweDEg ICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4MCAgdmVyOjIgIGZvcm1h dDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MCBwcm9qaWQ6MAoJCWF0aW1lOjY4 ICBtdGltZTo2OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgzMyAgbmJsa3M6MHgw ICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNr OjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjIzCkJVRjogY250OjIgdG90 YWw6MiBhOjB4NDY5Yjc4IGxlbjoyNCBhOjB4NDcxYzA4IGxlbjoyNTYgCglCVUY6ICAjcmVnczoy ICAgc3RhcnQgYmxrbm86MHhmMDFiNzIgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgw CglBR0kgQnVmZmVyOiAoWEFHSSkKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliZDggbGVuOjI4 IGE6MHg0Njk3NDAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweGYwMWI3 OCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KVFJBTlM6IHRpZDoweGM1OGQ0NGQ1ICB0eXBlOlNZTUxJTksgICNpdGVtczo0ICB0 cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhMjggbGVuOjI0 IGE6MHg0NjlhNDggbGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweGYwMWI3 MiAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBCdWZmZXI6IChYQUdJKQpC VUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWJiOCBsZW46MjggYToweDQ2OTc0MCBsZW46MTI4IAoJ QlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4ZjAxYjc4ICAgbGVuOjggICBibWFwIHNpemU6 MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKSU5POiBjbnQ6MyB0b3RhbDozIGE6MHg0NzFjMDggbGVu OjU2IGE6MHg0NzFjNDggbGVuOjk2IGE6MHg0NzFjYjAgbGVuOjUyIAoJSU5PREU6ICNyZWdzOjMg ICBpbm86MHgyMDBhMGIyICBmbGFnczoweDMgICBkc2l6ZTo1MgoJQ09SRSBpbm9kZToKCQltYWdp YzpJTiAgbW9kZToweGExZmYgIHZlcjoyICBmb3JtYXQ6MSAgb25saW5rOjAKCQl1aWQ6MCAgZ2lk OjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1 c2hpdGVyOjEKCQlzaXplOjB4MzMgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFu ZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgw ICBnZW46LTkyMzk4NDIyMwoJCURBVEEgRk9SSyBMT0NBTCBpbm9kZSBkYXRhOgpJTk86IGNudDoz IHRvdGFsOjMgYToweDQ3MWNlOCBsZW46NTYgYToweDQ3MWQ3MCBsZW46OTYgYToweDQ3MWRkOCBs ZW46MjQgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDIwMGEwYjEgIGZsYWdzOjB4MyAgIGRzaXpl OjI0CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4NDFlZCAgdmVyOjIgIGZvcm1hdDox ICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MiBwcm9qaWQ6MAoJCWF0aW1lOjY4ICBt dGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgxNyAgbmJsa3M6MHgwICBl eHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4 MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjI0CgkJREFUQSBGT1JLIExPQ0FM IGlub2RlIGRhdGE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGZkYmY0MDU1ICB0 eXBlOlNZTUxJTksgICNpdGVtczo0ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0 b3RhbDoyIGE6MHg0NzFkZDggbGVuOjI0IGE6MHg0NzFjMDggbGVuOjI1NiAKCUJVRjogICNyZWdz OjIgICBzdGFydCBibGtubzoweGYwMWI3MiAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczow eDAKCUFHSSBCdWZmZXI6IChYQUdJKQpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ3MWQ0OCBsZW46 MjggYToweDQ2OWI3MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4ZjAx Yjc4ICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKSU5POiBjbnQ6 MyB0b3RhbDozIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0NjlhMDggbGVuOjk2IGE6MHg0Njk3Yzgg bGVuOjUyIAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgyMDBhMGIzICBmbGFnczoweDMgICBkc2l6 ZTo1MgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweGExZmYgIHZlcjoyICBmb3JtYXQ6 MSAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAg bXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjEKCQlzaXplOjB4MzMgIG5ibGtzOjB4MCAg ZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazow eDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46LTkyMzk4NDIyMwoJCURBVEEgRk9SSyBMT0NB TCBpbm9kZSBkYXRhOgpJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OWE3MCBsZW46NTYgYToweDQ3 MWRmOCBsZW46OTYgYToweDQ3MWRhOCBsZW46NDQgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDIw MGEwYjEgIGZsYWdzOjB4MyAgIGRzaXplOjQ0CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2Rl OjB4NDFlZCAgdmVyOjIgIGZvcm1hdDoxICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6 MiBwcm9qaWQ6MAoJCWF0aW1lOjY4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJ CXNpemU6MHgyOSAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAK CQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIz OTg0MjI0CgkJREFUQSBGT1JLIExPQ0FMIGlub2RlIGRhdGE6Cj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K VFJBTlM6IHRpZDoweDkxMDAxZjJiICB0eXBlOlNZTUxJTksgICNpdGVtczo0ICB0cmFuczoweDAg IHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6MHg0Njlh ZDAgbGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweGYwMWI3MiAgIGxlbjox ICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBCdWZmZXI6IChYQUdJKQpCVUY6IGNudDoy IHRvdGFsOjIgYToweDQ2OWJkOCBsZW46MjggYToweDQ2OTc0MCBsZW46MTI4IAoJQlVGOiAgI3Jl Z3M6MiAgIHN0YXJ0IGJsa25vOjB4ZjAxYjc4ICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZsYWdz OjB4MAoJQlVGIERBVEEKSU5POiBjbnQ6MyB0b3RhbDozIGE6MHg0NzFjMDggbGVuOjU2IGE6MHg0 NzFjNDggbGVuOjk2IGE6MHg0NzFjYjAgbGVuOjUyIAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgy MDBhMGI0ICBmbGFnczoweDMgICBkc2l6ZTo1MgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9k ZToweGExZmYgIHZlcjoyICBmb3JtYXQ6MSAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5r OjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjEK CQlzaXplOjB4MzMgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czow CgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46LTky Mzk4NDIyMwoJCURBVEEgRk9SSyBMT0NBTCBpbm9kZSBkYXRhOgpJTk86IGNudDozIHRvdGFsOjMg YToweDQ3MWNlOCBsZW46NTYgYToweDQ3MWQ3MCBsZW46OTYgYToweDQ3MWRkOCBsZW46NjAgCglJ Tk9ERTogI3JlZ3M6MyAgIGlubzoweDIwMGEwYjEgIGZsYWdzOjB4MyAgIGRzaXplOjYwCglDT1JF IGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4NDFlZCAgdmVyOjIgIGZvcm1hdDoxICBvbmxpbms6 MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MiBwcm9qaWQ6MAoJCWF0aW1lOjY4ICBtdGltZTo0OCAg Y3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgzYSAgbmJsa3M6MHgwICBleHNpemU6MCAg bmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0 ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjI0CgkJREFUQSBGT1JLIExPQ0FMIGlub2RlIGRh dGE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGY5YTNhMDFlICB0eXBlOlNZTUxJ TksgICNpdGVtczo0ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6 MHg0NjlhNDggbGVuOjI0IGE6MHg0NzFjMDggbGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBzdGFy dCBibGtubzoweGYwMWI3MiAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBC dWZmZXI6IChYQUdJKQpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjggYToweDQ2 OTc2MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4ZjAxYjc4ICAgbGVu OjggICBibWFwIHNpemU6MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKSU5POiBjbnQ6MyB0b3RhbDoz IGE6MHg0NjlhODggbGVuOjU2IGE6MHg0NjliMTAgbGVuOjk2IGE6MHg0NjliNzggbGVuOjUyIAoJ SU5PREU6ICNyZWdzOjMgICBpbm86MHgyMDBhMGI1ICBmbGFnczoweDMgICBkc2l6ZTo1MgoJQ09S RSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweGExZmYgIHZlcjoyICBmb3JtYXQ6MSAgb25saW5r OjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6NDgg IGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjEKCQlzaXplOjB4MzMgIG5ibGtzOjB4MCAgZXhzaXplOjAg IG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3Rh dGU6MCAgZmxhZ3M6MHgwICBnZW46LTkyMzk4NDIyMwoJCURBVEEgRk9SSyBMT0NBTCBpbm9kZSBk YXRhOgpJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OWJiMCBsZW46NTYgYToweDQ3MWQ5MCBsZW46 OTYgYToweDQ3MWRmOCBsZW46NzYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDIwMGEwYjEgIGZs YWdzOjB4MyAgIGRzaXplOjc2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4NDFlZCAg dmVyOjIgIGZvcm1hdDoxICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MiBwcm9qaWQ6 MAoJCWF0aW1lOjY4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHg0 YyAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2Zm OjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjotOTIzOTg0MjI0CgkJ REFUQSBGT1JLIExPQ0FMIGlub2RlIGRhdGE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRp ZDoweDdlYWQxYmE1ICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5 NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDcxYzA4IGxlbjo5 NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDMxZiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJ Q09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25s aW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6 NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6 MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1z dGF0ZTowICBmbGFnczoweDAgIGdlbjoxNTk1MzI4MzcKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFO UzogdGlkOjB4OTBlYzMyN2MgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczoxICB0cmFuczoweDAgIHE6 MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0NzFjMDgg bGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgxMDAwMzFmICBmbGFnczoweDEgICBkc2l6 ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoy ICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjQ4ICBt dGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4 c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgw ICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE1OTUzMjgzNwoKTE9HIFJFQyBBVCBMU04gY3lj bGUgMSBibG9jayAxMDIgKDB4MSwgMHg2NikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4YzMwYTRjYWUgIHR5cGU6Q1JFQVRFICAjaXRlbXM6OCAgdHJhbnM6MHgwICBxOjB4NDY5NzMw CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5NzgwIGxlbjoyNCBhOjB4NDcxYzA4IGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYmEgICBsZW46MSAgIGJtYXAgc2l6 ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6 MHg0NzFjOTAgbGVuOjI4IGE6MHg0NjlhMDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFy dCBibGtubzoweDc4MTA0OCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBE QVRBCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YWQwIGxlbjo5 NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDA4MiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJ Q09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxODAgIHZlcjoyICBmb3JtYXQ6MiAgb25s aW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6 NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjQKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6 MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1z dGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzc2CklOTzogY250OjMgdG90YWw6MyBhOjB4 NDY5N2MwIGxlbjo1NiBhOjB4NDY5YjU4IGxlbjo5NiBhOjB4NDY5YmMwIGxlbjoxNiAKCUlOT0RF OiAjcmVnczozICAgaW5vOjB4MTAwMDA4MSAgZmxhZ3M6MHg1ICAgZHNpemU6MTYKCUNPUkUgaW5v ZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0MWVkICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJ dWlkOjAgIGdpZDowICBubGluazo1IHByb2ppZDowCgkJYXRpbWU6NjYgIG10aW1lOjQ4ICBjdGlt ZTo0OAoJCWZsdXNoaXRlcjozCgkJc2l6ZToweDEwMDAgIG5ibGtzOjB4MSAgZXhzaXplOjAgIG5l eHRlbnRzOjEgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6 MCAgZmxhZ3M6MHgwICBnZW46MTQyMDAxMjM3MwoJCURBVEEgRk9SSyBFWFRFTlRTIGlub2RlIGRh dGE6CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YmQ4IGxlbjoyNCBhOjB4NDcxZDkwIGxlbjox MjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYjkgICBsZW46MSAgIGJtYXAg c2l6ZToxICAgZmxhZ3M6MHgwCglBR0YgQnVmZmVyOiAoWEFHRikKQlVGOiBjbnQ6MiB0b3RhbDoy IGE6MHg0NzFlMTggbGVuOjI4IGE6MHg0NzFlNzggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBz dGFydCBibGtubzoweDc4MGRjOCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJV RiBEQVRBCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDcxZjAwIGxlbjoyOCBhOjB4NDcxZjYwIGxl bjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYzAgICBsZW46OCAgIGJt YXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQpCVUY6IGNudDozIHRvdGFsOjMgYToweDQ3 MWZlOCBsZW46MjggYToweDQ3MjA1MCBsZW46Mzg0IGE6MHg0NzIxZDggbGVuOjEyOCAKCUJVRjog ICNyZWdzOjMgICBzdGFydCBibGtubzoweDc4MGRmMCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBm bGFnczoweDAKCUJVRiBEQVRBCglCVUYgREFUQQoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9j ayAxMDcgKDB4MSwgMHg2YikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4OTlmYTUy ZTcgIHR5cGU6U0VUQVRUUiAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNu dDoyIHRvdGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OWEwOCBsZW46OTYgCglJTk9ERTog I3JlZ3M6MiAgIGlubzoweDEwMDAwODIgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6 CgkJbWFnaWM6SU4gIG1vZGU6MHg4MWE0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlk OjAgIGdpZDowICBubGluazoxIHByb2ppZDowCgkJYXRpbWU6NDggIG10aW1lOjQ4ICBjdGltZTo0 OAoJCWZsdXNoaXRlcjo0CgkJc2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRz OjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxh Z3M6MHgwICBnZW46MTQyMDAxMjM3Ngo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHhj OTQzZjljZiAgdHlwZTpTRVRBVFRSICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklO TzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5NiAKCUlO T0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDA4MiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBp bm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAK CQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6NDggIGN0 aW1lOjQ4CgkJZmx1c2hpdGVyOjQKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4 dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTow ICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzc2Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRp ZDoweGZkMDAzZWQ2ICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5 NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5YTA4IGxlbjo5 NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDMxZiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJ Q09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25s aW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0OCAgbXRpbWU6 NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6 MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1z dGF0ZTowICBmbGFnczoweDAgIGdlbjoxNTk1MzI4MzcKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFO UzogdGlkOjB4ZGFjNTAyODUgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczoxICB0cmFuczoweDAgIHE6 MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0NjlhMDgg bGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgxMDAwMDgyICBmbGFnczoweDEgICBkc2l6 ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoy ICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjQ4ICBt dGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6NAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4 c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgw ICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzYKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpUUkFOUzogdGlkOjB4NWI0M2ZhOWUgIHR5cGU6UkVOQU1FICAjaXRlbXM6NiAgdHJhbnM6MHgw ICBxOjB4NDY5NzMwCklOTzogY250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5 YTA4IGxlbjo5NiBhOjB4NDY5YTcwIGxlbjoxNDAgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDEw MDAwODEgIGZsYWdzOjB4MyAgIGRzaXplOjE0MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9k ZToweDQxZWQgIHZlcjoyICBmb3JtYXQ6MSAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5r OjUgcHJvamlkOjAKCQlhdGltZTo2NiAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjMK CQlzaXplOjB4OGMgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czow CgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MTQy MDAxMjM3MwoJCURBVEEgRk9SSyBMT0NBTCBpbm9kZSBkYXRhOgpJTk86IGNudDoyIHRvdGFsOjIg YToweDQ2OWIwMCBsZW46NTYgYToweDQ2OWI2MCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlu bzoweDEwMDAwODIgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4g IG1vZGU6MHg4MWE0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBu bGluazoxIHByb2ppZDowCgkJYXRpbWU6NDggIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRl cjo0CgkJc2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50 czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46 MTQyMDAxMjM3NgpJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTdhMCBsZW46NTYgYToweDQ3MWMw OCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEwMDAzMWYgIGZsYWdzOjB4MSAgIGRz aXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MWE0ICB2ZXI6MiAgZm9ybWF0 OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6NDgg IG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJc2l6ZToweDAgIG5ibGtzOjB4MCAg ZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazow eDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MTU5NTMyODM3CkJVRjogY250OjEgdG90YWw6 MSBhOjB4NDcxYzcwIGxlbjoyOCAKCUJVRjogICNyZWdzOjEgICBzdGFydCBibGtubzoweDc4MGRm MCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDIKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6 MHg0NzFjYzAgbGVuOjI0IGE6MHg0NzFkMjAgbGVuOjI1NiAKCUJVRjogICNyZWdzOjIgICBzdGFy dCBibGtubzoweDc4MGRiYSAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHSSBC dWZmZXI6IChYQUdJKQpFRkk6IGNudDoxIHRvdGFsOjEgYToweDQ3MWUyOCBsZW46MzIgCglFRkk6 ICAjcmVnczoxICAgIG51bV9leHRlbnRzOjEgIGlkOjB4ZmZmZmZmZmZjOTE4YjFhOAoJKHM6IDB4 MTAwMDA3LCBsOiAxKSAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4NWI0M2ZhOWYg IHR5cGU6UkVOQU1FICAjaXRlbXM6NCAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkVGRDogY250OjEg dG90YWw6MSBhOjB4NDcxZTI4IGxlbjozMiAKCUVGRDogICNyZWdzOiAxICAgIG51bV9leHRlbnRz OiAxICBpZDogMHhmZmZmZmZmZmM5MThiMWE4CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDcxY2Uw IGxlbjoyNCBhOjB4NDY5YTA4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86 MHg3ODBkYjkgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglBR0YgQnVmZmVyOiAo WEFHRikKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NzFjOTAgbGVuOjI4IGE6MHg0NzFkMjAgbGVu OjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRjMCAgIGxlbjo4ICAgYm1h cCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5 YmM4IGxlbjoyOCBhOjB4NDcxZWE4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxr bm86MHg3ODBkYzggICBsZW46OCAgIGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg3OWI4YmM5YiAgdHlwZTpJTkFDVElWRSAg I2l0ZW1zOjMgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2 OTdhMCBsZW46NTYgYToweDQ2OWI2MCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEw MDAzMWYgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6 MHgwICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazowIHBy b2ppZDowCgkJYXRpbWU6NDggIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJc2l6 ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9y a29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MTU5NTMyODM4 CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YmM4IGxlbjoyNCBhOjB4NDY5YTA4IGxlbjoyNTYg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYmEgICBsZW46MSAgIGJtYXAgc2l6 ZToxICAgZmxhZ3M6MHgwCglBR0kgQnVmZmVyOiAoWEFHSSkKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6 MHg0NjliMTAgbGVuOjI4IGE6MHg0NzFjOTAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFy dCBibGtubzoweDc4MTA0OCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBE QVRBCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDRjOTIzNTU3ICB0eXBlOlNFVEFU VFJfU0laRSAgI2l0ZW1zOjIgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFs OjIgYToweDQ2OTc4MCBsZW46NTYgYToweDQ2OWEwOCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAg IGlubzoweDE4NiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAg bW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5s aW5rOjEgcHJvamlkOjAKCQlhdGltZTo2OCAgbXRpbWU6NjggIGN0aW1lOjY4CgkJZmx1c2hpdGVy OjAKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRz OjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoy MDE3NzIyMTI4CkVGSTogY250OjEgdG90YWw6MSBhOjB4NDY5YTcwIGxlbjozMiAKCUVGSTogICNy ZWdzOjEgICAgbnVtX2V4dGVudHM6MSAgaWQ6MHhmZmZmZmZmZmM5MThiMDQ4CgkoczogMHg0MSwg bDogMSkgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDRjOTIzNTU4ICB0eXBlOlNF VEFUVFJfU0laRSAgI2l0ZW1zOjUgIHRyYW5zOjB4MCAgcToweDQ2OTczMApFRkQ6IGNudDoxIHRv dGFsOjEgYToweDQ2OWE3MCBsZW46MzIgCglFRkQ6ICAjcmVnczogMSAgICBudW1fZXh0ZW50czog MSAgaWQ6IDB4ZmZmZmZmZmZjOTE4YjA0OApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0MCBs ZW46MjQgYToweDQ2OWFmMCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4 MSAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHRiBCdWZmZXI6IChYQUdGKQpC VUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OTdlMCBsZW46MjggYToweDQ3MWMwOCBsZW46MTI4IAoJ QlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MTAgICBsZW46OCAgIGJtYXAgc2l6ZToyICAg ZmxhZ3M6MHgwCglCVUYgREFUQQpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWJiOCBsZW46Mjgg YToweDQ3MWM5MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MTggICBs ZW46OCAgIGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQpJTk86IGNudDoyIHRvdGFs OjIgYToweDQ2OTc4MCBsZW46NTYgYToweDQ3MWQxOCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAg IGlubzoweDE4NiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAg bW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5s aW5rOjEgcHJvamlkOjAKCQlhdGltZTo2OCAgbXRpbWU6NjggIGN0aW1lOjY4CgkJZmx1c2hpdGVy OjAKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRz OjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoy MDE3NzIyMTI4Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDRjOTIzNTU5ICB0eXBl OlNFVEFUVFJfU0laRSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoy IHRvdGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OTc4MCBsZW46OTYgCglJTk9ERTogI3Jl Z3M6MiAgIGlubzoweDE4NiAgZmxhZ3M6MHgxICAgZHNpemU6MAoJQ09SRSBpbm9kZToKCQltYWdp YzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lk OjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo2OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1 c2hpdGVyOjAKCQlzaXplOjB4MCAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5l eHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAg IGdlbjoyMDE3NzIyMTI4Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDI5ZmUwNTU3 ICB0eXBlOlNUUkFUX1dSSVRFICAjaXRlbXM6NCAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzog Y250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5NzgwIGxlbjo5NiBhOjB4NDY5 N2U4IGxlbjoxNiAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MTg2ICBmbGFnczoweDUgICBkc2l6 ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6 MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo2OCAg bXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MCAgbmJsa3M6MHgxMCAg ZXhzaXplOjAgIG5leHRlbnRzOjEgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazow eDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MjAxNzcyMjEyOAoJCURBVEEgRk9SSyBFWFRF TlRTIGlub2RlIGRhdGE6CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4 NDY5YWIwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxICAgbGVuOjEg ICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJQUdGIEJ1ZmZlcjogKFhBR0YpCkJVRjogY250OjIg dG90YWw6MiBhOjB4NDY5YjM4IGxlbjoyOCBhOjB4NDcxYzA4IGxlbjoxMjggCglCVUY6ICAjcmVn czoyICAgc3RhcnQgYmxrbm86MHgxOCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAK CUJVRiBEQVRBCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5Yjk4IGxlbjoyOCBhOjB4NDcxYzkw IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxMCAgIGxlbjo4ICAgYm1h cCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6 IHRpZDoweDhiN2ZkYjBhICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MiAgdHJhbnM6MHgwICBxOjB4 NDY5NzMwCklOTzogY250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5NzgwIGxl bjo5NiBhOjB4NDY5N2U4IGxlbjoxNiAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MTg2ICBmbGFn czoweDUgICBkc2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZl cjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAK CQlhdGltZTo2OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MCAg bmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAg IGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoyMDE3NzIyMTI4CgkJREFU QSBGT1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKRUZJOiBjbnQ6MSB0b3RhbDoxIGE6MHg0NjlhMDgg bGVuOjMyIAoJRUZJOiAgI3JlZ3M6MSAgICBudW1fZXh0ZW50czoxICBpZDoweGZmZmZmZmZmYzkx OGIzMDgKCShzOiAweDRiMCwgbDogMTUpIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6 MHg4YjdmZGIwYiAgdHlwZTpJTkFDVElWRSAgI2l0ZW1zOjUgIHRyYW5zOjB4MCAgcToweDQ2OTcz MApFRkQ6IGNudDoxIHRvdGFsOjEgYToweDQ2OWEwOCBsZW46MzIgCglFRkQ6ICAjcmVnczogMSAg ICBudW1fZXh0ZW50czogMSAgaWQ6IDB4ZmZmZmZmZmZjOTE4YjMwOApCVUY6IGNudDoyIHRvdGFs OjIgYToweDQ2OWJiOCBsZW46MjQgYToweDQ2OWE4OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAg IHN0YXJ0IGJsa25vOjB4MSAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHRiBC dWZmZXI6IChYQUdGKQpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWIxMCBsZW46MjggYToweDQ3 MWMwOCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MTAgICBsZW46OCAg IGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQpCVUY6IGNudDoyIHRvdGFsOjIgYTow eDQ2OTdjMCBsZW46MjggYToweDQ3MWM5MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0 IGJsa25vOjB4MTggICBsZW46OCAgIGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQpJ Tk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ3MWQzOCBsZW46OTYgYTow eDQ2OTdlOCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDE4NiAgZmxhZ3M6MHg1ICAg ZHNpemU6MTYKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MWE0ICB2ZXI6MiAgZm9y bWF0OjIgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazoxIHByb2ppZDowCgkJYXRpbWU6 NjggIG10aW1lOjQ4ICBjdGltZTo0OAoJCWZsdXNoaXRlcjowCgkJc2l6ZToweDAgIG5ibGtzOjB4 MSAgZXhzaXplOjAgIG5leHRlbnRzOjEgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFz azoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MjAxNzcyMjEyOAoJCURBVEEgRk9SSyBF WFRFTlRTIGlub2RlIGRhdGE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDhiN2Zk YjBjICB0eXBlOklOQUNUSVZFICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzog Y250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5NzgwIGxlbjo5NiBhOjB4NDY5 N2U4IGxlbjoxNiAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MTg2ICBmbGFnczoweDUgICBkc2l6 ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6 MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo2OCAg bXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4MCAgbmJsa3M6MHgxICBl eHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4 MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoyMDE3NzIyMTI4CgkJREFUQSBGT1JLIEVYVEVO VFMgaW5vZGUgZGF0YToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4OTUyZmZhNjMg IHR5cGU6U1RSQVRfV1JJVEUgICNpdGVtczo0ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBj bnQ6MyB0b3RhbDozIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0Njk3ODAgbGVuOjk2IGE6MHg0Njk3 ZTggbGVuOjE2IAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgxMDAwMDgzICBmbGFnczoweDUgICBk c2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQgIHZlcjoyICBmb3Jt YXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTo0 OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjIKCQlzaXplOjB4MCAgbmJsa3M6MHgx ICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNr OjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzc1CgkJREFUQSBGT1JLIEVY VEVOVFMgaW5vZGUgZGF0YToKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NzFjMDggbGVuOjI0IGE6 MHg0NzFjNjggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRiOSAg IGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHRiBCdWZmZXI6IChYQUdGKQpCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ3MWNmMCBsZW46MjggYToweDQ2OWE0OCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4NzgwZGM4ICAgbGVuOjggICBibWFwIHNpemU6MiAg IGZsYWdzOjB4MAoJQlVGIERBVEEKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZDAgbGVuOjI4 IGE6MHg0NjliMzAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRj MCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCgpMT0cgUkVDIEFU IExTTiBjeWNsZSAxIGJsb2NrIDEyMyAoMHgxLCAweDdiKQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRS QU5TOiB0aWQ6MHg0ZTJjZmEwMCAgdHlwZTpTVFJBVF9XUklURSAgI2l0ZW1zOjQgIHRyYW5zOjB4 MCAgcToweDQ2OTczMApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2 OTc4MCBsZW46OTYgYToweDQ2OTdlOCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDg2 ICBmbGFnczoweDUgICBkc2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgx YjQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJv amlkOjAKCQlhdGltZToxMzI2OTA4MDcwICBtdGltZToxMzI2OTA4MDcwICBjdGltZTo0OAoJCWZs dXNoaXRlcjowCgkJc2l6ZToweDAgIG5ibGtzOjB4MSAgZXhzaXplOjAgIG5leHRlbnRzOjEgIGFu ZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgw ICBnZW46MgoJCURBVEEgRk9SSyBFWFRFTlRTIGlub2RlIGRhdGE6CkJVRjogY250OjIgdG90YWw6 MiBhOjB4NDY5YjEwIGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAg c3RhcnQgYmxrbm86MHgxICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJQUdGIEJ1 ZmZlcjogKFhBR0YpCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTI4IGxlbjoyOCBhOjB4NDY5 YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxOCAgIGxlbjo4ICAg Ym1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCkJVRjogY250OjIgdG90YWw6MiBhOjB4 NDcxYzA4IGxlbjoyOCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQg Ymxrbm86MHgxMCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDhiYjJjOTZkICB0eXBlOlNUUkFUX1dSSVRF ICAjaXRlbXM6NCAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCklOTzogY250OjMgdG90YWw6MyBhOjB4 NDY5NzQwIGxlbjo1NiBhOjB4NDY5NzgwIGxlbjo5NiBhOjB4NDY5N2U4IGxlbjoxNiAKCUlOT0RF OiAjcmVnczozICAgaW5vOjB4MTAwMDA4MiAgZmxhZ3M6MHg1ICAgZHNpemU6MTYKCUNPUkUgaW5v ZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MWE0ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJ dWlkOjAgIGdpZDowICBubGluazoxIHByb2ppZDowCgkJYXRpbWU6NDggIG10aW1lOjQ4ICBjdGlt ZTo0OAoJCWZsdXNoaXRlcjo0CgkJc2l6ZToweDAgIG5ibGtzOjB4MSAgZXhzaXplOjAgIG5leHRl bnRzOjEgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAg ZmxhZ3M6MHgwICBnZW46MTQyMDAxMjM3NgoJCURBVEEgRk9SSyBFWFRFTlRTIGlub2RlIGRhdGE6 CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YjMwIGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYjkgICBsZW46MSAgIGJtYXAgc2l6 ZToxICAgZmxhZ3M6MHgwCglBR0YgQnVmZmVyOiAoWEFHRikKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6 MHg0NzFjNDggbGVuOjI4IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFy dCBibGtubzoweDc4MGRjOCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBE QVRBCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyOCBhOjB4NDY5YjUwIGxlbjox MjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYzAgICBsZW46OCAgIGJtYXAg c2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0 aWQ6MHhjYWY3ZGU2MCAgdHlwZTpGU1lOQ19UUyAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2 OTczMApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OTc4MCBsZW46 OTYgYToweDQ2OTdlOCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDEwMDAwODMgIGZs YWdzOjB4NSAgIGRzaXplOjE2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAg dmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6 MAoJCWF0aW1lOjQ4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6MgoJCXNpemU6MHhl ZSAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2Zm OjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzc1CgkJ REFUQSBGT1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzog dGlkOjB4ODdlOWI4ZCAgdHlwZTpGU1lOQ19UUyAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2 OTczMApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OTc4MCBsZW46 OTYgYToweDQ2OTdlOCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDg2ICBmbGFnczow eDUgICBkc2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYjQgIHZlcjoy ICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlkOjAKCQlh dGltZToxMzI2OTA4MDcwICBtdGltZToxMzI2OTA4MDcwICBjdGltZTo0OAoJCWZsdXNoaXRlcjow CgkJc2l6ZToweDY0ICBuYmxrczoweDEgIGV4c2l6ZTowICBuZXh0ZW50czoxICBhbmV4dGVudHM6 MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIK CQlEQVRBIEZPUksgRVhURU5UUyBpbm9kZSBkYXRhOgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5T OiB0aWQ6MHg2YWNmNGNkNiAgdHlwZTpGU1lOQ19UUyAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcTow eDQ2OTczMApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OTc4MCBs ZW46OTYgYToweDQ2OTdlOCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDEwMDAwODIg IGZsYWdzOjB4NSAgIGRzaXplOjE2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFh NCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9q aWQ6MAoJCWF0aW1lOjQ4ICBtdGltZTo0OCAgY3RpbWU6NDgKCQlmbHVzaGl0ZXI6NAoJCXNpemU6 MHgxMjYgIG5ibGtzOjB4MSAgZXhzaXplOjAgIG5leHRlbnRzOjEgIGFuZXh0ZW50czowCgkJZm9y a29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MTQyMDAxMjM3 NgoJCURBVEEgRk9SSyBFWFRFTlRTIGlub2RlIGRhdGE6Cj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJB TlM6IHRpZDoweDg2NTVmNzVjICB0eXBlOkZTWU5DX1RTICAjaXRlbXM6MSAgdHJhbnM6MHgwICBx OjB4NDY5NzMwCklOTzogY250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5Nzgw IGxlbjo5NiBhOjB4NDY5N2U4IGxlbjoxNiAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MTg2ICBm bGFnczoweDUgICBkc2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxYTQg IHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5saW5rOjEgcHJvamlk OjAKCQlhdGltZTo2OCAgbXRpbWU6NDggIGN0aW1lOjQ4CgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4 YSAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2Zm OjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoyMDE3NzIyMTI4CgkJ REFUQSBGT1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxv Y2sgMTMwICgweDEsIDB4ODIpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDM0MTE2 YzE2ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNu dDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAg I3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczow eDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTMy ICgweDEsIDB4ODQpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDQzMGViZGEyICB0 eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRv dGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6 MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNV UEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTM0ICgweDEs IDB4ODYpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDdmMjVmZDlhICB0eXBlOkRV TU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIg YToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0 YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJs b2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTM2ICgweDEsIDB4ODgp Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDFiYTE0MjcxICB0eXBlOkRVTU1ZMSAg I2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2 OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJs a25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1 ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTM4ICgweDEsIDB4OGEpCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGEzYzlmNjIxICB0eXBlOkRVTU1ZMSAgI2l0ZW1z OjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBs ZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4 MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoK CkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTQwICgweDEsIDB4OGMpCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KVFJBTlM6IHRpZDoweDdlNDEyZDcyICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRy YW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQg YToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxl bjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBS RUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTQyICgweDEsIDB4OGUpCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KVFJBTlM6IHRpZDoweGEzNjhkODZmICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4 MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3 MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAg Ym1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQg TFNOIGN5Y2xlIDEgYmxvY2sgMTQ0ICgweDEsIDB4OTApCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJB TlM6IHRpZDoweGZlYWU1OGNiICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcTow eDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWE0OCBs ZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBz aXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5 Y2xlIDEgYmxvY2sgMTQ2ICgweDEsIDB4OTIpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRp ZDoweDJjNjMzYjI0ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTcz MApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4 IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEg ICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEg YmxvY2sgMTQ4ICgweDEsIDB4OTQpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDM3 NGU2MmYyICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFn czoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sg MTUwICgweDEsIDB4OTYpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGJiMDQxYzdi ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoy IHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3Jl Z3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAK CVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTUyICgw eDEsIDB4OTgpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDFhNjQ2YjRkICB0eXBl OkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFs OjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAg IHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVS IEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTU0ICgweDEsIDB4 OWEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDk0NTE0MWNlICB0eXBlOkRVTU1Z MSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYTow eDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0 IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2Nr IEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTU2ICgweDEsIDB4OWMpCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDVmMDBjY2Q3ICB0eXBlOkRVTU1ZMSAgI2l0 ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEw OCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25v OjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZl cjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTU4ICgweDEsIDB4OWUpCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDNiNjZjODBlICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEg IHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46 MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAg IGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxP RyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTYwICgweDEsIDB4YTApCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KVFJBTlM6IHRpZDoweGNjY2Q0YmVmICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5z OjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYTow eDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjox ICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMg QVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTYyICgweDEsIDB4YTIpCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K VFJBTlM6IHRpZDoweDk5YzUyMjkzICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAg cToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWE0 OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1h cCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNO IGN5Y2xlIDEgYmxvY2sgMTY0ICgweDEsIDB4YTQpCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6 IHRpZDoweGQ1NzRlY2E5ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2 OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWI1MCBsZW46 MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXpl OjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xl IDEgYmxvY2sgMTY2ICgweDEsIDB4YTYpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDow eDEwMmQyNTg2ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApC VUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJ QlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBm bGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxv Y2sgMTY4ICgweDEsIDB4YTgpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGM1MmQ2 YWFjICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNu dDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAg I3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczow eDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTcw ICgweDEsIDB4YWEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDFhYmMyZjM4ICB0 eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRv dGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6 MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNV UEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTcyICgweDEs IDB4YWMpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDVjYjE2MzM0ICB0eXBlOkRV TU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIg YToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0 YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJs b2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTc0ICgweDEsIDB4YWUp Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGFmYzk0ZTdmICB0eXBlOkRVTU1ZMSAg I2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2 OWFmMCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJs a25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1 ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTc2ICgweDEsIDB4YjApCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDk4MTFkZDBmICB0eXBlOkRVTU1ZMSAgI2l0ZW1z OjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBs ZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4 MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoK CkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMTc4ICgweDEsIDB4YjIpCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KVFJBTlM6IHRpZDoweGUxMzFkNTAgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJh bnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBh OjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVu OjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJF QyBBVCBMU04gY3ljbGUgMSBibG9jayAxODAgKDB4MSwgMHhiNCkKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpUUkFOUzogdGlkOjB4NzRhY2JiOGYgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgw ICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5 YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBi bWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBM U04gY3ljbGUgMSBibG9jayAxODIgKDB4MSwgMHhiNikKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFO UzogdGlkOjB4ZjYxNTU1ODMgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4 NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YjUwIGxl bjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNp emU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3lj bGUgMSBibG9jayAxODQgKDB4MSwgMHhiOCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4NTAyNTdkMGMgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMw CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAg IGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBi bG9jayAxODYgKDB4MSwgMHhiYSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ZTE0 MDUwZTkgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjog Y250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YTQ4IGxlbjoxMjggCglCVUY6 ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdz OjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAx ODggKDB4MSwgMHhiYykKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4Y2IzYTBlNWUg IHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIg dG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVn czoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJ U1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAxOTAgKDB4 MSwgMHhiZSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4OWExZmJkNjEgIHR5cGU6 RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6 MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAg c3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIg QmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAxOTIgKDB4MSwgMHhj MCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ZTFmMWYwNGMgIHR5cGU6RFVNTVkx ICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4 NDY5YTA4IGxlbjoyNCBhOjB4NDY5YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQg Ymxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sg QnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAxOTQgKDB4MSwgMHhjMikKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4YjYzOWEyMTUgIHR5cGU6RFVNTVkxICAjaXRl bXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYw IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86 MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVy OgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAxOTYgKDB4MSwgMHhjNCkKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpUUkFOUzogdGlkOjB4NmM1ZDk0YzcgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAg dHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoy NCBhOjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAg bGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9H IFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAxOTggKDB4MSwgMHhjNikKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpUUkFOUzogdGlkOjB4ZTgyOWMwYjcgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6 MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4 NDY5YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEg ICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBB VCBMU04gY3ljbGUgMSBibG9jayAyMDAgKDB4MSwgMHhjOCkKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpU UkFOUzogdGlkOjB4YjQ4YzA4NDAgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBx OjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5YjUw IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFw IHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04g Y3ljbGUgMSBibG9jayAyMDIgKDB4MSwgMHhjYSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzog dGlkOjB4YjA4YTRhNTYgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5 NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDcxYzY4IGxlbjox MjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6 MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUg MSBibG9jayAyMDQgKDB4MSwgMHhjYykKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4 YWJhNmZlMTYgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJV RjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5YTQ4IGxlbjoxMjggCglC VUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZs YWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9j ayAyMDYgKDB4MSwgMHhjZSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4NzM5NjIz MmEgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250 OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAj cmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4 MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyMDgg KDB4MSwgMHhkMCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4OTI3NzQ0ZWIgIHR5 cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90 YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVnczoy ICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQ RVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyMTAgKDB4MSwg MHhkMikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ZmZhMTMyZWQgIHR5cGU6RFVN TVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBh OjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3Rh cnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxv Y2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyMTIgKDB4MSwgMHhkNCkK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MjI4YzY0ZSAgdHlwZTpEVU1NWTEgICNp dGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njlh MDggbGVuOjI0IGE6MHg0NjliNTAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtu bzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZm ZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDIxNCAoMHgxLCAweGQ2KQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHgxM2RmYWVmMiAgdHlwZTpEVU1NWTEgICNpdGVtczox ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZjAgbGVu OjI0IGE6MHg0NzFjNjggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAg ICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpM T0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDIxNiAoMHgxLCAweGQ4KQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClRSQU5TOiB0aWQ6MHgyNDUzNTAxICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5z OjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYTow eDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjox ICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMg QVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjE4ICgweDEsIDB4ZGEpCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K VFJBTlM6IHRpZDoweDliNzI1MzU3ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAg cToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWI1 MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1h cCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNO IGN5Y2xlIDEgYmxvY2sgMjIwICgweDEsIDB4ZGMpCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6 IHRpZDoweDVjZGJjNDM4ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2 OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46 MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXpl OjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xl IDEgYmxvY2sgMjIyICgweDEsIDB4ZGUpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDow eDg0OGM2OGU0ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApC VUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJ QlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBm bGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxv Y2sgMjI0ICgweDEsIDB4ZTApCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDJkNjJl ZWEzICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNu dDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAg I3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczow eDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjI2 ICgweDEsIDB4ZTIpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDUwNmJlNjViICB0 eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRv dGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6 MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNV UEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjI4ICgweDEs IDB4ZTQpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGI3MDAxMDhhICB0eXBlOkRV TU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIg YToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0 YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJs b2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjMwICgweDEsIDB4ZTYp Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDEyNGY3YWMzICB0eXBlOkRVTU1ZMSAg I2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2 OWFmMCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJs a25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1 ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjMyICgweDEsIDB4ZTgpCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDZkNDQxZDllICB0eXBlOkRVTU1ZMSAgI2l0ZW1z OjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBs ZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4 MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoK CkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjM0ICgweDEsIDB4ZWEpCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KVFJBTlM6IHRpZDoweDkyYTBiOTBiICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRy YW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQg YToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxl bjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBS RUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjM2ICgweDEsIDB4ZWMpCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KVFJBTlM6IHRpZDoweGIyMTc1MTA2ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4 MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2 OWI1MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAg Ym1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQg TFNOIGN5Y2xlIDEgYmxvY2sgMjM4ICgweDEsIDB4ZWUpCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJB TlM6IHRpZDoweDY1MzE4NzAzICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcTow eDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBs ZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBz aXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5 Y2xlIDEgYmxvY2sgMjQwICgweDEsIDB4ZjApCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRp ZDoweGJhNzcyN2U2ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTcz MApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4 IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEg ICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEg YmxvY2sgMjQyICgweDEsIDB4ZjIpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGZh NWJhZGE2ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWI1MCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFn czoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sg MjQ0ICgweDEsIDB4ZjQpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGM3YmE3ZjQg IHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIg dG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVn czoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJ U1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNDYgKDB4 MSwgMHhmNikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4NmQ1MWEyZjggIHR5cGU6 RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6 MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAg c3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIg QmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNDggKDB4MSwgMHhm OCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4YWQyYmVhNWYgIHR5cGU6RFVNTVkx ICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4 NDY5YTA4IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQg Ymxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sg QnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNTAgKDB4MSwgMHhmYSkKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ZTZiZTg1ODggIHR5cGU6RFVNTVkxICAjaXRl bXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYw IGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86 MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVy OgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNTIgKDB4MSwgMHhmYykKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpUUkFOUzogdGlkOjB4YzY2Mjk4MTIgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAg dHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoy NCBhOjB4NDY5YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAg bGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9H IFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNTQgKDB4MSwgMHhmZSkKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpUUkFOUzogdGlkOjB4NjdkYTM1OTAgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6 MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4 NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEg ICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBB VCBMU04gY3ljbGUgMSBibG9jayAyNTYgKDB4MSwgMHgxMDApCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K VFJBTlM6IHRpZDoweGJmMTA0YTdmICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAg cToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2 OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1h cCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNO IGN5Y2xlIDEgYmxvY2sgMjU4ICgweDEsIDB4MTAyKQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5T OiB0aWQ6MHg0YTU1OWVlYyAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0 Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZjAgbGVuOjI0IGE6MHg0NjlhNDggbGVu OjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6 ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNs ZSAxIGJsb2NrIDI2MCAoMHgxLCAweDEwNCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4Mzg1MzlmMTkgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMw CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAg IGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBi bG9jayAyNjIgKDB4MSwgMHgxMDYpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDc2 MWI5NDM0ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFn czoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sg MjY0ICgweDEsIDB4MTA4KQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHhkNzdkM2Fj MiAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6 MiB0b3RhbDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNy ZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgw CglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDI2NiAo MHgxLCAweDEwYSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4NDEwOTRkYmIgIHR5 cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90 YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoy ICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQ RVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNjggKDB4MSwg MHgxMGMpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGE0NTJlMzg4ICB0eXBlOkRV TU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIg YToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0 YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJs b2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjcwICgweDEsIDB4MTBl KQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHhmMzE0Y2I2OSAgdHlwZTpEVU1NWTEg ICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0 NjlhZjAgbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBi bGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBC dWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDI3MiAoMHgxLCAweDExMCkKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4OTc3ZDg1ZmEgIHR5cGU6RFVNTVkxICAjaXRl bXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4 IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86 MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVy OgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyNzQgKDB4MSwgMHgxMTIpCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDc5ODZkZWQ0ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEg IHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46 MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAg IGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxP RyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjc2ICgweDEsIDB4MTE0KQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClRSQU5TOiB0aWQ6MHgyZGE0NmE1MyAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFu czoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6 MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46 MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVD IEFUIExTTiBjeWNsZSAxIGJsb2NrIDI3OCAoMHgxLCAweDExNikKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpUUkFOUzogdGlkOjB4Yzg2MTk1MjAgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgw ICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5 YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBi bWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBM U04gY3ljbGUgMSBibG9jayAyODAgKDB4MSwgMHgxMTgpCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJB TlM6IHRpZDoweDNmMjM2Y2Y4ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcTow eDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBs ZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBz aXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5 Y2xlIDEgYmxvY2sgMjgyICgweDEsIDB4MTFhKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0 aWQ6MHg2ODhhYjMwZCAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3 MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZjAgbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEy OCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZTox ICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAx IGJsb2NrIDI4NCAoMHgxLCAweDExYykKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4 Yjc5ZDg2MWEgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJV RjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglC VUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZs YWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9j ayAyODYgKDB4MSwgMHgxMWUpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGUwOTM2 ODcwICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNu dDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAg I3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczow eDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjg4 ICgweDEsIDB4MTIwKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg3YWM3OTRiMyAg dHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0 b3RhbDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdz OjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglT VVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDI5MCAoMHgx LCAweDEyMikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4YmM3MTZmZTMgIHR5cGU6 RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6 MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAg c3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIg QmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyOTIgKDB4MSwgMHgx MjQpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDg3Y2IxYzg3ICB0eXBlOkRVTU1Z MSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYTow eDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0 IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2Nr IEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMjk0ICgweDEsIDB4MTI2KQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHgxZDY0MzcwMiAgdHlwZTpEVU1NWTEgICNp dGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njlh ZjAgbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtu bzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZm ZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDI5NiAoMHgxLCAweDEyOCkKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MTQ3Y2RmOTggIHR5cGU6RFVNTVkxICAjaXRlbXM6 MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxl bjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgw ICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoK TE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAyOTggKDB4MSwgMHgxMmEpCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KVFJBTlM6IHRpZDoweGJmMThmMmEyICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRy YW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQg YToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxl bjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBS RUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMzAwICgweDEsIDB4MTJjKQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClRSQU5TOiB0aWQ6MHg0MzNmZmNjZCAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczow eDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6MHg0 NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAg IGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFU IExTTiBjeWNsZSAxIGJsb2NrIDMwMiAoMHgxLCAweDEyZSkKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpU UkFOUzogdGlkOjB4ZTllZmU4OTAgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBx OjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YjUw IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFw IHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04g Y3ljbGUgMSBibG9jayAzMDQgKDB4MSwgMHgxMzApCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6 IHRpZDoweDE4ZjdlNjEwICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2 OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46 MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXpl OjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xl IDEgYmxvY2sgMzA2ICgweDEsIDB4MTMyKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6 MHgzYTliMjAzMyAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAK QlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZjAgbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAK CUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAg ZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJs b2NrIDMwOCAoMHgxLCAweDEzNCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4N2I3 OTBlNzggIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjog Y250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6 ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdz OjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAz MTAgKDB4MSwgMHgxMzYpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGIwMWE0NjA5 ICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoy IHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3Jl Z3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAK CVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMzEyICgw eDEsIDB4MTM4KQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg1MzdmYmRmNCAgdHlw ZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3Rh bDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIg ICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBF UiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDMxNCAoMHgxLCAw eDEzYSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4YzA2YTYzZmQgIHR5cGU6RFVN TVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBh OjB4NDY5YWYwIGxlbjoyNCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3Rh cnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxv Y2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAzMTYgKDB4MSwgMHgxM2Mp Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGFhY2VjMWU1ICB0eXBlOkRVTU1ZMSAg I2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2 OWEwOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJs a25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1 ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sgMzE4ICgweDEsIDB4MTNlKQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHgzZDRlMmZiYiAgdHlwZTpEVU1NWTEgICNpdGVt czoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZjAg bGVuOjI0IGE6MHg0NjlhNDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzow eDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6 CgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDMyMCAoMHgxLCAweDE0MCkKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpUUkFOUzogdGlkOjB4NTkyMTgxYTcgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAg dHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoy NCBhOjB4NDY5YjUwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAg bGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9H IFJFQyBBVCBMU04gY3ljbGUgMSBibG9jayAzMjIgKDB4MSwgMHgxNDIpCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KVFJBTlM6IHRpZDoweGI3NDJkNTcyICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5z OjB4MCAgcToweDQ2OTczMApCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYTow eDQ3MWM2OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjox ICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMg QVQgTFNOIGN5Y2xlIDEgYmxvY2sgMzI0ICgweDEsIDB4MTQ0KQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClRSQU5TOiB0aWQ6MHhkNGFkM2RiNyAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAg IHE6MHg0Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhMDggbGVuOjI0IGE6MHg0Njlh NDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJt YXAgc2l6ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExT TiBjeWNsZSAxIGJsb2NrIDMyNiAoMHgxLCAweDE0NikKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFO UzogdGlkOjB4NGI3YzAxYiAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0 Njk3MzAKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhZjAgbGVuOjI0IGE6MHg0NjliNTAgbGVu OjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6 ZToxICAgZmxhZ3M6MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6CgpMT0cgUkVDIEFUIExTTiBjeWNs ZSAxIGJsb2NrIDMyOCAoMHgxLCAweDE0OCkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4ZjdhYmU4M2YgIHR5cGU6RFVNTVkxICAjaXRlbXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMw CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5YTA4IGxlbjoyNCBhOjB4NDcxYzY4IGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAg IGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVyOgoKTE9HIFJFQyBBVCBMU04gY3ljbGUgMSBi bG9jayAzMzAgKDB4MSwgMHgxNGEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDoweGFj YTQ2ZWZkICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApCVUY6 IGNudDoyIHRvdGFsOjIgYToweDQ2OWFmMCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4IAoJQlVG OiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBmbGFn czoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxvY2sg MzMyICgweDEsIDB4MTRjKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHhmZjRiMTA2 MyAgdHlwZTpSTURJUiAgI2l0ZW1zOjMgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoz IHRvdGFsOjMgYToweDQ2OTc0MCBsZW46NTYgYToweDQ2OTc4MCBsZW46OTYgYToweDQ2OWI1MCBs ZW46OCAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MWFiICBmbGFnczoweDMgICBkc2l6ZTo4CglD T1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4NDFjMCAgdmVyOjIgIGZvcm1hdDoxICBvbmxp bms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MiBwcm9qaWQ6MAoJCWF0aW1lOjEzMjgxMjA5Nzkg IG10aW1lOjUzICBjdGltZTo1MwoJCWZsdXNoaXRlcjowCgkJc2l6ZToweDYgIG5ibGtzOjB4MCAg ZXhzaXplOjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazow eDAgIGRtc3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46MjAxNzcyMjEyOAoJCURBVEEgRk9SSyBMT0NB TCBpbm9kZSBkYXRhOgpJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OWI2MCBsZW46NTYgYToweDQ3 MWM2OCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEwMDAzMTcgIGZsYWdzOjB4MSAg IGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0MWMwICB2ZXI6MiAgZm9y bWF0OjEgIG9ubGluazowCgkJdWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6 MTMyODEyMDk3OSAgbXRpbWU6MTMyODEyMDk3OSAgY3RpbWU6NTMKCQlmbHVzaGl0ZXI6MAoJCXNp emU6MHg2ICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZv cmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE1OTUzMjgz NwpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWEyOCBsZW46MjQgYToweDQ2OWE0OCBsZW46MTI4 IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4NzgwZGJhICAgbGVuOjEgICBibWFwIHNp emU6MSAgIGZsYWdzOjB4MAoJQlVGIERBVEEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4ZTYyOGRhNCAgdHlwZTpJTkFDVElWRSAgI2l0ZW1zOjMgIHRyYW5zOjB4MCAgcToweDQ2OTcz MApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OWI2MCBsZW46NTYgYToweDQ2OTc4MCBsZW46OTYg CglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEwMDAzMTcgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNP UkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHgwICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazow CgkJdWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6MTMyODEyMDk3OSAgbXRp bWU6MTMyODEyMDk3OSAgY3RpbWU6NTMKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHg2ICBuYmxrczow eDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1h c2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE1OTUzMjgzOApCVUY6IGNudDoyIHRv dGFsOjIgYToweDQ2OWEyOCBsZW46MjQgYToweDQ3MWM2OCBsZW46MjU2IAoJQlVGOiAgI3JlZ3M6 MiAgIHN0YXJ0IGJsa25vOjB4NzgwZGJhICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4 MAoJQUdJIEJ1ZmZlcjogKFhBR0kpCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDcxYzA4IGxlbjoy OCBhOjB4NDY5YTQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODEw NDggICBsZW46OCAgIGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgwCglCVUYgREFUQQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClRSQU5TOiB0aWQ6MHg5MmQwZDE2MSAgdHlwZTpSTURJUiAgI2l0ZW1zOjMgIHRy YW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDozIHRvdGFsOjMgYToweDQ2OTc2MCBsZW46NTYg YToweDQ2OWEyOCBsZW46OTYgYToweDQ2OWE5MCBsZW46OCAKCUlOT0RFOiAjcmVnczozICAgaW5v OjB4MjAwYTBhZiAgZmxhZ3M6MHgzICAgZHNpemU6OAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAg bW9kZToweDQxZWQgIHZlcjoyICBmb3JtYXQ6MSAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5s aW5rOjIgcHJvamlkOjAKCQlhdGltZTo2OCAgbXRpbWU6NTMgIGN0aW1lOjUzCgkJZmx1c2hpdGVy OjIKCQlzaXplOjB4NiAgbmJsa3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRz OjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjot OTIzOTg0MjI0CgkJREFUQSBGT1JLIExPQ0FMIGlub2RlIGRhdGE6CklOTzogY250OjMgdG90YWw6 MyBhOjB4NDY5YWEwIGxlbjo1NiBhOjB4NDY5YjEwIGxlbjo5NiBhOjB4NDY5YWUwIGxlbjo4IAoJ SU5PREU6ICNyZWdzOjMgICBpbm86MHgxYWIgIGZsYWdzOjB4MyAgIGRzaXplOjgKCUNPUkUgaW5v ZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0MWMwICB2ZXI6MiAgZm9ybWF0OjEgIG9ubGluazowCgkJ dWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6MTMyODEyMDk3OSAgbXRpbWU6 NTMgIGN0aW1lOjUzCgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4NiAgbmJsa3M6MHgwICBleHNpemU6 MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1z dGF0ZTowICBmbGFnczoweDAgIGdlbjoyMDE3NzIyMTI4CgkJREFUQSBGT1JLIExPQ0FMIGlub2Rl IGRhdGE6CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDcxYzA4IGxlbjoyNCBhOjB4NDY5Yjc4IGxl bjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgyICAgbGVuOjEgICBibWFwIHNp emU6MSAgIGZsYWdzOjB4MAoJQlVGIERBVEEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4YjZkYTQ3NWUgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczozICB0cmFuczoweDAgIHE6MHg0Njk3 MzAKSU5POiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhYTAgbGVuOjU2IGE6MHg0NjlhMjggbGVuOjk2 IAoJSU5PREU6ICNyZWdzOjIgICBpbm86MHgxYWIgIGZsYWdzOjB4MSAgIGRzaXplOjgKCUNPUkUg aW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHgwICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJ dWlkOjAgIGdpZDowICBubGluazowIHByb2ppZDowCgkJYXRpbWU6MTMyODEyMDk3OSAgbXRpbWU6 NTMgIGN0aW1lOjUzCgkJZmx1c2hpdGVyOjAKCQlzaXplOjB4NiAgbmJsa3M6MHgwICBleHNpemU6 MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1z dGF0ZTowICBmbGFnczoweDAgIGdlbjoyMDE3NzIyMTI5CkJVRjogY250OjIgdG90YWw6MiBhOjB4 NDcxYzA4IGxlbjoyNCBhOjB4NDcxYzQ4IGxlbjoyNTYgCglCVUY6ICAjcmVnczoyICAgc3RhcnQg Ymxrbm86MHgyICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJQUdJIEJ1ZmZlcjog KFhBR0kpCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5NzYwIGxlbjoyOCBhOjB4NDY5YjEwIGxl bjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg4ICAgbGVuOjggICBibWFwIHNp emU6MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlk OjB4OTk1Y2JlMzEgIHR5cGU6U0VUQVRUUl9TSVpFICAjaXRlbXM6MiAgdHJhbnM6MHgwICBxOjB4 NDY5NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5N2MwIGxlbjo1NiBhOjB4NDY5YTA4IGxl bjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MThiICBmbGFnczoweDEgICBkc2l6ZTowCglD T1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxp bms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjc1ICBtdGltZTo3 NSAgY3RpbWU6NzUKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTow ICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0 YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIwMTc3MjIxMjgKRUZJOiBjbnQ6MSB0b3RhbDoxIGE6MHg0 NjlhNzAgbGVuOjMyIAoJRUZJOiAgI3JlZ3M6MSAgICBudW1fZXh0ZW50czoxICBpZDoweGZmZmZm ZmZmY2NmNjZlMDgKCShzOiAweDUyLCBsOiAxKSAKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzog dGlkOjB4OTk1Y2JlMzIgIHR5cGU6U0VUQVRUUl9TSVpFICAjaXRlbXM6NSAgdHJhbnM6MHgwICBx OjB4NDY5NzMwCkVGRDogY250OjEgdG90YWw6MSBhOjB4NDY5YTcwIGxlbjozMiAKCUVGRDogICNy ZWdzOiAxICAgIG51bV9leHRlbnRzOiAxICBpZDogMHhmZmZmZmZmZmNjZjY2ZTA4CkJVRjogY250 OjIgdG90YWw6MiBhOjB4NDY5NzgwIGxlbjoyNCBhOjB4NDY5YWQwIGxlbjoxMjggCglCVUY6ICAj cmVnczoyICAgc3RhcnQgYmxrbm86MHgxICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4 MAoJQUdGIEJ1ZmZlcjogKFhBR0YpCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDcxYzI4IGxlbjoy OCBhOjB4NDY5Yjc4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxMCAg IGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCkJVRjogY250OjIgdG90 YWw6MiBhOjB4NDY5YTA4IGxlbjoyOCBhOjB4NDcxYzQ4IGxlbjoxMjggCglCVUY6ICAjcmVnczoy ICAgc3RhcnQgYmxrbm86MHgxOCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJV RiBEQVRBCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5N2MwIGxlbjo1NiBhOjB4NDcxZDEwIGxl bjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MThiICBmbGFnczoweDEgICBkc2l6ZTowCglD T1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxp bms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjc1ICBtdGltZTo3 NSAgY3RpbWU6NzUKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTow ICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0 YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIwMTc3MjIxMjgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFO UzogdGlkOjB4OTk1Y2JlMzMgIHR5cGU6U0VUQVRUUl9TSVpFICAjaXRlbXM6MSAgdHJhbnM6MHgw ICBxOjB4NDY5NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDY5 NzgwIGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MThiICBmbGFnczoweDEgICBkc2l6 ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoy ICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjc1ICBt dGltZTo1NiAgY3RpbWU6NTYKCQlmbHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4 c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgw ICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIwMTc3MjIxMjgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpUUkFOUzogdGlkOjB4YjgyYTgwNGUgIHR5cGU6U1RSQVRfV1JJVEUgICNpdGVtczo0ICB0cmFu czoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MyB0b3RhbDozIGE6MHg0Njk3NDAgbGVuOjU2IGE6 MHg0NzFjMDggbGVuOjk2IGE6MHg0NzFjNzAgbGVuOjE2IAoJSU5PREU6ICNyZWdzOjMgICBpbm86 MHgxOGIgIGZsYWdzOjB4NSAgIGRzaXplOjE2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2Rl OjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6 MSBwcm9qaWQ6MAoJCWF0aW1lOjc1ICBtdGltZTo1NiAgY3RpbWU6NTYKCQlmbHVzaGl0ZXI6MAoJ CXNpemU6MHgwICBuYmxrczoweDEwICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAK CQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoyMDE3 NzIyMTI4CgkJREFUQSBGT1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKQlVGOiBjbnQ6MiB0b3RhbDoy IGE6MHg0NzFjZjAgbGVuOjI0IGE6MHg0NjlhMDggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBz dGFydCBibGtubzoweDEgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglBR0YgQnVm ZmVyOiAoWEFHRikKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjlhOTAgbGVuOjI4IGE6MHg0Njlh ZjAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDE4ICAgbGVuOjggICBi bWFwIHNpemU6MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0 NjliNzggbGVuOjI4IGE6MHg0NzFkMTAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBi bGtubzoweDEwICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MjRkMzBiMGYgIHR5cGU6SU5BQ1RJVkUgICNp dGVtczoyICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MyB0b3RhbDozIGE6MHg0Njk3 NDAgbGVuOjU2IGE6MHg0Njk3ODAgbGVuOjk2IGE6MHg0Njk3ZTggbGVuOjE2IAoJSU5PREU6ICNy ZWdzOjMgICBpbm86MHgxOGIgIGZsYWdzOjB4NSAgIGRzaXplOjE2CglDT1JFIGlub2RlOgoJCW1h Z2ljOklOICBtb2RlOjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBn aWQ6MCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjc1ICBtdGltZTo1NiAgY3RpbWU6NTYKCQlm bHVzaGl0ZXI6MAoJCXNpemU6MHgwICBuYmxrczoweDEgIGV4c2l6ZTowICBuZXh0ZW50czoxICBh bmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4 MCAgZ2VuOjIwMTc3MjIxMjgKCQlEQVRBIEZPUksgRVhURU5UUyBpbm9kZSBkYXRhOgpFRkk6IGNu dDoxIHRvdGFsOjEgYToweDQ2OWEwOCBsZW46MzIgCglFRkk6ICAjcmVnczoxICAgIG51bV9leHRl bnRzOjEgIGlkOjB4ZmZmZmZmZmZjY2Y2NmNhOAoJKHM6IDB4NGIxLCBsOiAxNSkgCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDI0ZDMwYjEwICB0eXBlOklOQUNUSVZFICAjaXRlbXM6 NSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkVGRDogY250OjEgdG90YWw6MSBhOjB4NDY5YTA4IGxl bjozMiAKCUVGRDogICNyZWdzOiAxICAgIG51bV9leHRlbnRzOiAxICBpZDogMHhmZmZmZmZmZmNj ZjY2Y2E4CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5Yjk4IGxlbjoyNCBhOjB4NDY5YTY4IGxl bjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxICAgbGVuOjEgICBibWFwIHNp emU6MSAgIGZsYWdzOjB4MAoJQUdGIEJ1ZmZlcjogKFhBR0YpCkJVRjogY250OjIgdG90YWw6MiBh OjB4NDY5YWYwIGxlbjoyOCBhOjB4NDcxYzA4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3Rh cnQgYmxrbm86MHgxMCAgIGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRB CkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5N2MwIGxlbjoyOCBhOjB4NDcxYzkwIGxlbjoxMjgg CglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHgxOCAgIGxlbjo4ICAgYm1hcCBzaXplOjIg ICBmbGFnczoweDAKCUJVRiBEQVRBCklOTzogY250OjMgdG90YWw6MyBhOjB4NDY5NzQwIGxlbjo1 NiBhOjB4NDcxZDM4IGxlbjo5NiBhOjB4NDY5N2U4IGxlbjoxNiAKCUlOT0RFOiAjcmVnczozICAg aW5vOjB4MThiICBmbGFnczoweDUgICBkc2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAg bW9kZToweDgxYTQgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MCAgZ2lkOjAgIG5s aW5rOjEgcHJvamlkOjAKCQlhdGltZTo3NSAgbXRpbWU6NTYgIGN0aW1lOjU2CgkJZmx1c2hpdGVy OjAKCQlzaXplOjB4MCAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRz OjAKCQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoy MDE3NzIyMTI4CgkJREFUQSBGT1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpUUkFOUzogdGlkOjB4MjRkMzBiMTEgIHR5cGU6SU5BQ1RJVkUgICNpdGVtczoxICB0cmFu czoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MyB0b3RhbDozIGE6MHg0Njk3NDAgbGVuOjU2IGE6 MHg0Njk3ODAgbGVuOjk2IGE6MHg0Njk3ZTggbGVuOjE2IAoJSU5PREU6ICNyZWdzOjMgICBpbm86 MHgxOGIgIGZsYWdzOjB4NSAgIGRzaXplOjE2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2Rl OjB4ODFhNCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDowICBnaWQ6MCAgbmxpbms6 MSBwcm9qaWQ6MAoJCWF0aW1lOjc1ICBtdGltZTo1NiAgY3RpbWU6NTYKCQlmbHVzaGl0ZXI6MAoJ CXNpemU6MHgwICBuYmxrczoweDEgIGV4c2l6ZTowICBuZXh0ZW50czoxICBhbmV4dGVudHM6MAoJ CWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjIwMTc3 MjIxMjgKCQlEQVRBIEZPUksgRVhURU5UUyBpbm9kZSBkYXRhOgo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClRSQU5TOiB0aWQ6MHhmZmU0NmYwOCAgdHlwZTpTRVRBVFRSICAjaXRlbXM6MSAgdHJhbnM6MHgw ICBxOjB4NDY5NzMwCklOTzogY250OjIgdG90YWw6MiBhOjB4NDY5NzQwIGxlbjo1NiBhOjB4NDcx YzA4IGxlbjo5NiAKCUlOT0RFOiAjcmVnczoyICAgaW5vOjB4MTAwMDBiYiAgZmxhZ3M6MHgxICAg ZHNpemU6MAoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDQxZWQgIHZlcjoyICBmb3Jt YXQ6MSAgb25saW5rOjAKCQl1aWQ6MTAwMCAgZ2lkOjEwMDAgIG5saW5rOjIgcHJvamlkOjAKCQlh dGltZTo5NiAgbXRpbWU6MTA2ICBjdGltZTo3NwoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDFlICBu YmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAg ZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4N2I3MDk5NWIgIHR5cGU6U0VUQVRUUiAgI2l0ZW1z OjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0MCBs ZW46NTYgYToweDQ3MWMwOCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEwMDAwYmMg IGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MTgw ICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjEwMDAgIGdpZDoxMDAwICBubGluazox IHByb2ppZDowCgkJYXRpbWU6MTA2ICBtdGltZToxMDYgIGN0aW1lOjc3CgkJZmx1c2hpdGVyOjEK CQlzaXplOjB4ZCAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAK CQlmb3Jrb2ZmOjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIw MDEyMzczCgpMT0cgUkVDIEFUIExTTiBjeWNsZSAxIGJsb2NrIDM0NiAoMHgxLCAweDE1YSkKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4MzA2NWY5MWIgIHR5cGU6RFVNTVkxICAjaXRl bXM6MSAgdHJhbnM6MHgwICBxOjB4NDY5NzMwCkJVRjogY250OjIgdG90YWw6MiBhOjB4NDY5Nzgw IGxlbjoyNCBhOjB4NDcxYzA4IGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86 MHgwICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJU1VQRVIgQmxvY2sgQnVmZmVy Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg4MGFiOWY3ZCAgdHlwZTpTRVRBVFRS X1NJWkUgICNpdGVtczoyICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MiB0b3RhbDoy IGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0NzFjMDggbGVuOjk2IAoJSU5PREU6ICNyZWdzOjIgICBp bm86MHgxMDAwMGJjICBmbGFnczoweDEgICBkc2l6ZTowCglDT1JFIGlub2RlOgoJCW1hZ2ljOklO ICBtb2RlOjB4ODE4MCAgdmVyOjIgIGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDoxMDAwICBnaWQ6 MTAwMCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0aW1lOjEwNiAgbXRpbWU6MTA2ICBjdGltZTo3NwoJ CWZsdXNoaXRlcjoxCgkJc2l6ZToweDAgIG5ibGtzOjB4MCAgZXhzaXplOjAgIG5leHRlbnRzOjAg IGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxhZ3M6 MHgwICBnZW46MTQyMDAxMjM3MwpFRkk6IGNudDoxIHRvdGFsOjEgYToweDQ2OWJkOCBsZW46MzIg CglFRkk6ICAjcmVnczoxICAgIG51bV9leHRlbnRzOjEgIGlkOjB4ZmZmZmZmZmZjOTFiNmUwOAoJ KHM6IDB4MTAwMDJlLCBsOiAxKSAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ODBh YjlmN2UgIHR5cGU6U0VUQVRUUl9TSVpFICAjaXRlbXM6NSAgdHJhbnM6MHgwICBxOjB4NDY5NzMw CkVGRDogY250OjEgdG90YWw6MSBhOjB4NDY5YmQ4IGxlbjozMiAKCUVGRDogICNyZWdzOiAxICAg IG51bV9leHRlbnRzOiAxICBpZDogMHhmZmZmZmZmZmM5MWI2ZTA4CkJVRjogY250OjIgdG90YWw6 MiBhOjB4NDcxZDE4IGxlbjoyNCBhOjB4NDcxYzgwIGxlbjoxMjggCglCVUY6ICAjcmVnczoyICAg c3RhcnQgYmxrbm86MHg3ODBkYjkgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6MHgwCglB R0YgQnVmZmVyOiAoWEFHRikKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NzFjMjggbGVuOjI4IGE6 MHg0NjlhMjggbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRjMCAg IGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCkJVRjogY250OjIgdG90 YWw6MiBhOjB4NDY5YWIwIGxlbjoyOCBhOjB4NDY5YjEwIGxlbjoxMjggCglCVUY6ICAjcmVnczoy ICAgc3RhcnQgYmxrbm86MHg3ODBkYzggICBsZW46OCAgIGJtYXAgc2l6ZToyICAgZmxhZ3M6MHgw CglCVUYgREFUQQpJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0MCBsZW46NTYgYToweDQ3MWQz OCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEwMDAwYmMgIGZsYWdzOjB4MSAgIGRz aXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MTgwICB2ZXI6MiAgZm9ybWF0 OjIgIG9ubGluazowCgkJdWlkOjEwMDAgIGdpZDoxMDAwICBubGluazoxIHByb2ppZDowCgkJYXRp bWU6MTA2ICBtdGltZToxMDYgIGN0aW1lOjc3CgkJZmx1c2hpdGVyOjEKCQlzaXplOjB4MCAgbmJs a3M6MHgwICBleHNpemU6MCAgbmV4dGVudHM6MCAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRt ZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzczCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KVFJBTlM6IHRpZDoweDgwYWI5ZjdmICB0eXBlOlNFVEFUVFJfU0laRSAgI2l0 ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0 MCBsZW46NTYgYToweDQ2OTc4MCBsZW46OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDEwMDAw YmMgIGZsYWdzOjB4MSAgIGRzaXplOjAKCUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4 MTgwICB2ZXI6MiAgZm9ybWF0OjIgIG9ubGluazowCgkJdWlkOjEwMDAgIGdpZDoxMDAwICBubGlu azoxIHByb2ppZDowCgkJYXRpbWU6MTA2ICBtdGltZTo4NyAgY3RpbWU6ODcKCQlmbHVzaGl0ZXI6 MQoJCXNpemU6MHgwICBuYmxrczoweDAgIGV4c2l6ZTowICBuZXh0ZW50czowICBhbmV4dGVudHM6 MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0 MjAwMTIzNzMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ZGRiNTllNTIgIHR5cGU6 U1RSQVRfV1JJVEUgICNpdGVtczo0ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MyB0 b3RhbDozIGE6MHg0Njk3NDAgbGVuOjU2IGE6MHg0Njk3ODAgbGVuOjk2IGE6MHg0Njk3ZTggbGVu OjE2IAoJSU5PREU6ICNyZWdzOjMgICBpbm86MHgxMDAwMGJjICBmbGFnczoweDUgICBkc2l6ZTox NgoJQ09SRSBpbm9kZToKCQltYWdpYzpJTiAgbW9kZToweDgxODAgIHZlcjoyICBmb3JtYXQ6MiAg b25saW5rOjAKCQl1aWQ6MTAwMCAgZ2lkOjEwMDAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZTox MDYgIG10aW1lOjg3ICBjdGltZTo4NwoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDAgIG5ibGtzOjB4 MTAgIGV4c2l6ZTowICBuZXh0ZW50czoxICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1h c2s6MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzMKCQlEQVRBIEZPUksg RVhURU5UUyBpbm9kZSBkYXRhOgpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWJiOCBsZW46MjQg YToweDQ2OWE0OCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4NzgwZGI5 ICAgbGVuOjEgICBibWFwIHNpemU6MSAgIGZsYWdzOjB4MAoJQUdGIEJ1ZmZlcjogKFhBR0YpCkJV RjogY250OjIgdG90YWw6MiBhOjB4NDY5YWQwIGxlbjoyOCBhOjB4NDcxYzA4IGxlbjoxMjggCglC VUY6ICAjcmVnczoyICAgc3RhcnQgYmxrbm86MHg3ODBkYzggICBsZW46OCAgIGJtYXAgc2l6ZToy ICAgZmxhZ3M6MHgwCglCVUYgREFUQQpCVUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OWIzMCBsZW46 MjggYToweDQ3MWM5MCBsZW46MTI4IAoJQlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4Nzgw ZGMwICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZsYWdzOjB4MAoJQlVGIERBVEEKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpUUkFOUzogdGlkOjB4ODIzZjMzYTggIHR5cGU6SU5BQ1RJVkUgICNpdGVtczoy ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKSU5POiBjbnQ6MyB0b3RhbDozIGE6MHg0NjliOTggbGVu OjU2IGE6MHg0Njk3NDAgbGVuOjk2IGE6MHg0Njk3YTggbGVuOjE2IAoJSU5PREU6ICNyZWdzOjMg ICBpbm86MHgxMDAwMGJjICBmbGFnczoweDUgICBkc2l6ZToxNgoJQ09SRSBpbm9kZToKCQltYWdp YzpJTiAgbW9kZToweDgxODAgIHZlcjoyICBmb3JtYXQ6MiAgb25saW5rOjAKCQl1aWQ6MTAwMCAg Z2lkOjEwMDAgIG5saW5rOjEgcHJvamlkOjAKCQlhdGltZToxMDYgIG10aW1lOjg3ICBjdGltZTo4 NwoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDAgIG5ibGtzOjB4MSAgZXhzaXplOjAgIG5leHRlbnRz OjEgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRtc3RhdGU6MCAgZmxh Z3M6MHgwICBnZW46MTQyMDAxMjM3MwoJCURBVEEgRk9SSyBFWFRFTlRTIGlub2RlIGRhdGE6CkVG STogY250OjEgdG90YWw6MSBhOjB4NDY5YmQ4IGxlbjozMiAKCUVGSTogICNyZWdzOjEgICAgbnVt X2V4dGVudHM6MSAgaWQ6MHhmZmZmZmZmZmM5MWI2Y2E4CgkoczogMHgxMDAwZmMsIGw6IDE1KSAK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4ODIzZjMzYTkgIHR5cGU6SU5BQ1RJVkUg ICNpdGVtczo1ICB0cmFuczoweDAgIHE6MHg0Njk3MzAKRUZEOiBjbnQ6MSB0b3RhbDoxIGE6MHg0 NjliZDggbGVuOjMyIAoJRUZEOiAgI3JlZ3M6IDEgICAgbnVtX2V4dGVudHM6IDEgIGlkOiAweGZm ZmZmZmZmYzkxYjZjYTgKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0NjliNTAgbGVuOjI0IGE6MHg0 NjlhMzAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRiOSAgIGxl bjoxICAgYm1hcCBzaXplOjEgICBmbGFnczoweDAKCUFHRiBCdWZmZXI6IChYQUdGKQpCVUY6IGNu dDoyIHRvdGFsOjIgYToweDQ2OWFiOCBsZW46MjggYToweDQ3MWMwOCBsZW46MTI4IAoJQlVGOiAg I3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4NzgwZGMwICAgbGVuOjggICBibWFwIHNpemU6MiAgIGZs YWdzOjB4MAoJQlVGIERBVEEKQlVGOiBjbnQ6MiB0b3RhbDoyIGE6MHg0Njk3ODAgbGVuOjI4IGE6 MHg0NzFjYjAgbGVuOjEyOCAKCUJVRjogICNyZWdzOjIgICBzdGFydCBibGtubzoweDc4MGRjOCAg IGxlbjo4ICAgYm1hcCBzaXplOjIgICBmbGFnczoweDAKCUJVRiBEQVRBCklOTzogY250OjMgdG90 YWw6MyBhOjB4NDY5Yjk4IGxlbjo1NiBhOjB4NDcxZDU4IGxlbjo5NiBhOjB4NDY5N2E4IGxlbjox NiAKCUlOT0RFOiAjcmVnczozICAgaW5vOjB4MTAwMDBiYyAgZmxhZ3M6MHg1ICAgZHNpemU6MTYK CUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg4MTgwICB2ZXI6MiAgZm9ybWF0OjIgIG9u bGluazowCgkJdWlkOjEwMDAgIGdpZDoxMDAwICBubGluazoxIHByb2ppZDowCgkJYXRpbWU6MTA2 ICBtdGltZTo4NyAgY3RpbWU6ODcKCQlmbHVzaGl0ZXI6MQoJCXNpemU6MHgwICBuYmxrczoweDEg IGV4c2l6ZTowICBuZXh0ZW50czoxICBhbmV4dGVudHM6MAoJCWZvcmtvZmY6MCAgZG1ldm1hc2s6 MHgwICBkbXN0YXRlOjAgIGZsYWdzOjB4MCAgZ2VuOjE0MjAwMTIzNzMKCQlEQVRBIEZPUksgRVhU RU5UUyBpbm9kZSBkYXRhOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHg4MjNmMzNh YSAgdHlwZTpJTkFDVElWRSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJTk86IGNu dDozIHRvdGFsOjMgYToweDQ2OTdjMCBsZW46NTYgYToweDQ2OTc0MCBsZW46OTYgYToweDQ2OTdh OCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDEwMDAwYmMgIGZsYWdzOjB4NSAgIGRz aXplOjE2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODE4MCAgdmVyOjIgIGZvcm1h dDoyICBvbmxpbms6MAoJCXVpZDoxMDAwICBnaWQ6MTAwMCAgbmxpbms6MSBwcm9qaWQ6MAoJCWF0 aW1lOjEwNiAgbXRpbWU6ODcgIGN0aW1lOjg3CgkJZmx1c2hpdGVyOjEKCQlzaXplOjB4MCAgbmJs a3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2ZmOjAgIGRt ZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzczCgkJREFUQSBG T1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzogdGlkOjB4 MWY4MzBmYWEgIHR5cGU6U0VUQVRUUiAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApJ Tk86IGNudDozIHRvdGFsOjMgYToweDQ2OTdjMCBsZW46NTYgYToweDQ2OWI5OCBsZW46OTYgYTow eDQ2OTdhOCBsZW46MTYgCglJTk9ERTogI3JlZ3M6MyAgIGlubzoweDEwMDAwYmMgIGZsYWdzOjB4 NSAgIGRzaXplOjE2CglDT1JFIGlub2RlOgoJCW1hZ2ljOklOICBtb2RlOjB4ODE4MCAgdmVyOjIg IGZvcm1hdDoyICBvbmxpbms6MAoJCXVpZDoxMDAwICBnaWQ6MTAwMCAgbmxpbms6MSBwcm9qaWQ6 MAoJCWF0aW1lOjEwNiAgbXRpbWU6ODcgIGN0aW1lOjg3CgkJZmx1c2hpdGVyOjEKCQlzaXplOjB4 MCAgbmJsa3M6MHgxICBleHNpemU6MCAgbmV4dGVudHM6MSAgYW5leHRlbnRzOjAKCQlmb3Jrb2Zm OjAgIGRtZXZtYXNrOjB4MCAgZG1zdGF0ZTowICBmbGFnczoweDAgIGdlbjoxNDIwMDEyMzczCgkJ REFUQSBGT1JLIEVYVEVOVFMgaW5vZGUgZGF0YToKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUUkFOUzog dGlkOjB4MTgxZDk0MTAgIHR5cGU6U0VUQVRUUiAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2 OTczMApJTk86IGNudDoyIHRvdGFsOjIgYToweDQ2OTdjMCBsZW46NTYgYToweDQ2OWI5OCBsZW46 OTYgCglJTk9ERTogI3JlZ3M6MiAgIGlubzoweDIwMGEwYWQgIGZsYWdzOjB4MSAgIGRzaXplOjAK CUNPUkUgaW5vZGU6CgkJbWFnaWM6SU4gIG1vZGU6MHg0M2ZmICB2ZXI6MiAgZm9ybWF0OjEgIG9u bGluazowCgkJdWlkOjAgIGdpZDowICBubGluazoyIHByb2ppZDowCgkJYXRpbWU6NjggIG10aW1l OjY4ICBjdGltZTo4OAoJCWZsdXNoaXRlcjoxCgkJc2l6ZToweDYgIG5ibGtzOjB4MCAgZXhzaXpl OjAgIG5leHRlbnRzOjAgIGFuZXh0ZW50czowCgkJZm9ya29mZjowICBkbWV2bWFzazoweDAgIGRt c3RhdGU6MCAgZmxhZ3M6MHgwICBnZW46LTkyMzk4NDIyNAoKTE9HIFJFQyBBVCBMU04gY3ljbGUg MSBibG9jayAzNTYgKDB4MSwgMHgxNjQpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVFJBTlM6IHRpZDow eDJkMmQzNjBmICB0eXBlOkRVTU1ZMSAgI2l0ZW1zOjEgIHRyYW5zOjB4MCAgcToweDQ2OTczMApC VUY6IGNudDoyIHRvdGFsOjIgYToweDQ2OTc0MCBsZW46MjQgYToweDQ3MWMwOCBsZW46MTI4IAoJ QlVGOiAgI3JlZ3M6MiAgIHN0YXJ0IGJsa25vOjB4MCAgIGxlbjoxICAgYm1hcCBzaXplOjEgICBm bGFnczoweDAKCVNVUEVSIEJsb2NrIEJ1ZmZlcjoKCkxPRyBSRUMgQVQgTFNOIGN5Y2xlIDEgYmxv Y2sgMzU4ICgweDEsIDB4MTY2KQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRSQU5TOiB0aWQ6MHhiNDE2 ODY1MSAgdHlwZTpEVU1NWTEgICNpdGVtczoxICB0cmFuczoweDAgIHE6MHg0Njk3MzAKQlVGOiBj bnQ6MiB0b3RhbDoyIGE6MHg0Njk3NjAgbGVuOjI0IGE6MHg0NzFjMDggbGVuOjEyOCAKCUJVRjog ICNyZWdzOjIgICBzdGFydCBibGtubzoweDAgICBsZW46MSAgIGJtYXAgc2l6ZToxICAgZmxhZ3M6 MHgwCglTVVBFUiBCbG9jayBCdWZmZXI6Cg== --20cf300fb08dc9dd3004b7f07e2a-- From lists@nabble.com Wed Feb 1 19:02:37 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM, J_CHICKENPOX_22,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q1212bh9021557 for ; Wed, 1 Feb 2012 19:02:37 -0600 X-ASG-Debug-ID: 1328144555-04cbb01fb2524d80001-NocioJ Received: from sam.nabble.com (sam.nabble.com [216.139.236.26]) by cuda.sgi.com with ESMTP id mcSp1QDK15DM3hor (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 01 Feb 2012 17:02:36 -0800 (PST) X-Barracuda-Envelope-From: lists@nabble.com X-Barracuda-Apparent-Source-IP: 216.139.236.26 Received: from isper.nabble.com ([192.168.236.156]) by sam.nabble.com with esmtp (Exim 4.72) (envelope-from ) id 1Rsl4N-00075f-CW for xfs@oss.sgi.com; Wed, 01 Feb 2012 17:02:35 -0800 Message-ID: <33246061.post@talk.nabble.com> Date: Wed, 1 Feb 2012 17:02:35 -0800 (PST) From: kdasu To: xfs@oss.sgi.com Subject: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume MIME-Version: 1.0 X-ASG-Orig-Subj: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: kdasu.kdev@gmail.com X-Barracuda-Connect: sam.nabble.com[216.139.236.26] X-Barracuda-Start-Time: 1328144556 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87343 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Need some help understanding the state of xfs with rt subvolume support on 2.6.37. When using xfs rt subvolume on a harddisk partition with kernel 2.6.37.6,and normal r/w/delete file operations causes deadlock like hangs . Failure symptoms are lockups and mount failure on reboot. On further investigation it was found that one of the changes could be the cause. The same tests seem to pass with xfs in 2.6.31 kernel. xfs: simplify xfs_trans_iget : http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=commitdiff;h=aa72a5cf00001d0b952c7c755be404b9118ceb2e aa72a5cf00001d0b952c7c755be404b9118ceb2e Reverting the change and forward porting to the xfs_trans_iget() seems to get rid of the deadlock and mount issues . Below is the change Signed-off-by: Kamal Dasu --- linux-2.6.37/fs/xfs/xfs_trans_inode.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/linux-2.6.37/fs/xfs/xfs_trans_inode.c b/linux-2.6.37/fs/xfs/xfs_trans_inode.c index ccb3453..c2861d5 100644 --- a/stblinux-2.6.37/fs/xfs/xfs_trans_inode.c +++ b/stblinux-2.6.37/fs/xfs/xfs_trans_inode.c @@ -56,6 +56,27 @@ xfs_trans_iget( xfs_inode_t **ipp) { int error; + xfs_inode_t *ip = NULL; + xfs_perag_t *pag = NULL; + + /* + * If we find the inode in core with this transaction + * pointer in its i_transp field, then we know we already + * have it locked. + */ + if(tp != NULL) { + pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ino)); + read_lock(&pag->pag_ici_lock); + ip = radix_tree_lookup(&pag->pag_ici_root, XFS_INO_TO_AGNO(mp, ino)); + read_unlock(&pag->pag_ici_lock); + xfs_perag_put(pag); + } + + /* the returned inode must match the transaction */ + if (ip && (ip->i_transp == tp)) { + *ipp = ip; + return 0; + } error = xfs_iget(mp, tp, ino, flags, lock_flags, ipp); if (!error && tp) { -- 1.7.6 I have also attached the xfs_logprint text output when the mount fails. http://old.nabble.com/file/p33246061/xfslog-2.6.37.6-mount-fail.txt xfslog-2.6.37.6-mount-fail.txt Regards Kamal -- View this message in context: http://old.nabble.com/Inode-lockdep-problem-observed-on-2.6.37.6-xfs-with-RT-subvolume-tp33246061p33246061.html Sent from the Xfs - General mailing list archive at Nabble.com. From jeff.liu@oracle.com Wed Feb 1 21:38:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_54 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q123cUpX027414 for ; Wed, 1 Feb 2012 21:38:30 -0600 X-ASG-Debug-ID: 1328153908-04cb6c2260406f30001-NocioJ Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by cuda.sgi.com with ESMTP id 8Oyw4HxDfjVy8pVj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Wed, 01 Feb 2012 19:38:28 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 141.146.126.227 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q123cMOJ000351 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Feb 2012 03:38:23 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q123cLV4025450 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 Feb 2012 03:38:21 GMT Received: from abhmt116.oracle.com (abhmt116.oracle.com [141.146.116.68]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q123cKii004027; Wed, 1 Feb 2012 21:38:20 -0600 Received: from [123.130.9.63] (/123.130.9.63) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 01 Feb 2012 19:38:20 -0800 Message-ID: <4F2A051D.7050608@oracle.com> Date: Thu, 02 Feb 2012 11:38:05 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Mark Tinguely CC: Christoph Hellwig , Ben Myers , Chris Mason , xfs@oss.sgi.com Subject: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V6 References: <4F2504DD.5020503@oracle.com> <4F283F71.1020606@sgi.com> X-ASG-Orig-Subj: Re: [PATCH] Introduce SEEK_DATA/SEEK_HOLE support to XFS V6 In-Reply-To: <4F283F71.1020606@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-CT-RefId: str=0001.0A090201.4F2A052F.003F,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: acsinet15.oracle.com[141.146.126.227] X-Barracuda-Start-Time: 1328153908 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87353 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 02/01/2012 03:22 AM, Mark Tinguely wrote: > On 01/29/12 02:35, Jeff Liu wrote: >> Hello, >> >> Sorry for the delay!! I just got back from vacation. >> >> This is the V6 to introduce SEEK_DATA/SEEK_HOLE support to XFS. >> As we have discussed previously, I have removed the dirty data probing >> stuff and just treating unwritten extents as data in this post. >> >> Changes to V6: >> -------------- >> * remove xfs_has_unwritten_buffer() for now. >> * xfs_bmapi_read() returns the br_state == XFS_EXT_NORM for a hole, so >> we need to check its startblock is not a "nullstartblock" in this case. >> * call i_size_read() after taking the ilock shared, otherwise, isize >> could be stale. >> * remove "ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK)" from xfs_seek_data() >> since it will not used. >> * in xfs_file_llseek(), return -EINVAL rather than -EOPNOTSUPP if >> whence is not valid according to http://linux.die.net/man/2/lseek. >> * s/int lock/uint lock/ in both xfs_seek_data() and xfs_seek_hole(). >> * s/out_lock/out_unlock/ in both functions too. >> >> Tests: >> ------ >> * seek_sanity_tester: >> http://permalink.gmane.org/gmane.comp.file-systems.xfs.general/42514 >> >> *seek_copy_tester: >> http://permalink.gmane.org/gmane.comp.file-systems.xfs.general/42522 >> >> >> Thank you! >> -Jeff >> >> >> Signed-off-by: Jie Liu >> >> --- >> fs/xfs/xfs_file.c | 168 >> ++++++++++++++++++++++++++++++++++++++++++++++++++++- >> 1 files changed, 167 insertions(+), 1 deletions(-) >> >> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c >> index 753ed9b..41a045f 100644 >> --- a/fs/xfs/xfs_file.c >> +++ b/fs/xfs/xfs_file.c >> +STATIC loff_t >> +xfs_seek_data( > >> + error = xfs_bmapi_read(ip, fsbno, len - fsbno, map,&nmap, >> + XFS_BMAPI_ENTIRE); >> + if (error) >> + goto out_unlock; > > >> +STATIC loff_t >> +xfs_seek_hole( > >> + error = xfs_bmap_first_unused(NULL, ip, 1,&fsbno, XFS_DATA_FORK); >> + if (error) >> + goto out_unlock; > > The code looks good for the reduced problem. It test correctly. I am > still finding holes only if they start on a 16KB boundary which we > discussed before. I mention it in case more advanced test cases are > generated. > > Question: > If the routines that are looking for extents/hole return an error (I see > EFSCORRUPTED, EAGAIN, ENOMEM, EIO as possible errors in these routines), > should you convert them to an error such as EIO? There is no specific > error mention in the lseek manual page. Thanks for your review! The 'errno' should be convert to -ENXIO in those cases(this is the way I observed from Btrfs and OCFS2), I'll take care of it in next post. Thanks, -Jeff > > --Mark Tinguely. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From dave@fromorbit.com Thu Feb 2 00:21:42 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q126LfEl035529 for ; Thu, 2 Feb 2012 00:21:42 -0600 X-ASG-Debug-ID: 1328163698-04bdf075174e3290001-NocioJ Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id Ud0DBq1XqWIQk74n for ; Wed, 01 Feb 2012 22:21:38 -0800 (PST) X-Barracuda-Envelope-From: dave@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAPsoKk95LD+b/2dsb2JhbABDrwiBBoFyAS0vOxhqAzSgRqAEi3UGAQsBCAUDAwkGBA8GgycHZAIFBAMoAQEYgxwEnlGJOg Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail06.adl6.internode.on.net with ESMTP; 02 Feb 2012 16:51:37 +1030 Received: from disappointment ([192.168.1.1]) by dastard with esmtp (Exim 4.76) (envelope-from ) id 1Rsq2v-0002L3-Qs for xfs@oss.sgi.com; Thu, 02 Feb 2012 17:21:25 +1100 Received: from dave by disappointment with local (Exim 4.77) (envelope-from ) id 1Rsq2k-0002SU-4N for xfs@oss.sgi.com; Thu, 02 Feb 2012 17:21:14 +1100 From: Dave Chinner To: xfs@oss.sgi.com Subject: [PATCH] xfs_io: fix fiemap loop continuation Date: Thu, 2 Feb 2012 17:21:14 +1100 X-ASG-Orig-Subj: [PATCH] xfs_io: fix fiemap loop continuation Message-Id: <1328163674-9420-1-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 1.7.8.3 X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1328163698 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87365 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- From: Dave Chinner From: Dave Chinner When the fiemap command needs to retrieve more extents from the kernel via a subsequent IO, it calculates the next logical block to retrieve in file system block units. the fiemap needs the start offset in bytes, not filesystem blocks. Hence if the fiemap command can loop forever retrieving the same blocks if the logical offset offset of the next block in filesystem block units is smaller than the number of bytes in a filessytem block. i.e. it will just loop retreiving the first 32 extents from offset block zero. Signed-off-by: Dave Chinner --- io/fiemap.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/io/fiemap.c b/io/fiemap.c index 066e693..99296dd 100644 --- a/io/fiemap.c +++ b/io/fiemap.c @@ -108,7 +108,7 @@ print_verbose( boff_w, bbuf, tot_w, len, flg_w, flgbuf); (*cur_extent)++; - *last_logical = lstart + len; + *last_logical = extent->fe_logical + extent->fe_length; } static void @@ -151,7 +151,7 @@ print_plain( else printf("\n"); (*cur_extent)++; - *last_logical = lstart + len; + *last_logical = extent->fe_logical + extent->fe_length; } int @@ -252,7 +252,7 @@ fiemap_f( memset(fiemap, 0, map_size); fiemap->fm_flags = fiemap_flags; fiemap->fm_start = last_logical; - fiemap->fm_length = -1; + fiemap->fm_length = -1LL; fiemap->fm_extent_count = num_extents; ret = ioctl(file->fd, FS_IOC_FIEMAP, (unsigned long)fiemap); -- 1.7.8.3 From Kiran.Chandapu@emc.com Thu Feb 2 02:19:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q128JCDr039649 for ; Thu, 2 Feb 2012 02:19:13 -0600 X-ASG-Debug-ID: 1328170750-04cbb01fb5547e80001-NocioJ Received: from mexforward.lss.emc.com (mexforward.lss.emc.com [128.222.32.20]) by cuda.sgi.com with ESMTP id CEG1QnBge8SDxWXE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 00:19:11 -0800 (PST) X-Barracuda-Envelope-From: Kiran.Chandapu@emc.com X-Barracuda-Apparent-Source-IP: 128.222.32.20 X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] Received: from hop04-l1d11-si02.isus.emc.com (HOP04-L1D11-SI02.isus.emc.com [10.254.111.55]) by mexforward.lss.emc.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id q128JA1I017530 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 2 Feb 2012 03:19:10 -0500 X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] Received: from mailhub.lss.emc.com (mailhub.lss.emc.com [10.254.221.251]) by hop04-l1d11-si02.isus.emc.com (RSA Interceptor) for ; Thu, 2 Feb 2012 03:18:58 -0500 Received: from mxhub11.corp.emc.com (mxhub11.corp.emc.com [10.254.92.106]) by mailhub.lss.emc.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id q128IucX005379 for ; Thu, 2 Feb 2012 03:18:57 -0500 Received: from MX03A.corp.emc.com ([169.254.1.125]) by mxhub11.corp.emc.com ([10.254.92.106]) with mapi; Thu, 2 Feb 2012 03:18:56 -0500 From: To: Date: Thu, 2 Feb 2012 03:19:01 -0500 Subject: xfs_repair takes long time Thread-Topic: xfs_repair takes long time X-ASG-Orig-Subj: xfs_repair takes long time Thread-Index: Aczhg1CSZVB3aZTxT7ayRHkdfqxkzQ== Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/alternative; boundary="_000_D6BB8A3C30275C45A0A5CA53D5CC37F80242C12A02MX03Acorpemcc_" MIME-Version: 1.0 X-EMM-MHVC: 1 X-Barracuda-Connect: mexforward.lss.emc.com[128.222.32.20] X-Barracuda-Start-Time: 1328170751 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com --_000_D6BB8A3C30275C45A0A5CA53D5CC37F80242C12A02MX03Acorpemcc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi My set up looks like this, we have software raid on top of it we have LVM a= nd using XFS file system. Currently we have faced on an issue with raid /de= v/md1 so we have activated it and when we checked we had missed PV informat= ion, so we had to restore the metadata information from Volume group and th= at was successful. Later we had activated VG and LV, now when I try to moun= t the volume using xfs, I am unable to and when I check the system logs I s= ee below logs: Feb 2 12:21:08 DDATA kernel: XFS: bad magic number Feb 2 12:21:08 DDATA kernel: XFS: SB validate failed So I have realized that the file system might have corrupted and started ru= nning xfs_repair but it takes such a long time, not sure it is because of t= he amount of data we have on the volume around 12TB. First time it took 3 days, incomplete and unfortunately the session got ter= minated. Now again I have to run the repair. Could anyone please let me know, is there any way I can speed up the proces= s or any rough idea who much time the file system repair going to take. Any help is really appreciated. Thanks -Kiran --_000_D6BB8A3C30275C45A0A5CA53D5CC37F80242C12A02MX03Acorpemcc_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi

 

My set up looks like this, we have software raid on top = of it we have LVM and using XFS file system. Currently we have faced on an = issue with raid /dev/md1 so we have activated it and when we checked we had= missed PV information, so we had to restore the metadata information from = Volume group and that was successful. Later we had activated VG and LV, now= when I try to mount the volume using xfs, I am unable to and when I check = the system logs I see below logs:

 

Feb  2 12:21:08 DDATA kernel: XFS: = bad magic number

Feb  2 12:21:08 DDATA kernel: XFS: SB validate failed

=  

S= o I have realized that the file system might have corrupted and started run= ning xfs_repair but it takes such a long time, not sure it is because of th= e amount of data we have on the volume around 12TB.

First time it took 3 days,= incomplete and unfortunately the session got terminated. Now again I have = to run the repair.

 

Could anyone please let me know, is there any way I = can speed up the process or any rough idea who much time the file system re= pair going to take.

 

Any help is really appreciated.

 

Thanks<= /span>

-Kiran

 

= --_000_D6BB8A3C30275C45A0A5CA53D5CC37F80242C12A02MX03Acorpemcc_-- From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 03:13:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q129DZx5041413 for ; Thu, 2 Feb 2012 03:13:35 -0600 X-ASG-Debug-ID: 1328174011-04cbb01fb2552c00001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 2lp24AOr0YkkK2Nn (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 01:13:31 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RssjS-00088n-P4; Thu, 02 Feb 2012 09:13:30 +0000 Date: Thu, 2 Feb 2012 04:13:30 -0500 From: Christoph Hellwig To: Kamal Dasu Cc: xfs@oss.sgi.com, cernekee@gmail.com Subject: Re: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume Message-ID: <20120202091330.GA31203@infradead.org> X-ASG-Orig-Subj: Re: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328174011 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87375 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL Custom Rule HREF_FROM_MISMATCH_TEXT_URIx1_HL On Wed, Feb 01, 2012 at 07:44:13PM -0500, Kamal Dasu wrote: > Need some help understanding the state of xfs with rt subvolume > support on 2.6.37. > > When using xfs rt subvolume on a harddisk partition with kernel > 2.6.37.6,and normal r/w/delete file operations? causes deadlock > like hangs .? Failure? symptoms are lockups and mount failure on reboot. > > On further investigation it was found that one of the changes could be > the cause. > The same tests seem to pass with xfs in 2.6.31 kernel. > > xfs: simplify xfs_trans_iget? : aa72a5cf00001d0b952c7c755be404b9118ceb2e > http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=commitdiff;h=aa72a5cf00001d0b952c7c755be404b9118ceb2e > > Reverting the change and forward porting to the xfs_trans_inode() seems to > get rid of the deadlock and mount issues . > > Below is the change Please just upgrade to Linux 2.6.39 or better Linux 3.0 which is the long term support release. RT subvolume support has been fixed in 2.6.39 by the following changes: xfs: only lock the rt bitmap inode once per allocation xfs: fix xfs_get_extsz_hint for a zero extent size hint xfs: add lockdep annotations for the rt inodes But in general the RT subvolume code is not regularly tested and only fixed when issues arise. From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 03:13:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q129DuCZ041435 for ; Thu, 2 Feb 2012 03:13:56 -0600 X-ASG-Debug-ID: 1328174035-04cbb01fb4552c90001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id ukHmJPD7WUhVRyuw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 01:13:56 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rssjq-00088x-00; Thu, 02 Feb 2012 09:13:54 +0000 Date: Thu, 2 Feb 2012 04:13:53 -0500 From: Christoph Hellwig To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: [PATCH] xfs_io: fix fiemap loop continuation Message-ID: <20120202091353.GB31203@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_io: fix fiemap loop continuation References: <1328163674-9420-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1328163674-9420-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328174035 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87375 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS Looks good, Reviewed-by: Christoph Hellwig From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 03:17:18 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q129HICL041572 for ; Thu, 2 Feb 2012 03:17:18 -0600 X-ASG-Debug-ID: 1328174237-04cbb01fb5553320001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id hc9fSiCEIrgqPte6 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 01:17:17 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rssn5-0000cF-6T; Thu, 02 Feb 2012 09:17:15 +0000 Date: Thu, 2 Feb 2012 04:17:15 -0500 From: Christoph Hellwig To: Kiran.Chandapu@emc.com Cc: xfs@oss.sgi.com Subject: Re: xfs_repair takes long time Message-ID: <20120202091715.GC31203@infradead.org> X-ASG-Orig-Subj: Re: xfs_repair takes long time References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328174237 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87375 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 On Thu, Feb 02, 2012 at 03:19:01AM -0500, Kiran.Chandapu@emc.com wrote: > So I have realized that the file system might have corrupted and started running xfs_repair but it takes such a long time, not sure it is because of the amount of data we have on the volume around 12TB. > First time it took 3 days, incomplete and unfortunately the session got terminated. Now again I have to run the repair. > > Could anyone please let me know, is there any way I can speed up the process or any rough idea who much time the file system repair going to take. Grab the latests version from git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git, and run it in verbose mode (xfs_repair -v). I suspect you actually have a a volume that doesn't resemble a filesystem anymore and it's looking for a superblock but can't find it. From Kiran.Chandapu@emc.com Thu Feb 2 03:29:35 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q129TZkj041809 for ; Thu, 2 Feb 2012 03:29:35 -0600 X-ASG-Debug-ID: 1328174974-04cbb01fb3558340001-NocioJ Received: from mexforward.lss.emc.com (mexforward.lss.emc.com [128.222.32.20]) by cuda.sgi.com with ESMTP id M60lYMAEwI8TVRS1 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 01:29:34 -0800 (PST) X-Barracuda-Envelope-From: Kiran.Chandapu@emc.com X-Barracuda-Apparent-Source-IP: 128.222.32.20 X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] Received: from hop04-l1d11-si01.isus.emc.com (HOP04-L1D11-SI01.isus.emc.com [10.254.111.54]) by mexforward.lss.emc.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id q129T6Lb020238 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 Feb 2012 04:29:13 -0500 X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] Received: from mailhub.lss.emc.com (mailhubhoprd01.lss.emc.com [10.254.221.251]) by hop04-l1d11-si01.isus.emc.com (RSA Interceptor); Thu, 2 Feb 2012 04:28:59 -0500 Received: from mxhub02.corp.emc.com (mxhub02.corp.emc.com [10.254.141.104]) by mailhub.lss.emc.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id q129SwKR006713; Thu, 2 Feb 2012 04:28:58 -0500 Received: from MX03A.corp.emc.com ([169.254.1.125]) by mxhub02.corp.emc.com ([10.254.141.104]) with mapi; Thu, 2 Feb 2012 04:28:58 -0500 From: To: CC: Date: Thu, 2 Feb 2012 04:29:00 -0500 Subject: RE: xfs_repair takes long time Thread-Topic: xfs_repair takes long time X-ASG-Orig-Subj: RE: xfs_repair takes long time Thread-Index: Aczhi5yZ5dhSybcoQ0SdNaiRFJ/KPwAAUSCQ Message-ID: References: <20120202091715.GC31203@infradead.org> In-Reply-To: <20120202091715.GC31203@infradead.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-EMM-MHVC: 1 X-Barracuda-Connect: mexforward.lss.emc.com[128.222.32.20] X-Barracuda-Start-Time: 1328174974 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Hello Christoph,=20 Thanks, I would try to upgrade it. Could you please tell me whether we can = recover the data, actually we have all our data about 12 TB resides on that= volume which has the issue.=20 Thanks -Kiran -----Original Message----- From: Christoph Hellwig [mailto:hch@infradead.org]=20 Sent: Thursday, February 02, 2012 2:47 PM To: Chandapu, Kiran Cc: xfs@oss.sgi.com Subject: Re: xfs_repair takes long time On Thu, Feb 02, 2012 at 03:19:01AM -0500, Kiran.Chandapu@emc.com wrote: > So I have realized that the file system might have corrupted and started = running xfs_repair but it takes such a long time, not sure it is because of= the amount of data we have on the volume around 12TB. > First time it took 3 days, incomplete and unfortunately the session got t= erminated. Now again I have to run the repair. >=20 > Could anyone please let me know, is there any way I can speed up the proc= ess or any rough idea who much time the file system repair going to take. Grab the latests version from git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git, and run it in verbose= mode (xfs_repair -v). I suspect you actually have a a volume that doesn't resemble a filesystem a= nymore and it's looking for a superblock but can't find it. From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 04:48:40 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12AmdCW044868 for ; Thu, 2 Feb 2012 04:48:40 -0600 X-ASG-Debug-ID: 1328179705-04cbb01fb3561100001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id lv05XKzX4e7KVHQL (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 02:48:26 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsuDJ-0002u0-8G; Thu, 02 Feb 2012 10:48:25 +0000 Date: Thu, 2 Feb 2012 05:48:25 -0500 From: Christoph Hellwig To: Kiran.Chandapu@emc.com Cc: hch@infradead.org, xfs@oss.sgi.com Subject: Re: xfs_repair takes long time Message-ID: <20120202104825.GA7670@infradead.org> X-ASG-Orig-Subj: Re: xfs_repair takes long time References: <20120202091715.GC31203@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328179706 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87383 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 On Thu, Feb 02, 2012 at 04:29:00AM -0500, Kiran.Chandapu@emc.com wrote: > Hello Christoph, > > Thanks, I would try to upgrade it. Could you please tell me whether we can recover the data, actually we have all our data about 12 TB resides on that volume which has the issue. Given your description of missing LV metadata I suspect that you actually have lost part if not all of the filesystem. Running xfs_repair -nv will give you more information about, but if you have indeed destroyed the lvm block mapping it won't be able to do much. From Kiran.Chandapu@emc.com Thu Feb 2 04:58:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_12, J_CHICKENPOX_21,J_CHICKENPOX_56 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12AwrWj045543 for ; Thu, 2 Feb 2012 04:58:54 -0600 X-ASG-Debug-ID: 1328180332-04cb6c226142a2e0001-NocioJ Received: from mexforward.lss.emc.com (mexforward.lss.emc.com [128.222.32.20]) by cuda.sgi.com with ESMTP id gq1vfbQSMRmXQCAM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 02:58:52 -0800 (PST) X-Barracuda-Envelope-From: Kiran.Chandapu@emc.com X-Barracuda-Apparent-Source-IP: 128.222.32.20 X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] Received: from hop04-l1d11-si01.isus.emc.com (HOP04-L1D11-SI01.isus.emc.com [10.254.111.54]) by mexforward.lss.emc.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id q12AwiLF031335 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 Feb 2012 05:58:45 -0500 X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] X-Barracuda-IPDD: Level2 [emc.com/128.222.32.20] Received: from mailhub.lss.emc.com (mailhub.lss.emc.com [10.254.222.130]) by hop04-l1d11-si01.isus.emc.com (RSA Interceptor); Thu, 2 Feb 2012 05:58:31 -0500 Received: from mxhub23.corp.emc.com (mxhub23.corp.emc.com [128.222.70.135]) by mailhub.lss.emc.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id q12AwVEV022242; Thu, 2 Feb 2012 05:58:31 -0500 Received: from MX03A.corp.emc.com ([169.254.1.125]) by mxhub23.corp.emc.com ([128.222.70.135]) with mapi; Thu, 2 Feb 2012 05:58:31 -0500 From: To: CC: Date: Thu, 2 Feb 2012 05:58:34 -0500 Subject: RE: xfs_repair takes long time Thread-Topic: xfs_repair takes long time X-ASG-Orig-Subj: RE: xfs_repair takes long time Thread-Index: AczhmDrAwb6fSmjuSj2S7SEqxEJhQAAAJ2WQ Message-ID: References: <20120202091715.GC31203@infradead.org> <20120202104825.GA7670@infradead.org> In-Reply-To: <20120202104825.GA7670@infradead.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-EMM-MHVC: 1 X-Barracuda-Connect: mexforward.lss.emc.com[128.222.32.20] X-Barracuda-Start-Time: 1328180332 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com Actually I did not lose LV metadata but I had lost PV metadata after reacti= vating raid5 and i had recovered and VG restore did restore both volume gro= up and lv information. I have cross checked the uuid with old volume group = backup and it is same.=20 I was going through the forum and somewhere I found that we need to check w= hether we have xfs file system information exist or overwritten with some i= nformation on /dev/md1 and I saw that I have correct information on /dev/md= 0 but not /dev/md1 which has my data on it.=20 (/dev/md0 info) root@DDATA:/var/log# dd if=3D/dev/mapper/282b4cad_vg-vol1 bs=3D512 count= =3D1 iflag=3Ddirect 2> /dev/null | od -Ax -x =20 000000 4658 4253 0000 0010 0000 0000 2700 00fc 000010 0000 0000 0000 0000 0000 0000 0000 0000 000020 5d45 f521 4c26 5b4c 4786 f0fd 077d bd2f 000030 0000 0000 2000 0400 0000 0000 0000 8000 000040 0000 0000 0000 8100 0000 0000 0000 8200 000050 0000 0100 0900 00ff 0000 0400 0000 0000 000060 0000 000a a4b4 0002 0001 1000 0000 0000 000070 0000 0000 0000 0000 090c 0408 0014 1900 000080 0000 0000 0000 c00a 0000 0000 0000 5f01 000090 0000 0000 2200 3586 0000 0000 0000 0000 0000a0 0000 0000 0000 0000 0000 0000 0000 0000 0000b0 0000 0000 0000 0200 0000 0000 0000 0000 0000c0 0000 0000 0000 0100 0000 0800 0000 0800 0000d0 0000 0000 0000 0000 0000 0000 0000 0000 * 000200 ---------------------------------------------------------------------------= -------------------------------------------------- (/dev/md1 info) root@DDATA:/var/log# dd if=3D/dev/mapper/3f983026_vg-lv355ff6e0 bs=3D512 c= ount=3D1 iflag=3Ddirect 2> /dev/null | od -Ax -x 000000 6686 5693 f243 67de 4010 9e19 ce94 f5cf 000010 2bd7 36ab c2c3 1b4b db68 3ef2 67d3 78a3 000020 13c7 f475 655a 48c6 0d5f b088 971b 4c95 000030 bcd9 a105 ba22 7303 630d ac0e fbe8 10fb 000040 d798 578b 9f30 0f9a 0b3f ffbf a58c ecc1 000050 d7d5 0c34 1c3c 0876 ff35 db75 672a b966 000060 0b06 0626 e138 ed3d af67 680a 24ed 07e1 000070 5686 c756 6bbf 3d97 5fbe 44eb a2ef 0877 000080 2876 9ef0 0707 b6e7 49bc 0994 e64e 7bd5 000090 0571 46a8 aaab 08c3 ab52 7449 779a 6569 0000a0 df95 e007 fc09 a2b3 78af 6a71 75d2 d252 0000b0 ca55 0e19 be8e 73a0 ea93 6162 3c5a c71a 0000c0 a17c 0c10 60a1 7a80 4c0e ae73 5b82 9d96 0000d0 6276 3a41 befe 9639 2ec0 a9c1 6a2d adfe 0000e0 c0a4 04eb a869 4e03 fdd1 5a7f 4e94 ad07 0000f0 ff90 283b 4385 bce6 da93 6d5a 72d0 6ff2 000100 0b73 f7ed a9d5 9ffe 82b2 5c4b b765 e3bb 000110 e30f 9aac a413 aa60 8c63 254b de03 c528 000120 5c28 0342 6bac fcdc 94ee e0a6 3e66 0185 000130 7731 d95f b32b 3d60 60f7 55c2 00c9 92e4 000140 3f0a b251 41c4 ec4d 449e 2a53 7537 fba6 000150 3d0a 0006 01d4 64aa 44e9 faa1 47ce a170 000160 5584 c155 08b6 2929 d260 e9ea 2211 3791 000170 b6ad 0620 cc20 8ffa 8b72 0b9f 1834 3cb3 000180 d754 f410 2d03 b5b3 ff8c e8f0 1b9b e806 000190 26f2 927e 3376 a638 bcb0 f928 de58 8c62 0001a0 6004 77ac 6661 562f dc0e d516 4979 8929 0001b0 7a6b 7b99 c591 f4c3 f31a 54e7 2c9f 81cb 0001c0 37e8 13ab 7988 b206 c2f3 7bc5 4c81 9982 0001d0 96bc b19f 7229 a9a2 002c 08a2 ce17 2ef4 0001e0 f467 81fc df12 6146 b13a eeff ef67 7085 0001f0 3926 2b40 0d27 fd5e eec2 cba1 b558 ebf6 000200 Thanks -Kiran -----Original Message----- From: Christoph Hellwig [mailto:hch@infradead.org]=20 Sent: Thursday, February 02, 2012 4:18 PM To: Chandapu, Kiran Cc: hch@infradead.org; xfs@oss.sgi.com Subject: Re: xfs_repair takes long time On Thu, Feb 02, 2012 at 04:29:00AM -0500, Kiran.Chandapu@emc.com wrote: > Hello Christoph, >=20 > Thanks, I would try to upgrade it. Could you please tell me whether we ca= n recover the data, actually we have all our data about 12 TB resides on th= at volume which has the issue.=20 Given your description of missing LV metadata I suspect that you actually h= ave lost part if not all of the filesystem. Running xfs_repair -nv will gi= ve you more information about, but if you have indeed destroyed the lvm blo= ck mapping it won't be able to do much. From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 05:35:52 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12BZpK7047898 for ; Thu, 2 Feb 2012 05:35:51 -0600 X-ASG-Debug-ID: 1328182549-04bdf07516504d50001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id jfuGGU3xiEa6FUG7 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 03:35:50 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsuxB-0006M4-IR; Thu, 02 Feb 2012 11:35:49 +0000 Date: Thu, 2 Feb 2012 06:35:49 -0500 From: Christoph Hellwig To: Nathan Scott Cc: xfs@oss.sgi.com Subject: Re: [patch] xfsprogs: add debian linux-libc-dev build dependency Message-ID: <20120202113549.GA20525@infradead.org> X-ASG-Orig-Subj: Re: [patch] xfsprogs: add debian linux-libc-dev build dependency References: <1317955640.69734.1328051152460.JavaMail.root@acxmail-au2.aconex.com> <419906537.69741.1328051228836.JavaMail.root@acxmail-au2.aconex.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <419906537.69741.1328051228836.JavaMail.root@acxmail-au2.aconex.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328182550 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87385 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Feb 01, 2012 at 10:07:08AM +1100, Nathan Scott wrote: > Add a build dependency on linux-libc-dev, to ensure we build > packages with have_fiemap set to true if the headers support > it. Noticed by Dave, some package builds didn't enable this > when they should have. Looks good, Reviewed-by: Christoph Hellwig From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 05:36:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12BaAJP047929 for ; Thu, 2 Feb 2012 05:36:10 -0600 X-ASG-Debug-ID: 1328182568-04bdf07518504db0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id uvPegEbsqXuonfoE (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 03:36:09 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsuxU-0006MQ-5m; Thu, 02 Feb 2012 11:36:08 +0000 Date: Thu, 2 Feb 2012 06:36:08 -0500 From: Christoph Hellwig To: Nathan Scott Cc: xfs@oss.sgi.com Subject: Re: [patch] xfsprogs: extend fiemap configure check Message-ID: <20120202113608.GB20525@infradead.org> X-ASG-Orig-Subj: Re: [patch] xfsprogs: extend fiemap configure check References: <519369070.69746.1328051417713.JavaMail.root@acxmail-au2.aconex.com> <1247398017.69749.1328051476851.JavaMail.root@acxmail-au2.aconex.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1247398017.69749.1328051476851.JavaMail.root@acxmail-au2.aconex.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328182568 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87385 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Wed, Feb 01, 2012 at 10:11:16AM +1100, Nathan Scott wrote: > Make the fiemap configure check consistent with the other > libc interface checks - perform a compile and link with a > complete set of symbols, macros and interfaces needed, as > opposed to a build with just the headers. > > Signed-off-by: Nathan Scott Looks good, Reviewed-by: Christoph Hellwig From b.candler@pobox.com Thu Feb 2 05:52:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12BqGlk048738 for ; Thu, 2 Feb 2012 05:52:17 -0600 X-ASG-Debug-ID: 1328183535-04cbb01fb5567f60001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id TNTamYrOekhngOOv for ; Thu, 02 Feb 2012 03:52:15 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id C99185E6B for ; Thu, 2 Feb 2012 06:52:14 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :subject:message-id:mime-version:content-type; s=sasl; bh=tjBpmd kVutSU0kfrkXTJ7HqQ5Jg=; b=QiX+sdtV0req5Eevugteyc5nfvBK5ekIioaLAK MMHmIGG7cH8XLqeJeaEWMsfat5ofdOvndaOls1oc2LvoKjkCeq4aTP8AFLkiQtw2 MyTYY2fk4h6TK/vJM6dyqiH5cKKBtQDSg/OTeQwoFDT4C79lYxaV1nA3uH1GE/j3 t0oIU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to :subject:message-id:mime-version:content-type; q=dns; s=sasl; b= sxfV3AmNDyKJXWt8mQBCSphFQbRXrM/jSEy+GoOrShJH9ZUtzKO7AbUA4ckfgPp4 ACBYlUqVmClZsY8YgMLPBtzFEo7O/V564hmUSfeevB1+HqCAAl5+rGHJ9nZS5w1w v/2W+/bLcWJ6e32Z+jlupci4aG3SdVcjwaBeMJYd5nk= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id C144B5E6A for ; Thu, 2 Feb 2012 06:52:14 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [46.208.162.148]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 715BD5E65 for ; Thu, 2 Feb 2012 06:52:14 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYRKYZ-0000ZA-A4 for xfs@oss.sgi.com; Thu, 02 Feb 2012 11:52:11 +0000 Date: Thu, 2 Feb 2012 11:52:11 +0000 From: Brian Candler To: xfs@oss.sgi.com Subject: Trailing garbage in event tracing output Message-ID: <20120202115211.GA1259@nsrc.org> X-ASG-Orig-Subj: Trailing garbage in event tracing output MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: 593176F8-4D94-11E1-9F24-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328183535 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87387 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Just a minor issue, but when I did some XFS tracing using the instructions at http://lwn.net/Articles/341899/ I found that there was trailing garbage in the filenames logged in xfs_lookup. Example: ... bonnie++-26179 [000] 322388.834204: xfs_iunlock: dev 8:32 ino 0xfe1e6 flags ILOCK_SHARED caller xfs_free_eofblocks bonnie++-26179 [000] 322388.834212: xfs_lookup: dev 8:32 dp ino 0xfb50d name 000000295aSl688>v??*N bonnie++-26179 [000] 322388.834213: xfs_ilock: dev 8:32 ino 0xfb50d flags ILOCK_SHARED caller xfs_ilock_map_shared ... (where I think the real filename was "000000295aSl688"). I would guess the logger is expecting null-terminated strings but they aren't. This is with the stock kernel from Ubuntu 11.10 server x86_64: Linux storage1 3.0.0-15-server #26-Ubuntu SMP Fri Jan 20 19:07:39 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux Regards, Brian. From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 06:39:16 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_61,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12CdFgi051233 for ; Thu, 2 Feb 2012 06:39:15 -0600 X-ASG-Debug-ID: 1328186352-04bdf0751650d820001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 8vdmNawxPiucA25C (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 04:39:13 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsvwU-0002Ga-Sf; Thu, 02 Feb 2012 12:39:10 +0000 Date: Thu, 2 Feb 2012 07:39:10 -0500 From: Christoph Hellwig To: Dave Chinner Cc: xfs@oss.sgi.com Subject: [PATCH v2] repair: update extent count after zapping duplicate blocks Message-ID: <20120202123910.GA8708@infradead.org> X-ASG-Orig-Subj: [PATCH v2] repair: update extent count after zapping duplicate blocks References: <20111202174619.179530033@bombadil.infradead.org> <20111202174741.904845954@bombadil.infradead.org> <20111213021207.GY14273@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111213021207.GY14273@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328186353 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS When we find a duplicate extent in an extern format inode we do not zap the whole inode, but just truncate it to the point where the duplicate extent was found. But the current code only updates di_nblocks for the new size, but no di_nextents/di_anextents. In most cases this isn't noticed, but when moving such an inode to the lost+found directoy the consistency check in xfs_iformat trips over it. Fix this by updating the on-disk extent count as part of the inode repair. Note that we zap btree format inodes with duplicate block completely at this point, so this fix doesn't apply to them. Reported-by: Arkadiusz Mi??kiewicz Tested-by: Arkadiusz Mi??kiewicz Signed-off-by: Christoph Hellwig --- updates since v2: - address review comments from Dave Index: xfsprogs-dev/repair/dinode.c =================================================================== --- xfsprogs-dev.orig/repair/dinode.c 2012-01-11 11:23:30.000000000 +0000 +++ xfsprogs-dev/repair/dinode.c 2012-02-02 11:19:43.000000000 +0000 @@ -606,7 +606,7 @@ int process_bmbt_reclist_int( xfs_mount_t *mp, xfs_bmbt_rec_t *rp, - int numrecs, + int *numrecs, int type, xfs_ino_t ino, xfs_drfsbno_t *tot, @@ -642,7 +642,7 @@ process_bmbt_reclist_int( else ftype = _("regular"); - for (i = 0; i < numrecs; i++) { + for (i = 0; i < *numrecs; i++) { libxfs_bmbt_disk_get_all(rp + i, &irec); if (i == 0) *last_key = *first_key = irec.br_startoff; @@ -831,6 +831,13 @@ _("illegal state %d in block map %" PRIu done: if (locked_agno != -1) pthread_mutex_unlock(&ag_locks[locked_agno]); + + if (i != *numrecs) { + ASSERT(i < *numrecs); + do_warn(_("correcting nextents for inode %" PRIu64 "\n"), ino); + *numrecs = i; + } + return error; } @@ -842,7 +849,7 @@ int process_bmbt_reclist( xfs_mount_t *mp, xfs_bmbt_rec_t *rp, - int numrecs, + int *numrecs, int type, xfs_ino_t ino, xfs_drfsbno_t *tot, @@ -863,7 +870,7 @@ int scan_bmbt_reclist( xfs_mount_t *mp, xfs_bmbt_rec_t *rp, - int numrecs, + int *numrecs, int type, xfs_ino_t ino, xfs_drfsbno_t *tot, @@ -1356,23 +1363,29 @@ process_exinode( xfs_bmbt_rec_t *rp; xfs_dfiloff_t first_key; xfs_dfiloff_t last_key; + int numrecs; + int ret; lino = XFS_AGINO_TO_INO(mp, agno, ino); rp = (xfs_bmbt_rec_t *)XFS_DFORK_PTR(dip, whichfork); *tot = 0; - *nex = XFS_DFORK_NEXTENTS(dip, whichfork); + numrecs = XFS_DFORK_NEXTENTS(dip, whichfork); + /* * XXX - if we were going to fix up the btree record, * we'd do it right here. For now, if there's a problem, * we'll bail out and presumably clear the inode. */ if (check_dups == 0) - return(process_bmbt_reclist(mp, rp, *nex, type, lino, + ret = process_bmbt_reclist(mp, rp, &numrecs, type, lino, tot, blkmapp, &first_key, &last_key, - whichfork)); + whichfork); else - return(scan_bmbt_reclist(mp, rp, *nex, type, lino, tot, - whichfork)); + ret = scan_bmbt_reclist(mp, rp, &numrecs, type, lino, tot, + whichfork); + + *nex = numrecs; + return ret; } /* @@ -2063,6 +2076,17 @@ _("bad anextents %d for inode %" PRIu64 lino, anextents); } } + + /* + * We are comparing different units here, but that's fine given that + * an extent has to have at least a block in it. + */ + if (nblocks < nextents + anextents) { + do_warn( +_("nblocks (%" PRIu64 ") smaller than nextents for inode %" PRIu64 "\n"), nblocks, lino); + return 1; + } + return 0; } Index: xfsprogs-dev/repair/dinode.h =================================================================== --- xfsprogs-dev.orig/repair/dinode.h 2012-01-11 11:23:30.000000000 +0000 +++ xfsprogs-dev/repair/dinode.h 2012-02-02 11:17:38.000000000 +0000 @@ -42,7 +42,7 @@ convert_extent( int process_bmbt_reclist(xfs_mount_t *mp, xfs_bmbt_rec_t *rp, - int numrecs, + int *numrecs, int type, xfs_ino_t ino, xfs_drfsbno_t *tot, @@ -55,7 +55,7 @@ int scan_bmbt_reclist( xfs_mount_t *mp, xfs_bmbt_rec_t *rp, - int numrecs, + int *numrecs, int type, xfs_ino_t ino, xfs_drfsbno_t *tot, Index: xfsprogs-dev/repair/scan.c =================================================================== --- xfsprogs-dev.orig/repair/scan.c 2012-01-11 11:23:30.000000000 +0000 +++ xfsprogs-dev/repair/scan.c 2012-02-02 11:17:38.000000000 +0000 @@ -351,12 +351,12 @@ _("inode %" PRIu64 " bad # of bmap recor * we'll bail out and presumably clear the inode. */ if (check_dups == 0) { - err = process_bmbt_reclist(mp, rp, numrecs, - type, ino, tot, blkmapp, - &first_key, &last_key, - whichfork); + err = process_bmbt_reclist(mp, rp, &numrecs, type, ino, + tot, blkmapp, &first_key, + &last_key, whichfork); if (err) - return(1); + return 1; + /* * check that key ordering is monotonically increasing. * if the last_key value in the cursor is set to @@ -380,10 +380,11 @@ _("out-of-order bmap key (file offset) i bm_cursor->level[level].first_key = first_key; bm_cursor->level[level].last_key = last_key; - return(0); - } else - return(scan_bmbt_reclist(mp, rp, numrecs, - type, ino, tot, whichfork)); + return 0; + } else { + return scan_bmbt_reclist(mp, rp, &numrecs, type, ino, + tot, whichfork); + } } if (numrecs > mp->m_bmap_dmxr[1] || (isroot == 0 && numrecs < mp->m_bmap_dmnr[1])) { From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 06:42:54 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_14, J_CHICKENPOX_61,J_CHICKENPOX_74,LOCAL_GNU_PATCH autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12CgriV051391 for ; Thu, 2 Feb 2012 06:42:53 -0600 X-ASG-Debug-ID: 1328186570-04bdf0751750dda0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 89iOvCcCVziOoofG (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 04:42:50 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1Rsw01-0003AO-1H; Thu, 02 Feb 2012 12:42:49 +0000 Date: Thu, 2 Feb 2012 07:42:49 -0500 From: Christoph Hellwig To: Tom Crane Cc: xfs@oss.sgi.com Subject: Re: xfs_repair segfaults with ag_stride option Message-ID: <20120202124248.GA12107@infradead.org> X-ASG-Orig-Subj: Re: xfs_repair segfaults with ag_stride option References: <4F293FCC.7010101@rhul.ac.uk> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="3MwIy2ne0vdjdPXF" Content-Disposition: inline In-Reply-To: <4F293FCC.7010101@rhul.ac.uk> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328186570 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS --3MwIy2ne0vdjdPXF Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Tom, On Wed, Feb 01, 2012 at 01:36:12PM +0000, Tom Crane wrote: > Dear XFS Support, > I am attempting to use xfs_repair to fix a damaged FS but always > get a segfault if and only if -o ag_stride is specified. I have > tried ag_stride=2,8,16 & 32. The FS is approx 60T. I can't find > reports of this particular problem on the mailing list archive. > Further details are; > > xfs_repair version 3.1.7, recently downloaded via git repository. > uname -a > Linux store3 2.6.18-274.17.1.el5 #1 SMP Wed Jan 11 11:10:32 CET 2012 > x86_64 x86_64 x86_64 GNU/Linux Thanks for the detailed bug report. Can you please try the attached patch? --3MwIy2ne0vdjdPXF Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=repair-fix-dirbuf From: Christoph Hellwig Subject: repair: fix incorrect use of thread local data in dir and attr code The attribute and dirv1 code use pthread thread local data incorrectly in a few places, which will make them fail in horrible ways when using the ag_stride options. Replace the use of thread local data with simple local allocations given that there is no needed to micro-optimize these allocations as much as e.g. the extent map. The added benefit is that we have to allocate less memory, and can free it quickly. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/repair/attr_repair.c =================================================================== --- xfsprogs-dev.orig/repair/attr_repair.c 2012-02-02 09:25:50.000000000 +0000 +++ xfsprogs-dev/repair/attr_repair.c 2012-02-02 11:14:06.000000000 +0000 @@ -363,12 +363,6 @@ rmtval_get(xfs_mount_t *mp, xfs_ino_t in return (clearit); } -/* - * freespace map for directory and attribute leaf blocks (1 bit per byte) - * 1 == used, 0 == free - */ -size_t ts_attr_freemap_size = sizeof(da_freemap_t) * DA_BMAP_SIZE; - /* The block is read in. The magic number and forward / backward * links are checked by the caller process_leaf_attr. * If any problems occur the routine returns with non-zero. In @@ -503,7 +497,7 @@ process_leaf_attr_block( { xfs_attr_leaf_entry_t *entry; int i, start, stop, clearit, usedbs, firstb, thissize; - da_freemap_t *attr_freemap = ts_attr_freemap(); + da_freemap_t *attr_freemap; clearit = usedbs = 0; *repair = 0; @@ -519,7 +513,7 @@ process_leaf_attr_block( return (1); } - init_da_freemap(attr_freemap); + attr_freemap = alloc_da_freemap(mp); (void) set_da_freemap(mp, attr_freemap, 0, stop); /* go thru each entry checking for problems */ @@ -636,6 +630,8 @@ process_leaf_attr_block( * we can add it then. */ } + + free(attr_freemap); return (clearit); /* and repair */ } Index: xfsprogs-dev/repair/dir.c =================================================================== --- xfsprogs-dev.orig/repair/dir.c 2012-02-02 09:25:50.000000000 +0000 +++ xfsprogs-dev/repair/dir.c 2012-02-02 11:17:20.000000000 +0000 @@ -495,23 +495,19 @@ process_shortform_dir( } /* - * freespace map for directory leaf blocks (1 bit per byte) - * 1 == used, 0 == free + * Allocate a freespace map for directory or attr leaf blocks (1 bit per byte) + * 1 == used, 0 == free. */ -size_t ts_dir_freemap_size = sizeof(da_freemap_t) * DA_BMAP_SIZE; - -void -init_da_freemap(da_freemap_t *dir_freemap) +da_freemap_t * +alloc_da_freemap(struct xfs_mount *mp) { - memset(dir_freemap, 0, sizeof(da_freemap_t) * DA_BMAP_SIZE); + return calloc(1, mp->m_sb.sb_blocksize / NBBY); } /* - * sets directory freemap, returns 1 if there is a conflict - * returns 0 if everything's good. the range [start, stop) is set. - * right now, we just use the static array since only one directory - * block will be processed at once even though the interface allows - * you to pass in arbitrary da_freemap_t array's. + * Set the he range [start, stop) in the directory freemap. + * + * Returns 1 if there is a conflict or 0 if everything's good. * * Within a char, the lowest bit of the char represents the byte with * the smallest address @@ -728,28 +724,6 @@ _("- derived hole (base %d, size %d) in return(res); } -#if 0 -void -test(xfs_mount_t *mp) -{ - int i = 0; - da_hole_map_t holemap; - - init_da_freemap(dir_freemap); - memset(&holemap, 0, sizeof(da_hole_map_t)); - - set_da_freemap(mp, dir_freemap, 0, 50); - set_da_freemap(mp, dir_freemap, 100, 126); - set_da_freemap(mp, dir_freemap, 126, 129); - set_da_freemap(mp, dir_freemap, 130, 131); - set_da_freemap(mp, dir_freemap, 150, 160); - process_da_freemap(mp, dir_freemap, &holemap); - - return; -} -#endif - - /* * walk tree from root to the left-most leaf block reading in * blocks and setting up cursor. passes back file block number of the @@ -1366,8 +1340,6 @@ verify_da_path(xfs_mount_t *mp, return(0); } -size_t ts_dirbuf_size = 64*1024; - /* * called by both node dir and leaf dir processing routines * validates all contents *but* the sibling pointers (forw/back) @@ -1441,7 +1413,7 @@ process_leaf_dir_block( char fname[MAXNAMELEN + 1]; da_hole_map_t holemap; da_hole_map_t bholemap; - unsigned char *dir_freemap = ts_dir_freemap(); + da_freemap_t *dir_freemap; #ifdef XR_DIR_TRACE fprintf(stderr, "\tprocess_leaf_dir_block - ino %" PRIu64 "\n", ino); @@ -1450,7 +1422,7 @@ process_leaf_dir_block( /* * clear static dir block freespace bitmap */ - init_da_freemap(dir_freemap); + dir_freemap = alloc_da_freemap(mp); *buf_dirty = 0; first_used = mp->m_sb.sb_blocksize; @@ -1462,7 +1434,8 @@ process_leaf_dir_block( do_warn( _("directory block header conflicts with used space in directory inode %" PRIu64 "\n"), ino); - return(1); + res = 1; + goto out; } /* @@ -1778,8 +1751,8 @@ _("entry references free inode %" PRIu64 do_warn( _("bad size, entry #%d in dir inode %" PRIu64 ", block %u -- entry overflows block\n"), i, ino, da_bno); - - return(1); + res = 1; + goto out; } start = (__psint_t)&leaf->entries[i] - (__psint_t)leaf;; @@ -1789,7 +1762,8 @@ _("bad size, entry #%d in dir inode %" P do_warn( _("dir entry slot %d in block %u conflicts with used space in dir inode %" PRIu64 "\n"), i, da_bno, ino); - return(1); + res = 1; + goto out; } /* @@ -2183,7 +2157,7 @@ _("- existing hole info for block %d, di _("- compacting block %u in dir inode %" PRIu64 "\n"), da_bno, ino); - new_leaf = (xfs_dir_leafblock_t *) ts_dirbuf(); + new_leaf = malloc(mp->m_sb.sb_blocksize); /* * copy leaf block header @@ -2223,6 +2197,7 @@ _("- existing hole info for block %d, di do_warn( _("not enough space in block %u of dir inode %" PRIu64 " for all entries\n"), da_bno, ino); + free(new_leaf); break; } @@ -2284,6 +2259,7 @@ _("- existing hole info for block %d, di * final step, copy block back */ memmove(leaf, new_leaf, mp->m_sb.sb_blocksize); + free(new_leaf); *buf_dirty = 1; } else { @@ -2302,10 +2278,13 @@ _("- existing hole info for block %d, di junk_zerolen_dir_leaf_entries(mp, leaf, ino, buf_dirty); } #endif + +out: + free(dir_freemap); #ifdef XR_DIR_TRACE fprintf(stderr, "process_leaf_dir_block returns %d\n", res); #endif - return((res > 0) ? 1 : 0); + return res > 0 ? 1 : 0; } /* Index: xfsprogs-dev/repair/dir.h =================================================================== --- xfsprogs-dev.orig/repair/dir.h 2012-02-02 09:28:58.000000000 +0000 +++ xfsprogs-dev/repair/dir.h 2012-02-02 11:09:41.000000000 +0000 @@ -21,9 +21,6 @@ struct blkmap; -/* 1 bit per byte, max XFS blocksize == 64K bits / NBBY */ -#define DA_BMAP_SIZE 8192 - typedef unsigned char da_freemap_t; /* @@ -81,9 +78,9 @@ get_first_dblock_fsbno( xfs_ino_t ino, xfs_dinode_t *dino); -void -init_da_freemap( - da_freemap_t *dir_freemap); +da_freemap_t * +alloc_da_freemap( + xfs_mount_t *mp); int namecheck( Index: xfsprogs-dev/repair/globals.h =================================================================== --- xfsprogs-dev.orig/repair/globals.h 2012-02-02 09:33:29.000000000 +0000 +++ xfsprogs-dev/repair/globals.h 2012-02-02 09:34:49.000000000 +0000 @@ -185,10 +185,6 @@ EXTERN xfs_extlen_t sb_inoalignmt; EXTERN __uint32_t sb_unit; EXTERN __uint32_t sb_width; -extern size_t ts_dirbuf_size; -extern size_t ts_dir_freemap_size; -extern size_t ts_attr_freemap_size; - EXTERN pthread_mutex_t *ag_locks; EXTERN int report_interval; Index: xfsprogs-dev/repair/init.c =================================================================== --- xfsprogs-dev.orig/repair/init.c 2012-02-02 09:25:50.000000000 +0000 +++ xfsprogs-dev/repair/init.c 2012-02-02 09:37:02.000000000 +0000 @@ -29,67 +29,16 @@ #include "prefetch.h" #include -/* TODO: dirbuf/freemap key usage is completely b0rked - only used for dirv1 */ -static pthread_key_t dirbuf_key; -static pthread_key_t dir_freemap_key; -static pthread_key_t attr_freemap_key; - extern pthread_key_t dblkmap_key; extern pthread_key_t ablkmap_key; static void -ts_alloc(pthread_key_t key, unsigned n, size_t size) -{ - void *voidp; - voidp = calloc(n, size); - if (voidp == NULL) { - do_error(_("ts_alloc: cannot allocate thread specific storage\n")); - /* NO RETURN */ - return; - } - pthread_setspecific(key, voidp); -} - -static void ts_create(void) { - /* create thread specific keys */ - pthread_key_create(&dirbuf_key, NULL); - pthread_key_create(&dir_freemap_key, NULL); - pthread_key_create(&attr_freemap_key, NULL); - pthread_key_create(&dblkmap_key, NULL); pthread_key_create(&ablkmap_key, NULL); } -void -ts_init(void) -{ - - /* allocate thread specific storage */ - ts_alloc(dirbuf_key, 1, ts_dirbuf_size); - ts_alloc(dir_freemap_key, 1, ts_dir_freemap_size); - ts_alloc(attr_freemap_key, 1, ts_attr_freemap_size); -} - -void * -ts_dirbuf(void) -{ - return pthread_getspecific(dirbuf_key); -} - -void * -ts_dir_freemap(void) -{ - return pthread_getspecific(dir_freemap_key); -} - -void * -ts_attr_freemap(void) -{ - return pthread_getspecific(attr_freemap_key); -} - static void increase_rlimit(void) { @@ -156,7 +105,6 @@ xfs_init(libxfs_init_t *args) do_error(_("couldn't initialize XFS library\n")); ts_create(); - ts_init(); increase_rlimit(); pftrace_init(); } Index: xfsprogs-dev/repair/protos.h =================================================================== --- xfsprogs-dev.orig/repair/protos.h 2012-02-02 09:33:29.000000000 +0000 +++ xfsprogs-dev/repair/protos.h 2012-02-02 09:36:42.000000000 +0000 @@ -41,9 +41,5 @@ char *alloc_ag_buf(int size); void print_inode_list(xfs_agnumber_t i); char * err_string(int err_code); -extern void *ts_attr_freemap(void); -extern void *ts_dir_freemap(void); -extern void *ts_dirbuf(void); -extern void ts_init(void); extern void thread_init(void); --3MwIy2ne0vdjdPXF-- From jeff.liu@oracle.com Thu Feb 2 07:10:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,J_CHICKENPOX_35, J_CHICKENPOX_52,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12DAosq052908 for ; Thu, 2 Feb 2012 07:10:50 -0600 X-ASG-Debug-ID: 1328188248-04cb6c2261433b20001-NocioJ Received: from rcsinet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by cuda.sgi.com with ESMTP id xNosEnl7y3SrGaBD (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 02 Feb 2012 05:10:48 -0800 (PST) X-Barracuda-Envelope-From: jeff.liu@oracle.com X-Barracuda-Apparent-Source-IP: 148.87.113.117 Received: from ucsinet22.oracle.com (ucsinet22.oracle.com [156.151.31.94]) by rcsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id q12DAfrq014862 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Feb 2012 13:10:42 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by ucsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q12DAe8K013416 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 Feb 2012 13:10:40 GMT Received: from abhmt113.oracle.com (abhmt113.oracle.com [141.146.116.65]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q12DAegs030497; Thu, 2 Feb 2012 07:10:40 -0600 Received: from [124.131.62.183] (/124.131.62.183) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 02 Feb 2012 05:10:32 -0800 Message-ID: <4F2A8B33.5090105@oracle.com> Date: Thu, 02 Feb 2012 21:10:11 +0800 From: Jeff Liu Reply-To: jeff.liu@oracle.com Organization: Oracle User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11 MIME-Version: 1.0 To: Mark Tinguely CC: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH] xfstests: Introduce a new SEEK_DATA/SEEK_HOLE tester References: <4EFC6BC6.6020405@oracle.com> <4F299182.7010606@sgi.com> X-ASG-Orig-Subj: Re: [PATCH] xfstests: Introduce a new SEEK_DATA/SEEK_HOLE tester In-Reply-To: <4F299182.7010606@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-CT-RefId: str=0001.0A090207.4F2A8B52.00A0,ss=1,re=0.000,fgs=0 X-Barracuda-Connect: rcsinet15.oracle.com[148.87.113.117] X-Barracuda-Start-Time: 1328188248 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87391 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Mark, Thanks for your review! My response is inline below. On 02/02/2012 03:24 AM, Mark Tinguely wrote: > On 01/-10/63 13:59, Jeff Liu wrote: >> Hello, >> >> This is another SEEK_DATA/SEEK_HOLE tester which is intended to cover >> multiple extents checking. >> I have ran it against btrfs to ensure the tester works, and ran it >> against XFS to ensure the SEEK_DATA/SEEK_HOLE patch works too. >> > >> diff --git a/src/seek_copy_tester.c b/src/seek_copy_tester.c >> new file mode 100755 >> index 0000000..4971f34 >> --- /dev/null >> +++ b/src/seek_copy_tester.c >> @@ -0,0 +1,674 @@ > > Do you want to add Author/Copyright and description? Sure. :) > >> +#include >> +#include >> +#include >> +#include > > ... > >> +int >> +full_write(int fd, const void *buf, size_t count) >> +{ >> + int ret = 0; >> + const char *ptr = (const char *) buf; >> + >> + while (count> 0) { >> + ssize_t n = write(fd, ptr, count); >> + if (n< 0) { >> + if (errno == EINTR) >> + continue; >> + error("full_write failed as %s", strerror(errno)); >> + ret = -1; >> + break; >> + } >> + >> + if (n == 0) >> + break; > > Callers of this routine expect the count number of bytes to be written. > Write a message if leaving this routine early? An error? It's prone to be an error if nothing was written, an it's better to print out an error message here. Also, I am prefer to revise full_write() to return the number of bytes actually wrote done. i.e, size_t full_write(). The caller can simply comparing the return value for each write by: if (full_write(fd, buf, count) != count) { error(); ... } > >> + >> + ptr += n; >> + count -= n; >> + } >> + >> + return ret; >> +} > > ... > > >> +int >> +create_data_and_holes(int fd, size_t nr_total_bytes, off_t start_offset, >> + uint64_t nr_skip_bytes, uint64_t nr_data_bytes, >> + int wrote_hole_at_eof) >> +{ >> + int ret = 0; >> + off_t total = nr_total_bytes; >> + off_t data_len = nr_data_bytes; >> + off_t off = start_offset; >> + char buf[4096]; >> + >> + memset(buf, 'A', sizeof(buf)); >> + >> + total -= start_offset; >> + while (total> 0) { >> + do { > > You can actually write more than total byte on the last data write. > If writing exact total is important, then give do_pwrite() the count: > cnt = MIN(total, sizeof(buf)) > >> + ssize_t nr_write = do_pwrite(fd, buf, sizeof(buf), off); >> + if (nr_write< 0) { >> + error("do_pwrite() failed as %s", strerror(errno)); >> + ret = -1; >> + goto out; >> + } >> + if (nr_write == 0) >> + break; >> + > do_pwrite will return 0 if not an error. To simplify error checking, I'd like to change "ssize_t do_pwrite()" to "size_t full_pwrite()"; let it return the number of wrote bytes same as full_write(), and print out an error message if the return value is not equal to the desired(sizeof(buf)). >> + off += nr_write; >> data_len -= nr_write; > These are probably sizeof(buf0 or my cnt not nr_write With above modification, nr_write can be replaced by sizeof(buf). Ah, I just realized that I should use BUF_SIZE macro here. >> + } while (data_len> 0); >> + >> + off += (nr_skip_bytes + nr_data_bytes); >> + total -= off; > > ... > >> + >> +/* >> + * Copy a data extent from source file to dest file. >> + * @data_off: data offset >> + * @hole_off: hole offset >> + * The length of this extent is (hole_off - data_off). >> + */ >> +int >> +do_extent_copy(int src_fd, int dest_fd, off_t data_off, off_t hole_off) >> +{ >> + uint64_t len = (uint64_t)(hole_off - data_off); >> + char buf[BUF_SIZE]; >> + int ret; >> + >> + /* Seek to data_off for data reading */ >> + ret = lseek(src_fd, data_off, SEEK_SET); >> + if (ret< 0) { >> + error("seek source file to %llu failed as %s", >> + (uint64_t)data_off, strerror(errno)); >> + return ret; >> + } >> + >> + /* Seek to data_off for data writing, make holes as well */ >> + ret = lseek(dest_fd, data_off, SEEK_SET); >> + if (ret< 0) { >> + error("seek dest file to %llu failed as %s", >> + (uint64_t)data_off, strerror(errno)); >> + return ret; >> + } >> + >> + while (len> 0) { >> + memset(buf, 0, sizeof(buf)); >> + ssize_t n_read = read(src_fd, buf, BUF_SIZE); >> + if (n_read< 0) { >> + if (errno == EINTR) >> + continue; >> + >> + error("read source file extent failed as %s", >> + strerror(errno)); >> + return n_read; >> + } >> + >> + if (n_read == 0) >> + break; > > Message? Error? Hmm, not an error. maybe drop a message when read hit EOF is useful for debugging purpose. Thanks, -Jeff > > --Mark Tinguely > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 08:09:50 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12E9oYc055443 for ; Thu, 2 Feb 2012 08:09:50 -0600 X-ASG-Debug-ID: 1328191787-04bdf07518518c10001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 95O52Zfc9kkdMGbi (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 06:09:48 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RsxMB-0004Eh-57; Thu, 02 Feb 2012 14:09:47 +0000 Date: Thu, 2 Feb 2012 09:09:47 -0500 From: Christoph Hellwig To: Brian Candler Cc: xfs@oss.sgi.com Subject: Re: Trailing garbage in event tracing output Message-ID: <20120202140947.GA16244@infradead.org> X-ASG-Orig-Subj: Re: Trailing garbage in event tracing output References: <20120202115211.GA1259@nsrc.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="VbJkn9YxBvnuCH5J" Content-Disposition: inline In-Reply-To: <20120202115211.GA1259@nsrc.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328191788 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87395 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL Custom Rule HREF_FROM_MISMATCH_TEXT_URIx1_HL --VbJkn9YxBvnuCH5J Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Feb 02, 2012 at 11:52:11AM +0000, Brian Candler wrote: > Just a minor issue, but when I did some XFS tracing using the instructions > at http://lwn.net/Articles/341899/ I found that there was trailing garbage > in the filenames logged in xfs_lookup. Example: > (where I think the real filename was "000000295aSl688"). I would guess the > logger is expecting null-terminated strings but they aren't. That's indeed the case. See the attched patch to fix the issue. To apply it against the 3.0 kernel you'll probably have to edit it to remove "linux-2.6/" directory in the filenames. --VbJkn9YxBvnuCH5J Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=xfs-fix-filename-tracing From: Christoph Hellwig Subject: xfs: trace xfs_name strings correctly Strings store in an xfs_name structure are often not NUL terminated, print them using the correct printf specifiers that make use of the string length store in the xfs_name structure. Reported-by: Brian Candler Signed-off-by: Christoph Hellwig Index: xfs/fs/xfs/xfs_trace.h =================================================================== --- xfs.orig/fs/xfs/xfs_trace.h 2012-02-02 13:11:38.355063111 +0100 +++ xfs/fs/xfs/xfs_trace.h 2012-02-02 14:58:45.800242652 +0100 @@ -627,16 +627,19 @@ DECLARE_EVENT_CLASS(xfs_namespace_class, TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_ino_t, dp_ino) + __field(int, namelen) __dynamic_array(char, name, name->len) ), TP_fast_assign( __entry->dev = VFS_I(dp)->i_sb->s_dev; __entry->dp_ino = dp->i_ino; + __entry->namelen = name->len; memcpy(__get_str(name), name->name, name->len); ), - TP_printk("dev %d:%d dp ino 0x%llx name %s", + TP_printk("dev %d:%d dp ino 0x%llx name %.*s", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->dp_ino, + __entry->namelen, __get_str(name)) ) @@ -658,6 +661,8 @@ TRACE_EVENT(xfs_rename, __field(dev_t, dev) __field(xfs_ino_t, src_dp_ino) __field(xfs_ino_t, target_dp_ino) + __field(int, src_namelen) + __field(int, target_namelen) __dynamic_array(char, src_name, src_name->len) __dynamic_array(char, target_name, target_name->len) ), @@ -665,15 +670,20 @@ TRACE_EVENT(xfs_rename, __entry->dev = VFS_I(src_dp)->i_sb->s_dev; __entry->src_dp_ino = src_dp->i_ino; __entry->target_dp_ino = target_dp->i_ino; + __entry->src_namelen = src_name->len; + __entry->target_namelen = target_name->len; memcpy(__get_str(src_name), src_name->name, src_name->len); - memcpy(__get_str(target_name), target_name->name, target_name->len); + memcpy(__get_str(target_name), target_name->name, + target_name->len); ), TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx" - " src name %s target name %s", + " src name %.*s target name %.*s", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->src_dp_ino, __entry->target_dp_ino, + __entry->src_namelen, __get_str(src_name), + __entry->target_namelen, __get_str(target_name)) ) --VbJkn9YxBvnuCH5J-- From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 10:07:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12G7YGg061171 for ; Thu, 2 Feb 2012 10:07:36 -0600 X-ASG-Debug-ID: 1328198850-04cb6c2260440ad0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id HNO05WUTzsp4H8UR (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Thu, 02 Feb 2012 08:07:30 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RszC2-0003oG-VG; Thu, 02 Feb 2012 16:07:27 +0000 Date: Thu, 2 Feb 2012 11:07:26 -0500 From: Christoph Hellwig To: Mitsuo Hayasaka Cc: Ben Myers , Alex Elder , Christoph Hellwig , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com, yrl.pp-manager.tt@hitachi.com Subject: Re: [PATCH 3/3] xfs: cleanup quota check on disk blocks and inodes reservations Message-ID: <20120202160726.GA10568@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 3/3] xfs: cleanup quota check on disk blocks and inodes reservations References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> <20120123034543.3339.56848.stgit@ltc219.sdl.hitachi.co.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123034543.3339.56848.stgit@ltc219.sdl.hitachi.co.jp> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328198850 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Mon, Jan 23, 2012 at 12:45:43PM +0900, Mitsuo Hayasaka wrote: > This patch is a cleanup of quota check on disk blocks and inodes > reservations. > > Signed-off-by: Mitsuo Hayasaka > Cc: Ben Myers > Cc: Alex Elder > Cc: Christoph Hellwig > --- > > fs/xfs/xfs_trans_dquot.c | 17 +++++++---------- > 1 files changed, 7 insertions(+), 10 deletions(-) > > diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c > index c4ba366..5e6cd1c 100644 > --- a/fs/xfs/xfs_trans_dquot.c > +++ b/fs/xfs/xfs_trans_dquot.c > @@ -605,7 +605,7 @@ xfs_trans_dqresv( > time_t timer; > xfs_qwarncnt_t warns; > xfs_qwarncnt_t warnlimit; > - xfs_qcnt_t count; > + xfs_qcnt_t tcount; Can you call this variable total_count to make it a bit more obvious? > + tcount = *resbcountp + nblks; > + if (hardlimit > 0ULL && tcount > hardlimit) { Given that xfs_qcnt_t is unsigned what about transforming this into the more readable: if (hardlimit && total_count > hardlimit) and similar for the others? From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 10:16:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12GGVST061701 for ; Thu, 2 Feb 2012 10:16:32 -0600 X-ASG-Debug-ID: 1328199390-04cb6c225f4412c0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 5QAn7vs7fNIxTbse (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 08:16:31 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RszKn-0006Uc-Ja; Thu, 02 Feb 2012 16:16:29 +0000 Message-Id: <20120202161629.559449485@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Thu, 02 Feb 2012 11:14:12 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl, jack@suse.cz Subject: [PATCH 3/3] quota: make Q_XQUOTASYNC a noop References: <20120202161409.303465214@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 3/3] quota: make Q_XQUOTASYNC a noop Content-Disposition: inline; filename=quota-disable-Q_XQUOTASYNC X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328199390 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Now that XFS takes quota reservations into account there is no need to flush anything before reporting quotas - in addition to beeing fully transactional all quota information is also 100% coherent with the rest of the filesystem now. Signed-off-by: Christoph Hellwig Index: xfs/fs/quota/quota.c =================================================================== --- xfs.orig/fs/quota/quota.c 2012-02-02 13:06:30.693396524 +0100 +++ xfs/fs/quota/quota.c 2012-02-02 13:23:23.181244741 +0100 @@ -282,10 +282,9 @@ static int do_quotactl(struct super_bloc case Q_XGETQUOTA: return quota_getxquota(sb, type, id, addr); case Q_XQUOTASYNC: - /* caller already holds s_umount */ if (sb->s_flags & MS_RDONLY) return -EROFS; - writeback_inodes_sb(sb, WB_REASON_SYNC); + /* XFS quotas are fully coherent now, making this call a noop */ return 0; default: return -EINVAL; From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 10:16:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12GGW93061707 for ; Thu, 2 Feb 2012 10:16:32 -0600 X-ASG-Debug-ID: 1328199390-04bdf075165255e0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id kwgL44j8OgepYyYM (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 08:16:31 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RszKm-0006Su-V2; Thu, 02 Feb 2012 16:16:28 +0000 Message-Id: <20120202161409.303465214@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Thu, 02 Feb 2012 11:14:09 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl, jack@suse.cz Subject: [PATCH 0/3] include reservations in quota reporting X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-ASG-Orig-Subj: [PATCH 0/3] include reservations in quota reporting X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328199391 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 This series makes sure quota reporting through quotactl, or in case of project quotas, statfs includes quota reservation in addition to the on-disk values. This fixes xfstests 270, which has been failing on XFS since it was added, and makes the Q_XQUOTASYNC quotactl command that xfs_quota uses to flush delalloc space redundant. Jan, the last patch touches common quota code, but it's only relevant to XFS - I'd like to put it in through the XFS tree if possible. From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 10:16:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12GGWWQ061708 for ; Thu, 2 Feb 2012 10:16:32 -0600 X-ASG-Debug-ID: 1328199390-04bdf075175255e0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id nxYkb2z1mpmys6or (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 08:16:31 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RszKn-0006TT-4U; Thu, 02 Feb 2012 16:16:29 +0000 Message-Id: <20120202161629.084820708@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Thu, 02 Feb 2012 11:14:10 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl, jack@suse.cz Subject: [PATCH 1/3] xfs: merge xfs_qm_export_dquot into xfs_qm_scall_getquota References: <20120202161409.303465214@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 1/3] xfs: merge xfs_qm_export_dquot into xfs_qm_scall_getquota Content-Disposition: inline; filename=xfs-quota-kill-xfs_qm_export_dquot X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328199391 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 The is no good reason to have these two separate, and for the next change I'd need the full struct xfs_dquot in xfs_qm_export_dquot, so better just fold the code now instead of changing it around. Signed-off-by: Christoph Hellwig Index: xfs/fs/xfs/xfs_qm_syscalls.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_syscalls.c 2012-02-02 13:11:38.368396372 +0100 +++ xfs/fs/xfs/xfs_qm_syscalls.c 2012-02-02 13:17:04.139964850 +0100 @@ -47,9 +47,6 @@ STATIC int xfs_qm_log_quotaoff_end(xfs_m uint); STATIC uint xfs_qm_export_flags(uint); STATIC uint xfs_qm_export_qtype_flags(uint); -STATIC void xfs_qm_export_dquot(xfs_mount_t *, xfs_disk_dquot_t *, - fs_disk_quota_t *); - /* * Turn off quota accounting and/or enforcement for all udquots and/or @@ -635,42 +632,6 @@ xfs_qm_scall_setqlim( return error; } -int -xfs_qm_scall_getquota( - xfs_mount_t *mp, - xfs_dqid_t id, - uint type, - fs_disk_quota_t *out) -{ - xfs_dquot_t *dqp; - int error; - - /* - * Try to get the dquot. We don't want it allocated on disk, so - * we aren't passing the XFS_QMOPT_DOALLOC flag. If it doesn't - * exist, we'll get ENOENT back. - */ - if ((error = xfs_qm_dqget(mp, NULL, id, type, 0, &dqp))) { - return (error); - } - - /* - * If everything's NULL, this dquot doesn't quite exist as far as - * our utility programs are concerned. - */ - if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) { - xfs_qm_dqput(dqp); - return XFS_ERROR(ENOENT); - } - /* - * Convert the disk dquot to the exportable format - */ - xfs_qm_export_dquot(mp, &dqp->q_core, out); - xfs_qm_dqput(dqp); - return (error ? XFS_ERROR(EFAULT) : 0); -} - - STATIC int xfs_qm_log_quotaoff_end( xfs_mount_t *mp, @@ -759,50 +720,66 @@ error0: } -/* - * Translate an internal style on-disk-dquot to the exportable format. - * The main differences are that the counters/limits are all in Basic - * Blocks (BBs) instead of the internal FSBs, and all on-disk data has - * to be converted to the native endianness. - */ -STATIC void -xfs_qm_export_dquot( - xfs_mount_t *mp, - xfs_disk_dquot_t *src, +int +xfs_qm_scall_getquota( + struct xfs_mount *mp, + xfs_dqid_t id, + uint type, struct fs_disk_quota *dst) { + struct xfs_dquot *dqp; + int error; + + /* + * Try to get the dquot. We don't want it allocated on disk, so + * we aren't passing the XFS_QMOPT_DOALLOC flag. If it doesn't + * exist, we'll get ENOENT back. + */ + error = xfs_qm_dqget(mp, NULL, id, type, 0, &dqp); + if (error) + return error; + + /* + * If everything's NULL, this dquot doesn't quite exist as far as + * our utility programs are concerned. + */ + if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) { + error = XFS_ERROR(ENOENT); + goto out_put; + } + memset(dst, 0, sizeof(*dst)); - dst->d_version = FS_DQUOT_VERSION; /* different from src->d_version */ - dst->d_flags = xfs_qm_export_qtype_flags(src->d_flags); - dst->d_id = be32_to_cpu(src->d_id); + dst->d_version = FS_DQUOT_VERSION; + dst->d_flags = xfs_qm_export_qtype_flags(dqp->q_core.d_flags); + dst->d_id = be32_to_cpu(dqp->q_core.d_id); dst->d_blk_hardlimit = - XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_blk_hardlimit)); + XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_hardlimit)); dst->d_blk_softlimit = - XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_blk_softlimit)); - dst->d_ino_hardlimit = be64_to_cpu(src->d_ino_hardlimit); - dst->d_ino_softlimit = be64_to_cpu(src->d_ino_softlimit); - dst->d_bcount = XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_bcount)); - dst->d_icount = be64_to_cpu(src->d_icount); - dst->d_btimer = be32_to_cpu(src->d_btimer); - dst->d_itimer = be32_to_cpu(src->d_itimer); - dst->d_iwarns = be16_to_cpu(src->d_iwarns); - dst->d_bwarns = be16_to_cpu(src->d_bwarns); + XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit)); + dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit); + dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); + dst->d_bcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_bcount)); + dst->d_icount = be64_to_cpu(dqp->q_core.d_icount); + dst->d_btimer = be32_to_cpu(dqp->q_core.d_btimer); + dst->d_itimer = be32_to_cpu(dqp->q_core.d_itimer); + dst->d_iwarns = be16_to_cpu(dqp->q_core.d_iwarns); + dst->d_bwarns = be16_to_cpu(dqp->q_core.d_bwarns); dst->d_rtb_hardlimit = - XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_rtb_hardlimit)); + XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit)); dst->d_rtb_softlimit = - XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_rtb_softlimit)); - dst->d_rtbcount = XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_rtbcount)); - dst->d_rtbtimer = be32_to_cpu(src->d_rtbtimer); - dst->d_rtbwarns = be16_to_cpu(src->d_rtbwarns); + XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit)); + dst->d_rtbcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtbcount)); + dst->d_rtbtimer = be32_to_cpu(dqp->q_core.d_rtbtimer); + dst->d_rtbwarns = be16_to_cpu(dqp->q_core.d_rtbwarns); /* * Internally, we don't reset all the timers when quota enforcement * gets turned off. No need to confuse the user level code, * so return zeroes in that case. */ - if ((!XFS_IS_UQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_USER) || + if ((!XFS_IS_UQUOTA_ENFORCED(mp) && dqp->q_core.d_flags == XFS_DQ_USER) || (!XFS_IS_OQUOTA_ENFORCED(mp) && - (src->d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { + (dqp->q_core.d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { dst->d_btimer = 0; dst->d_itimer = 0; dst->d_rtbtimer = 0; @@ -823,6 +800,9 @@ xfs_qm_export_dquot( } } #endif +out_put: + xfs_qm_dqput(dqp); + return error; } STATIC uint From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 10:16:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12GGV4J061702 for ; Thu, 2 Feb 2012 10:16:32 -0600 X-ASG-Debug-ID: 1328199390-04cb6c22604412c0001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id URFKp1tSSRk6a8tT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 08:16:31 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RszKn-0006Tz-Bt; Thu, 02 Feb 2012 16:16:29 +0000 Message-Id: <20120202161629.317451273@bombadil.infradead.org> User-Agent: quilt/0.48-1 Date: Thu, 02 Feb 2012 11:14:11 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: arekm@maven.pl, jack@suse.cz Subject: [PATCH 2/3] xfs: include reservations in quota reporting References: <20120202161409.303465214@bombadil.infradead.org> X-ASG-Orig-Subj: [PATCH 2/3] xfs: include reservations in quota reporting Content-Disposition: inline; filename=xfs-quota-report-delalloc-reservations X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328199390 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Report all quota usage including the currently pending reservations. This avoids the need to flush delalloc space before gathering quota information, and matches quota enforcement, which already takes the reservations into account. Signed-off-by: Christoph Hellwig Index: xfs/fs/xfs/xfs_qm_bhv.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_bhv.c 2012-02-02 15:06:42.624326140 +0100 +++ xfs/fs/xfs/xfs_qm_bhv.c 2012-02-02 15:06:43.077657017 +0100 @@ -40,28 +40,28 @@ STATIC void xfs_fill_statvfs_from_dquot( struct kstatfs *statp, - xfs_disk_dquot_t *dp) + struct xfs_dquot *dqp) { __uint64_t limit; - limit = dp->d_blk_softlimit ? - be64_to_cpu(dp->d_blk_softlimit) : - be64_to_cpu(dp->d_blk_hardlimit); + limit = dqp->q_core.d_blk_softlimit ? + be64_to_cpu(dqp->q_core.d_blk_softlimit) : + be64_to_cpu(dqp->q_core.d_blk_hardlimit); if (limit && statp->f_blocks > limit) { statp->f_blocks = limit; statp->f_bfree = statp->f_bavail = - (statp->f_blocks > be64_to_cpu(dp->d_bcount)) ? - (statp->f_blocks - be64_to_cpu(dp->d_bcount)) : 0; + (statp->f_blocks > dqp->q_res_bcount) ? + (statp->f_blocks - dqp->q_res_bcount) : 0; } - limit = dp->d_ino_softlimit ? - be64_to_cpu(dp->d_ino_softlimit) : - be64_to_cpu(dp->d_ino_hardlimit); + limit = dqp->q_core.d_ino_softlimit ? + be64_to_cpu(dqp->q_core.d_ino_softlimit) : + be64_to_cpu(dqp->q_core.d_ino_hardlimit); if (limit && statp->f_files > limit) { statp->f_files = limit; statp->f_ffree = - (statp->f_files > be64_to_cpu(dp->d_icount)) ? - (statp->f_ffree - be64_to_cpu(dp->d_icount)) : 0; + (statp->f_files > dqp->q_res_icount) ? + (statp->f_ffree - dqp->q_res_icount) : 0; } } @@ -82,7 +82,7 @@ xfs_qm_statvfs( xfs_dquot_t *dqp; if (!xfs_qm_dqget(mp, NULL, xfs_get_projid(ip), XFS_DQ_PROJ, 0, &dqp)) { - xfs_fill_statvfs_from_dquot(statp, &dqp->q_core); + xfs_fill_statvfs_from_dquot(statp, dqp); xfs_qm_dqput(dqp); } } Index: xfs/fs/xfs/xfs_qm_syscalls.c =================================================================== --- xfs.orig/fs/xfs/xfs_qm_syscalls.c 2012-02-02 15:06:42.837658317 +0100 +++ xfs/fs/xfs/xfs_qm_syscalls.c 2012-02-02 15:07:31.894059224 +0100 @@ -758,8 +758,8 @@ xfs_qm_scall_getquota( XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit)); dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit); dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); - dst->d_bcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_bcount)); - dst->d_icount = be64_to_cpu(dqp->q_core.d_icount); + dst->d_bcount = XFS_FSB_TO_BB(mp, dqp->q_res_bcount); + dst->d_icount = dqp->q_res_icount; dst->d_btimer = be32_to_cpu(dqp->q_core.d_btimer); dst->d_itimer = be32_to_cpu(dqp->q_core.d_itimer); dst->d_iwarns = be16_to_cpu(dqp->q_core.d_iwarns); @@ -768,7 +768,7 @@ xfs_qm_scall_getquota( XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit)); dst->d_rtb_softlimit = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit)); - dst->d_rtbcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtbcount)); + dst->d_rtbcount = XFS_FSB_TO_BB(mp, dqp->q_res_rtbcount); dst->d_rtbtimer = be32_to_cpu(dqp->q_core.d_rtbtimer); dst->d_rtbwarns = be16_to_cpu(dqp->q_core.d_rtbwarns); From kdasu.kdev@gmail.com Thu Feb 2 10:26:30 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12GQURl062154 for ; Thu, 2 Feb 2012 10:26:30 -0600 X-ASG-Debug-ID: 1328199988-04cbb01fb3586440001-NocioJ Received: from mail-qw0-f53.google.com (mail-qw0-f53.google.com [209.85.216.53]) by cuda.sgi.com with ESMTP id KyAc4hWChOIBasmr (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Thu, 02 Feb 2012 08:26:29 -0800 (PST) X-Barracuda-Envelope-From: kdasu.kdev@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.216.53 Received: by qafk1 with SMTP id k1so1966543qaf.5 for ; Thu, 02 Feb 2012 08:26:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=4ulEgRQ+fj3ZCYzs1V/KB6KyXqNVfW3L7oRASlly34s=; b=wDT//RZVqaEibKPV9iglpv2N/JUYTJ6HxBtLKHSCy3frikbEI6fNYLSQmJOi/0f5Cl Fx5SyIAS1amWjPt5uYZmW91AIqPSY5tflcPhSEBjc8C4JwNgF6wSQyJ0hw5HYeE2cJJP Ram/KtMyY9v+UHwINaf7Bb9bNNeezlsjNO9o0= MIME-Version: 1.0 Received: by 10.224.203.67 with SMTP id fh3mr5120714qab.13.1328199988743; Thu, 02 Feb 2012 08:26:28 -0800 (PST) Received: by 10.229.8.4 with HTTP; Thu, 2 Feb 2012 08:26:28 -0800 (PST) In-Reply-To: <20120202091330.GA31203@infradead.org> References: <20120202091330.GA31203@infradead.org> Date: Thu, 2 Feb 2012 11:26:28 -0500 Message-ID: Subject: Re: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume From: Kamal Dasu X-ASG-Orig-Subj: Re: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume To: Christoph Hellwig Cc: xfs@oss.sgi.com, cernekee@gmail.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-qw0-f53.google.com[209.85.216.53] X-Barracuda-Start-Time: 1328199989 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87404 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Thu, Feb 2, 2012 at 4:13 AM, Christoph Hellwig wrote= : > On Wed, Feb 01, 2012 at 07:44:13PM -0500, Kamal Dasu wrote: >> Need some help understanding the state of xfs with rt subvolume >> support on 2.6.37. >> >> When using xfs rt subvolume on a harddisk partition with kernel >> 2.6.37.6,and normal r/w/delete file operations? causes deadlock >> like hangs .? Failure? symptoms are lockups and mount failure on reboot. >> >> On further investigation it was found that one of the changes could be >> the cause. >> The same tests seem to pass with xfs in 2.6.31 kernel. >> >> xfs: simplify xfs_trans_iget? : aa72a5cf00001d0b952c7c755be404b9118ceb2e >> http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-stable.git;a=3D= commitdiff;h=3Daa72a5cf00001d0b952c7c755be404b9118ceb2e >> >> Reverting the change and forward porting to the xfs_trans_inode() seems = to >> get rid of the deadlock and mount issues . >> >> Below is the change > > Please just upgrade to Linux 2.6.39 or better Linux 3.0 which is the > long term support release. RT subvolume support has been fixed in 2.6.39 > by the following changes: > > =A0xfs: only lock the rt bitmap inode once per allocation > =A0xfs: fix xfs_get_extsz_hint for a zero extent size hint > =A0xfs: add lockdep annotations for the rt inodes > > But in general the RT subvolume code is not regularly tested and only > fixed when issues arise. Thanks for quick reply and clarifying this, if upgrading the kernel is not an option, should I be considering backporting changes to 2.6.37, should I use the entire 2.6.39 or 3.0 xfs implementation as is of cherry pick the above three changes ?. Regards Kamal From BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org Thu Feb 2 10:28:24 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12GSOek062223 for ; Thu, 2 Feb 2012 10:28:24 -0600 X-ASG-Debug-ID: 1328200103-04cbb01fb3586620001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id jDEKWukJdCXTFBqw (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 08:28:24 -0800 (PST) X-Barracuda-Envelope-From: BATV+24df316d8807d67fc126+3084+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RszWJ-0000uD-FE; Thu, 02 Feb 2012 16:28:23 +0000 Date: Thu, 2 Feb 2012 11:28:23 -0500 From: Christoph Hellwig To: Kamal Dasu Cc: Christoph Hellwig , xfs@oss.sgi.com, cernekee@gmail.com Subject: Re: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume Message-ID: <20120202162823.GA3425@infradead.org> X-ASG-Orig-Subj: Re: Inode lockdep problem observed on 2.6.37.6 xfs with RT subvolume References: <20120202091330.GA31203@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328200103 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87404 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Thu, Feb 02, 2012 at 11:26:28AM -0500, Kamal Dasu wrote: > > ?xfs: only lock the rt bitmap inode once per allocation > > ?xfs: fix xfs_get_extsz_hint for a zero extent size hint > > ?xfs: add lockdep annotations for the rt inodes > > > > But in general the RT subvolume code is not regularly tested and only > > fixed when issues arise. > > > Thanks for quick reply and clarifying this, if upgrading the kernel is > not an option, should I be > considering backporting changes to 2.6.37, should I use the entire > 2.6.39 or 3.0 > xfs implementation as is of cherry pick the above three changes ?. I don't remember if we have other changes in that area. If backporting the changes is easy enough, go for it, if not stick to your original workaround. Either way make sure you don't introduce other regressions by running xfstests. From jack@suse.cz Thu Feb 2 11:31:26 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12HVPkq066572 for ; Thu, 2 Feb 2012 11:31:26 -0600 X-ASG-Debug-ID: 1328203881-04bdf0751752b270001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id DaI6ckLyBUb0nyla (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 09:31:23 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 0EAD68FE69; Thu, 2 Feb 2012 18:31:21 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 473F1205E0; Thu, 2 Feb 2012 18:31:20 +0100 (CET) Date: Thu, 2 Feb 2012 18:31:20 +0100 From: Jan Kara To: Jeff Moyer Cc: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 2/3] ext4: honor the O_SYNC flag for aysnchronous direct I/O requests Message-ID: <20120202173120.GA6640@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 2/3] ext4: honor the O_SYNC flag for aysnchronous direct I/O requests References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> <1327698949-12616-3-git-send-email-jmoyer@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327698949-12616-3-git-send-email-jmoyer@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1328203883 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87408 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi, On Fri 27-01-12 16:15:48, Jeff Moyer wrote: > If a file is opened with O_SYNC|O_DIRECT, the drive cache does not get > flushed after the write completion. Instead, it's flushed *before* the > I/O is sent to the disk (in __generic_file_aio_write). This patch > attempts to fix that problem by marking an I/O as requiring a cache > flush in endio processing. I'll send a follow-on patch to the > generic write code to get rid of the bogus generic_write_sync call > when EIOCBQUEUED is returned. Thanks for the patch! > Signed-off-by: Jeff Moyer > --- > fs/ext4/ext4.h | 4 ++++ > fs/ext4/inode.c | 11 +++++++++-- > fs/ext4/page-io.c | 39 ++++++++++++++++++++++++++++++++------- > fs/ext4/super.c | 11 +++++++++++ > 4 files changed, 56 insertions(+), 9 deletions(-) > > diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h > index 2d55d7c..4377ed3 100644 > --- a/fs/ext4/ext4.h > +++ b/fs/ext4/ext4.h > @@ -185,6 +185,7 @@ struct mpage_da_data { > #define EXT4_IO_END_ERROR 0x0002 > #define EXT4_IO_END_QUEUED 0x0004 > #define EXT4_IO_END_DIRECT 0x0008 > +#define EXT4_IO_END_NEEDS_SYNC 0x0010 > > struct ext4_io_page { > struct page *p_page; > @@ -1247,6 +1248,9 @@ struct ext4_sb_info { > /* workqueue for dio unwritten */ > struct workqueue_struct *dio_unwritten_wq; > > + /* workqueue for aio+dio+o_sync disk cache flushing */ > + struct workqueue_struct *aio_dio_flush_wq; > + Hmm, looking at the patch I'm wondering why did you introduce the new workqueue? It seems dio_unwritten_wq would be enough? You just need to rename it to something more appropriate ;) > diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c > index 9e1b8eb..d07cd40 100644 > --- a/fs/ext4/page-io.c > +++ b/fs/ext4/page-io.c > @@ -98,15 +98,40 @@ int ext4_end_io_nolock(ext4_io_end_t *io) > "list->prev 0x%p\n", > io, inode->i_ino, io->list.next, io->list.prev); > > - ret = ext4_convert_unwritten_extents(inode, offset, size); > - if (ret < 0) { > - ext4_msg(inode->i_sb, KERN_EMERG, > - "failed to convert unwritten extents to written " > - "extents -- potential data loss! " > - "(inode %lu, offset %llu, size %zd, error %d)", > - inode->i_ino, offset, size, ret); > + if (io->flag & EXT4_IO_END_UNWRITTEN) { > + > + ret = ext4_convert_unwritten_extents(inode, offset, size); > + if (ret < 0) { > + ext4_msg(inode->i_sb, KERN_EMERG, > + "failed to convert unwritten extents to " > + "written extents -- potential data loss! " > + "(inode %lu, offset %llu, size %zd, error %d)", > + inode->i_ino, offset, size, ret); > + goto endio; > + } > + } > + > + /* > + * This function has two callers. The first is the end_io_work > + * routine just below. This is an asynchronous completion context. > + * The second is in the fsync path. For the latter path, we can't > + * return from here until the job is done. Hence, we issue a > + * blocking blkdev_issue_flush call. > + */ > + if (io->flag & EXT4_IO_END_NEEDS_SYNC) { > + /* > + * Ideally, we'd like to know if the force_commit routine > + * actually did send something to disk. If it didn't, > + * then we need to issue the cache flush by hand. For now, > + * play it safe and do both. > + */ > + ret = ext4_force_commit(inode->i_sb); > + if (ret) > + goto endio; > + ret = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_NOIO, NULL); Look at what ext4_sync_file() does. It's more efficient than this. You need something like: commit_tid = file->f_flags & __O_SYNC ? EXT4_I(inode)->i_sync_tid : EXT4_I(inode)->i_datasync_tid; if (journal->j_flags & JBD2_BARRIER && !jbd2_trans_will_send_data_barrier(journal, commit_tid)) needs_barrier = true; jbd2_log_start_commit(journal, commit_tid); jbd2_log_wait_commit(journal, commit_tid); if (needs_barrier) blkdev_issue_flush(inode->i_sb->s_bdev, GFP_NOIO, NULL); Honza -- Jan Kara SUSE Labs, CR From sandeen@redhat.com Thu Feb 2 11:35:13 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12HZCVS066679 for ; Thu, 2 Feb 2012 11:35:12 -0600 X-ASG-Debug-ID: 1328204111-04cb6c225e446000001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id jcwBGb9GYFdkkdai for ; Thu, 02 Feb 2012 09:35:11 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q12HZ5aq012195 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 2 Feb 2012 12:35:05 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q12HZ4Te026497 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 2 Feb 2012 12:35:04 -0500 Message-ID: <4F2AC948.1050909@redhat.com> Date: Thu, 02 Feb 2012 11:35:04 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20120129 Thunderbird/10.0 MIME-Version: 1.0 To: xfs-oss CC: Christoph Hellwig Subject: [PATCH] xfs_io: deprecate the "-F" foreign flag X-Enigmail-Version: 1.3.5 X-ASG-Orig-Subj: [PATCH] xfs_io: deprecate the "-F" foreign flag Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1328204111 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87408 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- There's no real reason to force the user to specify "-F" for non-xfs files, when we can just test for that after it's opened. * Remove the -F flag from usage() & man pages, but still accept it. * Set IO_FOREIGN when we open the file, if the fd tests as non-xfs. Signed-off-by: Eric Sandeen --- diff --git a/io/init.c b/io/init.c index a166ad1..f416acf 100644 --- a/io/init.c +++ b/io/init.c @@ -32,7 +32,7 @@ void usage(void) { fprintf(stderr, - _("Usage: %s [-adFfmrRstx] [-p prog] [-c cmd]... file\n"), + _("Usage: %s [-adfmrRstx] [-p prog] [-c cmd]... file\n"), progname); exit(1); } @@ -145,7 +145,7 @@ init( flags |= IO_DIRECT; break; case 'F': - flags |= IO_FOREIGN; + /* Ignored / deprecated now, handled automatically */ break; case 'f': flags |= IO_CREAT; @@ -188,9 +188,10 @@ init( } while (optind < argc) { - if ((c = openfile(argv[optind], flags & IO_FOREIGN ? - NULL : &geometry, flags, mode)) < 0) + if ((c = openfile(argv[optind], &geometry, flags, mode)) < 0) exit(1); + if (!platform_test_xfs_fd(c)) + flags |= IO_FOREIGN; if (addfile(argv[optind], c, &geometry, flags) < 0) exit(1); optind++; diff --git a/io/open.c b/io/open.c index f1a6501..97631e2 100644 --- a/io/open.c +++ b/io/open.c @@ -163,17 +163,9 @@ openfile( } } - if (!geom) + if (!platform_test_xfs_fd(fd)) return fd; - if (!platform_test_xfs_fd(fd)) { - fprintf(stderr, _("%s: specified file " - "[\"%s\"] is not on an XFS filesystem\n"), - progname, path); - close(fd); - return -1; - } - if (xfsctl(path, fd, XFS_IOC_FSGEOMETRY, geom) < 0) { perror("XFS_IOC_FSGEOMETRY"); close(fd); @@ -282,10 +274,10 @@ open_f( return 0; } - while ((c = getopt(argc, argv, "FRacdfm:nrstx")) != EOF) { + while ((c = getopt(argc, argv, "Racdfm:nrstx")) != EOF) { switch (c) { case 'F': - flags |= IO_FOREIGN; + /* Ignored / deprecated now, handled automatically */ break; case 'a': flags |= IO_APPEND; @@ -328,11 +320,13 @@ open_f( if (optind != argc - 1) return command_usage(&open_cmd); - fd = openfile(argv[optind], flags & IO_FOREIGN ? - NULL : &geometry, flags, mode); + fd = openfile(argv[optind], &geometry, flags, mode); if (fd < 0) return 0; + if (!platform_test_xfs_fd(fd)) + flags |= IO_FOREIGN; + addfile(argv[optind], fd, &geometry, flags); return 0; } diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8 index 6fc6bad..332718c 100644 --- a/man/man8/xfs_io.8 +++ b/man/man8/xfs_io.8 @@ -4,7 +4,7 @@ xfs_io \- debug the I/O path of an XFS filesystem .SH SYNOPSIS .B xfs_io [ -.B \-adFfmrRstx +.B \-adfmrRstx ] [ .B \-c .I cmd @@ -37,12 +37,6 @@ Set the program name for prompts and some error messages, the default value is .BR xfs_io . .TP -.B \-F -Allow -.I file -to reside in non-XFS (foreign) filesystems. -This mode has a restricted set of commands. -.TP .B \-f Create .I file From iletisim@dumanmail.com Thu Feb 2 11:37:07 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.1 required=5.0 tests=BAYES_99,J_CHICKENPOX_22, T_FILL_THIS_FORM_SHORT,T_FRT_SLUT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12Hb7qZ066739 for ; Thu, 2 Feb 2012 11:37:07 -0600 X-ASG-Debug-ID: 1328204223-04cb6c2260446180001-w1Z2WR Received: from mail.dumanmail.com (mail.dumanmail.com [31.210.124.121]) by cuda.sgi.com with ESMTP id QOXdGG082xsqakQi for ; Thu, 02 Feb 2012 09:37:04 -0800 (PST) X-Barracuda-Envelope-From: iletisim@dumanmail.com X-Barracuda-Apparent-Source-IP: 31.210.124.121 Received: from mhmtdmn ([31.210.124.121]) by dumanmail.com with MailEnable ESMTP; Thu, 02 Feb 2012 18:48:11 +0200 Message-ID: <41261-22012242164811781@mhmtdmn> To: "istanbul5" From: "iletisim@dumanmail.com" Subject: Ayda sadece 33 TL'ye ADAK Date: Thu, 2 Feb 2012 18:48:11 +0200 X-ASG-Orig-Subj: Ayda sadece 33 TL'ye ADAK MIME-Version: 1.0 Content-type: text/plain; charset=windows-1254 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail.dumanmail.com[31.210.124.121] X-Barracuda-Start-Time: 1328204223 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87408 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address www=2Eadakyeri=2Ecom=20 Ayda sadece 33 TL'ye ADAK vazifenizi yerine getirebilme imkani Dini vecibelere uygun =DCCRETS=DDZ kesim=20 =DDnternetten adak alman=FDn en kolay yolu=20 En UCUZ Fiyat Garantisi=20 T=FCrkiyenin en kapsaml=FD tek adak sitesi=20 Kredi Kart=FDna Taksit =DDmkan=FD=20 =DDster sizin adresinize, =DDsterseniz sizin belirleyece=F0iniz farkl=FD b= ir adrese veya hay=FDr kurumuna sizin ad=FDn=FDza teslim=20 G=FCvenli Al=FD=FEveri=FE Sistemi=20 Canl=FD adak teslimi ve Adreste kesim hizmeti (A=E7=FDl=FD=FElar ve =F6zel= kutlamalar=FDn=FDz i=E7in)=20 Adak Kesim CD'si=20 Adakyeri=2Ecom sitemizden sat=FDn alaca=F0=FDn=FDz b=FCt=E7enize uygun ada= =F0=FDn=FDz sizin ad=FDn=FDza=20 dini vecibelere uygun olarak kesilir 8 par=E7a'ya b=F6l=FCn=FCr =F6zel ola= rak paketlenir ve adak kolisine koyularak adresinize teslim edilir=2E=20 Adak CD'si sat=FDn alman=FDz durumunda Ada=F0=FDn=FDz=FDn sipari=FE takip = numaras=FD g=F6r=FCn=FCr =FEekilde Tart=FDm=FD,=20 Vekalet verme a=FEamas=FD, Kesimi, Par=E7alara b=F6l=FCnmesi ve Paketlener= ek kolinizin a=F0z=FDn=FDn kapanmas=FDna=20 kadar olan k=FDsma kadar kesintisiz kay=FDt yap=FDlan video CD'si adresini= ze faturan=FDz ile birlikte g=F6nderilmektedir=2E=20 Ada=F0=FDn=FDz=FD Hay=FDr kurumuna ba=F0=FD=FElamay=FD tercih etmeniz duru= munda kuruma teslim edildi=F0ine dair teslim fi=FEi faturan=FDz ile birlik= te adresinize g=F6nderilecektir=2E=20 =DCr=FCn fiyatlar=FDm=FDz %8 KDV dahil fiyatlard=FDr=2E=20 Call Center: Kavac=FDk F=2ES=2EM=2E Cad=2E No:46 D:7 Beykoz/=DDSTANBUL Kesimhanemiz: So=F0uksu Mah=2E G=FCnayd=FDn Sk=2E No:4 Beykoz/=DDSTANBUL =C7iftlik Adresi: Elle=E7 K=F6y=FC Ta=FEk=F6pr=FC =C7iftli=F0i Ta=FEk=F6pr= =FC/KASTAMONU Tel : +90 (536) 635 0 999 Fax : +90 (216) 537 83 38 Email : destek@adakyeri=2Ecom www=2Eadakyeri=2Ecom Mail listemizden =E7=FDkmak istiyorsan=FDz l=FCtfen m=2Eduman@msn=2Ecom ad= resine mail at=FDn=FDz From jack@suse.cz Thu Feb 2 11:52:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12HqNZ9067290 for ; Thu, 2 Feb 2012 11:52:23 -0600 X-ASG-Debug-ID: 1328205140-04cb6c2260446f20001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id E3SSogjcjwHFD5GT (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 09:52:22 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id A770A8BB22; Thu, 2 Feb 2012 18:52:20 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id C55AB205E0; Thu, 2 Feb 2012 18:52:19 +0100 (CET) Date: Thu, 2 Feb 2012 18:52:19 +0100 From: Jan Kara To: Jeff Moyer Cc: linux-ext4@vger.kernel.org, xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED Message-ID: <20120202175219.GB6640@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] filemap: don't call generic_write_sync for -EIOCBQUEUED References: <1327698949-12616-1-git-send-email-jmoyer@redhat.com> <1327698949-12616-4-git-send-email-jmoyer@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327698949-12616-4-git-send-email-jmoyer@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1328205141 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello, On Fri 27-01-12 16:15:49, Jeff Moyer wrote: > As it stands, generic_file_aio_write will call into generic_write_sync > when -EIOCBQUEUED is returned from __generic_file_aio_write. EIOCBQUEUED > indicates that an I/O was submitted but NOT completed. Thus, we will > flush the disk cache, potentially before the write(s) even make it to > the disk! Yeah. It seems to be a problem introduced by Tejun's rewrite of barrier code, right? Before that we'd drain the IO queue when cache flush is issued and thus effectively wait for IO completion... > Up until now, this has been the best we could do, as file > systems didn't bother to flush the disk cache after an O_SYNC AIO+DIO > write. After applying the prior two patches to xfs and ext4, at least > the major two file systems do the right thing. So, let's go ahead and > fix this backwards logic. But doesn't this break filesystems which you didn't fix explicitely even more than they were? You are right they might have sent cache flush too early but they'd at least propely force all metadata modifications (e.g. from allocation) to disk. But after this patch O_SYNC will have simply no effect for these filesystems. Also I was thinking whether we couldn't implement the fix in VFS. Basically it would be the same like the fix for ext4. Like having a per-sb workqueue and queue work calling generic_write_sync() from end_io handler when the file is O_SYNC? That would solve the issue for all filesystems... Honza > Signed-off-by: Jeff Moyer > --- > mm/filemap.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/mm/filemap.c b/mm/filemap.c > index c4ee2e9..004442f 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -2634,7 +2634,7 @@ ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, > ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos); > mutex_unlock(&inode->i_mutex); > > - if (ret > 0 || ret == -EIOCBQUEUED) { > + if (ret > 0) { > ssize_t err; > > err = generic_write_sync(file, pos, ret); > -- > 1.7.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu Feb 2 12:06:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12I6Tfd067964 for ; Thu, 2 Feb 2012 12:06:29 -0600 X-ASG-Debug-ID: 1328205987-04cb6c2261447aa0001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Dpp7CNT85hIRGaFV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 10:06:28 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 04EC18FD0F; Thu, 2 Feb 2012 19:06:26 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id 1D27B205E0; Thu, 2 Feb 2012 19:06:26 +0100 (CET) Date: Thu, 2 Feb 2012 19:06:26 +0100 From: Jan Kara To: Christoph Hellwig Cc: xfs@oss.sgi.com, arekm@maven.pl, jack@suse.cz Subject: Re: [PATCH 3/3] quota: make Q_XQUOTASYNC a noop Message-ID: <20120202180626.GA7494@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 3/3] quota: make Q_XQUOTASYNC a noop References: <20120202161409.303465214@bombadil.infradead.org> <20120202161629.559449485@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120202161629.559449485@bombadil.infradead.org> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1328205987 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 02-02-12 11:14:12, Christoph Hellwig wrote: > Now that XFS takes quota reservations into account there is no need to flush > anything before reporting quotas - in addition to beeing fully transactional > all quota information is also 100% coherent with the rest of the filesystem > now. Looks fine. You can add: Acked-by: Jan Kara Honza > Signed-off-by: Christoph Hellwig > > Index: xfs/fs/quota/quota.c > =================================================================== > --- xfs.orig/fs/quota/quota.c 2012-02-02 13:06:30.693396524 +0100 > +++ xfs/fs/quota/quota.c 2012-02-02 13:23:23.181244741 +0100 > @@ -282,10 +282,9 @@ static int do_quotactl(struct super_bloc > case Q_XGETQUOTA: > return quota_getxquota(sb, type, id, addr); > case Q_XQUOTASYNC: > - /* caller already holds s_umount */ > if (sb->s_flags & MS_RDONLY) > return -EROFS; > - writeback_inodes_sb(sb, WB_REASON_SYNC); > + /* XFS quotas are fully coherent now, making this call a noop */ > return 0; > default: > return -EINVAL; > -- Jan Kara SUSE Labs, CR From jack@suse.cz Thu Feb 2 12:07:10 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12I7Adm068001 for ; Thu, 2 Feb 2012 12:07:10 -0600 X-ASG-Debug-ID: 1328206028-04cb6c225e447b10001-NocioJ Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 8AvnvzZALWIb6RRK (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 02 Feb 2012 10:07:09 -0800 (PST) X-Barracuda-Envelope-From: jack@suse.cz X-Barracuda-Apparent-Source-IP: 195.135.220.15 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 59D818FFDD; Thu, 2 Feb 2012 19:07:08 +0100 (CET) Received: by quack.suse.cz (Postfix, from userid 1000) id CD5E5205E0; Thu, 2 Feb 2012 19:07:07 +0100 (CET) Date: Thu, 2 Feb 2012 19:07:07 +0100 From: Jan Kara To: Christoph Hellwig Cc: xfs@oss.sgi.com, arekm@maven.pl, jack@suse.cz Subject: Re: [PATCH 0/3] include reservations in quota reporting Message-ID: <20120202180707.GB7494@quack.suse.cz> X-ASG-Orig-Subj: Re: [PATCH 0/3] include reservations in quota reporting References: <20120202161409.303465214@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120202161409.303465214@bombadil.infradead.org> User-Agent: Mutt/1.5.20 (2009-06-14) X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1328206029 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87410 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu 02-02-12 11:14:09, Christoph Hellwig wrote: > This series makes sure quota reporting through quotactl, or in case of > project quotas, statfs includes quota reservation in addition to the > on-disk values. This fixes xfstests 270, which has been failing on XFS > since it was added, and makes the Q_XQUOTASYNC quotactl command that > xfs_quota uses to flush delalloc space redundant. > > Jan, the last patch touches common quota code, but it's only relevant > to XFS - I'd like to put it in through the XFS tree if possible. Sure. The patch is trivial so conflicts are unlikely. Honza -- Jan Kara SUSE Labs, CR From tinguely@sgi.com Thu Feb 2 12:19:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12IJK9H068454 for ; Thu, 2 Feb 2012 12:19:20 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3B5FC8F8054; Thu, 2 Feb 2012 10:19:17 -0800 (PST) Message-ID: <4F2AD3A7.7070401@sgi.com> Date: Thu, 02 Feb 2012 12:19:19 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Christoph Hellwig CC: Dave Chinner , xfs@oss.sgi.com Subject: Re: [PATCH v2] repair: update extent count after zapping duplicate blocks References: <20111202174619.179530033@bombadil.infradead.org> <20111202174741.904845954@bombadil.infradead.org> <20111213021207.GY14273@dastard> <20120202123910.GA8708@infradead.org> In-Reply-To: <20120202123910.GA8708@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 02/02/12 06:39, Christoph Hellwig wrote: > When we find a duplicate extent in an extern format inode we do not zap > the whole inode, but just truncate it to the point where the duplicate > extent was found. But the current code only updates di_nblocks for the > new size, but no di_nextents/di_anextents. In most cases this isn't noticed, > but when moving such an inode to the lost+found directoy the consistency > check in xfs_iformat trips over it. Fix this by updating the on-disk > extent count as part of the inode repair. Looks good. Reviewed-by: Mark Tinguely From sandeen@sandeen.net Thu Feb 2 15:40:23 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12LeM5I076169 for ; Thu, 2 Feb 2012 15:40:23 -0600 X-ASG-Debug-ID: 1328218821-04cbb01fb259f0b0001-w1Z2WR Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id F8hqi6hW0JvIypqv for ; Thu, 02 Feb 2012 13:40:21 -0800 (PST) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 31D11496334E; Thu, 2 Feb 2012 15:40:21 -0600 (CST) Message-ID: <4F2B02C4.8070903@sandeen.net> Date: Thu, 02 Feb 2012 15:40:20 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20120129 Thunderbird/10.0 MIME-Version: 1.0 To: Marcos Mello CC: linux-xfs@oss.sgi.com Subject: Re: Placing the root partition on an XFS filesystem is not supported References: X-ASG-Orig-Subj: Re: Placing the root partition on an XFS filesystem is not supported In-Reply-To: X-Enigmail-Version: 1.3.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1328218821 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.41 X-Barracuda-Spam-Status: No, SCORE=0.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=SUBJECT_FUZZY_TION X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87423 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: On 1/29/12 6:46 AM, Marcos Mello wrote: > http://git.fedorahosted.org/git/?p=anaconda.git;a=commit;h=b3e19d43840f6c4015fab75411853003fcf26a63 > > Does someone knows why? I'm trying to get rid of EXT* partitions on my new > CentOS 6.2 installs but apparently it will not be possible. Was done for RHEL, AFAIK. In general there is no problem with xfs on a root partition. However, the installer may not make it easy or available for you. (I never use xfs for /boot though, I don't trust grub enough for that honestly). -Eric > Marcos > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From david@fromorbit.com Thu Feb 2 16:51:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12MpkcG078494 for ; Thu, 2 Feb 2012 16:51:47 -0600 X-ASG-Debug-ID: 1328223104-04cb6c225f457dc0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id sB6RMfA01iexCJJL for ; Thu, 02 Feb 2012 14:51:44 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EABQRK095LD+b/2dsb2JhbABDrxWBBoFyAQEFOhwjEAgDGC4UJQMhE7p7E4tEAgIJBQwHBgELAQgFAwMJBgQPAwECAYQdAQMBBB6DOQSVIpJq Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Feb 2012 09:21:43 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rt5VG-0004G3-0z; Fri, 03 Feb 2012 09:51:42 +1100 Date: Fri, 3 Feb 2012 09:51:41 +1100 From: Dave Chinner To: Nathan Scott Cc: xfs@oss.sgi.com Subject: Re: [patch] xfsprogs: add debian linux-libc-dev build dependency Message-ID: <20120202225141.GZ9090@dastard> X-ASG-Orig-Subj: Re: [patch] xfsprogs: add debian linux-libc-dev build dependency References: <1317955640.69734.1328051152460.JavaMail.root@acxmail-au2.aconex.com> <419906537.69741.1328051228836.JavaMail.root@acxmail-au2.aconex.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <419906537.69741.1328051228836.JavaMail.root@acxmail-au2.aconex.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328223104 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87430 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Feb 01, 2012 at 10:07:08AM +1100, Nathan Scott wrote: > Add a build dependency on linux-libc-dev, to ensure we build > packages with have_fiemap set to true if the headers support > it. Noticed by Dave, some package builds didn't enable this > when they should have. > > Signed-off-by: Nathan Scott Works for me. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From david@fromorbit.com Thu Feb 2 16:53:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12Mr0I7078530 for ; Thu, 2 Feb 2012 16:53:00 -0600 X-ASG-Debug-ID: 1328223177-04bdf075175416d0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id e8P2LKpWFNlzE8s7 for ; Thu, 02 Feb 2012 14:52:58 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EABQRK095LD+b/2dsb2JhbABDrxWBBoFyAQEFOhwjEAgDGC4UJQMhE7p7E4tEAgIJBQwHBgELAQgFAwMJBgQPAwECAYQdAQMBBB6CVmMElSKSag Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Feb 2012 09:22:57 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rt5WS-0004Gn-OW; Fri, 03 Feb 2012 09:52:56 +1100 Date: Fri, 3 Feb 2012 09:52:56 +1100 From: Dave Chinner To: Nathan Scott Cc: xfs@oss.sgi.com Subject: Re: [patch] xfsprogs: extend fiemap configure check Message-ID: <20120202225256.GA9090@dastard> X-ASG-Orig-Subj: Re: [patch] xfsprogs: extend fiemap configure check References: <519369070.69746.1328051417713.JavaMail.root@acxmail-au2.aconex.com> <1247398017.69749.1328051476851.JavaMail.root@acxmail-au2.aconex.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1247398017.69749.1328051476851.JavaMail.root@acxmail-au2.aconex.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328223177 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87430 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Wed, Feb 01, 2012 at 10:11:16AM +1100, Nathan Scott wrote: > Make the fiemap configure check consistent with the other > libc interface checks - perform a compile and link with a > complete set of symbols, macros and interfaces needed, as > opposed to a build with just the headers. > > Signed-off-by: Nathan Scott Definitely a good idea. Reviewed-by: Dave Chinner -- Dave Chinner david@fromorbit.com From pg_mh@V01.sabi.co.uk Thu Feb 2 16:54:20 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q12MsKMH078578 for ; Thu, 2 Feb 2012 16:54:20 -0600 X-ASG-Debug-ID: 1328223254-04bdf07517541880001-NocioJ Received: from woodbine.london.02.net (woodbine.london.02.net [87.194.255.145]) by cuda.sgi.com with ESMTP id ulZzpyTl5EA9wWs2 for ; Thu, 02 Feb 2012 14:54:16 -0800 (PST) X-Barracuda-Envelope-From: pg_mh@mh.to.sabi.co.UK X-Barracuda-Apparent-Source-IP: 87.194.255.145 Received: from ty.sabi.co.UK (87.194.99.40) by woodbine.london.02.net (8.5.140) id 4EEB647400D51A13 for xfs@oss.sgi.com; Thu, 2 Feb 2012 22:54:14 +0000 Received: from from [127.0.0.1] (helo=tree.ty.sabi.co.UK) by ty.sabi.co.UK with esmtp(Exim 4.71 #1) id 1Rt5Xd-00024s-7v for ; Thu, 02 Feb 2012 22:54:09 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Message-ID: <20267.5137.85650.499331@tree.ty.sabi.co.UK> Date: Thu, 2 Feb 2012 22:54:09 +0000 X-Face: SMJE]JPYVBO-9UR%/8d'mG.F!@.,l@c[f'[%S8'BZIcbQc3/">GrXDwb#;fTRGNmHr^JFb SAptvwWc,0+z+~p~"Gdr4H$(|N(yF(wwCM2bW0~U?HPEE^fkPGx^u[*[yV.gyB!hDOli}EF[\cW*S H&spRGFL}{`bj1TaD^l/"[ msn( /TH#THs{Hpj>)]f> Subject: Re: File system remain unresponsive until the system is rebooted. In-Reply-To: <20265.9379.139218.148520@tree.ty.sabi.co.UK> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131205014.GM9090@dastard> <4F288561.5040803@hardwarefreak.com> <20265.9379.139218.148520@tree.ty.sabi.co.UK> X-Mailer: VM 8.2.0a under 23.1.1 (x86_64-pc-linux-gnu) From: pg_xf2@xf2.for.sabi.co.UK (Peter Grandi) X-Disclaimer: This message contains only personal opinions X-Barracuda-Connect: woodbine.london.02.net[87.194.255.145] X-Barracuda-Start-Time: 1328223256 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87430 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- [ ... ] >>>>> We are using Amazon EC2 instances. >>>>> [ ... ] one of the the worst possible platforms for XFS. >>>> I don't agree with you there. If the workload works best on >>>> XFs, it doesn't matter what the underlying storage device >>>> is. e.g. if it's a fsync heavy workload, it will still >>>> perform better on XFS on EC2 than btrfs on EC2... >> There are special cases, but =ABfsync heavy=BB is a bit of bad >> example. > It's actually a really good example of where XFS will be > better than other filesystems. But this is better at being less bad. Because we are talking here about =ABfsync heavy=BB workloads on a VM, and these should not be run on a VM if performance matters. That's why I wrote about a =ABbad example=BB on which to discuss XFS for a VM. But even with =ABfsync heavy=BB workloads in general your argument is not exactly appropriate: > Why=3F Because XFS does less log IO due to aggregation of log > writes during concurrent fsyncs. But =ABfsync heavy=BB does not necessarily means =ABconcurrent fsyncs=BB= , for me it typically means logging or database apps where every 'write' is 'fsync'ed, even if there is a single thread. But let's imagine for a moment we were talking about the special case where =ABfsync heavy=BB involves a high degree of concurrency. > The more latency there is on a log write, the more aggregation > that occurs. This seems to describe hardcoding in XFS a decision to trade worse latency for better throughput, understandable as XFS was after all quite clearly aimed at high throughput (or isochronous throughput), rather than low latency (except for metadata, and that has been "fixed" with 'delaylog'). Unless you mean that if the latency is low, then aggregation does not take place, but then it is hard for me to see how that can be *predicted*. I am assuming that in the above you refer to: https://lwn.net/Articles/476267/ the XFS transaction subsystem is that most transactions are asynchronous. That is, they don't commit to disk until either a log buffer is filled (a log buffer can hold multiple transactions) or a synchronous operation forces the log buffers holding the transactions to disk. This means that XFS is doing aggregation of transactions in memory - batching them, if you like - to minimise the impact of the log IO on transaction throughput. http://docs.redhat.com/docs/en-US/Red=5FHat=5FEnterprise=5FLinux/6/html= /Performance=5FTuning=5FGuide/ch07s04s02.html The delaylog mount option also improves sustained metadata modification performance by reducing the number of changes to the log. It achieves this by aggregating individual changes in memory before writing them to the log: frequently modified metadata is written to the log periodically instead of on every modification. This option increases the memory usage of tracking dirty metadata and increases the potential lost operations when a crash occurs, but can improve metadata modification speed and scalability by an order of magnitude or more. Use of this option does not reduce data or metadata integrity when fsync, fdatasync or sync are used to ensure data and metadata is written to disk. BTW curious note in the latter: However, under fsync-heavy workloads, small log buffers can be noticeably faster than large buffers with a large stripe unit alignment. > On a platform where the IO subsystem is going to give you > unpredictable IO latencies, that's exactly what want. This then the argument that on platforms with bad latency that decision works still works well because then you might as well go for throughput. But if someone really aims to run some kind of =ABfsync heavy=BB workload on a high-latency and highly-variable latency VM, usually their aim is to *minimize* the additional latency the filesystem imposes, because =ABfsync heavy=BB workloads tend to be transactional, and persisting data without delay is part of their goal. > Sure, it was designed to optimise spinning rust performance, > but that same design is also optimal for virtual devices with > unpredictable IO latency... Ahhhh, now the =ABbad example=BB has become a worse one :-). The argument you are making here is one for crass layering violation: that the filesystem code should embed storage-layer specific optimizations within it, and then one might get lucky with other storage layers of similar profile. Tsk tsk :-). At least it is not as breathtakingly inane as putting plug/unplug block io subsystem. But even on spinning rust, and on real host, and even forgiving the layering violation, I question the aim to get better throughput at the expense of worse latency for =ABfsync heavy=BB loads, and even for the type of workloads for which this tradeoff is good. Because *my* argument is that how often 'fsync' "happens" should be a decision by the application programmer; if they want higher throughput at the cost of higher latency, they should issue it less frequently, as 'fsync' should be executed with as low a latency as possible. Your underlying argument for XFS and its handling of =ABfsync heavy=BB workloads (and it is the same argument for 'delaylog' I guess) seems to me that applications issue 'fsync' too often, and thus we can briefly hold them back to bunch them up, and people like the extra throughput more than they dislike the extra latency. Which reminds me of a discussions I had some time ago with some misguided person who argued that 'fsync' and Linux barriers only require ordering constraints, and don't imply any actual writing to persistent storage, or within any specific timeframe, where instead I was persuaded that their main purpose (no matter what POSIX says :->) is to commit to persistent storage as quickly as possible. It looks like that XFS has gone more the way of something like his position, because admittedly in practice keeping commits a bit looser does deliver better throughput (hints of O=5FPONIES here). But again, that's not what should be happening. Perhaps POSIX should have provided :-) two barrier operations, a purely ordering one, and a commit-now one. And application writers would use them at the right times. And ponies for everybody :-). >> In general file system designs are not at all independent of >> the expected storage platform, and some designs are far better >> than others for specific storage platforms, and viceversa. > Sure, but filesystems also have inherent capabilities that are > independent of the underlying storage. But the example you make is not a =ABcapability=BB, it is the hardcoded assumption that it is better to trade worse latency for better throughput, which only makes sense for workloads that don't want tight latency, or else storage layers that don't support it. > In these cases, the underlying storage really doesn't matter if > the filesystem can't do what the application needs. Allocation > parallelism, CPU parallelism, minimal concurrent fsync latency, But you seemed to be describing above that XFS good at "maximal concurrent fsync throughput" by disregarding =ABminimal concurrent fsync latency=BB (as in =ABless log IO due to aggregation of log writes during concurrent fsyncs. The more latency there is on a log write, the more aggregation=BB). > etc are all characteristics of filesystems that are independent > of the underlying storage. Ahhhh, but this is a totally different argument from embedding specific latency/throughput tradeoffs in the storage layer. This is an argument that a well designed filesystem that does have bottlenecks on any aspect of the performance envelope is a good general purpose one. Well, you can try to design one :-). XFS comes close, like JFS and OCFS2, but it does have, as you have pointed out above, workload-specific (which can turn into storage-friendly) tradeoffs. And since Red Hat's acquisition of GlusterFS I guess (or at least I hope) that XFS will be even more central to their strategy. BTW as to that, did a brief search and found this amusing article, yet another proof that reality surpasses imagination: http://bioteam.net/2010/07/playing-with-nfs-glusterfs-on-amazon-cc1-4= xlarge-ec2-instance-types/ Ah I was totally unaware of the AWS Compute Cluster service. > If you need those characteristics in your remotely hosted VMs, > then XFS is what you want regardless of how much storage > capability you buy for those VMs.... Possibly, but from also a practical viewpoint that is again a moderately bizarre argument, because workloads requiring high levels of =ABAllocation parallelism, CPU parallelism, minimal concurrent fsync latency=BB beg to be run on an Altix, or similar, not on a bunch of random EC2 shared hosts running Xen VMs. From david@fromorbit.com Thu Feb 2 19:33:00 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q131WxL4088299 for ; Thu, 2 Feb 2012 19:33:00 -0600 X-ASG-Debug-ID: 1328232776-04cbb01fb35abef0001-NocioJ Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id 1qQECYJP7HNms3zH for ; Thu, 02 Feb 2012 17:32:56 -0800 (PST) X-Barracuda-Envelope-From: david@fromorbit.com X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApMGAJc3K095LD+b/2dsb2JhbABDrAyDBoEGgXIBAQQBMgEjIwULCAMOCi4UJQMhExuHYQm4ChOLNggBBAMCDQIHBwQGAQsBCAUDAwkGBA+EJAEDAQQYAoJaYwSVIpJq Received: from ppp121-44-63-155.lns20.syd6.internode.on.net (HELO dastard) ([121.44.63.155]) by ipmail07.adl2.internode.on.net with ESMTP; 03 Feb 2012 12:02:55 +1030 Received: from dave by dastard with local (Exim 4.76) (envelope-from ) id 1Rt81G-0004Z0-0V; Fri, 03 Feb 2012 12:32:54 +1100 Date: Fri, 3 Feb 2012 12:32:53 +1100 From: Dave Chinner To: Peter Grandi Cc: Linux fs XFS Subject: Re: File system remain unresponsive until the system is rebooted. Message-ID: <20120203013253.GB9090@dastard> X-ASG-Orig-Subj: Re: File system remain unresponsive until the system is rebooted. References: <20120131013124.GE9090@dastard> <4F27AE92.9060003@hardwarefreak.com> <20120131205014.GM9090@dastard> <4F288561.5040803@hardwarefreak.com> <20265.9379.139218.148520@tree.ty.sabi.co.UK> <20267.5137.85650.499331@tree.ty.sabi.co.UK> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20267.5137.85650.499331@tree.ty.sabi.co.UK> User-Agent: Mutt/1.5.21 (2010-09-15) X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1328232776 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87439 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Thu, Feb 02, 2012 at 10:54:09PM +0000, Peter Grandi wrote: > [ ... ] > > >>>>> We are using Amazon EC2 instances. > > >>>>> [ ... ] one of the the worst possible platforms for XFS. > > >>>> I don't agree with you there. If the workload works best on > >>>> XFs, it doesn't matter what the underlying storage device > >>>> is. e.g. if it's a fsync heavy workload, it will still > >>>> perform better on XFS on EC2 than btrfs on EC2... > > >> There are special cases, but «fsync heavy» is a bit of bad > >> example. > > > It's actually a really good example of where XFS will be > > better than other filesystems. > > But this is better at being less bad. Because we are talking here > about «fsync heavy» workloads on a VM, and these should not be > run on a VM if performance matters. That's why I wrote about a > «bad example» on which to discuss XFS for a VM. Whether or not you should put a workload that does fsyncs in a VM is a completely different argument altogether. It's not a meaningful argument to make when we are talking about how filesystems deal with unpredictable storage latencies or what filesystem to use in a virtualised environment. > But even with «fsync heavy» workloads in general your argument is > not exactly appropriate: > > > Why? Because XFS does less log IO due to aggregation of log > > writes during concurrent fsyncs. > > But «fsync heavy» does not necessarily means «concurrent fsyncs», > for me it typically means logging or database apps where every > 'write' is 'fsync'ed, even if there is a single thread. Doesn't matter if there's concurrent fsyncs - XFS will aggregreate all transactions while there is one fsync or anything else that triggers log forces in progress. It's a generic solution to the "we're doing too many synchronous transactions really close together" problem. > But let's > imagine for a moment we were talking about the special case where > «fsync heavy» involves a high degree of concurrency. > > > The more latency there is on a log write, the more aggregation > > that occurs. > > This seems to describe hardcoding in XFS a decision to trade > worse latency for better throughput, Except it doesn't. XFS's mechanism is well known to -minimise- journal latency without increasing individual or maximum latencies as load increases. This then translates directly into higher sustained throughputs because less time is spent by applications waiting for IO completions because there is less IO being done. Yes, you can trade off latency for throughput - that's easy to do - but a well designed system acheives high throughput by minimising the impact unavoidable latencies. That's what the XFS journal does. And quite frankly, it does't matter what the source of the latency is or whether it is unpredictable. If you can't avoid it, you have to design to minimise the impact. > understandable as XFS was > after all quite clearly aimed at high throughput (or isochronous > throughput), rather than low latency (except for metadata, and > that has been "fixed" with 'delaylog'). I like how you say "fixed" in a way that implies you don't beleive that it is fixed... > Unless you mean that if the latency is low, then aggregation does > not take place, That's exactly what I'm saying. > but then it is hard for me to see how that can be > *predicted*. That's because it doesn't need to be predicted. We *know* if a journal write is currently in progress or not and we can wait on it to complete. It doesn't matter how long it takes to complete - if it is instantenous, then aggregation does not occur simply due to the very short wait time. If the IO takes a long time to complete, then lots of aggregation of transaction commits will occur before we submit the next IO. Smarter people than me designed this stuff - I've just learnt from what they've done and built on top of it.... > I am assuming that in the above you refer to: > > https://lwn.net/Articles/476267/ Documentation/filesystems/xfs-delayed-logging-design.txt is a better reference to use. > the XFS transaction subsystem is > that most transactions are asynchronous. That is, they don't > commit to disk until either a log buffer is filled (a log buffer > can hold multiple transactions) or a synchronous operation forces > the log buffers holding the transactions to disk. This means that > XFS is doing aggregation of transactions in memory - batching > them, if you like - to minimise the impact of the log IO on > transaction throughput. That's part of it. This describes the pre-delaylog method of aggregation, but even delaylog relies on this mechanism because checkpoints are a journalled transaction just like all transactions were pre-delaylog. The point about fsync is that it is just an asynchronous transaction as well. It is made synchronous by then pushing the log buffer to disk. But it will only do that immeidately if the previous log buffer is idle. If the previous log buffer is under IO, then it will wait to start the IO on the current log buffer, allowing further aggregation to occur. > BTW curious note in the latter: > > However, under fsync-heavy workloads, small log buffers can be > noticeably faster than large buffers with a large stripe unit > alignment. Because setting a log stripe unit (LSU) mean the size of the log IO is padded. A 32k LSU means the minimum log IO size is 32k, while an fsync transaciton is usually only a couple of hundred bytes. Without an LSU, than means a solitary fsync transaction being written to disk will be 512 bytes vs 32kB with a LSU and that means the non LSU-log will complete IO faster. Same goes for LSU=32k vs LSU=256k. > > On a platform where the IO subsystem is going to give you > > unpredictable IO latencies, that's exactly what want. > > This then the argument that on platforms with bad latency that > decision works still works well because then you might as well go > for throughput. If one fsync takes X, and you can make 10 concurrent fsyncs take X, why wouldn't you optimise to enable the latter case? It doesn't matter if X is 10us, 1ms or even 1s - having an algorithm that works independently of the magnitude of the storage latency will result in good throughput no matter the storage characteristics. That's what users want - something that just works without needing to tweak it differently to perform optimally on all their different systems... > But if someone really aims to run some kind of «fsync heavy» > workload on a high-latency and highly-variable latency VM, usually > their aim is to *minimize* the additional latency the filesystem > imposes, because «fsync heavy» workloads tend to be transactional, > and persisting data without delay is part of their goal. I still don't understand what part of "use XFS for this workload" you are saying is wrong? > > Sure, it was designed to optimise spinning rust performance, but > > that same design is also optimal for virtual devices with > > unpredictable IO latency... > > Ahhhh, now the «bad example» has become a worse one :-). > > The argument you are making here is one for crass layering > violation: that the filesystem code should embed storage-layer > specific optimizations within it, and then one might get lucky > with other storage layers of similar profile. Tsk tsk :-). At > least it is not as breathtakingly inane as putting plug/unplug > block io subsystem. Filesystems are nothing but a dense concentration algorithms that are optimal for as wide a range of known storage behaviours as possible. > XFS comes close, like JFS and OCFS2, but it does have, as you have > pointed out above, workload-specific (which can turn into > storage-friendly) tradeoffs. And since Red Hat's acquisition of > GlusterFS I guess (or at least I hope) that XFS will be even more > central to their strategy. http://docs.redhat.com/docs/en-US/Red_Hat_Storage_Software_Appliance/3.2/html-single/User_Guide/index.html#sect-User_Guide-gssa_prepare-chec_min_req "File System Requirements Red Hat recommends XFS when formatting the disk sub-system. ..." -- Dave Chinner david@fromorbit.com From mitsuo.hayasaka.hu@hitachi.com Thu Feb 2 22:06:05 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13464pT093824 for ; Thu, 2 Feb 2012 22:06:05 -0600 X-ASG-Debug-ID: 1328241961-04cbb01fb25b6690001-NocioJ Received: from mail7.hitachi.co.jp (mail7.hitachi.co.jp [133.145.228.42]) by cuda.sgi.com with ESMTP id PEeQk88jWPeGb2BH; Thu, 02 Feb 2012 20:06:02 -0800 (PST) X-Barracuda-Envelope-From: mitsuo.hayasaka.hu@hitachi.com X-Barracuda-Apparent-Source-IP: 133.145.228.42 Received: from mlsv5.hitachi.co.jp (unknown [133.144.234.166]) by mail7.hitachi.co.jp (Postfix) with ESMTP id 2ACFE37AC5; Fri, 3 Feb 2012 13:06:01 +0900 (JST) Received: from mfilter06.hitachi.co.jp by mlsv5.hitachi.co.jp (8.13.1/8.13.1) id q13461kx008035; Fri, 3 Feb 2012 13:06:01 +0900 Received: from vshuts4.hitachi.co.jp (vshuts4.hitachi.co.jp [10.201.6.80]) by mfilter06.hitachi.co.jp (Switch-3.3.4/Switch-3.3.4) with ESMTP id q1345xAL021834; Fri, 3 Feb 2012 13:06:00 +0900 X-AuditID: b753bd60-97991ba000007b1b-5e-4f2b5d2715b5 Received: from hsdlmain.sdl.hitachi.co.jp (unknown [133.144.14.194]) by vshuts4.hitachi.co.jp (Symantec Mail Security) with ESMTP id C483F2043B1; Fri, 3 Feb 2012 13:05:59 +0900 (JST) Received: from hsdlvgate2.sdl.hitachi.co.jp by hsdlmain.sdl.hitachi.co.jp (8.13.1/3.7W11021512) id q1345x9h008521; Fri, 3 Feb 2012 13:05:59 +0900 X-AuditID: b753bd60-97991ba000007b1b-5e-4f2b5d2715b5 Received: from sdl99w.sdl.hitachi.co.jp (sdl99w.sdl.hitachi.co.jp [133.144.14.250]) by hsdlvgate2.sdl.hitachi.co.jp (Symantec Mail Security) with ESMTP id 5CF73236561; Fri, 3 Feb 2012 13:03:05 +0900 (JST) Received: from [127.0.0.1] (cb10033149.sdl.hitachi.co.jp [10.232.10.18]) by sdl99w.sdl.hitachi.co.jp (Postfix) with ESMTP id 5CD3812550C; Fri, 3 Feb 2012 13:05:57 +0900 (JST) Message-ID: <4F2B5D25.1040601@hitachi.com> Date: Fri, 03 Feb 2012 13:05:57 +0900 From: HAYASAKA Mitsuo User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Christoph Hellwig Cc: Ben Myers , Alex Elder , Christoph Hellwig , Alex Elder , linux-kernel@vger.kernel.org, xfs@oss.sgi.com, xfs-masters@oss.sgi.com Subject: Re: [PATCH 3/3] xfs: cleanup quota check on disk blocks and inodes reservations References: <20120123034513.3339.97432.stgit@ltc219.sdl.hitachi.co.jp> <20120123034543.3339.56848.stgit@ltc219.sdl.hitachi.co.jp> <20120202160726.GA10568@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 3/3] xfs: cleanup quota check on disk blocks and inodes reservations In-Reply-To: <20120202160726.GA10568@infradead.org> Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== X-Barracuda-Connect: mail7.hitachi.co.jp[133.145.228.42] X-Barracuda-Start-Time: 1328241962 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -0.00 X-Barracuda-Spam-Status: No, SCORE=-0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=ISO2022JP_CHARSET X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87450 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 ISO2022JP_CHARSET ISO-2022-JP message Hi Christoph Thank you for your comments. (2012/02/03 1:07), Christoph Hellwig wrote: > On Mon, Jan 23, 2012 at 12:45:43PM +0900, Mitsuo Hayasaka wrote: >> This patch is a cleanup of quota check on disk blocks and inodes >> reservations. >> >> Signed-off-by: Mitsuo Hayasaka >> Cc: Ben Myers >> Cc: Alex Elder >> Cc: Christoph Hellwig >> --- >> >> fs/xfs/xfs_trans_dquot.c | 17 +++++++---------- >> 1 files changed, 7 insertions(+), 10 deletions(-) >> >> diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c >> index c4ba366..5e6cd1c 100644 >> --- a/fs/xfs/xfs_trans_dquot.c >> +++ b/fs/xfs/xfs_trans_dquot.c >> @@ -605,7 +605,7 @@ xfs_trans_dqresv( >> time_t timer; >> xfs_qwarncnt_t warns; >> xfs_qwarncnt_t warnlimit; >> - xfs_qcnt_t count; >> + xfs_qcnt_t tcount; > > Can you call this variable total_count to make it a bit more obvious? Sure. > >> + tcount = *resbcountp + nblks; >> + if (hardlimit > 0ULL && tcount > hardlimit) { > > Given that xfs_qcnt_t is unsigned what about transforming this into the > more readable: > > if (hardlimit && total_count > hardlimit) > > and similar for the others? > OK, I'm going to change them and send the revised patch series. Thanks. From b.candler@pobox.com Fri Feb 3 05:54:39 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_54,J_CHICKENPOX_56,J_CHICKENPOX_64,T_DKIM_INVALID autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13BsdJG125802 for ; Fri, 3 Feb 2012 05:54:39 -0600 X-ASG-Debug-ID: 1328270077-04cbb01fb55da330001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id OemHo9j1LQ6uomYA for ; Fri, 03 Feb 2012 03:54:37 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 9CB6F5083; Fri, 3 Feb 2012 06:54:36 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=sasl; bh=BOwBJzpf5iwxiDNPdOWt9lf/Iyc=; b=ebOUmjD ndaXY5dHQDH0htMDZp7mB9PczG6SQeHqMQOplPRWcocarV43W88JOFMCOzIL9bOh GqQHwCzOf5BDsvvuNzdGduKuGhS/MyH3r5wr3pgpaK5MgaXlNAy3e4ksySMFxrdK JoCtymg9zHviIMUSz087tGinUOlnYt13E9O8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to:cc :subject:message-id:references:mime-version:content-type :in-reply-to; q=dns; s=sasl; b=MgeOPI08kNZzeO1dOkWZ1jA+BCRAkOhCd mFhu3ft5iDIslEdpmTnCRgPLVOmbA9YnF2QSGC7ZgHngY9UXehTe3b83v2obI/Qb C/x9oHNv+RH/TQue20lry7pPN1GbowfjG2LYt28IXR5h5H8S3VciYd7vdD1xQrHh KCucxYFF7M= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 935F65082; Fri, 3 Feb 2012 06:54:36 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [46.208.162.148]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 1911A5081; Fri, 3 Feb 2012 06:54:36 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYTFQY-0000NM-CI; Fri, 03 Feb 2012 11:54:34 +0000 Date: Fri, 3 Feb 2012 11:54:34 +0000 From: Brian Candler To: Christoph Hellwig Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120203115434.GA649@nsrc.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131145205.GA6607@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131145205.GA6607@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: D807AD02-4E5D-11E1-B2D8-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328270077 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87480 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature uOn Tue, Jan 31, 2012 at 09:52:05AM -0500, Christoph Hellwig wrote: > Try playing with the following tweaks to get larger I/O to the disk: > > a) make sure you use the noop or deadline elevators > b) increase /sys/block/sdX/queue/max_sectors_kb from its low default > c) dramatically increase /sys/devices/virtual/bdi/:/read_ahead_kb The default settings on this system are: # cat /sys/block/sdb/queue/scheduler noop [deadline] cfq (I think the one in brackets is the active one) # cat /sys/block/sdb/queue/max_sectors_kb 512 # cat /sys/devices/virtual/bdi/8:16/read_ahead_kb 128 I did a series of tests where I increased either or both of those to 1024, but it didn't make any difference to read throughput, which sat stubbornly at 25MB/sec. However I could see the difference in btrace and in tps figures, showing a smaller number of larger transfers taking place. It was clearly doing the right thing: seek and read a large block of data, seek and read the next large block of data, and so on. Writing the files should (to my mind) require the same amount of seeking and disk passing under the head, but it runs at 75MB/sec. So I realised: when you are writing lots of files with write-behind caching, the drive has a lot of opportunity for reordering those writes to minimise the seek and rotational latency. But when reading in a single thread, you are doing sequential seek one - read one - seek two - read two - ... It turns out the -c (concurrency) option to bonnie++ is ignored for the file creation and reading test. So my next steps were: * run 4 instances of bonnie++ concurrently on the same filesystem. This did make some improvement. For the sequential file reading part, it got me to 30MB/sec with bonnie++ reading 32k chunks, and 40MB/sec with it reading 1024k chunks. It fell back to 33MB/sec in the random file reading part. * write a script to do just a random read test, with varying levels of concurrency. The script is given below: it forks a varying number of processes, each of which runs "dd" sequentially on a subset of the files. First running with default params (max_sectors_kb=512, read_ahead_kb=128) #p files/sec dd_args 1 39.87 bs=1024k iflag=direct => 25.9 MB/sec 1 42.51 bs=1024k 2 43.88 bs=1024k iflag=direct 2 29.53 bs=1024k 5 57.40 bs=1024k iflag=direct 5 43.48 bs=1024k 10 68.68 bs=1024k iflag=direct 10 48.02 bs=1024k 20 75.51 bs=1024k iflag=direct 20 53.08 bs=1024k 50 79.37 bs=1024k iflag=direct => 51.6 MB/sec 50 51.30 bs=1024k The files have an average size of 0.65MB, so I've converted some files/sec into MB/sec. What I found surprising was that the performance is lower with iflag=direct for a single reader, but much higher with iflag=direct for concurrent readers. So I tried again with max_sectors_kb=1024, read_ahead_kb=1024 #p files/sec dd_args 1 39.95 bs=1024k iflag=direct 1 42.21 bs=1024k 2 43.14 bs=1024k iflag=direct 2 47.93 bs=1024k 5 56.68 bs=1024k iflag=direct 5 61.95 bs=1024k 10 68.35 bs=1024k iflag=direct 10 75.50 bs=1024k => 49.1 MB/sec 20 75.74 bs=1024k iflag=direct 20 83.36 bs=1024k => 54.2 MB/sec 50 79.45 bs=1024k iflag=direct 50 86.58 bs=1024k => 56.3 MB/sec Now it works better without iflag=direct. With 20+ readers the throughput is approaching decent, albeit still a way from the 75MB/sec I achieve when writing. Next with max_sectors_kb=128, read_ahead_kb=1024 (just to see if smaller SATA transfers work better than large ones) #p files/sec dd_args 1 39.74 bs=1024k iflag=direct 1 42.49 bs=1024k 2 43.92 bs=1024k iflag=direct 2 48.22 bs=1024k 5 56.39 bs=1024k iflag=direct 5 62.61 bs=1024k 10 61.50 bs=1024k iflag=direct 10 68.67 bs=1024k 20 68.21 bs=1024k iflag=direct 20 75.28 bs=1024k => 48.9 MB/s 50 68.36 bs=1024k iflag=direct 50 75.32 bs=1024k => 49.0 MB/s Maybe tiny improvement at low concurrency, but worse at high concurrency (presumably a larger number of queued I/Os is hitting a queue depth limit) Finally with max_sectors_kb=1024, read_ahead_kb=1024, and the noop scheduler: root@storage1:~# echo noop >/sys/block/sdc/queue/scheduler root@storage1:~# cat /sys/block/sdc/queue/scheduler [noop] deadline cfq #p files/sec dd_args 1 40.19 bs=1024k iflag=direct 1 41.98 bs=1024k 2 43.63 bs=1024k iflag=direct 2 48.24 bs=1024k 5 56.97 bs=1024k iflag=direct 5 62.86 bs=1024k 10 68.68 bs=1024k iflag=direct 10 76.81 bs=1024k 20 76.03 bs=1024k iflag=direct 20 85.17 bs=1024k => 55.4 MB/s 50 76.58 bs=1024k iflag=direct 50 83.66 bs=1024k This may be slightly better than the deadline scheduler until we get to 50 concurrent readers. FWIW, this is the controller: [ 12.855639] mpt2sas1: 64 BIT PCI BUS DMA ADDRESSING SUPPORTED, total mem (8183856 kB) [ 12.855801] mpt2sas1: PCI-MSI-X enabled: IRQ 68 [ 12.855804] mpt2sas1: iomem(0x00000000fb8c0000), mapped(0xffffc90011788000), size(16384) [ 12.855806] mpt2sas1: ioport(0x0000000000008000), size(256) [ 13.142189] mpt2sas1: sending message unit reset !! [ 13.150164] mpt2sas1: message unit reset: SUCCESS [ 13.323195] mpt2sas1: Allocated physical memory: size(16611 kB) [ 13.323200] mpt2sas1: Current Controller Queue Depth(7386), Max Controller Queue Depth(7647) [ 13.323203] mpt2sas1: Scatter Gather Elements per IO(128) [ 13.553727] mpt2sas1: LSISAS2116: FWVersion(05.00.13.00), ChipRevision(0x02), BiosVersion(07.11.00.00) [ 13.553737] mpt2sas1: Protocol=(Initiator,Target), Capabilities=(TLR,EEDP,Snapshot Buffer,Diag Trace Buffer,Task Set Full,NCQ) [ 13.553814] mpt2sas1: sending port enable !! [ 13.555001] mpt2sas1: port enable: SUCCESS [ 13.559519] mpt2sas1: host_add: handle(0x0001), sas_addr(0x500062b2000b4c00), phys(16) and the drives are Hitachi Deskstar 5K3000 HDS5C3030ALA630: [ 13.567932] scsi 5:0:1:0: Direct-Access ATA Hitachi HDS5C303 A580 PQ: 0 ANSI: 5 [ 13.567946] scsi 5:0:1:0: SATA: handle(0x0012), sas_addr(0x4433221101000000), phy(1), device_name(0xcca2500032cd28c0) [ 13.567953] scsi 5:0:1:0: SATA: enclosure_logical_id(0x500062b2000b4c00), slot(1) [ 13.568041] scsi 5:0:1:0: atapi(n), ncq(y), asyn_notify(n), smart(y), fua(y), sw_preserve(y) [ 13.568049] scsi 5:0:1:0: qdepth(32), tagged(1), simple(0), ordered(0), scsi_level(6), cmd_que(1) [ 13.568185] sd 5:0:1:0: Attached scsi generic sg2 type 0 [ 13.569753] sd 5:0:1:0: [sdc] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB) ... [ 13.797275] sd 5:0:1:0: [sdc] Write Protect is off [ 13.797284] sd 5:0:1:0: [sdc] Mode Sense: 73 00 00 08 [ 13.800400] sd 5:0:1:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA They are "CoolSpin" drives of unspecified RPM, i.e. definitely not high performance in absolute terms. But if I can get the filesystem read throughput to approach the write throughput, I'll be extremely happy. Regards, Brian. ------ 8< --------------------------------------------------------------- #!/usr/bin/ruby -w CORPUS = "/data/sdc/Bonnie.26384/*/*" module Perftest def self.run(n_files, n_procs=1, dd_args="") files = Dir[CORPUS].sort_by { rand }[0, n_files] chunks = files.each_slice(n_files/n_procs).to_a[0, n_procs] n_files = chunks.map { |chunk| chunk.size }.inject(:+) t1 = Time.now @pids = chunks.map { |chunk| fork { run_single(chunk, dd_args); exit! } } @pids.delete_if { |pid| Process.waitpid(pid) } t2 = Time.now printf "%3d %10.2f %s\n", n_procs, n_files/(t2-t1), dd_args end def self.run_single(files, dd_args) files.each do |f| system("dd if='#{f}' of=/dev/null #{dd_args} 2>/dev/null") end end def self.kill_all(sig="TERM") @pids.each { |pid| Process.kill(sig, pid) rescue nil } end end at_exit { Perftest.kill_all } puts " #p files/sec dd_args" [1,2,5,10,20,50].each do |nprocs| Perftest.run(4000, nprocs, "bs=1024k iflag=direct") Perftest.run(4000, nprocs, "bs=1024k") end From sgi-linux-xfs@plane.gmane.org Fri Feb 3 08:40:08 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_TO_NO_BRKTS_FREEMAIL,UNPARSEABLE_RELAY autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13Ee7tR136366 for ; Fri, 3 Feb 2012 08:40:08 -0600 X-ASG-Debug-ID: 1328280004-04cb6c225f495350001-w1Z2WR Received: from plane.gmane.org (plane.gmane.org [80.91.229.3]) by cuda.sgi.com with ESMTP id g97GYmnBk0eswsAV (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Feb 2012 06:40:05 -0800 (PST) X-Barracuda-Envelope-From: sgi-linux-xfs@m.gmane.org X-Barracuda-Apparent-Source-IP: 80.91.229.3 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1RtKJ1-0001rM-Eb for linux-xfs@oss.sgi.com; Fri, 03 Feb 2012 15:40:04 +0100 Received: from bd206cc2.virtua.com.br ([bd206cc2.virtua.com.br]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 03 Feb 2012 15:40:03 +0100 Received: from marcosfrm by bd206cc2.virtua.com.br with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 03 Feb 2012 15:40:03 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Marcos Mello Subject: Re: Placing the root partition on an XFS filesystem is not supported Date: Fri, 3 Feb 2012 14:39:55 +0000 (UTC) X-ASG-Orig-Subj: Re: Placing the root partition on an XFS filesystem is not supported Lines: 18 Message-ID: References: <4F2B02C4.8070903@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: sea.gmane.org User-Agent: Loom/3.14 (http://gmane.org/) X-Loom-IP: 189.32.108.194 (Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0) X-Barracuda-Connect: plane.gmane.org[80.91.229.3] X-Barracuda-Start-Time: 1328280005 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.41 X-Barracuda-Spam-Status: No, SCORE=0.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=SUBJECT_FUZZY_TION, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87490 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines Eric Sandeen sandeen.net> writes: > > In general there is no problem with xfs on a root partition. However, the installer > may not make it easy or available for you. > > (I never use xfs for /boot though, I don't trust grub enough for that honestly). > > -Eric Same thing on Fedora 16. Let's hope some day Anaconda will change that. About GRUB with a XFS /boot the problem was with GRUB Lagacy, wasn't it? Or GRUB2 is still buggy? Marcos From BATV+d1a519dbf03a94af3845+3085+infradead.org+hch@bombadil.srs.infradead.org Fri Feb 3 09:04:46 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13F4jPr137608 for ; Fri, 3 Feb 2012 09:04:46 -0600 X-ASG-Debug-ID: 1328281483-04bdf0751858f710001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id 0qci0FySKjz9029B (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Feb 2012 07:04:44 -0800 (PST) X-Barracuda-Envelope-From: BATV+d1a519dbf03a94af3845+3085+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RtKgt-0007Me-51; Fri, 03 Feb 2012 15:04:43 +0000 Date: Fri, 3 Feb 2012 10:04:43 -0500 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss , Christoph Hellwig Subject: Re: [PATCH] xfs_io: deprecate the "-F" foreign flag Message-ID: <20120203150443.GA28301@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_io: deprecate the "-F" foreign flag References: <4F2AC948.1050909@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F2AC948.1050909@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328281484 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87492 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Thu, Feb 02, 2012 at 11:35:04AM -0600, Eric Sandeen wrote: > There's no real reason to force the user to specify "-F" for non-xfs > files, when we can just test for that after it's opened. > > * Remove the -F flag from usage() & man pages, but still accept it. > * Set IO_FOREIGN when we open the file, if the fd tests as non-xfs. Looks good. We probably should kill the IO_FOREIGN eventually too, but let's do the user facing part first. Reviewed-by: Christoph Hellwig From bpm@sgi.com Fri Feb 3 09:19:57 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13FJvMT138221 for ; Fri, 3 Feb 2012 09:19:57 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0D8D7304043; Fri, 3 Feb 2012 07:19:53 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id A193A426DA7; Fri, 3 Feb 2012 09:19:58 -0600 (CST) Date: Fri, 3 Feb 2012 09:19:58 -0600 From: Ben Myers To: Christoph Hellwig Cc: Chandra Seetharaman , xfs@oss.sgi.com Subject: Re: [RFC PATCH 1/4] Define a new function xfs_this_quota_on() Message-ID: <20120203151958.GH13095@sgi.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173125.31546.2342.sendpatchset@chandra-lucid.austin.ibm.com> <20120124174712.GD9853@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120124174712.GD9853@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) On Tue, Jan 24, 2012 at 12:47:12PM -0500, Christoph Hellwig wrote: > On Mon, Jan 23, 2012 at 11:31:25AM -0600, Chandra Seetharaman wrote: > > Create a new function xfs_this_quota_on() that takes a xfs_mount > > data srtucture and a disk quota type and returns true if the specified > > type of quota is ON in the xfs_mount data structure. > > > > Signed-off-by: Chandra Seetharaman > > Looks good except for a tiny style nitpick. > > Reviewed-by: Christoph Hellwig > > > + switch(type) { > > This should have a whitespace after the opening brace. I've added the space. This patch looks good. Reviewed-by: Ben Myers From sandeen@redhat.com Fri Feb 3 10:10:47 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13GAkVq140299 for ; Fri, 3 Feb 2012 10:10:47 -0600 X-ASG-Debug-ID: 1328285445-04cb6c226149abb0001-NocioJ Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id zGZbP8N92wymCmyD for ; Fri, 03 Feb 2012 08:10:45 -0800 (PST) X-Barracuda-Envelope-From: sandeen@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q13GAfA1002105 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 3 Feb 2012 11:10:41 -0500 Received: from liberator.sandeen.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q13GAeYW014454 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 3 Feb 2012 11:10:41 -0500 Message-ID: <4F2C0700.2030306@redhat.com> Date: Fri, 03 Feb 2012 10:10:40 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20120129 Thunderbird/10.0 MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss Subject: Re: [PATCH] xfs_io: deprecate the "-F" foreign flag References: <4F2AC948.1050909@redhat.com> <20120203150443.GA28301@infradead.org> X-ASG-Orig-Subj: Re: [PATCH] xfs_io: deprecate the "-F" foreign flag In-Reply-To: <20120203150443.GA28301@infradead.org> X-Enigmail-Version: 1.3.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1328285445 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87496 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 2/3/12 9:04 AM, Christoph Hellwig wrote: > On Thu, Feb 02, 2012 at 11:35:04AM -0600, Eric Sandeen wrote: >> There's no real reason to force the user to specify "-F" for non-xfs >> files, when we can just test for that after it's opened. >> >> * Remove the -F flag from usage() & man pages, but still accept it. >> * Set IO_FOREIGN when we open the file, if the fd tests as non-xfs. > > Looks good. We probably should kill the IO_FOREIGN eventually too, but > let's do the user facing part first. How would you want to handle non-xfs filesystems in the xfs-specific commands? Do the fd test each time? > > Reviewed-by: Christoph Hellwig Thanks, I'll merge it. From bpm@sgi.com Fri Feb 3 10:21:32 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13GLWtZ141092 for ; Fri, 3 Feb 2012 10:21:32 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9F0AF304051; Fri, 3 Feb 2012 08:21:29 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 4745B426DA7; Fri, 3 Feb 2012 10:21:34 -0600 (CST) Date: Fri, 3 Feb 2012 10:21:34 -0600 From: Ben Myers To: Chandra Seetharaman Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [RFC PATCH 2/4] Define a new function xfs_inode_dquot() Message-ID: <20120203162134.GI13095@sgi.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173130.31546.80744.sendpatchset@chandra-lucid.austin.ibm.com> <20120124174850.GE9853@infradead.org> <1327434096.2213.18.camel@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1327434096.2213.18.camel@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.18 (2008-05-17) Hey Chandra, On Tue, Jan 24, 2012 at 01:41:36PM -0600, Chandra Seetharaman wrote: > On Tue, 2012-01-24 at 12:48 -0500, Christoph Hellwig wrote: > > On Mon, Jan 23, 2012 at 11:31:30AM -0600, Chandra Seetharaman wrote: > > > Define a new function xfs_inode_dquot() that takes a inode pointer > > > and a disk quota type and returns the quota pointer for the specified > > > quota type. > > > > > > This simplifies the xfs_qm_dqget() error path significantly. > > > > Looks good, > > > > Reviewed-by: Christoph Hellwig > > > > > +static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) > > > +{ > > > + type &= XFS_DQ_ALLTYPES; > > > + switch(type) { > > > > Same style nitpick as for the last patch. > > > > Btw, instead of masking out XFS_DQ_ALLTYPES first this would be more > > readable as: > > > > switch (type & XFS_DQ_ALLTYPES) { > > > > (that also applies to the previous patch). > > > > Will fix both of these in the next version. I'll fix them up. No need to post again. I also twiddled the order of USER/GROUP/PROJ in xfs_inode_dquot to match xfs_this_quota_on. Looks good. Reviewed-by: Ben Myers From bpm@sgi.com Fri Feb 3 11:02:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13H23MI145398 for ; Fri, 3 Feb 2012 11:02:03 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6BF7230406A; Fri, 3 Feb 2012 09:02:00 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id 2F48B426DA7; Fri, 3 Feb 2012 11:02:05 -0600 (CST) Date: Fri, 3 Feb 2012 11:02:05 -0600 From: Ben Myers To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [RFC PATCH 3/4] Change xfs_sb_from_disk() interface to take a mount pointer Message-ID: <20120203170205.GJ13095@sgi.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173137.31546.33777.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173137.31546.33777.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.18 (2008-05-17) On Mon, Jan 23, 2012 at 11:31:37AM -0600, Chandra Seetharaman wrote: > Change xfs_sb_from_disk() interface to take a mount pointer > instead of a superblock pointer. > > This is to print mount point specific error messages in future > fixes. > > Signed-off-by: Chandra Seetharaman Looking good! Reviewed-by: Ben Myers From bpm@sgi.com Fri Feb 3 11:16:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13HGqRf147519 for ; Fri, 3 Feb 2012 11:16:53 -0600 Received: from whiskey.americas.sgi.com (whiskey.americas.sgi.com [128.162.233.19]) by relay3.corp.sgi.com (Postfix) with ESMTP id 6D9B7AC003; Fri, 3 Feb 2012 09:16:49 -0800 (PST) Received: by whiskey.americas.sgi.com (Postfix, from userid 4600) id E053B426DA7; Fri, 3 Feb 2012 11:16:53 -0600 (CST) Date: Fri, 3 Feb 2012 11:16:53 -0600 From: Ben Myers To: Chandra Seetharaman Cc: xfs@oss.sgi.com Subject: Re: [RFC PATCH 4/4] Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage Message-ID: <20120203171653.GK13095@sgi.com> References: <20120123173118.31546.3353.sendpatchset@chandra-lucid.austin.ibm.com> <20120123173143.31546.29558.sendpatchset@chandra-lucid.austin.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120123173143.31546.29558.sendpatchset@chandra-lucid.austin.ibm.com> User-Agent: Mutt/1.5.18 (2008-05-17) On Mon, Jan 23, 2012 at 11:31:43AM -0600, Chandra Seetharaman wrote: > Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage > of quota macros. > > Signed-off-by: Chandra Seetharaman Looks good. Reviewed-by: Ben Myers From tinguely@sgi.com Fri Feb 3 11:41:11 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13HfBN0149550 for ; Fri, 3 Feb 2012 11:41:11 -0600 Received: from [128.162.232.133] (eagdhcp-232-133.americas.sgi.com [128.162.232.133]) by relay1.corp.sgi.com (Postfix) with ESMTP id 249458F8039; Fri, 3 Feb 2012 09:41:07 -0800 (PST) Message-ID: <4F2C1C37.60001@sgi.com> Date: Fri, 03 Feb 2012 11:41:11 -0600 From: Mark Tinguely User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.24) Gecko/20111206 Thunderbird/3.1.16 MIME-Version: 1.0 To: Eric Sandeen CC: James Lawrie , xfs-oss Subject: Re: [PATCH V2] xfsprogs: check for size parsing errors in xfs_quota References: <4F1D9989.8060808@redhat.com> <20120124175612.GH9853@infradead.org> <4F22FA5B.4030500@sandeen.net> In-Reply-To: <4F22FA5B.4030500@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 01/27/12 13:26, Eric Sandeen wrote: > Doing something like > > # xfs_quota -x -c 'limit -u bhard=1.2g ... > > will cause cvtnum to fail and return a value of -1LL (because it > cannot parse the decimal), but the quota caller doesn't check > for this error value, casts it to U64, shifts right, and we end > up with an answer of 16 petabytes rather than erroring out. > Fix this. > > Reported-by: James Lawrie > Signed-off-by: Eric Sandeen > --- Looks and works great. Reviewed-by: Mark Tinguely From follimay@terra.com Fri Feb 3 11:43:29 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.5 required=5.0 tests=BAYES_50,FREEMAIL_FROM, FSL_HELO_BARE_IP_2,URIBL_DBL_SPAM autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13HhTlR149666 for ; Fri, 3 Feb 2012 11:43:29 -0600 X-ASG-Debug-ID: 1328291005-04cb6c22614a2d50001-NocioJ Received: from if00-mail-fb02-mia.mta.terra.com (if00-mail-fb02-mia.mta.terra.com [208.84.243.136]) by cuda.sgi.com with ESMTP id 5TBIHHJrc9veCCVr for ; Fri, 03 Feb 2012 09:43:25 -0800 (PST) X-Barracuda-Envelope-From: follimay@terra.com X-Barracuda-Apparent-Source-IP: 208.84.243.136 Received: from 1p8.tpn.terra.com (1p8.tpn.terra.com [10.235.200.37]) by mail-fb02-mia.tpn.terra.com (Postfix) with ESMTP id 61B75280133C8 for ; Fri, 3 Feb 2012 17:43:25 +0000 (UTC) X-Terra-Karma: -2% X-Terra-Hash: b3cdfa0b790bed1d0906384a49760d8f Received-SPF: pass (1p8.tpn.terra.com: domain of terra.com designates 208.84.242.62 as permitted sender) client-ip=208.84.242.62; envelope-from=follimay@terra.com; helo=192.168.1.10; Received: from 192.168.1.10 (unknown [180.190.134.204]) (authenticated user follimay@terra.com) by 1p8.tpn.terra.com (Postfix) with ESMTPA id 02BC9A000029B for ; Fri, 3 Feb 2012 17:43:22 +0000 (UTC) Date: Fri, 3 Feb 2012 17:43:20 +0000 To: name From: Reply-To: Subject: Groundbreaking Autopilot Income Revealed! (You've Gotta See This)... Message-ID: <539bc7c73bfd132d14ceebe5554422f0@192.168.1.10> X-ASG-Orig-Subj: Groundbreaking Autopilot Income Revealed! (You've Gotta See This)... X-Priority: 3 X-Mailer: PHPMailer [version 1.72] MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="iso-8859-1" X-CLX-Rate-Response: fi=10.235.200.248:2001; rg=B; GT=0; fs=1011; PS=xfs@oss.sgi.com:0; ns=0; id=a133GLF8b1Lg0VH-131743NF; rv=6463/208.84.242.248:14051; ts=GYcFW; fl=I; ip=180.190.134.204; he=JDa5SbeTwlN; ho=IRTe/5UrmWG; hd=MiyMN+lL6Vc; hf=Leefn8FFZS/; hF=Leefn8FFZS/; hj=Dew1Pbdh9o9; hr=BFhjH927n/M; ZM=Bu926aE4fpq; ZB=OwVompkXPLN; ZB=G3UfPD6kk5v; ZB=PuVgLef4yTQ; ZB=P3Wn+3JJWnG; ZB=DFUEFpLz0WS; ZU=OiqF3SSFNvb; Zu=OiSqbg9G94f; X-CLX-ID: a133GLF8b1Lg0VH-131743NF X-Barracuda-Connect: if00-mail-fb02-mia.mta.terra.com[208.84.243.136] X-Barracuda-Start-Time: 1328291005 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87501 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name Hello, ... 20,076,087 in a month? There's an old saying... ... Seeing is Believing ... If that's the case then you've GOT to see THIS... Click Here to See It FAST! http://fabulousmoney.co.cc/rpa2.php?e=xfs@oss.sgi.com I thought I'd seen it all... but this takes the cake! http://fabulousmoney.co.cc/rpa2.php?e=xfs@oss.sgi.com To your Success, support Freemasstraffic LLC USA Removal link: You have received this message because you have either subscribed to our mailing list or purchased one of our products. If this is sent in error We apologize. Please reply remove me to unsubcribe. From bpm@oss.sgi.com Fri Feb 3 11:50:36 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13HoakA150425 for ; Fri, 3 Feb 2012 11:50:36 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q13HoWtZ150392; Fri, 3 Feb 2012 11:50:32 -0600 Date: Fri, 3 Feb 2012 11:50:32 -0600 Message-Id: <201202031750.q13HoWtZ150392@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-11435-gb995730 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 4505360376637832f79f84f352588b0a045ad113 X-Git-Newrev: b9957308452afcf58e656db834f44df10d7b1662 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated b995730 xfs: kill the unused XFS_BB_FSB_OFFSET macro 021000e xfs: show uuid when mount fails due to duplicate uuid from 4505360376637832f79f84f352588b0a045ad113 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b9957308452afcf58e656db834f44df10d7b1662 Author: Amit Sahrawat Date: Mon Jan 16 12:24:36 2012 +0000 xfs: kill the unused XFS_BB_FSB_OFFSET macro Removing the macro, as this is no more needed in the code. Tried to find the reference when it was last used - but the usage for this seemed to have been dropped long time ago. Signed-off-by: Amit Sahrawat Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 021000e59c0db2d3a8113e906bde3183c33fa84b Author: Mitsuo Hayasaka Date: Fri Jan 13 05:58:39 2012 +0000 xfs: show uuid when mount fails due to duplicate uuid When a system tries to mount a filesystem (FS) using UUID, the xfs returns -EINVAL and shows a message if a FS with the same UUID has been already mounted. It is useful to output the duplicate UUID with it. Signed-off-by: Mitsuo Hayasaka Reviewed-by: Christoph Hellwig Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_sb.h | 1 - 2 files changed, 1 insertions(+), 2 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Fri Feb 3 11:55:33 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13HtXGB150757 for ; Fri, 3 Feb 2012 11:55:33 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q13HtVkW150722; Fri, 3 Feb 2012 11:55:31 -0600 Date: Fri, 3 Feb 2012 11:55:31 -0600 Message-Id: <201202031755.q13HtVkW150722@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. v3.2-rc1-11435-gb995730 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: 4505360376637832f79f84f352588b0a045ad113 X-Git-Newrev: b9957308452afcf58e656db834f44df10d7b1662 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated b995730 xfs: kill the unused XFS_BB_FSB_OFFSET macro 021000e xfs: show uuid when mount fails due to duplicate uuid from 4505360376637832f79f84f352588b0a045ad113 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b9957308452afcf58e656db834f44df10d7b1662 Author: Amit Sahrawat Date: Mon Jan 16 12:24:36 2012 +0000 xfs: kill the unused XFS_BB_FSB_OFFSET macro Removing the macro, as this is no more needed in the code. Tried to find the reference when it was last used - but the usage for this seemed to have been dropped long time ago. Signed-off-by: Amit Sahrawat Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 021000e59c0db2d3a8113e906bde3183c33fa84b Author: Mitsuo Hayasaka Date: Fri Jan 13 05:58:39 2012 +0000 xfs: show uuid when mount fails due to duplicate uuid When a system tries to mount a filesystem (FS) using UUID, the xfs returns -EINVAL and shows a message if a FS with the same UUID has been already mounted. It is useful to output the duplicate UUID with it. Signed-off-by: Mitsuo Hayasaka Reviewed-by: Christoph Hellwig Cc: Ben Myers Cc: Alex Elder Cc: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_sb.h | 1 - 2 files changed, 1 insertions(+), 2 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Fri Feb 3 11:59:56 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13HxuIB151083 for ; Fri, 3 Feb 2012 11:59:56 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q13HxsnX151039; Fri, 3 Feb 2012 11:59:54 -0600 Date: Fri, 3 Feb 2012 11:59:54 -0600 Message-Id: <201202031759.q13HxsnX151039@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v3.2-rc1-11439-g4177af3 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: b9957308452afcf58e656db834f44df10d7b1662 X-Git-Newrev: 4177af3a8a6f119484c7903845c6693d7381c13e This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 4177af3 Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage 6bd92a2 Change xfs_sb_from_disk() interface to take a mount pointer 3673141 Define a new function xfs_inode_dquot() 6967b96 Define a new function xfs_this_quota_on() from b9957308452afcf58e656db834f44df10d7b1662 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4177af3a8a6f119484c7903845c6693d7381c13e Author: Chandra Seetharaman Date: Mon Jan 23 17:31:43 2012 +0000 Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage of quota macros. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 6bd92a239fc71ea26eb1dab3aece5eaaa99d4ef7 Author: Chandra Seetharaman Date: Mon Jan 23 17:31:37 2012 +0000 Change xfs_sb_from_disk() interface to take a mount pointer Change xfs_sb_from_disk() interface to take a mount pointer instead of a superblock pointer. This is to print mount point specific error messages in future fixes. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 36731410834e08c7d15c3980abd6cc4c563c2e87 Author: Chandra Seetharaman Date: Mon Jan 23 17:31:30 2012 +0000 Define a new function xfs_inode_dquot() Define a new function xfs_inode_dquot() that takes a inode pointer and a disk quota type and returns the quota pointer for the specified quota type. This simplifies the xfs_qm_dqget() error path significantly. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 6967b964c1012231f338445f20f877e680cd4cb8 Author: Chandra Seetharaman Date: Mon Jan 23 17:31:25 2012 +0000 Define a new function xfs_this_quota_on() Create a new function xfs_this_quota_on() that takes a xfs_mount data structure and a disk quota type and returns true if the specified type of quota is ON in the xfs_mount data structure. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_dquot.c | 37 +++++++++++-------------------------- fs/xfs/xfs_dquot.h | 30 ++++++++++++++++++++++++++---- fs/xfs/xfs_log_recover.c | 2 +- fs/xfs/xfs_mount.c | 6 ++++-- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_qm.c | 2 +- fs/xfs/xfs_quota.h | 2 ++ fs/xfs/xfs_super.c | 7 +++---- 8 files changed, 49 insertions(+), 39 deletions(-) hooks/post-receive -- XFS development tree From bpm@oss.sgi.com Fri Feb 3 12:00:03 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13I03oE151209 for ; Fri, 3 Feb 2012 12:00:03 -0600 Received: (from bpm@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id q13I018T151138; Fri, 3 Feb 2012 12:00:01 -0600 Date: Fri, 3 Feb 2012 12:00:01 -0600 Message-Id: <201202031800.q13I018T151138@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-next, updated. v3.2-rc1-11439-g4177af3 X-Git-Refname: refs/heads/for-next X-Git-Reftype: branch X-Git-Oldrev: b9957308452afcf58e656db834f44df10d7b1662 X-Git-Newrev: 4177af3a8a6f119484c7903845c6693d7381c13e This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-next has been updated 4177af3 Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage 6bd92a2 Change xfs_sb_from_disk() interface to take a mount pointer 3673141 Define a new function xfs_inode_dquot() 6967b96 Define a new function xfs_this_quota_on() from b9957308452afcf58e656db834f44df10d7b1662 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4177af3a8a6f119484c7903845c6693d7381c13e Author: Chandra Seetharaman Date: Mon Jan 23 17:31:43 2012 +0000 Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage of quota macros. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 6bd92a239fc71ea26eb1dab3aece5eaaa99d4ef7 Author: Chandra Seetharaman Date: Mon Jan 23 17:31:37 2012 +0000 Change xfs_sb_from_disk() interface to take a mount pointer Change xfs_sb_from_disk() interface to take a mount pointer instead of a superblock pointer. This is to print mount point specific error messages in future fixes. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 36731410834e08c7d15c3980abd6cc4c563c2e87 Author: Chandra Seetharaman Date: Mon Jan 23 17:31:30 2012 +0000 Define a new function xfs_inode_dquot() Define a new function xfs_inode_dquot() that takes a inode pointer and a disk quota type and returns the quota pointer for the specified quota type. This simplifies the xfs_qm_dqget() error path significantly. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers commit 6967b964c1012231f338445f20f877e680cd4cb8 Author: Chandra Seetharaman Date: Mon Jan 23 17:31:25 2012 +0000 Define a new function xfs_this_quota_on() Create a new function xfs_this_quota_on() that takes a xfs_mount data structure and a disk quota type and returns true if the specified type of quota is ON in the xfs_mount data structure. Signed-off-by: Chandra Seetharaman Reviewed-by: Christoph Hellwig Signed-off-by: Ben Myers ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_dquot.c | 37 +++++++++++-------------------------- fs/xfs/xfs_dquot.h | 30 ++++++++++++++++++++++++++---- fs/xfs/xfs_log_recover.c | 2 +- fs/xfs/xfs_mount.c | 6 ++++-- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_qm.c | 2 +- fs/xfs/xfs_quota.h | 2 ++ fs/xfs/xfs_super.c | 7 +++---- 8 files changed, 49 insertions(+), 39 deletions(-) hooks/post-receive -- XFS development tree From b.candler@pobox.com Fri Feb 3 12:47:27 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13IlQgT153674 for ; Fri, 3 Feb 2012 12:47:27 -0600 X-ASG-Debug-ID: 1328294845-04cb6c225f4aa180001-NocioJ Received: from smtp.pobox.com (b-pb-sasl-quonix.pobox.com [208.72.237.35]) by cuda.sgi.com with ESMTP id KHWCVnsR8gAhtJPu for ; Fri, 03 Feb 2012 10:47:25 -0800 (PST) X-Barracuda-Envelope-From: b.candler@pobox.com X-Barracuda-Apparent-Source-IP: 208.72.237.35 Received: from smtp.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 09FBA4609; Fri, 3 Feb 2012 13:47:25 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:message-id:references:mime-version:content-type :in-reply-to; s=sasl; bh=w7j41FQklBvdSgLxiI550thFBKs=; b=oAfEusG KPTfuWt9dfEcnHWMMk8ysz+Rj7R6tp2or7H/nazMrbDMU2WW6ScKjApxSAJrYJ+7 xnx0GypYD2A5JYPF79wbpmaAZLRrBnVe/TrtlaRSyy81qeh0JOmmc/72DiY0lPLc JRRir2gnZqQVGjV7s3L4VZ6DywdQ4hvWkp4U= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=date:from:to:cc :subject:message-id:references:mime-version:content-type :in-reply-to; q=dns; s=sasl; b=nRskZHGS9QnUnM/mW+GljaOQMeTNCTwqv vw+ke22MNqRw8cjcE3v6ETt+mm6JiJDqLtq4q1xsvAFZj2aL8aL2CDhus7AuEf27 3p49PqWzpd6OK2LMq4caisk9IrNJmIeGT7ejRY4stDYItH//MTsoYk2MKH8gGVVd HcS+P901lI= Received: from b-pb-sasl-quonix.pobox.com (unknown [127.0.0.1]) by b-sasl-quonix.pobox.com (Postfix) with ESMTP id 014E84608; Fri, 3 Feb 2012 13:47:25 -0500 (EST) Received: from Brians-MacBook-Air.local (unknown [46.208.162.148]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by b-sasl-quonix.pobox.com (Postfix) with ESMTPSA id 8030A4607; Fri, 3 Feb 2012 13:47:24 -0500 (EST) Received: from brian by Brians-MacBook-Air.local with local (Exim 4.77) (envelope-from ) id LYTYUZ-0001V8-3D; Fri, 03 Feb 2012 18:47:23 +0000 Date: Fri, 3 Feb 2012 18:47:23 +0000 From: Brian Candler To: Dave Chinner Cc: xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120203184723.GA2261@nsrc.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131141604.GB46571@nsrc.org> <20120131202526.GJ9090@dastard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120131202526.GJ9090@dastard> User-Agent: Mutt/1.5.21 (2010-09-15) X-Pobox-Relay-ID: 8328F874-4E97-11E1-8457-9DB42E706CDE-28021239!b-pb-sasl-quonix.pobox.com X-Barracuda-Connect: b-pb-sasl-quonix.pobox.com[208.72.237.35] X-Barracuda-Start-Time: 1328294845 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87508 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Wed, Feb 01, 2012 at 07:25:26AM +1100, Dave Chinner wrote: > The only thing changing the inode size will have affected is the > directory structure - maybe your directories are small enough to fit > in line, or the inode is large enough to keep it in extent format > rather than a full btree. In either case, though, the directory > lookup will require less IO. I've done a whole bunch of testing, which I won't describe in detail unless you're interested, but I've finally found out what's causing the sudden change in performance. With defaults, the files in one directory are spread all over the filesystem. But with -i size=1024, the files in a directory are stored adjacent to each other. Hence reading all the files in one directory requires far less seeking across the disk, and runs about 3 times faster. Here is the filesystem on a disk formatted with defaults: root@storage1:~# find /data/sdc | head -20 | xargs xfs_bmap /data/sdc: no extents /data/sdc/Bonnie.26384: 0: [0..31]: 567088..567119 /data/sdc/Bonnie.26384/00000: 0: [0..7]: 567120..567127 /data/sdc/Bonnie.26384/00000/0icoeTRPHKX0000000000: 0: [0..1015]: 4411196808..4411197823 /data/sdc/Bonnie.26384/00000/Q0000000001: 0: [0..1543]: 1466262056..1466263599 /data/sdc/Bonnie.26384/00000/JFXQyeq6diG0000000002: 0: [0..1295]: 2936342144..2936343439 /data/sdc/Bonnie.26384/00000/TK7ciXkkj0000000003: 0: [0..1519]: 4411197824..4411199343 /data/sdc/Bonnie.26384/00000/0000000004: 0: [0..1207]: 1466263600..1466264807 /data/sdc/Bonnie.26384/00000/acJKZWAwEnu0000000005: 0: [0..1223]: 2936343440..2936344663 /data/sdc/Bonnie.26384/00000/9wIgxPKeI4B0000000006: 0: [0..1319]: 4411199344..4411200663 /data/sdc/Bonnie.26384/00000/C6QLFdND0000000007: 0: [0..1111]: 1466264808..1466265919 /data/sdc/Bonnie.26384/00000/6xc1Wydh0000000008: 0: [0..1223]: 2936344664..2936345887 /data/sdc/Bonnie.26384/00000/0000000009: 0: [0..1167]: 4411200664..4411201831 /data/sdc/Bonnie.26384/00000/HdlN0000000000a: 0: [0..1535]: 1466265920..1466267455 /data/sdc/Bonnie.26384/00000/52IabyC5pvis000000000b: 0: [0..1287]: 2936345888..2936347175 /data/sdc/Bonnie.26384/00000/LvDhxcdLf000000000c: 0: [0..1583]: 4411201832..4411203415 /data/sdc/Bonnie.26384/00000/08P3JAR000000000d: 0: [0..1255]: 1466267456..1466268711 /data/sdc/Bonnie.26384/00000/000000000e: 0: [0..1095]: 2936347176..2936348271 /data/sdc/Bonnie.26384/00000/s0gtPGPecXu000000000f: 0: [0..1319]: 4411203416..4411204735 /data/sdc/Bonnie.26384/00000/HFLOcN0000000010: 0: [0..1503]: 1466268712..1466270215 And here is the filesystem created with -i size=1024: root@storage1:~# find /data/sdb | head -20 | xargs xfs_bmap /data/sdb: no extents /data/sdb/Bonnie.26384: 0: [0..7]: 243752..243759 1: [8..15]: 5526920..5526927 2: [16..23]: 7053272..7053279 3: [24..31]: 24223832..24223839 /data/sdb/Bonnie.26384/00000: 0: [0..7]: 1465133488..1465133495 /data/sdb/Bonnie.26384/00000/0icoeTRPHKX0000000000: 0: [0..1015]: 1465134032..1465135047 /data/sdb/Bonnie.26384/00000/Q0000000001: 0: [0..1543]: 1465135048..1465136591 /data/sdb/Bonnie.26384/00000/JFXQyeq6diG0000000002: 0: [0..1295]: 1465136592..1465137887 /data/sdb/Bonnie.26384/00000/TK7ciXkkj0000000003: 0: [0..1519]: 1465137888..1465139407 /data/sdb/Bonnie.26384/00000/0000000004: 0: [0..1207]: 1465139408..1465140615 /data/sdb/Bonnie.26384/00000/acJKZWAwEnu0000000005: 0: [0..1223]: 1465140616..1465141839 /data/sdb/Bonnie.26384/00000/9wIgxPKeI4B0000000006: 0: [0..1319]: 1465141840..1465143159 /data/sdb/Bonnie.26384/00000/C6QLFdND0000000007: 0: [0..1111]: 1465143160..1465144271 /data/sdb/Bonnie.26384/00000/6xc1Wydh0000000008: 0: [0..1223]: 1465144272..1465145495 /data/sdb/Bonnie.26384/00000/0000000009: 0: [0..1167]: 1465145496..1465146663 /data/sdb/Bonnie.26384/00000/HdlN0000000000a: 0: [0..1535]: 1465146664..1465148199 /data/sdb/Bonnie.26384/00000/52IabyC5pvis000000000b: 0: [0..1287]: 1465148200..1465149487 /data/sdb/Bonnie.26384/00000/LvDhxcdLf000000000c: 0: [0..1583]: 1465149488..1465151071 /data/sdb/Bonnie.26384/00000/08P3JAR000000000d: 0: [0..1255]: 1465151072..1465152327 /data/sdb/Bonnie.26384/00000/000000000e: 0: [0..1095]: 1465152464..1465153559 /data/sdb/Bonnie.26384/00000/s0gtPGPecXu000000000f: 0: [0..1319]: 1465153560..1465154879 /data/sdb/Bonnie.26384/00000/HFLOcN0000000010: 0: [0..1503]: 1465154880..1465156383 All the files in one directory are close to that directory; when you get to another directory the block offset jumps. This is a highly desirable property when you want to copy all the files: for example, using this filesystem I can tar it up and untar it onto another filesystem at 73MB/s, as compared to about 25MB/sec on a default filesystem. So now my questions now are: (1) Is this a fluke? What is it about -i size=1024 which causes this to happen? (2) What is the intended behaviour for XFS: that files should be close to their parent directory or spread across allocation groups? I did some additional tests: * -i size=512 Files spread around * -n size=16384 Files spread around * -i size=1024 -n size=16384 Files local to directory * -i size=2048 Files local to directory Any clues gratefully received. This usage pattern (dumping in a large library of files, and then processing all those files sequentially) is an important one for the system I'm working on. Regards, Brian. From sandeen@sandeen.net Fri Feb 3 12:50:19 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13IoJdr153860 for ; Fri, 3 Feb 2012 12:50:19 -0600 X-ASG-Debug-ID: 1328295017-04cbb01fb46021f0001-w1Z2WR Received: from mail.sandeen.net (sandeen.net [63.231.237.45]) by cuda.sgi.com with ESMTP id ljpMdCxAAsQ6i6qs for ; Fri, 03 Feb 2012 10:50:18 -0800 (PST) X-Barracuda-Envelope-From: sandeen@sandeen.net X-Barracuda-Apparent-Source-IP: 63.231.237.45 Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 9B5F3496334E; Fri, 3 Feb 2012 12:50:17 -0600 (CST) Message-ID: <4F2C2C69.5020103@sandeen.net> Date: Fri, 03 Feb 2012 12:50:17 -0600 From: Eric Sandeen User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20120129 Thunderbird/10.0 MIME-Version: 1.0 To: Marcos Mello CC: linux-xfs@oss.sgi.com Subject: Re: Placing the root partition on an XFS filesystem is not supported References: <4F2B02C4.8070903@sandeen.net> X-ASG-Orig-Subj: Re: Placing the root partition on an XFS filesystem is not supported In-Reply-To: X-Enigmail-Version: 1.3.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[63.231.237.45] X-Barracuda-Start-Time: 1328295017 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.41 X-Barracuda-Spam-Status: No, SCORE=0.41 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=SUBJECT_FUZZY_TION X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87508 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: On 2/3/12 8:39 AM, Marcos Mello wrote: > Eric Sandeen sandeen.net> writes: > >> >> In general there is no problem with xfs on a root partition. However, the > installer >> may not make it easy or available for you. >> >> (I never use xfs for /boot though, I don't trust grub enough for that > honestly). >> >> -Eric > > Same thing on Fedora 16. Let's hope some day Anaconda will change that. F16 prevents it? I didn't see it in the upstream tree. That should not be so. :/ > About GRUB with a XFS /boot the problem was with GRUB Lagacy, wasn't it? > Or GRUB2 is still buggy? I have no idea, actually. I delved into grub a bit, it was disturbing enough that I have not tried to look at grub2. :) -Eric > Marcos > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From BATV+d1a519dbf03a94af3845+3085+infradead.org+hch@bombadil.srs.infradead.org Fri Feb 3 13:03:17 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13J3FIw154469 for ; Fri, 3 Feb 2012 13:03:17 -0600 X-ASG-Debug-ID: 1328295791-04cbb01fb2603800001-NocioJ Received: from bombadil.infradead.org (173-166-109-252-newengland.hfc.comcastbusiness.net [173.166.109.252]) by cuda.sgi.com with ESMTP id L5NTj7lrJBdzxlbj (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Feb 2012 11:03:11 -0800 (PST) X-Barracuda-Envelope-From: BATV+d1a519dbf03a94af3845+3085+infradead.org+hch@bombadil.srs.infradead.org X-Barracuda-Apparent-Source-IP: 173.166.109.252 Received: from hch by bombadil.infradead.org with local (Exim 4.76 #1 (Red Hat Linux)) id 1RtOPY-00035N-7g; Fri, 03 Feb 2012 19:03:04 +0000 Date: Fri, 3 Feb 2012 14:03:04 -0500 From: Christoph Hellwig To: Brian Candler Cc: Dave Chinner , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes Message-ID: <20120203190304.GA11809@infradead.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131141604.GB46571@nsrc.org> <20120131202526.GJ9090@dastard> <20120203184723.GA2261@nsrc.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120203184723.GA2261@nsrc.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: 173-166-109-252-newengland.hfc.comcastbusiness.net[173.166.109.252] X-Barracuda-Start-Time: 1328295791 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87508 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS On Fri, Feb 03, 2012 at 06:47:23PM +0000, Brian Candler wrote: > On Wed, Feb 01, 2012 at 07:25:26AM +1100, Dave Chinner wrote: > > The only thing changing the inode size will have affected is the > > directory structure - maybe your directories are small enough to fit > > in line, or the inode is large enough to keep it in extent format > > rather than a full btree. In either case, though, the directory > > lookup will require less IO. > > I've done a whole bunch of testing, which I won't describe in detail unless > you're interested, but I've finally found out what's causing the sudden > change in performance. > > With defaults, the files in one directory are spread all over the > filesystem. But with -i size=1024, the files in a directory are stored > adjacent to each other. Hence reading all the files in one directory > requires far less seeking across the disk, and runs about 3 times faster. Not sure if you mentioned it somewhere before, but: a) how large is the filesystem? b) do use the inode64 mount option c) can you see the same good behaviour when using inode64 and small inodes (not that inode64 can NOT be set using remount) > > Here is the filesystem on a disk formatted with defaults: > > root@storage1:~# find /data/sdc | head -20 | xargs xfs_bmap > /data/sdc: no extents > /data/sdc/Bonnie.26384: > 0: [0..31]: 567088..567119 > /data/sdc/Bonnie.26384/00000: > 0: [0..7]: 567120..567127 > /data/sdc/Bonnie.26384/00000/0icoeTRPHKX0000000000: > 0: [0..1015]: 4411196808..4411197823 > /data/sdc/Bonnie.26384/00000/Q0000000001: > 0: [0..1543]: 1466262056..1466263599 > /data/sdc/Bonnie.26384/00000/JFXQyeq6diG0000000002: > 0: [0..1295]: 2936342144..2936343439 > /data/sdc/Bonnie.26384/00000/TK7ciXkkj0000000003: > 0: [0..1519]: 4411197824..4411199343 > /data/sdc/Bonnie.26384/00000/0000000004: > 0: [0..1207]: 1466263600..1466264807 > /data/sdc/Bonnie.26384/00000/acJKZWAwEnu0000000005: > 0: [0..1223]: 2936343440..2936344663 > /data/sdc/Bonnie.26384/00000/9wIgxPKeI4B0000000006: > 0: [0..1319]: 4411199344..4411200663 > /data/sdc/Bonnie.26384/00000/C6QLFdND0000000007: > 0: [0..1111]: 1466264808..1466265919 > /data/sdc/Bonnie.26384/00000/6xc1Wydh0000000008: > 0: [0..1223]: 2936344664..2936345887 > /data/sdc/Bonnie.26384/00000/0000000009: > 0: [0..1167]: 4411200664..4411201831 > /data/sdc/Bonnie.26384/00000/HdlN0000000000a: > 0: [0..1535]: 1466265920..1466267455 > /data/sdc/Bonnie.26384/00000/52IabyC5pvis000000000b: > 0: [0..1287]: 2936345888..2936347175 > /data/sdc/Bonnie.26384/00000/LvDhxcdLf000000000c: > 0: [0..1583]: 4411201832..4411203415 > /data/sdc/Bonnie.26384/00000/08P3JAR000000000d: > 0: [0..1255]: 1466267456..1466268711 > /data/sdc/Bonnie.26384/00000/000000000e: > 0: [0..1095]: 2936347176..2936348271 > /data/sdc/Bonnie.26384/00000/s0gtPGPecXu000000000f: > 0: [0..1319]: 4411203416..4411204735 > /data/sdc/Bonnie.26384/00000/HFLOcN0000000010: > 0: [0..1503]: 1466268712..1466270215 > > And here is the filesystem created with -i size=1024: > > root@storage1:~# find /data/sdb | head -20 | xargs xfs_bmap > /data/sdb: no extents > /data/sdb/Bonnie.26384: > 0: [0..7]: 243752..243759 > 1: [8..15]: 5526920..5526927 > 2: [16..23]: 7053272..7053279 > 3: [24..31]: 24223832..24223839 > /data/sdb/Bonnie.26384/00000: > 0: [0..7]: 1465133488..1465133495 > /data/sdb/Bonnie.26384/00000/0icoeTRPHKX0000000000: > 0: [0..1015]: 1465134032..1465135047 > /data/sdb/Bonnie.26384/00000/Q0000000001: > 0: [0..1543]: 1465135048..1465136591 > /data/sdb/Bonnie.26384/00000/JFXQyeq6diG0000000002: > 0: [0..1295]: 1465136592..1465137887 > /data/sdb/Bonnie.26384/00000/TK7ciXkkj0000000003: > 0: [0..1519]: 1465137888..1465139407 > /data/sdb/Bonnie.26384/00000/0000000004: > 0: [0..1207]: 1465139408..1465140615 > /data/sdb/Bonnie.26384/00000/acJKZWAwEnu0000000005: > 0: [0..1223]: 1465140616..1465141839 > /data/sdb/Bonnie.26384/00000/9wIgxPKeI4B0000000006: > 0: [0..1319]: 1465141840..1465143159 > /data/sdb/Bonnie.26384/00000/C6QLFdND0000000007: > 0: [0..1111]: 1465143160..1465144271 > /data/sdb/Bonnie.26384/00000/6xc1Wydh0000000008: > 0: [0..1223]: 1465144272..1465145495 > /data/sdb/Bonnie.26384/00000/0000000009: > 0: [0..1167]: 1465145496..1465146663 > /data/sdb/Bonnie.26384/00000/HdlN0000000000a: > 0: [0..1535]: 1465146664..1465148199 > /data/sdb/Bonnie.26384/00000/52IabyC5pvis000000000b: > 0: [0..1287]: 1465148200..1465149487 > /data/sdb/Bonnie.26384/00000/LvDhxcdLf000000000c: > 0: [0..1583]: 1465149488..1465151071 > /data/sdb/Bonnie.26384/00000/08P3JAR000000000d: > 0: [0..1255]: 1465151072..1465152327 > /data/sdb/Bonnie.26384/00000/000000000e: > 0: [0..1095]: 1465152464..1465153559 > /data/sdb/Bonnie.26384/00000/s0gtPGPecXu000000000f: > 0: [0..1319]: 1465153560..1465154879 > /data/sdb/Bonnie.26384/00000/HFLOcN0000000010: > 0: [0..1503]: 1465154880..1465156383 > > All the files in one directory are close to that directory; when you get to > another directory the block offset jumps. > > This is a highly desirable property when you want to copy all the files: for > example, using this filesystem I can tar it up and untar it onto another > filesystem at 73MB/s, as compared to about 25MB/sec on a default filesystem. > > So now my questions now are: > > (1) Is this a fluke? What is it about -i size=1024 which causes this to > happen? > > (2) What is the intended behaviour for XFS: that files should be close to > their parent directory or spread across allocation groups? > > I did some additional tests: > > * -i size=512 > Files spread around > > * -n size=16384 > Files spread around > > * -i size=1024 -n size=16384 > Files local to directory > > * -i size=2048 > Files local to directory > > Any clues gratefully received. This usage pattern (dumping in a large > library of files, and then processing all those files sequentially) is an > important one for the system I'm working on. > > Regards, > > Brian. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From stan@hardwarefreak.com Fri Feb 3 13:42:53 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.4.0-r929098 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13JgrfW156346 for ; Fri, 3 Feb 2012 13:42:53 -0600 X-ASG-Debug-ID: 1328298172-04cb6c225e4af4b0001-NocioJ Received: from greer.hardwarefreak.com (mo-65-41-216-221.sta.embarqhsd.net [65.41.216.221]) by cuda.sgi.com with ESMTP id oAe0Cq8aYYjWmEHm for ; Fri, 03 Feb 2012 11:42:52 -0800 (PST) X-Barracuda-Envelope-From: stan@hardwarefreak.com X-Barracuda-Apparent-Source-IP: 65.41.216.221 Received: from [192.168.100.53] (gffx.hardwarefreak.com [192.168.100.53]) by greer.hardwarefreak.com (Postfix) with ESMTP id DE5116C0CA; Fri, 3 Feb 2012 13:42:51 -0600 (CST) Message-ID: <4F2C38BE.2010002@hardwarefreak.com> Date: Fri, 03 Feb 2012 13:42:54 -0600 From: Stan Hoeppner Reply-To: stan@hardwarefreak.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 MIME-Version: 1.0 To: Brian Candler CC: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: Performance problem - reads slower than writes References: <20120130220019.GA45782@nsrc.org> <20120131020508.GF9090@dastard> <20120131103126.GA46170@nsrc.org> <20120131145205.GA6607@infradead.org> <20120203115434.GA649@nsrc.org> X-ASG-Orig-Subj: Re: Performance problem - reads slower than writes In-Reply-To: <20120203115434.GA649@nsrc.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mo-65-41-216-221.sta.embarqhsd.net[65.41.216.221] X-Barracuda-Start-Time: 1328298172 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87510 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC7_SA_HREF_FROM_MISMATCH_TEXT_URIx1_HL Custom Rule HREF_FROM_MISMATCH_TEXT_URIx1_HL On 2/3/2012 5:54 AM, Brian Candler wrote: > and the drives are Hitachi Deskstar 5K3000 HDS5C3030ALA630: 3TB, 32MB cache, 5940 RPM > The files have an average size of 0.65MB You stated you're writing 100,000 of these files across 1,000 directories, with Bonnie, then reading them back with dd in your custom script. You state this is similar to your production workload. You've hit the peak read rate of these Hitachi drives. As others pointed out, if you need more read performance than the dozen of these you plan to RAID stripe, then you'll need to swap them for units with a faster spindle: 7.2k 1.21x 10k 1.68x 15k 2.53x or with SSDs, which will yield an order of magnitude increase. Your stated need is 20M 500-800KB files, or 20GB if my math is correct. Four of these enterprise Intel SLC SSDs in a layered mdRAID0 over mdRAID1 will give you ~375 file reads/sec at 800KB per file, again if my math is correct: http://www.newegg.com/Product/Product.aspx?Item=N82E16820167062 for $480 USD total investment. You might get by with a mirrored pair depending on your actual space needs, but performance would be half. You're probably wondering why I didn't recommend an mdRAID10 instead, or a 3 SSD RAID5. All of the mdRAID striped RAID codes serialize on a single master thread, except for RAID0 and the linear concatenation (--linear). With storage devices capable of 35K IOPS each, that single thread, even running on a 3+GHz core, has trouble keeping up. The LSI 9201-16 you have is based on the SAS2116 chip, which isn't fast enough in RAID10 mode to keep up with the SSDs. In straight HBA mode it is. -- Stan From landman@scalableinformatics.com Fri Feb 3 14:02:31 2012 X-Spam-Checker-Version: SpamAssassin 3.4.0-r929098 (2010-03-30) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, TO_NO_BRKTS_PCNT autolearn=no version=3.4.0-r929098 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13K2Ro5157161 for ; Fri, 3 Feb 2012 14:02:31 -0600 X-ASG-Debug-ID: 1328299340-04cbb01fb3608be0001-w1Z2WR Received: from crunch.scalableinformatics.com (173-10-54-97-Michigan.hfc.comcastbusiness.net [173.10.54.97]) by cuda.sgi.com with ESMTP id GhmCFlrEtacJBaiU (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Fri, 03 Feb 2012 12:02:20 -0800 (PST) X-Barracuda-Envelope-From: landman@scalableinformatics.com X-Barracuda-Apparent-Source-IP: 173.10.54.97 Received: from crunch.scalableinformatics.com (localhost [127.0.0.1]) by crunch.scalableinformatics.com (Postfix) with ESMTP id 8245980ABED3 for ; Fri, 3 Feb 2012 15:02:22 -0500 (EST) Received: from [192.168.5.53] (eng [70.88.96.213]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by crunch.scalableinformatics.com (Postfix) with ESMTPSA id 54928805A118 for ; Fri, 3 Feb 2012 15:02:22 -0500 (EST) Message-ID: <4F2C3D46.1010509@scalableinformatics.com> Date: Fri, 03 Feb 2012 15:02:14 -0500 From: Joe Landman Reply-To: landman@scalableinformatics.com Organization: Scalable Informatics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111229 Thunderbird/9.0 MIME-Version: 1.0 To: linux-xfs@oss.sgi.com Subject: A corruption that seems to span a few kernels Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: A corruption that seems to span a few kernels Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: 173-10-54-97-Michigan.hfc.comcastbusiness.net[173.10.54.97] X-Barracuda-Start-Time: 1328299340 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 tests=BSF_SC5_MJ1963, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.87512 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 XFS file system, built using a 2.6.32.41 kernel. External journals. repair the file system, mount, turn on gluster (3.2.5), do a find, and get a corruption. Actually it looks like xfs_repair doesn't fix the problem. Rinse repeat, reproduce. Works (procedure to generate the corruption) in 2.6.32.41.scalable, 2.6.39.1, 3.2.2 [ 428.457044] XFS (sdc2): corrupt dinode 54105173, extent total = 1, nblocks = 0. [ 428.464596] ffff880bde999500: 49 4e 81 a4 01 02 00 01 00 00 04 65 00 00 07 df IN.........e.... [ 428.473587] XFS (sdc2): Internal error xfs_iformat(1) at line 319 of file fs/xfs/xfs_inode.c. Caller 0xffffffff8127b738 [ 428.473589] [ 428.486388] Pid: 7562, comm: glusterfsd Not tainted 3.2.2.scalable #1 [ 428.493014] Call Trace: [ 428.495544] [] xfs_error_report+0x3a/0x40 [ 428.501391] [] ? xfs_iread+0x118/0x1a0 [ 428.506894] [] xfs_corruption_error+0x58/0x80 [ 428.513027] [] xfs_iformat+0x401/0x570 [ 428.518491] [] ? xfs_iread+0x118/0x1a0 [ 428.524003] [] xfs_iread+0x118/0x1a0 [ 428.529292] [] xfs_iget+0x2d3/0x8b0 [ 428.534537] [] ? xfs_iunlock+0x92/0x130 [ 428.540122] [] xfs_lookup+0xb8/0x140 [ 428.545413] [] xfs_vn_lookup+0x59/0xa0 [ 428.550922] [] ? d_alloc+0x75/0x90 [ 428.556034] [] d_alloc_and_lookup+0x44/0x80 [ 428.561976] [] do_lookup+0x243/0x350 [ 428.567326] [] path_lookupat+0xea/0x740 [ 428.572942] [] ? xfs_attr_get+0xb2/0xc0 [ 428.578489] [] do_path_lookup+0x30/0xc0 [ 428.584089] [] user_path_at_empty+0x54/0xa0 [ 428.589984] [] ? kmem_cache_free+0x22/0x120 [ 428.595932] [] ? putname+0x31/0x50 [ 428.601091] [] ? user_path_at_empty+0x5f/0xa0 [ 428.607190] [] user_path_at+0xc/0x10 [ 428.612586] [] vfs_fstatat+0x46/0x80 [ 428.617868] [] vfs_lstat+0x19/0x20 [ 428.623068] [] sys_newlstat+0x1f/0x50 [ 428.628626] [] ? audit_syscall_entry+0x16d/0x1d0 [ 428.635009] [] system_call_fastpath+0x16/0x1b [ 428.641352] XFS (sdc2): Corruption detected. Unmount and run xfs_repair [root@jr4-3 ~]# /etc/init.d/glusterd stop Stopping glusterd: [ OK ] [root@jr4-3 ~]# umount /data/brick-sdc2 [root@jr4-3 ~]# nohup xfs_repair -vvv -l /dev/md1 /dev/sdc2 > /tmp/out2.sdc 2>&1 & [1] 7689 xfs_repair runs. File system becomes normal. Can reboot or remain in the same system. Select any of the kernels. Mount the file system. I haven't checked whether this only happens with Gluster yet or not, working on it next ... will do the find w/o gluster on the backing store. See if it croaks. Currently booted into 3.2.2, can boot into something else. Any hints? I can reproduce it quite well, and xfs_repair seems to work ... (repeated passes don't seem to help). [root@jr4-3 ~]# grep "corrupt dinode 54105173" /var/log/messages Feb 2 23:08:46 jr4-3 kernel: [ 1548.511502] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 2 23:13:32 jr4-3 kernel: [ 1834.627251] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 2 23:37:44 jr4-3 kernel: [ 3286.598877] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 00:07:43 jr4-3 kernel: [ 5085.429344] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 00:37:44 jr4-3 kernel: [ 6886.552328] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 01:07:43 jr4-3 kernel: [ 8686.384728] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 01:37:47 jr4-3 kernel: [10490.113301] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 02:07:46 jr4-3 kernel: [12289.248980] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 02:37:43 jr4-3 kernel: [14086.210521] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 03:07:45 jr4-3 kernel: [15888.798065] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 03:37:43 jr4-3 kernel: [17686.388882] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 04:04:06 jr4-3 kernel: [19269.902522] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 04:08:04 jr4-3 kernel: [19507.447343] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 04:38:11 jr4-3 kernel: [21314.248443] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 05:07:43 jr4-3 kernel: [23086.714157] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 05:37:43 jr4-3 kernel: [24886.444238] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 06:07:43 jr4-3 kernel: [26686.740589] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 06:37:45 jr4-3 kernel: [28488.946147] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 07:07:42 jr4-3 kernel: [30286.417803] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 07:37:42 jr4-3 kernel: [32085.847705] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 08:08:01 jr4-3 kernel: [33904.979795] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 08:37:46 jr4-3 kernel: [35690.043019] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 08:47:19 jr4-3 kernel: [36263.597170] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 09:07:42 jr4-3 kernel: [37486.293617] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 09:37:42 jr4-3 kernel: [39285.987621] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 10:07:42 jr4-3 kernel: [41086.440845] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 10:37:55 jr4-3 kernel: [42899.537075] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 11:08:24 jr4-3 kernel: [ 988.628970] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 13:08:20 jr4-3 kernel: [ 2531.085884] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 13:10:13 jr4-3 kernel: [ 2643.954262] Filesystem "sdc2": corrupt dinode 54105173, extent total = 1, nblocks = 0. Unmount and run xfs_repair. Feb 3 08:38:20 jr4-3 kernel: [ 428.457044] XFS (sdc2): corrupt dinode 54105173, extent total = 1, nblocks = 0. Any clues/hints/suggestions? Zero out that dinode (and if so, how?) Let me know if you want any additional information from this system. Its a large RAID6, with battery backed ECC cache. No disk events reported. This appeared after finishing the xfs_repair [root@jr4-3 ~]# [ 1102.898890] scsi_verify_blk_ioctl: 56 callbacks suppressed [ 1102.904486] xfs_repair: sending ioctl 1261 to a partition! [ 1102.910286] xfs_repair: sending ioctl 1261 to a partition! Output from xfs_repair below. Notes are in phase 3 and 4 phase 3: data fork in regular inode 54105173 claims used block 6745835296 phase 4: data fork in regular inode 54105173 claims used block 6745835296 xfs_repair doesn't seem to fix this, as a second pass through still indicates a problem. First pass: [root@jr4-3 ~]# cat !$ cat /tmp/out2.sdc Phase 1 - find and verify superblock... - max_mem = 37094007, icount = 5448960, imem = 21285, dblock = 4391112384, dmem = 2144097 - block cache size set to 4359824 entries Phase 2 - using external log on /dev/md1 - zero log... zero_log: head block 48836 tail block 48836 - scan filesystem freespace and inode maps... - found root inode chunk libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 3278 Active entries = 3278 Hash table size = 544978 Hits = 0 Misses = 3278 Hit ratio = 0.00 MRU 0 entries = 3278 (100%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 541912 ( 0%) Hash buckets with 1 entries 2903 ( 88%) Hash buckets with 2 entries 129 ( 7%) Hash buckets with 3 entries 21 ( 1%) Hash buckets with 4 entries 11 ( 1%) Hash buckets with 5 entries 2 ( 0%) Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 data fork in regular inode 54105173 claims used block 6745835296 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - process newly discovered inodes... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052814 Active entries = 1052814 Hash table size = 544978 Hits = 302945 Misses = 1052814 Hit ratio = 22.35 MRU 0 entries = 851716 ( 80%) MRU 1 entries = 6724 ( 0%) MRU 2 entries = 68352 ( 6%) MRU 3 entries = 108276 ( 10%) MRU 4 entries = 5278 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 12339 ( 1%) MRU 7 entries = 16 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 3 ( 0%) MRU 12 entries = 110 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206656 ( 0%) Hash buckets with 1 entries 86130 ( 8%) Hash buckets with 2 entries 71589 ( 13%) Hash buckets with 3 entries 20312 ( 5%) Hash buckets with 4 entries 99262 ( 37%) Hash buckets with 5 entries 25665 ( 12%) Hash buckets with 6 entries 21611 ( 12%) Hash buckets with 7 entries 3104 ( 2%) Hash buckets with 8 entries 10077 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 14 - agno = 15 - agno = 18 - agno = 16 - agno = 20 - agno = 22 - agno = 19 - agno = 25 - agno = 26 - agno = 21 - agno = 29 - agno = 24 - agno = 31 - agno = 17 - agno = 27 - agno = 28 - agno = 23 - agno = 30 - agno = 13 data fork in regular inode 54105173 claims used block 6745835296 libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052814 Active entries = 1052814 Hash table size = 544978 Hits = 646498 Misses = 1052814 Hit ratio = 38.04 MRU 0 entries = 1052701 ( 99%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 3 ( 0%) MRU 12 entries = 110 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206656 ( 0%) Hash buckets with 1 entries 86130 ( 8%) Hash buckets with 2 entries 71589 ( 13%) Hash buckets with 3 entries 20312 ( 5%) Hash buckets with 4 entries 99262 ( 37%) Hash buckets with 5 entries 25665 ( 12%) Hash buckets with 6 entries 21611 ( 12%) Hash buckets with 7 entries 3104 ( 2%) Hash buckets with 8 entries 10077 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 5 - rebuild AG headers and trees... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - reset superblock... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052814 Active entries = 1052814 Hash table size = 544978 Hits = 649707 Misses = 1052814 Hit ratio = 38.16 MRU 0 entries = 1052701 ( 99%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 3 ( 0%) MRU 12 entries = 110 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206656 ( 0%) Hash buckets with 1 entries 86130 ( 8%) Hash buckets with 2 entries 71589 ( 13%) Hash buckets with 3 entries 20312 ( 5%) Hash buckets with 4 entries 99262 ( 37%) Hash buckets with 5 entries 25665 ( 12%) Hash buckets with 6 entries 21611 ( 12%) Hash buckets with 7 entries 3104 ( 2%) Hash buckets with 8 entries 10077 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - traversal finished ... - moving disconnected inodes to lost+found ... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052845 Active entries = 1052845 Hash table size = 544978 Hits = 1854913 Misses = 1052845 Hit ratio = 63.79 MRU 0 entries = 1016092 ( 96%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 3 ( 0%) MRU 4 entries = 141 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 11363 ( 1%) MRU 8 entries = 25246 ( 2%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206646 ( 0%) Hash buckets with 1 entries 86134 ( 8%) Hash buckets with 2 entries 71593 ( 13%) Hash buckets with 3 entries 20312 ( 5%) Hash buckets with 4 entries 99256 ( 37%) Hash buckets with 5 entries 25670 ( 12%) Hash buckets with 6 entries 21614 ( 12%) Hash buckets with 7 entries 3104 ( 2%) Hash buckets with 8 entries 10077 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 7 - verify and correct link counts... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052845 Active entries = 1052845 Hash table size = 544978 Hits = 1854913 Misses = 1052845 Hit ratio = 63.79 MRU 0 entries = 1016092 ( 96%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 3 ( 0%) MRU 4 entries = 141 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 11363 ( 1%) MRU 8 entries = 25246 ( 2%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206646 ( 0%) Hash buckets with 1 entries 86134 ( 8%) Hash buckets with 2 entries 71593 ( 13%) Hash buckets with 3 entries 20312 ( 5%) Hash buckets with 4 entries 99256 ( 37%) Hash buckets with 5 entries 25670 ( 12%) Hash buckets with 6 entries 21614 ( 12%) Hash buckets with 7 entries 3104 ( 2%) Hash buckets with 8 entries 10077 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) XFS_REPAIR Summary Fri Feb 3 08:49:34 2012 Phase Start End Duration Phase 1: 02/03 08:43:06 02/03 08:43:06 Phase 2: 02/03 08:43:06 02/03 08:43:11 5 seconds Phase 3: 02/03 08:43:11 02/03 08:48:48 5 minutes, 37 seconds Phase 4: 02/03 08:48:48 02/03 08:49:26 38 seconds Phase 5: 02/03 08:49:26 02/03 08:49:27 1 second Phase 6: 02/03 08:49:27 02/03 08:49:33 6 seconds Phase 7: 02/03 08:49:33 02/03 08:49:33 Total run time: 6 minutes, 27 seconds done Second pass: [root@jr4-3 ~]# cat /tmp/out3.sdc Phase 1 - find and verify superblock... - max_mem = 37094007, icount = 5448960, imem = 21285, dblock = 4391112384, dmem = 2144097 - block cache size set to 4359824 entries Phase 2 - using external log on /dev/md1 - zero log... zero_log: head block 2 tail block 2 - scan filesystem freespace and inode maps... - found root inode chunk libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 3240 Active entries = 3240 Hash table size = 544978 Hits = 0 Misses = 3240 Hit ratio = 0.00 MRU 0 entries = 3240 (100%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 541938 ( 0%) Hash buckets with 1 entries 2881 ( 88%) Hash buckets with 2 entries 127 ( 7%) Hash buckets with 3 entries 23 ( 2%) Hash buckets with 4 entries 9 ( 1%) Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 data fork in regular inode 54105173 claims used block 6745835296 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - process newly discovered inodes... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052776 Active entries = 1052776 Hash table size = 544978 Hits = 302945 Misses = 1052776 Hit ratio = 22.35 MRU 0 entries = 851678 ( 80%) MRU 1 entries = 6724 ( 0%) MRU 2 entries = 68352 ( 6%) MRU 3 entries = 107924 ( 10%) MRU 4 entries = 5314 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 12655 ( 1%) MRU 7 entries = 16 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 3 ( 0%) MRU 12 entries = 110 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206666 ( 0%) Hash buckets with 1 entries 86129 ( 8%) Hash buckets with 2 entries 71585 ( 13%) Hash buckets with 3 entries 20311 ( 5%) Hash buckets with 4 entries 99263 ( 37%) Hash buckets with 5 entries 25662 ( 12%) Hash buckets with 6 entries 21611 ( 12%) Hash buckets with 7 entries 3103 ( 2%) Hash buckets with 8 entries 10076 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 2 - agno = 5 - agno = 7 - agno = 1 - agno = 3 - agno = 4 - agno = 11 - agno = 8 - agno = 14 - agno = 15 - agno = 9 - agno = 17 - agno = 18 - agno = 19 - agno = 10 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 6 - agno = 12 - agno = 25 - agno = 27 - agno = 26 - agno = 20 - agno = 28 - agno = 16 - agno = 31 - agno = 13 - agno = 29 - agno = 30 data fork in regular inode 54105173 claims used block 6745835296 libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052776 Active entries = 1052776 Hash table size = 544978 Hits = 646498 Misses = 1052776 Hit ratio = 38.05 MRU 0 entries = 1052663 ( 99%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 3 ( 0%) MRU 12 entries = 110 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206666 ( 0%) Hash buckets with 1 entries 86129 ( 8%) Hash buckets with 2 entries 71585 ( 13%) Hash buckets with 3 entries 20311 ( 5%) Hash buckets with 4 entries 99263 ( 37%) Hash buckets with 5 entries 25662 ( 12%) Hash buckets with 6 entries 21611 ( 12%) Hash buckets with 7 entries 3103 ( 2%) Hash buckets with 8 entries 10076 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 5 - rebuild AG headers and trees... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - reset superblock... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052776 Active entries = 1052776 Hash table size = 544978 Hits = 649707 Misses = 1052776 Hit ratio = 38.16 MRU 0 entries = 1052663 ( 99%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 3 ( 0%) MRU 12 entries = 110 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206666 ( 0%) Hash buckets with 1 entries 86129 ( 8%) Hash buckets with 2 entries 71585 ( 13%) Hash buckets with 3 entries 20311 ( 5%) Hash buckets with 4 entries 99263 ( 37%) Hash buckets with 5 entries 25662 ( 12%) Hash buckets with 6 entries 21611 ( 12%) Hash buckets with 7 entries 3103 ( 2%) Hash buckets with 8 entries 10076 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - traversal finished ... - moving disconnected inodes to lost+found ... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052807 Active entries = 1052807 Hash table size = 544978 Hits = 1854913 Misses = 1052807 Hit ratio = 63.79 MRU 0 entries = 1016054 ( 96%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 3 ( 0%) MRU 4 entries = 141 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 11363 ( 1%) MRU 8 entries = 25246 ( 2%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206656 ( 0%) Hash buckets with 1 entries 86133 ( 8%) Hash buckets with 2 entries 71589 ( 13%) Hash buckets with 3 entries 20311 ( 5%) Hash buckets with 4 entries 99257 ( 37%) Hash buckets with 5 entries 25667 ( 12%) Hash buckets with 6 entries 21614 ( 12%) Hash buckets with 7 entries 3103 ( 2%) Hash buckets with 8 entries 10076 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) Phase 7 - verify and correct link counts... libxfs_bcache: 0x6814c0 Max supported entries = 4359824 Max utilized entries = 1052807 Active entries = 1052807 Hash table size = 544978 Hits = 1854913 Misses = 1052807 Hit ratio = 63.79 MRU 0 entries = 1016054 ( 96%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 3 ( 0%) MRU 4 entries = 141 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 11363 ( 1%) MRU 8 entries = 25246 ( 2%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 0 entries 206656 ( 0%) Hash buckets with 1 entries 86133 ( 8%) Hash buckets with 2 entries 71589 ( 13%) Hash buckets with 3 entries 20311 ( 5%) Hash buckets with 4 entries 99257 ( 37%) Hash buckets with 5 entries 25667 ( 12%) Hash buckets with 6 entries 21614 ( 12%) Hash buckets with 7 entries 3103 ( 2%) Hash buckets with 8 entries 10076 ( 7%) Hash buckets with 9 entries 535 ( 0%) Hash buckets with 10 entries 35 ( 0%) Hash buckets with 11 entries 2 ( 0%) XFS_REPAIR Summary Fri Feb 3 09:00:02 2012 Phase Start End Duration Phase 1: 02/03 08:53:37 02/03 08:53:37 Phase 2: 02/03 08:53:37 02/03 08:53:38 1 second Phase 3: 02/03 08:53:38 02/03 08:59:16 5 minutes, 38 seconds Phase 4: 02/03 08:59:16 02/03 08:59:54 38 seconds Phase 5: 02/03 08:59:54 02/03 08:59:55 1 second Phase 6: 02/03 08:59:55 02/03 09:00:01 6 seconds Phase 7: 02/03 09:00:01 02/03 09:00:01 Total run time: 6 minutes, 24 seconds done -- Joseph Landman, Ph.D Founder and CEO Scalable Informatics Inc. email: landman@scalableinformatics.com web : http://scalableinformatics.com http://scalableinformatics.com/sicluster phone: +1 734 786 8423 x121 fax : +1 866 888 3112 cell : +1 734 612 4615 From cdctintmunwpb@sina.com Fri Feb 3 14:37:53 2012 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id q13KbqsD158596 for ; Fri, 3 Feb 2012 14:37:53 -0600 X-ASG-Debug-ID: 1328301449-04cb6c22604b1f60001-w1Z2WR Received: from mail2-157.sinamail.sina.com.cn (mail2-157.sinamail.sina.com.cn [60.28.2.157]) by cuda.sgi.com with ESMTP id RnzFNWzmxv8IMrNn for ; Fri, 03 Feb 2012 12:37:30 -0800 (PST) X-Barracuda-Envelope-From: cdctintmunwpb@sina.com X-Barracuda-Apparent-Source-IP: 60.28.2.157 Received: from unknown (HELO webmail.sinamail.sina.com.cn) ([172.16.201.32]) by irtj11-84.sinamail.sina.com.cn with ESMTP; 04 Feb 2012 04:37:27 +0800 Received: by webmail.sinamail.sina.com.cn (Postfix, from userid 80) id 65BA9C34F2C; Sat, 4 Feb 2012 04:37:27 +0800 (CST) Date: Sat, 04 Feb 2012 04:37:27 +0800 Received: from cdctintmunwpb@sina.com([222.246.92.131]) by m0.mail.sina.com.cn via HTTP; Sat, 04 Feb 2012 04:37:27 +0800 (CST) Reply-To: cdctintmunwpb@sina.com From: To: Subject: =?GBK?B?a9fucdDCYtVudbPMbtOLYYSdcLHtdw==?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?GBK?B?a9fucdDCYtVudbPMbtOLYYSdcLHtdw==?= X-Priority: 3 X-MessageID: 1328301447.0777.21608 X-Originating-IP: [172.16.201.32] X-Mailer: Sina WebMail 4.0 X-Sina-Sendseparate: 1 Content-Type: multipart/mixed; boundary="=-sinamail_mix_658d477463fcbd0c430fecfde2a8f7af" Message-Id: <20120203203727.65BA9C34F2C@webmail.sinamail.sina.com.cn> X-Barracuda-Connect: mail2-157.sinamail.sina.com.cn[60.28.2.157] X-Barracuda-Start-Time: 1328301449 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=1.0 --=-sinamail_mix_658d477463fcbd0c430fecfde2a8f7af Content-Type: multipart/alternative; boundary="=-sinamail_alt_f8e11f92c7d2809c2eb4e5f7e94137e8" --=-sinamail_alt_f8e11f92c7d2809c2eb4e5f7e94137e8 Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 Content-Disposition: inline 1qOPqurMCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCrfc1Yiy7LC6CrP53muy6bHJ tO4KtMC38ranytW9ibfuCrSotvKxx+5+uL2xtLSrCrDFvkmytba2s/m8/rT9sMMKCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCgoyMDEyxOowMtTCMDTI1SAxMzoxMzozNAoKCgoK --=-sinamail_alt_f8e11f92c7d2809c2eb4e5f7e94137e8 Content-Type: text/html; charset=GBK Content-Transfer-Encoding: base64 Content-Disposition: inline PFA+1qOPqurMPEJSPj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08QlI+PEJSPjxGT05U IGNvbG9yPSNmZmZmZmY+t9w8L0ZPTlQ+1Yg8Rk9OVCBjb2xvcj0jZmZmZmZmPrLssLo8L0ZPTlQ+ PEJSPjxGT05UIGNvbG9yPSNmZmZmZmY+s/neazwvRk9OVD6y6TxGT05UIGNvbG9yPSNmZmZmZmY+ scm07jwvRk9OVD48QlI+PEZPTlQgY29sb3I9I2ZmZmZmZj60wLfytqc8L0ZPTlQ+ytU8Rk9OVCBj b2xvcj0jZmZmZmZmPr2Jt+48L0ZPTlQ+PEJSPjxGT05UIGNvbG9yPSNmZmZmZmY+tKi28rHH7n48 L0ZPTlQ+uL08Rk9OVCBjb2xvcj0jZmZmZmZmPrG0tKs8L0ZPTlQ+PEJSPjxGT05UIGNvbG9yPSNm ZmZmZmY+sMW+SbK1traz+TwvRk9OVD68/jxGT05UIGNvbG9yPSNmZmZmZmY+tP2wwzxCUj48QlI+ PEZPTlQgY29sb3I9IzAwMDAwMD49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9GT05U PjxCUj48L0ZPTlQ+PEJSPjxCUj4yMDEyxOowMtTCMDTI1SAxMzoxMzozNDxCUj48QlI+PEJSPjxC Uj48QlI+PC9QPg== --=-sinamail_alt_f8e11f92c7d2809c2eb4e5f7e94137e8-- --=-sinamail_mix_658d477463fcbd0c430fecfde2a8f7af Content-Type: application/vnd.ms-excel; name="=?GBK?B?MjAxMsTqMi001MLX7i3Qwi2/zi2zzC54bHM=?=" Content-Disposition: attachment; filename="=?GBK?B?MjAxMsTqMi001MLX7i3Qwi2/zi2zzC54bHM=?=" Content-Transfer-Encoding: base64 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAALAAAAAQAAAAAAAAAA EAAAEAUAAAEAAAD+////AAAAAAAAAABzAAAA9AAAAHUBAAD2AQAAfwIAAPgCAAB5AwAA+gMAAH4E AAD8BAAA//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////9 ////EgUAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8A AAAQAAAAEQAAABIAAAD+////FAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAA AB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAA LAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6 AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgA AABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAA AFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAA ZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAAB0 AAAA/f///3UAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAgAAAAFIA bwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAWAAUA//////////8CAAAAIAgCAAAAAADAAAAAAAAARgAAAADAtWskJuLMAcDvpeNH4swB EQUAAEACAAAAAAAAVwBvAHIAawBiAG8AbwBrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAABIAAgEFAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAATAAAAUOQJAAAAAABFAFQARQB4AHQARABhAHQAYQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAACAQEAAAADAAAA/////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACKIAAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJ AG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIB/////wQA AAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKABAAAAAAAACQgQ AAEGAA+aAtUHAAAAAAgAAAD7DwYcFM5OGoAD////AQAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAA wP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA /wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAAAD///8BAADA/wAAAAAAAMD/ AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP////8BAADA/wEBAAAAAAAQAAAAAAAAAEYA AAAAAADA/////wEAAMD/AAAAAAAAwP8AAAAAAADA/////wEAAMD/AAAAAAAAwP8AAAAAAADA/wAA AAAAAMD/AAAAAAAAwP////8BAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/////wEAAMD/BQEA AAAAAAAAAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/////wEAAMD/AAAAAAAAwP8AAAAA AADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAA AMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AQEAAAAAAAQAAAAAAADA/wAAAAEAAAAAAAAAAAAA wP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8AAAAAAADA /wAAAAAAAMD/////AQAAwP////8BAADA/////wEAAMD/BREEAAAAQID///8BAADA/wEBAAAAAAAC AQEAAAAAQIIAAAABAAAAAAUBAAAAAECAAAAAAAAAwP8AAAAAAADA/////wEAAMD/AQEAAAAAQID/ //8BAADA/////wEAAMD/////AQAAwP8BAQAAAAAAIP///wEAAMD/////AQAAwP////8BAADA/0UB AAAAAAAA////AQAAwP////8BAADA/////wEAAMD/////AQAAwP////8BAADA/////wEAAMD/AQEA AAAAQNAAAAAAAADA/////wEAAMD/////AQAAwP8AAAAAAADA/////wEAAMD/////AQAAwP8AAAAA AADA/////wEAAMD/////AQAAwP8AAAAAAADA/wAAAAAAAMD/////AQAAwP8BAQAAAAAAAP///wEA AMD/////AQAAwP8AAAAAAADA/wAAAAAAAMD/AAAAAAAAwP8BAQAAAAAAIAURBAAAAEDA////AQAA wP8FCQIAAABAgAAAAAAAAMD/AAAAAAAAwP8BAQAAAAAABAEBAAAAAAAI////AQAAwP8AAAABAAAA AAUBAAAAAAAC////AQAAwP8FAQAAAABAgP///wEAAMD/////AQAAwP////8BAADA/////wEAAMD/ AAAAAAAAwP8AAAAAAADA/wEBAAAAAAACAAAAAAAAwP////8BAADA/wAAAAAAAMD/AAAAAAAAwP8F AQAAAABAAv///wEAAMD/BQEAAAAAQAIAAAAAAADA/////wEAAMD/////AQAAwP8AAAAAAADA//// /wEAAMD/AAAAAAAAwP8AAAABAAAAAP///wEAAMD/AAAAAAAAwP////8BAADA/////wEAAMD/AAAA AQAAAAAAAAAAAADA/////wEAAMD/AAAAAAAAwP////8BAADA/////wEAAMD/AAAAAAAAwP////8B AADA/////wEAAMD/AQEAAAAAAAgBAQAAAAAAgAAAAAAAAMD/////AQAAwP8A/h8AAADA//z/fwAA AMD//P9/AAAAwP///38BAADA//z/HwAAAMD///9/AAAAwP8A/v8AAADA//z/fwAAAMD///9/AQAA wP8AAAAAAADA/wAA4AAAAMD/////AAAAwP8A/h8AAADA//z/HwAAAMD//P9/AAAAwP///38AAADA //z/HwAAAMD/AADgAAAAwP8AAOAAAADA/wAA4AAAAMD/AP7/AAAAwP/8/x8AAADA/wD+HwAAAMD/ /P//AAAAwP////8AAADA//z/HwAAAMD//P8fAAAAwP8AAGAAAADA//wBYAAAAMD/AP5/AAAAwP/8 /38AAADA//z/fwAAAMD///9/AQAAwP/8/38AAADA//z/fwAAAMD///9/AQAAwP////8AAADA//// fwAAAMD/////AAAAwP/8/38AAADA/wD+fwAAAMD/AABgAAAAwP//AeAAAADA//8B4AAAAMD/AABg AAAAwP8A/n8AAADA//wBYAAAAMD/AABgAAAAwP8AAGAAAADA/wD+fwAAAMD/AABgAAAAwP8A/n8A AADA////fwEAAMD/EP5/AAAAwP//AeAAAADA////fwAAAMD//P9/AAAAwP/8/38AAADA//z/fwAA AMD//P9/AAAAwP/8/38AAADA//z/fwAAAMD///9/AAAAwP///38AAADA////fwAAAMD///9/AQAA wP///38BAADA////fwEAAMD///9/AQAAwP///38BAADA////fwEAAMD//P9/AQAAwP/8/38BAADA //z/fwAAAMD///9/AQAAwP///38BAADA//z/fwAAAMD///9/AQAAwP8AAGAAAADA/wD+fwAAAMD/ AABgAAAAwP8A/n8AAADA/wAAYAAAAMD/AP5/AAAAwP///38AAADA////fwAAAMD///9/AAAAwP/8 /38AAADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD//P9/AAAAwP/8/38AAADA/wD+ fwAAAMD/AP5/AAAAwP8A/n8AAADA//z/fwAAAMD//P9/AAAAwP8AEHwAAADA/wAAeAAAAMD/ABR9 AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA//z/fwAAAMD//P9/AAAAwP/8/38A AADA/wAAeAAAAMD/ABR9AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP/8/38AAADA//z/fwAA AMD/AAB4AAAAwP8AEHwAAADA/wAUfQAAAMD/AP5/AAAAwP/8/38AAADA/wD+fwAAAMD//P9/AAAA wP8AAGAAAADA/wAQfAAAAMD/AAB4AAAAwP8AFH0AAADA/wD+fwAAAMD//P9/AAAAwP8A/n8BAADA /wD+fwAAAMD/AP5/AAAAwP8AAGAAAADA/wAQfAAAAMD/AAB4AAAAwP8AEHwAAADA/wAUfQAAAMD/ AP5/AAAAwP/8/38AAADA/wD+fwEAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A /n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+ fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA//z/fwAAAEBGAP5/ AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8A AADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wAUfQAAAMD/AAR5AAAAwP8A/n8AAADA//wFeQAA AMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AJJ8AAAAwP8AgngAAADA/wD+fwAAAMD//P9/AAAA wP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8AFH0AAADA/wAQfAAAAMD/AJJ8AAAAwP8A/n8AAADA //z/fwAAAEBWAP5/AAAAwP/8/38AAADA//z/fwAAAMD//P9/AAAAwP8A/n8AAADA/wAEeQAAAMD/ AP5/AAAAwP/8BXkAAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wCCeAAAAMD/AJJ8AAAAwP8A /n8AAADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AAR5AAAAwP8AFH0AAADA/wD+ fwAAAMD/AP5/AAAAwP/8BXkAAADA/wD+fwAAAMD/AAR5AAAAwP8A/n8AAADA/wCCeAAAAMD/AJJ8 AAAAwP8A/n8AAADA/wD+fwAAAMD//P9/AAAAwP8A/n8AAADA/wD+fwAAAMD/ABR9AAAAwP8AEHwA AADA/wCSfAAAAMD/AP5/AAAAwP8A/n8AAADA/wAEYQAAAMD/ABR9AAAAwP8ABHkAAADA/wD+fwAA AMD//AV5AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8AgmAAAADA/wCSfAAAAMD/AIJ4AAAA wP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/ABRlAAAAwP8AEGQAAADA /wCSZAAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/ AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP/8/38AAADA//z/fwAAAMD/AARhAAAAwP8A FH0AAADA/wAEeQAAAMD/ABR9AAAAwP8A/n8AAADA//wFeQAAAMD/AP5/AAAAwP8A/n8AAADA/wD+ fwAAAMD/AIJgAAAAwP8AknwAAADA/wCCeAAAAMD/AJJ8AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/ AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wAUZQAAAMD/ABBkAAAAwP8AkmQA AADA/wD+fwAAAMD/AP7/AAAAwP8A/v8AAADA/wD+/wAAAMD/AP7/AAAAwP8AAGAAAADA/wD+fwAA AMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD//P9/AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAA wP8A/n8AAADA/wAUfQAAAMD/ABB8AAAAwP8AknwAAADA/wAEeQAAAMD/AAB4AAAAwP8AgngAAADA /wAUfQAAAMD/ABB8AAAAwP8AknwAAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwEAAMD/ /AV5AAAAwP/8/38AAADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AAR5AAAAwP8A /n8AAADA/wAA4AAAAMD///9/AAAAwP8AAGAAAADA/wAUfQAAAMD/ABB8AAAAwP8AknwAAADA/wAE eQAAAMD/AAB4AAAAwP8AgngAAADA/wAUfQAAAMD/AJJ8AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/ AAAAwP/8BXkAAADA//z/fwAAAMD//P9/AAAAwP8A/n8BAADA/wD+fwAAAMD//P9/AAAAwP8A/n8A AADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+/wAAAMD/AP7/AAAAwP8A/v8AAADA/wD+fwAA AMD/AP5/AAAAwP8A/n8AAADA/wD+/wAAAMD/AABgAAAAwP8AFH0AAADA/wAQfAAAAMD/AJJ8AAAA wP8ABHkAAADA/wAAeAAAAMD/AIJ4AAAAwP8AFH0AAADA/wAQfAAAAMD/AJJ8AAAAwP8AFH0AAADA /wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA//wFeQAAAMD//P9/AAAAwP/8/38AAADA/wD+fwAAAMD/ /P9/AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+/wAAAMD/AP7/AAAAwP8A /v8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wAEeQAAAMD/AP7/AAAAwP8AAGAAAADA/wAU fQAAAMD/ABB8AAAAwP8AknwAAADA/wAEeQAAAMD/AAB4AAAAwP8AgngAAADA/wAUfQAAAMD/ABB8 AAAAwP8AknwAAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA//z/fwAAAMD//P9/AAAAwP/8/38A AADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+/wAAAMD/AP7/AAAAwP8A/v8AAADA/wD+/wAA AMD/AP5/AAAAwP8A/n8AAADA//z/fwAAAMD//P9/AAAAwP8A/n8AAADA/wD+fwAAAMD/AABgAAAA wP8AAHgAAADA/wAQfAAAAMD/AP5/AAAAwP/8/38AAADA/wAEeQAAAMD/ABR9AAAAwP8A/n8AAADA //z/fwAAAMD/AIJ4AAAAwP8AknwAAADA/wD+fwAAAMD//P9/AAAAwP8AFH0AAADA/wAQfAAAAMD/ AJJ8AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP/8/38AAADA/wD+fwAAAMD/AP5/AAAAwP8A /v8AAADA/wD+/wAAAMD/AP7/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/v8AAADA//zn eQAAAMD//Od5AAAAwP///38AAADA////fwAAAMD///9/AAAAwP///38AAADA/wAAYAAAAMD/AAB4 AAAAwP8AEHwAAADA/wD+fwAAAMD//P9/AAAAwP/8/38AAADA//z/fwAAAMD/AP7/AAAAwP8A/n8A AADA/wAEeQAAAMD/ABR9AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP8A/v8AAADA/wD+fwAA AMD/AIJ4AAAAwP8AknwAAADA/wD+fwAAAMD//P9/AAAAwP8A/n8AAADA/wD+/wAAAMD/AP5/AAAA wP8AFH0AAADA/wAQfAAAAMD/AJJ8AAAAwP8A/n8AAADA/wD+fwAAAMD/AP7/AAAAwP///38AAADA ////fwAAAMD/ABR9AAAAwP8AEHwAAADA/wCSfAAAAMD/AAR5AAAAwP8AAHgAAADA/wCCeAAAAMD/ AP5/AQAAwP8Q/v8AAADA//z3fQAAAMD//O97AAAAwP/873sAAADA//zvewAAAMD//O97AAAAwP/8 /38AAADA///v+wEAAMD///9/AAAAwP/873sAAADA/wAAYAAAAMD/ABR9AAAAwP8AEHwAAADA/wCS fAAAAMD/AAR5AAAAwP8AAHgAAADA/wCCeAAAAMD/ABR9AAAAwP8AEHwAAADA/wCSfAAAAMD/ABR9 AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP/8BXkAAADA//z/fwAAAMD//P9/AAAAwP8A/n8A AADA//z/fwAAAMD/AP5/AAAAwP/8/38AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAA AMD/AP5/AAAAwP8ABHkAAADA/wD+/wAAAMD/AP7/AAAAwP8A/v8AAADA/wD+/wAAAMD///9/AQAA wP8AAGAAAADA/wAUZQAAAMD/ABBkAAAAwP8AkmQAAADA/wAEeQAAAMD/AP5/AAAAwP8A/n8AAADA /wD+fwAAAMD//AV5AAAAwP/8/38AAADA//z/fwAAAMD/AP5/AQAAwP8A/n8BAADA/wD+fwAAAMD/ AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD//P9/AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP8A /n8AAADA/wD+/wAAAMD/AP7/AAAAwP8A/v8AAADA/wD+/wAAAMD/AABgAAAAwP8AFGUAAADA/wAQ ZAAAAMD/AJJkAAAAwP8ABGEAAADA/wAAYAAAAMD/AIJgAAAAwP8ABHkAAADA/wD+fwAAAMD/AP5/ AAAAwP8A/n8AAADA//wFeQAAAMD//P9/AAAAwP/8/38AAADA/wD+fwEAAMD/AP5/AQAAwP8A/n8A AADA/wD+fwAAAMD/AP5/AAAAwP8A/n8BAADA/wD+/wAAAMD/AP7/AQAAwP8A/v8AAADA/wD+/wAA AMD/AP7/AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AAAAwP/8/38AAADA/wD+fwAAAMD/AP5/AAAA wP/8/38AAADA/wAUfQAAAMD/ABB8AAAAwP8AknwAAADA/wD+fwAAAMD/AP5/AAAAwP///38AAADA /wD+fwAAAMD/AP5/AQAAwP8AAGAAAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wAEYQAAAMD/ AIJgAAAAwP8AFGUAAADA/wAQZAAAAMD/AJJkAAAAwP/8/38AAADA////fwAAAMD///9/AAAAwP8A AGAAAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA////fwAAAMD///9/AQAAwP///38BAADA//// fwEAAMD/AAAAAAAAAED8/38AAABAVgD+fwAAAMD//P9/AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/ AAAAwP/8/38AAABAVgD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8ABHkA AADA/wAAYAAAAAAAAP5/AAAAwP8A/n8AAADA/wD+fwAAAMD/AP5/AAAAwP8A/n8AAADA/wAEeQAA AMD/ABR9AAAAwP8AEHwAAADA/wCSfAAAAMD/AAB4AAAAwP8AgngAAADA/wAUfQAAAMD/ABB8AAAA wP8AknwAAADA/wAUfQAAAMD//AV5AAAAwP/8/38AAADA//z/fwAAAMD/AABgAAAAwP8A/n8AAADA //zneQAAAMD/AP5/AAAAwP8FAWAAAADA//z/fwAAAMD/AP5/AQAAwP8A/n8AAADA/wAEeQAAAMD/ ABR9AAAAwP8A/n8AAADA//z/fwAAAMD/AP5/AQAAwP8A/n8AAADA/wAEeQAAAMD/ABR9AAAAwP8A /n8AAADA//wFeQAAAMD/AAR5AAAAwP8A/n8AAADA/wD+fwEAAMD/AP5/AAAAwP8A/n8AAADA/wD+ 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 tAABAAgAvAIAAAAAhhACAYtbU08xABQA8AABAAgAvAIAAAAAhhACAYtbU08xABQA8AAAAAoAkAEA AAAAhhACAYtbU08xABQAyAABAAoAvAIAAAAAhhACAYtbU08xABQAkAEBAP9/vAIAAAAAhhACAdGe U08xABQAtAAAADAAkAEAAAAAhhACAYtbU08xABQAGAEBAP9/vAIAAAAAhhACAdGeU08xABQAyAAB AD4AvAIAAAAAhhACAYtbU08xABQAyAAAAAwAkAEAAAAAhhACAYtbU08xACYAyAAAAP9/kAEAAAAB AhALAVcAaQBuAGcAZABpAG4AZwBzACAAMgAxABQAtAADABQAvAIAAAAAhhACAYtbU08xABQAtAAH ABQAvAIAAAEAhhACAYtbU08xABQAyAAAABQAkAEAAAAAhhACAYtbU08xABQAyAAAAP9/kAEAAAAA hhACAdGeU08xABQAtAABAP9/vAIAAAAAhhACAYtbU08xABQAtAAAAAoAkAEAAAAAhhACAYtbU08x ABQAyAABAP9/vAIAAAAAhhACAYtbU08xABQAtAADAP9/vAIAAAAAhhACAYtbU08xABoA0gABAP9/ vAIAAAACABAFAUEAcgBpAGEAbAAxABQAtAACADgAkAEAAAAAhhACAYtbU08eBCsABQATAAEiAOX/ IgAjACwAIwAjADAAOwAiAOX/IgBcAC0AIwAsACMAIwAwAB4ENQAGABgAASIA5f8iACMALAAjACMA MAA7AFsAUgBlAGQAXQAiAOX/IgBcAC0AIwAsACMAIwAwAB4ENwAHABkAASIA5f8iACMALAAjACMA MAAuADAAMAA7ACIA5f8iAFwALQAjACwAIwAjADAALgAwADAAHgRBAAgAHgABIgDl/yIAIwAsACMA IwAwAC4AMAAwADsAWwBSAGUAZABdACIA5f8iAFwALQAjACwAIwAjADAALgAwADAAHgRpACoAMgAB XwAgACIA5f8iACoAIAAjACwAIwAjADAAXwAgADsAXwAgACIA5f8iACoAIABcAC0AIwAsACMAIwAw AF8AIAA7AF8AIAAiAOX/IgAqACAAIgAtACIAXwAgADsAXwAgAEAAXwAgAB4ELgApACkAAF8gKiAj LCMjMF8gO18gKiBcLSMsIyMwXyA7XyAqICItIl8gO18gQF8gHgR5ACwAOgABXwAgACIA5f8iACoA IAAjACwAIwAjADAALgAwADAAXwAgADsAXwAgACIA5f8iACoAIABcAC0AIwAsACMAIwAwAC4AMAAw AF8AIAA7AF8AIAAiAOX/IgAqACAAIgAtACIAPwA/AF8AIAA7AF8AIABAAF8AIAAeBDYAKwAxAABf ICogIywjIzAuMDBfIDtfICogXC0jLCMjMC4wMF8gO18gKiAiLSI/P18gO18gQF8gHgQaABcAFQAA XCQjLCMjMF8pO1woXCQjLCMjMFwpHgQfABgAGgAAXCQjLCMjMF8pO1tSZWRdXChcJCMsIyMwXCke BCAAGQAbAABcJCMsIyMwLjAwXyk7XChcJCMsIyMwLjAwXCkeBCUAGgAgAABcJCMsIyMwLjAwXyk7 W1JlZF1cKFwkIywjIzAuMDBcKR4EdQCwADgAAV8ALQAiAOX/IgAqACAAIwAsACMAIwAwAC4AMAAw AF8ALQA7AFwALQAiAOX/IgAqACAAIwAsACMAIwAwAC4AMAAwAF8ALQA7AF8ALQAiAOX/IgAqACAA IgAtACIAPwA/AF8ALQA7AF8ALQBAAF8ALQAeBGUAsQAwAAFfAC0AIgDl/yIAKgAgACMALAAjACMA MABfAC0AOwBcAC0AIgDl/yIAKgAgACMALAAjACMAMABfAC0AOwBfAC0AIgDl/yIAKgAgACIALQAi AF8ALQA7AF8ALQBAAF8ALQDgABQAAAAAAPX/EAAAAAAAAAAAAAAAwCDgABQAAQAAAPX/EAAA9AAA AAAAAAAAwCDgABQAAQAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAgAAAPX/EAAA9AAAAAAAAAAAwCDg ABQAAgAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/ EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA9AAAAAAA AAAAwCDgABQAAAAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA9AAAAAAAAAAAwCDgABQA AAAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA 9AAAAAAAAAAAwCDgABQAAAAAAPX/EAAA9AAAAAAAAAAAwCDgABQAAAAAAAEAEAAAAAAAAAAAAAAA wCDgABQAAAAJAPX/EAAA+AAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAA APX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAA AAAAAAAAwCDgABQADAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDg ABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/ IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAA AAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQABwAAAPX/EAAAAAAAAAAAAAAAwCDgABQA AAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAAAAAAAAAAAAAAwCDgABQAAAAAAPX/IAAA AAAAAAAAAAAAwCDgABQACAAAAPT/AAAA9AAAAAAAAAAAwCDgABQACAAAAPX/EAAA9AAAAAAAAAAA wCDgABQACAAAAPX/EAAA9AAAAAAAAAAAwCDgABQACAAAAPX/EAAA9AAAAAAAAAAAwCDgABQACAAA APX/EAAA9AAAAAAAAAAAwCDgABQACAAAAPX/EAAA9AAAAAAAAAAAwCDgABQACAAAAPX/EAAA9AAA AAAAAAAAwCDgABQACAAAAPX/EAAA9AAAAAAAAAAAwCDgABQACAAAAPX/EAAA9AAAAAAAAAAAwCDg ABQAAACwAPX/EAAA+AAAAAAAAAAAwCDgABQAAACxAPX/EAAA+AAAAAAAAAAAwCDgABQAAAArAPX/ EAAA+AAAAAAAAAAAwCDgABQAAAApAPX/EAAA+AAAAAAAAAAAwCDgABQACwAAAPT/AAAA9AAAAAAA AAAAwCDgABQADQAAAAEAEAAAKAAAAAAAAAAAwCDgABQADgAAAAEAGAAAeBERQCBAIAAEKyDgABQA DgAAAAEAEgAAeBERQCBAIAAEKyDgABQADgAxAFEBGgAA/BERQCBAIAAEKyDgABQADgAAAAEAEgAA OAAAAAAAAAAAwCDgABQADQAAAAEAEAAAaAAAAAAAAAAAwCDgABQADgAAAAEAEgAAeBERQCBAIAAE KSDgABQADgAxAFEBGgAA/BERQCBAIAAEKSDgABQADQAAAAEAEAAACAAAAAAAAAAAwCDgABQADQAA AAEAEAAASAAAAAAAAAAAwCDgABQADwAAAFEBEQAA+AAAAAAAAAAAwCDgABQADgAAAAEAEAAAKAAA AAAAAAAAwCDgABQADgAAAAEAGgAAOAAAAAAAAAAAwCDgABQADgAAAAEAGAAAeBERQCBAIAAEKSDg ABQADgAAABECFQAA+BARACBAIAAEKSDgABQAEAAAAAEAEgAAOAAAAAAAAAAAwCDgABQAAAAAAAEA EAAASAAAAAAAAAAAwCDgABQACgAAAAEAEAAASAAAAAAAAAAAwCDgABQAEQAAAAEAEAAASAAAAAAA AAAAwCDgABQAEQAAAAEAEAAAaAAAAAAAAAAAwCDgABQAEQAAAAEAEQAAOAAAAAAAAAAAwCDgABQA EQAAAAEAEAAAKAAAAAAAAAAAwCDgABQADQAAAFEBEgAA+AAAAAAAAAAAwCDgABQAEgAAAAEAEgAA OAAAAAAAAAAAwCDgABQACgAAAAEAEgAAOAAAAAAAAAAAwCDgABQAAAAAAAEAEAAASAAAAAAAAAAE CSDgABQAAAAAAAEAEQAAWAAAAAAAAAAECSDgABQAAAAAAAEAEAAAaAAAAAAAAAAECSDgABQABwAA AAEAGAAAeBERQCBAIAAEKyDgABQABwAAAAEAEgAAeBERQCBAIAAEKyDgABQABwAxAFEBGgAA/BER QCBAIAAEKyDgABQABwAAAAEAGAAAeBERQCBAIAAEKSDgABQABwAAAAEAEgAAeBERQCBAIAAEKSDg ABQABwAxAFEBGgAA/BERQCBAIAAEKSDgABQACgAAAFEBEgAA+AAAAAAAAAAAwCDgABQABwAAABEC EAAA+BARACBAIAAEKSDgABQAEQAAAFEBEgAA+AAAAAAAAAAAwCDgABQABwAAAAEAGgAAeBERQCBA IAAEKSDgABQABgAAAAEAEAAAaAAAAAAAAAAECSDgABQABgAAAAEAEAAASAAAAAAAAAAECSDgABQA DwAAAFEBEgAA2AAAAAAAAAAAwCDgABQAEwAAAFEBEgAA2AAAAAAAAAAAwCDgABQAAAAAADEBIAAA SAAAAAAAAAAECSDgABQABgAAADEBIAAAaAAAAAAAAAAECSDgABQAAAAAADEBEQAAWAAAAAAAAAAE CSDgABQABgAAADEBIAAASAAAAAAAAAAECSDgABQABgAAALEBIAAASAAAAAAAAAAECSDgABQABgAA ALEBIAAAaAAAAAAAAAAECSDgABQABgAAAAECIAAASAAAAAAAAAAECSDgABQABgAAAAECIAAAaAAA AAAAAAAECSDgABQABwAxAFEBGgAA/BEQQCBAIAAEKSDgABQABgAAAAEAGAAAeAAAAAAAAAAECSDg ABQADQAAAFEBEgAA2AAAAAAAAAAAwCDgABQACgAAAFEBEgAA+CACQCBAAAAEKiDgABQABwAAAAEA EgAAeBEQQCBAIAAEKSDgABQABwAAAAEAGAAAeBEQQCBAIAAEKSDgABQABwAAAEECFQAA+BAQACBA IAAEKSDgABQACgAAAFEBEgAA+CAgQCAAIAAEKiDgABQACgAAAFEBEgAA+CAAQCAAAAAEKiDgABQA DgAxAFEBGgAA/CERQCBAIAAEKSDgABQABwAxAFEBGgAA/CERQCBAIAAEKSDgABQADgAxAFEBGgAA /CERQCBAIAAEKyDgABQABwAxAFEBGgAA/CERQCBAIAAEKyDgABQABwAxAFEBGgAA/CEQQCAAIAAE KSDgABQABwAxAFEBGgAA/CEQQCBAIAAEKSDgABQAEAAAAAEAEgAAeBIgQCAAIAAEMCDgABQAEAAx AFEBGgAA/CESQCBAIAAENCDgABQAEAAxAFEBGgAA/BESQCBAIAAENCDgABQAEAAAAAEAGgAAeBES QCBAIAAENCDgABQAEAAxAFEBGgAA/BICQCBAIAAENCDgABQABgAAAGEBIAAASAAAAAAAAAAECSDg ABQABgAAAGEBIAAAaAAAAAAAAAAECSDgABQABgAAAOEBIAAASAAAAAAAAAAECSDgABQABgAAAOEB IAAAaAAAAAAAAAAECSDgABQABgAAAPEBIAAASAAAAAAAAAAECSDgABQABgAAAPEBIAAAaAAAAAAA AAAECSDgABQAFQAAABECFQAA+BARACBAIAAEKyDgABQAFQAAAFECFQAA+BARACBAIAAEKSDgABQA FQAAABECFQAA+BARACBAIAAEKSDgABQABgAAAAEAIgAAeAAAAAAAAAAEMSDgABQAFgAAAAEAIgAA eAAAAAAAAAAEMSDgABQAFwAAAAEAEAAAaAAAAAAAAAAECSDgABQABgAAAAEAEAAAaAAAAAAAAAAE KSDgABQABgAAAAEAEAAAaAAAAAAAAAAELiDgABQABgAAADEBIgAAeAAAAAAAAAAEMSDgABQAFgAA ADEBIgAAeAAAAAAAAAAEMSDgABQABgAAADEBIAAAaAAAAAAAAAAEKSDgABQABgAAADEBIAAAaAAA AAAAAAAELiDgABQAGAAAADEBIAAAaAAAAAAAAAAECSDgABQABgAAAGEBIgAAeAAAAAAAAAAEMSDg ABQAFgAAAGEBIgAAeAAAAAAAAAAEMSDgABQABgAAAGEBIAAAaAAAAAAAAAAEKSDgABQABgAAAGEB EQAAeAAAAAAAAAAEKSDgABQABgAAAGEBIAAAaAAAAAAAAAAELiDgABQAGAAAAGEBIAAAaAAAAAAA AAAECSDgABQABgAAAAEAEQAAeAAAAAAAAAAEKSDgABQABgAAAAECIgAAeAAAAAAAAAAEMSDgABQA FgAAAAECIgAAeAAAAAAAAAAEMSDgABQABgAAAAECIAAAaAAAAAAAAAAEKSDgABQABgAAAAECEQAA eAAAAAAAAAAEKSDgABQABgAAAAECIAAAaAAAAAAAAAAELiDgABQABgAAALEBIgAAeAAAAAAAAAAE MSDgABQAFgAAALEBIgAAeAAAAAAAAAAEMSDgABQABgAAALEBIAAAaAAAAAAAAAAEKSDgABQABgAA ALEBEQAAeAAAAAAAAAAEKSDgABQABgAAALEBIAAAaAAAAAAAAAAELiDgABQAFgAAAPEBIQAAeAAA AAAAAAAEMSDgABQABgAAAPEBIAAASAAAAAAAAAAEKSDgABQABgAAAPEBIAAAaAAAAAAAAAAEKSDg ABQABgAAAPEBEQAAeAAAAAAAAAAEKSDgABQABgAxAPEBIAAAbAAAAAAAAAAEKSDgABQABgAAAPEB IAAAaAAAAAAAAAAELiDgABQAGQAAAAEAEAAAaAAAAAAAAAAEKSDgABQABgAAAOEBIAAASAAAAAAA AAAEKSDgABQABgAAAOEBIAAAaAAAAAAAIAAEKSDgABQABgAAAOEBIAAAaAAAAAAAAAAEKSDgABQA BgAAAOEBEQAAeAAAAAAAAAAEKSDgABQABgAxAOEBIAAAbAAAAAAAAAAEKSDgABQABgAAAOEBIAAA aAAAAAAAAAAELiDgABQABgAAAAEAEAAAaAAAAABAAAAELiDgABQABgAAAAEAEAAAaCAAAB8AAAAE KSDgABQABgAAAAEAEAAAaCAAAB8AAAAELiDgABQABgAAAAEAEAAAaCAAAB8AAAAECSDgABQABgAA ADEBIAAAaCAAAB8AAAAELiDgABQABgAAAAEAEAAAaCAAAB8AAAAEMSDgABQABgAAAAEAEAAAaAIA PgAAAAAEKSDgABQABgAAAAEAEAAAaAIAPgAAAAAELiDgABQABgAAAAEAEAAAaAIAPgAAAAAECSDg ABQABgAAADEBIAAAaAIAPgAAAAAELiDgABQABgAAAAEAEAAAaAIAPgAAAAAEMSDgABQABgAAAAEA EAAAaCAgAB8AHwAEKSDgABQABgAAAAEAEAAAaAAgAAAAHwAEKSDgABQABgAAAAEAEAAAaAIgPgAA HwAEKSDgABQAGgAAAAEAEAAAaCACAB8+AAAEMSDgABQABgAAAAEAEAAAaAICPgA+AAAEMSDgABQA GwAAABECIwAAeAACAAA+AAAEMSDgABQABgAAADEBIAAAaCAAAB8AAAAEKSDgABQABgAAADEBIAAA aCAAAB8AAAAECSDgABQABgAAADEBIAAAaCAAAB8AAAAEMSDgABQABgAAADEBIAAAaAIAPgAAAAAE KSDgABQABgAAADEBIAAAaAIAPgAAAAAECSDgABQABgAAADEBIAAAaAIAPgAAAAAEMSDgABQABgAA ADEBIAAAaCAgAB8AHwAEKSDgABQABgAAADEBIAAAaAAgAAAAHwAEKSDgABQABgAAADEBIAAAaAIg PgAAHwAEKSDgABQABgAAADEBIAAAaCACAB8+AAAEMSDgABQABgAAADEBIAAAaAICPgA+AAAEMSDg ABQABgAAAGEBIAAAaCAAAB8AAAAEKSDgABQABgAAAGEBEQAAeCAAAB8AAAAEKSDgABQABgAAAGEB IAAAaCAAAB8AAAAELiDgABQABgAAAGEBIAAAaCAAAB8AAAAECSDgABQABgAAAGEBIAAAaCAAAB8A AAAEMSDgABQABgAAAGEBIAAAaAIAPgAAAAAEKSDgABQABgAAAGEBEQAAeAIAPgAAAAAEKSDgABQA BgAAAGEBIAAAaAIAPgAAAAAELiDgABQABgAAAGEBIAAAaAIAPgAAAAAECSDgABQABgAAAGEBIAAA aAIAPgAAAAAEMSDgABQABgAAAGEBIAAAaCAgAB8AHwAEKSDgABQABgAAAGEBIAAAaAAgAAAAHwAE KSDgABQABgAAAGEBIAAAaAIgPgAAHwAEKSDgABQAGgAAAGEBIAAAaCACAB8+AAAEMSDgABQAGgAA ABECIwAAeAACAAA+AAAEMSDgABQABgAAAGEBIAAAaAICPgA+AAAEMSDgABQABgAAAAEAEQAAeCAA AB8AAAAEKSDgABQABgAAAAEAEQAAeAIAPgAAAAAEKSDgABQABgAAAAEAEAAAaCACAB8+AAAEMSDg ABQABgAAAAECIAAAaCAAAB8AAAAEKSDgABQABgAAAAECEQAAeCAAAB8AAAAEKSDgABQABgAAAAEC IAAAaCAAAB8AAAAELiDgABQABgAAAAECIAAAaCAAAB8AAAAECSDgABQABgAAAAECIAAAaCAAAB8A AAAEMSDgABQABgAAAAECIAAAaAIAPgAAAAAEKSDgABQABgAAAAECEQAAeAIAPgAAAAAEKSDgABQA BgAAAAECIAAAaAIAPgAAAAAELiDgABQABgAAAAECIAAAaAIAPgAAAAAECSDgABQABgAAAAECIAAA aAIAPgAAAAAEMSDgABQABgAAALEBIAAAaCAAAB8AAAAEKSDgABQABgAAALEBIAAAaCAAAB8AAAAE LiDgABQABgAAALEBEQAAeCAAAB8AAAAEKSDgABQABgAAALEBIAAAaCAAAB8AAAAECSDgABQABgAA ALEBIAAAaCAAAB8AAAAEMSDgABQABgAAALEBIAAAaAIAPgAAAAAEKSDgABQABgAAALEBIAAAaAIA PgAAAAAELiDgABQABgAAALEBEQAAeAIAPgAAAAAEKSDgABQABgAAALEBIAAAaAIAPgAAAAAECSDg ABQABgAAALEBIAAAaAIAPgAAAAAEMSDgABQABgAAALEBIAAAaCAgAB8AHwAEKSDgABQABgAAALEB IAAAaAAgAAAAHwAEKSDgABQABgAAALEBIAAAaAIgPgAAHwAEKSDgABQABgAAALEBIAAAaCACAB8+ AAAEMSDgABQABgAAALEBIAAAaAICPgA+AAAEMSDgABQABgAAAPEBIAAAaCAAAB8AAAAEKSDgABQA BgAAAPEBEQAAeCAAAB8AAAAEKSDgABQABgAAAPEBIAAAaCAAAB8AAAAELiDgABQABgAAAPEBIAAA aCAAAB8AAAAECSDgABQABgAAAPEBIAAAaCAAAB8AAAAEMSDgABQABgAAAPEBIAAAaAIAPgAAAAAE KSDgABQABgAAAPEBEQAAeAIAPgAAAAAEKSDgABQABgAAAPEBIAAAaAIAPgAAAAAELiDgABQABgAA APEBIAAAaAIAPgAAAAAECSDgABQABgAAAPEBIAAAaAIAPgAAAAAEMSDgABQABgAAAPEBIAAAaCAg AB8AHwAEKSDgABQABgAAAPEBIAAAaAAgAAAAHwAEKSDgABQABgAAAPEBIAAAaAIgPgAAHwAEKSDg ABQAHAAAAPEBIAAAaCACAB8+AAAEMSDgABQABgAAAPEBIAAAaAICPgA+AAAEMSDgABQABgAAAAEA EAAAaCAAAB9AAAAELiDgABQABgAAAAEAEAAAaAIAPgBAAAAELiDgABQAHAAAAAEAEAAAaCACAB8+ AAAEMSDgABQAFwAAADEBIAAAaAAAAAAAAAAECSDgABQAFwAAAGEBIAAAaAAAAAAAAAAECSDgABQA FwAAAAECIAAAaAAAAAAAAAAECSDgABQAFwAAALEBIAAAaAAAAAAAAAAECSDgABQAFwAAAPEBIAAA aAAAAAAAAAAECSDgABQABgAAAOEBIgAAeAAAAAAAAAAEMSDgABQAFgAAAOEBIgAAeAAAAAAAAAAE MSDgABQABgAAAOEBIAAAaCAAAB8AAAAEKSDgABQABgAAAOEBIAAAaCAAAB8AIAAEKSDgABQABgAA AOEBEQAAeCAAAB8AAAAEKSDgABQABgAAAOEBIAAAaCAAAB8AAAAELiDgABQABgAAAOEBIAAAaCAA AB8AAAAECSDgABQABgAAAOEBIAAAaCAAAB8AAAAEMSDgABQABgAAAOEBIAAAaAIAPgAAAAAEKSDg ABQABgAAAOEBIAAAaAIAPgAAIAAEKSDgABQABgAAAOEBEQAAeAIAPgAAAAAEKSDgABQABgAAAOEB IAAAaAIAPgAAAAAELiDgABQABgAAAOEBIAAAaAIAPgAAAAAECSDgABQABgAAAOEBIAAAaAIAPgAA AAAEMSDgABQABgAAAOEBIAAAaCACAB8+AAAEMSDgABQABgAAAOEBIAAAaAICPgA+AAAEMSDgABQA BgAAAOEBIAAAaCAgAB8AHwAEKSDgABQABgAAAOEBIAAAaAAgAAAAHwAEKSDgABQABgAAAOEBIAAA aAIgPgAAHwAEKSDgABQAFwAAAOEBIAAAaAAAAAAAAAAECSDgABQABgAAAAEAEAAAaCAAAB8AAAAA qSDgABQABgAAAAEAEAAAaAAAAAAAAAAAqSDgABQABgAAAAEAEAAAaAIAPgAAAAAAqSDgABQAFwAA AAEAEAAAaAAAAAAAAAAAqSDgABQAAAAAAAEAEAAASAAAAAAAAAAAiSDgABQABgAAACEBIAAASAAA AAAAAAAECSDgABQABgAAACEBIAAAaCAgAB8AHwAEKSDgABQABgAAACEBIAAAaAAgAAAAHwAEKSDg ABQABgAAACEBIAAAaAIgPgAAHwAEKSDgABQABgAAACEBIAAAaCAAAB8AAAAEKSDgABQABgAAACEB IAAAaAAAAAAAAAAEKSDgABQABgAAACEBIAAAaAIAPgAAAAAEKSDgABQABgAAACEBEQAAeCAAAB8A AAAEKSDgABQABgAAACEBEQAAeAAAAAAAAAAEKSDgABQABgAAACEBEQAAeAIAPgAAAAAEKSDgABQA BgAAACEBIAAAaCAAAB8AAAAEMSDgABQABgAAACEBIgAAeAAAAAAAAAAEMSDgABQABgAAACEBIAAA aAIAPgAAAAAEMSDgABQAFgAAACEBIgAAeAAAAAAAAAAEMSDgABQABgAAACEBIAAAaCACAB8+AAAE MSDgABQABgAAACEBIAAAaAICPgA+AAAEMSDgABQABgAAACEBIAAAaCAAAB8AAAAAqSDgABQABgAA ACEBIAAAaAAAAAAAAAAAqSDgABQABgAAACEBIAAAaAIAPgAAAAAAqSDgABQABgAAACEBIAAAaCAA AB8AAAAELiDgABQABgAAACEBIAAAaAAAAAAAAAAELiDgABQABgAAACEBIAAAaAIAPgAAAAAELiDg ABQAFwAAACEBIAAAaAAAAAAAAAAAqSDgABQABgAAAKEBIAAASAAAAAAAAAAECSDgABQABgAAAKEB IAAAaCAgAB8AHwAEKSDgABQABgAAAKEBIAAAaAAgAAAAHwAEKSDgABQABgAAAKEBIAAAaAIgPgAA HwAEKSDgABQABgAAAKEBIAAAaCAAAB8AAAAEKSDgABQABgAAAKEBIAAAaAAAAAAAAAAEKSDgABQA BgAAAKEBIAAAaAIAPgAAAAAEKSDgABQABgAAAKEBEQAAeCAAAB8AAAAEKSDgABQABgAAAKEBEQAA eAIAPgAAAAAEKSDgABQABgAAAKEBEQAAeAAAAAAAAAAEKSDgABQABgAAAKEBIAAAaCAAAB8AAAAE LiDgABQABgAAAKEBIAAAaAAAAAAAAAAELiDgABQABgAAAKEBIAAAaAIAPgAAAAAELiDgABQABgAA AKEBIAAAaCAAAB8AAAAAqSDgABQABgAAAKEBIAAAaAAAAAAAAAAAqSDgABQABgAAAKEBIAAAaAIA PgAAAAAAqSDgABQAFwAAAKEBIAAAaAAAAAAAAAAAqSDgABQABgAAAKEBIAAAaCAAAB8AAAAEMSDg ABQABgAAAKEBIAAAaAIAPgAAAAAEMSDgABQABgAAAKEBIgAAeAAAAAAAAAAEMSDgABQAFgAAAKEB IgAAeAAAAAAAAAAEMSDgABQABgAAAKEBIAAAaCACAB8+AAAEMSDgABQABgAAAKEBIAAAaAICPgA+ AAAEMSDgABQABgAAAIEBIAAASAAAAAAAAAAECSDgABQABgAAAIEBIAAAaAAAAAAAAAAEKSDgABQA BgAAAIEBEQAAeAAAAAAAAAAEKSDgABQABgAAAIEBIAAAaCAAAB8AAAAEKSDgABQABgAAAIEBEQAA eCAAAB8AAAAEKSDgABQABgAAAIEBIAAAaAIAPgAAAAAEKSDgABQABgAAAIEBEQAAeAIAPgAAAAAE KSDgABQABgAAAIEBIAAAaCAgAB8AHwAEKSDgABQABgAAAIEBIAAAaAAgAAAAHwAEKSDgABQABgAA AIEBIAAAaAIgPgAAHwAEKSDgABQABgAAAIEBIAAAaCAAAB8AAAAEMSDgABQABgAAAIEBIgAAeAAA AAAAAAAEMSDgABQABgAAAIEBIAAAaAIAPgAAAAAEMSDgABQAFgAAAIEBIgAAeAAAAAAAAAAEMSDg ABQABgAAAIEBIAAAaCACAB8+AAAEMSDgABQABgAAAIEBIAAAaAICPgA+AAAEMSDgABQABgAAAIEB IAAAaCAAAB8AAAAAqSDgABQABgAAAIEBIAAAaAAAAAAAAAAAqSDgABQABgAAAIEBIAAAaAIAPgAA AAAAqSDgABQABgAAAIEBIAAAaCAAAB8AAAAELiDgABQABgAAAIEBIAAAaAAAAAAAAAAELiDgABQA BgAAAIEBIAAAaAIAPgAAAAAELiDgABQAFwAAAIEBIAAAaAAAAAAAAAAAqSDgABQADgAAABECFQAA +BARQCBAIAAEKSDgABQAFQAAAGECFQAA+BARQCBAIAAEKSDgABQAHwAAAIECFQAA+BARACBAIAAE KSDgABQABwAAABECFQAA+BARQCBAIAAEKSDgABQABgAAABEBIAAASAAAAAAAAAAECSDgABQABgAA ABEBIAAAaAAAAAAAAAAEKSDgABQABgAAABEBEQAAeAAAAAAAAAAEKSDgABQAFgAAABEBIgAAeAAA AAAAAAAEMSDgABQABgAAABEBIAAAaAAAAAAAAAAAqSDgABQABgAAABEBIAAAaAAAAAAAAAAELiDg ABQABgAAABEBIAAAaCAAAB8AAAAEKSDgABQABgAAABEBEQAAeCAAAB8AAAAEKSDgABQABgAAABEB IAAAaCAAAB8AAAAELiDgABQABgAAABEBIAAAaCAAAB8AAAAAqSDgABQABgAAABEBIAAAaCAAAB8A AAAEMSDgABQABgAAABEBIAAAaAIAPgAAAAAEKSDgABQABgAAABEBEQAAeAIAPgAAAAAEKSDgABQA BgAAABEBIAAAaAIAPgAAAAAELiDgABQABgAAABEBIAAAaAIAPgAAAAAAqSDgABQABgAAABEBIAAA aAIAPgAAAAAEMSDgABQABgAAABEBIAAAaCAgAB8AHwAEKSDgABQABgAAABEBIAAAaAAgAAAAHwAE KSDgABQABgAAABEBIAAAaAIgPgAAHwAEKSDgABQABgAAABEBIAAAaCACAB8+AAAEMSDgABQABgAA ABEBIAAAaAICPgA+AAAEMSDgABQAFwAAABEBIAAAaAAAAAAAAAAAqSDgABQABwAAABECFQAA+BAR QCBAIAAEKyDgABQAHwAAABECFQAA+BARQCBAIAAEKyDgABQABgAxAAEAEAAAbAAAAAAAAAAEKSDg ABQABgAAAAEAGAAAeAAAAAAAAAAAqSDgABQABwAAABECFQAA+BARACBAIAAEKyDgABQABgAAAHEB IAAASAAAAAAAAAAECSDgABQABgAAAHEBIAAAaCAgAB8AHwAEKSDgABQABgAAAHEBIAAAaAAgAAAA HwAEKSDgABQABgAAAHEBIAAAaAIgPgAAHwAEKSDgABQABgAAAHEBIAAAaCAAAB8AAAAEKSDgABQA BgAAAHEBIAAAaAAAAAAAAAAEKSDgABQABgAAAHEBIAAAaAIAPgAAAAAEKSDgABQABgAAAHEBEQAA eCAAAB8AAAAEKSDgABQABgAAAHEBEQAAeAAAAAAAAAAEKSDgABQABgAAAHEBEQAAeAIAPgAAAAAE KSDgABQABgAAAHEBIAAAaCAAAB8AAAAEMSDgABQABgAAAHEBIgAAeAAAAAAAAAAEMSDgABQABgAA AHEBIAAAaAIAPgAAAAAEMSDgABQAFgAAAHEBIgAAeAAAAAAAAAAEMSDgABQABgAAAHEBIAAAaCAC AB8+AAAEMSDgABQABgAAAHEBIAAAaAICPgA+AAAEMSDgABQABgAAAHEBIAAAaCAAAB8AAAAELiDg ABQABgAAAHEBIAAAaAAAAAAAAAAELiDgABQABgAAAHEBIAAAaAIAPgAAAAAELiDgABQABgAAAHEB IAAAaCAAAB8AAAAAqSDgABQABgAAAHEBIAAAaAAAAAAAAAAAqSDgABQABgAAAHEBIAAAaAIAPgAA AAAAqSDgABQAFwAAAHEBIAAAaAAAAAAAAAAAqSDgABQAGgAAAJECIwAAeAACAAA+AAAEMSDgABQA BgAAAAECIAAAaCAgAB8AHwAEKSDgABQABgAAAAECIAAAaAAgAAAAHwAEKSDgABQABgAAAAECIAAA aAIgPgAAHwAEKSDgABQABgAAAAECIAAAaCACAB8+AAAEMSDgABQABgAAAAECIAAAaAICPgA+AAAE MSDgABQAFQAAABECFQAA+BARQCBAIAAEKyDgABQAFQAAADECFQAA+BARACBAIAAEKyDgABQAFQAA ADECFQAA+BARQCBAIAAEKyDgABQABgAAAJEBIAAASAAAAAAAAAAECSDgABQABgAAAJEBIAAAaAIA QAAAAAAECSDgABQABgAAAJEBIAAAaCAAACAAAAAECSDgABQABgAAAJEBIAAAaAAAAAAAAAAECSDg ABQABwAAAHECFQAA+BARACBAIAAEKSDgABQABwAxAFEBGgAA/AERQCBAIAAEKSDgABQABwAxAFEB GgAA/CEBQCBAIAAEKSDgABQABwAxAFEBGgAA/CEQQCBAIAAEKyDgABQAAAAAAAEAEAAACAAAAAAA AAAAwCDgABQAIQAAABECIwAAeAACAAA+AAAEMSDgABQABgAAAJEBIAAAaCAAACAAAAAEMSDgABQA BgAAAJEBIgAAeAAAAAAAAAAEMSDgABQABgAAAJEBIAAAaAIAQAAAAAAEMSDgABQAFgAAAJEBIgAA eAAAAAAAAAAEMSDgABQABgAAAJEBIAAAaCACACBAAAAEMSDgABQAGgAAABECIwAAeAACAABAAAAE MSDgABQABgAAAJEBIAAAaAICQABAAAAEMSDgABQABgAAAJEBIAAAaAAAAAAAAAAEMSDgABQABgAA AJEBIAAAaCAAACAAAAAELiDgABQABgAAAJEBIAAAaAAAAAAAAAAELiDgABQABgAAAJEBIAAAaAIA QAAAAAAELiDgABQAAAAAAAEAEAAAQAAAAAAAAAAECSDgABQAFwAAAJEBIAAAaAAAAAAAAAAECSDg ABQAFwAAAJEBIAAAaAIAQAAAAAAECSDgABQABgAAAJEBIAAAaCAAACAAAAAEKSDgABQABgAAAJEB IAAAaAAAAAAAAAAEKSDgABQABgAAAJEBIAAAaAIAQAAAAAAEKSDgABQABgAAAJEBIAAAaCAgACAA IAAEKSDgABQABgAAAJEBIAAAaAAgAAAAIAAEKSDgABQABgAAAJEBIAAAaAIgQAAAIAAEKSDgABQA BgAAAJEBEQAAeCAAACAAAAAEKSDgABQABgAAAJEBEQAAeAAAAAAAAAAEKSDgABQABgAAAJEBEQAA eAIAQAAAAAAEKSDgABQABgAAAMEBIAAASAAAAAAAAAAECSDgABQABgAAAMEBIAAAaAAAAAAAAAAE CSDgABQABgAAAMEBIAAAaAAAAAAAAAAEMSDgABQAFgAAAMEBIgAAeAAAAAAAAAAEMSDgABQABgAx AMEBIAAAbAAAAAAAAAAELiDgABQABgAAAMEBIAAAaAAAAAAAAAAELiDgABQABgAAAMEBIAAAaAAA AAAAAAAEKSDgABQABgAAAMEBEQAAeAAAAAAAAAAEKSDgABQABgAxAMEBIAAAbAAAAAAAAAAEKSDg ABQAFwAAAMEBIAAAaAAAAAAAAAAECSDgABQABgAAAMEBIAAAaCAAAB8AAAAEKSDgABQABgAAAMEB EQAAeCAAAB8AAAAEKSDgABQABgAAAMEBIAAAaCAAAB8AAAAELiDgABQABgAAAMEBIAAAbCAAAB8A AAAEKSDgABQABgAAAMEBIAAAaCAAAB8AAAAECSDgABQAFwAAAMEBIAAAaCAAAB8AAAAECSDgABQA BgAAAMEBIAAAaCAAAB8AAAAEMSDgABQABgAAAMEBIAAAaAIAPgAAAAAEKSDgABQABgAAAMEBEQAA eAIAPgAAAAAEKSDgABQABgAAAMEBIAAAaAIAPgAAAAAELiDgABQABgAAAMEBIAAAaAIAPgAAAAAE CSDgABQAFwAAAMEBIAAAaAIAPgAAAAAECSDgABQABgAAAMEBIAAAaAIAPgAAAAAEMSDgABQABgAA AMEBIAAAaCAgAB8AHwAEKSDgABQABgAAAMEBIAAAaAAgAAAAHwAEKSDgABQABgAAAMEBIAAAaAIg PgAAHwAEKSDgABQABgAAAMEBIAAAaCACAB8+AAAEMSDgABQABgAAAMEBIAAAaAICPgA+AAAEMSDg ABQABwAAABECFQAA+BARACBAIAAEKSDgABQABgAAAEEBIAAASAAAAAAAAAAECSDgABQABgAAAEEB IAAAaAIAQAAAAAAECSDgABQABgAAAEEBIAAAaCAAACAAAAAECSDgABQABgAAAEEBIAAAaAAAAAAA AAAECSDgABQABgAAAEEBIAAAaCAgACAAIAAEKSDgABQABgAAAEEBIAAAaAAgAAAAIAAEKSDgABQA BgAAAEEBIAAAaAIgQAAAIAAEKSDgABQABgAAAEEBIAAAbCAAACAAAAAEKSDgABQABgAAAEEBIAAA aAAAAAAAAAAEKSDgABQABgAAAEEBIAAAaAIAQAAAAAAEKSDgABQABgAAAEEBIAAAaCAAACAAAAAE KSDgABQABgAAAEEBEQAAeCAAACAAAAAEKSDgABQABgAAAEEBEQAAeAAAAAAAAAAEKSDgABQABgAA AEEBEQAAeAIAQAAAAAAEKSDgABQABgAxAEEBIAAAbAAAAAAAAAAEKSDgABQABgAAAEEBIAAAaCAA ACAAAAAEMSDgABQAHQAAAEEBIgAAeAAAAAAAAAAEMSDgABQABgAAAEEBIAAAaAIAQAAAAAAEMSDg ABQAFgAAAEEBIgAAeAAAAAAAAAAEMSDgABQABgAAAEEBIAAAaCACACBAAAAEMSDgABQABgAAAEEB IAAAaAICQABAAAAEMSDgABQABgAAAEEBIAAAaCAAACAAAAAELiDgABQABgAAAEEBIAAAaAIAQAAA AAAELiDgABQAFwAAAEEBIAAAaAAAAAAAAAAECSDgABQAFwAAAEEBIAAAaAIAQAAAAAAECSDgABQA BgAAAEEBIAAAaAAAAAAAAAAELiDgABQABgAxAEEBIAAAbAAAAAAAAAAELiDgABQAIwAAACECIwAA eAACAABAAAAEMSDgABQACQAAAAEAEAAASAAAAAAAAAAAwCDgABQACQAAAAEAEAAAaAAAAAAAAAAA wCDgABQACQAAAAEAEgAAOAAAAAAAAAAAwCDgABQABgAAAAkAEAAAaAAAAAAAAAAEKSDgABQAIAAA ABkBIgAAeAAAAAAAAAAEMSDgABQABgAAABkBIAAAaAAAAAAAAAAEKSDgABQABgAAAAkAEAAAaAAA AAAAAAAELiDgABQABgAAADkBIAAAaAAAAAAAAAAEKSDgABQAIgAAANkBEwAA2AAAAAAAAAAEMSDg ABQAFAAAAAEAEgAAeAICQABAIAAEMiDgABQAFAAAAAEAEgAAeAACAABAIAAEMiDgABQAFAAAAAEA GgAAeAACAABAIAAEMiDgABQAFAAAAAEAEgAAeCACACBAIAAEMiDgABQADgAAAAEAGgAAfBEhQCBA IAAEMCDgABQADgAAAAEAGgAAfCEhQCBAIAAEMCDgABQAEAAxAFEBGgAA/BIBQCBAAAAEKyDgABQA EAAAAFEBGgAAeBIRQCBAIAAEKSDgABQAEAAAAFEBGgABeBIAQCBAAAAEKyDgABQAEAAAAFEBEgAB eBIBQCBAAAAEKyDgABQAHgAAAFEBGgAAeBIRQCBAIAAEKSDgABQAHgAAAFEBGgAAeBIAQCBAAAAE KyDgABQAHgAAAFEBEgAAeBIAQCBAAAAEKyDgABQAHgAAAFEBEgAAeBIAQCAAAAAEKyDgABQAEAAA AFEBGgAAeBIBQCBAAAAEKyDgABQAEAAAAFEBEgAAeBIQQCAAIAAEKyCTAgQAEIAF/5MCBAAAgAD/ kwI5ABEAGgABOF7EiV8AHCCUTmVr3o8vjR0goYBDZ8BvsVLVbC0ALQBZdXuaOGjDX7pOTWIgACgA MgApAJMCTQASACQAAThexIlfADIAMAAxADEASHJTAFQAVAABTxpO+Vetiwhe+Veti2hRYpfQY0dT CP9UAFQAVACeWxhioFI6X0hyKAAyACkAXwAyAJMCFwATAAkAAThexIlfAFMAaABlAGUAdAAxAJMC LQAUABQAAThexIlfAIpigGIvZ9hTEGLRkbGUFCAUIIJZVU8eZJpbAl46VwCXQmyTAksAFQAjAAE4 XsSJXwB+dtVOXnQwADgAdF4LTkpTdF5sUQBf/ouhixJSylP+iwt6y07Nfgj//pSlY0hyCf8I/zAA OAAwADcAMgA4AAn/kwJLABYAIwABOF7EiV8A2JrpfkhlAJUuVeJWH5ZFTmKNH3fPfi0ALQAtAC0A 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 UxCZylMKTgtOSFM2g7lwSXsJ/xYAATEALgAgAOOJZJbSiXKCbI9iY4R28FbRYAz/BW5wZppbTU+h ewZ0BYDSiXKCIAABMgAuACAAjGPhY+VdXE+hewZ0hHa5ZdVsgGLnXSAAEyAgAKGLElIM/8R+x34M /2diTIinYzZSDP/lXVxPOWWEVSUAATMALgAgAIxj4WNYVOVdoXsGdIR2uWXVbIBi510gABMgIABY VOVdiGNDZwz/WFTlXflXsoAM/1hU5V2hewZ0DP9YVOVdwG+xUp9sGgABNAAuACAA0GNHU+qBEWKh ewZ0IAATICAA9mX0laF7BnQM/59sGpD9gJtSDP8qTrpO7k+8cAsAARAw/FsIXoB7y04RMFsA+WY8 eQ5mXQAvAAEAMAAwLU5xXCdZZltNAEIAQQAsAC1O/VaWmXliUABNAFAApIvBi0SNPGi6TlhUDP8t TnFcJ1lmW89+BnRZZYhjFHh2ehpPGk9YVAz/+WYBgAheCWfRjzIAMAB0XgFPLAABGk6hewZ05V1c T89+jJoM/0hRDlTFYvtOGlm2WwFPGk4UeNFTz34GdAEw6JDolc9+BnQBMLpOm1JEjZBuO2DRdgEw H3WnTjtg0XYBMG9SO2BJe0yAoVIM/ysAAQxU9mV8UftOqFTii6F7BnR+mO6VcGV0Xgz/xWR/lQFP Gk7PfiWE0I9cT8SJElIBMOVdglOhewZ0U0/7fL6LoYsOTlNiIJABMOVdglOnYzZSU0/7fL6LKwAB oYsOTp5bvWUBMAFPGk5BbQt6OWWEVQ5OB2jGURZTATABTxpOoXsGdNhTaZcBMAFPGk5yXuiQrYvD fg5O4lYfllNiIJABMAFPGk6HZRZTO22oUp5bzWQrAAEHY/xbATCqhWyRoXsGdA5O6X5IZQOAOGhT T/t8vouhiwEwAU8aTrpOTWKvaB+W+l6+i76LoYsOTp5bvWUBMFhU5V0gfSiNIWqLV76LoYsBMAFP Gk75VwcAAa2LU0/7fL6LoYtJewIwLQABIAAgACAAIAD5ZgGACF7+ZjpOCk5+drZbAU8aTtBjm0+h ewZ0qFTii4xU+Veti+VdXE8M/3Zeq4gaWbZbAU8aTliAOk66TptSRI2QboWP/Ft+mO6VjFRyXuiQ KwABrYvDfjtgWWXDfgIw+WYBgAheO04BY4xUwlMOToZOGlm2WwFPGk6EdqF7BnSoVOKLhY/8Wwz/ f08aWbZbAU8aTs5OoXsGdPdtcU4xWadjDP8aTul+XFArAAHebg1OTVIM/7pOWFTqgTF1o21jZYR2 tnIBYAz/EJBlazll2FM6TjZSpl7EiQODDP9BbQt6p2M2UglnSGUM/wFPGk4aTul+PmZXhNBjR1MM /wFPGk7dUSsAAVqAm1I+ZleEnlg6X4R2LV2wZUBcYpcCMChXOk4aWbZbAU8aTsVi+066TptSRI2Q bjtgWWXDfoR2x48Lei1ODP/5ZgGACF7FZH+ViJT5WwFPuk5YVIR2KwABd1FTT3lyuXAM/zZSmlsC kJReJ2CEdrpOm1JEjZBuOWWEVbllSGgM/zZSmlsqTidgFlOEdoWP/Fu5ZUhoDP8oV3Je6JChewZ0 5V1cT55b9Y0tTg1OrWUrAAHNZFxPjFRTT4yaDP/WU5dfhk5elzhefVmEdkhlnGcM/6uIAU8aTliA Ok66TptSRI2Qbn+VH2cHY/xbfpjulQIwZJahewZ02FNpl6hU4ouMVLpOm1JEjSsAAZBuhY/8WxZZ DP/5ZgGACF7Yj8Vkf5UBTxpOoXsGdJ5bGGL5V62LDP/5ZgGACF7LWch+imL5V62LjFSFj/xbhHae Wyh1J2CMVJ5bSGUnYD5lKFcsewBOKwABTU8M/zlobmNmW1hUhHaeW0WW7pWYmAz/249MiJJOqFIG UpBnjFSwczpX44lUewdj/FsM/2ZbWFQmXkB37pWYmGVnDP8mXkB344mzUbllSGhwjQz/+WYSAAEB gAhehHb5V62Lq4gBTxpO8Hk6TqhU4otZZcN+D1/5V62LAjAJAAEsewBO6JAGUiAA6oERYqF7BnQG AAEATgEw0olygqSL5XcNAAExAC4AIADOThNOGk5wjRFUoXsGdIR28FbRYA4AATIALgAgAKF7BnQF gIR2q479Tg5O0olygppbTU8PAAEzAC4AIAChewZ0BYCUXndRB1mEdgFgpl4OTg9hxosJAAE0AC4A IAChewZ0BYCEdvtOoVIMAAE1AC4AIAChewZ0BYCUXndRB1mEdoBi/YALAAGMTgEwoXsGdAWA2JpI ZeVdXE+5ZdVsCwABMQAuACAAoXsGdAWAhHb2ZfSVoXsGdBEAASAAIAD2ZfSVBlKQZxr/EWKEdvZl 9JUodYR2CWdIZRdUH/8LAAEgACAA9mX0laF7BnSEdttWKk5hjFCWCAABIAAgAPZl9JWhewZ0Vntl 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 iR//DAABNgAuACAAwG+xUlhU5V2Edrll1WyqY71lFQABNwAuACAAgllVT8Bv0VNYVOVdIAATICAA wG+xUlhU5V2EdjEAMgBnUjpXBwABzk6AYi9ncI0RVKF7BnQpAAEQMPlXrYv2ZfSVETAyADAAMQAy AHReMgAIZzIAMQAtADIAMgAXU6xOATAyAAhnMgA0AC0AMgA1AApOd20BMDIACGcyADgALQAyADkA 8W0zVyAALwABEDD5V62L+VthjBEwAU8aTkMARQBPAC8AO2DPfgZ0ATAUeNFTO2DPfgZ0LwBvUjtg ATBsUfhTO2DlXS8AgGIvZztg0XYBMBR40VN5mO52z34GdC8Ap07BVM9+BnQBMDIAASAAIAAgACAA IAAgACAAIAAgACAAIAAgAC1O1YvokM9+BnQBMBR40VMojc+R6JDPfgZ0ATBQAE0ATwAI/3mY7nah ewZ0nlJsUaRbCf87TvtOATChewZ0l1xNT4R2gGIvZ7pOWFQtAAEAMAAwOWhuYxFi7E4aWXRezk6L ThR40VOhewZ0qFTii4R2z36MmtFTsHMtTv1WAU8aTjkANQAlACAA5U4KToR2FHjRUy1O+ldCXDtO oXv9kC9mzk6AYi9n/YAPAAGbUtRrg486X4R25V0LegheLU7QY9Rid41lZ4R2OgAjAAEgACAAIAAg AIhfGlkaUhpScI0KTqF7BnSXXE1PhHYUeNFTuk5YVNKJcoINTv2AbI9iYwz/x4+mXnNR6GyAYi9n xn6Cghv/EwABIAAgACAAIACkix93Ll6pUgtOXlzvUy9m1k7sTnZeDU5wTiaNG/8dAAEgACAAIAAg AOFRi06yTptSsk46Tgz/2V+XXyZxNFnCcJ2YDP/vUy9mCk74U3RTzFpIZYdzKllOTxv/IAABIAAg ACAAIAAMXhtnC05eXBpZ0GMPYcGJDP/vUy9m1k7sTnRTwE5ITv2QDU70iwz/DU4/YQ9hf2LFYiON +04b/xUAASAAIAAgACAACk74U6mLNlKaW+VdXE+hixJSDP/vU3RT4GXOTgtOS2Ib/y0AASAAIAAg ACAADU7ld1OQgllVTwZSPm3lXVxPDP+CWVVPhpj8W+JWH5YM//RmDU7ld1OQgllVT2543U9gT4R2 4lYflg1O+lHuXRmV9IF/T7J162ANTipYdFPYjwsAAQ1O/YAJZ0hlvo8wUnRlU0/udgdoAjAtAAEg ACAAIAAgAM5OAE4NVOpT+VuAYi9nH40jjYR2gGIvZ7pOWFRsj9hTOk75W2hRQW0Leh+NI42EdnmY 7nbPfgZ0jFT5W9BnAE4TThpOhpjfVx+NI42EduiQ6JUrAAHPfgZ0DP8oV9mPKk5sj9hThHbHjwt6 LU4M/4BiL2e6TlhUgYmeW7Bz6lSbThWH2FMBMIGJjGPhY+pUm06hewZ0gGL9gAEwgllVT/lXe1Hq gfFdhHaGmA8AAfxbm1JJey9mLGf+iwt6zZG5cKJjqIuEdoVRuVsCMCkAATEALgAGUqtOsosIXgpO fnY6VxR40VOhewZ0+Veti4R2E04aTs9+jJoM/xqQx4+wczpXhHaSTqhSLl6pUmZbWFQGdAVucI0R VKF7BnSEdvBW0WAaAAEyAC4AO2DTfoxUBlKQZ4BiL2e6TlhUzk6AYi9ncI0RVKF7BnTHjwt6LU44 XsGJhHbulZiYGQABMwAuAIxj4WOeW7Bzzk6AYi9ncI0RVKF7BnSEdsePC3otToGJnluwc4R24FEq TmyP2FMrAAE0AC4Ahk7jic5OgGIvZ3CNEVShewZ0hHaUTipOfVlgTu9gCP/Tfpxn/FsRVAEw/H7C iWhRQFwBMFqAJnHNkblwATDRUyVjGE+/UgEwxpYdYH9eynYJ/w4AATUALgCMY+FjDk6GmPxbn2wa kIR2uWXVbIBi510sAAE2AC4AjGPhY3CNCk6hewZ05V1cT5dcTU8OVACXgYmMY+FjhHbbVipOOGjD X6F7BnSAYv2ACP/udgdoDk6hixJSATDEfsd+Dk4GUj5t5V1cTwEwp2M2Ug5OEAABIAAgAKB+T1AB MIaY/FsOTsBvsVIJ/yAAIAAgACAAIAAYAAE3AC4Ahk7jiRBin1KeW7Bzzk6AYi9ncI0RVKF7BnRs j9hThHbgUSpOc1EulYGJIH0qAAE4AC4ABlKrTrKLCF5wZUFTKk6oVOKLeZjudoR2FHjRU6F7BnSE dkhoi09EjZllCP8han9nATBoiDxoATA3aItPJiAmIAn/DP8uXqlSZltYVDZSmlsiAAEgACAAQQBj AHQAaQBvAG4AIABQAGwAYQBuAAz/f0+XX2ZbWFTCU62LDlTeVjBS6oHxXYR2bFH4U/2AH1mIX31Z nlv1jQ0AARAw/FsIXoB7y04RMFsARwBpAGwAZQBzAF0ADwABADAAMCAA/VZFlvt8337lXQt6CF5U gAhUGk8aT1hULAABQVPgUXRe2JrReYBiTIgaTs5OGk7MgG9mDP8wTsxbhHYUeNFToXsGdKhU4ovP foyaDP8oV/1WhVHQZydZi1fldw1UAU8aTuVdXE/RjzEAMAB0Xgz/O04BYysAAYxUwlMOTsePGlkq TidZi1enTsFUhHYUeNFT5V1cTwz/SFEOVMVi+07HjwBf0VPlXQt6CF4BMHmY7nbPfgZ0ATCnTsFU z34GdAEwsGWnTsFU/FtlUeiQKwABO2DRdgEwFHjRU3mY7nahewZ06JA7YNF2SXtMgE1PAjAoV/tO FHjRU3mY7nahewZ0O2DRdh9n9JUM/xBin1LEfsd++l7LeoZOApAIVFNf9mXFYLVRhHYrAAEUeNFT QW0LeqF7BnQBMHmY7nahewZ0ATCAYi9noXsGdFNP+3wCMHZeXE86Tjhow1/EfhBiWFRoUQt6wlMO ToZOxpYQYqdOwVQAX9FT2FNpl3mY7nYM/y0AAQ5OSQBCAE0AdpgWXKhU4ot+mO6VAE53jeVdXE+G TttWdF4uAGhRYpcfjSONhk7GlhBip07BVABf0VOhewZ02FNpl3mY7nYoV9Bnp07BVL9+hHZ3UVNP QW0Lei0AAT2EMFeMVKhjTIjlXVxPDP/5W3RlKk6hewZ02FNpl3mY7naEdhBin1J3jTBShk7zgXNR zZGBiYR2XE8odQIwDlTIUw5OSQBCAE0AfpjulQhUXE8sABBin1I7TisAAfxbhk6fUv2AhpjfV/2A m1LQY0dTeZjudhUgFSCwZadOwVT8W2VRQW0Leg5Oc17wU4R2+l6+ixv/KFf9VoVR0GcnWYtX5XcN VAFPGk7lXVxPH2f0lQz/KwABz36GU4ZO5YtsUfhTFHjRU6F7BnTOTg1OxIkDgzBSxIkDgxZThHZ0 ZSpOx48Legz/n3HDfoxj4WMGXP1WRZZIUduPhHYUeNFToXsGdM9+jJoOTi1O/VYrAAEBTxpOnltF lsVgtVH4dtN+CFRlZ4Rn+l4UeNFToXsGdFNP+3yEdrll1WwCMA5UlF7QZ+V3DVQakK+LbFH4U4R2 gJD3iwz/5U5+mO6VhHarjv1O249lUS0AAeWLbFH4U4R2gGIvZy1Ow187TvxbFHjRU6F7BnRTT/t8 ATAUeNFTSQBUAMSJElIsAE0AQQBSAEsARQBUAEkATgBHAKF7BnRTT/t8hHZzXvBT+l6+i+VdXE8C MAkAAaAlFHjRU6F7BnSoVOKLz36MmisAAc5Oi04UeNFToXsGdKhU4ovlXVxP5U5lZwz/XE86TnmY 7nY7YNF2EGKfUoR2O04BY4ZOPGiXZwFaFFwBMH9e3l0BWhtS5WWwZQEw0Gc1dVBb0XmAYsaWLAAB 4lYUeHZ6QGIBMP1Wuk4akOFPSXtwZUFTtlsBTxpOhHanTsFUxIkSUkFtC3pTT/t8vouhiwEw1YuM mkBcQW0Ler6LoYsBMOV3xouhewZ0U0/7fL6LoYsBMCwAAS1O1YsaTqFSoXsGdFNP+3yzaAZ0ATAU eNFTSQBUAMSJElIBMBR40VN5mO52oXsGdFNP+3y+i6GLATAUeNFTKI3PkaF7BnRTT/t8ATAUeNFT 6X5IZaF7BnQZAAFTT/t8vouhiwEwFHjRU0sAUABJAFNP+3y+i6GLSXu5ZWKXhHahewZ0qFTii3mY 7nYCMCsAAf5mKFcEVDBXGlkhaz5OnlIUeNFTKI3PkaF7BnQBMBR40VN5mO52oXsGdAEwsGWnTsFU AF/RU0FtC3oYTxZTDk6hewZ0ATDOTjdowVRwjRFUz5GnTkl7KwABbFEAX/6LDP86TnBlQ1O2WwFP Gk7QY5tPhk4UeNFToXsGdGxRAF/+i4R2+Vetiwz/Ok5wZX52tlsBTxpO249MiIZOFHjRU6F7BnSE doVRrYsb/85Oi04rAAEUeNFToXsGdKhU4ovlXVxP5U5lZwz/XE86TnmY7nY7YNF2EGKfUoR2O04B Y4xbEGKGTnBlQVMqThR40VOhewZ0qFTii3mY7nZTT/t8hHb6Xr6LDP+nTi0AAcFUxIkSUkFtC3pT T/t8vouhiwEw1YuMmkBcQW0Ler6LoYssAOV3xouhewZ0U0/7fL6LoYsBMC1O1YsaTqFSoXsGdFNP +3yzaAZ0ATAUeNFTSQBUAMSJElIBMC0AARR40VN5mO52oXsGdFNP+3y+i6GLATAUeNFTKI3PkaF7 BnRTT/t8ATAUeNFT6X5IZaF7BnRTT/t8vouhiwEwFHjRU0sAUABJAFNP+3y+i6GLSXu5ZWKXPgAM /ywAAQlnQHcwTsxbhHYUeNFToXsGdKhU4ovPfoyaDP+JbcpThHZMiBpOBVPsYhqQ4U8BMG+P9k4B MLZbNXUBMDV14U/QjyWERlUBMK+CR3IBMDtTl3VoVrBoATAXAAGkThqQ0I+Tj0l7DP8uXqlS2Y+b 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 KQCfbBqQhHbudoR2Dk6fUv2ACgABOAApAJ9sGpCEds15e3wOTrllD18OAAE5ACkACWdIZZ9sGpCE dpyWjXgvAKZ+yFTMkZd6DgABMQAwACkAYpf5W2KXn2wakH+QTVGEdg9cqFJcTxAAATEAMQApAIJZ VU/ZfnZRg1vokOiVBlI+bRR40VPlXVxPDwABMQAyACkAFHjRU2diTIibUjp/MVmEdp9T4FYGUpBn HAABMQAzACkAFHjRU6F7BnS6TlhUKFcGUj5t5V1cTy1OuVsTZlhbKFeEdu6VmJgBMJ9T4FaMVEtR DWcgAAExADQAKQDZfhR40VOAYi9nuk5YVBtSIJA/YW9mATDPY9h+P2FvZgz/JFx2US9mc1GOTnmY 7nYOTuJWH5ZNUhSQIgABMQA1ACkA7nYHaHFRq04OTvtOoVIGUk2RCP/udgdohHZxUatOFlMBMO52 B2iEdn9i+osWUwEw7nYHaIR2+3zffhZTATAaAAH7TqFSBlJNkYR2n1MZUgEwBlJNkfZlhHaXYtJi BFkGdAEwBlJNkfZlhHanYzZSJ32mXgEwDwABBlJNkQ5UhHbfjSqODk6nYzZSATDTfpxnzVOImQn/ IgABMQA2ACkA2X4UeNFTgGIvZ7pOWFR6evSVCP80c1BboXsGdAEwiGNDZ4R2lE4qTp9TGVIBMHFR q04OTsJTDk6hewZ0Cf8mAAExADcAKQA7bahSFG/DfiAAMwAwACAABlKflBr/UWJLUThuD2IUIBQg Ck4tTgtOCU5CXJJOqFII/1NPjJoa/6F7BnT5W7pODk75W4tOIQABDP8JTkJc0olygppbTU8M/+52 B2gLTjwAICABvo8M/6djNlIOTt+NKo4M/z9hb2YOTu52B2hxUatODP/TfpxnzVOImUl7Cf8lAAEx ADgAKQBIaItPFHioixr/FHjRU4BiL2eLV+JWH5aEdhBiWFQ4XquI649/YsViJ30lYIR2eZjudmhU H2cM/+WLgllVTwRZBnQf/yQAATEAOQApAEhoi08UeKiLGv/ZfohOFHjRU4BiL2e6TlhUhHZ6evSV MFKVXhpZJ1kM/69ywE5ITjdohHYZle+L71PlTqVj11Mf/yAAATIAMAApAEhoi08UeKiLGv/7TqFS C06+jw5UjFsQYpdfDU59WUZP4FY6Ti9msHgwUvBWvpbIUw5gSE4EWQZ0H/8aAAEyADEAKQBIaItP FHioixr/AE4qTrpOf2LFYhpZKk55mO52R5AwUkSNkG6yUYF6DmBITp5SFgABMgAyACkASGiLTxR4 qIsa/yROKk6GmPxbD2HBiQ1OAE70gQz/DmBITp5SH/8fAAEDTgEwzk6AYi9ncI0RVKF7BnSEdttW Kk44aMNfoXsGdIBi/YBLTglOGv+nYzZSDk6gfk9QCP8xAC4ANQAJ/w0AATEAKQAUeNFT5V1cTzpO wE5ITr6W5U6nYzZSEAABMgApABR40VPlXVxPhHbulZiYoXsGdA5OzphplqF7BnQLAAEzACkAFHjR U+VdXE/9jyqOhHZla6SaGAABNAApABR40VPlXVxPp2M2Urll1WxLTgBOGv8aT66LCP93UVNPzWRc Tw5OIWp/Zwn/GgABNQApABR40VPlXVxPp2M2Urll1WxLToxOGv+lYkpUOmc2Ugj/d1FTT81kXE8O TiFqf2cJ/xgAATYAKQAUeNFT5V1cT6djNlK5ZdVsS04JThr/oVuhiwj/d1FTT81kXE8OTiFqf2cJ /x0AATcAKQAUeNFT5V1cT6djNlK5ZdVsS07bVhr/CFQMVGZODk77TqFSZk4I/3dRU0/NZFxPDk4h an9nCf8aAAE4ACkAFHjRU+VdXE+nYzZSuWXVbEtOlE4a/4SYZov7fN9+CP93UVNPzWRcTw5OIWp/ Zwn/HAABOQApABR40VPlXVxPp2M2Urll1WxLTm1RGv/PfoyaWWWtiztg034I/3dRU0/NZFxPDk4h an9nCf8ZAAExADAAKQAUeNFT5V1cT6djNlK5ZdVsS04DThr/S23Eiwj/d1FTT81kXE8OTiFqf2cJ /xwAATEAMQApABR40VPlXVxPp2M2Urll1WxLTmtRGv9el2NrxImnYzZSCP93UVNPzWRcTw5OIWp/ Zwn/HQABMQAyACkAFHjRU+VdXE+CWVVPpl7PkQEwz5EWU6F7BnQI/wln6lSbTs+RFlMHYwdoATBQ AEMAQgAJ/xQAATEAMwApABR40VPokOiVLU6Edhwg4Fa6TgyAAl8dIIR2oXsGdLll1WwRAAExADQA KQAUeNFTIo3Pfg5OEGIsZ6F7BnSEdgBnc0+eW/WNDwABMQA1ACkAFHjRUzmNKHWMVBBiLGeEdqdj NlKBiblwFgABMQA2ACkAL41/egBf0VNoUUFtC3qEdhR40VM5jSh1340qjoxUp2M2UoGJuXANAAEx ADcAKQAUeNFTOY0odaF7BnSEdmhRQW0LehYAATEAOAApAL6LoYsQYixnhHahewZ0uWXVbBQgFCDu dgdoEGIsZ9VsylOUXih1EwABMQA5ACkAp07BVB91fVRoVB9nEGIsZ4R2mltJTg5On2wakIGJIH0P AAEyADAAKQCCWVVPp2M2UqdOwVQfdX1UaFQfZxBiLGcWAAEyADEAKQCCWVVPzk4ijaFSjFSVYkSN 0ommXqdjNlIUeNFTGll5mO52RI2QbhwAATIAMgApAHNRjk6nYzZShHbvizpTCP8odbpODU6RdQEw KXVLYoxj3GcBMA5OG1KwZYR223f+dgn/CgABMgAzACkAc1GOThR40VNnYkyIm1IfAAFrUQEwzk6A Yi9ncI0RVKF7BnSEdttWKk44aMNfoXsGdIBi/YBLTttWGv+GmPxbDk7Ab7FSCP8yAC4AMAAJ/wwA ATEAKQAUeNFThpj8W0NnAVqbUoR2ZWeQbg4AATIAKQAUeNFThpj8W4JZVU/RU1VcKk66TkWbm1IY AAEzACkAgllVT4iU+VsNTgxUr3ODWIxUDU4MVIR2FHjRU7pOWFTbj0yIxWBvZoaY/FsUAAE0ACkA qIu6ixr/gllVT55Y248UeNFT4lYfloR23VFagJtSjFTrWBRsCgABNQApABR40VOGmPxbgllVT4hj Q2cSAAE2ACkAFHjRU4aY/FuCWVVPhY/8WwtOXlyMVPlXe1GlY+1zuk4SAAE3ACkAFHjRU7pOWFSE dgOAOGgOTsBvsVII/xNOmJiyi+OJCf8aAAE4ACkA+l7Lep9S/YCLV+JWH5YOTnmY7naLV+JWH5Zi lxFU036cZ4R26X5IZQOAOGieUtVsEwABOQApABR40VOAYi9ni1e6Tk1ihHb5V7KADk77TkyARI08 aKF7BnQXAAExADAAKQAUeNFTgGIvZ4tXuk5NYoR2XpdpciiNwG+xUg5OaXIojcBvsVK5ZdVsCAAB MQAxACkAFG/Dfg5OqIu6ixcAAV1OATAQYp9Snluwc85OgGIvZ3CNEVShewZ0bI/YU4R2c1EulQj/ MAAuADUACf8LAAExACkAEGKfUoR2nluwc9KJcoJiY01PCQABMgApAKF7BnSAYv2AhHb5V3tREwAB MwApACpOuk7uT7xwCP9gTu9gATCGmPxbm1IBMJ9sGpD9gJtSCf8NAAE0ACkAxH7HfoR2jYcIVIxU 4lYfloR2U2IgkBcAATUAKQDZfhpScI0KTqF7BnSXXE1PhHaAYi9nuk5YVKhjUIOEdmZOTXyMVDV1 cV8sAAEQMPlXrYv2ZfSVETAyADAAMQAyAHReMwAIZzIAMgAtADIAMwDlZRdTrE4BMDMACGcyADYA LQAyADcA5WUKTndtATAzAAhnMgA5AC0AMwAwAOVl8W0zVyAALwABEDD5V62L+VthjBEwAU8aTkMA RQBPAC8AO2DPfgZ0ATAUeNFTO2DPfgZ0LwBvUjtgATBsUfhTO2DlXS8AgGIvZztg0XYsAKdOwVTP fgZ0LwAUeNFTeZjuds9+BnQBMDIAASAAIAAgACAAIAAgACAAIAAgACAAIAAgABR40VNMgP2A6JDo lc9+BnQBMBR40VOomnJeATBLbdWLz34GdAEwUQBBAM9+BnQBMIBiL2fokOiVO06hewEwuk6bUkSN kG7PfgZ0SXsrAAEAMAAwFHjRU7pOWFSEdgOAOGgOTsBvsVIvZgFPGk7YmkJchpj8WwEwFHjRU89+ BnQBMLpOm1JEjZBuz34GdABnOk40Wbx1hHbulZiYS04ATgz/2JpCXBsAAYaY/FuMVBR40VOhewZ0 BYAoV9uPTIgUeNFT6X5IZaF7BnT2Zc9+OF5HkDBS5U4LTu6VmJga/yEAATEAKQCCWVVPGpDHj+l+ SGWhewZ0hHa5ZdVsFV/8WwBf0VO6TlhUOk5sUfhTAl46V+52B2iEdr6PEGIMgKpSm1If/yMAATIA KQAUeNFTU0/7fC9mJlSUXuWLCWclTjxohHYDgDhoNlKmXgz/2Y83aBpPDU4aTytjJE8UeNFTuk5Y VIR273mBZydgH/8kAAEzACkAFHjRU4R2SwBQAEkAB2MHaFNP+3yCWVVP249MiAZS44kM/0sAUABJ AAdjB2iCWVVP249MiM+RFlOMVMePC3rfjSqOH/8bAAE0ACkAgGIvZ+VdXE+CWVVP249MiM+RFlMM /w1O/YDPkRZThHblXVxPL2YmVO9T5U4DgDhoH/8dAAE1ACkA6X5IZe52B2g2UppbjFQDgDho036c Z81TiJmEdsePC3otToJZVU8OTlhU5V3bj0yIn2wakB//HAABNgApABR40VPpfkhloXsGdC1OgllV TwRZBnR9WQOAOGiEdtN+nGcOTsePC3p2Xs2RhHZ5crlwH/8dAAE3ACkAgllVT3NeYYgUeNFT036c Z4R23m4OVIxUFHjRU7pOWFSEdspT9mXAb7FSS070lYR2c1H7fB//HgABOAApAChXwG+xUg1Os42E dsVgtVELToJZVU++jzBShJgfZ+52B2h2Xg1O84GOTqdOH3UfjWKXXE8odR//JwABOQApABR40VOF UeiQgllVT4iU+VsNTgxUhHZMgE1P249MiAZSe3yEdgOAOGgI/+iQ6JU7TqF7ATB5mO52z34GdAEw WFTlXSYgJiAJ/x//LAABJiAmICxn/osLeihXx4+7UzQAdF6yi4hjhHb6V0B4Ck5cT4ZOJ1nPkYR2 9GawZSwA034IVAFPGk47TqF7Ypc0ToR22Y+bTu6VmJg7YNN++lECkAhUDU4MVCsAAdFTVVw2lrVr hHYBTxpOFHjRU7pOWFTpfkhloXsGdIR244mzUUtOU5AM/16XOF46XwOMzk4aTqFShHbSiaZeZWfb j0yIFHjRU4R26X5IZaF7BnQM/xqQKwABx48aWXRehHY7YNN+l1/6UYR2AE6bTgZ0uovKU55b9Y1l Zwdj/FsUeNFTylO6TptSRI2QbuiQ6JWEdjtOoXv5W45OFHjRU+l+SGWhewZ0CWcATipODmYnAAFu eIR2ATAGdLqLDk6eW/WN034IVIR2ATDvU81kXE+Edrll1WwM/85ODIDQY9iaFHjRU4R2oXsGdEhl h3MM/9Bj2JqVYmVRp076UdRrAjAsAAExAC4ABlKrTrKLCF5wZX52GlkUeNFToXsGdPlXrYuEdhNO Gk7PfoyaDP8akMePsHM6V4R2kk6oUi5eqVJmW1hUBnQFbgKQCFTqgfFdAU8aToR2FHjRU+l+BwAB IAAgAEhloXsGdLllSGgjAAEyAC4ABlKQZ3Zehk7jiRpOTHVsUfhTKFcUeNFTuk5YVAOAOGiMVMBv sVK5ZWKXWFsoV4R2O06Bie6VmJjKU+OJs1GeUtVsIgABMwAuAIxj4WMUeNFThHb3TjxQ/pQM/xR4 0VP3TjxQG1IgkAEw9048UMSL906MVPdOPFAGUk2RhHYEVK9zgoKEds2RuXAbAAE0AC4AjGPhYxR4 0VMtTtiaQlyhewZ0BYDwj0yAoXsGdIR2NlKmXgEwuWXVbIxUzWRcT4Bi510mAAE1AC4AjGPhY4JZ VU/OTnRlKk4BTxpOhHb3TjxQ/pRlZwZS44kBTxpOhHZLAFAASQAHYwdoDP/OTpBuNFkGdAVuFHjR U4R29048UP6UGgABNgAuAIxj4WMUeNFT4lYfloxUKk66ToR26X5IZe52B2g2UppbhHa5ZdVsCP9Q AEIAQwAJ/x0AATcALgCMY+FjFHjRU+JWH5aMVCpOuk6Edul+SGWFj/xbhHa5ZdVsjFRMiEtOCWdI ZYR2zWRcT4Bi510bAAE4AC4AjGPhY+l+SGWhewZ0hHZQAEQAQwBBAKpfr3MM/+l+SGWEdsSL906M VM1TiJmEdoBi510rAAE5AC4AjGPhYxR40VPpfkhloXsGdNN+nGeEdpReKHWMVBR40VNTT/t8hHZW WdGRBlJNkbll1WwM/9N+CFQBTxpOhHbqgauOxWC1Ub6LoYvAb7FSqmO9ZSwAATEAMAAuAAZSq06y iwheMwAwABpZKk6oVOKLeZjudoR26X5IZaF7BnSEdkhoi09EjZllCP8han9nATBoiDxoATA3aItP JiAmIAn/LAAuXqlSZltYVDZSmlsjAAEgACAAIABBAGMAdABpAG8AbgAgAFAAbABhAG4ADP9/T5df ZltYVMJTrYsOVN5WMFLqgfFdhHZsUfhT/YAfWYhffVmeW/WNCgABADAAMBR40VOhewZ0RI3xbX6Y 7pUHAAGgJSAAE04aTsyAb2YgACsAARpZdF7YmtF5gGIBTxpOFHjRU6F7BnSeW/WNDP93UQlnME7M W4R2FHjRUxtSsGXKU6dOwVTEiRJSoXsGdAEwFHjRU3mY7nahewZ0ATAUeNFTuk6bUkSNKwABkG6h ewZ0hHYGdLqLDk6eWxhiz36MmgIwKFf9VoVR0GcnWYtX5XcNVAFPGk7lXVxPH2f0lQz/EGKfUsVi +06GThpZKk6nTsFUv36EdhR40VN5mO52oXstAAEGdOVdXE8b/3+VH2cOTv1WRZZ2mBZcqFTii36Y 7pUATneN5V1cTwz/aFELesJTDk52Xk9TqVKoY6hS5YtsUfhTFHjRU6F7BnTYU2mXeZjudiAACP9J AFAARAAsAAF5mO52Cf8sAAxU9mV8UftO5YtsUfhT2JqnfrKLCF4uAA5U+07QZ+V3DVRvj/ZOAU8a TuFPb2CJW2hRi04aTuiQFHjRUztg0XYM/4hffVmEdgZcFHjRU6F7KwABBnTYU2mXhHYGdLqLjFSe W0WWz36Mmg5ObFH4U4R2sHO2cvh2034IVAz/aFFil/pey3qnTsFUFHjRU6F7BnRTT/t8DP93UQln ME7MW4R2FHjRU6F7BnQiAAHPfoyaAjAoV9uPTIiEdgRUe3xsUQBf/osBMIVRrYv5V62LLU4M/39e 22zXUzBSols3YoR2AE70gX1ZxIuMVK+AmlsCMAYAAaAlIACoVOKLzIBvZisAAc5Oi04UeNFToXsG dKhU4ovlXVxP5U5lZwz/EGKfUoR2O04BY4ZO/VaFUQBnJ1mEdtBnUX/cfolbaFGCU0ZVATD9VoVR AGcnWYR20Gf6XlF7b4/2ToJTKwABRlUBMNBnJ1mLV+qBqFKnYzZSvosHWR91p06CU0ZVATDQZydZ i1c1deFP0I8lhEZVhHYUeNFTLU7DXwEw0GcnWYtX+3zffsaWEGJsUfhTCP8KTgJebFErAAH4Uwn/ SXtwZUFTtlsBTxpOhHanTsFUGGJldcSJElIBMKdOwVQAX9FToXsGdAj/p07BVABf0VNBbQt6ATAU eNFTeZjudqF7BnQBMBR40VOEdhtSsGWheyUAAQZ0SXsJ/wEwxH7Hfr6LoYsBMBR40VO6TptSRI2Q bqF7BnTKU0MATQBNAC8AQwBNAE0ASQBJe7llYpeEdqF7BnSoVOKLeZjudgIwBgABoCUgAPlXrYvM gG9mKwAB/mYoVwRUMFcaWSFrPk6eUqdOwVTPfgZ0oXsGdAEwFHjRU3mY7nahewZ0ATAUeNFT6X5I ZQOAOGgBMLBlp07BVABf0VNBbQt6GE8WUw5OoXsGdEl7bFErAAEAX/6LDP86TnBlQ1O2WwFPGk7Q Y5tPhk4UeNFToXsGdGxRAF/+i4R2+Vetiwz/Ok5wZX52tlsBTxpO249MiIZOFHjRU6F7BnSEdoVR rYsb/85Oi04UeCsAAdFToXsGdKhU4ovlXVxP5U5lZwz/XE86TqhU4ot5mO52O2DRdoxUeZjuds9+ BnQQYp9SjFsQYoZOcGVBUypOFHjRU6F7BnSoVOKLeZjudlNP+3yEdvpeLAABvos8AKdOwVQYYmV1 xIkSUgEwp07BVABf0VOhewZ0IAAI/6dOwVQAX9FTQW0LegEwFHjRU3mY7nahewZ0ATAUeNFThHYb UrBloXsGdEl7Cf8BMMR+x36+izAAAaGLATAUeNFTuk6bUkSNkG6hewZ0ylNDAE0ATQAvAEMATQBN AEkASXu5ZWKXPgAM/wlnQHcwTsxbhHYUeNFToXsGdKhU4ovPfoyaDP+JbcpThHZMiBpOBVPsYhqQ 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 TiAAIAAgADIACGcyADEALQAyADIA5WUKTndtIAAgACAAMgAIZzIANAAtADIANQDlZfFtM1crAAEQ MPlXrYv5W2GMETBsUfhTO2DPfgZ0ATAUeNFTO2DRdgEwuk6bUkSNkG47YNF2ATCnTsFUv347YNF2 ATAUeNFT6JDPfgZ0ATB5mO52z34GdAEwgGIvZx8AASAAIAAgACAAIAAgACAAIAAgACAAIAAgAOiQ 6JU7TqF7ATAUeNFTqJpyXgEwuk6bUkSNkG6hewZ0E05YVEl7MQABEDD5V62LOY0odREwNAAwADAA MABDUS8AJE4pWSAAIgBwTgBOYI0ATiwADU6NUVNimGIiACAAIAAAlyhXDFQATipOCGeEdgxUAE7+ iwt6TWKrTglnZGsYT+BgLABVU+xyAE4nAAEgACAAIAAgACAAIAAgACAAIAAgACAAIAC6TjZlOY0y ADYAMAAwAENRAjAI/ytUJE4pWS1OEJkBMAdjmltZZVBnATDBi2ZOATA2g7lwCf8uAAEgACAAIAAg ANia0XmAYgFPGk6Edt56iU4ATppbL2biVh+WhHbeeolOLAANTgxUhHbiVh+WG1IgkIR29048UBpP CWcpWeRYS04rUgIwFHjRU4R26JDolc9+BnQBMBsAAXmY7nbPfgZ0jFRIAFIAz34GdChX4lYfloRn +l6EdsePC3otTs9+OF5HkDBS5U4LTu6VmJga/xwAATEALgAUeNFTuk5YVNRrg4+FUcB5DP8NTsVk pE5BbQz/gllVTxZjmGPWTuxOhHYfd55b82DVbB//GQABMgAuAJuPm4/mguaC22JlZ4R2FHjRU7pO WFQOYEhOcl4ATrVr9mX0lTFcu3lMgIZOH/8iAAEzAC4ADnM0WRZjuk4QYixnKlnYmgz/2I80bB9X DU4NZwz/DmA3aE1i/YDbYjBSbFH4UwCXgYmEdhR40VO6TlhUH/8gAB0AATQALgD5V62LOY0odbGC hk4NThFcDP8OYEhOoWwJZ0hlnGcf/4JZVU/5V3tR2Y+bThR40VO6TlhUH/8bAAE1AC4AgllVTyh1 fVnZj5tOFHjRU7pOWFQM/6mL1k7sTt1PAWNvgn1ZhHaXZddfjFTAb8VgH/8eAAE2AC4AimIIVAKQ hHa6Tj5lMFIIVAKQhHblXVxPl1xNTwpODP/Zj92L9It3jWVnuVsTZgz/DmBITnJeH/8jAAE3AC4A PlDobIZOJ1nPkcNfQIj5V3tRhHYUeNFTuk5YVA5gSE4xXFl1DU4LTmVnYlQf/81TDICVYlRZ3nqJ TvlbS2JmVQH/HwABOAAuAFl1T08UeNFTuk5YVAln6lSbTktitWsf/4tOGk4BMIVfR5ABMB9hxWBZ dbpODmBITsR+CFR/Tyh1H/8tAAEgACAAIAAgACxn/osLetN+CFROUxBiFHjRU6hU4otsUfhTx4+7 U+BRdF4nWc+R+Veti4xUqFTii4R2z36Mmgz/034IVBR40VM7TqF7Ypc0ToR22Y+bTu6VmJgrAAE7 YNN++lECkAhUDU4MVNFTVVw2lrVrhHYBTxpOU2IgkNiaSGUUeNFT4lYfloR244mzUUtOU5AM/16X OF46XwOMzk4aTqFShHbSiaZeZWfbj0yIFHjRUysAAYR24lYfloRn+l4M/xqQx48aWXReO2DTfpdf +lEATldZTIhLTglnSGWEdrll1WxTYiCQ2JpIZYR2FHjRU+JWH5YM/85ODIDQY9iaFHjRU0hlh3MM /9BjBwAB2JqVYmVRp076UdRrAjAGAAEQMPlXrYs2Zcp2ETAuAAExAC4ABlKrTrKLCF42ADAAMAAa WTpXFHjRU6F7BnT5V62LhHYTThpOz36MmiwAGpDHj7BzOleEdpJOqFIuXqlSZltYVAZ0BW4CkAhU 6oHxXQFPGk6EdlNiIJDYmggAAUhlFHjRU+JWH5aEdrll1WwgAAEyAC4Ahk7jidiaSGUUeNFT4lYf loR2eXK5cAEwFHjRU+JWH5aEdoRnEGIM/3ZeO2DTfuqB8V1sUfhThHbuXd2NHAABMwAuADtg034U eNFT4lYfloR20VNVXDaWtWsM/4JZVU+IlPlbDU4MVIR2Npa1a4R2oXsGdLll1WwaAAE0AC4AjGPh YxR40VO6TlhU22JYgIR2uWXVbIxUgGLnXQz/bnjdT2xR+FP9gB9ZfmL5W7pOHQABNQAuAIxj4WMU eNFTuk5YVIR2+Vd7Ubll1WwM/zlobmNMgE1PU0/7fGVnvouhi/lXrYv+iwt6U0/7fBgAATYALgCM Y+FjRI2QbmBsjFSXXE1Pbo9iY4R2uWUPX/lXe1FzUS6VOGjDX7pOTWIb/xwAATcALgCMY+FjFHjR U+JWH5aMVCpOuk6Edul+SGXudgdoNlKaW4R2uWXVbAz/KHV9WRR40VO6TlhUHwABOAAuAIxj4WMU eNFT4lYflll1uk6Edrll1WyMVIBi510M/4tOGk5ZdbpOATCFX0eQWXW6TgEwH2HFYFl1uk4iAAE5 AC4AOWhuY4hj/ouFUblbDP9mW1hU71PlTtN+CFQBTxpOhHbqgauOxWC1UZ5b9Y3YmkhlFHjRU+JW H5b6Xr6LS05TkAsAARAw/FsIXoB7y04RMFsASgBhAHkAXQAnAAEgACAAIAAgAEoAYQB5ABr/UABE AE0AQQAI/45//VanTsFUAF/RU6F7BnRPUxpPdwB3AHcALgBwAGQAbQBhAC4AbwByAGcACf8aT1hU IAAgAAEKMFAARABNAEEAsGWnTsFUAF/RU0tijFELMC1Oh2VIcjtO0YsgAAAwBW5OUydZZlsUeNFT oXsGdHlyWIBZZYhjBQABE04aTsyAb2Ya/y0AASAAIAAgACAAQVMaWXRe2JrReYBiAU8aThR40VOh ewZ0nlv1jQz/KFfQZ1eEDVQakOFPbFH4U+VdXE8fZ/SVDP87TgFjx48aWSpOeZjudoR2FHjRU6F7 BnTlXSsAAVxPDP93UQlnME7MW4R2p07BVABf0VNBbQt6ATAUeNFTeZjudqF7BnQBMBR40VO6TptS RI2QbqF7BnTPfoyaAjAoV+WLGpDhT2xR+FPlXVxPH2f0lQz/KwABf5UfZw5O/VZFlnaYFlyoVOKL fpjulQBODFTlXVxPDP9oUQt6wlMOTnZeT1OpUqhjqFLli2xR+FMUeNFToXsGdNhTaZd5mO52DP8M VPZlfFH7TuWLbFEvAAH4U9iap36yiwheAjAyADAAMAAyAHReDf8yADAAMAA0AHRe+07QZydZi1cK TgJe2JrReYBibFH4U+FPb2CJW2hRi04aTuiQFHjRUztg0XYM/4hffVmEdgZcFHjRU6F7KwABBnTY U2mXhHYGdLqLjFSeW/WNz36Mmg5ObFH4U4R2sHO2cvh2034IVAz/aFFil/pey3qnTsFUFHjRU6F7 BnRTT/t8DP8QYp9SO04BYwBf0VOGThpZPmsZAAF3UQlnAl46V956iU6bUoR2p07BVAz/d1EJZzBO zFuEdhR40VOhewZ0nlsYYs9+jJoCMAkAARR40VOhewZ0qFTii89+jJoa/y4AASAAIAAgACAA/mZc TzpOeZjudjtg0XYBMHmY7nbPfgZ0O078W4ZOMQAwABpZKk4UeNFToXsGdKhU4ot5mO52DP8uXqlS 2Y+bTgFPGk5oUWKX+l7LehR40VOhewZ0LAABU0/7fAj/BVPsYkFtC3oBMMR+x34BMOl+SGUBMEkA VAAJ/wz/CWdIZTBX0GNHU4ZO2Y+bTmxR+FOEdhR40VOhewZ0jFQbUrBl/YCbUgz/eFGLV6JbN2KC WQIAAQtOGv8QAAH9VoVRiVtoUUyIGk4sewBODVQI/xdTrE7QZ2xR+FMJ/xAAAf1WhVGvgkdyTIga Tix7CU4NVAj/F1OsTtBnbFH4Uwn/EgAB/VaFUfpeUXtMiBpOb4/2Tix7AE4NVAj/F1OsTtBnbFH4 Uwn/EgAB/VaFUft8337GlhBiTIgaTix7jE4NVAj/F1OsTtBnbFH4Uwn/FgAB0Gc1deFP0I8lhEZV /VZFlhpOoVLokAj/NXXhT9CPJYRGVTtg6JAJ/yYgJiAJAAEUeNFToXsGdPlXrYvPfoyaGv8uAAEg ACAAIAAgAP5mOk4akOFPATBvj/ZOylOSTlSAUX8BMDV1m1IBMLZbNXUBMH1sZo9Je0yIGk6EdgFP Gk7QY5tPx4+FjcePNgAwADAAGlk6V4R2hVGtiwz/O06BiQcAAQVT7GLlTgtOAU8aThr/LwABLU79 Vnp69JWAYi9nFHh2emKWATAtTv1WKoJ6esaW4lZsUfhTATB/iVBbTwBUAEkAUwABMC1OVIDNkdF5 ATAJTgBOzZHlXQEwDFS5ZQFaxokBMBdTrE5LAE4ARAABMCsAASdZz2XAb0lRATApWSVt6k5oiMaW 4lYBMAdOHE47U5d1ATAJTjFyzFsBMCqCKVmUTmKWATAtTtF50XnqTgEwdFEnWWqMATD6i/pXmk4N /3+J6JVQW2xRLgAB+FMBMC1O/VY1deFPF1OsThR4dnpilgEwF1OsTvt5qFIBMC1O/VaSTlSAUX/h T29gLU7DXwj/QwBOAE4ASQBDAAn/ATAnWRBV+3moUgEwLU79Vm5mKVlsUfhTATArAAFeed5dcGUB eAEwLU41dU5TJ1kBMBxOb4/GluJWATBOU1V4NXURgQEwY4OLTr6PATAXU7llrl81dVBbATAfZlF/ EJV3YwEwpE4nWZmfcVxvj/ZOATB1cCsAAf5Wb4/2TgEwLU5vj/1WRZYBMClZgXjReYBiATABWn93 NXUakAEwP5YUXH+JbFH4UwEwUX+hX1553l0BMClZMFczlklRATAvbiqCUX/cfgEwr4vOmElRLQAB GpDhTwEwXnSvZbdevo9sUfhTATAgAApOd22zb2lPATAgAFWWf4n9cGtwATAMVDJtNXVQWwEwKVkl bUlRNXVsUfhTATCbUl55NXVgbAEwbmYpWRR4dnpilgEwLAABF1MnWbllY2sBMLllY2s/lhVe1IEA AACCAAAAgwAAAIQAAACFAAAAhgAAAIcAAACIAAAAiQAAAIoAAACLAAAAjAAAAI0AAACOAAAAjwAA AJAAAACRAAAAkgAAAJMAAACUAAAAlQAAAJYAAACXAAAAmAAAAJkAAACaAAAAmwAAAJwAAACdAAAA ngAAAJ8AAACgAAAAoQAAAKIAAACjAAAApAAAAKUAAACmAAAApwAAAKgAAACpAAAAqgAAAKsAAACs AAAArQAAAK4AAACvAAAAsAAAALEAAACyAAAAswAAALQAAAC1AAAAtgAAALcAAAC4AAAAuQAAALoA AAC7AAAAvAAAAL0AAAC+AAAAvwAAAMAAAADBAAAAwgAAAMMAAADEAAAAxQAAAMYAAADHAAAAyAAA AMkAAADKAAAAywAAAMwAAADNAAAAzgAAAM8AAADQAAAA0QAAANIAAADTAAAA1AAAANUAAADWAAAA 1wAAANgAAADZAAAA2gAAANsAAADcAAAA3QAAAN4AAADfAAAA4AAAAOEAAADiAAAA4wAAAOQAAADl AAAA5gAAAOcAAADoAAAA6QAAAOoAAADrAAAA7AAAAO0AAADuAAAA7wAAAPAAAADxAAAA8gAAAPMA AAD1AAAA/f////YAAAD3AAAA+AAAAPkAAAD6AAAA+wAAAPwAAAD9AAAA/gAAAP8AAAAAAQAAawEw LU79VuVdRlX2lEyIb4/2Ti1Ow18BMClZJW0tTq9zNXVQWwEwCk53bTV14U8BMClZMFczlklRATBb jdF5Fk6qfgEwKwABP5bMkfRd9F0BMM9+rH7ReYBiATDIVBRc6G6wZS1OsGUBMFuNj3kMVB+CATBz T6+L3pg/ngEwrE7hTxqQ4U8BMNtWvo/2ZeNOATApWY2H4U8BMLdf4U8sAAHgZb9+ATB/XlSAvo8B MC1O/VbRkY2HNXVQWxZTbFH4UwEw21a5Zed+3U/qgahSFlMBMGpt3GLqjwEwHE4nWdGRemYBMHdt fm7ReYBiATAzdV50NXWbUgEwKwABglnYmtiai1MBMPFtM1dXU150ATD9VvBsIWCJWwEwHWCQbjV1 FGwBMBdTrE7wbHBnwXg1dRR4dnpAYgEwAVrcgDV1UFsBMFdTXnTnft1PATCBW+JsWlMtAAEBWgEw IAAHThxOO1OXdQEwLU50UX1sZo8BMI95MHV9bGaPATApWSVthVHDcTpnFHh2ekBiATAgAApOd20a kCh1ATB/lc5XfWxmjwEwCk59bBqQKHWUTvGDATAwAAHPgt5d0ZGZnwEwIAAKTndt22yaTgEwF1N9 bI95MHUBMH+ViVt9bGaPATAgABtS9H7GluJWATAgAFQAQwBMAH12coK2WzV1ATAgADxom1I1dWhW ATAgAHdtFFzGluJWATAtAAFUAEMATAC2W61eUX/cfgEwrE4cTrllATDViHRR0XmAYgEwrE4cTrll SVE1dUl7AjB2US1Od20UXMaW4lYBMAlOAE7NkeVdATAgACdZEFX7eahSSXsBTxpOgJAbAAH3i7KL /ouFjcePMQAwACFr5U4KTgz/l18wUoZO11OtiwFPGk6MVGZbWFSEdm5mTZCki+9TAjAGAAEATgEw SGiLTwZSkGcJAAExAA7/FG/Dfg5O7pWYmKiLuosNAAGMTgEwgllVT4Rn+l7YmkhlhHYUeNFT4lYf lgkAATEADv8UeNFTuk5YVIR2eXK5cBEAATEAKQAUeNFTuk5YVHpmRlXYmgEwO5CRjx1g9H79gJtS Ol8NAAEyACkADU6EVZ9sGpAM//Ng1WyQls+Fg4/xbQoAATMAKQBBbahSD2ERVNRrg48OZj5mCQAB NAApAOl+SGXuXd2N1GuDjydZCQABNQApABR40VO6TlhUDU4NZ6F7CwABMgAO/xR40VO6TlhUhHYg fSiNIWqLVw0AATEAKQAUeNFTuk5YVIR2sFFxXCB9KI0haotXDwABMgApABhPwHkUeNFTuk5YVIR2 OF7EiSB9KI2BiUJsFgABMwAO/0hoi08GUqtOGv/QZ0hoi09sUfhThHYUeNFTuk5YVIR2IH0ojSFq i1cPAAE0AA7/2JpIZRR40VPiVh+WlF7li3dRB1mEdnlyuXAGAAExACkAn2wakG+CfVkIAAEyACkA T1MDjHZeTIjlXVxPCwABMwApANiaSGWzUVZ7ATDrXx+QZ2JMiBEAATUADv+CWVVP3U8BYxR40VO6 TlhUhHaXZddfjFTAb8VgH/8TAAE2AA7/FHjRU+JWH5aEdgZSe3wa/+iQ6JXiVh+WjFR5mO524lYf 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 U1Vc742EXxAAATMAKQCCWVVPT1OpUlhU5V2eW7BzTIAaTh91r23udgdoDQABOAAO/xqQx4+FX0eQ WXW6ToR2zWRcT7ll1WwIAAExACkAaFFil6qFbJGhewZ0CQABMgApAKqFbJHZfthOhHZ6gi9nDwAB MwApAIJZVU/AaKiLjFT0fgFjqoVskYR2wG+xUidgCwABNAApAKGAQ2fAb7FShHbNZFxPuWUPXw0A ATkADv8akMePH2HFYFl1uk6Eds1kXE+5ZdVsDAABMQApAIJZVU+UXih1XpfPfk5tJ2DAb7FSEAAB MgApAF6Xz35ObSdgwG+xUi1O6JDolc9+BnSEdiON+04IAAExADAADv+oi7qLDk4Ub8N+BAABA04B MDtg034QAAExAA7/2JpIZRR40VPiVh+W2X5sUfhTJl5lZ4R29048UBEAATIADv8akMePO04aTqFS hHbRU1VcJl6oUlhU5V2EdhBif5UTAAEzAA7/QGIJZ4R2oXsGdLll1WxHVy9mS2K1awz/Gk6hUi9m c1EulRkAATQADv/oXdhThHb2ZeNOHCCxguBlfnblZaJ+HSAM/wCX034IVJ5bRZYM/42HR2wvjRqQ EgABimKAYi9n2FMQYtGRsZQN/w3/gllVTx5kmlsCXjpXAJdCbCAAKwABEDD5V62L9mX0lREwMgAw ADEAMgB0XjIACGcyADgADf8yADkA5WUXU6xOATAyAAhnMgAxAA3/MgAyAOVlCk53bQEwMgAIZzIA NAAN/zIANQDlZfFtM1cwAAEQMPlXrYv5W2GMETABTxpOQwBFAE8ALwA7YM9+BnQBMBR40VM7YNF2 ATAUeNFTz34GdC8AeZjuds9+BnQvAIBiL2fPfgZ0LwCnTsFUz34GdAEwp07BVMSJElITTrZbSXsx AAEQMPlXrYs5jSh1ETA0ADAAMAAwAENRLwAkTilZIAAgACoAcE4ATmCNAE4sAA1OjVFTYphiHSAg AACXKFcMVABOKk4IZ4R2DFQATv6LC3pNYqtOCWdkaxhP4GAM/1VT7HIATiYAASAAIAAgACAAIAAg ACAAIAAgACAAIAC6TjZlOY0yADYAMAAwAENRAjAI/ytUJE4pWS1OEJkBMAdjmltZZVBnATDBi2ZO ATA2g7lwCf8eAAEgACAAIAAgABqQx4+MVBdPGln9VoVR0XmAYgFPGk6lY+aJDP/RU7Bz2Y+bTgFP Gk4tTm5mTZBYWyhXGv8nAAExAC4AgGIvZ4hfW3IM/0ZPAGfIfhJQ7ZWEdmxR+FMATidZqGMb/6uI gGIvZ7pOWFTkVUtO5U47n4R2bFH4Uwz/zVMMgDtthHbYjw1OGZUpAAEyAC4AFHjRU85O6WXZXzBS WmYM/6dOwVQAX9FThHYNThFcDP9GTwJeOlcQYp9ShHanTsFUSFwHY+9TcGUM/wBf0VOEdoqNGlkM /3trl1+KjetfJAABMwAuAKdOwVQAX9FT7ZXolSCQZo8M/3NR6GyAYi9nDP8NTnNR6GyiWzdiG/+n TsFUAF/RU/pRZWdNYn5iols3YgEwfmJWU7lwIAABNAAuAIZO44kCXjpXhHYNTsJhgGIvZwz/wmGA Yi9nhHYNToZO44kCXjpXDP8NTuV3U5AAl0JslF7liwGMH40jjScAATUALgAAl0JsxlFueIpi4WOz UZpbp07BVBBiJY0M/0ZPoWwJZ7pOc1HobACXQmwM/3NTf092UBRc82BzUehsX04NTuV3U5CCWVVP c1HobCsAATYALgAAl0JshHZoiL6PDU4fWdN+hGcWUwz/RVGlZUB3HCBFZYtOGk8dIDxoD1+EdgCX QmwM//R2pWNxX81Uhk4NTgxU4lYflvlbAJdCbAZ044mEdgBOAgAB9IEnYCMAATcALgA6fxFcjFsH WYR2AJdCbDZlxpYBMEdsO2ABMAZSkGc6ZzZSDP8cIGxR+FNeec9+K2eiaA5OJ1kRgTFZu1NUgPt8 HSAiAAE4AC4ADU79gM5O6oGrjv2Am1LQY0dTZWcVX/xbols3YgCXQmwM/81TDIApWSlZKFexYihg ols3YgCXQmzPfjhe2FOoUicAATkALgCIlPlbAJdCbCdZtlscIDVUEGIATgWVpXwdIBr/bFH4Uw5O ols3YjVUDP8CXjpXDk4AX9FTNVQM/wBf0VMOTktt1Ys1VAz/JiAmICwAAQ1O/YDhbrONols3YgCX QmwBMNl+ols3YhtSIJD3TjxQLACNUVtyhHaAYi9nX06hbAln9048UAIwOWhuY0NnAVo6Z4Rn336h i3mY7nY6f3eWhHY1ADYAJQAsAAFlZ5Bujk4Al0JsmltJThmV74sM/zgAMAAlAIR2On93lu5PDVkQ YixnKHWOTu5PDVkAl0Js/Fv0gYR2GZXviwz/IACKYoBiL2fYUxBi0ZGxlIR2DU6MTgmQFgAB6WJz UehsATABlZpbATDhbrONAl46VwCXQmwM/xtSIJCiWzdi9048UAIwIAAIAAEsZ/6LC3rNkblwsovj iRr/FQABMQAuAIJZVU9ueJpb7nYHaKJbN2IM/4JZVU8GUpBnAJdCbHNR+3y6Th//GgABMgAuAIJZ VU/OTgJeOlcI/6JbN2IJ/9KJpl7bj0yICWdIZYR2ols3YgCXQmw2ZcaWH/8gAB0AATMALgD0VtV+ p07BVBBin1IyACpOOGjDX+BWIH3uXQJfFlMrABBiLGcYT79SDP90ZQZ0p07BVACXQmwaAAE0AC4A gllVT/lbols3YgCXQmzbj0yIdGUGdIxUBlKQZwz/Yl8QYqdOwVQFUwCXQmwf/yAAJQABNQAuAIJZ VU/6V45Op07BVACXQmwOTt56iU7LU0ZV+VvUawZSkGcM/254mlsRYuxOhHY4aMNfyYtCbAz/Yl8Q YqdOwVSCafVfH/8wAAH+iwt6L41/ekhoi08GUqtODP/mi8Z+sovjie52B2iiWzdiIAA/ACAAols3 YoGJQmwgAD8AIACiWzdiAJdCbCAAPwAgAKdOwVQFUwCXQmwgAD8AIACnTsFUgmn1X254mlstAAFo UcePC3oM/yAAIADmi8Z+sovjiYpigGIvZ2yP2FM6TtGRsZSEdrll1WyMVOVdd1EgAAj/KVKmbTpT ATDeVq9uBlKQZwEws1FWeyFqi1cGUpBnATBLAEoAATA2AAEkAEEAUABQAEUAQQBMAFMAATBCAFMA QQABMIJp9V+aW0lONwAqTjhow1/YecCLATA0eE9XJ2AbUrBlhHYzAPN3SoWeW4yaATBTAHcAZQBl AHQAIABQAG8AaQBuAHQAIWqLVwEw+leOTg1ODFQmAAGnTsFUH3V9VGhUH2eEdjEAMgAqThtSsGUd YO+NSXsJ/wz/0GNHU6dOwVSEdt56iU6bUgz/bnjdTwJeOlcQYp9SATAijaFSEGKfUgIwJgABMQAu AIxj4WPOTgJeOlfSiaZe249MiAlnSGWEdqJbN2IAl0JsNmXGloR2Omc2UoxUuWXVbAz/W3sJkNia KI3PkYR2ols3YgCXQmwb/ysAATIALgCMY+Fj+VuiWzdiAJdCbNuPTIh0ZQZ0ATAGUnt8ATAGUpBn hHa5ZdVsDP/QY9iaBFQqTtKJcoL5WwCXQmwGdOOJhHYATvSBJ2AM/wBnyH5iXxBiEwABp07BVAVT AJdCbAz/DmZueKdOwVSEdt56iU4YT79SDk5WU7lwG/8nAAEzAC4AjGPhYxZZ6JAAl0JsjFSFUeiQ AJdCbABOU08WU6F7BnSEdjpnNlIM/85ODIBNlk5Pp07BVIR273owUu96H3V9VGhUH2cQYixnG/8c AAE0AC4AjGPhY6dOwVQ4aMNfyYtCbIR20GO8cLll1WwM/254mlsJZzhUFV+bUoR2p07BVIJp9V8b /x0AATUALgCMY+FjL2WRZBR40VMAl0Js5V0LegRUKk42lrVr5V1cT9CPXE+EduVdd1GMVM1kXE+5 ZdVsG/8LAAEQMPxbCF6Ae8tOETBbAEQAbwBuAF0AJwABIABEAG8AbgAa/0kATgBDAE8AUwBFAAj/ /VZFlvt8337lXQt6CF5UgAhUGk93AHcAdwAuAGkAbgBjAG8AcwBlAC4AbwByAGcACf8aT1hUBgAB oCUTThpOzIBvZhr/KwABQVMaWXRe2JrReYBiAU8aToR2FHjRUw5OoXsGdJ5b9Y3PfoyaLAAoV9Bn V4QNVNia0XmAYgFPGk7lXVxPH2f0lSwASFEOVMViU195mO52z34GdAEw+3wqAAHffuVdC3oIXgEw p07BVM9+BnQBMG+P9k7okM9+BnQb/0hRDlRcTzpOCU4qTqdOwVSEdjtO+077fN9+5V0LegheDP8m XoaY+3zffgZSkGfiVh+WAF8qAAFVXKJbN2IAl0JsA4wUeAEwp07BVHlyJ2CaW0lOjFTmi8Z+hHYA l0JsBlLjiQ5OBlJNkUl773owUu96hHYAl0JsoXsGdOVdXE8M/2BZmluGTqdOwVQqAAECXjpXhHYQ Yp9SG/9/lR9nDk79VkWWdpgWXKhU4ot+mO6VAE53jeVdXE8M/2hRC3rCUw5O5YtsUfhTFHjRU6F7 BnTYU2mXeZjudgIw/mZ7mnBTpl4vAAHlXVxPAE50XkpTDP9IUQ5UH40jjdtWKk4IVFxPeZjudgj/ CFRcT7llBlIrUjpOGv9CAEYATAABMEkAbgBmAG8AcwB5AHMACf+Edp5bvWUM/2hRC3rCUw5OcFOm XhR4JQABdnpAYkMATQBNANtWp36ki8GLx48Lehv/+VsaTqFS/FsRVIR2FHjRUyiNz5GhewZ0U0/7 fIR2hGf6Xgln8W1lUTBXFHh2egIwIAAKAAGgJRR40VOhewZ0qFTii89+jJoa/y0AASAAIAAgACAA /mZcTzpOeZjudjtg0XYWYs9+BnQ7Tvxbhk4xADAAGlkqThR40VOhewZ0qFTii3mY7nYM/y5eqVLZ j5tOAU8aTmhRYpf6Xst6FHjRU6F7BnRTTyEAAft8CP9BbQt6ATDEfsd+ATDpfkhlCf8M/wlnSGUw V9BjR1OGTtmPm05sUfhThHYUeNFTSGWHc4xUG1KwZf2Am1Ia/wYAATEAKQBOUydZNXVQWwYAATIA KQCFjf5Wb4/2TgYAATMAKQAKTndtPGgUXAQAATQAKQBRfxNmBwABNQApAM2Rhl5lWW5m8GwGAAE2 ACkAc0+vi96YP54HAAE3ACkAf15UgL6Pb4/2TgYAATgAKQCsTuFPGpDhTwYAATkAKQBOU9yAKVkQ YjwAHyAIAAExADAAKQDhTylSSlP8W1NPCgABoCUUeNFToXsGdPlXrYvPfoyaGv8uAAEgACAAIAAg AP5mOk53bRRcATAUeGV50XmAYgEwh1sakM2R5V0BMLdec0/GluJWATAgAA9ZsGU1dVBbATAgABdT rE77eahSATAXUydZuWVjawEwP5bMkfRd9F0BMCsAAU5T3IApWRBiATBXUypZNXVQWwEwUX8TZgEw zFsvbjV1UFsBMCh1y1Nvj/ZOATAfZlF/EJV3YwEwHE5vj6GA/U4BMDxol2cBWhRcATDRkXaHb4/2 TgEwKgABKVlsmq5fNXVQWwEwhY3+VjBXBnQBME5TqFLemClZATCwZWVZeXIBMOFPKVJKU/xbU08B MM6QZFdvj/ZOATDxbTNXUWjygwEwRU52UW+P9k4BMLdfKgAB4U/gZb9+ATCwZQ9h0XmAYgEwiGwz lvt5qFIBMElRZWjReYBiATCvZXlyR1kBMAhUm1LRkWVoATDdhFhiUWIBMP9+33bReYBiATD6XkyI O2BMiABfLgAB0VMtTsNfATAgABBi/ZDIj25mATAgAApOd201deFPATAgAHNPr4vemD+eATC3X+FP 4GW/fgEwG1L0fsaW4lYBMAFaG1LlZbBlATBUAEMATAABMOVlNXU1dVBbATAsAAFVXK+LGpDhTwEw IAATZh1g0XmAYgEwIADbdidZUX/cfgEwAVrRecZZ0XmAYgEwT1MMVMaW4lYBMBBi/ZAifR2NATDN kYZeZVluZvBsATCsTuFPGpDhTwEwKgABR2zdXYBiL2cBML9Om1IJVGVZATDIj150O1OXdQEwDFS5 ZQFaxokBMCdZEFX7eahSATAtTm+P/VZFlgEwF1MnWbllY2sBMB1gkG41dRRsATBXU6xOKgABTlNe dHBnATBUgPNgUX/fVwEwKVklbRqQf14BMHRREFUakOFPATD/W5tSmk4ybQEwam1ub6GLl3s6ZwEw Ck53bU5TeYYBMGZt0VP2lEyIATBSYJ1bKwABoYD9TgEwIABmaydZCVRlWQEwIAB/XhxONXXhTxR4 dnpilgEwTlOBWzV1UFsBMAlOiVtJUTV1ATB/Xn+JWlNUgAEwHE65ZRqQ4U8BMBdTrE7TYg5mSXst AAExADAAMAAaWbZbAU8aTtBjm0+GThNOGk6EdhR40VOhewZ0+Vetiwz/iW3KU4R2TIgaTgVT7GIa kOFPATAgAG+P9k4BMJJOVIBRfwEwtls1dQEw0I8lhEZVATAEAAGvgkdySXsCMAYAAQBOATBIaItP BlKrTggAAYxOATBtUSpO+lcsZ4Jp9V8IAAExAC4AwE5ITi9mols3Yh//HwABMQApAKJbN2IBMCh1 N2IBMO52B2iiWzdiATBcbyhXols3YgEw71PlTgGQ2X7eeolOy1NGVYR20mtvg6JbN2IIAAEyAC4A wE5ITi9mAJdCbB//NAABMQApAFcAQQBOAFQAUwAvAE4ARQBFAEQAUwAvAEQARQBNAEEATgBEAFMA ATAfd0dQAJdCbAEwols3YgCXQmwBMCh1N2IAl0JsATCnTsFUAJdCbAEwvouhiwCXQmwBMACXQmzE iTxoATAKAAGAYi9nAJdCbAEwXpeAYi9nAJdCbBYAATIAKQBIaItPGv/QZ9CPJYQKTn9eSlSYYgRc +VsAl0JslE5CXCFrhHYGdOOJDQABMwAuAACXQmzlXVxPhHYyACpO+lcsZ7lwGv8FAAExACkA7l0C XxZTBgABMgApABBiLGcYT79SCgABNAAuAACXQmzlXQt6aFHHjwt6Gv8iAAExACkAAJdCbDZlxpY/ AACXQmx0ZQZ0PwAAl0JsBlKQZz8Agmn1X254mls/AACXQmwGUuOJPwAAl0Jsnluwcw5OjJrBiw0A ATUALgCYW7llU0/7fPlbAJdCbIR2mltJThr/EgABMQApAFIATQAI/+52hHYBMHNRLpWeW/WNATB4 UYtXk4/6UQn/EgABMgApAFIARAAI/+52hHYBMHNRLpWeW/WNATB4UYtXk4/6UQn/DwABNgAuAKdO wVTPfgZ0MwAqTjhow18gfSiNeXKBXxr/CQABMQApAE9lEJWEdgJeOlfFVcmJCwABMgApAA1OSFwN TiBjhHYYYpdlvnxeeQsAATMAKQDiVh+WT1NcT4xUhpj8W/2Am1IJAAE3AC4AFG/Dfg5O7pWYmKiL uosIAAEJTgEwAl46VwCXQmwGUpBnDwABMQAuAKdOwVQNTgxUNpa1a4R2G1KwZR1g740NTgxUHwAB MQApAKdOwVQbUrBlNpa1awj/oJiGiSdgG1KwZQEwlF4odSdgG1KwZQEwp07BVBtSsGUBMHNe8FMb UrBlCf8MAAFhAC4ASGiLT8aJkZga/yCfB2iEdqdOH3USAAFiAC4ASGiLT7KL44ka/0kAcABoAG8A bgBlAIR2UwBpAHIAaQAnAAEyACkAp07BVBBin3E2lrVrCP8lhACVG1KwZQEwU0+Mmg9fG1KwZQEw 9048UOVdC3obUrBlATDGlhBiG1KwZQEw9048UGyP+3kbUrBlCf8iAAFhAC4AL2WRZEhoi0+yi+OJ Gv9OAGkAawBlABNOVlOXXgEwOG4PYlZTxYgHWQEwfWxmjzUAUwCXXgEwH2b0XUtRllRhVQkAATIA LgCnTsFUaWJVXLll1Wy6iwsAATEAKQACXjpXhHawZZaYC3qmXgZSkGcLAAEyACkAbFH4U4R2sGWW mAt6pl4GUpBnBwABMwAuAMaLK1KiWzdiH/8LAAExACkA6I2KjT+en2wa/zUAe3yiWzdiDwABYQAu ABtSsGUFgBr/eXKBXwEwc1HobLlwATD3TjxQEQABYgAuAOllH2elYzZlBYAa/3lygV8BMHNR6Gy5 cAEw9048UBIAAWMALgBNUh9nO05BbaJbN2Ia/3lygV8BMHNR6Gy5cAEw9048UBIAAWQALgAOVB9n O05BbX6Yolsa/3lygV8BMHNR6Gy5cAEw9048UA8AAWUALgA9hA1PBYAa/3lygV8BMHNR6Gy5cAEw 9048UA4AATIAKQDpZR9nols3YlZ7ZXUa/91PhJ8DdNVsGVIGAAFhAC4A3U+EnwN0U5AHAAFiAC4A fmLGUQBO91P2dAoAAWMALgCZn3dTzpgBMBVfBnJBbUyIDAABMwApAKJbN2ItjXBOx48Let5Wr24G UpBnFwABYQAuAABnyH4odTdiATAAlS5VL2UBYwEwxpYQYgZSAJUBMJ5YPFDjTgZ0JiAmIAYAATQA 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 AJdCbEl7p34SUgZS1WwI/0IAUwBBANVsCf8SAAEzACkAAJdCbAj/pH8J/0NnzZG+i25/uWXVbAj/ QQBIAFAACf8JAAFhAC4AQ2fNkW54mls0AGVr1WwTAAFiAC4ASGiLTwZSq04a/3dRU08Al0JsQ2fN kb6Lbn83aItPy07Nfg8AATMALgCeW7BzEGIsZxhPv1Ia/3NR6GyFUeiQAJdCbBMAATEAKQBEAEYA WAAI/0QARgBUAAEwRABGAE0AATBEAEYAQQBJewn/EwABMgApAFIAQQBTAAj/71NglydgATDvUyh1 J2ABMO9T9H6kYidgCf8rAAE0AC4ASGiLTwZSq04a/3dRU0/7fN9+p07BVACXQmwFUwj/eXInYACX QmwFblVTCf9IaItPBlKrTgj/jFsQYgCXQmzlXQt6gYlCbIR2eXInYACXQmwBMAgAARpOoVIAl0Js hHYGUpBnCf8aAAE1AC4Ap07BVAVTAJdCbJOP+lEI/6dOwVQFUwCXQmwhan9nCP9zUS6VgYkgfctO zX4J/wn/DAABMQApABhPwHmnTsFUBVMAl0JshHYHaMZRCAABlE4BMKdOwVSCafVfbniaWxsAATEA LgAaTkx1AGdzT6JbN2IAl0JshHZrUSpOgYkgfctOzX4I/yQAQQBQAFAARQBBAEwAUwAJ/woAATEA KQDPaypOgYkgfeaLxn6aW0lODAABMgApAM9rKk6BiSB9hHZQW4GJIH0GUuOJLQABMwApAEhoi08G UqtOGv/QZ5ReKHVvj/ZOp07BVKJbN2IAl0JsOACBiSB9UFuBiSB9VVwAX7KL44kI/55bsHNOAFAA RACBiUJshHYM//pXjk7eeolOBlKQZwz/DAABbniaWw1ODFR5cidghHYYT0hRSXunfgn/DQABMgAu AO5dAl8WUxtSsGUM/w1OcI37Wzhe740KAAExACkABlKQZ6JbN2JzUcNfwE5ITgwAATIAKQAGUpBn 3nqJTstTRlXhbrONC3qmXggAATMAKQAGUpBnXG8oVzpnGk8LAAE0ACkAbniaW+qB8V2EdvdOPFA6 f3eWFAABNQApAEhoi08GUqtOGv/QZ9ia73oNZ6FSaFaCU0ZVhHYbUrBlS07vjQgAATMALgAbUrBl NABhjFCW1WwJAAExACkAz1ERXBr/SGiLTwZSkGcJAAEyACkAVFJklhr/SGiLTwZSkGcJAAEzACkA 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 AWZlIABzXgEAAQt6LAABMwAIZyAAMwAtACAANADxbTNXIAAgADMACGcxADAALQAxADEACk53bSAA IAAzAAhnMQA3AC0AMQA4ABdTrE4gACAAIAAzAAhnMgA0AC0AMgA1AH9e3l0gAAMAAVVPIACccAUA AeX/MwAyADAAMAABAAH6UR8AATIACGcyADIALQAyADMAf17eXSAAIAAzAAhnIAA3AC0AIAA4APFt M1cgACAAMwAIZzIAMQAtADIAMgAKTndtAwABTmf6XptRBQAB5f8yADkAOAAwAAEAAbBzCgABuk4K AAoACgAKAAoACgAKAAoAi04fAAEzAAhnIAAyAC0AIAAzAPFtM1cgACAAMwAIZzkALQAxADAACk53 bSAAIAAgADMACGcxADYALQAxADcAF1OsTgMAAVVPIACcbwUAAeX/MgA2ADAAMAABAAHmixIAAel+ SGUDgDhoqGZLAFAASQArAEIAUwBDACAAnlsYYq2Lw34lhCkAATMACGcxADYALQAxADcA8W0zVyAA IAAzAAhnMgAyAC0AMgAzAApOd20gACAANAAIZzEAMwAtADEANAB/Xt5dIAA0AAhnMgAwAC0AMgAx ABdTrE4DAAEhhSAAzV0BAAHGfhIAAQFPGk7pfkhlA4A4aA5OqoVskVNP+3y+i6GLnlsYYnlyrYvt cykAATMACGcxADYALQAxADgA8W0zVyAAIAAzAAhnMgAyAC0AMgA0AApOd20gACAANAAIZzEAMwAt ADEANQB/Xt5dIAA0AAhnMgAwAC0AMgAyABdTrE4CAAEzAClZBQAB5f80ADgAMAAwACoAATMACGcy ADIALQAyADMA8W0zVyAAIAA0AAhnMQA5AC0AMgAwAApOd20gACAANAAIZzIANgAtADIANwB/Xt5d IAA1AAhnMQAyAC0AMQAzABdTrE4gAAMAAVppIAApWR8AATIACGcxADYALQAxADcACk53bSAAIAAy AAhnMgAzAC0AMgA0ABdTrE4gACAAMwAIZyAAMgAtACAAMwDxbTNXBAABAU4gAFpXIAABAAEnWR8A ATMACGcxADcALQAxADgA8W0zVyAAIAAzAAhnMgA0AC0AMgA1AApOd20gACAANAAIZzIAOAAtADIA OQAXU6xOAwABVU/XX2qABQAB5f80ADkAMAAwAAEAAbJ+FQABMgAIZzIANQAtADIANgAKTndtIAAg ADMACGcgADMALQAgADQA8W0zVyAAAwABSJbXX05TNQABCjCzUqhSCFQMVNVsCzABMAowPnkaT91P aZbVbAswATAKMOVdJE/dT2mWYWeLTwswnlvNZJRe+VtWe2V1Dk4JZ0hlA4yXXAOMqoUBMOOJx5ae jwCQylPdj6p+7pWYmFhU5V0EWQZ0gGLnXSkAATMACGcgADMALQAgADQAf17eXSAAIAAzAAhnIAA5 AC0AMQAwAApOd20gACAAMwAIZzEANgAtADEANwDxbTNXIAAzAAhnMgAzAC0AMgA0ABdTrE4DAAGf lDhs42gFAAHl/zIANQAwADAAKQABMwAIZyAAOQAtADEAMQAKTndtIAAgADMACGcyADMALQAyADUA 8W0zVyAAIAA0AAhnMQAzAC0AMQA8AB8gATUAF1OsTiAANAAIZzIANwAtADIAOQBma0lsAwAB1l5N iA5mBQAB5f80ADIAMAAwAAYAAceRCgAKAAoACgAtjQ0AAdiaSGXTTqhQoXsGdA5O5V2CU2lymWVN kQGQKQABMgAIZzIANAAtADIANQAKTndtIAAgADMACGcxADAALQAxADEA8W0zVyAAIAA0AAhnMQA0 AC0AMQA1AH9e3l0gADQACGcyADcALQAyADgAF1OsTgMAASBf8k5qjCsAATIACGcxADgALQAxADkA 8W0zVyAAIAAzAAhnMQA3AC0AMQA4AH9e3l0gACAAMwAIZyAAMgAtACAAMwAKTndtIAA2AAhnMwAw AC0ANwAIZzEAW09xXCAAJwABMgAIZzIANQAtADIANgDxbTNXIAAgADMACGcgADMALQAgADQACk53 bSAAMwAIZzMAMQAtADQACGcxAPFtM1cgADQACGc3AC0AOAAKTndtAwABTmd/XvBsBgABH3UKAAoA CgAKAKdOHwABMwAIZyAAMwAtACAANAAKTndtIAAgADMACGcxADcALQAxADgAz4LeXSAAIAA0AAhn MgAxAC0AMgAyAPFtM1cDAAFkbKp+/VYgAAEzAAhnIAAxAC0AIAAyAApOd20gACAAMwAIZzIANAAt ADIANQDxbTNXIAAgADQACGcgADcALQAgADgAz4LeXSAAHwABMwAIZzEAMAAtADEAMQAKTndtIAAg ADQACGcgADcALQAgADgA8W0zVyAAIAA1AAhnMQAyAC0AMQAzABdTrE4DAAEgX5tsjGUFAAHl/zMA MAAwADAAFQABMwAIZzEANwAtADEAOAAKTndtIAAgADMACGcyADQALQAyADUA8W0zVyAAHwABMgAI ZzIAMQAtADIAMgAKTndtIAAgADIACGcyADUALQAyADYA8W0zVyAAIAAzAAhnIAAxAC0AIAAyAM+C 3l0DAAH3lmtT7WUfAAEyAAhnMgA1AC0AMgA2AApOd20gACAAMwAIZzEANgAtADEANwDPgt5dIAAg ADMACGcyADQALQAyADUA8W0zVwMAAbde+l5zXgUAAeX/MQA5ADgAMAAGAAEUeAoACgAKAAoA0VMV AAHOToBiL2dwjRFUoXsGdBQgFCAUeNFTz34GdIR2hpj8W5tSDk5nYkyIm1IgAAEyAAhnMgAxAC0A MgAyABdTrE4gACAAMgAIZzIANAAtADIANQAKTndtIAAgADIACGcyADgALQAyADkA8W0zVyAAAwAB MWdJUYmPCgABFHjRU7pOWFSEdgOAOGgOTsBvsVIgAAEzAAhnMgAyAC0AMgAzABdTrE4gACAAMwAI ZzIANgAtADIANwAKTndtIAAgADMACGcyADkALQAzADAA8W0zVyAAAwAB/mZmWw5mEgABEGKfUoR2 p07BVM9+BnQUIBQgp07BVM9+BnSEds6R7oYQYn+VHwABMgAIZzIANAAtADIANQAXU6xOIAAgADIA CGcyADEALQAyADIA8W0zVyAAIAAyAAhnMgA4AC0AMgA5AApOd20DAAH5Zu5PKm0fAAEyAAhnMgA4 AC0AMgA5ABdTrE4gACAAMgAIZzIAMQAtADIAMgAKTndtIAAgADIACGcyADQALQAyADUA8W0zVx0A ATIACGcyADgALQAyADkAF1OsTgAwMgAIZzIAMQAtADIAMgAKTndtADAyAAhnMgA0AC0AMgA1APFt M1cDAAFjhCAATlkQAAGwZadOwVQUeNFTQW0LehhPFlMOThR40VN5mO52oXsGdBQAATMACGcgADMA LQAgADQA8W0zVyAAIAAzAAhnMQAwAC0AMQAxAApOd20DAAEgXzhscGcDAAGhewoABnQQAAGzUdyA LU5CXC0AemZnYVNiIJDYmkhl4lYfliAAIAAgACAAATMACGcgADIALQAgADMACk53bSAAIAAzAAhn IAA4AC0AIAA5APFtM1cgACAAMwAIZzIAMgAtADIAMwAXU6xOIAADAAElTiAADmYOAAGwZftOz34G dGhRYpehewZ0gGL9gNBjR1Oti8N+HwABMwAIZyAAMwAtACAANAAKTndtIAAgADMACGcxADcALQAx ADgAF1OsTiAAIAAzAAhnMgA0AC0AMgA1APFtM1cDAAH5Zjx5DmYCAAEHWehs0AABEDCoVOKLLwAv AKViDVTtcL9+ETAU/xD/EP8W/xb/GP8Y/xP/Ev8R/yAACP9oUSlZMgA0AA9c9mVNUTmN7XC/fgn/ CgAAMAAwADAAMAAwADAAMAAwADAwADIAMAAgAC0AIAA2ADEAMQAzACAAMwA3ADcANQAgACBfT2Ug ACAAMAA3ADUANQAgAC0AIAA2ADEAMgA4ACAAOQA4ADIAMAAgAH12h4UKAAAwADAAMAAwADAAMAAw ADAAMDAAMgAxACAALQAgADUAMQA4ADcAIAAwADYAMQAyACAA+WbqliAAIAAwADUAMQAyACAALQAg ADYANwAxADMAIAA3ADUAMgAwACAAh2UFbgoANXWukBr/cQBpAHkAZQB4AHUAZQB4AGkAQABxAHEA LgBjAG8AbQAgAAj/94vobA5mGv+lYg1UFmKoVOKLCf8KAKhgAGdzT4R2GGJldQhUXE8ZTzRPGv8g AAFPIAAaTiAAZlsgAGBOIABRfyAAKAD3i352pl7lZ+KLUX/ZeikAOwAgAPRmGln+iwt694sKTlF/ 2XpPbciJAf82AAEQMPlXrYv2ZfSVETAyADAAMQAyAHReMgAIZzIANAAtADIANQDlZQpOd20BMDMA CGcxADAALQAxADEA5WXxbTNXATA0AAhnMQA0AC0AMQA1AOVlf17eXQEwNAAIZzIANwAtADIAOADl ZRdTrE4nAAEQMPlXrYv5W2GMETDYmkJcoXsGdAWAATBpckFt6JDolQEw006oUOiQ6JUBMMeRLY3o kOiVylN2UdZO+HZzUeiQ6JWEdkyAGk7PfgZ0uk4rAAEAMAAw006oUKF7BnSEdn1ZT1f5W2xR+FOE dnFfzVQJZxpZJ1k/ADpOwE5ITtuPJ42vc4KCz344XvpR7pWYmD8AOk7ATkhO006TXoR2KVIodYdz Tk8/AC8AASAAIAAgACAA2Ha5cIR2XE8odQlnGlknWT8AOk7ATkhO42InjSgA0VOZZSkAAJeBiepU SE4aWbpOH//TTpNeX2MXgIJZVU9Nlk5PPwDATkhOL2awc+NOFlPTTpNePwAdAAEgACAAIAAgAIJZ VU9Nlk5P0I+TjxBiLGc/AIJZVU+hewZ0fVmTXlhbPwBhZ2JfAXgJZyh1F1Q/ACAALQABIAAgACAA IAAsZ/6LC3rOTp5bGGKEdtKJpl4M/9N+CFRIUduPhHblXYJTaXJBbaF7BnQGdPVfATAXTxpZAU8a ToR2EGKfUs9+jJrlTspTsosIXihXAU8aTtNOKwABqFBpckFtuWVilxpZdF6Eds9+jJpTTxpPDP9Z ZYhjgllVT6F7BnRpckFt006oUOiQ6JUM/9Bj2JrTTpNe0I8lhEhlh3MBMNBjR1PokOiV6X5IZeVO ylMNAAFpckFt006oUOiQ6JUoV2xR+FOEdnFfzVQCMBIACQEA2AAxAC4AU1/KTmlyQW3TTqhQoXsG dIR2EWMYYi9mwE5ITh//AQAGAA4ACQEA2PAyAC4AgllVT1pQfVk2ZSeNZVGTXqF7BnQf/wEABgAM AAHY8DMALgCCWVVPWlB9WahQTU+hewZ0H/8RAAHY8DQALgCCWVVP0GPYmuNiJ40I/9FTmWUJ/4R2 SGWHcx//DgAB2PA1AC4AgllVT9Bj2JrYdrlwhHYJZ0hlJ2Af/w8AAdjwNgAuAIJZVU9Nlk5P006o UKF7BnSEdl9jF4Af/w8AAdjwNwAuAIJZVU8JkOliDk70fqRiaXJBbb6LB1kf/w4AAdjwOAAuAIJZ VU9aUH1ZTZEBkNCPk4+hewZ0PwAMAAHY8DkALgCCWVVPTZZOT9CPk48QYixnH/8MAAHY8DEAMAAu AIJZVU+hewZ0fVmTXlhbH/8UAAHY8DEAMQAuAIJZVU/QY9ia4U9vYBZT+VuTXlhboXsGdIR2XE8o dR//JAABMwApAOl+SGXNU4iZhHa5ZdVsCP+CWVVPiJT5Ww1ODFSEdrpOx5EodQ1ODFSEds1TiJm5 ZQ9fATA6VwhUATAwV7lwJiAmIAn/DQABNgAuAIJZVU9il/lbWFTlXSiNkXUWYpViyYsJAAExACkA 71MNTu9T5U4RbEpUmFsPAAEyACkAgllVTwRZBnRTYg9cpWJKVAEwio2nfqViSlQaAAE3AC4A6X5I Zc1TiJmEdhwgAE4qTi1Ow18BMCROKk76VyxnuXCMVNtWeZj6Vyxnn1MZUh0gDgABOAAuAIJZVU8E WQZ06X5IZc1TiJktToR2slGBehgAATkALgCCWVVPDk4UeNFT+3zffoR24FF7fBwgeXKKa7pOWFQd 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 AWlyQW1hZ2JfAXiEdpReKHULAAF9bGaPNlIgkBpOhHZhZ2JfAXiUXih1BgABcGVuY8eRxpZoViAA DwABwE5ITi9mBFyRmMaLK1KAYi9nIABSAEYASQBEAD8ACgABOk7ATkhOgYkodVIARgBJAEQAH/8r AAEQMPlXrYv2ZfSVETAyADAAMQAyAHReMgAIZzIANAAtADIANQDlZRdTrE4BMDIACGcyADgALQAy ADkA5WUKTndtATAyAAhnMgAxAC0AMgAyAOVl8W0zVy4AARAw+Veti/lbYYwRMAFPGk5DAEUATwAv ADtgz34GdAEwFHjRUztgz34GdC8Ab1I7YAEwbFH4Uztg5V0vAIBiL2c7YNF2ATBsUfhTuk6bUkSN kG47YNF2ATCnTsFULQABADAAMAAwADAAMAAwv347YNF2ATCnTsFUPAAfIAHPfgZ0LwB5mO52z34G dAEwUABNAE8ACP95mO52oXsGdJ5SbFGkWwn/EGJYVAEwAl46Vztg0XYBMIBiL2c7YNF2SXsjAAEQ MPlXrYs5jSh1ETDl/zIANgAwADAAQ1EvALpOIAAgACROuk7KUyROuk7lTgpOMgAwADAAMABDUS8A uk4gAA1OjVFTYphiKwABADAAMFNfAE4qTgFPGk7OTlVTAE6nTsFUv34RVBpZp07BVL9+6I2KjYR2 9mUZUAz/xV97mIF6NHiEdgBOKk72dIiYMVwvZmxR+FOnTsFUz34GdIR2+VcrAAF7UQz/4FY6TqdO wVTPfgZ0L2ZsUfhT9048UP6ULU4AZ82RgYmEdgBOKk6vc4KCDP8vZvR2pWNilxFUols3YgEwJl6G mOJWH5YbUiCQ9048UIR2hpibUScAAbpOaXIM/+BWZGunTsFUz34GdCpOuk7KU3ZRQGKHc4aYhHbi Vh+WhHb9gJtSgF+AX7NRmluGTuWLp07BVChXAl46VwpOhHbeeolOm1ICMCsAAQAwADARYuxOKFc6 Tv1WhVEXTxpZbFH4U9Bjm0+nTsFUAJdCbIxUp07BVKF7BnSoVOKLhHbHjwt6LU4M/9FTsHMnWc+R AU8aTlhbKFeCWQtO7pWYmBr/LAABMQAuAKdOwVQAX9FT7ZXolSCQZo8M/+pTc1HobIBiL2cM/w1O c1HobKJbN2IM/xR40VPOTull2V8wUlpmDP+nTsFUAF/RU4R2DU4RXAz/Rk9ajbGUhHanTggAASAA IADBVEhcB2PvU3BlAjAsAAEyAC4Ap07BVABf0VP6UWVnTWJ+YqJbN2IBMH5iVlO5cAz/AJUuVbpO WFSlYihgEWLsToR2p07BVM5OGFrOgC1O+lFlZzFcuo4oV8VitmcKTgz/p07BVKFsIwABIAAgAAln GE+/Ugz/X04NTuV3U5DeeolO+VtLYqdOwVSEdjFfuXAM/0ZPEWLsTqdOwVSEdjFfuXCAX4Bfq4j5 W0tik2JPTywAATMALgDgUU5OoWwJZ6dOwVTvjQdohHbEiRJSDP8JZ8SJElJfTjtOgYkvZoBiL2dx mqhSDP+iWzdiAJdCbDBSDU6GTsSJElK6TlhUS2ItTgz/bFH4U155z34MAAEgACAAK2eiaA5OJ1kR gTFZu1NUgPt8AjAsAAE0AC4Ahk7jiQJeOleEdg1OwmGAYi9nDP/CYYBiL2eEdg1Ohk7jiQJeOlcM /w1O5XdTkACXQmyUXuWLAYwfjSONDP86fxFcjFsHWYR2AJdCbDZlxpYBMEdsCAABIAAgADtgATAG UpBnOmc2UiwAATUALgCKYgJeOldxmqhShHanTsFUAF/RUwZ044k6TgJeOlfokHGaqFIAX9FT6JAM /wCVLlW6TlhUzVOImYR2AJdCbIBfgF8vZhwg8na6TnhkYYwdIAz//FsLAAEgACAA9IEAl0JsDU6t ZfRmOWUmICYgKwABADAAMIiU+VvlTgpO7pWYmAz/bFH4U5Re5YsJZwBOKk5elzhec1EulYR2hHbS iXKCp07BVM9+BnRlZy+Nf3qnTsFUAJdCbAEwFHjRU4xUCk4CXqF7BnQbAAGEdmhRQW0Legz/KFee W71lp07BVKF7BnShewZ0U0/7fIR29mUZUMhT0VOwc4hfGlnwVtFgGv8TAAExAC4Ap07BVM9+BnTl i4JZVU+aW01PH/92UUyAI40vZsBOSE4f/xYAATIALgCnTsFUz34GdACXgYl3UQdZwE5ITjdohHb9 gJtSH/+CWVVP+Vd7UR//GAABMwAuAIJZVU8OTqJbN2IJZ0hln2wakAz/zk4MgNFTmGOiWzdihHaQ lidgAJdCbB//GAABNAAuAIJZVU/OTidZz5GEdgCXQmzhT29gLU7QY7xw+lE4aMNfhHaiWzdiAJdC bB//EQABNQAuAIJZVU9WexJSCWfeeolOm1KEdu5dAl8WU6dOwVQf/xkAATYALgCCWVVPbnjdT1Z7 ElKEdjhow18Al0JsKFcAX9FTx48Lei1Oq4hFUQZSnluwcx//EwABNwAuAIJZVU+KYhhPwHmEdrBl p07BVBBin1KEdqhjEVQCXjpXH/8UAAE4AC4AgllVT3+QTVGnTsFUz34GdKZsPYQQYhwg7pWYmM9+ BnQdIB//FAABOQAuAIJZVU+EZ/peApAIVKdOwVTPfgZ0EGJ/lYR2GE9vgh9X5Fgf/ysAAQAwADCI lPlb5U4KTnhRi1fulZiYDP8RYuxO034IVCdZz5GEdvlXrYuMVKhU4otIaItPDP92Xg1OrWU7YNN+ DP8oV8ePu1OUTnResouIY+WL/osLeoR2KwAB+ldAeApO249MiIZOJ1nPkRhPFlMM/2JfEGKGTgBO V1kCkAhULU79VgFPGk6EdqdOwVTPfgZ0oXsGdFNP+3wM/6mLZltYVCxUjFsOVN5WMFJsUfhTMVwM AAH9gB9Zy3o7Up5bvWUM/91PwYs9hDBXAjAPAAEQMPxbCF6Ae8tOETBbAEMAaABhAHIAbABlAHMA XQAMAAEAMAAwFHjRU6hU4ovBVExyRI3xbX6Y7pUXAAEAMAAwSQBOAEMATwBTAEUAIAAgACAA/VZF lvt8337lXQt6CF5UgAhUGk8aT1hULAABADAAMDEANgB0XoR22JrReYBiAU8aTs5OGk7MgG9mDP93 UQlnME7MW4R2p07BVBR40VMBMLBlp07BVPxbZVEBMOVdeoLlXQt6ATAuVU1SDk4uVQ5USXuGmCsA Ad9XhHaeW/WNDk6hewZ0z36MmgIw/mYoVxpZtlvYmtF5gGIBTxpOLU7FYvtOp07BVABf0VPlXQt6 CF4I/zV1UFsJ/wEw5V16guVdC3oIXgEwLlUOVA1nKwABoVLlXQt6CF4BMHmY7nbPfgZ0ATCnTsFU z34GdAEwvouhi+VdC3rokM9+BnQBMOVdeoLlXQt66JDPfgZ0ATCwZadOwVT8W2VR6JDPfgZ0ATCA Yi9noXsuAAEGdOiQz34GdAEwAU8aTqF7BnR+mO6VSXtMgKFSG/8AMAAwKFfQZ1eEDVQakOFPbFH4 U+VdXE83AHReCP85ADcAfgAwADMACf8M/x9n9JV/lR9nDk79VkWWdpgWXCsAAahU4ot+mO6VAE53 jeVdXE8M/2hRC3rCUw5OqGOoUuWLbFH4UxR40VOhewZ0U0/7fIR22FNpl+VdXE8M/3ZeEGKfUjtO /FuGTrBlp07BVPxbZVFzXvBTIQABhHb6Xr6L5V1cTwz/XE86TqdOwVTPfgZ0O078W4ZO0GenTsFU v34aWSpOJ1mLV3mY7naEdqdOwVQUeNFT5V1cTwIwKwABADAAMM5Oi04UeNFToXsGdKhU4ovlXVxP 5U5lZwz/XE86TnmY7nY7YNF2EGKfUoR2O04BY4ZOPGiXZwFaFFwBMH9e3l0BWhtS5WWwZQEw0Gc1 dVBb0XkrAAGAYsaW4lYUeHZ6QGIBMP1Wuk4akOFPSXtwZUFTtlsBTxpOhHanTsFUxIkSUkFtC3pT T/t8vouhiwEw1YuMmkBcQW0Ler6LoYsBMOV3xouhewZ0U0/7fCwAAb6LoYsBMC1O1YsaTqFSoXsG dFNP+3yzaAZ0ATAUeNFTSQBUAMSJElIBMBR40VN5mO52oXsGdFNP+3y+i6GLATAUeNFTKI3PkaF7 BnRTT/t8ATAUeNFT6X4dAAFIZaF7BnRTT/t8vouhiwEwFHjRU0sAUABJACAAU0/7fL6LoYtJe7ll YpeEdqF7BnSoVOKLeZjudgIwKwABADAAMP5mKFcEVDBXGlkhaz5OnlIUeNFTKI3PkaF7BnQBMBR4 0VN5mO52oXsGdAEwsGWnTsFUAF/RU0FtC3oYTxZTDk6hewZ0ATDOTjdowVRwjRFUz5ErAAGnTkl7 bFEAX/6LDP86TnBlQ1O2WwFPGk7QY5tPhk4UeNFToXsGdGxRAF/+i4R2+Vetiwz/Ok5wZX52tlsB TxpO249MiIZOFHjRU6F7BnSEdoVRrYsb/ysAAc5Oi04UeNFToXsGdKhU4ovlXVxP5U5lZwz/XE86 TnmY7nY7YNF2EGKfUoR2O04BY4xbEGKGTnBlQVMqThR40VOhewZ0qFTii3mY7nZTT/t8hHb6Xr6L LQABPACnTsFUxIkSUkFtC3pTT/t8vouhiwEw1YuMmkBcQW0Ler6LoYsBMOV3xouhewZ0U0/7fL6L oYsgAAEwLU7VixpOoVKhewZ0U0/7fLNoBnQBMBR40VNJAFQALQABxIkSUgEwFHjRU3mY7nahewZ0 U0/7fL6LoYsBMBR40VMojc+RoXsGdFNP+3wBMBR40VPpfkhloXsGdFNP+3y+i6GLATAgABR40VNL AFAASQBTT/t8vouhi0l7LAABuWVilz4ADP8JZ0B3ME7MW4R2FHjRU6F7BnSoVOKLz36Mmgz/iW3K U4R2TIgaTgVT7GIakOFPATBvj/ZOATC2WzV1IAABMDV14U/QjyWERlUBMK+CR3IBMCsAATtTl3Vo VrBoATCkThqQ0I+Tj0l7DP8uXqlS2Y+bTgFPGk76Xst62JpIZQEwjFsHWYR2FHjRU6F7BnRTT/t8 DP/5Wy1O/VYBTxpOFHjRU6F7BnRTT/t8GgABylMbUrBlU082UglnQHfxbTtShHYUeHZ6jFQGdOOJ DP/XUzBSols3YoR22JqmXsSL904CMAwAAQBOATBIaItPBlKQZxr/EGJ/lYR25nB8YBAAATEAATCn TsFUz34GdBBif5XHjwt6LU5YWyhXhHbulZiYDQABMgABMKdOwVTPfgZ0EGJ/lYR2CU4qTjaWtWsQ AAEzAAEwnluwc9KJcoJsj9hTx48Lei1OhHbbdeaCFYfYUxEAATQAATAQYp9ShHanTsFUz34GdNl+ bFH4UyZeZWeEdjZlynYRAAGMTgEwp07BVM9+BnSEdppbTU8BMEyAI40OTv2Am1KBiUJsIgABMQAB MCAAp07BVM9+BnSEdppbTU8JkOliCP8OTmxR+FPRU1Vc9mUfZwEwxIkhagEwTIgaTgEwp07BVHly uXD4dnNRCf8gAAExAAn/IACnTsFUaFEfdX1UaFQfZ4R2oXsGdAj/p07BVC8Ap07BVL9+z34GdAz/ p07BVC8Ap07BVL9+O2DRdgn/DwABMgAJ/yAAp07BVFZ7ElII/6dOwVRWexJSz34GdAn/DwABMwAJ /yAAp07BVABf0VMI/6dOwVQAX9FTz34GdAn/FgABNAAJ/yAAp07BVNCPJYQI/6dOwVRMiACVz34G dA5Op07BVPR+pGLPfgZ0Cf8TAAE1AAn/IAAUeKiLGv8GUqtOZltYVGxR+FOnTsFUz34GdIR2mltN TwwAATIAATAgAKdOwVTPfgZ0hHb9gJtSgYlCbA0AATEACf8gAJRe5Yt3UQdZhHbld8aLjFSAYv2A CQABMgAJ/yAA+05MgESNPGgHaMZRDAABMwAJ/yAAp07BVM9+BnSEdkSNPGiki8GLEwABNAAJ/yAA p07BVM9+BnSEdvlXe1EUkIRfjFRMgBpOS2ZHUxqQU5AXAAE1AAn/IACeW4tPsovjiRr/p07BVM9+ BnQgfSiNIWqLV8pT+05MgESNPGgHaMZREAABMwABMCAAp07BVGhRH3V9VGhUH2ehewZ0Gk6hUkZo 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 hHZil9WLDQABMwAJ/yAAp07BVM9+BnQZUAmQuk6EdvlXe1ELAAE0AAn/IAAZUAmQuk6EdkSNPGik i5pbDgABNQAJ/yAARI2QbmBshHbQj1xPOmeEZ8pTTIAjjRkAATYAATAgAJ5bi0+yi+OJGv+nTsFU z34GdESNkG5gbIR2+l6+i8ePC3qMVNCPXE86ZzZSGwAB6X4gAEhlIAADgCAAOGggAKhmIABLAFAA SQArAEIAUwBDACAAnlsgABhiIACtiyAAw34gACWENgABEDD5V62L9mX0lREwMgAwADEAMgB0XjMA CGcxADYALQAxADcA5WXxbTNXATAzAAhnMgAyAC0AMgAzAOVlCk53bQEwNAAIZzEAMwAtADEANADl ZX9e3l0BMDQACGcyADAALQAyADEA5WUXU6xOJQABEDD5V62L+VthjBEwY4SLTn+VATA7YAj/b1IJ /89+BnQBMAFPGk4tTtiaNpY7TqF7ylMBTxpOJYQAlS1O2JpCXKF7BnS6TutYAjAsAAEQMPlXrYs5 jSh1ETAzADIAMAAwAENRLwC6Tgj/BVPsYkSNmWU5jQEwSFMQmQEwCk4LTkhTNoO5cEl7Cf8MVABO VVNNT2VnlE4BkABOATDgZXZR1k6YYmNiFAABADAAMO6VmJgAThr/0I8odYtOnlvEi/dO2I8vZtCP KHUfYcmJxIv3ThIAAQAwADDulZiYjE4a/0yA/YDokOiV5YuCWVVPA4A4aA5OxIv3ThIAAQAwADDu lZiYCU4a/zpOwE5ITlhU5V0NTj9hD2FaUIR29GZ9WRcAAQAwADDulZiY21Ya/+13H2cDgDhoDk5/ lR9nA4A4aIR2hVG5Wy9mwE5ITmJUH/8rAAEAMAAw7pWYmJROGv8wUpVeL2ZYVOVd6oHxXZpb7nYH aAz/2I8vZgpOp37ZfgtOp36aW+52B2gf/9iPL2bHkSh1JE4FgPh2kk7TfghUhHYhag9fYlQf/yUA AQAwADDulZiYbVEa/y9mCWNncXRlU0+EdhpO6X5lZwOAOGjPaypOuk4M/9iPL2YJY2dxKk5TT4R2 Gk7pfmVnA4A4aM9rKk66Th//LQABIAAgACAAIAA7YEtODP8oV+l+SGWhewZ0nlu9ZcePC3otTgz/ Gk9HkDBSAE77fBdSe3w8T4R27pWYmAz/glmcZ9mPm07ulZiYDU6XXzBSBlfhboR244mzUQz/KwAB 6X5IZaF7BnSEdkhlnGdfThpPU2KGTohfJ1mEdphiY2ICMCxnIWv+iwt6Gk/0VtV+2Y+bTu6VmJhV XABfDP87ToGJsovwj+l+SGVTT/t8hHa+i6GL5U4GAAHKU6hj24+5ZQ9fAjAKAAEQMPxbCF6Ae8tO ETBbACGFzV1dACsAAQAwADD9VoVR5XcNVIR2uk6bUkSNkG6hewZ0nluhUhNOtlsM/+VdRlWhewZ0 VXjrWAz/Q2cBWrpOm1JEjZBuoXsGdJ5bGGITTrZbDP95citSKFfpfkhlKwABDk6qhWyRU0/7fL6L oYu5ZWKXCWeIX/FthHYgkOOLDP9iXxBihk7qgfFdeXIJZ4R2nlsYYrll1Wwb//5mOk4nWYtXAU8a TsaW4lYBMApOAl5sUfhTATAkAAHejwGVGk7GluJWATDYmtF5gGJsUfhTSXsaWSpOTIgaToR2F08a WQFPGk7bj0yIx49oUWKXhHa6TptSRI2QbqhU4osNZ6FSAjAjAAEvZgowLU79Vs9+JYSlYgswATAK MLpOm1JEjSxnCzBJexpZtluSWlNPE04PaIR2eXKmfrBkP3q6ToxUE062W8SLuotYVAIwLAABADAA MCAAIYVIUR910Y/gUXRe+lFIcoR2Zk5NfAlnGv8KMFRZ0Y2EdgiHo4Ya/4JZVU/lTgOAOGjDT9uP EGJ/lQswLgAKMDlU41PoVIR2xJ5bchr/5U6qhS4AAWyRWXVPT7pOTWILMAEwCjBLAFAASQAM/xwg c1Eulel+SGUdIAdjFV8QYp9SCzABMAowQgBTAEMADP8cIHNeYYihiwZSHSDdT8GL0VNVXAswDP/X UzBSAU8aToR2DgAB2JqmXs2RxokM/4xU2X6IToFn2JqEdsSLy04CMC0AAQAwADAgAP5mz36Fj/xb Dk7CU6BSx48hhQGACF75V62LhHYBTxpOCWca/xxOzph9bGaPATAcTm+PxpbiVgEwLU79VvN3uWyh gP1OATBUAEMATAABMFKXm1xkVSsAAVKRATAvY3Bn/VZFlgEwG1L0fsaW4lYBMJBf5V3GluJWATAJ TgBOzZHlXQEwpHzYmh+QATCcURpO9pRMiAEwF1OsTlF/GpABMHFcf4n7eahSATCzbFdTKwAB+3mo UgEwgVvibBBi743GluJWATAcTs6YZlvBlJmfATDqlsGUmZ8BMC1O/VY1deFPATB/Xt5df4l3WhZT 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 YM9+BnQBMLpOm1JEjZBuO2DRdgEwuk6bUkSNkG7PfgZ0SXsCMCwAARAw+VetizmNKHURMDQAOAAw ADAAQ1EvALpOCP8FU+xiRI2ZZTmNATBIUxCZylMKTgtOSFM2g7lwSXsJ/wxUAE5VU01PZWeUTgGQ AE4BMOBldlHWTphiY2IrAAEAMAAwsHPjTgFPGk6hewZ0DP/0ZuhszZEcIOVOuk46TixnHSCEdrpO J2AWU6F7BnQhag9fDP8BTxpOoXsGdIR2zZG5cF9O5WWLjVNPsHMoV/lbuk6EdisAAaF7BnRWe2V1 Ck4CMFxPOk6wc+NOAU8aToR2uk6bUkSNkG6hewZ0BYAM/5Re5U4YYmV12JqmXoRn+l7Ymkhlnlso dYR2uk6bUkSNkG6hewZ0+3zffgz/KwAB+l7LetF5ZlsDgDhowG+xUjZSpl6MVEhR24+EdgFPGk6q hWyRU0/7fAz/5U4AZydZUJamXjBXwG/RU7pOTWJcb/2ADP9lZxtS+l4YT8B54lYflgz/dl4rAAGo Y6hSxH7HfthTaZcOThtSsGUM/wBnyH6eW7BzxH7HfoR2AWPtftFTVVwCMBFi7E6IlPlbLU79VgFP Gk4oV6hjTIh/iblloXsGdCFqD18tToR2zXnNeSsAAQpf73qMVJF10WAM/+VOylMtTv1WAU8aTu52 TVJjawRZjk45ZWmXDk4bUrBl9mUfZwz/eXI+Tp5SHCABTxpO6X5IZQOAOGgOTqqFbJGhewZ0nlsY YnlyLAABrYvtcx0gAjAxdVeEDVS6TptSRI2QbhNOtltXhA1UWWWIYwz/IYXNXQGACF6yi4hjDP/o ZShXLl6pUgFPGk62WwEwuk6bUkSNkG7PfgZ0AF8Ulh1g740M/yIAAcBv0VN1cB9hDP/5V3tRJl6G mAFPGk4BY+1+ZVC3XtFTVVyEdlNTio26TptSRI2QbqF7BnS6Tk1iDP8ia86PwlOgUgH/HAABhk7j iaqFbJE5ZWmXzIBvZgz/9GawZcKJ9V8M/wZ0BW45ZWmXHWDvjQz/DmZueDllaZfudgdoDP8UAAHj iZdcTU9LbcSLhHb4dnNR5XfGiwz/0XlmW9uPTIiXXE1PS23Eixv/FQABpIvGi+l+SGWhewZ0hHbN kYGJJ2ABMHZeY2tueAZ044npfkhloXsGdAz/GwABZltgTgOAOGiEdrll1WwM/2hRYpeGTuOJ6X5I ZaF7BnSEdtCPXE8Leo9ejFS+i6GLuWXVbAz/EQABzZG5cGZbYE5LAFAASQABMHZey07NfnNeYYih iwZSYVMM/xcAAYZO44npfkhloXsGdKhj248tToR27pWYmAEwdl5/kE1R0I9cTy1OhHbvizpTAjAV AAEAMCAA5U4fYcmJOk76V0B4JFKtZdiPL2blTotOnls6TvpXQHgkUq1lH/8NAAEAMCAA7XcfZwOA OGjYjy9mf5UfZwOAOGgf/w0AAQAwIADtdx9nKVLKdtiPL2Z/lR9nKVLKdh//DgABADAgAHNRLpUa Tul+2I8vZl6Xc1EulRpO6X4f/w4AAQAwIADpfkhloXsGdIJZVU8OThhiZXWlY+NTH/8QAAEAMCAA SwBQAEkAEGLpfg5OVlnRkQJjqZSEdu6VmJgf/w4AAQAwIAAgT99+h2UWU/lb6X5IZaF7BnSEdnFf zVQNAAEAMCAAOk7ATkhOoWwJZ7pOP2EPYVpQQQAf/xAAAQAwIAA6TsBOSE6oY0yI6X5IZaF7BnTZ j0hO8Fa+lh//FgABADAgADpOwE5ITsSL9053jWVnH2HJiYhfvpbNZFxPFCAUIDtSpl7ulZiYG/8X AAEAMCAA1k7sTjpOwE5ITg1OpWPXU9mPm04DgDhoB2MHaBQgFCDvU6djJ2DulZiYFgABADAgADpO wE5ITgOAOGjZj5tOB2MHaA5UApCXX3ZRzVMUIBQgTIg6Tu6VmJgeAAEgACAAIAAijaFSXpcijaFS ATD2Zblw9mUfZwEwmlvPkZpbJ2ABMH+VaFQfZ+13aFQfZwz/O2DPkfh2+VskAAEgACAAIAAgAIJZ VU8oV2xR+FP6Xst6SwBQAEkAU0/7fGJUH/+5ZdVsiF8aWQz/BFTNebll1WyEdgKQKHUDg/RWL2bA TkhOH/8YAAGCWVVP44mzUdmPm07ulZiYYlQf/4JZVU8GXEsAUABJAAZS44k9hJ5bC067U2JUH/8a AAE0AAEwBlLjiUsAUABJAAdjB2iEduhsD2HulZiYGv9DZylS+VsHYwdoBlLjiYR2cV/NVAEwDwAB xH7HftN+hGeEdnFfzVQBMAdjB2iEdrJRgXonYEl7KAABB2MHaH5iMFKGTjFcB06LTidZCVSGTh// 2I9YWyhXwE5ITu6VmJhiVB//Ok7ATkhOAJeBiZpbSU5LAFAASQAM/w5gN2iaW0lOSwBQAEkAPwAh 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 ZRZTCQABMgAuAKqFbJEOTuVdXE8hag9fDQABQVMJTgEwqoVskb6LoYuEdsePC3oOTmVrpJoLAAEx AC4AqoVskb6LoYuEduBRzXm5ZdVsCQABMgAuAKqFbJGEdgOMdGW+lpiYHgABEDD5V62L9mX0lREw MgAwADEAMgB0XjMACGczAC0ANADlZfFtM1cBMDMACGcxADAALQAxADEA5WUKTndtLAABEDD5V62L +VthjBEwAU8aTqdOwVQUeNFT6JDolXmY7nbPfgZ0ATA7TqF7ATB5mO52xH44aMNfEGJYVBv/gGIv Z+iQz34GdAEwO06hewj/b1IJ/ztgwYgBMDAAASAAIAAgACAAIAAgACAAIAAgACAAIAAI/29SCf87 YM9+BnQBMBR40VM7YNF2ATAUeNFTxH7HfjtOoXt5mO52hHbYmkJcATB5mO52lWJEjeiQz34GdAEw O2DlXQt6CF4BMCMAASAAIAAgACAAIAAgACAAIAAgACAAIAAgAKdOwVTPfgZ0SXvKUwlniW3KUzBS p07BVBR40VN5mO52oXsGdB+NI426Tkl7IAAsAAEAMAAwU1/KToR2FHjRU/JdEGI6TgFPGk7eeolO hHY7ThhiOlcM/xR40VN5mO52oXsGdC9mgWd3URFjGGInYIR2AE55mOVdXE8a/xR40VNilzROAl46 VwEwKwABols3YoR2i1ObUgz/AJeBiQ5OhVEWWeiQhHYEVCdZ6JDolU9TA4wM/9mPm075W3mY7nbP fgZ0jFR5mO52xH4QYlhU/ZDQY/pRhk70ZtiahHaBiUJsAjArAAHgVmRrFHjRU3mY7nbPfgZ0hHbl XVxPDU7FTsVOL2aAYi9nQlxil4R2p07BVABf0VPlXVxPDP8MgC9mgGIvZw5OoXsGdPh2034IVIR2 5V1cTwz/GnXzgSsAAfRmGlkvZqF7BnTlXVxPDP95mO52z34GdIR2+06hUgZcDU6NUS9mKk66TvGC xJYsgjBX/GJ9VIxbEGIqTlNP+06hUjFcTIiGTgz/DICUXuWLL2aHc4aYLAAB4lYflgj/eZjudsR+ Cf+MWxBidGUqTuJWH5YI/3mY7nbEfgn/hHb7TqFSAjDReYBii1cBTxpOKFewZadOwVQvACAAsGUN Z6FShHYUeNFTjFR5mO52oXsGdBIAAcePC3otTmKXNE5Ad4JZC04ATptOf5UfZ/BW0WCEdu6VmJga /yAAATEALgCCWVVPc15hiAJeOlfeeolOhHaLU5tSjFSiWzdiGlnYU4R2AJdCbAz/618fkAZcp07B VKhjEVQCXjpXG/8rAAEyAC4AgllVT/pey3oATipOH3dja4R2HCDlTqJbN2I6Ti1Ow18BMOVOAl46 VzpO/FsRVB0ghHYUeNFTxH7HflNP+3wM/+tfH5DNVJReAl46VwCXQmwb/yYAATMALgCnTsFUAF/R U4R2x48Lei1OFHjRU4JZVU8OTgJeOlcBMCKNoVIBMB91p04BMMeRLY1Je/h2c1FMgP2A6JDolU9T DFTlXVxPG/8sAAE0AC4AFHjRU0SNkG6hewZ0LU6EdhwgGk/tVIR2aVtQWwlndlkDVB0gATAATipO uk5aUBpZKk55mO52RI2QbrJRgXoBMGxR+FMYT0hRp37YmoR2eZjudihXLAABIAAgAM9rKk7okOiV 4GXVbN1PwYtEjZBuGE9IUQEwAF/LWYZOiF8aWXmY7nZ0UztgL2YNTv2ACk4CXgEwy3p5mMSLoVsa TwpOOk5VTztgL2bulZiYDU6tZR8AATUALgCCWVVPKFfdT8GLp07BVCiNz5GEdgxU9mXIU4GJTZZO T6dOwVSEdhR40VM5jSh1jFS+i6GLEGIsZxv/JAABNgAuAIJZVU8oV6dOwVQAX9FThHbHjwt6LU7v eS99gGIvZ4xUoXsGdIR2z36Mmgz/zk42UqZeCk7dT8GLbFH4U4R2EGKfUhv/KwAB/osLeihXO2DT fidZz5EtTv1WAU8aTs5OHCBcT0pXD18dIIR2FHjRUyFqD18RVBwgp04aThZTHSAUeNFTIWoPX2yP 2FOEdsePC3otToR2EGKfUs9+jJorAAGMVDFZJY1ZZa2LhHb6V0B4Ck4M/9Bj+lEATipOCWfeeolO m1KEdtF5ZluEdhR40VOhewZ0U0/7fAz/DFT2ZQZSq04aTkx1AU8aTihXFHjRU6F7BnTYUyEAAWmX x48Lei1OlF7li+hsD2GEds6YaZYM/2543U8BTxpOhHYUeNFToXsGdNhTaZf9gB9ZH3djaz2EMFee W71lAjAgABEAAYZO44mCWVVPY2tueDBXNlKaW7Blp07BVBR40VMYYmV1G/8TAAFmW2BOCZDpYmNr bniEdrBlp07BVHmY7naEdoBiL2eMVLll1Wwb/xYAAaJjqIuwZadOwVQUeNFTeZjudoR2RI0sZ9CP XE+MVM6YaZaVYkSNuWUPXxv/EgABZltgToJZVU/6Xst6sGWnTsFUFHjRU3mY7nahewZ0U0/7fBv/ EwABjGPhY/pey3qMVJReKHVja254hHawZadOwVQAX9FThHZBbQt6G/8TAAFmW2BOsGWnTsFUFHjR U4R2zphplqdjNlKMVKF7BnSEdoGJ6GUb/xQAAWZbGk/Ei/dOjFQ5ZYRVsGWnTsFUAF/RU3mY7nbp fkhlhHYUkIRfG/8QAAGwZadOwVQUeNFThHZ5mO52IWp/Zw5O5V13UctOzX4b/ysAAQZSq06yiwhe Ck5+djpXFHjRU6F7BnT5V62LhHYTThpOz36Mmgz/GpDHj7BzOleSTqhSLl6pUmZbWFQGdAVuApAI VOqB8V0BTxpOhHYUeNFToXsGdB1gAgAB740b/ykAAYxj4WMaTkx1AGdzT4R2FHjRU6F7BnQhag9f Dk6eW/WNDP92Xjtg036CWVVPDk5sUfhThHbEiSFq+HYCkJReZWf6Xst6FHjRU6F7BnRTT/t8G/8k AAGMY+FjFHjRU6F7BnSEdrNRVntTT/t8ATDEfsd+U0/7fAEwQW0LelNP+3wBMHmY7nahewZ0U0/7 fEl7c1EulYRnEGKBiSB9G/8YAAGMY+Fj0XlmW4R2sGWnTsFUAF/RU0FtC3qMVBR40VN5mO52oXsG dM1kXE+5ZdVsG/8gAAEGUqtOLU79VgFPGk6oY0yIFHjRU6F7BnRTT/t8+l6+iwEwGE8WUwEw2FNp l8ePC3otToR2z36MmoxUWWWtixv/KQABBlKrTrKLCF7iVh+WcGVBUypOFHjRU6F7BnSoVOKLeZju doR2SGiLT0SNmWUI/yFqf2cBMGiIPGgBMDdoi08mICYgCf8M/y5eqVJmW1hUNlKaWyoAAUEAYwB0 AGkAbwBuACAAUABsAGEAbgAM/39Pl19mW1hUwlOtiw5U3lYwUuqB8V2EdmxR+FP9gB9ZiF99WZ5b vWUUeNFToXsGdFNP+3yEdhhPFlMCMAsAARAw/FsIXoB7y04RMFsAIF84bHBnXQAZAAEAMAAwIACf U/FtM1fQZydZi1cWTkx15XcNVNia0XmAYgFPGk4UeNFToXsGdOiQz34GdAsAAcYlWWWygMyAb2bK U/5m+05MgKFSGv8vAAE9AD0APgBZZbKAzIBvZhr/f4mJW6ROGpAnWWZbIADlXWZbZlvrWAEwoXsG dGZbVXjrWAz/MQA5ADkAOQB0XlV461jVaxpODlRIUQ5U+05MgI5O8W0zV9BnJ1mLVxZOGAABIAAg ACAATHXldw1U2JrReYBiAU8aTiAAjFQgANBnH3VpcjtTl3W+iwdZbFH4UwIwGwABPQA9AD4A/mb7 TkyAoVIa/3mY7nbPfgZ0ATB5mO52oXsGdOiQb1LPfgZ0ATCnTsFUz34GdEl7BgABxiXlXVxPz36M mhr/KwABnlsYYj5tFHjRU6F7BnQTTrZbDP9/lR9n11OAkI5Of14cTgF3AU8aTlSACFRPUxpPATDx bTNX2JqwZYBiL2enThpOT1MaT0l7TIgaTk9TGk8M/ztOsosrAAEUeNFToXsGdHt8hHb+iwt6AjAa WXRe2JrReYBiAU8aTqdOwVQUeNFTjFQUeNFToXsGdAEwp07BVKF7BnTlXVxPz36GUwz/SFEOVMVi +07Hj3mY7nbPfiwAAQZ0ATB5mO52oXsGdOiQb1LPfgZ0ylOnTsFUz34GdEl7TIBNTwz/KFd/lR9n hHYUeNFToXsGdJ5b9Y0tTu95L32GTjBOzFuEdoBiL2eMVKF7BnTPfoyaAjArAAEoV/1WhVHQZ+V3 DVQakOFPAU8aTuVdXE8fZ/SVDP9IUQ5Uzk6LTqdOwVQAX9FTATB5mO52oXsGdIxUAl46VyWEAJVW exJSSXvlXVxPDP92XlxPOk6oYysAAUyIxH4QYlhUDk79VkWWFHjRU6F7BnR2mBZcqFTii36Y7pUo VxR40VPKUy5VDlQNZ6FS+3zffqhjqFJsUfhTp34UeNFToXsGdNhTaZcCMChX0GcfdWlyKwABO1OX db6LB1lsUfhT5V1cTx9n9JUM/8Vi+04UeNFToXsGdOiQb1LPfgZ0DP/7TkyAH2f0lQlniJT5Wydg MFcGXBR40VOhewZ0hHYaTkx1AGdzT55b9Y0rAAEMVGxR+FOwc7Zy+HbTfghUDP9oUWKX+l7LenZe GE8WUxR40VOhewZ0U0/7fAIwDFT2ZXxR+06FUeiQsosIXgz/d1EJZzBOzFuEdhR40VOhewZ0nlsY YgMAAc9+jJoCMCwAAQ5Uzk6LThR40VOhewZ0qFTiiwz/SFEOVFxPOk55mO52OGjDXxBiWFSMVHmY 7nbPfgZ0EGKfUoxbEGKGTtGPMgAwACpOFHjRU6F7BnSoVOKLeZjudlNP+3wrAAGEdvpevouMVD2E MFcI/ytUAl46VwCXQmwOTqdOwVTEiRJSATCnTsFUAF/RU0FtC3pTT/t8ATAUeNFTeZjudqF7BnRT T/t8ATAUeNFTuk6bUkSNkG5JeyUAASFqV1cJ/wz/KFenTsFUAF/RU0FtC3q+i6GLATAUeNFTeZju dqF7BnSMVFNP+3yoY0yIuWVil3dRCWcwTsxbhHaoVOKLz36MmgIwLgABIF8BgAheL32hi4xbEGJs UQBf/osLetGPMwAwADAAOlcgAAz/hVGti9GPfnY6Vwz/dl4QYp9SjFsQYoZO0Y8yADAAKk4UeNFT oXsGdKhU4ot5mO52DP8vfaGL+VcvAAGti8ePhHYBTxpOCWczADAAMAAwABpZtlsM//lXrYt2XoWP /FvHj4R2ZltYVPJdz36FjcePB066Tgz/ols3YuFuD2GmXkdXvo8wUjkAMgAlAOVOCk4sAJ5bnlso VyhXKwABOk4BTxpO44mzUYZOp07BVBR40VMBMKdOwVQOTqdOwVQKTgJeoXsGdL6WmJgM/85ODICB ZydZ0GNHUwFPGk6EdqdOwVShewZ0ATCnTsFUFHjRU6F7BnQFAAHlXVxP9048UAIwEgABAE4BMCAA FHjRU6F7BnQaTkx1AGdzTyFqD1/KU0hoi08GUpBnDAABMQAuACAAHCCuXxF78ma/fh0ghHYrVElO EQABMgAuACAAWlBja254hHaLTsVgCP8CXjpXoXsGdFNP+3wJ/xUAATMALgAgAGNrbngwV1pQi04I /wBf0VNBbQt6Dk55mO52oXsGdFNP+3wJ/xkAATQALgAgAH5iCFQCkIR2uk5aUAhUApCEdotOCP8U eNFTuk6bUkSNkG6hewZ0U0/7fAn/BwABNQAuACAAL2fti+OJypEmAAEI/3Ne8FMN/4BiL2cN/6dO wVQBMDdowVQN/0ZVwVQBMHmY7nYN/6dOwVQBMHmY7nahewZ0hHaGmN9XATBBbQt6Df95mO52oXsG dAn/DwABNgAuACAAgGIvZwBf0VMOTqdOwVQAX9FT+HYGUrt5DwABNwAuACAARlUaTrNRVnsMVIBi L2fEi6Fb+HYGUrt5DgABOAAuACAAp07BVBBin1KEdgdoxlEvZsBOSE4f/xQAATkALgAgALBlp07B VABf0VNBbQt6Dk4UeNFTeZjudqF7BnSEdnNR+3wVAAExADAALgAgAEhoi08GUpBnGv8KMBFihHZ5 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 ixJS1WwBMBh1eXL+VgEwNFkRgc6YtGbVbAEwRgBNAEUAQQDHjwt6ATALeo9eATDEiQODFlMBMAdo xlEWUwEwBQABSGWHc2xRD18CMBcAAbBlAYBRAEMAA04nWUti1WwM/zUAVwBoAHkAATA4AEQAATBD AEEAUgABMDgARAALAAHGJd+NVVPlXVxP/YCbUtBjR1P5V3tRFQABn2wakP2Am1IM/8R+x37TfoRn /lYM/0dspWIOTgdjJWMM/4qNQ2ehewZ0CAABDk5+mKJbn2wakIR2gGLnXQ8AASRSrWX9gJtSDP/P fjhe3U8BY11OKk5xUzpnD2HGiwsAAcSL9079gJtSDP+UTnmY5V1cT8SLdJITAAGeWxhi/YCbUgz/ lE7NecdSFGwM/5ROzXlgTu9gDP+UTipOgYlCbAsAAX9i11P9gJtSDP/DfjFcw18GdCB9KI0GAAHP fnhRSGiLTwZSkGcIAAHGJZJOqFIM/+qBMXXulVR7BgABO06BieVdXE/7TqFSBQABR5AwUoR27pWY mAQAAQGAhHa5ZQ9fBAABwGioi59T4FYHAAHfjVVTuWXVbBQg0GOSkQsAATllhFUOVIR2uWUPXwz/ OWWEVUhlnGcYAAHCUwOAZk5NfAowcGf6Ud+NVVNYVAswATAKMKVjVVMOTt+NVVOeW81kxn6Cggsw IAAOAAFNlk5Px5EtjRBiLGfKU5tPlF5GVQiMJFKAYuddNwABEDD5V62L9mX0lREwMgAwADEAMgB0 XjIACGcxADgALQAxADkA5WXxbTNXATAzAAhnMQA3AC0AMQA4AOVlf17eXQEwIAAzAAhnMgAtADMA 5WUKTndtATA2AAhnMwAwAC0ANwAIZzEA5WVbT3FcIAAkAAEQMPlXrYv5W2GMETDYmkJcoXsGdAWA ATDBVKF7ATBpckFtATAijaFSSXvokOiVylN2UdZO+HZzUeiQ6JWEdkyAGk7PfgZ0uk4YAAEAMAAw KFfRkY2Hzpi0ZoR2cV/NVAtODP+CWVVPTZZOT8eRLY2EdgRUeZgQYixnH/8hAAEgACAAIAAgAMeR LY2hewZ0hHbpfkhlA4A4aO52B2gJZ+pUm04f/xFiuWWEdoGJQmzHjxpZFmLHj9iaGk8OYDdoH/8j AAEgACAAIAAgAA5gN2gGUpBnm0+UXkZV2X4RYuxOhHalYvdOPwAgAAFPGk7bYpViB2gOTj9lnF7b YpViB2gJZ1VPOlMrUj8AHQABIAAgACAAIACCWVVP0GPYmseRLY0IjCRShHaeW0hlJ2A/ACAAgllV T6djNlKfU1BnmWWEdpNeWFs/ABIAASAAIAAgACAAgllVT76LmlvHkS2NoXsGdIR26X5IZe52B2gf /xEAASAAIAAgACAAgllVT3+QTVENTsVfgYmEdseRLY0QYixnH/8PAAEgACAAIAAgAIJZVU8GUpBn m0+UXkZVhHalYvdOH/8VAAEgACAAIAAgAIJZVU8akMeP22KVYgdo249MiAlnSGWEdhwgDXj3Th0g H/8TAAEgACAAIAAgAHFfzVTHkS2NCIwkUkhlnGeEduBWIH0JZ+pUm04f/xMAASAAIAAgACAAgllV TwZSkGcIjCRSzFO5ZYR2Ol8xX79SMFdNTx//DgABIAAgACAAIACCWVVPNlKaWwiMJFKEdqGLElIf /w4AASAAIAAgACAAgllVT55bvWUJZ0hlhHYIjCRSH/8OAAEgACAAIAAgAIJZVU+nYzZSaXKZZZNe WFsf/yAACwABEDD8WwhegHvLThEwWwAgX/JOaoxdADEAAQAwADAgADllaZcAXz5lDlTpZR9nd21S Xz5tsosIXgIwMQA5ADgANgB0XreDjn/9VkcAZQByAGIAZQByAGxR+FOEdlZZZlvRkXSNjn/9VsZb f4k5aN5dy3onWWZbWXVmWwz/HQABt4NVeOtYZltNTwIw1WsaTg5ULADXU1iAjk6Of/1WSABlAGkA bgB6ACgAqE4PbCkAxpbiVmxR+FMCMC0AASAAIAAgACAAIF8BgAhe/mZIUQ5U11NYgI5Ojn/9VqhO D2xsUfhTATDxgv1WVIAIVHyZcl5sUfhTATCOf/1Wjn9ejeOBbFH4U0l7DP/+ZvtOjn9ejeOBbFH4 UwkAAYR2gGIvZ8pT0I9cTztg0XYCMDIAASAAIAAgACAAzk4yADAAMAAwAHReAF/LWSwAIF8BgAhe AF/LWeqB8V0bUhpOLADOTotOjk4aWUyIGk6Eds9+JYShewZ0AjBAYuVOLAAgXwGACF7iZQlnFk5M dTUAMAAwADpfAU8aAAEaTkyAGk7PfgZ0uk6EdjBOzFsFloZTLADIUwlnXE86TgFPGk4BgH9nhHbD X5dfU08aTwIwLQABIAAgACAAIAAoV4xOQVMaWXRehHZMgBpOH3WvbS1ODP8gXwGACF7+ZqVj11PH jwRUzXn9VkWW/VaFUYR2TIAaTvlXrYsCMP5mdI2gUv9iJ1kBMI5//VYBMPGCKwAB/VYBMLBloFJh VwEw8Gz9VgEw8oOLX75bATBsmmVnf4maTkl7/VYDgN9bZltgTgIw/mb7Tv1WtluAYi9n0XZjd0Bc 35jBVAdoxlEWU9RZWFQaTxBiWFQrAAGMVP1WtluAYi9n0XZjd0Bc35jBVPttoFJCUgdoxlEWU4Bi L2fUWVhUGk8QYlhUDP/CUw5OATA2UppbjFShWzho/Va2W6d+K1KEdt+YwVQHaMZRjFTfmCAAAcFU +22gUkJSB2jGUQIw/mb7Tn9eHE4Bd9+YwVTlXRpOT1MaT4R2BnSLTuVOylN2UYNbGll5mD55Gk9M gKFSAjAvAAEgACAAIAAgACBfAYAIXoR2iGP+i8xbCWeIXzpfhHbAb8VgLACwczpXH2HTZ5tSOl8M /86Yo40sAH1e2J4M/7BzOlcUbBtsO23DjTsAHWD0fk9ld2MsAM1TlF79gJtSLAABOl8sAAt37pWY mIOPOk7xbTtSAjAgXwGACF6Edv6L9k6+i6GLm1JCbPFtpl4BMJ5bKHUb/0hoi08aWTpO5V13USdg SGiLTywACWeIXzpfhHaeW81kAjD+ixwAAQt6hVG5W+iNpl4nWSwAPVzPkThU1lMEVCpOTIgaToR2 vny5fAz/d1EJZ9iapl6EdlNtKX8nYAIwEwABLHsATrKLGv+CWVVPvouaW8eRLY2hewZ0hHbpfkhl 7nYHaB//IAAQAAEgAApOV4gtjWlyDk5sUfhTx5EtjQlnwE5ITjpTK1If/w8AASAAx5EtjaF7BnSE dksAUABJAAdjB2gJZ+pUm04f/w8AASAAx5EtjaF7BnSEdu52B2h6mI9elF7li4JZVU8f/xAAASAA g2wUXAF4x5EtjQ5OnVsBbceRLY0JZ1VPOlMrUh//DAABIAAEVM15x5EtjaF7BnSEdu52B2juXQJf DgABIAA6TsBOSE7HkS2N6JDolRggAYDXUxRsGSAf/w4AASAAFllEjQ5OEWwBT/h2kk5mW2BOm07A TkhOH/8PAAEgAIJZVU/QY0dTEWLsToR2x5EtjUyAGk79gJtSH/8OAAEgAIJZVU/6Xst6x5Etjel+ SGUDgDhoNlKmXh//DgABIAA6TsBOSE7HkS2NEGIsZ4qNZWeKjU9lH2Ef/w4AASAAx5EtjRBiLGeh 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 hHYLTlVTuXA/AGYAZgALAAEgAMBOSE4vZpNeWFsBYwlnEGIsZx//CQABIADPfk5toosnjc+RhHah i5d7DgABIADATkhOL2aaWx9nCP/0la1lCf9ueJpb1Ww/AA8AASAAmlsfZ6KLJ43VbAdjB2gN/5Ne WFuGidZ2H2cf/w8AASAAgllVT254mlufU1BnmWWaWx9n9JWUlilZcGUf/w4AASx721aCghr/gllV T1pQfVlWAE0ASQChewZ0IAALAAEgAMBOSE4vZkoASQBUAB91p06hewZ0DQABIAANTgxUH3WnTlxP Gk57fItXhHYRYxhiH/8IAAEgAMBOSE4vZkZoRmjVbB//CAABIADATkhOL2ZKAEkAVADVbAsAASAA SgBJAFQADk5KAEkAQwCEdjpTK1ITAAEgAEoASQBUAB91p06hewZ0Dk5KAEkAVACbT5ReoXsGdIR2 OlMrUgsAASAAm0+UXv6UhHa+fMp2Dk5PZXdjH/8NAAEgAIJZVU9aUDBSm0+UXv6UhHZPZXdjJ2Af /w8AASAAm0+UXkZVoXsGdJNeWFsgACgAVgBNAEkAKQAgAAcAASAAm0+UXkZV406hew9fBwABIACb T5ReRlXEW1hbD18KAAEQMPxbCF6Ae8tOETBbAEiWUVJdAAsAAUiWUVIBgAhexWR/lYR2/osLegln Gv8aAAEKMLNSqFIIVAxU1WwLMAEwCjA+eRpP3U9pltVsCzABMAow5V0kT91PaZZhZ4tPCzCeW81k GwABlF75W1Z7ZXUOTglnSGUDjJdcA4yqhQEw44nHlp6PAJDKU92Pqn7ulZiYWFTlXQRZBnSAYudd MwABEDD5V62L9mX0lREwMgAwADEAMgB0XjMACGczAC0ANADlZX9e3l0BMDMACGc5AC0AMQAwAOVl Ck53bQEwMwAIZzEANgAtADEANwDlZfFtM1cBMDMACGcyADMALQAyADQA5WUXU6xOLAABEDD5V62L +VthjBEwY4SLTn+VATA7YM9+BnQBMG9SO2DPfgZ0ATC6TptSRI2Qbjtg0XYvAM9+BnQvABNOWFTK U7pOi05MiD9loXsGdLpOWFQBMOVdGk9yXiAAASAAIAAgACAAIAAgACAAIAAgACAAIAAgAOiQATDV bKFSuk5YVMpT+HZzUaF7BnS6TlhUATD4dnNRi18IXkl7AjAqAAEQMPlXrYs5jSh1ETAyADUAMAAw AENRLwAyAClZLwC6TigABVPsYvlXrYsBMPlXrYtZZVBnATAkTilZSFMQmQEw5U7KUwpOC05IUzaD uXBJeykAIAAvAAEgACAAIAAgADIAMAAwADgAdF7lTmVnDP8RYv1WSFEOVPpR8FMBMJ5bvWWGTgow s1KoUghUDFTVbAswATAKMLNSqFKJTq6LA4zjifJOwYjVbAswATAKMLNSqFKJTq6LJAAB+FPVbOOJ ypEI/wlOCf8LMAEwCjA+eRpP3U9pltVsCzABMAow5V0kT91PaZZhZ4tPCzAI/+5PY2tIaAn/SXvV bItf1WzEiQIwLQABIAAgACAAIACwZbNSqFIIVAxU1WyEdp5bvWUM/6JbwokKToGJQmwodbpOVVNN TyhXs1KoUih15V2hewZ0uWVil1pQMFIcIL58xn4WUx0gDP8mVBlSBly+luVOKwABwYsOZrNSqFIF gBwgDU4IVDxoATANTv2A3ID7TuVdXE8BMCVOzZExWUyAATAlTs2R3Y+qft2PxIkdIAz/9Ga+luVO 2488ACAgAUyICFTVbAlnSGWEdhwgA4yXXCsAAQOMqoUBMOOJx5aejwCQHSAb/4JZnGcodbpOVVNN TzpfTIj5W7NSqFIFgNuPTIgDjJdcA4yqhQEw44nHlp6PAJAM/6OQSE4odbpOVVNNTwZcYpc0Tuhd FgABJ1mEdlSNf1DOmGmWDP92UaF7BnRDZwFaX04GXNdTMFIlTs2RhHYRYxhiAf8uAAEgACAAIAAg AI+WQHcKMOVdJE/dT2mWYWeLTwswhHbuTzlljFQKMD55Gk/dT2mW1WwLMIR2+lHwUwz/KHW6TlVT TU+Edih15V0QYixnxV82cduPAE5la9Bj2JoM/ysAAYJZVU8oVwhU1WyEdvpXQHgKTgz/xIkDgyh1 5V2hewZ0DP/PURFcDU7FX4GJhHYQYixnL2X6UQz/L2Z/XidZKHW6TlVTTU/rjyhXCXdrd4R27pWY mAH/KwABzFO5ZU9TRlUATvSBDU7CU6BSPnkaT91PaZYM/y9mJlQJZ0hlH//RUx915V0kT4tORWUM /4JZVU8JZ0hllF75Wwz/zFO5ZduPTIjBeYZODP8vZiZUq4gOAAHVbItfpIvvUwz/U18tTlhbKFfq VJtOzphplh//LQABIAAgACAAIAA6ToZOxIl/kApO8I8odeVdzphplgz/DU4RXAFPGk7HkSh1hk4c ILNSoVI+bWOQHSAodeVdIWoPXxv/Rk+PlktODIBlZ4R2KHXlXaF7BnS2crVRLgABdFOKjWVnio33 bXFODP+PlktOFV/RU4R21WyLX86YaZbulZiYX06KjWVnio0NWUJnIQAgABwgs1KhUj5tY5AdIBBi Ok6GTjIAMAAxADEAdF5oUf1WJE4aT4R27XArAAG5cN2LmJhLTgBOAf+wczaWtWsM//1WtltjayhX 73mBZzZSmlsKMLNSoVI+bWOQoXsGdMSJmlsLMAz/KFcKMLNSqFIIVAxU1WwLMAEwCjA+eRpP3U9p lisAAdVsCzALTgz/HCCzUqFSPm1jkB0gBlxVT7tTVU/OTgz//YAmVBwgAl8wV8JT3U8dIAz//YAm VMSJf5AATptOT2UfYYR21WyLX86YaZYf/7NSoVI+bWOQIwABKHXlXSFqD18tTgz/lF7li4JZVU8G dHqYBFS5ZXNR+3wM/4JZVU8ylgOD1WyLX86YaZYM/4JZVU9zXmGIBFS5ZSlSynYf/y0AASAAIAAg ACAAOk4uXqlSf14nWQFPGk6GTuOJ/Va2W/h2c1HVbItfP2VWewz/jGPhY09TA4xYVOVdc1H7fIR2 gGLnXeVOylMylgODs1KoUolOrosM/wlnSGUDjCsAAXRlKHXlXdN+hGcM/4xbhFWhewZ0S2K1awz/ TZZOTyh15V3VbItfzphploxUEGIsZ0l77pWYmAz/eXKAkBFi/VbxbRmMoXsGdEtOU5CEduV3DVSz UqhSLAAB1WwOTlhU5V1zUft8oXsGdJ5bGGITTrZbn5Q4bONoAYAIXjtOsosgABwgCjCzUqhSCFQM VNVsCzABMAowPnkaT91PaZbVbAswATAgAAow5V0kT91PaZZhZysAAYtPCzCeW81klF75W1Z7ZXUO TglnSGUDjJdcA4yqhQEw44nHlp6PAJDKU92Pqn7ulZiYWFTlXQRZBnSAYuddHSDYmqd+FHioixpP AjAia86PAU+LThpOKgABVVNNT+95gWfEfsd++HZzUbpOWFTCU6BSFHioi2ZbYE4M/+VOLl6pUgFP Gk4JZ0hlMpYDg9Vsi1/OmGmWdl7jibNRnltFlrNSqFIodeVd7pWYmAH/CwABEDD8WwhegHvLThEw WwCflDhs42hdAC0AASAAIAAgACAA/VaFUVeEDVSzUqhS1WwOTlhU5V1zUft8oXsGdJ5bGGITTrZb DP+zUqhS8k7BiFhUDP/9VoVRLHsATk1PIVD8WwEwIE+tZAEwnlu9ZRwg/Va2WywAAbNSqFLVbA5O AU8aTqqFbJHpfkhlCWc6Z3RlCFQdIIR2SFFMiAWADP/9VrZbuk6bUkSNkG6hewZ0CF5EjTxopIvB i/lXrYv8WwheDP/9VoVRn1MbUotXATArAAGeWxhii1cBMH6Y7pWLV4R2TIAaTvlXrYsIXgIwsHP7 TrNSqFLVbLKLCF4M/y9mf17eXQJeuk6bUkSNkG6MVD55Gk/dT5yWQFwBMH9eHE4Bd7pOm1JEjSwA AZBuoXsGdE9TGk8BMPFtM1cWWUZVAU8aTk9TGk9JezUAMAAaWbZbP2WcXjpnhGcBMPlXrYs6Z4Rn ATB+mO6VbFH4UwEwTIgaTk9TGk+Edn57pn6yiwheATAFAAF5cliAfpjulQIwLQABIAAgACAAIACf lAGACF6+fBqQs1KoUj9lVnvVbItf1WzEiYxUs1KoUvJOwYgBMMmLvIsLeo9eDP/FZH+Vs1KoUih1 5V3OmGmWhHYJZ0hlhJgylg5Os1KoUolOKwABrotIaPZOhHa+fMZRlF75Wwz/hFWOTopis1KoUtVs i1/VbMSJDk4BTxpOuk6bUkSNkG6hewZ0CWc6Z3RlCFQM/xqQU2YBTxpOs1KoUolOrosylgODOmcr AAE2UoR2hGf6XoxUs1KoUih15V2hewZ0U0/7fIR27k9ja4xbhFUCMJ+UAYAIXs9+OF4oV6JbN2Ke UmxRsHM6VwEw+Veti7BzOlc6TqJbN2IBMGZbWFRzUysAAfZld41JgwEwoVvlZwEw7k85Zfh2c1E2 UqZeATAIVAxUATCHZWZODP8WYgZSkGd3UVNPSGj2ToR2lF75Wx1g740b/5+UAYAIXuxyMFKEdrBz OleEdhNOIAABGk6fUpVeDP/PayFr/ZBijZdff14nWaJbN2IBMGZbWFTRU+qBhVHDX4R2fVnEiw5O MQAwADAAJQCEduFPDWcB/y4AASAAIAAgACAAn5QBgAhe/mb7ThNOTICzUqhS8k7BiFhUDP/+ZreD HCB/Xt5dAl4YT8B5s1KoUvJOwYhYVB0g8Hn3Uwz/oVskUrNSqFKJTq6LSGj2TjQAMAAwABpZLwAB l1sb/+NOBnSzUqhSiU6uizUAMAAwABpZl1sM/8JTDk4WYjtOAWOqhWyR6X5IZahU4ot5mO52MgAw ABpZKk4M/6Fb5WeMW4RVMwAwADAAGlm2WwFPGk6EdrpOm1JEjS4AAZBuoXsGdMSJ4Ho2UqZeAjAq TrpOf5UfZ8Vi+04zADAAGlm2Wwj/L32hizIAMAAwABpZtlsJ/wFPGk6EdrpOm1JEjZBuoXsGdNVs i19+mO6VG/8gAOVOn5QBgAheKwABhphUiIR2E062Wx+WDU8M/3+VH2c6TgFPGk7QY5tPs1KoUtVs OF50Xn6Y7pXKUwRUzXkTTnmYqFTiiw1noVIM/6JbN2Lhbg9hpl7Ymr6POQA1ACUAAjAxAAEgACAA IAAgADIAMAAwADQAdF4AX8tZn5QBgAheaFH9VgRUMFfhXbKLs1KoUtVsATCzUqhSc1H7fP6LC3oM /9dTynYBTxpOvo8zADAAMAAwADAAtlsM//R2pWPXU8p2ZltYVC8AATcAMAAwADAAMAAaWbpODP/5 V62LMFe5cIltylMyADAAGlkqTgF3Gk/OVwJeylO/bHdtMFc6UydZzlcCXgIwn5QBgAheBlyvZ+Vx hHazUqhSP2VWe9VsxIm2bmVRnlsvAAFFlqF7BnRIaItPU18tTgz/Bly6TptSRI2QbqF7BnQOTrNS qFLVbAlnOmcwV3RlCFQoVwBOd40b/yAA/osLeoVRuVs4ADAAJQA6Th93nltIaItPATAyADAAJQA6 TsVfLAABB1mEds2RuXDVbGFnG/9mW1hUwlMOTqiLuosBMJJOqFIM//6LC3ofdahSCWejjQz/8W1l UUVt+lEM/55bGGKLV4WNOl8M/yAAqYtmW1hUc1P2ZWZb5U70gS0AASh1Af/+iwt64W4PYaZe2Jq+ jzkANQAlAAz/F08aWWZbWFRHV2iIOnka/xwgLHsATiFrLFQwUoJZZGueWxhiATCeWyh1ATAgAJ5b SGWEdrNSqFLVbP6LC3oB/yUAAZ+UAYAIXl6XOF6hUp5bATANTvSLWWUBMKFsCWdGVRpOc1RTkAz/ yH6OTixUMFKGTqmLEWINTo1RDlSUYIR2vnxpX/6LC3oB/x0gLgABIAAgACAAIACflAGACF5IUQ5U KFcKMLpOm1JEjZBuCzABMAowV1O5Zf2QAl6lYgswATAKMH9e3l3lZaViCzBJexNOGk5CZ9dfATAg AJJaU0/RU2iIs1KoUnNR+3wtAAF7fIdl4HoyADAAGlnHewz//mY6TuVOC06iWzdi0GObT6hU4ot+ mO6VCP9el2xRAF/+iwn/DWehUhr/LU79VrpO/1sBMH9e0VP2lEyIATA6ZAt6xWVMiFF/ATArAAFO Uw6fxWLdTwEw+l6+i/aUTIgBMJxRGk72lEyIATDlXUZV9pRMiAEwLU7BlMaW4lYBMPFtM1c6ZzpX ATDEnrNsNGw1dQBf0VMBMC1O33DGluJWATBXUysAAaR8aXJBbQEwsGVXU7llxpbiVgEw8W0zVzFy vWW3X6GA/U4BMPFtM1d3kahScGUBeAEwCFQfdRtSVVwBMC1Od20wV6dOATC5ZQZXMFenTgEw4HNf bNF2LAABBnQBMOBzX2yVYkSNATAJTrBlMFenTgEwe1EfdQJYb4MaTgEwAE7BVKJ+b4MaTgEwdmbR gsaW4lYBMH9e3l01deFPATD9Vq+LGpDhTwEwfmemU7dRFGwBMCsAAcp2d23GluJWATD6ZSdZxpbi VgEwLU7cj2lyQW0BMOVlVmbtVpdnATAna/Zlm1INZ8WIATB/Xt5dLIWcZ8aW4lYBMHBPLWScZxCZ bpnejwGVATB/XhxOKwABpE4akMaW4lYBMC1OcVxOU/BsATDgc3dt41O4XH9eOlcBMLV+KmopWTBX ATDHhuNTOYKhUtCPk4+hgP1OATAXU6xOl1/hT3NPjFQ7U5d1ATDOmF55xpYrAAHiVgEwLU6oVOVd C3rRdgZ0ATB/Xm+DxpbiVgEw2JrrWL9+Gk4BMClSd23GluJWATAWU/pexpbiVgEw8W0zVzRsoVLR dgZ0ATDQj9FTxpbiVgEwsGV/XisAAf1WRZbGluJWATCOf4R2xpbiVgEwX2zPgidZaFHGluJWATC/ bHdtMFenTgEw8W0zV05TqE/OVwEw4U+QbsaW4lYBMKxOzlenY6GAATAtTv1WrpA/ZUl7BgABQ1NZ T7ZbAU8aTgIwCgABAE4BMIJZVU8JZ0hlA4yXXAOMqoUrAAExAAEwAU8aThqQOF45aG5jz34lhACX gYkMgAOMdGVYVOVdhHaXXE1PFmIwV7lwDP9GTy9mWFTlXe9T0GP6UauI64/jiWSWdl4ifVSNz35O bWWIf1AM/xgAAQFPGk7lZTheLU7li4JZVU9aUAz/TWL9gBZT44nOmGmWFmJ/kE1RSGj2TiWNyYsf /ysAATIAATCzUqhSCFQMVKZ+mluEdpdcTU+eW0WWCk7RUx912FMWUwz/Rk+hbAlnnlIGdPh2c1FL Yu1+DP9YVOVdMFKwZZdcTU8ATrVr9mX0lQ5UDP90U4GJHQABQmxiYA1ZMFKfU5dcTU8M/4BfgF8Q Yst6DP+jkEhOAU8aTuWLgllVT5diqY8BMOWLgllVT4SYMpYf/ysAATMAATDpfkhl7nYHaA1OCFTV bAhUBnSEdgz/gF+AXw1O/YBcTzpOYYjPkbNSqFIFgC9mJlQcINyA+07lXVxPHSCEdp1PbmMM/wFP Gk7liw5gN2i+i5pbDgAB6X5IZe52B2gM/01i/YBcTzpOYYjPkQdoxlEf/ywAATQAATBzU39PAU8a Tv2AwYsOZrNSqFIFgCAAHCANTtyA+07lXVxPHSAM/yAARk8vZihXS04OVIR2A4yXXAOMqoWJTq6L LU7Yjy9mq4iki5pbVVO5ZV6X1WwYAAHYU/Rms1KoUghUDFQM/wFPGk4ljcmLDP86TsBOSE4f/wFP Gk7li4JZVU8ylgODH/8rAAE1AAEws1KoUgWA+Vvpfkhl7nYHaA1Obnikiwz/L2YmVA9hc1RAd+WL 7nYHaOBlSGUf/4JZnGfFX3uYz36zUqhSBYBueKSLTWIfdUhlDP+jkEhOAU8aTgsAAYR25WU4XqF7 BnQGXFVPu1NVT85OH/8rAAE2AAEwWFTlXaSLDFTpfkhlA4A4aNN+nGcM/0ZPL2YBTxpOKFccIPpX jk4NTtyA+07lXVxPDIADjJdcA4yqhQEw44nHlp6PAJAdIIR2SGj2Ti1O2I8vZh0AASWNyYsM/6OQ SE4BTxpO5YuCWVVPl2KpjxZi5WU4Xi1ODmA3aFpQDP9NYv2Af5BNUSWNyYvOmGmWH/8rAAE3AAEw AU8aTjlobmPpfkhlA4A4aNN+nGdjYs9RWFTlXel+SGVWWdGRDP+IXxpZ9mUZUKuIpIuaW16X1WxL UWNi5V1EjQz/AU8aTuWLgllVT5diqY8WYhMAAeVlOF4tTg5gN2haUAz/TWL9gBZT44nOmGmWFmJ/ kE1RJY3Jix//KwABOAABMFhU5V0NTtyA+07lXVxPDP8BTxpO/YAmVAOMdGV2UZdcTU8M/wOMl1wO VP2AJlRVU7llTZZOT3ZRqoVskR//gllVT81kXE8M/01i/YADjJdcTZYCAAGqhR//MgABOQABMEdQ votzWVhU5V36VppbCGeqhTpOMwAwADAAMABDUQz/bm2oUghnqoU6TjIAMAAwADAAQ1EM/8ePu1Mx ADIAKk4IZ4R2c15HV+VdRI06TjQAOAAwADAAQ1EM/wBgVVsfZzEAAfSVdnrfeuWLCWPATkhOB2jG US9l2E4M/2xR+FMMXhtnCWMzADAAMAAwAENRDP9YVOVdDF4bZwljNQAwADAAMABDUQz/8k7BiNN+ nGfvU/2AL2Y0ADgAMAAwAENRG/8gAAFPCwABGk7li4JZVU+nYzZSKHW6ThBiLGcf/ywAATEAMAAB MHNZTIDlXRFPp05HUIxb1WsOVAz/gF+AX59Tl1xNT/Jdz34JZ3ZR1k4MVItOH40jjQz/c1lMgOVd gF+AXw1OpWPXU7Bll1xNTwz/IAA6TmRr0VMXAAEfdbNSqFKJTq6LDP8BTxpO5YuCWVVPWlAM/01i /YAWU+OJJY3Ji4R2zphplh//CgABjE4BMIJZVU8JZ0hl44nHlp6PAJArAAExAAEwnltMiCtnTU/Y bXBsNlIM/+VOK2dNT5JjDVQ6TjF144nHllhU5V0M//JOwYg6Z4RngF+AX6SLmlsBTxpOXpfVbOOJ x5ZYVOVdDP+jkEhOAU8aTh0AAeVlOF4tTuWLgllVT1pQDP9NYn+QTVFIaPZOJY3Jiwz/f5BNUS9l 2E7Pfk5tZYh/UBZiVI1/UNGRH/8rAAEyAAEw5U4cIMR+x362Z4RnA4x0ZQz/4GUIVAKQl1xNT4lb kmMdIDpOMXXjiceWWFTlXQz/L2ZelzheJnsIVDheBnSEdlpQ1WwM/0ZPgF+AX6uI8k7BiBoAATpn hGeki5pbAU8aTl6X1WzjiceWDP8BTxpO5YuCWVVPWlAM/01if5BNUUho9k4ljcmLH/8rAAEzAAEw AU8aTuVOHCDPfk5tJ2DBiFhUHSANVElO44nHllhU5V0M/y9mXpc4XiZ7CFQ4XgZ0hHZaUNVsDP+A X4Bfq4iki5pbXpfVbOOJx5YM/wFPGk7lixwAAYJZVU/NZFxPH//5Wxwgz35ObYtXwYhYVB0gXE/6 UcSJmluEdtVsi1+HZfZOMFKVXgln6lSbTh//KwABNAABMAFPGk4OTrNSqFIFgE9TRlXjiWSWs1Ko UghUDFR2XmZOYpemfppbL2XYTgKQU1+Eds9+Tm1liH9QcGWdmAz/i04OVLNSqFIFgP2PqIvPfk5t ZYgrAAF/UIR27l2dmOiQBlIM//JOwYg6Z4RniF/vU/2AL2UBY7NSqFIFgIR2yYtCbAz/AU8aTuVl OF4tTuWLgllVTxtSNlIBMDZlxpbBi25jDP8gAE1if5BNUQUAAUho9k4ljcmLH/8rAAE1AAEw+Vet iw1noVIfZypnMFIfZwz/DICzUqhSCFQMVDBSH2cM/wFPGk7IfmJrs1KoUghUDFSEdgz/8k7BiB9n 9JWAX4Bfq4iki5pbXlyOTtBjTVJelxcAAdVs44lklrNSqFIIVAxUDP8BTxpO5YuCWVVPWlAM/01i f5BNUUho9k4ljcmLH/8sAAE2AAEwWFTlXSpn0GNNUjMAMADlZRqQ5XcBTxpOc1PqgUyIu3lMgAz/ L2YmVIRnEGKzUqhSBYDdj9Vs44lklh//AU8aTuWLgllVT1pQDP9NYv2ATZZOT86YHQABaZYQYixn H//5W45Os1KoUgWAhHaej0yAr3OCggz/CWfqVJtOxV97mOhsD2GEds6YaZanYzZSuXAf/ysAATcA ATCzUqhSCFQMVDBSH2cOVAz/z344XvpRsHPli8h+YmuEdthfsIueUgZ0yH5ia0ti7X4M/+WL7X5+ e4R22F+wi55SBnTtfn57S2Ltfgz/z37HjwBOKwABtWv2ZfSVDlQBTxpOTWLQY/pRZYieUvh2c1FL Yu1+DP9GTy9mWFTlXXRT0GP6UVSNf1CBiUJsDP8BTxpOzphpll6XOAEBAAACAQAAAwEAAAQBAAAF AQAABgEAAAcBAAAIAQAACQEAAAoBAAALAQAADAEAAA0BAAAOAQAADwEAABABAAARAQAAEgEAABMB AAAUAQAAFQEAABYBAAAXAQAAGAEAABkBAAAaAQAAGwEAABwBAAAdAQAAHgEAAB8BAAAgAQAAIQEA ACIBAAAjAQAAJAEAACUBAAAmAQAAJwEAACgBAAApAQAAKgEAACsBAAAsAQAALQEAAC4BAAAvAQAA MAEAADEBAAAyAQAAMwEAADQBAAA1AQAANgEAADcBAAA4AQAAOQEAADoBAAA7AQAAPAEAAD0BAAA+ AQAAPwEAAEABAABBAQAAQgEAAEMBAABEAQAARQEAAEYBAABHAQAASAEAAEkBAABKAQAASwEAAEwB AABNAQAATgEAAE8BAABQAQAAUQEAAFIBAABTAQAAVAEAAFUBAABWAQAAVwEAAFgBAABZAQAAWgEA AFsBAABcAQAAXQEAAF4BAABfAQAAYAEAAGEBAABiAQAAYwEAAGQBAABlAQAAZgEAAGcBAABoAQAA aQEAAGoBAABrAQAAbAEAAG0BAABuAQAAbwEAAHABAABxAQAAcgEAAHMBAAB0AQAAdgEAAP3///93 AQAAeAEAAHkBAAB6AQAAewEAAHwBAAB9AQAAfgEAAH8BAACAAQAAXidZG/+jkEhOAU8aTuWLgllV Tw4AAVpQDP9NYm543U/EiX+QCk7wjyWNyYvOmGmWH/8eAAE4AAEw44lklrNSqFIIVAxUTVIqZxqQ 5XfKU4FfQmzlXRpPhHYPYcGJDP8vZiZUhGcQYl6X1WzjiWSWH/8sAAE5AAEwCjDjiWSWs1KoUghU DFQakOV3Zk4LMIJZnGdoiPCPDU5TXwz/gF+AXxBiOk6zUqhSBYBTYmKNmFv4U4R2CWebUsGLbmMM /yAAAU8aTuWLgllVT2ZOEQABmVEM/01if5BNUUho9k4ljcmLDIB/YsVi1WyLXyON+04f/y4AATEA MAABMOpUm07FYGJfC05eXI5OXpfVbOOJx5ZYVOVdDP97mH9ixWLqVJtO1WyLXyON+04M/yAAL2Z/ YsViMQB0XjEAKk4IZ+VdRI2Eds9+Tm1liH9Q2I8vZjEAIwABdF4yACpOCGflXUSNhHZUjX9Q0ZEM /+NOGpDld9GRL2YmVIGJf2LFYgz/s1KoUgWA/YAmVIGJQmxiYA1Zs1KoUnNR+3wf/w4AAQlOATCC WVVPCWdIZQRZBnTdj6p+3Y/EiVhU5V0rAAExAAEwBFkGUgEw44nHlrNSqFIFgAz/gF+AXzF1jk6z UqhSBYDSYt1+fns2ZeWLGpDld2ZODID8W/SBAU8aToR2BFkGUgEw44nHlkyIOk6riKSLmls6Th0A AeBlSGUWYl6X1WxMiDpODP+jkEhOAU8aTihX5WU4Xi1O5YuCWVVPWlAM/01if5BNUUho9k4ljcmL H/8sAAEyAAEws1KoUgWAOmvIi5ReWIAM/4tODlSriAFPGk7jiceWDP8oV/JOwYgfZ/SVDP+zUqhS BYDvU/2AXE/6UamLAU8aTqpjS2INTspThHaXYqmPwom5cAz/FgABAU8aTuWLgllVT95WlF4WYgWA KFflZTheLU7HkdZT6lSbTjKWA4NWe2V1H/8rAAEzAAEw+VuOTt2Pqn7dj8SJhHZ2YA9h7pWYmFhU 5V0M/9ZO7E6AX4Bf0mLdftBjpE4KMMBoqItmTgswFmImVKSL3Y+qft2PxImEdotOnlsM/wFPGk7l ixkAAYJZVU8bUjZSATA2ZcaWwYtuYwz/TWJ/kE1RSGj2TiWNyYsMgH9ixWLVbItfI437Th//LQAB NAABMIJZVU/bj0yI3Y+qflhU5V2EdotOnlsDjOVnATDBi25j+laaWwz/+VuOTt2Pqn5YVOVdDP/o kOiVz34GdJRe6GwPYepUm07lZThexn6Cgu6VmJgf/yAAIwABNQABMPlbjk7dj6p+WFTlXQz/i07R Uw5UwE5ITvZl9JUEWQZ0DP+CWVVPZk6ZUQow3Y+qft2PxIkEWQZSGpDld2ZOCzAf/ysAATYAATAO YDdoBnTjiRwgJU7Nkd2PzVModbpOVVNNT4R2xIngejZSpl6Edh0gDP+CWVVPKFcKMOlgWn9hZ4tP CzAtTuaLxn4OZm543Y+qft2PxImEdhwgFQABAE4sgt2PzVMdIAEwHCCDj82R3Y/NUx0gylMcICVO zZHdj81THSAf/yAALAABNwABMPR2v37okOiVz34GdMVk6oHjUzRZno8AkFhU5V0M//JOwYg6Z4Rn gF+AX6SLmlsBTxpOXpfVbOOJx5ZYVOVdDP8gAKOQSE4BTxpO5WU4Xi1O5YuCWRgAAVVPWlAM/01i f5BNUUho9k4ljcmLDP9/kE1R9Ha/fs9+BnSKjUNnBFkGUlhU5V0f/ywAATgAATCzUqhSBYANTp6P DIArUgEw4GVFZfdl5V3lXQz/dFM7TiBfq4gBTxpO41M0WeOJx5YM/4BfgF+XXzBS8k7BiDpnhGeE di9lAWMM/yAAo5BITgFPGk4QAAHlZTheLU7li4JZVU9aUAz/TWJ/kE1RSGj2TiWNyYsf/yQAATkA ATCCWVVPTHWaWxwgzZEnWV9js1sdIAz/HCDNkSdZX2OzWx0gL2YmVMVfe5hTT7BzOk4gkBBi9Hal Y4R2z35ObV9jMVkf/y8AATEAMAABMMeRKHUcIFVf85dVX2GMHSC5ZQ9fG1I2UgEw3U9ZdYR2wYtu Ywz/1Wxili9mJlTHkeFPDP8gAAFPGk6FUeiQTwBBAPt8334WYkUAUgBQAPt8334KToR2RI0dAAGZ Zf2AJlRcTzpOwYtuY39PKHUM/zV1UFuukPZOATBLYjpn7XfhT/2AJlRcTzpOwYtuY39PKHUf/yAA DwAB21YBMAowPnkaT91PaZbVbAswnluhUpRe+VtWe2V1IAABMQABMCh1uk5VU01PDU6eUgZ0Pnka T91PaZZ7drCLFmIFgNZiIGs+ed1PPAAYIAE5jYR2DP8JZ8BOSE7VbItfI437Th//FAABMgABMCh1 uk5VU01PDU6zjZ2YNH+zfj55Gk/dT2mWgllVTwRZBnQf/ysAATMAATBYVOVdDU4/YQ9hcE4+ed1P FmJYVOVd6oE/YU2WTk+VYt1P+ldwZQz/dl4OTlVTTU9+ewlnT1Oui4R2xWC1UQtODP/li09Trosv ZiZUCWdIZR//EgABNAABMNWLKHUfZ/SVDP8vZiZUxV97mDR/s34+eRpP3U9plh//FwABNQABMOBW LHsJTrllhHYjjftODICnTh91O1OXdTmNKHWEdgz//YAmVKViAJUf/yQAATYAATCGmNZTMVkaTt1P aZbRkYR2TVLQY2Fn9k4JZ+pUm04f/w5gN2gGdOOJHCBel+BWLGe6Tg9hP2EtTq1lMVwaToR2HSAf /xoAATcAATABTxpOT1OpUp6PTIBYVOVdl5rWUzFZGk7dT2mW0ZEM/wlnwE5ITtVsi1/OmGmWH/8b AAE4AAEwH3WygDtTl3U5jSh1BVPsYupUm04M/8BOSE7FYLVRC07vU+VOq07XUx91soAlbTSNH/8Z AAE5AAEwKHW6TlVTTU8NTvpRd1EKMLt5TIDBiw5mCzCEdgz/CWfATkhO1WyLXyON+04f/x0AATEA MAABMOiNMFc6UzFcGk6Edgz/PnkaT91PaZaCWVVP+VulYwz/sHM2lrVrhHZaUNVsCWfqVJtOH/8b AAExADEAATAqZzR/s40xADUAdF6EdrpO61gM//2AJlQAkBFPDP+CWVVPBFkGdACQEU+LTpxbH/8Y AAExADIAATCeUgZ0TIDlXXlyimvlXc150GNNUgCQEU/2ZZRe6GwPYepUm07ulZiYH/8QAAGUTgEw CjDlXSRP3U9plmFni08LMJ5boVKUXvlbVntldR0AATEAATBeXI5O5V0kTwOD9FaEdsVgYl8JZ+pU m04f/w1Ol1+ki5pbOk7lXSRPhHbFYGJfCWfqVJtOH/8WAAEyAAEwDmA3aAZ044kKTgtO7XMUkC1O H/8OYDdop2M2Uh9n9JWEds6YaZYf/xgAATMAATDgVuVdXE8Al4GJlF5skZ1VUpH8W/SBe2uhTgz/ /YAmVKSLmls6TuVdJE8f/xMAATQAATACXzBXwlOgUuVdJE/dT2mWhHYM/4JZVU+ki5pb5V0kTx// GAABNQABMFxQ5V1ZdaqFH2f0lcePDlQM/9FTH3WEdjtTl3U5jSh1DP+CWVVPBFkGdB//EgABNgAB MOVdJE9YVOVdH1BFZdJi3X4NWeVdDP+CWVVPBFkGdB//FwABNwABMOVdJE9YVOVdH1BFZdJi3X5N kQhUWlAkT4trdJKaWwz/gllVTwRZBnQf/xoAATgAATDyXc9+pIuaWzpO5V0kT4R2TIDlXSVOzZHd j6p+DP8BTxpO/YAmVOOJZJYIVAxUH/8rAAE5AAEw+VuOTix7CU66TiCQEGKEduVdJE+LTkVlDP+C WeBWLHsJTrpOFV/RU4R2pE4akItORWUtTgz/EWK5ZfhTOmfXUyRPDP+CWVVPBFkGdB//11OzWxkA AbpO+FM6Z/2AJlSBiUJs5V0kT4VfR5DIU4GJQmwsewlOuWWEdrpOq44kT7NbVI1/UB//GwABMQAw AAEwVVNNT/2AJlTlTkZVGk7dT2mWBnRUjT5reZj/ZuNOTIDlXeVdJE9UjX9QhV9HkB//IgABMQAx AAEw0VMfdeVdJE+LTkVlDlQM/wFPGk4OTrNSqFIFgMF5C06MVOOJDP9+e6KLhHZliH9QT1Ouiy9m JlQJZ0hlH/8kAAExADIAATDOTuVdJE+LTkVlhHbRUx91MFJoUeiQ1WyaWwt6j16MW9N+DP/2ZfSV 71P9gIWNx48zAHReDP8vZilS2I8vZgpfH/8MAAFtUQEws1KhUj5tY5CeW6FSlF75W1Z7ZXUUAAEx AAEwsGXVbAtOs1KhUj5tY5BilzROhHY7ToGJzphplgln6lSbTh//EAABMgABMBpOoVIWWQVTDk6z UqFSPm1jkIJZVU8SUgZSH/8RAAEzAAEwKHXlXVVTTU+CWVVPxIl/kAxU5V0MVGyRzphplh//FwAB NAABMCh15V1VU01PgllVT0yIf0/5Wz5tY5BYVOVdhHYAkNiPFmIAkGJjQ2cf/xYAATUAATAodeVd VVNNT4JZVU/9j3Z6Pm1jkFhU5V2Edl9jMVlUjX9QI437Th//FQABNgABMA5gN2jEiZpbPm1jkFhU 5V2Edp6PTIALeo9ejFS7eUyAI437Th//FgABNwABMCh15V1VU01PgllVT5Re+Vs+bWOQCFRcT4lO rouMVLNSqFKJTq6LH/8WAAE4AAEwPm1jkFhU5V0AkN5WH2f0lYR25V1EjY95KVKFX0eQgllVT76L oYsf/x0AATkAATCzUqFSPm1jkAtOhHblXUSNATDlXfZlATART0dQATA+ed1PATDlXSRP7pWYmIJZ VU8EWQZ0H/8XAAExADAAATCCWVVPBFkGdN2PzVModeVdVVNNT8SJ4Ho2UqZehHY+bWOQWFTlXR// DAABBVPFiL6LoYsOTqF7BnTYmqd+rYvDfu1zKwABEDD5V62L9mX0lREwIAAyADAAMQAyAHReMwAI ZzEAMAAtADEAMQDlZQpOd20gADQACGc3AC0AOADlZfFtM1cgADUACGcxADIALQAxADMA5WUXU6xO IAArAAEQMPlXrYv5W2GMETAFU8WIvouhi+VdC3oIXgEwp07BVL6LoYvlXQt6CF4BMOVdeoI2UiCQ 5V0LegheATAFU8WIFmJpcplloXsGdDtOoXsBMNNOqFDPfhkAASAAIAAgACAAIAAgACAAIAAgACAA IAAgAAZ0ATBpckFtz34GdAEw5V0Les9+BnRJewIwJgABEDD5V62LOY0odREw5f8zADAAMAAwAENR LwC6Tgj/BVMrVIhj/osBMESNmWUBMDaDuXABMCROKVlIUxCZATAaT6FSATAOejmNSXsJ/wkAARAw /osLesyAb2bKUzZlynYRMC4AASAAIAAgACAANE+PlkB3sHPjTmlyQW2AYi9nylObT5Re/pSEdtFT VVwM/7Bz404FU8WIvouhi4BiL2fyXc9+gXo0eIZOIE/ffgVTxYi+i6GLgGIvZ4R2gmn1Xwz/LAAB ZJaGTt1PpGKnTsFUKFfQj5OPFJAtTg1O11NfY09XFlkM/9iPDk5pckFtylObT5Re/pQQYixnoXsG dMpTp07BVL6LoYsnfcZbVID7fHeNZWcCMCAADFT2ZSwAATRPj5ZAd/lbFln6UeNTwVTNecpT+lHj U8+RhHbrXx+Qnlh/lcpTEVTRU76P/Va2W/pR41OnTsFUhHYAl4GJDP8gAPlbp07BVAVTxYjQY/pR hk6KjWVnio0sAAHYmoR2gYlCbAIwZGsWWY+WQHcRYv1WylMWTkx1BFT9Vvlbr3ODWN1PpGKBiUJs hHbQY9iaDP8FU8WIKFcRVEB3/35ygq9z3U8BMCAAgoL9gE2WF4CEdrllBAABEVTRU1VcAjAvAAEg ACAAIAAgAGBPL2YmVChXOk6nTsFUKFfQj5OPx48Lei1O+lGwczR4X2OHc9iaDID8W/SBhHaiWzdi lWLJiwyA5nB8YD8AIAAgAGBPL2YmVChXOk5Nlk5PBVPFiBBiLgABLGcMgO5gvnztelGGPwAgAGBP L2YmVP5mOk7Qj5OPx48Lei1OFlkFU8WIjFt9WeBlX2MMgKdOwVR0U/pRsHOGTl9jT1cMgH52HWAN TpdfdlHjiT8AIAAgABqQx48kAAEsZ/6LC3qEdvlXrYsM/+9T5U4uXqlSYE/jibNRKFflXVxPLU5H kDBShHbZj5tO8FbRYBZiYE/udk1SY2tzUehshHbulZiYAjAuAAEgACAAIAAgACxn/osLegZcBVPF iL6LoYsOTmlyQW2vc4NYJ33GW1SA+3wM/xqQx48GUpBnp07BVNCPk49AYs9+hlOEdq9zg1hlZ76L oYsFU8WIDP8gAM5ODIB/kCwAAU1RBVPFiA1Os40MgCCQEGKnTsFUX2NPVxZiBVPFiMePpl4MgPxb 9IEFU8WIEGIsZ4R2R1PYmgIwIAAsZ/6LC3rmi8Z+sovjiYZOBVPFiL6LoYvOTqJbN2IsAAGEdqdO wVQFU8WIAJdCbABfy1kwUqdOwVQFU8WIGpDHj4yawYuEdmhRQW0LegIwBVPFiL6LoYuEdm1RZWvV bAIwIAAFU8WIvouhi4R2S23Vi3mY7nYBMEttLAAB1Yu5ZdVsylNLbdWLB2jGUQIwsGWEdgVTxYi+ i6GLBnS6i8pTuWXVbAIwdl4UTstOzX7okAZSO06BiQVTxYhQZ5llhHYnYP2AylMQYixn+VvUawz/ IADlTiwAAdBj2JqnTsFU3U+kYidg/YABME2WTk8FU8WIEGIsZwEw3U+kYq9zg1hJewIwdl4UTstO zX4FU8WIEGIsZwZSkGfKUxhPFlMM/yAABVPFiDR4X2NIaItPBlItAAGQZwz/+HZzUQVTxYiEdv1W tltMiBpOB2jGUcpT/VZFltVsxIkCMABOm055coprhHYFU8WIAJdCbDoAIACCWTpnsGj2ToR2MpYI lYGJQmwBMCAANXVQW6dOwVQWAAGEdkUAUwBEAMpTNXXBeE9cPYWBiUJsATBxU2mWwVQFU8WIylMH aMaLSXsCMC4AASAAIAAgACAADF4bZxqQx48sZ/6LC3qEdvlXrYsM/+9T5U46TgFPGk4oV02WTk+n TsFU0I+TjzR4X2OHcwz/TZZOTwVTxYgQYixnDP8gAE2WTk8FU8WI+Vuvc4NYLAABhHZxX81USXu5 ZWKXCWeDjydZLl6pUgIwDFT2ZdBj2JoBTxpOp07BVL6LoYsM/wVTxYi+i6GL/YCbUgz/IAB2Xn9P vouhi/pRhHYFU8WIuWVIaCZ7CFT9VggAAbZbylP9VkWWhHaBiUJsAjALAAEQMPxbCF6Ae8tOETBb ACBfAYAIXl0ABwABIAAgACAAWWWygMyAb2YtAAEgACAAIAAgABxOV1MnWWZbVXjrWBR4dnofdWZb hlMb//5mdI2Of/1WDP+3X/1WDP9edHhRDP9smmVnf4maTgz/cFOmXkl7BlJsUfhT249MiAVTxYi+ i6GLgGIsAAEvZxR4qIsaTwz/Dk6bT5ReRlVxUQxU249MiLBli1cFU8WIUGeZZRR40VPKU5ReKHUM /yAAsGWLVwVTxYiAYi9nylMFU8WIvosHWYR2AF/RUwIwIADCUw5OKwABO2BsUfhThHZoUQN0BVPF iBhiZXU2UppbAjAOTmxR+FM7YOiQBVPFiL6LoYvokOiVylM7ToGJhHYFU8WIEGJXWVBnmWWbT5Re RlUJZ8ZbB1KEdoBiL2crAAGkTkFtAjAvZmxR+FM7YOiQiGNDZ4R2mk4qWTpT2JqnfgVTxYi+i6GL CF4CMChXBVPFiL6LoYsM/7Bli1cFU8WIUGeZZcpTgGIvZ5ReKHUKTglnME7MWyEAAYR25XfGi4xU nlv1jc9+jJoCMAxU9mX5W9NOqFBpckFtATC+fMp2H3WnTgEw5V0aTuVdC3pJewln8W1lURR4dnoC MCUAASAAIAAgAIBiL2dMgPB5IAAgANiap37lXQt6CF4CMCAA5WIJZwBOeZj9VrZbE04pUkBcDP82 ACAAUwBpAGcAbQBhACAA0Z4mXgIwMgABIAAgACAABVPFiJpbB2ggACAAwlMOThpZeZgFU8WImlsH aOVdXE8M/4JZGv8yADAAMAA4AHRewlMOToKCUGcQTyhn/35yggVTxYgUeKiLGk87ACAAMgAwADAA NwB0XsJTDk42UjYAAaKLCjAtTk5Tuk4RbHFRjFT9VgVTxYhMiBpOB2jGUS0ALQAtAPxixYgPX/aA CFR/Z7F7CzBCAEIALwBUACAAMAAwADQAMAAtADIAMAAwADcAOwAgADIAMAAwADUAdF7CUw5O5nRe abh+sXtMiBwAARpOFHioixpPCjAtTk5Tuk4RbHFRjFT9Vv1WtlsHaMZRLQAtAC0ABVPFiFBnmWUg AOZ0Xmm4fgswFAABIAAgACAAPnkaT2ODiYogACAA/ma3g5dfAl6nfpROAE6zUqhSVlngeg0AASAA IAAgAPlXrYtEjSiNIAAgACAAQQBBAEEACwABIAAgACAARI2GU8pT+Veti3lyuXAgACwAASAAIAAg ANGPjE5BU3RehVEBMBZZRI0BTxpOCP8ATrZbhVFEjQz/AE62WxZZRI0M/0dXOk55cidZi1cBTxpO Cf/lXQt6gGIvZwz/BVPFiL6LoYsM/yiNz5ErAAGhewZ0DP/TTqhQylNpcplloXsGdEl76JDoleVd XE/PfoZTDP8gAAlnME7MW4R2BVPFiL6LoYvKUwRUzXmwZYtXBVPFiFBnmWWUXih1uWVil4R2ME7M WysAAeV3xosM/8pTBVPFiBBiLGdNlk5PDP8FU8WINHhfYwZSkGdJe7llYpcwTsxbhHbPfoyaAjAg AChXGlm2W1eEDVQWWUSNylP9VglnBVPFiAFPGk7FYvtOKwABBVPFiIBiL2d+mO6VDP93UQdZME7M W4R2tls1dQEwfWxmj/aW6JD2TgEw3pg6Z/aW6JD2TgEwdI9/YgEwvnzGW0tt1Yu+iwdZDP8gAM2R i1cWYidZi1crAAG+iwdZhHYFU8WIvouhi8pTuWVIaMSLME/PfoyaAjCIY/6LqGMHXaFSnlsBMLKL QmyeW0hlDP8gAHVwO22UXih1BFTNeQVTxYhIaItPZWfbj0yI5XfGiysAAbKL44kM/wZcvWJhjOV3 xovlTkVtPmYTZsJhhHa5ZQ9fIE+IY9l+pWPXU/lXrYuEdmZbWFQM/yAAeFGLV4R2BnS6iw5OME7M W55b9Y3Pfoya+HbTfghUKwABhHahUp5bi1f5V62LsosIXhv/+Veti8ePC3o7ToGJ5U7+iwt6U0/7 fDpOO06/fgz/aFELekhoi08UeGBOATAPXMR+qIu6iwEwIAAFU8WIvouhizhuD2IsAAHKU+VdXE+e W6FSIWrfYnZeNE/lTqhU4osPX/lXrYtJe2JfD18M/xVf/FtmW1hUwlMOTiwA6GzNkXZRME7MW4R2 AU8aTp5bRZY5ZduPSGiLT4R2BlKrTgIwBwABIAAgACAADWehUkhoi08sAAEgACAAIACvZcVfS1E2 UrdRATAcTp2C2FOLU2hWbFH4UwEwr2VuZl50t1X+lgj/Ck53bQn/CWdQlmxR+FMBMG1n3l1eeaKU +l6+iwlnUJZsUfhTATAGdElRKwABnlJsUb6LB1kI/wpOd20J/wlnUJZsUfhTATDVbPeWZVl9bGaP TZH2TmxR+FMBMA9ZsGWhgP1OATAcTrllGpDhTwEwHE7OmH1sZo8BMCAAB062W1BOxpYrAAHiVgEw f4mZhDV1aFYBMEdTt19HUzV1UFsBMI5/hHbGluJWATAJVK9leXJvgxpOATAXU6xOenovbk2REJkB MBdTrE5aU/R+KoJ6er6LvWUBMCAA1nYogysAARhPE5dUWAEwOGy3XjZSb4MBMNh2cVzRUzV1ATCc W75buH4aTgEwJG53bf2AS1EBMFltX2z7eahSATCsTlpTnFEWUwEw+ou3XjtTb4NJewEwIADpl/Bs IAABbo/OgAEwVIAIVH1sZo81dVBbATDJYtVs+lcBMD+W1WzJYhBPATAJTpdfKVIBMEdTt19HUzV1 UFsmICYgSXsCMAcAASAAIAAgAIhj/otiXw9fLAABIAAgACAA5XfGi7KL44kBMEhoi08Ubzp5sovj icpTBlKQZwEwnlsYYhRvw34BMA9cxH6oi7qLATCSTqhSpE5BbQEwOG4PYh9hn2ABMDRZEYHOmLRm ATA6XwkAAQOMZltYVMJTDk7KU5JOqFICMAsAASx7AE5VU0NRGv/Qj5OPBVPFiIJp8I8JAAExAAEw BVPFiIR2+lcsZ59S/YAQAAEBJQEl3U+kYgEwuVvFiAEwLGTQjwEwpE6lYyYA9IsOZgYAATIAATAF U8WIe3yLVxAAAQElASUAlS5VBVPFiAEwxpYIVAVTxYgBMNCPk48FU8WIDAABMwABMAVTxYgoV5tP lF7+lC1OhHZNT25/EQABASUBJR91p07Hjwt6hHbIfrlwDP9pckFtx48LeoR2d425cBUAATQAATCw c+NOm0+UXv6Ur3ODWAtOaXJBbdCPk48FU8WIYpc0ToR2EWMYYgcAAQElASVOT2lyQW0QYixnBwAB ASUBJU5PBVPFiBBiLGcGAAEBJQElTk80eF9jh3MHAAEBJQElTk+vc4NYslH7UQ4AATUAATBpckFt 0I+Tj69zg1j5WwVTxYiEdnFfzVQTAAEBJQElslH7UQEwL2OoUgEwBlgBeAEwKW6mXgEwf26mXgEw i1ObUggAATYAATAIVAZ0BVPFiDRsc14QAAEBJQElBVPFiA1Os40BMAVTxYjHj6ZeATAIVAZ0BVPF iAgAATcAATAFU8WIEGIsZ4RnEGIIAAEBJQElBVPFiFBnmWUQYixnCAABASUBJQVTxYjlXXqCEGIs ZwYAAQElASXQj5OPEGIsZwsAAQElASWnTsFULwAFU8WINHhfYxBiLGcGAAEBJQElRQB0AGMAATAb AAE4AAEwSGiLTwZSkGc6ACZPZmXdT2mWGk5PUxpPc1GOTmhRA3TQj5OPJ41fY4R2336hiwZSkGcO AAEse4xOVVNDURr/BVPFiL6LoYtBbQt6ylO5ZdVsCgABMQABMCBP334FU8WIvouhi7ll1WwtAAEg ACAAIACdT2CXx4+AX4R2z36MmtuPTIgFU8WIvouhiwz/uVsTZiCQEGIFU8WIx4+mXgz/DFT2ZeBW KmdFUQZSFHh2eptPlF7+lC1OaXJBbdCPk4+vc4KChHYtAAFxX81UylOnTsFU6oGrjoR2eXK5cCgA glmnTsFUBoE8UMpTp07BVNN+hGdJeykADP8gAM1TDIAoVwVTxYjHj6ZehHbFYLVRC06dTzZxGk8g kBBig4/YmoR2p04eAAHBVDR4X2OHcwIwc1ODj9iaEGIsZ4R2BVPFiLllSGh2Xipn1lOXXx9nhV8t Tm+CfVmEdgVTxYjdT6RiAjAUAAEyAAEwsHPjTptPlF7+lK9zg1gLToR2BVPFiL6LoYtBbQt6ylO5 ZdVsLgABIAAgACAARVEGUhR4dnqbT5Re/pQtTmlyQW3Qj5OPr3OCgoR2BFTNeXFfzVTgViB9ylOn TsFU6oGrjoR2eXK5cCgAglmnTsFUBoE8UMpTp07BVNN+hGdJeykADP8mAAEoVwhUBnSEdgVTxYg0 bHNeC07WU5dfBnTzYIR2p07BVN1PpGJIZZxnDP/OTgyATZZOTwVTxYj8fghUEGIsZ8pTp07BVDR4 X2OHcwIwDwABASUBJWlyQW3Qj5OPr3ODWPlbBVPFiHFfzVTmi/CPCQABYQApACxk0I+yUftRFCDM jT2EIAABASUBJcyNPYSfU+BWATDMjT2E2JqmXgEwzI09hOiQTU8BMMyNPYQGUpBnLQAtAC0AslH7 Uc1UlF4xjFMAUgBTAB0AATMAATBIaItPOgBGAGUAZABFAHgADk5VAFAAUwAoV45//VaUTmFn0I+T j79+742yUftR336hi/5WATAGAAEBJQEl0I+Tjy9jqFIJAAFhACkA0I+Tjy9jqFKEdmVnkG4SAAFi ACkABFTNedCPk4/lXXdRhHYvY6hSkZiHc8pTcVOzW+BWIH0PAAFjACkAL2OoUihX9mXfVwEwkZjf VwpOhHbNU5ReMYwRAAE0AAEwSGiLTzoAKVklbZ5bS21hU2aPL2OoUp9Sh3MxjP5WBgABASUBJQZY AXhYW6hQEQABYQApAAZYAXh9j3eDATAGWAF49mX0lQEwWFuoUCluf26mXgYAAQElASUUbBlQr3OD WA4AAWEAKQApbqZeATB/bqZeATAUbItTATDQdv6WSXsYAAE1AAEwSGiLTzoALU79VjBSt1/9VieN aXLQj5OPQGLPfoZThHYpbn9upl7YUxZT/lYLAAEBJQElp07BVAaBPFCEdkttmlu5ZdVsEwABNgAB MEhoi086AOVlLGcJTvGDbFH4UwRUzXmnTsFUhHYGgTxQaIgpAAEBJQElGlnQj5OPr3ODWOBWIH1x UQxUXE8odSCQEGL5WwVTxYj2ToR2X2OzWy0ALQAtAAZYAXjQj5OPL2OoUgz/f26mXvlbBlgBeIR2 cV/NVEl7LgABASUBJdCPk4+vc4NYQGLPfoZThHYEVM15cVOzW+BWIH2EdrCLVV8tAC0ALQBMAGEA bgBzAG0AbwBuAHQAIABTAEEAVgBFAFIAIAAzAFgAOQAwAK9zg1iwi1Vf6k4MAAE3AAEwaXJBbQVT xYi5ZUhovouhi0FtC3orAAEBJQElOWhuY6dOwVSEdjpc+FsBMNN+hGcBMAaBPFBJe/h2c1HCU3Bl ylMFU8WIgYlCbAz/aXJBbdCPk4+vc4NYSXvhT29gDP++i6GLBVPFiLllSGgM/ysAAXZebmNkazZS IJD6UZaZ9k4FU8WIUGeZZQz/NnEOVNuPTIgFU8WIS23Vi3ZeOWhuY0tt1YvTfpxn+VsFU8WIuWVI aFxPApBTX+5POWXKUxhPFlMCMMVfGgABgYn2ZY1RIWtLbdWLBVPFiPZO5U5ueN1PBVPFiLllSGj5 W6dOwVTdT6RihHYmewhUJ2ACMA0AATgAATBpckFtBVPFiLllSGi+i6GLbVFla9VsHwABASUBJUtt z5GMVAZSkGfQj5OPaFHHjwt6LU6Edq9zg1jgViB9OgDQj5OPuWUPXwz/KW5/bqZeDP+oUFhbSXss AAEBJQElS23PkadOwVQGgTxQOgCGTuOJp07BVJdislH7Uf2Am1LKU6dOwVTTfoRnuWVil4R2hIUx X+iQBlIM/y9mp07BVL6LoYs5ZduPhHaeW4yanU9uYwIwPAAbICsAAQElASU5aG5jS236UYR2p07B VAaBPFDKU9N+hGd5cidgglmcZ9FTsHOnTsFUvouhi8ePjk4GgTFfFmLHj45OWlf6VoR2DP9HVwCX gYn5W6dOwVTbj0yIBQABzZGwZb6LoYsCMB0AAQElASU5aG5jp07BVAaBPFAJkOliCFQCkIR2BVPF iFBnmWUM/+VOiG3jibJR+1EvY6hSSXtfY7NbAjAdAAEBJQEl/H4IVNCPk4+vc4NYylOnTsFUBoE8 UL6LoYsFU8WIuWVIaHZeNlJcT59Ti1cFU8WIUGeZZQIwKgABASUBJTlobmP4dnNRS23Vi4GJQmzb j0yIn1OLVwVTxYj2ToR2S23Viwz/dl5cT/pR+VsFU8WIuWVIaIR27k85ZQz/9HbzgeFus42BiUJs Ok5iawIwEQABOQABMCx7CU65ZWlyQW0FU8WIDWehUi0ALQAtAEMAUABTAC0AAQElASWiWzdi0GOb T6dOwVSEdjpc+FsBMNN+hGcBMAaBPFBJe/h2c1HCU3BlylMFU8WIgYlCbAz/aXJBbdCPk4+vc4NY SXvhT29gDP9DAFAAUwDQY5tPBYA5aCwAAW5j2Y+bToGJQmzKU8JTcGW+i6GLHVJlawVTxYi5ZUho DP92Xg5Ools3Yp9sGpBueJpbBVPFiLllSGh2XlpQ+lGWmfZO0GOkTqJbN2IM/yAA1lOXX6JbN2IZ AAHNU4iZDlRcTwKQU185ZduPDP82cQ5U249MiAVTxYhLbdWLdl7QY6ROols3YnlixlECMCMAAQEl ASVDAFAAUwDQY5tPzk4FU8WIUGeZZQEwBVPFiL6LoYsBMEtt1YsBMBhPFlMBMAVTxYgBMNCPk4+E dnRlU08NZ6FSAjANAAEsewlOVVNDURr/BFTNeQVTxYhQZ5lly07NfgYAATEAATAFU8WIuVtoVhwA AQElASUFU8WIuVtoVihXp07BVAVTxYgtToR2XE8odRr/uVvFiAEw3U+kYgEwBlgBeAEwLGTQjwIw BwABASUBJfaACFR/ZyhnsXsrAAEBJQElenqxe5dii1P9gJtSOl8M/xCANHgnYMpTEIAzYjR4J2D9 gH1ZDP/5Wyluf26mXthTFlMNTk9lH2EM//lbp07BVIR23U+kYidg/YCDj31ZDP/vUysAAeVOql+v c39PKHUCMEZPKFd6etCP9mUxdY5O6oHNkYOPzZEM/+BWZGsFU8WIQGJgU4R20I85jYOP2JoCMAxU 9mXgVihnUGfvU02W44knYP2A7l0M//lbEgABr3ODWA1OH1nLU31ZAjAFU8WIUGeZZRBiLGf4dvlb g4/YmgIwBgABASUBJeZ0Xmm4frF7KwABASUBJXp6sXuXYotT1GsoZ7F77l0M/xCANHgnYMpTEIAz YjR4J2ChbAlnKGexe31ZDP/5Wyluf26mXthTFlNPZR9hDP/5W6dOwVSEdt1PpGInYP2AoWwrAAEJ ZyhnsXt9WQz/g4++lqpfr3N/Tyh1DP9GTyhXenrQj/ZlMXWOTuqBzZGDj3uPDP/gVmRrBVPFiEBi YFOEdtCPOY2Dj05PAjAMVPZl4Fa4fiiNBVPFiB4AAbF771NNluOJJ2D9gH1ZDP/5W69zg1jUa4OP y1N9WQIw+HbUawyAAIoM/wVTxYhQZ5llEGIsZ4OPTk8CMAcAAQElASVRWJllaFRsj7F7KwABASUB JXp6sXuXYotT/YCbUjpfDP8QgDR4J2DKUxCAM2I0eCdg/YB9WQz/+Vspbn9upl7YUxZTDU5PZR9h DP/5W6dOwVSEdt1PpGInYP2Ag499WQz/O04nAAGBiShXm0+UXv6ULU6qX69zf08odQz/AE4haydg lWJEjYOP2JoCMEZPz37HjxpZIWuqX69zf08odQ5UDP8GUkpkhHYFU8WIEGIsZ05PAjAJAAEBJQEl UViZZVQAUgBBAFkA2HYrAAEBJQElKHWOTgaBPFCDj9iahHanTsFUBVPFiAz/p07BVAVTxYh6evSV KVIodYdz2JoCMDtOgYkoV5tPlF7+lC1Oql+vc39PKHUM/wBOIWsnYJViRI2DjxYAAdiaAjBGT89+ x48aWSFrql+vc39PKHUOVAz/BlJKZIR2BVPFiBBiLGdOTwIwBgABMgABMBN/slFQZ5llLAABASUB JRN/slFQZ5llKFenTsFUBVPFiC1OhHZcTyh1Gv/QY5tP+VunTsFUhHayUftRATAvY6hShHYTf7JR 3U+kYgz/dl53jTBSBlKUlqdOwVSEdlxPKHUCMDAAAQElASXhbKtsUViZZRr/RQBQAEUALwBFAFAA UwAvAEUAUABQAC8ARQBQAFUALwCwczpX0VPhbFqAKGxvkVBnmWVJewz/E3+yUSdg/YB9WQz/EGIs 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 y1N9WQVTxYhQZ5llDgABASUBJf9+coIFU8WIhHaeW7BzuWXVbC0ANABSAAgAAQElASUEVM15BVPF iAdoxosOAAExAAEwSGiLTzoA0GcBTxpO/35yggVTxYgYYmV1DwABLHsDTlVTQ1Ea/9CPk48FU8WI NHhfYwZSkGeAYi9nCgABASUBJdCPk49BbRqQr3ODWMtOzX4QAAExAAEwSGiLTzoAd20UXIR2eFGL V9CPk4+vc4NYSGiLTwkAAQElASUFU8WINHhfY4R2e3yLVwsAAWEAKQAWWQVTxYgOTqdOwVRHV19j T1cNAAFiACkAFlkFU8WIX2NPV0ZPp07BVCpnX2NPVw0AAWMAKQAWWQVTxYgqZ19jT1cMgKdOwVRf Y09XDQABASUBJQVTxYg0eF9jBlKQZ0FtC3rKU7ll1WwOAAFhACkAhk7jiQVTxYj2Ts9+hlOEdtCP k4+vc4KCEAABYgApAIZO44kFU8WIFmKnTsFUX2NPV8VgtVHKU+iQTU8hAAFjACkAxV+BifZl+VsF U8WI9k4WYqdOwVTbj0yIr3ODWP9OH3fVi4yaFmKJW8WIr3ODWLCLVV/qTmVn+1t+YsGLbmMeAAFk ACkADk6iWzdiylN/YtCPuk4SUgZSI437TspTRlUIjFSNf1CLTpxbCP8akDhe3U9plmxR+FN/YsVi Cf8RAAEyAAEwSGiLTzoAGll3jdCPk48FU8WIX2NPV0hoi08GUpBnDwABLHtrUVVTQ1Ea/wVTxYgQ YixnTZZOT0hoi08GUpBnEgABMQABMAhUDFQFU8WIEGIsZ02WTk85ZduPeZjudkhoi08GUpBnFAAB MgABMNBnGpDhT6dOwVQFU8WIEGIsZ02WTk+5ZdVsylNIaItPBlKQZw8AATMAATDQZ6dOwVR3bdCP uWVIaBBiLGdNlk5PSGiLTxEAASx7XU5VU0NRGv8FU8WI+HZzUYR2/Va2WxZi/VZFltVsxIkWAAEx AAEwVIAIVP1Wc1GOTihnKI0FU8WIwGiMmsBoq3XVbMSJLQBJAFMAUABNABkAATIAATAtTk5Tuk4R bHFRjFT9VgVTxYhMiBpOB2jGUS0ALQAtAPxixYgPX/aACFR/Z7F7JgABYQApAPh2c1EHYwdoGv8r VDRsh3MBMHp6sXuXYotTATAydZuRK1TPkQEw2H/yZqZeATD2gAhUf2cgY6ZeATDej6VjhGf6Xjpf pl5JexYAATMAATAtTk5Tuk4RbHFRjFT9VgVTxYhMiBpOB2jGUS0ALQAtAOZ0Xmm4fn9nLgABYQAp APh2c1EHYwdoGv+5j4tTOl+mXgj/RQBDAFQACf8BMBCANHgnYAEwEIAzYjR4Ol+mXgEw5nReaXNe i1M6X6ZeATApbn9upl75W3p6sXuXYotT/YCbUnFfzVQcAAE0AAEwHCD/fnKCBVPFiB0ggGIvZ8SJ A4MtAC0ALQCoY39eLU79Vv9+coIFU8WIxIkDg4R2SFFMiB4AAdia6X5IZQCVLlXiVh+WRU5ijR93 z34tAC0ALQAtAACVLlXiVh+W+l6+iw5OAJUuVbpOWFQDgDhowG+xUioAARAw+Veti/Zl9JURMDIA MAAxADIAdF4zAAhnMgA0AC0AMgA1AOVlF1OsTgEwMwAIZzMAMAAtADMAMQDlZQpOd20BMDQACGc3 AC0AOADlZfFtM1cgACsAARAw+Veti/lbYYwRMDtgz34GdAEwb1I7YM9+BnQBMCWEAJU7YNF2ATAC XjpXO2DRdgEwuk5EjTtg0XYBMACVLlU7YNF2ATD5V62Lz34GdEl7AU8aTiWEMAABIAAgACAAIAAg ACAAIAAgACAAIAAAlS1O2JpCXKF7BnS6TlhUDP/6Xq6LAU8aTsR++l7YmkJc4lYflsaWU0+lYg1U wlMaTwz/5U6/T45OxY8fkGJfEGJxUcaLDP8gAHZeFgABIAAgACAAIAAgACAAIAAgACAAIADdT8GL 4U9vYIR2CWdIZSBPvo8OTvlb8HkfAAEQMPlXrYs5jSh1ETDl/zIAOAAwADAAQ1EvALpOCP/QY5tP sotJTgEwSFMQmQEw0VNoeQEwNoO5cEl7Cf8gACwAASAAIAAoV1Nfyk7Ab8hwhHZGVRhiLU4M/wCV LlW6TlhUfVnUay9mHCDrWHVRHSAM//R2pWNxX81UMFIBTxpOhHaJW3FTAjBcTzpOHCAGXB0gHCAF Xh0gDP8MAAGoYEeQMFLHj9mPm07FYLVRS04AToxOH/8ZAAExACkAOk7ATkhOAJUuVbpOWFQ7YC9m SFELd/9iGlkRXLGUDP+NUQt3nlIaWRFci04f/xQAATIAKQA6TsBOSE4AlS5Vuk5YVDtgyYmXX3Je hHYaWQz//2KEdhFcH/8QAAEzACkAOk7ATkhOAJUuVf9ihk6xlNiPDU6IW8SJ6Xcf/xAAATQAKQA6 TsBOSE7RU4ZOsZTNTjZxoWwJZ+95gWcnYB//FQABNQApAAFP/lbDXw1OOl8M/w1OP2FaUAz/DU5C bANUfVkM/+pTQmwJZ3GZIwABNgApAFhU5V2riARZWn8OVDtgL2axYihgGv8cINmPKk59VOROOWgs Zw1OB1IIVJ5bRZYdIBwg2Y+LTg1OL2YRYnJehHYdICEAATcAKQCCWVVPlF75W1hU5V06TuqB8V0A XzGBI437ToR2H1DjUwz/WFTlXSdZGZUNTq9yD1wZlQ1OrWUOYEhOnlIf/xEAATgAKQBnYkyIm1Lu XTpfuk4PYQz/oYsSUg1OglnYUxZT618eAAE5ACkAuk5YVEFtMVmHc9iaDP9BbXCNhHYvZhwgvnx1 UTpfBlwdIAz/WXULToR2L2YcIGNldVE4bsdSHSAeAAExADAAKQCiYlVTATBWU1VTATBsj1VTATCS cFVT9mUJZ9FTH3UM/2xR9ItsUQlnBnQM/0Za9ItGWglnBnQVAAExADEAKQAIVFxPD2HGiw1OOl8M /2BPDU4GdBFiDP8RYl9ODU4GdGBPAjAuAAEgACAAglmcZ6hghHYAlS5VH5YNTy1OCWcATipOGk6h UlhUCWcATipOCGcNTqpSm1IM/xlSqGAGXPOBEVxfYzFZMgAwADAAMABDUeVdRI2gUjmNKHUM/4JZ nGeoYBwAAcBvsVKGTqhghHbiVh+WDP8aWQBOKk66TqpSm1IM/xlSqGDvU/2AGlkjYzIAMAAwADAA MABDUQIwBQAB/osLeu52hHYa/w8AAUEAKQCGTuOJAJUuVTtOoXuEdtKJcoKMVEyAI40CMBIAAUIA KQBmW2BOgllVTxhPFlMAlS5VH5YNT4R25V1cT0hlh3MCMBIAAUMAKQD6Xst6AJUuVaF7BnQ6ZzZS DP/QY0dTAJUuVRpO6X4CMBQAAUQAKQCCWVVPqYsAlS5VDmZ9dsBOSE7FYLVRC07vU+VOGln/YrGU H/8VAAFFACkAgllVT39PwG+xUg1OxU6nYzZS036cZwz/2I/9gKdjNlLHjwt6H/8VAAFGACkAgllV T1pXAWNja254hHb3TjxQ/FsRVAz/XGfdfqiL907Yj/dOH/8SAAFHACkAgllVT/pey3rReWZbhHYA lS5V6X5IZQOAOGj7fN9+H/8OAAFIACkA+l7LehBin1KEdgCVLlUflg1PjFTokOiVBQAB/osLenly uXAa/yoAAbBzOlfjibNRAU8aTs9+OF5HkDBShHaeW0WW7pWYmAz/imINWUJnhHaLTsVggHtVUxZT DP9mWw1OGk8NTpd7DP96mL9PJl5wjRBiV1mhewZ0nlLVbAoAARAw/FsIXoB7y04RMFsAIF/jWl0A JgABIAAgACAA/VZFlkyAGk75V62LCF5PUxpPpIvBi7KLCF4BMOVdRlWhewZ0VXjrWAEwBW5OUydZ ZlsBMC1OcVwnWWZbolunXrKLCF4CMC8AASAAIAAgAIZT+07ojf1WbFH4UwEwL25EjcaW4lZsUfhT ATBEAEUATABMAAj/LU79Vgn/AJUuVc9+BnQBMCdZOlPPfgZ0SXtMgE1PATAgABNOTIDOTotOJYQA leVdXE8rAAHRj0FTdF4M/85OAE6/fhpOoVK6TlhUMFIlhACVoXsGdOVdXE8M/xBin1LveS99jFQ7 YNN+hk4wTsxbhHYCXjpXJYQAlb58uXzPfoyaDP92XkhRDlQoVysAAQRUtlsBTxpO1lOXX4ZOGE/A eRpO6X4CMHZR+Veti/6LC3qIlPlbAU8aTp5bRZbulZiYDIC+i6GLDP+EVY5O+Vd7UWZbWFSEdp5b oVLjibNR/YCbUhv/JgABdlH5V62L6GzNkWZbWFSwczpXOFQ2ZQz/v0+OTmZbWFQoV55bRZblXVxP LU4JZ0hl0I8odQz/Yo2XXwFPGk4OTmZbWFSEdn1ZxIsCMC0AASAAIAAgAEBiiGP+iwt6Gv8KMDV1 3YsAlS5VgGLnXQswATAKMKJbN2INZ6FS4W4PYaZeATCiWzdiDWehUoBi513QY0dTCzABMAowAJUu VQ1noVI8eepOCzABMCsAAQowTIAaTmJfYYxRWCCQDk6wc+NORlWhUjx56k4LMAEwCjCCWVVPCWdI ZQRZBnSiWzdilWLJiwswATAKMCdZols3YgCVLlWAYuddCzABMAowAJUuVeJWEwABH5b6Xr6LDk4A lS5Vuk5YVAOAOGjAb7FSCzBJe/lXrYvHj352OlcDAAAgICAtAAEgACAAIACIY/6LeXJyghr/2X5g T7ll1WwM/9l+YE+AYuddDP/ZfmBPnlsYYhRvw36EdjpnGk8b/2BP9IsM/2BPWlAM/ydZtltlZ7lw DP+yiwheZWfEiwIwXE8sAAE6Tp5bGGKyiwheDP8gXwGACF6EdvlXrYsGXCdZz5HHkSh1eXJygrKL iGMBMMVgb2ZIaItPATDSiXKCbmIUb8pTOG4PYkl7Yl8PXwz/IADobM2RBnS6i4BiPAAfICwAAedd Dk4BTxpOhHaeW0WWxWC1Ufh2034IVAz/Ol8DjGZbWFTDX5dfpE5BbcpTz36MmgZSq04M/yAA/YAv VNFTjFQVX/xbZltYVB1g740M/3ZeKFfTW1lljk4dAAFQToR2wlMOThts9FYtTn9PZltYVBCQEG45 ZdhTwon1XwEw0GNHUwCVLlWAYv2ADk4qTrpO7k97UQIwMgABIAAgACAADWehUsePhHbokAZSAU8a Thr/UwBPAEgATwAtTv1WATB+gtieH3UBME5TiVvGluJWATDRkXaHb4/2TgEwQQBCAEIAATBCAFAA sm0WU/N3uWwBMCAACk53be9T41PvUywAAVBOATAKTndtNXXhTwEwLU79Vvt5qFIBMLdec0/GluJW ATDLU6aQ3U9plgEwF1OsTvpeTIgBMDWN3l36XkyIATDbVt1dNXXhTwEwc16JW91PaZYBMCAAsHMs AAHjTqGLl3s6ZwEwHE6eg/t5qFIBMPFtM1fbYkZVwYs4UgEwCk53bU5TnlsgT5JaATAgAC1O/Vbq TmhWxpbiVtuP+lHjUwlnUJZsUfhTATB/Xt5dwU4xcjtTLAABYpYBMCVmH3UCWBZThlnBVAEwKVlz Xn1sZo/dT2mWoYD9TglnUJZsUfhTATDMW/GDFlPlXQEwIABOU45/vo86Z7BoNlIgkAEwv05rlH1s Zo8AlS5VATCOfywAAf1Wv07PZ/1WRZZsUfhTATADTjlT/HINZ3CZATBxXBxOXU4zlg9ctls1dQEw VIDRU2+P9k7ReYBiATB+gilSATBUgPNgNXURgQEwIAAKTndtNXUUbFF/3H4uAAHReYBiATCHdqBS m1II/y1O/VYJ/0ZVGk4JZ1CWbFH4UwEwIAAKTndtOGxHU39eSlQgT5JaATAKTndtb4IaTziNE2YB MEkAQgBNAH+VzlcBMCAALU5UgDtTb4PGli4AAeJWATBUAEMATADGluJWATAtTsGU61/Qj8aW4lYB MFKXm1xkVVKRATAgAC1OGpDcjwttaXJBbcaW4lYBMAlOXU47U2+DATB3bYtzb4MaTgEwr4C3X/pX ATAgAFd/LAABcFEWU4ZZwVQBMFhiWlNja3h1aFawaAEw0XmdW+pOaFbqTmiIATAgANVs8Gw1dWhW ATCwZc5X+l6+i8aW4lYBMApOd20GdElRATAKTndtf4nokMaW4lYBMCwAAeFPb2CnThpOxpbiVgEw 3pgpUmZtZ3EOZgEwIAAnWRBVNXWvi3dtV1MwaRFoxpbiVgEwCk53bQeX5mXGluJWATCifjuHE4fG luJWATBXU6xOon4qWTOWxpYtAAHiVgEwbWcnhKKUhGcBMGqMNXJpZFhiATAPXClZRZ4BMEwARwB2 h4ZZATCwZYZ1t1+Glm9cs2yhgP1OATCwZYZ1a1GilAEwt15pYB2N3U9lUN+YwVQBMCAAs28eAAE7 U91PdXABMFltX2xOZ4FbATAgAFNowU5vgxpOSXt+dllPtlsBTxpO0GObT/lXrYvKU6hU4osNZ6FS AjAkAAEsewBOx3sa/xFiL2YBjB//EWLliw5gSE5aUB//EWKCWVVPWlD0ZglnSGUf/y0ALQAtAACV LlU7TqF7hHaaW01PDk7SiXKCOgAgAAGoi7qLGv8cIO6VFk70lQCVLlVVT1pQH//0dllluk6+luVO eGQifR0gLQAtAC0AJYQAlTtOoXuEdl1OJ1kfYflTGAABBlKrThr/HCB1UYtzHSBsj2JjEGIAlS5V z34GdIR20olygmyPYmNLTsNfAWBsj2JjDQABSGiLTxR4qIsa/yAAnligUu52B2j7TqFSz5ETAAEg ACAAIAAgACAAIAAgACAAIAAgACAAfmKLThr/2X7WTn5i22vFdRYAASAAIAAgACAAIAAgACAAIAAg ACAAIAAWY1FXGv+KYtZOA4wwUnZR1k46U99XDQABIAAgACAAIAAgACAAIAAgACAAIAAgAHJeiWMN AAEGUqtOGv8gACAA7nYHaPtOoVLPkYR2vouaWxAAASAAIAAgACAAIAAgACAAIADudgdovouaWzUA eZifUxlSIAABPk6LTxr/IAAcIAlOH1mfUxlSHSAgAB9Z0mEtAB9Z0Z4tAC0AH1kdVGxVLQAtAACV LlXPfgZ00olygmyPYmMgABIAASAAIAAgACAAIAAgACAAIAAgAB1nGk8tAC0ALQBaZhpPNlKmXhAA ASAAIAAgACAAIAAgACAAIAAgAACVLlWhewZ0NQCBiSB9FwAAICAgICAgICAgICAgICAgICAgICAg ICAXAAEse4xOx3sa/xpO6X5NYi9mbHhTkAZ0LQAtAC0AAJUuVeJWH5b6Xr6LDk6hewZ0DAABBlKr Thr/IACKYnJe22v+Xc5i+lE0bGVnEgABqIu6ixr/IAAAlS5VH5YNT8SJIWonWQz/Gk7pfjFc2JoX VB//GAABIAAgACAAIAAgACAAIACCWVVP3HQGUgCVLlWLc/1WH/8tAC0AAJUuVTpT31cSUgZSCwAB SGiLTwZSkGca/yAAD1w9ToR2RWWLTg4AAQZSq04a/yAAIAAaTul+OWXbj6GLElJQAEkAUAAXAAEg ACAAIAAgACAAIAAgACAAKVIodXNRLpUHYwdovotuf6djNlLQY0dTGk7pfhv/GQABIAAgACAAIAAg ACAAIAAgAOVOE04aThZTJYQAlQdjFV8AlS5VuWURVAj/UwBUAFAACf8pAAEgACAAIAAgACAAIAAg ACAAhFWOTnRlCFTKUwVTxYhma2hWDP/QY9ia4lYfllxPGGL9gJtSCP/QY7xw+lHYmkhlhHYAlS5V V1nvjcpTgGLnXQn/GAABLHsJTsd7Gv8AlS5V4lYfloR2hY/8Ww5OWWXDfhQgFCAQYjpOAE4qToWN p35ZZcN+GAABBlKrThr/IADRU1VcTWIvZmx4U5AGdC0ALQAQYp9ShHbiVh+WWXVPTxBin1KEdrpO HwABqIu6ixr/a3A8d1t3W3fGi7pOLQAtAJ9genoBMGtREmIBMJls51ABMBBV51AtAC0AYE+BiWVV N2iEdrpOH/8SAAFIaItPGv9bewmQATBLbdWLATBil9WLATAJkOlid1FTT81kXE8MAAEDgyxnGv9M gKFS9IsOZgEw+05MgAOAxIsQAAFIaItPGv9LZkdTYWf2Ti0ALQAtAC0AR1OYWzFc0VMijQwAAUVl i04a/01SCWcHaHVRDP8OVAln/Y91URkAAUFtC3oWU9CPbI8UIBQgqYsnWbZbTIioUneNZWctAC0A +l7LepJOqVIOTsBo5Wc6ZzZSEwABIAAgACAAIAAgACAAIAAgACAAAIogT6uOWWUtAC0AOnkDgzpO O04TAAEgACAAIAAgACAAIAAgACAAIABPUwxU3GK/iy0ALQCeWzBXwonfWxMAASAAIAAgACAAIAAg ACAAIAAgAHFRDFQGUqtOFCAUIA1ZNlIQYp9SDAABSGiLTxr/f14cTtBnAU8aTvlXrYudW3hRCgAB FG/Dfhr/fJw4fw9fnlsYYq2Lw34OAAEgACAAIAAgACAAIAAaenCeUl8flp5bGGIUb8N+HwABLHvb Vsd7Gv+he4GJoXuXXwlnBnQJZ0hlLQAtAC0ALQD6Xst6AJUuVaF7BnQ6ZzZSc1P2Zd+N248OTi9l AWMhAAEdYAOAGv8gACAAAJUuVTtOoXuhe8BOSE4tAC0A0XanYzZSpl4NTi9mKHVlZ6F7uk6EdiAA DIAvZih1ZWcTVLpOhHYVAAFIaItPBlKQZw5OqIu6ixr/AJUuVUFtC3qhewZ0hHZ4UYtXCU4nWe6V mJgOAAFIaItPBlKQZw5OqIu6ixr/NlKmXtF2p2OBiblwGwABIAAgACAAIAAgACAAIAAgACAAIAAg ACAAIAAgACAAIAAAlS5VQW0LeglnSGWnYzZSjFShewZ0GwABIAAgACAAIAAgACAAIAAgACAAIAAg ACAAIAAgACAAIAAAlS5VhVGnY4xUoVuhi1NP+3wgACAAHgABqIu6ixr/Fn/HfmBPhHYYh9uGUX8t AC0ALQCeW71lGk6hUt+N24/KUy9lAWNTT/t8hHbNZFxPylO5ZdVsEwABIAAgACAAIAAgACAACWdI ZZ9sGpAUIBQgS2Axci9mCIz6UWVnhHYMAAEGUpBnGv86TsBOSE5gT4GJu3kAXxFiH/8TAAEse5RO x3sa/wCVLlXiVh+WhHY6X8NfiJQtAC0ALQDAb7FSgGLnXQcAAUtt1Ysa/ydgPGhLbdWLHgABG1Ig kAZ082Cvc4NYFCAUICROS2L9kIGJk2IBMCROS2L9kIGJbHgtAC0ACWdIZX1U5E4OTlZZWn96gi9n CAABSGiLTxr/fVTkToGJCFQGdBcAAQZ082Cvc4NYS06MTiAAVlmxUi9mAGc7ToGJhHZLYrVrFCAU IISYSFEOZm54FlMRAAFIaItPGv8AlS5Vuk5YVIR2hHZ4UYtXqoVskY95KVK5ZUhoCAABRWWLThr/ AYz6UXycxX+xlBQAAQZ082Cvc4NYS04JTiAAqYu6TuxO6oERYmN3w08UIBQg6WBaf4Bi510MAAFI aItPGv/ATkhO9mUZUBpPCWekURRsH/8OAAEgACAAIAAgACAAIABgT4R2p07BVHBO21YBkABODgAB BnTzYK9zg1hLTttWLQAtAC0ALQC2W8yRAGd9WQoAAUhoi08a/wCVLlXiVh+WnlJsUaRbFwABBnTz YK9zg1hLTpROIAB/T89rKk66Tv2QCWd9WcNfAWAUIBQg5V1cT+tfUE4WUwcAARRvw34a/+qBEWLA b7FSCQABBlKrThr/NQAnWRFjGGLAb7FSHQABLHttUcd7Gv8AlS5VO22oUgZSkGctAC0ALQAAlS5V 6X5IZaF7BnSMVMSLME+MVAlnSGWfbBqQwG+xUgUAAThuD2Ia/4mUUFsPAAEdYAOAGv/pfkhloXsG dAlOJ1m5ZWKXjFRBbQt6IAARAAFIaItPGv87YM9+BnSEdvBW0WAtAC0ALQAtAANUAYAsZz8AHwAB IAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIADLhtV8B1KEdidZD1wN TgBOPwAkAAEgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAEdyYpf9 j0JsAJUuVZ2YDP96cnJyhk4pUqZtPwAdAAEgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg ACAAIAAgACAAIAAgAK9oH5atZUJccVM6Zz8AHgABIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg ACAAIAAgACAAIAAgACAAIAD3i2BPDU6Bibt5AF8RYh//CQABBlKrThr/mlvPkQCVLlUHYwdoDgAB IAAgACAAIAAgACAAAJUuVYR2NQAzADIAIWqLVxMAASAAIAAgACAAIAAgAFNfTVLpfkhlA4DEiy1O WFsoV4R2QFxQlidgFQABIAAgACAAIAAgACAACWdIZYR26X5IZQOAxIv7fN9+hHZBbQt6jFQHaMZR EwABIAAgACAAIAAgACAAgllVTwlnSGWEdqdjNlLHjwt6Dk7TfpxnIAARAAEgACAAIAAgACAAIAAJ Ts15eFGLV4R26X5IZQOAxIshag9fDgABBlKrThr/z37HjwRUzXliXw9fhHafbBqQwG+xUhMAASAA IAAgACAAIAAgAG54mltzUS6VGk7pfgdjB2gI/0sAUABJAAn/CwABaIg8aBr/AJUuVTttqFKhewZ0 pWJoiA4AASAAIAAgACAAIAAgAM9+JYShewZ0BlKQZxpProsVAAEsewNOx3sa/zpSwG8AlS5VGk7p fp5Yf5UtAC0ALQAAlS5V6X5IZQOAOGgJAAGoi7qLGv+vfrl8qoU0bDZSpl4MAAEgACAAIAAgACAA IACvfrl8Y0/RkTZSpl4NAAEgACAAIAAgACAAIACqhTRsoFJjT9GRNlKmXhAAASAAIAAgACAAIAAg AKqFNGygUmNP0ZGgUlZZ0ZE2UqZeDAABIAAgACAAIAAgACAAeXIrUlZZsVI2UqZeCwABSGiLTxr/ Y0/RkaGLl3u5ZdVsA4MsZwwAASAAIAAgACAAIAAgAC9924/Ua4tPPk6LTw4AAQZSq04a/wCVLlW6 TlhUqoVskTZSpl6Edvpey3onAAEgACAAIAAgACAAIAA2UqZebnjLejUAJ1mfUxlSGv8ATsaJDFTB Tgz/4GVna8aJATDAb7FSJ2ABMHVwO20nYAEwM3qaWydgATCnYzZSJ2AQAAEgACAAIAAgACAAIAAA lS5Vuk5YVKqFbJE0bHNebnjLegwAAQODLGca/wCVLlXokAZSA4A4aDp5A4NoiAgAASAAIAAgACAA IAAgAAdjB2gQAAEse2tRx3sa/7BzOlchat9iFCAUIOOJs1GeW0WW7pWYmA4AAaiLuosa/wRUKk5s UfhTAJUuVSFqD18BMD9lVnsWAAHLTs1+Gv+iWzdiX04Al4GJMXIb/36YolsxXC9mCk4dXhv/ZmvF iDBSWXJ/nwcAAcN+YE4a/7BRd22JbDmCAgABVHuRdQ4AASWEAJVwZW5jBlKQZy0ALQAtACh1cGVX W/SL3YsrAAEQMPlXrYv2ZfSVETAyADAAMQAyAHReMwAIZzEANgAtADEANwDlZfFtM1cBMDMACGcy ADIALQAyADMA5WUXU6xOATAzAAhnMgA0AC0AMgA1AOVlCk53bSsAARAw+Veti/lbYYwRMAJeOlc7 YNF2ATACXjpXBlKQZ7pOWFQBMACVLlU7TqF7ATAAlS5VO2DRdspTdlHWTvlbJYQAlXBlbmMGUpBn CWd0UaONhHa6TutYKwABADAAMAJeOlclhACVL2YBTxpOhHZ9VAmBDP82cQyADP86TnBlDU4RXIR2 hHYCXjpX6JABMACVLlXokOVdXE+6TlhUMXWOTjp/T04lhACVBlKQZ4R2gmkrAAH1X4xUuWXVbAz/ AU8aTi9973mEdidZz5FwZW5jl18NTjBSCWdIZYR2KVIodQz/JYQAlQZSkGfqU1xQWXUoV3BlbmOM VOFPb2CEdoB7VVNHbDtgjFRBbSsAATRsEF4PX4R2GpClYgz/On9PTvlbols3YgEwGk6hUgEwJYQA lQEw3nqJTrllYpeEdvFtZVEGUpBnDP/Tfpxns1FWewWA6lP9gO1RQHcsZ/2AhHbNU5ReKwABZWfQ j1xPDP+zUVZ7WFsoV4hfJ1mEdjFZ74vOmGmWAjAsZ/6LC3pAdzx3jk4lhACVcGVuY4R2BlKQZ4xU 336hiwz/WWWIY4JZVU8WY5hjcGVuY8yADlQrAAGEdsSJi1+MVJCWK1SEduFPb2ACMBqQx49mW2BO LGf+iwt6qGAGXO9T5U6MY+FjJYQAlXBlbmMGUpBnhHbNkYGJgmn1X4xU2JqnfoBi/YAM/9BjR1PR eQwAAWZboXsGdIxU0XlmW7NRVnuEdjRsc14CMDIAAQAwADDhT29gFlMTTrZbATBJAFAATQBBAKSL wYt5mO52z34GdAEwTQBDAFMARQABME0AQwBEAEIAQQABMM9+Tm0GUpBnCF4M/85OGk7PfoyaME7M WywA/mY7TgFjAF/RUydZi1cvAAE/ZZxeGk6hUvt8334BMPaUTIieUmxR+3zffgEwNXXhTxpOoVL7 fN9+ATDlXRpO6oGoUhZTp2M2Uvt8335JeywAH40jjcePTwBBAAEwRQBSAFAAATBCAEkA+3zffoR2 LAABxpYQYg5Onlu9ZQIwIACGU/tOeZjuds9+BnQM/4BiL2c7YNF2DP9vUjtgz34GdEl7TIChUgz/ n3GJYHRlbFH4UyWE0I+hewZ0DP8ijaFSoXsGdAEw4U9vYA0AARZToXsGdAEwuk6LTkyIP2WhewZ0 5V1cTwIwEwABIAAgACAAIAAKMJ5bKHUBTxpOcGVuY99+oYuMVAZSkGeAYi9nCzASAAEgACAAIAAg AAowE04aTnteb3BHcoxU/lZoiDZSXE+AYi9nCzAMAAEgACAAIAAgAAowsHPjTnmY7nahewZ0CzAS AAEgACAAIAAgAAowsGWnTsFUFHjRU4xUols3YgCXQmwGUpBnCzAmAAEgACAAIAAgAAowRQB4AGMA ZQBsAAEwQQBjAGMAZQBzAHMAjFRQAE8AVwBFAFIAUABPAEkATgBUAChXoXsGdC1OhHaeWxhi0I8o dQswBAABAE4BMPxbAIorAAGSTlSAUX+EdtiaH5DRU1VcoFIKTgJeOlfeeolOhHagUmdSDP9/T5df cGVXWxZTJYQAlYxUvnxueCWEAJXbj2VRhk4BTxpOhHbGic6RDP92XhVfd42GTgwAASWEAJW5ZQ9f hHboXSdZOWXYUy4ALgAuAAcAAQAwMQAodXBlV1v0i92LCgABADAyAHBlV1sWUyWEAJWwZYuNv1II AAEAMDMAvnxueCWEAJWqX69zEgABADA0AJ5bvWUlhACVcGVuYwZSkGeEdvt8335WexJSjFSeW71l DQABADA1AHBlbmMGUpBnDk4WY5hj5V13UYB7y04GAAGMTgEwB2MHaAZSkGcrAAEHYwdoBlKQZy9m AE7NeetfH5CEdgFPGk7pfkhlBlKQZ0titWsM/y9mYYjPkQFPGk5lULdetnK1UYR2ZVC3XgdjB2gM /yxngoL5WwRUe3wHYwdo249MiBQAAfFtZVHjiZBnDP92XtWL/lYPkMaJB2MHaMyADlSEdpCWK1Th T29gAjAMAAEAMDEAAJUuVel+SGWEdsSLME8OTgOAOGgIAAEAMDIAj1vCiQJeOlcHYwdoCgABADAz AGxR+FPPfiWEtnK1UQdjB2gIAAEAMDQAols3Yvh2c1EHYwdoCAABADA1AAJeOlclhACVB2MHaBkA AQAwNgD5WwdjB2iEdsZ+FlMGUpBnDP/OTnBlbmOEdgZSA16Ljb9S8W1lUQZSkGcHYwdoEAABADA3 AIJZVU8GXAdjB2gGUuOJMFL4dnNRcV/NVOBWUFsGAAEAMDgASGiLTxRvw34NAAEJTgEwOF7EiTZl bmM2ZcaWjFQHYwdo336hiysAAaFsCWdwZW5jDP8lhACVBlKQZzFcEGKGTnp6LU58aQGWAjAsZ4KC y07NfnBlbmMcZMaWhHYdYO+NjFS5ZdVsDP86TiWEAJUGUpBnYFmaW1pXnluEdvpXAgABQHgCMA0A AQAwMQAHYwdo336hi7ll1WwOTmVnkG48aA9fCwABADAyAHBlbmNlZ5BujFQ2ZcaWFJCEXwsAAQAw MwBwZW5jHGTGluVdd1GMVEtitWsLAAEAMDQAcGVuY2iIhHbEiRJSjFS+i6GLCwABADA1AHBlbmOE dglnSGUfZ4xU3U+cnAsAAQAwNgAGXO52B2iMVEsAUABJAPh23o8GAAHbVgEw3nqJTgZSkGclAAEB TxpOO2AvZihX3nqJTi1O7lgnWQz/glmcZ/2A0GNNUoSY5XfeeolO+VtLYoR24U9vYIxUVntldQz/ AU8aTvRmuVsTZhBin1ICMAsAAQAwMQACXjpX3nqJToR221YqTkJcIWsKAAEAMDIAgllVT0x1mlve eolO+VtLYgoAAQAwMwDeeolO+VtLYnBlbmM2ZcaWCQABADA0AACXQmyEdqROyVM5XydgCAABADA1 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 bBqQCwABNAABMOl+SGXulZiYBlKQZw5OOWXbjxEAARQgFCDEfsd+OWXbjwEwhpj8Wzll248BMFhU 5V05ZduPG/8TAAFBUwBODv+oY0yI6X5IZaF7BnRAYkeQMFKEdu6VmJgOTvlbVnsb/xoAAQAwIACo Y0yISwBQAEkADU7qUy9muk6bUkSNkG7okOiVFmIFgAFPoXvokOiVhHaLTsVgDP8WAAEgACAAIABL AFAASQAoV6hjTIjHjwt6LU4JZ+pUm07ulZiYDk6+lrlwYlQf/xYAATEAATCoY0yI6X5IZaF7BnSE dsR+x34hag9fDk4EVCpO6JDolYR2TIAjjRv/CAABMgABMKhjTIiEdgt6j14b/w4AATMAATBsUfhT P2W7bA5O6X5IZaF7BnSEdqhjTIgMAAE0AAEw6X5IZaF7BnQOTgFPGk6HZRZTG/8aAAEQYn+Vi1cB TxpOoYBDZ8BvsVLNZFxPnluhUi0AWXV7mgEwOFQVXwEwwG+xUjhow1+6Tk1iKwABEDD5V62L9mX0 lREwMgAwADEAMgB0XjMACGcxADcALQAxADgA5WXxbTNXATAzAAhnMgA0AC0AMgA1AOVlCk53bQEw NAAIZzIAOAAtADIAOQDlZRdTrE4rAAEQMPlXrYv5W2GMETABTxpOO2DBiAEwY4SLTn+VATA7YM9+ BnQBMLNRVnsFgAEwuk6bUkSNkG47YNF2ATAijaFSO2DRdspTqoVEjY95KVLPfgZ0ATCVYh8AASAA IAAgACAAIAAgACAAIAAgACAAIABEjc9+BnQBMC1O2JpCXKF7BnS6TlhUATBIAFIAoXsGdM5OGk66 TlhUMAABEDD5V62LOY0odREwQGIJZ8JTGk+6TutYaFH9Vt9+AE73TjQAOQAwADAAQ1G6ThFsAV4v ALpOLACfU/dOGv82ADgAMAAwAENRuk4RbAFeLwC6Tgj/K1T5V62LATAHY5pbIAABIAAgACAAIAAg ACAAIAAgACAAIAAgAPlXrYtZZVBnATBIUxCZATA2g7lwATAOejmNSXsJ/+BldlHWTphiY2IgADAA ASAAIAAgACAAIAABTxpOHCChgENnwG+xUh0ghpjfV4R2nlsYYkNnAVoTTrZbVU/XX2qASFEfdSAA LQAtAC0ALQAHY/xbATCFj/xbAU8aTvpey3oAZ4xbhFUBMABnApAIVCwAAeqBq44BTxpOhHahgENn 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 WVVPKFehgENnq4gAesqRhHYMVPZl3U8BY6djNlJDZ4xUz34lhENnhHbffgBOH/8nAAHHJYJZVU/i Zd1PAWMBTxpOoYBDZ8BvsVKEdp9S/YDRUyVjLADIU/2ABlx2Uc1kXE8OTtVsi1/OmGmWp2M2UjBS AE4qTjKWa3CZWIVRH/8uAAEgACAAIAAgAO52TVIM/y1O/VY5ADAAJQCEdgFPGk62W/Jdz37ld1OQ oYBDZ8BvsVLvU+VODFT2ZeOJs1HlTgpOQGIJZ+6VmJgM/0ZPKFcBTxpOLU6eW71loYBDZysAAcBv sVKEdgFPGk62Ww1OMFIyADAAJQAM/+BWOk45ADkAJQCEdgFPGk62W/2QWFsoVwBOKk4AZydZhHZ+ mFGGjFTFYudfFCAUIAFPGk6EdqdjNlJDZwH/LQABIAAgACAAIADgZbqLL2aScIR2uGy4bGxibGKE dsSeSVHViA5OSJZTZoR2/VaOf0tOiU4M/9iPL2YfV0aMUX8bUstZuk5aWthT/Fv0gQpOAl6maDR4 bXAsAP2QKwABL2YBTxpOtlvsTh93H3cHUgdShHZNUmaPS050kgH/6lQqTgFPGk62Wz9hD2EGXOaC w1/PfiWEhHYQYpxnfXZ9dvFiS2L4dqmLH/8gAOpUKk4BTxpOtlsrAAE/YQ9hqYvqgfFdhHa2W6FS i051ct6PAU8aTn1U0I8f/+pUKk4BTxpOtlsNTgxeG2eKYgFPGk5aUBBiLHuMTipOHCB/lV9snlsa Th0gIAAWYhwgDVkfZigAAcaW4lYdIAz/dFOdTzZxYnJicoxj4WOnYzZSQ2cf/+pUKk4BTxpOtlsN TgxeG2f6VxpOf5VSlwz/Fk7jTvZe7X4BTxpOhHYfdX1UH/8mICYgLAABIAAgACAAIAAtTv1WAU8a ThwgoYBDZ8BvsVIdIIaY31eEdp5bGGJDZwFaE062W1VP119qgEhRH3UgT4hjqYuhgENnHCA2ZT5l 6oGCWR0ghHbYecCLAf8HYxcAAfxbATCFj/xbAU8aTvpey3oAZwKQCFTqgauOAU8aToR2oYBDZ8Bv sVK5ZUhoAf8eAAE6TqhghHYBTxpOU2IgkBwg0ZFLYtCUHSAsAAlnSGVZdU9POGjDX7pOTWIsAJ5Y Ol8BTxpO3VFagJtSG/8kAAE6TqhghHYBTxpOU2IgkBwg0ZGllBlTHSAM/3tflV7Ab9FTWFTlXVxv /YAM/6BSH5ABTxpOnluwc+52B2gM/9FTVVzuWCdZG/8cAAE6TqhghHYBTxpOU2IgkBwg0ZFygk2W PYQeTx0gDP8GV+Fu44mzUUNRAYAAkPpRBFQnWb6WmJgb/wsAARAw/FsIXoB7y04RMFsAVU/XX2qA XQAaAAEgACAAIAAgACAAIAAgAC1O/VYBTxpOHCChgENnwG+xUh0ghpjfV4R2nlsYYkNnAVoTTrZb LgABIAAgACAAIAAgACAAIADFZH+VsouIY7pOm1JEjZBuDk5EjSxn0I9cTwRUIWpXV4R2/osLegz/ JFx2US9moYBDZ8BvsVL+iwt6DP9zXkdX+Veti+FuD2GmXtiavo8tAAE5ADYAJQDlTgpODP8aWSFr wlMOTsGL0XYaT4xU/VZEjdRZCWdzUaqFbJEGUk2RATChgENnwG+xUgEwAU8aTjllNlJJez9lVnuE dkmD32KMVO5PoovlXVxPAjArAAEKMLBlIo3MWwswATAKMGOEi04aTwswATAKMCx7AE4ijc9+CzAB MAowz2vlZc9+Tm2wZfuVCzBJexpZtlsijc9+klpTT4R2OF50Xn6Y7pUCMLpOm1JEjSsAASxni04a TuiQO2DRdgz/oXsGdGZbVXjrWAIw/mY7TgFjHE7OmH1sZo8BMJBf5V06Z7BoATDbYkZV9pRMiAEw UpebXHdtFFwBMF9sf4nclBpOATAtTpViKwABwYs4Ugj/n1NXU7llwYs4Ugn/ATDcgClSuWwwdQEw iVvwbNF5gGIBMKJj740FgAEwXnneXfBss1xJe9tWQVMaWbZb5XcNVAFPGk6qhWyRoXsGdA5OoYAr AAFDZ8BvsVJ5mO52G//+ZjtOAWP9VqFSYpb9VkSN1FkGUk2RQFwBMC1O/VbBi9F2Gk8KTgJe6JAB MF9sf4kBd/1WRI3UWQEwVm4XUwF3ZmtJbAJeHE5WbisAAc9+Tm0AX9FTOlNJexpZKk4tTn+VH2fA b7FS/ouYmBR4dnoCMJ5bnlsoVyhX44mzUYZOAU8aTqGAQ2fAb7FSvpaYmAIweXIrUi9mGlIaUhtS y3qEdi1OKwAB/VYbUhpOf2cCXjpXCk4M/yx7AE4qThtSGk5/ZwpOAl5sUfhThHahgENnwG+xUrll SGgUIBQgHCCiY++NBYAdIAz/MVwvZlVP119qgEhRH3U7TgFjvosDAAGhi4R2AjAuAAEgACAAIAAg ACAAIAD+ZsJToFLHj1VP119qgEhRH3X5V62LAU8aThwgoYBDZ8BvsVIdIGxRAF/+i4R26JAGUgFP Gk6iWzdiGv/tZRxOOmewaAEwvY+BW8GU1Wz9gCwAAZBuATAtTv1WV1O5ZSqCenoBMApOd22wZRZO slDGluJWATBOU0ds5V0Ler6LoYvGluJWATDNkYZef5VfbCCQi1dQZ5llKADGluJWKQABMPiLqGav ZR2Nvo8sAAE6Z7BoATCmngOAl2fReYBiATAKTndtDFQpWbBlUGeZZQEwzZGGXn+JT54ylveWNXVQ WwEwZmtJThqQvo+6fsd+OmewaAEwCk53ba5fG1K5W992b4/2TgEwLAABCk53bYdb/H81dVBb0XmA YgEwWW1fbC1OaXJdTg6f0XmAYnVbFlNoVgEw2JoWU2ZbKAAKTndtCf/9VkWWOI0TZgEwCk53bR1e GpA1dRRsvosHWQEwIAAtTisAAf1Wh3agUZViRI3GluJWATA4Xt5dAl59WSlSsYNJUTV10XmAYgEw Ck53bSaVwnNRWPaA0XkBMFdTGpBedCdrDWdwmQEw8W0zVwJeDFTKdp5bGk4BMNGQKwAB3l1aU3ly bHgojVBnmWUBMFtuX2wCXi1Of14akKF7U5DlXQt6ATBxXBxOPU5PnqGA/U4BMPFtM1cCXvhb0ZGe WxpOATAtTutfEJlumcaW4lYBMFtPcVwsAAECXgpPr2X8ZvpeUGcBMI9beXIpUv1WRZYBMNtW3V3w bO5ojYdEjcVi3U8BMPFtM1eMVAhU4HOdWwEwf17eXQpm1186ZzV1ATB3bVdTH3UBYG+P9k7tVgEw KwABJ1l+duFPNXVQWwEwf14cTlNT9H5Rf9x+ATAcTp6DBW4MXjV1UFuCUwEw8W0zVwJer3ODWOVd C3rReWZbATDxbTNXAl6vc4NY5V0LetF5ZluAYi9nLU4rAAHDXwEw8W0zVwJeWlMnWcWIcJnlXQt6 ATDxbTNXAl5PU5tSvo++fMZblE7RkTV1UFsBMF9sz4JJUTOWqFKbUq9z3U8BMFltX2zMWzOW41O4 XP1WRZZpcisAAUFtATAKTndtCFS3XtF5gGIBMNtW3V1jawlUuWwUbDB15V0LevpevosBMApOd201 cjxo5V0aTuVdC3oBMM+C3l0CXh2NIn3qgahSFlPReYBiATBZbV9sKwABdpjLevaAGk4BMLGDFFyv ZXlyCP+mU+iVCf9VXplY0XmAYgEw23ZqjAVTxYieWxpOATAGZnFct1/bdr58xlshandRATBtZ95d aGaJW8aJr4twZVdbgGIsAAEvZwEwcVx/iUtmRlX9VkWWJ1lSkZdeATDPgt5dAl4nWQlntlsodbp+ x37BVAEwNFRfbAJeDmYzlrBlUGeZZdF5gGIBMBdTrE6sThxOuWU+Zjp5gGIvZwEwKwABcVx/iQ5m rk4/YjBXp04AX9FTATAXU6xOcGVXWylZAljhT29g0XmAYgEw8W0zVwlOoFIATtF5gGIBMClZJW3h T6hORlU4jQEws2wXU5ROa5Sxgu1WATAuAAGzbFdTAXeZn19sEJlumaF7BnQBMH+J4Vy/U4VRw3E6 Z9uPkmMUbKF7ATCIbDOWUE7RkXp6A4zAURZT5V0LegEwQQBFAE0A0XmAYigAz4LeXSkAATAgAPFt M1dOUyMAASdZ+lfgVhR4dnpilgEwCU7xg82R5V0cTrllw3EUbG6POmcuAC4ALgAuAC4ALgBJe3FR oYszADAAMAAwABpZtlsBTxpOAjAHAAEhaldXAE4a/wZ0uovHewsAARwg5U66TjpOLGcdIIR2bFH4 U7tsBnQOAAGhgENnwG+xUixnKI0a/5ViRI2hgA5OwG+xUqGACQABuk6bUkSNkG6EdqF7BnTlXXdR EgABoYBDZ8BvsVIxWSWNSGiLT8pTQGImXmVnhHYfjWKXSGWUXhr/CgABxiXAb7FSx4+mXg5OwG+x Ug1Os40KAAHGJVhU5V0QYjpOH3dja4R2oYAcTgsAAcYlGk7pfgtO0W5YVOVdNmVlUQpOqG0RAAHG JcBvsVIATuiQBlK6TlNi+1GGTuZTFlkATidZ6JAGUrpOGQABTIgaTgEw0VNVXDaWtWsBMLpOTWJ5 coFfATCqhWyRU0/7fAtOhHbAb7FSIWoPX4Rn+l4TAAHGJd56iU4nYEyIGk4OTiBP3342UiCQGk7A b7FSuWUPX4R2OlMrUhUAAcYlsHPRkRZiBYChgENnDP8BTxpODU4MVNFTVVw2lrVrDP+5ZQ9fDU4A TgcAAcYl71P/ZuNOJ2BYVOVdEAABxiUOTqqFbJFTT/t8hHY5U02RDP8JkOliwG+xUrllD18OAAEh aldXjE4a/55boVLHexr/oYBDZ8BvsVLNZFxPFAABMQABMGODY2shaotXCP9SAGUAYQBsAGkAegBl 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 zZF5coFfFwABxiW6TptSRI2QboR2wG+xUg5Opn5fZxQgFCABTxpOhVHokKF7BnQ6ZzZSG1KwZR4A AcYlp05DZxpZQ1EWU4xU+l7LeglnSGVHV2GIhHZsUfhTu2wGdNN+hGcUIBQgAU8aThZZ6JCnTkNn G1KwZQsAATcAATCeW71loYBDZ8BvsVKEdp9TGVIFAAHGJaZeq46aWzZSBAABxiUaWUJcIWsGAAHG JWxRY2sBMC1Oy3oIAAHGJRhiZXUnYA5OaFFilydgBwABxiUBTxpOGGJlddKJpl4HAAHGJbpOm1JE jZBu0ommXgUAAcYlIo2hUtKJpl4HAAHGJdVsi18/ZVZ70ommXg4AASFqV1fbVhr/oYBDZ8BvsVKe W/WNylNIaItPx3snAAExAAEwXpcKTgJebFH4U6GAQ2fAb7FSGv8bUhpOi1ehgENnwG+xUgEw3nqJ TidgTIgaTqGAQ2fAb7FSATAgT99+TIgaTqGAQ2fAb7FSSXsTAAEyAAEw32IKTgJebFH4U6GAQ2fA b7FSGv/VbItfATAijaFSgYlCbAwAATMAATBBAKGACk4CXmxR+FOhgENnwG+xUgwAAQCVLlW+fPGC MgApWQBOHFmvdcJyrYvDfjwAARAw+Veti/Zl9JURMDIAMAAxADIAdF4yAAhnMgA1AC0AMgA2AApO d20BMDMACGcwADMALQAwADQAW09xXAEwMwAIZzEAMAAtADEAMQAcTp6DATAzAAhnMQA3AC0AMQA4 ABdTrE4BMDMACGcyADQALQAyADUA8W0zVyUAASAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg ACAAIAA1AAhnMQAyAC0AMQAzAH9e3l0BMDYACGczADAALQA3AAhnMQBbT3FcIwABEDD5V62L+Vth jBEwO2DPfgZ0ATAAlS5VO2DRdgEwOlPfV89+BnQBMACVLlXPfgZ0ATAaTqFS405oiACVLlX5V62L E05YVB4AARAw+VetizmNKHURMDIANAA3ADAAQ1EvALpOCP8FU+xiRI2ZZTmNATBIUxCZylMKTgtO SFM2g7lwSXsJ/zQAAQAwADAgACAAIAAgAEoAdQBkAGcAZQAI/8SL904J/wBOKk66TiwAAE4qTmxR +FMvZg1OL2YYT8B5LAANToGJC3fWTi9mDU4vZkgAYQByAHYAYQByAGQACP/IVFtPJ1lmWwn/L2YN Ti9mNAABUwB0AGEAbgBmAG8AcgBkAAj/r2VmV495J1lmWwn/DU6BiWoAdQBkAGcAZQAI/8SL904J /8yRYpcJZxpZEVwNVExyJ1lmW9VrGk4fdQz/DICBiWoAdQBkAGcAZQAI/8SL904J/9mPLl4bAAG6 TnJeO20vZg1OL2bRU691AE43aHJeDP8Ld9ZOz2spWQtO7XMvZg1OL2YRey93L3feVrZbAf8PAAEV IBUgFSAVIBUgFSAgAD+WzJH0XfRdbFH4U2yakU4ZAAExAC4AIAA6TsBOSE74dgxUhHanTsFUDP8a TqFSuk5YVIR2Gk7pfvh27l3gUUFTDVAf/x8AATIALgAgADpOwE5ITgCVLlW6TlhUz344XhFUbFH4 UzN194s/ZVZ7L2UBYwz/Rk8aTul+dFOIXw1OBnTzYB//FwABMwAuACAAOk7ATkhODU4MVIR2ols3 Ygz/AJUuVbpOWFT0i82LQ1PHewBOi18f/xkAATQALgAgADpOwE5ITgCVLlW6TlhUe48TZtl+ols3 Yq5O+lHqgfFdhHYcIJVeTHIdIB//HQABNQAuACAA/ZDld1OQgYkaWSxUEVz0iwz/Rk86TsBOSE5H kDBSols3Yg5U3o/0i/2QDU4aT/SLYlQf/xcAATYALgAgADpOwE5ITgCVLlW6TlhUO2AvZu+L44mi WzdigYloiL6PhHYPYR1gH/8dAAE3AC4AIAA6TsBOSE4AlS5Vuk5YVDtgL2blTlNi5V0FgIR2w18B YAz/DU4/YQ9h9GYaWYR2lWJlUR//HwABOAAuACAAOk7ATkhOAJUuVbpOWFSlYgCVhHY5jSh1io1l Z4qN2JoM/0ZPGk7pfnRTio1lZ4qNDU4GdPNgH/8XAAEgACAAIAAvZuBWOk5gT6FsCWfCU6BSAJUu Vb588YIyAClZAE4cWa91wnKti8N+BwABEDD+iwt67nYHaBEwADAaAAExAC4AIAAyAClZMQAcWYVR jFsQYjMANgAqTqiLuouYmAz/MQA3ACpOSGiLTwZSkGeYmBv/GQABMgAuACAABlLEfqiLuosM/62L w346TjtODP+STqhSD19ZZWZbDP8fd55bSGiLTwZSkGcUAAEzAC4AIADiZQlnomJUewz/yFMJZ6mP uosM/9iPCWewczpXFG/Dfhv/DwABNAAuACAABlwAlS5VoXsGdI2HZVH5V62LsHM6Vxr/FwABIAAg ACAADU7FTnNR6GwqTrpOZltgTmiIsHMM/wyAFE7NkcaJ4lYflghUXE8b/xUAASAAIAAgAA1OxU4D gDhoKk66TpdfBlIM/wyAFE4DgDho4lYflpdfBlIb/xwAASAAIAAgAA1OxU4DgDhoZltYVIR2Zltg ThBi6X4M/wyAFE4DgDhoZltYVGZbYE6EdsJTDk6mXhv/CgABEDD8WwhegHvLThEwWwCLc4qNXQAQ AAEAMAAwLU79VgCVLlW+fPGCr3XCcq2Lw34bUstZuk4b/xMAAQAwADAAlS5V4lYflqF7BnSoVOKL CF4BMACVLlX5V62LsosIXhv/EwABADAAMP5m+07vU+NT71NQTgj/LU79Vgn/bFH4UxpOoVLPfgZ0 G/8WAAEAMAAwP5bMkfRd9F0I/y1O/VYJ/1F/3H6AYi9nCWdQlmxR+FMaTqFSz34GdBsAAQAwADAF bk5TJ1lmWy4ALU5xXCdZZlsuAFdTrE4nWWZbRQBNAEIAQQB5coCQ+Veti7KLCF4b/y0AAQAwADAy ADAAMAAwAHRe84HKTgBO9HbOTotOAJUuVQ5OAJUuVbpOWFTAb7FSDk6ti8N+5V1cTwz//mb7Tu9T 41PvU1BOhHYaTqFSz34GdAz/aFEDdOV3DVQBTy0AARpOP5bMkfRd9F1sUfhThHYaTqFSz34GdAz/ /mbPawhnr3XCcgpO6JXcYr+LMQAwADAAtlvlTgpOhHaiWzdiLABKU5tRi04WU4R2AJUuVUyAGk4f da9tDP/YmiwAATpfpl6EduVdXE+LU5tSLABoUWKX+3zffoR211Oti89+hlMM/+95L32GTjBOzFuE dqJbN2I2ZcaWATAAlS5VCIwkUgEwols3Yt+N248BMKJbN2INZ6FSATAVAAHqgRFiwG+xUoR2z36M mgz/KFdsUfhT/ma3gxwgjWAGXG9nHSCcaTx3AjAFAAE7TrKL/osLehr/HQABCjAAlS5Vvnzxgq91 wnKti8N+JYQLMCAAIAAgACAAIAAgACAACjAAlS5VO06he8Vd8Fyti8N+CzAgABkAAQowNXXdiwCV LlW+fPGC0GNHU62Lw34LMCAAIAAgACAAIAAKMJdeYpcAlS5VgGLnXQswIAABCjA8eepODk5MgBpO IH17UQswIAAgACAAIAAgACAAIAAgACAAIAAgAAowAJUuVS1OhHYDgDhoDk7YmotTv34LMAcAAQow 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 LgAgAEhR0VMAig5ODlTRUwCKDP8BjPRmCWcYT79SH/8aAAE3AC4AIACiWzdiSlTJi2BPAE4nWQZY 3nqJTvlbS2KEdhhPv1IM/2BPGk+CWVVPBFkGdB//DQABQwABMPlbAYz0ix//ols3YuBWIH2EdnFf zVQSAAHbVgEwgllVT76LoYsAlS5VDU4MVDaWtWuEdtBj7pWFUblbH/8TAAEsewBOATA6TsBOSE6B iRwg7pUdIB//Ok7ATkhOgYlmW2BO0GPulREAASAAe2uGTv2QgYnulQz/gVvvU+6Ve2sM/19ODU6L YXtrIQAPAAEgANBj+lGEdu6VmJgATppbL2bQY01Svouhi31ZhHYPAAEgAKJbN2KEdt5WVHsATppb L2bqgfFd71OnYzZShHYQAAEse4xOATAOYEhOHCDulR0gH//QY+6VCWfqVJtOuWXVbAkAASAAOF4o dYR2MwDNedBj7pXVbA0AASAA0GPulfZlAJeBiehsD2GEdjYAKk6fUxlSEgABLHsJTgEw+VsBjBwg 7pUdIB//DU4MVKJbN2KEdtBj7pW5ZQ9fCwABMQABMKJbN2KHZRZTNGxzXoR2cV/NVAsAATIAATCi Wzdin3Hldwt6pl6EdnFfzVQOAAEzAAEwols3YvZl9JUOTnRRo42EdnFfzVTgViB9DAABNAABMACV LlUtTg1ODFQ2lrVrhHZxX81UCQABLHvbVgEwHCDulR0gwE5ITh//KwABhHbBVExyHSCEdjhow18N Z6FSBnT1Xwz/gYlCbOVOAGcTThpOJ2CEdg1noVIflg1PDP/KU/ZljFRoUbllTU8wV3NR6GyiWzdi hHbPawBOKk4NZ6FSAJcrAAFCbAz/dl4akMeP0GObT39e22wBMGhRYpeMVOtfd2OEdg1noVIM/39P ols3YlNPjJowUuBlBFkNTihXhHbhbg9hjFTvU+FPVo2EdjSNw18fYddTAjBHUCwAAYJZ6oHxXQln vnyZWYR2GE8ojaJbN2INZ6FS4lYflgEwDU5GT+9T5U70iw1nAYCiWzdiLADYj+9T5U6MVLBlols3 Yvpey3qwZYR2b4J9WQhUXE9zUft8AjAJAAHkTqJbN2Lhbg9hpl7QY0dTAjAsAAEAMCAAols3YoFn S07FYOp+FlMM/0VlD2ERY1RSEWLsToR2p07BVAz/B2MjjRFi7E6Edg1noVIsANGPTk7gZQZ01lP5 lQH/1k7sToR2HCANTuFuD2EdINRrLAABwE5ITv2QzZGBiQz/dFM7YC9mKFcRYuxOhHYPYZllS04W WQH/ols3Yg1noVLyXRBiOk4BTxpOUVggkAFj7X7eeolOGE+/UoR2OGjDX5NiS2Ib/yAA5WIJZywA AQFj7X7eeolOGE+/UoR2AU8aToR2WFTlXV9O/YDOThhiZXVCXGKX5U7xbYOQhHaiWzdiAJdCbEhR wYn9gJtSDICBXw1nols3YgEwslDGiaR/xJYb/yAAU2IsAAEgkABOQW2EdqJbN2INZ6FS/YCbUvJd EGI6TgFPGk7eeolOhHawZSZxuXA7AAyAols3YoR2DU7hbgEwsWIoYAEwlWLJiy9mAU8aTg5Ools3 YqVj5omEdjhoLAABw1+vc4KCDP/0Zi9mAU8aTv2AJlQakMePols3Yg1noVI0bHNe0GNHU3CNEVSJ j0xxhHYGUjRsrVwb/z8Ac1HobPlbjk6iWzdiDU7hbgEwsWIoYAEwlWLJixMAAYR2BFkGdC9m0GNH UwFPGk50ZVNPDWehUjRsc16EdnNRLpU/AAIwBgABEDD+iwt67naEdhEwKwABCWeEdgFPGk4vZqmL olu6TuFuD2EM/wlnhHYBTxpOL2api6Jbuk4fYahSDP8MgAlnhHYBTxpOL2api6Jbuk7iZeFuD2HI Ux9hqFICMBqQx4/+iwt6ZlsQAAFgTgz/jGPhY4JZVU+pi6JbN2LiZeFuD2HIUx9hqFIf/w8AATEA ATCFjYqNols3Yh9nG2eEdqJbN2INZ6FSG/8gABAAATIAATCGTuOJGE8ojaJbN2INZ6FShHbEi/dO B2MHaBv/EAABMwABMIZO44miWzdiQGKkizpOzZGBiYR2L2bATkhOG/8aAAE0AAEwjGPhYyIAols3 Yg1noVKqX69zIgAgAIR2gmn1Xwz/dl4HY/2AKHVLTo5Onlv1jRv/DwABNQABMIxj4WOCWVVP0GNH U6JbN2INZ6FSgGLnXRv/GQABNgABMP2AH1nld1OQgllVT+tfH5DjibNRols3YrFiKGAEWQZ0gGLn XYxUuWXVbBv/IAAsAAE3AAEwhFWOTs5Ox48xWS1OPVzrX2JgDVl2Xjtg035ZZa2LAjDQY9ialF7Y UwRZBnSVYsmL7pWYmIR2/YCbUgz/dl4fUDpnimJcbyhXhHaiWzdisWIoYGyPCQABEGJsUfhT9IHc gIR2OmcaTwIwCgABEDD8WwhegHvLThEwWwBmZXNeXQAXAAEAMAAw2HlmTk9TGk+WmS1efpjulcpT AGfXU2ZbWFScVTFyhHbYmqd++VetiwheGwABADAAMMxb61i3XhwgGpAodaF7BnT+iwt6HSAcILpO m1JEjZBu+3wXUv6LC3odIHlyWICyiwheBgABz36GUw5Ozpg8aBr/LQABOAB0XhNOTIBZZQheATAy AHReqFTii36Y7pUBMDEAMAB0XgFPGk5MiD9l2HlmTqF7BnTPfoyaDP+GU89+GlkqTkyIGk4CMDlo bmMaWXRehHaIY/6Lz36Mmgz/KwABGpDHj/lbAU8aTkyIP2XKU6F7BnS6TlhUhHYNTq1l+VetiwEw nlv1jQEwHWADgAz/JFx2US9mDk5mW1hUhHaSTqhSDP8oV6JjIn0tTg1OrWWMW4RVjFQrAAE5ZduP DP8QkGVrYl8QYv6LAlgKTgBnOFQVX9dTrYu6TlhUhHYvZnZReFGLV0hoi08GUpBnATCSTqhSFHio ix9hn2ABML58n487YNN+R1NOUwEwnluhUisAAc1kXE/DfmBO+HbTfghUhHb5V62LYl8PXwz/f0+X XwlnAE6aW6F7BnSeW/WNz36MmoR2ZltYVKdOH3VBjDZxAF8XZwEwM4DudgBOsGWEdh9hyYkCMPlX GQABrYvOmDxo8W1lUUVt+lEBMGFnBnQFbnBmATD+iwJYFGwbbHuPfmcM/55bGGInYDpfAjArAAEA MAAwZmVzXgGACF4vZgBOTU/xbTNXEWwBT4R2GE/AediaQlyhewZ0BYAM/yhXAU8aTtdTJ1mvc4NY cV/NVAz/uIsaWQFPGk5HkDBScVM6Zwz/ZmVzXisAAQGACF40TnFTiGN9VAFPGk7YmqF7DP8oVwFP Gk5EjdGR7Xc6fwz/Al46V/1OnZjPURFchHbFYLVRC04M/yh1B1IIVAFPGk6eW0WWhHahewZ0uWUP X4xUKwAB0XlmW4R2oXsGdLll1WwM/y5eqVKGThpZtlsRbAFPpl7Hj76Wc1EM/zF1jk5mZXNeAYAI Xglng486X4R2AU8aTs1kXE+eW/WN/YCbUoxUg499WYR2BnQlAAG6i59SlV4M//6LC3pIaItPH3ee WwEwnJw7bRROCWeeWyh1J2AM//RmoFI0jdGPAU8aTp5bRZYM/2KNl19mW1hU7E6EdqSL71MCMAUA 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 joR2KI3PkQj/cQB1AGEAbABpAHQAeQAJ/wwAASAAMwABMPdOPGgI/3AAcgBpAGMAZQAJ/xMAAYxO ATCiWzdi4W4PYaZe0GNHUw5Ools3Yg1noVKEdsZbB1JzUft8CQABIAAxAAEwols3Yj1jWXVWe2V1 DwABIAAyAAEw+l7LeqJbN2LgX9qLpl6Edjhow1+9fiZeDAABIAAzAAEw4F/ai6JbN2IwUqJbN2Lg X9qLJAABIAAgAMclIACBiThUFV8ATipOolu6Tgz/QGKxgjmNhHYQYixnL2aBidRrWXVPTwBOKk6i W7pOhHYQYixnNQAUIBQgNwANUBv/JwABIAAgAMclIACBiYhtZJYATipOH41il3BTYYwM/wCXgYkx ADIAKk5ja2KXcFNhjE1i/YAlX2WIG/8UIBQgD1xOZwt3+HZ9WQ5OT1f4dgIwKQABIAAgAMclIAAB TxpOOk5liFFlDWehUsFUKI0ga3NPhHaWmSFriG05jQWAhHZwU2GMDP+AX4BfgYkaWbGCMgA1ACUA 84E1ADAAJQCEdhBiLGcCMBcAASAAIADHJSAAAE5+dk1P4W4PYYR2olu6Tu9TTYgfdfpRMQA1AE1P sGWiW7pOG/8jAAEgACAAxyUgAM9rAE5NT7FiKGCEdqJbuk7MgA5UDP92UZ5b2I8JZzIAMAAqTqJb uk4NTuFuD2EI/0pUyYt2UdZOuk4J/xv/LQABIAAgAMclIADQY9iaolu6ToR24F/ai6ZeKVKmbe9T nlh/lTUA84ExADcADVAb/39Polu6ToR24F/ai6Ze0GPYmjUAJQAM/wFPGk6Edp5Yf5UpUqZt71O+ jzBSDQABIAAgACAAIAAgADIANQAlAPOBOAA1ACUAG/8MAAEgADQAATCiW7pO4F/ai6ZehHbNkYGJ J2ATAAEgACAAxyUgADkAMAAlAIR2olu6ThpPf5AAX+5dhHYNZ6FSbFH4UxMAASAAIADHJSAAOAAw ACUAhHaiW7pOGk9+Yg1noVJ9WYR2bFH4Uxv/FwABIAAgAMclIAAyADAAJQCEdqJbuk46TpdfMFJ9 WQ1noVIM/4FbP2EaWbGCsZQb/xkAASAAIADHJSAA3lY0WaJbGk86TmxR+FMmXmVnNQAwACUAFCAU IDgAMAAlAIR2KVKmbRv/LAABIAAgAEhoi08GUpBnJl7ZfoR2L1Q6eRQgFCCBWz9hAE66TmVnQ1Pe Vgz/DU4/YUNTuk5lZwBO3lYM/1pQfVkNZ6FSL2bdT8GLAU8aThBin1KEdth5wIsCMBAAASx721bo kAZSIACiWzdiDWehUrpOWFSEdv2Am1LQY0dTCgABAE4BMKJbN2IwUpVegYlwTsBOSE4IAAENZ6FS 405oiIR2/YCbUiAAGAABkiGgACAAQQAtAC0AIABBAHUAdABoAG8AcgBpAHQAeQAgAEEAYwB0AGkA bwBuACAAEQABkiGgACAARQAtAC0AIABFAGQAdQBjAGEAdABpAG8AbgAgAA0AAZIhoAAgAEgALQAt ACAASAB1AG0AbwByACAADgABkiGgACAATAAtAC0AIABMAGkAcwB0AGUAbgAgAA0AAZIhoAAgAE4A LQAtACAATgBlAGUAZABzACAADwABkiGgACAAUAAtAC0AIABQAGEAcwBzAGkAbwBuACAAJAABkiGg ACAAUwAtAC0AIABTAGUAcgB2AGkAYwBlACAAUwBtAGEAcgB0ACAAUwBtAGkAbABlACAABv8gAFMA cABlAGUAYwBoACAALAABFCAUIAZSq04a/6JbN2INZ6FS405oiIR2IH0ojS0ALQAtADMASAAxAEYA IAAI/0gAZQBhAGQAIABIAGUAYQByAHQAIABIAGEAbgBkACAARgBvAG8AdAAJ/xQAASx7lE7okAZS IAAgAJViyYsvZtGRFCAUIGNrbniki8aLols3YpViyYsBAAEAMAsAAQBOATCiWzdilWLJi6dOH3WE dp9T4FYLAAGMTgEwols3YpViyYunTh91hHbudoR2CwABCU4BMKJbN2KVYsmLp04fdYR2fVkEWQ0A AdtWATABTxpOQW0xWaJbN2KEdjtOgYmfU+BWDwABLHttUeiQBlIgACAABFkGdKJbN2KVYsmLhHa5 ZdVsCwABAE4BMARZBnSVYsmLhHb6VyxnuWXVbAsAAYxOATAEWQZ0R1OnfpViyYuEdoBi510LAAEJ TgEwBFkGdJF1vpaVYsmLhHaAYuddGQAB21YBMD1cAGcnWapSm1Kpi6JbN2Lhbg9hL2YEWQZ0ols3 YrFiKGD2ZYR273mBZwFgpl4SAAGUTgEwBFkGdKJbN2KVYsmLL2YoV/tbfmLMU2KNhHZzXmGIuXAa AAFtUQEwOV/eVg9fDWehUiVfZYiAYuddCP9CAG8AdQBuAGMAaQBuAGcAQgBhAGMAawAJ/xv/FQAB A04BMIxj4WMJZ0hlmmJwYcVg6n7YmqZewG+oUqJbN2KEdrll1Wwb/yAAFwABFCAUIEhoi08GUpBn Gv87YNN+Dk4Ub8N+BFkGdKJbN2KxYihghHZtUWVr3X7bYhUAARQgFCDSiXKCbmIUbxr/FG/DfqVj hV+VYsmLhHZDAEwARQBBAFIAgGLnXQ4AAWtRATAEWQZ0fpiiW5ViyYsOTrFiKGCEdrll1WwIAAFd TgEwzZEnWZViyYsEWQZ0CwABQVMBMA1O3lZ/kHZefmL6UZ9T4FYgAA8AATtg034a/wAwIABNUotO DU7YXwz/DlSLTktOCF4gABYAARQgFCDGiZGYBlKrTspTSGiLTwZSkGca/yAAfmcLToR2ols3YrFi KGAtTsNfGAABUwBUAFQAAU8aTvlXrYsIXvlXrYtoUWKX0GNHUwj/VABUAFQAnlsYYqBSOl9Icgn/ NQABEDD5V62L9mX0lREwMgAwADEAMgB0XjMACGc5AC0AMQAxAOVlCk53bQEwMwAIZzIAMwAtADIA NQDlZfFtM1cBMDQACGcxADMALQAxADUA5WUXU6xOATA0AAhnMgA3AC0AMgA5AOVlZmtJbCkAARAw +Veti/lbYYwRMAFPGk4TTi8AfFFMgPlXrYsIXgEwLU7YmkJcoXsGdAWAATDokOiVz34GdAEw+Vet i6F7BnQFgIxUGk6hUi8AgGIvZ6iacl4iAAEQMPlXrYs5jSh1ETA0ADIAMAAwAENRLwC6Ti8AIAAz AClZCP8rVIhj/osBMFllUGcBMEhTEJkBMDaDuXCMVA56OY0J/w8AAcJToFL5V62LCF75V62LDP+W mQmQUwBUAFQAAf8B/y4AAVMAVABUAC9m+VetiwheAl46V4R2gXo0eCdgEGKcZwz/L2YRYuxOhHYU eNFT4lYfln9e22yeWzBXA4DfW/1WhVEWWRdPGllDZwFawVRMcv6LC3oBMFQAVABUAC8ALgABUABU AFQASXsMVHt8sosIXvlXe1H+iwt6jFQYT8B5+VetiwheiGP+i7BzOlcM/8R+x36bUs+R249MiBR4 0VOMVBhPFlM5ZYRVDP/5WyBP335UAFQAVACFUblbDk4RAAFGaLZn249MiGhRYpdHU6d+OWXbj4R2 AGfIfhBinGcB/wH/LQABJ1lTkPOBgHsM/7ll1WzUa6pSm1L0Zs2RgYkM/wBO5mV+YvlbuWURVA5O uWXVbAZcd40wUttWJE7UYkNTpGWEdlxPKHUM/1MAVABUAGNrL2bZj4pi7WMAX/lXLQABrYteedh5 YpexfoR2KVJRUgz/84GAe3RTAGcJZ0hlAf8B/yhXCU4pWflXrYsIXv6LC3otTgz/UwBUAFQA/osL erKLCF4GXD5QxWAGUqtOEWLsThpZdF4UeHZ6HwABDk6eW/WNEGKcZwz/Jl6GmGBPq2JGg6ll2Gj0 doBf+Vetix93G4yEdr9rAlgB/yhX2Y/MkWBPBlz9gB9ZGv8bAAExAC4A1GvlToBf+05VT/ZlGVD9 kPRmgHIpUvRmvnzGUTBXxosrUgFPGk75V62LH3eeWwCXQmwhAAEyAC4AoJiGieVOgF/WYuVsJl40 bIR2+Veti76LoYsdYO+NATDrXx+QCWdIZfR2B2P5V62Lx3XTfg5O7pWYmDhow18gAAEzAC4Ask6r jh9h11NGVRpONGzGUYR2J1myfv6L9k4OTlAAUABUAChXYE9LYi1OAE5la2Vr2FM6TrBznlsB/wH/ LQABUwBUAFQA+Vetiwhe/osLeoZT9mVtUXReDP+aU+95hIXRUwIwRVHViIR2sHM6VxRvw346ZxpP DP+yiwhegHIpUgBOiJTBiUCIhHa5cMSLDP+BZ3dREWMYYoR2LQABEYGbUs6YtGYB//Jdl18wUoZO /VaFURdPGlnldw1UAU8aTgEwCk4CXmxR+FNDTvOBFk5MdTUAMAAwADpfhHZ/XttsjJrBiwz/ols3 YuFuD2GmXn+VH2fdTwFjMQABKFc5ADUAJQDlTgpODP/dfidZGllwZQFPGk7hbg9hpl7Ei/dOL2Yx ADAAMAAlAAH/Af9TAFQAVAAGXKmLYE8oV9mPCU4pWYVRDU6tZYF6NHiclo14OWXYU+qBEWIsABBi Ok4jAAH9gB9Ze49+ZxRvsosBMKdjOlfqgYJZATAJZ7JOjFSbUh9h02ebUnZe/YD5WwBnyH75V62L SGWcZx+NI42EdvlXrYsIXgH/DwABwlOgUseP/osLeoR2ZltYVA5OAU8aTkdXaIg6eRr/EgABMQAu AFMAVABUAP6LC3rUayBP335UAFQAVAD0ZndRnlsYYidgHQABMgAuAA5OAU8aToR2c1FUgKZeX070 Zid9xlsM//2AH1kHUgdSnlueW+OJs1EBTxpOWFsoV4R27pWYmC4AATMALgDeVjBSbFH4U2yaCk4x XO9T5U7Qjyh1MFKeW0WW5V1cTy1Ou1MM/wljZ3FTAFQAVAAHaMZRFHjRU/pRZWeEdv6LC3r0dqVj 44mzUQFPGk7ulZiYjFTQY0dTFQABWFTlXel+SGUM//Ftl1/CU6BSZltYVIxUbFH4U4aY/FuEdn1Z xIsB/wH/BgABEDD+iwt6Yl8PXxEwDgABxyW+fLKLBnS6ixr/Ck5HU/JUZlsdYPNgG/8gAA0AAccl SGiLT+OJkGca/95WUl/ulZiYLGcojRv/DQABxyXlXXdRFG/Dfhr/2I+fU+VdXE9zUS6VG/8OAAHH Jf2Am1JLbcSLGv9IZZxn0XlmW8BoOGgb/yAADgABxyUGUsR+3npbjRr/U0+MmuJWH5ZmW2BOIQAg AAcAARAwZltYVDZlynYRMAAwFwABxyV7j35njGPhY/lXrYsIXsVfB1mEdrBzOlcUb85+gGLnXYxU p2M6V/2Am1Ib/xoAAccl/YAfWexym1KMWxBiRlUaTjRsxlH+iwt6J1myfgEw/ov2Tg5OUABQAFQA hHYAX9FTG/8gAAHHJQBf0VOEdv6LC3r9gA5OAU8aTsVgtVEnfcZb034IVAz/dl79gJdfMFLCU6BS ZltYVIxUhpj8W4R2L2UBYxv/HwABxyUGXIVRuVu+i6GLDk4Ub85+l1/0ZqBSnltIZR91qFIM/wln SGV1cqhSz2tNT8JToFJmW1hUhHbDXyZfG/8bAAHHJUZkMYFQAFAAVAAOTj969k6Edl9nGn8M/zGB P3oOVM1O/YDwWMVgdl4Cg9uPTIiyi4hjG/8bAAHHJQ1OKHWNUcViw1/5V62Lx48Legz/n1NlZ/lX rYtIZZxn71OEmMGJX04JZ/2Am1K+i6GLG/8WAAHHJR9QqVLqgfFdhHb5V62LgGL9gLeDl19MgBpO H3WvbYR22JofkBBif5UCMAcAARAwAU8aTjZlynYRMAAwGQABxyVoUbllTU/QY0dTAU8aToVR6JD5 V62LCF4flg1PdGVTTzRsc14OTp5bGGL9gJtSG/8XAAHHJShX7Xf2ZfSVhVHrXx+QYl8QYgFPGk7s cglnhHb+iwt6k16MVCB9UGeTXhv/GgABxyXEiQODjFuEVQFPGk75V62LoXsGdFNP+3wM/wlnSGVZ dU9Pz36MmoxUGE/AebpOTWIb/x4AAccl+Veti4VRuVsNTo1RXFBZdY5OaIhilw5OYl8PXwz/9HYH Y+6VmJg4aMNfDk7QY0dT5V1cT+l+SGUb/xkAAcclCWdIZSl/7XdYVOVdEGJ/lWhUH2cM/+tfH5AN WTZSAU8aTr588YLQY0dTSGXKdhv/HQABxyX6Xst6aFFYVMJTDk4vZQFjhHZmW2BOi1cbbPRWjFQB TxpOh2UWUwz/U2IgkH+VUpcRaAFPGk4CMAYAARAwnlg8UA1noVIRMCMAAccl/otNUv6LDlQTThpO +3zffkttxIsa/+tfH5B+YjBS6oHxXYR2+Veti+13f2cM/wlnhHY+ZeJ3249MiK2Lw37QY0dTG/8o AAHHJbBzOleMY+FjGllXWQdSnlsJZ0hl0GNHU/lXrYuAYv2AhHblXXdRDP/+iw5U2I/vU01ROY0L Tn2Pd23PkSB9UGcBMIdlY2gOTv6L9k4b/yQAAccloFJlUVMAVABUAPlXrYsIXmZby1PiVgz/mlsf Z8R+x36kTkFtBlKrTgz/wYnBiw5O0GNHUyhXAU8aTi1O0I8odZ5bSGUb/yQAAcclRI2ZZTZlVV9l UVMAVABUALKLCF6TXgz/t4OXXydZz5H5V62LnlvNZDpnGk8M/6tO11N/lR9nAWPtfoR2DlTtfg1n oVIb/yoAAcclt4OXXyxn/osLesh+q45NUTmNDVmtizpnGk8M/yd9340AZ01Sv2wUeHZ6Dk6eW/WN EGKcZwz/8W1lUWZbYE5TAFQAVADPaypOsGVIcixnAf8B/wcAARAw+Veti6SLwYsRMAAwLQAB+Vet i6SLwYs5jSh1Gv8tTqd+NgAwADAAQ1EvALpOOwDYmqd+OAAwADAAQ1EvALpOCP8NTsJToFKki8GL A4DVi4R2ZltYVOBle5ikTrN+KQAJ/wAwADAAMAAwJgABwlOgUqSLwYsDgNWLhHZmW1hU71O3g5df MXX9VkWWTIAaTqSLwYsHaMZRVIAIVBpPgZjRU4R2AU8aTvlXrYsIXkyAGk5EjTxowYtmTgQAAQdZ 6Gw6AAAwKwABMQAO/+FRwlOgUqSLwYuEdmZbWFQM/yhX+Veti9N+X2fCU6BSA4DViwhUPGgFgDF1 /VZFlkyAGk6ki8GLB2jGUVSACFQaT4GY0VMBTxpO+VetiwhewYsrAAFmTjsA/VZFlv1WhVEtTvGC h2VIcsxTTIAaTkSNPGjBi2ZODP8I//1WRZb9VoVRpIvBiw//aFEDdBqQTIgP/8eWO06ki+9TD/+Y W7llUX8KTuVn4osb/x4AATIALgDhUcJToFKki8GLhHZmW1hUe5jQY5tPLGe6TquO/U7Biw1ZcFP2 TspTJ1kATvhbcGUBeGdxR3Ib/xgAATMADv/+iwt6035fZw5UMQA1ACpO5V1cT+VlhVEGXMGLZk7r XxKQxFvZfmZbWFQb/xEAATQADv/vUzN194stTv1W/Va2W7pOTWJRf2VRk14HWUhoAjALAAEQMPxb CF6Ae8tOETBbANZeTYgOZl0AMgABIAAgACAAIAD9VoVR+Vetiwhe+Vetiw5O+Veti6F7BnRDZwFa E062Wwz/jn/9VvlXrYsOTtFTVVxPUxpPKABBAFMAVABEACkA2JqnfhpPWFQsAFMAVABUABNOGk7u lZiY44mzUSsAAYBiL2cbUstZuk4CMJpOxH7UWXlyWICyiwheDP8KMMhUW09GVRpOxIu6iwswTlNX U/FPUE7okHlyWIB+mO6VDP8Fbk5TJ1lmWwEwLU5xXCdZZluiW6deLQABWWWIYwz/2JpRUjZyqn71 X4aZOF50Xn6Y7pUCMCAA1l4BgAhe/mYoV2ltGnBEja+LCP+ZmS9uE04aTpJaU0/RU0yIxpbiVgn/ ATCOf/1WVQBEAFMAxpbiVgj/LQABF1OOfwBnJ1mEdvaWLlUvZdhO036Xe8pTQwBSAE0A+3zffptP lF5GVQn/ATCKf85XGpAI//1WhVEAZydZhHakThqQL2XYTvt8336bT5ReRlUJ/wEwIADldw1ULAAB FllEjQ5OLU5EjaF7BnSoVOKLbFH4U0l7AU8aTvtOp07BVM9+BnQBMAJeOlfPfgZ0ATBJAFQAO2DR dgEwGGJldcSJElIfjSONuk4BMDtgz34GdEl7TIAM/ysAAeViCWd/XhSWxonOkYxUME7MW4R2AU8a Ts5OGk7MgG9mAjDWXgGACF4JZ0B3ME7MWwJeOlfPfoyajFSBZzpfRlUaTuaJyYkM/85Oi07HjxpZ dF6EdkZVKwABGk4IjCRS5V1cTwz/CIwkUvlbS2KJbcpTCk4CXmxR+FMBMEZVGk4wV6dOxpbiVgEw P2WcXjpnhGcBMHdtFlkKTgJebFH4U0l7GlnNedKJcoIM/xBin1IrAAG+jxBiJ1nPkYR2Al46VwhU XE95mO52AjDbj2VRoXsGdPlXrYsaTmtRdF5lZwz/AE70dihXjn9EjcpTLU5EjaF7BnSoVOKLbFH4 UztOoXv5V62LU0/7fCsAAcSJElIOTvpevosBMPlXrYsojc+RxIswTwEw/osLehR40VMBMLKLCF75 V3tRSXvlXVxPDP87Tvxbdl7CUw5Ohk4aWSpOd20WWf6LC3qEdixnH1cWU+VdPAAgICsAAVxPDP8o V55bKHWLV/6LC3oAX9FTjFT5V62LCF6ti8N+Ck7lYglnnVs1jYR2nlsYYs9+jJoM/3CNv4uGTuBz CU62W3Blfna2Wx91p06LVwFPGk52XgIwKwAB1l4BgAhexWR/lYiU+VuwczpXKk5IaMpT5WU4XuVd XE+eW6FS249MiAZSkGcOTgdj/FsM/9CPKHUaWc15+Veti7ll1WwM/+tfH5ADjKhSZltYVIR2wlMt AAEOTidgjFTveYFnJ2AM//lXrYuwczpX4W4PYaZeAE70dt1PAWMoVzkANQAlAOVOCk4CMGRrFlks ANZO2I/5WwFPGk6FUeiQ+Veti9Bj+lGGThwgc1NmW3NTKHUhAAFzU8GJSGUdIIR2KI3PkYGJQmwM /89rIWv5V62L/ZD9gFpQMFJmW1hU4W4PYQEwsIvGX/FtO1IBMFNfOlfBiUhlAf8DAAEAMCAAADAx AAEgACAAIAAgANZeAYAIXoR2wVRMcv6LC3oa/yAAUwBUAFQAAU8aTvlXrYsIXutfH5DQY0dTCP9U AFQAVACeWxhioFI6X+1zDP9IckNn/osLegz/NgApWduPNpb5V62LCf8BMC0AAUyAGk75V62LCF75 V62LUABUAFQAATD+iwt6AF/RUw5OvouhiwEwRlUaThRvOnkTThpO/YCbUutfH5CBejR4rYvDfgEw 2JpCXEWbm1IUb7KLDk5xX81Um1IBMC0AAfpXjk5TAFQAVACEdvlXrYvEiRJSvouhiwEwAU8aTvlX rYtTT/t8hHaEZ/peDk6hewZ0nluhUq2Lw34BMIVR6JC6Tk1i+Vd7UQ5O+Veti6F7BnQBMFNTio2h exoAAQZ0BYCEdm1ReZjuT7xwATAAlS5VvnzxgnlyrYslhAEwAWPtfsxTYo2EdgiMJFKAYuddAjAG AAEsewBOKVmFUblbGv8XAAEATgEw8FPOmPpXQHgUIBQgy3o7Us5O+Vuyi/BTX2dLYuBlVnswUi1O xIktTul3FQABxyWBejR4IE/ffh1g9H4a//lXrYsIXi9m71PlTjIAD1z2ZcN+EGKEdgH/FwABxyVT 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 XXdRGv8KMOtfH5A2UlxPRlUaTqd+K1JQAFAAVACEdhwgAE6MTglOHSALMAsAAXBn+lHtc8R+f5Wh ewZ0gGL9gNBjR1MrAAEQMPlXrYv2ZfSVETAyADAAMQAyAHReMgAIZzIANQAtADIANgDlZQpOd20B MDMACGcxADYALQAxADcA5WXPgt5dATAzAAhnMgA0AC0AMgA1AOVl8W0zVygAARAw+Veti/lbYYwR MAFPGk6CU3+VATA2UiCQGk4fdadOO2DRdgEwH3WnTs9+BnQBMGaP9JU7TvtOylMfdadONlIgkDtO oXvKUwBOv35yXuiQLQABEDD5V62LOY0odREw5f8xADkAOAAwAENRLwC6TiAACP/QY5tPsotJTgEw SFMQmQEw0VNoeQEwNoO5cEl7Cf8MVABOVVNNT2VnlE4BkABOATDgZXZR1k6YYmNiLQABIAAgACAA IAAcIPpXQHgNTmJyDP8wV6hScVxHZAIwHSDtc8R+L2YBTxpOhHbGft6ADP/tc8R+f5UYYpdlKFcB TxpOoXsGdIR2LHsATjWWv34M/y9mHCB1UTRZKwABBlw+XB0ghHbSiXKCDP/tc8R+f5VrUQ9c9mWE dhhil2UoV7BzOlcM/yx7AE4qTtFTsHPulZiYDP8sewBOKk7jibNR7pWYmAz/HCChe0yAHSB9hg9c DP8rAAEjjftODU4PXAIw4FYMgO1zxH5/laF7BnShewZ0IH0ojYR22JpOTwz/9HalY3FfzVQBTxpO oXsGdIR2KI3PkQz/p07BVCiNz5EBMA1noVIojc+RATCJWysAAWhRH3WnTg5OWFTlXetYFGwM//R2 pWNzUft8MFIBTxpOz34lhIR2EGIljQIwMXWOTu1zxH76Xr6LDk7tc8R+f5WEds2RgYn3TjxQDP8R YuxOOWhuY6hUJwAB4ovPfoyajFQBTxpOnltFlmKX+VuEdu6VmJioY/pRhk77fBdS7XPEfn+VhHb+ iwt6AjDlTqlSm1KOTu1zxH76Xr6LDk4BTxpO0VNVXAIwLQABIAAgACAAIADtc8R+L2YBTxpOLU4A Z/pXQlyEdsR+x34M/wFPGk6EdkBiCWcfdadO+06hUgEwDWehUuVdXE8BMKdOwVQojc+RATDPfk5t 0I9MiO52B2j9kIGJKwABz37Hj0JcQlwGUuOJAGcOVD2EnlswUu1zxH4CMOBWZGsM/+pTCWdAYgln 7XPEfv2Q/YD6UXKCMFeMWxBiLGftc8R+hHYEVHmY5V1cTwz/dl4UTu95gWcrAAEwVwxUBFREUR9f 7XPEfidZm1JPU1xPDP8BTxpOTWL9gABnDlSeW7BzGE8ojQEw2JqnTgEwTk8XgEtO7naEdgz/zk4M gB93Y2u+jzBSAU8aToR2BFR5mCsAAc9+JYTudgdoAjDtc8R+2Y8qTgFPGk7Gft6AhHYfdX1UKI3P kQz/L2YBTxpOjIBTTy9mJlRlULdehHYHaNdfAjDXT92L9Isa/2twZo/RjZdf618M/2hRKwABYJdm jzRZJl4CMO1zxH5/lS9m7XPEfoR2OGjDXwz/L2YcIPaW91OWmX+VHSACMO1zxH5/lf2Am1KEdjpf MV8BMCB9KI2EdtiaTk8M//R2pWNxX81UMFIVAAF0ZSpO7XPEfkNO84EBTxpOdGVTT4R2oXsGdDRs c16MVM9+Tm1IZcp2AjAGAAEQMP6LC3p5cnKCETAtAAEgACAAIAAxAA7/LGf+iwt6vouhi82RuXCB evpRDP9/kE1RMFIEWS9mzZG5cDFcoWwJZ82RuXCEdhwgaFFilw9f+Vetix0gAjAnWeiQ/U7tc8R+ f5UvZjF1WFQrAAHlXRZigGIvZ1hUS2ZHUwz/gF+AX1Nfhk7tc8R+f5V0Uw1O5XdTkOqB8V2BiVpQ wE5ITgj/q44oV3ZRTIAM/w1OC4x2UT9lCf8M/xZi2I8vZud+7X7dTysAAVl1WlBYVOVd9mWEduVd XE9gTu9gDP9/T+1zxH6hewZ0BFmOThwg4GU/ZZxeHSC2cgFgAjDgVmRrDP8sZ/6LC3oAX8tZhVG5 WzpO7XPEfn+VhHbSiXKCGQABpIvldx0gDP9/T+1zxH5/lR93Y2taUH1ZMXVYVOVdMFKhewZ0BYDS iXKChHZsj9hTAjAtAAEgACAAIAAyAA7/imKhewZ0BYAOTlhU5V06UwZShHYsewBOn1L9gC9mWWX8 WytSuk4M/+1zxH5/lYBfgF/qgfFdHCD9gHJeHSAM/wyAlV4LToR2WFTlXXRTHCArAAENTv2Acl4d IAz//Fv0gdmPAE5AXGKXhHY5aCxnn1PgVjpOL2btc8R+f5U6fxFcHCBZZcN+gGIvZx0gAjAATkFt hHawczpXZWfqgQBOQW2EdlhU5V0M/ysAAQBOQW2EdlhU5V1lZ+qB7XPEfn+VAE5BbYR2WWX8W7ll 1WwM/yRcdlEvZlhU5V1BbTFZh3PlZcp2Ck5HU4R2yk4pWQz/7XPEfn+VhHZZZfxbuWXVbC9mLAAB JlSXX1Nf+VsfdadOsHM6V4R2KI3PkQ5OSGWHc3FfzVTxbdyPAjDgVmRrDP8sZ/6LC3rNkblwhVG5 W0tOAE46Thwg7XPEfn+V5V1cT1ll/Fu5ZdVsHSAsABMAAX9P7XPEfn+VY2tueIxj4WNZZfxbWFTl XYR2uWXVbA5OgGLnXQIwLQABIAAgACAAMwAO/+1zxH5/lYR25V1cT82RuXA6TlpQfVnlZTheoXsG dAz/5WU4XqF7BnT7fM9rKVnNkQ1ZWlAATptOgHtVU4xUuVsTZoR2i07FYAIwRk8vZgz/LAABY2uC WQxUd20UXEMARQBPACBfXnRPZUBi9Isa/xwggHtVU4R2i07FYClZKVlaUH1ZMVwNToB7VVMM/7lb E2aEdotOxWApWSlZWlD5WzFcDU65WxNmHSACMC0AASAAIAAgACAALGf+iwt6vouhi9N+CFTlTgpO 4FEqTs2RgYmFUblbDP/xbWVRRW36UQEwnlsodbBllpgM/9N+CFTlXYJThHahewZ0sHO2cgz/d1EJ Z4hfOl+EdisAAYiU+VsnYA5OnlsodSdgAjDOThwgb4/2Th0goXsGdAZ09V8wUhwgbHj2Th0goXsG dOVdd1EBMKF7BnSAYuddCWdIZdN+CFRvj2x4fFG9ZQz/zk45aAj/KwABuk6EdsKJ9V8J/yxnCP+h ewZ0uWXVbAn/Ck7jibNR7XPEfn+VKFflXVxPLU5HkDBShHaRdb6WQmfHdQIwLGf+iwt6LU5/iW+D 034IVAz/4mVliBRsZVATAAGrjshTu2zFdTKWxXUM/y9mAE7YTgpOfVmEdqF7BnRvg7llAjAgAAsA ARAw/FsIXoB7y04RMFsAt176XnNeXQAIAAEgACAAIAAgAGZbhlMa/yAADwABIAAgACAAIABOUxxO pE4nWc9+oXvPfk5tZltmW+tYEAABIAAgACAAIAAtTv1W0XmAYidZZluhewZ05V0LemZb61gRAAEg ACAAIAAgAPBTfm4fdadOm1ItTsNf5V0aTuVdC3rTfhpODgABIAAgACAAIAAtTidroXsGdGZbYpYg AE0AQgBBAAkAASAAIAAgACAAfpjulQhez36GUxAAASAAIAAgACAAX2zDlH1sZo+bT5ReRlXEizBP 5V0LegheEAABIAAgACAAIABCWWuUxpbiVsFU3U87TqF7LAAgALKLCF4XAAEgACAAIAAgAH9wZFfo jf1WxpbiVlNP+3yki8GLLwCJW8SJE05YVCAAIACyiwheBAABADAAMAAwADAnAAEgACAAIAAgAPpR SHJpchr/Dk4Fbk5TJ1lmW9yPC3pZZbKALU7DXwhUXE+oY/pROABEACYAUQBDAEMAwVShewhXjFRQ AFAAQQBQAElR2HYsAAEgACAAIAAgAHdRCWcaWXRe5V1cT89+jJoM/0hRDlQoV+V3DVQWWUSNAU8a TvtOTIDBVCiNO06hewEwH3WnTjtOoXsBMHdRCWeIXzBOzFuEdgFPGk6hewZ0KgABVnsSUoxUsHM6 V6F7BnSeW6FSz36MmgIwME7MW4R2BZaGU4xUz36Mmgz/DU6tZYR2ZltgToxUEGJ/lQz/f0+3XgGA CF4NTsVOEGI6TgBOTU9wZ/pRKgABhHahewZ0BYAM/wyAFE4QYoZOAE4NVBhPwHmEdgFPGk6oVOKL CF4BMFeEDVSEdgFPoXt+mO6VDP/yXduPTIj5V62LjFSFj/xbx4+EdgFPGk5xUaGLLQABMgAwADAA Glm2WywA+Veti7pOIWu+jzUAB066TiFrAjC3XgGACF7FZH+VAU8aTrBzOlehewZ0DP/OTgFPGk4f dadOoXsGdDBSwVQojaF7BnQM/yAAR1d3UQlnKAAB7HIwUoR2wYnjiQEwnlv1jc9+jJqMVJ5bRZaU Xih1EGKcZwz//YCeW55bKFcoVzBXOk4BTxpO0GObTypOJ2AWU4R27pWYmOOJs1G5ZUhoAjAsAAEg ACAAIAAgALdeAYAIXjpOAU8aTqZeq46aWzZShHaFUa2L/osLegz//YAPkJBnsHM6V6F7BnQ4XsGJ xXXHdYxU+ldCXDtOoXs4Xq9yhHYZle+LDP/0Zi9mGQABAU8aTrBzOlehewZ0BYBueMt6sGXCifVf ATDjibNRWFsoV+6VmJiEdtiaSGUEWbllAjAtAAEgACAAIAAgAHdRCWc4AHResosIXs9+hlOEdrde AYAIXoR2iGP+ixr/zpg8aB91qFIBMH1e2J4M/7KL44nxbWVRRW36UQIwxWR/lY5OO238bAEwkk6o UgEwIAAqAAEUeKiLATAUb8N+ATAvVNFTATBTT4yaATAfYZ9gSXsWTkx1AGewZflXrYu5ZQ9fDP92 XilSKHUnWc+RhHZIaItPDP/TfghUAU8aTp5bRZbQj1xPz34qAAGMmgz/+Veti4VRuVueW6FSJ2AB MO9TzWRcTydggWc6Xwz/FE7QY5tPGlnNeZ5bKHWEduOJs1HulZiYS07lXXdRylOAYuddAjD5W8JT rYsFgHdRCWc8AB8gHAABgWcnWYR2OFQVX5tSATAfYdNnm1KMVA9h82ANTjBShHYOVO1+SGWcZwz/ 8W3XU2ZbWFQia86PAjAuAAEgACAAIAAgAA1noVLHj4R2AU8aThr/UpebXHdtFFwBMCAAfnYBWmRV UpEBMAlOH2Y1dVBbATBMAEcANXURgQEw3pgpUmZtATAcTp2CIABOU1V4NXURgQEwTlOHWywAATV1 EYEBMF9sV1MgkDmCglMBMIhsM5bemDpnNlIgkIJTATBOAEUAQwABMApOd21+ZwtOATDFlmyayFTz l81UATAgAFSA+l7ReYBiATAKTndtl2evgAEw5WUsAAHLeklRNXUBMDBOMHV9bGaPATAtTq+C/VZF lgEwy3qmkIJtmWUBMFkASwBLAAEwX2zDlH1sZo8BMBxOzpgdZ/RnATDwbNGRnVsBMMtTvo9JUTV1 DP8gAF9sLAABV1MgkDmCglNJewpOQ1O2WwFPGk5aUMePCjDBVCiNoXsGdA9hxovQY0dTCzCFUa2L /osLegz/8W3XUwFPGk59WcSLLACiWzdi4W4PYYdzOQA1ACUA5U4KTgwAASFqV1cAThr/0olygqSL 5XfHewj/Ck4J/wkAASAAIADtc8R+oXsGdIR2gmn1XwwAASAAIADtc8R+f5WEdjBXTU+MVH9PfVQg AAoAASAAIADtc8R+f5WEdndRU09MgCONCgABIAAgAO1zxH5/lYR2IH0ojYGJQmwQAAEgACAAzk5Y VOVdMFLtc8R+f5WhewZ00olygoR2bI/YUw4AASAAIADOToBiL2eLV7pOTWIwUqF7BnSLV7pOTWII AAEgACAAIACgJUhoi08GUqtODAABIWpXVwBODv/SiXKCpIvld8d7CP8tTgn/BwABIAAgAMqLrWVi X79SGv8ZAAEgACAAbniaW2yP2FOEdnt8i1cM/85ODIAGdOOJYE9AYmKXNE6EdhFjGGKMVDpnR5AC MBcAASAAIAAgADEALgDtc8R+f5WEdglOzXnDXwFgIAAgACAAIABIaItPNHiwURr/IAAQAAEgACAA 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 ATBShk5NUkBiKmcJZ4R25oJ8YAIwAl46V9hTFlMmXmVnhHYfdadOuWUPX9hTaZcBMM9+Tm0+eRpP 0VNVXPlbWFTlXSpOJ2CEdnFfzVQBMNVsNlINTq1lKwABZVBoUctuH3WEdqF7BnTbd/52ATD9VkWW 0ZGNh3FTOmf5W55bU0/Pfk5thHayUftRSXsaWbllYpeEdthTRWUM/39PIE/ffoR2s1KoUppbnZih ewZ0uWUOAAHVbGKXNE5Ad/iLGlmwZe6VmJiEdhFjGGICMCAALQABIAAgACAAIADZeihXAU8aToR2 0ommXgz/Ypf5W65fKVIOTg1OrWUAZUdThHazUqhSEGIsZwz/4GW6i8eR1lOhi/Zl5V1EjdiPL2ah i/ZO5V1EjQz/PE9OTv2QKwAByYmXX0FTBlIJZ8VfgYnbj0yIs1KoUppbnZihewZ0AjDvU4tODk4/ Yd2PhHYvZhr/iF8aWQFPGk46ToZOnluwc7NSqFKaW52Y2E76UYZO6F0nWYR2oXssAAEGdBBiLGcO VCwAdFO+luVONmUwUpReCWeEdkhlnGcCMAyAWFTlXWJUH/8gAChXs1KoUppbnZihewZ0hHa5ZdVs YpdNUgz/LHsATvZl9JV2Xl6Xu1OqUptSLAABMFeeW7BzFmKFjYqNLAAMgC9mqFINTqhSMVyKYhwg DU5sUXNeHSAJTipOV1sCYyhXNFa5jwIwIACCWZxnDU79gHtflV4wVwZ044mMVOOJs1FYVOVdPHct ThYAAYR2HCANTmxRc14dICwAAGcOVDFcGk/YUxBiYE+aW52Y1k50U6FsQGITjAIwLQABIAAgACAA IAAgT99+hHaaW52YoXsGdLll1WwGXFVPu1NVT85OH/8wUpVeDmA3aE1i/YB/T3ZRFXHRU/pRsGWE djttm1If/4JZVU9NYv2Af09YVOVdH2HJiWxRHAABc14/ALll1WzqUwlnAE4qTi0ALQD5WyBP336E drNSqFKaW52YoXsGdNuPTIj7fN9+MFf0ZrBlAf8wAAEgACAAIAAgABqQx48AX1Vc5V1cTxR4dnos AIhtZJbgZUhls1KoUiwATZZOT7pO5V0QYixnLAAgANBj2JqzUqhSSGWHcywA0GPYmrNSqFKaW52Y oXsGdDRsc14sAMNP248mAAGzUqhSmludmIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAA iQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACX AQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUB AACmAQAApwEAAKgBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAAsAEAALEBAACyAQAAswEA ALQBAAC1AQAAtgEAALcBAAC4AQAAuQEAALoBAAC7AQAAvAEAAL0BAAC+AQAAvwEAAMABAADBAQAA wgEAAMMBAADEAQAAxQEAAMYBAADHAQAAyAEAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQ AQAA0QEAANIBAADTAQAA1AEAANUBAADWAQAA1wEAANgBAADZAQAA2gEAANsBAADcAQAA3QEAAN4B AADfAQAA4AEAAOEBAADiAQAA4wEAAOQBAADlAQAA5gEAAOcBAADoAQAA6QEAAOoBAADrAQAA7AEA AO0BAADuAQAA7wEAAPABAADxAQAA8gEAAPMBAAD0AQAA9QEAAPcBAAD9////+AEAAPkBAAD6AQAA +wEAAPwBAAD9AQAA/gEAAP8BAAAAAgAAoXsGdIR2gGIvZxtSsGWMVKF7BnQbUrBlLAA6Th91p06h ewZ0+3zffspT+HZzUaF7BnTokOiV0GObT4BiL2cvZQFjLgALAAEQMPxbCF6Ae8tOETBbAEiW119O U10ANAABIAAgACAAIAAgACAAIAAgAOVdRlWhewZ0VXjrWCAA/VaFUTZSIJChewZ0E062WyAA/mYo V2hRA3QAZydZhHa/fghXNlIgkEZV3ICOf76PKABTAFUATQBJAEQAQQApAAEw5WUsZ2FTf4kwAAEn azV1UFsoAEMAQQBTAEkATwApAPtOTIC+jzEAMwB0Xgz/hlP7Th91p047TqF7ATDBVCiNO06hewz/ H3WnTs9+BnQBMDZSIJA7YM9+BnRJezsA/mYIXs5OD1zdXQBOX04uAAEI/+VlLGf9gIdzT1MaT6F7 BnQtTsNfE062Wwz/IADlZSxnVwBGACYASQBFABR4dnosewBOuk4M/+VlLGc2UiCQGk4UeHZ6hHb9 Vp1bp366TmlyCf8TTuiVFHhgTi4AAQdoxlHlXfZlDk6oUlxPFHh2ev5mSFEOVBpZIWuriD5tgF/l ZSxnjFSwZaBSYVfbj+5PylP5V62LCP8wTjB1SgBJAFQAH3WnTrllD18M//lbTgBQAFMACWf7fN9+ LwABylPxbWVRFHh2eoxUnlv1jQn/LAAgAEiWAYAIXiRcdlHFZH+VsHM6VwBOU08WU6F7BnQoAKGL ElIsABBiLGcsALN+H2csACiNz5EsAIBiL2cM/7pOWFQpAA7/O06yiy0AAf6LC3oJZzoACjCEZ1F7 2Jq+fKZeB2jGUeVd9mVTAFQAoXsGdPt8334LMAEwIAAKMBpZgGL9gFhU5V35V3tRU0/7fAswATAK MBpZeWIRXM+RH3WnTrllD1+eWysAAaFSCzABMAowrl8pUvZl406Edr58xn4WU7BzOlehewZ0CzAB MAowaFH9gO1zxH5/la2Lw34LMEl7DP87ToGJ+lFIcmlyCjDNUwF3LU79Vg9f5V2CU6F7DwABBnQL MAEwCjARYxhiOAAwAA5UoXsGdAswSXsCMCAALwABIAAgACAAIAAgACAAIABIlgGACF7+ZjpOVIDz YAEwfmcLTnp6A4wBMDxom1I1dWhWATAakCh1NXUUbAEwfoLYnh91ATBOUzpOgGIvZwEw3pgpUrKE O1OXdft8334BMC0AAQ2XPFzmlxRcATBBAEIAQgABMO9nPFxhU45//YC+jwEwZVmXZ/Rdr2UBMMxb 61gtAL1lUE4BMMtTvo9JUTV1ATAcTrllGpDhTwEw1YhDUTZSIJDGluJWATBOZywAASaVsIsBMPxm wHn3lmZlATDRedJSAW13UQEwZWtla9iaATB/iYlbaGfuaAEwmk4mT/1WRZbGluJWATAATn1sME4w dQEwHE7OmH1sZo8BMI95MHV9bGaPATArAAFfbMOUfWxmjwEw9l4LlR9PFk4akAEw5nlxXDhoNXUB MBtS9H4BMMWWbJrIVAEwJpVWbm6PzoABMH9eHE6ibr6PATBHlfBsqXN3UUl70Y9DU7Zbols3Yh4A AdBjm0/Hj/lXrYsWYqhU4osNZ6FSDP/zgcpOCWfRjwdO5U4KTrpOIWulY9dTdlETThpO/osLeq2L w34CMDAAASAAIAAgACAAIAAgACAAIABBU+BRdF7ldw1U5WUsZwFPGk6EdjZSIJChewZ0nlsYYs9+ jJosAL58n4+Edkhoi0+yi+OJylPxbTtShHbCiblwEJbKkSwAqYtIlgGACF6yiysAAQJYCk44bgNS CWeCWQIw4FZ2UYhj/ouFUblbhHaeWyh1J2DYmgz/q4hmW1hU7E6JijpOQGLBicePhHYAZ55bKFcB MABnB1IIVJ5bRZaEdvlXrYsIXgH/GgABLHsATrKLGv/5W7NSqFKaW52YoXsGdIR2+3zffqSL5Xc/ ACAAIAAgACAAIAAgACAAIAAgAA4AASAAIAAgACAAIAAgACAAwE5ITi9ms1KoUppbnZgSAAEgACAA IAAgACAAIAAgALNSqFKaW52YhHYkTs15O06BiXt8i1cUAAEgACAAIAAgACAAIAAgAJ5bsHOzUqhS mludmKF7BnSEdm1RKk7udoR2FgABIAAgACAAIAAgACAAIACzUqhSmludmKF7BnT7fN9+hHaUTidZ xH4QYlNP+3wSAAHulZiYGv8AZ/pXLGeEdrNSqFKaW52YuWXVbC9m6lQATs15H/8cAAEgACAAIAAg ACAAJ1l5Ys+RjFQPXHliz5GEdjZSIJABTxpOBlIrUgKQKHXqVM15mludmKF7BnQf/xAAASx7jE6y ixr/+VsHaMZR5V32ZRR4dnqEdvt8336ki+V3FgABIAAgACAAIAAgACAAIAAHaMZR5V32ZYR2mltJ Tg5O9mX0lYR2JE4nWXlyuXASAAEgACAAIAAgACAAIAAgAAdoxlHlXfZlbnjLeoR2bVEqTp9TGVIV AAEgACAAIAAgACAAIAAgAA1OXlyOTgdoxlHlXfZlA4P0VoR2lE4qTrllYpcSAAEgACAAIAAgACAA IAAgAAdoxlHlXfZlxH4QYoR2JE4qTuiQ/U4fAAEgACAAIAAgACAAIAAgAAdoxlHlXfZlvVvViIdz hHYJTipOxH4QYuiQ/U4gACAAIAAgACAAIAA8ABkgACAgICAMAAHulZiYGv/ATkhOL2YHaMZRFlNc TxpOH/8TAAEgACAAIAAgACAAwE5ITi9mB2jGURZTXE8aToR2CU4nWYVRtW0f/xAAASx7CU6yixr/ s1KoUppbnZihewZ0hHa5ZRFUDk65ZdVsFAABIAAgACAAIAAgACAAIACzUqhSmludmKF7BnQUeHZ6 hHYkTidZhpjfVxQAASAAIAAgACAAIAAgACAAs1KoUppbnZihewZ0uk5YVIR25V1cTyONTIAWAAEg ACAAIAAgACAAIAAgALNSqFKaW52YoXsGdLpOWFTFXwdZhHYDTidZYWf2ThMAASAAIAAgACAAIAAg ACAAvnzGfhZTmludmKF7BnSEdjheKHVVU01PEgABIAAgACAAIAAgACAAIACzUqhSmludmIR2CU7N eTZSmlu5ZdVsGwABIAAgACAAIAAgACAAIACzUqhSmludmKF7BnSEdu5PY2sWYthT9GZBbQt6KABz UwdoxlEWUykAEgABIAAgACAAIAAgACAAIACCWVVPbniaW52Ypl6EdthT9GZoVB9nFQAB7pWYmBr/ gllVT0tRDWezUqhSmludmCZe2X4BTxpOhHYfjWKXcV/NVB//FgABIAAgACAAIAAgAIJZVU+hi5d7 H3WnTr9+c15hiEhlh3MOTl9jhHZIZYdzH/8KAAAgICAgICAgICAgEwABLHvbVrKLGv+zUqhSmlud mKF7BnQEVHmYB2MHaA5OoYuXe7ll1WwQAAEgACAAIAAgACAAIAAgAMBOSE4vZt1PCWeaW52Y5V32 ZRMAASAAIAAgACAAIAAgACAAwE5ITi9mCWdIZeVd9mUOTuBlSGXlXfZlEwABIAAgACAAIAAgACAA IAAOYDdooYuXe/Zl9JWEdglnSGUpUih1h3MQAAEgACAAIAAgACAAIAAgAMBOSE4vZgdoxlGnTvpR 5V32ZREAASAAIAAgACAAIAAgACAADmA3aKGLl3uaW52YH3WnTkhlh3MSAAEgACAAIAAgACAAIAAg AA5gN2ihi5d75V2CU4R2/H4IVP2Ah3MTAAEgACAAIAAgACAAIAAgAIJZVU+hi5d75V2CU4R2/H4I VB91p04nYBUAASAAIAAgACAAIAAgACAAKHXATkhOXE86TrNSmludmIR2AGf6VyxnVVNNTxYAASAA IAAgACAAIAAgACAAgllVT254mluzUqhSmludmIR2BFTNeadOwVRVU/dOEQAB7pWYmBr/DmA3aAZS kGcfdadOEGIsZ05Pz1GEdrllEVQf/xQAASAAIAAgACAAIAAgAIJZVU9ueJpbH3WnTkhlh3PQY0dT hHa5ZRFUH/8NAAGzUdyALU5CXC0AemZnYVNiIJDYmkhl4lYfljwAASAAIAAgACAAIAAgACAAIAAg ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAtAC0A LQAtACAAzk4cIAhUPGgdIDBSHCAYT8B5HSAM/xBiOk4BgH9nhHbmXYCB81PCgSQAARAw+Veti/Zl 9JURMDIAMAAxADIAdF4zAAhnMgAtADMACk53bQEwMwAIZzgALQA5APFtM1cBMDMACGcyADIALQAy ADMAF1OsTiYAARAw+Veti/lbYYwRMAFPGk6FUeiQoXsGdAWAATAtTtiaQlyhewZ0BYABMEyA/YDo kOiVz34GdAEwxlEHWauI0GPUYoR2+ldCXM9+BnQeAAEQMPlXrYs5jSh1ETAyADgAMAAwAENRLwC6 Tgj/BVPsYkSNmWU5jQEwSFMQmcpTCk4LTkhTNoO5cEl7Cf8aAAEgACAAXE86TgBOKk4tTkJccl7o kAz/qGAvZiZUGk84XjheH2EwUveP0WAa/6AAoACgAKAAGQABIAAgADpOwE5IThFiz2spWf2Qd5ar jo5Od1FTT4tOoVIMgNlfL30NTipYH/+gAKAAoAAYAAEgACAAOk7ATkhOEWKEdgtOXlw7YC9mDU79 gNyA+07WToR25V1cTx//oACgAKAAoAAgAAEgACAAOk7ATkhOEWI7YC9mbmIUb4htMpZYVIR20oly ggz/MFIEWVFla3AM/wZSq45PTi9nH/+gAKAAoACgAKAAIQABIAAgADpOwE5IThFilWJlUYZOo5BI ThpZhHb2ZfSVDP/NTjZxvo8NTjBShJgfZ4R26X5IZe52B2gf/6AAoACgAKAALAABIAAgAMpOKVmE di1OQlxyXuiQDP9ja39i11NAd01SQGIqZwlnhHaLU5tSDP8KTqd+DF4bZ+qB8V1nYkyIMFJNTwz/ C06nfgxeG2fqgfFdB2MlY5dfU18M/ysAAQxUp34MXhtn6oHxXRpZGllNkQhUAjAATtBjMFKwc7Zy DP+IXxpZuk79kBpPKHUcINlfATBxTgEwL30BMOZwHSBlZ2JfuVsCMLiLGlktTkJccl7okHZeKwAB DU4vZmZboXsGdPpRq44M/wyAL2bgVuVdXE/6UXKCDP8xdRpOoVKomnJe0GPUYjBSoXsGdJdcTU8K TmVnDP/gVmRrOF44Xr9srYjHj7tThHblXVxPjFQrAAFMiDpOIWoPXwIw+VuOTqF7BnQM/9ZO7E7P fjhenU9gl/aWY2WEds9+jJqMVB9hyYkM/3ZeoWwJZx93Y2tiXxBi+3zffoR2ATDReWZbhHYBMJ5b zWQnYC0AAYR2oXsGdIBi/YACMKAAoACgAKAALGeki8GL/osLetl++lEATipOLU5CXHJe6JChewZ0 5V1cT4R2aFFvZv5WDP8uXqlSLU5CXHJe6JBoUWKXBnTjiaF7BnSFUSAAAbVtDP8xdYVRDIAWWYR2 0GPYmuqB8V2EduV3xosOToBi/YAM/85ODIBoUWKX0GNHU+qB8V2EdqF7BnTpfkhlAjAsAAGSIaAA pIvldy1OQlyhewZ0BYCEdtKJcoKMVOqBEWKaW01PDP+GTuOJ6oERYhBif5WEdhSQhF8M//lXe1Fj a254hHbDXwFgDP9aUABOKk7HUsViI437Tgz/DQABIAAgACAAPFCXX+FPVo2EdqF7BnQFgBv/oAAh AAGSIaAAjGPhY+qBEWKhewZ0hHa5ZdVsDP9mW2BO9mX0laF7BnSEdrll1WwOTuVdd1EM/4lbkmN9 WeVlOF7lXVxPoAAhAAGSIaAAhk7jiVxPOk7PfgZ0uk6UXoxj4WOEdvpXLGe6TotO5XfGi4xUIo2h UuV3xosM/1pQfVn6V0B4oXsGdKAAoAAfAAGSIaAAZlsaT5ReKHXudgdoZWehewZ04lYflgz/dl4G XD9hb2ZsjxZTOk53UVNP5V1cT+52B2i7U2diTIigACcAAZIhoACMY+FjwG+xUgtOXlyEdgZ0uouM VLll1WwM/7lww3FYVOVdhHbtcMVgDP92Xi5eqVJYVOVdA4x0ZcVg6n4M/89Re4+LU5tSoACgAB8A AZIhoACMY+FjCWdIZQdj/FtYVOVdhHa5ZdVsDP/9gB9Z+VtYVOVdhHblXVxP249MiN+N24+MVAdj /FugAKAAKAABkiGgAGZbGk85aG5jWFTlXShXWlANTgxU5V1cT/ZlhHYNTgxU5V1cT7ZyAWCeW71l CWdIZYR2hpj8Wwz/zk4MgL6PEGLEfsd+6X5IZaAAoAAaAAGSIaAA+l7LeuJWH5bEiRlSDP92Xvlb T1C7eeJWH5budgdohHZMiDpO249MiKdjNlKgAKAAHgABkiGgAIxj4WOhewZ0gGL9gIR2OGjDXwz/ n2wakIBi/YAM/2ZbGk8OTgpO+FOfbBqQDP8OTgxUp36fbBqQCgABEDD8WwhegHvLThEwWwAlTg5m XQAwAAEgACAAIAAgACVOAYAIXtVrGk6OTk5TLU7ReYBiJ1lmWywADVnmZSdZZlvlXUZVoXsGdFV4 61gM//1WRZZMgBpOxIkSUgheCP9HAEMARABGAAn/DP8gANiap37DXwZ0qFQrAAHiiwheAjB3UQln QVN0XuVOCk4BTxpOhVGti4xUE04aTvlXrYvPfoyaDP8vZgFPGk5mW2BOUX9EjfFthHb5V62LCF4M /3+VH2c6ThpZKk4BTxpO0GObTwUAAQFPGk6FUa2LAjAvAAEgACAAIAAgAChXQVMaWXRehHblXVxP z36GUy1ODP8gACVODmYBgAheSFEOVDFcTICOTk5TOk6AYi9nCWdQlmxR+FMBMFUAVACvZb6Pt14a kK+LCWdQlmxR+FMBMGNrLQABJ1nGluJWATCZmS9uRgBBAEMAvouhi2xR+FMBMEl7J1mLVwFPGk4M /85Oi06nTsFUAF/RUwEwAJUuVQEwx5EtjQEwTIg/ZaF7BnQBMLpOm1JEjZBuoXsGdEl7LAAB5V1c Twz/hlP7TkyIP2XPfgZ0ATAwVzpTAJUuVTtOoXsBMLpOm1JEjZBu6JA7YNF2SXtMgKFSDP93UQdZ ME7MW4R2nlv1jc9+jJosAHZeKFfRj0FTdF5lZyIAAVpXAWMNTq1lOk4tTgEwJ1mLVwFPGk7QY5tP uk6bUkSNkG6hewZ0ATAAlS5VylOGmPxbm1JJe3t8+Veti8pTqFTiiwIwLAABJU4BgAhe5U4wTsxb hHaeW/WNz36MmjpO+ldAeAz/H1B0kgFPGk4OTipOuk4QYp9Sz36Mmgz/034IVPlbsHPjTgFPGk4O TqF7BnQsZyiNhHYdYAOALAC+iywAAaGLdl7FYvtOCjCGmPxbzFsJZ8BvxWCEdgBOv37iVh+WCzAB MAowRlWhUlVcOnkOTkhUsHOAYuddCzABMAow+Veti/lXrYsIXgswATAgAAowRlWhUodlZk4sAAGZ UVxPCzAKMPZl9JWhewZ0Dk4fdX1UhHZIZYdzCzABMAown2wakA5Ouk5FlnNR+3yEdnqCL2cLMAEw IAAKMKF7BnQFgIR2c1EulftOoVILMEl7Glnolf6LLAABC3qEdvlXrYsM/3ZR/osLerKLQmyFUblb hHb7fN9+J2ABMO9TzWRcTydgjFSeWxhiB2P8WydgDP8GdPVfDk65ZdVsdl7NkSwAc1HobPlXrYst TmZbWFSEdiwAAcJTDk4M/xqQx49IaItPBlKQZwEw0olygm5iFG8BMJ5b9Y3DfmBOSXuSTqhSD18B MC9U0VMPX1llZlsM//FtZVFFbfpRDP9mWwlnQGIodSwA8W3XU2ZbWFQYAAEia86PjFR9WcSLAjDl TgpO/osLeu9T5U46TqhgAU8aTs+Rq46aW1pQhVGtiwH/Af8zAAEgACAAIAAlTg5mc1nrWPlXrYvH j4R2AU8aTglnLU79VjV14U8BMC1O/Vb7eahSATAtTv1WVIAakAEwLU79VsGUGpABMFQAQwBMAAEw RABFAEwATwBJAFQAVABFACgAt1/kUikAqFQtAAHii8xb61i3XgEwf4nolVBbATAxctieH3VRf9x+ /YCQbgEwTlM6TgEwyWLVbPpXATBVAFQAr2W+j7deATAnWRBVSVFRf9x+bFH4UwEwvo+eW3pm/YAB MF55AVosAAFvgxpOATCOf/1WH3VpcpReKHUBMNGRcVxvj/ZOATB+ZwtObJq+jwEwh2UdYG+P9k4B MC1O83e5bAEwLU7zdxZTATAtTqdjxpbiVgEwEGLemMaW4lYBMH12LAABkU46ZzpXATBJUSdZ9pRM iAEw22JGVfaUTIgBMBFsH3X2lEyIATB/lc5X+lfRkQEwR1nBTpViRI0BMH+ViVuPeXlybJrqgb6P ATAcTs6YxpbiVgEwcJqPWywAAQyVepMBML585V3GluJWATCJW3djJk8BMFJgH3U1dVBbATDbVt1d f5V5hgEwV1O5ZTV1UX8BMP1Wtls1dVF/ATAtTp9TMFenTgEw8W3hTw1n0XmAYgEwGE8GAAF5cmxR +FNJe0l7AjARAAEATgEwoXsGdAWA+VvSiXKChHaki+V3s1GaW6F7BnRMiDpOEQABIAAgADEAATAR YuxOhHbiVh+WoXsGdGKXNE7qVJtOEWMYYhgAASAAIAAgACAAD1zEfqiLuosa/xFi7E5ilzROhHbi Vh+WoXsGdBFjGGIJZ+pUm04f/xYAASAAIAAgACAAYpf5WxFjGGIM/zll2FPCifVfDP+BejR4+lYJ Zx1g9H4hag9fEwABIAAgADIAATChewZ0cl7okChXAU8aTi1OhHawc7ZyL2bATkhOH/8QAAEgACAA IAAgAC9mwE5ITp9T4FYgkBBihk7Zj815sHO2cgsAASAAIAAgACAASFEpWVYAcwAuAA5UKVkWAAEg ACAAMwABMAFPGk6EdiKNoVIQYp9SDk5MgBpOz34GdLpOS070lYR2c1H7fBUAASAAIAAgACAAAU8a TtFTVVyEdjhow1/eeolOm1IxdcBOSE5lZ7NRmlsf/woAASAAIAAgACAAwE5ITi9mZ2JMiJtSGQAB IAAgACAAIAA4aMNf3nqJTptShHazUZpbJ2DgViB9FCAUIKF7BnQFgIR2oXsGdP2Am1IOAAEgACAA IAAgAGdiTIibUg5OTIAaThZThHZzUft8EQABIAAgACAAIABMgBpOFlOEdsR+x34PYUlODk4qTrpO D2FJThIAASAAIAAgACAATIAaTs9+BnS6TvlbxH7HfmdiTIibUoR2D2FJTg4AASAAIAA0AAEwhpj8 W5tSDk6hewZ0m1KEdnNR+3wKAAEgACAAIAAgAKF7BnQvZsBOSE4f/xEAASAAIAAgACAAoXsGdHJe 6JAoVwFPGk62Z4RnzJGEdk1Pbn8ZAAEgACAAIAAgAAt3BW7Efsd+LU4JTs150olygnNR+3wtTgz/ k2JPT82RuXDQY0dT6oERYhEAASAAIAAgACAAHWADgBr/LU79VmGMy2gtToR2oXsGdPJUZlsNAAGM TgEwoXsGdAWAlF7FYlNfhHZzUS6V+06hUg0AASAAIAAxAAEwoXsGdOJWH5aEdnNRLpX7TqFSCwAB IAAgACAAIAAGUsR+O22oUhr/UXtUWBAAASAAIAAyAAEw4lYflqF7BnQFgIR2CU4nWXNRLpX7TqFS EQABIAAgACAAIACKYuFj4lYflrllEVQUIBQgRwB1AGkAZABlABcAASAAIAAgACAA0GNHU+JWH5YQ YlhU3ID7Tgt6pl4UIBQgRQBuAGEAYgBsAGUAcgAXAAEgACAAIAAgAKdjNlLiVh+W6XmPXhQgFCBI AG8AdQBzAGUAawBlAGUAcABlAHIAEQABIAAgADMAATChewZ0BYDuT7xwhpj8W5tShHaMW3RlIWqL Vw0AASAAIAAgACAA+ldAeKF7BnQgfSiNhHYPYUlOEQABIAAgACAAIABHAHUAaQBkAGUAFCAUIOJW H5budgdooXsGdCEAASAAIAAgACAARQBuAGEAYgBsAGUAcgAUIBQg4lYflsBvsVKhewZ0ATDiVh+W B2P8W6F7BnQBMOJWH5ZDZ9hToXsGdBcAASAAIAAgACAASABvAHUAcwBlAGsAZQBlAHAAZQByABQg FCDiVh+Wp2M2UqF7BnQUAAEgACAAIAAgAJ5bsHOhewZ0BYBzUS6V+06hUoR2HCC6TixnHSD8WxFU DAABIAAgACAAIACTYk9PTIBNT+iNio0JY66UCgABCU4BMKF7BnQFgIR26oERYqF7BnQQAAEgACAA MQABMM9+BnS6ToR25WU4XuVdXE9IZf2AoXsGdBUAASAAIAAgACAAIAAqTrpO5V1cT7ZyAWCEds1T HWAa/wZSxH7GiZGYBlKQZxAAASAAIAAgACAAIADATkhOqYsRYuxOJ04xWYZOSGX9gB//EQABIAAg ACAAIAAgAEhoi08a//BW0WCEdqJbN2JzUft8z34GdAwAASAAIAAgACAAIADDfmBOGv8Ld/5W+3lN Tw8AASAAIAAgACAAIACCWVVP0GNHU+qBEWKhewZ0/YCbUhAAASAAIAAgACAAIACTYk9PzZG5cAz/ BlIFbnuPzZETfyVgEAABIAAgACAAIAAgANtWYYxQlrllPGgtToR2cGVuYwdjEVQYAAEgACAAIAAg ACAAimLlXVxPBlI6TiROe3wa/ztOqFInYPtOoVKMVKuIqFInYPtOoVIMAAEgACAAIAAgACAAzZGB ieVdXE+EdvdOPFANAAEgACAAIAAgACAAwE5ITi9mzZGBiYR25V1cTwwAASAAIAAgACAAIAD2ZfSV oXsGdIR2gGLnXRMAASAAIAAgACAAIADlZThe5V1cT6GLElKhewZ0hHZla6SajFTlXXdREQABIAAg ACAAIAAgAAZSxH5IaItPw35gThr/J1kYUoR25nB8YBQAASAAIAAgACAAIACpixFigllVT/SLHCAN Th0gFCAUINJi3X6EdnqCL2cYAAEgACAAIAAgACAACFRcT4lbkmP2ZfSV5V13URQgFCD2ZfSVoXsG dBlPNE8GUpBnaIgQAAEgACAAIAA7YNN+Gv/lZThe9mX0laF7BnRUAEkAUABTABoAATIAATAoV+Vl OF7lXVxPLU5zXmGIf5UfZ9FTVVyBiUJsDP/QY0dTKk66Th91fVSEdkhl/YAXAAEgACAAIAAgACAA 0GPYmn+VH2dIZf2AhHblXXdRFCAUICx7jE5hjFCWxH7HftVsCQABIAAgACAAIAAgAP6UpWN/T31U EgABIAAgACAAIAAgANiPn1O6Th91xV82cc9+hlOEdl1OKk7SiXKCDwABIAAgACAAIAAgAG54mlvu dgdoDP82UppbaFTudgdoDAABIAAgACAAIAAgABCQ5WUDjHRljFTEizBPEQABIAAgACAAKk66TsN+ YE4a//Zl9JWhewZ05V13UYR2f08odRQAATMAATBaUABOKk7HUsViI437TgEwqYu6TuFP+06EduJW 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 /4xUH2HJiQj/RgBlAGUAbABpAG4AZwAJ/xAAASAAIAAgACAAIAD8W/SB23f+drJRgXqEdqhjuos2 lq9oEgABIAAgACAAIAAgAD5QLFSEdg9hSU4oV45OBnTjiQyAXpckUq1lNwABIAAgACAAIAAgADKW YmvqgSBPD1/eVpReGv99WTpOuk4IXiAAQQBkAHYAaQBzAGUAATD9jzlodnqVXiAAUAByAG8AYgBl AAEw82BTXzZxM4AgAEkAbgB0AGUAcgBwAHIAZQB0AAEw9048UCRSrWUNAAAgICAgIEV2YWx1YXRl EQABIAAgADMAATAoddBj7pWAYi9nCWdIZdBjR1PqgRFiyYnfWw0AASAAIAAgACAAIADOTqhjuost Tt5Wr26LTp5bDQABIAAgACAAIAAgAM5OFG/Ofi1OfmIwUotOnlsMAAEgACAAIAAgACAAEGIxXPxb EVTQY+6V1WwMAAEgACAAIAAgACAA44mzUe6VmJjQY+6V1WwSAAEgACAAIAAgACAAgllVT+6V7pWY mA1OGk8VX3eNWFTlXTKWa1MMAAEgACAANAABMPlbBnQnYGiIvo+EdiluYE4PAAFdTgEw037tixr/ G1IgkNiaSGXiVh+WoXsGdEtO740UAAEgACAAMQABMOJWH5ZLbdWLGv8NTq1lzVMBd+qB8V2EdqF7 BnRLTu+NEwABIAAgADIAATDPaylZ249lawBOuXC5cAz/MVwvZhBin1KEdgBfy1kRAAEgACAAMwAB MEyIqFKhixJSGv/eVrtT5U4OVA5gSE5aUB//KwABADAAMNVrGk6OTo5//VbGW3+JOWjeXct6J1lm Wwz/VXjrWGZbTU8M/y9mOWVplwBfPmUOVOllH2eEdndtUl8+bbKLCF4CMP5mSFEOVPtOTICOTo5/ /VYtAAGoTg9sATDxgv1WVIAIVHyZcl4BMI5//VaOf16N44FJezUAMAAwACAAOl/ojf1WbFH4Uwz/ xWL7TmxR+FPQj1xPO2DRdspTdlHWTtiap36hewZ0TIChUgIwjE4sAAFBUxpZdF6Edp5bGGLPfoZT DP8TTn+Vjk7HkS2NDk6bT5Re/pShewZ0DP8vZv1WhVHHkS2NaXJBbYaY31ctThFcCWeEdsaWME7M W3dtFlnlXVxPz36MmgEwGwAB/VaFUUSN8W2hewZ0BZaGU8pT/VZFlkNnAVqki8GLjk4ATquOhHae WxhiPm35V62LsosIXgIwLgABADAAMCBfAYAIXi9m/VZFlttWJ1lMgBpOwYtmTohjQ2eyiwheGv+O f/1W6GyMUWlyQW0IXgj/QwBUAEwACf+ki8GLATBJAEwAVAD9VkWWaXJBbUyAGk5EjTxopIsvAAHB ix0gATBDAEkAUABTAP1WRZbobIxRx5EtjQ5Om0+UXs9+BnSki8GLATBJAFQAQwAgAP1WRZY4jRNm LU7DX4hjQ2fHkS2NDk6bT5Re/pShewZ0/VZFlkSNPGiki8GLBQABLU7DXwIwIAAgAC0AAQAwADAg XwGACF6IY/6LzFsJZ4hfOl+EdsBvxWAsACAAzpijjQEwfV7YniwAIACwczpXH2HTZ5tSOl8b/8eR KHWqX49eEG7bjwEw8W1lUUVt+lGEdlllZlu5ZSsAAQ9fATAwTsxbH3WoUoR2nlsYYkhoi08M/y5e qVJmW1hU02K9W8aJzpEM/9Bj2JodYPR+/YCbUgz/jGPhY/h2c1GEdrll1WyMVOVdd1Eb//6L9k6+ i6GLGgABm1JCbPFtpl4M/55bKHUBMEhoi08aWTpO5V13USdgSGiLTywACWeIXzpfhHaeW81kJ2AC MCAAAQAwIAAgAP6LC3qFUblb6I2mXidZLAA9XM+ROFTWUwRUKk5MiBpOhHa+fLl8DP93UQln2Jqm XoR2U20pfydgLgAUAAEsewBOsosa/1Nfyk5pckFt006oUKF7BnSEdhFjGGIvZsBOSE4f/yAAEQAB AYB/Z/lb006oUKF7BnSEdgBn+lcsZ4GJQmwvZsBOSE4f/woAAQGML2YRYuxOhHYYIKJbN2IZIB// EQABH3WnTqGLElIOTmlymWWnYzZSUABNAEMA2JqnfhR47k/tcyYAARAw+Veti/Zl9JURMDIAMAAx ADIAdF4yAAhnMgAxAC0AMgAyAApOd20BMDIACGcyADUALQAyADYA8W0zVwEwMwAIZzEALQAyAM+C 3l0qAAEQMPlXrYv5W2GMETAfdadOoYsSUuiQ6JUBMGlymWWhixJS6JDolQEwx5EtjeiQ6JUBMCAA H3WnTuiQ6JUBMACVLlXokOiVATBpckFtATAUeNFT6JAUAAEgACAAIAAgACAAIAAgACAAIAAgACAA IADolQEwUABJAEUAATBJAFQALwABIAAgACAAIAAfdadOoYsSUoxUaXKZZadjNlII/1AATQBDAAn/ 6JDolS9mAE4qTgFPGk4cIMNfD4EdIAz/IACMY+FjQHcBTxpOH3WnTspTaXKZZdCPXE+EdjtgA4ym XisAAYxUfVQJgQz/3355eyWE0I9EjdGRATBpckFtATDhT29gSXuoUgmBDP/0dqVjiW3KU3FfzVQf dadO6JABMB91p07lXQt66JABMMeRLY0BMCeN004BMMFUKwABp2PokAEwAF/RUw5Ovouhi+iQATC+ iwdZ5V0LegEwuk6bUkSNkG7KUyKNoVIQYixnhJiXe6djNlJJewz/dlE2UqZejFRBbQt6s1GaW2xR +FPIdilSEGIuAAEljS4A4FZka1AATQBDAOiQ6JWMVPh2c1GhewZ0QlzFX3uYRVEGUoZO44k6AGly mWWhixJSATD3iy2NATBpcpllA4ymXgEwaXKZZadjNlII/zZlATDRUwEwAJABMCsAAR9QATAHWZll SXsJ/wEwH3WnTqGLElIOTh91p07bj6Zep2M2Ugz/dl4ZjJ9x0I8oddmP6JWhewZ0gGIvZ2Vn44mz Ue6VmJgM/2ZbYE7JYqhSoYsSUvdOLQABPFBBbQj/VgBTAE0ACf/+Vgz/zk7JYqhSoYsSUvdOPFBB bQdSZVFWUpBn5V2CUzZSIJAQYixnjFQpf+13NlIgkGhUH2cgAAz/0GPYmmlyQW3Hjwt6ql+vc0hl JQABh3MI/5NeWFsBMESN0ZGEdmhUbI+Hcwn/ylOiWzdi4W4PYYdzG/86Tk2WTk8WYohtZJZpckFt x48Lei1OhHZel55YPFA7bahSLgAgAAExAAEw+l7LejZSmluMW4RVhHYfdadODk5pcqdj0I9cT1NP +3zg8NBjR1PGUfZlpE4njYxUTZZOT5NeWFsQYixnHwABMgABMISYS23KUzZSmlsIVAZ0hHbtdwEw LU4BMH+VH2cAlS5VoYsSUuDwvo8QYmxR+FNWe2V1oXsGdO52B2grAAEzAAEw+VvqgauOhHYfdadO /YCbUh+Nd4OEmEhR249MiOaLxn4GUpBndl76Xst6jFuEVadOwVRwZW5jOmc2Uk9TqVJsUfhT+l7L eqdOwVTlXQt6cGVuYyQAATQAATAfdadOTVIfZ1pQfVmMW3RlhHYfdadOkmMLeoxUaFQfdadOoYsS UuDw0GPYmgdZmWXGUW54h3MM/91PAWMfdadOephFdScAATUAATBNkQhUH3WnTqGLElJaUDBSb4J9 WWlymWVfYxeAp2M2UoxUB1mZZeDwjFuEVU2WTk9pcpllX2MXgDpnNlKMVFxQ5V2FX5ll5V32ZSQA ATYAATD5Wx91p07bj6ZeylNpcpll24+mXspT9mXfjduPjFSfbBqQT1MDjODwKX/tdx91p05oVB9n DP/QY9iaAU8aTt56iU6bUgYAARAw/osLes6YPGgRMDQAASAAIAAgACAAHCA2ADAALwA0ADAAHSD2 ZfSVn1MZUigAeFvhVDQAMAAlAAz/G4srXjYAMAAlACkAATAPXMR+qIu6iy8A0VNoiAEwoXsGdDV1 cV8GUqtOLwAUeKiLATBIaItPBlKQZwEwKwABxWBvZv9OH3cBMOqBJl4BTxpORI2ZZbBzOlfKi61l jFSeW1xP+VtWewEwOG4PYgZSq04BMGZbWFQOTmZbWFQBMLKLCF6STqhS+HaFjwyAEGIBMBFcsost AAEGdLqLGlmyi55b9Y3PfoyaLACBiUJsZltYVP6LAljTfghULGdsUfhTnltFlsVgtVHPkauOoota UNBj+lHulZiYCP/vUyhX/osCWFNirWWyiwheHWDvjQn/DP8sAAENTi9mr365fGtYLZ5McJOPDP9f Tg1OL2YUeHZ6olvCiUhoi08uAAyAL2api2ZbWFRTT4yaZ2JMiMePC3ogAAz/c1HobLBznluLTotP LgAgAGKX+VtilxFULAABAYAIXtBj+lFsUfhT7pWYmAz/AYAIXgCXgYnQYxBi44mzUe6VmJiqY71l LwC5ZUhoLgD3iwxUZltIUShXbFH4UwBfGk82ZcaW7pWYmC4AJl7ulZiYZWcM/wUAASZeuWVIaHCN LgALAAEQMPxbCF6Ae8tOETBbAPeWa1PtZV0AJQABIAAgACAAIAANTi9mTIAaTvlXrYsIXgz/DIAv ZihXTIBnYkyIoXsGdAWAKwDMWwlnnlv1jc9+jJr5V62LCF4rAGxR+FMfjSONuk4yAAEgACAAIAAg AJmZL24GdOVdJ1lmW00AQgBBACwAmZkvbh91p06bUsNP249AXHlypn6yiwheATAgAI5//VahewZ0 ZlsaTygAQQBNAEEAKQCIY0NnE04aTvlXrYsIXgEwBW5OUydZOwABZlsvABdTrE4nWWZbLwAKTndt pE4nWS8ALU5xXCdZZlsgAEUATQBCAEEA7XN5coCQnlsYYotXsosIXiwAMgAwADAANQAvADIAMAAw ADYALwAyADAAMAA3AC8AMgAwADAAOAAvADIAMAAwADkAdF6riPlXrYu6ix0AAVtXqGOJijpOHCBB UydZnlsYYj5t+VetiwheHSABMBNOGk7+iwt6souIYxNOtlsBMESN8W1+mO6VLgAmAAEgACAAIAAg AP1m+07QZydZi1flZS9uCFREjQFPGk5vUjtgz34GdAz/5WIJZ4xOQVN0XoR2H3WnTi8AaXKZZceR LY2hewZ0z36Mmi4AMwABIAAgACAAIACyi4hjz36Mml6XOF4wTsxbDP+yi4hjLwCFj/xbx481ADYA MwAyALZbLU4WWQFPGk4oAPOBMgAwADAAOQCVXikAATCNh8aWJ2uOfy4ALU4BMC9uATAgAPBTGlm2 WwFPLQABGk7PfoyaS06+fE5TLgAgACAAdl4xdRdTrE4nWWZb+lFIcgowgllVT1pQfVkfdadOLwBp cpllx5EtjaGLElKnYzZSCzD7fBdS4lP4ZoxUQmbjTklR74P6UUhyMwABSVGfeAz/eXIrUi9mMgAw ADAANQAvADIAMAAwADYALwAyADAAMAA3AHRe9JWFj/xbepi3X45/hHbGluJWLwAgAMxb61i3XptP lF7+lKF7BnR5mO52LACyi+OJ8W1lUUVt+lEWYkVtHgABZVHxbfpRDP8NTsVOSGiLTzBOzFsM/xRO 0GObTxpZzXmeWyh1hHbjibNR7pWYmEtO5V13UcpTgGLnXS4AJQABIAAgACAAIADzgcpOCWdtUQdO A07fTuVOCk66TiFrpWPXUxNOGk7+iwt6rYvDfgz/oVKeW1xPzpjxbddTglO2W31ZxIuCWW5vLgAS AAGCWVVPWlB9WR91p06hixJSLwBpcpllp2M2Up5bzWSAYtVs7XMYAAEsewBOpFs6ALeSLlUIihJS LwAfdSN1CIoSUi8AaXKZZQiKElJPUwOMpWPjU6F7BnQXAAExAC4AH3UjdQiKElLSiXKCjFSaW01P LQAtAC0AootVUztg/FsUbw//O2AHYyVjEQABH3WnTqGLElI2UqZejFRBbQt6s1GaW2xR+FPIdilS EGIljRcAATIALgC3ki5VCIoSUi8AH3UjdQiKElIvAGlymWUIihJStmeEZy8ATID9gAZS5V0fAAEt TnRRGpCviwCVLlWhixJSLwAfdadOoYsSUi8AaXKZZaGLElKlY+NTTID9gP5WLwBEjZBu/laeW4tP BlKQZxwAAY5/hHbGluJW3o/tftpuqFJoVKGLElIfjXeDBlKQZ4xUCU4pWR91p06hixJSDU79gNhT TID9gP5WGQABHE6eg/qL+leaTmxR+FO3ki5VCIoSUi8AH3UjdQiKElIvAGlymWUIihJSxH7HfrZn hGcsAAEfdSN1CIoSUi8AaXKZZadjNlKUTidZTID9gC0ALQAtAC0AIGuZZQZSkGffjduPD/8HWZll n1L9gC8ARlSZZYSYMpYEWQZ0LQAtAC0ALQAtAC0ALQAtACAAIAABMwAuAA5gN2j6Xst6LwCMW4RV oYsSUlNP+3wtAC0ALQAtAC0AAE6nfjtOH3WnTqGLElIvAIxOp34fdadOoYsSUhkAAVpQfVkfdadO oYsSUsVfe5h3UQdZlE4nWeFPb2BhZ/ZOylNdTrllYpcTThpOgGL9gC0AFQABAE6nfjtOH3WnTqGL ElI2UqKLjFRnYkyIQW0Lei0AIABBAFAAUwD7fN9+EAABjE6nfjtOH3WnTqGLElI2UqKLjFRnYkyI QW0Lei0ALQAYAAE0AC4AO04fdadOoYsSUv6UpWNTT/t8LQAtAC0ALQAHYyVjDk5PUwOM3U+clp9S /YATAAEAlS5VhJhLbQ5OH3WnTqGLElKEdlSIpWMOTnNeYYgfdadOoYsSUhcAAcZR9mUfdadOoYsS UlYAUwACXjpXGk6hUuiQVgBTAKJbN2IcIAlOYo0dIMSJGVIXAAEATn1sJ1kXTwGVmlsATmhUH3Wn TqGLElINTv2A2FOnYzZSQW0LeuZbi08GUpBnIwABCWdIZadjNlJmYlVTATAlYFVTATBliFVTLwCg UlVTlE7NeapjvWUoAAODi08pAC0ALQAtAC0ALQAtTnFc0GcJZ1CWbFH4UzAAATUALgAAlS5VhJhL bQ5OO04fdadOoYsSUgj/TQBQAFMACf8OTghnLwBoVB91p06hixJSLwBpcpllCIoSUgj/TQBSAFAA Cf/+lKVjQW0Lei0ALQAgAG8AcgBkAGUAcgAgAA8AAW0AYQBuAGEAZwBlAG0AZQBuAC8AQQBQAFMA +3zffhoAAbeSLlWEmEttCIoSUi8AH3WnTqGLElLYUxZTzVOImYxUhJhLbZNeWFunYzZST1MDjKF7 BnQXAAEATqd+O04fdadOoYsSUqdOm08AlXNeYYg2UqZeLQAKTndt0Gc7U5d1bFH4Uy0AIwABt5Iu VQiKElJBbQt6FSAVIACVLlWEmEttQW0Leg//AJUuVaGLElJBbQt6D/8HWSeNoYsSUkFtC3oP/x91 p06hixJSQW0LeioAATYALgA2UiCQGk4fdadOoYsSUqdjNlIJTs15IWoPXxUgFSCEmB9n2m6oUqGL ElL7fN9+D/+oY9uPD18oAHAAdQBzAGgAKQAfdadOp2M2Uvt8334P/w8AAcliqFIPXygAcAB1AGwA bAApAB91p06nYzZS+3zffikAATcALgANTgxUp07BVACVLlVWe2V1s1GaWw1ODFSUTidZCIoSUgj/ t5IuVQiKElIvAB91I3UIihJSLwBpcpllCIoSUi8Ax5EtjQiKElIvAJNeWFsDAAEIihJSCf8RAAHx bTNXTlM6Tr58jn+hixJSoXsGdEtijFGeW4tPBlKQZy0ADwAB0GdXhA1UAU9taadOwVRWe2V1S2KM UZ5bi08GUpBnKAABD1zTfjoADU4MVKdOwVSEdmlyQW1We2V1s1GaWw1ODFSUTidZCIoSUgj/t5Iu VQiKElIvAB91I3UIihJSLwBpcpllCIoSUi8Ax5EtjQiKElIGAAEvAJNeWFsIihJSCf8uAAEse4xO pFs6ALeSLlUIihJSLwAfdadOoYsSUqdjNlJBbQt6LQAtAC0AIABvAHIAZABlAHIAIABtAGEAbgBh AGcAZQBtAGUAbgB0AC0ACP8FU+xieZjudqGLElIJ/ywAATEALgC3ki5VhJhLbQiKElIvADtOH3Wn TqGLElII/00AUABTAAn/IAAOTghnLwBoVB91p06hixJSp2M2UkFtC3oDThSQhF8tAC0ALQCyiwhe LwBmW1hUuXAIAAHEi9BnbFH4U7BzOlfKi61lGAABGpDHjwJeOlcDjOVnLwDhT29gzVOImdBj2Jqi i1VThJhLbcZRbniHcwlOJ1laUNVsEwAB0GNHUxZ/NlK3ki5VhJhLbQiKElIWfzZSxlFueCdgbVEn WWVrpJoWAAFOU6ZtxpbiVk5Tdma3ki5VhJhLbQiKElIWfzZSbVEnWWVrpJrmW4tPBlKQZxkAAdpu qFK3ki5VhJhLbQiKElKuXwOMNlKmXhZTTZZOT4SYS22TXlhbEGIsZ59TBnQGUpBnKgABUpebXHdt FFywZadOwVR5mO52oYsSUjtgU0+5ZUhop2M2UkFtC3rmW4tPBlKQZy0ALQAgAG8AcgBkAGUAcgAg AG0AYQBuAGEAZwBlAG0AZQBuAHQAIwABz4LeXX+J6JVQWwhnLwBoVC8A5WV5mO52oYsSUvZl9JWC grlwT1MDjEFtC3rmW4tPBlKQZy0ALQAtACAATQBJAFMA+3zffhUAAc+C3l1/ieiVUFt5mO52oYsS UvZl9JWCgrlwA4A4aDZSpl7mW4tPBlKQZzAAAcxb61i3XsaW4lZFAFIAUAAUIFMAQQBQAC8AUgAz APt83347Th91p06hixJSQW0Lekhoi08GUpBnLQAtAC0AIABvAHIAZABlAHIAIABtAGEAbgBhAGcA ZQBtAGUAbgB0AB0AASdZ0ZF6egOMCP/lZUSNbFH4Uwn/CIoSUqdjNlJBbQt65luLTwZSkGctAC0A LQAtAE0ARQBTAPt8334eAAFSl5tcd20UXAhnLwBoVC8A5WV5mO52oYsSUk9TA4xBbQt65luLTwZS kGctAC0ALQAtAE0ARQBTAPt8334nAAHMW+tYt17GluJWCP/wU35uCf9sUfhTCGemXtpuqFKnTv2A H413gwZSkGcvACAACU4pWR91p06hixJSDU79gNhThHbabqhSp079gB+Nd4MGAAEGUpBn5luLTwZS kGcjAAHPgt5df4nolVBbH3WnTqGLElII/8liqFIJ/wlOKVkfdadOoYsSUg1O/YDYU4R22m6oUqdO /YAfjXeDBlKQZ+Zbi08GUpBnNwABMgAuAA+Qx4/GUfZlFlMfdadOOmc2UuOJs1Gii1VTkZhBfthT 9GYJTs15uWXVbC0ALQAgAFAAcgBvAGQAdQBjAHQAaQBvAG4AIABwAGwAYQBuACAAYwBoAGEAbgBn AGUAIABtAGEAbgBhAGcAZQAEAABtZW50LAABepi3X45/hHblZSh1xpbiVmZiVVMBMCVgVVMBMGWI VVM8AB8gAS8AoFJVUy8AH3UjdQiKElInfSVgp2M2UkFtC3rmW4tPBlKQZy0ALQAgAFAAcgBvAGQA dQBjAHQAGgAAaW9uIHBsYW4gY2hhbmdlIG1hbmFnZW1lbnQ3AAHemClSZm1mYlVTLwAlYFVTCIoS Uid9JWCnYzZSQW0Lekhoi08GUpBnLQAgAFAAcgBvAGQAdQBjAHQAaQBvAG4AIABwAGwAYQBuACAA YwBoAGEAbgBnAGUAIABtAGEAbgBhAGcAZQBtAGUAbgB0ABQAAd6YKVJmbWhUIFI5ZR91p06hixJS p2M2UvpXLGdBbQt6SGiLTwZSq040AAEsewlOpFs6AABOp347Th91p06hixJSLwCMTqd+H3WnTqGL ElLbj6Zep2M2Ui0ALQAtAC0AIABvAHIAZABlAHIAIABkAGUAbABpAHYAZQByAHkAIABtAGEAbgBh AGcAZQBtAGUAbgB0ACEAATEALgApf+13p07BVGhUH2dBbQt6LQAtACAAbABlAGEAZAAgAHQAaQBt AGUAIAByAGUAZAB1AGMAdABpAG8AbgAgABIAAX+J6JVQW6dOwVRoVB9nKX/td0FtC3r3TjxQQW1I aItPBlKrThoAAdBnbFH4Uyl/7XenTsFUaFQfZzV1EYH7fN9+CP8odctTCf9BbQt6O05MdWKXnluL TwZSkGcWAAEyAC4ACGcvAGhUH3WnTqGLElKnTv2A3o/tftpuqFIfjXeDBlKQZzZSpl4WUxQAAS1O /VbQZ1eEDVRsUfhTCGemXjtOkmOnTqGLElI2UppbQVMJTp1PbmMUAAEtTv1W0GdXhA1UbFH4UwlO KVkfdadOoYsSUp1PbmM2UppbXU6dT25jFQABMwAuAGhUH3WnTqGLElKBiblwATCFUblbylMWfzZS FG/Dfi0ALQAtAC0AKwABCGcvAGhUH3WnTqGLElKSYwt6aIg2UppbDk5nYkyIzZG5cBRvw34tAC0A Ck53bdBnbFH4U5ROIF+ii1VTCGcvAGhUH3WnTqGLElKSYwt6aIg2UppbKk4DAAFIaBRvw34cAAE0 AC4AIAAGUpBnp079gB+Nd4MDToGJIH25ZWKXLQAtAC0Auk6bUh+Nd4MvADpnaFYfjXeDJiAmIBoA AX9e3l3QZ02R9k5sUfhTMgAwADAANwAvADAANAAIZ6dO/YAfjXeDGk+eW1Vfh2X2TgZSkGcXAAGn Tv2AH413gwZSkGdoiJ5bi08tAC0ALQAtAC0Af17eXdBnfWxmj02R9k5sUfhTJQABNQAuACAAH3Wn TtuPpl7RdqdjCU4qTjaWtWstAC0ALQCLTk1SLwCLTi1OLwCLTg5ULQAtAOFPb2AWUyhXH3WnTqF7 BnQtTtCPKHUXAAEgADUALgAxAIJZVU/ffqGLBlKQZx91p05wZW5jLQAtAC0ALQBNAEkAUwD7fN9+ JgABIAA1AC4AMgAakMePH3WnTnBlbmPHkcaWoYuXezpn+3zffv5W0XanY6GLElIOTtuPpl4tAC0A LQAcTp6D0GdsUfhTTQBFAFMA+3zffiQAASAANQAuADMAsHM6V9CPKHVMAEUARAAvAGFnYl8BeAxU ZWvRdqdjH3WnTtuPpl6eW2lyVVw6eQZSkGctAC0ALQCLTi1OoXsGdC8AATYALgBPUwOMn2wakARZ BnQfdadOAl84Xu6VmJgtAC0AIABrUWFnOWWEVapjvWUI/04AQwBSACAAZwBvAG8AZABzACAAbQBh AG4AYQBnAGUAbQBlAG4AdAAgACAACf8ZAAE3AC4Ap04AlTFZA4yfU+BWDk75W1Z7LQAtAOiN6JDo lR91p07bj6Zep2M2UgNOZWukmisAATgALgDemClSZm0I/wpOd20J/wRU6JDolQJfOF7lXfZlLwAE VOiQ6JWnTv2AX2MxWf5WSGiLTwZSkGctAC0ALQAtAC0ALQAtAC0AH3WnTul+SGWhewZ0IgABOQAu AC1O/VbQZ2xR+FMfdadO/YCbUkhlh3NoiC8A/H4IVEhlh3MGUpBnLQAtAC0ALQAtAC0ALQAfdadO 6X5IZaF7BnQfAAHxbaZeSGiLTxr/LU79VtBnV4QNVGxR+FMfdadOoYsSUgRU+HZzUeiQ6JWnYzZS QW0Legj/cVE0ADYAdZgJ/w8AASx721akWzoAaXJBbaGLElLfjduPDk5YW8+RoXs2UiMAATEALgBp ckFtoYsSUkFtC3oDTmVrpJotAC0ALQAtANBnbFH4U2ZbWFSwczpXyoutZSgAZltYVA5OsosIXpJO qFK5cMSLKQATAAGnTsFUpE4fZ+13LwBpcpllx5EtjWhUH2d/lWlyQW2hixJSQW0LejMAAZpbH2cp f+13m08njUZVbABlAGEAZAAgAHQAaQBtAGUA5V1cTzZSpl4WU0FtC3otAC0AIABSAGUAYQBsACAA TABlAGEAZAAgAHQAaQBtAGUAIABtAG8AbgBpAHQAbwByAGkAbgBnABsAAShXt5IuVYSYS20NTsZR YWf2TgtOf5BNUYSYS23HkS2N/Fv0gZNeWFvPkdBjR1PlXVxPQW0Lei4AAWlymWXHkS2NaFQfZ3+V jVH3iy2NoYsSUgj/UABSAAn/QW0Lei0ALQAtACAAUgBlAG8AcgBkAGUAcgAgAHAAbwBpAG4AdAAg AG0AYQBuAGEAZwBlAG0AZQBuAHQAIAABZmJVUwEwJWBVUwEwZYhVUy8AoFJVUy8AH3UjdQiKElIn fSVgdQBwAGQAYQB0AGUAaXKZZaGLElJBbQt644mQZx8AAQpOd21/ieiVUFtFAFIAUAAUIFMAQQBQ AC8AUgAzAPt8335SAFUATgAtAE0AUgBQAEFtC3o7Tkx1YpcGUpBnPQABF1OsTtBnbFH4U04AbwBy AG0AYQBsACAATwByAGQAZQByAC8AIABDAE8ATgBTAEkARwBOAE0ARQBOAFQALwBWAE0ASQAvAEoA SQBUAC8AQgB1AGYAZgBlAHIAIABDAG8AbgB0AHIAbwBsANtWzXnHkS2N5V1cT0FtC3orAAEJTvGD NXU6Zwj/f17eXQn/CWdQlmxR+FMoACdrMm1oUUSNKQBFAFIAUAAUIFMAQQBQAC8AUgAzAPt8337H kS2NootVU6F7BnRBbQt6O05MdWKXnluLTwMAAQZSkGcUICQAATIALgCbTyeNRlWkTh9noXs2UkFT J1lLTlOQLQAtACAAbABlAGEAZAAgAHQAaQBtAGUAIAByAGUAZAB1AGMAdABpAG8AbgAgABMAATMA LgDHkS2NaXKZZaROH2ffjaxQ0XanYwlOIF9oiDxoLwDlXXdRFwABSVB1UptSCP+Of8eMCf8oV8eR LY1pcpllIGuZZQZSkGffjduPaIjmW4tPBlKQZxQAAdBnFk5MdZROfnY3XwFPbWnHkfyMaXKZZYSY MpYga5llaIhIaItPLwAQAAEtTv1W0GcBT21px5EtjQdZmWVQn1dZaIieW4tPBlKQZx4AAdBnFk5M dZROfnY3XwFPbWkI/45/x4wJ/8eR/Ixpcpll340qjmiISGiLTxR4DooVIBUgd2NuZtF5gGIgACUA AS1O/VbQZ1eEDVS2WzV1EWzfcQFPbWlFAFIAUAAtAE8AUgBBAEMATABFAPt8335pcpll5Wfiiy8A 343bjztOTHVil55bi08GUpBnEQABMQAuAGlymWXtdzp/a1EnWZ9T4FaMVANOzXmEmDKW+VtWeyUA ATIALgBpcplloXsGdPh2hY/4dhBiQVPbVkFtC3otAC0AIAB3AGEAcgBlAGgAbwB1AHMAZQAgAG0A YQBuAGEAZwBlAG0AZQBuAHQALgABIAAyAC4AMQBpcplloXsGdL5805oJTiAAKk7ydrlwjFRrUSdZ e2t0ei0ALQAVIBUgH08bUptSCP9GAGwAZQB4AHQAcgBvAG4AaQBjAHMACf+Of8eMbFH4U0ZUmWUJ AAGEmDKWD/8EWQZ0NlKmXp5bi08RAAEgADIALgAyANBnbFH4U2lymWXlXQt69GY5ZUFtC3oGUpBn HQABMwAuAABOfWxsmuqBvo9sUfhTZYiZZS8AX2MXgKdjNlJIaItPBlKQZy0ALQBNlk5PhVGqX69z EGIsZxgAAY5/hHYvACAALwC+fOVdxpbiVgj/5WVEjQn/ZYiZZS8AX2MXgKdjNlJIaItPBlKQZx0A ATQALgBYW8+RoXs2Ui0ALQAgAGkAbgB2AGUAbgB0AG8AcgB5ACAAbQBhAG4AYQBnAGUAbQBlAG4A dAASAAEAl0JshJhLbQEwaXKZZaGLElIOTpNeWFunYzZS21YnWVZ7ZXUWAAEna25mZ3EOZmxR+FMA l0JshJhLbQ5Ok15YW6djNlJMgP2A/lawczpXBlKQZxsAAVKXm1x3bRRcbFH4UwCXQmyEmEtt2FMW U4xUk15YW/h2lF4DjHRlp2M2UkFtC3rmW4tPBlKQZxIAAdyPH2fHkS2NeWLPkQ5OhJhLbZNeWFsB MACXQmyEmEttn1MGdBsAAX+VeYbHkS2NootVUyFqD1+eW4tPBlKQZy0ALQAtAC0AJ1lGlgdoxlEv ABqQKHVpcpllx5EtjSIAAVQAQwBMANyPH2fHkS2Nk15YWyFqD1+eW4tPBlKQZy0ALQAtAHdtFlls AGUAYQBuACAAdABpAG0AZQB/lWlymWXHkS2NEwABiVtoUVhbz5FWAFMAAGfYmlhbz5FWAFMALgAA Z05PWFvPkZpbSU4KAAGJW2hRWFvPkQlOzXm+i5pbuWXVbB0AAUEAQgBDAKdjNlLVbC0ALQAgAHcA YQByAGUAaABvAHUAcwBlACAAbQBhAG4AYQBnAGUAbQBlAG4AdAAPAAG9ZRCAt1/7liNsQQBCAEMA p2M2UtVs5luLTwZSkGcRAAGTXlhbz5E5aG5jH3WnTuFt+mXibPBcA4x0ZSROV1m5ZdVsFwABQQBC AEIAOWhuYx91p07hbfpl4mzwXJNeWFvPkQOMdGUJTjaWtWvmW4tPBlKQZx4AAX9PKHVhZ2JfAXjK Uw5Om08njUZV249MiDV1UFtwZW5jpE5iYygARQBEAEkAKQBNlk5Pk15YW8+RuWXVbAkAAZNeWFvP kU2WTk+UTidZuWXVbAsAAV1OJ1mTXlhbB2MHaKF7BnQvAAOAOGgJAAGTXlhbaFRsj4dzmlvPkaGL l3sKAAHQY9iak15YW2hUbI+Hc4R2FJCEXxkAAfFtM1fQZ55bGk4JZ1CWbFH4U2lymWVoVGyPH5Cm Xi8AaFRsj4dzLwBYW5llh3OAe4tPJwABD5DHj7BzOlfKi61lZltYVGxR+FOTXlhbsHO2ctCPKHVt Uc15WFvPkaF7NlIhag9fvotuf3BgU1+TXlhboXsGdLll1WwtAC0ALQAtAE2WBgABTk8WWapfr3MQ YixnHQABZmtJbNBnV4QNVGxR+FMYTxZTm0+UXv6UoXsGdOZbi08GUpBnDf/PURFcFlmqX69zk15Y WxBiLGcuABYAAdBnV4QNVDV1r4tsUfhTD5DHj1NiNHg4XsSJnluwcxwg9paTXlhbHSBFZYtODAAB PlzwWDoAU180WdJonVUUIEVjNHiXerh+GgABMQAuAGZbYE4vAHRRS1kkTilZDP/eVjBSbFH4Uw5U JiAmINN+CFRsUfhTnltFlsVgtVEtABoAATIALgAakMePZltYVBBinGfRU2iILQAtAFNPGk8GUqtO LwDPfoya3lZ+mC8AsosIXrlwxIsNAAEzAC4Anlv1jS8AO20odUBiZluUTmVrpJogAA0AAWhR/YCL V2aP9JU7TvtOnlsYYoBi/YCti8N+HwABEDD5V62L9mX0lREwMgAwADEAMgB0XjMACGcxADcALQAx ADgACk53bQEwMwAIZzIANAAtADIANQDxbTNXIAAfAAEQMPlXrYs5jSh1ETAyADgAMAAwAENRLwC6 Tgj/K1Qa/1llUGcBMBpPoVIBMEhTEJkBMDaDNGwBMNFTaHkJ/zAAARAwwYtmTvSLDmYRMC1Op342 ADAAMABDUS8Auk47ANiap344ADAAMABDUS8Auk4oAMJToFKki8GLA4DVi4R2ZltYVHuYpE6zfmRr OY0odQz/DU7CU6BSpIvBiwOA1YuEdhIAASAAIAAgACAAIAAgACAAIAAgACAAIAAgAGZbWFTgZXuY pE6zfiwAASAAIAAgACAAp07BVMFUzXmKjWVnio0aWQz/p07BVB91fVRoVB9nio1lZ4qN7XeEdgJe Olevc4NYC04M/x91p07okB91p06LU5tSio1lZ4qNJ1ka/6JbN2IqAAGBiUJspE4njR9n9Gbtdwz/ 9GbGUfZlDP8UTvdOPGj0Zk5PDP/BVCiN9GZ9WQIwNlIgkBpOhHbeeolOUl85aNN+lV4vZh91p05I ZYdzATAQYixnp2MrAAE2Ug5OoXsGdP2Am1KEdt56iU4CMFNTio0BMAlnSGWEdh91p06hewZ0/YCb Ui4AIABmj/SVL2Y2UiCQi1cBTxpOhHYtTsNfDP9mj/SVjFQ2UiCQ6JDolSoAAaF7BnSEdn1ZT1cM //R2pWNxX81UQHenTsFUHCAojc+RATAQYixnATCkTieNH2cdIARUeZgHYwdohHaMWxBiDP80T4+W QHeuXylS9mXjToR2MFJlZysAAYxUxH7HftN+hGeLjRFUQWJzXhZThHbKTilZLABmj/SVoXsGdChX AU8aTi1OBlxuYhRvCGGgUs2RgYmEdtKJcoIhAGaP9JU7TqF74mWBiSZehpjiVh+WKgABjFsQYgRU eZjlXVxP+06hUgz/yFOBiQlnSGUwV6F7BnQfdadOsHM6V4R224+mXgEwKI3PkQEwEGIsZ4xUuk5Y VAIwgllVT9uPTIhmj/SVoXsGdIxUKgABH3WnTsePC3qnYzZSDP+CWVVPT1MMVHZR1k7okOiVcVEM VARZBnSwczpXhHYEVM157pWYmAIw2Y/yXRBiOk4tTv1WAU8aTmaP9JWhewZ0uk5YVMVfIwABe5iM Y+FjjFTNkcaJhHZMgBpOFlOAYv2AAjAvZgBOzXnOToBiL2cwUqF7BnSeW7BzAE5TTxZTATD7fN9+ FlOEdt6Yw40CMCcAASAAIAAgACAAgYkQYjpOGE/AeYR2AU8aTgz/AU8aToaY/FvFX3uYzZHGiWaP 9JWhewZ0uk5YVNmPpH8NTu9TFmI6f4R2uk6bUkSNkG4B/xAAASAAIAAgACAADIBmj/SVoXsGdLpO WFQ4XjheYpc0Thr/KwABbAABMOVdXE9aUIZODU4RXAz/z2spWV9O2V/ZX4x4jHgM/6F7BnR9WWGM 2I8vZgZ0DU76UTRZ6n4sAIJZVU8JZ0hlhHaoY9uPZo/0laF7BnTlXVxPH/8gAAEyAAEwO06he4GJ OWWEVQz/AYB/Z4GJTZYsZwz/H3WnTrBzOleCWVVPCWdIZdFTsHPulZiYDP8BY+1+OWXbjx//KwAB MwABMMFUzXkaWQz/oYsSUthTFlORmEF+DP8fdadO+06hUv1f2Jr9X05PDP+CWVVP0GPYmh91p05m j/SV1GeLVywACWdIZYR23U/Bix91p07bj6ZeH/8rAAE0AAEwH3WnTsePC3oNTjN6mlsM/zpnaFZF ZZyWjFSnTsFUKI3Pke6VmJg4Xjhe0VMfdSwAgllVTwlnSGWEdqdjNlLQY9iaKI3PkYxU0GPYmr6L B1kpUgMAASh1h3M/ACsAATUAATCwczpXiF8aWYtOxWAAl4GJnU9glwtOXlyMVAxUp37okOiVcVEM VKpSm1IM/+9TL2bPfjheL2b6UYZO7pWYmA5ULAC6TrpO+HaSTqhjMYEM/4tOKgABxWAATu+LjVHv iwz/gllVTwlnSGWEdg5O1k66Tp9sGpCMVE9TA4wM/4JZVU/Ab9FTC05eXIR2O06oUidgjFQjjftO w18f/4VRuVv7fN9+jFt0ZQEwGwAB6GzNkZ5bRZbQjyh1ATAkTilZhHa+fMNfFHjuTwz/Dk6oYHFR q05mj/SVoXsGdIR2ZVnYeQH/IAABbAABMA5mbniwczpXcl7okIR20olygppbTU8M/4xj4WNmj/SV 5WU4XotOoVKhewZ0ylO6TlhUoXsGdIR2vnzTmhQAATIAATCMY+FjgHtVU4R2KI3PkeVdd1E5ZduP H3WnTsFUKI2Edrll1WwWAAEzAAEwZltgTglnSGWMY+FjH3WnTtuPpl4M/6djNlI2UiCQEGIsZ4R2 uWXVbB0AATQAATBmWxpP0VOwc4xUFmOYY+6VmJgM/4xj4WModYB7VVPlXXdR44mzUQRUzXlmj/SV DVlCZ+6VmJgaAAE1AAEw+Vd7Ub6LB1ndT3tRD2HGiwz/ZlsaT9CPKHVUAFAATQCEdrll1WzQY9ia H3WnTptSLwABylPxbWVRFHh2eoxUnlv1jQn/LAAgAEiWAYAIXiRcdlHFZH+VsHM6VwBOU08WU6F7 BnQoAKGLElIsABBiLGcsALN+H2csACiNz5EsAIBiL2cM/7pOWFQpAC4AO06yiywAAf6LC3oJZzoA CjCEZ1F72Jq+fKZeB2jGUeVd9mVTAFQAoXsGdPt8334LMAEwCjAaWYBi/YBYVOVd+Vd7UVNP+3wL MAEwCjAaWXliEVzPkR91p065ZQ9fnlsPAAEsewBOsosa/2aP9JU7TvtO0olygqSL5XcOTkyAI40L AAGhewZ0L2bATkhOjFShewZ0WlDATkhOEQABqIu6ixr/SFEJZ6F7BnQGdLqL2I8vZkhRCWehewZ0 nlv1jQ0AAaF7BnQAZ758vHABMABnnlsodYR2pIvGixr/EQABx48Leg5OS2K1ay8AgGIvZw5OeoIv Zy8ATIg6Tg5OH1CbUg4AAaiLuosa/6F7BnQwUpVeL2YNTi9mAE7NedF5ZlsLAAGhewZ0d1EJZ+pU JE4nWTtOgYl5crlwDQABqIu6ixr/hpj8WwWAhHahewZ0OGjDX6hjBnQTAAEgACAAIAAgACAAIAA6 TsBOSE70i6F7BnTFX3uYgYnCifVfSFFMiBYAASAAIAAgACAAIAAgAKF7BnSEdgBOB1JMiDpO71Pl TlNtKX86TupUJE4qTldbEQAB/osCWMN+YE4a/6F7BnQJTidZc1Eulc2LhHYJTtKJc1H7fBAAASx7 jE6yiwEw5V1cT0yAI41eeSNXFlMOTu1zxH6hewZ0EAABZo/0lTtO+06EdiROzXkfd55bmVFncQ5O 21bNeauO/U4MAAH5W4VfAU8aTg5OpWJskYR2JE7NecNfAWAMAAH5W4VfC05eXA5OC05eXIR2CU7N ecNfAWAPAAGeWxhirYvDfhr/gllVT6F7BnR9WWBPhHbtc3+VH/8WAAEgACAAIAAgACAAIAAgACAA IAAgAO1zf5UJZ+pU21bNeQ1O8HlMgGiIsHMf/xUAASAAIAAgACAAIAAgACAAIAAgACAA7XN/lTpO wE5ITjtgL2bZXwyAcU4f/xgAASAAIAAgACAAIAAgACAAIAAgACAA7XN/lQln6lSbTotOxWBaUIZO SXuOTg1OWlAf/yQAASAAIAAgACAAIAAgACAAIAAgACAADmA3aE1i/YDRUyVj+lHtc3+VhHb9gJtS jFQYT79SH/8gACAAIAAgACAAIAAgACAAIAAgAAsAACAgICAgICAgICAgGgABLHsJTrKLGv/7fN9+ pIvGi7BzOlcBMKSLxotMgCONIAAgACAAIAAgACAAIAAgACAAIAAgABYAASAAIAAgACAAIAAgACAA IACwczpXoXsGdIR2mltJTigAf15JTg5O7XJJTikAFgABIAAgACAAIAAgACAAIAAgALBzOlehewZ0 hHZtUSdZeZjudg5OCU4nWThow18RAAEgACAAIAAgACAAIAAgACAAsHM6V6F7BnSEdpROJ1n5W2GM EwABIAAgACAAIAAgACAAIAAgALBzOlehewZ05V1cT4R2CU4nWfpX83cRAAEgACAAIAAgACAAIAAg ACAAsHM6V6F7BnSEdglOJ1kljRR7EwABIAAgACAAIAAgACAAIAAgALBzOlehewZ0NGxzXoR2CU4q TkJcIWsWAAEgACAAIAAgACAAIAAgACAAsHM6V6F7BnQ0bHNe0GNHU4R2CU4qTmVrpJogABcAASAA IAAgACAAIAAgACAAIAAdYAOAOgAEVOiQ6JWEduVdXE/NkcNfL2bATkhOIAAVAAEse9tWsosa/yAA imLhY04AzXmhewZ0+3zffi8AU0/7fIRnUXuEdr5805oeAAEgACAAIAAgACAAIAAgACAAIADCifVf Gv9JAFMATwA5ADAAMAAwAIR2SGUodS9m0GNHUwFPGk6EdlNPKI0PAAHulZiYGv86TsBOSE7qU0Js wYtmTg1OQmxjayxnH/8UAAHCifVfGv++fMp2MVwvZopiDVlCZ+6VmJiAe1VTFlMI/1QAUABTAAn/ FAAB7pWYmBr/MFKVXi9mwE5IThtSIJCGTlQATwBZAE8AVABBAF553Ysf/xMAASAAIAAgACAAIAAg ABwgC3d/Zx91p065ZQ9fHSAvZgBOzXnvi/xbEQABwon1Xxr/HCA1AFMAHSANTrtsfnbFdQz/Rk/9 gDKWfnbFdRMAAe6VmJga/xwgNQBTAB0goXsGdDpOwE5ITg1OL2YATs15IWoPXx//GgABIAAgACAA IAAgACAAHCA1AFMAHSCEdr5805pAYihXdl4NTi9mH3dja4R2NQAqThwgUwAdIBsAASAAIAAgACAA IAAgACAAOk7ATkhO6lP9gC9mHCA1AFMAHSAMgA1OL2YcIDYAUwABMDcAUwAdIAwAAcKJ9V8a/8FU KI0vZg9hxouzUZpbEGIljRAAAe6VmJga/w5gN2hNYv2AOl8WU1hU5V2EdsFUKI0PYcaLFwABIAAg ACAAIAAgACAAgllVT85O9GbYmkJcIWsGdOOJwVQojRwgCU4NTj9lVnsdIBoAASAAIAAgACAAIAAg AIJZVU/OTvRmvVuEdkJcYpcGdOOJPAAfIAEcIMFUKI0vZjZSIJD6UWVnhHYdIBgAASAAIAAgACAA IAAgADpOwE5ITvSLwVQojYxUOn93li9mjFtoUQ1ODFSEdiRO3laLThMAAepTgYmEZ1F7VABRAE0A jFQ2ALQDMVz9gOOJs1Eojc+R7pWYmB//HwABIAAgACAAIAAgACAAwon1Xxr/Gll5YhFcz5ENTi9m HCAaWR0gjFQcIBFcHSAMgC9mHCAPXB0gDIAcIOtfHSAZAAEgACAAIAAgACAAIADulZiYGv/ATkhO L2YaWXliEVzPkdCPTIiEdhwgbVEWU59TGVIdIBUAASAAIAAgACAAIAAgAIRn+l4HaMZRYmOLVwt6 j16EdhwglE4nWYGJuXAdIBkAAcKJ9V8a/1QAUABNAIR2O06Bie52hHYvZoRnUXv0Zu9TYJeEdrBz OlehewZ0+ldAeAIwDwAB7pWYmBr/VABQAE0AMVwvZmhRWFQfdadO3U9oUR//CQAAICAgICAgICAg DgABLHuUTrKLOgAgAIpi4WNMgCONIAA4VDZlvnzTmhYAASAAIAAgACAAIAAgACAAIAAgACAAIAAf dadOSGWHcw5OH3WnTv2Am1LGiytSFgABIAAgACAAIAAgACAAIAAgACAAIAAgAB91p065ZQ9fDk4f dadOn1MGdMaLK1IVAAEgACAAIAAgACAAIAAgACAAIAAgACAAB2jGURZTXE8aToR2CU4nWYVRtW0U AAEgACAAIAAgACAAIAAgACAAIAAgACAAH3WnTkhlh3OEdglOJ1mFUbVtFAABIAAgACAAIAAgACAA IAAgACAAIAAgAM9+Tm2oUlxPhHYJTg1On1MZUhoAASAAIAAgACAAIAAgACAAIAAgACAAIADDfmBO OgAgAB91p06/fnNeYYgEWQZ0/H4IVMN+YE4OAAHQY9iaAU8aTilSpm2EdiROzXkAZ/pXLGe5ZdVs BwABAU8aTmptOY2EdgVuVVMSAAEBTxpOf08odYR2+lcsZwdoOnkI/wZSkGdqbTmNhHblXXdRCf8L AAHlXVxPOWWEVYR221YnWfpXLGefUxlSDwABLHttUbKLGv+CWVVPnluwcwlnSGWEdlhU5V1ZZbKA KgABIAAgACAAIAAgACAAIAAgACAAIAAgACAALQAtAC0AWFTlXSB9KI1OTw1OL2ZgT4R2I437TiwA DU79gNBj2JpYVOVdhHYgfSiNL2ZgT4R2I437TikAGQABIAAgACAAIAAgACAAIAAgACAAIAAgACAA LQAtAC0AWFTlXTpOwE5IThpPr3IZlT8AIAAbAAEgACAAIAAgACAAIAAgACAAIAAgACAAIAAtAC0A LQAOYDdoTWL9gKF7BnR9WWBPhHZYVOVdPwAgAAEgACAAIAAgACAAIAAgACAAIAAgACAAIAC6Tidg FlOhewZ0CU4vAJROBnS6iyhX5V1cT55b9Y0tToR2lF4odTsAIgABIAAgACAAIAAgACAAIAAgACAA IAAgACAAz354UUhoi08gADEALgBaZu1zWFTlXVNijHdhdzpOwE5ITg1OKHV5YsSLPwAgAAEgACAA IAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAMgAuAIJZVU+pi1hU5V3CUw5OoXsG dD8AHgABIAAgACAAIAAgACAAIAAgACAAIAAgACAAn2wakIR2xJ7RkQ5OfXbRkZpbi18oV6F7BnQt ToR2O20odTsAGwABIAAgACAAIAAgACAAIAAgACAAIAAgACAALQAtAC0ADmA3aE1i/YCpi2BPhHZY VOVd4F/aiz8AEgAB341VU1hUOGjDX+VdXE+AYv2A0GNHUw5OVntldTpfFlOti8N+LwABEDD5V62L 9mX0lREwMgAwADEAMgB0XjIACGcyADUALQAyADYA8W0zVwEwMwAIZzMALQA0AApOd20BMDMACGcz ADEALQA0AAhnMQDxbTNXATA0AAhnNwAtADgACk53bSYAARAw+Veti/lbYYwRMAFPGk6Edt+NVVMB MBpOoVIBMMeRLY0BMB91oXu6Tkl7E05MgLpOWFQM/+VOylOCU3+VATA7YNF2ATDPfgZ0SXseAAEQ MPlXrYs5jSh1ETCfU/dOMgA2ADAAMABDUS8Auk4gAHly904xADgAMAAwAENRLwC6TiAADU6NUZhi Y2IrAAEAMAAwAl46V/Jdz37YU5dfio1lZ4qNi2t3keBlxWAB/6ROH2ftdwz/wVTNeRpZDP95Ys+R D1wM/wxUKI0WUwz/9048aAtO0W4M/xBiLGcKTkdTDP/BVCsAASiNJU48aAz/zWRcT+Blj14M/6KL VVMTZthTDP+iWzdiEWNUUgz/1mIgayeNPmsM/ziNE2bdT6RiDP+nTkNnt36JTkl7SXsM//2QEGKG TjuWjXgaTqFSKwAB248ATmVr0VNVXIR2IViSVwIwKFfZjzdo5WWLjSVO+1yEdmJfv1Jil01SDP8B TxpOlF7li3RlCFTQj1xPQW0Legz/0VMlYxhPv1JEjZBuDP/5V3tRWFQrAAHlXR+WDU8M/0hRimKl YzBShHaii1VTWlB9WQz/NnEOVAz/jVELjP5W02JVXAJeOlcM//tbQmzbjwBOZWvRU1VcAjAsZ/6L C3qyi/CPhk7fjVVToXsGdCsAAeVdXE+Edp5bvWWyfoGJDP+IlPlbAU8aTm5mTZBYWyhXhHbfjVVT 7pWYmAz/034IVHhRi1dIaItPDP8JZ4iU+VsnYDBX249MiPlXrYsM/39PqGAGdOOJIQABvnzTmgz/ jGPhY7ll1WwM/3Js1lPPfoyaDP8vZt+NVVNYVIxUz34GdLpOTIAaThZTrYvDfoR2lpkJkP6LS04A TgIwGAABIAAgACAAIAAGdOOJ341VU4R2hVG1bQz/jGPhY9+NVVOhewZ0hHbFXwdZgGL9gBv/IwAB IAAgACAAIAAakFNm2Jqnft+NVVO5ZdVsDP+MY+FjootVU6VjNmUBMMSLoVsBMNFTPmUBMN+NKo6M VIxbEGKEdv2Am1Ib/xkAASAAIAAgACAAqYvfjVVTuk5YVIxj4WOhewZ0AU8aToR2n1MZUgEweXK5 cIxUgGLVbBv/IgABIAAgACAAIAD9gB9Z0I8odRNOGk5MgP2ADP8JZ0hlpE5BbQEwn2wakO6VmJgM /09TA4wEWQZ0H3WnTtCPXE+LTqFSG/8jAAEgACAAIAAgAAZ0epjokOiVS070lYR2c1H7fAz/jGPh Yx91p04BMMFUKI0BMKROH2cBMBBiLGeEdk9TA4wEWQZ0/YCbUhv/IAABIAAgACAAIAAJZ0hloXsG dKJbN2IBMJtPlF5GVQ5OAU8aToR2c1H7fAz/0GPYmptPlF7+lIR2dGVTTyB9KI0CMAsAARAw/FsI XoB7y04RMFsATmd/XvBsXQAtAAEgACAAIAAgAC1O/VZwZ/pRH3WnTqF7BnQBMOVdglO+fMZ+FlPE iQODoXsGdPlXrYueWxhiE062Wwz/pHwvbvBTAU8aTqF7BnQUeHZ6LU7DXwZ0i05/lQz/5V0tAAFm W1V461gM/9iap37lXQt6CF4gAAz/BW5OUydZZlvxbTNXFHh2emKWTQBCAEEADP9IUQ5UKFeOfwEw 5WUBMOmXRI0WWQFPDP8vbvBT7HJEjQFPGk7OTotOoXsrAAEGdOVdXE8aWXReDP+GU/tO5V0LeuiQ 5V0LegheATCwczpXO06hewEwwVQojc9+BnQBMB91p05vUjtgSXtMgKFSDP8oV0FTcGV9jwFPoXsA Tr9+hHZ4ZCsAASxy2m5TYi1O73kvfYZOME7MW4R2oXsGdM9+jJoM/yRcdlHxbRmM5V2CUx91p04B MIlbaFEBMGVQt14OTq9zg1ihewZ0uWVil+ViCWcwTsxbhHaeWxhiLQAB5V1cT89+jJoM//lbJ2uO f4R2iVtoUaF7BnQBMK9zg1ihewZ0gYlCbAEwTIAaTmVQt16JW2hRoXsGdFNP+3xelzhen3GJYAz/ CWdAdxpZdF6EdlMASABFACAAMwABoXsGdFNP+3yMVAdoxlEsADhexImJW2hRwGjlZwEwH3WnTrBz OlehewZ0Dk45ZYRVATBoUWKXKI3PkaF7BnQBMFMAUABDAAEwRABPAEUAATBNAFMAQQABMFQAUQBN AAEwUQBGAEQAEAABnlv1jc9+jJoM/y9mV4QNVJ5bGGI+baF7BnQTTrZbAjAtAAEgACAAIAAgAPlb 6I39VmxR+FOTj2VRhHahewZ0HWDzYIeYCWcUeHZ6DP9iXxBihk7scndReXJygoR2nltyXotXNlIg kAFPGk6hewZ0uWXVbIxUU0/7fAIwTmcgAAEBgAheBlyGU/ZlQVMaWXRe73kvfXeNZWcwTsxbhHYf dadONlIgkA5OoXsGdM9+jJoM/9uPTIhTbSl/R1NOUwIwMwABIAAgACAAIAAyADAAMAAwAC0AMgAw ADAANAB0XvSVLABIUQ5U+lFIcoZOCjDBVCiNLwAfdadOLwDlXQt6JiAmIOiQ6JU7TqF7340RYmZb CzD7fBdSG05mThr/CjCJW2hRH3WnTqF7MQABBnQLMAEwCjAfdadOoXsGdGZbCzAsAAowNXVQW0yI Gk5JAFMATwA5ADAAMAAxABr/MgAwADAAMACeW71lgGLVbA5OSGiLTwswATAKMFNTio3BVCiNoXun YwswATAKMB91p04sAAGwczpXoXunYwswLAAKMNNOqFAOTmlymWWhe6djCzABMAowcGf6Ud+NVVNY VAswSXtmTk18LADXUzBSAU8aTkx1hHbYmqZezZHGiXde2X6IToZOgWfYmoR2LAABxIv3Ti4ATmdI UR91nlv1jc9+jJowTsxbLACyi4hjx48LehdSPk4nWc+RSGiLTwEweXIrUjpfA4yeWyh1J2CMVO9T zWRcTydgDP/xbddTLFT+i7pOWFSEdgYAAX1ZxIuMVApcbGUCMC0AASAAIAAgAE5nAYAIXuViCWcw TsxbhHblXYJTvnzGfhZTnlsYYqF7BnTPfoyajFRaV55bhHaAYi9nB2P8W59SlV4sAPOByk5OZwGA CF46TuFus40BTxpOhHaeWy0AAUWWAJeBiQz/SFEOVD5OnlKGTgRUe3wfdadOoXsGdCwAiVtoUQEw ZVC3Xg5Or3ODWLllYpeEdoVRrYsBMGxRAF/+iwt6cVGhizYAMAAwABpZOlcM/8JTrYsBTy4AARpO NAAwADAAMAAgALZb5l3zUywA+Vd7UYZOAE4nWXliGE/AeYR2AU8aTqF7BnS6Tk1iDP/udk1SO06B iQZSA14oVwpOd20BMPFtM1cBMH9eHE4BMF9sWW0wVzpTKwABJ1ktTotXH3WnTotXAU8aTgIwOk79 VoVRAU8aTh91p06hewZ0DP+JW2hRZVC3Xg5Or3ODWPlXrYvlXVxPWlD6UYZOgXr6USGNLnMM/55b nlsoVyhXOk4YAAEBTxpO44mzUYZO5V2CUx91p04BMIlbaFEBMGVQt14OTq9zg1ihewZ0vpaYmAIw IAAJAAHGJd+NVVNYVIR25V1cTzhow18eAAHfjVVTWFTSiXKCmltNTwz/mltJTgEw5V1cTzhow18B MEyAI40BMMR+x34BMPtOoVIBMBpO6X4BMH9PfVQXAAHfjVVT5V1cT3lyJ2AM/7mPGH8nYAEwf17b bCdgATA6Z8ZbJ2ABMGxlGk46TixnFwAB341VU1hURI08aAz/hVHokESNPGihewZ0DP9MiBpOhVGE dttWzXliX2GM405oiBAAAd+NVVMhag9fDP/fjVVTQW0Legz/lE55mOVdXE+fUxlSEgABnlu9ZeiN 6JDold+NVVOEdoGJwIsM/1NiIJDfjVVTZ2JMiJtSEAAB341VU4R2O06BiflbYYwM/9+NwE5ITh// CU4nWYGJIH0KAAGCWVVPYpf5W9tWzXm6ToxU5lN7fAgAAQlnSGVLUQ1na1EnWSpgYYwRAAHfjVVT WFQaTul+A4A4aAz/A4A4aGiIATC5ZdVsATDAb7FSCgABOG4PYhr/yFRbT4R2oXsGdNVsGVILAAHG Jd+NVVNYVARZBnSii1VThHb9gJtSFgABGE8ojVVTDP8lYFVTDP8HaMZRootVUzxoD18M/5OP+lEO TpOPZVGEdqKLVVMMAAGhbO5dGZWlYzZlols3YoR2Y2sPX6KLVVMSAAFPU66LATAIVAxUATCiWzdi gYlCbAz/ootVU8SLoVsOTpOP+lENAAGBiQ1OgYnSY1VTH//SY1VTn1MZUgEwuWXVbAoAAYJZVU+h ewZ0UAAvAE8AATBvAHQAFQABDk6ii1VTc1FUgIR2n1OnTjBXP2VWewEwp07BVKSLwYsBMBqQc1E/ ZVZ7BwABSgBJAFQAATBWAE0ASQAIAAHfjVVT5V1cT1VcAF9BbQt6CwABSGiLTxr/gllVTzKWYmsc IPKUVVMdIAsAAcYl341VU1hUoXsGdOVdglOEdoBi/YAYAAGhixJSs1GaW2diTIgM/zQATQAxAEUA gYkgfQEwC3qPXgEwNlKmXgEwAU8aTodlFlMrAAFBAFAAUQBQAAEwsGWnTsFU340qjqF7BnQM/6dO wVSAYi9nB2MHaAEw/la4fgEwh2X2TgEw9pb2TsSJPGhmTnAAbQBjAAz/gllVTzZSmlsfdadOoYsS Ug8AAYJZVU9jd8NPaXKZZTBSTU8M/6djNlIfdadO24+mXjUAAQRUNpa1a8FUKI2nYzZSDP9JAFEA QwABMEkAUABRAEMAATBRAEMAATBUAFEAQwABMEYAUQBDAAEwUQBBAAEwTwBRAEMAATABeDRZwGiM mkJsp07PkQz/SGWHcwz/H3WnToKCzWIM/99+oYssAAF/T2ZbWFTvU+VOxY8fkDBXBlz5V62LhVG5 W2yPFlM6Tp5bRZblXVxPgGL9gAIwKHWSTqhSATBTT4yaATCyi8SLSXuIY/6LuWUPXywAqYtmW1hU KFfDfi1ODAABZlsM/2ZbLU7Dfgz/vo8wUmZb5U70gSh1CgABIAAgACAAIADBVExy/osLehr/IAAs AAEKMFhU5V1MgBpO3nqJTptS/H4IVK2Lw34LMAowGE8ojaJbN2INZ6FSnluhUgswCjABTxpOTIg/ Zd9+eXuhewZ0nluhUgswCjATThpO2HlmTi8AqVIGdIxUHgABTIg/ZbpOWFSAYv2A0VNVXAswCjDY mkhlGk+ui6F7BnSAYuddCzAKMMVg6n6hewZ0Dk7DXwZ044mLUwswCAABIAAgACAAIABjg4mKols3 YiwAAS1O/Vb2lEyIATDlXUZV9pRMiAEwLU79Vvt5qFIBMF9sz4L7eahSATAKTndtNXXhTwEwB06L TilSxpbiVgEwATBbhHBRIH3yU0tRCP8tTv1WCf8BMPKDvo8sAAGvc91PATAwTptcp2OhgMaW4lYB MLBliVsWU+VdATB3ba5OxpbiVgEwsGWMVBBip2OhgAEwTlM6TgEw8FNxXDhoNXUBMHdtFFzGluJW ATCuX2+PATDvU+NTLgAB71NQTgEwf4nolVBbATBOAEUAQwABMPqL+leaTgEwIABeed5dcGUBeAEw 5WXLegEwjn+EdgEwiVvwbNF5gGKhgP1OATDxbTNXAoNVeDV1UFvReYBiATBUWMyRKGctAAG5bDB1 BlJsUfhTATAXZzxo7mgI/3+JiVsJ/zV1UFtJe0l7LgAaWXReuk6bUkSNkG6hewZ0nlv1jcpT+Vet i6hU4ovPfoZTf092UShXuk6bUkSNkG6hewZ0ATAsAAHiVh+W+l6+iwEwoXsGdAWAgGL9gNBjR1NJ expZKk6GmN9XCWdAd+xyMFKEdsGJ44mMVPFtZVEUeHZ6AjDudk1SpWPXU8ePdlH5V62LjFSFj/xb hHZmW1hUQgAFEAAAADIACGcyADUALQAyADYACk53bSAAIAAzAAhnMAAzAC0AMAA0AFtPcVwgACAA MwAIZzEAMAAtADEAMQAcTp6DIAAgADMACGcxADcALQAxADgAF1OsTiAAIAAzAAhnMgA0AC0AMgA1 APFtM1cgACAANQAIZzEAMgAtADEAMwB/Xt5dIAAgAAEADAAHADcAAAAAAAAAAAAEAAHUj95W/oto iAsAAWhR/YCXXn+VMgApWTEAHFl5cq2LJYQYAAEgACAAIAAgACAAIAAgACAAIAAgACAAIAAtAC0A LQCpi5deYpcaTul+618fkA1QnlgGAAEQMKViDVTmi8VgETApAAEQMPlXrYv2ZfSVETAyADAAMQAy AHReMgAIZzIAMgAtADIAMwDlZX9e3l0BMDMACGc3AC0AOADlZfFtM1cBMDMACGcyADEALQAyADIA 5WUKTndtDwABEDB/Yp5SVVNNTxEwAU8gABpOIABmWyAAYE4gAFF/GwABEDD5V62L+VthjBEwl15/ lQEwqFAHWZdef5UBMGN3/FsBMPlXrYvPfgZ0ATDQjyWEz34GdEl7NgABEDD5V62LOY0odREwMgA5 ADgAMABDUS8Auk4M/wBOuk7gZZhiY2Ib/xAw4lYflhhP4GARMDUAMgAwADAAQ1EvADIAuk4BMDcA MgAwADAAQ1EvADMAuk4BMDEAMQAwADAAMABDUS8ANQC6TjsAKwABIAAgACAAIAAgACAAIAAgACAA IAAgAOBldlHWTphiY2II/ytUMgAtThCZLAAxAFpmtFsgAA56OY0sABNOtlsUb7KLOY0sAFllUGc5 jSwANoO5cEl7Cf8QAAEQMO1wv341dd2LETAU/xD/EP8W/xb/GP8Y/xP/Ev8R/ywAARAw8W0zVy8A Al46V+iQETAQ/xf/Ff8V/y0AFv8R/xL/GP8Z/xj/Ev8Q/yAAIAAQMApOd20vAAJeOlfokBEwADAQ /xL/Ef8tABX/Ef8Y/xf/EP8W/xH/Ev8sAAEQMBdTrE4vAAJeOlfokBEwADAQ/xH/EP8tABX/Ef8S /xn/Ff8U/xD/Gf8gACAAEDB/Xt5dLwACXjpX6JARMAAwEP8S/xD/LQAW/xH/Ef8T/xP/F/8X/xX/ BgABEDD+iwt6TVIAihEwLQABIAAgACAAOk7ATkhO/VZFlt6PAZXoXTRZg2wUXJtzATC2W1BOj3kB MKaeU1+zUgEwr4C3X/pXATA/luqPvo+vZQEwH2b0XUtR7E4oVxZOTHXFjx+QaWIgXwz/BQABAF+G ddNiH1cf/ysAASAAIAAgADpOwE5ITv1WhVGEdt6PAZUBTxpOKFdpYiBfx48Lej5OZWv0fnCCH/86 TsBOSE7ejwGVAU8aTihXVVOXXsh2KVLQY0dTCk6YX4pfDU5NUh//IQABIAAgACAAqGCEds9+jJr9 kC9m+VuEdgz/Rk8vZs2RDVnnZQlnhHbPfoyaWlDVbNiPL2aXXzBS52UJZ4R2036cZwH/LwABIAAg ACAAqGAvZiZU82Dld1OQ/VZFlt6PAZXoXTRZ7E4oVxZOTHUAX4Z102IfV4R22HnAi2JUH//Ua4JZ pp5TX7NSaFEDdDMAMwAwADAAtluXXp5b9Y2Edjtg034B/xgAASAAIAAgAE5nCVbai/SLGv8cIM9+ jJovZh+NOlAM/2ZbYE4vZkSNp04dIAH/IAAgAC4AASAAIAAgAE5nAYAIXihXzk6LTt6PAZXPfiWE oXsGdJ5b9Y2MVPlb6I39Vt6PAZXoXTRZFHh2esePC3otTgz/IAAAX9FT+lEKMGhR/YCXXn+VMgAp WTEAHFl5cq2LKwABJYQLMAz/Y2sPXzR444mGTuiN/VbejwGV6F00WYR2EGKfUth5xltma2hWDP8N WTZS3o8BlWKNKVL6V+BWDP/QY0dTVVOXXsh2KVL9gJtSDP8uXqhgpIsqAAEFbtGRTHKXXn+V5V1c T4R2LGcojQz/imLhY7NRmluXXmKXGk7pfoR2c1EulXGaqFLgViB9DP9ZZahgAE5XWZ5bKHWEdqF7 BnTlXXdRjFS5ZdVsAf8UAAEgACAAIABBU3Re6HgATlFS+JQgkJ5bGGKeW0hlhHaoVOKLD1/5V62L HAABIAAgACAA5U7jibNR7pWYmDpO/FsRVIR2+VetiyFQ/FsFgAz/LGcfV55bGGIlhACVhHaeW/WN BYAtAAEgACAAIADlThwgnlsYYh0gB2P8WxwgnlsYYh0gDP/OTp5bGk4wUvlXrYvNUw1ZJJW8cAz/ Ok4BTxpOz5GrjppbWlCoVOKLD1/5V62LuWVIaAz/IACpi/lXrYsGAAEfd2Nrp04fdUhlnGcGAAEQ MP6LC3o2Zcp2ETAdAAEgACAAIACCWVVPqYuXXlhUzZENWeVdXE/rX1BOZ2JMiAz/U2IgkABfw19Q ThpOhHaXXmKX4lYflh//IgABIAAgACAAjGPhY5deYpflZTheJYTQj6F7BnRrUSdZOGjDXxwgZmto Vh0gDP+CWVVPbnjdTxpO6X6EdgFj7X4QYn+VH/8hAAEgACAAIACCWVVPCWdIZcBvsVIOTqF7BnRY VOVdjFSwZVhU5V2Fj/xbhHaAYuddDP/QY0dTl15/lYaY/Fv9gJtSH/8jAAEgACAAIACMY+FjVVOX Xsh2KVIGUpBnhHa5ZdVsDP9mWxpPAJUuVXBlbmMGUpBnDP8njcFU618fkEFtbI+EdgCVLlVWe2V1 IQABIAAgACAA+3zffoxj4WOzUZpbVVOXXhpO6X6EdnNRLpXgViB9DP+MVBpO6X4BY+1+0GNHU4R2 AJUuVaF7BnS5ZdVsLAABIAAgACAAMXUcIACVLlWLV5def5UdIDBSHCChewZ0i1eXXn+VHSAwUhwg z34lhItXl15/lR0gCU6nfvONDP8QYjpO6JWXXs9+JYShewZ0Dk4aTul+0GNHUwMAAYR2/YBLYg8A ASAAIAAgAC9mwE5ITnFfzVSGTmKNKVIOTmliIF8f/xYAASAAIAAgAKFsCWcYT8B5hHaXXn+VDP9V U5deyHYpUv2Am1KYX4pfDU5NUh//FgABIAAgACAAgllVT4F6NHgGUjwAICABl14TZgBfDP+XXn+V vpZCbIR2NFwsXEBcYpcf/xwAASAAIAAgAKFsCWcYT8B5hHaXXn+VDP8QYjpOaWIgX/Z0iJgM/zx3 QXdBd1BXMVkCXjpXb4I6Zx//GgABIAAgACAAoWwJZ/lXe1GXXn+VhHa5ZdVsDP8oV8BvyHCEdgJe OlfeeolOz2u1UQhhC04f/yQAASAAIAAgADp/T06FUeiQhHYNWTZSIJBAiJ9S/YAM/yBPLl4mXs9+ jJoPXw1ZNlIM/9+NDU4KTgFPGk7RU1VchHYagWVrH/8g8BwAASAAIAAgAAowaFH9gJdef5UyAClZ MQAcWXlyrYslhAswL2aoYAFj7X5ijSlShHY0eOOJS05TkAH/EAABEDD8WwhegHvLThEwWwBBAG4A ZAB5ACAAbABlAGUAXQAXAAEgACAAIAAtTidZTQBCAEEAoXsGdFV461hBbQt6oXsGdA5OGE8WU0SN 8W1+mO6VDwABIAAgACAALU79Vt6PAZX7fN9+RlVmW2KWb1Jiln+VEQABIAAgACAAjn/9Vv1WRZZP UxpPpIvBi9iap36hewZ0fpjulRcAASAAIAAgAAowAJUuVQ5OAl46VwswATAKMN6PAZUOTnlyuIsL MHlypn6wZD96uk4tAAEgACAAIAD+ZihXiVspUgj/LU79Vgn/xWL7TiWEAJXYmqF7DP/EfvpeMQAw ADAAMAC6ToR2JYQAleJWH5YsAB+NI40lhACV4lYfloR2oXsGdIxUhY/8W62Lw34wAAEgACAAIAD+ ZvtO6I39VmxR+FMlhACVWWXDfgz/P5bqj76Pr2UI/2EAZABpAGQAYQBzAAn/rYvDfvxbCF4M/0hR DlQoV5mfaW39VkWWlWJEjcaW4lYI//1WRZbldw1UwVQ+AAFMctCPJYQa/1MASwBBAFAAATBUAEkA TQBCAEUAUgBMAEEATgBEAAEwRABSAEEARwBPAE4AUwBFAEEAATBNAE8AUgBSAEUAUwBJAAEwTgBJ AEsARQART/KVATBDAEgAQQBDAE8ACf/FYvtOx4/Ymqd+0I8lhM9+BnQM/9CPMAABJYQ7YNF2AjAz AHReG1IaTs9+hlMM/zUAdF75V62LqFTii55b9Y0M/wOA31vHj4R2Al46V7Vt1nYyADQAKk4BdwEw MgAwADAAMAAqTuVOCk6Edsh+73rolZdeG/8gAHCNMAABv4vHjw1ODFR7fItX3o8BlQFPGk4zADAA MAAaWbZbDP92Xg5OAU8aTgGAf2cBMDtgz34GdAEwJYTQjztg0XYBMJdef5Xbj0yI8W2mXr+LCIws ACAAMQAwADAAMAANVOVOLgABCk6EdohtOY0FgL+LCIwM//lXrYvHjzEAMAAwADAAMAANVOVOCk6E dt6PAZXPfiWEAU8aTgGAO2DKUyWEAJW6TlhUAjD5W/1WRZbejwGV6F00WRBin1LPfoyahHYsAAEs Zx9XFlOUXih1DP8JZ/FtO1KEdhR4dnqMVJ5b9Y0CMCAAxWR/ld6PAZXPfiWEAU8aToR2aFFil9CP JYShewZ0jFSXXn+VATDIfu96/FstjQCVLlUNZ6FSIwAB+Vetiw5OqFTiiwz/iW3KUzBShHaGmN9X Gv8WU4ZZwVQBMIuXDWcBMDV1aFYBMLZbd1EBMLZbun4BMBCZbplJewIwADAAMAkAASAAIAAgABBi n1KFj/xbSGiLTy4AASAAIAAgAE5nAYAIXihXmZ9pbf1WRZaVYkSNxpbiVsVi+07QjyWEO2DRdrJO 6oE7TgFjDWehUiWEAJVBbQt6GE8WU3mY7nYsADpOAU8aTp5YOl+GTptPlF7+lM1TLwABlF6Edh+Q pl4M/6BSH5BEjdGR3lZBbQz/z1ERXIVRF4AM/4KCpn6GTidZz5GEdhBiLGcM/3Repl6vc9Rrz35O bUhlynaeWH+Vhk4zADEADv85ADUAJQAM/yAAsk7qgS4AAcJTDk6MVMR+x36GTjIAMAAaWSpO3o8B lc9+JYR5mO52R1fWU5dfols3Yn1ZxIsCMOqB8V2yTuqBwlMOToxUB2MlY+iQC05xUaGLNQAwABpZ Kk7ejwGVz34lhAFPFwABGk6EdmhRYpfQjyWEoXsGdIxUl15/lQEwyH7vevxbLY0AlS5VDWehUnmY 7nYb/y4AASAAIAAgAFtuX2zlXXqCwVQI/91PV39bjXlytlt3UQn/+l7Let6PAZXPfiWEYo0pUgdo xlEWU3mY7nYM/2JfEGLQjyWES2KMUQz/w08AlUtijFEM/yAAl15/lUtiKwABjFEM//xbLY1LYoxR +3zffhZTB2jGUQ1ZNlLlXQt6DP9/lb6PNwAqThpZCGcCMABOdF6FUdBjR1OGTt6PAZXPfiWEl14z ADAAJQCEdilSpm0AMAAwADAuAAEgACAAIAAbUvR+xpbiVjV1aFbejwGVz34lhGhRC3qoVOKLSGgM /85OGGJldTBSATBGVRpOIWoPXwEwYo0pUiFqD18BMNCPJYRLYoxRDP/DTwCVS2KMUSwAl15/lSwA AUtijFEM//xbLY1LYoxR+3zffhZTB2jGUQ1ZNlLlXQt6DP95mO52f5W+jwBOdF5LTkVODP8uXqlS G1L0fvpey3qGTt6PAZXPfiWEB2hGZ/R2JYSXXgz/Yl8hAAEQYoZO9HYlhJdehHYNWTZSB2jGUQz/ Ok4bUvR+9HYlhJdehHYAX1VcU2ILToZOWleeW4R2+ldAeAIwADAAMCAAIAAuAAEgACAAIAC2W7p+ xZazgndal15/lS9m/VaFUeV3DVSEdrZbun4BTxpOATBOZwGACF7CUw5Ohk50ZSpOl15/lQEw/Fst jQ1ZNlLlXQt6eZjudgz/IABiXxBi0I8lhBcAAUtijFEM/5def5VLYoxRDP/8Wy2NS2KMUft8334W UwdoxlENWTZS5V0LegIwADAGAAEQMP6LC3onWbJ+ETAXAAEFJix7AE5VU0NRATDejwGVAU8aTpde +pShewZ0hHawc7ZyATD5W1Z7Dk76Ue+NCQABEDDjibNRhHY4aMNf7pWYmBEwFgAB+zCSTqhSZltY VACXgYnjibNRhHbulZiYDk7wVtFgDP+wczpX44mzUe6VmJgXAAH7MOVO44mzUe6VmJg6TvxbEVT5 V62LDP+pi/lXrYv0ZglniJT5WydgjFSeW0hlDwAB+zDZj5tOsHO2ci9mYE9AYgOAUYaEdu6VmJgX VB//HAABIAAgADEALgCXXn+VgllVT55bsHMxdRwghY2nfg5mH2YdIDBSHCDEfsd+SGX9gB0ghHYV h9hTH/8iAAEgACAAMgAuAJde+pShewZ0hHYHaMZRDU7EiQODGv9nYkyIhHahbAdoxlEM/wdoxlGE dqFsZ2JMiAz/gllVTwdoxlEf/yYAASAAIAAzAC4AZ2JMiIR2Y3f8WzpnNlINTmVQaFEa/4JZVU+e W7BzMXVjdzBS/FsBMDF1HCBUmzybHSAwUhwgKVl/Tx0ghHZsj9hTH/8tAAEgACAANAAuAPFtpl6i Wzdic1H7fKF7BnSFX6BSOl8a/4JZVU+eW7BzMXXhbg9hMFLgX9qLATAxdRwgiG05jbllD18dIDBS HCAfdTttuWUPXx0ghHZsj9hTH/8KAAH7MGBPhHZ2UdZO7pWYmB//JiAmIA8AAfsw3o8BlQFPGk6X XvqUoXsGdIR2+VtWew5O+lHvjRAAARAwkk6oUhEwYE+Edu6VmJgOTvBW0WAf/7BzOlfjiVR7GAAB EDBIaItPBlKQZzEAETCmnlNfs1L9VkWW3o8BlehdNFnrXx+QaWIgXw1ZNlLtY9h5GgABEDBIaItP BlKQZzIAETB+ZwtONXXlXf1WRZbejwGV6F00Wch+73qXXmKXB2jGURZTBlKQZx8AARAwSGiLTwZS kGczABEwP5bqj76Pr2X9VkWW0I+oUsFUTHLejwGVyH7vepdeYpfrXx+QDVk2Uth5wIsGUpBnFgAB BSYse4xOVVNDUQEwHCBBXKGAs1GaWxGBi4gdIBr/l15/lYR20olygppbTU8TAAH7MEFcoYCzUZpb EYGLiAz/8W07UqSLxovqgfFdhHbSiXKCTIAjjREAASAAIAAxAC4Al15il9CPJYShewZ0hHYsZyiN L2bATkhOH/8VAAEgACAAMgAuAJdeYpccIHVwQpsdILpOaXKXXn+VhHYcIGtRJ1kdINKJcoIrAAEg ACAAIAAgAHQkrWTNeTpnIAB1JAdjJWOYWyAAdiRPUwOMBYAgAHckKW6nY2hWIAB4JAZSkGcFgCAA eSR0UUtZQlIgAHok+VetiwWAIAB7JJ5bsHMFgBkAASAAIAAzAC4AMXUcIIWNp378Wy2NHSAwUhwg 4lYfllllw34dIIR221YqTtKJcoJsj9hTJAABIAAgACAAIAB0JH1ZHCAqWSpZHSAa/1pQfVksZ0yA EWicaTdoIAAgACAAIAB1JH1ZHCCzWodZHSAa/wpO+FNMgKFS404GdLpOJAABIAAgACAAIAB2JH1Z HCCvWQxaHSAa/+iQ6JVPU1xPG1LpfkhlIAAgACAAIAB3JH1ZHCCIWYhZHSAa/yZeuk4mXsNf2I8m XidgEQABIAAgADQALgDRkUxyl15/lZRed1EHWYR2gGL9gA5OvnxeeRgAASAAIAAgACAAvnxeeToA dCTclDRZIAB1JMGUNFYgAHYk3pjba3+BIAB3JOSGxoeagBkAASAAIAAgACAAgGL9gDoAdCQTThpO gGL9gCAAdSTEfsd+gGL9gCAAdiTKi61lgGL9gCAAGAABEDBIaItPBlKQZzEAETBUgPNgxpbiVjV1 EYHejwGVE05WU5del15/lZdcTU8GUpBnGQABEDChewZ0SGiLTzIAETBgT8mJl1+UXuWL0GPUYqOQ TU9aUJdef5Uf/zpOwE5ITh//IAARAAEFJix7CU5VU0NRATBTYiCQwG/FYOtfUE6EdpdeYpfiVh+W EAAB+zDjibNRWFTlXc2RDVnlXVxP6oE2cXdTIGCEdu6VmJgSAAH7MIJZVU+pi1hU5V3qgahS6oHR U4R2wG/FYOtfUE6EduVdXE8WAAEgACAAMQAuABwg619QToR2WFTlXR0gTWL9gA1noVIcIOtfUE6E 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 MEhRE2YOVL6WATBHUL6LjJrBiw0AASAAIAAyAC4AfJyomv5Wf08odYR2bVFla6SaFAABIAAgADMA LgDDfmBOCP8GUpBn7pWYmBQgFCAcICWEGk4LTtFuHSAJ/xIAARAw5V13UdCPKHURMAZSkGcsZwhn Gk7pfgtO0W6Edp9T4FYf/xYAAZkiLHuUTnmYOGhma2hWGv/PfiWEcGVuYwZSkGcOTgCVLlVWe2V1 A4x0ZSAAEQAB+zCCWVVPnU9uY3BlV1taULNRVnsM/9uPTIjPfiWEBlKQZxEAASAAIAAxAC4AOk7A TkhOgYnbj0yIl15il3BlbmMGUpBnH/8cAAEgACAAIAAgAAj/MQAJ/3BlV1svZpde+pSEdilupl6h iy0A618fkMqLrWWXXvqU7pWYmIR2c1EulRoAASAAIAAgACAACP8yAAn/cGVXWwBnolvCiSAAATAa T/SL3YsBMB+Qpl7rXwEwZWezUVZ7IAAZAAEgACAAIAAgAAj/MwAJ/0hoi08a/+FPb2AWU6F7BnSp ixwgD1ylgIp/HSBNkDBXAF+xgg4AASAAIAAgACAACP80AAn/l176lIR2+lcsZ3BlV1spAAEgACAA IAAgACAAJYQaTp2YATCTXlhbATCiiyeNnZgBMNtrKVIBMCeNwVTeVmyPaFRwZQEwaldIZYdzATC6 Tkhlh3MBMGVRl16HcwEw3o8mXodzCwABIAAgADIALgCXXmKXyHaPTnNeYYggABoAASAAIAAgACAA CP8xAAn/AJUuVch2j05zXmGIuXAd/wCVLlU7YBBiLGf3AHNeR1fbaylSh3MoAAEgACAAIAAgAAj/ MgAJ/wCVLlU7YBBiLGcd/6dOwVQQYixnC/+XXmKX33nRkQv/xYjuT2lywVSYYudlC/+6TlhU5V1E jQv/NGw1dQv/DnrRkR0AASAAIAAgACAACP8zAAn/c15HV9trKVKHcx3/CP87YPaWLlX3Tg3/O2Db jyeNPAAgIAH3Tgn/9wA7YPaWLlX3Th0AASAAIAAzAC4AgllVTzlobmPolZdecGVuYwZSkGcM/wln SGXbj0yIJ43BVAOMdGUM/02WTk+TXlhbH/8oAAEgACAAIAAgAAj/MQAJ/0V13m4AlT5rBlKQZxr/ RXXebohtPmsGUpBnL2ZVU5deJ43BVACVLlVwZW5jBlKQZy1OAGfNkYGJhHZwZW5jS04ATiUAASAA IAAgACAACP8yAAn/VVM+awCVLlUfdX1UaFQfZwZSkGca/8pT9mXNU4iZJYQAleFPb2AM/wlnSGU2 UppbiVtoUZNeWFtWe2V1KgABIAAgACAAIAAI/zMACf8lhBpO9mX0lQZSkGca/whUBnQDjHRl5V1c T/Zl9JWMVIlbkmMM//2ACWdIZcNP249YVOVd5V1cT8BvxWCMVACVLlWeWH+VIQABIAAgACAAIAAI /zQACf8BgH6YolsAlS5VIY0uc4dzBlKQZxr/eXIrUi9mAWMRYuxOwVRMclYASQBQAGFThHZ+mKJb JAABIAAgACAAIAAI/zUACf9YVOVdAJUuVf2Am1IGUpBnGv8qTrpOGk7pfgZSkGcvAKJbVVP3TgZS kGcM/+VOv0/5W8d1C05vgyAAIwABEDAPXMR+qIu6ixEw6JWXXoR2MQAwACpOO06BiWiIsHMHYwdo DP8GUpBn0VOwc8V14FYM/4JZVU/HkdZTTIioUrllSGgf/xIAASAAIAA0AC4AgllVT/pey3qMW4RV hHbolZdepWJoiPt8334f/w4AASAAIAAgACAACP8xAAn/4U9vYBZToXsGdPt8334QAAEgACAAIAAg AAj/MgAJ//pey3qMW4RVhHalYmiINlKmXhgAASAAIAAgACAACP8zAAn/Y2tueH9PKHUEVM15CjAA lS5V5WUP/2hUD/8IZ6ViaIgLMAgAASAAIAA1AC4Aols3YgZSkGchAAEgACAAIAAgAAj/MQAJ/wZS kGflXXdRGv8KMAhnols3YrZytVEGUpBnaIgLMIxUCjAIZ6JbN2K2crVR+VvUa2iICzAoAAEgACAA IAAgAAj/MgAJ/4ZO44miW5BuhHaoUgFg2FMWU8pTXG+bUgz/5U6/T8eR1lPuXQJfAJUuVflbVnsB MKdOwVT5W1Z7ATANZ6FS+VtWewgAASAAIAA2AC4ANmUvZQZSkGctAAEgACAAIAAgAAj/MQAJ/wZS kGdwZW5jGv87YCWEGk42ZWVRATA7YBBiLGcBMKdOwVQQYixnh3MBMLNSqFIQYixnh3MBMDmNKHUQ Yixnh3MBMHNeR1eiW1VT904tAAEgACAAIAAgAAj/MgAJ/whnNmVlUQEwEGIsZwEwEGIsZ52YylN2 UdZOz34lhHBlbmMb/xBiLGedmC9mJlRjazheH//DTwCVO22oUi9mJlTRUUhlH/+fU+BWH/8IAAEg ACAANwAuAKdOwVQGUpBnFAABIAAgACAAIAAI/zEACf8GUpBn5V13URr/4mzrWH+Y6Xc1lgZSkGfV bC8AASAAIAAgACAACP8yAAn/BlKQZ3BlbmMa/wCVLlX9TnBlATAAlS5VfnYGUtRrATB+mKJbImvO jwdjcGUBMACVLlWdmAEwAJUuVZ2YfnYGUtRrATAAlS5VnZgHY3BlADAfAAEgACAAIAAgAAj/MwAJ /+6VmJh7fAEw0ZFbcnt8ATAmdtdye3wBMA5mH2Z7fNtWe3ynTsFUBlKQZw5O+VtWeyAAASAAIAA4 AC4AgllVT39PKHU5ZYRV6JWXXu6VmJiEduVdd1Ef/ydZm1KoY0yI6JWXXu6VmJg5ZYRVO22oUhr/ IAARAAEgACAAIAAgAOVdd1EAThr/CjA5ZYRV0GNIaGZOCzCUXih1FQABIAAgACAAIADlXXdRjE4a /wow0GNIaBNOeZg5ZYRVoYsSUgswlF4odSAADwABmSIse21ReZg4aGZraFYa/+5PvHDdfvlbEGKk TiAADAAB+zDQY0dTgllVT91++VsQYqRO/YCbUh//EwABIAAgADEALgAQYqROL2bulfpRZWeEdgz/ 7pX5W+6VmJhajSdZsZQLAAEgACAAMgAuAN1++VsQYqROhHbYeU18EAABIAAgACAAIAAI/zEACf8Q YqROhHZzUS6VKFeOToGJQmwYAAEgACAAIAAgAAj/MgAJ/xBipE4nWQhehHbhT/VfGv8QYqROAE4H Uv2QL2Y6ToZOMXIYAAEgACAAIAAgAAj/MwAJ/xBipE4xXC9m0VPulYR2eoIvZxr/7pX5W+6VmJha jSdZsZQSAAEgACAAIAAgAAj/NAAJ/xBipE7dfoBiAE4a/0dQvosQYqRO1WwTAAEgACAAIAAgAAj/ NQAJ/xBipE7dfoBijE4a/4xOCZAAThBipE7VbBQAASAAIAAgACAACP82AAn/EGKkTt1+gGIJThr/ BlLjibNRmlsQYqRO1WwVAAEgACAAIAAgAAj/NwAJ/xBipE7dfoBi21Ya/zYAKwAxAO6VmJgQYqRO 1WwSAAEgACAAIAAgAAj/OAAJ/xBipE7dfoBilE4a/81TJY06TtyA1WwNAAEQMMVgb2YUb8N+ETAg ABFiL2YQYqRO2JpLYg8AAZkiLHsDTnmYOGhma2hWGv+VYsmLlF75W4Bi510gAAoAAfswgllVT3Ne DVmVYsmLhHbDX4NYCgAB+zDjibNRlWLJi4R2QW0LeoBi510UAAH7MGKX+VuVYsmLhHb8Wy2Nw18B YAOMdGUvZxQgFCDSiXKC2FPDX39nCQAB+zB+mKJblWLJi8NfBnQGUpBnCgAB+zClWYRVBFkGdJVi yYuEdg9hSU4IAAH7MARZBnSVYsmLhHafUxlSCwAB+zAEWQZ0lWLJi4R2QW0Leg5OgGLnXQYAASAA IAAxAC4AU5BJawgAASAAIAAyAC4A1E7GfkaALFQIAAEgACAAMwAuAA1Z8I+VYsmLCgABIAAgADQA LgCkiwxUols3Yh9h11MKAAEgACAANQAuABCWDmbjibNRqmO9ZQgAASAAIAA2AC4AaIg6eR9hIowL AAEgACAANwAuAPpRTk4PYZllhHbKYJxVFQABEDBIaItPBlKQZxEwJ1mLVw1nxYjejwGVlWLJi5Re +VsEWQZ0IAAgACAAEwABEDDGiZGYSGiLTxEwlWLJi5Re+VtBbQt6hHZoUQt6xomRmEhoi08QAAEQ MNKJcoJuYhRvETCVYsmLlF75W4Bi512EdpReKHUgABwAAZkiLHtrUXmYOGhma2hWGv8gABpO6X4B Y+1+0GNHU4R25V13URQgFCCFjad+JYQAlaF7BnQPb5dlEgAB+zCMY+FjAE5XWQFj7X7QY0dTGk7p foR2JYQAlaF7BnTlXXdREQAB+zD7fN9+HWADgC9mwE5ITuBWIH2zUZpbhk5gT4R2Gk7pfg4AASAA IAAxAC4AGk7pfoR2+3zffgZSkGcOTjllhFUZAAEgACAAIAAgAAj/MQAJ/yWEGk6dmCAAPQAgACAA oltBbc+RWAAQYqROh3NYAKJbVVP3TgsAASAAIAAgACAACP8yAAn/Gk7pfgZSkGcrAAEgACAAIAAg ACAAIAAgACAAYCRBbc+RhHZxX81U4FYgfRr/RlUIVwEwl176lAmQQFcBMJdeYpdiX2GMATBIlhdS ATDDTwCVUABPAFAAATBGVcFUxH4IVBgAASAAIAAgACAAIAAgACAAIABhJBBipE6Hc4R2cV/NVOBW IH0a/wCVLlVBbQt6/YCbUhsAASAAIAAgACAAIAAgACAAIABiJKJbVVP3ToR2cV/NVOBWIH0a/0ZV wVTEfghUATDEfghUAJUuVRgAASAAIAAyAC4AGk7pfgFj7X7QY0dThHbRkaWUGVMUIBQgHCCFjad+ oXsGdA9vl2UdIBAAASAAIAAgACAACP8xAAn/AJUuVcePC3oGUpBnDk6nYzZSDQABIAAgACAAIAAg ACAAIAAgAGAkQW0Ler6Lbn8NAAEgACAAIAAgACAAIAAgACAAYSQPb5dlNlJcTw4AASAAIAAgAAj/ MgAJ/wCVLlUaTul+AWPtftBjR1MNAAEgACAAIAAgACAAIAAgACAAYCSJbMBtgmmHcxUAASAAIAAg ACAAIAAgACAAIABhJAFj7X7QY0dThY2nfiWEAJWhewZ0D2+XZRYAARAwoXsGdEhoi08RMFSA82AB MH5nC06Fjad+JYQAlaF7BnQPb5dlhHaUXih1CwABvnzKdh91p07bjzaW0GNHU62Lw34lhCoAARAw +Veti/Zl9JURMDIAMAAxADIAdF4zAAhnMwAtACAANADlZQpOd20BMDMACGcxADcALQAxADgA5WXP gt5dATA0AAhnMgAxAC0AMgAyAOVl8W0zVysAARAw+Veti/lbYYwRMDtgz34GdAEwH3WnTjZSIJDP fgZ0ATDlXQt6z34GdAEwwVQojc9+BnQBMMeRLY0OTmlyQW3PfgZ0ATAQYixnp2M2Us9+BnQgAAEw MQABIAAgACAAIAAgACAAIAAgACAAIAAgACAAeZjuds9+BnQBMOVdGk7lXQt6CF4BMGlyQW3lXQt6 CF4BML58ynblXQt6CF4sAMpTCWfXX45O0GNHU758ynaAYv2AhHY7TqF7jFQRAAEgACAAIAAgACAA IAAgACAAIAAgACAAIAChewZ0uk5YVAIwHgABEDD5V62LOY0odREwMwAyADAAMABDUS8Auk4I/wVT 7GJEjZllOY0BMEhTEJnKUwpOC05IUzaDuXBJewn/KgABEDDxbTNXLwACXjpX6JARMBD/F/8V/xX/ LQAW/xH/Ev8Y/xn/GP8S/xD/EDAKTndtLwACXjpX6JARMAAwEP8S/xH/LQAV/xH/GP8X/xD/Fv8R /xL/KgABEDAXU6xOLwACXjpX6JARMAAwEP8R/xD/LQAV/xH/Ev8Z/xX/FP8Q/xn/EDB/Xt5dLwAC XjpX6JARMAAwEP8S/xD/LQAW/xH/Ef8T/xP/F/8X/xX/BgABEDD+iwt6zIBvZhEwLQABIAAgACAA IACPlkB3ols3YqKLVVOEdtFT+lEM/x91p06/futfH5DQj2yPd41lZwz/zWRcT+Vd7E7ZXw1O7Y+E dh91p05Adw1ODFSLV/dThHanTsFUDP9pcpllLAABKFcNTlxQMFf7eQGQLAAfdadOv34oV9lfjHgw V9CPbI8sAB91p06/fgpOhHZpcpllDU4RXAz/Rk+iWzdidFORmJGYrFAnjQz/m08njchTkZiRmPpR sHP2XiwAAe+LDP8fdadOO06hew1O9mUwVwRZBnQfdadODk6bTyeNhHbulZiYDP8mICYgLgACMGBP DU6BieVOOk7Zjy9mKFfPY/CPo5C2W2xR+FOEdh91p06wczpXDP8OAAEMgC9mCjC+fMp2H3WnTgsw +Veti4R2sHM6VwIwLQABIAAgACAAIAD3TjxQQW2CWVVPOWWEVR//hY0CXnZ633q+ixpZJ1kf/x91 p07hT29gDmBITkFtbI8f/6ROJ41oVB9ngllVT6BS618f/7NSqFJIZYdzgllVT9BjKwAB2Jof/1hU 5V3CUw5OD2HGi+WLgllVT9BjR1Mf/wBOKk4qTu6VmJgoV6iLuouJTmdiDk6eW/WNLU6XXzBS44mz UQz/ZltYVOxO2V+Edg1Opk5QTk5ODP8qAAFzXvZlKFflXYJTLU5HkDBShHbulZiY+Vetiy1OBW5w ZoR2q4jNUyBm+lFlZwz/vnzKdoR2NlIgkFNP+3wOTuVdd1FlWdh56oE2cX+YCWdAYp9gAjAtAAEg ACAAIAAgAAFPGk7Qj1xPhHbudgdoL2YakMePAWPtfoR2iG1klmptOY12XhFUols3YtBjm0+MW45/ hHb3TjxQDP/OTgyAnluwcwFPGk6EdoVR6JCeWDxQx48rAAELegIwLGf+iwt60GObT4ZOvnzKdvt8 3350ZVNPuWVIaAz/Ok5gT8tOzX53jctZjk4wTjB1fWxmj2xR+FOEdr58ynYdYPNgjFS+fMp2H3Wn Tvt8336EdisAAZ5bvWXHjwt6AjDudoR2KFeOThr/zk6iWzdihHbSiaZe+lHRUwz/pIvGi/dOPFCM VNFTsHPHjwt6LU6EdmptOY0M/3ZeAWPtfohtZJZqbTmNG//HkSh1KwABvnzKdhZThHbJYqhSH3Wn Tvt8334M/wlnSGWnYzZSx48Lei1OhHaTXlhbDP9Nlk5PNlIgkGhUH2f2ZfSVDP/QY9iax48LeoR2 SGWHcwj/k15YWwEwRI0vAAHRkYR2aFRsj4dzCf/KU6JbN2Lhbg9hh3Mb/zpOTZZOTxZiiG1klseP C3otToR2XpeeWDxQO22oUgz/GpDHj02WTk++i25/9mX0lQEwVABQAE0AATBQAG8AawBhAC0ALQAB WQBvAGsAZQAM/x91p06/fnNeYYjlTspT7nbGiadjNlIM/wdoxlEWU1xPGk5Je3dRU0+EdjllhFW5 ZdVsDP9Nlk5PNlIgkBBiLGd2Xi9lAWPJYqhSH3WnTvt8BQAB336Edp5bvWUCMAsAARAw/FsIXoB7 y04RMFsAZGyqfv1WXQAoAAEAMAAwIABNAEIAQQAM/758ynYgAEwAZQBhAG4AIABNAGEAcwB0AGUA cgAgAAEwSQBFACAAE062Wwz/vnzKdnmY7nYfjSONuk5LTgBOIAACMCEAAQAwADAgAI5OMQA5ADkA MwB0XquIPm2AX+VlLGcwTjB1O2DokKVj11M6Th9nIAAxACAAdF6EdlQAUABTAPlXrYsCMC0AAQAw ADAgAP5m+04wTjB1fWxmj2xR+FMfdadOO06hewEw2JqnfkkARQAgADtOoXsM/59xiWC+fMp2H3Wn TkFtC3oYTxZTDP8vZv1WhVEAZ+llpWPmib58ynYfdS4AAadOHWDzYIR2E062W0tOAE4CMA5UKFdE AGUAbABwAGgAaQC3XxRcj3lsUfhTxWL7Tr6LB1n0fu5Pz34GdAEwvnzKdh91p07PfgZ0SXtMgAIw KFcKTndtGpAodX1sLgABZo/FYvtONlIgkOiQz34GdAEwSwBhAGkAegBlAG4AD1zEfsR+f5UM//lX rYvokDtOoXsM/x+NI40fdadOsHM6V4R2AWPtfjllhFUM/yhXdlGMVAxUi05xUQxUqlIrAAGbUgtO DP9/TwpOd20akCh1fWxmjxBiOk4akCh1KFdoUQN0hHYse9tWtlu+fMp2H3WnTjdof2flXYJTAjAo VwBOtluOf0SNNXVQW2xR+FPFYvtOgGIvZxcAAYJTf5UM/yhXLU79VoR2A062W+VdglOFUR+NI42o Y0yIvnzKdh91p06AYi9nAjA3AAEgACAAIAAgAMVkf5WOTgFPGk7Ki61lATAgAL58ynY2UiCQDk7J YqhSH3WnTvt8336+i6GLjFQ5ZduPDP81AFMAIAABMCAASwBBAE4AQgBBAE4AIAABMCAASwBhAGkA egBlAG4AIAABMPdOPFBBbTAAAYBiL2cI/1YAUwBNAAn/Dk45ZduPDP9oUWKXH3WnTkhlh3M5ZduP CP8fdadOv35zXmGIATDrXx+QbI9iYwn/ATBKAEkAVAAgAAEwQW2oUjZSIJABMFQAUABNAAEwvnzK diYAAR91p06hewZ0ATCwczpXSGWHczllhFUBMCAASQBFACAA5V0LegEwNgBzAGkAZwBtAGEAIACh ewZ0SXt5mO52hHb5V62LjFSoVOKLAjAtAAEgACAAIAAgAP5mz375V62LjFSoVOKLx4+EduiQBlKi WzdiCWcKTndtGpAodQEwCk53bSdZF08BMFSACFR9bGaPNXVQWwEwnVuilAEwHY2tXKGA/U4BMPZe C5UsAAEfTxZOGpABMFpTFFy+j3N8S1EXZwEwCU7xgzV1r2gBMAZ0SVEBMFQAQwBMAAEwJP8l/yz/ LP8BMDFybmYfdS4A72e+jzV1UFtJe9GPQ1NZT7ZbAU8aTgIwKwABSGiLTzBOzFsM/86Yo40fdahS DP/TfghUnltFlgz/+VuwczpXhHYwTppTz36MmspTvnzKdh1g82B/T2ZbWFQfYddTMFL9j0JsU1OK jQz/DU6tZTllhFUEAAGEdg9hxosCMAkAAQBOLgAgAL58ynYfdadOy07NfiQAATEALgAgAL58ynYf dadOMFKVXi9mwE5ITh//KAAvZgZ09V8f/y9m8lRmWx//L2Yhag9fH/8vZrllD18f/y9mSgBJAFQA H/8pAA4AATIALgAgAL58ynYfdadOhHYYT79SKFfqVMyRH/8SAAEzAC4AIAAwTjB1H3WnTvt8334h ag9fhHa+fNOaL2bATkhOPwAOAAFIaItPFCAUIL58ynY2UiCQ+3zffrZnhGfLTs1+CwABNAAuACAA vnzKdihXLU79VoR2EWMYYgwAAYxOLgAgAL58ynaEdpROeZj6Vyxnn1MZUgsAATlobmOiWzdihHYA l0JsmltJTvdOPFAOAAHGiytS9048UEFtdl5uY2RriVuSY89+JYQ7bahSCwABqYunTsFUKFeeWDxQ x48Lei1OQW2oUggAAamLKHU3YsliqFL3TjxQQW0IAAE4bNyP/Y9CbD1chFU9XI5/DAABCU4uACAA vnzKdrllD1+Eds9+JYQGdPVfBQABAU8aToR27naEdgkAARBiLGfWU7NRjk4fdadOuWUPXwQAAYht ZJZqbTmNBAABmltJTmptOY0VAAHGiytSols3Yp5YPFAOTl6Xnlg8UAj/QwBWAEEAIAAmACAATgBW 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 EDD5V62L+VthjBEwAU8aTh91p07okAEwvosHWaF7BnTokM9+BnQvADtOoXsvAOVdC3oIXi8AsHM6 V+1zxH5/lcpT+HZzUS1O2Jo2lqF7BnS6TlhU5U7KU/lbGAABIAAgACAAIAAgACAAIAAgACAAIAAg ACAAVABQAE0AqGNMiB9hdFGjjUtOuk7rWEl7LQABADAAMEhR24+Edr6LB1mhewZ0L2Y2UiCQi1cB TxpOTZZOTxBiLGcM/55YoFJIZcp2hHYAZ/R2pWMM/wBnCWdIZYR2FJCEXy4AVABQAE0AO22oUjFc L2blTmhRLAABWFTCUw5OhHYPXMR+uWUPXwz/G1L6Xr6LoYsYT2+ChHa+iwdZ+3zffgz/0GPYmrBz CWe+iwdZhHYAZ9iaUJbQjyh1DP+eW7BziVtoUSdgjFTYmiiNz5EM/x0AATKWYmsZle+L0VMfdQz/ zk4MgH9PAU8aTr6PMFJNlk5PEGIsZ4xUaFFilx91p05IZYdzhHbQY9iaAjANAAEAMAAwDF4bZ2Zb WFQakMePZGsha/6LC3oa/y4AAc5Ools3YoR20ommXvpR0VMM/6SLxov3TjxQjFTRU7BzNlIgkMeP C3otToR2am05jQz/dl6IbWSWam05jYZO44lUAFAATQD5WwFPGk6Eds2RgYkCME8ARQBFAIR2MQAB oYuXe4xUgllVTzllhFVPAEUARQACMAZ044k1AFMADk5UAFAATQCEdnNR+3wCMIJZVU/6Xst6jFT0 fqRivosHWYR2hlPyU7CLVV8M/8SL907udk1ShHZUAFAATQA0bHNeAjALAAGMY+Fjnlu9ZVQAUABN AIR2uWXVbAIwJQABLGf+iwt6Blw6TmZbWFTQY5tPJ1nPkYR271PNZFxPJ2CEdjxoD18WU2iIPGiM VBBin1JIaItPsovjiQz/m09mW1hUwlMDgNCPKHU2AAEgACAAIADFZH+Vjk4BTxpOyoutZQEwIAC+ fMp2NlIgkA5OyWKoUh91p077fN9+vouhi4xUOWXbjwz/NQBTACAAATAgAEsAQQBOAEIAQQBOACAA ATAgAEsAYQBpAHoAZQBuACAAATD3TjxQQW0HAAExAAEwVABQAE0Agmnwjw0AAQAwVABQAE0AhHZ3 jZBuATCCafVfATB5cnKCCQABADBUAFAATQA7bahShHbudgdoCQABADC+fMp2H3WnTiFqD1/eVn6Y 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 WcFUATAHWfZOf08odaF7BnShixJSFAABADAgACAABlKnfvR+pGL9gJtS+l7LeiwAIAD0fqRiXE8a TsSJA4MWUxUAAQAwIAAgAPSVpWPokOiVhHZUAFAATQA7bahSLADQYyFQ6JDolfSVCFRcTxgAATcA ATC+iwdZ/YCbUoR2AWPtfjllhFUa/1QAUABNAIR2SwBBAEkAWgBBAE4Anlu9ZQwAAQAwIAAgAMBO SE7rU0sAQQBJAFoAQQBOABkAAQAwIAAgAL6LB1n9gJtShHY5ZYRVuWXVbLqLGv9DAEkAUAAoAAFj 7X45ZYRVQW0LeikAEQABADAgACAAVABQAE0AhHZLAEEASQBaAEEATgBIaItPy07NfgsAATgAATBU AFAATQCoY0yIQVOMTjaWtWsNAAFMiD9l5V1cT99+eXuhewZ02JqnfhR47k/tczsAARAw+Veti/Zl 9JURMDIAMAAxADIAdF4wADMACGcyADIALQAyADMA5WXxbTNXATAwADQACGcxADkALQAyADAA5WUK TndtATAwADQACGcyADYALQAyADcA5WV/Xt5dATAwADUACGcxADIALQAxADMA5WUXU6xOIAAaAAEQ MPlXrYv5W2GMETBMiD9lO2DRdgEwTIg/Zc9+BnQBMJ5SbFGkWztO+04BMEyIP2WHZVhUHwABEDD5 V62LOY0odREw5f8yADYAMAAwAENRLwC6TiAAK1QtThCZDP9EjZllDP8IVHFfDP/RU2h5DP82g7lw SXshAAEgACAAIAAgAAUmIACCWZxnqGAvZgBOTU8BTxpOoXsGdAWADP+hbAlnE04aTjpcpl6CWVVP YYjPkUyIP2XlXUhlH/8hAAEgACAAIAAgAAUmIACCWZxnqGAvZgBOTU9MiD9lH40jjbpODP8gazp/ E04aTuVdd1GCWVVP6oHhT2KX+VtYVOVdH/8hAAEgACAAIAAgAAUmIACCWZxnqGAvZgBOTU+HZdh5 5V1cTwWADP8ZlcePE04aTgdj/FsOYP2At4OXX0yAOldLZkdTH/8tAAEgACAAIAAgACxn/osLegZc Ok6oYNBjm0/OTgZ09V8wUoBi/YCEdmhRYpeti8N+DP8uXqlSqGDQY9iaTIg/Zd9+eXuhewZ0hHYT ThpOgGL9gAz/O06oUoxj4WMrAAHlXVxPgoJPWQz/CWdIZadjNlJMiD9lEGIsZwz/MpYDg0yIP2Xl XVxPHCDRnh5tHSAB//6LC3oGXOVO/VZFlhqQKHWEdkyAGk4HaMZROk76V0B4DP/TfisAAQhUAYAI XhpZdF53bRZZWXVmWwEwzk4aToR2z36Mmgz/oFJLTnZR7HIwUr588W2EdrKL44lIVLBzjFSti8N+ uXDEi4R2E04aTp5bm1IM//lbAU8aTkyIFgABP2WhewZ0uk5YVNuPTIjReWZbATATThpOATBIUduP hHb7fN9+FlOti8N+AjAKAAEQMPxbCF6Ae8tOETBbAFppKVldADEAAaAAIAAgACAATIAaTkyIP2Wh ewZ0rYvDfhNOtlsM/wVuTlMnWWZbolunXllliGMM/04AUQBBAAj/8YL9Vv1Wtlsojc+R3U/Biwln UJZsUfhTCf8M/yAAUwBOAFEAQQAI/wpOLgABd21pYO9Tw1eki8GLCWdQlmxR+FMJ/ywAQgBDAEMA CP8XU6xOsGUWTqp+pIvBiwlnUJZsUfhTCf95cs15TIgaTqFbOGjEfrpOm1JEjZBuoXsGdIBiL2cT TrZbAjAvAAEgACAAIAAgADEAOQA5ADgAdF4AX8tZE05MgM5Oi075V62LDk6oVOKL5V1cTwz/+Vst Tv1WAU8aToR2oXsGdLBztnLKU3ZR44mzUbllSGgJZ/FtZVEdYAOAjFTscjBSLAABwYnjiQz/xWR/ lY5OxH7HfthTaZcBMGdiTIibUgEwvnzGfhZToXsGdAEwAU8aTkyIP2VTT/t8hGf6XgEwTIAaThZT rYvDfspTGpAodaF7BnRJe4aY31cCMCsAAXZRiGP+i3lycoIvZs5O/VaFUQFPGk5AYmKXNE6Edp5b RZbulZiY+lHRUwz/GpDHjwRUzXl4UYtXSGiLT4R2sovjiYxUBlKQZwz/5U7KUyFq32Kwc55bKwAB r3ODWIR2zWRcTxRvw34M//2AH1kJZ0hliJT5W6JbN2KEdp5bRZbulZiY249MiKhU4ovKi61lDP/Q Y5tPqFTiiw9f+Vetiwz/+3zfftBjR1MBTxpO44kuAAGzUe6VmJiEdv2Am1KMVJ5bvWXNZFxPNGxz XgIwoACgAKAAoAD5V62LylOFj/xbx4+EdgFPGk4FU+xiGv/MW+tYt14BMC1OdFEakK+LATDxbTNX /VZFlqdjoYABMCsAARxOzph9bGaPATBZbV9sVIAakAEw8W0zVzV14U8BMJFOV1M1deFPATBXU7ll NXVRfwEwr2W3X51bNXVoVgj/t19EjQn/ATB/Xt5dy3p9dsaW4lYBMEJoLAABl2cCXtRZxH7HfuiQ ATCcVUtOF2fGluJWATBjaydZt14wV8aW4lYBMMeG41PGlsWIsXsBeDRZCWdQlmxR+FMBMPFtM1c0 bKFSxpbiVgEwVIAIVDmCNoIBMCsAAQlOXU7GluJWATAtTv1WnVuJW8aW4lYBMC1O83e5bAEwf5XO V8GLOFIBMPFtM1cqgnp6bFH4UwEw0ZGfeG+P9k4BME5Tpm0I//FtM1cJ/wEwLU79VndtDwABFlnG luJWATAtTsGU61/QjwEwLU53bfN3uWxJewIwGAABBSYgACx7AE5VU0NRGv9MiD9loXsGdLpOWFSE dkyAGk4WU0tO740OTtKJcoKaW01PEwABIAAgAABOATBMiD9loXsGdA5OAU8aTjhow1/eeolOm1KE dnNR+3wUAAEgACAAIAAgACAAMQABMEyIP2WhewZ05V1cTwCXgYn7fN9+2JqmXhv/HQABIAAgACAA IAAgADIAATCCWVVPGpDHj0yIP2WhewZ0BlwQYixnAGcnWVCWpl6EdmyPFlM6TkSNLGcf/x4AASAA IAAgACAAIAAzAAEwgllVTxqQx49MiD9loXsGdKmLc17hUYR2WFTlXVpQ+lENTnNe4VGEdhpO6X4f /w4AASAAIACMTgEwTIg/ZaF7BnQFgIR2TIAaTtKJcoIYAAEgACAAIAAgADEAATCoaO1WFk62WwEw T2ftVlBbH18UIBQgTIAaThZThHYHaEZnG/8TAAEgACAAIAAgADIAATBaUH1ZTIAaTh6C8FMKTuqB 8V2EdtKJcoIb/xEAASAAIAAgACAAMwABMIJZVU8Ld4VfTIg/ZaF7BnTlXVxPH/8mAAEgACAAIAAg ADQAATBMiD9loXsGdAWAhHZMgCONU0/7fA5O6X5IZYR2FHh2ehv/FCAUIE5TOk5sUfhTTIg/ZaF7 BnQFgIR222JYgJiYDwABIAAgAAlOATC+fG54FlNMiD9loXsGdIR2hVG1bSAAIAABIAAgACAAIAAx AAEwwE5ITi9mvnzGfhZTTIg/ZaF7BnQM/0hoi08a/0IAUACEdolbaFGhewZ0QW0LegZSq04b/xAA ASAAIAAgACAAMgABMAZ0BW5MgCONDP/QY0dTSGWHcwIwEwABBSYgACx7jE5VU0NRGv9MiD9loXsG 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 cAB0AP5Wk14b/xsAAf1WhVEAZydZi1cakK+LbFH4U4R2UgBPAEkABlKQZyFqf2cM/xZOTHWnfgGA CF6EdhBinGcb/w0AAf1WhVEAZydZi1cakK+LbFH4U4R2h2U7dRv/CgABRlWhUjx56k6EdgZ0uosH YxVfG/8TAAEaTqFSQW0LehhPFlOEdoBi510M/xZOTHWnfgGACF6EdhBinGcb/xcAAVhU5V0EWVp/ Dk5WWbFSYWeLTwz/NlKmXlNP+3z6Xr6LhHYGUqtODP9Je0l7AjAGAAEQMP6LC3rudgdoETAOAAHY mkhl22JYgA5OYpfVi4Bi512eWxhirYvDfiWEJgABEDD5V62L9mX0lREwMgAwADEAMgB0XjIACGcx ADYALQAxADcACk53bQEwMgAIZzIAMwAtADIANAAXU6xOATAzAAhnMgAtADMA8W0zVywAARAw+Vet i/lbYYwRMGOEi05/lQEwO2DPfgZ0ATABTxpO2JqhewEwAU8aTrpOm1JEjZBuO06hey8Az34GdAEw BFTokOiV2JqnfjtOoXsvAM9+BnTKU4ltylMZAAEgACAAIAAgACAAIAAgACAAIAAgACAAMFLbYliA Dk5il9WL+HYgACAAc1G6TlhUSXsCMCEAARAw+VetizmNKHURMOX/MgA2ADAAMABDUS8Auk4gAAj/ 0GObT7KLSU4BMEhTEJkBMNFTaHkBMDaDuXBJewn/IAAgADAAASAAIAAgACAAL2YiAKFsCWe6TiIA 2I8vZiIAoWwJZwhUApCEdrpOIgAM/xFi7E7li4JZVU93UQlnIgBnYTx3IgAf/9tiWIAOTmKX1Ytc TzpOAU8aTrpOm1JEjZBu3nqJTisAAYR2LHsATmVrDP/5WwFPGk6Edn+V3I/RU1VcCWdAdz5Os417 j82RhHZcTyh1AjD7fN9+jGPhY9tiWIAOTmKX1YuAYuddDP86TgFPGk4JkNRiGE/AeYR2FQABuk5N Yi9msHPjTs9+BnS6TspTSABSADtg0XbFXwdZhHb6VyxnIH0ojQIwLQABIAAgACAAIAAoV1Nfyk4W Tkx1DP8ATipODU6JToR2i06eWy9mGv/qVLZbAU8aTuViCWcATkFthHa6Tk1iDP+DWzFcGk8JZwBO QW2EdqdOwVQM/19OMVz9gChXKwAB3nqJTsBvsVKEdgJeOlctTst6jk4NTiWNS04wVwIwDmA3aNti WIAOTgFPGk7RU1VcgYlCbABO9IGEdrpOOGzcjy9muk6bUkSNkG6hewZ0hHbNkYGJ5V0rAAFcT0tO AE4CMEZPgllVT/2A22IwUgBOQW2EdhROyFMmewhUAU8aTodlFlOEdrpOTWIM/8hTiW3KUzBSL2Ym VAlnY2tueIR222JYgLll1WzKU2KX1YuAYgIAAeddAjAsAAEgACAALGf+iwt6hHa+i6GL6GUoVy5e qVLbYliA5V1cTwWA0GPYmttiWIAOTmKX1YuEduV3xouMVIBi510M/9Bj2JrbYliAhHYQYp9Sh3MM /2543U/bYjBSDwABJnsIVAFPGk6HZRZTjFRMgE1PgYlCbIR2uk5NYgIwFQABIAAgACxn+Veti85O 5U4LTglOKk65ZWKX249MiIZOvnzDX4R2vouhixv/FwABIAAgAAZ09V8a/39PZltYVA9hxoswUtti WICEds2RgYknYIxUU0/7fLll1Wwb/yUAASAAIADlXXdRGv8akMePQW0Lev5WATAAl0JsBlKQZwEw w18GdEttxItJe+Vdd1F/T2ZbWFSMY+Fj71M9hJ5bhHZseCdg5V13URv/IQABIAAgAIBi510a/8tO zX6CWVVPcGBTX4R2f08odeVdd1EM/+VOf09mW1hU71PLejtSH1CpUuVdd1Hbj0yITIioUhv/LgAB 0ZDNkX9i+osa/2RrIWsyAClZ/osLeoVRuVuQbo5OsosIXhpZdF6eW0WW5V1cT89+jJoM/758aV+I Y/6LDP/Pax9n/osLeuFuD2GmXkdXOk4xADAAMAAlAAz/HCAsAAHBVCiNNlLcgB0gL2YRYuxOAE4v jVpXAWOEdp9TGVIM/yhXZGsRYuxOXE/6UdGQzZF/YvqLGv/hUflb/osLeiiNz5ENTuFuD2EFgCwA KFf+iwt6AF/LWXeNLQABJE4PXPZlhVHQY/pREWLsTkdX4GVhZ/ZOAJA5jSwAgln5W/6LC3oojc+R 248ATmVrOWWEVdBj+lGdWzWND2HBiRROq4gRYuxOx5GzfgWALABHVwlnVlmxUgH/CgABxiUOZnBm 22JYgIR2zZGBiSdgG/8RAAHGJaSLBW7bYliAjFQJkE1i74s6U3ZeCWdIZYR2f5BNURv/FAABxiWf cYlgYpfVi4R2z2sqTkFtC3rKU0FtC3otToR26GwPYYtOeZgb/xEAAcYlqI/Gi2KX1YstToR2IgAf d55bIgAOTiIADowAiiIAG/8PAAHGJTlobmPudgdojFT0fqZevouaW2KX1YuhixJSG/8OAAHGJYxj 4WPTfoRnFlNil9WLhHa5ZdVsDk6AYuddCgABEDD8WwhegHvLThEwWwABTlpXXQA0AAEgACAAIAAg ACAAAU5aVyAAKABLAGUAdgBpAG4AIABEAGkAbgBnACkADP9EjfFtuk6bUkSNkG6hewZ0E062Wwz/ xpbiVqF7p2MTTrZbDP8BTxpO2FNpl6F7BnQTTrZbAjAXU6xOCF4DgxoAASdZZlvlXUZVoXsGdFpT 61hEAEIAQQAM/1dTrE4nWWZb5V1GVaF7BnRVeOtYTQBCAEEAAjAuAAEgACAAIAAgACAAAU5aVwGA CF7+ZihXJ1mLV/1WAU/KUxZZRI02UiCQGk7FYvtOLU7YmjaWO06heywAKFe6TptSRI2QbqF7BnQB MAFPGk4YYmV1xIkSUgEwxpbiViwAAaF7BnQhag9fvouhiwEwGk6hUkFtC3rNkcR+ATABT4tOGk5V U01POWU2Us2RxH7KUz9lnF7+i5iYFHh2ekl7uWVilztOAWOGTnBlQVMqTqhU4ot5mO52AjAsAAEB TlpXAYAIXl6XOF6GTuOJ/VaFUQFPGk7PfiWEoXsGdIR23nqJTq9zg1gsAL58GpDQjyh1TVK/bKF7 BnSAYi9n44mzUQFPGk6eW0WW7pWYmIR2VntldcpTKwABnluhUgz/+VsNTgxUTIgaTgEwDU4MVAFP Gk7YmkhlxH7Hfg5Ouk6bUkSNkG5TT/t8ATDGluJWFlPOmGmWoXunY1NP+3yEdoRn+l7lTspTAU8a Tg1ODFQnAAHRU1Vc9mUfZ9iaSGUAX1VcxH7HfthTaZcOTrpOm1JEjZBu5V1cT4R2vpa5cAEw9nSI mEl7CWf7fN9+hHYUeHZ6ylMwTsxbhHbPfoyaAjAuAAEgACAAIAAgAAFOWlcBgAhe84HKTvJdCWdB U3Re5U4KToR2uk6bUkSNkG6hewZ05V1cTw5OqFTii36Y7pXPfoyaG/9tUXRe5U4KTkyAGk6yiwhe nlsYYs9+jJoM/ywAAYWP/FvHj3Blfna2WydZi1cBTxpOxpbiVoR2+VetiwEwqFTii4xUoXsGdNhT aZd5mO52AjAgAONOaIiiWzdiO06BiQln405oiKJbN2I7ToGJCWctTv1W83csAAG5bClZNnEUbMaW 4lYBMC1O/VZ3bRRcxpbiVgEwLU79Vvt5qFIBMC1O/VY1deFPATAtTv1WO1Nvg8aW4lYBMBdTrE5P TztgxpbiVgEwIAAtTv1Wf16mU8aWMgAB4lYBMC1O/VZXU2aPxpbiVgEwMwBDANF5gGII/y1O/VYJ /8aW4lYBMDRiFFxEAEUATABMACgALU79VikAATCXZ7dfyVNmjygALU79VikAATBWAEEARwAI/y1O /VYJ/wEwCU4ATiwAAc2R5V0BMBdTfWyPeTB1ATBfbO5toltmj8aW4lYBMGNr8GzGluJWATApWWya xpbiVgEwf14cTmdhN4zGluJWATAKTndtm081dUBcATAgAApOd23dT8aWxpYsAAHiVgEwCk4vbsaW sXsBMApOd23PghRc/1sBMApOd23hT29gp04aTsaW4lYBMApOd21+dtyAb4/2TgEwCk53bV1OhpY/ YjBXp04BMApOd22Zn4dbp2OhgAEwLgABcVwcTnNeiVvdT2mWATBTAEcAUwAoAC1O/VYpABqQB2gB MFltX2ydW79OxpbiVgEwsGWgUmFXhY2nft+YwVTGluJWATAtTv1WKoIpWdF5gGLGluJWATAcTrll KoIsAAF6egEwX2zPggBfQ1HGluJWATBfbM+CZ3KKf8aW4lYBMFltX2wpWf2AxpbiVgEwCk53bSqC U5DYUt9bvouhixR4dnpilgEwCk53bRxOd2M1dZtSxpbiVgEwLAABV1OsTjBXwZRsUfhTATBfbM+C HY0UXDBXf2cBMF9sz4J+gh2NDWdwmQEwWW1fbC1Od2PGluJWATAKTn1sxpbiVolbCVRpckFtATDb Vt1dyWi7nsaW4lYBMCgAAWZrSWwtTvN3FlMBMGdyin/GluJWATB3bZtS61gtAA9h1WxKU/xbU08I /y1O/VYJ/wEwKVklbbdeCF6FUMaW4lZJeydZi1cBTxpOVVNNTwIwBAAAICAgIC8AASAAIAAgACAA AU5aVwGACF7hT0lZz2sqTgFPGk79kC9mClxsZYR2VgBJAFAAols3Ygz/5U4TThpOhHa+fF55ATAN Tq1lG1KwZTBXBlx6ZmdhSVkuc9l+ols3Ygz/Dk4PAAGiWzdicVEMVBBif5UM/y9m1k4AZydZhHbD Xz9hAjAaAAEsewBO6JAGUiAAAWCmXrNRmlsATgdSLQAtAC0A+l7Levlb22JYgOVdXE+EdmNrbngG dPVfFwABIAAgACAAIAAgACAA6oFLbRr/NY1sUfhT22JYgFNP+3wvZiZU0XlmWwlnSGUf/xEAASAA IAAgACAAIAAgADpOwE5IToGJWlB9WdtiWIDlXVxPH/8NAAEgACAAIAAgACAAIADbYliAMVkljYR2 EGIsZxMAASAAIAAgACAAIAAgAMaJkZioi7qLGv8LdwFPGk6CWVVP22K6Tj8AEQABIAAgACAAIAAg ACAAuk5YVNtiWICEdkFTJ1k4aMNfBnT1XxQAASAAIAAgACAAIAAgAC0ALQAtAABnfVmEdg1OAE6a Wy9mAGcIVAKQhHYPAAEgACAAIAAgACAAIAAtAC0ALQBaVwFjKHW6TkBif5UhAAEgACAAIAAgACAA IAAtAC0ALQBbAGZbhlNdAA1O405oiFsA/YCbUl0ALABbAM9+hlNdAA1ODFSOTlsAz36Mml0AG/8T AAEgACAAIAAgACAAIAAtAC0ALQA6XwOMAU8aTodlFlOEdqSLDFQfYRgAASAAIAAgACAAIAAgAC0A LQAtAAFPGk4OTpReWIAFgEtO9JWEdhwgkk6oUiWEAJUdIBcAASAAIAAgACAAIAAgAC0ALQAtAIFb On//UuVuDP8cIPeLXnm5WxNmAZBeeb6WHSAYAAEgACAAIAAgACAAIAAtAC0ALQAPXMNfbZBHkGKX OJcM/w1OgYnQY+BlSGXulZiYG/8UAAEgACAAIAAgACAAIAAtAC0ALQDbYliAL2ZAYgln6JDolYR2 i07FYBv/GgABIAAgACAAIAAgACAALQAtAC0A22JYgOJlCWccINF5ZlsnYB0gDP/IUwlnHCB6gi9n J2AdIBYAASAAIAAgACAAIAAgAC0ALQAtANtiWIDlXVxP6lMJZwBfy1kM/6FsCWfTfl9nHAABIAAg ACAAIAAgACAAEGKfUttiWIAsAAZ09V9IUUyILQAtAC0AGE/AeWKX1YuYW4R2TIAaTsNfAWAUAAEg ACAAIAAgACAAIAAYT8B5YpfVi5hblF53UQdZhHYgfSiNDk5hZ/ZOGAABIAAgACAAIAAgACAA2X6U XliABYAATipOfVlwU2GMGv9il9WLmFuEdmKX1Ys8eepODgABIAAgACAAIAAgACAA9H6kYkJsTIAF gIR26oEKXBoAASAAIAAgACAAIAAgAA9c034a/8ZRB1nlXVxPWlAxWSWNhk4M/2BPMVwvZsZRB1lA dzFZJY0YAAEse4xO6JAGUiAAAU8aToGJwE5ITjdohHa6Ti0ALQAtANtiWICXXE1PAJdCbAZSkGcU AAEgACAAIAAgACAAIABIaItPGv8wTjB1bFH4U4R2aFFil9tiWIBTT/t8EwABIAAgACAAIAAgACAA uk6bUsSJElIAl0JshJhLbYR2zWRcTx1g740SAAEgACAAIAAgACAAIABIaItPGv+CWVVPAF9VXLpO m1LEiRJSH/8TAAEgACAAIAAgACAAIADQZ+tfH5CIbTmNwVQBTxpOhHbbYliAoYsSUiAAASAAIAAg ACAAIAAgAIJZVU/bj0yI22JYgJdcTU8Al0JsBlKQZy0ALQAtAJ5bGGKAYuddGv8cILuU83chaotX HSARAAEgACAAIAAgACAAIAAtAC0ALQCXXE1P+lcsZxpSJ2CBiUJsEQABIAAgACAAIAAgACAALQAt AC0AlF7ld5ReGk8TThpO5XfGixEAASAAIAAgACAAIAAgAC0ALQAtAOVdXE/FXwdZ/H4IVIBi/YAN AAEgACAAIAAgACAAIAAtAC0ALQBMgBpOAWCmXg4AASAAIAAgACAAIAAgAC0ALQAtAHlyK1KgUgZS eZgfAAEgACAAIAAgACAAIAAgACAAA05laxBi14stAC0ALQAtAIJZVU+EZ/pe22JYgJdcTU9LThwg u5TzdyFqi1cdIA8AATEAATDlXVxPBlKQZwz/Fn82UpdcTU/0iw5mZk4b/xUAATIAATCIlPlbTIAj jahjBnQAl4GJhHblXVxPgGL9gA5OE04aTuV3xosb/yEAATMAATC/iwiMl1xNT4R29HalYwpOp34B MAtOp34OTnNep34M/4ZO44kAl4GJhHblXVxPgGL9gA5OE04aTuV3xosb/yQAATQAATC/iwiMGk7p fhhPwHmEdlhU5V03aCxnATAaTul+g4/uXYR2WFTlXTdoLGcM//lb1GsGUpBnDP/QY9ZTcVEnYHly KI0b/xcAATUAATDEiRJSl1xNT9yA+06EdpCWJ2BMgBpOAWCmXg5Ouk48aMFUKI2BiUJsG/8WAAE2 AAEwOWhuY4ZT8lPPfoyaDP8XUjpOuk5YVCB9KI2BiUJshHagUgZSeZgCMCAAATcAATD8fghUQGIJ ZwCXQmwGUpBn036cZwVuVVMM/7tTiWPNkQ1ZeZgM/1Jfs37FX4GJeZgM/3ZekmOPXgRZBnQVAAEg ACAAIAAgACAAIAAgACAA22JYgJdcTU8Al0JsBlKQZ55bGGJIaItPGv8cAAHQZydZi1c1dRRsvosH WWxR+FPbYliAOlPfVwCVLlXPfgZ0LQAtAC0AHCC7lPN3IWqLVx0ghGf6XhgAASx7CU7okAZSIAAg AOpUzJG7U/tbfmL0ZhpZLQAtAC0A22JYgCBuU5DQjyh1gGLnXRkAASAAIAAgACAAIAAgABNOmJio i7qLGv8cINti5V2+lh0gBlwUb9hTEGI6TgBOzXk4XgFgIwABIAAgACAAIAAgACAAZltYVKROQW0a /4JZVU8GdOOJ22LlXb6WhHawc7ZyPwCCWVVPAGcnWQt6pl4Tf+OJ22LlXe6VmJg/ABIAASAAIAAg ACAAIAAgAIVR6JDbYliAhHY7ToGJuWXVbMpTBlKQZxgAASAAIAAgACAAIAAgAC0ALQAtAEtmR1MB MN56WIABMEyATQECAAACAgAAAwIAAAQCAAAFAgAABgIAAAcCAAAIAgAACQIAAAoCAAALAgAADAIA AA0CAAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAA GwIAABwCAAAdAgAAHgIAAB8CAAAgAgAAIQIAACICAAAjAgAAJAIAACUCAAAmAgAAJwIAACgCAAAp AgAAKgIAACsCAAAsAgAALQIAAC4CAAAvAgAAMAIAADECAAAyAgAAMwIAADQCAAA1AgAANgIAADcC AAA4AgAAOQIAADoCAAA7AgAAPAIAAD0CAAA+AgAAPwIAAEACAABBAgAAQgIAAEMCAABEAgAARQIA AEYCAABHAgAASAIAAEkCAABKAgAASwIAAEwCAABNAgAATgIAAE8CAABQAgAAUQIAAFICAABTAgAA VAIAAFUCAABWAgAAVwIAAFgCAABZAgAAWgIAAFsCAABcAgAAXQIAAF4CAABfAgAAYAIAAGECAABi AgAAYwIAAGQCAABlAgAAZgIAAGcCAABoAgAAaQIAAGoCAABrAgAAbAIAAG0CAABuAgAAbwIAAHAC AABxAgAAcgIAAHMCAAB0AgAAdQIAAHYCAAB3AgAAeAIAAHkCAAB6AgAAewIAAHwCAAB9AgAAfgIA AIACAAD9////TwOMqFIBMOVdXE9uj2JjFAABIAAgACAAIAAgACAAhVHokNtiWIBIaItPqIu6ixr/ D1xOZ4R28FbRYBQAASAAIAAgACAAIAAgAIJZVU85aG5j22JYgJdcTU8JkOli22JYgCBuU5AWAAEg ACAAIAAgACAAIAAtAC0ALQC6Tk1i+1u/iwEwDnM0WQEwsHM6V9tiWIAb/xwAASAAIAAgACAAIAAg AC0ALQAtAIVR6JCoY1CDATAhaO1W22JYgAEwUX/cfttiWIABMKViClJ/XkpUEwABIAAgACAAIAAg ACAAE06YmKiLuosa/wFPGk4haO1W22JYgIBi510WAAEgACAAIAAgACAAIAAgACAAIWjtVttiWIBi Xw9fgYkoVyBP334tTkJsG1KwZQ4AASAAIAAgACAAIAAgAC0ALQAtAOFPb2DRUwNeGv8OAAEgACAA IAAgACAAIAAtAC0ALQCjW7KLxlEHWRr/DgABIAAgACAAIAAgACAALQAtAC0AO06YmKNbsosb/w4A ASAAIAAgACAAIAAgAC0ALQAtAJ9sGpCkTkFtG/8OAAEgACAAIAAgACAAIAAtAC0ALQAOVO1+zVOI mQIwFQABIAAgACAAIAAgACAAIAAgANtiWIAgblOQ0VNVXIuNv1IOTrBldFEgblOQGAABIAAgACAA IAAgACAAIAAgABNOmJga/4B7hlNbewmQDP82ZcaWdGUGdEJsTIBEjZllFQABIAAgACAAIAAgACAA IAAgAFBOfnYPbBFjCZAZUAmQBYCEdglOU5ALeo9eEwABIAAgACAAIAAgACAAIAAgANiaSGWAe4ZT W3sJkIR2CU4qTp9TGVIYAAEgACAAIAAgACAAIAAgACAAzk4cIIB7hlNja4dlhVG5Wx0gLGerjvuL +lGEduFPb2ASAAEgACAAIAAgACAAIAAgACAAgllVT9Bj2JqAe4ZTW3sJkB+Qpl4VAAEgACAAIAAg ACAAIAAgACAAYpfVi5hbgYnNkblwc1HobIR2gHuGU+FPb2AUAAEgACAAIAAgACAAIAAgACAA5V13 URr/22JYgCBuU5AGUpBnxIswT2iIGgABIAAgACAAIAAgACAAIAAgAC0ALQAJZ0hlgHuGU4dzCP9i l9WLuk5wZS8AgHuGUztgcGUJ/xoAASAAIAAgACAAIAAgACAAIAAtAC0AYpfVi1Vf1lOHcwj/VV/W U7pOcGUvAGKX1Yu6TnBlCf8cAAEgACAAIAAgACAAIAAgACAALQAtAPx+CFQQYp9Sh3MI/wlnSGWA e4ZTh3MqAFVf1lMQYp9Sh3MJ/yEAASAAIAAgACAAIAAgACAAIAAtAC0AnlsYYkhoi08a/9BnAU8a TjIAMAAxADAAdF7bYliAIG5TkHBlbmP5W9RrBlKQZxkAASx721bokAZSIAAgABlQCZAFgC9mJlQf d4R23ID7Ti0ALQAtAGKX1YsGdLqLDk6eW/WNCgABIAAgACAAIAAgACAAIAAgABR71YsUAAEgACAA IAAgACAAIAAtAC0ALQBmTmKX1Yt3U9uPTIgUe9WLhHZ5crlwGgABIAAgACAAIAAgACAALQAtAC0A SGiLTxr/0GcBTxpO22JYgEyIP2W6TotOO06he4R2FHvVixIAASAAIAAgACAAIAAgAF6X036EZxZT YpfViw5O036EZxZTYpfViw4AASAAIAAgACAAIAAgANN+hGcWU2KX1YuEdnlyuXAQAAEgACAAIAAg ACAAIAAtAC0ALQBil9WL7pWYmBpZN2gWUxAAASAAIAAgACAAIAAgAC0ALQAtAGKX1YuBiSB9036E ZxZTEAABIAAgACAAIAAgACAALQAtAC0AxIsGUgdoxlHTfoRnFlMOAAEgACAAIAAgACAAIAAtAC0A LQADgJhb036EZxZTFQABIAAgACAAIAAgACAALQAtAC0AYpfViwt6j17KU/Zl9JWJW5Jj036EZxZT GAABIAAgACAAIAAgACAAIAAgACAAgllVT81kXE/TfoRnFlNil9WLGv8cIG1RZWvVbB0gEQABIAAg ACAAIAAgACAALQAtAC0AbniaW2KX1YuBicpTQ2fNkRUAASAAIAAgACAAIAAgAC0ALQAtABZ/mVEE VIGJIH2EduaLxn6aW0lO9IsOZhIAASAAIAAgACAAIAAgAC0ALQAtABZ/NlJ3UVNPhHbEiwZSaIg8 aBIAASAAIAAgACAAIAAgAC0ALQAtAL6LoYvTfoRnFlNil9WLmJiTXhYAASAAIAAgACAAIAAgAC0A LQAtAPlb+HZzUTtOA4CYW/lXrYsM/+V3xotsj/t5FwABIAAgACAAIAAgACAALQAtAC0AsHM6V55b vWXTfoRnFlNil9WLDP/KU/ZlxIsGUhwAASAAIAAgACAAIAAgACAAIADGiZGYqIu6ixr/AU8aTjtO A4CYW4R2YpfVi4Bi510JZ1VPxIv3Th//DQABIAAgACAAIAAgACAAIAAgAMVgb2Yhat9i1WwWAAEg ACAAIAAgACAAIAAtAC0ALQCeWxhiYpfViwZSq04a/8Vgb2Yhat9iSGiLTxcAASAAIAAgACAAIAAg AC0ALQAtAH9PKHUcIMVgb2Yhat9i1WwdIIR2gGLnXYGJuXANAAEgACAAIAAgACAAIAAgACAAi1Ob UmKX1YvVbBgAASAAIAAgACAAIAAgAC0ALQAtAJ5bGGJil9WLBlKrThr/i1ObUmKX1Yshat9iSGiL TxcAASAAIAAgACAAIAAgAC0ALQAtAH9PKHUcIItTm1Jil9WL1WwdIIR2gGLnXYGJuXANAAEgACAA IAAgACAAIAAgACAATIg6TmKX1YvVbBgAASAAIAAgACAAIAAgAC0ALQAtAFMAVABBAFIATIg6TmKX 1YuEdnhRi1fulZiYPk6LTxIAASAAIAAgACAAIAAgAC0ALQAtAEyIOk5il9WLhHbNZFxPgYm5cBwA ASAAIAAgACAAIAAgACAAIACoi7qLGv/lTgtOYpfVi5hbhHYcIEyIOk5il9WLHSBIZZxngllVTx// PAAfIBAAASAAIAAgACAAIAAgAC0ALQAtAOBlhpj8Ww9cxH6oi7qLFQABIAAgACAAIAAgACAALQAt AC0A4GWGmPxbD1zEfqiLuouEdp5bvWVla6SaGAABIAAgACAAIAAgACAALQAtAC0A4GWGmPxbD1zE fqiLuouEdmKX1YuYWwt3wE5ITh//FwABIAAgACAAIAAgACAALQAtAC0A6GwPYeBlhpj8Ww9cxH6o i7qLhHYcIHeWMZYdIA4AASAAIAAgACAAIAAgACAAIAC6Tk1iS23Ei4BiL2cSAAEgACAAIAAgACAA IAAgACAAR1OnfkhyhHZil9WL0GPulYBi510gAAEgACAAIAAgACAAIAAgACAAnlsYYgZSq04a/wFP Gk6CWVVPA4DfW9tiWIBYVOVdGpA4XnNR6GyEdnFRJ2DulZiYEgABIAAgACAAIAAgACAAIAAgADEA ATBCbEyAqFI6Zw5OMmsbZxv/DwABIAAgACAAIAAgACAAIAAgADIAATBTkLdfzWSIWxv/DwABIAAg ACAAIAAgACAAIAAgADMAATAnYDxoeXK5cBv/EQABIAAgACAAIAAgACAAIAAgADQAATA7kJGPHWD0 fv2Am1Ib/xAAASAAIAAgACAAIAAgACAAIAA1AAEwn2wakP2Am1Ib/yAADwABIAAgACAAIAAgACAA IAAgADYAATBmW2BO/YCbUhv/DwABIAAgACAAIAAgACAAIAAgADcAATBnYkyI/YCbUhv/EQABIAAg ACAAIAAgACAAIAAgADgAATDiVh+WT1NcT/2Am1Ib/xgAASx7lE7okAZSIAAHUsxfToY0WceGPlwt AC0ALQBil9WLDlSEdsZ+goLlXVxPAF9VXBMAASAAIAAgACAAIAAgAPlb9GZzUS6VhHZMgE1P249M iMyAb2YDjOVnEwABIAAgACAAIAAgACAAgllVT8SJf5BlUUyAU0/AaIR2XG8oV86YaZYdAAEgACAA IAAgACAACjCzUqhSCFQMVNVsCzDEiZpbOgAtAC0A22JYgJdcTU97mBwgDmYBeAdo904dICAAFQAB IAAgACAAIAAgACAASGiLT6iLuosa/9WLKHUfZ4VRhHb5V62Lzphplh//FwABIAAgACAAIAAgACAA sGVYVOVdKFfViyh1H2fvU+VOj5YPYZ6PAJBYVOVdSE4f/xEAASAAIAAgACAAIAAgAMaJkZioi7qL Gv+CWVVPzo+lY7Bluk4RAAEgACAAIAAgACAAIACpi7BlWFTlXR9h11MwUgFPGk6HZRZTEwABIAAg ACAAIAAgACAAYYjPkdtiWIDlXVxPKI3PkYR26X5IZQdjB2gQAAEgACAAIAAgACAAIADbYliA5V1c T4R2Npa1aydgO2DTfg8AASAAIAAgACAAIAAgAEhoi08GUqtOGv95coprYpfVixYAASx7bVHokAZS IAAgAAFPGk7bYliAYpfVizhewYmEdvBW0WAOTvlbVnuiY6iLHgABIAAgACAAIAAgACAA8FbRYDEA Gv/Qjyh1hk7bYliAYpfVi4BiL2cM/9iPgYn4duFPEWKEdvR2yYlITh//KQABIAAgACAAIAAgACAA 8FbRYDIAGv/bYliA+ldCXJdcTU8I/4JZbmblXQn/DP8Al0JscGXPkYOPGlkM/4JZVU82ZTBS9GYa WUJsTICAe4ZTH/8gACEAASAAIAAgACAAIAAgAPBW0WAzABr/gllVTwRZBnRil9WLx48Lei1Oz344 XkeQMFJCbEyABYAcID1ypn4dIItO9k4f/yUAASAAIAAgACAAIAAgAPBW0WA0ABr/gllVTwlnSGUA X1VcLU7Ymu96uk5NYjtOqFL7W7+LLQAtABFUDnM0WWxR+FNmW2BO22JYgB//FwABIAAgACAAIAAg ACAA8FbRYDUAGv+CWVVPKFdil9WLLU6oi7qLqoVske6VmJgf/xkAASAAIAAgACAAIAAgAPBW0WA2 ABr/gllVT6mLWFTlXX9i+ovQY6RORI2ZZR93nlsnYB//HwABIAAgACAAIAAgACAA8FbRYDcAGv+C WVVPU2I0eDhexIlil9WLH//QY9iaVVMAThZTYpfVi4R2xlFueCdgH/8XAAEgACAAIAAgACAAIADw VtFgOAAa/4JZVU/QY0dTYpfViy1OhHafbBqQgGLnXR//HAABIAAgACAAIAAgACAA8FbRYDkAGv9H kDBSDU4MVEJsTIAFgAz/p2M2UmKX1Yv2ZfSVhHaAYuddH/8aAAEgACAAIAAgACAAIADwVtFgMQAw ABr/YpfVi4hfGlm6Tgz/gllVT1pQfVlil9WLsItVXx//HgABEDD5V62LOY0odREwMgA2ADAAMABD US8Auk4I/wVT7GJEjZllOY0BMEhTEJnKUwpOC05IUzaDuXBJewn/AgABJiAmIBMAAdiap37YeWZO ATCpUgZ0jFRMiD9luk5YVIBi/YDQY9iarYvDfiWEKgABEDD5V62L9mX0lREwMgAwADEAMgB0XjMA CGcgADIALQAgADMA5WXxbTNXATAzAAhnOQAtADEAMADlZQpOd20BMDMACGcxADYALQAxADcA5WUX U6xOMwABEDD5V62L+VthjBEwBFSnfqlSBnSMVNh5Zk4a/ztgwYgI/ztgz34GdAn/2HlmTgEw6JDo ldh5Zk4BMJ5SbFGkWztO+04BMEyIP2XokM9+BnQI/6lSIAAgACAAIAAgACAAIAAgACAAFQABIAAg ACAAIAAgACAAIAAgACAAIAAGdAEwO06hewEwh2VMgLpOWFRJeykALQABIAAgACAAIAD5W9iap36p UgZ0jFTYeWZOZWf0iwz/oWwJZ9dTMFITThpO+3zffq2Lw34M/wZc4GXVbM5OGGJldSdgaFG5ZU1P 0ommXqSL5XfYeWZODk6pUgZ0KwABhHblXVxPG/8oV0Bizk6LToR25V1cTy1OH2HJiTp/T04GdLqL L2UBYxv/5V1cTy1OO2AvZquIqFJMiItODP8NTv2AO06oUoxj4WPlXVxPgoJPWRv/82ArAAE6ToaY /FtcT4R29GYaWQEw9GZ9WXRToWwJZ31ZhHa5ZdVsATAdYO+NG//zYPRmfVmEdmdiTIiGmPxbhHY/ ZVZ7DP90UztgL2aXXw1OMFIvZQFjG//zYCwAAdl+bFH4U4KCAXc5jSh1DP9GT3RTDU7ld85OVU8E WQtOS2IM//Ng9GZ9WTBXBFkGdH1ZbFFxUXNR+3wI/z9lnF5sUXNRCf8sAHRTO2AvZg1Ol1+BiYaY LgAuAAEuAC4ALgAuAC4A+IuCWeVOCk6Edu6VmJgM//2QL2bPaypOqVIGdNh5Zk7lXVxPuk5YVEBi Ypf5Ww5O8FbRYIR2DP8gAIJZVU+KYuFjY2tueLllEVTOTgyAxY8fkBgAAdBjR1PqgauOTIAaTiB9 e1EM/xBihk4RYuxOxV97mGKX+VsOTuOJs1GEdv6LmJgCMC0AASAAIAAgAFVPnG8BgAhevnxpX4R2 /osLegZSq04M/xFi7E7OTnlZq44KTgt3MFKGThhPwHlMiD9l5V1cTwWAhHZnYkB3ATCkix93Dk7A b8VgDP8RVFVPnG8BgCwAAQheZltgTodl2Hn+iwt6hHYkTilZLU4M/2ZbGk+GTgVucGaEdgt3hV/q gfFdDk7lXVxPDP/Yjwln8FbRYEB3EWLsToR223f+dgIwIAC+fGlfhHb2ZfSVoXssAAEGdIR2mWzY dhRvw34M/0VcNnGKYhFihHYfd55bSHL2ZfSVxWC1UVhi2HYMgPpRDP/KYLaLS04WWQt3MFIRYvZl 9JWhewZ0hHb2dIiYDk7ulZiYDP8gAKmLLAABEWL5Wx91fVSMVPZl9JUJZ4ZOsGWki8aLDP/OTuBl D2HGi3CNEVRoUbBl6oERYqSLxouMVNBjR1MM/xFi7E7zYM5O2Y/MkY1RIWsvVCqCLAAQYjpOAE4N VBgAARwgsGXYeWZOHSAM/+ViCWewZXeNuXABMLBlPGhAXAEwaFGwZYR25V1cT7ZyAWACMCsAAQ3/ BW5wZoZO44mHZdh5ATBMiD9lqVIGdIR20olygqSL5XcM/wZSkGflXVxP/YCoUidgDU46X4R27pWY mAz/qYsnWbZb9GYaWYZO44nqgfFdhHb9gJtSEgABDk7eeolOm1IM/y5eqVLQY0dTTIg/ZeVdXE+E dglhpmAfYQIwJgABDf+GTuOJdl4uXqlSUVggkFxPOk4ATipOE04aThZThHZMiD9lqVIGdAEw2Hlm TkBiAJd3UQdZhHZMgBpOYl9hjA5ORlWhUjx56k4CMCIAAQ3/0GPYmkyIP2WpUgZ0ylOHZUyAuk5Y VIR29mX0laF7BnT9gJtSDP8AZ8h+0GNHU+VdXE9IZYdzylPlXVxPKI3PkQIwJAABDf+GTuOJ2JpI ZRpProuhewZ0hHaAYuddDP92XhqQx4/DfmBOEGI6TlNTio0aT66LsItVXwEwGk+uiztOAWO6ToR2 0olyggIwGwABDf8QYjpOCk74U4R2l1+bUqlSS2IM/39PS06fbBqQylNPUwOMSXvlXVxP9GagUhNO Gk4WUwIwJgABDf+fcYlgnlJsUYtOoVKEdgRZBnSAYuddGv8akMePsHM6V8N+YE4M/7BzOle5cMSL DP92XtBjm08nWc+RA4MsZ5tPZltYVMJTZ3ECMAoAARAw/FsIXoB7y04RMFsAVU+cb10AJQABIAAg ACAAIABVT5xvAYAIXjoA/VaFUVeEDVS6TptSRI2QbqF7BnQTTrZbATD5V62LE062WwEwTIAaTt56 iU6bUq2Lw34TTrZbG/8uAAEgACAAIAAgAAFPGk5mW2BOUX95cqZ+sosIXiwA/mbFYvtOWW0nWVF/ sGUI/wpOAl5sUfhTCf87YMGIqVIGdAEwWW1fbGNrQ1FwZW5jbFH4U+xyy3pjhItOATAtTiwAAQ9c AU8aTkBcG1IaToWP/FstTsNfO077Tkl72Jqhe0yAoVIsAE5THE4IXidZw18GdGZbVXjrWBv/WW1f bCdZZlsBMAVuTlMnWWZbeXKAkLKLCF4b/1ltX2wkAAH5V62LCF5UgAhUGk9vUhpPf5Ub/5aZLV66 Tk1iS23EiwheG/8tTv1WoXsGdBR4dnpiltGRjYcBTxpOFHh2ekBib1JAYn+VAjAuAAEgACAAIAAg AFVPAYAIXuViCWdBUxpZdF6EdgFPGk6hewZ0ylP5V62Lz36Mmgz/512ZWdCPKHXDXwZ0ZlsOTgRU zXm6Tk1iS23Ei4BiL2fnXZlZjYdlUf6LC3oM/ywAAQZc5XcNVAFPGk6eW0WW5V1cTy1OhHYXTxpZ eFGLV0hoi08OTv6LC3qFUblb+HbTfghUDP8gAPFtZVFFbfpRDP8akNdPE2bCYQz/DIAUTrlbE2aM Y+FjjFQmAAHNZFxPG/+yi/6LzFsJZ8BvxWAM//6LAlgUbBtsO23DjQz/kk6oUg5OSGiLTxR4qIsJ Z0hl0I8odQz/4FYMgPFt11NmW1hUImvOjwIwLgABIAAgACAAIABVTwGACF75V62L/osLemFnBnQF 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 ARFi2I8JZxpZEVz2ZfSVH/8RYoJZVU8Ld4VfEWKEdvZl9JUf/xEAASpOuk72ZfSVDk6GmPxb5V1c T/Zl9JWhixJSDk6JW5JjG/8ZAAHYeWZOKFflXVxPAF/LWU1SATAAX1VcLU4BMNN+X2cOVNBjR1P2 ZfSVoXsGdFZ7ZXUb/wkAAQlnSGUpUih19mX0lYBi510CMAsAASFqV1cDTiAAgllVT2KX+VsrY5hi H/8IAAErY5himltJTg5OpIvGixv/DwABhVHCieqBEWIM/4ZO44lcbw9hxovqgRFipIvldxv/BwAB pIvGixFihHYyaxtnG/8NAAERaMt6Y2tueIR2uk4fdcKJDk73TjxQwokb/w8AAWKX+VsrY5hiDP+d TzZx619QToR2a1EnWdh5wIsCMA0AAQCVLlU7TqF7MgApWTEAHFk6XxZTrYvDfiWEEAABLQAtAC0A LQAtAC0AgllVT1NiIJAAlS5VvnzxguJWH5YzAAEQMPlXrYv2ZfSVETAyADAAMQAyAHReMwAIZyAA MwAtACAANADxbTNXATAzAAhnMQAwAC0AMQAxAApOd20BMDMACGcxADcALQAxADgAF1OsTgEwMwAI ZzIANAAtADIANQB/Xt5dIAApAAEQMPlXrYv5W2GMETA7YM9+BnQBMACVLlU7YNF2ATA6U99Xz34G dAEwAJUuVc9+BnQBMDtOoXsAlS5VATDGUQdZq4jQY9RihHYAlS5VvnzxggIwLwABEDD5V62LOY0o dREwMwAyADAAMABDUS8Auk4I/wVT7GJEjZllOY0BMEhTEJkBMFpmtFvKUwpOC05IUzaDuXBJewn/ DFQATlVTTU9lZ5ROAZAATgEw4GV2UdZOmGJjYi0AASAAIAAgACAAJ1nokAZSAJUuVTtOoXv9kC9m zk4AlS5VLHsATr9+q4jQY9RiCk5lZwz/Kk66ToR2AJUuVf2Am1L9kIhfOl8CMEZPEGI6TgBOKk4A lS5V4lYflisAAYR2O06hew5UDP/Pfjhe+lGwc4R2AE4qTu6VmJgvZqF7BnT9gJtSDk7PfoyaDU6z jQIwAJUuVaF7BnTlXVxPQ1M0WQdO6n4M/wCVLlU7TqF7z2spWf2QLAABKFfZX4x4ATAmcVGGLU6m XsePDP+IXxFcCWf2ZfSVu1PQY0dT6oHxXYR2oXsGdIBi/YACMACVLlU7TqF7MgApWTEAHFk6XxZT rYvDfiWEDP+piwCVLlU7TisAAaF7KFcyAClZhVHbj0yIOl8WU62Lw34M/2ZbYE7FXwdZhHahewZ0 5XfGiwz/BnQFbvpXLGeEdqF7BnQdYO+NDP/jibNRoXsGdC1OOF7BiYR27pWYmAIwLQABMQAuACAA 4lYfli1OGE/AeYR2AJUuVbpOWFQRXAz/J1nokAZS/ZAvZi1OSXsgfSiNhHYM/xpO6X7uXStSiF8n WQz/AJUuVTtgU08aTul+iF++ltBjR1MsAA5gAwABSE6eUh//MQABMgAuACAAAJUuVbpOWFTPaylZ +lG7Uw5UDP+lYgCVhHY5jSh1io1lZ4qN2JoM/0ZPGk7pftiPL2ahbAlnnliobSwAL2a7U9xiv4ui WzdiLADYjy9mLgAuAC4ALgAuAC4AH/8nAAEzAC4AIAAAlS5Vuk5YVOVdXE/2ZfSVf5WGTgz/oWwJ Z4ZOwG/FYAz/+VuFX+VdXE87YC9m5U5TYuVdBYCEdsNfAWAM/4JZVU/Ab7FSH/8lAAE0AC4AIADi Vh+WLU47YC9mCWfgUSpOHCA6UjwA2BUBNFkdIAz/DU59WaF7BnQM/4JZVU8OTgtOXlz4dgRZH//l iyVOiVPYjy9mvVu5Wx//IgABNQAuACAAGk7pft56W435WwCVLlW6TlhUPE9OTqFswE5ITkhlnGcM /w5gSE6eUh//gllVT7tTwG+xUgCVLlW6TlhUH/8nAAE2AC4AIABcTzpOAJUuVTtOoXsM/+VOTVKh bGZbYE7Hj6F7BnTld8aLDP8NTuV3U5CCWVVPoXu6Tgz/gllVT85OgGIvZ3CNEVShewZ0H/8cAAE3 AC4AIAC6TgBOu3lMgAz/MVwmXnCNols3YuFPb2AM/4JZVU+hewZ0AJUuVYR2ols3YuFPb2Af/x4A ATgALgAgAACVLlUaTul+gllVT6F7BnQ/ACAAAJUuVTtOoXtaUJtOwE5ITuVdXE9NYv2A0GNHUxpO 6X4f/x4AATkALgAgAACVLlWXXE1PhHa6TlhUQW2oUidgJ1kM/wCVLlW6TlhUqFINTqhSMVyej0yA DP8OYEhOWXUf/yMAATEAMAAuACAAz2sha2xR+FO+i5pbAJUuVe52B2gM/wCVLlW6TlhUO2AvZsxa 2JoM/w1OP2EPYaVj11MM/w5gSE4DgDhoH/8YAAHlTgpOkXVRhgz/KFcAlS5VO06hezIAKVkxABxZ Ol8WU62Lw34GXJdfMFLjiVR7Af8iAAEAlS5VO06he4JZVU+gUjpf6oERYqF7BnQBMOqBEWLQY0dT ATDqgRFiwG+xUgIw/YB3UQdZhY06X4R2oXsGdP2Am1ICMBgAAQCVLlU7TqF7gllVT6F7BnQAlS5V 4lYflgEwgllVTwmQuk4BMLKAuk4BMFl1uk4CMBAAAQCVLlU7TqF7gllVT8BvsVIBMAOAOGgAlS5V 4lYflgIwEwABAJUuVTtOoXuCWVVPCFQGdDBXiVuSY/Zl9JWMVACVLlVBbQt6AjAVAAEAlS5VO06h e4JZVU/bj0yIols3YqF7BnQM/xpO6X4GUpBnDk6hewZ0AjAoAAEAlS5VO06he2ZbjFsKMACVLlU7 TqF7MgApWTEAHFk6XxZTrYvDfgswjGPhY0BiZluAYudduWXVbAz//YCpiwCVLlXiVh+WGk7pftBj R1MCMAoAARAw/FsIXoB7y04RMFsAVU+ccF0AGAABIAAgACAA71PjU+9TUE4I/0MAbwBjAGEAIABD AG8AbABhAAn/bFH4UwCVLlXPfgZ0EwABIAAgACAAGpAodTV1FGwI/0cARQAJ/05TV1MnWTpTAJUu Vc9+BnQdAAEgACAAIABIXOOBD2wI/1cAYQB0AHMAbwBuAHMAIABXAGEAdABlAHIACf9XUy1O/VY6 UwCVLlXPfgZ0LQABIAAgACAAO06he+9T41PvU1BObFH4UwlOKk4lhBpOQGLKUyROKk4AlS5V6JDo lQz/Jl6GmHBlfna6ToR2AJUuVeJWH5bOTuBlMFIJZxtS+l70dgCV+3zffhv/LQABO06hexqQKHU1 dRRsCP9HAEUACf9OU1dT21YBdwCVLlUaTqFSDP/6Xst6p07BVACVLlWEdrBlIG5TkCFqD18b/yhX V1MtTv1WSFzjgQ9sxpbiVsVi+04AlS5VLgABz34GdAz/G1IgkACVz5HUawpOdF6eWH+VMwANUIR2 c0/pfhv/Fk5MdVeEDVRmW5xeBmbrWHBRBnTlXSdZZltNAEIAQQAb/xdTrE4nWWZbATAXU6xOpE4a kCdZZlstAAEKTndtpE4akCdZZlsBMBdTrE4GdOVdJ1lmWwEwf4kXU+VdGk4nWWZb8W0zVxR4dnpi lnlyWICyiwheOwDlTpJOqFIBMC9U0VMBMMVgb2YPX/lXrYvBiX+VG/8tAAEGXEhR24+EdqF7BnQG dPVf034IVLKLCF4aWXRenlsYYqF7BnTPfoyaOwDobM2R11Oti7pOWFSEdh9hn2DKU8JTDk47APlX rYvOmDxo8W1lUUVt+lEBMGFnBnQtAAEFbnBmOwD+iwJYFGwbbHuPfmcBMDttw40BMJ5bGGInYDpf OwAakMePBFTNeZ5bRZZIaItPylM4bg9iSXu5ZQ9fRVEGUgOMqFLCU62Luk5YVIR2+Veti+1wxWAj AAE6TgpOQ1O2WwFPGk7QY5tPAJUuVflXrYsOTqhU4osM/3Zeq4gaWbZb5XcNVAFPGk5YgDpOAJUu VeJWH5aFj/xbfpjulQIwDgABLHsATuiQBlIM/wCVLlU7TqF7hHbqgRFioXsGdAsAAQBOATAAlS5V O06he4R20olygppbTU8dAAExAC4AIAAAlS5VO06he4R25V1cTwZSkGctAC0AAJUuVTtOoXuEdjtO gYnlXVxPlF7liy9mwE5ITh//GgABIAAgACAAAJUuVTtOoXvlXVxPhHbgUSpOeXK5cAz/AJUuVTtO oXvlXVxPYE7vYIGJQmwuABQAASAAIAAgAC0ALQAgAEhoi08GUpBnGv/ZjypOO06he+WLgllVT1pQ H/8cAAEyAC4AIAAAlS5VO06heyhXbFH4U4R20olygppbTU8tAC0ADk4KTvhTATALTl5cc1H7fJpb TU8uABgAAQCVLlU7TqF7Dk4LTl5clF7liy9mwE5ITnNR+3wf/yAAIAAtAC0AIAA6UixzBnS6ixQA ASAAIAAgAACVLlU7TqF7Dk4LTl5c/YAmVBBiOk4fd2NrhHYLZ8tTH/8eAAEzAC4AIABaUItOgYno bA9hHCCmXh0gLQAtABwgpl4dIIR27pWYmBr/oXsGdIR20XlmWydgDk56gi9nJ2AQAAFIaItPBlKQ Zxr/2Y8qTjtOoXs6TsBOSE4aTzFZJY0f/wsAAYxOATAAlS5VO06he4R26oERYtBjR1MfAAExAC4A IAARYuxOOk7ATkhOGk+riNBjR1Mf/y0ALQARYuxOhHb9gJtSL2YmVP2A3ID7TrBzKFeEduVdXE8f /wwAATIALgAgAKF7BnQFgIGJU1/DX4R2d5YxlhUAASAAIAAgAEyAOld3ljGWLQAtAHxfl1+fUwZ0 jFR8X5dfd5YxloR2NHjjiREAATMALgAgANBj2JrqgfFdoXsGdIBi/YCEduBRKk65ZdVsIAAeAAE0 AC4AIAChewZ0BYCEduqBEWJmW2BOLQAtABFi7E4vZiZUH3eEdg9hxoswUmZbYE6Eds2RgYknYB// IAAVAAEgACAAIAChewZ0BYCCWVVPZltgTh//oWwJZ/Zl9JVmW2BODmBITp5SH/8LAAEJTgEwAJUu VTtOoXuEduqBEWLAb7FSCgABMQAuACAAO06he19OAJeBicBvsVIMAAEyAC4AIACCWVVP249MiOqB EWLAb7FSH/8LAAEse4xO6JAGUgz/AJUuVeJWH5ahewZ0CQABAE4BMACVLlW6TlhUhHYRYwmQFgAB MQAuACAACZC6TtRrKHW6TvRmzZGBiQz/6lTNeQCVLlW6TlhUApAIVGBPH/8iAAENTgxUp07BVACV LlUM/4GJCZAodQ1ODFR7fItXhHa6Ti0ALQAgAEhlh3OLVwCVLlW6TlhUjFRIZcp2i1cAlS5Vuk5Y VCIAATIALgAgADBS6lTMkbtTfmIIVAKQhHa6Th//LQAtAGNrOF6EdttiWIAgblOQ2I8vZnZRg1sH WQmQhHbbYliAIG5TkCAADwABMwAuACAAYpfViwCVLlW6TlhUgYnobA9hhHbulZiYGAABNAAuACAA lF5YgLpOWFSEdtWLKHUtAC0A1YsodfZlgllVT8KJ31svZiZUCFQCkB//CQABjE4BMACVLlW6TlhU hHaFj/xbEQABMQAuACAAAJUuVTtOoXuEdjtOgYlMgCONS04ATgz/WWXDfgsAATIALgAgAFll/FsL Tl5chHYJTmVrpJoZAAEzAC4AIAAHY/xbC05eXPZlgYnobA9hhHbgUSpO7pWYmC0ALQD5W2GMDk7D XwZ07pWYmAsAASAALQAtACAAw18GdGZbnluMmkhoi08NAAEJTgEwAJUuVbpOWFQ4XsGJ7pWYmA5O 44mzUQoAATEALgAgALNbFWDcYr+LsGWiWzdiCwABMgAuACAADU7ld4JZVU+MWxBiAJXPkQsAATMA LgAgAA1O5XeCWVVP343bj6JbN2INAAHbVgEwgllVT1l1T08YT8B5AJUuVbpOWFQf/w8AATEALgAg ADpOwE5IThhPwHkAlS5Vuk5YVIGJcI0f/wwAATIALgAgAIJZVU9ZdU9PGE/AebpOTWIf/wsAAZRO ATAAlS5Vx48LegEwols3YqF7BnQQAAExAC4AIACCWVVPNHjjiQCVLlW6TlhUoXsGdL6WmJgf/w8A ASAAIAAgAACVz5GhbJ5S1WzQY0dTDP8OYEhOnlIf/wwAARhPwHkAlS5VWFQqWRFcDP8OYEhOnlIf /xIAAQCVLlW6TlhUAE5wjQz/ols3Yl9OJl5wjYZODP8OYEhOnlIf/xYAASAAIAAgAACVLlW6TlhU +lG7Uwz/MFKVXnJewE5IToZODP+CWVVP0XanYx//EwABMgAuACAAVVOTYgCVz5ENTkyIDP+BiRqQ x4/Hjwt6p2M2UtN+nGcXAAEzAC4AIAALdwt3J1lsUfhTL2aCWVVPWlCEdh//LQAtAKJbN2JEjZll hHahewZ0CwABNAAuACAAAJUuVaViSlSEdilSDk4KXxAAASAAIAAgAACVLlXlZaVi2I+BiRdUH/+C WVVP44mzUR//CwABbVEBMACVLlW6TlhUhHb2ZfSVoXsGdCAAATEALgAgAACVLlW6TlhU6lSbTvZl 9JUvZuBlSGWEdh//LQAtACAA9HalY0hlh3P2ZfSVATD0laVjSGWHc/Zl9JUOAAEyAC4AIAAAlS5V uk5YVPZl9JWhewZ0hHafUxlSCwABMwAuACAAgllVT9Bj2Jr2ZfSVSGWHcw8AASx7CU7okAZSDP8A lS5V4lYfloR2wG+xUg5OA4A4aAkAAQBOATAAlS5Vuk5YVIR2wG+xUiIAATEALgAgADtOoXvFX3uY hk7jiYR24FEqTsBvsVKfUwZ0LQAtAC0ALQAgAEhoi08GUpBnbJqvZRttAJdCbEJcIWsGdLqLFgAB LQAtAEhoi08GUpBn3U9lUOBWIH0OTsBvsVLgViB9BnS6iwEwbFFzXgZ0uoshAAEyAC4AIAARYiRO S2J6enp6DP//YsBOSE7Ab7FSC05eXB//LQAtAEhoi08GUpBn4FEqTk5PEGIsZ4R2wG+xUrll1Wwb AAE0AC4AIACCWVVP0GPUYgtOXlwf/+pUe3y6Tv2A0GPUYh//dmIKTmyaDP/Yj5dfAZAATgt6IAAJ AAGMTgEwAJUuVeJWH5aEdsBvsVIXAAExAC4AIAAaTul+3npbjQBOmlsIVAKQF1Qf/y0ALQAaTul+ 3npbjYR2KVIOTgpfDAABMgAuACAAgllVT/pey3riVlNPvnxeeR//GAABMwAuACAAP2FvZoR2+l7L ei0ALQDATkhOL2Y/YW9mH/86TsBOSE4Al4GJP2FvZh//CQABCU4BMACVLlXiVh+WhHYDgDhoCgAB MQABMACVLlUtToR2c1EulQdjB2gcAAGCWVVPA4A4aAtOXlwf/y0ALQDjU/SL4GXtUQz/SFHbj4R2 AJUuVaF7BnQM/8Vfe5haUDBSz5EWUwwAAXNRLpUaTul+B2MHaBQgSwBQAEkAy07Nfg8AAQOAOGgA lS5Vuk5YVIR24FEqTnNRLpUaTul+B2MHaA4AAdCPKHVzUS6VGk7pfgdjB2iEduBRKk7obA9huXAI AAEyAAEwAJXPkaGLElKhewZ0FgABIAAgAACVLlWhixJSNlKaW4R26GwPYblwLQAtACAAUwBNAEEA UgBUAJ9TGVILAAEgACAAY1uCgvJmv34OTjpT31fyZr9+DgABMwAuACAAAJUuVQdjB2iCWVVPBlLj iTBSuk4f/xEAATQALgAgAACVLlUaTul+Dk6hixJSDU4me/ZlDmBITp5SH/8YAAE1AC4AIACCWVVP 0XanYwCVLlXudgdohHaMWxBiIAAtAC0AimIAlc+RFlN0ZTpO9pYIAAEtAC0AAJXPkQZS44lsUQ9f CAAB21YBMACVLlUtToR26WBafxQAATEALgAgAFVTYJfAb7FS2I8NTkyILQAtALpOe3xMiDpOcZqo UgZ0uosUAAEyAC4AIACCWVVPeWLEiwtOXlwtAC0AeWLEiwtOXlyEdgdoxlGoUlxPDAABIAAgACAA w35gThr/1YvVi3lixIsrUrpOIQABMwAuACAAgllVT6F7BnQcIDpSNFkdIB//IAA6TsBOSE4aTwln HCA6UjRZHSAf/yAAgllVT3+QTVH0dqVjhHayUYF6EAABNAAuACAAC05eXA1OTZEIVLBlO06hewz/ DmBITp5SH/8UAAEgACAAIAApUih1HCC2nHycSGWUXh0gLQAtAC0ALQAgAEhoi08GUpBnDAABLHvb VuiQBlIM/wCVLlUaT66LhHahewZ0EAABMQAuACAAYE8vZiZU5XdTkACVLlUaT66LhHZcTyh1H/8N AAEyAC4AIADqVJtOGk+uiwBOmlsNToGJAF8f/wsAATMALgAgAACVLlUaT66LsovATkhOH/8NAAE0 AC4AIAAAlS5VGk+ui01ShHbGUQdZ5V1cTwoAATUALgAgABpPDlSBiVpQwE5ITj8ADQABNgAuACAA AJUuVRpProuEduBRKk7obA9huXAUAAEYTyiNols3Yg1noVIOTqJbN2KVYsmLATCxYihgBFkGdIBi 513QY0dTLAABEDD5V62L9mX0lREwMgAwADEAMgB0XjIACGcyADMALQAyADQA5WXxbTNXATAzAAhn MAA4AC0AMAA5AOVlCk53bQEwMwAIZzIAMgAtADIAMwDlZRdTrE4gACsAARAw+Veti/lbYYwRMKJb N2INZ6FSz34GdAEwols3Yg1noVI7TqF7ATCiWzdiDWehUrpOWFQBMACVLlXjTmiIATACXjpX6JDK U/h2c1HlXVxPuk5YVCAAKQABEDD5V62LOY0odREwMgA4ADAAMABDUQj/K1REjZllOY0BMEhTEJk5 jQEwE062WxRvsos5jQn/G/9PT79b334ATolbkmMM/zmNKHXqgQZ0G/8gAC0AASAAIAAgACAAAU8a ToR233qJTvJdz34xdadOwVTKU/dOPGhsj/t5MFL5W6JbN2KEdt96iU4M/6JbN2INZ6FS8l3PfhBi Ok47TrBbAU8aTh91e2tYW6FOhHYCMCsAAaJbN2INZ6FSU0/7fIR2l1voZS9mHCCiWzdiOGzcjy9m LHsATk1PHSAM/85Ools3YoR2nltFlgCXQmz6UdFTDP86TqJbN2LQY5tPH3djawln9048UIR2KwAB DWehUgz/Ll6pUqJbN2L0Zn1ZMFd/Tyh1p07BVAIwU0+wc4ZOHCBvgn1ZhHaiWw1nYl9hjAEwb4J9 WYR2gGIvZwEwb4J9WYR2ols3YnNR+3wBMG+CfVn/AAIEKgA8RQAADAAAAHRMAABEBwAArFEAAHwM AADeWgAArhUAACJfAADyGQAAYmMAADIeAABPZwAA/AEAAHNuAAAgCQAAt3kAAGQUAADDfwAAcBoA AGqHAADzAQAADo8AAJcJAACEmgAADRUAALahAAA/HAAAi6cAAPABAADPrQAANAgAAIO2AADoEAAA +cAAAF4bAAAGxwAASAEAAOzLAAAuBgAACtEAAEwLAABk1gAAphAAAGTfAACmGQAAkOkAALIDAAAI 7wAAKgkAAGb0AACIDgAAVvoAAHgUAAC6/wAA3BkAAJ4DAQDAHQAAswkBALIDAABBEgEAQAwAAA8X AQAOEQAAzxoBAM4UAACpHgEAqBgAAEEiAQBAHAAAtCYBAJAAAACKMQEAZgsAAMo4AQCmEgAAPD8B ABgZAAAsRQEACB8AAA1MAQDGBQAA6VQBAKIOAADvWwEAqBUAAP9kAQC4HgAAGGsBAK0EAABScAEA 5wkAAA57AQCjFAAA3oMBAHMdAABjiQEA1QIAAEORAQC1CgAAV5YBAMkPAADPmgEAQRQAAO+eAQBh GAAAk6MBAAUdAAASsQEAYQoAAOy8AQA7FgAAF8gBAEIBAAAz0QEAXgoAAJHdAQC8FgAAqeMBANQc AAAB7QEAEAYAAJ/yAQCuCwAALvgBAD0RAAC4/wEAxxgAAD0KAgAtAwAAEBICAAALAABqGAIAWhEA ACYgAgAWGQAATiUCAD4eAAAhKwIA7gMAAPMzAgDADAAAJ0ACAPQYAAAzRQIAAB4AANVJAgCEAgAA 4VACAJAJAACnWAIAVhEAAOFeAgCQFwAAlWgCACsBAACNbgIAIwcAAKt1AgBBDgAA/X4CAJMXAAA9 igIAtwIAAE2RAgDHCQAAZ5gCAOEQAACDowIA/RsAACesAgB9BAAATbECAKMJAACHtgIA3Q4AADG8 AgCHFAAA1scCAAkAAAC20AIA6QgAABbbAgBJEwAAPOECAG8ZAABw5wIAox8AAHntAgCPBQAAsfcC AMcPAACLAgMAoRoAABYMAwAIBAAA/BUDAO4NAADCHwMAtBcAAOEmAwDTHgAARS8DABQHAAABOgMA 0BEAAG1DAwA8GwAAdE4DACAGAAB4VwMAJA8AANZfAwCCFwAAxmYDAHIeAACjbwMAKwcAAP11AwCF DQAAN4EDAL8YAABzhQMA+xwAAIuIAwATIAAAsI8DABQHAABIlwMArA4AAJygAwAAGAAA16YDADse AACIrwMAyAYAAMC5AwAAEQAAhMEDAMQYAACkyAMA5B8AAHTQAwCVBwAA9toDABcSAADC3wMA4xYA AJDkAwCxGwAAc+8DAHEGAAC/9QMAvQwAAPH7AwDvEgAAYwgVAGMIAAAAAAAAAAAAABUAAAAAAAAA AgoAAAAJCBAAAAYQAJYgzQfJwAAABgMAAAsCOAAAAAAAAAAAACEBAADhAwQAywwEAHkTBAA5GgQA QyEEADkoBABBLwQASTYEAFE9BABZRAQAxUQEAA0AAgABAAwAAgBkAA8AAgABABEAAgAAABAACAD8 qfHSTWJQP18AAgABACoAAgAAACsAAgAAAIIAAgABAIAACAAAAAAAAAAAACUCBAAAAB0BgQACAMEE FAAAABUAAACDAAIAAACEAAIAAAChACIACQBkAPfvAQABAAIAyABoAQAAAAAAAOA/AAAAAAAA4D8B AFUAAgAIAH0ADAAAAAAAAANIAAIAAgB9AAwAAQABAMACogECAAIAfQAMAAIAAgBgRqIBAgACAH0A DAADAAMAYAOiAQIAAgB9AAwABAAEAOAHSAACAAIAfQAMAAUAAAEACUgAAgACAAACDgAAAAAAIQEA AAAA/gAAAAgCEAAAAAAA/gAdAQAAAAAAAQ8ACAIQAAEAAAD+AHcBAAAAAAABDwAIAhAAAgAAAP4A 4AEAAAAAQAEPAAgCEAADAAAA/gAdAQAAAAAAAQ8ACAIQAAQAAAD+AB0BAAAAAIABtwEIAhAABQAA AP4AHQEAAAAAAAEPAAgCEAAGAAAA/gAdAQAAAAAAAQ8ACAIQAAcAAAD+AB0BAAAAAAABDwAIAhAA CAAAAP4AHQEAAAAAAAEPAAgCEAAJAAAA/gAdAQAAAAAAAQ8ACAIQAAoAAAD+AB0BAAAAAAABDwAI AhAACwAAAP4AHQEAAAAAAAEPAAgCEAAMAAAA/gAdAQAAAAAAAQ8ACAIQAA0AAAD+AB0BAAAAAAAB DwAIAhAADgAAAP4AHQEAAAAAAAEPAAgCEAAPAAAA/gAdAQAAAAAAAQ8ACAIQABAAAQAEAB0BAAAA AAABDwAIAhAAEQABAAQAHQEAAAAAAAEPAAgCEAASAAEABAAdAQAAAAAAAQ8ACAIQABMAAQAEAB0B AAAAAAABDwAIAhAAFAABAAQAHQEAAAAAAAEPAAgCEAAVAAEABAAdAQAAAAAAAQ8ACAIQABYAAQAE AB0BAAAAAAABDwAIAhAAFwABAAQAHQEAAAAAAAEPAAgCEAAYAAEABAAdAQAAAAAAAQ8ACAIQABkA AQAEAB0BAAAAAAABDwAIAhAAGgABAAQAHQEAAAAAAAEPAAgCEAAbAAEABAAdAQAAAAAAAQ8ACAIQ ABwAAQAEAB0BAAAAAAABDwAIAhAAHQABAAQAHQEAAAAAAAEPAAgCEAAeAAEABAAdAQAAAAAAAQ8A CAIQAB8AAQAEAB0BAAAAAAABDwABAgYAAAABALIB/QAKAAAAAgCxAdYQAAABAgYAAAADALABAQIG AAEAAQCuAf0ACgABAAIArwHXEAAAAQIGAAEAAwCsAQECBgACAAEArgH9AAoAAgACAK0B2BAAAAEC BgACAAMArAG+AAwAAwABAK4BswGsAQMAvgAKAAQAAABIAGEBAQD9AAoABAACAGAB2RAAAL4A/AEE AAMAXwFIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgA SABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABI AEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgA SABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABI AEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgA SABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABI AEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgA SABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABI AEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAP0AAQIGAAUA AQCjAf0ACgAFAAIApQHaEAAAAQIGAAUAAwCkAQECBgAGAAEAowH9AAoABgACAKUB2xAAAAECBgAG AAMApAEBAgYABwABAKMB/QAKAAcAAgClAdwQAAABAgYABwADAKQBAQIGAAgAAQCjAf0ACgAIAAIA pQHdEAAAAQIGAAgAAwCkAQECBgAJAAEAowH9AAoACQACAKUB3hAAAAECBgAJAAMApAEBAgYACgAB ALkB/QAKAAoAAgC4Ad8QAAABAgYACgADAKQBAQIGAAsAAQC5Af0ACgALAAIAuAHgEAAAAQIGAAsA AwCkAQECBgAMAAEAuQH9AAoADAACALgB4RAAAAECBgAMAAMApAG+AAwADQABAKMBpQGkAQMAAQIG AA4AAQC2Af0ACgAOAAIAtQHiEAAAAQIGAA4AAwC0AQECBgAPAAEAvAH9AAoADwACALsB4xAAAAEC BgAPAAMAugEBAgYAEAABALwB/QAKABAAAgC7AeQQAAABAgYAEAADALoBAQIGABEAAQC8Af0ACgAR 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 AQAAAAAAAQ8ACAIQAH4AAQAEAB0BAAAAAAABDwAIAhAAfwABAAQAHQEAAAAAAAEPAAECBgBgAAEA vAH9AAoAYAACALsBGhEAAAECBgBgAAMAugEBAgYAYQABALwB/QAKAGEAAgC7ASkRAAABAgYAYQAD ALoBAQIGAGIAAQC8Af0ACgBiAAIAuwEqEQAAAQIGAGIAAwC6AQECBgBjAAEAvAH9AAoAYwACALsB KxEAAAECBgBjAAMAugEBAgYAZAABALwB/QAKAGQAAgC7ASwRAAABAgYAZAADALoBAQIGAGUAAQC8 Af0ACgBlAAIAuwEtEQAAAQIGAGUAAwC6AQECBgBmAAEAvAH9AAoAZgACALsBLhEAAAECBgBmAAMA ugEBAgYAZwABALwB/QAKAGcAAgC7AS8RAAABAgYAZwADALoBAQIGAGgAAQC8Af0ACgBoAAIAuwEw EQAAAQIGAGgAAwC6AQECBgBoAAYASQABAgYAaQABALwB/QAKAGkAAgC7ATERAAABAgYAaQADALoB AQIGAGkABgBIAAECBgBqAAEAvAH9AAoAagACALsBMhEAAAECBgBqAAMAugEBAgYAawABALwB/QAK AGsAAgC7ATMRAAABAgYAawADALoBAQIGAGwAAQC8Af0ACgBsAAIAuwE0EQAAAQIGAGwAAwC6Ab4A DABtAAEAvAG7AboBAwABAgYAbgABALwB/QAKAG4AAgC7ATURAAABAgYAbgADALoBAQIGAG8AAQC8 Af0ACgBvAAIAuwEaEQAAAQIGAG8AAwC6AQECBgBwAAEAvAH9AAoAcAACALsBNhEAAAECBgBwAAMA ugEBAgYAcQABALwB/QAKAHEAAgC7ATcRAAABAgYAcQADALoBAQIGAHIAAQC8Af0ACgByAAIAuwE4 EQAAAQIGAHIAAwC6AQECBgBzAAEAvAH9AAoAcwACALsBOREAAAECBgBzAAMAugEBAgYAdAABALwB /QAKAHQAAgC7AToRAAABAgYAdAADALoBAQIGAHUAAQC8Af0ACgB1AAIAuwE7EQAAAQIGAHUAAwC6 AQECBgB2AAEAvAH9AAoAdgACALsBPBEAAAECBgB2AAMAugEBAgYAdwABALwB/QAKAHcAAgC7AT0R AAABAgYAdwADALoBAQIGAHgAAQC8Af0ACgB4AAIAuwE+EQAAAQIGAHgAAwC6AQECBgB5AAEAvAH9 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 AAMAugEBAgYA4gABALwB/QAKAOIAAgC7AaMRAAABAgYA4gADALoBAQIGAOMAAQC8Af0ACgDjAAIA uwGkEQAAAQIGAOMAAwC6AQECBgDkAAEAvAH9AAoA5AACALsBpREAAAECBgDkAAMAugEBAgYA5QAB ALwB/QAKAOUAAgC7AaYRAAABAgYA5QADALoBAQIGAOYAAQC8Af0ACgDmAAIAuwGnEQAAAQIGAOYA AwC6AQECBgDnAAEAvAH9AAoA5wACALsBqBEAAAECBgDnAAMAugEBAgYA6AABALwB/QAKAOgAAgC7 AakRAAABAgYA6AADALoBAQIGAOkAAQC8Af0ACgDpAAIAuwGqEQAAAQIGAOkAAwC6AQECBgDqAAEA vAH9AAoA6gACALsBqxEAAAECBgDqAAMAugEBAgYA6wABALwB/QAKAOsAAgC7AawRAAABAgYA6wAD ALoBAQIGAOwAAQC8Af0ACgDsAAIAuwGtEQAAAQIGAOwAAwC6AQECBgDtAAEAvAH9AAoA7QACALsB rhEAAAECBgDtAAMAugEBAgYA7gABALwB/QAKAO4AAgC7ARoRAAABAgYA7gADALoBAQIGAO8AAQC8 Af0ACgDvAAIAuwGvEQAAAQIGAO8AAwC6AQECBgDwAAEAvAH9AAoA8AACALsBsBEAAAECBgDwAAMA ugEBAgYA8QABALwB/QAKAPEAAgC7AbERAAABAgYA8QADALoBAQIGAPIAAQC8Af0ACgDyAAIAuwGy EQAAAQIGAPIAAwC6AQECBgDzAAEAvAH9AAoA8wACALsBsxEAAAECBgDzAAMAugEBAgYA9AABALwB /QAKAPQAAgC7AbQRAAABAgYA9AADALoBAQIGAPUAAQC8Af0ACgD1AAIAuwG1EQAAAQIGAPUAAwC6 AQECBgD2AAEAvAH9AAoA9gACALsBthEAAAECBgD2AAMAugEBAgYA9wABALwB/QAKAPcAAgC7AbcR AAABAgYA9wADALoBAQIGAPgAAQC8Af0ACgD4AAIAuwG4EQAAAQIGAPgAAwC6AQECBgD5AAEAvAH9 AAoA+QACALsBuREAAAECBgD5AAMAugEBAgYA+gABALwB/QAKAPoAAgC7AboRAAABAgYA+gADALoB AQIGAPsAAQC8Af0ACgD7AAIAuwG7EQAAAQIGAPsAAwC6AQECBgD8AAEAvAH9AAoA/AACALsBGhEA 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 rAD9AAoAEAACAIEA6BEAAAECBgAQAAMApwABAgYAEQABAKwA/QAKABEAAgCBAOkRAAABAgYAEQAD AKcAAQIGABIAAQCsAP0ACgASAAIAgQDqEQAAAQIGABIAAwCnAAECBgATAAEArAD9AAoAEwACAIEA 6xEAAAECBgATAAMApwABAgYAFAABAKwA/QAKABQAAgCBAOwRAAABAgYAFAADAKcAAQIGABUAAQCs AP0ACgAVAAIAgQDtEQAAAQIGABUAAwCnAAECBgAWAAEArAD9AAoAFgACAIEA7hEAAAECBgAWAAMA pwABAgYAFwABAKwA/QAKABcAAgCBAO8RAAABAgYAFwADAKcAAQIGABgAAQCsAP0ACgAYAAIAgQDw EQAAAQIGABgAAwCnAAECBgAZAAEArAD9AAoAGQACAIEA8REAAAECBgAZAAMApwABAgYAGgABAKwA /QAKABoAAgCBAPIRAAABAgYAGgADAKcAAQIGABsAAQCsAP0ACgAbAAIAgQDzEQAAAQIGABsAAwCn AAECBgAcAAEArAD9AAoAHAACAIEA9BEAAAECBgAcAAMApwC+AAwAHQABAKwAgQCnAAMAAQIGAB4A AQCtAP0ACgAeAAIAggD1EQAAAQIGAB4AAwCoAAECBgAfAAEArAD9AAoAHwACAIEA9hEAAAECBgAf AAMApwDXAEQAigYAAGwCIgAiABAAIgAiACIAIgAiACIAIgAiACIAIgAQACIAIgAiACIAIgAiACIA IgAiACIAIgAiACIAIgAiABAAIgAIAhAAIAABAAQAHQEAAAAAAAEPAAgCEAAhAAEABAAdAQAAAAAA AQ8ACAIQACIAAQAEAB0BAAAAAAABDwAIAhAAIwABAAQAHQEAAAAAAAEPAAgCEAAkAAEABAAdAQAA AAAAAQ8ACAIQACUAAQAEAB0BAAAAAAABDwAIAhAAJgABAAQAHQEAAAAAAAEPAAgCEAAnAAEABAAd AQAAAAAAAQ8ACAIQACgAAQAEAB0BAAAAAAABDwAIAhAAKQABAAQAHQEAAAAAAAEPAAgCEAAqAAEA BAAdAQAAAAAAAQ8ACAIQACsAAQAEAB0BAAAAAAABDwAIAhAALAABAAQAHQEAAAAAAAEPAAgCEAAt AAEABAAdAQAAAAAAAQ8ACAIQAC4AAQAEAB0BAAAAAAABDwAIAhAALwABAAQAHQEAAAAAAAEPAAgC EAAwAAEABAAdAQAAAAAAAQ8ACAIQADEAAQAEAB0BAAAAAAABDwAIAhAAMgABAAQAHQEAAAAAAAEP AAgCEAAzAAEABAAdAQAAAAAAAQ8ACAIQADQAAQAEAB0BAAAAAAABDwAIAhAANQABAAQAHQEAAAAA AAEPAAgCEAA2AAEABAAdAQAAAAAAAQ8ACAIQADcAAQAEAB0BAAAAAAABDwAIAhAAOAABAAQAHQEA AAAAAAEPAAgCEAA5AAEABAAdAQAAAAAAAQ8ACAIQADoAAQAEAB0BAAAAAAABDwAIAhAAOwABAAQA HQEAAAAAAAEPAAgCEAA8AAEABAAdAQAAAAAAAQ8ACAIQAD0AAQAEAB0BAAAAAAABDwAIAhAAPgAB AAQAHQEAAAAAAAEPAAgCEAA/AAEABAAdAQAAAAAAAQ8AAQIGACAAAQCsAP0ACgAgAAIAgQD3EQAA AQIGACAAAwCnAAECBgAhAAEArAD9AAoAIQACAIEA+BEAAAECBgAhAAMApwABAgYAIgABAKwA/QAK ACIAAgCBAPkRAAABAgYAIgADAKcAAQIGACMAAQCsAP0ACgAjAAIAgQD6EQAAAQIGACMAAwCnAAEC BgAkAAEArAD9AAoAJAACAIEA+xEAAAECBgAkAAMApwABAgYAJQABAKwA/QAKACUAAgCBAPwRAAAB AgYAJQADAKcAAQIGACYAAQCsAP0ACgAmAAIAgQD9EQAAAQIGACYAAwCnAAECBgAnAAEArAD9AAoA JwACAIEA/hEAAAECBgAnAAMApwABAgYAKAABAKwA/QAKACgAAgCBAP8RAAABAgYAKAADAKcAAQIG ACkAAQCsAP0ACgApAAIAgQAAEgAAAQIGACkAAwCnAAECBgAqAAEArAD9AAoAKgACAIEAARIAAAEC BgAqAAMApwABAgYAKwABAKwA/QAKACsAAgCBAAISAAABAgYAKwADAKcAAQIGACwAAQCsAP0ACgAs AAIAgQADEgAAAQIGACwAAwCnAL4ADAAtAAEArACBAKcAAwABAgYALgABAK0A/QAKAC4AAgCCABgR AAABAgYALgADAKgAAQIGAC8AAQCsAP0ACgAvAAIAgQAEEgAAAQIGAC8AAwCnAAECBgAwAAEArAD9 AAoAMAACAIEABRIAAAECBgAwAAMApwABAgYAMQABAKwA/QAKADEAAgCBAAYSAAABAgYAMQADAKcA AQIGADIAAQCsAP0ACgAyAAIAgQAHEgAAAQIGADIAAwCnAAECBgAzAAEArAD9AAoAMwACAIEACBIA AAECBgAzAAMApwABAgYANAABAKwA/QAKADQAAgCBAAkSAAABAgYANAADAKcAvgAMADUAAQCsAIEA pwADAAECBgA2AAEArAD9AAoANgACAIEAChIAAAECBgA2AAMApwABAgYANwABAKwA/QAKADcAAgCB AAsSAAABAgYANwADAKcAAQIGADgAAQCsAP0ACgA4AAIAgQAMEgAAAQIGADgAAwCnAAECBgA5AAEA rAD9AAoAOQACAIEADRIAAAECBgA5AAMApwABAgYAOgABAKwA/QAKADoAAgCBAA4SAAABAgYAOgAD AKcAAQIGADsAAQCsAP0ACgA7AAIAgQAPEgAAAQIGADsAAwCnAL4ADAA8AAEArACBAKcAAwABAgYA PQABAKwA/QAKAD0AAgCBABASAAABAgYAPQADAKcAAQIGAD4AAQCsAP0ACgA+AAIAgQAREgAAAQIG AD4AAwCnAAECBgA/AAEArAD9AAoAPwACAIEAEhIAAAECBgA/AAMApwDXAEQAigYAAGwCIgAiACIA IgAiACIAIgAiACIAIgAiACIAIgAQACIAIgAiACIAIgAiACIAEAAiACIAIgAiACIAIgAQACIAIgAI AhAAQAABAAQAHQEAAAAAAAEPAAgCEABBAAEABAAdAQAAAAAAAQ8ACAIQAEIAAQAEAB0BAAAAAAAB DwAIAhAAQwABAAQAHQEAAAAAAAEPAAgCEABEAAEABAAdAQAAAAAAAQ8ACAIQAEUAAQAEAB0BAAAA AAABDwAIAhAARgABAAQAHQEAAAAAAAEPAAgCEABHAAEABAAdAQAAAAAAAQ8ACAIQAEgAAQAEAB0B AAAAAAABDwAIAhAASQABAAQAHQEAAAAAAAEPAAgCEABKAAEABAAdAQAAAAAAAQ8ACAIQAEsAAQAE AB0BAAAAAAABDwAIAhAATAABAAQAHQEAAAAAAAEPAAgCEABNAAEABAAdAQAAAAAAAQ8ACAIQAE4A AQAEAB0BAAAAAAABDwAIAhAATwABAAQAHQEAAAAAAAEPAAgCEABQAAEABAAdAQAAAAAAAQ8ACAIQ AFEAAQAEAB0BAAAAAAABDwAIAhAAUgABAAQAHQEAAAAAAAEPAAgCEABTAAEABAAdAQAAAAAAAQ8A CAIQAFQAAQAEAB0BAAAAAAABDwAIAhAAVQABAAQAHQEAAAAAAAEPAAgCEABWAAEABAAdAQAAAAAA AQ8ACAIQAFcAAQAEAB0BAAAAAAABDwAIAhAAWAABAAQAHQEAAAAAAAEPAAgCEABZAAEABAAdAQAA AAAAAQ8ACAIQAFoAAQAEAB0BAAAAAAABDwAIAhAAWwABAAQAHQEAAAAAAAEPAAgCEABcAAEABAAd AQAAAAAAAQ8ACAIQAF0AAQAEAB0BAAAAAAABDwAIAhAAXgABAAQAHQEAAAAAAAEPAAgCEABfAAEA BAAdAQAAAAAAAQ8AAQIGAEAAAQCsAP0ACgBAAAIAgQATEgAAAQIGAEAAAwCnAAECBgBBAAEArAD9 AAoAQQACAIEAFBIAAAECBgBBAAMApwABAgYAQgABAKwA/QAKAEIAAgCBABUSAAABAgYAQgADAKcA AQIGAEMAAQCsAP0ACgBDAAIAgQAWEgAAAQIGAEMAAwCnAAECBgBEAAEArAD9AAoARAACAIEAFxIA AAECBgBEAAMApwABAgYARQABAKwA/QAKAEUAAgCBABgSAAABAgYARQADAKcAAQIGAEYAAQCsAP0A CgBGAAIAgQAZEgAAAQIGAEYAAwCnAL4ADABHAAEArACBAKcAAwABAgYASAABAKwA/QAKAEgAAgCB ABoSAAABAgYASAADAKcAAQIGAEkAAQCsAP0ACgBJAAIAgQAbEgAAAQIGAEkAAwCnAAECBgBKAAEA rAD9AAoASgACAIEAHBIAAAECBgBKAAMApwABAgYASwABAKwA/QAKAEsAAgCBAB0SAAABAgYASwAD AKcAAQIGAEwAAQCsAP0ACgBMAAIAgQAeEgAAAQIGAEwAAwCnAAECBgBNAAEArAD9AAoATQACAIEA HxIAAAECBgBNAAMApwABAgYATgABAKwA/QAKAE4AAgCBACASAAABAgYATgADAKcAAQIGAE8AAQCs AP0ACgBPAAIAgQAhEgAAAQIGAE8AAwCnAAECBgBQAAEArAD9AAoAUAACAIEAIhIAAAECBgBQAAMA pwABAgYAUQABAKwA/QAKAFEAAgCBACMSAAABAgYAUQADAKcAAQIGAFIAAQCsAP0ACgBSAAIAgQAk EgAAAQIGAFIAAwCnAAECBgBTAAEArAD9AAoAUwACAIEAJRIAAAECBgBTAAMApwABAgYAVAABAKwA /QAKAFQAAgCBACYSAAABAgYAVAADAKcAAQIGAFUAAQCsAP0ACgBVAAIAgQAnEgAAAQIGAFUAAwCn AAECBgBWAAEArAD9AAoAVgACAIEAKBIAAAECBgBWAAMApwABAgYAVwABAKwA/QAKAFcAAgCBACkS AAABAgYAVwADAKcAAQIGAFgAAQCsAP0ACgBYAAIAgQAqEgAAAQIGAFgAAwCnAAECBgBZAAEArAD9 AAoAWQACAIEAKxIAAAECBgBZAAMApwABAgYAWgABAKwA/QAKAFoAAgCBACwSAAABAgYAWgADAKcA AQIGAFsAAQCsAP0ACgBbAAIAgQAtEgAAAQIGAFsAAwCnAAECBgBcAAEArAD9AAoAXAACAIEALhIA AAECBgBcAAMApwABAgYAXQABAKwA/QAKAF0AAgCBAC8SAAABAgYAXQADAKcAAQIGAF4AAQCsAP0A CgBeAAIAgQAwEgAAAQIGAF4AAwCnAAECBgBfAAEArAD9AAoAXwACAIEAMRIAAAECBgBfAAMApwDX AEQArgYAAGwCIgAiACIAIgAiACIAIgAQACIAIgAiACIAIgAiACIAIgAiACIAIgAiACIAIgAiACIA IgAiACIAIgAiACIAIgAIAhAAYAABAAQAHQEAAAAAAAEPAAgCEABhAAEABAAdAQAAAAAAAQ8ACAIQ AGIAAQAEAB0BAAAAAAABDwAIAhAAYwABAAQAHQEAAAAAAAEPAAgCEABkAAEABAAdAQAAAAAAAQ8A CAIQAGUAAQAEAB0BAAAAAAABDwAIAhAAZgABAAQAHQEAAAAAAAEPAAgCEABnAAEABAAdAQAAAAAA AQ8ACAIQAGgAAQAEAB0BAAAAAAABDwAIAhAAaQABAAQAHQEAAAAAAAEPAAgCEABqAAEABAAdAQAA AAAAAQ8ACAIQAGsAAQAEAB0BAAAAAAABDwAIAhAAbAABAAQAHQEAAAAAAAEPAAgCEABtAAEABAAd AQAAAAAAAQ8ACAIQAG4AAQAEAB0BAAAAAAABDwAIAhAAbwABAAQAHQEAAAAAAAEPAAgCEABwAAEA BAAdAQAAAAAAAQ8ACAIQAHEAAQAEAB0BAAAAAAABDwAIAhAAcgABAAQAHQEAAAAAAAEPAAgCEABz AAEABAAdAQAAAAAAAQ8ACAIQAHQAAQAEAB0BAAAAAAABDwAIAhAAdQABAAQAHQEAAAAAAAEPAAgC EAB2AAEABAAdAQAAAAAAAQ8ACAIQAHcAAQAEAB0BAAAAAAABDwAIAhAAeAABAAQAHQEAAAAAAAEP AAgCEAB5AAEABAAdAQAAAAAAAQ8ACAIQAHoAAQAEAB0BAAAAAAABDwAIAhAAewABAAQAHQEAAAAA AAEPAAgCEAB8AAEABAAdAQAAAAAAAQ8ACAIQAH0AAQAEAB0BAAAAAAABDwAIAhAAfgABAAQAHQEA AAAAAAEPAAgCEAB/AAEABAAdAQAAAAAAAQ8AAQIGAGAAAQCsAP0ACgBgAAIAgQAyEgAAAQIGAGAA AwCnAAECBgBhAAEArAD9AAoAYQACAIEAMxIAAAECBgBhAAMApwC+AAwAYgABAKwAgQCnAAMAAQIG AGMAAQCsAP0ACgBjAAIAgQA0EgAAAQIGAGMAAwCnAAECBgBkAAEArAD9AAoAZAACAIEANRIAAAEC BgBkAAMApwABAgYAZQABAKwA/QAKAGUAAgCBADYSAAABAgYAZQADAKcAAQIGAGYAAQCsAP0ACgBm AAIAgQA3EgAAAQIGAGYAAwCnAAECBgBnAAEArAD9AAoAZwACAIEAOBIAAAECBgBnAAMApwABAgYA aAABAKwA/QAKAGgAAgCBADkSAAABAgYAaAADAKcAAQIGAGkAAQCsAP0ACgBpAAIAgQA6EgAAAQIG AGkAAwCnAAECBgBqAAEArAD9AAoAagACAIEAOxIAAAECBgBqAAMApwABAgYAawABAKwA/QAKAGsA AgCBADwSAAABAgYAawADAKcAAQIGAGwAAQCsAP0ACgBsAAIAgQA9EgAAAQIGAGwAAwCnAAECBgBt AAEArAD9AAoAbQACAIEAPhIAAAECBgBtAAMApwABAgYAbgABAKwA/QAKAG4AAgCBAD8SAAABAgYA bgADAKcAAQIGAG8AAQCsAP0ACgBvAAIAgQBAEgAAAQIGAG8AAwCnAAECBgBwAAEArAD9AAoAcAAC AIEAQRIAAAECBgBwAAMApwABAgYAcQABAKwA/QAKAHEAAgCBAEISAAABAgYAcQADAKcAAQIGAHIA AQCsAP0ACgByAAIAgQBDEgAAAQIGAHIAAwCnAAECBgBzAAEArAD9AAoAcwACAIEARBIAAAECBgBz AAMApwABAgYAdAABAKwA/QAKAHQAAgCBAEUSAAABAgYAdAADAKcAAQIGAHUAAQCsAP0ACgB1AAIA gQBGEgAAAQIGAHUAAwCnAAECBgB2AAEArAD9AAoAdgACAIEARxIAAAECBgB2AAMApwABAgYAdwAB AKwA/QAKAHcAAgCBAEgSAAABAgYAdwADAKcAAQIGAHgAAQCsAP0ACgB4AAIAgQBJEgAAAQIGAHgA AwCnAL4ADAB5AAEArACBAKcAAwABAgYAegABAKwA/QAKAHoAAgCBAEoSAAABAgYAegADAKcAAQIG AHsAAQCsAP0ACgB7AAIAgQBLEgAAAQIGAHsAAwCnAAECBgB8AAEArAD9AAoAfAACAIEAExIAAAEC BgB8AAMApwABAgYAfQABAKwA/QAKAH0AAgCBAEwSAAABAgYAfQADAKcAAQIGAH4AAQCsAP0ACgB+ AAIAgQBNEgAAAQIGAH4AAwCnAAECBgB/AAEArAD9AAoAfwACAIEAThIAAAECBgB/AAMApwDXAEQA nAYAAGwCIgAiABAAIgAiACIAIgAiACIAIgAiACIAIgAiACIAIgAiACIAIgAiACIAIgAiACIAIgAQ ACIAIgAiACIAIgAIAhAAgAABAAQAHQEAAAAAAAEPAAgCEACBAAEABAAdAQAAAAAAAQ8ACAIQAIIA AQAEAB0BAAAAAAABDwAIAhAAgwABAAQAHQEAAAAAAAEPAAgCEACEAAEABAAdAQAAAAAAAQ8ACAIQ AIUAAQAEAB0BAAAAAAABDwAIAhAAhgABAAQAHQEAAAAAAAEPAAgCEACHAAEABAAdAQAAAAAAAQ8A CAIQAIgAAQAEAB0BAAAAAAABDwAIAhAAiQABAAQAHQEAAAAAAAEPAAgCEACKAAEABAAdAQAAAAAA AQ8ACAIQAIsAAQAEAB0BAAAAAAABDwAIAhAAjAABAAQAHQEAAAAAAAEPAAgCEACNAAEABAAdAQAA AAAAAQ8ACAIQAI4AAQAEAB0BAAAAAAABDwAIAhAAjwABAAQAHQEAAAAAAAEPAAgCEACQAAEABAAd AQAAAAAAAQ8ACAIQAJEAAQAEAB0BAAAAAAABDwAIAhAAkgABAAQAHQEAAAAAAAEPAAgCEACTAAEA BAAdAQAAAAAAAQ8ACAIQAJQAAQAEAB0BAAAAAAABDwABAgYAgAABAKwA/QAKAIAAAgCBAE8SAAAB AgYAgAADAKcAAQIGAIEAAQCsAP0ACgCBAAIAgQBQEgAAAQIGAIEAAwCnAAECBgCCAAEArAD9AAoA ggACAIEAURIAAAECBgCCAAMApwABAgYAgwABAKwA/QAKAIMAAgCBAFISAAABAgYAgwADAKcAAQIG AIQAAQCsAP0ACgCEAAIAgQBTEgAAAQIGAIQAAwCnAAECBgCFAAEArAD9AAoAhQACAIEAVBIAAAEC BgCFAAMApwABAgYAhgABAKwA/QAKAIYAAgCBAFUSAAABAgYAhgADAKcAAQIGAIcAAQCsAP0ACgCH AAIAgQBWEgAAAQIGAIcAAwCnAAECBgCIAAEArAD9AAoAiAACAIEAVxIAAAECBgCIAAMApwABAgYA iQABAKwA/QAKAIkAAgCBAFgSAAABAgYAiQADAKcAAQIGAIoAAQCsAP0ACgCKAAIAgQBZEgAAAQIG AIoAAwCnAAECBgCLAAEArAD9AAoAiwACAIEAWhIAAAECBgCLAAMApwABAgYAjAABAKwA/QAKAIwA AgCBAFsSAAABAgYAjAADAKcAvgAMAI0AAQCsAIEApwADAAECBgCOAAEArAD9AAoAjgACAIEAXBIA AAECBgCOAAMApwABAgYAjwABAKwA/QAKAI8AAgCBAF0SAAABAgYAjwADAKcAAQIGAJAAAQCsAP0A CgCQAAIAgQBeEgAAAQIGAJAAAwCnAAECBgCRAAEArAD9AAoAkQACAIEAXxIAAAECBgCRAAMApwC+ AAwAkgABAKwAgQCnAAMAAQIGAJMAAQCsAP0ACgCTAAIAgQBgEgAAAQIGAJMAAwCnAL4ADACUAAEA swCyALEAAwDXAC4AOAQAAJABIgAiACIAIgAiACIAIgAiACIAIgAiACIAIgAQACIAIgAiACIAEAAi AD4CEgC0AAAAAABAAAAAPAAAAAAAAAAdAA8AAwAAAgAAAAEAAAAAAAICmQACAAAJ7wAGAAcANwAA ALgBSAAAAAAAAgACANDJ6nn5us4RjIIAqgBLqQsCAAAAHAAAAAUAAADUj95W/otoiAAACwAAAGxR AF/+iwt6oYsSUmiIIQBBADEAAAAKAAAACQgQAAAGEACWIM0HycAAAAYDAAALAiAAAAAAAAAAAABw AAAA1WcEALNuBACXdQQAfXwEAN1/BAANAAIAAQAMAAIAZAAPAAIAAQARAAIAAAAQAAgA/Knx0k1i UD9fAAIAAQAqAAIAAAArAAIAAACCAAIAAQCAAAgAAAAAAAAAAAAlAgQAAAAdAYEAAgDBBBQAAAAV AAAAgwACAAAAhAACAAAAoQAiAAkAZAD37wEAAQACAMgAaAEAAAAAAADgPwAAAAAAAOA/AQBVAAIA CAB9AAwAAAAAAAADSAACAAIAfQAMAAEAAQDAAlYAAgACAH0ADAACAAIAYEZWAAIAAgB9AAwAAwAD AGADVgACAAIAfQAMAAQABADgB0gAAgACAH0ADAAFAAABAAlIAAIAAgAAAg4AAAAAAHAAAAAAAAcA AAAIAhAAAAABAAQAHQEAAAAAAAEPAAgCEAABAAEABAB3AQAAAAAAAQ8ACAIQAAIAAQAEAOABAAAA AEABDwAIAhAAAwABAAQAHQEAAAAAAAEPAAgCEAAEAAEABAAdAQAAAAAAAQ8ACAIQAAUAAQAEAB0B AAAAAAABDwAIAhAABgABAAQAHQEAAAAAAAEPAAgCEAAHAAEABAAdAQAAAAAAAQ8ACAIQAAgAAQAE AB0BAAAAAAABDwAIAhAACQABAAQAHQEAAAAAAAEPAAgCEAAKAAEABAAdAQAAAAAAAQ8ACAIQAAsA AQAEAB0BAAAAAAABDwAIAhAADAABAAQAHQEAAAAAAAEPAAgCEAANAAEABAAdAQAAAAAAAQ8ACAIQ AA4AAQAEAB0BAAAAAAABDwAIAhAADwABAAQAHQEAAAAAAAEPAAgCEAAQAAEABAAdAQAAAAAAAQ8A CAIQABEAAQAEAB0BAAAAAAABDwAIAhAAEgABAAQAHQEAAAAAAAEPAAgCEAATAAEABAAdAQAAAAAA AQ8ACAIQABQAAQAEAB0BAAAAAAABDwAIAhAAFQABAAQAHQEAAAAAAAEPAAgCEAAWAAEABAAdAQAA AAAAAQ8ACAIQABcAAQAEAB0BAAAAAAABDwAIAhAAGAABAAQAHQEAAAAAAAEPAAgCEAAZAAEABAAd AQAAAAAAAQ8ACAIQABoAAQAEAB0BAAAAAAABDwAIAhAAGwABAAQAHQEAAAAAAAEPAAgCEAAcAAEA BAAdAQAAAAAAAQ8ACAIQAB0AAQAEAB0BAAAAAAABDwAIAhAAHgABAAQAHQEAAAAAAAEPAAgCEAAf AAEABAAdAQAAAAAAAQ8AAQIGAAAAAQC1AP0ACgAAAAIA0ADWEAAAAQIGAAAAAwDUAAECBgABAAEA sAD9AAoAAQACAH8AYRIAAAECBgABAAMAqwC+AAwAAgABALAAfgCrAAMAAQIGAAMAAQCtAP0ACgAD AAIAggDZEAAAAQIGAAMAAwCoAAECBgAEAAEArgD9AAoABAACAFUAYhIAAAECBgAEAAMAqQABAgYA BQABAK4A/QAKAAUAAgBVANsQAAABAgYABQADAKkAAQIGAAYAAQCuAP0ACgAGAAIAVQBjEgAAAQIG AAYAAwCpAAECBgAHAAEArgD9AAoABwACAFUAZBIAAAECBgAHAAMAqQABAgYACAABAK4A/QAKAAgA AgBVAOMRAAABAgYACAADAKkAAQIGAAkAAQCuAP0ACgAJAAIAgADfEAAAAQIGAAkAAwCpAAECBgAK AAEArgD9AAoACgACAIAA5BEAAAECBgAKAAMAqQABAgYACwABAK4A/QAKAAsAAgCAAOURAAABAgYA CwADAKkAvgAMAAwAAQCuAFUAqQADAAECBgANAAEArQD9AAoADQACAIIA5hEAAAECBgANAAMAqAAB AgYADgABAKwA/QAKAA4AAgCBAGUSAAABAgYADgADAKcAAQIGAA8AAQCsAP0ACgAPAAIAgQBmEgAA AQIGAA8AAwCnAAECBgAQAAEArAD9AAoAEAACAIEAZxIAAAECBgAQAAMApwC+AAwAEQABAKwAgQCn AAMAAQIGABIAAQCsAP0ACgASAAIAgQBoEgAAAQIGABIAAwCnAAECBgATAAEArAD9AAoAEwACAIEA aRIAAAECBgATAAMApwABAgYAFAABAKwA/QAKABQAAgCBAGoSAAABAgYAFAADAKcAAQIGABUAAQCs AP0ACgAVAAIAgQBrEgAAAQIGABUAAwCnAL4ADAAWAAEArACBAKcAAwABAgYAFwABAKwA/QAKABcA AgCBAGwSAAABAgYAFwADAKcAvgAMABgAAQCsAIEApwADAAECBgAZAAEArQD9AAoAGQACAIIA9REA AAECBgAZAAMAqAABAgYAGgABAKwA/QAKABoAAgCBAPYRAAABAgYAGgADAKcAAQIGABsAAQCsAP0A CgAbAAIAgQD3EQAAAQIGABsAAwCnAAECBgAcAAEArAD9AAoAHAACAIEA+BEAAAECBgAcAAMApwAB AgYAHQABAKwA/QAKAB0AAgCBAPkRAAABAgYAHQADAKcAAQIGAB4AAQCsAP0ACgAeAAIAgQD6EQAA AQIGAB4AAwCnAAECBgAfAAEArAD9AAoAHwACAIEA+xEAAAECBgAfAAMApwDXAEQAZgYAAGwCIgAi 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 AIoSAAABAgYASAADAKcAAQIGAEkAAQCsAP0ACgBJAAIAgQCLEgAAAQIGAEkAAwCnAAECBgBKAAEA rAD9AAoASgACAIEAjBIAAAECBgBKAAMApwABAgYASwABAKwA/QAKAEsAAgD/AY0SAAABAgYASwAD AKcAAQIGAEwAAQCsAP0ACgBMAAIAgQCOEgAAAQIGAEwAAwCnAL4ADABNAAEArACBAKcAAwABAgYA TgABAKwA/QAKAE4AAgCBAI8SAAABAgYATgADAKcAAQIGAE8AAQCsAP0ACgBPAAIAgQCQEgAAAQIG AE8AAwCnAAECBgBQAAEArAD9AAoAUAACAIEAkRIAAAECBgBQAAMApwABAgYAUQABAKwA/QAKAFEA AgCBAJISAAABAgYAUQADAKcAAQIGAFIAAQCsAP0ACgBSAAIAgQCTEgAAAQIGAFIAAwCnAAECBgBT AAEArAD9AAoAUwACAIEAlBIAAAECBgBTAAMApwABAgYAVAABAKwA/QAKAFQAAgCBAJUSAAABAgYA VAADAKcAAQIGAFUAAQCsAP0ACgBVAAIAgQCWEgAAAQIGAFUAAwCnAAECBgBWAAEArAD9AAoAVgAC AIEAlxIAAAECBgBWAAMApwC+AAwAVwABAKwAgQCnAAMAAQIGAFgAAQCsAP0ACgBYAAIAgQCYEgAA AQIGAFgAAwCnAAECBgBZAAEArAD9AAoAWQACAIEAmRIAAAECBgBZAAMApwABAgYAWgABAKwA/QAK AFoAAgCBAJoSAAABAgYAWgADAKcAAQIGAFsAAQCsAP0ACgBbAAIAgQCbEgAAAQIGAFsAAwCnAAEC BgBcAAEArAD9AAoAXAACAIEAnBIAAAECBgBcAAMApwABAgYAXAAGAEkAAQIGAF0AAQCsAP0ACgBd AAIAgQCdEgAAAQIGAF0AAwCnAAECBgBdAAYASAABAgYAXgABAKwA/QAKAF4AAgCBAJ4SAAABAgYA XgADAKcAAQIGAF8AAQCsAP0ACgBfAAIAgQCfEgAAAQIGAF8AAwCnANcARACeBgAAbAIiACIAIgAi ACIAIgAQACIAIgAiACIAIgAiABAAIgAiACIAIgAiACIAIgAiACIAEAAiACIAIgAiACwALAAiAAgC EABgAAEABAAdAQAAAAAAAQ8ACAIQAGEAAQAEAB0BAAAAAAABDwAIAhAAYgABAAQAHQEAAAAAAAEP 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 HQEAAAAAAAEPAAgCEAAeAAEABAAdAQAAAAAAAQ8ACAIQAB8AAQAEAB0BAAAAAAABDwABAgYAAAAB AJ4B/QAKAAAAAgCZAdYQAAABAgYAAAADAJ0BAQIGAAEAAQDeAP0ACgABAAIAkACsEgAAAQIGAAEA AwDZAL4ADAACAAEA3gCPANkAAwC+AAoAAwAAAFkArwABAP0ACgADAAIAhgDZEAAAvgAAAgMAAwCq AFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkA WQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZ AFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkA WQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZ AFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkA WQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZ AFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkA WQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZ AFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAP8AAQIGAAQA AQDdAP0ACgAEAAIAYACtEgAAAQIGAAQAAwDYAAECBgAFAAEA3QD9AAoABQACAGAA2xAAAAECBgAF AAMA2AABAgYABgABAN0A/QAKAAYAAgBgAK4SAAABAgYABgADANgAAQIGAAcAAQDdAP0ACgAHAAIA YACvEgAAAQIGAAcAAwDYAAECBgAIAAEA3QD9AAoACAACAAIB3xAAAAECBgAIAAMA2AABAgYACQAB AN0A/QAKAAkAAgACAeQRAAABAgYACQADANgAAQIGAAoAAQDdAP0ACgAKAAIAAgHlEQAAAQIGAAoA AwDYAL4ADAALAAEA3QACAdgAAwABAgYADAABANwA/QAKAAwAAgCTAOIQAAABAgYADAADANcAAQIG AA0AAQDaAP0ACgANAAIAkQCwEgAAAQIGAA0AAwDVAAECBgAOAAEA2gD9AAoADgACAJEAsRIAAAEC BgAOAAMA1QABAgYADwABANoA/QAKAA8AAgCRALISAAABAgYADwADANUAAQIGABAAAQDaAP0ACgAQ AAIAkQCzEgAAAQIGABAAAwDVAAECBgARAAEA2gD9AAoAEQACAJEAtBIAAAECBgARAAMA1QABAgYA EgABANoA/QAKABIAAgCRALUSAAABAgYAEgADANUAAQIGABMAAQDaAP0ACgATAAIAkQC2EgAAAQIG ABMAAwDVAL4ADAAUAAEA2gCRANUAAwABAgYAFQABANwA/QAKABUAAgCTALcSAAABAgYAFQADANcA vgAMABYAAQDaAJEA1QADAAECBgAXAAEA2gD9AAoAFwACAJEAuBIAAAECBgAXAAMA1QABAgYAGAAB ANoA/QAKABgAAgCRALkSAAABAgYAGAADANUAAQIGABkAAQDaAP0ACgAZAAIAkQC6EgAAAQIGABkA AwDVAAECBgAaAAEA2gD9AAoAGgACAJEAuxIAAAECBgAaAAMA1QABAgYAGwABANoA/QAKABsAAgCR ALwSAAABAgYAGwADANUAAQIGABwAAQDaAP0ACgAcAAIAkQC9EgAAAQIGABwAAwDVAAECBgAdAAEA 2gD9AAoAHQACAJEAvhIAAAECBgAdAAMA1QABAgYAHgABANoA/QAKAB4AAgCRAL8SAAABAgYAHgAD ANUAAQIGAB8AAQDaAP0ACgAfAAIAkQDAEgAAAQIGAB8AAwDVANcARAB2CAAAbAIiACIAEAAgAiIA IgAiACIAIgAiACIAEAAiACIAIgAiACIAIgAiACIAEAAiABAAIgAiACIAIgAiACIAIgAiAAgCEAAg AAEABAAdAQAAAAAAAQ8ACAIQACEAAQAEAB0BAAAAAAABDwAIAhAAIgABAAQAHQEAAAAAAAEPAAgC EAAjAAEABAAdAQAAAAAAAQ8ACAIQACQAAQAEAB0BAAAAAAABDwAIAhAAJQABAAQAHQEAAAAAAAEP AAgCEAAmAAEABAAdAQAAAAAAAQ8ACAIQACcAAQAEAB0BAAAAAAABDwAIAhAAKAABAAQAHQEAAAAA AAEPAAgCEAApAAEABAAdAQAAAAAAAQ8ACAIQACoAAQAEAB0BAAAAAAABDwAIAhAAKwABAAQAHQEA AAAAAAEPAAgCEAAsAAEABAAdAQAAAAAAAQ8ACAIQAC0AAQAEAB0BAAAAAAABDwAIAhAALgABAAQA HQEAAAAAAAEPAAgCEAAvAAEABAAdAQAAAAAAAQ8ACAIQADAAAQAEAB0BAAAAAAABDwAIAhAAMQAB AAQAHQEAAAAAAAEPAAgCEAAyAAEABAAdAQAAAAAAAQ8ACAIQADMAAQAEAB0BAAAAAAABDwAIAhAA NAABAAQAHQEAAAAAAAEPAAgCEAA1AAEABAAdAQAAAAAAAQ8ACAIQADYAAQAEAB0BAAAAAAABDwAI AhAANwABAAQAHQEAAAAAAAEPAAgCEAA4AAEABAAdAQAAAAAAAQ8ACAIQADkAAQAEAB0BAAAAAAAB DwAIAhAAOgABAAQAHQEAAAAAAAEPAAgCEAA7AAEABAAdAQAAAAAAAQ8ACAIQADwAAQAEAB0BAAAA AAABDwAIAhAAPQABAAQAHQEAAAAAAAEPAAgCEAA+AAEABAAdAQAAAAAAAQ8ACAIQAD8AAQAEAB0B AAAAAAABDwABAgYAIAABANoA/QAKACAAAgCRAMESAAABAgYAIAADANUAAQIGACEAAQDaAP0ACgAh AAIAkQDCEgAAAQIGACEAAwDVAL4ADAAiAAEA2gCRANUAAwABAgYAIwABANwA/QAKACMAAgCTABgR AAABAgYAIwADANcAAQIGACQAAQDaAP0ACgAkAAIAkQDDEgAAAQIGACQAAwDVAAECBgAlAAEA2gD9 AAoAJQACAJEAxBIAAAECBgAlAAMA1QABAgYAJgABANoA/QAKACYAAgCRAMUSAAABAgYAJgADANUA AQIGACcAAQDaAP0ACgAnAAIAkQDGEgAAAQIGACcAAwDVAAECBgAoAAEA2gD9AAoAKAACAJEAxxIA AAECBgAoAAMA1QABAgYAKQABANoA/QAKACkAAgCRAMgSAAABAgYAKQADANUAAQIGACoAAQDaAP0A CgAqAAIAkQDJEgAAAQIGACoAAwDVAAECBgArAAEA2gD9AAoAKwACAJEAyhIAAAECBgArAAMA1QAB AgYALAABANoA/QAKACwAAgCRAMsSAAABAgYALAADANUAAQIGAC0AAQDaAP0ACgAtAAIAkQDMEgAA AQIGAC0AAwDVAAECBgAuAAEA2gD9AAoALgACAJEAzRIAAAECBgAuAAMA1QABAgYALwABANoA/QAK AC8AAgCRAM4SAAABAgYALwADANUAAQIGADAAAQDaAP0ACgAwAAIAkQDPEgAAAQIGADAAAwDVAL4A DAAxAAEA2gCRANUAAwABAgYAMgABANoA/QAKADIAAgCRANASAAABAgYAMgADANUAAQIGADMAAQDa AP0ACgAzAAIAkQDREgAAAQIGADMAAwDVAAECBgA0AAEA2gD9AAoANAACAJEA0hIAAAECBgA0AAMA 1QABAgYANQABANoA/QAKADUAAgCRANMSAAABAgYANQADANUAAQIGADYAAQDaAP0ACgA2AAIAkQDU EgAAAQIGADYAAwDVAAECBgA3AAEA2gD9AAoANwACAJEA1RIAAAECBgA3AAMA1QABAgYAOAABANoA /QAKADgAAgCRANYSAAABAgYAOAADANUAAQIGADkAAQDaAP0ACgA5AAIAkQDXEgAAAQIGADkAAwDV AAECBgA6AAEA2gD9AAoAOgACAJEA2BIAAAECBgA6AAMA1QABAgYAOwABANoA/QAKADsAAgCRANkS AAABAgYAOwADANUAAQIGADwAAQDaAP0ACgA8AAIAkQDaEgAAAQIGADwAAwDVAAECBgA9AAEA2gD9 AAoAPQACAJEA2xIAAAECBgA9AAMA1QABAgYAPgABANoA/QAKAD4AAgCRANwSAAABAgYAPgADANUA AQIGAD8AAQDaAP0ACgA/AAIAkQDdEgAAAQIGAD8AAwDVANcARACcBgAAbAIiACIAEAAiACIAIgAi ACIAIgAiACIAIgAiACIAIgAiACIAEAAiACIAIgAiACIAIgAiACIAIgAiACIAIgAiAAgCEABAAAEA BAAdAQAAAAAAAQ8ACAIQAEEAAQAEAB0BAAAAAAABDwAIAhAAQgABAAQAHQEAAAAAAAEPAAgCEABD AAEABAAdAQAAAAAAAQ8ACAIQAEQAAQAEAB0BAAAAAAABDwAIAhAARQABAAQAHQEAAAAAAAEPAAgC EABGAAEABAAdAQAAAAAAAQ8ACAIQAEcAAQAEAB0BAAAAAAABDwAIAhAASAABAAQAHQEAAAAAAAEP AAgCEABJAAEABAAdAQAAAAAAAQ8ACAIQAEoAAQAEAB0BAAAAAAABDwAIAhAASwABAAQAHQEAAAAA AAEPAAgCEABMAAEABAAdAQAAAAAAAQ8ACAIQAE0AAQAEAB0BAAAAAAABDwAIAhAATgABAAQAHQEA AAAAAAEPAAgCEABPAAEABAAdAQAAAAAAAQ8ACAIQAFAAAQAHAB0BAAAAAAABDwAIAhAAUQABAAcA HQEAAAAAAAEPAAgCEABSAAEABwAdAQAAAAAAAQ8ACAIQAFMAAQAHAB0BAAAAAAABDwAIAhAAVAAB AAcAHQEAAAAAAAEPAAgCEABVAAEABwAdAQAAAAAAAQ8ACAIQAFYAAQAHAB0BAAAAAAABDwAIAhAA VwABAAcAHQEAAAAAAAEPAAgCEABYAAEABwAdAQAAAAAAAQ8ACAIQAFkAAQAHAB0BAAAAAAABDwAI AhAAWgABAAcAHQEAAAAAAAEPAAgCEABbAAEABwAdAQAAAAAAAQ8ACAIQAFwAAQAHAB0BAAAAAIAB SQAIAhAAXQABAAcAHQEAAAAAAAEPAAgCEABeAAEABwAdAQAAAAAAAQ8ACAIQAF8AAQAHAB0BAAAA AAABDwABAgYAQAABANoA/QAKAEAAAgCRAN4SAAABAgYAQAADANUAAQIGAEEAAQDaAP0ACgBBAAIA kQDfEgAAAQIGAEEAAwDVAAECBgBCAAEA2gD9AAoAQgACAJEA4BIAAAECBgBCAAMA1QABAgYAQwAB ANoA/QAKAEMAAgCRAOESAAABAgYAQwADANUAAQIGAEQAAQDaAP0ACgBEAAIAkQDiEgAAAQIGAEQA AwDVAAECBgBFAAEA2gD9AAoARQACAJEA4xIAAAECBgBFAAMA1QABAgYARgABANoA/QAKAEYAAgCR AOQSAAABAgYARgADANUAAQIGAEcAAQDaAP0ACgBHAAIAkQDlEgAAAQIGAEcAAwDVAL4ADABIAAEA 2gCRANUAAwABAgYASQABANoA/QAKAEkAAgCRAOYSAAABAgYASQADANUAAQIGAEoAAQDaAP0ACgBK AAIAkQDnEgAAAQIGAEoAAwDVAAECBgBLAAEA2gD9AAoASwACAJEA6BIAAAECBgBLAAMA1QABAgYA TAABANoA/QAKAEwAAgCRAOkSAAABAgYATAADANUAAQIGAE0AAQDaAP0ACgBNAAIAkQDqEgAAAQIG AE0AAwDVAAECBgBOAAEA2gD9AAoATgACAJEA6xIAAAECBgBOAAMA1QABAgYATwABANoA/QAKAE8A AgCRAOwSAAABAgYATwADANUAAQIGAFAAAQDaAP0ACgBQAAIAkQDtEgAAAQIGAFAAAwDVAAECBgBR AAEA2gD9AAoAUQACAJEA7hIAAAECBgBRAAMA1QABAgYAUgABANsA/QAKAFIAAgCSAO8SAAABAgYA UgADANYAAQIGAFMAAQDaAP0ACgBTAAIAkQDwEgAAAQIGAFMAAwDVAAECBgBUAAEA2gD9AAoAVAAC AJEA8RIAAAECBgBUAAMA1QABAgYAVQABANoA/QAKAFUAAgCRAPISAAABAgYAVQADANUAAQIGAFYA AQDaAP0ACgBWAAIAkQDzEgAAAQIGAFYAAwDVAAECBgBXAAEA2gD9AAoAVwACAJEA9BIAAAECBgBX AAMA1QABAgYAWAABANoA/QAKAFgAAgCRAPUSAAABAgYAWAADANUAAQIGAFkAAQDaAP0ACgBZAAIA kQD2EgAAAQIGAFkAAwDVAAECBgBaAAEA2gD9AAoAWgACAJEA9xIAAAECBgBaAAMA1QABAgYAWwAB ANoA/QAKAFsAAgCRAPgSAAABAgYAWwADANUAAQIGAFsABgBJAAECBgBcAAEA2gD9AAoAXAACAJEA +RIAAAECBgBcAAMA1QABAgYAXAAGAEgAAQIGAF0AAQDaAP0ACgBdAAIAkQD6EgAAAQIGAF0AAwDV AAECBgBeAAEA2gD9AAoAXgACAJEA+xIAAAECBgBeAAMA1QABAgYAXwABANoA/QAKAF8AAgCRAPwS AAABAgYAXwADANUA1wBEAMIGAABsAiIAIgAiACIAIgAiACIAIgAQACIAIgAiACIAIgAiACIAIgAi ACIAIgAiACIAIgAiACIAIgAiACwALAAiACIACAIQAGAAAQAEAB0BAAAAAAABDwAIAhAAYQABAAQA HQEAAAAAAAEPAAgCEABiAAEABAAdAQAAAAAAAQ8ACAIQAGMAAQAEAB0BAAAAAAABDwAIAhAAZAAB AAQAHQEAAAAAAAEPAAgCEABlAAEABAAdAQAAAAAAAQ8ACAIQAGYAAQAEAB0BAAAAAAABDwAIAhAA ZwABAAQAHQEAAAAAAAEPAAgCEABoAAEABAAdAQAAAAAAAQ8ACAIQAGkAAQAEAB0BAAAAAAABDwAI AhAAagABAAQAHQEAAAAAAAEPAAgCEABrAAEABAAdAQAAAAAAAQ8ACAIQAGwAAQAEAB0BAAAAAAAB DwAIAhAAbQABAAQAHQEAAAAAAAEPAAgCEABuAAEABAAdAQAAAAAAAQ8ACAIQAG8AAQAEAB0BAAAA AAABDwAIAhAAcAABAAQAHQEAAAAAAAEPAAgCEABxAAEABAAdAQAAAAAAAQ8ACAIQAHIAAQAEAB0B AAAAAAABDwAIAhAAcwABAAQAHQEAAAAAAAEPAAgCEAB0AAEABAAdAQAAAAAAAQ8ACAIQAHUAAQAE AB0BAAAAAAABDwAIAhAAdgABAAQAHQEAAAAAAAEPAAgCEAB3AAEABAAdAQAAAAAAAQ8ACAIQAHgA AQAEAB0BAAAAAAABDwAIAhAAeQABAAQAHQEAAAAAAAEPAAgCEAB6AAEABAAdAQAAAAAAAQ8ACAIQ AHsAAQAEAB0BAAAAAAABDwAIAhAAfAABAAQAHQEAAAAAAAEPAAgCEAB9AAEABAAdAQAAAAAAAQ8A CAIQAH4AAQAEAB0BAAAAAAABDwAIAhAAfwABAAQAHQEAAAAAAAEPAAECBgBgAAEA2gD9AAoAYAAC AJEA/RIAAAECBgBgAAMA1QABAg