Error exectuing pants after clean-all : "Untranslateable Package"

806 views
Skip to first unread message

Tejal Desai

unread,
May 14, 2014, 2:17:42 AM5/14/14
to pants-devel
Hi,

I am getting this error after doing a clean-all.
I remember reading reading about new twitter commons publish.

Is the below error due to this?


Problem executing PythonBuilder for targets OrderedSet([PythonBinary(src/python/pants/bin/BUILD:pants)]): Traceback (most recent call last):
  File "/Users/tdesai/projects/pants/src/python/pants/commands/build.py", line 116, in _python_build
    conn_timeout=self.options.conn_timeout)
  File "/Users/tdesai/projects/pants/src/python/pants/python/python_builder.py", line 50, in build
    conn_timeout=conn_timeout).run()
  File "/Users/tdesai/projects/pants/src/python/pants/python/binary_builder.py", line 52, in run
    env = self.chroot.dump()
  File "/Users/tdesai/projects/pants/src/python/pants/python/python_chroot.py", line 189, in dump
    platforms=platforms)
  File "/Users/tdesai/projects/pants/src/python/pants/python/resolver.py", line 99, in resolve_multi
    platform=platform)
  File "/Users/tdesai/projects/pants/build-support/pants_deps.venv/lib/python2.7/site-packages/twitter/common/python/resolver.py", line 107, in resolve
    new_requirements.update(requires(highest_package, requirement))
  File "/Users/tdesai/projects/pants/build-support/pants_deps.venv/lib/python2.7/site-packages/twitter/common/python/resolver.py", line 81, in requires
    raise Untranslateable('Package %s is not translateable.' % package)
Untranslateable: Package SourcePackage(u'https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/b3ebdadaac0cc1376c98e5b2490d42effd99a2e4/twitter.common.collections-0.3.0.tar.gz') is not translateable.


Usage:
  pants_exe.py build (options) [spec] (build args)
  pants_exe.py build (options) [spec]... -- (build args)

Options:
  --version             show program's version number and exit
  --no-pantsrc          Specifies that pantsrc files should be ignored.
  --log-exit            Log an exit message on success or failure.
  -t CONN_TIMEOUT, --timeout=CONN_TIMEOUT
                        Number of seconds to wait for http connections.
  -i INTERPRETERS, --interpreter=INTERPRETERS
                        Constrain what Python interpreters to use.  Uses
                        Requirement format from pkg_resources, e.g.
                        'CPython>=2.6,<3' or 'PyPy'. By default, no
                        constraints are used.  Multiple constraints may be
                        added.  They will be ORed together.
  -v, --verbose         Show verbose output.

Builds the specified Python target(s). Use ./pants goal for JVM and other
targets.
./pants: line 36: /Users/tdesai/projects/pants/pants.pex: No such file or directory
./pants: line 36: exec: /Users/tdesai/projects/pants/pants.pex: cannot execute: No such file or directory
[tw-172-25-20-142 pants]$


Tien Nguyen

unread,
May 14, 2014, 3:13:04 AM5/14/14
to Tejal Desai, pants-devel

Have you tried rm build-support/*.venv?

Tejal Desai

unread,
May 14, 2014, 3:28:19 AM5/14/14
to Tien Nguyen, pants-devel
yep tried it right now.
Still get the same error.

I can run ./pants goal goals
But ./pants test <> which depends on twitter commons fails.

Thanks
Tejal

Tejal Desai

unread,
May 14, 2014, 3:29:22 AM5/14/14
to Tien Nguyen, pants-devel
On Wed, May 14, 2014 at 12:28 AM, Tejal Desai <tde...@twitter.com> wrote:
yep tried it right now.
Still get the same error.

I can run ./pants goal goals
But ./pants test <> which depends on twitter commons fails.
i meant  ./pants <test_target>

Eric Ayers

unread,
May 14, 2014, 7:12:40 AM5/14/14
to Tejal Desai, Tien Nguyen, pants-devel
These 'Package %s is not translatable' errors I believe are caused by failed downloads of pipy packages.  What I do to clear this up:

build-support/python/clean.sh && ./pants

Eventually it works.   Tien and I run into this all the time.  Foursquare and Twitter have setup internal mirrors to make those downloads more reliable. We tried doing some tricks with mirroring some files from requirements.txt files to local directories, but ran into a number of snags (--no-index in one of the requirments files, --egg specified somewhere), so we are trying to setup a mirror too.


Patrick Lawson

unread,
May 14, 2014, 10:28:38 AM5/14/14
to Eric Ayers, Tejal Desai, Tien Nguyen, pants-devel
I don't think we have a mirror for the twitter.commons packages that pants needs to bootstrap.  I also run into this problem very frequently, especially when my internet is even the slightest bit flakey.  Sometimes I just have to try repeatedly.

Benjy Weinberger

unread,
May 14, 2014, 12:23:27 PM5/14/14
to Patrick Lawson, Eric Ayers, Tejal Desai, Tien Nguyen, pants-devel
Yep, I get these quite frequently, sometimes with twitter.commons and sometimes with other 3rdparty dependencies. 

Should there be some python equivalent of the ivy2 cache?

Patrick Lawson

unread,
May 14, 2014, 5:42:11 PM5/14/14
to Benjy Weinberger, Eric Ayers, Tejal Desai, Tien Nguyen, pants-devel
=benjy: we desperately need some sort of caching here.  We can't even run the most trivial unit tests without network, and I was just bitten by this on the train.

Tejal Desai

unread,
May 14, 2014, 5:51:55 PM5/14/14
to Benjy Weinberger, Patrick Lawson, Eric Ayers, Tien Nguyen, pants-devel
I tried clean yesterday from home but it did not work.

I tried it again and again and again with no luck.

Then Johan asked me to go git clean -fdx first and it worked.

So not very sure if it was git clean or pipy was nice to me that particular attempt.

Thanks
Tejal

Eric Ayers

unread,
May 15, 2014, 8:49:39 AM5/15/14
to Tejal Desai, Benjy Weinberger, Patrick Lawson, Tien Nguyen, pants-devel, Ben Darnell

These suggestions are from Ben Darnell, one of our engineers who volunteered to take a look at the problem and suggested a manual localhost mirroring strategy.  After these changes,  I don't see any evidence that any network downloads are going on, so I think it would work around the issue.   I pushed a branch that takes all of his suggestions and created a local script to update my local directory with packages:

https://github.com/pantsbuild/pants/pull/125

Unfortunately, these changes may break someone else (removed --egg pip flag from pants_venv, removed --no-index from a requirements.txt file)

This morning (8-9 Eastern time) I ran this command about a dozen times and it did not fail even once.  

build-support/python/clean.sh && ./pants

 I don't see any evidence that any network downloads are going on, so I think it works. 

Here are the mods to my .bashrc

cat >>~/.bashrc <<EOT
# local pipy mirror for pants
export PIP_NO_INDEX=true
export PIP_FIND_LINKS=file://$HOME/python-packages
EOT

Here is the script that I use to refresh the directory

cat >~/bin/mirror_pipy.sh <<EOT
unset PIP_NO_INDEX
unset PIP_FIND_LINKS
mkdir -p ~/python-packages/

pip install -d ~/python-packages/ -r /Users/zundel/Src/pants/3rdparty/python/twitter/commons/requirements.txt 

pip install -d ~/python-packages/ -r /Users/zundel/Src/pants/3rdparty/python/requirements.txt 

EOT



—- Message from Ben:

FYI I have some experience setting up partial PYPI snapshots/mirrors (at Viewfinder we actually just used a git repo full of tarballs). It looks like pants ships a requirements.txt instead of setup.py, so the basic version would look like this:

To create a snapshot:

mkdir ~/python-packages
pip install -d ~/python-packages -r requirements.txt

To use the mirror, you add either a couple of environment variables or command-line flags when running pip:
export PIP_NO_INDEX=true
export PIP_FIND_LINKS=file://$HOME/python-packages

This tells pip to ignore the standard pypi index and only use this url instead. If you put the python-packages directory somewhere web-accessible you can of course change that file:// link to match.

— there was an error reported about “wheel” so Ben pulled another trick out of his hat —

Hmm, that requirements.txt file is odd. It’s saying “install these packages (and their dependencies) from pantsbuild.github.io and nowhere else”, butpantsbuild.github.io only contains the twitter packages (so it’s relying on their dependencies being installed previously). The —no-index flag should not be checked in to requirements.txt; it should be in the script that calls pip (so you can use different pip configurations for creating a mirror vs installing).

I’d recommend changing the requirements.txt file to not specify —no-index, but in the meantime I think this will work:

pip install -d ~/python-packages —find-links=file://$HOME/python-packages -r pants/3rdparty/python/requirements.txt
pip install -d ~/python-packages —find-links=file://$HOME/python-packages -r pants/3rdparty/python/twitter/commons/requirements.txt

The extra —find-links will get combined with the one in the requirements.txt file and let it see the files the first “install -d” downloaded.

—- Downloads were still coming from https://pypi.python.org/simple/

The pants scripts are passing —egg to pip (to work around some jetbrains bug):

https://github.com/pantsbuild/pants/blob/master/build-support/pants_venv#L67-74

   # Install as an egg so IDEs can grok all deps. Installing as sources may
   # run afoul of this bug: [http://youtrack.jetbrains.com/issue/PY-6477](http://youtrack.jetbrains.com/issue/PY-6477).
   # TODO: Remove the --egg once this is resolved. It won't work in the wheel world anyway.
   pip_extra="--egg"

Eggs are part of the semi-deprecated installation system that predated pip, and when this flag is used I think pip just calls out to that older system.

https://pip.pypa.io/en/latest/reference/pip_install.html#cmdoption--egg
WARNING: Because this option overrides pip’s normal install logic, requirements files may not behave as expected.)

I think this is causing the PIP environment variables to be ignored…

Benjy Weinberger

unread,
May 16, 2014, 9:54:45 PM5/16/14
to Eric Ayers, Tejal Desai, Patrick Lawson, Tien Nguyen, pants-devel, Ben Darnell
Oh hi Ben! :)

Eric Ayers

unread,
May 17, 2014, 8:29:39 AM5/17/14
to Benjy Weinberger, Tejal Desai, Patrick Lawson, Tien Nguyen, pants-devel, Ben Darnell

This morning, nothing I do seems to work and it is the same package (antlr_python_runtime) that is giving me fits .  I noticed this warning for the first time:

..

Downloading/unpacking antlr-python-runtime==3.1.3 (from -r /Users/zundel/Src/pants/3rdparty/python/requirements.txt (line 3))

  antlr-python-runtime an externally hosted file and may be unreliable

  antlr-python-runtime is potentially insecure and unverifiable.

  Downloading antlr_python_runtime-3.1.3.tar.gz (76kB): 76kB downloaded

  Running setup.py (path:/Users/zundel/Src/pants/build-support/pants_deps.venv/build/antlr-python-runtime/setup.py) egg_info for package antlr-python-runtime

...

  File "/Users/zundel/Src/pants/build-support/pants_deps.venv/lib/python2.7/site-packages/twitter/common/python/resolver.py", line 81, in requires

    raise Untranslateable('Package %s is not translateable.' % package)

Untranslateable: Package SourcePackage(u'http://antlr3.org/download/Python/antlr_python_runtime-3.1.3.tar.gz') is not translateable.


Fortunately, travis-ci is working so I am testing my change there :-/

    

Patrick Lawson

unread,
May 17, 2014, 11:03:40 AM5/17/14
to Eric Ayers, Benjy Weinberger, Tejal Desai, Tien Nguyen, pants-devel, Ben Darnell
antlr is also the package that gives me by far the most trouble.  I believe that "potentially insecure" warning is just because it's not hosted over HTTPS.  But I think the fact that it gives us so much trouble is because we're not caching and it's hosted on a shoddy server.

Eric Ayers

unread,
May 18, 2014, 8:45:57 AM5/18/14
to Patrick Lawson, Benjy Weinberger, Tejal Desai, Tien Nguyen, pants-devel, Ben Darnell

I don’t think what I have been running into this weekend is necessarily a download error after all, It seems to be that at least some packages are not marked as supporting python 2.7. I’ve been stumbling over Mox 0.5.3, for example. in:

/Users/zundel/Src/pants/build-support/pants_dev_deps.venv/lib/python2.7/site-packages/twitter/common/python/package.py
I added debugging to WheelPackage.compatible()

  def compatible(self, identity, platform=Platform.current()):
    tags = PEP425.iter_supported_tags(identity, platform)
    print("I support: ", self._supported_tags)
     print("Supported tags for %s, %s are: " % (identity, platform))
    for tag in tags:
      print("tag:", tag)
      if tag in self._supported_tags:
         return True
    return False

The debug output shows that for the ‘mox’ package, it expects the tag ‘py27’ for my mac, but that version is not listed on this package:


('I support: ', frozenset([(u'py27', u'none', u'any')]))


('Translating from binary package', WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/mox-0.5.3-py27-none-any.whl')) 
('I support: ', frozenset([(u'py27', u'none', u'any')])) 
Supported tags for CPython-2.6.8, macosx-10.9-x86_64 are:  
...

('tag:', ('py2', 'none', 'macosx_10_9_x86_64'))
('tag:', ('py26', 'none', 'macosx_10_9_x86_64'))
 ('tag:', ('py25', 'none', 'macosx_10_9_x86_64'))
('tag:', ('py24', 'none', 'macosx_10_9_x86_64'))
('tag:', ('py23', 'none', 'macosx_10_9_x86_64')) 
('tag:', ('py22', 'none', 'macosx_10_9_x86_64'))
('tag:', ('py21', 'none', 'macosx_10_9_x86_64'))
('tag:', ('py20', 'none', 'macosx_10_9_x86_64')) 
('tag:', ('cp2', 'none', 'macosx_10_9_x86_64'))
('tag:', ('cp26', 'none', 'macosx_10_9_x86_64'))
('tag:', ('cp25', 'none', 'macosx_10_9_x86_64')) 
('tag:', ('cp24', 'none', 'macosx_10_9_x86_64'))
('tag:', ('cp23', 'none', 'macosx_10_9_x86_64'))
('tag:', ('cp22', 'none', 'macosx_10_9_x86_64')) 
('tag:', ('cp21', 'none', 'macosx_10_9_x86_64'))

('tag:', ('cp20', 'none', 'macosx_10_9_x86_64'))
...

This doesn’t explain why the issue is intermittent, unless someone is changing requirements around or we are being served different binaries at different times from the pypi mirror.

Once I hard code that to return ‘True’, I run into problems with psutil too.

This one has been intermittent in the past. The package it is actually looking for is:

EggPackage(u’/Users/zundel/Src/pants/.pants.d/python/eggs/psutil-1.1.3-py2.6-macosx-10.4-x86_64.egg’)
The weird thing is, we downloaded a py2.7 egg package for pants_dev_deps.venv:

./build-support/pants_dev_deps.venv/lib/python2.7/site-packages/psutil-1.1.3-py2.7.egg-info/PKG-INFO

The other weird thing: Everything else downloaded to this point is a Wheel package. This is the only egg package in the cache:


Looking for package WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/coverage-3.6b1-cp27-none-macosx_10_9_intel.whl') 
Cache: 
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/coverage-3.6b1-cp27-none-macosx_10_9_intel.whl') 
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/unittest2-0.5.1-py27-none-any.whl') 
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/pystache-0.5.3-py26-none-any.whl') 
key SourcePackage(u'[https://pypi.python.org/packages/source/p/py/py-1.4.20.tar.gz#md5=5f1708be5482f3ff6711dfd6cafd45e0](https://pypi.python.org/packages/source/p/py/py-1.4.20.tar.gz#md5=5f1708be5482f3ff6711dfd6cafd45e0)')  
key SourcePackage(u'[https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.python-0.5.6.tar.gz](https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.python-0.5.6.tar.gz)')  
key SourcePackage(u'[https://pypi.python.org/packages/source/c/cov-core/cov-core-1.12.tar.gz#md5=4982572cfb179bbc004cf3c334686561](https://pypi.python.org/packages/source/c/cov-core/cov-core-1.12.tar.gz#md5=4982572cfb179bbc004cf3c334686561)')  
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/twitter.common.dirutil-0.3.0-py27-none-any.whl') 
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/twitter.common.threading-0.3.0-py27-none-any.whl') 
key WheelPackage(u'[https://pypi.python.org/packages/py2.py3/w/wheel/wheel-0.23.0-py2.py3-none-any.whl#md5=2a4b9b87a64441ad56c08bda1ea6e52a](https://pypi.python.org/packages/py2.py3/w/wheel/wheel-0.23.0-py2.py3-none-any.whl#md5=2a4b9b87a64441ad56c08bda1ea6e52a)')  
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/twitter.common.process-0.3.0-py27-none-any.whl') 
key SourcePackage(u'[https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.collections-0.3.0.tar.gz](https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.collections-0.3.0.tar.gz)')  
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/twitter.common.options-0.3.0-py26-none-any.whl') 
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/requests-2.0.0-py2.py3-none-any.whl') 
key SourcePackage(u'[https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.log-0.3.0.tar.gz](https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.log-0.3.0.tar.gz)')  
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/ansicolors-1.0.2-py26-none-any.whl') 
key SourcePackage(u'[https://pypi.python.org/packages/source/p/pytest-cov/pytest-cov-1.6.tar.gz#md5=6da54d74bde9d200de45068ba2ea637a](https://pypi.python.org/packages/source/p/pytest-cov/pytest-cov-1.6.tar.gz#md5=6da54d74bde9d200de45068ba2ea637a)')  
key SourcePackage(u'[https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.contextutil-0.3.0.tar.gz](https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.contextutil-0.3.0.tar.gz)')  
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/pytest-2.5.2-py27-none-any.whl') 
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/twitter.common.string-0.3.0-py26-none-any.whl') 
key SourcePackage(u'[https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.lang-0.3.0.tar.gz](https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.lang-0.3.0.tar.gz)')  
key WheelPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/setuptools-2.2-py2.py3-none-any.whl') 
key EggPackage(u'/Users/zundel/Src/pants/.pants.d/python/eggs/psutil-1.1.3-py2.6-macosx-10.4-x86_64.egg') 
key SourcePackage(u'[https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.quantity-0.3.0.tar.gz](https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.quantity-0.3.0.tar.gz)')  
Traceback (most recent call last): 
  File "/private/var/folders/42/8krm7t_50x98_6rxp7p0tv1w000205/T/tmpuEwXsE/.bootstrap/_twitter_common_python/pex.py", line 214, in execute 
    working_set = self._env.activate() 
  File "/private/var/folders/42/8krm7t_50x98_6rxp7p0tv1w000205/T/tmpuEwXsE/.bootstrap/_twitter_common_python/environment.py", line 122, in activate 
    self._working_set = self._activate() 
  File "/private/var/folders/42/8krm7t_50x98_6rxp7p0tv1w000205/T/tmpuEwXsE/.bootstrap/_twitter_common_python/environment.py", line 142, in _activate 
    resolved = working_set.resolve(all_reqs, env=self) 
  File "/private/var/folders/42/8krm7t_50x98_6rxp7p0tv1w000205/T/tmpuEwXsE/.bootstrap/pkg_resources.py", line 588, in resolve 
    raise DistributionNotFound(req) 
DistributionNotFound: psutil==1.1.3

Larry Hosken

unread,
May 19, 2014, 5:04:59 PM5/19/14
to Eric Ayers, Patrick Lawson, Benjy Weinberger, Tejal Desai, Tien Nguyen, pants-devel, Ben Darnell
I tried changing pants/python/resolver.py's conn_timeout to 9000 , and
then ran again w/lots of verbosity. LOL, these things can take a while
to download:

twitter.common.python: Packaging Markdown: 2875.0ms
twitter.common.python: Packaging twitter.common.collections: 2544.0ms
twitter.common.python: Packaging twitter.common.config: 2576.3ms
twitter.common.python: Packaging twitter.common.log: 2547.0ms
twitter.common.python: Packaging twitter.common.contextutil: 3182.6ms
twitter.common.python: Packaging pytest: 2617.1ms
twitter.common.python: Packaging twitter.common.lang: 2540.7ms
twitter.common.python: Packaging pystache: 2635.0ms
twitter.common.python: Packaging twitter.common.decorators: 2553.2ms
twitter.common.python: Packaging twitter.common.process: 2545.9ms
twitter.common.python: Packaging twitter.common.util: 2678.5ms
twitter.common.python: Packaging twitter.common.quantity: 3197.2ms
twitter.common.python: Packaging python-daemon: 2563.9ms
twitter.common.python: Packaging twitter.common.threading: 2545.8ms
twitter.common.python: Packaging pytest-cov: 2538.8ms
twitter.common.python: Packaging twitter.common.python: 2615.5ms
twitter.common.python: Packaging ansicolors: 2555.7ms
twitter.common.python: Packaging twitter.common.dirutil: 2945.1ms
twitter.common.python: Packaging antlr-python-runtime: 2560.0ms
twitter.common.python: Packaging twitter.common.options: 2542.9ms
twitter.common.python: Packaging py: 2596.8ms
twitter.common.python: Packaging twitter.common.string: 2532.4ms
twitter.common.python: Packaging lockfile: 2544.5ms
twitter.common.python: Packaging argparse: 219.3ms
twitter.common.python: Packaging cov-core: 2547.4ms

-Larry H.

Eric Ayers

unread,
May 20, 2014, 4:41:46 AM5/20/14
to Larry Hosken, Patrick Lawson, Benjy Weinberger, Tejal Desai, Tien Nguyen, pants-devel, Ben Darnell
I bumped conn_timeout in my code too and it seems to really help out.  I just got a VM for our pipy mirror is ready so I'm going to set that up as soon as I get a chance.

Tejal Desai

unread,
Jun 4, 2014, 3:01:49 PM6/4/14
to Eric Ayers, Larry Hosken, Patrick Lawson, Benjy Weinberger, Tien Nguyen, pants-devel, Ben Darnell
I hit this error again today for package twitter.common.contextutil-0.3.0.tar.gz

This is the third time when after hitting the issue, git clean -fdx solved my problem.

I tried running the script ./build-support/python/clean.sh and removing build-support/*.venv after the first failure.
However it failed again on the same error.


Thanks
Tejal

Patrick Lawson

unread,
Jun 4, 2014, 3:10:11 PM6/4/14
to Tejal Desai, Eric Ayers, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel, Ben Darnell
My solution to this has been to delete .pants.d and rerun, since that seems to be where those are cached.  I've not needed to go nuclear with a `git clean -fdx`

Eric Ayers

unread,
Jun 11, 2014, 11:39:13 AM6/11/14
to Patrick Lawson, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel, Ben Darnell

I want to take a minute to express how critical this issue is becoming for us here at Square. If I am working early in the morning or late at night I don’t notice it as much, but during the working day, I usually get a successful build of pants only once for every 10 or so tries. if I am trying to run ‘ci.sh’ to verify a checkin or rebuild pants.pex to distribute to end users I spend a lot of time waiting for the build to re-download stuff it has already downloaded many times before and then get stuck at:



Untranslateable: Package SourcePackage(u'[http://antlr3.org/download/Python/antlr_python_runtime-3.1.3.tar.gz](http://antlr3.org/download/Python/antlr_python_runtime-3.1.3.tar.gz)') is not translateable.

If I can’t build pants, I can’t support our users. We need a plan to be able to compile pants.pex and ci.sh reliably.

The root of the problem is claimed to be truncated downloads, but I’ve not been able to find the evidence of that. Can anyone steer me toward clear evidence of that? Maybe there is some code that is not cleanly closing a downloaded file or there is a transient error that we can retry?

I have tried a local pypi mirroring solution but after some help we were unable to get it to work. I’ve tried to install a pypi mirror with bandersnatch, but it takes gobs and gobs of disk space for old versions of python we will never need and many packages we probably won’t ever use. I haven’t found a way to pare it down. Does anyone have a better way? Also, from what I can tell, this won’t help when the untranslatable package is from the twitter repo.

Having said that, I don’t think this a pypi mirror is a great solution because it requires every developer of pants to set one up.

Maybe the solution is doing something to remember where the download went wrong and on the next invocation resume the bootstrapping process from the point where it failed?

From Patrick’s post above:
=benjy: we desperately need some sort of caching here…

If this is the solution we need, let’s start sketching that out. Do we need to fix this in the twitter commons resolver? In the pants resolver? Can we work this out so that ci.sh can also use the cache?

Brian Wickman

unread,
Jun 11, 2014, 12:16:57 PM6/11/14
to Eric Ayers, Patrick Lawson, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel, Ben Darnell
I had a few branches a while ago that refactored twitter.common.python to be a bit more composable.  Buried in one of those I played around with using requests for twitter.common.python.http and it dramatically improved the performance of crawling.

I found this diff in one of the branches, so it's probably an OK start: https://gist.github.com/wickman/8a3eb57ee35e84e6bc85

Johan Oskarsson

unread,
Jun 11, 2014, 12:31:24 PM6/11/14
to Brian Wickman, Eric Ayers, Patrick Lawson, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel, Ben Darnell
Would adding simple retries on timeouts be possible as a first step?

/Johan

Patrick Lawson

unread,
Jun 11, 2014, 12:40:50 PM6/11/14
to Ben Darnell, Eric Ayers, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel
I found that adding a global pip download cache eliminated this problem for me.  I just set this environment variable in my bash_profile:

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache


On Wed, Jun 11, 2014 at 12:33 PM, Ben Darnell <bdar...@squareup.com> wrote:
I took another stab at the partial pypi mirror and I think I have a fairly reliable setup now.  There are still a few packages downloaded from the network if i build from a completely clean checkout, but most packages are installed from local disk now (including the especially-problematic antlr package).

To setup the mirror:
$ mkdir ~/python-packages
$ pip install -d ~/python-packages --find-links=file://$HOME/python-packages -r 3rdparty/python/requirements.txt
$ pip install -d ~/python-packages --find-links=file://$HOME/python-packages -r 3rdparty/python/twitter/commons/requirements.txt

To use the mirror:
1) Set environment variables (these must be unset when setting up the mirror):
  $ export PIP_NO_INDEX=true
  $ export PIP_FIND_LINKS=file://$HOME/python-packages
2) Remove the --egg flag from build-support/pants_venv (this flag puts pip in a weird legacy mode that doesn't support the above variables)
3) Add 'file:///Users/yourname/python-packages/' to the python-repos.repos section in pants.ini (is there some way to set this without modifying the checked-in ini file?)
4) Run ./pants

-Ben

<div title="MDH:SSB3YW50IHRvIHRha2UgYSBtaW51dGUgdG8gZXhwcmVzcyBob3cgY3JpdGljYWwgdGhpcyBpc3N1 ZSBpcyBiZWNvbWluZyBmb3IgdXMgaGVyZSBhdCBTcXVhcmUuIMKgwqDCoElmIEkgYW0gd29ya2lu ZyBlYXJseSBpbiB0aGUgbW9ybmluZyBvciBsYXRlIGF0IG5pZ2h0IEkgZG9uJ3Qgbm90aWNlIGl0 IGFzIG11Y2gsIGJ1dCBkdXJpbmcgdGhlIHdvcmtpbmcgZGF5LCBJIHVzdWFsbHkgZ2V0IGEgc3Vj Y2Vzc2Z1bCBidWlsZCBvZsKgcGFudHMgb25seSBvbmNlIGZvciBldmVyeSAxMCBvciBzbyB0cmll cy4gwqBpZiBJIGFtIHRyeWluZyB0byBydW4gJ2NpLnNoJyB0byB2ZXJpZnkgYSBjaGVja2luIG9y IHJlYnVpbGQgcGFudHMucGV4IHRvIGRpc3RyaWJ1dGUgdG8gZW5kIHVzZXJzIEkgc3BlbmQgYSBs b3Qgb2YgdGltZSB3YWl0aW5nIGZvciB0aGUgYnVpbGQgdG8gcmUtZG93bmxvYWQgc3R1ZmYgaXQg aGFzIGFscmVhZHkgZG93bmxvYWRlZCBtYW55IHRpbWVzIGJlZm9yZSBhbmQgdGhlbiBnZXQgc3R1 Y2sgYXQ6PGRpdj4KPGJyPjwvZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj4KCgoKCgoKCjxwPlVudHJh bnNsYXRlYWJsZTogUGFja2FnZSBTb3VyY2VQYWNrYWdlKHUnPGEgaHJlZj0iaHR0cDovL2FudGxy My5vcmcvZG93bmxvYWQvUHl0aG9uL2FudGxyX3B5dGhvbl9ydW50aW1lLTMuMS4zLnRhci5neiIg dGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9hbnRscjMuPHdicj5vcmcvZG93bmxvYWQvUHl0aG9uL2Fu dGxyXzx3YnI+cHl0aG9uX3J1bnRpbWUtMy4xLjMudGFyLmd6PC9hPicpIGlzIG5vdCB0cmFuc2xh dGVhYmxlLjwvcD4KPHA+YGBgPC9wPjwvZGl2PjxkaXY+PGRpdj5JZiBJIGNhbid0IGJ1aWxkIHBh bnRzLCBJIGNhbid0IHN1cHBvcnQgb3VyIHVzZXJzLiAmbmJzcDsgJm5ic3A7V2UgbmVlZCBhIHBs YW4gdG8gYmUgYWJsZSB0byBjb21waWxlIHBhbnRzLnBleCBhbmQgY2kuc2ggcmVsaWFibHkuICZu YnNwOzwvZGl2PjxkaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGUgcm9v dCBvZiB0aGUgcHJvYmxlbSBpcyBjbGFpbWVkIHRvIGJlIHRydW5jYXRlZCBkb3dubG9hZHMsIGJ1 dCBJJ3ZlIG5vdCBiZWVuIGFibGUgdG8gZmluZCB0aGUgZXZpZGVuY2Ugb2YgdGhhdC4gJm5ic3A7 Q2FuIGFueW9uZSBzdGVlciBtZSB0b3dhcmQgY2xlYXIgZXZpZGVuY2Ugb2YgdGhhdD8gJm5ic3A7 TWF5YmUgdGhlcmUgaXMgc29tZSBjb2RlIHRoYXQgaXMgbm90IGNsZWFubHkgY2xvc2luZyBhIGRv d25sb2FkZWQgZmlsZSBvciB0aGVyZSBpcyBhIHRyYW5zaWVudCBlcnJvciB0aGF0IHdlIGNhbiBy ZXRyeT88L2Rpdj4KPGRpdj48YnI+PC9kaXY+PGRpdj5JIGhhdmUgdHJpZWQgYSBsb2NhbCBweXBp IG1pcnJvcmluZyBzb2x1dGlvbiBidXQgYWZ0ZXIgc29tZSBoZWxwIHdlIHdlcmUgdW5hYmxlIHRv IGdldCBpdCB0byB3b3JrLiAmbmJzcDtJJ3ZlIHRyaWVkIHRvIGluc3RhbGwgYSBweXBpIG1pcnJv ciB3aXRoIGJhbmRlcnNuYXRjaCwgYnV0IGl0IHRha2VzIGdvYnMgYW5kIGdvYnMgb2YgZGlzayBz cGFjZSBmb3Igb2xkIHZlcnNpb25zIG9mIHB5dGhvbiB3ZSB3aWxsIG5ldmVyIG5lZWQgYW5kIG1h bnkgcGFja2FnZXMgd2UgcHJvYmFibHkgd29uJ3QgZXZlciB1c2UuICZuYnNwO0kgaGF2ZW4ndCBm b3VuZCBhIHdheSB0byBwYXJlIGl0IGRvd24uICZuYnNwO0RvZXMgYW55b25lIGhhdmUgYSBiZXR0 ZXIgd2F5PyAmbmJzcDsgQWxzbywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgd29uJ3QgaGVs cCB3aGVuIHRoZSB1bnRyYW5zbGF0YWJsZSBwYWNrYWdlIGlzIGZyb20gdGhlIHR3aXR0ZXIgcmVw by4gJm5ic3A7PC9kaXY+CjxkaXY+PGJyPjwvZGl2PjxkaXY+SGF2aW5nIHNhaWQgdGhhdCwgSSBk b24ndCB0aGluayB0aGlzIGEgcHlwaSBtaXJyb3IgaXMgYSBncmVhdCBzb2x1dGlvbiBiZWNhdXNl IGl0IHJlcXVpcmVzIGV2ZXJ5IGRldmVsb3BlciBvZiBwYW50cyB0byBzZXQgb25lIHVwLiAmbmJz cDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk1heWJlIHRoZSBzb2x1dGlvbiBpcyBkb2luZyBz b21ldGhpbmcgdG8gcmVtZW1iZXIgd2hlcmUgdGhlIGRvd25sb2FkIHdlbnQgd3JvbmcgYW5kIG9u IHRoZSBuZXh0IGludm9jYXRpb24gcmVzdW1lIHRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MgZnJv bSB0aGUgcG9pbnQgd2hlcmUgaXQgZmFpbGVkPyAmbmJzcDs8YnI+CjwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+RnJvbSBQYXRyaWNrJ3MgcG9zdCBhYm92ZTo8L2Rpdj48ZGl2PjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTphcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4Ij49YmVuank6IHdl IGRlc3BlcmF0ZWx5IG5lZWQgc29tZSBzb3J0IG9mIGNhY2hpbmcgaGVyZS4uLjwvc3Bhbj48L2Rp dj48L2Rpdj48L2Rpdj48ZGl2Pjxicj48L2Rpdj4KPGRpdj5JZiB0aGlzIGlzIHRoZSBzb2x1dGlv biB3ZSBuZWVkLCBsZXQncyBzdGFydCBza2V0Y2hpbmcgdGhhdCBvdXQuICZuYnNwO0RvIHdlIG5l ZWQgdG8gZml4IHRoaXMgaW4gdGhlIHR3aXR0ZXIgY29tbW9ucyByZXNvbHZlcj8gJm5ic3A7SW4g dGhlIHBhbnRzIHJlc29sdmVyPyAmbmJzcDtDYW4gd2Ugd29yayB0aGlzIG91dCBzbyB0aGF0IGNp LnNoIGNhbiBhbHNvIHVzZSB0aGUgY2FjaGU/PC9kaXY+PGRpdj4KPGJyPjwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGJyPjxk aXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBXZWQsIEp1biA0LCAyMDE0IGF0IDM6MTAgUE0sIFBh dHJpY2sgTGF3c29uIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOnBsQGZvdXJz cXVhcmUuY29tIiB0YXJnZXQ9Il9ibGFuayI+cGxAZm91cnNxdWFyZS5jb208L2E+Jmd0Ozwvc3Bh bj4gd3JvdGU6PGJyPgo8YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJn aW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4 Ij48ZGl2IGRpcj0ibHRyIj5NeSBzb2x1dGlvbiB0byB0aGlzIGhhcyBiZWVuIHRvIGRlbGV0ZSAu cGFudHMuZCBhbmQgcmVydW4sIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhvc2UgYXJl IGNhY2hlZC4gJm5ic3A7SSd2ZSBub3QgbmVlZGVkIHRvIGdvIG51Y2xlYXIgd2l0aCBhIGBnaXQg Y2xlYW4gLWZkeGA8L2Rpdj4KPGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+ PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj4KT24gV2VkLCBKdW4gNCwgMjAxNCBhdCAzOjAx IFBNLCBUZWphbCBEZXNhaSA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzp0ZGVz YWlAdHdpdHRlci5jb20iIHRhcmdldD0iX2JsYW5rIj50ZGVzYWlAdHdpdHRlci5jb208L2E+Jmd0 Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9 Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVm dDoxZXgiPgoKPGRpdiBkaXI9Imx0ciI+PGRpdj5JIGhpdCB0aGlzIGVycm9yIGFnYWluIHRvZGF5 IGZvciBwYWNrYWdlIHR3aXR0ZXIuY29tbW9uLmNvbnRleHR1dGlsLTAuPHdicj4zLjAudGFyLmd6 PGJyPjxicj5UaGlzIGlzIHRoZSB0aGlyZCB0aW1lIHdoZW4gYWZ0ZXIgaGl0dGluZyB0aGUgaXNz dWUsIGdpdCBjbGVhbiAtZmR4IHNvbHZlZCBteSBwcm9ibGVtLiA8YnI+PGJyPjwvZGl2PjxkaXY+ SSB0cmllZCBydW5uaW5nIHRoZSBzY3JpcHQgLi9idWlsZC1zdXBwb3J0L3B5dGhvbi9jbGVhbi48 d2JyPnNoIGFuZCByZW1vdmluZyBidWlsZC1zdXBwb3J0LyoudmVudiBhZnRlciB0aGUgZmlyc3Qg ZmFpbHVyZS4gPGJyPgoKCkhvd2V2ZXIgaXQgZmFpbGVkIGFnYWluIG9uIHRoZSBzYW1lIGVycm9y Ljxicj48YnI+PC9kaXY+PGJyPjxkaXY+VGhhbmtzPHNwYW4+PGZvbnQgY29sb3I9IiM4ODg4ODgi Pjxicj48L2ZvbnQ+PC9zcGFuPjwvZGl2PjxzcGFuPjxmb250IGNvbG9yPSIjODg4ODg4Ij48ZGl2 PlRlamFsPGJyPjwvZGl2PjwvZm9udD48L3NwYW4+PC9kaXY+CjxkaXY+PGRpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSI+PGJyPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gVHVlLCBN YXkgMjAsIDIwMTQgYXQgMTo0MSBBTSwgRXJpYyBBeWVycyA8c3BhbiBkaXI9Imx0ciI+Jmx0Ozxh IGhyZWY9Im1haWx0bzp6dW5kZWxAc3F1YXJldXAuY29tIiB0YXJnZXQ9Il9ibGFuayI+enVuZGVs QHNxdWFyZXVwLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+CgoKPGJsb2NrcXVvdGUgY2xh c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4 ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+SSBidW1wZWQgY29u bl90aW1lb3V0IGluIG15IGNvZGUgdG9vIGFuZCBpdCBzZWVtcyB0byByZWFsbHkgaGVscCBvdXQu ICZuYnNwO0kganVzdCBnb3QgYSBWTSBmb3Igb3VyIHBpcHkgbWlycm9yIGlzIHJlYWR5IHNvIEkn bSBnb2luZyB0byBzZXQgdGhhdCB1cCBhcyBzb29uIGFzIEkgZ2V0IGEgY2hhbmNlLjwvZGl2PgoK CjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPgoKPGJyPjxkaXYgY2xhc3M9 ImdtYWlsX3F1b3RlIj5PbiBNb24sIE1heSAxOSwgMjAxNCBhdCA1OjA0IFBNLCAnTGFycnkgSG9z a2VuJyB2aWEgUGFudHMgRGV2ZWxvcGVycyA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1h aWx0bzpwYW50cy1kZXZlbEBnb29nbGVncm91cHMuY29tIiB0YXJnZXQ9Il9ibGFuayI+cGFudHMt ZGV2ZWxAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+CgoKCgo8Ymxv Y2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3Jk ZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij5JIHRyaWVkIGNoYW5naW5n IHBhbnRzL3B5dGhvbi9yZXNvbHZlci5weSdzIGNvbm5fdGltZW91dCB0byA5MDAwICwgYW5kPGJy Pgp0aGVuIHJhbiBhZ2FpbiB3L2xvdHMgb2YgdmVyYm9zaXR5LiBMT0wsIHRoZXNlIHRoaW5ncyBj YW4gdGFrZSBhIHdoaWxlPGJyPgp0byBkb3dubG9hZDo8YnI+Cjxicj4KdHdpdHRlci5jb21tb24u cHl0aG9uOiBQYWNrYWdpbmcgTWFya2Rvd246IDI4NzUuMG1zPGJyPgp0d2l0dGVyLmNvbW1vbi5w eXRob246IFBhY2thZ2luZyB0d2l0dGVyLmNvbW1vbi5jb2xsZWN0aW9uczogMjU0NC4wbXM8YnI+ CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIHR3aXR0ZXIuY29tbW9uLmNvbmZpZzog MjU3Ni4zbXM8YnI+CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIHR3aXR0ZXIuY29t bW9uLmxvZzogMjU0Ny4wbXM8YnI+CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIHR3 aXR0ZXIuY29tbW9uLmNvbnRleHR1dGlsOiAzMTgyLjZtczxicj4KdHdpdHRlci5jb21tb24ucHl0 aG9uOiBQYWNrYWdpbmcgcHl0ZXN0OiAyNjE3LjFtczxicj4KdHdpdHRlci5jb21tb24ucHl0aG9u OiBQYWNrYWdpbmcgdHdpdHRlci5jb21tb24ubGFuZzogMjU0MC43bXM8YnI+CnR3aXR0ZXIuY29t bW9uLnB5dGhvbjogUGFja2FnaW5nIHB5c3RhY2hlOiAyNjM1LjBtczxicj4KdHdpdHRlci5jb21t b24ucHl0aG9uOiBQYWNrYWdpbmcgdHdpdHRlci5jb21tb24uZGVjb3JhdG9yczogMjU1My4ybXM8 YnI+CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIHR3aXR0ZXIuY29tbW9uLnByb2Nl c3M6IDI1NDUuOW1zPGJyPgp0d2l0dGVyLmNvbW1vbi5weXRob246IFBhY2thZ2luZyB0d2l0dGVy LmNvbW1vbi51dGlsOiAyNjc4LjVtczxicj4KdHdpdHRlci5jb21tb24ucHl0aG9uOiBQYWNrYWdp bmcgdHdpdHRlci5jb21tb24ucXVhbnRpdHk6IDMxOTcuMm1zPGJyPgp0d2l0dGVyLmNvbW1vbi5w eXRob246IFBhY2thZ2luZyBweXRob24tZGFlbW9uOiAyNTYzLjltczxicj4KdHdpdHRlci5jb21t b24ucHl0aG9uOiBQYWNrYWdpbmcgdHdpdHRlci5jb21tb24udGhyZWFkaW5nOiAyNTQ1Ljhtczxi cj4KdHdpdHRlci5jb21tb24ucHl0aG9uOiBQYWNrYWdpbmcgcHl0ZXN0LWNvdjogMjUzOC44bXM8 YnI+CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIHR3aXR0ZXIuY29tbW9uLnB5dGhv bjogMjYxNS41bXM8YnI+CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIGFuc2ljb2xv cnM6IDI1NTUuN21zPGJyPgp0d2l0dGVyLmNvbW1vbi5weXRob246IFBhY2thZ2luZyB0d2l0dGVy LmNvbW1vbi5kaXJ1dGlsOiAyOTQ1LjFtczxicj4KdHdpdHRlci5jb21tb24ucHl0aG9uOiBQYWNr YWdpbmcgYW50bHItcHl0aG9uLXJ1bnRpbWU6IDI1NjAuMG1zPGJyPgp0d2l0dGVyLmNvbW1vbi5w eXRob246IFBhY2thZ2luZyB0d2l0dGVyLmNvbW1vbi5vcHRpb25zOiAyNTQyLjltczxicj4KdHdp dHRlci5jb21tb24ucHl0aG9uOiBQYWNrYWdpbmcgcHk6IDI1OTYuOG1zPGJyPgp0d2l0dGVyLmNv bW1vbi5weXRob246IFBhY2thZ2luZyB0d2l0dGVyLmNvbW1vbi5zdHJpbmc6IDI1MzIuNG1zPGJy Pgp0d2l0dGVyLmNvbW1vbi5weXRob246IFBhY2thZ2luZyBsb2NrZmlsZTogMjU0NC41bXM8YnI+ CnR3aXR0ZXIuY29tbW9uLnB5dGhvbjogUGFja2FnaW5nIGFyZ3BhcnNlOiAyMTkuM21zPGJyPgp0 d2l0dGVyLmNvbW1vbi5weXRob246IFBhY2thZ2luZyBjb3YtY29yZTogMjU0Ny40bXM8YnI+Cjxi cj4KLUxhcnJ5IEguPGJyPgo8ZGl2PjxkaXY+PGJyPgo8YnI+Cjxicj4KT24gU3VuLCBNYXkgMTgs IDIwMTQgYXQgNTo0NSBBTSwgRXJpYyBBeWVycyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnp1bmRlbEBz cXVhcmV1cC5jb20iIHRhcmdldD0iX2JsYW5rIj56dW5kZWxAc3F1YXJldXAuY29tPC9hPiZndDsg d3JvdGU6PGJyPgomZ3Q7IEkgZG9u4oCZdCB0aGluayB3aGF0IEkgaGF2ZSBiZWVuIHJ1bm5pbmcg aW50byB0aGlzIHdlZWtlbmQgaXMgbmVjZXNzYXJpbHkgYTxicj4KJmd0OyBkb3dubG9hZCBlcnJv ciBhZnRlciBhbGwsIEl0IHNlZW1zIHRvIGJlIHRoYXQgYXQgbGVhc3Qgc29tZSBwYWNrYWdlcyBh cmUgbm90PGJyPgomZ3Q7IG1hcmtlZCBhcyBzdXBwb3J0aW5nIHB5dGhvbiAyLjcuIEnigJl2ZSBi ZWVuIHN0dW1ibGluZyBvdmVyIE1veCAwLjUuMywgZm9yPGJyPgomZ3Q7IGV4YW1wbGUuIGluOjxi cj4KJmd0Ozxicj4KJmd0OyAvVXNlcnMvenVuZGVsL1NyYy9wYW50cy9idWlsZC08d2JyPnN1cHBv cnQvcGFudHNfZGV2X2RlcHMudmVudi88d2JyPmxpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy88 d2JyPnR3aXR0ZXIvY29tbW9uL3B5dGhvbi9wYWNrYWdlLjx3YnI+cHk8YnI+CiZndDsgSSBhZGRl ZCBkZWJ1Z2dpbmcgdG8gV2hlZWxQYWNrYWdlLmNvbXBhdGlibGUoKTxicj4KJmd0Ozxicj4KJmd0 OyAmbmJzcDsgZGVmIGNvbXBhdGlibGUoc2VsZiwgaWRlbnRpdHksIHBsYXRmb3JtPVBsYXRmb3Jt LmN1cnJlbnQoKSk6PGJyPgomZ3Q7ICZuYnNwOyAmbmJzcDsgdGFncyA9IFBFUDQyNS5pdGVyX3N1 cHBvcnRlZF90YWdzKDx3YnI+aWRlbnRpdHksIHBsYXRmb3JtKTxicj4KJmd0OyAmbmJzcDsgJm5i c3A7IHByaW50KCJJIHN1cHBvcnQ6ICIsIHNlbGYuX3N1cHBvcnRlZF90YWdzKTxicj4KJmd0OyAm bmJzcDsgJm5ic3A7ICZuYnNwO3ByaW50KCJTdXBwb3J0ZWQgdGFncyBmb3IgJXMsICVzIGFyZTog IiAlIChpZGVudGl0eSwgcGxhdGZvcm0pKTxicj4KJmd0OyAmbmJzcDsgJm5ic3A7IGZvciB0YWcg aW4gdGFnczo8YnI+CiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcHJpbnQoInRhZzoiLCB0YWcp PGJyPgomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmIHRhZyBpbiBzZWxmLl9zdXBwb3J0ZWRf dGFnczo8YnI+CiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3JldHVybiBU cnVlPGJyPgomZ3Q7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIEZhbHNlPGJyPgomZ3Q7PGJyPgomZ3Q7 IFRoZSBkZWJ1ZyBvdXRwdXQgc2hvd3MgdGhhdCBmb3IgdGhlIOKAmG1veOKAmSBwYWNrYWdlLCBp dCBleHBlY3RzIHRoZSB0YWcg4oCYcHkyN+KAmTxicj4KJmd0OyBmb3IgbXkgbWFjLCBidXQgdGhh dCB2ZXJzaW9uIGlzIG5vdCBsaXN0ZWQgb24gdGhpcyBwYWNrYWdlOjxicj4KJmd0Ozxicj4KJmd0 OyAoJ0kgc3VwcG9ydDogJywgZnJvemVuc2V0KFsodSdweTI3JywgdSdub25lJywgdSdhbnknKV0p KTxicj4KJmd0Ozxicj4KJmd0Ozxicj4KJmd0OyAoJ1RyYW5zbGF0aW5nIGZyb20gYmluYXJ5IHBh Y2thZ2UnLDxicj4KJmd0OyBXaGVlbFBhY2thZ2UodScvVXNlcnMvenVuZGVsLzx3YnI+U3JjL3Bh bnRzLy5wYW50cy5kL3B5dGhvbi88d2JyPmVnZ3MvbW94LTAuNS4zLXB5Mjctbm9uZS1hbnkuPHdi cj53aGwnKSk8YnI+CiZndDsgKCdJIHN1cHBvcnQ6ICcsIGZyb3plbnNldChbKHUncHkyNycsIHUn bm9uZScsIHUnYW55JyldKSk8YnI+CiZndDsgU3VwcG9ydGVkIHRhZ3MgZm9yIENQeXRob24tMi42 LjgsIG1hY29zeC0xMC45LXg4Nl82NCBhcmU6PGJyPgomZ3Q7IC4uLjxicj4KJmd0Ozxicj4KJmd0 OyAoJ3RhZzonLCAoJ3B5MicsICdub25lJywgJ21hY29zeF8xMF85X3g4Nl82NCcpKTxicj4KJmd0 OyAoJ3RhZzonLCAoJ3B5MjYnLCAnbm9uZScsICdtYWNvc3hfMTBfOV94ODZfNjQnKSk8YnI+CiZn dDsgJm5ic3A7KCd0YWc6JywgKCdweTI1JywgJ25vbmUnLCAnbWFjb3N4XzEwXzlfeDg2XzY0Jykp PGJyPgomZ3Q7ICgndGFnOicsICgncHkyNCcsICdub25lJywgJ21hY29zeF8xMF85X3g4Nl82NCcp KTxicj4KJmd0OyAoJ3RhZzonLCAoJ3B5MjMnLCAnbm9uZScsICdtYWNvc3hfMTBfOV94ODZfNjQn KSk8YnI+CiZndDsgKCd0YWc6JywgKCdweTIyJywgJ25vbmUnLCAnbWFjb3N4XzEwXzlfeDg2XzY0 JykpPGJyPgomZ3Q7ICgndGFnOicsICgncHkyMScsICdub25lJywgJ21hY29zeF8xMF85X3g4Nl82 NCcpKTxicj4KJmd0OyAoJ3RhZzonLCAoJ3B5MjAnLCAnbm9uZScsICdtYWNvc3hfMTBfOV94ODZf NjQnKSk8YnI+CiZndDsgKCd0YWc6JywgKCdjcDInLCAnbm9uZScsICdtYWNvc3hfMTBfOV94ODZf NjQnKSk8YnI+CiZndDsgKCd0YWc6JywgKCdjcDI2JywgJ25vbmUnLCAnbWFjb3N4XzEwXzlfeDg2 XzY0JykpPGJyPgomZ3Q7ICgndGFnOicsICgnY3AyNScsICdub25lJywgJ21hY29zeF8xMF85X3g4 Nl82NCcpKTxicj4KJmd0OyAoJ3RhZzonLCAoJ2NwMjQnLCAnbm9uZScsICdtYWNvc3hfMTBfOV94 ODZfNjQnKSk8YnI+CiZndDsgKCd0YWc6JywgKCdjcDIzJywgJ25vbmUnLCAnbWFjb3N4XzEwXzlf eDg2XzY0JykpPGJyPgomZ3Q7ICgndGFnOicsICgnY3AyMicsICdub25lJywgJ21hY29zeF8xMF85 X3g4Nl82NCcpKTxicj4KJmd0OyAoJ3RhZzonLCAoJ2NwMjEnLCAnbm9uZScsICdtYWNvc3hfMTBf OV94ODZfNjQnKSk8YnI+CiZndDs8YnI+CiZndDsgKCd0YWc6JywgKCdjcDIwJywgJ25vbmUnLCAn bWFjb3N4XzEwXzlfeDg2XzY0JykpPGJyPgomZ3Q7IC4uLjxicj4KJmd0Ozxicj4KJmd0OyBUaGlz IGRvZXNu4oCZdCBleHBsYWluIHdoeSB0aGUgaXNzdWUgaXMgaW50ZXJtaXR0ZW50LCB1bmxlc3Mg c29tZW9uZSBpczxicj4KJmd0OyBjaGFuZ2luZyByZXF1aXJlbWVudHMgYXJvdW5kIG9yIHdlIGFy ZSBiZWluZyBzZXJ2ZWQgZGlmZmVyZW50IGJpbmFyaWVzIGF0PGJyPgomZ3Q7IGRpZmZlcmVudCB0 aW1lcyBmcm9tIHRoZSBweXBpIG1pcnJvci48YnI+CiZndDs8YnI+CiZndDsgT25jZSBJIGhhcmQg Y29kZSB0aGF0IHRvIHJldHVybiDigJhUcnVl4oCZLCBJIHJ1biBpbnRvIHByb2JsZW1zIHdpdGgg cHN1dGlsIHRvby48YnI+CiZndDs8YnI+CiZndDsgVGhpcyBvbmUgaGFzIGJlZW4gaW50ZXJtaXR0 ZW50IGluIHRoZSBwYXN0LiBUaGUgcGFja2FnZSBpdCBpcyBhY3R1YWxseTxicj4KJmd0OyBsb29r aW5nIGZvciBpczo8YnI+CiZndDs8YnI+CiZndDsgRWdnUGFja2FnZSh14oCZL1VzZXJzL3p1bmRl bC88d2JyPlNyYy9wYW50cy8ucGFudHMuZC9weXRob24vPHdicj5lZ2dzL3BzdXRpbC0xLjEuMy1w eTIuNi08d2JyPm1hY29zeC0xMC40LXg4Nl82NC5lZ2figJkpPGJyPgomZ3Q7IFRoZSB3ZWlyZCB0 aGluZyBpcywgd2UgZG93bmxvYWRlZCBhIHB5Mi43IGVnZyBwYWNrYWdlIGZvcjxicj4KJmd0OyBw YW50c19kZXZfZGVwcy52ZW52Ojxicj4KJmd0Ozxicj4KJmd0OyAuL2J1aWxkLXN1cHBvcnQvcGFu dHNfZGV2Xzx3YnI+ZGVwcy52ZW52L2xpYi9weXRob24yLjcvc2l0ZS08d2JyPnBhY2thZ2VzL3Bz dXRpbC0xLjEuMy1weTIuNy48d2JyPmVnZy1pbmZvL1BLRy1JTkZPPGJyPgomZ3Q7PGJyPgomZ3Q7 IFRoZSBvdGhlciB3ZWlyZCB0aGluZzogRXZlcnl0aGluZyBlbHNlIGRvd25sb2FkZWQgdG8gdGhp cyBwb2ludCBpcyBhIFdoZWVsPGJyPgomZ3Q7IHBhY2thZ2UuIFRoaXMgaXMgdGhlIG9ubHkgZWdn IHBhY2thZ2UgaW4gdGhlIGNhY2hlOjxicj4KJmd0Ozxicj4KJmd0OyBMb29raW5nIGZvciBwYWNr YWdlPGJyPgomZ3Q7IFdoZWVsUGFja2FnZSh1Jy9Vc2Vycy96dW5kZWwvPHdicj5TcmMvcGFudHMv LnBhbnRzLmQvcHl0aG9uLzx3YnI+ZWdncy9jb3ZlcmFnZS0zLjZiMS1jcDI3LW5vbmUtPHdicj5t YWNvc3hfMTBfOV9pbnRlbC53aGwnKTxicj4KJmd0OyBDYWNoZTo8YnI+CiZndDsga2V5PGJyPgom Z3Q7IFdoZWVsUGFja2FnZSh1Jy9Vc2Vycy96dW5kZWwvPHdicj5TcmMvcGFudHMvLnBhbnRzLmQv cHl0aG9uLzx3YnI+ZWdncy9jb3ZlcmFnZS0zLjZiMS1jcDI3LW5vbmUtPHdicj5tYWNvc3hfMTBf OV9pbnRlbC53aGwnKTxicj4KJmd0OyBrZXk8YnI+CiZndDsgV2hlZWxQYWNrYWdlKHUnL1VzZXJz L3p1bmRlbC88d2JyPlNyYy9wYW50cy8ucGFudHMuZC9weXRob24vPHdicj5lZ2dzL3VuaXR0ZXN0 Mi0wLjUuMS1weTI3LTx3YnI+bm9uZS1hbnkud2hsJyk8YnI+CiZndDsga2V5PGJyPgomZ3Q7IFdo ZWVsUGFja2FnZSh1Jy9Vc2Vycy96dW5kZWwvPHdicj5TcmMvcGFudHMvLnBhbnRzLmQvcHl0aG9u Lzx3YnI+ZWdncy9weXN0YWNoZS0wLjUuMy1weTI2LW5vbmUtPHdicj5hbnkud2hsJyk8YnI+CiZn dDsga2V5PGJyPgomZ3Q7IFNvdXJjZVBhY2thZ2UodSdbPGEgaHJlZj0iaHR0cHM6Ly9weXBpLnB5 dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcHkvcHktMS40LjIwLnRhci5neiNtZDU9NWYxNzA4 YmU1NDgyZjNmZjY3MTFkZmQ2Y2FmZDQ1ZTBdKGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2th Z2VzL3NvdXJjZS9wL3B5L3B5LTEuNC4yMC50YXIuZ3olMjNtZDU9NWYxNzA4YmU1NDgyZjNmZjY3 MTFkZmQ2Y2FmZDQ1ZTApIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9weXBpLjx3YnI+cHl0aG9u Lm9yZy9wYWNrYWdlcy9zb3VyY2UvcC88d2JyPnB5L3B5LTEuNC4yMC50YXIuZ3ojbWQ1PTx3YnI+ NWYxNzA4YmU1NDgyZjNmZjY3MTFkZmQ2Y2FmZDQ1PHdicj5lMF0oaHR0cHM6Ly9weXBpLnB5dGhv bi5vcmcvPHdicj5wYWNrYWdlcy9zb3VyY2UvcC9weS9weS0xLjQuPHdicj4yMC50YXIuZ3ojbWQ1 PTx3YnI+NWYxNzA4YmU1NDgyZjNmZjY3MTFkZmQ2Y2FmZDQ1PHdicj5lMCk8L2E+Jyk8YnI+CgoK CgoKJmd0OyBrZXk8YnI+CiZndDsgU291cmNlUGFja2FnZSh1J1s8YSBocmVmPSJodHRwczovL3Bh bnRzYnVpbGQuZ2l0aHViLmlvL2NoZWVzZXNob3AvdGhpcmRfcGFydHkvdHdpdHRlci1jb21tb25z L2M0YTBjZDM5MjkzMTQyZTlkNzcxNGNjNTgzOTY3MzVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24u cHl0aG9uLTAuNS42LnRhci5neiU1RChodHRwczovL3BhbnRzYnVpbGQuZ2l0aHViLmlvL2NoZWVz ZXNob3AvdGhpcmRfcGFydHkvdHdpdHRlci1jb21tb25zL2M0YTBjZDM5MjkzMTQyZTlkNzcxNGNj NTgzOTY3MzVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24ucHl0aG9uLTAuNS42LnRhci5neikiIHRh cmdldD0iX2JsYW5rIj5odHRwczovLzx3YnI+cGFudHNidWlsZC5naXRodWIuaW8vPHdicj5jaGVl c2VzaG9wL3RoaXJkX3BhcnR5Lzx3YnI+dHdpdHRlci1jb21tb25zLzx3YnI+YzRhMGNkMzkyOTMx NDJlOWQ3NzE0Y2M1ODM5NjczPHdicj41ZTI4NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLjx3YnI+cHl0 aG9uLTAuNS42LnRhci5nel0oaHR0cHM6Ly88d2JyPnBhbnRzYnVpbGQuZ2l0aHViLmlvLzx3YnI+ Y2hlZXNlc2hvcC90aGlyZF9wYXJ0eS88d2JyPnR3aXR0ZXItY29tbW9ucy88d2JyPmM0YTBjZDM5 MjkzMTQyZTlkNzcxNGNjNTgzOTY3Mzx3YnI+NWUyODRjNzdkOC90d2l0dGVyLmNvbW1vbi48d2Jy PnB5dGhvbi0wLjUuNi50YXIuZ3opPC9hPicpPGJyPgoKCgoKCiZndDsga2V5PGJyPgomZ3Q7IFNv dXJjZVBhY2thZ2UodSdbPGEgaHJlZj0iaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMv c291cmNlL2MvY292LWNvcmUvY292LWNvcmUtMS4xMi50YXIuZ3ojbWQ1PTQ5ODI1NzJjZmIxNzli YmMwMDRjZjNjMzM0Njg2NTYxXShodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3Vy Y2UvYy9jb3YtY29yZS9jb3YtY29yZS0xLjEyLnRhci5neiUyM21kNT00OTgyNTcyY2ZiMTc5YmJj MDA0Y2YzYzMzNDY4NjU2MSkiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL3B5cGkuPHdicj5weXRo b24ub3JnL3BhY2thZ2VzL3NvdXJjZS9jLzx3YnI+Y292LWNvcmUvY292LWNvcmUtMS4xMi50YXIu Z3ojPHdicj5tZDU9PHdicj40OTgyNTcyY2ZiMTc5YmJjMDA0Y2YzYzMzNDY4NjU8d2JyPjYxXSho dHRwczovL3B5cGkucHl0aG9uLm9yZy88d2JyPnBhY2thZ2VzL3NvdXJjZS9jL2Nvdi1jb3JlLzx3 YnI+Y292LWNvcmUtMS4xMi50YXIuZ3ojbWQ1PTx3YnI+NDk4MjU3MmNmYjE3OWJiYzAwNGNmM2Mz MzQ2ODY1PHdicj42MSk8L2E+Jyk8YnI+CgoKCgoKJmd0OyBrZXk8YnI+CiZndDsgV2hlZWxQYWNr YWdlKHUnL1VzZXJzL3p1bmRlbC88d2JyPlNyYy9wYW50cy8ucGFudHMuZC9weXRob24vPHdicj5l Z2dzL3R3aXR0ZXIuY29tbW9uLmRpcnV0aWwtMC48d2JyPjMuMC1weTI3LW5vbmUtYW55LndobCcp PGJyPgomZ3Q7IGtleTxicj4KJmd0OyBXaGVlbFBhY2thZ2UodScvVXNlcnMvenVuZGVsLzx3YnI+ U3JjL3BhbnRzLy5wYW50cy5kL3B5dGhvbi88d2JyPmVnZ3MvdHdpdHRlci5jb21tb24udGhyZWFk aW5nLTx3YnI+MC4zLjAtcHkyNy1ub25lLWFueS53aGwnKTxicj4KJmd0OyBrZXk8YnI+CiZndDsg V2hlZWxQYWNrYWdlKHUnWzxhIGhyZWY9Imh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2Vz L3B5Mi5weTMvdy93aGVlbC93aGVlbC0wLjIzLjAtcHkyLnB5My1ub25lLWFueS53aGwjbWQ1PTJh NGI5Yjg3YTY0NDQxYWQ1NmMwOGJkYTFlYTZlNTJhXShodHRwczovL3B5cGkucHl0aG9uLm9yZy9w YWNrYWdlcy9weTIucHkzL3cvd2hlZWwvd2hlZWwtMC4yMy4wLXB5Mi5weTMtbm9uZS1hbnkud2hs JTIzbWQ1PTJhNGI5Yjg3YTY0NDQxYWQ1NmMwOGJkYTFlYTZlNTJhKSIgdGFyZ2V0PSJfYmxhbmsi Pmh0dHBzOi8vcHlwaS48d2JyPnB5dGhvbi5vcmcvcGFja2FnZXMvcHkyLnB5My93Lzx3YnI+d2hl ZWwvd2hlZWwtMC4yMy4wLXB5Mi5weTMtPHdicj5ub25lLWFueS53aGwjbWQ1PTx3YnI+MmE0Yjli ODdhNjQ0NDFhZDU2YzA4YmRhMWVhNmU1PHdicj4yYV0oaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcv PHdicj5wYWNrYWdlcy9weTIucHkzL3cvd2hlZWwvPHdicj53aGVlbC0wLjIzLjAtcHkyLnB5My1u b25lLWFueS48d2JyPndobCNtZDU9PHdicj4yYTRiOWI4N2E2NDQ0MWFkNTZjMDhiZGExZWE2ZTU8 d2JyPjJhKTwvYT4nKTxicj4KCgoKCgomZ3Q7IGtleTxicj4KJmd0OyBXaGVlbFBhY2thZ2UodScv VXNlcnMvenVuZGVsLzx3YnI+U3JjL3BhbnRzLy5wYW50cy5kL3B5dGhvbi88d2JyPmVnZ3MvdHdp dHRlci5jb21tb24ucHJvY2Vzcy0wLjx3YnI+My4wLXB5Mjctbm9uZS1hbnkud2hsJyk8YnI+CiZn dDsga2V5PGJyPgomZ3Q7IFNvdXJjZVBhY2thZ2UodSdbPGEgaHJlZj0iaHR0cHM6Ly9wYW50c2J1 aWxkLmdpdGh1Yi5pby9jaGVlc2VzaG9wL3RoaXJkX3BhcnR5L3R3aXR0ZXItY29tbW9ucy9jNGEw Y2QzOTI5MzE0MmU5ZDc3MTRjYzU4Mzk2NzM1ZTI4NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLmNvbGxl Y3Rpb25zLTAuMy4wLnRhci5neiU1RChodHRwczovL3BhbnRzYnVpbGQuZ2l0aHViLmlvL2NoZWVz ZXNob3AvdGhpcmRfcGFydHkvdHdpdHRlci1jb21tb25zL2M0YTBjZDM5MjkzMTQyZTlkNzcxNGNj NTgzOTY3MzVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24uY29sbGVjdGlvbnMtMC4zLjAudGFyLmd6 KSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vPHdicj5wYW50c2J1aWxkLmdpdGh1Yi5pby88d2Jy PmNoZWVzZXNob3AvdGhpcmRfcGFydHkvPHdicj50d2l0dGVyLWNvbW1vbnMvPHdicj5jNGEwY2Qz OTI5MzE0MmU5ZDc3MTRjYzU4Mzk2NzM8d2JyPjVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24uPHdi cj5jb2xsZWN0aW9ucy0wLjMuMC50YXIuZ3pdKDx3YnI+aHR0cHM6Ly9wYW50c2J1aWxkLmdpdGh1 Yi5pby88d2JyPmNoZWVzZXNob3AvdGhpcmRfcGFydHkvPHdicj50d2l0dGVyLWNvbW1vbnMvPHdi cj5jNGEwY2QzOTI5MzE0MmU5ZDc3MTRjYzU4Mzk2NzM8d2JyPjVlMjg0Yzc3ZDgvdHdpdHRlci5j b21tb24uPHdicj5jb2xsZWN0aW9ucy0wLjMuMC50YXIuZ3opPC9hPicpPGJyPgoKCgoKCiZndDsg a2V5PGJyPgomZ3Q7IFdoZWVsUGFja2FnZSh1Jy9Vc2Vycy96dW5kZWwvPHdicj5TcmMvcGFudHMv LnBhbnRzLmQvcHl0aG9uLzx3YnI+ZWdncy90d2l0dGVyLmNvbW1vbi5vcHRpb25zLTAuPHdicj4z LjAtcHkyNi1ub25lLWFueS53aGwnKTxicj4KJmd0OyBrZXk8YnI+CiZndDsgV2hlZWxQYWNrYWdl KHUnL1VzZXJzL3p1bmRlbC88d2JyPlNyYy9wYW50cy8ucGFudHMuZC9weXRob24vPHdicj5lZ2dz L3JlcXVlc3RzLTIuMC4wLXB5Mi5weTMtPHdicj5ub25lLWFueS53aGwnKTxicj4KJmd0OyBrZXk8 YnI+CiZndDsgU291cmNlUGFja2FnZSh1J1s8YSBocmVmPSJodHRwczovL3BhbnRzYnVpbGQuZ2l0 aHViLmlvL2NoZWVzZXNob3AvdGhpcmRfcGFydHkvdHdpdHRlci1jb21tb25zL2M0YTBjZDM5Mjkz MTQyZTlkNzcxNGNjNTgzOTY3MzVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24ubG9nLTAuMy4wLnRh ci5neiU1RChodHRwczovL3BhbnRzYnVpbGQuZ2l0aHViLmlvL2NoZWVzZXNob3AvdGhpcmRfcGFy dHkvdHdpdHRlci1jb21tb25zL2M0YTBjZDM5MjkzMTQyZTlkNzcxNGNjNTgzOTY3MzVlMjg0Yzc3 ZDgvdHdpdHRlci5jb21tb24ubG9nLTAuMy4wLnRhci5neikiIHRhcmdldD0iX2JsYW5rIj5odHRw czovLzx3YnI+cGFudHNidWlsZC5naXRodWIuaW8vPHdicj5jaGVlc2VzaG9wL3RoaXJkX3BhcnR5 Lzx3YnI+dHdpdHRlci1jb21tb25zLzx3YnI+YzRhMGNkMzkyOTMxNDJlOWQ3NzE0Y2M1ODM5Njcz PHdicj41ZTI4NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLmxvZy08d2JyPjAuMy4wLnRhci5nel0oaHR0 cHM6Ly88d2JyPnBhbnRzYnVpbGQuZ2l0aHViLmlvLzx3YnI+Y2hlZXNlc2hvcC90aGlyZF9wYXJ0 eS88d2JyPnR3aXR0ZXItY29tbW9ucy88d2JyPmM0YTBjZDM5MjkzMTQyZTlkNzcxNGNjNTgzOTY3 Mzx3YnI+NWUyODRjNzdkOC90d2l0dGVyLmNvbW1vbi5sb2ctPHdicj4wLjMuMC50YXIuZ3opPC9h PicpPGJyPgoKCgoKCiZndDsga2V5PGJyPgomZ3Q7IFdoZWVsUGFja2FnZSh1Jy9Vc2Vycy96dW5k ZWwvPHdicj5TcmMvcGFudHMvLnBhbnRzLmQvcHl0aG9uLzx3YnI+ZWdncy9hbnNpY29sb3JzLTEu MC4yLXB5MjYtPHdicj5ub25lLWFueS53aGwnKTxicj4KJmd0OyBrZXk8YnI+CiZndDsgU291cmNl UGFja2FnZSh1J1s8YSBocmVmPSJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3Vy Y2UvcC9weXRlc3QtY292L3B5dGVzdC1jb3YtMS42LnRhci5neiNtZDU9NmRhNTRkNzRiZGU5ZDIw MGRlNDUwNjhiYTJlYTYzN2FdKGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJj ZS9wL3B5dGVzdC1jb3YvcHl0ZXN0LWNvdi0xLjYudGFyLmd6JTIzbWQ1PTZkYTU0ZDc0YmRlOWQy MDBkZTQ1MDY4YmEyZWE2MzdhKSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vcHlwaS48d2JyPnB5 dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvPHdicj5weXRlc3QtY292L3B5dGVzdC1jb3YtMS42 LnRhci48d2JyPmd6I21kNT08d2JyPjZkYTU0ZDc0YmRlOWQyMDBkZTQ1MDY4YmEyZWE2Mzx3YnI+ N2FdKGh0dHBzOi8vcHlwaS5weXRob24ub3JnLzx3YnI+cGFja2FnZXMvc291cmNlL3AvcHl0ZXN0 LWNvdi88d2JyPnB5dGVzdC1jb3YtMS42LnRhci5neiNtZDU9PHdicj42ZGE1NGQ3NGJkZTlkMjAw ZGU0NTA2OGJhMmVhNjM8d2JyPjdhKTwvYT4nKTxicj4KCgoKCgomZ3Q7IGtleTxicj4KJmd0OyBT b3VyY2VQYWNrYWdlKHUnWzxhIGhyZWY9Imh0dHBzOi8vcGFudHNidWlsZC5naXRodWIuaW8vY2hl ZXNlc2hvcC90aGlyZF9wYXJ0eS90d2l0dGVyLWNvbW1vbnMvYzRhMGNkMzkyOTMxNDJlOWQ3NzE0 Y2M1ODM5NjczNWUyODRjNzdkOC90d2l0dGVyLmNvbW1vbi5jb250ZXh0dXRpbC0wLjMuMC50YXIu Z3olNUQoaHR0cHM6Ly9wYW50c2J1aWxkLmdpdGh1Yi5pby9jaGVlc2VzaG9wL3RoaXJkX3BhcnR5 L3R3aXR0ZXItY29tbW9ucy9jNGEwY2QzOTI5MzE0MmU5ZDc3MTRjYzU4Mzk2NzM1ZTI4NGM3N2Q4 L3R3aXR0ZXIuY29tbW9uLmNvbnRleHR1dGlsLTAuMy4wLnRhci5neikiIHRhcmdldD0iX2JsYW5r Ij5odHRwczovLzx3YnI+cGFudHNidWlsZC5naXRodWIuaW8vPHdicj5jaGVlc2VzaG9wL3RoaXJk X3BhcnR5Lzx3YnI+dHdpdHRlci1jb21tb25zLzx3YnI+YzRhMGNkMzkyOTMxNDJlOWQ3NzE0Y2M1 ODM5NjczPHdicj41ZTI4NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLjx3YnI+Y29udGV4dHV0aWwtMC4z LjAudGFyLmd6XSg8d2JyPmh0dHBzOi8vcGFudHNidWlsZC5naXRodWIuaW8vPHdicj5jaGVlc2Vz aG9wL3RoaXJkX3BhcnR5Lzx3YnI+dHdpdHRlci1jb21tb25zLzx3YnI+YzRhMGNkMzkyOTMxNDJl OWQ3NzE0Y2M1ODM5NjczPHdicj41ZTI4NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLjx3YnI+Y29udGV4 dHV0aWwtMC4zLjAudGFyLmd6KTwvYT4nKTxicj4KCgoKCgomZ3Q7IGtleTxicj4KJmd0OyBXaGVl bFBhY2thZ2UodScvVXNlcnMvenVuZGVsLzx3YnI+U3JjL3BhbnRzLy5wYW50cy5kL3B5dGhvbi88 d2JyPmVnZ3MvcHl0ZXN0LTIuNS4yLXB5Mjctbm9uZS08d2JyPmFueS53aGwnKTxicj4KJmd0OyBr ZXk8YnI+CiZndDsgV2hlZWxQYWNrYWdlKHUnL1VzZXJzL3p1bmRlbC88d2JyPlNyYy9wYW50cy8u cGFudHMuZC9weXRob24vPHdicj5lZ2dzL3R3aXR0ZXIuY29tbW9uLnN0cmluZy0wLjx3YnI+My4w LXB5MjYtbm9uZS1hbnkud2hsJyk8YnI+CiZndDsga2V5PGJyPgomZ3Q7IFNvdXJjZVBhY2thZ2Uo dSdbPGEgaHJlZj0iaHR0cHM6Ly9wYW50c2J1aWxkLmdpdGh1Yi5pby9jaGVlc2VzaG9wL3RoaXJk X3BhcnR5L3R3aXR0ZXItY29tbW9ucy9jNGEwY2QzOTI5MzE0MmU5ZDc3MTRjYzU4Mzk2NzM1ZTI4 NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLmxhbmctMC4zLjAudGFyLmd6JTVEKGh0dHBzOi8vcGFudHNi dWlsZC5naXRodWIuaW8vY2hlZXNlc2hvcC90aGlyZF9wYXJ0eS90d2l0dGVyLWNvbW1vbnMvYzRh MGNkMzkyOTMxNDJlOWQ3NzE0Y2M1ODM5NjczNWUyODRjNzdkOC90d2l0dGVyLmNvbW1vbi5sYW5n LTAuMy4wLnRhci5neikiIHRhcmdldD0iX2JsYW5rIj5odHRwczovLzx3YnI+cGFudHNidWlsZC5n aXRodWIuaW8vPHdicj5jaGVlc2VzaG9wL3RoaXJkX3BhcnR5Lzx3YnI+dHdpdHRlci1jb21tb25z Lzx3YnI+YzRhMGNkMzkyOTMxNDJlOWQ3NzE0Y2M1ODM5NjczPHdicj41ZTI4NGM3N2Q4L3R3aXR0 ZXIuY29tbW9uLjx3YnI+bGFuZy0wLjMuMC50YXIuZ3pdKGh0dHBzOi8vPHdicj5wYW50c2J1aWxk LmdpdGh1Yi5pby88d2JyPmNoZWVzZXNob3AvdGhpcmRfcGFydHkvPHdicj50d2l0dGVyLWNvbW1v bnMvPHdicj5jNGEwY2QzOTI5MzE0MmU5ZDc3MTRjYzU4Mzk2NzM8d2JyPjVlMjg0Yzc3ZDgvdHdp dHRlci5jb21tb24uPHdicj5sYW5nLTAuMy4wLnRhci5neik8L2E+Jyk8YnI+CgoKCgoKJmd0OyBr ZXk8YnI+CiZndDsgV2hlZWxQYWNrYWdlKHUnL1VzZXJzL3p1bmRlbC88d2JyPlNyYy9wYW50cy8u cGFudHMuZC9weXRob24vPHdicj5lZ2dzL3NldHVwdG9vbHMtMi4yLXB5Mi5weTMtPHdicj5ub25l LWFueS53aGwnKTxicj4KJmd0OyBrZXk8YnI+CiZndDsgRWdnUGFja2FnZSh1Jy9Vc2Vycy96dW5k ZWwvPHdicj5TcmMvcGFudHMvLnBhbnRzLmQvcHl0aG9uLzx3YnI+ZWdncy9wc3V0aWwtMS4xLjMt cHkyLjYtPHdicj5tYWNvc3gtMTAuNC14ODZfNjQuZWdnJyk8YnI+CiZndDsga2V5PGJyPgomZ3Q7 IFNvdXJjZVBhY2thZ2UodSdbPGEgaHJlZj0iaHR0cHM6Ly9wYW50c2J1aWxkLmdpdGh1Yi5pby9j aGVlc2VzaG9wL3RoaXJkX3BhcnR5L3R3aXR0ZXItY29tbW9ucy9jNGEwY2QzOTI5MzE0MmU5ZDc3 MTRjYzU4Mzk2NzM1ZTI4NGM3N2Q4L3R3aXR0ZXIuY29tbW9uLnF1YW50aXR5LTAuMy4wLnRhci5n eiU1RChodHRwczovL3BhbnRzYnVpbGQuZ2l0aHViLmlvL2NoZWVzZXNob3AvdGhpcmRfcGFydHkv dHdpdHRlci1jb21tb25zL2M0YTBjZDM5MjkzMTQyZTlkNzcxNGNjNTgzOTY3MzVlMjg0Yzc3ZDgv dHdpdHRlci5jb21tb24ucXVhbnRpdHktMC4zLjAudGFyLmd6KSIgdGFyZ2V0PSJfYmxhbmsiPmh0 dHBzOi8vPHdicj5wYW50c2J1aWxkLmdpdGh1Yi5pby88d2JyPmNoZWVzZXNob3AvdGhpcmRfcGFy dHkvPHdicj50d2l0dGVyLWNvbW1vbnMvPHdicj5jNGEwY2QzOTI5MzE0MmU5ZDc3MTRjYzU4Mzk2 NzM8d2JyPjVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24uPHdicj5xdWFudGl0eS0wLjMuMC50YXIu Z3pdKGh0dHBzOi88d2JyPi9wYW50c2J1aWxkLmdpdGh1Yi5pby88d2JyPmNoZWVzZXNob3AvdGhp cmRfcGFydHkvPHdicj50d2l0dGVyLWNvbW1vbnMvPHdicj5jNGEwY2QzOTI5MzE0MmU5ZDc3MTRj YzU4Mzk2NzM8d2JyPjVlMjg0Yzc3ZDgvdHdpdHRlci5jb21tb24uPHdicj5xdWFudGl0eS0wLjMu MC50YXIuZ3opPC9hPicpPGJyPgoKCgoKCiZndDsgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxs IGxhc3QpOjxicj4KJmd0OyAmbmJzcDsgRmlsZTxicj4KJmd0OyAiL3ByaXZhdGUvdmFyL2ZvbGRl cnMvNDIvPHdicj44a3JtN3RfNTB4OThfPHdicj42cnhwN3AwdHYxdzAwMDIwNS9UL3RtcHVFd1hz RS88d2JyPi5ib290c3RyYXAvX3R3aXR0ZXJfY29tbW9uXzx3YnI+cHl0aG9uL3BleC5weSIsPGJy PgomZ3Q7IGxpbmUgMjE0LCBpbiBleGVjdXRlPGJyPgomZ3Q7ICZuYnNwOyAmbmJzcDsgd29ya2lu Z19zZXQgPSBzZWxmLl9lbnYuYWN0aXZhdGUoKTxicj4KJmd0OyAmbmJzcDsgRmlsZTxicj4KJmd0 OyAiL3ByaXZhdGUvdmFyL2ZvbGRlcnMvNDIvPHdicj44a3JtN3RfNTB4OThfPHdicj42cnhwN3Aw dHYxdzAwMDIwNS9UL3RtcHVFd1hzRS88d2JyPi5ib290c3RyYXAvX3R3aXR0ZXJfY29tbW9uXzx3 YnI+cHl0aG9uL2Vudmlyb25tZW50LnB5Iiw8YnI+CiZndDsgbGluZSAxMjIsIGluIGFjdGl2YXRl PGJyPgomZ3Q7ICZuYnNwOyAmbmJzcDsgc2VsZi5fd29ya2luZ19zZXQgPSBzZWxmLl9hY3RpdmF0 ZSgpPGJyPgomZ3Q7ICZuYnNwOyBGaWxlPGJyPgomZ3Q7ICIvcHJpdmF0ZS92YXIvZm9sZGVycy80 Mi88d2JyPjhrcm03dF81MHg5OF88d2JyPjZyeHA3cDB0djF3MDAwMjA1L1QvdG1wdUV3WHNFLzx3 YnI+LmJvb3RzdHJhcC9fdHdpdHRlcl9jb21tb25fPHdicj5weXRob24vZW52aXJvbm1lbnQucHki LDxicj4KJmd0OyBsaW5lIDE0MiwgaW4gX2FjdGl2YXRlPGJyPgomZ3Q7ICZuYnNwOyAmbmJzcDsg cmVzb2x2ZWQgPSB3b3JraW5nX3NldC5yZXNvbHZlKGFsbF9yZXFzLCBlbnY9c2VsZik8YnI+CiZn dDsgJm5ic3A7IEZpbGU8YnI+CiZndDsgIi9wcml2YXRlL3Zhci9mb2xkZXJzLzQyLzx3YnI+OGty bTd0XzUweDk4Xzx3YnI+NnJ4cDdwMHR2MXcwMDAyMDUvVC90bXB1RXdYc0UvPHdicj4uYm9vdHN0 cmFwL3BrZ19yZXNvdXJjZXMucHkiLDxicj4KJmd0OyBsaW5lIDU4OCwgaW4gcmVzb2x2ZTxicj4K Jmd0OyAmbmJzcDsgJm5ic3A7IHJhaXNlIERpc3RyaWJ1dGlvbk5vdEZvdW5kKHJlcSk8YnI+CiZn dDsgRGlzdHJpYnV0aW9uTm90Rm91bmQ6IHBzdXRpbD09MS4xLjM8YnI+CiZndDs8YnI+CiZndDs8 YnI+CiZndDs8YnI+CiZndDsgT24gU2F0LCBNYXkgMTcsIDIwMTQgYXQgMTE6MDMgQU0sIFBhdHJp Y2sgTGF3c29uICZsdDs8YSBocmVmPSJtYWlsdG86cGxAZm91cnNxdWFyZS5jb20iIHRhcmdldD0i X2JsYW5rIj5wbEBmb3Vyc3F1YXJlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDs8YnI+ CiZndDsmZ3Q7IGFudGxyIGlzIGFsc28gdGhlIHBhY2thZ2UgdGhhdCBnaXZlcyBtZSBieSBmYXIg dGhlIG1vc3QgdHJvdWJsZS4gJm5ic3A7STxicj4KJmd0OyZndDsgYmVsaWV2ZSB0aGF0ICJwb3Rl bnRpYWxseSBpbnNlY3VyZSIgd2FybmluZyBpcyBqdXN0IGJlY2F1c2UgaXQncyBub3QgaG9zdGVk PGJyPgomZ3Q7Jmd0OyBvdmVyIEhUVFBTLiAmbmJzcDtCdXQgSSB0aGluayB0aGUgZmFjdCB0aGF0 IGl0IGdpdmVzIHVzIHNvIG11Y2ggdHJvdWJsZSBpczxicj4KJmd0OyZndDsgYmVjYXVzZSB3ZSdy ZSBub3QgY2FjaGluZyBhbmQgaXQncyBob3N0ZWQgb24gYSBzaG9kZHkgc2VydmVyLjxicj4KJmd0 OyZndDs8YnI+CiZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyBPbiBTYXQsIE1heSAxNywgMjAxNCBhdCA4 OjI5IEFNLCBFcmljIEF5ZXJzICZsdDs8YSBocmVmPSJtYWlsdG86enVuZGVsQHNxdWFyZXVwLmNv bSIgdGFyZ2V0PSJfYmxhbmsiPnp1bmRlbEBzcXVhcmV1cC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+ CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7IFRoaXMgbW9ybmluZywgbm90aGluZyBJIGRv IHNlZW1zIHRvIHdvcmsgYW5kIGl0IGlzIHRoZSBzYW1lIHBhY2thZ2U8YnI+CiZndDsmZ3Q7Jmd0 OyAoYW50bHJfcHl0aG9uX3J1bnRpbWUpIHRoYXQgaXMgZ2l2aW5nIG1lIGZpdHMgLiAmbmJzcDtJ IG5vdGljZWQgdGhpcyB3YXJuaW5nIGZvcjxicj4KJmd0OyZndDsmZ3Q7IHRoZSBmaXJzdCB0aW1l Ojxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgLi48YnI+CiZndDsmZ3Q7Jmd0Ozxi cj4KJmd0OyZndDsmZ3Q7IERvd25sb2FkaW5nL3VucGFja2luZyBhbnRsci1weXRob24tcnVudGlt ZT09My4xLjMgKGZyb20gLXI8YnI+CiZndDsmZ3Q7Jmd0OyAvVXNlcnMvenVuZGVsL1NyYy9wYW50 cy88d2JyPjNyZHBhcnR5L3B5dGhvbi9yZXF1aXJlbWVudHMuPHdicj50eHQgKGxpbmUgMykpPGJy PgomZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyAmbmJzcDsgYW50bHItcHl0aG9uLXJ1bnRp bWUgYW4gZXh0ZXJuYWxseSBob3N0ZWQgZmlsZSBhbmQgbWF5IGJlIHVucmVsaWFibGU8YnI+CiZn dDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7ICZuYnNwOyBhbnRsci1weXRob24tcnVudGltZSBp cyBwb3RlbnRpYWxseSBpbnNlY3VyZSBhbmQgdW52ZXJpZmlhYmxlLjxicj4KJmd0OyZndDsmZ3Q7 PGJyPgomZ3Q7Jmd0OyZndDsgJm5ic3A7IERvd25sb2FkaW5nIGFudGxyX3B5dGhvbl9ydW50aW1l LTMuMS4zLjx3YnI+dGFyLmd6ICg3NmtCKTogNzZrQiBkb3dubG9hZGVkPGJyPgomZ3Q7Jmd0OyZn dDs8YnI+CiZndDsmZ3Q7Jmd0OyAmbmJzcDsgUnVubmluZyBzZXR1cC5weTxicj4KJmd0OyZndDsm Z3Q7IChwYXRoOi9Vc2Vycy96dW5kZWwvU3JjL3BhbnRzLzx3YnI+YnVpbGQtc3VwcG9ydC9wYW50 c19kZXBzLnZlbnYvPHdicj5idWlsZC9hbnRsci1weXRob24tcnVudGltZS88d2JyPnNldHVwLnB5 KTxicj4KJmd0OyZndDsmZ3Q7IGVnZ19pbmZvIGZvciBwYWNrYWdlIGFudGxyLXB5dGhvbi1ydW50 aW1lPGJyPgomZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyAuLi48YnI+CiZndDsmZ3Q7Jmd0 Ozxicj4KJmd0OyZndDsmZ3Q7ICZuYnNwOyBGaWxlPGJyPgomZ3Q7Jmd0OyZndDsgIi9Vc2Vycy96 dW5kZWwvU3JjL3BhbnRzLzx3YnI+YnVpbGQtc3VwcG9ydC9wYW50c19kZXBzLnZlbnYvPHdicj5s aWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvPHdicj50d2l0dGVyL2NvbW1vbi9weXRob24vPHdi cj5yZXNvbHZlci5weSIsPGJyPgomZ3Q7Jmd0OyZndDsgbGluZSA4MSwgaW4gcmVxdWlyZXM8YnI+ CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgcmFpc2UgVW50cmFu c2xhdGVhYmxlKCdQYWNrYWdlICVzIGlzIG5vdCB0cmFuc2xhdGVhYmxlLicgJSBwYWNrYWdlKTxi cj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgVW50cmFuc2xhdGVhYmxlOiBQYWNrYWdl PGJyPgomZ3Q7Jmd0OyZndDsgU291cmNlUGFja2FnZSh1JzxhIGhyZWY9Imh0dHA6Ly9hbnRscjMu b3JnL2Rvd25sb2FkL1B5dGhvbi9hbnRscl9weXRob25fcnVudGltZS0zLjEuMy50YXIuZ3oiIHRh cmdldD0iX2JsYW5rIj5odHRwOi8vYW50bHIzLjx3YnI+b3JnL2Rvd25sb2FkL1B5dGhvbi9hbnRs cl88d2JyPnB5dGhvbl9ydW50aW1lLTMuMS4zLnRhci5nejwvYT4nKTxicj4KJmd0OyZndDsmZ3Q7 IGlzIG5vdCB0cmFuc2xhdGVhYmxlLjxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDs8 YnI+CiZndDsmZ3Q7Jmd0OyBGb3J0dW5hdGVseSwgdHJhdmlzLWNpIGlzIHdvcmtpbmcgc28gSSBh bSB0ZXN0aW5nIG15IGNoYW5nZSB0aGVyZSA6LS88YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZn dDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 PGJyPgomZ3Q7Jmd0OyZndDsgT24gRnJpLCBNYXkgMTYsIDIwMTQgYXQgOTo1NCBQTSwgQmVuankg V2VpbmJlcmdlciAmbHQ7PGEgaHJlZj0ibWFpbHRvOmJlbmp5QGZvdXJzcXVhcmUuY29tIiB0YXJn ZXQ9Il9ibGFuayI+YmVuanlAZm91cnNxdWFyZS5jb208L2E+Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBPaCBoaSBC ZW4hIDopPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7IE9uIFRodSwgTWF5IDE1LCAyMDE0IGF0IDU6NDkgQU0sIEVyaWMgQXllcnMg Jmx0OzxhIGhyZWY9Im1haWx0bzp6dW5kZWxAc3F1YXJldXAuY29tIiB0YXJnZXQ9Il9ibGFuayI+ enVuZGVsQHNxdWFyZXVwLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZn dDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmcm9tIEJl biBEYXJuZWxsLCBvbmUgb2Ygb3VyIGVuZ2luZWVycyB3aG88YnI+CiZndDsmZ3Q7Jmd0OyZndDsm Z3Q7IHZvbHVudGVlcmVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBwcm9ibGVtIGFuZCBzdWdnZXN0 ZWQgYSBtYW51YWwgbG9jYWxob3N0PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBtaXJyb3Jpbmcg c3RyYXRlZ3kuICZuYnNwO0FmdGVyIHRoZXNlIGNoYW5nZXMsICZuYnNwO0kgZG9uJ3Qgc2VlIGFu eSBldmlkZW5jZSB0aGF0IGFueTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgbmV0d29yayBkb3du bG9hZHMgYXJlIGdvaW5nIG9uLCBzbyBJIHRoaW5rIGl0IHdvdWxkIHdvcmsgYXJvdW5kIHRoZSBp c3N1ZS48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEkgcHVzaGVkIGEgYnJhbmNoIHRoYXQgdGFr ZXMgYWxsIG9mIGhpcyBzdWdnZXN0aW9ucyBhbmQgY3JlYXRlZCBhIGxvY2FsPGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyBzY3JpcHQgdG8gdXBkYXRlIG15IGxvY2FsIGRpcmVjdG9yeSB3aXRoIHBh Y2thZ2VzOjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9wYW50c2J1aWxkL3BhbnRzL3B1bGwvMTI1IiB0 YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL3BhbnRzYnVpbGQvPHdicj5wYW50cy9w dWxsLzEyNTwvYT48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyBVbmZvcnR1bmF0ZWx5LCB0aGVzZSBjaGFuZ2VzIG1heSBicmVhayBzb21lb25lIGVsc2Ug KHJlbW92ZWQgLS1lZ2cgcGlwPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBmbGFnIGZyb20gcGFu dHNfdmVudiwgcmVtb3ZlZCAtLW5vLWluZGV4IGZyb20gYSByZXF1aXJlbWVudHMudHh0IGZpbGUp PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgVGhpcyBt b3JuaW5nICg4LTkgRWFzdGVybiB0aW1lKSBJIHJhbiB0aGlzIGNvbW1hbmQgYWJvdXQgYSBkb3pl biB0aW1lczxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgYW5kIGl0IGRpZCBub3QgZmFpbCBldmVu IG9uY2UuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsg YnVpbGQtc3VwcG9ydC9weXRob24vY2xlYW4uc2ggJmFtcDsmYW1wOyAuL3BhbnRzPGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgJm5ic3A7SSBkb24ndCBz ZWUgYW55IGV2aWRlbmNlIHRoYXQgYW55IG5ldHdvcmsgZG93bmxvYWRzIGFyZSBnb2luZyBvbiwg c28gSTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgdGhpbmsgaXQgd29ya3MuPGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgSGVyZSBhcmUgdGhlIG1vZHMg dG8gbXkgLmJhc2hyYzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7IGNhdCAmZ3Q7Jmd0O34vLmJhc2hyYyAmbHQ7Jmx0O0VPVDxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsgIyBsb2NhbCBwaXB5IG1pcnJvciBmb3IgcGFudHM8YnI+CiZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7IGV4cG9ydCBQSVBfTk9fSU5ERVg9dHJ1ZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsg ZXhwb3J0IFBJUF9GSU5EX0xJTktTPWZpbGU6Ly8kSE9NRS88d2JyPnB5dGhvbi1wYWNrYWdlczxi cj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgRU9UPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4K Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSGVyZSBpcyB0aGUgc2NyaXB0IHRoYXQgSSB1c2UgdG8gcmVm cmVzaCB0aGUgZGlyZWN0b3J5PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsm Z3Q7Jmd0OyZndDsgY2F0ICZndDt+L2Jpbi9taXJyb3JfcGlweS5zaCAmbHQ7Jmx0O0VPVDxicj4K Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgdW5zZXQgUElQX05PX0lOREVYPGJyPgomZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyB1bnNldCBQSVBfRklORF9MSU5LUzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgbWtk aXIgLXAgfi9weXRob24tcGFja2FnZXMvPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyZndDsgcGlwIGluc3RhbGwgLWQgfi9weXRob24tcGFja2FnZXMvIC1yPGJy PgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAvVXNlcnMvenVuZGVsL1NyYy9wYW50cy88d2JyPjNyZHBh cnR5L3B5dGhvbi90d2l0dGVyLzx3YnI+Y29tbW9ucy9yZXF1aXJlbWVudHMudHh0PGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgcGlwIGluc3RhbGwgLWQg fi9weXRob24tcGFja2FnZXMvIC1yPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAvVXNlcnMvenVu ZGVsL1NyYy9wYW50cy88d2JyPjNyZHBhcnR5L3B5dGhvbi9yZXF1aXJlbWVudHMuPHdicj50eHQ8 YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBFT1Q8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IOKAlC0gTWVzc2FnZSBmcm9t IEJlbjo8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBG WUkgSSBoYXZlIHNvbWUgZXhwZXJpZW5jZSBzZXR0aW5nIHVwIHBhcnRpYWwgUFlQSSBzbmFwc2hv dHMvbWlycm9yczxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgKGF0IFZpZXdmaW5kZXIgd2UgYWN0 dWFsbHkganVzdCB1c2VkIGEgZ2l0IHJlcG8gZnVsbCBvZiB0YXJiYWxscykuIEl0IGxvb2tzPGJy PgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBsaWtlIHBhbnRzIHNoaXBzIGEgcmVxdWlyZW1lbnRzLnR4 dCBpbnN0ZWFkIG9mIHNldHVwLnB5LCBzbyB0aGUgYmFzaWM8YnI+CiZndDsmZ3Q7Jmd0OyZndDsm Z3Q7IHZlcnNpb24gd291bGQgbG9vayBsaWtlIHRoaXM6PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgVG8gY3JlYXRlIGEgc25hcHNob3Q6PGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgbWtkaXIgfi9weXRob24t cGFja2FnZXM8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHBpcCBpbnN0YWxsIC1kIH4vcHl0aG9u LXBhY2thZ2VzIC1yIHJlcXVpcmVtZW50cy50eHQ8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJy PgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBUbyB1c2UgdGhlIG1pcnJvciwgeW91IGFkZCBlaXRoZXIg YSBjb3VwbGUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyBjb21tYW5kLWxpbmUgZmxhZ3Mgd2hlbiBydW5uaW5nIHBpcDo8YnI+CiZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7IGV4cG9ydCBQSVBfTk9fSU5ERVg9dHJ1ZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZn dDsgZXhwb3J0IFBJUF9GSU5EX0xJTktTPWZpbGU6Ly8kSE9NRS88d2JyPnB5dGhvbi1wYWNrYWdl czxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFRoaXMg dGVsbHMgcGlwIHRvIGlnbm9yZSB0aGUgc3RhbmRhcmQgcHlwaSBpbmRleCBhbmQgb25seSB1c2Ug dGhpcyB1cmw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IGluc3RlYWQuIElmIHlvdSBwdXQgdGhl IHB5dGhvbi1wYWNrYWdlcyBkaXJlY3Rvcnkgc29tZXdoZXJlIHdlYi1hY2Nlc3NpYmxlPGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyB5b3UgY2FuIG9mIGNvdXJzZSBjaGFuZ2UgdGhhdCBmaWxlOi8v IGxpbmsgdG8gbWF0Y2guPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsg4oCUIHRoZXJlIHdhcyBhbiBlcnJvciByZXBvcnRlZCBhYm91dCDigJx3aGVlbOKA nSBzbyBCZW4gcHVsbGVkIGFub3RoZXIgdHJpY2s8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IG91 dCBvZiBoaXMgaGF0IOKAlDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7IEhtbSwgdGhhdCByZXF1aXJlbWVudHMudHh0IGZpbGUgaXMgb2RkLiBJdOKAmXMg c2F5aW5nIOKAnGluc3RhbGwgdGhlc2U8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHBhY2thZ2Vz IChhbmQgdGhlaXIgZGVwZW5kZW5jaWVzKSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9wYW50c2J1aWxk LmdpdGh1Yi5pbyIgdGFyZ2V0PSJfYmxhbmsiPnBhbnRzYnVpbGQuZ2l0aHViLmlvPC9hPiBhbmQg bm93aGVyZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgZWxzZeKAnSwgPGEgaHJlZj0iaHR0cDov L2J1dHBhbnRzYnVpbGQuZ2l0aHViLmlvIiB0YXJnZXQ9Il9ibGFuayI+YnV0cGFudHNidWlsZC5n aXRodWIuaW88L2E+IG9ubHkgY29udGFpbnMgdGhlIHR3aXR0ZXIgcGFja2FnZXMgKHNvIGl04oCZ czxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgcmVseWluZyBvbiB0aGVpciBkZXBlbmRlbmNpZXMg YmVpbmcgaW5zdGFsbGVkIHByZXZpb3VzbHkpLiBUaGUg4oCUbm8taW5kZXg8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7IGZsYWcgc2hvdWxkIG5vdCBiZSBjaGVja2VkIGluIHRvIHJlcXVpcmVtZW50 cy50eHQ7IGl0IHNob3VsZCBiZSBpbiB0aGU8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHNjcmlw dCB0aGF0IGNhbGxzIHBpcCAoc28geW91IGNhbiB1c2UgZGlmZmVyZW50IHBpcCBjb25maWd1cmF0 aW9ucyBmb3I8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IGNyZWF0aW5nIGEgbWlycm9yIHZzIGlu c3RhbGxpbmcpLjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsm Z3Q7IEnigJlkIHJlY29tbWVuZCBjaGFuZ2luZyB0aGUgcmVxdWlyZW1lbnRzLnR4dCBmaWxlIHRv IG5vdCBzcGVjaWZ5PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyDigJRuby1pbmRleCwgYnV0IGlu IHRoZSBtZWFudGltZSBJIHRoaW5rIHRoaXMgd2lsbCB3b3JrOjxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHBpcCBpbnN0YWxsIC1kIH4vcHl0aG9uLXBh Y2thZ2VzPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyDigJRmaW5kLWxpbmtzPWZpbGU6Ly8kSE9N RS88d2JyPnB5dGhvbi1wYWNrYWdlcyAtcjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgcGFudHMv M3JkcGFydHkvcHl0aG9uLzx3YnI+cmVxdWlyZW1lbnRzLnR4dDxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsgcGlwIGluc3RhbGwgLWQgfi9weXRob24tcGFja2FnZXM8YnI+CiZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7IOKAlGZpbmQtbGlua3M9ZmlsZTovLyRIT01FLzx3YnI+cHl0aG9uLXBhY2thZ2VzIC1y PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBwYW50cy8zcmRwYXJ0eS9weXRob24vdHdpdHRlci88 d2JyPmNvbW1vbnMvcmVxdWlyZW1lbnRzLnR4dDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFRoZSBleHRyYSDigJRmaW5kLWxpbmtzIHdpbGwgZ2V0IGNv bWJpbmVkIHdpdGggdGhlIG9uZSBpbiB0aGU8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHJlcXVp cmVtZW50cy50eHQgZmlsZSBhbmQgbGV0IGl0IHNlZSB0aGUgZmlsZXMgdGhlIGZpcnN0IOKAnGlu c3RhbGwgLWTigJ08YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IGRvd25sb2FkZWQuPGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsg4oCULSBEb3dubG9hZHMg d2VyZSBzdGlsbCBjb21pbmcgZnJvbSA8YSBocmVmPSJodHRwczovL3B5cGkucHl0aG9uLm9yZy9z aW1wbGUvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvPHdicj5zaW1w bGUvPC9hPiDigJQ8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyBUaGUgcGFudHMgc2NyaXB0cyBhcmUgcGFzc2luZyDigJRlZ2cgdG8gcGlwICh0byB3b3Jr IGFyb3VuZCBzb21lPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBqZXRicmFpbnMgYnVnKTo8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3BhbnRzYnVpbGQvcGFu dHMvYmxvYi9tYXN0ZXIvYnVpbGQtc3VwcG9ydC9wYW50c192ZW52I0w2Ny03NCIgdGFyZ2V0PSJf YmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9wYW50c2J1aWxkLzx3YnI+cGFudHMvYmxvYi9tYXN0 ZXIvYnVpbGQtPHdicj5zdXBwb3J0L3BhbnRzX3ZlbnYjTDY3LTc0PC9hPjxicj4KJmd0OyZndDsm Z3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsjIEluc3Rh bGwgYXMgYW4gZWdnIHNvIElERXMgY2FuIGdyb2sgYWxsIGRlcHMuIEluc3RhbGxpbmcgYXMgc291 cmNlczxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgbWF5PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyAmbmJzcDsgJm5ic3A7IyBydW4gYWZvdWwgb2YgdGhpcyBidWc6PGJyPgomZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyBbPGEgaHJlZj0iaHR0cDovL3lvdXRyYWNrLmpldGJyYWlucy5jb20vaXNzdWUvUFkt NjQ3NyU1RChodHRwOi8veW91dHJhY2suamV0YnJhaW5zLmNvbS9pc3N1ZS9QWS02NDc3KSIgdGFy Z2V0PSJfYmxhbmsiPmh0dHA6Ly95b3V0cmFjay5qZXRicmFpbnMuPHdicj5jb20vaXNzdWUvUFkt NjQ3N10oaHR0cDovLzx3YnI+eW91dHJhY2suamV0YnJhaW5zLmNvbS9pc3N1ZS88d2JyPlBZLTY0 NzcpPC9hPi48YnI+CgoKCgoKJmd0OyZndDsmZ3Q7Jmd0OyZndDsgJm5ic3A7ICZuYnNwOyMgVE9E TzogUmVtb3ZlIHRoZSAtLWVnZyBvbmNlIHRoaXMgaXMgcmVzb2x2ZWQuIEl0IHdvbid0IHdvcmsg aW4gdGhlPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyB3aGVlbCB3b3JsZCBhbnl3YXkuPGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDsgJm5ic3A7cGlwX2V4dHJhPSItLWVnZyI8YnI+CiZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBFZ2dzIGFyZSBwYXJ0 IG9mIHRoZSBzZW1pLWRlcHJlY2F0ZWQgaW5zdGFsbGF0aW9uIHN5c3RlbSB0aGF0IHByZWRhdGVk PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBwaXAsIGFuZCB3aGVuIHRoaXMgZmxhZyBpcyB1c2Vk IEkgdGhpbmsgcGlwIGp1c3QgY2FsbHMgb3V0IHRvIHRoYXQgb2xkZXI8YnI+CiZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7IHN5c3RlbS48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyA8YSBocmVmPSJodHRwczovL3BpcC5weXBhLmlvL2VuL2xhdGVzdC9yZWZlcmVu Y2UvcGlwX2luc3RhbGwuaHRtbCNjbWRvcHRpb24tLWVnZyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBz Oi8vcGlwLnB5cGEuaW8vZW4vbGF0ZXN0Lzx3YnI+cmVmZXJlbmNlL3BpcF9pbnN0YWxsLmh0bWwj PHdicj5jbWRvcHRpb24tLWVnZzwvYT48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFdBUk5JTkc6 IEJlY2F1c2UgdGhpcyBvcHRpb24gb3ZlcnJpZGVzIHBpcOKAmXMgbm9ybWFsIGluc3RhbGwgbG9n aWMsPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyByZXF1aXJlbWVudHMgZmlsZXMgbWF5IG5vdCBi ZWhhdmUgYXMgZXhwZWN0ZWQuKTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7IEkgdGhpbmsgdGhpcyBpcyBjYXVzaW5nIHRoZSBQSVAgZW52aXJvbm1lbnQg dmFyaWFibGVzIHRvIGJlIGlnbm9yZWTigKY8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7IE9uIFdlZCwgTWF5IDE0LCAyMDE0IGF0IDU6NTEgUE0sIFRlamFsIERlc2Fp ICZsdDs8YSBocmVmPSJtYWlsdG86dGRlc2FpQHR3aXR0ZXIuY29tIiB0YXJnZXQ9Il9ibGFuayI+ dGRlc2FpQHR3aXR0ZXIuY29tPC9hPiZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHdyb3Rl Ojxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsgSSB0cmllZCBjbGVhbiB5ZXN0ZXJkYXkgZnJvbSBob21lIGJ1dCBpdCBkaWQgbm90IHdvcmsu PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyBJIHRyaWVkIGl0IGFnYWluIGFuZCBhZ2FpbiBhbmQgYWdhaW4gd2l0aCBubyBsdWNrLjxicj4K Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgVGhl biBKb2hhbiBhc2tlZCBtZSB0byBnbyBnaXQgY2xlYW4gLWZkeCBmaXJzdCBhbmQgaXQgd29ya2Vk Ljxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsgU28gbm90IHZlcnkgc3VyZSBpZiBpdCB3YXMgZ2l0IGNsZWFuIG9yIHBpcHkgd2FzIG5pY2Ug dG8gbWUgdGhhdDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHBhcnRpY3VsYXIgYXR0ZW1w dC48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7IFRoYW5rczxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFRlamFsPGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgT24gV2VkLCBN YXkgMTQsIDIwMTQgYXQgOToyMyBBTSwgQmVuankgV2VpbmJlcmdlcjxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7ICZsdDs8YSBocmVmPSJtYWlsdG86YmVuanlAZm91cnNxdWFyZS5jb20iIHRh cmdldD0iX2JsYW5rIj5iZW5qeUBmb3Vyc3F1YXJlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyBZZXAsIEkgZ2V0IHRoZXNlIHF1aXRlIGZyZXF1ZW50bHksIHNvbWV0aW1lcyB3aXRoIHR3aXR0 ZXIuY29tbW9ucyBhbmQ8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgc29tZXRpbWVz IHdpdGggb3RoZXIgM3JkcGFydHkgZGVwZW5kZW5jaWVzLjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBTaG91bGQgdGhlcmUg YmUgc29tZSBweXRob24gZXF1aXZhbGVudCBvZiB0aGUgaXZ5MiBjYWNoZT88YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgT24gV2VkLCBNYXkgMTQsIDIwMTQgYXQgNzoy OCBBTSwgUGF0cmljayBMYXdzb24gJmx0OzxhIGhyZWY9Im1haWx0bzpwbEBmb3Vyc3F1YXJlLmNv bSIgdGFyZ2V0PSJfYmxhbmsiPnBsQGZvdXJzcXVhcmUuY29tPC9hPiZndDs8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgd3JvdGU6PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSSBkb24ndCB0aGlu ayB3ZSBoYXZlIGEgbWlycm9yIGZvciB0aGUgdHdpdHRlci5jb21tb25zIHBhY2thZ2VzIHRoYXQ8 YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IHBhbnRzIG5lZWRzIHRvIGJvb3Rz dHJhcC4gJm5ic3A7SSBhbHNvIHJ1biBpbnRvIHRoaXMgcHJvYmxlbSB2ZXJ5IGZyZXF1ZW50bHks PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBlc3BlY2lhbGx5IHdoZW4gbXkg aW50ZXJuZXQgaXMgZXZlbiB0aGUgc2xpZ2h0ZXN0IGJpdCBmbGFrZXkuICZuYnNwO1NvbWV0aW1l cyBJPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBqdXN0IGhhdmUgdG8gdHJ5 IHJlcGVhdGVkbHkuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7IE9uIFdlZCwgTWF5IDE0LCAyMDE0IGF0IDc6MTIgQU0sIEVyaWMgQXllcnMgJmx0 OzxhIGhyZWY9Im1haWx0bzp6dW5kZWxAc3F1YXJldXAuY29tIiB0YXJnZXQ9Il9ibGFuayI+enVu ZGVsQHNxdWFyZXVwLmNvbTwvYT4mZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyB3cm90ZTo8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4K Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFRoZXNlICdQYWNrYWdlICVzIGlz IG5vdCB0cmFuc2xhdGFibGUnIGVycm9ycyBJIGJlbGlldmUgYXJlIGNhdXNlZDxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IGJ5IGZhaWxlZCBkb3dubG9hZHMgb2YgcGlw eSBwYWNrYWdlcy4gJm5ic3A7V2hhdCBJIGRvIHRvIGNsZWFyIHRoaXMgdXA6PGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyBidWlsZC1zdXBwb3J0L3B5dGhvbi9jbGVhbi5zaCAmYW1wOyZhbXA7IC4v cGFudHM8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEV2ZW50dWFsbHkgaXQgd29ya3MuICZuYnNw OyBUaWVuIGFuZCBJIHJ1biBpbnRvIHRoaXMgYWxsIHRoZSB0aW1lLjxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEZvdXJzcXVhcmUgYW5kIFR3aXR0ZXIgaGF2ZSBzZXR1 cCBpbnRlcm5hbCBtaXJyb3JzIHRvIG1ha2UgdGhvc2UgZG93bmxvYWRzPGJyPgomZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgbW9yZSByZWxpYWJsZS4gV2UgdHJpZWQgZG9pbmcg c29tZSB0cmlja3Mgd2l0aCBtaXJyb3Jpbmcgc29tZSBmaWxlcyBmcm9tPGJyPgomZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgcmVxdWlyZW1lbnRzLnR4dCBmaWxlcyB0byBsb2Nh bCBkaXJlY3RvcmllcywgYnV0IHJhbiBpbnRvIGEgbnVtYmVyIG9mIHNuYWdzPGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgKC0tbm8taW5kZXggaW4gb25lIG9mIHRoZSBy ZXF1aXJtZW50cyBmaWxlcywgLS1lZ2cgc3BlY2lmaWVkIHNvbWV3aGVyZSksIHNvPGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgd2UgYXJlIHRyeWluZyB0byBzZXR1cCBh IG1pcnJvciB0b28uPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBPbiBXZWQsIE1h eSAxNCwgMjAxNCBhdCAzOjI5IEFNLCAnVGVqYWwgRGVzYWknIHZpYSBQYW50cyBEZXZlbG9wZXJz PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgJmx0OzxhIGhyZWY9Im1h aWx0bzpwYW50cy1kZXZlbEBnb29nbGVncm91cHMuY29tIiB0YXJnZXQ9Il9ibGFuayI+cGFudHMt ZGV2ZWxAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBPbiBXZWQsIE1heSAxNCwgMjAxNCBh dCAxMjoyOCBBTSwgVGVqYWwgRGVzYWkgJmx0OzxhIGhyZWY9Im1haWx0bzp0ZGVzYWlAdHdpdHRl ci5jb20iIHRhcmdldD0iX2JsYW5rIj50ZGVzYWlAdHdpdHRlci5jb208L2E+Jmd0Ozxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyB3cm90ZTo8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyB5ZXAgdHJpZWQgaXQgcmlnaHQgbm93Ljxicj4K Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgU3RpbGwgZ2V0IHRo ZSBzYW1lIGVycm9yLjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEkg Y2FuIHJ1biAuL3BhbnRzIGdvYWwgZ29hbHM8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7IEJ1dCAuL3BhbnRzIHRlc3QgJmx0OyZndDsgd2hpY2ggZGVwZW5k cyBvbiB0d2l0dGVyIGNvbW1vbnMgZmFpbHMuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7IGkgbWVhbnQgJm5ic3A7Li9wYW50cyAmbHQ7dGVzdF90YXJnZXQmZ3Q7PGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFRoYW5rczxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgVGVqYWw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsgT24gV2VkLCBNYXkgMTQsIDIwMTQgYXQgMTI6MTMgQU0sIFRpZW4gTmd1eWVuICZsdDs8YSBo cmVmPSJtYWlsdG86dGllbkBzcXVhcmV1cC5jb20iIHRhcmdldD0iX2JsYW5rIj50aWVuQHNxdWFy ZXVwLmNvbTwvYT4mZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyB3cm90ZTo8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7IEhhdmUgeW91IHRyaWVkIHJtIGJ1aWxkLXN1cHBvcnQvKi52ZW52Pzxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgT24gTWF5IDEzLCAyMDE0IDEx OjE3IFBNLCAiJ1RlamFsIERlc2FpJyB2aWEgUGFudHMgRGV2ZWxvcGVycyI8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbHQ7PGEgaHJlZj0ibWFp bHRvOnBhbnRzLWRldmVsQGdvb2dsZWdyb3Vwcy5jb20iIHRhcmdldD0iX2JsYW5rIj5wYW50cy1k ZXZlbEBnb29nbGVncm91cHMuY29tPC9hPiZndDsgd3JvdGU6PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEhpLDxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBJIGFtIGdldHRpbmcgdGhp cyBlcnJvciBhZnRlciBkb2luZyBhIGNsZWFuLWFsbC48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSSByZW1lbWJlciByZWFkaW5nIHJlYWRp bmcgYWJvdXQgbmV3IHR3aXR0ZXIgY29tbW9ucyBwdWJsaXNoLjxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBJcyB0aGUgYmVsb3cgZXJyb3Ig ZHVlIHRvIHRoaXM/PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7IFByb2JsZW0gZXhlY3V0aW5nIFB5dGhvbkJ1aWxkZXIgZm9yIHRhcmdldHM8 YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsg T3JkZXJlZFNldChbUHl0aG9uQmluYXJ5KHNyYy88d2JyPnB5dGhvbi9wYW50cy9iaW4vQlVJTEQ6 cGFudHMpXTx3YnI+KTogVHJhY2ViYWNrPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOjxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDsg RmlsZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyAiL1VzZXJzL3RkZXNhaS9wcm9qZWN0cy9wYW50cy88d2JyPnNyYy9weXRob24vcGFudHMv Y29tbWFuZHMvPHdicj5idWlsZC5weSIsIGxpbmUgMTE2LDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBpbiBfcHl0aG9uX2J1aWxkPGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7ICZuYnNw OyAmbmJzcDsgY29ubl90aW1lb3V0PXNlbGYub3B0aW9ucy48d2JyPmNvbm5fdGltZW91dCk8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgJm5i c3A7IEZpbGU8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsgIi9Vc2Vycy90ZGVzYWkvcHJvamVjdHMvcGFudHMvPHdicj5zcmMvcHl0aG9uL3Bh bnRzL3B5dGhvbi88d2JyPnB5dGhvbl9idWlsZGVyLnB5Iiw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgbGluZSA1MCwgaW4gYnVpbGQ8YnI+ CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgJm5i c3A7ICZuYnNwOyBjb25uX3RpbWVvdXQ9Y29ubl90aW1lb3V0KS48d2JyPnJ1bigpPGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7ICZuYnNwOyBG aWxlPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7ICIvVXNlcnMvdGRlc2FpL3Byb2plY3RzL3BhbnRzLzx3YnI+c3JjL3B5dGhvbi9wYW50cy9w eXRob24vPHdicj5iaW5hcnlfYnVpbGRlci5weSIsPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IGxpbmUgNTIsIGluIHJ1bjxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDsgJm5i c3A7IGVudiA9IHNlbGYuY2hyb290LmR1bXAoKTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDsgRmlsZTxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAiL1VzZXJzL3RkZXNhaS9w cm9qZWN0cy9wYW50cy88d2JyPnNyYy9weXRob24vcGFudHMvcHl0aG9uLzx3YnI+cHl0aG9uX2No cm9vdC5weSIsPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7IGxpbmUgMTg5LCBpbiBkdW1wPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgcGxhdGZvcm1zPXBsYXRm b3Jtcyk8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsgJm5ic3A7IEZpbGU8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsgIi9Vc2Vycy90ZGVzYWkvcHJvamVjdHMvcGFudHMvPHdicj5zcmMv cHl0aG9uL3BhbnRzL3B5dGhvbi88d2JyPnJlc29sdmVyLnB5IiwgbGluZSA5OSw8YnI+CiZndDsm Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgaW4gcmVzb2x2 ZV9tdWx0aTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyAmbmJzcDsgJm5ic3A7IHBsYXRmb3JtPXBsYXRmb3JtKTxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDsgRmlsZTxicj4K Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAiL1Vz ZXJzL3RkZXNhaS9wcm9qZWN0cy9wYW50cy88d2JyPmJ1aWxkLXN1cHBvcnQvcGFudHNfZGVwcy52 ZW52Lzx3YnI+bGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzLzx3YnI+dHdpdHRlci9jb21tb24v cHl0aG9uLzx3YnI+cmVzb2x2ZXIucHkiLDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBsaW5lIDEwNywgaW4gcmVzb2x2ZTxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDsgJm5i c3A7IG5ld19yZXF1aXJlbWVudHMudXBkYXRlKDx3YnI+cmVxdWlyZXMoaGlnaGVzdF9wYWNrYWdl LDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyByZXF1aXJlbWVudCkpPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7ICZuYnNwOyBGaWxlPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7ICIvVXNlcnMvdGRlc2FpL3Byb2plY3RzL3BhbnRz Lzx3YnI+YnVpbGQtc3VwcG9ydC9wYW50c19kZXBzLnZlbnYvPHdicj5saWIvcHl0aG9uMi43L3Np dGUtcGFja2FnZXMvPHdicj50d2l0dGVyL2NvbW1vbi9weXRob24vPHdicj5yZXNvbHZlci5weSIs PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 IGxpbmUgODEsIGluIHJlcXVpcmVzPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgcmFpc2UgVW50cmFuc2xhdGVhYmxl KCdQYWNrYWdlICVzIGlzIG5vdCB0cmFuc2xhdGVhYmxlLicgJTxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBwYWNrYWdlKTxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBVbnRyYW5zbGF0 ZWFibGU6IFBhY2thZ2U8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyZndDsgU291cmNlUGFja2FnZSh1JzxhIGhyZWY9Imh0dHBzOi8vcGFudHNidWls ZC5naXRodWIuaW8vY2hlZXNlc2hvcC90aGlyZF9wYXJ0eS90d2l0dGVyLWNvbW1vbnMvYjNlYmRh ZGFhYzBjYzEzNzZjOThlNWIyNDkwZDQyZWZmZDk5YTJlNC90d2l0dGVyLmNvbW1vbi5jb2xsZWN0 aW9ucy0wLjMuMC50YXIuZ3oiIHRhcmdldD0iX2JsYW5rIj5odHRwczovLzx3YnI+cGFudHNidWls ZC5naXRodWIuaW8vPHdicj5jaGVlc2VzaG9wL3RoaXJkX3BhcnR5
...

[Message clipped]  


Brian Wickman

unread,
Jun 11, 2014, 12:44:15 PM6/11/14
to Patrick Lawson, Ben Darnell, Eric Ayers, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel
This won't affect anything that Pants builds though, as it doesn't use pip.

Patrick Lawson

unread,
Jun 11, 2014, 12:48:50 PM6/11/14
to Brian Wickman, Ben Darnell, Eric Ayers, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel
But doesn't PEX building already cache the archives themselves?  It may crawl unnecessarily, but it doesn't download unnecessarily--and in my experience these issues were caused by actually downloading the archives.

Eric Ayers

unread,
Jun 11, 2014, 12:53:26 PM6/11/14
to Brian Wickman, Patrick Lawson, Ben Darnell, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel

I see .pip_download_cache being used. I’m sure that is helping! thanks Patrick.

However, I’ve just run ci.sh 6 times and consecutively and I got the same failure:


  File "/Users/zundel/Src/pants/build-support/pants_deps.venv/lib/python2.7/site-packages/twitter/common/python/resolver.py", line 81, in requires 
    raise Untranslateable('Package %s is not translateable.' % package) 
Untranslateable: Package SourcePackage(u'https://pantsbuild.github.io/cheeseshop/third_party/twitter-commons/c4a0cd39293142e9d7714cc58396735e284c77d8/twitter.common.collections-0.3.0.tar.gz') is not translateable.

I didn’t do any kind of ‘clean’ in the middle.
Then I tried ‘git clean -fdx’ and was subsequently able to build.

Here is what got deleted. If this wasn’t a fluke, maybe we just need to we need to incorporate this into ci.sh or our bootstrap?

$ git clean -fdx
Removing .BUILD.CPython-2.7.6.pyc
Removing .BUILD.tools.CPython-2.7.6.pyc
Removing .idea/
Removing .pants.d/
Removing .pants.run
Removing 3rdparty/python/.BUILD.CPython-2.7.6.pyc
Removing 3rdparty/python/twitter/commons/.BUILD.CPython-2.7.6.pyc
Removing build-support/pants_deps.venv/
Removing build-support/virtualenv-1.11.4.tar.gz
Removing build-support/virtualenv-1.11.4/
Removing dist/
Removing examples.txt
Removing src/java/com/pants/examples/unicode/
Removing src/python/pants/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/.BUILD.transitional.CPython-2.7.6.pyc
Removing src/python/pants/__init__.pyc
Removing src/python/pants/authentication/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/authentication/__init__.pyc
Removing src/python/pants/authentication/netrc_util.pyc
Removing src/python/pants/backend/__init__.pyc
Removing src/python/pants/backend/codegen/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/codegen/__init__.pyc
Removing src/python/pants/backend/codegen/register.pyc
Removing src/python/pants/backend/codegen/targets/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/codegen/targets/__init__.pyc
Removing src/python/pants/backend/codegen/targets/java_antlr_library.pyc
Removing src/python/pants/backend/codegen/targets/java_protobuf_library.pyc
Removing src/python/pants/backend/codegen/targets/java_thrift_library.pyc
Removing src/python/pants/backend/codegen/targets/jaxb_library.pyc
Removing src/python/pants/backend/codegen/targets/python_antlr_library.pyc
Removing src/python/pants/backend/codegen/targets/python_thrift_library.pyc
Removing src/python/pants/backend/codegen/tasks/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/codegen/tasks/__init__.pyc
Removing src/python/pants/backend/codegen/tasks/antlr_gen.pyc
Removing src/python/pants/backend/codegen/tasks/apache_thrift_gen.pyc
Removing src/python/pants/backend/codegen/tasks/code_gen.pyc
Removing src/python/pants/backend/codegen/tasks/jaxb_gen.pyc
Removing src/python/pants/backend/codegen/tasks/protobuf_gen.pyc
Removing src/python/pants/backend/codegen/tasks/scrooge_gen.pyc
Removing src/python/pants/backend/core/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/core/__init__.pyc
Removing src/python/pants/backend/core/register.pyc
Removing src/python/pants/backend/core/targets/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/core/targets/__init__.pyc
Removing src/python/pants/backend/core/targets/dependencies.pyc
Removing src/python/pants/backend/core/targets/doc.pyc
Removing src/python/pants/backend/core/targets/resources.pyc
Removing src/python/pants/backend/core/tasks/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/core/tasks/__init__.pyc
Removing src/python/pants/backend/core/tasks/build_lint.pyc
Removing src/python/pants/backend/core/tasks/builddictionary.pyc
Removing src/python/pants/backend/core/tasks/check_exclusives.pyc
Removing src/python/pants/backend/core/tasks/clean.pyc
Removing src/python/pants/backend/core/tasks/console_task.pyc
Removing src/python/pants/backend/core/tasks/dependees.pyc
Removing src/python/pants/backend/core/tasks/filemap.pyc
Removing src/python/pants/backend/core/tasks/filter.pyc
Removing src/python/pants/backend/core/tasks/group_task.pyc
Removing src/python/pants/backend/core/tasks/list_goals.pyc
Removing src/python/pants/backend/core/tasks/listtargets.pyc
Removing src/python/pants/backend/core/tasks/markdown_to_html.pyc
Removing src/python/pants/backend/core/tasks/minimal_cover.pyc
Removing src/python/pants/backend/core/tasks/pathdeps.pyc
Removing src/python/pants/backend/core/tasks/paths.pyc
Removing src/python/pants/backend/core/tasks/prepare_resources.pyc
Removing src/python/pants/backend/core/tasks/reporting_server.pyc
Removing src/python/pants/backend/core/tasks/roots.pyc
Removing src/python/pants/backend/core/tasks/scm_publish.pyc
Removing src/python/pants/backend/core/tasks/sorttargets.pyc
Removing src/python/pants/backend/core/tasks/targets_help.pyc
Removing src/python/pants/backend/core/tasks/task.pyc
Removing src/python/pants/backend/core/wrapped_globs.pyc
Removing src/python/pants/backend/jvm/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/jvm/__init__.pyc
Removing src/python/pants/backend/jvm/ivy_utils.pyc
Removing src/python/pants/backend/jvm/jvm_tool_bootstrapper.pyc
Removing src/python/pants/backend/jvm/register.pyc
Removing src/python/pants/backend/jvm/targets/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/jvm/targets/__init__.pyc
Removing src/python/pants/backend/jvm/targets/annotation_processor.pyc
Removing src/python/pants/backend/jvm/targets/artifact.pyc
Removing src/python/pants/backend/jvm/targets/benchmark.pyc
Removing src/python/pants/backend/jvm/targets/credentials.pyc
Removing src/python/pants/backend/jvm/targets/exclude.pyc
Removing src/python/pants/backend/jvm/targets/exportable_jvm_library.pyc
Removing src/python/pants/backend/jvm/targets/jar_dependency.pyc
Removing src/python/pants/backend/jvm/targets/jar_library.pyc
Removing src/python/pants/backend/jvm/targets/jarable.pyc
Removing src/python/pants/backend/jvm/targets/java_agent.pyc
Removing src/python/pants/backend/jvm/targets/java_library.pyc
Removing src/python/pants/backend/jvm/targets/java_tests.pyc
Removing src/python/pants/backend/jvm/targets/jvm_binary.pyc
Removing src/python/pants/backend/jvm/targets/jvm_target.pyc
Removing src/python/pants/backend/jvm/targets/repository.pyc
Removing src/python/pants/backend/jvm/targets/scala_library.pyc
Removing src/python/pants/backend/jvm/targets/scala_tests.pyc
Removing src/python/pants/backend/jvm/targets/scalac_plugin.pyc
Removing src/python/pants/backend/jvm/tasks/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/jvm/tasks/__init__.pyc
Removing src/python/pants/backend/jvm/tasks/benchmark_run.pyc
Removing src/python/pants/backend/jvm/tasks/binary_create.pyc
Removing src/python/pants/backend/jvm/tasks/bootstrap_jvm_tools.pyc
Removing src/python/pants/backend/jvm/tasks/bundle_create.pyc
Removing src/python/pants/backend/jvm/tasks/check_published_deps.pyc
Removing src/python/pants/backend/jvm/tasks/checkstyle.pyc
Removing src/python/pants/backend/jvm/tasks/dependencies.pyc
Removing src/python/pants/backend/jvm/tasks/depmap.pyc
Removing src/python/pants/backend/jvm/tasks/detect_duplicates.pyc
Removing src/python/pants/backend/jvm/tasks/eclipse_gen.pyc
Removing src/python/pants/backend/jvm/tasks/filedeps.pyc
Removing src/python/pants/backend/jvm/tasks/ide_gen.pyc
Removing src/python/pants/backend/jvm/tasks/idea_gen.pyc
Removing src/python/pants/backend/jvm/tasks/ivy_resolve.pyc
Removing src/python/pants/backend/jvm/tasks/ivy_task_mixin.pyc
Removing src/python/pants/backend/jvm/tasks/jar_create.pyc
Removing src/python/pants/backend/jvm/tasks/jar_publish.pyc
Removing src/python/pants/backend/jvm/tasks/jar_task.pyc
Removing src/python/pants/backend/jvm/tasks/javadoc_gen.pyc
Removing src/python/pants/backend/jvm/tasks/junit_run.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_binary_task.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/__init__.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/analysis.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/analysis_parser.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/analysis_tools.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/java/__init__.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/java/java_compile.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/java/jmake_analysis.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/java/jmake_analysis_parser.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/jvm_compile.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/jvm_dependency_analyzer.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/scala/__init__.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/scala/scala_compile.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/scala/zinc_analysis.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/scala/zinc_analysis_diff.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/scala/zinc_analysis_parser.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_compile/scala/zinc_utils.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_run.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_task.pyc
Removing src/python/pants/backend/jvm/tasks/jvm_tool_task_mixin.pyc
Removing src/python/pants/backend/jvm/tasks/jvmdoc_gen.pyc
Removing src/python/pants/backend/jvm/tasks/nailgun_task.pyc
Removing src/python/pants/backend/jvm/tasks/provides.pyc
Removing src/python/pants/backend/jvm/tasks/scala_repl.pyc
Removing src/python/pants/backend/jvm/tasks/scaladoc_gen.pyc
Removing src/python/pants/backend/jvm/tasks/specs_run.pyc
Removing src/python/pants/backend/maven_layout/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/maven_layout/__init__.pyc
Removing src/python/pants/backend/maven_layout/maven_layout.pyc
Removing src/python/pants/backend/maven_layout/register.pyc
Removing src/python/pants/backend/python/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/python/__init__.pyc
Removing src/python/pants/backend/python/antlr_builder.pyc
Removing src/python/pants/backend/python/binary_builder.pyc
Removing src/python/pants/backend/python/code_generator.pyc
Removing src/python/pants/backend/python/commands/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/python/commands/__init__.pyc
Removing src/python/pants/backend/python/commands/build.pyc
Removing src/python/pants/backend/python/commands/py.pyc
Removing src/python/pants/backend/python/commands/setup_py.pyc
Removing src/python/pants/backend/python/interpreter_cache.pyc
Removing src/python/pants/backend/python/python_artifact.pyc
Removing src/python/pants/backend/python/python_builder.pyc
Removing src/python/pants/backend/python/python_chroot.pyc
Removing src/python/pants/backend/python/python_requirement.pyc
Removing src/python/pants/backend/python/python_requirements.pyc
Removing src/python/pants/backend/python/python_setup.pyc
Removing src/python/pants/backend/python/register.pyc
Removing src/python/pants/backend/python/resolver.pyc
Removing src/python/pants/backend/python/sdist_builder.pyc
Removing src/python/pants/backend/python/targets/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/python/targets/__init__.pyc
Removing src/python/pants/backend/python/targets/python_binary.pyc
Removing src/python/pants/backend/python/targets/python_library.pyc
Removing src/python/pants/backend/python/targets/python_requirement_library.pyc
Removing src/python/pants/backend/python/targets/python_root.pyc
Removing src/python/pants/backend/python/targets/python_target.pyc
Removing src/python/pants/backend/python/targets/python_tests.pyc
Removing src/python/pants/backend/python/tasks/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/backend/python/tasks/__init__.pyc
Removing src/python/pants/backend/python/tasks/python_run_tests.pyc
Removing src/python/pants/backend/python/tasks/python_task.pyc
Removing src/python/pants/backend/python/tasks/setup_python_environment.pyc
Removing src/python/pants/backend/python/test_builder.pyc
Removing src/python/pants/backend/python/thrift_builder.pyc
Removing src/python/pants/base/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/base/__init__.pyc
Removing src/python/pants/base/address.pyc
Removing src/python/pants/base/build_environment.pyc
Removing src/python/pants/base/build_file.pyc
Removing src/python/pants/base/build_file_parser.pyc
Removing src/python/pants/base/build_graph.pyc
Removing src/python/pants/base/build_invalidator.pyc
Removing src/python/pants/base/build_manual.pyc
Removing src/python/pants/base/build_root.pyc
Removing src/python/pants/base/cache_manager.pyc
Removing src/python/pants/base/config.pyc
Removing src/python/pants/base/dev_backend_loader.pyc
Removing src/python/pants/base/exceptions.pyc
Removing src/python/pants/base/fingerprint_strategy.pyc
Removing src/python/pants/base/generator.pyc
Removing src/python/pants/base/hash_utils.pyc
Removing src/python/pants/base/mustache.pyc
Removing src/python/pants/base/payload.pyc
Removing src/python/pants/base/rcfile.pyc
Removing src/python/pants/base/revision.pyc
Removing src/python/pants/base/run_info.pyc
Removing src/python/pants/base/source_root.pyc
Removing src/python/pants/base/spec_parser.pyc
Removing src/python/pants/base/target.pyc
Removing src/python/pants/base/worker_pool.pyc
Removing src/python/pants/base/workunit.pyc
Removing src/python/pants/bin/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/binary_util.pyc
Removing src/python/pants/cache/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/cache/__init__.pyc
Removing src/python/pants/cache/artifact.pyc
Removing src/python/pants/cache/artifact_cache.pyc
Removing src/python/pants/cache/cache_setup.pyc
Removing src/python/pants/cache/combined_artifact_cache.pyc
Removing src/python/pants/cache/local_artifact_cache.pyc
Removing src/python/pants/cache/pinger.pyc
Removing src/python/pants/cache/read_write_artifact_cache.pyc
Removing src/python/pants/cache/restful_artifact_cache.pyc
Removing src/python/pants/commands/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/commands/__init__.pyc
Removing src/python/pants/commands/command.pyc
Removing src/python/pants/commands/goal.pyc
Removing src/python/pants/engine/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/engine/__init__.pyc
Removing src/python/pants/engine/engine.pyc
Removing src/python/pants/engine/linear_engine.pyc
Removing src/python/pants/fs/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/fs/__init__.pyc
Removing src/python/pants/fs/archive.pyc
Removing src/python/pants/fs/fs.pyc
Removing src/python/pants/goal/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/goal/__init__.pyc
Removing src/python/pants/goal/aggregated_timings.pyc
Removing src/python/pants/goal/artifact_cache_stats.pyc
Removing src/python/pants/goal/context.pyc
Removing src/python/pants/goal/error.pyc
Removing src/python/pants/goal/group.pyc
Removing src/python/pants/goal/help.pyc
Removing src/python/pants/goal/initialize_reporting.pyc
Removing src/python/pants/goal/option_helpers.pyc
Removing src/python/pants/goal/phase.pyc
Removing src/python/pants/goal/products.pyc
Removing src/python/pants/goal/run_tracker.pyc
Removing src/python/pants/ivy/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/ivy/__init__.pyc
Removing src/python/pants/ivy/bootstrapper.pyc
Removing src/python/pants/ivy/ivy.pyc
Removing src/python/pants/java/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/java/__init__.pyc
Removing src/python/pants/java/distribution/__init__.pyc
Removing src/python/pants/java/distribution/distribution.pyc
Removing src/python/pants/java/executor.pyc
Removing src/python/pants/java/jar/__init__.pyc
Removing src/python/pants/java/jar/manifest.pyc
Removing src/python/pants/java/nailgun_client.pyc
Removing src/python/pants/java/nailgun_executor.pyc
Removing src/python/pants/java/util.pyc
Removing src/python/pants/net/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/net/__init__.pyc
Removing src/python/pants/net/http/__init__.pyc
Removing src/python/pants/net/http/fetcher.pyc
Removing src/python/pants/process/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/process/__init__.pyc
Removing src/python/pants/process/xargs.pyc
Removing src/python/pants/reporting/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/reporting/__init__.pyc
Removing src/python/pants/reporting/html_reporter.pyc
Removing src/python/pants/reporting/linkify.pyc
Removing src/python/pants/reporting/plaintext_reporter.pyc
Removing src/python/pants/reporting/quiet_reporter.pyc
Removing src/python/pants/reporting/report.pyc
Removing src/python/pants/reporting/reporter.pyc
Removing src/python/pants/reporting/reporting_server.pyc
Removing src/python/pants/reporting/reporting_utils.pyc
Removing src/python/pants/rwbuf/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/rwbuf/__init__.pyc
Removing src/python/pants/rwbuf/read_write_buffer.pyc
Removing src/python/pants/scm/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/scm/__init__.pyc
Removing src/python/pants/scm/git.pyc
Removing src/python/pants/thrift_util.pyc
Removing src/python/pants/version/.BUILD.CPython-2.7.6.pyc
Removing src/python/pants/version/__init__.pyc
Removing tests/python/example_test/hello/greet/__pycache__/
Removing tests/python/pants_test/__pycache__/
Removing tests/python/pants_test/authentication/__pycache__/
Removing tests/python/pants_test/base/__pycache__/
Removing tests/python/pants_test/cache/__pycache__/
Removing tests/python/pants_test/commands/__pycache__/
Removing tests/python/pants_test/engine/__pycache__/
Removing tests/python/pants_test/fs/__pycache__/
Removing tests/python/pants_test/java/distribution/__pycache__/
Removing tests/python/pants_test/net/http/__pycache__/
Removing tests/python/pants_test/process/__pycache__/
Removing tests/python/pants_test/python/__pycache__/
Removing tests/python/pants_test/reporting/__pycache__/
Removing tests/python/pants_test/scm/__pycache__/
Removing tests/python/pants_test/targets/__pycache__/
Removing tests/python/pants_test/tasks/__pycache__/

Removing tests/python/pants_test/tasks/jvm_compile/scala/__pycache__/


On Wed, Jun 11, 2014 at 12:44 PM, Brian Wickman <wic...@twitter.com> wrote:

John Ioannidis

unread,
Jun 12, 2014, 1:20:02 AM6/12/14
to Eric Ayers, Brian Wickman, Patrick Lawson, Ben Darnell, Tejal Desai, Larry Hosken, Benjy Weinberger, Tien Nguyen, pants-devel
I've spent most of the last seven hours trying to get two consecutive pants builds to build (further complicated by the fact that I need to merge the twitter-internal components).

Why have set ourselves up to rely on an unreliable component such as the ivy cache, with requirements fetched throughout the build process? Can't we know ahead of time all the external packages we depend on, bring them in and verify them before starting the excruciatingly long pants build process?

(IMnsHO we shoudln't depend on anything not in source form that can be brought and compiled locally, but this view seems to be heretical).

/ji
Reply all
Reply to author
Forward
0 new messages