# Bazaar revision bundle v0.9
#
# message:
#   Add a NEWS entry for the changes.
#   
# committer: James Westby <jw+debian@jameswestby.net>
# date: Mon 2007-05-14 21:45:16.555999994 +0100

=== modified file NEWS
--- NEWS
+++ NEWS
@@ -1,5 +1,11 @@
 IN DEVELOPMENT
 
+  IMPROVEMENTS:
+  
+    * There are two new help topics, working-trees and repositories that
+      attempt to explain these concepts. (James Westby, John Arbash Meinel,
+      Aaron Bentley)
+
   BUGFIXES:
 
     * ``bzr push`` should only connect to the remote location one time.

=== modified file bzrlib/builtins.py // last-changed:jw+debian@jameswestby.net-
... 20070514204247-mcxwep2on9g5p30w
--- bzrlib/builtins.py
+++ bzrlib/builtins.py
@@ -249,7 +249,7 @@
 
     To re-create the working tree, use "bzr checkout".
     """
-    _see_also = ['checkout']
+    _see_also = ['checkout', 'working-trees']
 
     takes_args = ['location?']
 
@@ -669,7 +669,7 @@
     location can be accessed.
     """
 
-    _see_also = ['pull', 'update']
+    _see_also = ['pull', 'update', 'working-trees']
     takes_options = ['remember', 'overwrite', 'verbose',
         Option('create-prefix',
                help='Create the path leading up to the branch '
@@ -812,8 +812,9 @@
                 try:
                     tree_to = dir_to.open_workingtree()
                 except errors.NotLocalUrl:
-                    warning('This transport does not update the working '
-                            'tree of: %s' % (br_to.base,))
+                    warning("This transport does not update the working " 
+                            "tree of: %s. See 'bzr help working-trees' for "
+                            "more information." % br_to.base)
                     push_result = br_from.push(br_to, overwrite)
                 except errors.NoWorkingTree:
                     push_result = br_from.push(br_to, overwrite)
@@ -1017,7 +1018,7 @@
     'bzr revert' instead of 'bzr commit' after the update.
     """
 
-    _see_also = ['pull']
+    _see_also = ['pull', 'working-trees']
     takes_args = ['dir?']
     aliases = ['up']
 
@@ -1061,7 +1062,7 @@
 
     Branches and working trees will also report any missing revisions.
     """
-    _see_also = ['revno']
+    _see_also = ['revno', 'working-trees', 'repositories']
     takes_args = ['location?']
     takes_options = ['verbose']
 
@@ -1312,8 +1313,11 @@
 class cmd_init_repository(Command):
     """Create a shared repository to hold branches.
 
-    New branches created under the repository directory will store their revisions
-    in the repository, not in the branch directory.
+    New branches created under the repository directory will store their
+    revisions in the repository, not in the branch directory.
+
+    If the --no-trees option is used then the branches in the repository
+    will not have working trees by default.
 
     example:
         bzr init-repo --no-trees repo
@@ -1321,6 +1325,8 @@
         bzr checkout --lightweight repo/trunk trunk-checkout
         cd trunk-checkout
         (add files here)
+
+    See 'bzr help repositories' for more information.
     """
 
     _see_also = ['init', 'branch', 'checkout']

=== modified file bzrlib/help_topics.py // last-changed:jw+debian@jameswestby.n
... et-20070514204247-mcxwep2on9g5p30w
--- bzrlib/help_topics.py
+++ bzrlib/help_topics.py
@@ -276,6 +276,82 @@
               commits are only made locally
 """
 
+_repositories = \
+"""Repositories
+
+Repositories in Bazaar are where committed information is stored. It is
+possible to create a shared repository which allows multiple branches to
+share their information in the same location. When a new branch is
+created it will first look to see if there is a containing repository it
+can share.
+
+When two branches of the same project share a repository, there is
+generally a large space saving. For some operations (e.g. branching
+within the repository) this translates in to a large time saving.
+
+To create a shared repository use the init-repository command (or the alias
+init-repo). This command takes the location of the repository to create. This
+means that 'bzr init-repository repo' will create a directory named 'repo',
+which contains a shared repository. Any new branches that are created in this
+directory will then use it for storage.
+
+It is a good idea to create a repository whenever you might create more
+than one branch of a project. This is true for both working areas where you
+are doing the development, and any server areas that you use for hosting
+projects. In the latter case, it is common to want branches without working
+trees. Since the files in the branch will not be edited directly there is no
+need to use up disk space for a working tree. To create a repository in which
+the branches will not have working trees pass the '--no-trees' option to
+'init-repository'.
+
+Related commands:
+
+  init-repository   Create a shared repository. Use --no-trees to create one
+                    in which new branches won't get a working tree.
+"""
+
+
+_working_trees = \
+"""Working Trees
+
+A working tree is the contents of a branch placed on disk so that you can
+see the files and edit them. The working tree is where you make changes to a
+branch, and when you commit the current state of the working tree is the
+snapshot that is recorded in the commit.
+
+When you push a branch to a remote system, a working tree will not be
+created. If one is already present the files will not be updated. The
+branch information will be updated and the working tree will be marked
+as out-of-date. Updating a working tree remotely is difficult, as there
+may be uncommitted changes or the update may cause content conflicts that are
+difficult to deal with remotely.
+
+If you have a branch with no working tree you can use the 'checkout' command
+to create a working tree. If you run 'bzr checkout .' from the branch it will
+create the working tree. If the branch is updated remotely, you can update the
+working tree by running 'bzr update' in that directory.
+
+If you have a branch with a working tree that you do not want the 'remove-tree'
+command will remove the tree if it is safe. This can be done to avoid the
+warning about the remote working tree not being updated when pushing to the
+branch. It can also be useful when working with a '--no-trees' repository
+(see 'bzr help repositories').
+
+If you want to have a working tree on a remote machine that you push to you
+can either run 'bzr update' in the remote branch after each push, or use some
+other method to update the tree during the push. There is an 'rspush' plugin
+that will update the working tree using rsync as well as doing a push. There
+is also a 'push-and-update' plugin that automates running 'bzr update' via SSH
+after each push.
+
+Useful commands:
+
+  checkout     Create a working tree when a branch does not have one.
+  remove-tree  Removes the working tree from a branch when it is safe to do so.
+  update       When a working tree is out of sync with it's associated branch
+               this will update the tree to match the branch.
+"""
+
 
 topic_registry.register("revisionspec", _help_on_revisionspec,
                         "Explain how to use --revision")
@@ -295,6 +371,10 @@
     from bzrlib import bugtracker
     return bugtracker.tracker_registry.help_topic(topic)
 topic_registry.register('bugs', get_bugs_topic, 'Bug tracker support')
+topic_registry.register('repositories', _repositories,
+                        'Basic information on shared repositories.')
+topic_registry.register('working-trees', _working_trees,
+                        'Information on working trees')
 
 
 class HelpTopicIndex(object):
@@ -355,3 +435,4 @@
     def get_help_topic(self):
         """Return the help topic this can be found under."""
         return self.topic
+

=== modified file bzrlib/tests/blackbox/test_help.py // last-changed:jw+debian@
... jameswestby.net-20070514204247-mcxwep2on9g5p30w
--- bzrlib/tests/blackbox/test_help.py
+++ bzrlib/tests/blackbox/test_help.py
@@ -19,6 +19,7 @@
 """
 
 
+import bzrlib
 from bzrlib.tests.blackbox import ExternalBase
 
 
@@ -69,6 +70,16 @@
         self.assertContainsRe(out, 'https://')
         self.assertContainsRe(out, 'sftp://')
 
+    def test_help_repositories(self):
+        """Smoke test for 'bzr help repositories'"""
+        out, err = self.runbzr('help repositories')
+        self.assertEqual(bzrlib.help_topics._repositories, out)
+
+    def test_help_working_trees(self):
+        """Smoke test for 'bzr help working-trees'"""
+        out, err = self.runbzr('help working-trees')
+        self.assertEqual(bzrlib.help_topics._working_trees, out)
+
     def test_help_commands(self):
         dash_help  = self.runbzr('--help commands')[0]
         commands   = self.runbzr('help commands')[0]

=== modified directory  // last-changed:jw+debian@jameswestby.net-2007051420451
... 6-6bnkhae4x3cx3z1k
# revision id: jw+debian@jameswestby.net-20070514204516-6bnkhae4x3cx3z1k
# sha1: 8207f400b8835ab7a0fa7621f10db876824961ab
# inventory sha1: 0e32c08870f31b0a7f9e09d091ee1c4d224462b8
# parent ids:
#   jw+debian@jameswestby.net-20070514204247-mcxwep2on9g5p30w
# base id: pqm@pqm.ubuntu.com-20070510055501-w262sk5hl33vmd19
# properties:
#   branch-nick: bzr.repohelp

# message:
#   Update with comments from review, thanks to John and Aaron.
#   
# committer: James Westby <jw+debian@jameswestby.net>
# date: Mon 2007-05-14 21:42:47.290999889 +0100

=== modified file bzrlib/builtins.py // encoding:base64
LS0tIGJ6cmxpYi9idWlsdGlucy5weQorKysgYnpybGliL2J1aWx0aW5zLnB5CkBAIC0yNDksNyAr
MjQ5LDcgQEAKIAogICAgIFRvIHJlLWNyZWF0ZSB0aGUgd29ya2luZyB0cmVlLCB1c2UgImJ6ciBj
aGVja291dCIuCiAgICAgIiIiCi0gICAgX3NlZV9hbHNvID0gWydjaGVja291dCddCisgICAgX3Nl
ZV9hbHNvID0gWydjaGVja291dCcsICd3b3JraW5nLXRyZWVzJ10KIAogICAgIHRha2VzX2FyZ3Mg
PSBbJ2xvY2F0aW9uPyddCiAKQEAgLTY2OSw3ICs2NjksNyBAQAogICAgIGxvY2F0aW9uIGNhbiBi
ZSBhY2Nlc3NlZC4KICAgICAiIiIKIAotICAgIF9zZWVfYWxzbyA9IFsncHVsbCcsICd1cGRhdGUn
XQorICAgIF9zZWVfYWxzbyA9IFsncHVsbCcsICd1cGRhdGUnLCAnd29ya2luZy10cmVlcyddCiAg
ICAgdGFrZXNfb3B0aW9ucyA9IFsncmVtZW1iZXInLCAnb3ZlcndyaXRlJywgJ3ZlcmJvc2UnLAog
ICAgICAgICBPcHRpb24oJ2NyZWF0ZS1wcmVmaXgnLAogICAgICAgICAgICAgICAgaGVscD0nQ3Jl
YXRlIHRoZSBwYXRoIGxlYWRpbmcgdXAgdG8gdGhlIGJyYW5jaCAnCkBAIC04MTIsOSArODEyLDkg
QEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRyZWVfdG8gPSBk
aXJfdG8ub3Blbl93b3JraW5ndHJlZSgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IGVycm9ycy5O
b3RMb2NhbFVybDoKLSAgICAgICAgICAgICAgICAgICAgd2FybmluZygnVGhpcyB0cmFuc3BvcnQg
ZG9lcyBub3QgdXBkYXRlIHRoZSB3b3JraW5nICcgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3RyZWUgb2Y6ICVzLiBTZWUgXCdienIgaGVscCAnICUgYnJfdG8uYmFzZSArIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnd29ya2luZy10cmVlc1wnIGZvciBtb3JlIGluZm9ybWF0
aW9uLicpCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlRoaXMgdHJhbnNwb3J0IGRvZXMg
bm90IHVwZGF0ZSB0aGUgd29ya2luZyAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
cmVlIG9mOiAlcy4gU2VlICdienIgaGVscCB3b3JraW5nLXRyZWVzJyBmb3IgIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJtb3JlIGluZm9ybWF0aW9uLiIgJSBicl90by5iYXNlKQogICAg
ICAgICAgICAgICAgICAgICBwdXNoX3Jlc3VsdCA9IGJyX2Zyb20ucHVzaChicl90bywgb3Zlcndy
aXRlKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBlcnJvcnMuTm9Xb3JraW5nVHJlZToKICAgICAg
ICAgICAgICAgICAgICAgcHVzaF9yZXN1bHQgPSBicl9mcm9tLnB1c2goYnJfdG8sIG92ZXJ3cml0
ZSkKQEAgLTEwMTgsNyArMTAxOCw3IEBACiAgICAgJ2J6ciByZXZlcnQnIGluc3RlYWQgb2YgJ2J6
ciBjb21taXQnIGFmdGVyIHRoZSB1cGRhdGUuCiAgICAgIiIiCiAKLSAgICBfc2VlX2Fsc28gPSBb
J3B1bGwnXQorICAgIF9zZWVfYWxzbyA9IFsncHVsbCcsICd3b3JraW5nLXRyZWVzJ10KICAgICB0
YWtlc19hcmdzID0gWydkaXI/J10KICAgICBhbGlhc2VzID0gWyd1cCddCiAKQEAgLTEwNjIsNyAr
MTA2Miw3IEBACiAKICAgICBCcmFuY2hlcyBhbmQgd29ya2luZyB0cmVlcyB3aWxsIGFsc28gcmVw
b3J0IGFueSBtaXNzaW5nIHJldmlzaW9ucy4KICAgICAiIiIKLSAgICBfc2VlX2Fsc28gPSBbJ3Jl
dm5vJ10KKyAgICBfc2VlX2Fsc28gPSBbJ3Jldm5vJywgJ3dvcmtpbmctdHJlZXMnLCAncmVwb3Np
dG9yaWVzJ10KICAgICB0YWtlc19hcmdzID0gWydsb2NhdGlvbj8nXQogICAgIHRha2VzX29wdGlv
bnMgPSBbJ3ZlcmJvc2UnXQogCkBAIC0xMzEzLDE5ICsxMzEzLDE4IEBACiBjbGFzcyBjbWRfaW5p
dF9yZXBvc2l0b3J5KENvbW1hbmQpOgogICAgICIiIkNyZWF0ZSBhIHNoYXJlZCByZXBvc2l0b3J5
IHRvIGhvbGQgYnJhbmNoZXMuCiAKLSAgICBOZXcgYnJhbmNoZXMgY3JlYXRlZCB1bmRlciB0aGUg
cmVwb3NpdG9yeSBkaXJlY3Rvcnkgd2lsbCBzdG9yZSB0aGVpciByZXZpc2lvbnMKLSAgICBpbiB0
aGUgcmVwb3NpdG9yeSwgbm90IGluIHRoZSBicmFuY2ggZGlyZWN0b3J5LgorICAgIE5ldyBicmFu
Y2hlcyBjcmVhdGVkIHVuZGVyIHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSB3aWxsIHN0b3JlIHRo
ZWlyCisgICAgcmV2aXNpb25zIGluIHRoZSByZXBvc2l0b3J5LCBub3QgaW4gdGhlIGJyYW5jaCBk
aXJlY3RvcnkuCisKKyAgICBJZiB0aGUgLS1uby10cmVlcyBvcHRpb24gaXMgdXNlZCB0aGVuIHRo
ZSBicmFuY2hlcyBpbiB0aGUgcmVwb3NpdG9yeQorICAgIHdpbGwgbm90IGhhdmUgd29ya2luZyB0
cmVlcyBieSBkZWZhdWx0LgogCiAgICAgZXhhbXBsZToKLSAgICAgICAgYnpyIGluaXQtcmVwbyBy
ZXBvCisgICAgICAgIGJ6ciBpbml0LXJlcG8gLS1uby10cmVlcyByZXBvCiAgICAgICAgIGJ6ciBp
bml0IHJlcG8vdHJ1bmsKICAgICAgICAgYnpyIGNoZWNrb3V0IC0tbGlnaHR3ZWlnaHQgcmVwby90
cnVuayB0cnVuay1jaGVja291dAogICAgICAgICBjZCB0cnVuay1jaGVja291dAogICAgICAgICAo
YWRkIGZpbGVzIGhlcmUpCi0gICAgb3I6Ci0gICAgICAgIGJ6ciBpbml0LXJlcG8gLS1uby10cmVl
cyByZXBvCi0gICAgYXMgdGhlIGZpcnN0IHN0ZXAgdG8gZ2V0IGEgcmVwb3NpdG9yeSB3aGVyZSB0
aGUgYnJhbmNoZXMgaW5zaWRlIHdpbGwgbm90Ci0gICAgaGF2ZSB3b3JraW5nIHRyZWVzLgogCiAg
ICAgU2VlICdienIgaGVscCByZXBvc2l0b3JpZXMnIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAg
ICIiIgoK

=== modified file bzrlib/help_topics.py // encoding:base64
LS0tIGJ6cmxpYi9oZWxwX3RvcGljcy5weQorKysgYnpybGliL2hlbHBfdG9waWNzLnB5CkBAIC0y
NzksNTUgKzI3OSw1NyBAQAogX3JlcG9zaXRvcmllcyA9IFwKICIiIlJlcG9zaXRvcmllcwogCi1S
ZXBvc2l0b3JpZXMgaW4gQmF6YWFyIGFyZSBhIHdheSBvZiBzaGFyaW5nIHN0b3JhZ2UgYmV0d2Vl
biBkaWZmZXJlbnQgYnJhbmNoZXMuCi1JZiBhIGJyYW5jaCBpcyBjcmVhdGVkIHdpdGhpbiBhIHNo
YXJlZCByZXBvc2l0b3J5IHRoZW4gaXQgd2lsbCBwbGFjZSB0aGUKLXJldmlzaW9ucyB3aXRoaW4g
aXQuIFRoZW4gd2hlbiBhbnkgb3RoZXIgYnJhbmNoZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBz
YW1lCi1yZXBvc2l0b3J5IHRoZXkgd2lsbCB1c2UgdGhlIHNhbWUgcmV2aXNpb25zIHdoZXJlIHRo
ZXkgYXJlIGNvbW1vbiB0byBib3RoCi1icmFuY2hlcy4gVGhpcyBoYXMgbGl0dGxlIGVmZmVjdCBm
b3IgZGlzdGluY3QgcHJvamVjdHMsIGJ1dCB3aGVyZSB0aGUgYnJhbmNoZXMKLXNoYXJlIHNvbWUg
aGlzdG9yeSB0aGVyZSB3aWxsIGJlIGEgbGFyZ2Ugc3BhY2Ugc2F2aW5nLiBUaGUgc3BhY2Ugc2F2
aW5ncyBjYW4KLWFsc28gYmVjb21lIGxhcmdlIHRpbWUgc2F2aW5ncyBhcyB3ZWxsLCBmb3IgaW5z
dGFuY2Ugd2hlbiBicmFuY2hpbmcgd2l0aGluCi1hIHNoYXJlZCByZXBvc2l0b3JpZXMuCitSZXBv
c2l0b3JpZXMgaW4gQmF6YWFyIGFyZSB3aGVyZSBjb21taXR0ZWQgaW5mb3JtYXRpb24gaXMgc3Rv
cmVkLiBJdCBpcworcG9zc2libGUgdG8gY3JlYXRlIGEgc2hhcmVkIHJlcG9zaXRvcnkgd2hpY2gg
YWxsb3dzIG11bHRpcGxlIGJyYW5jaGVzIHRvCitzaGFyZSB0aGVpciBpbmZvcm1hdGlvbiBpbiB0
aGUgc2FtZSBsb2NhdGlvbi4gV2hlbiBhIG5ldyBicmFuY2ggaXMKK2NyZWF0ZWQgaXQgd2lsbCBm
aXJzdCBsb29rIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGNvbnRhaW5pbmcgcmVwb3NpdG9yeSBpdAor
Y2FuIHNoYXJlLgorCitXaGVuIHR3byBicmFuY2hlcyBvZiB0aGUgc2FtZSBwcm9qZWN0IHNoYXJl
IGEgcmVwb3NpdG9yeSwgdGhlcmUgaXMKK2dlbmVyYWxseSBhIGxhcmdlIHNwYWNlIHNhdmluZy4g
Rm9yIHNvbWUgb3BlcmF0aW9ucyAoZS5nLiBicmFuY2hpbmcKK3dpdGhpbiB0aGUgcmVwb3NpdG9y
eSkgdGhpcyB0cmFuc2xhdGVzIGluIHRvIGEgbGFyZ2UgdGltZSBzYXZpbmcuCiAKIFRvIGNyZWF0
ZSBhIHNoYXJlZCByZXBvc2l0b3J5IHVzZSB0aGUgaW5pdC1yZXBvc2l0b3J5IGNvbW1hbmQgKG9y
IHRoZSBhbGlhcwotaW5pdC1yZXBvKS4gVGhpcyBjb21tYW5kIHRha2VzIGFzIGFuIGFyZ3VtZW50
IHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVwb3NpdG9yeQotdG8gY3JlYXRlLiBUaGlzIG1lYW5zIHRo
YXQgJ2J6ciBpbml0LXJlcG9zaXRvcnkgcmVwbycgd2lsbCBjcmVhdGUgYSBkaXJlY3RvcnkKLW5h
bWVkICdyZXBvJywgd2hpY2ggY29udGFpbnMgYSBzaGFyZWQgcmVwb3NpdG9yeS4gQW55IG5ldyBi
cmFuY2hlcyB0aGF0IGFyZQotY3JlYXRlZCBpbiB0aGlzIGRpcmVjdG9yeSB3aWxsIHRoZW4gYmUg
J2luJyB0aGUgcmVwb3NpdG9yeSwgYW5kIHVzZSBpdCBmb3IKLXN0b3JhZ2UuCitpbml0LXJlcG8p
LiBUaGlzIGNvbW1hbmQgdGFrZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5IHRvIGNy
ZWF0ZS4gVGhpcworbWVhbnMgdGhhdCAnYnpyIGluaXQtcmVwb3NpdG9yeSByZXBvJyB3aWxsIGNy
ZWF0ZSBhIGRpcmVjdG9yeSBuYW1lZCAncmVwbycsCit3aGljaCBjb250YWlucyBhIHNoYXJlZCBy
ZXBvc2l0b3J5LiBBbnkgbmV3IGJyYW5jaGVzIHRoYXQgYXJlIGNyZWF0ZWQgaW4gdGhpcworZGly
ZWN0b3J5IHdpbGwgdGhlbiB1c2UgaXQgZm9yIHN0b3JhZ2UuCiAKIEl0IGlzIGEgZ29vZCBpZGVh
IHRvIGNyZWF0ZSBhIHJlcG9zaXRvcnkgd2hlbmV2ZXIgeW91IG1pZ2h0IGNyZWF0ZSBtb3JlCiB0
aGFuIG9uZSBicmFuY2ggb2YgYSBwcm9qZWN0LiBUaGlzIGlzIHRydWUgZm9yIGJvdGggd29ya2lu
ZyBhcmVhcyB3aGVyZSB5b3UKIGFyZSBkb2luZyB0aGUgZGV2ZWxvcG1lbnQsIGFuZCBhbnkgc2Vy
dmVyIGFyZWFzIHRoYXQgeW91IHVzZSBmb3IgaG9zdGluZwotcHJvamVjdHMuIEluIHRoZSBsYXR0
ZXIgY2FzZSwgaWYgeW91IGRvIG5vdCB3YW50IHRvIGRvIHdvcmsgZGlyZWN0bHkgdGhlcmUKLXlv
dSBtYXkgd2lzaCB0byBub3QgaGF2ZSB0aGUgYnJhbmNoZXMgaGF2ZSB3b3JraW5nIHRyZWVzLiBJ
ZiB0aGUgd29ya2luZyB0cmVlcwotYXJlIG5vdCBwcmVzZW50IHRoZW4gdGhlcmUgd2lsbCBiZSBs
ZXNzIGRpc2sgc3BhY2UgdXNlZCwgYW5kIGEgbG90IG9mCi1vcGVyYXRpb25zIHdpbGwgYmUgc3Bl
ZCB1cC4gVG8gY3JlYXRlIGEgcmVwb3NpdG9yeSBpbiB3aGljaCB0aGUgYnJhbmNoZXMgd2lsbAot
bm90IGhhdmUgd29ya2luZyB0cmVlcyBwYXNzIHRoZSAnLS1uby10cmVlcycgb3B0aW9uIHRvICdp
bml0LXJlcG9zaXRvcnknLgorcHJvamVjdHMuIEluIHRoZSBsYXR0ZXIgY2FzZSwgaXQgaXMgY29t
bW9uIHRvIHdhbnQgYnJhbmNoZXMgd2l0aG91dCB3b3JraW5nCit0cmVlcy4gU2luY2UgdGhlIGZp
bGVzIGluIHRoZSBicmFuY2ggd2lsbCBub3QgYmUgZWRpdGVkIGRpcmVjdGx5IHRoZXJlIGlzIG5v
CituZWVkIHRvIHVzZSB1cCBkaXNrIHNwYWNlIGZvciBhIHdvcmtpbmcgdHJlZS4gVG8gY3JlYXRl
IGEgcmVwb3NpdG9yeSBpbiB3aGljaAordGhlIGJyYW5jaGVzIHdpbGwgbm90IGhhdmUgd29ya2lu
ZyB0cmVlcyBwYXNzIHRoZSAnLS1uby10cmVlcycgb3B0aW9uIHRvCisnaW5pdC1yZXBvc2l0b3J5
Jy4KIAogUmVsYXRlZCBjb21tYW5kczoKIAogICBpbml0LXJlcG9zaXRvcnkgICBDcmVhdGUgYSBz
aGFyZWQgcmVwb3NpdG9yeS4gVXNlIC0tbm8tdHJlZXMgdG8gY3JlYXRlIG9uZQotICAgICAgICAg
ICAgICAgICAgICBpbiB3aGljaCBuZXcgYnJhbmNoZXMgd29udCBnZXQgYSB3b3JraW5nIHRyZWUu
CisgICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIG5ldyBicmFuY2hlcyB3b24ndCBnZXQgYSB3
b3JraW5nIHRyZWUuCiAiIiIKIAorCiBfd29ya2luZ190cmVlcyA9IFwKICIiIldvcmtpbmcgVHJl
ZXMKIAotQSB3b3JraW5nIHRyZWUgaXMgdGhlIGNvbnRlbnRzIG9mIGEgYnJhbmNoIGNoZWNrZWQg
b3V0IG9uIGRpc2sgc28gdGhhdCB5b3UgY2FuCitBIHdvcmtpbmcgdHJlZSBpcyB0aGUgY29udGVu
dHMgb2YgYSBicmFuY2ggcGxhY2VkIG9uIGRpc2sgc28gdGhhdCB5b3UgY2FuCiBzZWUgdGhlIGZp
bGVzIGFuZCBlZGl0IHRoZW0uIFRoZSB3b3JraW5nIHRyZWUgaXMgd2hlcmUgeW91IG1ha2UgY2hh
bmdlcyB0byBhCiBicmFuY2gsIGFuZCB3aGVuIHlvdSBjb21taXQgdGhlIGN1cnJlbnQgc3RhdGUg
b2YgdGhlIHdvcmtpbmcgdHJlZSBpcyB0aGUKIHNuYXBzaG90IHRoYXQgaXMgcmVjb3JkZWQgaW4g
dGhlIGNvbW1pdC4KIAotV2hlbiB5b3UgcHVzaCBhIGJyYW5jaCB0byBhIHJlbW90ZSBzeXN0ZW0g
dGhlbiBhIHdvcmtpbmcgdHJlZSB3aWxsIG5vdCBiZQotY3JlYXRlZCwgb3IgaWYgdGhlcmUgaXMg
YWxyZWFkeSBvbmUgdGhlcmUgaXQgd2lsbCBub3QgYmUgdXBkYXRlZC4gVGhpcyBpcwotYmVjYXVz
ZSBhbiB1cGRhdGUgdG8gdGhlIHdvcmtpbmcgdHJlZSBjYW4gY2F1c2UgY29uZmxpY3RzLCBhbmQg
dGhhdCBpcwotaGFyZCB0byBkZWFsIHdpdGggcmVtb3RlbHkuCitXaGVuIHlvdSBwdXNoIGEgYnJh
bmNoIHRvIGEgcmVtb3RlIHN5c3RlbSwgYSB3b3JraW5nIHRyZWUgd2lsbCBub3QgYmUKK2NyZWF0
ZWQuIElmIG9uZSBpcyBhbHJlYWR5IHByZXNlbnQgdGhlIGZpbGVzIHdpbGwgbm90IGJlIHVwZGF0
ZWQuIFRoZQorYnJhbmNoIGluZm9ybWF0aW9uIHdpbGwgYmUgdXBkYXRlZCBhbmQgdGhlIHdvcmtp
bmcgdHJlZSB3aWxsIGJlIG1hcmtlZAorYXMgb3V0LW9mLWRhdGUuIFVwZGF0aW5nIGEgd29ya2lu
ZyB0cmVlIHJlbW90ZWx5IGlzIGRpZmZpY3VsdCwgYXMgdGhlcmUKK21heSBiZSB1bmNvbW1pdHRl
ZCBjaGFuZ2VzIG9yIHRoZSB1cGRhdGUgbWF5IGNhdXNlIGNvbnRlbnQgY29uZmxpY3RzIHRoYXQg
YXJlCitkaWZmaWN1bHQgdG8gZGVhbCB3aXRoIHJlbW90ZWx5LgogCiBJZiB5b3UgaGF2ZSBhIGJy
YW5jaCB3aXRoIG5vIHdvcmtpbmcgdHJlZSB5b3UgY2FuIHVzZSB0aGUgJ2NoZWNrb3V0JyBjb21t
YW5kCiB0byBjcmVhdGUgYSB3b3JraW5nIHRyZWUuIElmIHlvdSBydW4gJ2J6ciBjaGVja291dCAu
JyBmcm9tIHRoZSBicmFuY2ggaXQgd2lsbAotY3JlYXRlIHRoZSB3b3JraW5nIHRyZWUuIElmIGEg
c3Vic2VxdWVudCBwdXNoIGZyb20gYSByZW1vdGUgc3lzdGVtIHVwZGF0ZXMgdGhlCi1icmFuY2gg
eW91IGNhbiB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCB0aGUgYnJhbmNoIGJ5IHJ1
bm5pbmcgJ2J6cgotdXBkYXRlJyBpbiB0aGUgYnJhbmNoLgorY3JlYXRlIHRoZSB3b3JraW5nIHRy
ZWUuIElmIHRoZSBicmFuY2ggaXMgdXBkYXRlZCByZW1vdGVseSwgeW91IGNhbiB1cGRhdGUgdGhl
Cit3b3JraW5nIHRyZWUgYnkgcnVubmluZyAnYnpyIHVwZGF0ZScgaW4gdGhhdCBkaXJlY3Rvcnku
CiAKIElmIHlvdSBoYXZlIGEgYnJhbmNoIHdpdGggYSB3b3JraW5nIHRyZWUgdGhhdCB5b3UgZG8g
bm90IHdhbnQgdGhlICdyZW1vdmUtdHJlZScKIGNvbW1hbmQgd2lsbCByZW1vdmUgdGhlIHRyZWUg
aWYgaXQgaXMgc2FmZS4gVGhpcyBjYW4gYmUgZG9uZSB0byBhdm9pZCB0aGUKCg==

=== modified file bzrlib/tests/blackbox/test_help.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy9ibGFja2JveC90ZXN0X2hlbHAucHkKKysrIGJ6cmxpYi90ZXN0cy9i
bGFja2JveC90ZXN0X2hlbHAucHkKQEAgLTE5LDYgKzE5LDcgQEAKICIiIgogCiAKK2ltcG9ydCBi
enJsaWIKIGZyb20gYnpybGliLnRlc3RzLmJsYWNrYm94IGltcG9ydCBFeHRlcm5hbEJhc2UKIAog
CkBAIC03MiwxOCArNzMsMTIgQEAKICAgICBkZWYgdGVzdF9oZWxwX3JlcG9zaXRvcmllcyhzZWxm
KToKICAgICAgICAgIiIiU21va2UgdGVzdCBmb3IgJ2J6ciBoZWxwIHJlcG9zaXRvcmllcyciIiIK
ICAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnJ1bmJ6cignaGVscCByZXBvc2l0b3JpZXMnKQotICAg
ICAgICBzZWxmLmFzc2VydENvbnRhaW5zUmUob3V0LCAncmVwb3NpdG9yeScpCi0gICAgICAgIHNl
bGYuYXNzZXJ0Q29udGFpbnNSZShvdXQsICctLW5vLXRyZWVzJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRDb250YWluc1JlKG91dCwgJ2luaXQtcmVwb3NpdG9yeScpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoYnpybGliLmhlbHBfdG9waWNzLl9yZXBvc2l0b3JpZXMsIG91dCkKIAogICAgIGRlZiB0
ZXN0X2hlbHBfd29ya2luZ190cmVlcyhzZWxmKToKICAgICAgICAgIiIiU21va2UgdGVzdCBmb3Ig
J2J6ciBoZWxwIHdvcmtpbmctdHJlZXMnIiIiCiAgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5i
enIoJ2hlbHAgd29ya2luZy10cmVlcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnNSZShv
dXQsICdyZXBvc2l0b3J5JykKLSAgICAgICAgc2VsZi5hc3NlcnRDb250YWluc1JlKG91dCwgJ3Jl
bW90ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnNSZShvdXQsICdjaGVja291dCcpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnNSZShvdXQsICd1cGRhdGUnKQotICAgICAgICBzZWxm
LmFzc2VydENvbnRhaW5zUmUob3V0LCAncmVtb3ZlLXRyZWUnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGJ6cmxpYi5oZWxwX3RvcGljcy5fd29ya2luZ190cmVlcywgb3V0KQogCiAgICAgZGVm
IHRlc3RfaGVscF9jb21tYW5kcyhzZWxmKToKICAgICAgICAgZGFzaF9oZWxwICA9IHNlbGYucnVu
YnpyKCctLWhlbHAgY29tbWFuZHMnKVswXQoK

=== modified directory  // last-changed:jw+debian@jameswestby.net-2007051420424
... 7-mcxwep2on9g5p30w
# revision id: jw+debian@jameswestby.net-20070514204247-mcxwep2on9g5p30w
# sha1: 80f20d935c312447dce8f49223310a23c5df0a19
# inventory sha1: 50538479ac02d4dc1a0c87b833e5b614f66f2b87
# parent ids:
#   jw+debian@jameswestby.net-20070514193026-3itaozap05k3vuxp
# properties:
#   branch-nick: bzr.repohelp

# message:
#   Update the help topics to the latest bzr.dev.
#   
# committer: James Westby <jw+debian@jameswestby.net>
# date: Mon 2007-05-14 20:30:26.180000067 +0100

=== removed file build-api
=== removed file bzrlib/tests/test_doc_generate.py
=== added file bzrlib/breakin.py // file-id:breakin.py-20070417043829-so46nevf9
... 78u713k-1 // last-changed:bialix@ukr.net-20070425044607-qbl5oce7jygaxat2 //
...  encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL2JyZWFraW4ucHkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx
MTEtMTMwNyAgVVNBCisKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAorCitkZWYgX2RlYnVnKHNp
Z25hbF9udW1iZXIsIGludGVycnVwdGVkX2ZyYW1lKToKKyAgICBpbXBvcnQgcGRiCisgICAgaW1w
b3J0IHN5cworICAgIHN5cy5zdGRlcnIud3JpdGUoIioqIFNJR1FVSVQgcmVjZWl2ZWQsIGVudGVy
aW5nIGRlYnVnZ2VyXG4iCisgICAgICAgICAgICAiKiogVHlwZSAnYycgdG8gY29udGludWUgb3Ig
J3EnIHRvIHN0b3AgdGhlIHByb2Nlc3NcbiIKKyAgICAgICAgICAgICIqKiBPciBTSUdRVUlUIGFn
YWluIHRvIHF1aXQgKGFuZCBwb3NzaWJseSBkdW1wIGNvcmUpXG4iCisgICAgICAgICAgICApCisg
ICAgIyByZXN0b3JlIGRlZmF1bHQgbWVhbmluZyBzbyB0aGF0IHlvdSBjYW4ga2lsbCB0aGUgcHJv
Y2VzcyBieSBoaXR0aW5nIGl0CisgICAgIyB0d2ljZQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFs
LlNJR1FVSVQsIHNpZ25hbC5TSUdfREZMKQorICAgIHRyeToKKyAgICAgICAgcGRiLnNldF90cmFj
ZSgpCisgICAgZmluYWxseToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHUVVJVCwg
X2RlYnVnKQorCisKK2RlZiBob29rX3NpZ3F1aXQoKToKKyAgICAjIHdoZW4gc2lncXVpdCAoQy1c
KSBpcyByZWNlaXZlZCBnbyBpbnRvIHBkYgorICAgIGlmIChvcy5lbnZpcm9uLmdldCgnQlpSX1NJ
R1FVSVRfUERCJywgJzEnKSA9PSAnMCcKKyAgICAgICAgb3IgZ2V0YXR0cihzaWduYWwsICdTSUdR
VUlUJywgTm9uZSkgaXMgTm9uZSk6CisgICAgICAgIHJldHVybgorICAgIHNpZ25hbC5zaWduYWwo
c2lnbmFsLlNJR1FVSVQsIF9kZWJ1ZykKCg==

=== added file bzrlib/bugtracker.py // file-id:bugtracker.py-20070410073305-vu1
... vu1qosjurg8kb-1 // last-changed:jml@canonical.com-20070423055929-chgdr92da6
... 3lhcri // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL2J1Z3RyYWNrZXIucHkKQEAgLTAsMCArMSwxNzMgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDA3IENhbm9uaWNhbCBMdGQKKyMKKyMgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTEx
LTEzMDcgIFVTQQorCitpbXBvcnQgdGV4dHdyYXAKKworZnJvbSBienJsaWIgaW1wb3J0IHJlZ2lz
dHJ5LCBoZWxwX3RvcGljcworZnJvbSBienJsaWIubGF6eV9pbXBvcnQgaW1wb3J0IGxhenlfaW1w
b3J0CitsYXp5X2ltcG9ydChnbG9iYWxzKCksICIiIgorZnJvbSBienJsaWIgaW1wb3J0IGVycm9y
cywgdXJsdXRpbHMKKyIiIikKKworCisiIiJQcm92aWRlcyBhIHNob3J0aGFuZCBmb3IgcmVmZXJy
aW5nIHRvIGJ1Z3Mgb24gYSB2YXJpZXR5IG9mIGJ1ZyB0cmFja2Vycy4KKworJ2NvbW1pdCAtLWZp
eGVzJyBzdG9yZXMgcmVmZXJlbmNlcyB0byBidWdzIGFzIGEgPGJ1Z191cmw+IC0+IDxidWdfc3Rh
dHVzPgorbWFwcGluZyBpbiB0aGUgcHJvcGVydGllcyBmb3IgdGhhdCByZXZpc2lvbi4KKworSG93
ZXZlciwgaXQncyBpbmNvbnZlbmllbnQgdG8gdHlwZSBvdXQgZnVsbCBVUkxzIGZvciBidWdzIG9u
IHRoZSBjb21tYW5kIGxpbmUsCitwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhhdCBtYW55IHVzZXJzIHdp
bGwgYmUgdXNpbmcgb25seSBhIHNpbmdsZSBidWcgdHJhY2tlciBwZXIKK2JyYW5jaC4KKworVGh1
cywgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSByZWdpc3RyeSBvZiB0eXBlcyBvZiBidWcgdHJhY2tl
ciAoZS5nLiBMYXVuY2hwYWQsCitUcmFjKS4gR2l2ZW4gYW4gYWJicmV2aWF0ZWQgbmFtZSAoZS5n
LiAnbHAnLCAndHdpc3RlZCcpIGFuZCBhIGJyYW5jaCB3aXRoCitjb25maWd1cmF0aW9uIGluZm9y
bWF0aW9uLCB0aGVzZSB0cmFja2VyIHR5cGVzIGNhbiByZXR1cm4gYW4gaW5zdGFuY2UgY2FwYWJs
ZQorb2YgY29udmVydGluZyBidWcgSURzIGludG8gVVJMcy4KKyIiIgorCisKK2RlZiBnZXRfYnVn
X3VybChhYmJyZXZpYXRlZF9idWd0cmFja2VyX25hbWUsIGJyYW5jaCwgYnVnX2lkKToKKyAgICAi
IiJSZXR1cm4gYSBVUkwgcG9pbnRpbmcgdG8gdGhlIGNhbm9uaWNhbCB3ZWIgcGFnZSBvZiB0aGUg
YnVnIGlkZW50aWZpZWQgYnkKKyAgICAnYnVnX2lkJy4KKyAgICAiIiIKKyAgICB0cmFja2VyID0g
dHJhY2tlcl9yZWdpc3RyeS5nZXRfdHJhY2tlcihhYmJyZXZpYXRlZF9idWd0cmFja2VyX25hbWUs
IGJyYW5jaCkKKyAgICByZXR1cm4gdHJhY2tlci5nZXRfYnVnX3VybChidWdfaWQpCisKKworY2xh
c3MgVHJhY2tlclJlZ2lzdHJ5KHJlZ2lzdHJ5LlJlZ2lzdHJ5KToKKyAgICAiIiJSZWdpc3RyeSBv
ZiBidWcgdHJhY2tlciB0eXBlcy4iIiIKKworICAgIGRlZiBnZXRfdHJhY2tlcihzZWxmLCBhYmJy
ZXZpYXRlZF9idWd0cmFja2VyX25hbWUsIGJyYW5jaCk6CisgICAgICAgICIiIlJldHVybiB0aGUg
Zmlyc3QgcmVnaXN0ZXJlZCB0cmFja2VyIHRoYXQgdW5kZXJzdGFuZHMKKyAgICAgICAgJ2FiYnJl
dmlhdGVkX2J1Z3RyYWNrZXJfbmFtZScuCisKKyAgICAgICAgSWYgbm8gc3VjaCB0cmFja2VyIGlz
IGZvdW5kLCByYWlzZSBLZXlFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciB0cmFja2Vy
X25hbWUgaW4gc2VsZi5rZXlzKCk6CisgICAgICAgICAgICB0cmFja2VyX3R5cGUgPSBzZWxmLmdl
dCh0cmFja2VyX25hbWUpCisgICAgICAgICAgICB0cmFja2VyID0gdHJhY2tlcl90eXBlLmdldChh
YmJyZXZpYXRlZF9idWd0cmFja2VyX25hbWUsIGJyYW5jaCkKKyAgICAgICAgICAgIGlmIHRyYWNr
ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNrZXIKKyAgICAgICAg
cmFpc2UgZXJyb3JzLlVua25vd25CdWdUcmFja2VyQWJicmV2aWF0aW9uKGFiYnJldmlhdGVkX2J1
Z3RyYWNrZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyYW5jaCkKKworICAgIGRlZiBoZWxwX3RvcGljKHNlbGYsIHRvcGljKToKKyAg
ICAgICAgcmV0dXJuIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgIEJhemFhciBwcm92aWRl
cyB0aGUgYWJpbGl0eSB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBidWdzIGJlaW5nIGZpeGVk
CisgICAgICAgIGFzIG1ldGFkYXRhIG9uIGEgcmV2aXNpb24uCisKKyAgICAgICAgRm9yIGVhY2gg
YnVnIG1hcmtlZCBhcyBmaXhlZCwgYW4gZW50cnkgaXMgaW5jbHVkZWQgaW4gdGhlICdidWdzJwor
ICAgICAgICByZXZpc2lvbiBwcm9wZXJ0eSBzdGF0aW5nICc8dXJsPiA8c3RhdHVzPicuCisgICAg
ICAgICIiIikKKworCit0cmFja2VyX3JlZ2lzdHJ5ID0gVHJhY2tlclJlZ2lzdHJ5KCkKKyIiIlJl
Z2lzdHJ5IG9mIGJ1ZyB0cmFja2Vycy4iIiIKKworCitjbGFzcyBCdWdUcmFja2VyKG9iamVjdCk6
CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgYnVnIHRyYWNrZXJzLiIiIgorCisgICAgZGVmIGNoZWNr
X2J1Z19pZChzZWxmLCBidWdfaWQpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSBidWdfaWQg
aXMgdmFsaWQuCisKKyAgICAgICAgVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0
IGFsbCBidWdfaWRzIGFyZSB2YWxpZC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgZ2V0X2J1Z191
cmwoc2VsZiwgYnVnX2lkKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBVUkwgZm9yIGJ1Z19pZC4g
UmFpc2UgYW4gZXJyb3IgaWYgYnVnIElEIGlzIG1hbGZvcm1lZC4iIiIKKyAgICAgICAgc2VsZi5j
aGVja19idWdfaWQoYnVnX2lkKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2J1Z191cmwoYnVn
X2lkKQorCisgICAgZGVmIF9nZXRfYnVnX3VybChzZWxmLCBidWdfaWQpOgorICAgICAgICAiIiJH
aXZlbiBhIHZhbGlkYXRlZCBidWdfaWQsIHJldHVybiB0aGUgYnVnJ3Mgd2ViIHBhZ2UncyBVUkwu
IiIiCisKKworY2xhc3MgSW50ZWdlckJ1Z1RyYWNrZXIoQnVnVHJhY2tlcik6CisgICAgIiIiQSBi
dWcgdHJhY2tlciB0aGF0IG9ubHkgYWxsb3dzIGludGVnZXIgYnVnIElEcy4iIiIKKworICAgIGRl
ZiBjaGVja19idWdfaWQoc2VsZiwgYnVnX2lkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
aW50KGJ1Z19pZCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlz
ZSBlcnJvcnMuTWFsZm9ybWVkQnVnSWRlbnRpZmllcihidWdfaWQsICJNdXN0IGJlIGFuIGludGVn
ZXIiKQorCisKK2NsYXNzIFVuaXF1ZUludGVnZXJCdWdUcmFja2VyKEludGVnZXJCdWdUcmFja2Vy
KToKKyAgICAiIiJBIHN0eWxlIG9mIGJ1ZyB0cmFja2VyIHRoYXQgZXhpc3RzIGluIG9uZSBwbGFj
ZSBvbmx5LCBzdWNoIGFzIExhdW5jaHBhZC4KKworICAgIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVz
ZSB0cmFja2VycyB0aGVuIHJlZ2lzdGVyIGFuIGluc3RhbmNlIHBhc3NpbmcgaW4gYW4KKyAgICBh
YmJyZXZpYXRlZCBuYW1lIGZvciB0aGUgYnVnIHRyYWNrZXIgYW5kIGEgYmFzZSBVUkwuCisgICAg
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWJicmV2aWF0ZWRfYnVndHJhY2tlcl9uYW1l
LCBiYXNlX3VybCk6CisgICAgICAgIHNlbGYuYWJicmV2aWF0aW9uID0gYWJicmV2aWF0ZWRfYnVn
dHJhY2tlcl9uYW1lCisgICAgICAgIHNlbGYuYmFzZV91cmwgPSBiYXNlX3VybAorCisgICAgZGVm
IGdldChzZWxmLCBhYmJyZXZpYXRlZF9idWd0cmFja2VyX25hbWUsIGJyYW5jaCk6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIHRyYWNrZXIgaWYgdGhlIGFiYnJldmlhdGlvbiBtYXRjaGVzLiBSZXR1
cm5zIE5vbmUKKyAgICAgICAgb3RoZXJ3aXNlLiIiIgorICAgICAgICBpZiBhYmJyZXZpYXRlZF9i
dWd0cmFja2VyX25hbWUgIT0gc2VsZi5hYmJyZXZpYXRpb246CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9nZXRfYnVnX3VybChzZWxmLCBi
dWdfaWQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIFVSTCBmb3IgYnVnX2lkLiIiIgorICAgICAg
ICByZXR1cm4gdXJsdXRpbHMuam9pbihzZWxmLmJhc2VfdXJsLCBidWdfaWQpCisKKwordHJhY2tl
cl9yZWdpc3RyeS5yZWdpc3RlcigKKyAgICAnbGF1bmNocGFkJywgVW5pcXVlSW50ZWdlckJ1Z1Ry
YWNrZXIoJ2xwJywgJ2h0dHBzOi8vbGF1bmNocGFkLm5ldC9idWdzLycpKQorCisKK3RyYWNrZXJf
cmVnaXN0cnkucmVnaXN0ZXIoCisgICAgJ2RlYmlhbicsIFVuaXF1ZUludGVnZXJCdWdUcmFja2Vy
KCdkZWInLCAnaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8nKSkKKworCitjbGFzcyBVUkxQYXJhbWV0
cml6ZWRJbnRlZ2VyQnVnVHJhY2tlcihJbnRlZ2VyQnVnVHJhY2tlcik6CisgICAgIiIiQSB0eXBl
IG9mIGJ1ZyB0cmFja2VyIHRoYXQgY2FuIGJlIGZvdW5kIG9uIGEgdmFyaWV0eSBvZiBkaWZmZXJl
bnQgc2l0ZXMsCisgICAgYW5kIHRodXMgbmVlZHMgdG8gaGF2ZSB0aGUgYmFzZSBVUkwgY29uZmln
dXJlZC4KKworICAgIExvb2tzIGZvciBhIGNvbmZpZyBzZXR0aW5nIGluIHRoZSBmb3JtICc8dHlw
ZV9uYW1lPl88YWJicmV2aWF0aW9uPl91cmwnLgorICAgIGB0eXBlX25hbWVgIGlzIHRoZSBuYW1l
IG9mIHRoZSB0eXBlIG9mIHRyYWNrZXIgKGUuZy4gJ2J1Z3ppbGxhJyBvciAndHJhYycpCisgICAg
YW5kIGBhYmJyZXZpYXRpb25gIGlzIGEgc2hvcnQgbmFtZSBmb3IgdGhlIHBhcnRpY3VsYXIgaW5z
dGFuY2UgKGUuZy4KKyAgICAnc3F1aWQnIG9yICdhcGFjaGUnKS4KKyAgICAiIiIKKworICAgIGRl
ZiBnZXQoc2VsZiwgYWJicmV2aWF0aW9uLCBicmFuY2gpOgorICAgICAgICBjb25maWcgPSBicmFu
Y2guZ2V0X2NvbmZpZygpCisgICAgICAgIHVybCA9IGNvbmZpZy5nZXRfdXNlcl9vcHRpb24oCisg
ICAgICAgICAgICAiJXNfJXNfdXJsIiAlIChzZWxmLnR5cGVfbmFtZSwgYWJicmV2aWF0aW9uKSkK
KyAgICAgICAgaWYgdXJsIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICBzZWxmLl9iYXNlX3VybCA9IHVybAorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgYnVnX2FyZWEpOgorICAgICAgICBzZWxmLnR5cGVfbmFt
ZSA9IHR5cGVfbmFtZQorICAgICAgICBzZWxmLl9idWdfYXJlYSA9IGJ1Z19hcmVhCisKKyAgICBk
ZWYgX2dldF9idWdfdXJsKHNlbGYsIGJ1Z19pZCk6CisgICAgICAgICIiIlJldHVybiBhIFVSTCBm
b3IgYSBidWcgb24gdGhpcyBUcmFjIGluc3RhbmNlLiIiIgorICAgICAgICByZXR1cm4gdXJsdXRp
bHMuam9pbihzZWxmLl9iYXNlX3VybCwgc2VsZi5fYnVnX2FyZWEpICsgc3RyKGJ1Z19pZCkKKwor
Cit0cmFja2VyX3JlZ2lzdHJ5LnJlZ2lzdGVyKAorICAgICd0cmFjJywgVVJMUGFyYW1ldHJpemVk
SW50ZWdlckJ1Z1RyYWNrZXIoJ3RyYWMnLCAndGlja2V0LycpKQorCit0cmFja2VyX3JlZ2lzdHJ5
LnJlZ2lzdGVyKAorICAgICdidWd6aWxsYScsCisgICAgVVJMUGFyYW1ldHJpemVkSW50ZWdlckJ1
Z1RyYWNrZXIoJ2J1Z3ppbGxhJywgJ3Nob3dfYnVnLmNnaT9pZD0nKSkKCg==

=== added file bzrlib/remote.py // file-id:remote.py-20060720103555-yeeg2x51vn0
... rbtdp-1 // last-changed:mbp@sourcefrog.net-20070507120314-a2h78bjezemwyl17 
... // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3JlbW90ZS5weQpAQCAtMCwwICsxLDEwNjYgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IENhbm9uaWNhbCBMdGQKKyMKKyMgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAy
MTExLTEzMDcgIFVTQQorCisjIFRPRE86IEF0IHNvbWUgcG9pbnQsIGhhbmRsZSB1cGdyYWRlcyBi
eSBqdXN0IHBhc3NpbmcgdGhlIHdob2xlIHJlcXVlc3QKKyMgYWNyb3NzIHRvIHJ1biBvbiB0aGUg
c2VydmVyLgorCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSBienJsaWIg
aW1wb3J0IGJyYW5jaCwgZXJyb3JzLCBsb2NrZGlyLCByZXBvc2l0b3J5Citmcm9tIGJ6cmxpYi5i
cmFuY2ggaW1wb3J0IEJyYW5jaCwgQnJhbmNoUmVmZXJlbmNlRm9ybWF0Citmcm9tIGJ6cmxpYi5i
enJkaXIgaW1wb3J0IEJ6ckRpciwgUmVtb3RlQnpyRGlyRm9ybWF0Citmcm9tIGJ6cmxpYi5jb25m
aWcgaW1wb3J0IEJyYW5jaENvbmZpZywgVHJlZUNvbmZpZworZnJvbSBienJsaWIuZGVjb3JhdG9y
cyBpbXBvcnQgbmVlZHNfcmVhZF9sb2NrLCBuZWVkc193cml0ZV9sb2NrCitmcm9tIGJ6cmxpYi5l
cnJvcnMgaW1wb3J0IE5vU3VjaFJldmlzaW9uCitmcm9tIGJ6cmxpYi5sb2NrYWJsZV9maWxlcyBp
bXBvcnQgTG9ja2FibGVGaWxlcworZnJvbSBienJsaWIucmV2aXNpb24gaW1wb3J0IE5VTExfUkVW
SVNJT04KK2Zyb20gYnpybGliLnNtYXJ0IGltcG9ydCBjbGllbnQsIHZmcworZnJvbSBienJsaWIu
dHJhY2UgaW1wb3J0IG5vdGUKKworIyBOb3RlOiBSZW1vdGVCenJEaXJGb3JtYXQgaXMgaW4gYnpy
ZGlyLnB5CisKK2NsYXNzIFJlbW90ZUJ6ckRpcihCenJEaXIpOgorICAgICIiIkNvbnRyb2wgZGly
ZWN0b3J5IG9uIGEgcmVtb3RlIHNlcnZlciwgYWNjZXNzZWQgdmlhIGJ6cjovLyBvciBzaW1pbGFy
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zcG9ydCwgX2NsaWVudD1Ob25lKToK
KyAgICAgICAgIiIiQ29uc3RydWN0IGEgUmVtb3RlQnpyRGlyLgorCisgICAgICAgIDpwYXJhbSBf
Y2xpZW50OiBQcml2YXRlIHBhcmFtZXRlciBmb3IgdGVzdGluZy4gRGlzYWJsZXMgcHJvYmluZyBh
bmQgdGhlCisgICAgICAgICAgICB1c2Ugb2YgYSByZWFsIGJ6cmRpci4KKyAgICAgICAgIiIiCisg
ICAgICAgIEJ6ckRpci5fX2luaXRfXyhzZWxmLCB0cmFuc3BvcnQsIFJlbW90ZUJ6ckRpckZvcm1h
dCgpKQorICAgICAgICAjIHRoaXMgb2JqZWN0IGhvbGRzIGEgZGVsZWdhdGVkIGJ6cmRpciB0aGF0
IHVzZXMgZmlsZS1sZXZlbCBvcGVyYXRpb25zCisgICAgICAgICMgdG8gdGFsayB0byB0aGUgb3Ro
ZXIgc2lkZQorICAgICAgICBzZWxmLl9yZWFsX2J6cmRpciA9IE5vbmUKKworICAgICAgICBpZiBf
Y2xpZW50IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9tZWRpdW0gPSB0cmFuc3BvcnQuZ2V0
X3NtYXJ0X2NsaWVudCgpCisgICAgICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQuX1NtYXJ0
Q2xpZW50KHNlbGYuX21lZGl1bSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2Ns
aWVudCA9IF9jbGllbnQKKyAgICAgICAgICAgIHNlbGYuX21lZGl1bSA9IE5vbmUKKyAgICAgICAg
ICAgIHJldHVybgorCisgICAgICAgIHBhdGggPSBzZWxmLl9wYXRoX2Zvcl9yZW1vdGVfY2FsbChz
ZWxmLl9jbGllbnQpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fY2xpZW50LmNhbGwoJ0J6ckRp
ci5vcGVuJywgcGF0aCkKKyAgICAgICAgaWYgcmVzcG9uc2Ugbm90IGluIFsoJ3llcycsKSwgKCdu
bycsKV06CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVW5leHBlY3RlZFNtYXJ0U2VydmVyUmVz
cG9uc2UocmVzcG9uc2UpCisgICAgICAgIGlmIHJlc3BvbnNlID09ICgnbm8nLCk6CisgICAgICAg
ICAgICByYWlzZSBlcnJvcnMuTm90QnJhbmNoRXJyb3IocGF0aD10cmFuc3BvcnQuYmFzZSkKKwor
ICAgIGRlZiBfZW5zdXJlX3JlYWwoc2VsZik6CisgICAgICAgICIiIkVuc3VyZSB0aGF0IHRoZXJl
IGlzIGEgX3JlYWxfYnpyZGlyIHNldC4KKworICAgICAgICBVc2VkIGJlZm9yZSBjYWxscyB0byBz
ZWxmLl9yZWFsX2J6cmRpci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFs
X2J6cmRpcjoKKyAgICAgICAgICAgIHNlbGYuX3JlYWxfYnpyZGlyID0gQnpyRGlyLm9wZW5fZnJv
bV90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgc2VsZi5yb290X3RyYW5zcG9ydCwgX3NlcnZl
cl9mb3JtYXRzPUZhbHNlKQorCisgICAgZGVmIGNyZWF0ZV9yZXBvc2l0b3J5KHNlbGYsIHNoYXJl
ZD1GYWxzZSk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgc2VsZi5fcmVh
bF9ienJkaXIuY3JlYXRlX3JlcG9zaXRvcnkoc2hhcmVkPXNoYXJlZCkKKyAgICAgICAgcmV0dXJu
IHNlbGYub3Blbl9yZXBvc2l0b3J5KCkKKworICAgIGRlZiBjcmVhdGVfYnJhbmNoKHNlbGYpOgor
ICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJlYWxfYnJhbmNoID0gc2VsZi5f
cmVhbF9ienJkaXIuY3JlYXRlX2JyYW5jaCgpCisgICAgICAgIHJldHVybiBSZW1vdGVCcmFuY2go
c2VsZiwgc2VsZi5maW5kX3JlcG9zaXRvcnkoKSwgcmVhbF9icmFuY2gpCisKKyAgICBkZWYgY3Jl
YXRlX3dvcmtpbmd0cmVlKHNlbGYsIHJldmlzaW9uX2lkPU5vbmUpOgorICAgICAgICByYWlzZSBl
cnJvcnMuTm90TG9jYWxVcmwoc2VsZi50cmFuc3BvcnQuYmFzZSkKKworICAgIGRlZiBmaW5kX2Jy
YW5jaF9mb3JtYXQoc2VsZik6CisgICAgICAgICIiIkZpbmQgdGhlIGJyYW5jaCAnZm9ybWF0JyBm
b3IgdGhpcyBienJkaXIuCisKKyAgICAgICAgVGhpcyBtaWdodCBiZSBhIHN5bnRoZXRpYyBvYmpl
Y3QgZm9yIGUuZy4gUmVtb3RlQnJhbmNoIGFuZCBTVk4uCisgICAgICAgICIiIgorICAgICAgICBi
ID0gc2VsZi5vcGVuX2JyYW5jaCgpCisgICAgICAgIHJldHVybiBiLl9mb3JtYXQKKworICAgIGRl
ZiBnZXRfYnJhbmNoX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgIiIiU2VlIEJ6ckRpci5nZXRf
YnJhbmNoX3JlZmVyZW5jZSgpLiIiIgorICAgICAgICBwYXRoID0gc2VsZi5fcGF0aF9mb3JfcmVt
b3RlX2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC5j
YWxsKCdCenJEaXIub3Blbl9icmFuY2gnLCBwYXRoKQorICAgICAgICBpZiByZXNwb25zZVswXSA9
PSAnb2snOgorICAgICAgICAgICAgaWYgcmVzcG9uc2VbMV0gPT0gJyc6CisgICAgICAgICAgICAg
ICAgIyBicmFuY2ggYXQgdGhpcyBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGEgYnJhbmNoIHJlZmVyZW5j
ZSwgdXNlIHRoZSBleGlzdGluZyBCcmFuY2hSZWZlcmVuY2UgbG9naWMuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3BvbnNlWzFdCisgICAgICAgIGVsaWYgcmVzcG9uc2UgPT0gKCdub2JyYW5j
aCcsKToKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Ob3RCcmFuY2hFcnJvcihwYXRoPXNlbGYu
cm9vdF90cmFuc3BvcnQuYmFzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBG
YWxzZSwgJ3VuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAlcicgJSAocmVzcG9uc2UsKQorCisgICAg
ZGVmIG9wZW5fYnJhbmNoKHNlbGYsIF91bnN1cHBvcnRlZD1GYWxzZSk6CisgICAgICAgIGFzc2Vy
dCBfdW5zdXBwb3J0ZWQgPT0gRmFsc2UsICd1bnN1cHBvcnRlZCBmbGFnIHN1cHBvcnQgbm90IGlt
cGxlbWVudGVkIHlldC4nCisgICAgICAgIHJlZmVyZW5jZV91cmwgPSBzZWxmLmdldF9icmFuY2hf
cmVmZXJlbmNlKCkKKyAgICAgICAgaWYgcmVmZXJlbmNlX3VybCBpcyBOb25lOgorICAgICAgICAg
ICAgIyBicmFuY2ggYXQgdGhpcyBsb2NhdGlvbi4KKyAgICAgICAgICAgIHJldHVybiBSZW1vdGVC
cmFuY2goc2VsZiwgc2VsZi5maW5kX3JlcG9zaXRvcnkoKSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICMgYSBicmFuY2ggcmVmZXJlbmNlLCB1c2UgdGhlIGV4aXN0aW5nIEJyYW5jaFJlZmVy
ZW5jZSBsb2dpYy4KKyAgICAgICAgICAgIGZvcm1hdCA9IEJyYW5jaFJlZmVyZW5jZUZvcm1hdCgp
CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0Lm9wZW4oc2VsZiwgX2ZvdW5kPVRydWUsIGxvY2F0
aW9uPXJlZmVyZW5jZV91cmwpCisgICAgICAgICAgICAgICAgCisgICAgZGVmIG9wZW5fcmVwb3Np
dG9yeShzZWxmKToKKyAgICAgICAgcGF0aCA9IHNlbGYuX3BhdGhfZm9yX3JlbW90ZV9jYWxsKHNl
bGYuX2NsaWVudCkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9jbGllbnQuY2FsbCgnQnpyRGly
LmZpbmRfcmVwb3NpdG9yeScsIHBhdGgpCisgICAgICAgIGFzc2VydCByZXNwb25zZVswXSBpbiAo
J29rJywgJ25vcmVwb3NpdG9yeScpLCBcCisgICAgICAgICAgICAndW5leHBlY3RlZCByZXNwb25z
ZSBjb2RlICVzJyAlIChyZXNwb25zZSwpCisgICAgICAgIGlmIHJlc3BvbnNlWzBdID09ICdub3Jl
cG9zaXRvcnknOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLk5vUmVwb3NpdG9yeVByZXNlbnQo
c2VsZikKKyAgICAgICAgYXNzZXJ0IGxlbihyZXNwb25zZSkgPT0gNCwgJ2luY29ycmVjdCByZXNw
b25zZSBsZW5ndGggJXMnICUgKHJlc3BvbnNlLCkKKyAgICAgICAgaWYgcmVzcG9uc2VbMV0gPT0g
Jyc6CisgICAgICAgICAgICBmb3JtYXQgPSBSZW1vdGVSZXBvc2l0b3J5Rm9ybWF0KCkKKyAgICAg
ICAgICAgIGZvcm1hdC5yaWNoX3Jvb3RfZGF0YSA9IChyZXNwb25zZVsyXSA9PSAneWVzJykKKyAg
ICAgICAgICAgIGZvcm1hdC5zdXBwb3J0c190cmVlX3JlZmVyZW5jZSA9IChyZXNwb25zZVszXSA9
PSAneWVzJykKKyAgICAgICAgICAgIHJldHVybiBSZW1vdGVSZXBvc2l0b3J5KHNlbGYsIGZvcm1h
dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Ob1JlcG9zaXRvcnlQ
cmVzZW50KHNlbGYpCisKKyAgICBkZWYgb3Blbl93b3JraW5ndHJlZShzZWxmLCByZWNvbW1lbmRf
dXBncmFkZT1UcnVlKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICBpZiBz
ZWxmLl9yZWFsX2J6cmRpci5oYXNfd29ya2luZ3RyZWUoKToKKyAgICAgICAgICAgIHJhaXNlIGVy
cm9ycy5Ob3RMb2NhbFVybChzZWxmLnJvb3RfdHJhbnNwb3J0KQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmFpc2UgZXJyb3JzLk5vV29ya2luZ1RyZWUoc2VsZi5yb290X3RyYW5zcG9ydC5i
YXNlKQorCisgICAgZGVmIF9wYXRoX2Zvcl9yZW1vdGVfY2FsbChzZWxmLCBjbGllbnQpOgorICAg
ICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gYmUgdXNlZCBmb3IgdGhpcyBienJkaXIgaW4gYSBy
ZW1vdGUgY2FsbC4iIiIKKyAgICAgICAgcmV0dXJuIGNsaWVudC5yZW1vdGVfcGF0aF9mcm9tX3Ry
YW5zcG9ydChzZWxmLnJvb3RfdHJhbnNwb3J0KQorCisgICAgZGVmIGdldF9icmFuY2hfdHJhbnNw
b3J0KHNlbGYsIGJyYW5jaF9mb3JtYXQpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisg
ICAgICAgIHJldHVybiBzZWxmLl9yZWFsX2J6cmRpci5nZXRfYnJhbmNoX3RyYW5zcG9ydChicmFu
Y2hfZm9ybWF0KQorCisgICAgZGVmIGdldF9yZXBvc2l0b3J5X3RyYW5zcG9ydChzZWxmLCByZXBv
c2l0b3J5X2Zvcm1hdCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWxfYnpyZGlyLmdldF9yZXBvc2l0b3J5X3RyYW5zcG9ydChyZXBvc2l0b3J5
X2Zvcm1hdCkKKworICAgIGRlZiBnZXRfd29ya2luZ3RyZWVfdHJhbnNwb3J0KHNlbGYsIHdvcmtp
bmd0cmVlX2Zvcm1hdCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWxfYnpyZGlyLmdldF93b3JraW5ndHJlZV90cmFuc3BvcnQod29ya2luZ3Ry
ZWVfZm9ybWF0KQorCisgICAgZGVmIGNhbl9jb252ZXJ0X2Zvcm1hdChzZWxmKToKKyAgICAgICAg
IiIiVXBncmFkaW5nIG9mIHJlbW90ZSBienJkaXJzIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIiIgor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBuZWVkc19mb3JtYXRfY29udmVyc2lvbihz
ZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgICIiIlVwZ3JhZGluZyBvZiByZW1vdGUgYnpyZGly
cyBpcyBub3Qgc3VwcG9ydGVkIHlldC4iIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgY2xvbmUoc2VsZiwgdXJsLCByZXZpc2lvbl9pZD1Ob25lLCBmb3JjZV9uZXdfcmVwbz1GYWxz
ZSk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jl
YWxfYnpyZGlyLmNsb25lKHVybCwgcmV2aXNpb25faWQ9cmV2aXNpb25faWQsCisgICAgICAgICAg
ICBmb3JjZV9uZXdfcmVwbz1mb3JjZV9uZXdfcmVwbykKKworCitjbGFzcyBSZW1vdGVSZXBvc2l0
b3J5Rm9ybWF0KHJlcG9zaXRvcnkuUmVwb3NpdG9yeUZvcm1hdCk6CisgICAgIiIiRm9ybWF0IGZv
ciByZXBvc2l0b3JpZXMgYWNjZXNzZWQgb3ZlciBhIF9TbWFydENsaWVudC4KKworICAgIEluc3Rh
bmNlcyBvZiB0aGlzIHJlcG9zaXRvcnkgYXJlIHJlcHJlc2VudGVkIGJ5IFJlbW90ZVJlcG9zaXRv
cnkKKyAgICBpbnN0YW5jZXMuCisKKyAgICBUaGUgUmVtb3RlUmVwb3NpdG9yeUZvcm1hdCBpcyBw
YXJhbWV0ZXJpc2VkIGR1cmluZyBjb25zdHJ1Y3Rpb24KKyAgICB0byByZWZsZWN0IHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIHJlYWwsIHJlbW90ZSBmb3JtYXQuIFNwZWNpZmljYWxseQorICAgIHRo
ZSBhdHRyaWJ1dGVzIHJpY2hfcm9vdF9kYXRhIGFuZCBzdXBwb3J0c190cmVlX3JlZmVyZW5jZSBh
cmUgc2V0CisgICAgb24gYSBwZXIgaW5zdGFuY2UgYmFzaXMsIGFuZCBhcmUgbm90IHNldCAoYW5k
IHNob3VsZCBub3QgYmUpIGF0CisgICAgdGhlIGNsYXNzIGxldmVsLgorICAgICIiIgorCisgICAg
X21hdGNoaW5nYnpyZGlyID0gUmVtb3RlQnpyRGlyRm9ybWF0CisKKyAgICBkZWYgaW5pdGlhbGl6
ZShzZWxmLCBhX2J6cmRpciwgc2hhcmVkPUZhbHNlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UoYV9ienJkaXIsIFJlbW90ZUJ6ckRpciksIFwKKyAgICAgICAgICAgICclciBpcyBub3QgYSBS
ZW1vdGVCenJEaXInICUgKGFfYnpyZGlyLCkKKyAgICAgICAgcmV0dXJuIGFfYnpyZGlyLmNyZWF0
ZV9yZXBvc2l0b3J5KHNoYXJlZD1zaGFyZWQpCisgICAgCisgICAgZGVmIG9wZW4oc2VsZiwgYV9i
enJkaXIpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhX2J6cmRpciwgUmVtb3RlQnpyRGly
KQorICAgICAgICByZXR1cm4gYV9ienJkaXIub3Blbl9yZXBvc2l0b3J5KCkKKworICAgIGRlZiBn
ZXRfZm9ybWF0X2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gJ2J6ciByZW1vdGUg
cmVwb3NpdG9yeScKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1
cm4gc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fCisKKyAgICBkZWYgY2hlY2tfY29u
dmVyc2lvbl90YXJnZXQoc2VsZiwgdGFyZ2V0X2Zvcm1hdCk6CisgICAgICAgIGlmIHNlbGYucmlj
aF9yb290X2RhdGEgYW5kIG5vdCB0YXJnZXRfZm9ybWF0LnJpY2hfcm9vdF9kYXRhOgorICAgICAg
ICAgICAgcmFpc2UgZXJyb3JzLkJhZENvbnZlcnNpb25UYXJnZXQoCisgICAgICAgICAgICAgICAg
J0RvZXMgbm90IHN1cHBvcnQgcmljaCByb290IGRhdGEuJywgdGFyZ2V0X2Zvcm1hdCkKKyAgICAg
ICAgaWYgKHNlbGYuc3VwcG9ydHNfdHJlZV9yZWZlcmVuY2UgYW5kCisgICAgICAgICAgICBub3Qg
Z2V0YXR0cih0YXJnZXRfZm9ybWF0LCAnc3VwcG9ydHNfdHJlZV9yZWZlcmVuY2UnLCBGYWxzZSkp
OgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkJhZENvbnZlcnNpb25UYXJnZXQoCisgICAgICAg
ICAgICAgICAgJ0RvZXMgbm90IHN1cHBvcnQgbmVzdGVkIHRyZWVzJywgdGFyZ2V0X2Zvcm1hdCkK
KworCitjbGFzcyBSZW1vdGVSZXBvc2l0b3J5KG9iamVjdCk6CisgICAgIiIiUmVwb3NpdG9yeSBh
Y2Nlc3NlZCBvdmVyIHJwYy4KKworICAgIEZvciB0aGUgbW9tZW50IG1vc3Qgb3BlcmF0aW9ucyBh
cmUgcGVyZm9ybWVkIHVzaW5nIGxvY2FsIHRyYW5zcG9ydC1iYWNrZWQKKyAgICBSZXBvc2l0b3J5
IG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVtb3RlX2J6cmRp
ciwgZm9ybWF0LCByZWFsX3JlcG9zaXRvcnk9Tm9uZSwgX2NsaWVudD1Ob25lKToKKyAgICAgICAg
IiIiQ3JlYXRlIGEgUmVtb3RlUmVwb3NpdG9yeSBpbnN0YW5jZS4KKyAgICAgICAgCisgICAgICAg
IDpwYXJhbSByZW1vdGVfYnpyZGlyOiBUaGUgYnpyZGlyIGhvc3RpbmcgdGhpcyByZXBvc2l0b3J5
LgorICAgICAgICA6cGFyYW0gZm9ybWF0OiBUaGUgUmVtb3RlRm9ybWF0IG9iamVjdCB0byB1c2Uu
CisgICAgICAgIDpwYXJhbSByZWFsX3JlcG9zaXRvcnk6IElmIG5vdCBOb25lLCBhIGxvY2FsIGlt
cGxlbWVudGF0aW9uIG9mIHRoZQorICAgICAgICAgICAgcmVwb3NpdG9yeSBsb2dpYyBmb3IgdGhl
IHJlcG9zaXRvcnksIHVzdWFsbHkgYWNjZXNzaW5nIHRoZSBkYXRhCisgICAgICAgICAgICB2aWEg
dGhlIFZGUy4KKyAgICAgICAgOnBhcmFtIF9jbGllbnQ6IFByaXZhdGUgdGVzdGluZyBwYXJhbWV0
ZXIgLSBvdmVycmlkZSB0aGUgc21hcnQgY2xpZW50CisgICAgICAgICAgICB0byBiZSB1c2VkIGJ5
IHRoZSByZXBvc2l0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmVhbF9yZXBvc2l0b3J5
OgorICAgICAgICAgICAgc2VsZi5fcmVhbF9yZXBvc2l0b3J5ID0gcmVhbF9yZXBvc2l0b3J5Cisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZWFsX3JlcG9zaXRvcnkgPSBOb25lCisg
ICAgICAgIHNlbGYuYnpyZGlyID0gcmVtb3RlX2J6cmRpcgorICAgICAgICBpZiBfY2xpZW50IGlz
IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQuX1NtYXJ0Q2xpZW50KHNl
bGYuYnpyZGlyLl9tZWRpdW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jbGll
bnQgPSBfY2xpZW50CisgICAgICAgIHNlbGYuX2Zvcm1hdCA9IGZvcm1hdAorICAgICAgICBzZWxm
Ll9sb2NrX21vZGUgPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2tfdG9rZW4gPSBOb25lCisgICAg
ICAgIHNlbGYuX2xvY2tfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2xlYXZlX2xvY2sgPSBGYWxz
ZQorCisgICAgZGVmIF9lbnN1cmVfcmVhbChzZWxmKToKKyAgICAgICAgIiIiRW5zdXJlIHRoYXQg
dGhlcmUgaXMgYSBfcmVhbF9yZXBvc2l0b3J5IHNldC4KKworICAgICAgICBVc2VkIGJlZm9yZSBj
YWxscyB0byBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuCisgICAgICAgICIiIgorICAgICAgICBpZiBu
b3Qgc2VsZi5fcmVhbF9yZXBvc2l0b3J5OgorICAgICAgICAgICAgc2VsZi5ienJkaXIuX2Vuc3Vy
ZV9yZWFsKCkKKyAgICAgICAgICAgICNzZWxmLl9yZWFsX3JlcG9zaXRvcnkgPSBzZWxmLmJ6cmRp
ci5fcmVhbF9ienJkaXIub3Blbl9yZXBvc2l0b3J5KCkKKyAgICAgICAgICAgIHNlbGYuX3NldF9y
ZWFsX3JlcG9zaXRvcnkoc2VsZi5ienJkaXIuX3JlYWxfYnpyZGlyLm9wZW5fcmVwb3NpdG9yeSgp
KQorCisgICAgZGVmIGdldF9yZXZpc2lvbl9ncmFwaChzZWxmLCByZXZpc2lvbl9pZD1Ob25lKToK
KyAgICAgICAgIiIiU2VlIFJlcG9zaXRvcnkuZ2V0X3JldmlzaW9uX2dyYXBoKCkuIiIiCisgICAg
ICAgIGlmIHJldmlzaW9uX2lkIGlzIE5vbmU6CisgICAgICAgICAgICByZXZpc2lvbl9pZCA9ICcn
CisgICAgICAgIGVsaWYgcmV2aXNpb25faWQgPT0gTlVMTF9SRVZJU0lPTjoKKyAgICAgICAgICAg
IHJldHVybiB7fQorCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVtb3Rl
X2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICBhc3NlcnQgdHlwZShyZXZpc2lvbl9pZCkgaXMg
c3RyCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fY2xpZW50LmNhbGxfZXhwZWN0aW5nX2JvZHko
CisgICAgICAgICAgICAnUmVwb3NpdG9yeS5nZXRfcmV2aXNpb25fZ3JhcGgnLCBwYXRoLCByZXZp
c2lvbl9pZCkKKyAgICAgICAgaWYgcmVzcG9uc2VbMF1bMF0gbm90IGluIFsnb2snLCAnbm9zdWNo
cmV2aXNpb24nXToKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5VbmV4cGVjdGVkU21hcnRTZXJ2
ZXJSZXNwb25zZShyZXNwb25zZVswXSkKKyAgICAgICAgaWYgcmVzcG9uc2VbMF1bMF0gPT0gJ29r
JzoKKyAgICAgICAgICAgIGNvZGVkID0gcmVzcG9uc2VbMV0ucmVhZF9ib2R5X2J5dGVzKCkKKyAg
ICAgICAgICAgIGlmIGNvZGVkID09ICcnOgorICAgICAgICAgICAgICAgICMgbm8gcmV2aXNpb25z
IGluIHRoaXMgcmVwb3NpdG9yeSEKKyAgICAgICAgICAgICAgICByZXR1cm4ge30KKyAgICAgICAg
ICAgIGxpbmVzID0gY29kZWQuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgIHJldmlzaW9uX2dyYXBo
ID0ge30KKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGQg
PSBsaXN0KGxpbmUuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICByZXZpc2lvbl9ncmFwaFtkWzBd
XSA9IGRbMTpdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcmV2aXNpb25f
Z3JhcGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3BvbnNlX2JvZHkgPSByZXNwb25z
ZVsxXS5yZWFkX2JvZHlfYnl0ZXMoKQorICAgICAgICAgICAgYXNzZXJ0IHJlc3BvbnNlX2JvZHkg
PT0gJycKKyAgICAgICAgICAgIHJhaXNlIE5vU3VjaFJldmlzaW9uKHNlbGYsIHJldmlzaW9uX2lk
KQorCisgICAgZGVmIGhhc19yZXZpc2lvbihzZWxmLCByZXZpc2lvbl9pZCk6CisgICAgICAgICIi
IlNlZSBSZXBvc2l0b3J5Lmhhc19yZXZpc2lvbigpLiIiIgorICAgICAgICBpZiByZXZpc2lvbl9p
ZCBpcyBOb25lOgorICAgICAgICAgICAgIyBUaGUgbnVsbCByZXZpc2lvbiBpcyBhbHdheXMgcHJl
c2VudC4KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRp
ci5fcGF0aF9mb3JfcmVtb3RlX2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICByZXNwb25zZSA9
IHNlbGYuX2NsaWVudC5jYWxsKCdSZXBvc2l0b3J5Lmhhc19yZXZpc2lvbicsIHBhdGgsIHJldmlz
aW9uX2lkKQorICAgICAgICBhc3NlcnQgcmVzcG9uc2VbMF0gaW4gKCd5ZXMnLCAnbm8nKSwgJ3Vu
ZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAlcycgJSAocmVzcG9uc2UsKQorICAgICAgICByZXR1cm4g
cmVzcG9uc2VbMF0gPT0gJ3llcycKKworICAgIGRlZiBnYXRoZXJfc3RhdHMoc2VsZiwgcmV2aWQ9
Tm9uZSwgY29tbWl0dGVycz1Ob25lKToKKyAgICAgICAgIiIiU2VlIFJlcG9zaXRvcnkuZ2F0aGVy
X3N0YXRzKCkuIiIiCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVtb3Rl
X2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICBpZiByZXZpZCBpbiAoTm9uZSwgTlVMTF9SRVZJ
U0lPTik6CisgICAgICAgICAgICBmbXRfcmV2aWQgPSAnJworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgZm10X3JldmlkID0gcmV2aWQKKyAgICAgICAgaWYgY29tbWl0dGVycyBpcyBOb25lIG9y
IG5vdCBjb21taXR0ZXJzOgorICAgICAgICAgICAgZm10X2NvbW1pdHRlcnMgPSAnbm8nCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBmbXRfY29tbWl0dGVycyA9ICd5ZXMnCisgICAgICAgIHJl
c3BvbnNlID0gc2VsZi5fY2xpZW50LmNhbGxfZXhwZWN0aW5nX2JvZHkoCisgICAgICAgICAgICAn
UmVwb3NpdG9yeS5nYXRoZXJfc3RhdHMnLCBwYXRoLCBmbXRfcmV2aWQsIGZtdF9jb21taXR0ZXJz
KQorICAgICAgICBhc3NlcnQgcmVzcG9uc2VbMF1bMF0gPT0gJ29rJywgXAorICAgICAgICAgICAg
J3VuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAlcycgJSAocmVzcG9uc2VbMF0sKQorCisgICAgICAg
IGJvZHkgPSByZXNwb25zZVsxXS5yZWFkX2JvZHlfYnl0ZXMoKQorICAgICAgICByZXN1bHQgPSB7
fQorICAgICAgICBmb3IgbGluZSBpbiBib2R5LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYg
bm90IGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGtleSwgdmFs
X3RleHQgPSBsaW5lLnNwbGl0KCc6JykKKyAgICAgICAgICAgIGlmIGtleSBpbiAoJ3JldmlzaW9u
cycsICdzaXplJywgJ2NvbW1pdHRlcnMnKToKKyAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9
IGludCh2YWxfdGV4dCkKKyAgICAgICAgICAgIGVsaWYga2V5IGluICgnZmlyc3RyZXYnLCAnbGF0
ZXN0cmV2Jyk6CisgICAgICAgICAgICAgICAgdmFsdWVzID0gdmFsX3RleHQuc3BsaXQoJyAnKVsx
Ol0KKyAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IChmbG9hdCh2YWx1ZXNbMF0pLCBsb25n
KHZhbHVlc1sxXSkpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldF9waHlz
aWNhbF9sb2NrX3N0YXR1cyhzZWxmKToKKyAgICAgICAgIiIiU2VlIFJlcG9zaXRvcnkuZ2V0X3Bo
eXNpY2FsX2xvY2tfc3RhdHVzKCkuIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IGlzX3NoYXJlZChzZWxmKToKKyAgICAgICAgIiIiU2VlIFJlcG9zaXRvcnkuaXNfc2hhcmVkKCku
IiIiCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVtb3RlX2NhbGwoc2Vs
Zi5fY2xpZW50KQorICAgICAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC5jYWxsKCdSZXBvc2l0
b3J5LmlzX3NoYXJlZCcsIHBhdGgpCisgICAgICAgIGFzc2VydCByZXNwb25zZVswXSBpbiAoJ3ll
cycsICdubycpLCAndW5leHBlY3RlZCByZXNwb25zZSBjb2RlICVzJyAlIChyZXNwb25zZSwpCisg
ICAgICAgIHJldHVybiByZXNwb25zZVswXSA9PSAneWVzJworCisgICAgZGVmIGxvY2tfcmVhZChz
ZWxmKToKKyAgICAgICAgIyB3cm9uZyBldmVudHVhbGx5IC0gd2FudCBhIGxvY2FsIGxvY2sgY2Fj
aGUgY29udGV4dAorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja19tb2RlOgorICAgICAgICAgICAg
c2VsZi5fbG9ja19tb2RlID0gJ3InCisgICAgICAgICAgICBzZWxmLl9sb2NrX2NvdW50ID0gMQor
ICAgICAgICAgICAgaWYgc2VsZi5fcmVhbF9yZXBvc2l0b3J5IGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5sb2NrX3JlYWQoKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc2VsZi5fbG9ja19jb3VudCArPSAxCisKKyAgICBkZWYgX3JlbW90ZV9s
b2NrX3dyaXRlKHNlbGYsIHRva2VuKToKKyAgICAgICAgcGF0aCA9IHNlbGYuYnpyZGlyLl9wYXRo
X2Zvcl9yZW1vdGVfY2FsbChzZWxmLl9jbGllbnQpCisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6
CisgICAgICAgICAgICB0b2tlbiA9ICcnCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fY2xpZW50
LmNhbGwoJ1JlcG9zaXRvcnkubG9ja193cml0ZScsIHBhdGgsIHRva2VuKQorICAgICAgICBpZiBy
ZXNwb25zZVswXSA9PSAnb2snOgorICAgICAgICAgICAgb2ssIHRva2VuID0gcmVzcG9uc2UKKyAg
ICAgICAgICAgIHJldHVybiB0b2tlbgorICAgICAgICBlbGlmIHJlc3BvbnNlWzBdID09ICdMb2Nr
Q29udGVudGlvbic6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuTG9ja0NvbnRlbnRpb24oJyhy
ZW1vdGUgbG9jayknKQorICAgICAgICBlbGlmIHJlc3BvbnNlWzBdID09ICdVbmxvY2thYmxlVHJh
bnNwb3J0JzoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5VbmxvY2thYmxlVHJhbnNwb3J0KHNl
bGYuYnpyZGlyLnJvb3RfdHJhbnNwb3J0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNz
ZXJ0IEZhbHNlLCAndW5leHBlY3RlZCByZXNwb25zZSBjb2RlICVzJyAlIChyZXNwb25zZSwpCisK
KyAgICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNl
bGYuX2xvY2tfbW9kZToKKyAgICAgICAgICAgIHNlbGYuX2xvY2tfdG9rZW4gPSBzZWxmLl9yZW1v
dGVfbG9ja193cml0ZSh0b2tlbikKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9sb2NrX3Rva2Vu
LCAnUmVtb3RlIHNlcnZlciBkaWQgbm90IHJldHVybiBhIHRva2VuIScKKyAgICAgICAgICAgIGlm
IHNlbGYuX3JlYWxfcmVwb3NpdG9yeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9yZWFsX3JlcG9zaXRvcnkubG9ja193cml0ZSh0b2tlbj1zZWxmLl9sb2NrX3Rva2VuKQorICAg
ICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fbGVh
dmVfbG9jayA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5f
bGVhdmVfbG9jayA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9sb2NrX21vZGUgPSAndycKKyAg
ICAgICAgICAgIHNlbGYuX2xvY2tfY291bnQgPSAxCisgICAgICAgIGVsaWYgc2VsZi5fbG9ja19t
b2RlID09ICdyJzoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5SZWFkT25seUVycm9yKHNlbGYp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb2NrX2NvdW50ICs9IDEKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2xvY2tfdG9rZW4KKworICAgIGRlZiBsZWF2ZV9sb2NrX2luX3BsYWNl
KHNlbGYpOgorICAgICAgICBzZWxmLl9sZWF2ZV9sb2NrID0gVHJ1ZQorCisgICAgZGVmIGRvbnRf
bGVhdmVfbG9ja19pbl9wbGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5fbGVhdmVfbG9jayA9IEZh
bHNlCisKKyAgICBkZWYgX3NldF9yZWFsX3JlcG9zaXRvcnkoc2VsZiwgcmVwb3NpdG9yeSk6Cisg
ICAgICAgICIiIlNldCB0aGUgX3JlYWxfcmVwb3NpdG9yeSBmb3IgdGhpcyByZXBvc2l0b3J5Lgor
CisgICAgICAgIDpwYXJhbSByZXBvc2l0b3J5OiBUaGUgcmVwb3NpdG9yeSB0byBmYWxsYmFjayB0
byBmb3Igbm9uLWhwc3MKKyAgICAgICAgICAgIGltcGxlbWVudGVkIG9wZXJhdGlvbnMuCisgICAg
ICAgICIiIgorICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UocmVwb3NpdG9yeSwgUmVtb3Rl
UmVwb3NpdG9yeSkKKyAgICAgICAgc2VsZi5fcmVhbF9yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeQor
ICAgICAgICBpZiBzZWxmLl9sb2NrX21vZGUgPT0gJ3cnOgorICAgICAgICAgICAgIyBpZiB3ZSBh
cmUgYWxyZWFkeSBsb2NrZWQsIHRoZSByZWFsIHJlcG9zaXRvcnkgbXVzdCBiZSBhYmxlIHRvCisg
ICAgICAgICAgICAjIGFjcXVpcmUgdGhlIGxvY2sgd2l0aCBvdXIgdG9rZW4uCisgICAgICAgICAg
ICBzZWxmLl9yZWFsX3JlcG9zaXRvcnkubG9ja193cml0ZShzZWxmLl9sb2NrX3Rva2VuKQorICAg
ICAgICBlbGlmIHNlbGYuX2xvY2tfbW9kZSA9PSAncic6CisgICAgICAgICAgICBzZWxmLl9yZWFs
X3JlcG9zaXRvcnkubG9ja19yZWFkKCkKKworICAgIGRlZiBfdW5sb2NrKHNlbGYsIHRva2VuKToK
KyAgICAgICAgcGF0aCA9IHNlbGYuYnpyZGlyLl9wYXRoX2Zvcl9yZW1vdGVfY2FsbChzZWxmLl9j
bGllbnQpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fY2xpZW50LmNhbGwoJ1JlcG9zaXRvcnku
dW5sb2NrJywgcGF0aCwgdG9rZW4pCisgICAgICAgIGlmIHJlc3BvbnNlID09ICgnb2snLCk6Cisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiByZXNwb25zZVswXSA9PSAnVG9rZW5NaXNt
YXRjaCc6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5NaXNtYXRjaCh0b2tlbiwgJyhy
ZW1vdGUgdG9rZW4pJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZSwg
J3VuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAlcycgJSAocmVzcG9uc2UsKQorCisgICAgZGVmIHVu
bG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9ja19jb3VudCAtPSAxCisgICAgICAgIGlmIG5v
dCBzZWxmLl9sb2NrX2NvdW50OgorICAgICAgICAgICAgbW9kZSA9IHNlbGYuX2xvY2tfbW9kZQor
ICAgICAgICAgICAgc2VsZi5fbG9ja19tb2RlID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5f
cmVhbF9yZXBvc2l0b3J5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWxf
cmVwb3NpdG9yeS51bmxvY2soKQorICAgICAgICAgICAgaWYgbW9kZSAhPSAndyc6CisgICAgICAg
ICAgICAgICAgIyBPbmx5IHdyaXRlLWxvY2tlZCByZXBvc2l0b3JpZXMgbmVlZCB0byBtYWtlIGEg
cmVtb3RlIG1ldGhvZAorICAgICAgICAgICAgICAgICMgY2FsbCB0byBwZXJmb20gdGhlIHVubG9j
ay4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9sb2Nr
X3Rva2VuLCAnTG9ja2VkLCBidXQgbm8gdG9rZW4hJworICAgICAgICAgICAgdG9rZW4gPSBzZWxm
Ll9sb2NrX3Rva2VuCisgICAgICAgICAgICBzZWxmLl9sb2NrX3Rva2VuID0gTm9uZQorICAgICAg
ICAgICAgaWYgbm90IHNlbGYuX2xlYXZlX2xvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5fdW5s
b2NrKHRva2VuKQorCisgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CisgICAgICAgICMgc2hvdWxk
IGhhbmQgb2ZmIHRvIHRoZSBuZXR3b3JrCisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5icmVha19sb2NrKCkKKworICAgIGRl
ZiBfZ2V0X3RhcmJhbGwoc2VsZiwgY29tcHJlc3Npb24pOgorICAgICAgICAiIiJSZXR1cm4gYSBU
ZW1wb3JhcnlGaWxlIGNvbnRhaW5pbmcgYSByZXBvc2l0b3J5IHRhcmJhbGwiIiIKKyAgICAgICAg
aW1wb3J0IHRlbXBmaWxlCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVt
b3RlX2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICByZXNwb25zZSwgcHJvdG9jb2wgPSBzZWxm
Ll9jbGllbnQuY2FsbF9leHBlY3RpbmdfYm9keSgKKyAgICAgICAgICAgICdSZXBvc2l0b3J5LnRh
cmJhbGwnLCBwYXRoLCBjb21wcmVzc2lvbikKKyAgICAgICAgYXNzZXJ0IHJlc3BvbnNlWzBdIGlu
ICgnb2snLCAnZmFpbHVyZScpLCBcCisgICAgICAgICAgICAndW5leHBlY3RlZCByZXNwb25zZSBj
b2RlICVzJyAlIChyZXNwb25zZSwpCisgICAgICAgIGlmIHJlc3BvbnNlWzBdID09ICdvayc6Cisg
ICAgICAgICAgICAjIEV4dHJhY3QgdGhlIHRhcmJhbGwgYW5kIHJldHVybiBpdAorICAgICAgICAg
ICAgdCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgICAgICAjIFRPRE86
IHJwYyBsYXllciBzaG91bGQgcmVhZCBkaXJlY3RseSBpbnRvIGl0Li4uCisgICAgICAgICAgICB0
LndyaXRlKHByb3RvY29sLnJlYWRfYm9keV9ieXRlcygpKQorICAgICAgICAgICAgdC5zZWVrKDAp
CisgICAgICAgICAgICByZXR1cm4gdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ug
ZXJyb3JzLlNtYXJ0U2VydmVyRXJyb3IoZXJyb3JfY29kZT1yZXNwb25zZSkKKworICAgIGRlZiBz
cHJvdXQoc2VsZiwgdG9fYnpyZGlyLCByZXZpc2lvbl9pZD1Ob25lKToKKyAgICAgICAgIyBUT0RP
OiBPcHRpb24gdG8gY29udHJvbCB3aGF0IGZvcm1hdCBpcyBjcmVhdGVkPworICAgICAgICB0b19y
ZXBvID0gdG9fYnpyZGlyLmNyZWF0ZV9yZXBvc2l0b3J5KCkKKyAgICAgICAgc2VsZi5fY29weV9y
ZXBvc2l0b3J5X3RhcmJhbGwodG9fcmVwbywgcmV2aXNpb25faWQpCisgICAgICAgIHJldHVybiB0
b19yZXBvCisKKyAgICAjIyMgVGhlc2UgbWV0aG9kcyBhcmUganVzdCB0aGluIHNoaW1zIHRvIHRo
ZSBWRlMgb2JqZWN0IGZvciBub3cuCisKKyAgICBkZWYgcmV2aXNpb25fdHJlZShzZWxmLCByZXZp
c2lvbl9pZCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3JlYWxfcmVwb3NpdG9yeS5yZXZpc2lvbl90cmVlKHJldmlzaW9uX2lkKQorCisgICAgZGVm
IGdldF9jb21taXRfYnVpbGRlcihzZWxmLCBicmFuY2gsIHBhcmVudHMsIGNvbmZpZywgdGltZXN0
YW1wPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZT1Ob25lLCBjb21t
aXR0ZXI9Tm9uZSwgcmV2cHJvcHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uX2lkPU5vbmUpOgorICAgICAgICAjIEZJWE1FOiBJdCBvdWdodCB0byBiZSBwb3NzaWJs
ZSB0byBjYWxsIHRoaXMgd2l0aG91dCBpbW1lZGlhdGVseQorICAgICAgICAjIHRyaWdnZXJpbmcg
X2Vuc3VyZV9yZWFsLiAgRm9yIG5vdyBpdCdzIHRoZSBlYXNpZXN0IHRoaW5nIHRvIGRvLgorICAg
ICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLl9yZWFsX3Jl
cG9zaXRvcnkuZ2V0X2NvbW1pdF9idWlsZGVyKGJyYW5jaCwgcGFyZW50cywKKyAgICAgICAgICAg
ICAgICBjb25maWcsIHRpbWVzdGFtcD10aW1lc3RhbXAsIHRpbWV6b25lPXRpbWV6b25lLAorICAg
ICAgICAgICAgICAgIGNvbW1pdHRlcj1jb21taXR0ZXIsIHJldnByb3BzPXJldnByb3BzLCByZXZp
c2lvbl9pZD1yZXZpc2lvbl9pZCkKKyAgICAgICAgIyBNYWtlIHRoZSBidWlsZGVyIHVzZSB0aGlz
IFJlbW90ZVJlcG9zaXRvcnkgcmF0aGVyIHRoYW4gdGhlIHJlYWwgb25lLgorICAgICAgICBidWls
ZGVyLnJlcG9zaXRvcnkgPSBzZWxmCisgICAgICAgIHJldHVybiBidWlsZGVyCisKKyAgICBAbmVl
ZHNfd3JpdGVfbG9jaworICAgIGRlZiBhZGRfaW52ZW50b3J5KHNlbGYsIHJldmlkLCBpbnYsIHBh
cmVudHMpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFsX3JlcG9zaXRvcnkuYWRkX2ludmVudG9yeShyZXZpZCwgaW52LCBwYXJlbnRzKQorCisg
ICAgQG5lZWRzX3dyaXRlX2xvY2sKKyAgICBkZWYgYWRkX3JldmlzaW9uKHNlbGYsIHJldl9pZCwg
cmV2LCBpbnY9Tm9uZSwgY29uZmlnPU5vbmUpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgp
CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuYWRkX3JldmlzaW9uKAorICAg
ICAgICAgICAgcmV2X2lkLCByZXYsIGludj1pbnYsIGNvbmZpZz1jb25maWcpCisKKyAgICBAbmVl
ZHNfcmVhZF9sb2NrCisgICAgZGVmIGdldF9pbnZlbnRvcnkoc2VsZiwgcmV2aXNpb25faWQpOgor
ICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3Jl
cG9zaXRvcnkuZ2V0X2ludmVudG9yeShyZXZpc2lvbl9pZCkKKworICAgIEBuZWVkc19yZWFkX2xv
Y2sKKyAgICBkZWYgZ2V0X3JldmlzaW9uKHNlbGYsIHJldmlzaW9uX2lkKToKKyAgICAgICAgc2Vs
Zi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9yZXBvc2l0b3J5Lmdl
dF9yZXZpc2lvbihyZXZpc2lvbl9pZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB3ZWF2ZV9z
dG9yZShzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4g
c2VsZi5fcmVhbF9yZXBvc2l0b3J5LndlYXZlX3N0b3JlCisKKyAgICBkZWYgZ2V0X3RyYW5zYWN0
aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBz
ZWxmLl9yZWFsX3JlcG9zaXRvcnkuZ2V0X3RyYW5zYWN0aW9uKCkKKworICAgIEBuZWVkc19yZWFk
X2xvY2sKKyAgICBkZWYgY2xvbmUoc2VsZiwgYV9ienJkaXIsIHJldmlzaW9uX2lkPU5vbmUpOgor
ICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3Jl
cG9zaXRvcnkuY2xvbmUoYV9ienJkaXIsIHJldmlzaW9uX2lkPXJldmlzaW9uX2lkKQorCisgICAg
ZGVmIG1ha2Vfd29ya2luZ190cmVlcyhzZWxmKToKKyAgICAgICAgIiIiUmVtb3RlUmVwb3NpdG9y
aWVzIG5ldmVyIGNyZWF0ZSB3b3JraW5nIHRyZWVzIGJ5IGRlZmF1bHQuIiIiCisgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgZGVmIGZldGNoKHNlbGYsIHNvdXJjZSwgcmV2aXNpb25faWQ9Tm9u
ZSwgcGI9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5mZXRjaCgKKyAgICAgICAgICAgIHNvdXJjZSwgcmV2aXNp
b25faWQ9cmV2aXNpb25faWQsIHBiPXBiKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRy
b2xfd2VhdmVzKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJl
dHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuY29udHJvbF93ZWF2ZXMKKworICAgIEBuZWVkc19y
ZWFkX2xvY2sKKyAgICBkZWYgZ2V0X2FuY2VzdHJ5KHNlbGYsIHJldmlzaW9uX2lkKToKKyAgICAg
ICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9yZXBvc2l0
b3J5LmdldF9hbmNlc3RyeShyZXZpc2lvbl9pZCkKKworICAgIEBuZWVkc19yZWFkX2xvY2sKKyAg
ICBkZWYgZ2V0X2ludmVudG9yeV93ZWF2ZShzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3Jl
YWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9yZXBvc2l0b3J5LmdldF9pbnZlbnRvcnlf
d2VhdmUoKQorCisgICAgZGVmIGZpbGVpZHNfYWx0ZXJlZF9ieV9yZXZpc2lvbl9pZHMoc2VsZiwg
cmV2aXNpb25faWRzKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1
cm4gc2VsZi5fcmVhbF9yZXBvc2l0b3J5LmZpbGVpZHNfYWx0ZXJlZF9ieV9yZXZpc2lvbl9pZHMo
cmV2aXNpb25faWRzKQorCisgICAgQG5lZWRzX3JlYWRfbG9jaworICAgIGRlZiBnZXRfc2lnbmF0
dXJlX3RleHQoc2VsZiwgcmV2aXNpb25faWQpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgp
CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuZ2V0X3NpZ25hdHVyZV90ZXh0
KHJldmlzaW9uX2lkKQorCisgICAgQG5lZWRzX3JlYWRfbG9jaworICAgIGRlZiBnZXRfcmV2aXNp
b25fZ3JhcGhfd2l0aF9naG9zdHMoc2VsZiwgcmV2aXNpb25faWRzPU5vbmUpOgorICAgICAgICBz
ZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnku
Z2V0X3JldmlzaW9uX2dyYXBoX3dpdGhfZ2hvc3RzKAorICAgICAgICAgICAgcmV2aXNpb25faWRz
PXJldmlzaW9uX2lkcykKKworICAgIEBuZWVkc19yZWFkX2xvY2sKKyAgICBkZWYgZ2V0X2ludmVu
dG9yeV94bWwoc2VsZiwgcmV2aXNpb25faWQpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgp
CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuZ2V0X2ludmVudG9yeV94bWwo
cmV2aXNpb25faWQpCisKKyAgICBkZWYgZGVzZXJpYWxpc2VfaW52ZW50b3J5KHNlbGYsIHJldmlz
aW9uX2lkLCB4bWwpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVy
biBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuZGVzZXJpYWxpc2VfaW52ZW50b3J5KHJldmlzaW9uX2lk
LCB4bWwpCisKKyAgICBkZWYgcmVjb25jaWxlKHNlbGYsIG90aGVyPU5vbmUsIHRob3JvdWdoPUZh
bHNlKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2VsZi5f
cmVhbF9yZXBvc2l0b3J5LnJlY29uY2lsZShvdGhlcj1vdGhlciwgdGhvcm91Z2g9dGhvcm91Z2gp
CisgICAgICAgIAorICAgIGRlZiBhbGxfcmV2aXNpb25faWRzKHNlbGYpOgorICAgICAgICBzZWxm
Ll9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuYWxs
X3JldmlzaW9uX2lkcygpCisgICAgCisgICAgQG5lZWRzX3JlYWRfbG9jaworICAgIGRlZiBnZXRf
ZGVsdGFzX2Zvcl9yZXZpc2lvbnMoc2VsZiwgcmV2aXNpb25zKToKKyAgICAgICAgc2VsZi5fZW5z
dXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9yZXBvc2l0b3J5LmdldF9kZWx0
YXNfZm9yX3JldmlzaW9ucyhyZXZpc2lvbnMpCisKKyAgICBAbmVlZHNfcmVhZF9sb2NrCisgICAg
ZGVmIGdldF9yZXZpc2lvbl9kZWx0YShzZWxmLCByZXZpc2lvbl9pZCk6CisgICAgICAgIHNlbGYu
X2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5nZXRf
cmV2aXNpb25fZGVsdGEocmV2aXNpb25faWQpCisKKyAgICBAbmVlZHNfcmVhZF9sb2NrCisgICAg
ZGVmIHJldmlzaW9uX3RyZWVzKHNlbGYsIHJldmlzaW9uX2lkcyk6CisgICAgICAgIHNlbGYuX2Vu
c3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5yZXZpc2lv
bl90cmVlcyhyZXZpc2lvbl9pZHMpCisKKyAgICBAbmVlZHNfcmVhZF9sb2NrCisgICAgZGVmIGdl
dF9yZXZpc2lvbl9yZWNvbmNpbGUoc2VsZiwgcmV2aXNpb25faWQpOgorICAgICAgICBzZWxmLl9l
bnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRvcnkuZ2V0X3Jl
dmlzaW9uX3JlY29uY2lsZShyZXZpc2lvbl9pZCkKKworICAgIEBuZWVkc19yZWFkX2xvY2sKKyAg
ICBkZWYgY2hlY2soc2VsZiwgcmV2aXNpb25faWRzKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3Jl
YWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9yZXBvc2l0b3J5LmNoZWNrKHJldmlzaW9u
X2lkcykKKworICAgIGRlZiBjb3B5X2NvbnRlbnRfaW50byhzZWxmLCBkZXN0aW5hdGlvbiwgcmV2
aXNpb25faWQ9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5jb3B5X2NvbnRlbnRfaW50bygKKyAgICAgICAgICAg
IGRlc3RpbmF0aW9uLCByZXZpc2lvbl9pZD1yZXZpc2lvbl9pZCkKKworICAgIGRlZiBfY29weV9y
ZXBvc2l0b3J5X3RhcmJhbGwoc2VsZiwgZGVzdGluYXRpb24sIHJldmlzaW9uX2lkPU5vbmUpOgor
ICAgICAgICAjIGdldCBhIHRhcmJhbGwgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgY29w
eSBmcm9tIHRoYXQgaW50byB0aGUKKyAgICAgICAgIyBkZXN0aW5hdGlvbgorICAgICAgICBmcm9t
IGJ6cmxpYiBpbXBvcnQgb3N1dGlscworICAgICAgICBpbXBvcnQgdGFyZmlsZQorICAgICAgICBp
bXBvcnQgdGVtcGZpbGUKKyAgICAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAg
ICAgICAgIyBUT0RPOiBNYXliZSBhIHByb2dyZXNzIGJhciB3aGlsZSBzdHJlYW1pbmcgdGhlIHRh
cmJhbGw/CisgICAgICAgIG5vdGUoIkNvcHlpbmcgcmVwb3NpdG9yeSBjb250ZW50IGFzIHRhcmJh
bGwuLi4iKQorICAgICAgICB0YXJfZmlsZSA9IHNlbGYuX2dldF90YXJiYWxsKCdiejInKQorICAg
ICAgICB0cnk6CisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oJ3JlcG9zaXRvcnknLCBm
aWxlb2JqPXRhcl9maWxlLAorICAgICAgICAgICAgICAgIG1vZGU9J3J8YnoyJykKKyAgICAgICAg
ICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIF9leHRyYWN0X3Rhcih0YXIsIHRtcGRpcikKKyAgICAgICAgICAgICAgICB0bXBf
YnpyZGlyID0gQnpyRGlyLm9wZW4odG1wZGlyKQorICAgICAgICAgICAgICAgIHRtcF9yZXBvID0g
dG1wX2J6cmRpci5vcGVuX3JlcG9zaXRvcnkoKQorICAgICAgICAgICAgICAgIHRtcF9yZXBvLmNv
cHlfY29udGVudF9pbnRvKGRlc3RpbmF0aW9uLCByZXZpc2lvbl9pZCkKKyAgICAgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICAgICAgb3N1dGlscy5ybXRyZWUodG1wZGlyKQorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgdGFyX2ZpbGUuY2xvc2UoKQorICAgICAgICAjIFRPRE86IGlm
IHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBtYXliZSBkbyBpdCB0
aGUKKyAgICAgICAgIyBzbG93IHdheSB1c2luZyB0aGUgX3JlYWxfcmVwb3NpdG9yeT8KKyAgICAg
ICAgIworICAgICAgICAjIFRPRE86IFN1Z2dlc3Rpb24gZnJvbSBqb2huOiB1c2luZyBleHRlcm5h
bCB0YXIgaXMgbXVjaCBmYXN0ZXIgdGhhbgorICAgICAgICAjIHB5dGhvbidzIHRhcmZpbGUgbGli
cmFyeSwgYnV0IGl0IG1heSBub3Qgd29yayBvbiB3aW5kb3dzLgorCisgICAgZGVmIHNldF9tYWtl
X3dvcmtpbmdfdHJlZXMoc2VsZiwgbmV3X3ZhbHVlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcihzZWxmLnNldF9tYWtlX3dvcmtpbmdfdHJlZXMpCisKKyAgICBAbmVlZHNfd3Jp
dGVfbG9jaworICAgIGRlZiBzaWduX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uX2lkLCBncGdfc3Ry
YXRlZ3kpOgorICAgICAgICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFsX3JlcG9zaXRvcnkuc2lnbl9yZXZpc2lvbihyZXZpc2lvbl9pZCwgZ3BnX3N0cmF0ZWd5
KQorCisgICAgQG5lZWRzX3JlYWRfbG9jaworICAgIGRlZiBnZXRfcmV2aXNpb25zKHNlbGYsIHJl
dmlzaW9uX2lkcyk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5nZXRfcmV2aXNpb25zKHJldmlzaW9uX2lkcykKKworICAg
IGRlZiBzdXBwb3J0c19yaWNoX3Jvb3Qoc2VsZik6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFs
KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5zdXBwb3J0c19yaWNoX3Jv
b3QoKQorCisgICAgZGVmIGl0ZXJfcmV2ZXJzZV9yZXZpc2lvbl9oaXN0b3J5KHNlbGYsIHJldmlz
aW9uX2lkKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fcmVhbF9yZXBvc2l0b3J5Lml0ZXJfcmV2ZXJzZV9yZXZpc2lvbl9oaXN0b3J5KHJldmlzaW9u
X2lkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9zZXJpYWxpemVyKHNlbGYpOgorICAgICAg
ICBzZWxmLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3JlcG9zaXRv
cnkuX3NlcmlhbGl6ZXIKKworICAgIGRlZiBzdG9yZV9yZXZpc2lvbl9zaWduYXR1cmUoc2VsZiwg
Z3BnX3N0cmF0ZWd5LCBwbGFpbnRleHQsIHJldmlzaW9uX2lkKToKKyAgICAgICAgc2VsZi5fZW5z
dXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9yZXBvc2l0b3J5LnN0b3JlX3Jl
dmlzaW9uX3NpZ25hdHVyZSgKKyAgICAgICAgICAgIGdwZ19zdHJhdGVneSwgcGxhaW50ZXh0LCBy
ZXZpc2lvbl9pZCkKKworICAgIGRlZiBoYXNfc2lnbmF0dXJlX2Zvcl9yZXZpc2lvbl9pZChzZWxm
LCByZXZpc2lvbl9pZCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWxfcmVwb3NpdG9yeS5oYXNfc2lnbmF0dXJlX2Zvcl9yZXZpc2lvbl9pZChy
ZXZpc2lvbl9pZCkKKworCitjbGFzcyBSZW1vdGVCcmFuY2hMb2NrYWJsZUZpbGVzKExvY2thYmxl
RmlsZXMpOgorICAgICIiIkEgJ0xvY2thYmxlRmlsZXMnIGltcGxlbWVudGF0aW9uIHRoYXQgdGFs
a3MgdG8gYSBzbWFydCBzZXJ2ZXIuCisgICAgCisgICAgVGhpcyBpcyBub3QgYSBwdWJsaWMgaW50
ZXJmYWNlIGNsYXNzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ6cmRpciwg
X2NsaWVudCk6CisgICAgICAgIHNlbGYuYnpyZGlyID0gYnpyZGlyCisgICAgICAgIHNlbGYuX2Ns
aWVudCA9IF9jbGllbnQKKyAgICAgICAgc2VsZi5fbmVlZF9maW5kX21vZGVzID0gVHJ1ZQorICAg
ICAgICBMb2NrYWJsZUZpbGVzLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgYnpyZGlyLmdl
dF9icmFuY2hfdHJhbnNwb3J0KE5vbmUpLAorICAgICAgICAgICAgJ2xvY2snLCBsb2NrZGlyLkxv
Y2tEaXIpCisKKyAgICBkZWYgX2ZpbmRfbW9kZXMoc2VsZik6CisgICAgICAgICMgUmVtb3RlQnJh
bmNoZXMgZG9uJ3QgbGV0IHRoZSBjbGllbnQgc2V0IHRoZSBtb2RlIG9mIGNvbnRyb2wgZmlsZXMu
CisgICAgICAgIHNlbGYuX2Rpcl9tb2RlID0gTm9uZQorICAgICAgICBzZWxmLl9maWxlX21vZGUg
PSBOb25lCisKKyAgICBkZWYgZ2V0KHNlbGYsIHBhdGgpOgorICAgICAgICAiIiInZ2V0JyBhIHJl
bW90ZSBwYXRoIGFzIHBlciB0aGUgTG9ja2FibGVGaWxlcyBpbnRlcmZhY2UuCisKKyAgICAgICAg
OnBhcmFtIHBhdGg6IHRoZSBmaWxlIHRvICdnZXQnLiBJZiB0aGlzIGlzICdicmFuY2guY29uZics
IHdlIGRvIG5vdAorICAgICAgICAgICAgIGp1c3QgcmV0cmlldmUgYSBmaWxlLCBpbnN0ZWFkIHdl
IGFzayB0aGUgc21hcnQgc2VydmVyIHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgYSBjb25maWd1
cmF0aW9uIGZvciB1cyAtIHdoaWNoIGlzIHJldHJpZXZlZCBhcyBhbiBJTkkgZmlsZS4KKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIHBhdGggPT0gJ2JyYW5jaC5jb25mJzoKKyAgICAgICAgICAgIHBh
dGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVtb3RlX2NhbGwoc2VsZi5fY2xpZW50KQorICAg
ICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9jbGllbnQuY2FsbF9leHBlY3RpbmdfYm9keSgKKyAg
ICAgICAgICAgICAgICAnQnJhbmNoLmdldF9jb25maWdfZmlsZScsIHBhdGgpCisgICAgICAgICAg
ICBhc3NlcnQgcmVzcG9uc2VbMF1bMF0gPT0gJ29rJywgXAorICAgICAgICAgICAgICAgICd1bmV4
cGVjdGVkIHJlc3BvbnNlIGNvZGUgJXMnICUgKHJlc3BvbnNlWzBdLCkKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmdJTyhyZXNwb25zZVsxXS5yZWFkX2JvZHlfYnl0ZXMoKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICMgVkZTIGZhbGxiYWNrLgorICAgICAgICAgICAgcmV0dXJuIExvY2th
YmxlRmlsZXMuZ2V0KHNlbGYsIHBhdGgpCisKKworY2xhc3MgUmVtb3RlQnJhbmNoRm9ybWF0KGJy
YW5jaC5CcmFuY2hGb3JtYXQpOgorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAg
ICAgIHJldHVybiAoaXNpbnN0YW5jZShvdGhlciwgUmVtb3RlQnJhbmNoRm9ybWF0KSBhbmQgCisg
ICAgICAgICAgICBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fKQorCisgICAgZGVmIGdl
dF9mb3JtYXRfZGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAnUmVtb3RlIEJaUiBC
cmFuY2gnCisKKyAgICBkZWYgZ2V0X2Zvcm1hdF9zdHJpbmcoc2VsZik6CisgICAgICAgIHJldHVy
biAnUmVtb3RlIEJaUiBCcmFuY2gnCisKKyAgICBkZWYgb3BlbihzZWxmLCBhX2J6cmRpcik6Cisg
ICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFfYnpyZGlyLCBSZW1vdGVCenJEaXIpCisgICAgICAg
IHJldHVybiBhX2J6cmRpci5vcGVuX2JyYW5jaCgpCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWxm
LCBhX2J6cmRpcik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFfYnpyZGlyLCBSZW1vdGVC
enJEaXIpCisgICAgICAgIHJldHVybiBhX2J6cmRpci5jcmVhdGVfYnJhbmNoKCkKKworCitjbGFz
cyBSZW1vdGVCcmFuY2goYnJhbmNoLkJyYW5jaCk6CisgICAgIiIiQnJhbmNoIHN0b3JlZCBvbiBh
IHNlcnZlciBhY2Nlc3NlZCBieSBIUFNTIFJQQy4KKworICAgIEF0IHRoZSBtb21lbnQgbW9zdCBv
cGVyYXRpb25zIGFyZSBtYXBwZWQgZG93biB0byBzaW1wbGUgZmlsZSBvcGVyYXRpb25zLgorICAg
ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlbW90ZV9ienJkaXIsIHJlbW90ZV9yZXBv
c2l0b3J5LCByZWFsX2JyYW5jaD1Ob25lLAorICAgICAgICBfY2xpZW50PU5vbmUpOgorICAgICAg
ICAiIiJDcmVhdGUgYSBSZW1vdGVCcmFuY2ggaW5zdGFuY2UuCisKKyAgICAgICAgOnBhcmFtIHJl
YWxfYnJhbmNoOiBBbiBvcHRpb25hbCBsb2NhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnJhbmNo
CisgICAgICAgICAgICBmb3JtYXQsIHVzdWFsbHkgYWNjZXNzaW5nIHRoZSBkYXRhIHZpYSB0aGUg
VkZTLgorICAgICAgICA6cGFyYW0gX2NsaWVudDogUHJpdmF0ZSBwYXJhbWV0ZXIgZm9yIHRlc3Rp
bmcuCisgICAgICAgICIiIgorICAgICAgICAjIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgY2FsbCB0
aGUgcGFyZW50IGNsYXNzJ3MgX19pbml0X18sIGJlY2F1c2UgaXQKKyAgICAgICAgIyB3aWxsIHRy
eSB0byBhc3NpZ24gdG8gc2VsZi50YWdzLCB3aGljaCBpcyBhIHByb3BlcnR5IGluIHRoaXMgc3Vi
Y2xhc3MuCisgICAgICAgICMgQW5kIHRoZSBwYXJlbnQncyBfX2luaXRfXyBkb2Vzbid0IGRvIG11
Y2ggYW55d2F5LgorICAgICAgICBzZWxmLl9yZXZpc2lvbl9oaXN0b3J5X2NhY2hlID0gTm9uZQor
ICAgICAgICBzZWxmLmJ6cmRpciA9IHJlbW90ZV9ienJkaXIKKyAgICAgICAgaWYgX2NsaWVudCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2NsaWVudCA9IF9jbGllbnQKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudC5fU21hcnRDbGllbnQoc2Vs
Zi5ienJkaXIuX21lZGl1bSkKKyAgICAgICAgc2VsZi5yZXBvc2l0b3J5ID0gcmVtb3RlX3JlcG9z
aXRvcnkKKyAgICAgICAgaWYgcmVhbF9icmFuY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz
ZWxmLl9yZWFsX2JyYW5jaCA9IHJlYWxfYnJhbmNoCisgICAgICAgICAgICAjIEdpdmUgdGhlIHJl
bW90ZSByZXBvc2l0b3J5IHRoZSBtYXRjaGluZyByZWFsIHJlcG8uCisgICAgICAgICAgICByZWFs
X3JlcG8gPSBzZWxmLl9yZWFsX2JyYW5jaC5yZXBvc2l0b3J5CisgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHJlYWxfcmVwbywgUmVtb3RlUmVwb3NpdG9yeSk6CisgICAgICAgICAgICAgICAgcmVh
bF9yZXBvLl9lbnN1cmVfcmVhbCgpCisgICAgICAgICAgICAgICAgcmVhbF9yZXBvID0gcmVhbF9y
ZXBvLl9yZWFsX3JlcG9zaXRvcnkKKyAgICAgICAgICAgIHNlbGYucmVwb3NpdG9yeS5fc2V0X3Jl
YWxfcmVwb3NpdG9yeShyZWFsX3JlcG8pCisgICAgICAgICAgICAjIEdpdmUgdGhlIGJyYW5jaCB0
aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gbGV0IGZhc3QtcGF0aGluZyBoYXBwZW4uCisgICAgICAg
ICAgICBzZWxmLl9yZWFsX2JyYW5jaC5yZXBvc2l0b3J5ID0gc2VsZi5yZXBvc2l0b3J5CisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZWFsX2JyYW5jaCA9IE5vbmUKKyAgICAgICAg
IyBGaWxsIG91dCBleHBlY3RlZCBhdHRyaWJ1dGVzIG9mIGJyYW5jaCBmb3IgYnpybGliIGFwaSB1
c2Vycy4KKyAgICAgICAgc2VsZi5fZm9ybWF0ID0gUmVtb3RlQnJhbmNoRm9ybWF0KCkKKyAgICAg
ICAgc2VsZi5iYXNlID0gc2VsZi5ienJkaXIucm9vdF90cmFuc3BvcnQuYmFzZQorICAgICAgICBz
ZWxmLl9jb250cm9sX2ZpbGVzID0gTm9uZQorICAgICAgICBzZWxmLl9sb2NrX21vZGUgPSBOb25l
CisgICAgICAgIHNlbGYuX2xvY2tfdG9rZW4gPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2tfY291
bnQgPSAwCisgICAgICAgIHNlbGYuX2xlYXZlX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIF9fc3Ry
X18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMoJXMpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25h
bWVfXywgc2VsZi5iYXNlKQorCisgICAgX19yZXByX18gPSBfX3N0cl9fCisKKyAgICBkZWYgX2Vu
c3VyZV9yZWFsKHNlbGYpOgorICAgICAgICAiIiJFbnN1cmUgdGhhdCB0aGVyZSBpcyBhIF9yZWFs
X2JyYW5jaCBzZXQuCisKKyAgICAgICAgVXNlZCBiZWZvcmUgY2FsbHMgdG8gc2VsZi5fcmVhbF9i
cmFuY2guCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVhbF9icmFuY2g6Cisg
ICAgICAgICAgICBhc3NlcnQgdmZzLnZmc19lbmFibGVkKCkKKyAgICAgICAgICAgIHNlbGYuYnpy
ZGlyLl9lbnN1cmVfcmVhbCgpCisgICAgICAgICAgICBzZWxmLl9yZWFsX2JyYW5jaCA9IHNlbGYu
YnpyZGlyLl9yZWFsX2J6cmRpci5vcGVuX2JyYW5jaCgpCisgICAgICAgICAgICAjIEdpdmUgdGhl
IHJlbW90ZSByZXBvc2l0b3J5IHRoZSBtYXRjaGluZyByZWFsIHJlcG8uCisgICAgICAgICAgICBy
ZWFsX3JlcG8gPSBzZWxmLl9yZWFsX2JyYW5jaC5yZXBvc2l0b3J5CisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHJlYWxfcmVwbywgUmVtb3RlUmVwb3NpdG9yeSk6CisgICAgICAgICAgICAgICAg
cmVhbF9yZXBvLl9lbnN1cmVfcmVhbCgpCisgICAgICAgICAgICAgICAgcmVhbF9yZXBvID0gcmVh
bF9yZXBvLl9yZWFsX3JlcG9zaXRvcnkKKyAgICAgICAgICAgIHNlbGYucmVwb3NpdG9yeS5fc2V0
X3JlYWxfcmVwb3NpdG9yeShyZWFsX3JlcG8pCisgICAgICAgICAgICAjIEdpdmUgdGhlIGJyYW5j
aCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gbGV0IGZhc3QtcGF0aGluZyBoYXBwZW4uCisgICAg
ICAgICAgICBzZWxmLl9yZWFsX2JyYW5jaC5yZXBvc2l0b3J5ID0gc2VsZi5yZXBvc2l0b3J5Cisg
ICAgICAgICAgICAjIFhYWDogZGVhbCB3aXRoIF9sb2NrX21vZGUgPT0gJ3cnCisgICAgICAgICAg
ICBpZiBzZWxmLl9sb2NrX21vZGUgPT0gJ3InOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWxf
YnJhbmNoLmxvY2tfcmVhZCgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udHJvbF9maWxl
cyhzZWxmKToKKyAgICAgICAgIyBEZWZlciBhY3R1YWxseSBjcmVhdGluZyBSZW1vdGVCcmFuY2hM
b2NrYWJsZUZpbGVzIHVudGlsIGl0cyBuZWVkZWQsCisgICAgICAgICMgYmVjYXVzZSBpdCB0cmln
Z2VycyBhbiBfZW5zdXJlX3JlYWwgdGhhdCB3ZSBvdGhlcndpc2UgbWlnaHQgbm90IG5lZWQuCisg
ICAgICAgIGlmIHNlbGYuX2NvbnRyb2xfZmlsZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYu
X2NvbnRyb2xfZmlsZXMgPSBSZW1vdGVCcmFuY2hMb2NrYWJsZUZpbGVzKAorICAgICAgICAgICAg
ICAgIHNlbGYuYnpyZGlyLCBzZWxmLl9jbGllbnQpCisgICAgICAgIHJldHVybiBzZWxmLl9jb250
cm9sX2ZpbGVzCisKKyAgICBkZWYgX2dldF9jaGVja291dF9mb3JtYXQoc2VsZik6CisgICAgICAg
IHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfYnJhbmNoLl9n
ZXRfY2hlY2tvdXRfZm9ybWF0KCkKKworICAgIGRlZiBnZXRfcGh5c2ljYWxfbG9ja19zdGF0dXMo
c2VsZik6CisgICAgICAgICIiIlNlZSBCcmFuY2guZ2V0X3BoeXNpY2FsX2xvY2tfc3RhdHVzKCku
IiIiCisgICAgICAgICMgc2hvdWxkIGJlIGFuIEFQSSBjYWxsIHRvIHRoZSBzZXJ2ZXIsIGFzIGJy
YW5jaGVzIG11c3QgYmUgbG9ja2FibGUuCisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfYnJhbmNoLmdldF9waHlzaWNhbF9sb2NrX3N0YXR1cygp
CisKKyAgICBkZWYgbG9ja19yZWFkKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja19t
b2RlOgorICAgICAgICAgICAgc2VsZi5fbG9ja19tb2RlID0gJ3InCisgICAgICAgICAgICBzZWxm
Ll9sb2NrX2NvdW50ID0gMQorICAgICAgICAgICAgaWYgc2VsZi5fcmVhbF9icmFuY2ggaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVhbF9icmFuY2gubG9ja19yZWFkKCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvY2tfY291bnQgKz0gMQorCisgICAgZGVm
IF9yZW1vdGVfbG9ja193cml0ZShzZWxmLCB0b2tlbik6CisgICAgICAgIGlmIHRva2VuIGlzIE5v
bmU6CisgICAgICAgICAgICBicmFuY2hfdG9rZW4gPSByZXBvX3Rva2VuID0gJycKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGJyYW5jaF90b2tlbiA9IHRva2VuCisgICAgICAgICAgICByZXBv
X3Rva2VuID0gc2VsZi5yZXBvc2l0b3J5LmxvY2tfd3JpdGUoKQorICAgICAgICAgICAgc2VsZi5y
ZXBvc2l0b3J5LnVubG9jaygpCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3Jf
cmVtb3RlX2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVu
dC5jYWxsKCdCcmFuY2gubG9ja193cml0ZScsIHBhdGgsIGJyYW5jaF90b2tlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvX3Rva2VuKQorICAgICAgICBpZiByZXNw
b25zZVswXSA9PSAnb2snOgorICAgICAgICAgICAgb2ssIGJyYW5jaF90b2tlbiwgcmVwb190b2tl
biA9IHJlc3BvbnNlCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoX3Rva2VuLCByZXBvX3Rva2Vu
CisgICAgICAgIGVsaWYgcmVzcG9uc2VbMF0gPT0gJ0xvY2tDb250ZW50aW9uJzoKKyAgICAgICAg
ICAgIHJhaXNlIGVycm9ycy5Mb2NrQ29udGVudGlvbignKHJlbW90ZSBsb2NrKScpCisgICAgICAg
IGVsaWYgcmVzcG9uc2VbMF0gPT0gJ1Rva2VuTWlzbWF0Y2gnOgorICAgICAgICAgICAgcmFpc2Ug
ZXJyb3JzLlRva2VuTWlzbWF0Y2godG9rZW4sICcocmVtb3RlIHRva2VuKScpCisgICAgICAgIGVs
aWYgcmVzcG9uc2VbMF0gPT0gJ1VubG9ja2FibGVUcmFuc3BvcnQnOgorICAgICAgICAgICAgcmFp
c2UgZXJyb3JzLlVubG9ja2FibGVUcmFuc3BvcnQoc2VsZi5ienJkaXIucm9vdF90cmFuc3BvcnQp
CisgICAgICAgIGVsaWYgcmVzcG9uc2VbMF0gPT0gJ1JlYWRPbmx5RXJyb3InOgorICAgICAgICAg
ICAgcmFpc2UgZXJyb3JzLlJlYWRPbmx5RXJyb3Ioc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGFzc2VydCBGYWxzZSwgJ3VuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAlcicgJSAocmVz
cG9uc2UsKQorICAgICAgICAgICAgCisgICAgZGVmIGxvY2tfd3JpdGUoc2VsZiwgdG9rZW49Tm9u
ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9sb2NrX21vZGU6CisgICAgICAgICAgICByZW1vdGVf
dG9rZW5zID0gc2VsZi5fcmVtb3RlX2xvY2tfd3JpdGUodG9rZW4pCisgICAgICAgICAgICBzZWxm
Ll9sb2NrX3Rva2VuLCBzZWxmLl9yZXBvX2xvY2tfdG9rZW4gPSByZW1vdGVfdG9rZW5zCisgICAg
ICAgICAgICBhc3NlcnQgc2VsZi5fbG9ja190b2tlbiwgJ1JlbW90ZSBzZXJ2ZXIgZGlkIG5vdCBy
ZXR1cm4gYSB0b2tlbiEnCisgICAgICAgICAgICAjIFRPRE86IFdlIHJlYWxseSwgcmVhbGx5LCBy
ZWFsbHkgZG9uJ3Qgd2FudCB0byBjYWxsIF9lbnN1cmVfcmVhbAorICAgICAgICAgICAgIyBoZXJl
LCBidXQgaXQncyB0aGUgZWFzaWVzdCB3YXkgdG8gZW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRo
ZQorICAgICAgICAgICAgIyBzdGF0ZSBvZiB0aGUgUmVtb3RlQnJhbmNoIGFuZCBSZW1vdGVSZXBv
c2l0b3J5IG9iamVjdHMgYW5kIHRoZQorICAgICAgICAgICAgIyBwaHlzaWNhbCBsb2Nrcy4gIElm
IHdlIGRvbid0IG1hdGVyaWFsaXNlIHRoZSByZWFsIG9iamVjdHMgaGVyZSwKKyAgICAgICAgICAg
ICMgdGhlbiBnZXR0aW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIHJpZ2h0IHN0YXRlIGxhdGVyIGlzIGNv
bXBsZXgsIHNvCisgICAgICAgICAgICAjIGZvciBub3cgd2UganVzdCBkbyBpdCB0aGUgbGF6eSB3
YXkuCisgICAgICAgICAgICAjICAgLS0gQW5kcmV3IEJlbm5ldHRzLCAyMDA3LTAyLTIyLgorICAg
ICAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICAgICAgaWYgc2VsZi5fcmVhbF9i
cmFuY2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVhbF9icmFuY2gucmVw
b3NpdG9yeS5sb2NrX3dyaXRlKAorICAgICAgICAgICAgICAgICAgICB0b2tlbj1zZWxmLl9yZXBv
X2xvY2tfdG9rZW4pCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9yZWFsX2JyYW5jaC5sb2NrX3dyaXRlKHRva2VuPXNlbGYuX2xvY2tfdG9rZW4pCisgICAg
ICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhbF9icmFu
Y2gucmVwb3NpdG9yeS51bmxvY2soKQorICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICAgICAgc2VsZi5fbGVhdmVfbG9jayA9IFRydWUKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgIyBYWFg6IHRoaXMgY2FzZSBzZWVtcyB0byBiZSB1bnJlYWNo
YWJsZTsgdG9rZW4gY2Fubm90IGJlIE5vbmUuCisgICAgICAgICAgICAgICAgc2VsZi5fbGVhdmVf
bG9jayA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9sb2NrX21vZGUgPSAndycKKyAgICAgICAg
ICAgIHNlbGYuX2xvY2tfY291bnQgPSAxCisgICAgICAgIGVsaWYgc2VsZi5fbG9ja19tb2RlID09
ICdyJzoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5SZWFkT25seVRyYW5zYWN0aW9uCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICAgICAjIEEgdG9rZW4gd2FzIGdpdmVuIHRvIGxvY2tfd3JpdGUsIGFuZCB3ZSdyZSByZWxvY2tp
bmcsIHNvIGNoZWNrCisgICAgICAgICAgICAgICAgIyB0aGF0IHRoZSBnaXZlbiB0b2tlbiBhY3R1
YWxseSBtYXRjaGVzIHRoZSBvbmUgd2UgYWxyZWFkeSBoYXZlLgorICAgICAgICAgICAgICAgIGlm
IHRva2VuICE9IHNlbGYuX2xvY2tfdG9rZW46CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVy
cm9ycy5Ub2tlbk1pc21hdGNoKHRva2VuLCBzZWxmLl9sb2NrX3Rva2VuKQorICAgICAgICAgICAg
c2VsZi5fbG9ja19jb3VudCArPSAxCisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrX3Rva2VuCisK
KyAgICBkZWYgX3VubG9jayhzZWxmLCBicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4pOgorICAgICAg
ICBwYXRoID0gc2VsZi5ienJkaXIuX3BhdGhfZm9yX3JlbW90ZV9jYWxsKHNlbGYuX2NsaWVudCkK
KyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9jbGllbnQuY2FsbCgnQnJhbmNoLnVubG9jaycsIHBh
dGgsIGJyYW5jaF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBvX3Rva2VuKQorICAgICAgICBpZiByZXNwb25zZSA9PSAoJ29rJywpOgorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIGVsaWYgcmVzcG9uc2VbMF0gPT0gJ1Rva2VuTWlzbWF0Y2gnOgorICAg
ICAgICAgICAgcmFpc2UgZXJyb3JzLlRva2VuTWlzbWF0Y2goCisgICAgICAgICAgICAgICAgc3Ry
KChicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4pKSwgJyhyZW1vdGUgdG9rZW5zKScpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICd1bmV4cGVjdGVkIHJlc3BvbnNlIGNv
ZGUgJXMnICUgKHJlc3BvbnNlLCkKKworICAgIGRlZiB1bmxvY2soc2VsZik6CisgICAgICAgIHNl
bGYuX2xvY2tfY291bnQgLT0gMQorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja19jb3VudDoKKyAg
ICAgICAgICAgIHNlbGYuX2NsZWFyX2NhY2hlZF9zdGF0ZSgpCisgICAgICAgICAgICBtb2RlID0g
c2VsZi5fbG9ja19tb2RlCisgICAgICAgICAgICBzZWxmLl9sb2NrX21vZGUgPSBOb25lCisgICAg
ICAgICAgICBpZiBzZWxmLl9yZWFsX2JyYW5jaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fbGVhdmVfbG9jazoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGlz
IFJlbW90ZUJyYW5jaCB3aWxsIHJlbW92ZSB0aGUgcGh5c2ljYWwgbG9jayBmb3IgdGhlCisgICAg
ICAgICAgICAgICAgICAgICMgcmVwb3NpdG9yeSwgbWFrZSBzdXJlIHRoZSBfcmVhbF9icmFuY2gg
ZG9lc24ndCBkbyBpdAorICAgICAgICAgICAgICAgICAgICAjIGZpcnN0LiAgKEJlY2F1c2UgdGhl
IF9yZWFsX2JyYW5jaCdzIHJlcG9zaXRvcnkgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAg
ICMgYmUgdGhlIFJlbW90ZVJlcG9zaXRvcnkuKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9y
ZWFsX2JyYW5jaC5yZXBvc2l0b3J5LmxlYXZlX2xvY2tfaW5fcGxhY2UoKQorICAgICAgICAgICAg
ICAgIHNlbGYuX3JlYWxfYnJhbmNoLnVubG9jaygpCisgICAgICAgICAgICBpZiBtb2RlICE9ICd3
JzoKKyAgICAgICAgICAgICAgICAjIE9ubHkgd3JpdGUtbG9ja2VkIGJyYW5jaGVkIG5lZWQgdG8g
bWFrZSBhIHJlbW90ZSBtZXRob2QgY2FsbAorICAgICAgICAgICAgICAgICMgdG8gcGVyZm9tIHRo
ZSB1bmxvY2suCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBhc3NlcnQgc2Vs
Zi5fbG9ja190b2tlbiwgJ0xvY2tlZCwgYnV0IG5vIHRva2VuIScKKyAgICAgICAgICAgIGJyYW5j
aF90b2tlbiA9IHNlbGYuX2xvY2tfdG9rZW4KKyAgICAgICAgICAgIHJlcG9fdG9rZW4gPSBzZWxm
Ll9yZXBvX2xvY2tfdG9rZW4KKyAgICAgICAgICAgIHNlbGYuX2xvY2tfdG9rZW4gPSBOb25lCisg
ICAgICAgICAgICBzZWxmLl9yZXBvX2xvY2tfdG9rZW4gPSBOb25lCisgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5fbGVhdmVfbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLl91bmxvY2soYnJhbmNo
X3Rva2VuLCByZXBvX3Rva2VuKQorCisgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CisgICAgICAg
IHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfYnJhbmNoLmJy
ZWFrX2xvY2soKQorCisgICAgZGVmIGxlYXZlX2xvY2tfaW5fcGxhY2Uoc2VsZik6CisgICAgICAg
IHNlbGYuX2xlYXZlX2xvY2sgPSBUcnVlCisKKyAgICBkZWYgZG9udF9sZWF2ZV9sb2NrX2luX3Bs
YWNlKHNlbGYpOgorICAgICAgICBzZWxmLl9sZWF2ZV9sb2NrID0gRmFsc2UKKworICAgIGRlZiBs
YXN0X3JldmlzaW9uX2luZm8oc2VsZik6CisgICAgICAgICIiIlNlZSBCcmFuY2gubGFzdF9yZXZp
c2lvbl9pbmZvKCkuIiIiCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVt
b3RlX2NhbGwoc2VsZi5fY2xpZW50KQorICAgICAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC5j
YWxsKCdCcmFuY2gubGFzdF9yZXZpc2lvbl9pbmZvJywgcGF0aCkKKyAgICAgICAgYXNzZXJ0IHJl
c3BvbnNlWzBdID09ICdvaycsICd1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUgJXMnICUgKHJlc3Bv
bnNlLCkKKyAgICAgICAgcmV2bm8gPSBpbnQocmVzcG9uc2VbMV0pCisgICAgICAgIGxhc3RfcmV2
aXNpb24gPSByZXNwb25zZVsyXQorICAgICAgICByZXR1cm4gKHJldm5vLCBsYXN0X3JldmlzaW9u
KQorCisgICAgZGVmIF9nZW5fcmV2aXNpb25faGlzdG9yeShzZWxmKToKKyAgICAgICAgIiIiU2Vl
IEJyYW5jaC5fZ2VuX3JldmlzaW9uX2hpc3RvcnkoKS4iIiIKKyAgICAgICAgcGF0aCA9IHNlbGYu
YnpyZGlyLl9wYXRoX2Zvcl9yZW1vdGVfY2FsbChzZWxmLl9jbGllbnQpCisgICAgICAgIHJlc3Bv
bnNlID0gc2VsZi5fY2xpZW50LmNhbGxfZXhwZWN0aW5nX2JvZHkoCisgICAgICAgICAgICAnQnJh
bmNoLnJldmlzaW9uX2hpc3RvcnknLCBwYXRoKQorICAgICAgICBhc3NlcnQgcmVzcG9uc2VbMF1b
MF0gPT0gJ29rJywgKCd1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUgJXMnCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmVzcG9uc2VbMF0sKSkKKyAgICAgICAgcmVz
dWx0ID0gcmVzcG9uc2VbMV0ucmVhZF9ib2R5X2J5dGVzKCkuc3BsaXQoJ1x4MDAnKQorICAgICAg
ICBpZiByZXN1bHQgPT0gWycnXToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICByZXR1
cm4gcmVzdWx0CisKKyAgICBAbmVlZHNfd3JpdGVfbG9jaworICAgIGRlZiBzZXRfcmV2aXNpb25f
aGlzdG9yeShzZWxmLCByZXZfaGlzdG9yeSk6CisgICAgICAgICMgU2VuZCBqdXN0IHRoZSB0aXAg
cmV2aXNpb24gb2YgdGhlIGhpc3Rvcnk7IHRoZSBzZXJ2ZXIgd2lsbCBnZW5lcmF0ZQorICAgICAg
ICAjIHRoZSBmdWxsIGhpc3RvcnkgZnJvbSB0aGF0LiAgSWYgdGhlIHJldmlzaW9uIGRvZXNuJ3Qg
ZXhpc3QgaW4gdGhpcworICAgICAgICAjIGJyYW5jaCwgTm9TdWNoUmV2aXNpb24gd2lsbCBiZSBy
YWlzZWQuCisgICAgICAgIHBhdGggPSBzZWxmLmJ6cmRpci5fcGF0aF9mb3JfcmVtb3RlX2NhbGwo
c2VsZi5fY2xpZW50KQorICAgICAgICBpZiByZXZfaGlzdG9yeSA9PSBbXToKKyAgICAgICAgICAg
IHJldl9pZCA9ICdudWxsOicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldl9pZCA9IHJl
dl9oaXN0b3J5Wy0xXQorICAgICAgICBzZWxmLl9jbGVhcl9jYWNoZWRfc3RhdGUoKQorICAgICAg
ICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC5jYWxsKCdCcmFuY2guc2V0X2xhc3RfcmV2aXNpb24n
LAorICAgICAgICAgICAgcGF0aCwgc2VsZi5fbG9ja190b2tlbiwgc2VsZi5fcmVwb19sb2NrX3Rv
a2VuLCByZXZfaWQpCisgICAgICAgIGlmIHJlc3BvbnNlWzBdID09ICdOb1N1Y2hSZXZpc2lvbic6
CisgICAgICAgICAgICByYWlzZSBOb1N1Y2hSZXZpc2lvbihzZWxmLCByZXZfaWQpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgcmVzcG9uc2UgPT0gKCdvaycsKSwgKAorICAgICAg
ICAgICAgICAgICd1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUgJXInICUgKHJlc3BvbnNlLCkpCisg
ICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9uX2hpc3RvcnkocmV2X2hpc3RvcnkpCisKKyAgICBk
ZWYgZ2V0X3BhcmVudChzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAg
ICByZXR1cm4gc2VsZi5fcmVhbF9icmFuY2guZ2V0X3BhcmVudCgpCisgICAgICAgIAorICAgIGRl
ZiBzZXRfcGFyZW50KHNlbGYsIHVybCk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfYnJhbmNoLnNldF9wYXJlbnQodXJsKQorICAgICAgICAK
KyAgICBkZWYgZ2V0X2NvbmZpZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFJlbW90ZUJyYW5jaENv
bmZpZyhzZWxmKQorCisgICAgZGVmIHNwcm91dChzZWxmLCB0b19ienJkaXIsIHJldmlzaW9uX2lk
PU5vbmUpOgorICAgICAgICAjIExpa2UgQnJhbmNoLnNwcm91dCwgZXhjZXB0IHRoYXQgaXQgc3By
b3V0cyBhIGJyYW5jaCBpbiB0aGUgZGVmYXVsdAorICAgICAgICAjIGZvcm1hdCwgYmVjYXVzZSBS
ZW1vdGVCcmFuY2hlcyBjYW4ndCBiZSBjcmVhdGVkIGF0IGFyYml0cmFyeSBVUkxzLgorICAgICAg
ICAjIFhYWDogaWYgdG9fYnpyZGlyIGlzIGEgUmVtb3RlQnJhbmNoLCB0aGlzIHNob3VsZCBwZXJo
YXBzIGRvCisgICAgICAgICMgdG9fYnpyZGlyLmNyZWF0ZV9icmFuY2guLi4KKyAgICAgICAgcmVz
dWx0ID0gYnJhbmNoLkJyYW5jaEZvcm1hdC5nZXRfZGVmYXVsdF9mb3JtYXQoKS5pbml0aWFsaXpl
KHRvX2J6cmRpcikKKyAgICAgICAgc2VsZi5jb3B5X2NvbnRlbnRfaW50byhyZXN1bHQsIHJldmlz
aW9uX2lkPXJldmlzaW9uX2lkKQorICAgICAgICByZXN1bHQuc2V0X3BhcmVudChzZWxmLmJ6cmRp
ci5yb290X3RyYW5zcG9ydC5iYXNlKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAbmVl
ZHNfd3JpdGVfbG9jaworICAgIGRlZiBhcHBlbmRfcmV2aXNpb24oc2VsZiwgKnJldmlzaW9uX2lk
cyk6CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jl
YWxfYnJhbmNoLmFwcGVuZF9yZXZpc2lvbigqcmV2aXNpb25faWRzKQorCisgICAgQG5lZWRzX3dy
aXRlX2xvY2sKKyAgICBkZWYgcHVsbChzZWxmLCBzb3VyY2UsIG92ZXJ3cml0ZT1GYWxzZSwgc3Rv
cF9yZXZpc2lvbj1Ob25lLAorICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIyBGSVhN
RTogVGhpcyBhc2tzIHRoZSByZWFsIGJyYW5jaCB0byBydW4gdGhlIGhvb2tzLCB3aGljaCBtZWFu
cworICAgICAgICAjIHRoZXkncmUgY2FsbGVkIHdpdGggdGhlIHdyb25nIHRhcmdldCBicmFuY2gg
cGFyYW1ldGVyLiAKKyAgICAgICAgIyBUaGUgdGVzdCBzdWl0ZSBzcGVjaWZpY2FsbHkgYWxsb3dz
IHRoaXMgYXQgcHJlc2VudCBidXQgaXQgc2hvdWxkIGJlCisgICAgICAgICMgZml4ZWQuICBJdCBz
aG91bGQgZ2V0IGEgX292ZXJyaWRlX2hvb2tfdGFyZ2V0IGJyYW5jaCwKKyAgICAgICAgIyBhcyBw
dXNoIGRvZXMuICAtLSBtYnAgMjAwNzA0MDUKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQor
ICAgICAgICBzZWxmLl9yZWFsX2JyYW5jaC5wdWxsKAorICAgICAgICAgICAgc291cmNlLCBvdmVy
d3JpdGU9b3ZlcndyaXRlLCBzdG9wX3JldmlzaW9uPXN0b3BfcmV2aXNpb24sCisgICAgICAgICAg
ICAqKmt3YXJncykKKworICAgIEBuZWVkc19yZWFkX2xvY2sKKyAgICBkZWYgcHVzaChzZWxmLCB0
YXJnZXQsIG92ZXJ3cml0ZT1GYWxzZSwgc3RvcF9yZXZpc2lvbj1Ob25lKToKKyAgICAgICAgc2Vs
Zi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9icmFuY2gucHVzaCgK
KyAgICAgICAgICAgIHRhcmdldCwgb3ZlcndyaXRlPW92ZXJ3cml0ZSwgc3RvcF9yZXZpc2lvbj1z
dG9wX3JldmlzaW9uLAorICAgICAgICAgICAgX292ZXJyaWRlX2hvb2tfc291cmNlX2JyYW5jaD1z
ZWxmKQorCisgICAgZGVmIGlzX2xvY2tlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xv
Y2tfY291bnQgPj0gMQorCisgICAgZGVmIHNldF9sYXN0X3JldmlzaW9uX2luZm8oc2VsZiwgcmV2
bm8sIHJldmlzaW9uX2lkKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICBz
ZWxmLl9jbGVhcl9jYWNoZWRfc3RhdGUoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9icmFu
Y2guc2V0X2xhc3RfcmV2aXNpb25faW5mbyhyZXZubywgcmV2aXNpb25faWQpCisKKyAgICBkZWYg
Z2VuZXJhdGVfcmV2aXNpb25faGlzdG9yeShzZWxmLCByZXZpc2lvbl9pZCwgbGFzdF9yZXY9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9icmFuY2g9Tm9uZSk6
CisgICAgICAgIHNlbGYuX2Vuc3VyZV9yZWFsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxf
YnJhbmNoLmdlbmVyYXRlX3JldmlzaW9uX2hpc3RvcnkoCisgICAgICAgICAgICByZXZpc2lvbl9p
ZCwgbGFzdF9yZXY9bGFzdF9yZXYsIG90aGVyX2JyYW5jaD1vdGhlcl9icmFuY2gpCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgdGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwo
KQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9icmFuY2gudGFncworCisgICAgZGVmIHNldF9w
dXNoX2xvY2F0aW9uKHNlbGYsIGxvY2F0aW9uKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwo
KQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF9icmFuY2guc2V0X3B1c2hfbG9jYXRpb24obG9j
YXRpb24pCisKKyAgICBkZWYgdXBkYXRlX3JldmlzaW9ucyhzZWxmLCBvdGhlciwgc3RvcF9yZXZp
c2lvbj1Ob25lKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX3JlYWwoKQorICAgICAgICByZXR1cm4g
c2VsZi5fcmVhbF9icmFuY2gudXBkYXRlX3JldmlzaW9ucygKKyAgICAgICAgICAgIG90aGVyLCBz
dG9wX3JldmlzaW9uPXN0b3BfcmV2aXNpb24pCisKKworY2xhc3MgUmVtb3RlQnJhbmNoQ29uZmln
KEJyYW5jaENvbmZpZyk6CisKKyAgICBkZWYgdXNlcm5hbWUoc2VsZik6CisgICAgICAgIHNlbGYu
YnJhbmNoLl9lbnN1cmVfcmVhbCgpCisgICAgICAgIHJldHVybiBzZWxmLmJyYW5jaC5fcmVhbF9i
cmFuY2guZ2V0X2NvbmZpZygpLnVzZXJuYW1lKCkKKworICAgIGRlZiBfZ2V0X2JyYW5jaF9kYXRh
X2NvbmZpZyhzZWxmKToKKyAgICAgICAgc2VsZi5icmFuY2guX2Vuc3VyZV9yZWFsKCkKKyAgICAg
ICAgaWYgc2VsZi5fYnJhbmNoX2RhdGFfY29uZmlnIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxm
Ll9icmFuY2hfZGF0YV9jb25maWcgPSBUcmVlQ29uZmlnKHNlbGYuYnJhbmNoLl9yZWFsX2JyYW5j
aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2JyYW5jaF9kYXRhX2NvbmZpZworCisKK2RlZiBfZXh0
cmFjdF90YXIodGFyLCB0b19kaXIpOgorICAgICIiIkV4dHJhY3QgYWxsIHRoZSBjb250ZW50cyBv
ZiBhIHRhcmZpbGUgb2JqZWN0LgorCisgICAgQSByZXBsYWNlbWVudCBmb3IgZXh0cmFjdGFsbCwg
d2hpY2ggaXMgbm90IHByZXNlbnQgaW4gcHl0aG9uMi40CisgICAgIiIiCisgICAgZm9yIHRhcmlu
Zm8gaW4gdGFyOgorICAgICAgICB0YXIuZXh0cmFjdCh0YXJpbmZvLCB0b19kaXIpCgo=

=== added directory bzrlib/smart // file-id:smart-20061101100241-u0wzhkl4sjwmuz
... hd-1 // last-changed:andrew.bennetts@canonical.com-20070410155415-hyzlzwevu
... 3ud0dny
=== added file bzrlib/smart/__init__.py // file-id:__init__.py-20061101100249-8
... jwwl0d3jr080zim-1 // last-changed:andrew.bennetts@canonical.com-20070426043
... 244-l1gtjevl8f98jbnk // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjQ4
IEBACisjIENvcHlyaWdodCAoQykgMjAwNiBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAw
MjExMS0xMzA3ICBVU0EKKworIiIiU21hcnQtc2VydmVyIHByb3RvY29sLCBjbGllbnQgYW5kIHNl
cnZlci4KKworVGhpcyBjb2RlIGlzIGZhaXJseSBjb21wbGV4LCBzbyBpdCBoYXMgYmVlbiBzcGxp
dCB1cCBpbnRvIGEgcGFja2FnZSBvZiBtb2R1bGVzLAorcmF0aGVyIHRoYW4gYmVpbmcgYSBzaW5n
bGUgbGFyZ2UgbW9kdWxlLiAgUmVmZXIgdG8gdGhlIGluZGl2aWR1YWwgbW9kdWxlCitkb2NzdHJp
bmdzIGZvciBkZXRhaWxzLgorCitPdmVydmlldworPT09PT09PT0KKworVGhlIHNtYXJ0IHByb3Rv
Y29sIHByb3ZpZGVzIGEgd2F5IHRvIHNlbmQgYSByZXF1ZXN0cyBhbmQgY29ycmVzcG9uZGluZwor
cmVzcG9uc2VzIHRvIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgYnpyIHByb2Nlc3MuCisKK0xh
eWVyaW5nCis9PT09PT09PQorCitNZWRpdW0KKy0tLS0tLQorCitBdCB0aGUgYm90dG9tIGxldmVs
IHRoZXJlIGlzIGVpdGhlciBhIHNvY2tldCwgcGlwZXMsIG9yIGFuIEhUVFAKK3JlcXVlc3QvcmVz
cG9uc2UuICBXZSBjYWxsIHRoaXMgbGF5ZXIgdGhlICptZWRpdW0qLiAgSXQgaXMgcmVzcG9uc2li
bGUgZm9yCitjYXJyeWluZyBieXRlcyBiZXR3ZWVuIGEgY2xpZW50IGFuZCBzZXJ2ZXIuICBGb3Ig
c29ja2V0cywgd2UgaGF2ZSB0aGUKK2lkZWEgdGhhdCB5b3UgaGF2ZSBtdWx0aXBsZSByZXF1ZXN0
cyBhbmQgZ2V0IGEgcmVhZCBlcnJvciBiZWNhdXNlIHRoZSBvdGhlciBzaWRlCitkaWQgc2h1dGRv
d24uICBGb3IgcGlwZXMgd2UgaGF2ZSByZWFkIHBpcGUgd2hpY2ggd2lsbCBoYXZlIGEgemVybyBy
ZWFkIHdoaWNoCittYXJrcyBlbmQtb2YtZmlsZS4gIEZvciBIVFRQIHNlcnZlciBlbnZpcm9ubWVu
dCB0aGVyZSBpcyBubyBlbmQtb2Ytc3RyZWFtCitiZWNhdXNlIGVhY2ggcmVxdWVzdCBjb21pbmcg
aW50byB0aGUgc2VydmVyIGlzIGluZGVwZW5kZW50LgorCitTbyB3ZSBuZWVkIGEgd3JhcHBlciBh
cm91bmQgcGlwZXMgYW5kIHNvY2tldHMgdG8gc2VwZXJhdGUgb3V0IHJlcXVlc3RzIGZyb20KK3N1
YnN0cmF0ZSBhbmQgdGhpcyB3aWxsIGdpdmUgdXMgYSBzaW5nbGUgbW9kZWwgd2hpY2ggaXMgY29u
c2lzdGVudCBmb3IgSFRUUCwKK3NvY2tldHMgYW5kIHBpcGVzLgorCitQcm90b2NvbAorLS0tLS0t
LS0KKworT24gdG9wIG9mIHRoZSBtZWRpdW0gaXMgdGhlICpwcm90b2NvbCouICBUaGlzIGlzIHRo
ZSBsYXllciB0aGF0IGRlc2VyaWFsaXNlcworYnl0ZXMgaW50byB0aGUgc3RydWN0dXJlZCBkYXRh
IHRoYXQgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBjb25zaXN0IG9mLgorCitWZXJzaW9uIG9uZSBv
ZiB0aGUgcHJvdG9jb2wgKGZvciByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzKSBpcyBkZXNjcmliZWQg
Ynk6OgorCisgIFJFUVVFU1QgOj0gTUVTU0FHRV9WMQorICBSRVNQT05TRSA6PSBNRVNTQUdFX1Yx
CisgIE1FU1NBR0VfVjEgOj0gQVJHUyBCT0RZCisKKyAgQVJHUyA6PSBBUkcgW01PUkVfQVJHU10g
TkVXTElORQorICBNT1JFX0FSR1MgOj0gU0VQIEFSRyBbTU9SRV9BUkdTXQorICBTRVAgOj0gMHgw
MQorCisgIEJPRFkgOj0gTEVOR1RIIE5FV0xJTkUgQk9EWV9CWVRFUyBUUkFJTEVSCisgIExFTkdU
SCA6PSBkZWNpbWFsIGludGVnZXIKKyAgVFJBSUxFUiA6PSAiZG9uZSIgTkVXTElORQorCitUaGF0
IGlzLCBhIHR1cGxlIG9mIGFyZ3VtZW50cyBzZXBhcmF0ZWQgYnkgQ3RybC1BIGFuZCB0ZXJtaW5h
dGVkIHdpdGggYSBuZXdsaW5lLAorZm9sbG93ZWQgYnkgbGVuZ3RoIHByZWZpeGVkIGJvZHkgd2l0
aCBhIGNvbnN0YW50IHRyYWlsZXIuICBOb3RlIHRoYXQgYWx0aG91Z2gKK2FyZ3VtZW50cyBhcmUg
bm90IDgtYml0IHNhZmUgKHRoZXkgY2Fubm90IGluY2x1ZGUgMHgwMSBvciAweDBhIGJ5dGVzIHdp
dGhvdXQKK2JyZWFraW5nIHRoZSBwcm90b2NvbCBlbmNvZGluZyksIHRoZSBib2R5IGlzLgorCitW
ZXJzaW9uIHR3byBvZiB0aGUgcmVxdWVzdCBwcm90b2NvbCBpczo6CisKKyAgUkVRVUVTVF9WMiA6
PSAiYnpyIHJlcXVlc3QgMiIgTkVXTElORSBNRVNTQUdFX1YxCisKK1ZlcnNpb24gdHdvIG9mIHRo
ZSByZXNwb25zZSBwcm90b2NvbCBpczo6CisKKyAgUkVTUE9OU0VfVjIgOj0gImJ6ciByZXF1ZXN0
IDIiIE5FV0xJTkUgTUVTU0FHRV9WMQorCitGdXR1cmUgdmVyc2lvbnMgc2hvdWxkIGZvbGxvdyB0
aGlzIHN0cnVjdHVyZSwgbGlrZSB2ZXJzaW9uIHR3byBkb2VzOjoKKworICBGVVRVUkVfTUVTU0FH
RSA6PSBWRVJTSU9OX1NUUklORyBORVdMSU5FIFJFU1RfT0ZfTUVTU0FHRQorCitUaGlzIGlzIHRo
YXQgY2xpZW50cyBhbmQgc2VydmVycyBjYW4gcmVhZCBieXRlcyB1cCB0byB0aGUgZmlyc3QgbmV3
bGluZSBieXRlIHRvCitkZXRlcm1pbmUgd2hhdCB2ZXJzaW9uIGEgbWVzc2FnZSBpcy4KKworRm9y
IGNvbXBhdGliaWxpdHkgd2lsbCBhbGwgdmVyc2lvbnMgKHBhc3QgYW5kIGZ1dHVyZSkgb2YgYnpy
IGNsaWVudHMsIHNlcnZlcnMKK3RoYXQgcmVjZWl2ZSBhIHJlcXVlc3QgaW4gYW4gdW5rbm93biBw
cm90b2NvbCB2ZXJzaW9uIHNob3VsZCByZXNwb25kIHdpdGggYQorc2luZ2xlLWxpbmUgZXJyb3Ig
dGVybWluYXRlZCB3aXRoIDB4MGEgKE5FV0xJTkUpLCByYXRoZXIgdGhhbiBzdHJ1Y3R1cmVkCity
ZXNwb25zZSBwcmVmaXhlZCB3aXRoIGEgdmVyc2lvbiBzdHJpbmcuCisKK1JlcXVlc3QvUmVzcG9u
c2UgcHJvY2Vzc2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIHRvcCBvZiB0
aGUgcHJvdG9jb2wgaXMgdGhlIGxvZ2ljIGZvciBwcm9jZXNzaW5nIHJlcXVlc3RzIChvbiB0aGUg
c2VydmVyKSBvcgorcmVzcG9uc2VzIChvbiB0aGUgY2xpZW50KS4KKworU2VydmVyLXNpZGUKKy0t
LS0tLS0tLS0tCisKK1NrZXRjaDo6CisKKyBNRURJVU0gIChmYWN0b3J5IGZvciBwcm90b2NvbCwg
cmVhZHMgYnl0ZXMgJiBwdXNoZXMgdG8gcHJvdG9jb2wsCisgICAgICAgICAgdXNlcyBwcm90b2Nv
bCB0byBkZXRlY3QgZW5kLW9mLXJlcXVlc3QsIHNlbmRzIHdyaXR0ZW4KKyAgICAgICAgICBieXRl
cyB0byBjbGllbnQpIGUuZy4gc29ja2V0LCBwaXBlLCBIVFRQIHJlcXVlc3QgaGFuZGxlci4KKyAg
XgorICB8IGJ5dGVzLgorICB2CisKKyBQUk9UT0NPTChzZXJpYWxpemF0aW9uLCBkZXNlcmlhbGl6
YXRpb24pICBhY2NlcHRzIGJ5dGVzIGZvciBvbmUKKyAgICAgICAgICByZXF1ZXN0LCBkZWNvZGVz
IGFjY29yZGluZyB0byBpbnRlcm5hbCBzdGF0ZSwgcHVzaGVzCisgICAgICAgICAgc3RydWN0dXJl
ZCBkYXRhIHRvIGhhbmRsZXIuICBhY2NlcHRzIHN0cnVjdHVyZWQgZGF0YSBmcm9tCisgICAgICAg
ICAgaGFuZGxlciBhbmQgZW5jb2RlcyBhbmQgd3JpdGVzIHRvIHRoZSBtZWRpdW0uICBmYWN0b3J5
IGZvcgorICAgICAgICAgIGhhbmRsZXIuCisgIF4KKyAgfCBzdHJ1Y3R1cmVkIGRhdGEKKyAgdgor
CisgSEFORExFUiAgKGRvbWFpbiBsb2dpYykgYWNjZXB0cyBzdHJ1Y3R1cmVkIGRhdGEsIG9wZXJh
dGVzIHN0YXRlCisgICAgICAgICAgbWFjaGluZSB1bnRpbCB0aGUgcmVxdWVzdCBjYW4gYmUgc2F0
aXNmaWVkLAorICAgICAgICAgIHNlbmRzIHN0cnVjdHVyZWQgZGF0YSB0byB0aGUgcHJvdG9jb2wu
CisKK1JlcXVlc3QgaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGJ6cmxpYi5zbWFydC5yZXF1
ZXN0YC4KKworCitDbGllbnQtc2lkZQorLS0tLS0tLS0tLS0KKworU2tldGNoOjoKKworIENMSUVO
VCAgIGRvbWFpbiBsb2dpYywgYWNjZXB0cyBkb21haW4gcmVxdWVzdHMsIGdlbmVyYXRlZCBzdHJ1
Y3R1cmVkCisgICAgICAgICAgZGF0YSwgcmVhZHMgc3RydWN0dXJlZCBkYXRhIGZyb20gcmVzcG9u
c2VzIGFuZCB0dXJucyBpbnRvCisgICAgICAgICAgZG9tYWluIGRhdGEuICBTZW5kcyBzdHJ1Y3R1
cmVkIGRhdGEgdG8gdGhlIHByb3RvY29sLgorICAgICAgICAgIE9wZXJhdGVzIHN0YXRlIG1hY2hp
bmVzIHVudGlsIHRoZSByZXF1ZXN0IGNhbiBiZSBkZWxpdmVyZWQKKyAgICAgICAgICAoZS5nLiBy
ZWFkaW5nIGZyb20gYSBidW5kbGUgZ2VuZXJhdGVkIGluIGJ6cmxpYiB0byBkZWxpdmVyIGEKKyAg
ICAgICAgICBjb21wbGV0ZSByZXF1ZXN0KS4KKworICAgICAgICAgIFBvc3NpYmx5IHRoaXMgc2hv
dWxkIGp1c3QgYmUgUmVtb3RlQnpyRGlyLCBSZW1vdGVUcmFuc3BvcnQsCisgICAgICAgICAgLi4u
CisgIF4KKyAgfCBzdHJ1Y3R1cmVkIGRhdGEKKyAgdgorCitQUk9UT0NPTCAgKHNlcmlhbGl6YXRp
b24sIGRlc2VyaWFsaXphdGlvbikgIGFjY2VwdHMgc3RydWN0dXJlZCBkYXRhIGZvciBvbmUKKyAg
ICAgICAgICByZXF1ZXN0LCBlbmNvZGVzIGFuZCB3cml0ZXMgdG8gdGhlIG1lZGl1bS4gIFJlYWRz
IGJ5dGVzIGZyb20gdGhlCisgICAgICAgICAgbWVkaXVtLCBkZWNvZGVzIGFuZCBhbGxvd3MgdGhl
IGNsaWVudCB0byByZWFkIHN0cnVjdHVyZWQgZGF0YS4KKyAgXgorICB8IGJ5dGVzLgorICB2CisK
KyBNRURJVU0gIChhY2NlcHRzIGJ5dGVzIGZyb20gdGhlIHByb3RvY29sICYgZGVsaXZlcnMgdG8g
dGhlIHJlbW90ZSBzZXJ2ZXIuCisgICAgICAgICAgQWxsb3dzIHRoZSBwb3RvY29sIHRvIHJlYWQg
Ynl0ZXMgZS5nLiBzb2NrZXQsIHBpcGUsIEhUVFAgcmVxdWVzdC4KKworVGhlIGRvbWFpbiBsb2dp
YyBpcyBpbiBgYnpybGliLnJlbW90ZWA6IGBSZW1vdGVCenJEaXJgLCBgUmVtb3RlQnJhbmNoYCwg
YW5kIHNvCitvbi4KKworVGhlcmUgaXMgYWxzbyBhbiBwbGFpbiBmaWxlLWxldmVsIHRyYW5zcG9y
dCB0aGF0IGNhbGxzIHJlbW90ZSBtZXRob2RzIHRvCittYW5pcHVsYXRlIGZpbGVzIG9uIHRoZSBz
ZXJ2ZXIgaW4gYGJ6cmxpYi50cmFuc3BvcnQucmVtb3RlYC4KKworUGF0aHMKKz09PT09CisKK1Bh
dGhzIGFyZSBwYXNzZWQgYWNyb3NzIHRoZSBuZXR3b3JrLiAgVGhlIGNsaWVudCBuZWVkcyB0byBz
ZWUgYSBuYW1lc3BhY2UgdGhhdAoraW5jbHVkZXMgYW55IHJlcG9zaXRvcnkgdGhhdCBtaWdodCBu
ZWVkIHRvIGJlIHJlZmVyZW5jZWQsIGFuZCB0aGUgY2xpZW50IG5lZWRzCit0byBrbm93IGFib3V0
IGEgcm9vdCBkaXJlY3RvcnkgYmV5b25kIHdoaWNoIGl0IGNhbm5vdCBhc2NlbmQuCisKK1NlcnZl
cnMgcnVuIG92ZXIgc3NoIHdpbGwgdHlwaWNhbGx5IHdhbnQgdG8gYmUgYWJsZSB0byBhY2Nlc3Mg
YW55IHBhdGggdGhlIHVzZXIKK2NhbiBhY2Nlc3MuICBQdWJsaWMgc2VydmVycyBvbiB0aGUgb3Ro
ZXIgaGFuZCAod2hpY2ggbWlnaHQgYmUgb3ZlciBodHRwLCBzc2gKK29yIHRjcCkgd2lsbCB0eXBp
Y2FsbHkgd2FudCB0byByZXN0cmljdCBhY2Nlc3MgdG8gb25seSBhIHBhcnRpY3VsYXIgZGlyZWN0
b3J5CithbmQgaXRzIGNoaWxkcmVuLCBzbyB3aWxsIHdhbnQgdG8gZG8gYSBzb2Z0d2FyZSB2aXJ0
dWFsIHJvb3QgYXQgdGhhdCBsZXZlbC4KK0luIG90aGVyIHdvcmRzIHRoZXknbGwgd2FudCB0byBy
ZXdyaXRlIGluY29taW5nIHBhdGhzIHRvIGJlIHVuZGVyIHRoYXQgbGV2ZWwKKyhhbmQgcHJldmVu
dCBlc2NhcGluZyB1c2luZyAuLi8gdHJpY2tzLikKKworVVJMcyB0aGF0IGluY2x1ZGUgfiBzaG91
bGQgcHJvYmFibHkgYmUgcGFzc2VkIGFjcm9zcyB0byB0aGUgc2VydmVyIHZlcmJhdGltCithbmQg
dGhlIHNlcnZlciBjYW4gZXhwYW5kIHRoZW0uICBUaGlzIHdpbGwgcHJvYWJseSBub3QgYmUgbWVh
bmluZ2Z1bCB3aGVuCitsaW1pdGVkIHRvIGEgZGlyZWN0b3J5PworIiIiCisKKyMgVE9ETzogX3Ry
YW5zbGF0ZV9lcnJvciBzaG91bGQgYmUgb24gdGhlIGNsaWVudCwgbm90IHRoZSB0cmFuc3BvcnQg
YmVjYXVzZQorIyAgICAgZXJyb3IgY29kaW5nIGlzIHdpcmUgcHJvdG9jb2wgc3BlY2lmaWMuCisK
KyMgVE9ETzogQSBwbGFpbiBpbnRlZ2VyIGZyb20gcXVlcnlfdmVyc2lvbiBpcyB0b28gc2ltcGxl
OyBzaG91bGQgZ2l2ZSBzb21lCisjIGNhcGFiaWxpdGllcyB0b28/CisKKyMgVE9ETzogU2VydmVy
IHNob3VsZCBwcm9iYWJseSBjYXRjaCBleGNlcHRpb25zIHdpdGhpbiBpdHNlbGYgYW5kIHNlbmQg
dGhlbQorIyBiYWNrIGFjcm9zcyB0aGUgbmV0d29yay4gIChCdXQgc2hvdWxkbid0IGNhdGNoIEtl
eWJvYXJkSW50ZXJydXB0IGV0YykKKyMgQWxzbyBuZWVkcyB0byBzb21laG93IHJlcG9ydCBwcm90
b2NvbCBlcnJvcnMgbGlrZSBiYWQgcmVxdWVzdHMuICBOZWVkIHRvCisjIGNvbnNpZGVyIGhvdyB3
ZSdsbCBoYW5kbGUgZXJyb3IgcmVwb3J0aW5nLCBlLmcuIGlmIHdlIGdldCBoYWxmd2F5IHRocm91
Z2ggYQorIyBidWxrIHRyYW5zZmVyIGFuZCB0aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLgorCisj
IFRPRE86IE1ha2UgZWFjaCByZXF1ZXN0IGFuZCByZXNwb25zZSBzZWxmLXZhbGlkYXRhYmxlLCBl
LmcuIHdpdGggY2hlY2tzdW1zLgorIworIyBUT0RPOiBnZXQvcHV0IG9iamVjdHMgY291bGQgYmUg
Y2hhbmdlZCB0byBncmFkdWFsbHkgcmVhZCBiYWNrIHRoZSBkYXRhIGFzIGl0CisjIGNvbWVzIGFj
cm9zcyB0aGUgbmV0d29yaworIworIyBUT0RPOiBXaGF0IHNob3VsZCB0aGUgc2VydmVyIGRvIGlm
IGl0IGhpdHMgYW4gZXJyb3IgYW5kIGhhcyB0byB0ZXJtaW5hdGU/CisjCisjIFRPRE86IGlzIGl0
IHVzZWZ1bCB0byBhbGxvdyBtdWx0aXBsZSBjaHVua3MgaW4gdGhlIGJ1bGsgZGF0YT8KKyMKKyMg
VE9ETzogSWYgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBkdXJpbmcgdHJhbnNtaXNzaW9uIG9mIGJ1bGsg
ZGF0YSB3ZSBjYW4ndCBqdXN0CisjIGVtaXQgdGhlIGV4Y2VwdGlvbiBiZWNhdXNlIGl0IHdvbid0
IGJlIHNlZW4uCisjICAgSm9obiBwcm9wb3NlczogIEkgdGhpbmsgaXQgd291bGQgYmUgd29ydGh3
aGlsZSB0byBoYXZlIGEgaGVhZGVyIG9uIGVhY2gKKyMgICBjaHVuaywgdGhhdCBpbmRpY2F0ZXMg
aXQgaXMgYW5vdGhlciBjaHVuay4gVGhlbiB5b3UgY2FuIHNlbmQgYW4gJ2Vycm9yJworIyAgIGNo
dW5rIGFzIGxvbmcgYXMgeW91IGZpbmlzaCB0aGUgcHJldmlvdXMgY2h1bmsuCisjCisjIFRPRE86
IENsb25lIG1ldGhvZCBvbiBUcmFuc3BvcnQ7IHNob3VsZCB3b3JrIHVwIHRvd2FyZHMgcGFyZW50
IGRpcmVjdG9yeTsKKyMgdW5jbGVhciBob3cgdGhpcyBzaG91bGQgYmUgc3RvcmVkIG9yIGNvbW11
bmljYXRlZCB0byB0aGUgc2VydmVyLi4uIG1heWJlCisjIGp1c3QgcGFzcyBpdCBvbiBhbGwgcmVs
ZXZhbnQgcmVxdWVzdHM/CisjCisjIFRPRE86IEJldHRlciBuYW1lIHRoYW4gY2xvbmUoKSBmb3Ig
Y2hhbmdpbmcgYmV0d2VlbiBkaXJlY3Rvcmllcy4gIEhvdyBhYm91dAorIyBvcGVuX2RpciBvciBj
aGFuZ2VfZGlyIG9yIGNoZGlyPworIworIyBUT0RPOiBJcyBpdCByZWFsbHkgZ29vZCB0byBoYXZl
IHRoZSBub3Rpb24gb2YgY3VycmVudCBkaXJlY3Rvcnkgd2l0aGluIHRoZQorIyBjb25uZWN0aW9u
PyAgUGVyaGFwcyBhbGwgVHJhbnNwb3J0cyBzaG91bGQgZmFjdG9yIG91dCBhIGNvbW1vbiBjb25u
ZWN0aW9uCisjIGZyb20gdGhlIHRoaW5nIHRoYXQgaGFzIHRoZSBkaXJlY3RvcnkgY29udGV4dD8K
KyMKKyMgVE9ETzogVGhlIHNlcnZlciB0aGF0IG1hbmFnZXMgYSBjb25uZWN0aW9uIHNob3VsZCBi
ZSBxdWl0ZSBzbWFsbCBhbmQgcmV0YWluCisjIG1pbmltdW0gc3RhdGUgYmVjYXVzZSBlYWNoIG9m
IHRoZSByZXF1ZXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgc3RhdGVsZXNzLgorIyBUaGVuIHdlIGNh
biB3cml0ZSBhbm90aGVyIGltcGxlbWVudGF0aW9uIHRoYXQgbWFwcyB0byBodHRwLgorIworIyBU
T0RPOiBXaGF0IHRvIGRvIHdoZW4gYSBjbGllbnQgY29ubmVjdGlvbiBpcyBnYXJiYWdlIGNvbGxl
Y3RlZD8gIE1heWJlIGp1c3QKKyMgYWJydXB0bHkgZHJvcCB0aGUgY29ubmVjdGlvbj8KKyMKKyMg
VE9ETzogU2VydmVyIGluIHNvbWUgY2FzZXMgd2lsbCBuZWVkIHRvIHJlc3RyaWN0IGFjY2VzcyB0
byBmaWxlcyBvdXRzaWRlIG9mCisjIGEgcGFydGljdWxhciByb290IGRpcmVjdG9yeS4gIExvY2Fs
VHJhbnNwb3J0IGRvZXNuJ3QgZG8gYW55dGhpbmcgdG8gc3RvcCB5b3UKKyMgYXNjZW5kaW5nIGFi
b3ZlIHRoZSBiYXNlIGRpcmVjdG9yeSwgc28gd2UgbmVlZCB0byBwcmV2ZW50IHBhdGhzCisjIGNv
bnRhaW5pbmcgJy4uJyBpbiBlaXRoZXIgdGhlIHNlcnZlciBvciB0cmFuc3BvcnQgbGF5ZXJzLiAg
KEFsc28gbmVlZCB0bworIyBjb25zaWRlciB3aGF0IGhhcHBlbnMgaWYgc29tZW9uZSBjcmVhdGVz
IGEgc3ltbGluayBwb2ludGluZyBvdXRzaWRlIHRoZSAKKyMgZGlyZWN0b3J5IHRyZWUuLi4pCisj
CisjIFRPRE86IFNlcnZlciBzaG91bGQgcmViYXNlIGFic29sdXRlIHBhdGhzIGNvbWluZyBhY3Jv
c3MgdGhlIG5ldHdvcmsgdG8gcHV0CisjIHRoZW0gdW5kZXIgdGhlIHZpcnR1YWwgcm9vdCwgaWYg
b25lIGlzIGluIHVzZS4gIExvY2FsVHJhbnNwb3J0IGN1cnJlbnRseQorIyBkb2Vzbid0IGRvIHRo
YXQ7IGlmIHlvdSBnaXZlIGl0IGFuIGFic29sdXRlIHBhdGggaXQganVzdCB1c2VzIGl0LgorIyAK
KyMgWFhYOiBBcmd1bWVudHMgY2FuJ3QgY29udGFpbiBuZXdsaW5lcyBvciBhc2NpaTsgcG9zc2li
bHkgd2Ugc2hvdWxkIGUuZy4KKyMgdXJsZXNjYXBlIHRoZW0gaW5zdGVhZC4gIEluZGVlZCBwb3Nz
aWJseSB0aGlzIHNob3VsZCBqdXN0IGxpdGVyYWxseSBiZQorIyBodHRwLW92ZXItc3NoLgorIwor
IyBUT0RPOiBQcm9iYWJseSB3YW50IHNvbWUgd2F5IGZvciBzZXJ2ZXIgY29tbWFuZHMgdG8gZ3Jh
ZHVhbGx5IHByb2R1Y2UgYm9keQorIyBkYXRhIHJhdGhlciB0aGFuIHBhc3NpbmcgaXQgYXMgYSBz
dHJpbmc7IHRoZXkgY291bGQgcGVyaGFwcyBwYXNzIGFuCisjIGl0ZXJhdG9yLWxpa2UgY2FsbGJh
Y2sgdGhhdCB3aWxsIGdyYWR1YWxseSB5aWVsZCBkYXRhOyBpdCBwcm9iYWJseSBuZWVkcyBhCisj
IGNsb3NlKCkgbWV0aG9kIHRoYXQgd2lsbCBhbHdheXMgYmUgY2xvc2VkIHRvIGRvIGFueSBuZWNl
c3NhcnkgY2xlYW51cC4KKworCisjIFByb21vdGUgc29tZSBhdHRyaWJ1dGVzIGZyb20gc3VibW9k
dWxlcyBpbnRvIHRoaXMgbmFtZXNwYWNlCitmcm9tIGJ6cmxpYi5zbWFydC5yZXF1ZXN0IGltcG9y
dCBTbWFydFNlcnZlclJlcXVlc3RIYW5kbGVyCisKKwoK

=== added file bzrlib/smart/branch.py // file-id:branch.py-20061124031907-mzh3p
... la28r83r97f-1 // last-changed:robertc@lifelesswks.robertcollins.net-2007042
... 4122009-8bb4dede6a298d93 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L2JyYW5jaC5weQpAQCAtMCwwICsxLDE1OSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx
MTEtMTMwNyAgVVNBCisKKyIiIlNlcnZlci1zaWRlIGJyYW5jaCByZWxhdGVkIHJlcXVlc3QgaW1w
bG1lbnRhdGlvbnMuIiIiCisKKworZnJvbSBienJsaWIgaW1wb3J0IGVycm9ycworZnJvbSBienJs
aWIuYnpyZGlyIGltcG9ydCBCenJEaXIKK2Zyb20gYnpybGliLnNtYXJ0LnJlcXVlc3QgaW1wb3J0
ICgKKyAgICBGYWlsZWRTbWFydFNlcnZlclJlc3BvbnNlLAorICAgIFNtYXJ0U2VydmVyUmVxdWVz
dCwKKyAgICBTdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSwKKyAgICApCisKKworY2xhc3Mg
U21hcnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0KFNtYXJ0U2VydmVyUmVxdWVzdCk6CisgICAgIiIiQmFz
ZSBjbGFzcyBmb3IgaGFuZGxpbmcgY29tbW9uIGJyYW5jaCByZXF1ZXN0IGxvZ2ljLiIiIgorCisg
ICAgZGVmIGRvKHNlbGYsIHBhdGgsICphcmdzKToKKyAgICAgICAgIiIiRXhlY3V0ZSBhIHJlcXVl
c3QgZm9yIGEgYnJhbmNoIGF0IHBhdGguCisKKyAgICAgICAgSWYgdGhlIGJyYW5jaCBpcyBhIGJy
YW5jaCByZWZlcmVuY2UsIE5vdEJyYW5jaEVycm9yIGlzIHJhaXNlZC4KKyAgICAgICAgIiIiCisg
ICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX2JhY2tpbmdfdHJhbnNwb3J0LmNsb25lKHBhdGgpCisg
ICAgICAgIGJ6cmRpciA9IEJ6ckRpci5vcGVuX2Zyb21fdHJhbnNwb3J0KHRyYW5zcG9ydCkKKyAg
ICAgICAgaWYgYnpyZGlyLmdldF9icmFuY2hfcmVmZXJlbmNlKCkgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICByYWlzZSBlcnJvcnMuTm90QnJhbmNoRXJyb3IodHJhbnNwb3J0LmJhc2UpCisgICAg
ICAgIGJyYW5jaCA9IGJ6cmRpci5vcGVuX2JyYW5jaCgpCisgICAgICAgIHJldHVybiBzZWxmLmRv
X3dpdGhfYnJhbmNoKGJyYW5jaCwgKmFyZ3MpCisKKworY2xhc3MgU21hcnRTZXJ2ZXJMb2NrZWRC
cmFuY2hSZXF1ZXN0KFNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdCk6CisgICAgIiIiQmFzZSBjbGFz
cyBmb3IgaGFuZGxpbmcgY29tbW9uIGJyYW5jaCByZXF1ZXN0IGxvZ2ljIGZvciByZXF1ZXN0cyB0
aGF0CisgICAgbmVlZCBhIHdyaXRlIGxvY2suCisgICAgIiIiCisKKyAgICBkZWYgZG9fd2l0aF9i
cmFuY2goc2VsZiwgYnJhbmNoLCBicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4sICphcmdzKToKKyAg
ICAgICAgIiIiRXhlY3V0ZSBhIHJlcXVlc3QgZm9yIGEgYnJhbmNoLgorCisgICAgICAgIEEgd3Jp
dGUgbG9jayB3aWxsIGJlIGFjcXVpcmVkIHdpdGggdGhlIGdpdmVuIHRva2VucyBmb3IgdGhlIGJy
YW5jaCBhbmQKKyAgICAgICAgcmVwb3NpdG9yeSBsb2Nrcy4gIFRoZSBsb2NrIHdpbGwgYmUgcmVs
ZWFzZWQgb25jZSB0aGUgcmVxdWVzdCBpcworICAgICAgICBwcm9jZXNzZWQuICBUaGUgcGh5c2lj
YWwgbG9jayBzdGF0ZSB3b24ndCBiZSBjaGFuZ2VkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBY
WFg6IHdyaXRlIGEgdGVzdCBmb3IgTG9ja0NvbnRlbnRpb24KKyAgICAgICAgYnJhbmNoLnJlcG9z
aXRvcnkubG9ja193cml0ZSh0b2tlbj1yZXBvX3Rva2VuKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBicmFuY2gubG9ja193cml0ZSh0b2tlbj1icmFuY2hfdG9rZW4pCisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZG9fd2l0aF9sb2NrZWRfYnJhbmNoKGJy
YW5jaCwgKmFyZ3MpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGJyYW5j
aC51bmxvY2soKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYnJhbmNoLnJlcG9zaXRv
cnkudW5sb2NrKCkKKworCitjbGFzcyBTbWFydFNlcnZlckJyYW5jaEdldENvbmZpZ0ZpbGUoU21h
cnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0KToKKyAgICAKKyAgICBkZWYgZG9fd2l0aF9icmFuY2goc2Vs
ZiwgYnJhbmNoKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb250ZW50IG9mIGJyYW5jaC5jb250
cm9sX2ZpbGVzLmdldCgnYnJhbmNoLmNvbmYnKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBib2R5
IGlzIG5vdCB1dGY4IGRlY29kZWQgLSBpdHMgdGhlIGxpdGVyYWwgYnl0ZXN0cmVhbSBmcm9tIGRp
c2suCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZW50ID0gYnJh
bmNoLmNvbnRyb2xfZmlsZXMuZ2V0KCdicmFuY2guY29uZicpLnJlYWQoKQorICAgICAgICBleGNl
cHQgZXJyb3JzLk5vU3VjaEZpbGU6CisgICAgICAgICAgICBjb250ZW50ID0gJycKKyAgICAgICAg
cmV0dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCAoJ29rJywgKSwgY29udGVudCkK
KworCitjbGFzcyBTbWFydFNlcnZlclJlcXVlc3RSZXZpc2lvbkhpc3RvcnkoU21hcnRTZXJ2ZXJC
cmFuY2hSZXF1ZXN0KToKKworICAgIGRlZiBkb193aXRoX2JyYW5jaChzZWxmLCBicmFuY2gpOgor
ICAgICAgICAiIiJHZXQgdGhlIHJldmlzaW9uIGhpc3RvcnkgZm9yIHRoZSBicmFuY2guCisKKyAg
ICAgICAgVGhlIHJldmlzaW9uIGxpc3QgaXMgcmV0dXJuZWQgYXMgdGhlIGJvZHkgY29udGVudCwK
KyAgICAgICAgd2l0aCBlYWNoIHJldmlzaW9uIHV0ZjggZW5jb2RlZCBhbmQgXHgwMCBqb2luZWQu
CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9u
c2UoCisgICAgICAgICAgICAoJ29rJywgKSwgKCdceDAwJy5qb2luKGJyYW5jaC5yZXZpc2lvbl9o
aXN0b3J5KCkpKSkKKworCitjbGFzcyBTbWFydFNlcnZlckJyYW5jaFJlcXVlc3RMYXN0UmV2aXNp
b25JbmZvKFNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdCk6CisgICAgCisgICAgZGVmIGRvX3dpdGhf
YnJhbmNoKHNlbGYsIGJyYW5jaCk6CisgICAgICAgICIiIlJldHVybiBicmFuY2gubGFzdF9yZXZp
c2lvbl9pbmZvKCkuCisgICAgICAgIAorICAgICAgICBUaGUgcmV2bm8gaXMgZW5jb2RlZCBpbiBk
ZWNpbWFsLCB0aGUgcmV2aXNpb25faWQgaXMgZW5jb2RlZCBhcyB1dGY4LgorICAgICAgICAiIiIK
KyAgICAgICAgcmV2bm8sIGxhc3RfcmV2aXNpb24gPSBicmFuY2gubGFzdF9yZXZpc2lvbl9pbmZv
KCkKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCBz
dHIocmV2bm8pLCBsYXN0X3JldmlzaW9uKSkKKworCitjbGFzcyBTbWFydFNlcnZlckJyYW5jaFJl
cXVlc3RTZXRMYXN0UmV2aXNpb24oU21hcnRTZXJ2ZXJMb2NrZWRCcmFuY2hSZXF1ZXN0KToKKyAg
ICAKKyAgICBkZWYgZG9fd2l0aF9sb2NrZWRfYnJhbmNoKHNlbGYsIGJyYW5jaCwgbmV3X2xhc3Rf
cmV2aXNpb25faWQpOgorICAgICAgICBpZiBuZXdfbGFzdF9yZXZpc2lvbl9pZCA9PSAnbnVsbDon
OgorICAgICAgICAgICAgYnJhbmNoLnNldF9yZXZpc2lvbl9oaXN0b3J5KFtdKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgaWYgbm90IGJyYW5jaC5yZXBvc2l0b3J5Lmhhc19yZXZpc2lvbihu
ZXdfbGFzdF9yZXZpc2lvbl9pZCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0
U2VydmVyUmVzcG9uc2UoCisgICAgICAgICAgICAgICAgICAgICgnTm9TdWNoUmV2aXNpb24nLCBu
ZXdfbGFzdF9yZXZpc2lvbl9pZCkpCisgICAgICAgICAgICBicmFuY2guZ2VuZXJhdGVfcmV2aXNp
b25faGlzdG9yeShuZXdfbGFzdF9yZXZpc2lvbl9pZCkKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3Nm
dWxTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCkpCisKKworY2xhc3MgU21hcnRTZXJ2ZXJCcmFu
Y2hSZXF1ZXN0TG9ja1dyaXRlKFNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdCk6CisgICAgCisgICAg
ZGVmIGRvX3dpdGhfYnJhbmNoKHNlbGYsIGJyYW5jaCwgYnJhbmNoX3Rva2VuPScnLCByZXBvX3Rv
a2VuPScnKToKKyAgICAgICAgaWYgYnJhbmNoX3Rva2VuID09ICcnOgorICAgICAgICAgICAgYnJh
bmNoX3Rva2VuID0gTm9uZQorICAgICAgICBpZiByZXBvX3Rva2VuID09ICcnOgorICAgICAgICAg
ICAgcmVwb190b2tlbiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVwb190b2tl
biA9IGJyYW5jaC5yZXBvc2l0b3J5LmxvY2tfd3JpdGUodG9rZW49cmVwb190b2tlbikKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBicmFuY2hfdG9rZW4gPSBicmFuY2gubG9ja193
cml0ZSh0b2tlbj1icmFuY2hfdG9rZW4pCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5LnVubG9jaygpCisgICAgICAgIGV4Y2VwdCBlcnJvcnMu
TG9ja0NvbnRlbnRpb246CisgICAgICAgICAgICByZXR1cm4gRmFpbGVkU21hcnRTZXJ2ZXJSZXNw
b25zZSgoJ0xvY2tDb250ZW50aW9uJywpKQorICAgICAgICBleGNlcHQgZXJyb3JzLlRva2VuTWlz
bWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gRmFpbGVkU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ1Rv
a2VuTWlzbWF0Y2gnLCkpCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuVW5sb2NrYWJsZVRyYW5zcG9y
dDoKKyAgICAgICAgICAgIHJldHVybiBGYWlsZWRTbWFydFNlcnZlclJlc3BvbnNlKCgnVW5sb2Nr
YWJsZVRyYW5zcG9ydCcsKSkKKyAgICAgICAgYnJhbmNoLnJlcG9zaXRvcnkubGVhdmVfbG9ja19p
bl9wbGFjZSgpCisgICAgICAgIGJyYW5jaC5sZWF2ZV9sb2NrX2luX3BsYWNlKCkKKyAgICAgICAg
YnJhbmNoLnVubG9jaygpCisgICAgICAgIHJldHVybiBTdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNw
b25zZSgoJ29rJywgYnJhbmNoX3Rva2VuLCByZXBvX3Rva2VuKSkKKworCitjbGFzcyBTbWFydFNl
cnZlckJyYW5jaFJlcXVlc3RVbmxvY2soU21hcnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0KToKKworICAg
IGRlZiBkb193aXRoX2JyYW5jaChzZWxmLCBicmFuY2gsIGJyYW5jaF90b2tlbiwgcmVwb190b2tl
bik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5LmxvY2tfd3Jp
dGUodG9rZW49cmVwb190b2tlbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBi
cmFuY2gubG9ja193cml0ZSh0b2tlbj1icmFuY2hfdG9rZW4pCisgICAgICAgICAgICBmaW5hbGx5
OgorICAgICAgICAgICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5LnVubG9jaygpCisgICAgICAgIGV4
Y2VwdCBlcnJvcnMuVG9rZW5NaXNtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBGYWlsZWRTbWFy
dFNlcnZlclJlc3BvbnNlKCgnVG9rZW5NaXNtYXRjaCcsKSkKKyAgICAgICAgYnJhbmNoLnJlcG9z
aXRvcnkuZG9udF9sZWF2ZV9sb2NrX2luX3BsYWNlKCkKKyAgICAgICAgYnJhbmNoLmRvbnRfbGVh
dmVfbG9ja19pbl9wbGFjZSgpCisgICAgICAgIGJyYW5jaC51bmxvY2soKQorICAgICAgICByZXR1
cm4gU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsKSkKKyAgICAgICAgCgo=

=== added file bzrlib/smart/bzrdir.py // file-id:bzrdir.py-20061122024551-ol0l0
... o0oofsu9b3t-1 // last-changed:robertc@lifelesswks.robertcollins.net-2007042
... 4122009-8bb4dede6a298d93 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L2J6cmRpci5weQpAQCAtMCwwICsxLDEwOSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx
MTEtMTMwNyAgVVNBCisKKyIiIlNlcnZlci1zaWRlIGJ6cmRpciByZWxhdGVkIHJlcXVlc3QgaW1w
bG1lbnRhdGlvbnMuIiIiCisKKworZnJvbSBienJsaWIgaW1wb3J0IGVycm9ycworZnJvbSBienJs
aWIuYnpyZGlyIGltcG9ydCBCenJEaXIsIEJ6ckRpckZvcm1hdAorZnJvbSBienJsaWIuc21hcnQu
cmVxdWVzdCBpbXBvcnQgKAorICAgIEZhaWxlZFNtYXJ0U2VydmVyUmVzcG9uc2UsCisgICAgU21h
cnRTZXJ2ZXJSZXF1ZXN0LAorICAgIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlLAorICAg
ICkKKworCitjbGFzcyBTbWFydFNlcnZlclJlcXVlc3RPcGVuQnpyRGlyKFNtYXJ0U2VydmVyUmVx
dWVzdCk6CisKKyAgICBkZWYgZG8oc2VsZiwgcGF0aCk6CisgICAgICAgIGZyb20gYnpybGliLmJ6
cmRpciBpbXBvcnQgQnpyRGlyRm9ybWF0CisgICAgICAgIHQgPSBzZWxmLl9iYWNraW5nX3RyYW5z
cG9ydC5jbG9uZShwYXRoKQorICAgICAgICBkZWZhdWx0X2Zvcm1hdCA9IEJ6ckRpckZvcm1hdC5n
ZXRfZGVmYXVsdF9mb3JtYXQoKQorICAgICAgICByZWFsX2J6cmRpciA9IGRlZmF1bHRfZm9ybWF0
Lm9wZW4odCwgX2ZvdW5kPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWxfYnpy
ZGlyLl9mb3JtYXQucHJvYmVfdHJhbnNwb3J0KHQpCisgICAgICAgIGV4Y2VwdCAoZXJyb3JzLk5v
dEJyYW5jaEVycm9yLCBlcnJvcnMuVW5rbm93bkZvcm1hdEVycm9yKToKKyAgICAgICAgICAgIGFu
c3dlciA9ICdubycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFuc3dlciA9ICd5ZXMnCisg
ICAgICAgIHJldHVybiBTdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoYW5zd2VyLCkpCisK
KworY2xhc3MgU21hcnRTZXJ2ZXJSZXF1ZXN0RmluZFJlcG9zaXRvcnkoU21hcnRTZXJ2ZXJSZXF1
ZXN0KToKKworICAgIGRlZiBkbyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIidHJ5IHRvIGZpbmQg
YSByZXBvc2l0b3J5IGZyb20gcGF0aCB1cHdhcmRzCisgICAgICAgIAorICAgICAgICBUaGlzIG9w
ZXJhdGVzIHByZWNpc2VseSBsaWtlICdienJkaXIuZmluZF9yZXBvc2l0b3J5Jy4KKyAgICAgICAg
CisgICAgICAgIElmIGEgYnpyZGlyIGlzIG5vdCBwcmVzZW50LCBhbiBleGNlcHRpb24gaXMgcHJv
cG9nYXRlZAorICAgICAgICByYXRoZXIgdGhhbiAnbm8gYnJhbmNoJyBiZWNhdXNlIHRoZXNlIGFy
ZSBkaWZmZXJlbnQgY29uZGl0aW9ucy4KKworICAgICAgICA6cmV0dXJuOiBub3JlcG9zaXRvcnkg
b3Igb2ssIHJlbHBhdGguCisgICAgICAgICIiIgorICAgICAgICBienJkaXIgPSBCenJEaXIub3Bl
bl9mcm9tX3RyYW5zcG9ydChzZWxmLl9iYWNraW5nX3RyYW5zcG9ydC5jbG9uZShwYXRoKSkKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVwb3NpdG9yeSA9IGJ6cmRpci5maW5kX3JlcG9zaXRv
cnkoKQorICAgICAgICAgICAgIyB0aGUgcmVscGF0aCBvZiB0aGUgYnpyZGlyIGluIHRoZSBmb3Vu
ZCByZXBvc2l0b3J5IGdpdmVzIHVzIHRoZSAKKyAgICAgICAgICAgICMgcGF0aCBzZWdtZW50cyB0
byBwb3Atb3V0LgorICAgICAgICAgICAgcmVscGF0aCA9IHJlcG9zaXRvcnkuYnpyZGlyLnJvb3Rf
dHJhbnNwb3J0LnJlbHBhdGgoYnpyZGlyLnJvb3RfdHJhbnNwb3J0LmJhc2UpCisgICAgICAgICAg
ICBpZiBsZW4ocmVscGF0aCk6CisgICAgICAgICAgICAgICAgc2VnbWVudHMgPSBbJy4uJ10gKiBs
ZW4ocmVscGF0aC5zcGxpdCgnLycpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBzZWdtZW50cyA9IFtdCisgICAgICAgICAgICBpZiByZXBvc2l0b3J5LnN1cHBvcnRzX3JpY2hf
cm9vdCgpOgorICAgICAgICAgICAgICAgIHJpY2hfcm9vdCA9ICd5ZXMnCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJpY2hfcm9vdCA9ICdubycKKyAgICAgICAgICAgIGlmIHJl
cG9zaXRvcnkuX2Zvcm1hdC5zdXBwb3J0c190cmVlX3JlZmVyZW5jZToKKyAgICAgICAgICAgICAg
ICB0cmVlX3JlZiA9ICd5ZXMnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRy
ZWVfcmVmID0gJ25vJworICAgICAgICAgICAgcmV0dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJl
c3BvbnNlKCgnb2snLCAnLycuam9pbihzZWdtZW50cyksIHJpY2hfcm9vdCwgdHJlZV9yZWYpKQor
ICAgICAgICBleGNlcHQgZXJyb3JzLk5vUmVwb3NpdG9yeVByZXNlbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gRmFpbGVkU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ25vcmVwb3NpdG9yeScsICkpCisKKwor
Y2xhc3MgU21hcnRTZXJ2ZXJSZXF1ZXN0SW5pdGlhbGl6ZUJ6ckRpcihTbWFydFNlcnZlclJlcXVl
c3QpOgorCisgICAgZGVmIGRvKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJJbml0aWFsaXplIGEg
YnpyZGlyIGF0IHBhdGguCisKKyAgICAgICAgVGhlIGRlZmF1bHQgZm9ybWF0IG9mIHRoZSBzZXJ2
ZXIgaXMgdXNlZC4KKyAgICAgICAgOnJldHVybjogU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywg
KSkKKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldF90cmFuc3BvcnQgPSBzZWxmLl9iYWNraW5n
X3RyYW5zcG9ydC5jbG9uZShwYXRoKQorICAgICAgICBCenJEaXJGb3JtYXQuZ2V0X2RlZmF1bHRf
Zm9ybWF0KCkuaW5pdGlhbGl6ZV9vbl90cmFuc3BvcnQodGFyZ2V0X3RyYW5zcG9ydCkKKyAgICAg
ICAgcmV0dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCApKQorCisKK2Ns
YXNzIFNtYXJ0U2VydmVyUmVxdWVzdE9wZW5CcmFuY2goU21hcnRTZXJ2ZXJSZXF1ZXN0KToKKwor
ICAgIGRlZiBkbyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIidHJ5IHRvIG9wZW4gYSBicmFuY2gg
YXQgcGF0aCBhbmQgcmV0dXJuIG9rL25vYnJhbmNoLgorICAgICAgICAKKyAgICAgICAgSWYgYSBi
enJkaXIgaXMgbm90IHByZXNlbnQsIGFuIGV4Y2VwdGlvbiBpcyBwcm9wb2dhdGVkCisgICAgICAg
IHJhdGhlciB0aGFuICdubyBicmFuY2gnIGJlY2F1c2UgdGhlc2UgYXJlIGRpZmZlcmVudCBjb25k
aXRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgYnpyZGlyID0gQnpyRGlyLm9wZW5fZnJvbV90
cmFuc3BvcnQoc2VsZi5fYmFja2luZ190cmFuc3BvcnQuY2xvbmUocGF0aCkpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJlZmVyZW5jZV91cmwgPSBienJkaXIuZ2V0X2JyYW5jaF9yZWZlcmVu
Y2UoKQorICAgICAgICAgICAgaWYgcmVmZXJlbmNlX3VybCBpcyBOb25lOgorICAgICAgICAgICAg
ICAgIHJldHVybiBTdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgJycpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bFNtYXJ0U2Vy
dmVyUmVzcG9uc2UoKCdvaycsIHJlZmVyZW5jZV91cmwpKQorICAgICAgICBleGNlcHQgZXJyb3Jz
Lk5vdEJyYW5jaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0U2VydmVyUmVz
cG9uc2UoKCdub2JyYW5jaCcsICkpCgo=

=== added file bzrlib/smart/client.py // file-id:client.py-20061116014825-2k6ad
... a6xgulslami-1 // last-changed:mbp@sourcefrog.net-20070423050344-7r4w0fvmjbe
... vcn0r // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L2NsaWVudC5weQpAQCAtMCwwICsxLDY4IEBA
CisjIENvcHlyaWdodCAoQykgMjAwNiBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisj
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjEx
MS0xMzA3ICBVU0EKKworZnJvbSB1cmxwYXJzZSBpbXBvcnQgdXJscGFyc2UKKworZnJvbSBienJs
aWIuc21hcnQgaW1wb3J0IHByb3RvY29sCitmcm9tIGJ6cmxpYi51cmx1dGlscyBpbXBvcnQgdW5l
c2NhcGUKKworCitjbGFzcyBfU21hcnRDbGllbnQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtZWRpdW0pOgorICAgICAgICBzZWxmLl9tZWRpdW0gPSBtZWRpdW0KKworICAgIGRl
ZiBjYWxsKHNlbGYsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAiIiJDYWxsIGEgbWV0aG9kIG9u
IHRoZSByZW1vdGUgc2VydmVyLiIiIgorICAgICAgICByZXN1bHQsIHByb3RvY29sID0gc2VsZi5j
YWxsX2V4cGVjdGluZ19ib2R5KG1ldGhvZCwgKmFyZ3MpCisgICAgICAgIHByb3RvY29sLmNhbmNl
bF9yZWFkX2JvZHkoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY2FsbF9leHBl
Y3RpbmdfYm9keShzZWxmLCBtZXRob2QsICphcmdzKToKKyAgICAgICAgIiIiQ2FsbCBhIG1ldGhv
ZCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYW5kIHRoZSBwcm90b2NvbCBvYmplY3QuCisgICAgICAg
IAorICAgICAgICBUaGUgYm9keSBjYW4gYmUgcmVhZCBsaWtlIHNvOjoKKworICAgICAgICAgICAg
cmVzdWx0LCBzbWFydF9wcm90b2NvbCA9IHNtYXJ0X2NsaWVudC5jYWxsX2V4cGVjdGluZ19ib2R5
KC4uLikKKyAgICAgICAgICAgIGJvZHkgPSBzbWFydF9wcm90b2NvbC5yZWFkX2JvZHlfYnl0ZXMo
KQorICAgICAgICAiIiIKKyAgICAgICAgcmVxdWVzdCA9IHNlbGYuX21lZGl1bS5nZXRfcmVxdWVz
dCgpCisgICAgICAgIHNtYXJ0X3Byb3RvY29sID0gcHJvdG9jb2wuU21hcnRDbGllbnRSZXF1ZXN0
UHJvdG9jb2xPbmUocmVxdWVzdCkKKyAgICAgICAgc21hcnRfcHJvdG9jb2wuY2FsbChtZXRob2Qs
ICphcmdzKQorICAgICAgICByZXR1cm4gc21hcnRfcHJvdG9jb2wucmVhZF9yZXNwb25zZV90dXBs
ZShleHBlY3RfYm9keT1UcnVlKSwgc21hcnRfcHJvdG9jb2wKKworICAgIGRlZiBjYWxsX3dpdGhf
Ym9keV9ieXRlcyhzZWxmLCBtZXRob2QsIGFyZ3MsIGJvZHkpOgorICAgICAgICAiIiJDYWxsIGEg
bWV0aG9kIG9uIHRoZSByZW1vdGUgc2VydmVyIHdpdGggYm9keSBieXRlcy4iIiIKKyAgICAgICAg
aWYgdHlwZShtZXRob2QpIGlzIG5vdCBzdHI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3Io
J21ldGhvZCBtdXN0IGJlIGEgYnl0ZSBzdHJpbmcsIG5vdCAlcicgJSAobWV0aG9kLCkpCisgICAg
ICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgICAgIGlmIHR5cGUoYXJnKSBpcyBub3Qgc3Ry
OgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXJncyBtdXN0IGJlIGJ5dGUgc3Ry
aW5ncywgbm90ICVyJyAlIChhcmdzLCkpCisgICAgICAgIGlmIHR5cGUoYm9keSkgaXMgbm90IHN0
cjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignYm9keSBtdXN0IGJlIGJ5dGUgc3RyaW5n
LCBub3QgJXInICUgKGJvZHksKSkKKyAgICAgICAgcmVxdWVzdCA9IHNlbGYuX21lZGl1bS5nZXRf
cmVxdWVzdCgpCisgICAgICAgIHNtYXJ0X3Byb3RvY29sID0gcHJvdG9jb2wuU21hcnRDbGllbnRS
ZXF1ZXN0UHJvdG9jb2xPbmUocmVxdWVzdCkKKyAgICAgICAgc21hcnRfcHJvdG9jb2wuY2FsbF93
aXRoX2JvZHlfYnl0ZXMoKG1ldGhvZCwgKSArIGFyZ3MsIGJvZHkpCisgICAgICAgIHJldHVybiBz
bWFydF9wcm90b2NvbC5yZWFkX3Jlc3BvbnNlX3R1cGxlKCkKKworICAgIGRlZiByZW1vdGVfcGF0
aF9mcm9tX3RyYW5zcG9ydChzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAiIiJDb252ZXJ0IHRy
YW5zcG9ydCBpbnRvIGEgcGF0aCBzdWl0YWJsZSBmb3IgdXNpbmcgaW4gYSByZXF1ZXN0LgorICAg
ICAgICAKKyAgICAgICAgTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgcmVtb3RlIHBhdGggZG9lc24n
dCBlbmNvZGUgdGhlIGhvc3QgbmFtZSBvcgorICAgICAgICBhbnl0aGluZyBidXQgcGF0aCwgc28g
aXQgaXMgb25seSBzYWZlIHRvIHVzZSBpdCBpbiByZXF1ZXN0cyBzZW50IG92ZXIKKyAgICAgICAg
dGhlIG1lZGl1bSBmcm9tIHRoZSBtYXRjaGluZyB0cmFuc3BvcnQuCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gdW5lc2NhcGUodXJscGFyc2UodHJhbnNwb3J0LmJhc2UpWzJdKS5lbmNvZGUo
J3V0ZjgnKQoK

=== added file bzrlib/smart/medium.py // file-id:medium.py-20061103051856-rgu2h
... uy59fkz902q-1 // last-changed:andrew.bennetts@canonical.com-20070425054002-
... 08sj7lxphtpb6ewm // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L21lZGl1bS5weQpAQCAtMCwwICsxLDYwMCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx
MTEtMTMwNyAgVVNBCisKKyIiIlRoZSAnbWVkaXVtJyBsYXllciBmb3IgdGhlIHNtYXJ0IHNlcnZl
cnMgYW5kIGNsaWVudHMuCisKKyJNZWRpdW0iIGhlcmUgaXMgdGhlIG5vdW4gbWVhbmluZyAiYSBt
ZWFucyBvZiB0cmFuc21pc3Npb24iLCBub3QgdGhlIGFkamVjdGl2ZQorZm9yICJ0aGUgcXVhbGl0
eSBiZXR3ZWVuIGJpZyBhbmQgc21hbGwuIgorCitNZWRpYSBjYXJyeSB0aGUgYnl0ZXMgb2YgdGhl
IHJlcXVlc3RzIHNvbWVob3cgKGUuZy4gdmlhIFRDUCwgd3JhcHBlZCBpbiBIVFRQLCBvcgorb3Zl
ciBTU0gpLCBhbmQgcGFzcyB0aGVtIHRvIGFuZCBmcm9tIHRoZSBwcm90b2NvbCBsb2dpYy4gIFNl
ZSB0aGUgb3ZlcnZpZXcgaW4KK2J6cmxpYi90cmFuc3BvcnQvc21hcnQvX19pbml0X18ucHkuCisi
IiIKKworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCisKK2Zyb20gYnpybGli
IGltcG9ydCBlcnJvcnMKK2Zyb20gYnpybGliLnNtYXJ0LnByb3RvY29sIGltcG9ydCAoCisgICAg
UkVRVUVTVF9WRVJTSU9OX1RXTywKKyAgICBTbWFydFNlcnZlclJlcXVlc3RQcm90b2NvbE9uZSwK
KyAgICBTbWFydFNlcnZlclJlcXVlc3RQcm90b2NvbFR3bywKKyAgICApCisKK3RyeToKKyAgICBm
cm9tIGJ6cmxpYi50cmFuc3BvcnQgaW1wb3J0IHNzaAorZXhjZXB0IGVycm9ycy5QYXJhbWlrb05v
dFByZXNlbnQ6CisgICAgIyBubyBwYXJhbWlrby4gIFNtYXJ0U1NIQ2xpZW50TWVkaXVtIHdpbGwg
YnJlYWsuCisgICAgcGFzcworCisKK2NsYXNzIFNtYXJ0U2VydmVyU3RyZWFtTWVkaXVtKG9iamVj
dCk6CisgICAgIiIiSGFuZGxlcyBzbWFydCBjb21tYW5kcyBjb21pbmcgb3ZlciBhIHN0cmVhbS4K
KworICAgIFRoZSBzdHJlYW0gbWF5IGJlIGEgcGlwZSBjb25uZWN0ZWQgdG8gc3NoZCwgb3IgYSB0
Y3Agc29ja2V0LCBvciBhbgorICAgIGluLXByb2Nlc3MgZmlmbyBmb3IgdGVzdGluZy4KKworICAg
IE9uZSBpbnN0YW5jZSBpcyBjcmVhdGVkIGZvciBlYWNoIGNvbm5lY3RlZCBjbGllbnQ7IGl0IGNh
biBzZXJ2ZSBtdWx0aXBsZQorICAgIHJlcXVlc3RzIGluIHRoZSBsaWZldGltZSBvZiB0aGUgY29u
bmVjdGlvbi4KKworICAgIFRoZSBzZXJ2ZXIgcGFzc2VzIHJlcXVlc3RzIHRocm91Z2ggdG8gYW4g
dW5kZXJseWluZyBiYWNraW5nIHRyYW5zcG9ydCwgCisgICAgd2hpY2ggd2lsbCB0eXBpY2FsbHkg
YmUgYSBMb2NhbFRyYW5zcG9ydCBsb29raW5nIGF0IHRoZSBzZXJ2ZXIncyBmaWxlc3lzdGVtLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhY2tpbmdfdHJhbnNwb3J0KToKKyAg
ICAgICAgIiIiQ29uc3RydWN0IG5ldyBzZXJ2ZXIuCisKKyAgICAgICAgOnBhcmFtIGJhY2tpbmdf
dHJhbnNwb3J0OiBUcmFuc3BvcnQgZm9yIHRoZSBkaXJlY3Rvcnkgc2VydmVkLgorICAgICAgICAi
IiIKKyAgICAgICAgIyBiYWNraW5nX3RyYW5zcG9ydCBjb3VsZCBiZSBwYXNzZWQgdG8gc2VydmUg
aW5zdGVhZCBvZiBfX2luaXRfXworICAgICAgICBzZWxmLmJhY2tpbmdfdHJhbnNwb3J0ID0gYmFj
a2luZ190cmFuc3BvcnQKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IEZhbHNlCisKKyAgICBkZWYg
c2VydmUoc2VsZik6CisgICAgICAgICIiIlNlcnZlIHJlcXVlc3RzIHVudGlsIHRoZSBjbGllbnQg
ZGlzY29ubmVjdHMuIiIiCisgICAgICAgICMgS2VlcCBhIHJlZmVyZW5jZSB0byBzdGRlcnIgYmVj
YXVzZSB0aGUgc3lzIG1vZHVsZSdzIGdsb2JhbHMgZ2V0IHNldCB0bworICAgICAgICAjIE5vbmUg
ZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duLgorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgc3Rk
ZXJyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmZpbmlzaGVkOgor
ICAgICAgICAgICAgICAgIHNlcnZlcl9wcm90b2NvbCA9IHNlbGYuX2J1aWxkX3Byb3RvY29sKCkK
KyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZV9vbmVfcmVxdWVzdChzZXJ2ZXJfcHJvdG9jb2wp
CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzdGRlcnIud3JpdGUo
IiVzIHRlcm1pbmF0aW5nIG9uIGV4Y2VwdGlvbiAlc1xuIiAlIChzZWxmLCBlKSkKKyAgICAgICAg
ICAgIHJhaXNlCisKKyAgICBkZWYgX2J1aWxkX3Byb3RvY29sKHNlbGYpOgorICAgICAgICAiIiJJ
ZGVudGlmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbmNvbWluZyByZXF1ZXN0LCBhbmQgcmV0dXJu
cyBhbgorICAgICAgICBhIHByb3RvY29sIG9iamVjdCB0aGF0IGNhbiBpbnRlcnByZXQgaXQuCisK
KyAgICAgICAgSWYgbW9yZSBieXRlcyB0aGFuIHRoZSB2ZXJzaW9uIHByZWZpeCBvZiB0aGUgcmVx
dWVzdCBhcmUgcmVhZCwgdGhleSB3aWxsCisgICAgICAgIGJlIGZlZCBpbnRvIHRoZSBwcm90b2Nv
bCBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgOnJldHVybnM6IGEgU21hcnRTZXJ2
ZXJSZXF1ZXN0UHJvdG9jb2wuCisgICAgICAgICIiIgorICAgICAgICAjIElkZW50aWZ5IHRoZSBw
cm90b2NvbCB2ZXJzaW9uLgorICAgICAgICBieXRlcyA9IHNlbGYuX2dldF9saW5lKCkKKyAgICAg
ICAgaWYgYnl0ZXMuc3RhcnRzd2l0aChSRVFVRVNUX1ZFUlNJT05fVFdPKToKKyAgICAgICAgICAg
IHByb3RvY29sX2NsYXNzID0gU21hcnRTZXJ2ZXJSZXF1ZXN0UHJvdG9jb2xUd28KKyAgICAgICAg
ICAgIGJ5dGVzID0gYnl0ZXNbbGVuKFJFUVVFU1RfVkVSU0lPTl9UV08pOl0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHByb3RvY29sX2NsYXNzID0gU21hcnRTZXJ2ZXJSZXF1ZXN0UHJvdG9j
b2xPbmUKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9jbGFzcyhzZWxmLmJhY2tpbmdfdHJh
bnNwb3J0LCBzZWxmLl93cml0ZV9vdXQpCisgICAgICAgIHByb3RvY29sLmFjY2VwdF9ieXRlcyhi
eXRlcykKKyAgICAgICAgcmV0dXJuIHByb3RvY29sCisKKyAgICBkZWYgX3NlcnZlX29uZV9yZXF1
ZXN0KHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgIiIiUmVhZCBvbmUgcmVxdWVzdCBmcm9tIGlu
cHV0LCBwcm9jZXNzLCBzZW5kIGJhY2sgYSByZXNwb25zZS4KKyAgICAgICAgCisgICAgICAgIDpw
YXJhbSBwcm90b2NvbDogYSBTbWFydFNlcnZlclJlcXVlc3RQcm90b2NvbC4KKyAgICAgICAgIiIi
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlX29uZV9yZXF1ZXN0X3VuZ3Vh
cmRlZChwcm90b2NvbCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNl
bGYudGVybWluYXRlX2R1ZV90b19lcnJvcigpCisKKyAgICBkZWYgdGVybWluYXRlX2R1ZV90b19l
cnJvcihzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlv
biBmcm9tIHRoZSBwcm90b2NvbCBvY2N1cnMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3Ioc2VsZi50ZXJtaW5hdGVfZHVlX3RvX2Vycm9yKQorCisgICAgZGVmIF9nZXRfYnl0
ZXMoc2VsZiwgZGVzaXJlZF9jb3VudCk6CisgICAgICAgICIiIkdldCBzb21lIGJ5dGVzIGZyb20g
dGhlIG1lZGl1bS4KKworICAgICAgICA6cGFyYW0gZGVzaXJlZF9jb3VudDogbnVtYmVyIG9mIGJ5
dGVzIHdlIHdhbnQgdG8gcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3Ioc2VsZi5fZ2V0X2J5dGVzKQorCisgICAgZGVmIF9nZXRfbGluZShzZWxmKToK
KyAgICAgICAgIiIiUmVhZCBieXRlcyBmcm9tIHRoaXMgcmVxdWVzdCdzIHJlc3BvbnNlIHVudGls
IGEgbmV3bGluZSBieXRlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpc24ndCBwYXJ0aWN1bGFy
bHkgZWZmaWNpZW50LCBzbyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdGhlCisgICAgICAgIGV4
cGVjdGVkIHNpemUgb2YgdGhlIGxpbmUgaXMgcXVpdGUgc2hvcnQuCisKKyAgICAgICAgOnJldHVy
bnM6IGEgc3RyaW5nIG9mIGJ5dGVzIGVuZGluZyBpbiBhIG5ld2xpbmUgKGJ5dGUgMHgwQSkuCisg
ICAgICAgICIiIgorICAgICAgICAjIFhYWDogdGhpcyBkdXBsaWNhdGVzIFNtYXJ0Q2xpZW50UmVx
dWVzdFByb3RvY29sT25lLl9yZWN2X3R1cGxlCisgICAgICAgIGxpbmUgPSAnJworICAgICAgICB3
aGlsZSBub3QgbGluZSBvciBsaW5lWy0xXSAhPSAnXG4nOgorICAgICAgICAgICAgbmV3X2NoYXIg
PSBzZWxmLl9nZXRfYnl0ZXMoMSkKKyAgICAgICAgICAgIGxpbmUgKz0gbmV3X2NoYXIKKyAgICAg
ICAgICAgIGlmIG5ld19jaGFyID09ICcnOgorICAgICAgICAgICAgICAgICMgUmFuIG91dCBvZiBi
eXRlcyBiZWZvcmUgcmVjZWl2aW5nIGEgY29tcGxldGUgbGluZS4KKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIFNtYXJ0U2VydmVyU29ja2V0U3Ry
ZWFtTWVkaXVtKFNtYXJ0U2VydmVyU3RyZWFtTWVkaXVtKToKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBzb2NrLCBiYWNraW5nX3RyYW5zcG9ydCk6CisgICAgICAgICIiIkNvbnN0cnVjdG9yLgor
CisgICAgICAgIDpwYXJhbSBzb2NrOiB0aGUgc29ja2V0IHRoZSBzZXJ2ZXIgd2lsbCByZWFkIGZy
b20uICBJdCB3aWxsIGJlIHB1dAorICAgICAgICAgICAgaW50byBibG9ja2luZyBtb2RlLgorICAg
ICAgICAiIiIKKyAgICAgICAgU21hcnRTZXJ2ZXJTdHJlYW1NZWRpdW0uX19pbml0X18oc2VsZiwg
YmFja2luZ190cmFuc3BvcnQpCisgICAgICAgIHNlbGYucHVzaF9iYWNrID0gJycKKyAgICAgICAg
c29jay5zZXRibG9ja2luZyhUcnVlKQorICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2sKKworICAg
IGRlZiBfc2VydmVfb25lX3JlcXVlc3RfdW5ndWFyZGVkKHNlbGYsIHByb3RvY29sKToKKyAgICAg
ICAgd2hpbGUgcHJvdG9jb2wubmV4dF9yZWFkX3NpemUoKToKKyAgICAgICAgICAgIGlmIHNlbGYu
cHVzaF9iYWNrOgorICAgICAgICAgICAgICAgIHByb3RvY29sLmFjY2VwdF9ieXRlcyhzZWxmLnB1
c2hfYmFjaykKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2hfYmFjayA9ICcnCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGJ5dGVzID0gc2VsZi5fZ2V0X2J5dGVzKDQwOTYpCisg
ICAgICAgICAgICAgICAgaWYgYnl0ZXMgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
ZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAg
ICAgIHByb3RvY29sLmFjY2VwdF9ieXRlcyhieXRlcykKKyAgICAgICAgCisgICAgICAgIHNlbGYu
cHVzaF9iYWNrID0gcHJvdG9jb2wuZXhjZXNzX2J1ZmZlcgorCisgICAgZGVmIF9nZXRfYnl0ZXMo
c2VsZiwgZGVzaXJlZF9jb3VudCk6CisgICAgICAgICMgV2UgaWdub3JlIHRoZSBkZXNpcmVkX2Nv
dW50IGJlY2F1c2Ugb24gc29ja2V0cyBpdCdzIG1vcmUgZWZmaWNpZW50IHRvCisgICAgICAgICMg
cmVhZCA0ayBhdCBhIHRpbWUuCisgICAgICAgIHJldHVybiBzZWxmLnNvY2tldC5yZWN2KDQwOTYp
CisgICAgCisgICAgZGVmIHRlcm1pbmF0ZV9kdWVfdG9fZXJyb3Ioc2VsZik6CisgICAgICAgICIi
IkNhbGxlZCB3aGVuIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gZnJvbSB0aGUgcHJvdG9jb2wgb2Nj
dXJzLiIiIgorICAgICAgICAjIFRPRE86IFRoaXMgc2hvdWxkIGxvZyB0byBhIHNlcnZlciBsb2cg
ZmlsZSwgYnV0IG5vIHN1Y2ggdGhpbmcKKyAgICAgICAgIyBleGlzdHMgeWV0LiAgQW5kcmV3IEJl
bm5ldHRzIDIwMDYtMDktMjkuCisgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAg
c2VsZi5maW5pc2hlZCA9IFRydWUKKworICAgIGRlZiBfd3JpdGVfb3V0KHNlbGYsIGJ5dGVzKToK
KyAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChieXRlcykKKworCitjbGFzcyBTbWFydFNlcnZl
clBpcGVTdHJlYW1NZWRpdW0oU21hcnRTZXJ2ZXJTdHJlYW1NZWRpdW0pOgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGluX2ZpbGUsIG91dF9maWxlLCBiYWNraW5nX3RyYW5zcG9ydCk6CisgICAg
ICAgICIiIkNvbnN0cnVjdCBuZXcgc2VydmVyLgorCisgICAgICAgIDpwYXJhbSBpbl9maWxlOiBQ
eXRob24gZmlsZSBmcm9tIHdoaWNoIHJlcXVlc3RzIGNhbiBiZSByZWFkLgorICAgICAgICA6cGFy
YW0gb3V0X2ZpbGU6IFB5dGhvbiBmaWxlIHRvIHdyaXRlIHJlc3BvbnNlcy4KKyAgICAgICAgOnBh
cmFtIGJhY2tpbmdfdHJhbnNwb3J0OiBUcmFuc3BvcnQgZm9yIHRoZSBkaXJlY3Rvcnkgc2VydmVk
LgorICAgICAgICAiIiIKKyAgICAgICAgU21hcnRTZXJ2ZXJTdHJlYW1NZWRpdW0uX19pbml0X18o
c2VsZiwgYmFja2luZ190cmFuc3BvcnQpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2lu
MzInOgorICAgICAgICAgICAgIyBmb3JjZSBiaW5hcnkgbW9kZSBmb3IgZmlsZXMKKyAgICAgICAg
ICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgICAgIGZvciBmIGluIChpbl9maWxlLCBvdXRfZmls
ZSk6CisgICAgICAgICAgICAgICAgZmlsZW5vID0gZ2V0YXR0cihmLCAnZmlsZW5vJywgTm9uZSkK
KyAgICAgICAgICAgICAgICBpZiBmaWxlbm86CisgICAgICAgICAgICAgICAgICAgIG1zdmNydC5z
ZXRtb2RlKGZpbGVubygpLCBvcy5PX0JJTkFSWSkKKyAgICAgICAgc2VsZi5faW4gPSBpbl9maWxl
CisgICAgICAgIHNlbGYuX291dCA9IG91dF9maWxlCisKKyAgICBkZWYgX3NlcnZlX29uZV9yZXF1
ZXN0X3VuZ3VhcmRlZChzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICBieXRlc190b19yZWFkID0gcHJvdG9jb2wubmV4dF9yZWFkX3NpemUoKQorICAgICAg
ICAgICAgaWYgYnl0ZXNfdG9fcmVhZCA9PSAwOgorICAgICAgICAgICAgICAgICMgRmluaXNoZWQg
c2VydmluZyB0aGlzIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgc2VsZi5fb3V0LmZsdXNoKCkK
KyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGJ5dGVzID0gc2VsZi5fZ2V0X2J5
dGVzKGJ5dGVzX3RvX3JlYWQpCisgICAgICAgICAgICBpZiBieXRlcyA9PSAnJzoKKyAgICAgICAg
ICAgICAgICAjIENvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkLgorICAgICAgICAgICAgICAgIHNl
bGYuZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fb3V0LmZsdXNoKCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHByb3RvY29sLmFjY2VwdF9ieXRlcyhi
eXRlcykKKworICAgIGRlZiBfZ2V0X2J5dGVzKHNlbGYsIGRlc2lyZWRfY291bnQpOgorICAgICAg
ICByZXR1cm4gc2VsZi5faW4ucmVhZChkZXNpcmVkX2NvdW50KQorCisgICAgZGVmIHRlcm1pbmF0
ZV9kdWVfdG9fZXJyb3Ioc2VsZik6CisgICAgICAgICMgVE9ETzogVGhpcyBzaG91bGQgbG9nIHRv
IGEgc2VydmVyIGxvZyBmaWxlLCBidXQgbm8gc3VjaCB0aGluZworICAgICAgICAjIGV4aXN0cyB5
ZXQuICBBbmRyZXcgQmVubmV0dHMgMjAwNi0wOS0yOS4KKyAgICAgICAgc2VsZi5fb3V0LmNsb3Nl
KCkKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IFRydWUKKworICAgIGRlZiBfd3JpdGVfb3V0KHNl
bGYsIGJ5dGVzKToKKyAgICAgICAgc2VsZi5fb3V0LndyaXRlKGJ5dGVzKQorCisKK2NsYXNzIFNt
YXJ0Q2xpZW50TWVkaXVtUmVxdWVzdChvYmplY3QpOgorICAgICIiIkEgcmVxdWVzdCBvbiBhIFNt
YXJ0Q2xpZW50TWVkaXVtLgorCisgICAgRWFjaCByZXF1ZXN0IGFsbG93cyBieXRlcyB0byBiZSBw
cm92aWRlZCB0byBpdCB2aWEgYWNjZXB0X2J5dGVzLCBhbmQgdGhlbgorICAgIHRoZSByZXNwb25z
ZSBieXRlcyB0byBiZSByZWFkIHZpYSByZWFkX2J5dGVzLgorCisgICAgRm9yIGluc3RhbmNlOgor
ICAgIHJlcXVlc3QuYWNjZXB0X2J5dGVzKCcxMjMnKQorICAgIHJlcXVlc3QuZmluaXNoZWRfd3Jp
dGluZygpCisgICAgcmVzdWx0ID0gcmVxdWVzdC5yZWFkX2J5dGVzKDMpCisgICAgcmVxdWVzdC5m
aW5pc2hlZF9yZWFkaW5nKCkKKworICAgIEl0IGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIFNtYXJ0
Q2xpZW50TWVkaXVtIHdoZXRoZXIgbXVsdGlwbGUgY29uY3VycmVudAorICAgIHJlcXVlc3RzIGNh
biBleGlzdC4gU2VlIFNtYXJ0Q2xpZW50TWVkaXVtLmdldF9yZXF1ZXN0IHRvIG9idGFpbiBpbnN0
YW5jZXMgCisgICAgb2YgU21hcnRDbGllbnRNZWRpdW1SZXF1ZXN0LCBhbmQgdGhlIGNvbmNyZXRl
IE1lZGl1bSB5b3UgYXJlIHVzaW5nIGZvciAKKyAgICBkZXRhaWxzIG9uIGNvbmN1cnJlbmN5IGFu
ZCBwaXBlbGluaW5nLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lZGl1bSk6
CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFNtYXJ0Q2xpZW50TWVkaXVtUmVxdWVzdCBmb3IgdGhl
IG1lZGl1bSBtZWRpdW0uIiIiCisgICAgICAgIHNlbGYuX21lZGl1bSA9IG1lZGl1bQorICAgICAg
ICAjIHdlIHRyYWNrIHN0YXRlIGJ5IGNvbnN0YW50cyAtIHdlIG1heSB3YW50IHRvIHVzZSB0aGUg
c2FtZQorICAgICAgICAjIHBhdHRlcm4gYXMgQm9keVJlYWRlciBpZiBpdCBnZXRzIG1vcmUgY29t
cGxleC4KKyAgICAgICAgIyB2YWxpZCBzdGF0ZXMgYXJlOiAid3JpdGluZyIsICJyZWFkaW5nIiwg
ImRvbmUiCisgICAgICAgIHNlbGYuX3N0YXRlID0gIndyaXRpbmciCisKKyAgICBkZWYgYWNjZXB0
X2J5dGVzKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgIiIiQWNjZXB0IGJ5dGVzIGZvciBpbmNsdXNp
b24gaW4gdGhpcyByZXF1ZXN0LgorCisgICAgICAgIFRoaXMgbWV0aG9kIG1heSBub3QgYmUgYmUg
Y2FsbGVkIGFmdGVyIGZpbmlzaGVkX3dyaXRpbmcoKSBoYXMgYmVlbgorICAgICAgICBjYWxsZWQu
ICBJdCBkZXBlbmRzIHVwb24gdGhlIE1lZGl1bSB3aGV0aGVyIG9yIG5vdCB0aGUgYnl0ZXMgd2ls
bCBiZQorICAgICAgICBpbW1lZGlhdGVseSB0cmFuc21pdHRlZC4gTWVzc2FnZSBiYXNlZCBNZWRp
dW1zIHdpbGwgdGVuZCB0byBidWZmZXIgdGhlCisgICAgICAgIGJ5dGVzIHVudGlsIGZpbmlzaGVk
X3dyaXRpbmcoKSBpcyBjYWxsZWQuCisKKyAgICAgICAgOnBhcmFtIGJ5dGVzOiBBIGJ5dGVzdHJp
bmcuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSAid3JpdGluZyI6Cisg
ICAgICAgICAgICByYWlzZSBlcnJvcnMuV3JpdGluZ0NvbXBsZXRlZChzZWxmKQorICAgICAgICBz
ZWxmLl9hY2NlcHRfYnl0ZXMoYnl0ZXMpCisKKyAgICBkZWYgX2FjY2VwdF9ieXRlcyhzZWxmLCBi
eXRlcyk6CisgICAgICAgICIiIkhlbHBlciBmb3IgYWNjZXB0X2J5dGVzLgorCisgICAgICAgIEFj
Y2VwdF9ieXRlcyBjaGVja3MgdGhlIHN0YXRlIG9mIHRoZSByZXF1ZXN0IHRvIGRldGVybWluZyBp
ZiBieXRlcworICAgICAgICBzaG91bGQgYmUgYWNjZXB0ZWQuIEFmdGVyIHRoYXQgaXQgaGFuZHMg
b2ZmIHRvIF9hY2NlcHRfYnl0ZXMgdG8gZG8gdGhlCisgICAgICAgIGFjdHVhbCBhY2NlcHRhbmNl
LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLl9h
Y2NlcHRfYnl0ZXMpCisKKyAgICBkZWYgZmluaXNoZWRfcmVhZGluZyhzZWxmKToKKyAgICAgICAg
IiIiSW5mb3JtIHRoZSByZXF1ZXN0IHRoYXQgYWxsIGRlc2lyZWQgZGF0YSBoYXMgYmVlbiByZWFk
LgorCisgICAgICAgIFRoaXMgd2lsbCByZW1vdmUgdGhlIHJlcXVlc3QgZnJvbSB0aGUgcGlwZWxp
bmUgZm9yIGl0cyBtZWRpdW0gKGlmIHRoZQorICAgICAgICBtZWRpdW0gc3VwcG9ydHMgcGlwZWxp
bmluZykgYW5kIGFueSBmdXJ0aGVyIGNhbGxzIHRvIG1ldGhvZHMgb24gdGhlCisgICAgICAgIHJl
cXVlc3Qgd2lsbCByYWlzZSBSZWFkaW5nQ29tcGxldGVkLgorICAgICAgICAiIiIKKyAgICAgICAg
aWYgc2VsZi5fc3RhdGUgPT0gIndyaXRpbmciOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLldy
aXRpbmdOb3RDb21wbGV0ZShzZWxmKQorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSAicmVhZGlu
ZyI6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuUmVhZGluZ0NvbXBsZXRlZChzZWxmKQorICAg
ICAgICBzZWxmLl9zdGF0ZSA9ICJkb25lIgorICAgICAgICBzZWxmLl9maW5pc2hlZF9yZWFkaW5n
KCkKKworICAgIGRlZiBfZmluaXNoZWRfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiSGVscGVy
IGZvciBmaW5pc2hlZF9yZWFkaW5nLgorCisgICAgICAgIGZpbmlzaGVkX3JlYWRpbmcgY2hlY2tz
IHRoZSBzdGF0ZSBvZiB0aGUgcmVxdWVzdCB0byBkZXRlcm1pbmUgaWYgCisgICAgICAgIGZpbmlz
aGVkX3JlYWRpbmcgaXMgYWxsb3dlZCwgYW5kIGlmIGl0IGlzIGhhbmRzIG9mZiB0byBfZmluaXNo
ZWRfcmVhZGluZworICAgICAgICB0byBwZXJmb3JtIHRoZSBhY3Rpb24uCisgICAgICAgICIiIgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuX2ZpbmlzaGVkX3JlYWRpbmcp
CisKKyAgICBkZWYgZmluaXNoZWRfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiRmluaXNoIHRo
ZSB3cml0aW5nIHBoYXNlIG9mIHRoaXMgcmVxdWVzdC4KKworICAgICAgICBUaGlzIHdpbGwgZmx1
c2ggYWxsIHBlbmRpbmcgZGF0YSBmb3IgdGhpcyByZXF1ZXN0IGFsb25nIHRoZSBtZWRpdW0uCisg
ICAgICAgIEFmdGVyIGNhbGxpbmcgZmluaXNoZWRfd3JpdGluZywgeW91IG1heSBub3QgY2FsbCBh
Y2NlcHRfYnl0ZXMgYW55bW9yZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRl
ICE9ICJ3cml0aW5nIjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Xcml0aW5nQ29tcGxldGVk
KHNlbGYpCisgICAgICAgIHNlbGYuX3N0YXRlID0gInJlYWRpbmciCisgICAgICAgIHNlbGYuX2Zp
bmlzaGVkX3dyaXRpbmcoKQorCisgICAgZGVmIF9maW5pc2hlZF93cml0aW5nKHNlbGYpOgorICAg
ICAgICAiIiJIZWxwZXIgZm9yIGZpbmlzaGVkX3dyaXRpbmcuCisKKyAgICAgICAgZmluaXNoZWRf
d3JpdGluZyBjaGVja3MgdGhlIHN0YXRlIG9mIHRoZSByZXF1ZXN0IHRvIGRldGVybWluZSBpZiAK
KyAgICAgICAgZmluaXNoZWRfd3JpdGluZyBpcyBhbGxvd2VkLCBhbmQgaWYgaXQgaXMgaGFuZHMg
b2ZmIHRvIF9maW5pc2hlZF93cml0aW5nCisgICAgICAgIHRvIHBlcmZvcm0gdGhlIGFjdGlvbi4K
KyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5fZmlu
aXNoZWRfd3JpdGluZykKKworICAgIGRlZiByZWFkX2J5dGVzKHNlbGYsIGNvdW50KToKKyAgICAg
ICAgIiIiUmVhZCBieXRlcyBmcm9tIHRoaXMgcmVxdWVzdHMgcmVzcG9uc2UuCisKKyAgICAgICAg
VGhpcyBtZXRob2Qgd2lsbCBibG9jayBhbmQgd2FpdCBmb3IgY291bnQgYnl0ZXMgdG8gYmUgcmVh
ZC4gSXQgbWF5IG5vdAorICAgICAgICBiZSBpbnZva2VkIHVudGlsIGZpbmlzaGVkX3dyaXRpbmco
KSBoYXMgYmVlbiBjYWxsZWQgLSB0aGlzIGlzIHRvIGVuc3VyZQorICAgICAgICBhIG1lc3NhZ2Ut
YmFzZWQgYXBwcm9hY2ggdG8gcmVxdWVzdHMsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbWVzc2Fn
ZQorICAgICAgICBiYXNlZCBtZWRpdW1zIGxpa2UgSFRUUC4KKyAgICAgICAgIiIiCisgICAgICAg
IGlmIHNlbGYuX3N0YXRlID09ICJ3cml0aW5nIjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5X
cml0aW5nTm90Q29tcGxldGUoc2VsZikKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gInJlYWRp
bmciOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlJlYWRpbmdDb21wbGV0ZWQoc2VsZikKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYnl0ZXMoY291bnQpCisKKyAgICBkZWYgX3JlYWRfYnl0
ZXMoc2VsZiwgY291bnQpOgorICAgICAgICAiIiJIZWxwZXIgZm9yIHJlYWRfYnl0ZXMuCisKKyAg
ICAgICAgcmVhZF9ieXRlcyBjaGVja3MgdGhlIHN0YXRlIG9mIHRoZSByZXF1ZXN0IHRvIGRldGVy
bWluZyBpZiBieXRlcworICAgICAgICBzaG91bGQgYmUgcmVhZC4gQWZ0ZXIgdGhhdCBpdCBoYW5k
cyBvZmYgdG8gX3JlYWRfYnl0ZXMgdG8gZG8gdGhlCisgICAgICAgIGFjdHVhbCByZWFkLgorICAg
ICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLl9yZWFkX2J5
dGVzKQorCisgICAgZGVmIHJlYWRfbGluZShzZWxmKToKKyAgICAgICAgIiIiUmVhZCBieXRlcyBm
cm9tIHRoaXMgcmVxdWVzdCdzIHJlc3BvbnNlIHVudGlsIGEgbmV3bGluZSBieXRlLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBzbyBzaG91bGQg
b25seSBiZSB1c2VkIHdoZW4gdGhlCisgICAgICAgIGV4cGVjdGVkIHNpemUgb2YgdGhlIGxpbmUg
aXMgcXVpdGUgc2hvcnQuCisKKyAgICAgICAgOnJldHVybnM6IGEgc3RyaW5nIG9mIGJ5dGVzIGVu
ZGluZyBpbiBhIG5ld2xpbmUgKGJ5dGUgMHgwQSkuCisgICAgICAgICIiIgorICAgICAgICAjIFhY
WDogdGhpcyBkdXBsaWNhdGVzIFNtYXJ0Q2xpZW50UmVxdWVzdFByb3RvY29sT25lLl9yZWN2X3R1
cGxlCisgICAgICAgIGxpbmUgPSAnJworICAgICAgICB3aGlsZSBub3QgbGluZSBvciBsaW5lWy0x
XSAhPSAnXG4nOgorICAgICAgICAgICAgbmV3X2NoYXIgPSBzZWxmLnJlYWRfYnl0ZXMoMSkKKyAg
ICAgICAgICAgIGxpbmUgKz0gbmV3X2NoYXIKKyAgICAgICAgICAgIGlmIG5ld19jaGFyID09ICcn
OgorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5TbWFydFByb3RvY29sRXJyb3IoCisgICAg
ICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIHJlYWRpbmcgZnJvbSBzZXJ2
ZXInKQorICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIFNtYXJ0Q2xpZW50TWVkaXVtKG9i
amVjdCk6CisgICAgIiIiU21hcnQgY2xpZW50IGlzIGEgbWVkaXVtIGZvciBzZW5kaW5nIHNtYXJ0
IHByb3RvY29sIHJlcXVlc3RzIG92ZXIuIiIiCisKKyAgICBkZWYgZGlzY29ubmVjdChzZWxmKToK
KyAgICAgICAgIiIiSWYgdGhpcyBtZWRpdW0gbWFpbnRhaW5zIGEgcGVyc2lzdGVudCBjb25uZWN0
aW9uLCBjbG9zZSBpdC4KKyAgICAgICAgCisgICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIGRvZXMgbm90aGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIAorCitjbGFzcyBTbWFydENs
aWVudFN0cmVhbU1lZGl1bShTbWFydENsaWVudE1lZGl1bSk6CisgICAgIiIiU3RyZWFtIGJhc2Vk
IG1lZGl1bSBjb21tb24gY2xhc3MuCisKKyAgICBTbWFydENsaWVudFN0cmVhbU1lZGl1bXMgb3Bl
cmF0ZSBvbiBhIHN0cmVhbS4gQWxsIHN1YmNsYXNzZXMgdXNlIGEgY29tbW9uCisgICAgU21hcnRD
bGllbnRTdHJlYW1NZWRpdW1SZXF1ZXN0IGZvciB0aGVpciByZXF1ZXN0cywgYW5kIHNob3VsZCBp
bXBsZW1lbnQKKyAgICBfYWNjZXB0X2J5dGVzIGFuZCBfcmVhZF9ieXRlcyB0byBhbGxvdyB0aGUg
cmVxdWVzdCBvYmplY3RzIHRvIHNlbmQgYW5kCisgICAgcmVjZWl2ZSBieXRlcy4KKyAgICAiIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXF1ZXN0
ID0gTm9uZQorCisgICAgZGVmIGFjY2VwdF9ieXRlcyhzZWxmLCBieXRlcyk6CisgICAgICAgIHNl
bGYuX2FjY2VwdF9ieXRlcyhieXRlcykKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAg
ICAiIiJUaGUgU21hcnRDbGllbnRTdHJlYW1NZWRpdW0ga25vd3MgaG93IHRvIGNsb3NlIHRoZSBz
dHJlYW0gd2hlbiBpdCBpcworICAgICAgICBmaW5pc2hlZCB3aXRoIGl0LgorICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5kaXNjb25uZWN0KCkKKworICAgIGRlZiBfZmx1c2goc2VsZik6CisgICAg
ICAgICIiIkZsdXNoIHRoZSBvdXRwdXQgc3RyZWFtLgorICAgICAgICAKKyAgICAgICAgVGhpcyBt
ZXRob2QgaXMgdXNlZCBieSB0aGUgU21hcnRDbGllbnRTdHJlYW1NZWRpdW1SZXF1ZXN0IHRvIGVu
c3VyZSB0aGF0CisgICAgICAgIGFsbCBkYXRhIGZvciBhIHJlcXVlc3QgaXMgc2VudCwgdG8gYXZv
aWQgbG9uZyB0aW1lb3V0cyBvciBkZWFkbG9ja3MuCisgICAgICAgICIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuX2ZsdXNoKQorCisgICAgZGVmIGdldF9yZXF1ZXN0
KHNlbGYpOgorICAgICAgICAiIiJTZWUgU21hcnRDbGllbnRNZWRpdW0uZ2V0X3JlcXVlc3QoKS4K
KworICAgICAgICBTbWFydENsaWVudFN0cmVhbU1lZGl1bSBhbHdheXMgcmV0dXJucyBhIFNtYXJ0
Q2xpZW50U3RyZWFtTWVkaXVtUmVxdWVzdAorICAgICAgICBmb3IgZ2V0X3JlcXVlc3QuCisgICAg
ICAgICIiIgorICAgICAgICByZXR1cm4gU21hcnRDbGllbnRTdHJlYW1NZWRpdW1SZXF1ZXN0KHNl
bGYpCisKKyAgICBkZWYgcmVhZF9ieXRlcyhzZWxmLCBjb3VudCk6CisgICAgICAgIHJldHVybiBz
ZWxmLl9yZWFkX2J5dGVzKGNvdW50KQorCisKK2NsYXNzIFNtYXJ0U2ltcGxlUGlwZXNDbGllbnRN
ZWRpdW0oU21hcnRDbGllbnRTdHJlYW1NZWRpdW0pOgorICAgICIiIkEgY2xpZW50IG1lZGl1bSB1
c2luZyBzaW1wbGUgcGlwZXMuCisgICAgCisgICAgVGhpcyBjbGllbnQgZG9lcyBub3QgbWFuYWdl
IHRoZSBwaXBlczogaXQgYXNzdW1lcyB0aGV5IHdpbGwgYWx3YXlzIGJlIG9wZW4uCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZGFibGVfcGlwZSwgd3JpdGVhYmxlX3BpcGUp
OgorICAgICAgICBTbWFydENsaWVudFN0cmVhbU1lZGl1bS5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBzZWxmLl9yZWFkYWJsZV9waXBlID0gcmVhZGFibGVfcGlwZQorICAgICAgICBzZWxmLl93cml0
ZWFibGVfcGlwZSA9IHdyaXRlYWJsZV9waXBlCisKKyAgICBkZWYgX2FjY2VwdF9ieXRlcyhzZWxm
LCBieXRlcyk6CisgICAgICAgICIiIlNlZSBTbWFydENsaWVudFN0cmVhbU1lZGl1bS5hY2NlcHRf
Ynl0ZXMuIiIiCisgICAgICAgIHNlbGYuX3dyaXRlYWJsZV9waXBlLndyaXRlKGJ5dGVzKQorCisg
ICAgZGVmIF9mbHVzaChzZWxmKToKKyAgICAgICAgIiIiU2VlIFNtYXJ0Q2xpZW50U3RyZWFtTWVk
aXVtLl9mbHVzaCgpLiIiIgorICAgICAgICBzZWxmLl93cml0ZWFibGVfcGlwZS5mbHVzaCgpCisK
KyAgICBkZWYgX3JlYWRfYnl0ZXMoc2VsZiwgY291bnQpOgorICAgICAgICAiIiJTZWUgU21hcnRD
bGllbnRTdHJlYW1NZWRpdW0uX3JlYWRfYnl0ZXMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9y
ZWFkYWJsZV9waXBlLnJlYWQoY291bnQpCisKKworY2xhc3MgU21hcnRTU0hDbGllbnRNZWRpdW0o
U21hcnRDbGllbnRTdHJlYW1NZWRpdW0pOgorICAgICIiIkEgY2xpZW50IG1lZGl1bSB1c2luZyBT
U0guIiIiCisgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgdXNl
cm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSwKKyAgICAgICAgICAgIHZlbmRvcj1Ob25lKToKKyAg
ICAgICAgIiIiQ3JlYXRlcyBhIGNsaWVudCB0aGF0IHdpbGwgY29ubmVjdCBvbiB0aGUgZmlyc3Qg
dXNlLgorICAgICAgICAKKyAgICAgICAgOnBhcmFtIHZlbmRvcjogQW4gb3B0aW9uYWwgb3ZlcnJp
ZGUgZm9yIHRoZSBzc2ggdmVuZG9yIHRvIHVzZS4gU2VlCisgICAgICAgICAgICBienJsaWIudHJh
bnNwb3J0LnNzaCBmb3IgZGV0YWlscyBvbiBzc2ggdmVuZG9ycy4KKyAgICAgICAgIiIiCisgICAg
ICAgIFNtYXJ0Q2xpZW50U3RyZWFtTWVkaXVtLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYu
X2Nvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAgIHNl
bGYuX3Bhc3N3b3JkID0gcGFzc3dvcmQKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAg
ICAgc2VsZi5fdXNlcm5hbWUgPSB1c2VybmFtZQorICAgICAgICBzZWxmLl9yZWFkX2Zyb20gPSBO
b25lCisgICAgICAgIHNlbGYuX3NzaF9jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl92
ZW5kb3IgPSB2ZW5kb3IKKyAgICAgICAgc2VsZi5fd3JpdGVfdG8gPSBOb25lCisKKyAgICBkZWYg
X2FjY2VwdF9ieXRlcyhzZWxmLCBieXRlcyk6CisgICAgICAgICIiIlNlZSBTbWFydENsaWVudFN0
cmVhbU1lZGl1bS5hY2NlcHRfYnl0ZXMuIiIiCisgICAgICAgIHNlbGYuX2Vuc3VyZV9jb25uZWN0
aW9uKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfdG8ud3JpdGUoYnl0ZXMpCisKKyAgICBkZWYgZGlz
Y29ubmVjdChzZWxmKToKKyAgICAgICAgIiIiU2VlIFNtYXJ0Q2xpZW50TWVkaXVtLmRpc2Nvbm5l
Y3QoKS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICBzZWxmLl9yZWFkX2Zyb20uY2xvc2UoKQorICAgICAgICBzZWxmLl93cml0
ZV90by5jbG9zZSgpCisgICAgICAgIHNlbGYuX3NzaF9jb25uZWN0aW9uLmNsb3NlKCkKKyAgICAg
ICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiBfZW5zdXJlX2Nvbm5lY3Rpb24o
c2VsZik6CisgICAgICAgICIiIkNvbm5lY3QgdGhpcyBtZWRpdW0gaWYgbm90IGFscmVhZHkgY29u
bmVjdGVkLiIiIgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgZXhlY3V0YWJsZSA9IG9zLmVudmlyb24uZ2V0KCdCWlJfUkVNT1RFX1BBVEgn
LCAnYnpyJykKKyAgICAgICAgaWYgc2VsZi5fdmVuZG9yIGlzIE5vbmU6CisgICAgICAgICAgICB2
ZW5kb3IgPSBzc2guX2dldF9zc2hfdmVuZG9yKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHZlbmRvciA9IHNlbGYuX3ZlbmRvcgorICAgICAgICBzZWxmLl9zc2hfY29ubmVjdGlvbiA9IHZl
bmRvci5jb25uZWN0X3NzaChzZWxmLl91c2VybmFtZSwKKyAgICAgICAgICAgICAgICBzZWxmLl9w
YXNzd29yZCwgc2VsZi5faG9zdCwgc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICAgICBjb21tYW5k
PVtleGVjdXRhYmxlLCAnc2VydmUnLCAnLS1pbmV0JywgJy0tZGlyZWN0b3J5PS8nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICctLWFsbG93LXdyaXRlcyddKQorICAgICAgICBzZWxmLl9yZWFk
X2Zyb20sIHNlbGYuX3dyaXRlX3RvID0gXAorICAgICAgICAgICAgc2VsZi5fc3NoX2Nvbm5lY3Rp
b24uZ2V0X2ZpbGVsaWtlX2NoYW5uZWxzKCkKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1
ZQorCisgICAgZGVmIF9mbHVzaChzZWxmKToKKyAgICAgICAgIiIiU2VlIFNtYXJ0Q2xpZW50U3Ry
ZWFtTWVkaXVtLl9mbHVzaCgpLiIiIgorICAgICAgICBzZWxmLl93cml0ZV90by5mbHVzaCgpCisK
KyAgICBkZWYgX3JlYWRfYnl0ZXMoc2VsZiwgY291bnQpOgorICAgICAgICAiIiJTZWUgU21hcnRD
bGllbnRTdHJlYW1NZWRpdW0ucmVhZF9ieXRlcy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nv
bm5lY3RlZDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5NZWRpdW1Ob3RDb25uZWN0ZWQoc2Vs
ZikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfZnJvbS5yZWFkKGNvdW50KQorCisKK2NsYXNz
IFNtYXJ0VENQQ2xpZW50TWVkaXVtKFNtYXJ0Q2xpZW50U3RyZWFtTWVkaXVtKToKKyAgICAiIiJB
IGNsaWVudCBtZWRpdW0gdXNpbmcgVENQLiIiIgorICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0KToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIGNsaWVudCB0aGF0IHdpbGwgY29u
bmVjdCBvbiB0aGUgZmlyc3QgdXNlLiIiIgorICAgICAgICBTbWFydENsaWVudFN0cmVhbU1lZGl1
bS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQorICAgICAg
ICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBz
ZWxmLl9zb2NrZXQgPSBOb25lCisKKyAgICBkZWYgX2FjY2VwdF9ieXRlcyhzZWxmLCBieXRlcyk6
CisgICAgICAgICIiIlNlZSBTbWFydENsaWVudE1lZGl1bS5hY2NlcHRfYnl0ZXMuIiIiCisgICAg
ICAgIHNlbGYuX2Vuc3VyZV9jb25uZWN0aW9uKCkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRh
bGwoYnl0ZXMpCisKKyAgICBkZWYgZGlzY29ubmVjdChzZWxmKToKKyAgICAgICAgIiIiU2VlIFNt
YXJ0Q2xpZW50TWVkaXVtLmRpc2Nvbm5lY3QoKS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nv
bm5lY3RlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9zb2NrZXQuY2xvc2Uo
KQorICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9
IEZhbHNlCisKKyAgICBkZWYgX2Vuc3VyZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAiIiJD
b25uZWN0IHRoaXMgbWVkaXVtIGlmIG5vdCBhbHJlYWR5IGNvbm5lY3RlZC4iIiIKKyAgICAgICAg
aWYgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3Nv
Y2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2V0c29ja29wdChz
b2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5UQ1BfTk9ERUxBWSwgMSkKKyAgICAgICAgcmVzdWx0
ID0gc2VsZi5fc29ja2V0LmNvbm5lY3RfZXgoKHNlbGYuX2hvc3QsIGludChzZWxmLl9wb3J0KSkp
CisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Db25uZWN0aW9u
RXJyb3IoImZhaWxlZCB0byBjb25uZWN0IHRvICVzOiVkOiAlcyIgJQorICAgICAgICAgICAgICAg
ICAgICAoc2VsZi5faG9zdCwgc2VsZi5fcG9ydCwgb3Muc3RyZXJyb3IocmVzdWx0KSkpCisgICAg
ICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKKworICAgIGRlZiBfZmx1c2goc2VsZik6CisgICAg
ICAgICIiIlNlZSBTbWFydENsaWVudFN0cmVhbU1lZGl1bS5fZmx1c2goKS4KKyAgICAgICAgCisg
ICAgICAgIEZvciBUQ1Agd2UgZG8gbm8gZmx1c2hpbmcuIFdlIG1heSB3YW50IHRvIHR1cm4gb2Zm
IFRDUF9OT0RFTEFZIGFuZCAKKyAgICAgICAgYWRkIGEgbWVhbnMgdG8gZG8gYSBmbHVzaCwgYnV0
IHRoYXQgY2FuIGJlIGRvbmUgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYg
X3JlYWRfYnl0ZXMoc2VsZiwgY291bnQpOgorICAgICAgICAiIiJTZWUgU21hcnRDbGllbnRNZWRp
dW0ucmVhZF9ieXRlcy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAg
ICAgICAgIHJhaXNlIGVycm9ycy5NZWRpdW1Ob3RDb25uZWN0ZWQoc2VsZikKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3NvY2tldC5yZWN2KGNvdW50KQorCisKK2NsYXNzIFNtYXJ0Q2xpZW50U3RyZWFt
TWVkaXVtUmVxdWVzdChTbWFydENsaWVudE1lZGl1bVJlcXVlc3QpOgorICAgICIiIkEgU21hcnRD
bGllbnRNZWRpdW1SZXF1ZXN0IHRoYXQgd29ya3Mgd2l0aCBhbiBTbWFydENsaWVudFN0cmVhbU1l
ZGl1bS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZWRpdW0pOgorICAgICAgICBTbWFy
dENsaWVudE1lZGl1bVJlcXVlc3QuX19pbml0X18oc2VsZiwgbWVkaXVtKQorICAgICAgICAjIGNo
ZWNrIHRoYXQgd2UgYXJlIHNhZmUgY29uY3VycmVuY3kgd2lzZS4gSWYgc29tZSBzdHJlYW1zIHN0
YXJ0CisgICAgICAgICMgYWxsb3dpbmcgY29uY3VycmVudCByZXF1ZXN0cyAtIGkuZS4gdmlhIG11
bHRpcGxleGluZyAtIHRoZW4gdGhpcworICAgICAgICAjIGFzc2VydCBzaG91bGQgYmUgbW92ZWQg
dG8gU21hcnRDbGllbnRTdHJlYW1NZWRpdW0uZ2V0X3JlcXVlc3QsCisgICAgICAgICMgYW5kIHRo
ZSBzZXR0aW5nL3Vuc2V0dGluZyBvZiBfY3VycmVudF9yZXF1ZXN0IGxpa2V3aXNlIG1vdmVkIGlu
dG8KKyAgICAgICAgIyB0aGF0IGNsYXNzIDogYnV0IGl0cyB1bm5lZWRlZCBvdmVyaGVhZCBmb3Ig
bm93LiBSQkMgMjAwNjA5MjIKKyAgICAgICAgaWYgc2VsZi5fbWVkaXVtLl9jdXJyZW50X3JlcXVl
c3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9vTWFueUNvbmN1cnJl
bnRSZXF1ZXN0cyhzZWxmLl9tZWRpdW0pCisgICAgICAgIHNlbGYuX21lZGl1bS5fY3VycmVudF9y
ZXF1ZXN0ID0gc2VsZgorCisgICAgZGVmIF9hY2NlcHRfYnl0ZXMoc2VsZiwgYnl0ZXMpOgorICAg
ICAgICAiIiJTZWUgU21hcnRDbGllbnRNZWRpdW1SZXF1ZXN0Ll9hY2NlcHRfYnl0ZXMuCisgICAg
ICAgIAorICAgICAgICBUaGlzIGZvcndhcmRzIHRvIHNlbGYuX21lZGl1bS5fYWNjZXB0X2J5dGVz
IGJlY2F1c2Ugd2UgYXJlIG9wZXJhdGluZworICAgICAgICBvbiB0aGUgbWVkaXVtcyBzdHJlYW0u
CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9tZWRpdW0uX2FjY2VwdF9ieXRlcyhieXRlcykK
KworICAgIGRlZiBfZmluaXNoZWRfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiU2VlIFNtYXJ0
Q2xpZW50TWVkaXVtUmVxdWVzdC5fZmluaXNoZWRfcmVhZGluZy4KKworICAgICAgICBUaGlzIGNs
ZWFycyB0aGUgX2N1cnJlbnRfcmVxdWVzdCBvbiBzZWxmLl9tZWRpdW0gdG8gYWxsb3cgYSBuZXcg
CisgICAgICAgIHJlcXVlc3QgdG8gYmUgY3JlYXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGFz
c2VydCBzZWxmLl9tZWRpdW0uX2N1cnJlbnRfcmVxdWVzdCBpcyBzZWxmCisgICAgICAgIHNlbGYu
X21lZGl1bS5fY3VycmVudF9yZXF1ZXN0ID0gTm9uZQorICAgICAgICAKKyAgICBkZWYgX2Zpbmlz
aGVkX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIlNlZSBTbWFydENsaWVudE1lZGl1bVJlcXVl
c3QuX2ZpbmlzaGVkX3dyaXRpbmcuCisKKyAgICAgICAgVGhpcyBpbnZva2VzIHNlbGYuX21lZGl1
bS5fZmx1c2ggdG8gZW5zdXJlIGFsbCBieXRlcyBhcmUgdHJhbnNtaXR0ZWQuCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9tZWRpdW0uX2ZsdXNoKCkKKworICAgIGRlZiBfcmVhZF9ieXRlcyhz
ZWxmLCBjb3VudCk6CisgICAgICAgICIiIlNlZSBTbWFydENsaWVudE1lZGl1bVJlcXVlc3QuX3Jl
YWRfYnl0ZXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGZvcndhcmRzIHRvIHNlbGYuX21lZGl1
bS5fcmVhZF9ieXRlcyBiZWNhdXNlIHdlIGFyZSBvcGVyYXRpbmcKKyAgICAgICAgb24gdGhlIG1l
ZGl1bXMgc3RyZWFtLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21lZGl1bS5f
cmVhZF9ieXRlcyhjb3VudCkKKwoK

=== added file bzrlib/smart/protocol.py // file-id:protocol.py-20061108035435-o
... t0lstk2590yqhzr-1 // last-changed:andrew.bennetts@canonical.com-20070426060
... 131-zaumabdzwl8nrlux // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L3Byb3RvY29sLnB5CkBAIC0wLDAgKzEsNDI5
IEBACisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s
IE1BICAwMjExMS0xMzA3ICBVU0EKKworIiIiV2lyZS1sZXZlbCBlbmNvZGluZyBhbmQgZGVjb2Rp
bmcgb2YgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBmb3IgdGhlIHNtYXJ0CitjbGllbnQgYW5kIHNl
cnZlci4KKyIiIgorCisKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIGJ6
cmxpYiBpbXBvcnQgZXJyb3JzCitmcm9tIGJ6cmxpYi5zbWFydCBpbXBvcnQgcmVxdWVzdAorCisK
KyMgUHJvdG9jb2wgdmVyc2lvbiBzdHJpbmdzLiAgVGhlc2UgYXJlIHNlbnQgYXMgcHJlZml4ZXMg
b2YgYnpyIHJlcXVlc3RzIGFuZAorIyByZXNwb25zZXMgdG8gaWRlbnRpZnkgdGhlIHByb3RvY29s
IHZlcnNpb24gYmVpbmcgdXNlZC4gKFRoZXJlIGFyZSBubyB2ZXJzaW9uCisjIG9uZSBzdHJpbmdz
IGJlY2F1c2UgdGhhdCB2ZXJzaW9uIGRvZXNuJ3Qgc2VuZCBhbnkpLgorUkVRVUVTVF9WRVJTSU9O
X1RXTyA9ICdienIgcmVxdWVzdCAyXG4nCitSRVNQT05TRV9WRVJTSU9OX1RXTyA9ICdienIgcmVz
cG9uc2UgMlxuJworCisKK2RlZiBfcmVjdl90dXBsZShmcm9tX2ZpbGUpOgorICAgIHJlcV9saW5l
ID0gZnJvbV9maWxlLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gX2RlY29kZV90dXBsZShyZXFfbGlu
ZSkKKworCitkZWYgX2RlY29kZV90dXBsZShyZXFfbGluZSk6CisgICAgaWYgcmVxX2xpbmUgPT0g
Tm9uZSBvciByZXFfbGluZSA9PSAnJzoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiByZXFf
bGluZVstMV0gIT0gJ1xuJzoKKyAgICAgICAgcmFpc2UgZXJyb3JzLlNtYXJ0UHJvdG9jb2xFcnJv
cigicmVxdWVzdCAlciBub3QgdGVybWluYXRlZCIgJSByZXFfbGluZSkKKyAgICByZXR1cm4gdHVw
bGUocmVxX2xpbmVbOi0xXS5zcGxpdCgnXHgwMScpKQorCisKK2RlZiBfZW5jb2RlX3R1cGxlKGFy
Z3MpOgorICAgICIiIkVuY29kZSB0aGUgdHVwbGUgYXJncyB0byBhIGJ5dGVzdHJlYW0uIiIiCisg
ICAgcmV0dXJuICdceDAxJy5qb2luKGFyZ3MpICsgJ1xuJworCisKK2NsYXNzIFNtYXJ0UHJvdG9j
b2xCYXNlKG9iamVjdCk6CisgICAgIiIiTWV0aG9kcyBjb21tb24gdG8gY2xpZW50IGFuZCBzZXJ2
ZXIiIiIKKworICAgICMgVE9ETzogdGhpcyBvbmx5IGFjdHVhbGx5IGFjY29tb2RhdGVzIGEgc2lu
Z2xlIGJsb2NrOyBwb3NzaWJseSBzaG91bGQKKyAgICAjIHN1cHBvcnQgbXVsdGlwbGUgY2h1bmtz
PworICAgIGRlZiBfZW5jb2RlX2J1bGtfZGF0YShzZWxmLCBib2R5KToKKyAgICAgICAgIiIiRW5j
b2RlIGJvZHkgYXMgYSBidWxrIGRhdGEgY2h1bmsuIiIiCisgICAgICAgIHJldHVybiAnJy5qb2lu
KCgnJWRcbicgJSBsZW4oYm9keSksIGJvZHksICdkb25lXG4nKSkKKworICAgIGRlZiBfc2VyaWFs
aXNlX29mZnNldHMoc2VsZiwgb2Zmc2V0cyk6CisgICAgICAgICIiIlNlcmlhbGlzZSBhIHJlYWR2
IG9mZnNldCBsaXN0LiIiIgorICAgICAgICB0eHQgPSBbXQorICAgICAgICBmb3Igc3RhcnQsIGxl
bmd0aCBpbiBvZmZzZXRzOgorICAgICAgICAgICAgdHh0LmFwcGVuZCgnJWQsJWQnICUgKHN0YXJ0
LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHR4dCkKKyAgICAgICAgCisKK2Ns
YXNzIFNtYXJ0U2VydmVyUmVxdWVzdFByb3RvY29sT25lKFNtYXJ0UHJvdG9jb2xCYXNlKToKKyAg
ICAiIiJTZXJ2ZXItc2lkZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgbG9naWMgZm9yIHNtYXJ0IHZl
cnNpb24gMS4iIiIKKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmFja2luZ190cmFuc3Bv
cnQsIHdyaXRlX2Z1bmMpOgorICAgICAgICBzZWxmLl9iYWNraW5nX3RyYW5zcG9ydCA9IGJhY2tp
bmdfdHJhbnNwb3J0CisgICAgICAgIHNlbGYuZXhjZXNzX2J1ZmZlciA9ICcnCisgICAgICAgIHNl
bGYuX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbl9idWZmZXIgPSAnJworICAgICAg
ICBzZWxmLmhhc19kaXNwYXRjaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZXF1ZXN0ID0gTm9u
ZQorICAgICAgICBzZWxmLl9ib2R5X2RlY29kZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dyaXRl
X2Z1bmMgPSB3cml0ZV9mdW5jCisKKyAgICBkZWYgYWNjZXB0X2J5dGVzKHNlbGYsIGJ5dGVzKToK
KyAgICAgICAgIiIiVGFrZSBieXRlcywgYW5kIGFkdmFuY2UgdGhlIGludGVybmFsIHN0YXRlIG1h
Y2hpbmUgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgCisgICAgICAgIDpwYXJhbSBieXRlczogbXVz
dCBiZSBhIGJ5dGUgc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShieXRlcywgc3RyKQorICAgICAgICBzZWxmLmluX2J1ZmZlciArPSBieXRlcworICAgICAgICBp
ZiBub3Qgc2VsZi5oYXNfZGlzcGF0Y2hlZDoKKyAgICAgICAgICAgIGlmICdcbicgbm90IGluIHNl
bGYuaW5fYnVmZmVyOgorICAgICAgICAgICAgICAgICMgbm8gY29tbWFuZCBsaW5lIHlldAorICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5oYXNfZGlzcGF0Y2hlZCA9IFRy
dWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lLCBzZWxmLmlu
X2J1ZmZlciA9IHNlbGYuaW5fYnVmZmVyLnNwbGl0KCdcbicsIDEpCisgICAgICAgICAgICAgICAg
Zmlyc3RfbGluZSArPSAnXG4nCisgICAgICAgICAgICAgICAgcmVxX2FyZ3MgPSBfZGVjb2RlX3R1
cGxlKGZpcnN0X2xpbmUpCisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0ID0gcmVxdWVzdC5T
bWFydFNlcnZlclJlcXVlc3RIYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWNr
aW5nX3RyYW5zcG9ydCwgY29tbWFuZHM9cmVxdWVzdC5yZXF1ZXN0X2hhbmRsZXJzKQorICAgICAg
ICAgICAgICAgIHNlbGYucmVxdWVzdC5kaXNwYXRjaF9jb21tYW5kKHJlcV9hcmdzWzBdLCByZXFf
YXJnc1sxOl0pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LmZpbmlzaGVkX3JlYWRp
bmc6CisgICAgICAgICAgICAgICAgICAgICMgdHJpdmlhbCByZXF1ZXN0CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZXhjZXNzX2J1ZmZlciA9IHNlbGYuaW5fYnVmZmVyCisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuaW5fYnVmZmVyID0gJycKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vu
ZF9yZXNwb25zZShzZWxmLnJlcXVlc3QucmVzcG9uc2UpCisgICAgICAgICAgICBleGNlcHQgS2V5
Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb24sIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgZWxz
ZTogcGFzcyB0byBjbGllbnQsIGZsdXNoLCBhbmQgcXVpdAorICAgICAgICAgICAgICAgIHNlbGYu
X3NlbmRfcmVzcG9uc2UocmVxdWVzdC5GYWlsZWRTbWFydFNlcnZlclJlc3BvbnNlKAorICAgICAg
ICAgICAgICAgICAgICAoJ2Vycm9yJywgc3RyKGV4Y2VwdGlvbikpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmhhc19kaXNwYXRjaGVkOgorICAgICAgICAgICAg
aWYgc2VsZi5fZmluaXNoZWQ6CisgICAgICAgICAgICAgICAgIyBub3RoaW5nIHRvIGRvLlhYWDog
dGhpcyByb3V0aW5lIHNob3VsZCBiZSBhIHNpbmdsZSBzdGF0ZSAKKyAgICAgICAgICAgICAgICAj
IG1hY2hpbmUgdG9vLgorICAgICAgICAgICAgICAgIHNlbGYuZXhjZXNzX2J1ZmZlciArPSBzZWxm
LmluX2J1ZmZlcgorICAgICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gJycKKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIHNlbGYuX2JvZHlfZGVjb2RlciBpcyBOb25l
OgorICAgICAgICAgICAgICAgIHNlbGYuX2JvZHlfZGVjb2RlciA9IExlbmd0aFByZWZpeGVkQm9k
eURlY29kZXIoKQorICAgICAgICAgICAgc2VsZi5fYm9keV9kZWNvZGVyLmFjY2VwdF9ieXRlcyhz
ZWxmLmluX2J1ZmZlcikKKyAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gc2VsZi5fYm9keV9k
ZWNvZGVyLnVudXNlZF9kYXRhCisgICAgICAgICAgICBib2R5X2RhdGEgPSBzZWxmLl9ib2R5X2Rl
Y29kZXIucmVhZF9wZW5kaW5nX2RhdGEoKQorICAgICAgICAgICAgc2VsZi5yZXF1ZXN0LmFjY2Vw
dF9ib2R5KGJvZHlfZGF0YSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2JvZHlfZGVjb2Rlci5maW5p
c2hlZF9yZWFkaW5nOgorICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdC5lbmRfb2ZfYm9keSgp
CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYucmVxdWVzdC5maW5pc2hlZF9yZWFkaW5nLCBc
CisgICAgICAgICAgICAgICAgICAgICJubyBtb3JlIGJvZHksIHJlcXVlc3Qgbm90IGZpbmlzaGVk
IgorICAgICAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LnJlc3BvbnNlIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3NlbmRfcmVzcG9uc2Uoc2VsZi5yZXF1ZXN0LnJlc3BvbnNlKQor
ICAgICAgICAgICAgICAgIHNlbGYuZXhjZXNzX2J1ZmZlciA9IHNlbGYuaW5fYnVmZmVyCisgICAg
ICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSAnJworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYucmVxdWVzdC5maW5pc2hlZF9yZWFkaW5nLCBcCisg
ICAgICAgICAgICAgICAgICAgICJubyByZXNwb25zZSBhbmQgd2UgaGF2ZSBmaW5pc2hlZCByZWFk
aW5nLiIKKworICAgIGRlZiBfc2VuZF9yZXNwb25zZShzZWxmLCByZXNwb25zZSk6CisgICAgICAg
ICIiIlNlbmQgYSBzbWFydCBzZXJ2ZXIgcmVzcG9uc2UgZG93biB0aGUgb3V0cHV0IHN0cmVhbS4i
IiIKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9maW5pc2hlZCwgJ3Jlc3BvbnNlIGFscmVhZHkg
c2VudCcKKyAgICAgICAgYXJncyA9IHJlc3BvbnNlLmFyZ3MKKyAgICAgICAgYm9keSA9IHJlc3Bv
bnNlLmJvZHkKKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX3dy
aXRlX3Byb3RvY29sX3ZlcnNpb24oKQorICAgICAgICBzZWxmLl93cml0ZV9zdWNjZXNzX29yX2Zh
aWx1cmVfcHJlZml4KHJlc3BvbnNlKQorICAgICAgICBzZWxmLl93cml0ZV9mdW5jKF9lbmNvZGVf
dHVwbGUoYXJncykpCisgICAgICAgIGlmIGJvZHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShib2R5LCBzdHIpLCAnYm9keSBtdXN0IGJlIGEgc3RyJworICAgICAg
ICAgICAgYnl0ZXMgPSBzZWxmLl9lbmNvZGVfYnVsa19kYXRhKGJvZHkpCisgICAgICAgICAgICBz
ZWxmLl93cml0ZV9mdW5jKGJ5dGVzKQorCisgICAgZGVmIF93cml0ZV9wcm90b2NvbF92ZXJzaW9u
KHNlbGYpOgorICAgICAgICAiIiJXcml0ZSBhbnkgcHJlZml4ZXMgdGhpcyBwcm90b2NvbCByZXF1
aXJlcy4KKyAgICAgICAgCisgICAgICAgIFZlcnNpb24gb25lIGRvZXNuJ3Qgc2VuZCBwcm90b2Nv
bCB2ZXJzaW9ucy4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgX3dyaXRlX3N1Y2Nlc3Nfb3JfZmFp
bHVyZV9wcmVmaXgoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICAiIiJXcml0ZSB0aGUgcHJvdG9j
b2wgc3BlY2lmaWMgc3VjY2Vzcy9mYWlsdXJlIHByZWZpeC4KKworICAgICAgICBGb3IgU21hcnRT
ZXJ2ZXJSZXF1ZXN0UHJvdG9jb2xPbmUgdGhpcyBpcyBvbWl0dGVkIGJ1dCB3ZQorICAgICAgICBj
YWxsIGlzX3N1Y2Nlc3NmdWwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGlzIHZhbGlkLgor
ICAgICAgICAiIiIKKyAgICAgICAgcmVzcG9uc2UuaXNfc3VjY2Vzc2Z1bCgpCisKKyAgICBkZWYg
bmV4dF9yZWFkX3NpemUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2ZpbmlzaGVkOgorICAgICAg
ICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgc2VsZi5fYm9keV9kZWNvZGVyIGlzIE5vbmU6Cisg
ICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX2JvZHlfZGVjb2Rlci5uZXh0X3JlYWRfc2l6ZSgpCisKKworY2xhc3MgU21hcnRTZXJ2ZXJS
ZXF1ZXN0UHJvdG9jb2xUd28oU21hcnRTZXJ2ZXJSZXF1ZXN0UHJvdG9jb2xPbmUpOgorICAgIHIi
IiJWZXJzaW9uIHR3byBvZiB0aGUgc2VydmVyIHNpZGUgb2YgdGhlIHNtYXJ0IHByb3RvY29sLgor
ICAgCisgICAgVGhpcyBwcmVmaXhlcyByZXNwb25zZXMgd2l0aCB0aGUgdmFsdWUgb2YgUkVTUE9O
U0VfVkVSU0lPTl9UV08uCisgICAgIiIiCisKKyAgICBkZWYgX3dyaXRlX3N1Y2Nlc3Nfb3JfZmFp
bHVyZV9wcmVmaXgoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICAiIiJXcml0ZSB0aGUgcHJvdG9j
b2wgc3BlY2lmaWMgc3VjY2Vzcy9mYWlsdXJlIHByZWZpeC4iIiIKKyAgICAgICAgaWYgcmVzcG9u
c2UuaXNfc3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnVuYygnc3VjY2Vz
c1xuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1bmMoJ2ZhaWxl
ZFxuJykKKworICAgIGRlZiBfd3JpdGVfcHJvdG9jb2xfdmVyc2lvbihzZWxmKToKKyAgICAgICAg
ciIiIldyaXRlIGFueSBwcmVmaXhlcyB0aGlzIHByb3RvY29sIHJlcXVpcmVzLgorICAgICAgICAK
KyAgICAgICAgVmVyc2lvbiB0d28gc2VuZHMgdGhlIHZhbHVlIG9mIFJFU1BPTlNFX1ZFUlNJT05f
VFdPLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fd3JpdGVfZnVuYyhSRVNQT05TRV9WRVJT
SU9OX1RXTykKKworCitjbGFzcyBMZW5ndGhQcmVmaXhlZEJvZHlEZWNvZGVyKG9iamVjdCk6Cisg
ICAgIiIiRGVjb2RlcyB0aGUgbGVuZ3RoLXByZWZpeGVkIGJ1bGsgZGF0YS4iIiIKKyAgICAKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYnl0ZXNfbGVmdCA9IE5vbmUKKyAg
ICAgICAgc2VsZi5maW5pc2hlZF9yZWFkaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi51bnVzZWRf
ZGF0YSA9ICcnCisgICAgICAgIHNlbGYuc3RhdGVfYWNjZXB0ID0gc2VsZi5fc3RhdGVfYWNjZXB0
X2V4cGVjdGluZ19sZW5ndGgKKyAgICAgICAgc2VsZi5zdGF0ZV9yZWFkID0gc2VsZi5fc3RhdGVf
cmVhZF9ub19kYXRhCisgICAgICAgIHNlbGYuX2luX2J1ZmZlciA9ICcnCisgICAgICAgIHNlbGYu
X3RyYWlsZXJfYnVmZmVyID0gJycKKyAgICAKKyAgICBkZWYgYWNjZXB0X2J5dGVzKHNlbGYsIGJ5
dGVzKToKKyAgICAgICAgIiIiRGVjb2RlIGFzIG11Y2ggb2YgYnl0ZXMgYXMgcG9zc2libGUuCisK
KyAgICAgICAgSWYgJ2J5dGVzJyBjb250YWlucyB0b28gbXVjaCBkYXRhIGl0IHdpbGwgYmUgYXBw
ZW5kZWQgdG8KKyAgICAgICAgc2VsZi51bnVzZWRfZGF0YS4KKworICAgICAgICBmaW5pc2hlZF9y
ZWFkaW5nIHdpbGwgYmUgc2V0IHdoZW4gbm8gbW9yZSBkYXRhIGlzIHJlcXVpcmVkLiAgRnVydGhl
cgorICAgICAgICBkYXRhIHdpbGwgYmUgYXBwZW5kZWQgdG8gc2VsZi51bnVzZWRfZGF0YS4KKyAg
ICAgICAgIiIiCisgICAgICAgICMgYWNjZXB0X2J5dGVzIGlzIGFsbG93ZWQgdG8gY2hhbmdlIHRo
ZSBzdGF0ZQorICAgICAgICBjdXJyZW50X3N0YXRlID0gc2VsZi5zdGF0ZV9hY2NlcHQKKyAgICAg
ICAgc2VsZi5zdGF0ZV9hY2NlcHQoYnl0ZXMpCisgICAgICAgIHdoaWxlIGN1cnJlbnRfc3RhdGUg
IT0gc2VsZi5zdGF0ZV9hY2NlcHQ6CisgICAgICAgICAgICBjdXJyZW50X3N0YXRlID0gc2VsZi5z
dGF0ZV9hY2NlcHQKKyAgICAgICAgICAgIHNlbGYuc3RhdGVfYWNjZXB0KCcnKQorCisgICAgZGVm
IG5leHRfcmVhZF9zaXplKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmJ5dGVzX2xlZnQgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAjIElkZWFsbHkgd2Ugd2FudCB0byByZWFkIGFsbCB0aGUgcmVt
YWluZGVyIG9mIHRoZSBib2R5IGFuZCB0aGUKKyAgICAgICAgICAgICMgdHJhaWxlciBpbiBvbmUg
Z28uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlc19sZWZ0ICsgNQorICAgICAgICBlbGlm
IHNlbGYuc3RhdGVfYWNjZXB0ID09IHNlbGYuX3N0YXRlX2FjY2VwdF9yZWFkaW5nX3RyYWlsZXI6
CisgICAgICAgICAgICAjIEp1c3QgdGhlIHRyYWlsZXIgbGVmdAorICAgICAgICAgICAgcmV0dXJu
IDUgLSBsZW4oc2VsZi5fdHJhaWxlcl9idWZmZXIpCisgICAgICAgIGVsaWYgc2VsZi5zdGF0ZV9h
Y2NlcHQgPT0gc2VsZi5fc3RhdGVfYWNjZXB0X2V4cGVjdGluZ19sZW5ndGg6CisgICAgICAgICAg
ICAjIFRoZXJlJ3Mgc3RpbGwgYXQgbGVhc3QgNiBieXRlcyBsZWZ0ICgnXG4nIHRvIGVuZCB0aGUg
bGVuZ3RoLCBwbHVzCisgICAgICAgICAgICAjICdkb25lXG4nKS4KKyAgICAgICAgICAgIHJldHVy
biA2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFJlYWRpbmcgZXhjZXNzIGRhdGEuICBF
aXRoZXIgd2F5LCAxIGJ5dGUgYXQgYSB0aW1lIGlzIGZpbmUuCisgICAgICAgICAgICByZXR1cm4g
MQorICAgICAgICAKKyAgICBkZWYgcmVhZF9wZW5kaW5nX2RhdGEoc2VsZik6CisgICAgICAgICIi
IlJldHVybiBhbnkgcGVuZGluZyBkYXRhIHRoYXQgaGFzIGJlZW4gZGVjb2RlZC4iIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuc3RhdGVfcmVhZCgpCisKKyAgICBkZWYgX3N0YXRlX2FjY2VwdF9leHBl
Y3RpbmdfbGVuZ3RoKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgc2VsZi5faW5fYnVmZmVyICs9IGJ5
dGVzCisgICAgICAgIHBvcyA9IHNlbGYuX2luX2J1ZmZlci5maW5kKCdcbicpCisgICAgICAgIGlm
IHBvcyA9PSAtMToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmJ5dGVzX2xlZnQg
PSBpbnQoc2VsZi5faW5fYnVmZmVyWzpwb3NdKQorICAgICAgICBzZWxmLl9pbl9idWZmZXIgPSBz
ZWxmLl9pbl9idWZmZXJbcG9zKzE6XQorICAgICAgICBzZWxmLmJ5dGVzX2xlZnQgLT0gbGVuKHNl
bGYuX2luX2J1ZmZlcikKKyAgICAgICAgc2VsZi5zdGF0ZV9hY2NlcHQgPSBzZWxmLl9zdGF0ZV9h
Y2NlcHRfcmVhZGluZ19ib2R5CisgICAgICAgIHNlbGYuc3RhdGVfcmVhZCA9IHNlbGYuX3N0YXRl
X3JlYWRfaW5fYnVmZmVyCisKKyAgICBkZWYgX3N0YXRlX2FjY2VwdF9yZWFkaW5nX2JvZHkoc2Vs
ZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLl9pbl9idWZmZXIgKz0gYnl0ZXMKKyAgICAgICAgc2Vs
Zi5ieXRlc19sZWZ0IC09IGxlbihieXRlcykKKyAgICAgICAgaWYgc2VsZi5ieXRlc19sZWZ0IDw9
IDA6CisgICAgICAgICAgICAjIEZpbmlzaGVkIHdpdGggYm9keQorICAgICAgICAgICAgaWYgc2Vs
Zi5ieXRlc19sZWZ0ICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5fdHJhaWxlcl9idWZmZXIg
PSBzZWxmLl9pbl9idWZmZXJbc2VsZi5ieXRlc19sZWZ0Ol0KKyAgICAgICAgICAgICAgICBzZWxm
Ll9pbl9idWZmZXIgPSBzZWxmLl9pbl9idWZmZXJbOnNlbGYuYnl0ZXNfbGVmdF0KKyAgICAgICAg
ICAgIHNlbGYuYnl0ZXNfbGVmdCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc3RhdGVfYWNjZXB0
ID0gc2VsZi5fc3RhdGVfYWNjZXB0X3JlYWRpbmdfdHJhaWxlcgorICAgICAgICAKKyAgICBkZWYg
X3N0YXRlX2FjY2VwdF9yZWFkaW5nX3RyYWlsZXIoc2VsZiwgYnl0ZXMpOgorICAgICAgICBzZWxm
Ll90cmFpbGVyX2J1ZmZlciArPSBieXRlcworICAgICAgICAjIFRPRE86IHdoYXQgaWYgdGhlIHRy
YWlsZXIgZG9lcyBub3QgbWF0Y2ggImRvbmVcbiI/ICBTaG91bGQgdGhpcyByYWlzZQorICAgICAg
ICAjIGEgUHJvdG9jb2xWaW9sYXRpb24gZXhjZXB0aW9uPworICAgICAgICBpZiBzZWxmLl90cmFp
bGVyX2J1ZmZlci5zdGFydHN3aXRoKCdkb25lXG4nKToKKyAgICAgICAgICAgIHNlbGYudW51c2Vk
X2RhdGEgPSBzZWxmLl90cmFpbGVyX2J1ZmZlcltsZW4oJ2RvbmVcbicpOl0KKyAgICAgICAgICAg
IHNlbGYuc3RhdGVfYWNjZXB0ID0gc2VsZi5fc3RhdGVfYWNjZXB0X3JlYWRpbmdfdW51c2VkCisg
ICAgICAgICAgICBzZWxmLmZpbmlzaGVkX3JlYWRpbmcgPSBUcnVlCisgICAgCisgICAgZGVmIF9z
dGF0ZV9hY2NlcHRfcmVhZGluZ191bnVzZWQoc2VsZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLnVu
dXNlZF9kYXRhICs9IGJ5dGVzCisKKyAgICBkZWYgX3N0YXRlX3JlYWRfbm9fZGF0YShzZWxmKToK
KyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgX3N0YXRlX3JlYWRfaW5fYnVmZmVyKHNlbGYp
OgorICAgICAgICByZXN1bHQgPSBzZWxmLl9pbl9idWZmZXIKKyAgICAgICAgc2VsZi5faW5fYnVm
ZmVyID0gJycKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKK2NsYXNzIFNtYXJ0Q2xpZW50UmVx
dWVzdFByb3RvY29sT25lKFNtYXJ0UHJvdG9jb2xCYXNlKToKKyAgICAiIiJUaGUgY2xpZW50LXNp
ZGUgcHJvdG9jb2wgZm9yIHNtYXJ0IHZlcnNpb24gMS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgU21hcnRDbGllbnRSZXF1ZXN0
UHJvdG9jb2xPbmUuCisKKyAgICAgICAgOnBhcmFtIHJlcXVlc3Q6IEEgU21hcnRDbGllbnRNZWRp
dW1SZXF1ZXN0IHRvIHNlcmlhbGlzZSBvbnRvIGFuZAorICAgICAgICAgICAgZGVzZXJpYWxpc2Ug
ZnJvbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0CisgICAg
ICAgIHNlbGYuX2JvZHlfYnVmZmVyID0gTm9uZQorCisgICAgZGVmIGNhbGwoc2VsZiwgKmFyZ3Mp
OgorICAgICAgICBzZWxmLl93cml0ZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qu
ZmluaXNoZWRfd3JpdGluZygpCisKKyAgICBkZWYgY2FsbF93aXRoX2JvZHlfYnl0ZXMoc2VsZiwg
YXJncywgYm9keSk6CisgICAgICAgICIiIk1ha2UgYSByZW1vdGUgY2FsbCBvZiBhcmdzIHdpdGgg
Ym9keSBieXRlcyAnYm9keScuCisKKyAgICAgICAgQWZ0ZXIgY2FsbGluZyB0aGlzLCBjYWxsIHJl
YWRfcmVzcG9uc2VfdHVwbGUgdG8gZmluZCB0aGUgcmVzdWx0IG91dC4KKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYuX3dyaXRlX2FyZ3MoYXJncykKKyAgICAgICAgYnl0ZXMgPSBzZWxmLl9lbmNv
ZGVfYnVsa19kYXRhKGJvZHkpCisgICAgICAgIHNlbGYuX3JlcXVlc3QuYWNjZXB0X2J5dGVzKGJ5
dGVzKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmZpbmlzaGVkX3dyaXRpbmcoKQorCisgICAgZGVm
IGNhbGxfd2l0aF9ib2R5X3JlYWR2X2FycmF5KHNlbGYsIGFyZ3MsIGJvZHkpOgorICAgICAgICAi
IiJNYWtlIGEgcmVtb3RlIGNhbGwgd2l0aCBhIHJlYWR2IGFycmF5LgorCisgICAgICAgIFRoZSBi
b2R5IGlzIGVuY29kZWQgd2l0aCBvbmUgbGluZSBwZXIgcmVhZHYgb2Zmc2V0IHBhaXIuIFRoZSBu
dW1iZXJzIGluCisgICAgICAgIGVhY2ggcGFpciBhcmUgc2VwYXJhdGVkIGJ5IGEgY29tbWEsIGFu
ZCBubyB0cmFpbGluZyBcbiBpcyBlbWl0dGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5f
d3JpdGVfYXJncyhhcmdzKQorICAgICAgICByZWFkdl9ieXRlcyA9IHNlbGYuX3NlcmlhbGlzZV9v
ZmZzZXRzKGJvZHkpCisgICAgICAgIGJ5dGVzID0gc2VsZi5fZW5jb2RlX2J1bGtfZGF0YShyZWFk
dl9ieXRlcykKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5hY2NlcHRfYnl0ZXMoYnl0ZXMpCisgICAg
ICAgIHNlbGYuX3JlcXVlc3QuZmluaXNoZWRfd3JpdGluZygpCisKKyAgICBkZWYgY2FuY2VsX3Jl
YWRfYm9keShzZWxmKToKKyAgICAgICAgIiIiQWZ0ZXIgZXhwZWN0aW5nIGEgYm9keSwgYSByZXNw
b25zZSBjb2RlIG1heSBpbmRpY2F0ZSBvbmUgb3RoZXJ3aXNlLgorCisgICAgICAgIFRoaXMgbWV0
aG9kIGxldHMgdGhlIGRvbWFpbiBjbGllbnQgaW5mb3JtIHRoZSBwcm90b2NvbCB0aGF0IG5vIGJv
ZHkKKyAgICAgICAgd2lsbCBiZSB0cmFuc21pdHRlZC4gVGhpcyBpcyBhIHRlcm1pbmFsIG1ldGhv
ZDogYWZ0ZXIgY2FsbGluZyBpdCB0aGUKKyAgICAgICAgcHJvdG9jb2wgaXMgbm90IGFibGUgdG8g
YmUgdXNlZCBmdXJ0aGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5maW5p
c2hlZF9yZWFkaW5nKCkKKworICAgIGRlZiByZWFkX3Jlc3BvbnNlX3R1cGxlKHNlbGYsIGV4cGVj
dF9ib2R5PUZhbHNlKToKKyAgICAgICAgIiIiUmVhZCBhIHJlc3BvbnNlIHR1cGxlIGZyb20gdGhl
IHdpcmUuCisKKyAgICAgICAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4KKyAgICAg
ICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3JlY3ZfdHVwbGUoKQorICAgICAgICBpZiBu
b3QgZXhwZWN0X2JvZHk6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmZpbmlzaGVkX3JlYWRp
bmcoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcmVhZF9ib2R5X2J5dGVzKHNl
bGYsIGNvdW50PS0xKToKKyAgICAgICAgIiIiUmVhZCBieXRlcyBmcm9tIHRoZSBib2R5LCBkZWNv
ZGluZyBpbnRvIGEgYnl0ZSBzdHJlYW0uCisgICAgICAgIAorICAgICAgICBXZSByZWFkIGFsbCBi
eXRlcyBhdCBvbmNlIHRvIGVuc3VyZSB3ZSd2ZSBjaGVja2VkIHRoZSB0cmFpbGVyIGZvciAKKyAg
ICAgICAgZXJyb3JzLCBhbmQgdGhlbiBmZWVkIHRoZSBidWZmZXIgYmFjayBhcyByZWFkX2JvZHlf
Ynl0ZXMgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fYm9keV9idWZm
ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYm9keV9idWZmZXIucmVh
ZChjb3VudCkKKyAgICAgICAgX2JvZHlfZGVjb2RlciA9IExlbmd0aFByZWZpeGVkQm9keURlY29k
ZXIoKQorCisgICAgICAgIHdoaWxlIG5vdCBfYm9keV9kZWNvZGVyLmZpbmlzaGVkX3JlYWRpbmc6
CisgICAgICAgICAgICBieXRlc193YW50ZWQgPSBfYm9keV9kZWNvZGVyLm5leHRfcmVhZF9zaXpl
KCkKKyAgICAgICAgICAgIGJ5dGVzID0gc2VsZi5fcmVxdWVzdC5yZWFkX2J5dGVzKGJ5dGVzX3dh
bnRlZCkKKyAgICAgICAgICAgIF9ib2R5X2RlY29kZXIuYWNjZXB0X2J5dGVzKGJ5dGVzKQorICAg
ICAgICBzZWxmLl9yZXF1ZXN0LmZpbmlzaGVkX3JlYWRpbmcoKQorICAgICAgICBzZWxmLl9ib2R5
X2J1ZmZlciA9IFN0cmluZ0lPKF9ib2R5X2RlY29kZXIucmVhZF9wZW5kaW5nX2RhdGEoKSkKKyAg
ICAgICAgIyBYWFg6IFRPRE8gY2hlY2sgdGhlIHRyYWlsZXIgcmVzdWx0LgorICAgICAgICByZXR1
cm4gc2VsZi5fYm9keV9idWZmZXIucmVhZChjb3VudCkKKworICAgIGRlZiBfcmVjdl90dXBsZShz
ZWxmKToKKyAgICAgICAgIiIiUmVjZWl2ZSBhIHR1cGxlIGZyb20gdGhlIG1lZGl1bSByZXF1ZXN0
LiIiIgorICAgICAgICByZXR1cm4gX2RlY29kZV90dXBsZShzZWxmLl9yZWN2X2xpbmUoKSkKKwor
ICAgIGRlZiBfcmVjdl9saW5lKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGFuIGVudGlyZSBsaW5l
IGZyb20gdGhlIG1lZGl1bSByZXF1ZXN0LiIiIgorICAgICAgICBsaW5lID0gJycKKyAgICAgICAg
d2hpbGUgbm90IGxpbmUgb3IgbGluZVstMV0gIT0gJ1xuJzoKKyAgICAgICAgICAgICMgVE9ETzog
dGhpcyBpcyBpbmVmZmljaWVudCAtIGJ1dCB0dXBsZXMgYXJlIHNob3J0LgorICAgICAgICAgICAg
bmV3X2NoYXIgPSBzZWxmLl9yZXF1ZXN0LnJlYWRfYnl0ZXMoMSkKKyAgICAgICAgICAgIGxpbmUg
Kz0gbmV3X2NoYXIKKyAgICAgICAgICAgIGFzc2VydCBuZXdfY2hhciAhPSAnJywgImVuZCBvZiBm
aWxlIHJlYWRpbmcgZnJvbSBzZXJ2ZXIuIgorICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVm
IHF1ZXJ5X3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybiBwcm90b2NvbCB2ZXJzaW9u
IG51bWJlciBvZiB0aGUgc2VydmVyLiIiIgorICAgICAgICBzZWxmLmNhbGwoJ2hlbGxvJykKKyAg
ICAgICAgcmVzcCA9IHNlbGYucmVhZF9yZXNwb25zZV90dXBsZSgpCisgICAgICAgIGlmIHJlc3Ag
PT0gKCdvaycsICcxJyk6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlmIHJlc3Ag
PT0gKCdvaycsICcyJyk6CisgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmFpc2UgZXJyb3JzLlNtYXJ0UHJvdG9jb2xFcnJvcigiYmFkIHJlc3BvbnNlICVy
IiAlIChyZXNwLCkpCisKKyAgICBkZWYgX3dyaXRlX2FyZ3Moc2VsZiwgYXJncyk6CisgICAgICAg
IHNlbGYuX3dyaXRlX3Byb3RvY29sX3ZlcnNpb24oKQorICAgICAgICBieXRlcyA9IF9lbmNvZGVf
dHVwbGUoYXJncykKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5hY2NlcHRfYnl0ZXMoYnl0ZXMpCisK
KyAgICBkZWYgX3dyaXRlX3Byb3RvY29sX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIldyaXRl
IGFueSBwcmVmaXhlcyB0aGlzIHByb3RvY29sIHJlcXVpcmVzLgorICAgICAgICAKKyAgICAgICAg
VmVyc2lvbiBvbmUgZG9lc24ndCBzZW5kIHByb3RvY29sIHZlcnNpb25zLgorICAgICAgICAiIiIK
KworCitjbGFzcyBTbWFydENsaWVudFJlcXVlc3RQcm90b2NvbFR3byhTbWFydENsaWVudFJlcXVl
c3RQcm90b2NvbE9uZSk6CisgICAgIiIiVmVyc2lvbiB0d28gb2YgdGhlIGNsaWVudCBzaWRlIG9m
IHRoZSBzbWFydCBwcm90b2NvbC4KKyAgICAKKyAgICBUaGlzIHByZWZpeGVzIHRoZSByZXF1ZXN0
IHdpdGggdGhlIHZhbHVlIG9mIFJFUVVFU1RfVkVSU0lPTl9UV08uCisgICAgIiIiCisKKyAgICBk
ZWYgcmVhZF9yZXNwb25zZV90dXBsZShzZWxmLCBleHBlY3RfYm9keT1GYWxzZSk6CisgICAgICAg
ICIiIlJlYWQgYSByZXNwb25zZSB0dXBsZSBmcm9tIHRoZSB3aXJlLgorCisgICAgICAgIFRoaXMg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCisgICAgICAgICIiIgorICAgICAgICB2ZXJzaW9u
ID0gc2VsZi5fcmVxdWVzdC5yZWFkX2xpbmUoKQorICAgICAgICBpZiB2ZXJzaW9uICE9IFJFU1BP
TlNFX1ZFUlNJT05fVFdPOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlNtYXJ0UHJvdG9jb2xF
cnJvcignYmFkIHByb3RvY29sIG1hcmtlciAlcicgJSB2ZXJzaW9uKQorICAgICAgICByZXNwb25z
ZV9zdGF0dXMgPSBzZWxmLl9yZWN2X2xpbmUoKQorICAgICAgICBpZiByZXNwb25zZV9zdGF0dXMg
bm90IGluICgnc3VjY2Vzc1xuJywgJ2ZhaWxlZFxuJyk6CisgICAgICAgICAgICByYWlzZSBlcnJv
cnMuU21hcnRQcm90b2NvbEVycm9yKAorICAgICAgICAgICAgICAgICdiYWQgcHJvdG9jb2wgc3Rh
dHVzICVyJyAlIHJlc3BvbnNlX3N0YXR1cykKKyAgICAgICAgc2VsZi5yZXNwb25zZV9zdGF0dXMg
PSByZXNwb25zZV9zdGF0dXMgPT0gJ3N1Y2Nlc3NcbicKKyAgICAgICAgcmV0dXJuIFNtYXJ0Q2xp
ZW50UmVxdWVzdFByb3RvY29sT25lLnJlYWRfcmVzcG9uc2VfdHVwbGUoc2VsZiwgZXhwZWN0X2Jv
ZHkpCisKKyAgICBkZWYgX3dyaXRlX3Byb3RvY29sX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHIi
IiJXcml0ZSBhbnkgcHJlZml4ZXMgdGhpcyBwcm90b2NvbCByZXF1aXJlcy4KKyAgICAgICAgCisg
ICAgICAgIFZlcnNpb24gdHdvIHNlbmRzIHRoZSB2YWx1ZSBvZiBSRVFVRVNUX1ZFUlNJT05fVFdP
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5hY2NlcHRfYnl0ZXMoUkVRVUVT
VF9WRVJTSU9OX1RXTykKKwoK

=== added file bzrlib/smart/repository.py // file-id:repository.py-200611280220
... 38-vr5wy5bubyb8xttk-1 // last-changed:andrew.bennetts@canonical.com-2007042
... 6081540-36glj2kouoldc866 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L3JlcG9zaXRvcnkucHkKQEAgLTAsMCArMSwy
MzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IENhbm9uaWNhbCBMdGQKKyMKKyMgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv
biwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisiIiJTZXJ2ZXItc2lkZSByZXBvc2l0b3J5IHJlbGF0
ZWQgcmVxdWVzdCBpbXBsbWVudGF0aW9ucy4iIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBm
aWxlCitpbXBvcnQgdGFyZmlsZQorCitmcm9tIGJ6cmxpYiBpbXBvcnQgZXJyb3JzCitmcm9tIGJ6
cmxpYi5ienJkaXIgaW1wb3J0IEJ6ckRpcgorZnJvbSBienJsaWIuc21hcnQucmVxdWVzdCBpbXBv
cnQgKAorICAgIEZhaWxlZFNtYXJ0U2VydmVyUmVzcG9uc2UsCisgICAgU21hcnRTZXJ2ZXJSZXF1
ZXN0LAorICAgIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlLAorICAgICkKKworCitjbGFz
cyBTbWFydFNlcnZlclJlcG9zaXRvcnlSZXF1ZXN0KFNtYXJ0U2VydmVyUmVxdWVzdCk6CisgICAg
IiIiQ29tbW9uIGJhc2UgY2xhc3MgZm9yIFJlcG9zaXRvcnkgcmVxdWVzdHMuIiIiCisKKyAgICBk
ZWYgZG8oc2VsZiwgcGF0aCwgKmFyZ3MpOgorICAgICAgICAiIiJFeGVjdXRlIGEgcmVwb3NpdG9y
eSByZXF1ZXN0LgorICAgICAgICAKKyAgICAgICAgVGhlIHJlcG9zaXRvcnkgbXVzdCBiZSBhdCB0
aGUgZXhhY3QgcGF0aCAtIG5vIHNlYXJjaGluZyBpcyBkb25lLgorCisgICAgICAgIFRoZSBhY3R1
YWwgbG9naWMgaXMgZGVsZWdhdGVkIHRvIHNlbGYuZG9fcmVwb3NpdG9yeV9yZXF1ZXN0LgorCisg
ICAgICAgIDpwYXJhbSBwYXRoOiBUaGUgcGF0aCBmb3IgdGhlIHJlcG9zaXRvcnkuCisgICAgICAg
IDpyZXR1cm46IEEgc21hcnQgc2VydmVyIGZyb20gc2VsZi5kb19yZXBvc2l0b3J5X3JlcXVlc3Qo
KS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX2JhY2tpbmdfdHJhbnNw
b3J0LmNsb25lKHBhdGgpCisgICAgICAgIGJ6cmRpciA9IEJ6ckRpci5vcGVuX2Zyb21fdHJhbnNw
b3J0KHRyYW5zcG9ydCkKKyAgICAgICAgcmVwb3NpdG9yeSA9IGJ6cmRpci5vcGVuX3JlcG9zaXRv
cnkoKQorICAgICAgICByZXR1cm4gc2VsZi5kb19yZXBvc2l0b3J5X3JlcXVlc3QocmVwb3NpdG9y
eSwgKmFyZ3MpCisKKworY2xhc3MgU21hcnRTZXJ2ZXJSZXBvc2l0b3J5R2V0UmV2aXNpb25HcmFw
aChTbWFydFNlcnZlclJlcG9zaXRvcnlSZXF1ZXN0KToKKyAgICAKKyAgICBkZWYgZG9fcmVwb3Np
dG9yeV9yZXF1ZXN0KHNlbGYsIHJlcG9zaXRvcnksIHJldmlzaW9uX2lkKToKKyAgICAgICAgIiIi
UmV0dXJuIHRoZSByZXN1bHQgb2YgcmVwb3NpdG9yeS5nZXRfcmV2aXNpb25fZ3JhcGgocmV2aXNp
b25faWQpLgorICAgICAgICAKKyAgICAgICAgOnBhcmFtIHJlcG9zaXRvcnk6IFRoZSByZXBvc2l0
b3J5IHRvIHF1ZXJ5IGluLgorICAgICAgICA6cGFyYW0gcmV2aXNpb25faWQ6IFRoZSB1dGY4IGVu
Y29kZWQgcmV2aXNpb25faWQgdG8gZ2V0IGEgZ3JhcGggZnJvbS4KKyAgICAgICAgOnJldHVybjog
QSBzbWFydCBzZXJ2ZXIgcmVzcG9uc2Ugd2hlcmUgdGhlIGJvZHkgY29udGFpbnMgYW4gdXRmOAor
ICAgICAgICAgICAgZW5jb2RlZCBmbGF0dGVuZWQgbGlzdCBvZiB0aGUgcmV2aXNpb24gZ3JhcGgu
CisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcmV2aXNpb25faWQ6CisgICAgICAgICAgICBy
ZXZpc2lvbl9pZCA9IE5vbmUKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHJldmlzaW9uX2dyYXBoID0gcmVwb3NpdG9yeS5nZXRfcmV2aXNpb25fZ3JhcGgo
cmV2aXNpb25faWQpCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuTm9TdWNoUmV2aXNpb246CisgICAg
ICAgICAgICAjIE5vdGUgdGhhdCB3ZSByZXR1cm4gYW4gZW1wdHkgYm9keSwgcmF0aGVyIHRoYW4g
b21pdHRpbmcgdGhlIGJvZHkuCisgICAgICAgICAgICAjIFRoaXMgd2F5IHRoZSBjbGllbnQga25v
d3MgdGhhdCBpdCBjYW4gYWx3YXlzIGV4cGVjdCB0byBmaW5kIGEgYm9keQorICAgICAgICAgICAg
IyBpbiB0aGUgcmVzcG9uc2UgZm9yIHRoaXMgbWV0aG9kLCBldmVuIGluIHRoZSBlcnJvciBjYXNl
LgorICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdub3N1Y2hy
ZXZpc2lvbicsIHJldmlzaW9uX2lkKSwgJycpCisKKyAgICAgICAgZm9yIHJldmlzaW9uLCBwYXJl
bnRzIGluIHJldmlzaW9uX2dyYXBoLml0ZW1zKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAnLmpvaW4oW3JldmlzaW9uLF0gKyBwYXJlbnRzKSkKKworICAgICAgICByZXR1cm4gU3VjY2Vz
c2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICksICdcbicuam9pbihsaW5lcykpCisKKwor
Y2xhc3MgU21hcnRTZXJ2ZXJSZXF1ZXN0SGFzUmV2aXNpb24oU21hcnRTZXJ2ZXJSZXBvc2l0b3J5
UmVxdWVzdCk6CisKKyAgICBkZWYgZG9fcmVwb3NpdG9yeV9yZXF1ZXN0KHNlbGYsIHJlcG9zaXRv
cnksIHJldmlzaW9uX2lkKToKKyAgICAgICAgIiIiUmV0dXJuIG9rIGlmIGEgc3BlY2lmaWMgcmV2
aXNpb24gaXMgaW4gdGhlIHJlcG9zaXRvcnkgYXQgcGF0aC4KKworICAgICAgICA6cGFyYW0gcmVw
b3NpdG9yeTogVGhlIHJlcG9zaXRvcnkgdG8gcXVlcnkgaW4uCisgICAgICAgIDpwYXJhbSByZXZp
c2lvbl9pZDogVGhlIHV0ZjggZW5jb2RlZCByZXZpc2lvbl9pZCB0byBsb29rdXAuCisgICAgICAg
IDpyZXR1cm46IEEgc21hcnQgc2VydmVyIHJlc3BvbnNlIG9mICgnb2snLCApIGlmIHRoZSByZXZp
c2lvbiBpcworICAgICAgICAgICAgcHJlc2VudC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJl
cG9zaXRvcnkuaGFzX3JldmlzaW9uKHJldmlzaW9uX2lkKToKKyAgICAgICAgICAgIHJldHVybiBT
dWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ3llcycsICkpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdubycsICkp
CisKKworY2xhc3MgU21hcnRTZXJ2ZXJSZXBvc2l0b3J5R2F0aGVyU3RhdHMoU21hcnRTZXJ2ZXJS
ZXBvc2l0b3J5UmVxdWVzdCk6CisKKyAgICBkZWYgZG9fcmVwb3NpdG9yeV9yZXF1ZXN0KHNlbGYs
IHJlcG9zaXRvcnksIHJldmlkLCBjb21taXR0ZXJzKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBy
ZXN1bHQgb2YgcmVwb3NpdG9yeS5nYXRoZXJfc3RhdHMoKS4KKworICAgICAgICA6cGFyYW0gcmVw
b3NpdG9yeTogVGhlIHJlcG9zaXRvcnkgdG8gcXVlcnkgaW4uCisgICAgICAgIDpwYXJhbSByZXZp
ZDogdXRmOCBlbmNvZGVkIHJldiBpZCBvciBhbiBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgTm9u
ZQorICAgICAgICA6cGFyYW0gY29tbWl0dGVyczogJ3llcycgb3IgJ25vJy4KKworICAgICAgICA6
cmV0dXJuOiBBIFNtYXJ0U2VydmVyUmVzcG9uc2UgKCdvaycsKSwgYSBlbmNvZGVkIGJvZHkgbG9v
a2luZyBsaWtlCisgICAgICAgICAgICAgIGNvbW1pdHRlcnM6IDEKKyAgICAgICAgICAgICAgZmly
c3RyZXY6IDEyMzQuMjMwIDAKKyAgICAgICAgICAgICAgbGF0ZXN0cmV2OiAzNDUuNzAwIDM2MDAK
KyAgICAgICAgICAgICAgcmV2aXNpb25zOiAyCisgICAgICAgICAgICAgIHNpemU6NDUKKworICAg
ICAgICAgICAgICBCdXQgY29udGFpbmluZyBvbmx5IGZpZWxkcyByZXR1cm5lZCBieSB0aGUgZ2F0
aGVyX3N0YXRzKCkgY2FsbAorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmV2aWQgPT0gJyc6Cisg
ICAgICAgICAgICBkZWNvZGVkX3JldmlzaW9uX2lkID0gTm9uZQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgZGVjb2RlZF9yZXZpc2lvbl9pZCA9IHJldmlkCisgICAgICAgIGlmIGNvbW1pdHRl
cnMgPT0gJ3llcyc6CisgICAgICAgICAgICBkZWNvZGVkX2NvbW1pdHRlcnMgPSBUcnVlCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBkZWNvZGVkX2NvbW1pdHRlcnMgPSBOb25lCisgICAgICAg
IHN0YXRzID0gcmVwb3NpdG9yeS5nYXRoZXJfc3RhdHMoZGVjb2RlZF9yZXZpc2lvbl9pZCwgZGVj
b2RlZF9jb21taXR0ZXJzKQorCisgICAgICAgIGJvZHkgPSAnJworICAgICAgICBpZiBzdGF0cy5o
YXNfa2V5KCdjb21taXR0ZXJzJyk6CisgICAgICAgICAgICBib2R5ICs9ICdjb21taXR0ZXJzOiAl
ZFxuJyAlIHN0YXRzWydjb21taXR0ZXJzJ10KKyAgICAgICAgaWYgc3RhdHMuaGFzX2tleSgnZmly
c3RyZXYnKToKKyAgICAgICAgICAgIGJvZHkgKz0gJ2ZpcnN0cmV2OiAlLjNmICVkXG4nICUgc3Rh
dHNbJ2ZpcnN0cmV2J10KKyAgICAgICAgaWYgc3RhdHMuaGFzX2tleSgnbGF0ZXN0cmV2Jyk6Cisg
ICAgICAgICAgICAgYm9keSArPSAnbGF0ZXN0cmV2OiAlLjNmICVkXG4nICUgc3RhdHNbJ2xhdGVz
dHJldiddCisgICAgICAgIGlmIHN0YXRzLmhhc19rZXkoJ3JldmlzaW9ucycpOgorICAgICAgICAg
ICAgYm9keSArPSAncmV2aXNpb25zOiAlZFxuJyAlIHN0YXRzWydyZXZpc2lvbnMnXQorICAgICAg
ICBpZiBzdGF0cy5oYXNfa2V5KCdzaXplJyk6CisgICAgICAgICAgICBib2R5ICs9ICdzaXplOiAl
ZFxuJyAlIHN0YXRzWydzaXplJ10KKworICAgICAgICByZXR1cm4gU3VjY2Vzc2Z1bFNtYXJ0U2Vy
dmVyUmVzcG9uc2UoKCdvaycsICksIGJvZHkpCisKKworY2xhc3MgU21hcnRTZXJ2ZXJSZXBvc2l0
b3J5SXNTaGFyZWQoU21hcnRTZXJ2ZXJSZXBvc2l0b3J5UmVxdWVzdCk6CisKKyAgICBkZWYgZG9f
cmVwb3NpdG9yeV9yZXF1ZXN0KHNlbGYsIHJlcG9zaXRvcnkpOgorICAgICAgICAiIiJSZXR1cm4g
dGhlIHJlc3VsdCBvZiByZXBvc2l0b3J5LmlzX3NoYXJlZCgpLgorCisgICAgICAgIDpwYXJhbSBy
ZXBvc2l0b3J5OiBUaGUgcmVwb3NpdG9yeSB0byBxdWVyeSBpbi4KKyAgICAgICAgOnJldHVybjog
QSBzbWFydCBzZXJ2ZXIgcmVzcG9uc2Ugb2YgKCd5ZXMnLCApIGlmIHRoZSByZXBvc2l0b3J5IGlz
CisgICAgICAgICAgICBzaGFyZWQsIGFuZCAoJ25vJywgKSBpZiBpdCBpcyBub3QuCisgICAgICAg
ICIiIgorICAgICAgICBpZiByZXBvc2l0b3J5LmlzX3NoYXJlZCgpOgorICAgICAgICAgICAgcmV0
dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCgneWVzJywgKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiBTdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ25v
JywgKSkKKworCitjbGFzcyBTbWFydFNlcnZlclJlcG9zaXRvcnlMb2NrV3JpdGUoU21hcnRTZXJ2
ZXJSZXBvc2l0b3J5UmVxdWVzdCk6CisKKyAgICBkZWYgZG9fcmVwb3NpdG9yeV9yZXF1ZXN0KHNl
bGYsIHJlcG9zaXRvcnksIHRva2VuPScnKToKKyAgICAgICAgIyBYWFg6IHRoaXMgcHJvYmFibHkg
c2hvdWxkIG5vdCBoYXZlIGEgdG9rZW4uCisgICAgICAgIGlmIHRva2VuID09ICcnOgorICAgICAg
ICAgICAgdG9rZW4gPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRva2VuID0gcmVw
b3NpdG9yeS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQorICAgICAgICBleGNlcHQgZXJyb3JzLkxv
Y2tDb250ZW50aW9uLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0U2VydmVyUmVz
cG9uc2UoKCdMb2NrQ29udGVudGlvbicsKSkKKyAgICAgICAgZXhjZXB0IGVycm9ycy5VbmxvY2th
YmxlVHJhbnNwb3J0OgorICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0U2VydmVyUmVzcG9u
c2UoKCdVbmxvY2thYmxlVHJhbnNwb3J0JywpKQorICAgICAgICByZXBvc2l0b3J5LmxlYXZlX2xv
Y2tfaW5fcGxhY2UoKQorICAgICAgICByZXBvc2l0b3J5LnVubG9jaygpCisgICAgICAgIGlmIHRv
a2VuIGlzIE5vbmU6CisgICAgICAgICAgICB0b2tlbiA9ICcnCisgICAgICAgIHJldHVybiBTdWNj
ZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgdG9rZW4pKQorCisKK2NsYXNzIFNtYXJ0
U2VydmVyUmVwb3NpdG9yeVVubG9jayhTbWFydFNlcnZlclJlcG9zaXRvcnlSZXF1ZXN0KToKKwor
ICAgIGRlZiBkb19yZXBvc2l0b3J5X3JlcXVlc3Qoc2VsZiwgcmVwb3NpdG9yeSwgdG9rZW4pOgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXBvc2l0b3J5LmxvY2tfd3JpdGUodG9rZW49dG9r
ZW4pCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuVG9rZW5NaXNtYXRjaCwgZToKKyAgICAgICAgICAg
IHJldHVybiBGYWlsZWRTbWFydFNlcnZlclJlc3BvbnNlKCgnVG9rZW5NaXNtYXRjaCcsKSkKKyAg
ICAgICAgcmVwb3NpdG9yeS5kb250X2xlYXZlX2xvY2tfaW5fcGxhY2UoKQorICAgICAgICByZXBv
c2l0b3J5LnVubG9jaygpCisgICAgICAgIHJldHVybiBTdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNw
b25zZSgoJ29rJywpKQorCisKK2NsYXNzIFNtYXJ0U2VydmVyUmVwb3NpdG9yeVRhcmJhbGwoU21h
cnRTZXJ2ZXJSZXBvc2l0b3J5UmVxdWVzdCk6CisgICAgIiIiR2V0IHRoZSByYXcgcmVwb3NpdG9y
eSBmaWxlcyBhcyBhIHRhcmJhbGwuCisKKyAgICBUaGUgcmV0dXJuZWQgdGFyYmFsbCBjb250YWlu
cyBhIC5ienIgY29udHJvbCBkaXJlY3Rvcnkgd2hpY2ggaW4gdHVybgorICAgIGNvbnRhaW5zIGEg
cmVwb3NpdG9yeS4KKyAgICAKKyAgICBUaGlzIHRha2VzIG9uZSBwYXJhbWV0ZXIsIGNvbXByZXNz
aW9uLCB3aGljaCBjdXJyZW50bHkgbXVzdCBiZSAKKyAgICAiIiwgImd6Iiwgb3IgImJ6MiIuCisK
KyAgICBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBSZXBvc2l0b3J5LmNvcHlfY29udGVu
dF9pbnRvIG9wZXJhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBkb19yZXBvc2l0b3J5X3JlcXVl
c3Qoc2VsZiwgcmVwb3NpdG9yeSwgY29tcHJlc3Npb24pOgorICAgICAgICBmcm9tIGJ6cmxpYiBp
bXBvcnQgb3N1dGlscworICAgICAgICByZXBvX3RyYW5zcG9ydCA9IHJlcG9zaXRvcnkuY29udHJv
bF9maWxlcy5fdHJhbnNwb3J0CisgICAgICAgIHRtcF9kaXJuYW1lLCB0bXBfcmVwbyA9IHNlbGYu
X2NvcHlfdG9fdGVtcGRpcihyZXBvc2l0b3J5KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBj
b250cm9sZGlyX25hbWUgPSB0bXBfZGlybmFtZSArICcvLmJ6cicKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl90YXJmaWxlX3Jlc3BvbnNlKGNvbnRyb2xkaXJfbmFtZSwgY29tcHJlc3Npb24pCisg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvc3V0aWxzLnJtdHJlZSh0bXBfZGlybmFtZSkK
KworICAgIGRlZiBfY29weV90b190ZW1wZGlyKHNlbGYsIGZyb21fcmVwbyk6CisgICAgICAgIHRt
cF9kaXJuYW1lID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3RtcGJ6cmNsb25lJykKKyAgICAg
ICAgdG1wX2J6cmRpciA9IGZyb21fcmVwby5ienJkaXIuX2Zvcm1hdC5pbml0aWFsaXplKHRtcF9k
aXJuYW1lKQorICAgICAgICB0bXBfcmVwbyA9IGZyb21fcmVwby5fZm9ybWF0LmluaXRpYWxpemUo
dG1wX2J6cmRpcikKKyAgICAgICAgZnJvbV9yZXBvLmNvcHlfY29udGVudF9pbnRvKHRtcF9yZXBv
KQorICAgICAgICByZXR1cm4gdG1wX2Rpcm5hbWUsIHRtcF9yZXBvCisKKyAgICBkZWYgX3RhcmZp
bGVfcmVzcG9uc2Uoc2VsZiwgdG1wX2Rpcm5hbWUsIGNvbXByZXNzaW9uKToKKyAgICAgICAgdGVt
cCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuX3RhcmJhbGxfb2ZfZGlyKHRtcF9kaXJuYW1lLCBjb21wcmVzc2lvbiwgdGVtcC5u
YW1lKQorICAgICAgICAgICAgIyBhbGwgZmluaXNoZWQ7IHdyaXRlIHRoZSB0ZW1wZmlsZSBvdXQg
dG8gdGhlIG5ldHdvcmsKKyAgICAgICAgICAgIHRlbXAuc2VlaygwKQorICAgICAgICAgICAgcmV0
dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCksIHRlbXAucmVhZCgpKQor
ICAgICAgICAgICAgIyBGSVhNRTogRG9uJ3QgcmVhZCB0aGUgd2hvbGUgdGhpbmcgaW50byBtZW1v
cnkgaGVyZTsgcmF0aGVyIHN0cmVhbSBpdAorICAgICAgICAgICAgIyBvdXQgZnJvbSB0aGUgZmls
ZSBvbnRvIHRoZSBuZXR3b3JrLiBtYnAgMjAwNzA0MTEKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIHRlbXAuY2xvc2UoKQorCisgICAgZGVmIF90YXJiYWxsX29mX2RpcihzZWxmLCBkaXJu
YW1lLCBjb21wcmVzc2lvbiwgdGFyZmlsZV9uYW1lKToKKyAgICAgICAgdGFyYmFsbCA9IHRhcmZp
bGUub3Blbih0YXJmaWxlX25hbWUsIG1vZGU9J3c6JyArIGNvbXByZXNzaW9uKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICAjIFRoZSB0YXJiYWxsIG1vZHVsZSBvbmx5IGFjY2VwdHMgYXNjaWkg
bmFtZXMsIGFuZCAoaSBndWVzcykKKyAgICAgICAgICAgICMgcGFja3MgdGhlbSB3aXRoIHRoZWly
IDhiaXQgbmFtZXMuICBXZSBrbm93IGFsbCB0aGUgZmlsZXMKKyAgICAgICAgICAgICMgd2l0aGlu
IHRoZSByZXBvc2l0b3J5IGhhdmUgQVNDSUkgbmFtZXMgc28gdGhlIHNob3VsZCBiZSBzYWZlCisg
ICAgICAgICAgICAjIHRvIHBhY2sgaW4uCisgICAgICAgICAgICBkaXJuYW1lID0gZGlybmFtZS5l
bmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKQorICAgICAgICAgICAgIyBweXRob24n
cyB0YXJiYWxsIG1vZHVsZSBpbmNsdWRlcyB0aGUgd2hvbGUgcGF0aCBieSBkZWZhdWx0IHNvCisg
ICAgICAgICAgICAjIG92ZXJyaWRlIGl0CisgICAgICAgICAgICBhc3NlcnQgZGlybmFtZS5lbmRz
d2l0aCgnLmJ6cicpCisgICAgICAgICAgICB0YXJiYWxsLmFkZChkaXJuYW1lLCAnLmJ6cicpICMg
cmVjdXJzaXZlIGJ5IGRlZmF1bHQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhcmJh
bGwuY2xvc2UoKQoK

=== added file bzrlib/smart/request.py // file-id:request.py-20061108095550-gun
... adhxmzkdjfeek-1 // last-changed:v.ladeuil+lp@free.fr-20070426090738-3n4pmuh
... uwqxr05fj // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L3JlcXVlc3QucHkKQEAgLTAsMCArMSwzMjgg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IENhbm9uaWNhbCBMdGQKKyMKKyMgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rvbiwg
TUEgIDAyMTExLTEzMDcgIFVTQQorCisiIiJCYXNpYyBzZXJ2ZXItc2lkZSBsb2dpYyBmb3IgZGVh
bGluZyB3aXRoIHJlcXVlc3RzLiIiIgorCisKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIGJ6cmxp
YiBpbXBvcnQgKAorICAgIGJ6cmRpciwKKyAgICBlcnJvcnMsCisgICAgcmVnaXN0cnksCisgICAg
cmV2aXNpb24sCisgICAgKQorZnJvbSBienJsaWIuYnVuZGxlLnNlcmlhbGl6ZXIgaW1wb3J0IHdy
aXRlX2J1bmRsZQorCisKK2NsYXNzIFNtYXJ0U2VydmVyUmVxdWVzdChvYmplY3QpOgorICAgICIi
IkJhc2UgY2xhc3MgZm9yIHJlcXVlc3QgaGFuZGxlcnMuIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgYmFja2luZ190cmFuc3BvcnQpOgorICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KKworICAg
ICAgICA6cGFyYW0gYmFja2luZ190cmFuc3BvcnQ6IHRoZSBiYXNlIHRyYW5zcG9ydCB0byBiZSB1
c2VkIHdoZW4gcGVyZm9ybWluZworICAgICAgICAgICAgdGhpcyByZXF1ZXN0LgorICAgICAgICAi
IiIKKyAgICAgICAgc2VsZi5fYmFja2luZ190cmFuc3BvcnQgPSBiYWNraW5nX3RyYW5zcG9ydAor
CisgICAgZGVmIF9jaGVja19lbmFibGVkKHNlbGYpOgorICAgICAgICAiIiJSYWlzZXMgRGlzYWJs
ZWRNZXRob2QgaWYgdGhpcyBtZXRob2QgaXMgZGlzYWJsZWQuIiIiCisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBkbyhzZWxmLCAqYXJncyk6CisgICAgICAgICIiIk1hbmRhdG9yeSBleHRlbnNpb24g
cG9pbnQgZm9yIFNtYXJ0U2VydmVyUmVxdWVzdCBzdWJjbGFzc2VzLgorICAgICAgICAKKyAgICAg
ICAgU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBzaG91bGQgcmV0dXJuIGEgU21hcnRTZXJ2ZXJSZXNwb25zZSBpZiB0aGlzIGNvbW1hbmQgZXhw
ZWN0cyB0bworICAgICAgICByZWNlaXZlIG5vIGJvZHkuCisgICAgICAgICIiIgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuZG8pCisKKyAgICBkZWYgZXhlY3V0ZShzZWxm
LCAqYXJncyk6CisgICAgICAgICIiIlB1YmxpYyBlbnRyeSBwb2ludCB0byBleGVjdXRlIHRoaXMg
cmVxdWVzdC4KKworICAgICAgICBJdCB3aWxsIHJldHVybiBhIFNtYXJ0U2VydmVyUmVzcG9uc2Ug
aWYgdGhlIGNvbW1hbmQgZG9lcyBub3QgZXhwZWN0IGEKKyAgICAgICAgYm9keS4KKworICAgICAg
ICA6cGFyYW0gKmFyZ3M6IHRoZSBhcmd1bWVudHMgb2YgdGhlIHJlcXVlc3QuCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9jaGVja19lbmFibGVkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZG8o
KmFyZ3MpCisKKyAgICBkZWYgZG9fYm9keShzZWxmLCBib2R5X2J5dGVzKToKKyAgICAgICAgIiIi
Q2FsbGVkIGlmIHRoZSBjbGllbnQgc2VuZHMgYSBib2R5IHdpdGggdGhlIHJlcXVlc3QuCisgICAg
ICAgIAorICAgICAgICBNdXN0IHJldHVybiBhIFNtYXJ0U2VydmVyUmVzcG9uc2UuCisgICAgICAg
ICIiIgorICAgICAgICAjIFRPRE86IGlmIGEgY2xpZW50IGVycm9uZW91c2x5IHNlbmRzIGEgcmVx
dWVzdCB0aGF0IHNob3VsZG4ndCBoYXZlIGEKKyAgICAgICAgIyBib2R5LCB3aGF0IHRvIGRvPyAg
UHJvYmFibHkgU21hcnRTZXJ2ZXJSZXF1ZXN0SGFuZGxlciBzaG91bGQgY2F0Y2gKKyAgICAgICAg
IyB0aGlzIE5vdEltcGxlbWVudGVkRXJyb3IgYW5kIHRyYW5zbGF0ZSBpdCBpbnRvIGEgJ2JhZCBy
ZXF1ZXN0JyBlcnJvcgorICAgICAgICAjIHRvIHNlbmQgdG8gdGhlIGNsaWVudC4KKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLmRvX2JvZHkpCisKKworY2xhc3MgU21hcnRT
ZXJ2ZXJSZXNwb25zZShvYmplY3QpOgorICAgICIiIkEgcmVzcG9uc2UgdG8gYSBjbGllbnQgcmVx
dWVzdC4KKyAgICAKKyAgICBUaGlzIGJhc2UgY2xhc3Mgc2hvdWxkIG5vdCBiZSB1c2VkLiBJbnN0
ZWFkIHVzZQorICAgIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlIGFuZCBGYWlsZWRTbWFy
dFNlcnZlclJlc3BvbnNlIGFzIGFwcHJvcHJpYXRlLgorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGFyZ3MsIGJvZHk9Tm9uZSk6CisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAg
ICAgICAgc2VsZi5ib2R5ID0gYm9keQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Cisg
ICAgICAgIGlmIG90aGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIG90aGVyLmFyZ3MgPT0gc2VsZi5hcmdzIGFuZCBvdGhlci5ib2R5ID09IHNlbGYu
Ym9keQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxTbWFydFNl
cnZlclJlc3BvbnNlIGFyZ3M9JXIgYm9keT0lcj4iICUgKHNlbGYuaXNfc3VjY2Vzc2Z1bCgpLCAK
KyAgICAgICAgICAgIHNlbGYuYXJncywgc2VsZi5ib2R5KQorCisKK2NsYXNzIEZhaWxlZFNtYXJ0
U2VydmVyUmVzcG9uc2UoU21hcnRTZXJ2ZXJSZXNwb25zZSk6CisgICAgIiIiQSBTbWFydFNlcnZl
clJlc3BvbnNlIGZvciBhIHJlcXVlc3Qgd2hpY2ggZmFpbGVkLiIiIgorCisgICAgZGVmIGlzX3N1
Y2Nlc3NmdWwoc2VsZik6CisgICAgICAgICIiIkZhaWxlZFNtYXJ0U2VydmVyUmVzcG9uc2UgYXJl
IG5vdCBzdWNjZXNzZnVsLiIiIgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBTdWNj
ZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZShTbWFydFNlcnZlclJlc3BvbnNlKToKKyAgICAiIiJB
IFNtYXJ0U2VydmVyUmVzcG9uc2UgZm9yIGEgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCByZXF1ZXN0
LiIiIgorCisgICAgZGVmIGlzX3N1Y2Nlc3NmdWwoc2VsZik6CisgICAgICAgICIiIlN1Y2Nlc3Nm
dWxTbWFydFNlcnZlclJlc3BvbnNlIGFyZSBzdWNjZXNzZnVsLiIiIgorICAgICAgICByZXR1cm4g
VHJ1ZQorCisKK2NsYXNzIFNtYXJ0U2VydmVyUmVxdWVzdEhhbmRsZXIob2JqZWN0KToKKyAgICAi
IiJQcm90b2NvbCBsb2dpYyBmb3Igc21hcnQgc2VydmVyLgorICAgIAorICAgIFRoaXMgZG9lc24n
dCBoYW5kbGUgc2VyaWFsaXphdGlvbiBhdCBhbGwsIGl0IGp1c3QgcHJvY2Vzc2VzIHJlcXVlc3Rz
IGFuZAorICAgIGNyZWF0ZXMgcmVzcG9uc2VzLgorICAgICIiIgorCisgICAgIyBJTVBPUlRBTlQg
Rk9SIElNUExFTUVOVE9SUzogSXQgaXMgaW1wb3J0YW50IHRoYXQgU21hcnRTZXJ2ZXJSZXF1ZXN0
SGFuZGxlcgorICAgICMgbm90IGNvbnRhaW4gZW5jb2Rpbmcgb3IgZGVjb2RpbmcgbG9naWMgdG8g
YWxsb3cgdGhlIHdpcmUgcHJvdG9jb2wgdG8gdmFyeQorICAgICMgZnJvbSB0aGUgb2JqZWN0IHBy
b3RvY29sOiB3ZSB3aWxsIHdhbnQgdG8gdHdlYWsgdGhlIHdpcmUgcHJvdG9jb2wgc2VwYXJhdGUK
KyAgICAjIGZyb20gdGhlIG9iamVjdCBtb2RlbCwgYW5kIGlkZWFsbHkgd2Ugd2lsbCBiZSBhYmxl
IHRvIGRvIHRoYXQgd2l0aG91dAorICAgICMgaGF2aW5nIGEgU21hcnRTZXJ2ZXJSZXF1ZXN0SGFu
ZGxlciBzdWJjbGFzcyBmb3IgZWFjaCB3aXJlIHByb3RvY29sLCByYXRoZXIKKyAgICAjIGp1c3Qg
YSBQcm90b2NvbCBzdWJjbGFzcy4KKworICAgICMgVE9ETzogQmV0dGVyIHdheSBvZiByZXByZXNl
bnRpbmcgdGhlIGJvZHkgZm9yIGNvbW1hbmRzIHRoYXQgdGFrZSBpdCwKKyAgICAjIGFuZCBhbGxv
dyBpdCB0byBiZSBzdHJlYW1lZCBpbnRvIHRoZSBzZXJ2ZXIuCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgYmFja2luZ190cmFuc3BvcnQsIGNvbW1hbmRzKToKKyAgICAgICAgIiIiQ29uc3RydWN0
b3IuCisKKyAgICAgICAgOnBhcmFtIGJhY2tpbmdfdHJhbnNwb3J0OiBhIFRyYW5zcG9ydCB0byBo
YW5kbGUgcmVxdWVzdHMgZm9yLgorICAgICAgICA6cGFyYW0gY29tbWFuZHM6IGEgcmVnaXN0cnkg
bWFwcGluZyBjb21tYW5kIG5hbWVzIHRvIFNtYXJ0U2VydmVyUmVxdWVzdAorICAgICAgICAgICAg
c3ViY2xhc3Nlcy4gZS5nLiBienJsaWIudHJhbnNwb3J0LnNtYXJ0LnZmcy52ZnNfY29tbWFuZHMu
CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9iYWNraW5nX3RyYW5zcG9ydCA9IGJhY2tpbmdf
dHJhbnNwb3J0CisgICAgICAgIHNlbGYuX2NvbW1hbmRzID0gY29tbWFuZHMKKyAgICAgICAgc2Vs
Zi5fYm9keV9ieXRlcyA9ICcnCisgICAgICAgIHNlbGYucmVzcG9uc2UgPSBOb25lCisgICAgICAg
IHNlbGYuZmluaXNoZWRfcmVhZGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuX2NvbW1hbmQgPSBO
b25lCisKKyAgICBkZWYgYWNjZXB0X2JvZHkoc2VsZiwgYnl0ZXMpOgorICAgICAgICAiIiJBY2Nl
cHQgYm9keSBkYXRhLiIiIgorCisgICAgICAgICMgVE9ETzogVGhpcyBzaG91bGQgYmUgb3ZlcnJp
ZGVuIGZvciBlYWNoIGNvbW1hbmQgdGhhdCBkZXNpcmVkIGJvZHkgZGF0YQorICAgICAgICAjIHRv
IGhhbmRsZSB0aGUgcmlnaHQgZm9ybWF0IG9mIHRoYXQgZGF0YSwgaS5lLiBwbGFpbiBieXRlcywg
YSBidW5kbGUsCisgICAgICAgICMgZXRjLiAgVGhlIGRlc2VyaWFsaXNhdGlvbiBpbnRvIHRoYXQg
Zm9ybWF0IHNob3VsZCBiZSBkb25lIGluIHRoZQorICAgICAgICAjIFByb3RvY29sIG9iamVjdC4K
KworICAgICAgICAjIGRlZmF1bHQgZmFsbGJhY2sgaXMgdG8gYWNjdW11bGF0ZSBieXRlcy4KKyAg
ICAgICAgc2VsZi5fYm9keV9ieXRlcyArPSBieXRlcworICAgICAgICAKKyAgICBkZWYgZW5kX29m
X2JvZHkoc2VsZik6CisgICAgICAgICIiIk5vIG1vcmUgYm9keSBkYXRhIHdpbGwgYmUgcmVjZWl2
ZWQuIiIiCisgICAgICAgIHNlbGYuX3J1bl9oYW5kbGVyX2NvZGUoc2VsZi5fY29tbWFuZC5kb19i
b2R5LCAoc2VsZi5fYm9keV9ieXRlcywpLCB7fSkKKyAgICAgICAgIyBjYW5ub3QgcmVhZCBhZnRl
ciB0aGlzLgorICAgICAgICBzZWxmLmZpbmlzaGVkX3JlYWRpbmcgPSBUcnVlCisKKyAgICBkZWYg
ZGlzcGF0Y2hfY29tbWFuZChzZWxmLCBjbWQsIGFyZ3MpOgorICAgICAgICAiIiJEZXByZWNhdGVk
IGNvbXBhdGliaWxpdHkgbWV0aG9kLiIiIiAjIFhYWCBYWFgKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgY29tbWFuZCA9IHNlbGYuX2NvbW1hbmRzLmdldChjbWQpCisgICAgICAgIGV4Y2VwdCBM
b29rdXBFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5TbWFydFByb3RvY29sRXJyb3Io
ImJhZCByZXF1ZXN0ICVyIiAlIChjbWQsKSkKKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IGNvbW1h
bmQoc2VsZi5fYmFja2luZ190cmFuc3BvcnQpCisgICAgICAgIHNlbGYuX3J1bl9oYW5kbGVyX2Nv
ZGUoc2VsZi5fY29tbWFuZC5leGVjdXRlLCBhcmdzLCB7fSkKKworICAgIGRlZiBfcnVuX2hhbmRs
ZXJfY29kZShzZWxmLCBjYWxsYWJsZSwgYXJncywga3dhcmdzKToKKyAgICAgICAgIiIiUnVuIHNv
bWUgaGFuZGxlciBzcGVjaWZpYyBjb2RlICdjYWxsYWJsZScuCisKKyAgICAgICAgSWYgYSByZXN1
bHQgaXMgcmV0dXJuZWQsIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIGNvbW1hbmRzIHJlc3Bv
bnNlLAorICAgICAgICBhbmQgZmluaXNoZWRfcmVhZGluZyBpcyBzZXQgdHJ1ZSwgYW5kIGl0cyBh
c3NpZ25lZCB0byBzZWxmLnJlc3BvbnNlLgorCisgICAgICAgIEFueSBleGNlcHRpb25zIGNhdWdo
dCBhcmUgdHJhbnNsYXRlZCBhbmQgYSByZXNwb25zZSBvYmplY3QgY3JlYXRlZAorICAgICAgICBm
cm9tIHRoZW0uCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSBzZWxmLl9jYWxsX2NvbnZl
cnRpbmdfZXJyb3JzKGNhbGxhYmxlLCBhcmdzLCBrd2FyZ3MpCisKKyAgICAgICAgaWYgcmVzdWx0
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5yZXNwb25zZSA9IHJlc3VsdAorICAgICAg
ICAgICAgc2VsZi5maW5pc2hlZF9yZWFkaW5nID0gVHJ1ZQorCisgICAgZGVmIF9jYWxsX2NvbnZl
cnRpbmdfZXJyb3JzKHNlbGYsIGNhbGxhYmxlLCBhcmdzLCBrd2FyZ3MpOgorICAgICAgICAiIiJD
YWxsIGNhbGxhYmxlIGNvbnZlcnRpbmcgZXJyb3JzIHRvIFJlc3BvbnNlIG9iamVjdHMuIiIiCisg
ICAgICAgICMgWFhYOiBtb3N0IG9mIHRoaXMgZXJyb3IgY29udmVyc2lvbiBpcyBWRlMtcmVsYXRl
ZCwgYW5kIHRodXMgb3VnaHQgdG8KKyAgICAgICAgIyBiZSBpbiBTbWFydFNlcnZlclZGU1JlcXVl
c3RIYW5kbGVyIHNvbWV3aGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGNh
bGxhYmxlKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IGVycm9ycy5Ob1N1Y2hGaWxl
LCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdOb1N1
Y2hGaWxlJywgZS5wYXRoKSkKKyAgICAgICAgZXhjZXB0IGVycm9ycy5GaWxlRXhpc3RzLCBlOgor
ICAgICAgICAgICAgcmV0dXJuIEZhaWxlZFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdGaWxlRXhpc3Rz
JywgZS5wYXRoKSkKKyAgICAgICAgZXhjZXB0IGVycm9ycy5EaXJlY3RvcnlOb3RFbXB0eSwgZToK
KyAgICAgICAgICAgIHJldHVybiBGYWlsZWRTbWFydFNlcnZlclJlc3BvbnNlKCgnRGlyZWN0b3J5
Tm90RW1wdHknLCBlLnBhdGgpKQorICAgICAgICBleGNlcHQgZXJyb3JzLlNob3J0UmVhZHZFcnJv
ciwgZToKKyAgICAgICAgICAgIHJldHVybiBGYWlsZWRTbWFydFNlcnZlclJlc3BvbnNlKCgnU2hv
cnRSZWFkdkVycm9yJywKKyAgICAgICAgICAgICAgICBlLnBhdGgsIHN0cihlLm9mZnNldCksIHN0
cihlLmxlbmd0aCksIHN0cihlLmFjdHVhbCkpKQorICAgICAgICBleGNlcHQgVW5pY29kZUVycm9y
LCBlOgorICAgICAgICAgICAgIyBJZiBpdCBpcyBhIERlY29kZUVycm9yLCB0aGFuIG1vc3QgbGlr
ZWx5IHdlIGFyZSBzdGFydGluZworICAgICAgICAgICAgIyB3aXRoIGEgcGxhaW4gc3RyaW5nCisg
ICAgICAgICAgICBzdHJfb3JfdW5pY29kZSA9IGUub2JqZWN0CisgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHN0cl9vcl91bmljb2RlLCB1bmljb2RlKToKKyAgICAgICAgICAgICAgICAjIFhYWDog
VVRGLTggbWlnaHQgaGF2ZSBceDAxIChvdXIgc2VwZXJhdG9yIGJ5dGUpIGluIGl0LiAgV2UKKyAg
ICAgICAgICAgICAgICAjIHNob3VsZCBlc2NhcGUgaXQgc29tZWhvdy4KKyAgICAgICAgICAgICAg
ICB2YWwgPSAndTonICsgc3RyX29yX3VuaWNvZGUuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbCA9ICdzOicgKyBzdHJfb3JfdW5pY29kZS5lbmNv
ZGUoJ2Jhc2U2NCcpCisgICAgICAgICAgICAjIFRoaXMgaGFuZGxlcyBVbmljb2RlRW5jb2RlRXJy
b3Igb3IgVW5pY29kZURlY29kZUVycm9yCisgICAgICAgICAgICByZXR1cm4gRmFpbGVkU21hcnRT
ZXJ2ZXJSZXNwb25zZSgoZS5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAg
IGUuZW5jb2RpbmcsIHZhbCwgc3RyKGUuc3RhcnQpLCBzdHIoZS5lbmQpLCBlLnJlYXNvbikpCisg
ICAgICAgIGV4Y2VwdCBlcnJvcnMuVHJhbnNwb3J0Tm90UG9zc2libGUsIGU6CisgICAgICAgICAg
ICBpZiBlLm1zZyA9PSAicmVhZG9ubHkgdHJhbnNwb3J0IjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gRmFpbGVkU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ1JlYWRPbmx5RXJyb3InLCApKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2NsYXNzIEhlbGxvUmVxdWVz
dChTbWFydFNlcnZlclJlcXVlc3QpOgorICAgICIiIkFuc3dlciBhIHZlcnNpb24gcmVxdWVzdCB3
aXRoIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24gdGhpcyBzZXJ2ZXIKKyAgICBzdXBwb3J0
cy4KKyAgICAiIiIKKworICAgIGRlZiBkbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3Nm
dWxTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCAnMicpKQorCisKK2NsYXNzIEdldEJ1bmRsZVJl
cXVlc3QoU21hcnRTZXJ2ZXJSZXF1ZXN0KToKKyAgICAiIiJHZXQgYSBidW5kbGUgb2YgZnJvbSB0
aGUgbnVsbCByZXZpc2lvbiB0byB0aGUgc3BlY2lmaWVkIHJldmlzaW9uLiIiIgorCisgICAgZGVm
IGRvKHNlbGYsIHBhdGgsIHJldmlzaW9uX2lkKToKKyAgICAgICAgIyBvcGVuIHRyYW5zcG9ydCBy
ZWxhdGl2ZSB0byBvdXIgYmFzZQorICAgICAgICB0ID0gc2VsZi5fYmFja2luZ190cmFuc3BvcnQu
Y2xvbmUocGF0aCkKKyAgICAgICAgY29udHJvbCwgZXh0cmFfcGF0aCA9IGJ6cmRpci5CenJEaXIu
b3Blbl9jb250YWluaW5nX2Zyb21fdHJhbnNwb3J0KHQpCisgICAgICAgIHJlcG8gPSBjb250cm9s
Lm9wZW5fcmVwb3NpdG9yeSgpCisgICAgICAgIHRtcGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxl
KCkKKyAgICAgICAgYmFzZV9yZXZpc2lvbiA9IHJldmlzaW9uLk5VTExfUkVWSVNJT04KKyAgICAg
ICAgd3JpdGVfYnVuZGxlKHJlcG8sIHJldmlzaW9uX2lkLCBiYXNlX3JldmlzaW9uLCB0bXBmKQor
ICAgICAgICB0bXBmLnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZl
clJlc3BvbnNlKCgpLCB0bXBmLnJlYWQoKSkKKworCitjbGFzcyBTbWFydFNlcnZlcklzUmVhZG9u
bHkoU21hcnRTZXJ2ZXJSZXF1ZXN0KToKKyAgICAjIFhYWDogdGhpcyByZXF1ZXN0IG1ldGhvZCBi
ZWxvbmdzIHNvbWV3aGVyZSBlbHNlLgorCisgICAgZGVmIGRvKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl9iYWNraW5nX3RyYW5zcG9ydC5pc19yZWFkb25seSgpOgorICAgICAgICAgICAgYW5zd2Vy
ID0gJ3llcycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFuc3dlciA9ICdubycKKyAgICAg
ICAgcmV0dXJuIFN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKChhbnN3ZXIsKSkKKworCity
ZXF1ZXN0X2hhbmRsZXJzID0gcmVnaXN0cnkuUmVnaXN0cnkoKQorcmVxdWVzdF9oYW5kbGVycy5y
ZWdpc3Rlcl9sYXp5KAorICAgICdhcHBlbmQnLCAnYnpybGliLnNtYXJ0LnZmcycsICdBcHBlbmRS
ZXF1ZXN0JykKK3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJfbGF6eSgKKyAgICAnQnJhbmNoLmdl
dF9jb25maWdfZmlsZScsICdienJsaWIuc21hcnQuYnJhbmNoJywgJ1NtYXJ0U2VydmVyQnJhbmNo
R2V0Q29uZmlnRmlsZScpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ0Jy
YW5jaC5sYXN0X3JldmlzaW9uX2luZm8nLCAnYnpybGliLnNtYXJ0LmJyYW5jaCcsICdTbWFydFNl
cnZlckJyYW5jaFJlcXVlc3RMYXN0UmV2aXNpb25JbmZvJykKK3JlcXVlc3RfaGFuZGxlcnMucmVn
aXN0ZXJfbGF6eSgKKyAgICAnQnJhbmNoLmxvY2tfd3JpdGUnLCAnYnpybGliLnNtYXJ0LmJyYW5j
aCcsICdTbWFydFNlcnZlckJyYW5jaFJlcXVlc3RMb2NrV3JpdGUnKQorcmVxdWVzdF9oYW5kbGVy
cy5yZWdpc3Rlcl9sYXp5KAorICAgICdCcmFuY2gucmV2aXNpb25faGlzdG9yeScsICdienJsaWIu
c21hcnQuYnJhbmNoJywgJ1NtYXJ0U2VydmVyUmVxdWVzdFJldmlzaW9uSGlzdG9yeScpCityZXF1
ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ0JyYW5jaC5zZXRfbGFzdF9yZXZpc2lv
bicsICdienJsaWIuc21hcnQuYnJhbmNoJywgJ1NtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdFNldExh
c3RSZXZpc2lvbicpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ0JyYW5j
aC51bmxvY2snLCAnYnpybGliLnNtYXJ0LmJyYW5jaCcsICdTbWFydFNlcnZlckJyYW5jaFJlcXVl
c3RVbmxvY2snKQorcmVxdWVzdF9oYW5kbGVycy5yZWdpc3Rlcl9sYXp5KAorICAgICdCenJEaXIu
ZmluZF9yZXBvc2l0b3J5JywgJ2J6cmxpYi5zbWFydC5ienJkaXInLCAnU21hcnRTZXJ2ZXJSZXF1
ZXN0RmluZFJlcG9zaXRvcnknKQorcmVxdWVzdF9oYW5kbGVycy5yZWdpc3Rlcl9sYXp5KAorICAg
ICdCenJEaXJGb3JtYXQuaW5pdGlhbGl6ZScsICdienJsaWIuc21hcnQuYnpyZGlyJywgJ1NtYXJ0
U2VydmVyUmVxdWVzdEluaXRpYWxpemVCenJEaXInKQorcmVxdWVzdF9oYW5kbGVycy5yZWdpc3Rl
cl9sYXp5KAorICAgICdCenJEaXIub3Blbl9icmFuY2gnLCAnYnpybGliLnNtYXJ0LmJ6cmRpcics
ICdTbWFydFNlcnZlclJlcXVlc3RPcGVuQnJhbmNoJykKK3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0
ZXJfbGF6eSgKKyAgICAnZGVsZXRlJywgJ2J6cmxpYi5zbWFydC52ZnMnLCAnRGVsZXRlUmVxdWVz
dCcpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ2dldCcsICdienJsaWIu
c21hcnQudmZzJywgJ0dldFJlcXVlc3QnKQorcmVxdWVzdF9oYW5kbGVycy5yZWdpc3Rlcl9sYXp5
KAorICAgICdnZXRfYnVuZGxlJywgJ2J6cmxpYi5zbWFydC5yZXF1ZXN0JywgJ0dldEJ1bmRsZVJl
cXVlc3QnKQorcmVxdWVzdF9oYW5kbGVycy5yZWdpc3Rlcl9sYXp5KAorICAgICdoYXMnLCAnYnpy
bGliLnNtYXJ0LnZmcycsICdIYXNSZXF1ZXN0JykKK3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJf
bGF6eSgKKyAgICAnaGVsbG8nLCAnYnpybGliLnNtYXJ0LnJlcXVlc3QnLCAnSGVsbG9SZXF1ZXN0
JykKK3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJfbGF6eSgKKyAgICAnaXRlcl9maWxlc19yZWN1
cnNpdmUnLCAnYnpybGliLnNtYXJ0LnZmcycsICdJdGVyRmlsZXNSZWN1cnNpdmVSZXF1ZXN0JykK
K3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJfbGF6eSgKKyAgICAnbGlzdF9kaXInLCAnYnpybGli
LnNtYXJ0LnZmcycsICdMaXN0RGlyUmVxdWVzdCcpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVy
X2xhenkoCisgICAgJ21rZGlyJywgJ2J6cmxpYi5zbWFydC52ZnMnLCAnTWtkaXJSZXF1ZXN0JykK
K3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJfbGF6eSgKKyAgICAnbW92ZScsICdienJsaWIuc21h
cnQudmZzJywgJ01vdmVSZXF1ZXN0JykKK3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJfbGF6eSgK
KyAgICAncHV0JywgJ2J6cmxpYi5zbWFydC52ZnMnLCAnUHV0UmVxdWVzdCcpCityZXF1ZXN0X2hh
bmRsZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ3B1dF9ub25fYXRvbWljJywgJ2J6cmxpYi5zbWFy
dC52ZnMnLCAnUHV0Tm9uQXRvbWljUmVxdWVzdCcpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVy
X2xhenkoCisgICAgJ3JlYWR2JywgJ2J6cmxpYi5zbWFydC52ZnMnLCAnUmVhZHZSZXF1ZXN0JykK
K3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJfbGF6eSgKKyAgICAncmVuYW1lJywgJ2J6cmxpYi5z
bWFydC52ZnMnLCAnUmVuYW1lUmVxdWVzdCcpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xh
enkoJ1JlcG9zaXRvcnkuZ2F0aGVyX3N0YXRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnYnpybGliLnNtYXJ0LnJlcG9zaXRvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdTbWFydFNlcnZlclJlcG9zaXRvcnlHYXRoZXJTdGF0cycpCityZXF1ZXN0X2hhbmRs
ZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ1JlcG9zaXRvcnkuZ2V0X3JldmlzaW9uX2dyYXBoJywg
J2J6cmxpYi5zbWFydC5yZXBvc2l0b3J5JywgJ1NtYXJ0U2VydmVyUmVwb3NpdG9yeUdldFJldmlz
aW9uR3JhcGgnKQorcmVxdWVzdF9oYW5kbGVycy5yZWdpc3Rlcl9sYXp5KAorICAgICdSZXBvc2l0
b3J5Lmhhc19yZXZpc2lvbicsICdienJsaWIuc21hcnQucmVwb3NpdG9yeScsICdTbWFydFNlcnZl
clJlcXVlc3RIYXNSZXZpc2lvbicpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xhenkoCisg
ICAgJ1JlcG9zaXRvcnkuaXNfc2hhcmVkJywgJ2J6cmxpYi5zbWFydC5yZXBvc2l0b3J5JywgJ1Nt
YXJ0U2VydmVyUmVwb3NpdG9yeUlzU2hhcmVkJykKK3JlcXVlc3RfaGFuZGxlcnMucmVnaXN0ZXJf
bGF6eSgKKyAgICAnUmVwb3NpdG9yeS5sb2NrX3dyaXRlJywgJ2J6cmxpYi5zbWFydC5yZXBvc2l0
b3J5JywgJ1NtYXJ0U2VydmVyUmVwb3NpdG9yeUxvY2tXcml0ZScpCityZXF1ZXN0X2hhbmRsZXJz
LnJlZ2lzdGVyX2xhenkoCisgICAgJ1JlcG9zaXRvcnkudW5sb2NrJywgJ2J6cmxpYi5zbWFydC5y
ZXBvc2l0b3J5JywgJ1NtYXJ0U2VydmVyUmVwb3NpdG9yeVVubG9jaycpCityZXF1ZXN0X2hhbmRs
ZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ1JlcG9zaXRvcnkudGFyYmFsbCcsICdienJsaWIuc21h
cnQucmVwb3NpdG9yeScsCisgICAgJ1NtYXJ0U2VydmVyUmVwb3NpdG9yeVRhcmJhbGwnKQorcmVx
dWVzdF9oYW5kbGVycy5yZWdpc3Rlcl9sYXp5KAorICAgICdybWRpcicsICdienJsaWIuc21hcnQu
dmZzJywgJ1JtZGlyUmVxdWVzdCcpCityZXF1ZXN0X2hhbmRsZXJzLnJlZ2lzdGVyX2xhenkoCisg
ICAgJ3N0YXQnLCAnYnpybGliLnNtYXJ0LnZmcycsICdTdGF0UmVxdWVzdCcpCityZXF1ZXN0X2hh
bmRsZXJzLnJlZ2lzdGVyX2xhenkoCisgICAgJ1RyYW5zcG9ydC5pc19yZWFkb25seScsICdienJs
aWIuc21hcnQucmVxdWVzdCcsICdTbWFydFNlcnZlcklzUmVhZG9ubHknKQorcmVxdWVzdF9oYW5k
bGVycy5yZWdpc3Rlcl9sYXp5KAorICAgICdCenJEaXIub3BlbicsICdienJsaWIuc21hcnQuYnpy
ZGlyJywgJ1NtYXJ0U2VydmVyUmVxdWVzdE9wZW5CenJEaXInKQoK

=== added file bzrlib/smart/server.py // file-id:server.py-20061110062051-chzu1
... 0y32vx8gvur-1 // last-changed:andrew.bennetts@canonical.com-20070420051146-
... m7pn8rgwfh1c8umz // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L3NlcnZlci5weQpAQCAtMCwwICsxLDIxOCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
IyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN
QSAgMDIxMTEtMTMwNyAgVVNBCisKKyIiIlNlcnZlciBmb3Igc21hcnQtc2VydmVyIHByb3RvY29s
LiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aHJlYWRpbmcKKwor
ZnJvbSBienJsaWIuaG9va3MgaW1wb3J0IEhvb2tzCitmcm9tIGJ6cmxpYiBpbXBvcnQgKAorICAg
IHRyYWNlLAorICAgIHRyYW5zcG9ydCwKKykKK2Zyb20gYnpybGliLnNtYXJ0Lm1lZGl1bSBpbXBv
cnQgU21hcnRTZXJ2ZXJTb2NrZXRTdHJlYW1NZWRpdW0KKworCitjbGFzcyBTbWFydFRDUFNlcnZl
cihvYmplY3QpOgorICAgICIiIkxpc3RlbnMgb24gYSBUQ1Agc29ja2V0IGFuZCBhY2NlcHRzIGNv
bm5lY3Rpb25zIGZyb20gc21hcnQgY2xpZW50cy4KKworICAgIEVhY2ggY29ubmVjdGlvbiB3aWxs
IGJlIHNlcnZlZCBieSBhIFNtYXJ0U2VydmVyU29ja2V0U3RyZWFtTWVkaXVtIHJ1bm5pbmcgaW4K
KyAgICBhIHRocmVhZC4KKworICAgIGhvb2tzOiBBbiBpbnN0YW5jZSBvZiBTbWFydFNlcnZlckhv
b2tzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhY2tpbmdfdHJhbnNwb3J0
LCBob3N0PScxMjcuMC4wLjEnLCBwb3J0PTApOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBuZXcg
c2VydmVyLgorCisgICAgICAgIFRvIGFjdHVhbGx5IHN0YXJ0IGl0IHJ1bm5pbmcsIGNhbGwgZWl0
aGVyIHN0YXJ0X2JhY2tncm91bmRfdGhyZWFkIG9yCisgICAgICAgIHNlcnZlLgorCisgICAgICAg
IDpwYXJhbSBob3N0OiBOYW1lIG9mIHRoZSBpbnRlcmZhY2UgdG8gbGlzdGVuIG9uLgorICAgICAg
ICA6cGFyYW0gcG9ydDogVENQIHBvcnQgdG8gbGlzdGVuIG9uLCBvciAwIHRvIGFsbG9jYXRlIGEg
dHJhbnNpZW50IHBvcnQuCisgICAgICAgICIiIgorICAgICAgICAjIGxldCBjb25uZWN0aW9ucyB0
aW1lb3V0IHNvIHRoYXQgd2UgZ2V0IGEgY2hhbmNlIHRvIHRlcm1pbmF0ZQorICAgICAgICAjIEtl
ZXAgYSByZWZlcmVuY2UgdG8gdGhlIGV4Y2VwdGlvbnMgd2Ugd2FudCB0byBjYXRjaCBiZWNhdXNl
IHRoZSBzb2NrZXQKKyAgICAgICAgIyBtb2R1bGUncyBnbG9iYWxzIGdldCBzZXQgdG8gTm9uZSBk
dXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCB0
aW1lb3V0IGFzIHNvY2tldF90aW1lb3V0CisgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBlcnJv
ciBhcyBzb2NrZXRfZXJyb3IKKyAgICAgICAgc2VsZi5fc29ja2V0X2Vycm9yID0gc29ja2V0X2Vy
cm9yCisgICAgICAgIHNlbGYuX3NvY2tldF90aW1lb3V0ID0gc29ja2V0X3RpbWVvdXQKKyAgICAg
ICAgc2VsZi5fc2VydmVyX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLl9z
ZXJ2ZXJfc29ja2V0LmJpbmQoKGhvc3QsIHBvcnQpKQorICAgICAgICBzZWxmLl9zb2NrbmFtZSA9
IHNlbGYuX3NlcnZlcl9zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLnBvcnQgPSBz
ZWxmLl9zb2NrbmFtZVsxXQorICAgICAgICBzZWxmLl9zZXJ2ZXJfc29ja2V0Lmxpc3RlbigxKQor
ICAgICAgICBzZWxmLl9zZXJ2ZXJfc29ja2V0LnNldHRpbWVvdXQoMSkKKyAgICAgICAgc2VsZi5i
YWNraW5nX3RyYW5zcG9ydCA9IGJhY2tpbmdfdHJhbnNwb3J0CisgICAgICAgIHNlbGYuX3N0YXJ0
ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLl9zdG9wcGVkID0gdGhyZWFkaW5n
LkV2ZW50KCkKKworICAgIGRlZiBzZXJ2ZShzZWxmKToKKyAgICAgICAgc2VsZi5fc2hvdWxkX3Rl
cm1pbmF0ZSA9IEZhbHNlCisgICAgICAgIGZvciBob29rIGluIFNtYXJ0VENQU2VydmVyLmhvb2tz
WydzZXJ2ZXJfc3RhcnRlZCddOgorICAgICAgICAgICAgaG9vayhzZWxmLmJhY2tpbmdfdHJhbnNw
b3J0LmJhc2UsIHNlbGYuZ2V0X3VybCgpKQorICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qg
c2VsZi5fc2hvdWxkX3Rlcm1pbmF0ZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgICAgICAgICAgY29ubiwgY2xpZW50X2FkZHIgPSBzZWxmLl9zZXJ2ZXJfc29ja2V0
LmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxmLl9zb2NrZXRfdGltZW91
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMganVzdCBjaGVjayBpZiB3ZSdyZSBhc2tlZCB0
byBzdG9wCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdCBzZWxmLl9zb2NrZXRfZXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAj
IGlmIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGJ5IHN0b3BfYmFja2dyb3VuZF90aHJlYWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICMgd2UgbWlnaHQgZ2V0IGEgRUJBREYgaGVyZSwgYW55IG90aGVy
IHNvY2tldCBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkIGdldCBsb2dn
ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gIT0gZXJybm8uRUJBREY6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2Uud2FybmluZygibGlzdGVuaW5nIHNv
Y2tldCBlcnJvcjogJXMiLCBlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZV9jb25uKGNvbm4pCisgICAgICAgICAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgIyBkb250IGxvZyB3aGVuIENUUkwt
QydkLgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u
LCBlOgorICAgICAgICAgICAgICAgIHRyYWNlLmVycm9yKCJVbmhhbmRsZWQgc21hcnQgc2VydmVy
IGVycm9yLiIpCisgICAgICAgICAgICAgICAgdHJhY2UubG9nX2V4Y2VwdGlvbl9xdWlldGx5KCkK
KyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2Vs
Zi5fc3RvcHBlZC5zZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgZW5z
dXJlIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGNsb3NlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9z
ZXJ2ZXJfc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLl9zb2NrZXRfZXJy
b3I6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3JzIG9uIGNsb3NlCisgICAgICAgICAg
ICAgICAgcGFzcworICAgICAgICAgICAgZm9yIGhvb2sgaW4gU21hcnRUQ1BTZXJ2ZXIuaG9va3Nb
J3NlcnZlcl9zdG9wcGVkJ106CisgICAgICAgICAgICAgICAgaG9vayhzZWxmLmJhY2tpbmdfdHJh
bnNwb3J0LmJhc2UsIHNlbGYuZ2V0X3VybCgpKQorCisgICAgZGVmIGdldF91cmwoc2VsZik6Cisg
ICAgICAgICIiIlJldHVybiB0aGUgdXJsIG9mIHRoZSBzZXJ2ZXIiIiIKKyAgICAgICAgcmV0dXJu
ICJienI6Ly8lczolZC8iICUgc2VsZi5fc29ja25hbWUKKworICAgIGRlZiBzZXJ2ZV9jb25uKHNl
bGYsIGNvbm4pOgorICAgICAgICAjIEZvciBXSU4zMiwgd2hlcmUgdGhlIHRpbWVvdXQgdmFsdWUg
ZnJvbSB0aGUgbGlzdGVuaW5nIHNvY2tldAorICAgICAgICAjIHByb3BvZ2F0ZXMgdG8gdGhlIG5l
d2x5IGFjY2VwdGVkIHNvY2tldC4KKyAgICAgICAgY29ubi5zZXRibG9ja2luZyhUcnVlKQorICAg
ICAgICBjb25uLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fVENQLCBzb2NrZXQuVENQX05PREVM
QVksIDEpCisgICAgICAgIGhhbmRsZXIgPSBTbWFydFNlcnZlclNvY2tldFN0cmVhbU1lZGl1bShj
b25uLCBzZWxmLmJhY2tpbmdfdHJhbnNwb3J0KQorICAgICAgICBjb25uZWN0aW9uX3RocmVhZCA9
IHRocmVhZGluZy5UaHJlYWQoTm9uZSwgaGFuZGxlci5zZXJ2ZSwgbmFtZT0nc21hcnQtc2VydmVy
LWNoaWxkJykKKyAgICAgICAgY29ubmVjdGlvbl90aHJlYWQuc2V0RGFlbW9uKFRydWUpCisgICAg
ICAgIGNvbm5lY3Rpb25fdGhyZWFkLnN0YXJ0KCkKKworICAgIGRlZiBzdGFydF9iYWNrZ3JvdW5k
X3RocmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5fc3RhcnRlZC5jbGVhcigpCisgICAgICAgIHNl
bGYuX3NlcnZlcl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKE5vbmUsCisgICAgICAgICAgICAg
ICAgc2VsZi5zZXJ2ZSwKKyAgICAgICAgICAgICAgICBuYW1lPSdzZXJ2ZXItJyArIHNlbGYuZ2V0
X3VybCgpKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfdGhyZWFkLnNldERhZW1vbihUcnVlKQorICAg
ICAgICBzZWxmLl9zZXJ2ZXJfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fc3RhcnRlZC53
YWl0KCkKKworICAgIGRlZiBzdG9wX2JhY2tncm91bmRfdGhyZWFkKHNlbGYpOgorICAgICAgICBz
ZWxmLl9zdG9wcGVkLmNsZWFyKCkKKyAgICAgICAgIyB0ZWxsIHRoZSBtYWluIGxvb3AgdG8gcXVp
dCBvbiB0aGUgbmV4dCBpdGVyYXRpb24uCisgICAgICAgIHNlbGYuX3Nob3VsZF90ZXJtaW5hdGUg
PSBUcnVlCisgICAgICAgICMgY2xvc2UgdGhlIHNvY2tldCAtIGdpdmVzIGVycm9yIHRvIGNvbm5l
Y3Rpb25zIGZyb20gaGVyZSBvbiBpbiwKKyAgICAgICAgIyByYXRoZXIgdGhhbiBhIGNvbm5lY3Rp
b24gcmVzZXQgZXJyb3IgdG8gY29ubmVjdGlvbnMgbWFkZSBkdXJpbmcKKyAgICAgICAgIyB0aGUg
cGVyaW9kIGJldHdlZW4gc2V0dGluZyBfc2hvdWxkX3Rlcm1pbmF0ZSA9IFRydWUgYW5kIAorICAg
ICAgICAjIHRoZSBjdXJyZW50IHJlcXVlc3QgY29tcGxldGluZy9hYm9ydGluZy4gSXQgbWF5IGFs
c28gYnJlYWsgb3V0IHRoZQorICAgICAgICAjIG1haW4gbG9vcCBpZiBpdCB3YXMgY3VycmVudGx5
IGluIGFjY2VwdCgpIChvbiBzb21lIHBsYXRmb3JtcykuCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuX3NlcnZlcl9zb2NrZXQuY2xvc2UoKQorICAgICAgICBleGNlcHQgc2VsZi5fc29j
a2V0X2Vycm9yOgorICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3JzIG9uIGNsb3NlCisgICAgICAg
ICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBzZWxmLl9zdG9wcGVkLmlzU2V0KCk6CisgICAgICAg
ICAgICAjIHNlcnZlciBoYXMgbm90IHN0b3BwZWQgKHRob3VnaCBpdCBtYXkgYmUgc3RvcHBpbmcp
CisgICAgICAgICAgICAjIGl0cyBsaWtlbHkgaW4gYWNjZXB0KCksIHNvIGdpdmUgaXQgYSBjb25u
ZWN0aW9uCisgICAgICAgICAgICB0ZW1wX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAg
ICAgICAgdGVtcF9zb2NrZXQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5U
Q1BfTk9ERUxBWSwgMSkKKyAgICAgICAgICAgIGlmIG5vdCB0ZW1wX3NvY2tldC5jb25uZWN0X2V4
KHNlbGYuX3NvY2tuYW1lKToKKyAgICAgICAgICAgICAgICAjIGFuZCBjbG9zZSBpdCBpbW1lZGlh
dGVseTogd2UgZG9udCBjaG9vc2UgdG8gc2VuZCBhbnkgcmVxdWVzdHMuCisgICAgICAgICAgICAg
ICAgdGVtcF9zb2NrZXQuY2xvc2UoKQorICAgICAgICBzZWxmLl9zdG9wcGVkLndhaXQoKQorICAg
ICAgICBzZWxmLl9zZXJ2ZXJfdGhyZWFkLmpvaW4oKQorCisKK2NsYXNzIFNtYXJ0U2VydmVySG9v
a3MoSG9va3MpOgorICAgICIiIkhvb2tzIGZvciB0aGUgc21hcnQgc2VydmVyLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgdGhlIGRlZmF1bHQgaG9va3Mu
CisKKyAgICAgICAgVGhlc2UgYXJlIGFsbCBlbXB0eSBpbml0aWFsbHksIGJlY2F1c2UgYnkgZGVm
YXVsdCBub3RoaW5nIHNob3VsZCBnZXQKKyAgICAgICAgbm90aWZpZWQuCisgICAgICAgICIiIgor
ICAgICAgICBIb29rcy5fX2luaXRfXyhzZWxmKQorICAgICAgICAjIEludHJvZHVjZWQgaW4gMC4x
NjoKKyAgICAgICAgIyBpbnZva2VkIHdoZW5ldmVyIHRoZSBzZXJ2ZXIgc3RhcnRzIHNlcnZpbmcg
YSBkaXJlY3RvcnkuCisgICAgICAgICMgVGhlIGFwaSBzaWduYXR1cmUgaXMgKGJhY2tpbmcgdXJs
LCBwdWJsaWMgdXJsKS4KKyAgICAgICAgc2VsZlsnc2VydmVyX3N0YXJ0ZWQnXSA9IFtdCisgICAg
ICAgICMgSW50cm9kdWNlZCBpbiAwLjE2OgorICAgICAgICAjIGludm9rZWQgd2hlbmV2ZXIgdGhl
IHNlcnZlciBzdG9wcyBzZXJ2aW5nIGEgZGlyZWN0b3J5LgorICAgICAgICAjIFRoZSBhcGkgc2ln
bmF0dXJlIGlzIChiYWNraW5nIHVybCwgcHVibGljIHVybCkuCisgICAgICAgIHNlbGZbJ3NlcnZl
cl9zdG9wcGVkJ10gPSBbXQorCitTbWFydFRDUFNlcnZlci5ob29rcyA9IFNtYXJ0U2VydmVySG9v
a3MoKQorCisKK2NsYXNzIFNtYXJ0VENQU2VydmVyX2Zvcl90ZXN0aW5nKFNtYXJ0VENQU2VydmVy
KToKKyAgICAiIiJTZXJ2ZXIgc3VpdGFibGUgZm9yIHVzZSBieSB0cmFuc3BvcnQgdGVzdHMuCisg
ICAgCisgICAgVGhpcyBzZXJ2ZXIgaXMgYmFja2VkIGJ5IHRoZSBwcm9jZXNzJ3MgY3dkLgorICAg
ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBTbWFydFRDUFNlcnZlci5f
X2luaXRfXyhzZWxmLCBOb25lKQorICAgICAgICAKKyAgICBkZWYgZ2V0X2JhY2tpbmdfdHJhbnNw
b3J0KHNlbGYsIGJhY2tpbmdfdHJhbnNwb3J0X3NlcnZlcik6CisgICAgICAgICIiIkdldCBhIGJh
Y2tpbmcgdHJhbnNwb3J0IGZyb20gYSBzZXJ2ZXIgd2UgYXJlIGRlY29yYXRpbmcuIiIiCisgICAg
ICAgIHJldHVybiB0cmFuc3BvcnQuZ2V0X3RyYW5zcG9ydChiYWNraW5nX3RyYW5zcG9ydF9zZXJ2
ZXIuZ2V0X3VybCgpKQorCisgICAgZGVmIHNldFVwKHNlbGYsIGJhY2tpbmdfdHJhbnNwb3J0X3Nl
cnZlcj1Ob25lKToKKyAgICAgICAgIiIiU2V0IHVwIHNlcnZlciBmb3IgdGVzdGluZyIiIgorICAg
ICAgICBmcm9tIGJ6cmxpYi50cmFuc3BvcnQuY2hyb290IGltcG9ydCBDaHJvb3RTZXJ2ZXIKKyAg
ICAgICAgaWYgYmFja2luZ190cmFuc3BvcnRfc2VydmVyIGlzIE5vbmU6CisgICAgICAgICAgICBm
cm9tIGJ6cmxpYi50cmFuc3BvcnQubG9jYWwgaW1wb3J0IExvY2FsVVJMU2VydmVyCisgICAgICAg
ICAgICBiYWNraW5nX3RyYW5zcG9ydF9zZXJ2ZXIgPSBMb2NhbFVSTFNlcnZlcigpCisgICAgICAg
IHNlbGYuY2hyb290X3NlcnZlciA9IENocm9vdFNlcnZlcigKKyAgICAgICAgICAgIHNlbGYuZ2V0
X2JhY2tpbmdfdHJhbnNwb3J0KGJhY2tpbmdfdHJhbnNwb3J0X3NlcnZlcikpCisgICAgICAgIHNl
bGYuY2hyb290X3NlcnZlci5zZXRVcCgpCisgICAgICAgIHNlbGYuYmFja2luZ190cmFuc3BvcnQg
PSB0cmFuc3BvcnQuZ2V0X3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYuY2hyb290X3NlcnZl
ci5nZXRfdXJsKCkpCisgICAgICAgIHNlbGYuc3RhcnRfYmFja2dyb3VuZF90aHJlYWQoKQorCisg
ICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnN0b3BfYmFja2dyb3VuZF90aHJl
YWQoKQorICAgICAgICBzZWxmLmNocm9vdF9zZXJ2ZXIudGVhckRvd24oKQorCisgICAgZGVmIGdl
dF9ib2d1c191cmwoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIFVSTCB3aGljaCB3aWxsIGZh
aWwgdG8gY29ubmVjdCIiIgorICAgICAgICByZXR1cm4gJ2J6cjovLzEyNy4wLjAuMToxLycKKwor
CitjbGFzcyBSZWFkb25seVNtYXJ0VENQU2VydmVyX2Zvcl90ZXN0aW5nKFNtYXJ0VENQU2VydmVy
X2Zvcl90ZXN0aW5nKToKKyAgICAiIiJHZXQgYSByZWFkb25seSBzZXJ2ZXIgZm9yIHRlc3Rpbmcu
IiIiCisKKyAgICBkZWYgZ2V0X2JhY2tpbmdfdHJhbnNwb3J0KHNlbGYsIGJhY2tpbmdfdHJhbnNw
b3J0X3NlcnZlcik6CisgICAgICAgICIiIkdldCBhIGJhY2tpbmcgdHJhbnNwb3J0IGZyb20gYSBz
ZXJ2ZXIgd2UgYXJlIGRlY29yYXRpbmcuIiIiCisgICAgICAgIHVybCA9ICdyZWFkb25seSsnICsg
YmFja2luZ190cmFuc3BvcnRfc2VydmVyLmdldF91cmwoKQorICAgICAgICByZXR1cm4gdHJhbnNw
b3J0LmdldF90cmFuc3BvcnQodXJsKQorCgo=

=== added file bzrlib/smart/vfs.py // file-id:vfs.py-20061108095550-gunadhxmzkd
... jfeek-2 // last-changed:robertc@lifelesswks.robertcollins.net-2007042412200
... 9-8bb4dede6a298d93 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3NtYXJ0L3Zmcy5weQpAQCAtMCwwICsxLDE5OCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg
MDIxMTEtMTMwNyAgVVNBCisKKyIiIlZGUyBvcGVyYXRpb25zIGZvciB0aGUgc21hcnQgc2VydmVy
LgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBzbWFydCBzZXJ2ZXIgbWV0aG9kcyB0aGF0IGFy
ZSBsb3ctbGV2ZWwgZmlsZSBvcGVyYXRpb25zCistLSBpLmUuIG1ldGhvZHMgdGhhdCBvcGVyYXRl
IGRpcmVjdGx5IG9uIGZpbGVzIGFuZCBkaXJlY3RvcmllcywgcmF0aGVyIHRoYW4KK2hpZ2hlci1s
ZXZlbCBjb25jZXB0cyBsaWtlIGJyYW5jaGVzIGFuZCByZXZpc2lvbnMuCisKK1RoZXNlIG1ldGhv
ZHMsIHBsdXMgJ2hlbGxvJyBhbmQgJ2dldF9idW5kbGUnLCBhcmUgdmVyc2lvbiAxIG9mIHRoZSBz
bWFydCBzZXJ2ZXIKK3Byb3RvY29sLCBhcyBpbXBsZW1lbnRlZCBpbiBienIgMC4xMSBhbmQgbGF0
ZXIuCisiIiIKKworaW1wb3J0IG9zCisKK2Zyb20gYnpybGliIGltcG9ydCBlcnJvcnMKK2Zyb20g
YnpybGliLnNtYXJ0IGltcG9ydCByZXF1ZXN0CisKKworZGVmIF9kZXNlcmlhbGlzZV9vcHRpb25h
bF9tb2RlKG1vZGUpOgorICAgICMgWFhYOiBGSVhNRSB0aGlzIHNob3VsZCBiZSBvbiB0aGUgcHJv
dG9jb2wgb2JqZWN0LiAgTGF0ZXIgcHJvdG9jb2wgdmVyc2lvbnMKKyAgICAjIG1pZ2h0IHNlcmlh
bGlzZSBtb2RlcyBkaWZmZXJlbnRseS4KKyAgICBpZiBtb2RlID09ICcnOgorICAgICAgICByZXR1
cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBpbnQobW9kZSkKKworCitkZWYgdmZz
X2VuYWJsZWQoKToKKyAgICAiIiJJcyB0aGUgVkZTIGVuYWJsZWQgPworCisgICAgdGhlIFZGUyBp
cyBkaXNhYmxlZCB3aGVuIHRoZSBCWlJfTk9fU01BUlRfVkZTIGVudmlyb25tZW50IHZhcmlhYmxl
IGlzIHNldC4KKworICAgIDpyZXR1cm46IFRydWUgaWYgaXQgaXMgZW5hYmxlZC4KKyAgICAiIiIK
KyAgICByZXR1cm4gbm90ICdCWlJfTk9fU01BUlRfVkZTJyBpbiBvcy5lbnZpcm9uCisKKworY2xh
c3MgVmZzUmVxdWVzdChyZXF1ZXN0LlNtYXJ0U2VydmVyUmVxdWVzdCk6CisgICAgIiIiQmFzZSBj
bGFzcyBmb3IgVkZTIHJlcXVlc3RzLgorICAgIAorICAgIFZGUyByZXF1ZXN0cyBhcmUgZGlzYWJs
ZWQgaWYgdmZzX2VuYWJsZWQoKSByZXR1cm5zIEZhbHNlLgorICAgICIiIgorCisgICAgZGVmIF9j
aGVja19lbmFibGVkKHNlbGYpOgorICAgICAgICBpZiBub3QgdmZzX2VuYWJsZWQoKToKKyAgICAg
ICAgICAgIHJhaXNlIGVycm9ycy5EaXNhYmxlZE1ldGhvZChzZWxmLl9fY2xhc3NfXy5fX25hbWVf
XykKKworCitjbGFzcyBIYXNSZXF1ZXN0KFZmc1JlcXVlc3QpOgorCisgICAgZGVmIGRvKHNlbGYs
IHJlbHBhdGgpOgorICAgICAgICByID0gc2VsZi5fYmFja2luZ190cmFuc3BvcnQuaGFzKHJlbHBh
dGgpIGFuZCAneWVzJyBvciAnbm8nCisgICAgICAgIHJldHVybiByZXF1ZXN0LlN1Y2Nlc3NmdWxT
bWFydFNlcnZlclJlc3BvbnNlKChyLCkpCisKKworY2xhc3MgR2V0UmVxdWVzdChWZnNSZXF1ZXN0
KToKKworICAgIGRlZiBkbyhzZWxmLCByZWxwYXRoKToKKyAgICAgICAgYmFja2luZ19ieXRlcyA9
IHNlbGYuX2JhY2tpbmdfdHJhbnNwb3J0LmdldF9ieXRlcyhyZWxwYXRoKQorICAgICAgICByZXR1
cm4gcmVxdWVzdC5TdWNjZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywpLCBiYWNraW5n
X2J5dGVzKQorCisKK2NsYXNzIEFwcGVuZFJlcXVlc3QoVmZzUmVxdWVzdCk6CisKKyAgICBkZWYg
ZG8oc2VsZiwgcmVscGF0aCwgbW9kZSk6CisgICAgICAgIHNlbGYuX3JlbHBhdGggPSByZWxwYXRo
CisgICAgICAgIHNlbGYuX21vZGUgPSBfZGVzZXJpYWxpc2Vfb3B0aW9uYWxfbW9kZShtb2RlKQor
ICAgIAorICAgIGRlZiBkb19ib2R5KHNlbGYsIGJvZHlfYnl0ZXMpOgorICAgICAgICBvbGRfbGVu
Z3RoID0gc2VsZi5fYmFja2luZ190cmFuc3BvcnQuYXBwZW5kX2J5dGVzKAorICAgICAgICAgICAg
c2VsZi5fcmVscGF0aCwgYm9keV9ieXRlcywgc2VsZi5fbW9kZSkKKyAgICAgICAgcmV0dXJuIHJl
cXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdhcHBlbmRlZCcsICclZCcgJSBv
bGRfbGVuZ3RoKSkKKworCitjbGFzcyBEZWxldGVSZXF1ZXN0KFZmc1JlcXVlc3QpOgorCisgICAg
ZGVmIGRvKHNlbGYsIHJlbHBhdGgpOgorICAgICAgICBzZWxmLl9iYWNraW5nX3RyYW5zcG9ydC5k
ZWxldGUocmVscGF0aCkKKyAgICAgICAgcmV0dXJuIHJlcXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2Vy
dmVyUmVzcG9uc2UoKCdvaycsICkpCisKKworY2xhc3MgSXRlckZpbGVzUmVjdXJzaXZlUmVxdWVz
dChWZnNSZXF1ZXN0KToKKworICAgIGRlZiBkbyhzZWxmLCByZWxwYXRoKToKKyAgICAgICAgdHJh
bnNwb3J0ID0gc2VsZi5fYmFja2luZ190cmFuc3BvcnQuY2xvbmUocmVscGF0aCkKKyAgICAgICAg
ZmlsZW5hbWVzID0gdHJhbnNwb3J0Lml0ZXJfZmlsZXNfcmVjdXJzaXZlKCkKKyAgICAgICAgcmV0
dXJuIHJlcXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCduYW1lcycsKSArIHR1
cGxlKGZpbGVuYW1lcykpCisKKworY2xhc3MgTGlzdERpclJlcXVlc3QoVmZzUmVxdWVzdCk6CisK
KyAgICBkZWYgZG8oc2VsZiwgcmVscGF0aCk6CisgICAgICAgIGZpbGVuYW1lcyA9IHNlbGYuX2Jh
Y2tpbmdfdHJhbnNwb3J0Lmxpc3RfZGlyKHJlbHBhdGgpCisgICAgICAgIHJldHVybiByZXF1ZXN0
LlN1Y2Nlc3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCgnbmFtZXMnLCkgKyB0dXBsZShmaWxlbmFt
ZXMpKQorCisKK2NsYXNzIE1rZGlyUmVxdWVzdChWZnNSZXF1ZXN0KToKKworICAgIGRlZiBkbyhz
ZWxmLCByZWxwYXRoLCBtb2RlKToKKyAgICAgICAgc2VsZi5fYmFja2luZ190cmFuc3BvcnQubWtk
aXIocmVscGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Rlc2Vy
aWFsaXNlX29wdGlvbmFsX21vZGUobW9kZSkpCisgICAgICAgIHJldHVybiByZXF1ZXN0LlN1Y2Nl
c3NmdWxTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCkpCisKKworY2xhc3MgTW92ZVJlcXVlc3Qo
VmZzUmVxdWVzdCk6CisKKyAgICBkZWYgZG8oc2VsZiwgcmVsX2Zyb20sIHJlbF90byk6CisgICAg
ICAgIHNlbGYuX2JhY2tpbmdfdHJhbnNwb3J0Lm1vdmUocmVsX2Zyb20sIHJlbF90bykKKyAgICAg
ICAgcmV0dXJuIHJlcXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsKSkK
KworCitjbGFzcyBQdXRSZXF1ZXN0KFZmc1JlcXVlc3QpOgorCisgICAgZGVmIGRvKHNlbGYsIHJl
bHBhdGgsIG1vZGUpOgorICAgICAgICBzZWxmLl9yZWxwYXRoID0gcmVscGF0aAorICAgICAgICBz
ZWxmLl9tb2RlID0gX2Rlc2VyaWFsaXNlX29wdGlvbmFsX21vZGUobW9kZSkKKworICAgIGRlZiBk
b19ib2R5KHNlbGYsIGJvZHlfYnl0ZXMpOgorICAgICAgICBzZWxmLl9iYWNraW5nX3RyYW5zcG9y
dC5wdXRfYnl0ZXMoc2VsZi5fcmVscGF0aCwgYm9keV9ieXRlcywgc2VsZi5fbW9kZSkKKyAgICAg
ICAgcmV0dXJuIHJlcXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsKSkK
KworCitjbGFzcyBQdXROb25BdG9taWNSZXF1ZXN0KFZmc1JlcXVlc3QpOgorCisgICAgZGVmIGRv
KHNlbGYsIHJlbHBhdGgsIG1vZGUsIGNyZWF0ZV9wYXJlbnQsIGRpcl9tb2RlKToKKyAgICAgICAg
c2VsZi5fcmVscGF0aCA9IHJlbHBhdGgKKyAgICAgICAgc2VsZi5fZGlyX21vZGUgPSBfZGVzZXJp
YWxpc2Vfb3B0aW9uYWxfbW9kZShkaXJfbW9kZSkKKyAgICAgICAgc2VsZi5fbW9kZSA9IF9kZXNl
cmlhbGlzZV9vcHRpb25hbF9tb2RlKG1vZGUpCisgICAgICAgICMgYSBib29sZWFuIHdvdWxkIGJl
IG5pY2VyIFhYWAorICAgICAgICBzZWxmLl9jcmVhdGVfcGFyZW50ID0gKGNyZWF0ZV9wYXJlbnQg
PT0gJ1QnKQorCisgICAgZGVmIGRvX2JvZHkoc2VsZiwgYm9keV9ieXRlcyk6CisgICAgICAgIHNl
bGYuX2JhY2tpbmdfdHJhbnNwb3J0LnB1dF9ieXRlc19ub25fYXRvbWljKHNlbGYuX3JlbHBhdGgs
CisgICAgICAgICAgICAgICAgYm9keV9ieXRlcywKKyAgICAgICAgICAgICAgICBtb2RlPXNlbGYu
X21vZGUsCisgICAgICAgICAgICAgICAgY3JlYXRlX3BhcmVudF9kaXI9c2VsZi5fY3JlYXRlX3Bh
cmVudCwKKyAgICAgICAgICAgICAgICBkaXJfbW9kZT1zZWxmLl9kaXJfbW9kZSkKKyAgICAgICAg
cmV0dXJuIHJlcXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsKSkKKwor
CitjbGFzcyBSZWFkdlJlcXVlc3QoVmZzUmVxdWVzdCk6CisKKyAgICBkZWYgZG8oc2VsZiwgcmVs
cGF0aCk6CisgICAgICAgIHNlbGYuX3JlbHBhdGggPSByZWxwYXRoCisKKyAgICBkZWYgZG9fYm9k
eShzZWxmLCBib2R5X2J5dGVzKToKKyAgICAgICAgIiIiYWNjZXB0IG9mZnNldHMgZm9yIGEgcmVh
ZHYgcmVxdWVzdC4iIiIKKyAgICAgICAgb2Zmc2V0cyA9IHNlbGYuX2Rlc2VyaWFsaXNlX29mZnNl
dHMoYm9keV9ieXRlcykKKyAgICAgICAgYmFja2luZ19ieXRlcyA9ICcnLmpvaW4oYnl0ZXMgZm9y
IG9mZnNldCwgYnl0ZXMgaW4KKyAgICAgICAgICAgIHNlbGYuX2JhY2tpbmdfdHJhbnNwb3J0LnJl
YWR2KHNlbGYuX3JlbHBhdGgsIG9mZnNldHMpKQorICAgICAgICByZXR1cm4gcmVxdWVzdC5TdWNj
ZXNzZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ3JlYWR2JywpLCBiYWNraW5nX2J5dGVzKQorCisg
ICAgZGVmIF9kZXNlcmlhbGlzZV9vZmZzZXRzKHNlbGYsIHRleHQpOgorICAgICAgICAjIFhYWDog
RklYTUUgdGhpcyBzaG91bGQgYmUgb24gdGhlIHByb3RvY29sIG9iamVjdC4KKyAgICAgICAgb2Zm
c2V0cyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIHRleHQuc3BsaXQoJ1xuJyk6CisgICAgICAg
ICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAg
c3RhcnQsIGxlbmd0aCA9IGxpbmUuc3BsaXQoJywnKQorICAgICAgICAgICAgb2Zmc2V0cy5hcHBl
bmQoKGludChzdGFydCksIGludChsZW5ndGgpKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldHMKKwor
CitjbGFzcyBSZW5hbWVSZXF1ZXN0KFZmc1JlcXVlc3QpOgorCisgICAgZGVmIGRvKHNlbGYsIHJl
bF9mcm9tLCByZWxfdG8pOgorICAgICAgICBzZWxmLl9iYWNraW5nX3RyYW5zcG9ydC5yZW5hbWUo
cmVsX2Zyb20sIHJlbF90bykKKyAgICAgICAgcmV0dXJuIHJlcXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0
U2VydmVyUmVzcG9uc2UoKCdvaycsICkpCisKKworY2xhc3MgUm1kaXJSZXF1ZXN0KFZmc1JlcXVl
c3QpOgorCisgICAgZGVmIGRvKHNlbGYsIHJlbHBhdGgpOgorICAgICAgICBzZWxmLl9iYWNraW5n
X3RyYW5zcG9ydC5ybWRpcihyZWxwYXRoKQorICAgICAgICByZXR1cm4gcmVxdWVzdC5TdWNjZXNz
ZnVsU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgKSkKKworCitjbGFzcyBTdGF0UmVxdWVzdChW
ZnNSZXF1ZXN0KToKKworICAgIGRlZiBkbyhzZWxmLCByZWxwYXRoKToKKyAgICAgICAgc3RhdCA9
IHNlbGYuX2JhY2tpbmdfdHJhbnNwb3J0LnN0YXQocmVscGF0aCkKKyAgICAgICAgcmV0dXJuIHJl
cXVlc3QuU3VjY2Vzc2Z1bFNtYXJ0U2VydmVyUmVzcG9uc2UoCisgICAgICAgICAgICAoJ3N0YXQn
LCBzdHIoc3RhdC5zdF9zaXplKSwgb2N0KHN0YXQuc3RfbW9kZSkpKQorCgo=

=== added file bzrlib/tests/blackbox/test_breakin.py // file-id:test_breakin.py
... -20070424043903-qyy6zm4pj3h4sbp3-1 // last-changed:mbp@sourcefrog.net-20070
... 424045131-gyjo7l8oa99ndyrv // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL2JsYWNrYm94L3Rlc3RfYnJlYWtpbi5weQpA
QCAtMCwwICsxLDc0IEBACisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBDYW5vbmljYWwgTHRk
CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg
MzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworIiIiQmxhY2tib3ggdGVzdHMgZm9y
IGRlYnVnZ2VyIGJyZWFraW4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQg
c3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSBienJsaWIudGVzdHMg
aW1wb3J0IFRlc3RDYXNlLCBUZXN0U2tpcHBlZAorCisKK2NsYXNzIFRlc3RCcmVha2luKFRlc3RD
YXNlKToKKyAgICAjIEZJWE1FOiBJZiBzb21ldGhpbmcgaXMgYnJva2VuLCB0aGVzZSB0ZXN0cyBt
YXkganVzdCBoYW5nIGluZGVmaW5pdGVseSBpbgorICAgICMgd2FpdCgpIHdhaXRpbmcgZm9yIHRo
ZSBjaGlsZCB0byBleGl0IHdoZW4gaXQncyBub3QgZ29pbmcgdG8uCisKKyAgICBkZWYgc2V0VXAo
c2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAg
cmFpc2UgVGVzdFNraXBwZWQoJ2JyZWFraW4gc2lnbmFsIG5vdCB0ZXN0ZWQgb24gd2luMzInKQor
ICAgICAgICBzdXBlcihUZXN0QnJlYWtpbiwgc2VsZikuc2V0VXAoKQorCisgICAgIyBwb3J0IDAg
bWVhbnMgdG8gYWxsb2NhdGUgYW55IHBvcnQKKyAgICBfdGVzdF9wcm9jZXNzX2FyZ3MgPSBbJ3Nl
cnZlJywgJy0tcG9ydCcsICdsb2NhbGhvc3Q6MCddCisKKyAgICBkZWYgdGVzdF9icmVha2luKHNl
bGYpOgorICAgICAgICAjIEJyZWFrIGluIHRvIGEgZGVidWdnZXIgd2hpbGUgYnpyIGlzIHJ1bm5p
bmcKKyAgICAgICAgIyB3ZSBuZWVkIHRvIHRlc3QgYWdhaW5zdCBhIGNvbW1hbmQgdGhhdCB3aWxs
IHdhaXQgZm9yIAorICAgICAgICAjIGEgd2hpbGUgLS0gYnpyIHNlcnZlIHNob3VsZCBkbworICAg
ICAgICBwcm9jID0gc2VsZi5zdGFydF9ienJfc3VicHJvY2VzcyhzZWxmLl90ZXN0X3Byb2Nlc3Nf
YXJncywKKyAgICAgICAgICAgICAgICBlbnZfY2hhbmdlcz1kaWN0KEJaUl9TSUdRVUlUX1BEQj1O
b25lKSkKKyAgICAgICAgIyB3YWl0IGZvciBpdCB0byBnZXQgc3RhcnRlZCwgYW5kIHByaW50IHRo
ZSAnbGlzdGVuaW5nJyBsaW5lCisgICAgICAgIHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAg
ICAgIyBmaXJzdCBzaWdxdWl0IHBvcHMgaW50byBkZWJ1Z2dlcgorICAgICAgICBvcy5raWxsKHBy
b2MucGlkLCBzaWduYWwuU0lHUVVJVCkKKyAgICAgICAgcHJvYy5zdGRpbi53cml0ZSgicVxuIikK
KyAgICAgICAgdGltZS5zbGVlcCguNSkKKyAgICAgICAgZXJyID0gcHJvYy5zdGRlcnIucmVhZGxp
bmUoKQorICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zUmUoZXJyLCByJ2VudGVyaW5nIGRlYnVn
Z2VyJykKKworICAgIGRlZiB0ZXN0X2JyZWFraW5faGFyZGVyKHNlbGYpOgorICAgICAgICBwcm9j
ID0gc2VsZi5zdGFydF9ienJfc3VicHJvY2VzcyhzZWxmLl90ZXN0X3Byb2Nlc3NfYXJncywKKyAg
ICAgICAgICAgICAgICBlbnZfY2hhbmdlcz1kaWN0KEJaUl9TSUdRVUlUX1BEQj1Ob25lKSkKKyAg
ICAgICAgIyB3YWl0IGZvciBpdCB0byBnZXQgc3RhcnRlZCwgYW5kIHByaW50IHRoZSAnbGlzdGVu
aW5nJyBsaW5lCisgICAgICAgIHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgIyBhbm90
aGVyIGhpdCBnaXZlcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGVybWluYXRpbmcgaXQKKyAg
ICAgICAgb3Mua2lsbChwcm9jLnBpZCwgc2lnbmFsLlNJR1FVSVQpCisgICAgICAgICMgd2FpdCBm
b3IgaXQgdG8gZ28gaW50byBwZGIKKyAgICAgICAgdGltZS5zbGVlcCguNSkKKyAgICAgICAgb3Mu
a2lsbChwcm9jLnBpZCwgc2lnbmFsLlNJR1FVSVQpCisgICAgICAgIHByb2Mud2FpdCgpCisKKyAg
ICBkZWYgdGVzdF9icmVha2luX2Rpc2FibGVkKHNlbGYpOgorICAgICAgICBwcm9jID0gc2VsZi5z
dGFydF9ienJfc3VicHJvY2VzcyhzZWxmLl90ZXN0X3Byb2Nlc3NfYXJncywKKyAgICAgICAgICAg
ICAgICBlbnZfY2hhbmdlcz1kaWN0KEJaUl9TSUdRVUlUX1BEQj0nMCcpKQorICAgICAgICAjIHdh
aXQgZm9yIGl0IHRvIGdldCBzdGFydGVkLCBhbmQgcHJpbnQgdGhlICdsaXN0ZW5pbmcnIGxpbmUK
KyAgICAgICAgcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICAjIGZpcnN0IGhpdCBzaG91
bGQganVzdCBraWxsIGl0CisgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIHNpZ25hbC5TSUdRVUlU
KQorICAgICAgICBwcm9jLndhaXQoKQoK

=== added file bzrlib/tests/blackbox/test_cat_revision.py // file-id:test_cat_r
... evision.py-20070410204634-fq8mnld5l5aza9e2-1 // last-changed:aaron.bentley@
... utoronto.ca-20070411041259-pfl82a4kg9q5j3n2 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL2JsYWNrYm94L3Rlc3RfY2F0X3JldmlzaW9u
LnB5CkBAIC0wLDAgKzEsNTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IENh
bm9uaWNhbCBMdGQKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCitmcm9tIGJ6cmxp
Yi50ZXN0cyBpbXBvcnQgYmxhY2tib3gKKworCitjbGFzcyBUZXN0Q2F0UmV2aXNpb24oYmxhY2ti
b3guRXh0ZXJuYWxCYXNlKToKKworICAgIGRlZiB0ZXN0X2NhdF91bmljb2RlX3JldmlzaW9uKHNl
bGYpOgorICAgICAgICB0cmVlID0gc2VsZi5tYWtlX2JyYW5jaF9hbmRfdHJlZSgnLicpCisgICAg
ICAgIHRyZWUuY29tbWl0KCdUaGlzIHJldmlzaW9uJywgcmV2X2lkPSdhYmNkJykKKyAgICAgICAg
b3V0cHV0LCBlcnJvcnMgPSBzZWxmLnJ1bl9ienIoJ2NhdC1yZXZpc2lvbicsIHUnYWJjZCcpCisg
ICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnNSZShvdXRwdXQsICdUaGlzIHJldmlzaW9uJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZXJyb3JzKQorCisgICAgZGVmIHRlc3RfY2F0X3Jl
dmlzaW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGJ6ciBjYXQtcmV2aXNpb24uCisgICAgICAg
ICIiIgorICAgICAgICB3dCA9IHNlbGYubWFrZV9icmFuY2hfYW5kX3RyZWUoJy4nKQorICAgICAg
ICByID0gd3QuYnJhbmNoLnJlcG9zaXRvcnkKKworICAgICAgICB3dC5jb21taXQoJ0NvbW1pdCBv
bmUnLCByZXZfaWQ9J2FAci0wLTEnKQorICAgICAgICB3dC5jb21taXQoJ0NvbW1pdCB0d28nLCBy
ZXZfaWQ9J2FAci0wLTInKQorICAgICAgICB3dC5jb21taXQoJ0NvbW1pdCB0aHJlZScsIHJldl9p
ZD0nYUByLTAtMycpCisKKyAgICAgICAgcmV2cyA9IHsKKyAgICAgICAgICAgIDE6ci5nZXRfcmV2
aXNpb25feG1sKCdhQHItMC0xJyksCisgICAgICAgICAgICAyOnIuZ2V0X3JldmlzaW9uX3htbCgn
YUByLTAtMicpLAorICAgICAgICAgICAgMzpyLmdldF9yZXZpc2lvbl94bWwoJ2FAci0wLTMnKSwK
KyAgICAgICAgfQorCisgICAgICAgIHNlbGYuY2hlY2tfb3V0cHV0KHJldnNbMV0sICdjYXQtcmV2
aXNpb24nLCAnYUByLTAtMScpCisgICAgICAgIHNlbGYuY2hlY2tfb3V0cHV0KHJldnNbMl0sICdj
YXQtcmV2aXNpb24nLCAnYUByLTAtMicpCisgICAgICAgIHNlbGYuY2hlY2tfb3V0cHV0KHJldnNb
M10sICdjYXQtcmV2aXNpb24nLCAnYUByLTAtMycpCisKKyAgICAgICAgc2VsZi5jaGVja19vdXRw
dXQocmV2c1sxXSwgJ2NhdC1yZXZpc2lvbicsICctcicsICcxJykKKyAgICAgICAgc2VsZi5jaGVj
a19vdXRwdXQocmV2c1syXSwgJ2NhdC1yZXZpc2lvbicsICctcicsICcyJykKKyAgICAgICAgc2Vs
Zi5jaGVja19vdXRwdXQocmV2c1szXSwgJ2NhdC1yZXZpc2lvbicsICctcicsICczJykKKworICAg
ICAgICBzZWxmLmNoZWNrX291dHB1dChyZXZzWzFdLCAnY2F0LXJldmlzaW9uJywgJy1yJywgJ3Jl
dmlkOmFAci0wLTEnKQorICAgICAgICBzZWxmLmNoZWNrX291dHB1dChyZXZzWzJdLCAnY2F0LXJl
dmlzaW9uJywgJy1yJywgJ3JldmlkOmFAci0wLTInKQorICAgICAgICBzZWxmLmNoZWNrX291dHB1
dChyZXZzWzNdLCAnY2F0LXJldmlzaW9uJywgJy1yJywgJ3JldmlkOmFAci0wLTMnKQoK

=== added file bzrlib/tests/branch_implementations/test_get_revision_id_to_revn
... o_map.py // file-id:test_get_revision_id-20070417211641-6kcoj1c704gqqopn-1 
... // last-changed:john@arbash-meinel.com-20070424194309-nt3sxw7x4sqwnykh // e
... ncoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL2JyYW5jaF9pbXBsZW1lbnRhdGlvbnMvdGVz
dF9nZXRfcmV2aXNpb25faWRfdG9fcmV2bm9fbWFwLnB5CkBAIC0wLDAgKzEsMTE4IEBACisjIENv
cHlyaWdodCAoQykgMjAwNyBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3
ICBVU0EKKworIiIiVGVzdHMgZm9yIEJyYW5jaC5nZXRfcmV2aXNpb25faWRfdG9fcmV2bm9fbWFw
KCkiIiIKKworZnJvbSBienJsaWIgaW1wb3J0ICgKKyAgICBlcnJvcnMsCisgICAgcmV2aXNpb24s
CisgICAgKQorCitmcm9tIGJ6cmxpYi50ZXN0cy5icmFuY2hfaW1wbGVtZW50YXRpb25zIGltcG9y
dCBUZXN0Q2FzZVdpdGhCcmFuY2gKKworCitjbGFzcyBUZXN0UmV2aXNpb25JZFRvRG90dGVkUmV2
bm8oVGVzdENhc2VXaXRoQnJhbmNoKToKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9yZXZubyhzZWxm
KToKKyAgICAgICAgdHJlZSA9IHNlbGYuY3JlYXRlX3RyZWVfd2l0aF9tZXJnZSgpCisgICAgICAg
IHRoZV9icmFuY2ggPSB0cmVlLmJyYW5jaAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeydy
ZXYtMSc6KDEsKSwgJ3Jldi0yJzooMiwpLCAncmV2LTMnOigzLCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICdyZXYtMS4xLjEnOigxLDEsMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB9
LCB0cmVlLmJyYW5jaC5nZXRfcmV2aXNpb25faWRfdG9fcmV2bm9fbWFwKCkpCisKKworY2xhc3Mg
VGVzdENhY2hpbmcoVGVzdENhc2VXaXRoQnJhbmNoKToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIGNh
Y2hpbmcgb2YgYnJhbmNoZXMnIGRvdHRlZCByZXZubyBnZW5lcmF0aW9uLgorCisgICAgV2hlbiBs
b2NrZWQsIGJyYW5jaGVzIHNob3VsZCBhdm9pZCByZWdlbmVyYXRpbmcgcmV2aXNpb25faWQ9PmRv
dHRlZCByZXZubworICAgIG1hcHBpbmcuCisKKyAgICBXaGVuIG5vdCBsb2NrZWQsIG9idmlvdXNs
eSB0aGUgcmV2aXNpb25faWQgPT4gZG90dGVkIHJldm5vIHdpbGwgbmVlZCB0byBiZQorICAgIHJl
Z2VuZXJhdGVkIG9yIHJlcmVhZCBlYWNoIHRpbWUuCisKKyAgICBXZSB0ZXN0IGlmIHJldmlzaW9u
X2hpc3RvcnkgaXMgdXNpbmcgdGhlIGNhY2hlIGJ5IGluc3RydW1lbnRpbmcgdGhlIGJyYW5jaCdz
CisgICAgX2dlbl9yZXZub19tYXAgbWV0aG9kLCB3aGljaCBpcyBjYWxsZWQgYnkgZ2V0X3Jldmlz
aW9uX2lkX3RvX3Jldm5vX21hcC4KKyAgICAiIiIKKworICAgIGRlZiBnZXRfaW5zdHJ1bWVudGVk
X2JyYW5jaChzZWxmKToKKyAgICAgICAgIiIiR2V0IGEgYnJhbmNoIGFuZCBtb25rZXkgcGF0Y2gg
aXQgdG8gbG9nIGNhbGxzIHRvIF9nZW5fcmV2bm9fbWFwLgorCisgICAgICAgIDpyZXR1cm5zOiBh
IHR1cGxlIG9mICh0aGUgYnJhbmNoLCBsaXN0IHRoYXQgY2FsbHMgd2lsbCBiZSBsb2dnZWQgdG8p
CisgICAgICAgICIiIgorICAgICAgICB0cmVlID0gc2VsZi5jcmVhdGVfdHJlZV93aXRoX21lcmdl
KCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICByZWFsX2Z1bmMgPSB0cmVlLmJyYW5jaC5f
Z2VuX3Jldm5vX21hcAorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgY2FsbHMu
YXBwZW5kKCdfZ2VuX3Jldm5vX21hcCcpCisgICAgICAgICAgICByZXR1cm4gcmVhbF9mdW5jKCkK
KyAgICAgICAgdHJlZS5icmFuY2guX2dlbl9yZXZub19tYXAgPSB3cmFwcGVyCisgICAgICAgIHJl
dHVybiB0cmVlLmJyYW5jaCwgY2FsbHMKKworICAgIGRlZiB0ZXN0X3VubG9ja2VkKHNlbGYpOgor
ICAgICAgICAiIiJSZXBlYXRlZCBjYWxscyB3aWxsIGNhbGwgX2dlbl9yZXZub19tYXAgZWFjaCB0
aW1lLiIiIgorICAgICAgICBicmFuY2gsIGNhbGxzID0gc2VsZi5nZXRfaW5zdHJ1bWVudGVkX2Jy
YW5jaCgpCisgICAgICAgICMgUmVwZWF0ZWRseSBjYWxsIHJldmlzaW9uX2hpc3RvcnkuCisgICAg
ICAgIGJyYW5jaC5nZXRfcmV2aXNpb25faWRfdG9fcmV2bm9fbWFwKCkKKyAgICAgICAgYnJhbmNo
LmdldF9yZXZpc2lvbl9pZF90b19yZXZub19tYXAoKQorICAgICAgICBicmFuY2guZ2V0X3Jldmlz
aW9uX2lkX3RvX3Jldm5vX21hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydfZ2VuX3Jl
dm5vX21hcCddKjMsIGNhbGxzKQorCisgICAgZGVmIHRlc3RfbG9ja2VkKHNlbGYpOgorICAgICAg
ICAiIiJSZXBlYXRlZCBjYWxscyB3aWxsIG9ubHkgY2FsbCBfZ2VuX3Jldm5vX21hcCBvbmNlLgor
ICAgICAgICAiIiIKKyAgICAgICAgYnJhbmNoLCBjYWxscyA9IHNlbGYuZ2V0X2luc3RydW1lbnRl
ZF9icmFuY2goKQorICAgICAgICAjIExvY2sgdGhlIGJyYW5jaCwgdGhlbiByZXBlYXRlZGx5IGNh
bGwgcmV2aXNpb25faGlzdG9yeS4KKyAgICAgICAgYnJhbmNoLmxvY2tfcmVhZCgpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGJyYW5jaC5nZXRfcmV2aXNpb25faWRfdG9fcmV2bm9fbWFwKCkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydfZ2VuX3Jldm5vX21hcCddLCBjYWxscykK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGJyYW5jaC51bmxvY2soKQorCisgICAgZGVm
IHRlc3Rfc2V0X3JldmlzaW9uX2hpc3Rvcnlfd2hlbl9sb2NrZWQoc2VsZik6CisgICAgICAgICIi
IkNhbGxpbmcgc2V0X3JldmlzaW9uX2hpc3Rvcnkgc2hvdWxkIHJlc2V0IHRoZSBjYWNoZS4iIiIK
KyAgICAgICAgYnJhbmNoLCBjYWxscyA9IHNlbGYuZ2V0X2luc3RydW1lbnRlZF9icmFuY2goKQor
ICAgICAgICBicmFuY2gubG9ja193cml0ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoeydyZXYtMSc6KDEsKSwgJ3Jldi0yJzooMiwpLCAncmV2LTMnOigzLCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV2LTEuMS4xJzooMSwxLDEpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGJyYW5jaC5nZXRfcmV2aXNpb25faWRfdG9fcmV2
bm9fbWFwKCkpCisgICAgICAgICAgICBicmFuY2guc2V0X3JldmlzaW9uX2hpc3RvcnkoWydyZXYt
MScsICdyZXYtMiddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7J3Jldi0xJzooMSwp
LCAncmV2LTInOigyLCl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guZ2V0
X3JldmlzaW9uX2lkX3RvX3Jldm5vX21hcCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh7J3Jldi0xJzooMSwpLCAncmV2LTInOigyLCl9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmFuY2guZ2V0X3JldmlzaW9uX2lkX3RvX3Jldm5vX21hcCgpKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChbJ19nZW5fcmV2bm9fbWFwJ10qMiwgY2FsbHMpCisgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICBicmFuY2gudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X3NldF9s
YXN0X3JldmlzaW9uX2luZm9fd2hlbl9sb2NrZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxpbmcg
c2V0X2xhc3RfcmV2aXNpb25faW5mbyBzaG91bGQgcmVzZXQgdGhlIGNhY2hlLiIiIgorICAgICAg
ICBicmFuY2gsIGNhbGxzID0gc2VsZi5nZXRfaW5zdHJ1bWVudGVkX2JyYW5jaCgpCisgICAgICAg
IGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh7J3Jldi0xJzooMSwpLCAncmV2LTInOigyLCksICdyZXYtMyc6KDMsKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdyZXYtMS4xLjEnOigxLDEsMSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwgYnJhbmNoLmdldF9yZXZpc2lvbl9pZF90b19yZXZub19tYXAo
KSkKKyAgICAgICAgICAgIGJyYW5jaC5zZXRfbGFzdF9yZXZpc2lvbl9pbmZvKDIsICdyZXYtMicp
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsncmV2LTEnOigxLCksICdyZXYtMic6KDIs
KX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC5nZXRfcmV2aXNpb25faWRf
dG9fcmV2bm9fbWFwKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsncmV2LTEnOigx
LCksICdyZXYtMic6KDIsKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC5n
ZXRfcmV2aXNpb25faWRfdG9fcmV2bm9fbWFwKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFsnX2dlbl9yZXZub19tYXAnXSoyLCBjYWxscykKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIGJyYW5jaC51bmxvY2soKQoK

=== added file bzrlib/tests/branch_implementations/test_revision_id_to_revno.py
...  // file-id:test_revision_id_to_-20070417200738-lo776wkqikhe5goo-1 // last-
... changed:john@arbash-meinel.com-20070417202335-0cc0thlj5sy28m9m // encoding:
... base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL2JyYW5jaF9pbXBsZW1lbnRhdGlvbnMvdGVz
dF9yZXZpc2lvbl9pZF90b19yZXZuby5weQpAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdodCAo
QykgMjAwNyBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKwor
IiIiVGVzdHMgZm9yIEJyYW5jaC5yZXZpc2lvbl9pZF90b19yZXZubygpIiIiCisKK2Zyb20gYnpy
bGliIGltcG9ydCBlcnJvcnMKKworZnJvbSBienJsaWIudGVzdHMuYnJhbmNoX2ltcGxlbWVudGF0
aW9ucyBpbXBvcnQgVGVzdENhc2VXaXRoQnJhbmNoCisKKworY2xhc3MgVGVzdFJldmlzaW9uSWRU
b1Jldm5vKFRlc3RDYXNlV2l0aEJyYW5jaCk6CisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmV2bm8o
c2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmNyZWF0ZV90cmVlX3dpdGhfbWVyZ2UoKQorICAg
ICAgICB0aGVfYnJhbmNoID0gdHJlZS5icmFuY2gKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIHRoZV9icmFuY2gucmV2aXNpb25faWRfdG9fcmV2bm8oTm9uZSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMSwgdGhlX2JyYW5jaC5yZXZpc2lvbl9pZF90b19yZXZubygncmV2LTEnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB0aGVfYnJhbmNoLnJldmlzaW9uX2lkX3RvX3Jl
dm5vKCdyZXYtMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHRoZV9icmFuY2gucmV2
aXNpb25faWRfdG9fcmV2bm8oJ3Jldi0zJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
ZXJyb3JzLk5vU3VjaFJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVfYnJh
bmNoLnJldmlzaW9uX2lkX3RvX3Jldm5vLCAncmV2LW5vbmUnKQorICAgICAgICAjIHJldmlzaW9u
X2lkX3RvX3Jldm5vIGlzIGRlZmluZWQgYXMgcmV0dXJuaW5nIG9ubHkgaW50ZWdlciByZXZpc2lv
bgorICAgICAgICAjIG51bWJlcnMsIHNvIG5vbi1tYWlubGluZSByZXZpc2lvbnMgZ2V0IE5vU3Vj
aFJldmlzaW9uIHJhaXNlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuTm9TdWNo
UmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZV9icmFuY2gucmV2aXNpb25f
aWRfdG9fcmV2bm8sICdyZXYtMS4xLjEnKQorCgo=

=== added file bzrlib/tests/test_bugtracker.py // file-id:test_bugtracker.py-20
... 070410073305-vu1vu1qosjurg8kb-2 // last-changed:jml@canonical.com-200704230
... 55929-chgdr92da63lhcri // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3Rlc3RfYnVndHJhY2tlci5weQpAQCAtMCww
ICsxLDE4NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworZnJvbSBienJsaWIgaW1wb3J0IGJ1Z3RyYWNrZXIs
IGVycm9ycywgdXJsdXRpbHMKK2Zyb20gYnpybGliLnRlc3RzIGltcG9ydCBUZXN0Q2FzZVdpdGhN
ZW1vcnlUcmFuc3BvcnQKKworCitjbGFzcyBUZXN0R2V0QnVnVVJMKFRlc3RDYXNlV2l0aE1lbW9y
eVRyYW5zcG9ydCk6CisgICAgIiIiVGVzdHMgZm9yIGJ1Z3RyYWNrZXIuZ2V0X2J1Z191cmwiIiIK
KworICAgIGNsYXNzIFRyYW5zaWVudFRyYWNrZXIob2JqZWN0KToKKyAgICAgICAgIiIiQW4gdHJh
bnNpZW50IHRyYWNrZXIgdXNlZCBmb3IgdGVzdGluZy4iIiIKKworICAgICAgICBAY2xhc3NtZXRo
b2QKKyAgICAgICAgZGVmIGdldChrbGFzcywgYWJicmV2aWF0aW9uLCBicmFuY2gpOgorICAgICAg
ICAgICAga2xhc3MubG9nLmFwcGVuZCgoJ2dldCcsIGFiYnJldmlhdGlvbiwgYnJhbmNoKSkKKyAg
ICAgICAgICAgIGlmIGFiYnJldmlhdGlvbiAhPSAndHJhbnNpZW50JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIGtsYXNzKCkKKworICAgICAgICBkZWYg
Z2V0X2J1Z191cmwoc2VsZiwgYnVnX2lkKToKKyAgICAgICAgICAgIHNlbGYubG9nLmFwcGVuZCgo
J2dldF9idWdfdXJsJywgYnVnX2lkKSkKKyAgICAgICAgICAgIHJldHVybiAiaHR0cDovL2J1Z3Mu
Y29tLyVzIiAlIGJ1Z19pZAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBUZXN0Q2Fz
ZVdpdGhNZW1vcnlUcmFuc3BvcnQuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi50cmFja2VyX3R5
cGUgPSBUZXN0R2V0QnVnVVJMLlRyYW5zaWVudFRyYWNrZXIKKyAgICAgICAgc2VsZi50cmFja2Vy
X3R5cGUubG9nID0gW10KKyAgICAgICAgYnVndHJhY2tlci50cmFja2VyX3JlZ2lzdHJ5LnJlZ2lz
dGVyKCd0cmFuc2llbnQnLCBzZWxmLnRyYWNrZXJfdHlwZSkKKyAgICAgICAgc2VsZi5hZGRDbGVh
bnVwKGxhbWJkYToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Z3RyYWNrZXIudHJhY2tlcl9y
ZWdpc3RyeS5yZW1vdmUoJ3RyYW5zaWVudCcpKQorCisgICAgZGVmIHRlc3RfZ2V0X2J1Z191cmxf
Zm9yX3RyYW5zaWVudF90cmFja2VyKHNlbGYpOgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2Vf
YnJhbmNoKCdzb21lX2JyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly9i
dWdzLmNvbS8xMjM0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBidWd0cmFja2VyLmdldF9i
dWdfdXJsKCd0cmFuc2llbnQnLCBicmFuY2gsICcxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCisgICAgICAgICAgICBbKCdnZXQnLCAndHJhbnNpZW50JywgYnJhbmNoKSwgKCdnZXRf
YnVnX3VybCcsICcxMjM0JyldLAorICAgICAgICAgICAgc2VsZi50cmFja2VyX3R5cGUubG9nKQor
CisgICAgZGVmIHRlc3RfdW5yZWNvZ25pemVkX2FiYnJldmlhdGlvbl9yYWlzZXNfZXJyb3Ioc2Vs
Zik6CisgICAgICAgICIiIklmIHRoZSBhYmJyZXZpYXRpb24gaXMgdW5yZWNvZ25pemVkLCB0aGVu
IHJhaXNlIGFuIGVycm9yLiIiIgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCdz
b21lX2JyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Vbmtub3duQnVn
VHJhY2tlckFiYnJldmlhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVndHJhY2tl
ci5nZXRfYnVnX3VybCwgJ3h4eCcsIGJyYW5jaCwgJzEyMzQnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFsoJ2dldCcsICd4eHgnLCBicmFuY2gpXSwgc2VsZi50cmFja2VyX3R5cGUubG9nKQor
CisKK2NsYXNzIFRlc3RCdWlsdGluVHJhY2tlcnMoVGVzdENhc2VXaXRoTWVtb3J5VHJhbnNwb3J0
KToKKyAgICAiIiJUZXN0IHRoYXQgdGhlIGJ1aWx0aW4gdHJhY2tlcnMgYXJlIHJlZ2lzdGVyZWQg
YW5kIHJldHVybiBzYW5lIFVSTHMuIiIiCisKKyAgICBkZWYgdGVzdF9sYXVuY2hwYWRfcmVnaXN0
ZXJlZChzZWxmKToKKyAgICAgICAgIiIiVGhlIExhdW5jaHBhZCBidWcgdHJhY2tlciBzaG91bGQg
YmUgcmVnaXN0ZXJlZCBieSBkZWZhdWx0IGFuZAorICAgICAgICBnZW5lcmF0ZSBMYXVuY2hwYWQg
YnVnIHBhZ2UgVVJMcy4KKyAgICAgICAgIiIiCisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9i
cmFuY2goJ3NvbWVfYnJhbmNoJykKKyAgICAgICAgdHJhY2tlciA9IGJ1Z3RyYWNrZXIudHJhY2tl
cl9yZWdpc3RyeS5nZXRfdHJhY2tlcignbHAnLCBicmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ2h0dHBzOi8vbGF1bmNocGFkLm5ldC9idWdzLzEyMzQnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHRyYWNrZXIuZ2V0X2J1Z191cmwoJzEyMzQnKSkKKworICAgIGRlZiB0ZXN0X2Rl
Ymlhbl9yZWdpc3RlcmVkKHNlbGYpOgorICAgICAgICAiIiJUaGUgRGViaWFuIGJ1ZyB0cmFja2Vy
IHNob3VsZCBiZSByZWdpc3RlcmVkIGJ5IGRlZmF1bHQgYW5kIGdlbmVyYXRlCisgICAgICAgIGJ1
Z3MuZGViaWFuLm9yZyBidWcgcGFnZSBVUkxzLgorICAgICAgICAiIiIKKyAgICAgICAgYnJhbmNo
ID0gc2VsZi5tYWtlX2JyYW5jaCgnc29tZV9icmFuY2gnKQorICAgICAgICB0cmFja2VyID0gYnVn
dHJhY2tlci50cmFja2VyX3JlZ2lzdHJ5LmdldF90cmFja2VyKCdkZWInLCBicmFuY2gpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMTIzNCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhY2tlci5nZXRfYnVnX3VybCgnMTIzNCcpKQorCisgICAg
ZGVmIHRlc3RfdHJhY19yZWdpc3RlcmVkKHNlbGYpOgorICAgICAgICAiIiJUaGUgVHJhYyBidWcg
dHJhY2tlciBzaG91bGQgYmUgcmVnaXN0ZXJlZCBieSBkZWZhdWx0IGFuZCBnZW5lcmF0ZQorICAg
ICAgICBUcmFjIGJ1ZyBwYWdlIFVSTHMgd2hlbiB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlv
biBpcyBwcmVzZW50LgorICAgICAgICAiIiIKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2Jy
YW5jaCgnc29tZV9icmFuY2gnKQorICAgICAgICBjb25maWcgPSBicmFuY2guZ2V0X2NvbmZpZygp
CisgICAgICAgIGNvbmZpZy5zZXRfdXNlcl9vcHRpb24oJ3RyYWNfZm9vX3VybCcsICdodHRwOi8v
YnVncy5jb20vdHJhYycpCisgICAgICAgIHRyYWNrZXIgPSBidWd0cmFja2VyLnRyYWNrZXJfcmVn
aXN0cnkuZ2V0X3RyYWNrZXIoJ2ZvbycsIGJyYW5jaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnaHR0cDovL2J1Z3MuY29tL3RyYWMvdGlja2V0LzEyMzQnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyYWNrZXIuZ2V0X2J1Z191cmwoJzEyMzQnKSkKKworICAgIGRlZiB0ZXN0X2J1Z3pp
bGxhX3JlZ2lzdGVyZWQoc2VsZik6CisgICAgICAgICIiIlRoZSBCdWd6aWxsYSBidWcgdHJhY2tl
ciBzaG91bGQgYmUgcmVnaXN0ZXJlZCBieSBkZWZhdWx0IGFuZAorICAgICAgICBnZW5lcmF0ZSBC
dWd6aWxsYSBidWcgcGFnZSBVUkxzIHdoZW4gdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24g
aXMKKyAgICAgICAgcHJlc2VudC4KKyAgICAgICAgIiIiCisgICAgICAgIGJyYW5jaCA9IHNlbGYu
bWFrZV9icmFuY2goJ3NvbWVfYnJhbmNoJykKKyAgICAgICAgY29uZmlnID0gYnJhbmNoLmdldF9j
b25maWcoKQorICAgICAgICBjb25maWcuc2V0X3VzZXJfb3B0aW9uKCdidWd6aWxsYV9mb29fdXJs
JywgJ2h0dHA6Ly9idWdzLmNvbScpCisgICAgICAgIHRyYWNrZXIgPSBidWd0cmFja2VyLnRyYWNr
ZXJfcmVnaXN0cnkuZ2V0X3RyYWNrZXIoJ2ZvbycsIGJyYW5jaCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnaHR0cDovL2J1Z3MuY29tL3Nob3dfYnVnLmNnaT9pZD0xMjM0JywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFja2VyLmdldF9idWdfdXJsKCcxMjM0JykpCisKKworY2xhc3Mg
VGVzdFVuaXF1ZUludGVnZXJCdWdUcmFja2VyKFRlc3RDYXNlV2l0aE1lbW9yeVRyYW5zcG9ydCk6
CisKKyAgICBkZWYgdGVzdF9qb2luc19pZF90b19iYXNlX3VybChzZWxmKToKKyAgICAgICAgIiIi
VGhlIFVSTCBvZiBhIGJ1ZyBpcyB0aGUgYmFzZSBVUkwgam9pbmVkIHRvIHRoZSBpZGVudGlmaWVy
LiIiIgorICAgICAgICB0cmFja2VyID0gYnVndHJhY2tlci5VbmlxdWVJbnRlZ2VyQnVnVHJhY2tl
cigneHh4JywgJ2h0dHA6Ly9idWdzLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0
dHA6Ly9idWdzLmNvbS8xMjM0JywgdHJhY2tlci5nZXRfYnVnX3VybCgnMTIzNCcpKQorCisgICAg
ZGVmIHRlc3RfcmV0dXJuc190cmFja2VyX2lmX2FiYnJldmlhdGlvbl9tYXRjaGVzKHNlbGYpOgor
ICAgICAgICAiIiJUaGUgZ2V0KCkgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2Yg
dGhlIHRyYWNrZXIgaWYgdGhlCisgICAgICAgIGdpdmVuIGFiYnJldmlhdGlvbiBtYXRjaGVzIHRo
ZSB0cmFja2VyJ3MgYWJicmV2aWF0ZWQgbmFtZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyYWNr
ZXIgPSBidWd0cmFja2VyLlVuaXF1ZUludGVnZXJCdWdUcmFja2VyKCd4eHgnLCAnaHR0cDovL2J1
Z3MuY29tJykKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnc29tZV9icmFuY2gn
KQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYWNrZXIsIHRyYWNrZXIuZ2V0KCd4eHgnLCBicmFu
Y2gpKQorCisgICAgZGVmIHRlc3RfcmV0dXJuc19ub25lX2lmX2FiYnJldmlhdGlvbl9kb2VzbnRf
bWF0Y2goc2VsZik6CisgICAgICAgICIiIlRoZSBnZXQoKSBtZXRob2Qgc2hvdWxkIHJldHVybiBO
b25lIGlmIHRoZSBnaXZlbiBhYmJyZXZpYXRlZCBuYW1lCisgICAgICAgIGRvZXNuJ3QgbWF0Y2gg
dGhlIHRyYWNrZXIncyBhYmJyZXZpYXRpb24uCisgICAgICAgICIiIgorICAgICAgICB0cmFja2Vy
ID0gYnVndHJhY2tlci5VbmlxdWVJbnRlZ2VyQnVnVHJhY2tlcigneHh4JywgJ2h0dHA6Ly9idWdz
LmNvbScpCisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9icmFuY2goJ3NvbWVfYnJhbmNoJykK
KyAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB0cmFja2VyLmdldCgneXl5JywgYnJhbmNoKSkK
KworICAgIGRlZiB0ZXN0X2RvZXNudF9jb25zdWx0X2JyYW5jaChzZWxmKToKKyAgICAgICAgIiIi
QSBVbmlxdWVJbnRlZ2VyQnVnVHJhY2tlciBzaG91bGRuJ3QgY29uc3VsdCB0aGUgYnJhbmNoIGZv
ciB0cmFja2VyCisgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgdHJh
Y2tlciA9IGJ1Z3RyYWNrZXIuVW5pcXVlSW50ZWdlckJ1Z1RyYWNrZXIoJ3h4eCcsICdodHRwOi8v
YnVncy5jb20nKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYWNrZXIsIHRyYWNrZXIuZ2V0KCd4
eHgnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB0cmFja2VyLmdldCgneXl5
JywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19idWdfaWRfb25seV9hY2NlcHRzX2ludGVn
ZXJzKHNlbGYpOgorICAgICAgICAiIiJBIFVuaXF1ZUludGVnZXJCdWdUcmFja2VyIGFjY2VwdHMg
aW50ZWdlcnMgYXMgYnVnIElEcy4iIiIKKyAgICAgICAgdHJhY2tlciA9IGJ1Z3RyYWNrZXIuVW5p
cXVlSW50ZWdlckJ1Z1RyYWNrZXIoJ3h4eCcsICdodHRwOi8vYnVncy5jb20nKQorICAgICAgICB0
cmFja2VyLmNoZWNrX2J1Z19pZCgnMTIzNCcpCisKKyAgICBkZWYgdGVzdF9jaGVja19idWdfaWRf
ZG9lc250X2FjY2VwdF9ub25faW50ZWdlcnMoc2VsZik6CisgICAgICAgICIiIkEgVW5pcXVlSW50
ZWdlckJ1Z1RyYWNrZXIgcmVqZWN0cyBub24taW50ZWdlcnMgYXMgYnVnIElEcy4iIiIKKyAgICAg
ICAgdHJhY2tlciA9IGJ1Z3RyYWNrZXIuVW5pcXVlSW50ZWdlckJ1Z1RyYWNrZXIoJ3h4eCcsICdo
dHRwOi8vYnVncy5jb20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAg
IGVycm9ycy5NYWxmb3JtZWRCdWdJZGVudGlmaWVyLCB0cmFja2VyLmNoZWNrX2J1Z19pZCwgJ3Jl
ZCcpCisKKworY2xhc3MgVGVzdFVSTFBhcmFtZXRyaXplZEludGVnZXJCdWdUcmFja2VyKFRlc3RD
YXNlV2l0aE1lbW9yeVRyYW5zcG9ydCk6CisgICAgIiIiVGVzdHMgZm9yIFRyYWNUcmFja2VyLiIi
IgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBUZXN0Q2FzZVdpdGhNZW1vcnlUcmFu
c3BvcnQuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi51cmwgPSAnaHR0cDovL3R3aXN0ZWRtYXRy
aXguY29tL3RyYWMnCisgICAgICAgIHNlbGYudHJhY2tlciA9IGJ1Z3RyYWNrZXIuVVJMUGFyYW1l
dHJpemVkSW50ZWdlckJ1Z1RyYWNrZXIoJ3NvbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aWNrZXQvJykKKwor
ICAgIGRlZiB0ZXN0X2dldF93aXRoX3Vuc3VwcG9ydGVkX3RhZyhzZWxmKToKKyAgICAgICAgIiIi
SWYgYXNrZWQgZm9yIGFuIHVucmVjb2duaXplZCBvciB1bmNvbmZpZ3VyZWQgdGFnLCByZXR1cm4g
Tm9uZS4iIiIKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnc29tZV9icmFuY2gn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYudHJhY2tlci5nZXQoJ2xwJywg
YnJhbmNoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnRyYWNrZXIuZ2V0
KCd0d2lzdGVkJywgYnJhbmNoKSkKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3N1cHBvcnRlZF90
YWcoc2VsZik6CisgICAgICAgICIiIklmIGFza2VkIGZvciBhIHZhbGlkIHRhZywgcmV0dXJuIGEg
dHJhY2tlciBpbnN0YW5jZSB0aGF0IGNhbiBtYXAgYnVnCisgICAgICAgIElEcyB0byA8YmFzZV91
cmw+LzxidWdfYXJlYT4gKyA8YnVnX2lkPi4iIiIKKyAgICAgICAgYnVndHJhY2tlci50cmFja2Vy
X3JlZ2lzdHJ5LnJlZ2lzdGVyKCdzb21lJywgc2VsZi50cmFja2VyKQorICAgICAgICBzZWxmLmFk
ZENsZWFudXAobGFtYmRhOiBidWd0cmFja2VyLnRyYWNrZXJfcmVnaXN0cnkucmVtb3ZlKCdzb21l
JykpCisKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnc29tZV9icmFuY2gnKQor
ICAgICAgICBjb25maWcgPSBicmFuY2guZ2V0X2NvbmZpZygpCisgICAgICAgIGNvbmZpZy5zZXRf
dXNlcl9vcHRpb24oJ3NvbWVfdHdpc3RlZF91cmwnLCBzZWxmLnVybCkKKyAgICAgICAgdHJhY2tl
ciA9IHNlbGYudHJhY2tlci5nZXQoJ3R3aXN0ZWQnLCBicmFuY2gpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICB1cmx1dGlscy5qb2luKHNlbGYudXJsLCAndGlja2V0Lycp
ICsgJzEyMzQnLAorICAgICAgICAgICAgdHJhY2tlci5nZXRfYnVnX3VybCgnMTIzNCcpKQorCisg
ICAgZGVmIHRlc3RfZ2V0X2J1Z191cmxfZm9yX2JhZF9idWcoc2VsZik6CisgICAgICAgICIiIldo
ZW4gZ2l2ZW4gYSBidWcgaWRlbnRpZmllciB0aGF0IGlzIGludmFsaWQgZm9yIFRyYWMsIGdldF9i
dWdfdXJsCisgICAgICAgIHNob3VsZCByYWlzZSBhbiBlcnJvci4KKyAgICAgICAgIiIiCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXJyb3JzLk1hbGZvcm1lZEJ1Z0lk
ZW50aWZpZXIsIHNlbGYudHJhY2tlci5nZXRfYnVnX3VybCwgJ2JhZCcpCgo=

=== added file bzrlib/tests/test_help.py // file-id:test_help.py-20070419045354
... -6q6rq15j9e2n5fna-1 // last-changed:robertc@robertcollins.net-2007042300245
... 3-6mw8b5sexbmlqer9 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3Rlc3RfaGVscC5weQpAQCAtMCwwICsxLDI1
OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg
MDIxMTEtMTMwNyAgVVNBCisKKyIiIlVuaXQgdGVzdHMgZm9yIHRoZSBienJsaWIuaGVscCBtb2R1
bGUuIiIiCisKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIGJ6cmxpYiBp
bXBvcnQgKAorICAgIGJ1aWx0aW5zLAorICAgIGNvbW1hbmRzLAorICAgIGVycm9ycywKKyAgICBo
ZWxwLAorICAgIGhlbHBfdG9waWNzLAorICAgIHBsdWdpbiwKKyAgICB0ZXN0cywKKyAgICApCisK
KworY2xhc3MgVGVzdENvbW1hbmRIZWxwKHRlc3RzLlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBm
b3IgaGVscCBvbiBjb21tYW5kcy4iIiIKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfaGVscF9pbmNs
dWRlc19zZWVfYWxzbyhzZWxmKToKKyAgICAgICAgY2xhc3MgY21kX1dpdGhTZWVBbHNvKGNvbW1h
bmRzLkNvbW1hbmQpOgorICAgICAgICAgICAgIiIiQSBzYW1wbGUgY29tbWFuZC4iIiIKKyAgICAg
ICAgICAgIF9zZWVfYWxzbyA9IFsnZm9vJywgJ2JhciddCisgICAgICAgIGNtZCA9IGNtZF9XaXRo
U2VlQWxzbygpCisgICAgICAgIGhlbHB0ZXh0ID0gY21kLmdldF9oZWxwX3RleHQoKQorICAgICAg
ICBzZWxmLmFzc2VydEVuZHNXaXRoKAorICAgICAgICAgICAgaGVscHRleHQsCisgICAgICAgICAg
ICAnICAtaCwgLS1oZWxwICBzaG93IGhlbHAgbWVzc2FnZVxuJworICAgICAgICAgICAgJ1xuJwor
ICAgICAgICAgICAgJ1NlZSBhbHNvOiBiYXIsIGZvb1xuJykKKworICAgIGRlZiB0ZXN0X2dldF9o
ZWxwX3RleHQoc2VsZik6CisgICAgICAgICIiIkNvbW1hbmRzIGhhdmUgYSBnZXRfaGVscF90ZXh0
IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZWlyIGhlbHAuIiIiCisgICAgICAgIGNsYXNzIGNtZF9E
ZW1vKGNvbW1hbmRzLkNvbW1hbmQpOgorICAgICAgICAgICAgIiIiQSBzYW1wbGUgY29tbWFuZC4i
IiIKKyAgICAgICAgY21kID0gY21kX0RlbW8oKQorICAgICAgICBoZWxwdGV4dCA9IGNtZC5nZXRf
aGVscF90ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGFydHNXaXRoKGhlbHB0ZXh0LCAndXNh
Z2U6IGJ6ciBEZW1vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFbmRzV2l0aChoZWxwdGV4dCwgJ3No
b3cgaGVscCBtZXNzYWdlXG4nKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF93aXRoX2FkZGl0aW9u
YWxfc2VlX2Fsc28oc2VsZik6CisgICAgICAgIGNsYXNzIGNtZF9XaXRoU2VlQWxzbyhjb21tYW5k
cy5Db21tYW5kKToKKyAgICAgICAgICAgICIiIkEgc2FtcGxlIGNvbW1hbmQuIiIiCisgICAgICAg
ICAgICBfc2VlX2Fsc28gPSBbJ2ZvbycsICdiYXInXQorICAgICAgICBjbWQgPSBjbWRfV2l0aFNl
ZUFsc28oKQorICAgICAgICBoZWxwdGV4dCA9IGNtZC5nZXRfaGVscF90ZXh0KFsnZ2FtJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RW5kc1dpdGgoCisgICAgICAgICAgICBoZWxwdGV4dCwKKyAgICAg
ICAgICAgICcgIC1oLCAtLWhlbHAgIHNob3cgaGVscCBtZXNzYWdlXG4nCisgICAgICAgICAgICAn
XG4nCisgICAgICAgICAgICAnU2VlIGFsc286IGJhciwgZm9vLCBnYW1cbicpCisKKyAgICBkZWYg
dGVzdF9jb21tYW5kX29ubHlfYWRkaXRpb25hbF9zZWVfYWxzbyhzZWxmKToKKyAgICAgICAgY2xh
c3MgY21kX1dpdGhTZWVBbHNvKGNvbW1hbmRzLkNvbW1hbmQpOgorICAgICAgICAgICAgIiIiQSBz
YW1wbGUgY29tbWFuZC4iIiIKKyAgICAgICAgY21kID0gY21kX1dpdGhTZWVBbHNvKCkKKyAgICAg
ICAgaGVscHRleHQgPSBjbWQuZ2V0X2hlbHBfdGV4dChbJ2dhbSddKQorICAgICAgICBzZWxmLmFz
c2VydEVuZHNXaXRoKAorICAgICAgICAgICAgaGVscHRleHQsCisgICAgICAgICAgICAnICAtaCwg
LS1oZWxwICBzaG93IGhlbHAgbWVzc2FnZVxuJworICAgICAgICAgICAgJ1xuJworICAgICAgICAg
ICAgJ1NlZSBhbHNvOiBnYW1cbicpCisKKyAgICBkZWYgdGVzdF9nZXRfaGVscF90b3BpYyhzZWxm
KToKKyAgICAgICAgIiIiVGhlIGhlbHAgdG9waWMgZm9yIGEgQ29tbWFuZCBpcyBpdHMgbmFtZSgp
LiIiIgorICAgICAgICBjbGFzcyBjbWRfZm9vX2Jhcihjb21tYW5kcy5Db21tYW5kKToKKyAgICAg
ICAgICAgICIiIkEgc2FtcGxlIGNvbW1hbmQuIiIiCisgICAgICAgIGNtZCA9IGNtZF9mb29fYmFy
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQubmFtZSgpLCBjbWQuZ2V0X2hlbHBfdG9w
aWMoKSkKKyAgICAKKworY2xhc3MgVGVzdFJlZ2lzdGVyZWRUb3BpYyh0ZXN0cy5UZXN0Q2FzZSk6
CisgICAgIiIiVGVzdHMgZm9yIHRoZSBSZWdpc3RlcmVkVG9waWMgY2xhc3MuIiIiCisKKyAgICBk
ZWYgdGVzdF9jb250cnVjdChzZWxmKToKKyAgICAgICAgIiIiQ29uc3RydWN0aW9uIHRha2VzIHRo
ZSBoZWxwIHRvcGljIG5hbWUgZm9yIHRoZSByZWdpc3RlcmVkIGl0ZW0uIiIiCisgICAgICAgICMg
dmFsaWRhdGUgb3VyIHRlc3QgCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYmFzaWMnIGluIGhl
bHBfdG9waWNzLnRvcGljX3JlZ2lzdHJ5KQorICAgICAgICB0b3BpYyA9IGhlbHBfdG9waWNzLlJl
Z2lzdGVyZWRUb3BpYygnYmFzaWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYXNpYycs
IHRvcGljLnRvcGljKQorCisgICAgZGVmIHRlc3RfZ2V0X2hlbHBfdGV4dChzZWxmKToKKyAgICAg
ICAgIiIiQSBSZWdpc3RlcmVkVG9waWMgcmV0dXJucyB0aGUgZ2V0X2RldGFpbCByZXN1bHRzIGZv
ciBnZXRfaGVscF90ZXh0LiIiIgorICAgICAgICB0b3BpYyA9IGhlbHBfdG9waWNzLlJlZ2lzdGVy
ZWRUb3BpYygnY29tbWFuZHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlbHBfdG9waWNz
LnRvcGljX3JlZ2lzdHJ5LmdldF9kZXRhaWwoJ2NvbW1hbmRzJyksCisgICAgICAgICAgICB0b3Bp
Yy5nZXRfaGVscF90ZXh0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfaGVscF90ZXh0X3dpdGhfYWRk
aXRpb25hbF9zZWVfYWxzbyhzZWxmKToKKyAgICAgICAgdG9waWMgPSBoZWxwX3RvcGljcy5SZWdp
c3RlcmVkVG9waWMoJ2NvbW1hbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFbmRzV2l0aCgKKyAg
ICAgICAgICAgIHRvcGljLmdldF9oZWxwX3RleHQoWydmb28nLCAnYmFyJ10pLAorICAgICAgICAg
ICAgJ1xuJworICAgICAgICAgICAgJ1NlZSBhbHNvOiBiYXIsIGZvb1xuJykKKworICAgIGRlZiB0
ZXN0X2dldF9oZWxwX3RvcGljKHNlbGYpOgorICAgICAgICAiIiJUaGUgaGVscCB0b3BpYyBmb3Ig
YSBSZWdpc3RlcmVkVG9waWMgaXMgaXRzIHRvcGljIGZyb20gY29uc3RydWN0aW9uLiIiIgorICAg
ICAgICB0b3BpYyA9IGhlbHBfdG9waWNzLlJlZ2lzdGVyZWRUb3BpYygnZm9vYmFyJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vYmFyJywgdG9waWMuZ2V0X2hlbHBfdG9waWMoKSkKKyAg
ICAgICAgdG9waWMgPSBoZWxwX3RvcGljcy5SZWdpc3RlcmVkVG9waWMoJ2JheicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2JheicsIHRvcGljLmdldF9oZWxwX3RvcGljKCkpCisKKworY2xh
c3MgVGVzdFRvcGljSW5kZXgodGVzdHMuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB0aGUg
SGVscFRvcGljSW5kZXggY2xhc3MuIiIiCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbnN0cnVj
dGFibGUoc2VsZik6CisgICAgICAgIGluZGV4ID0gaGVscF90b3BpY3MuSGVscFRvcGljSW5kZXgo
KQorCisgICAgZGVmIHRlc3RfZ2V0X3RvcGljc19Ob25lKHNlbGYpOgorICAgICAgICAiIiJTZWFy
Y2hpbmcgZm9yIE5vbmUgcmV0dXJucyB0aGUgYmFzaWMgaGVscCB0b3BpYy4iIiIKKyAgICAgICAg
aW5kZXggPSBoZWxwX3RvcGljcy5IZWxwVG9waWNJbmRleCgpCisgICAgICAgIHRvcGljcyA9IGlu
ZGV4LmdldF90b3BpY3MoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4odG9w
aWNzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRvcGljc1swXSwgaGVscF90b3Bp
Y3MuUmVnaXN0ZXJlZFRvcGljKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYXNpYycsIHRv
cGljc1swXS50b3BpYykKKworICAgIGRlZiB0ZXN0X2dldF90b3BpY3NfdG9waWNzKHNlbGYpOgor
ICAgICAgICAiIiJTZWFyY2hpbmcgZm9yIGEgc3RyaW5nIHJldHVybnMgdGhlIG1hdGNoaW5nIHN0
cmluZy4iIiIKKyAgICAgICAgaW5kZXggPSBoZWxwX3RvcGljcy5IZWxwVG9waWNJbmRleCgpCisg
ICAgICAgIHRvcGljcyA9IGluZGV4LmdldF90b3BpY3MoJ3RvcGljcycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMSwgbGVuKHRvcGljcykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5j
ZSh0b3BpY3NbMF0sIGhlbHBfdG9waWNzLlJlZ2lzdGVyZWRUb3BpYykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgndG9waWNzJywgdG9waWNzWzBdLnRvcGljKQorCisgICAgZGVmIHRlc3RfZ2V0
X3RvcGljc19ub190b3BpYyhzZWxmKToKKyAgICAgICAgIiIiU2VhcmNoaW5nIGZvciBzb21ldGhp
bmcgbm90IHJlZ2lzdGVyZWQgcmV0dXJucyBbXS4iIiIKKyAgICAgICAgaW5kZXggPSBoZWxwX3Rv
cGljcy5IZWxwVG9waWNJbmRleCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGluZGV4
LmdldF90b3BpY3MoJ25vdGhpbmcgYnkgdGhpcyBuYW1lJykpCisKKyAgICBkZWYgdGVzdF9wcmVm
aXgoc2VsZik6CisgICAgICAgICIiIlRvcGljSW5kZXggaGFzIGEgcHJlZml4IG9mICcnLiIiIgor
ICAgICAgICBpbmRleCA9IGhlbHBfdG9waWNzLkhlbHBUb3BpY0luZGV4KCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnJywgaW5kZXgucHJlZml4KQorCisKK2NsYXNzIFRlc3RDb21tYW5kSW5k
ZXgodGVzdHMuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB0aGUgSGVscENvbW1hbmRJbmRl
eCBjbGFzcy4iIiIKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29uc3RydWN0YWJsZShzZWxmKToK
KyAgICAgICAgaW5kZXggPSBjb21tYW5kcy5IZWxwQ29tbWFuZEluZGV4KCkKKworICAgIGRlZiB0
ZXN0X2dldF90b3BpY3NfTm9uZShzZWxmKToKKyAgICAgICAgIiIiU2VhcmNoaW5nIGZvciBOb25l
IHJldHVybnMgYW4gZW1wdHkgbGlzdC4iIiIKKyAgICAgICAgaW5kZXggPSBjb21tYW5kcy5IZWxw
Q29tbWFuZEluZGV4KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgaW5kZXguZ2V0X3Rv
cGljcyhOb25lKSkKKworICAgIGRlZiB0ZXN0X2dldF90b3BpY3Nfcm9ja3Moc2VsZik6CisgICAg
ICAgICIiIlNlYXJjaGluZyBmb3IgJ3JvY2tzJyByZXR1cm5zIHRoZSBjbWRfcm9ja3MgY29tbWFu
ZCBpbnN0YW5jZS4iIiIKKyAgICAgICAgaW5kZXggPSBjb21tYW5kcy5IZWxwQ29tbWFuZEluZGV4
KCkKKyAgICAgICAgdG9waWNzID0gaW5kZXguZ2V0X3RvcGljcygncm9ja3MnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDEsIGxlbih0b3BpY3MpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5z
dGFuY2UodG9waWNzWzBdLCBidWlsdGlucy5jbWRfcm9ja3MpCisKKyAgICBkZWYgdGVzdF9nZXRf
dG9waWNzX25vX3RvcGljKHNlbGYpOgorICAgICAgICAiIiJTZWFyY2hpbmcgZm9yIHNvbWV0aGlu
ZyB0aGF0IGlzIG5vdCBhIGNvbW1hbmQgcmV0dXJucyBbXS4iIiIKKyAgICAgICAgaW5kZXggPSBj
b21tYW5kcy5IZWxwQ29tbWFuZEluZGV4KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwg
aW5kZXguZ2V0X3RvcGljcygnbm90aGluZyBieSB0aGlzIG5hbWUnKSkKKworICAgIGRlZiB0ZXN0
X3ByZWZpeChzZWxmKToKKyAgICAgICAgIiIiQ29tbWFuZEluZGV4IGhhcyBhIHByZWZpeCBvZiAn
Y29tbWFuZHMvJy4iIiIKKyAgICAgICAgaW5kZXggPSBjb21tYW5kcy5IZWxwQ29tbWFuZEluZGV4
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tbWFuZHMvJywgaW5kZXgucHJlZml4KQor
CisgICAgZGVmIHRlc3RfZ2V0X3RvcGljX3dpdGhfcHJlZml4KHNlbGYpOgorICAgICAgICAiIiJT
ZWFyY2hpbmcgZm9yIGNvbW1hbmRzL3JvY2tzIHJldHVybnMgdGhlIHJvY2tzIGNvbW1hbmQgb2Jq
ZWN0LiIiIgorICAgICAgICBpbmRleCA9IGNvbW1hbmRzLkhlbHBDb21tYW5kSW5kZXgoKQorICAg
ICAgICB0b3BpY3MgPSBpbmRleC5nZXRfdG9waWNzKCdjb21tYW5kcy9yb2NrcycpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHRvcGljcykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJ
bnN0YW5jZSh0b3BpY3NbMF0sIGJ1aWx0aW5zLmNtZF9yb2NrcykKKworCitjbGFzcyBUZXN0SGVs
cEluZGljZXModGVzdHMuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB0aGUgSGVscEluZGlj
ZXMgY2xhc3MuIiIiCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3NlYXJjaF9wYXRoKHNlbGYpOgor
ICAgICAgICAiIiJUaGUgZGVmYXVsdCBzZWFyY2ggcGF0aCBzaG91bGQgaW5jbHVkZSBpbnRlcm5h
bCBpbmRleHMuIiIiCisgICAgICAgIGluZGljZXMgPSBoZWxwLkhlbHBJbmRpY2VzKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4oaW5kaWNlcy5zZWFyY2hfcGF0aCkpCisgICAgICAg
ICMgaGVscCB0b3BpY3Mgc2hvdWxkIGJlIHNlYXJjaGVkIGluIGZpcnN0LgorICAgICAgICBzZWxm
LmFzc2VydElzSW5zdGFuY2UoaW5kaWNlcy5zZWFyY2hfcGF0aFswXSwKKyAgICAgICAgICAgIGhl
bHBfdG9waWNzLkhlbHBUb3BpY0luZGV4KQorICAgICAgICAjIHdpdGggY29tbWFuZHMgYmVpbmcg
c2VhcmNoIHNlY29uZC4KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZGljZXMuc2Vh
cmNoX3BhdGhbMV0sCisgICAgICAgICAgICBjb21tYW5kcy5IZWxwQ29tbWFuZEluZGV4KQorICAg
ICAgICAjIGFuZCBwbHVnaW5zIGFyZSBhIHRoaXJkIGluZGV4LgorICAgICAgICBzZWxmLmFzc2Vy
dElzSW5zdGFuY2UoaW5kaWNlcy5zZWFyY2hfcGF0aFsyXSwKKyAgICAgICAgICAgIHBsdWdpbi5Q
bHVnaW5zSGVscEluZGV4KQorCisgICAgZGVmIHRlc3Rfc2VhcmNoX2Zvcl91bmtub3duX3RvcGlj
X3JhaXNlcyhzZWxmKToKKyAgICAgICAgIiIiU2VhcmNoaW5nIGZvciBhbiB1bmtub3duIHRvcGlj
IHNob3VsZCByYWlzZSBOb0hlbHBUb3BpYy4iIiIKKyAgICAgICAgaW5kaWNlcyA9IGhlbHAuSGVs
cEluZGljZXMoKQorICAgICAgICBpbmRpY2VzLnNlYXJjaF9wYXRoID0gW10KKyAgICAgICAgZXJy
b3IgPSBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuTm9IZWxwVG9waWMsIGluZGljZXMuc2VhcmNo
LCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgZXJyb3IudG9waWMpCisK
KyAgICBkZWYgdGVzdF9zZWFyY2hfY2FsbHNfZ2V0X3RvcGljKHNlbGYpOgorICAgICAgICAiIiJT
ZWFyY2hpbmcgc2hvdWxkIGNhbGwgZ2V0X3RvcGljcyBpbiBhbGwgaW5kZXhlcyBpbiBvcmRlci4i
IiIKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBjbGFzcyBSZWNvcmRpbmdJbmRleChvYmpl
Y3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAg
ICAgIHNlbGYucHJlZml4ID0gbmFtZQorICAgICAgICAgICAgZGVmIGdldF90b3BpY3Moc2VsZiwg
dG9waWMpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgoJ2dldF90b3BpY3MnLCBzZWxm
LnByZWZpeCwgdG9waWMpKQorICAgICAgICAgICAgICAgIHJldHVybiBbJ3NvbWV0aGluZyddCisg
ICAgICAgIGluZGV4ID0gaGVscC5IZWxwSW5kaWNlcygpCisgICAgICAgIGluZGV4LnNlYXJjaF9w
YXRoID0gW1JlY29yZGluZ0luZGV4KCcxJyksIFJlY29yZGluZ0luZGV4KCcyJyldCisgICAgICAg
ICMgdHJ5IHdpdGggTm9uZQorICAgICAgICBpbmRleC5zZWFyY2goTm9uZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChbCisgICAgICAgICAgICAoJ2dldF90b3BpY3MnLCAnMScsIE5vbmUpLAor
ICAgICAgICAgICAgKCdnZXRfdG9waWNzJywgJzInLCBOb25lKSwKKyAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICBjYWxscykKKyAgICAgICAgIyBhbmQgd2l0aCBhIHN0cmluZworICAgICAgICBk
ZWwgY2FsbHNbOl0KKyAgICAgICAgaW5kZXguc2VhcmNoKCdiYXInKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKFsKKyAgICAgICAgICAgICgnZ2V0X3RvcGljcycsICcxJywgJ2JhcicpLAorICAg
ICAgICAgICAgKCdnZXRfdG9waWNzJywgJzInLCAnYmFyJyksCisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgY2FsbHMpCisKKyAgICBkZWYgdGVzdF9zZWFyY2hfcmV0dXJuc19pbmRleF9hbmRf
cmVzdWx0cyhzZWxmKToKKyAgICAgICAgIiIiU2VhcmNoaW5nIHNob3VsZCByZXR1cm4gaGVscCB0
b3BpY3Mgd2l0aCB0aGVpciBpbmRleCIiIgorICAgICAgICBjbGFzcyBDYW5uZWRJbmRleChvYmpl
Y3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByZWZpeCwgc2VhcmNoX3Jlc3Vs
dCk6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgICAgICAg
ICBzZWxmLnJlc3VsdCA9IHNlYXJjaF9yZXN1bHQKKyAgICAgICAgICAgIGRlZiBnZXRfdG9waWNz
KHNlbGYsIHRvcGljKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKyAgICAg
ICAgaW5kZXggPSBoZWxwLkhlbHBJbmRpY2VzKCkKKyAgICAgICAgaW5kZXhfb25lID0gQ2FubmVk
SW5kZXgoJzEnLCBbJ2EnXSkKKyAgICAgICAgaW5kZXhfdHdvID0gQ2FubmVkSW5kZXgoJzInLCBb
J2InLCAnYyddKQorICAgICAgICBpbmRleC5zZWFyY2hfcGF0aCA9IFtpbmRleF9vbmUsIGluZGV4
X3R3b10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGluZGV4X29uZSwgJ2EnKSwgKGluZGV4
X3R3bywgJ2InKSwgKGluZGV4X3R3bywgJ2MnKV0sCisgICAgICAgICAgICBpbmRleC5zZWFyY2go
Tm9uZSkpCisKKyAgICBkZWYgdGVzdF9zZWFyY2hfY2hlY2tzX2Zvcl9kdXBsaWNhdGVfcHJlZml4
ZXMoc2VsZik6CisgICAgICAgICIiIkl0cyBhbiBlcnJvciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBs
ZSBpbmRpY2VzIHdpdGggdGhlIHNhbWUgcHJlZml4LiIiIgorICAgICAgICBpbmRpY2VzID0gaGVs
cC5IZWxwSW5kaWNlcygpCisgICAgICAgIGluZGljZXMuc2VhcmNoX3BhdGggPSBbaGVscF90b3Bp
Y3MuSGVscFRvcGljSW5kZXgoKSwKKyAgICAgICAgICAgIGhlbHBfdG9waWNzLkhlbHBUb3BpY0lu
ZGV4KCldCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5EdXBsaWNhdGVIZWxwUHJl
Zml4LCBpbmRpY2VzLnNlYXJjaCwgTm9uZSkKCg==

=== added file bzrlib/tests/test_remote.py // file-id:test_remote.py-2006072010
... 3555-yeeg2x51vn0rbtdp-2 // last-changed:mbp@sourcefrog.net-20070507131140-i
... ajs5she7cy0pbst // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3Rlc3RfcmVtb3RlLnB5CkBAIC0wLDAgKzEs
NzcxIEBACisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBDYW5vbmljYWwgTHRkCisjCisjIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0
b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworIiIiVGVzdHMgZm9yIHJlbW90ZSBienJkaXIvYnJh
bmNoL3JlcG8vZXRjCisKK1RoZXNlIGFyZSBwcm94eSBvYmplY3RzIHdoaWNoIGFjdCBvbiByZW1v
dGUgb2JqZWN0cyBieSBzZW5kaW5nIG1lc3NhZ2VzCit0aHJvdWdoIGEgc21hcnQgY2xpZW50LiAg
VGhlIHByb3hpZXMgYXJlIHRvIGJlIGNyZWF0ZWQgd2hlbiBhdHRlbXB0aW5nIHRvIG9wZW4KK3Ro
ZSBvYmplY3QgZ2l2ZW4gYSB0cmFuc3BvcnQgdGhhdCBzdXBwb3J0cyBzbWFydHNlcnZlciBycGMg
b3BlcmF0aW9ucy4gCisKK1RoZXNlIHRlc3RzIGNvcnJlc3BvbmQgdG8gdGVzdHMudGVzdF9zbWFy
dCwgd2hpY2ggZXhlcmNpc2VzIHRoZSBzZXJ2ZXIgc2lkZS4KKyIiIgorCitmcm9tIGNTdHJpbmdJ
TyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSBienJsaWIgaW1wb3J0ICgKKyAgICBienJkaXIsCisg
ICAgZXJyb3JzLAorICAgIHJlbW90ZSwKKyAgICByZXBvc2l0b3J5LAorICAgIHRlc3RzLAorICAg
ICkKK2Zyb20gYnpybGliLmJyYW5jaCBpbXBvcnQgQnJhbmNoCitmcm9tIGJ6cmxpYi5ienJkaXIg
aW1wb3J0IEJ6ckRpciwgQnpyRGlyRm9ybWF0Citmcm9tIGJ6cmxpYi5yZW1vdGUgaW1wb3J0ICgK
KyAgICBSZW1vdGVCcmFuY2gsCisgICAgUmVtb3RlQnpyRGlyLAorICAgIFJlbW90ZUJ6ckRpckZv
cm1hdCwKKyAgICBSZW1vdGVSZXBvc2l0b3J5LAorICAgICkKK2Zyb20gYnpybGliLnJldmlzaW9u
IGltcG9ydCBOVUxMX1JFVklTSU9OCitmcm9tIGJ6cmxpYi5zbWFydCBpbXBvcnQgc2VydmVyLCBt
ZWRpdW0KK2Zyb20gYnpybGliLnNtYXJ0LmNsaWVudCBpbXBvcnQgX1NtYXJ0Q2xpZW50Citmcm9t
IGJ6cmxpYi50cmFuc3BvcnQubWVtb3J5IGltcG9ydCBNZW1vcnlUcmFuc3BvcnQKK2Zyb20gYnpy
bGliLnRyYW5zcG9ydC5yZW1vdGUgaW1wb3J0IFJlbW90ZVRyYW5zcG9ydAorCisKK2NsYXNzIEJh
c2ljUmVtb3RlT2JqZWN0VGVzdHModGVzdHMuVGVzdENhc2VXaXRoVHJhbnNwb3J0KToKKworICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFuc3BvcnRfc2VydmVyID0gc2VydmVy
LlNtYXJ0VENQU2VydmVyX2Zvcl90ZXN0aW5nCisgICAgICAgIHN1cGVyKEJhc2ljUmVtb3RlT2Jq
ZWN0VGVzdHMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBzZWxmLmdl
dF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IHNlbGYudHJhbnNwb3J0LmdldF9z
bWFydF9jbGllbnQoKQorICAgICAgICAjIG1ha2UgYSBicmFuY2ggdGhhdCBjYW4gYmUgb3BlbmVk
IG92ZXIgdGhlIHNtYXJ0IHRyYW5zcG9ydAorICAgICAgICBzZWxmLmxvY2FsX3d0ID0gQnpyRGly
LmNyZWF0ZV9zdGFuZGFsb25lX3dvcmtpbmd0cmVlKCcuJykKKworICAgIGRlZiB0ZWFyRG93bihz
ZWxmKToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQuZGlzY29ubmVjdCgpCisgICAgICAgIHRlc3Rz
LlRlc3RDYXNlV2l0aFRyYW5zcG9ydC50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIHRlc3RfY3Jl
YXRlX3JlbW90ZV9ienJkaXIoc2VsZik6CisgICAgICAgIGIgPSByZW1vdGUuUmVtb3RlQnpyRGly
KHNlbGYudHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYiwgQnpyRGly
KQorCisgICAgZGVmIHRlc3Rfb3Blbl9yZW1vdGVfYnJhbmNoKHNlbGYpOgorICAgICAgICAjIG9w
ZW4gYSBzdGFuZGFsb25lIGJyYW5jaCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAg
YiA9IHJlbW90ZS5SZW1vdGVCenJEaXIoc2VsZi50cmFuc3BvcnQpCisgICAgICAgIGJyYW5jaCA9
IGIub3Blbl9icmFuY2goKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnJhbmNoLCBC
cmFuY2gpCisKKyAgICBkZWYgdGVzdF9yZW1vdGVfcmVwb3NpdG9yeShzZWxmKToKKyAgICAgICAg
YiA9IEJ6ckRpci5vcGVuX2Zyb21fdHJhbnNwb3J0KHNlbGYudHJhbnNwb3J0KQorICAgICAgICBy
ZXBvID0gYi5vcGVuX3JlcG9zaXRvcnkoKQorICAgICAgICByZXZpZCA9IHUnXHhjODIzMTIzMTIz
Jy5lbmNvZGUoJ3V0ZjgnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcG8uaGFzX3Jldmlz
aW9uKHJldmlkKSkKKyAgICAgICAgc2VsZi5sb2NhbF93dC5jb21taXQobWVzc2FnZT0ndGVzdCBj
b21taXQnLCByZXZfaWQ9cmV2aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBvLmhhc19y
ZXZpc2lvbihyZXZpZCkpCisKKyAgICBkZWYgdGVzdF9yZW1vdGVfYnJhbmNoX3JldmlzaW9uX2hp
c3Rvcnkoc2VsZik6CisgICAgICAgIGIgPSBCenJEaXIub3Blbl9mcm9tX3RyYW5zcG9ydChzZWxm
LnRyYW5zcG9ydCkub3Blbl9icmFuY2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBi
LnJldmlzaW9uX2hpc3RvcnkoKSkKKyAgICAgICAgcjEgPSBzZWxmLmxvY2FsX3d0LmNvbW1pdCgn
MXN0IGNvbW1pdCcpCisgICAgICAgIHIyID0gc2VsZi5sb2NhbF93dC5jb21taXQoJzFzdCBjb21t
aXQnLCByZXZfaWQ9dSdceGM4Jy5lbmNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChbcjEsIHIyXSwgYi5yZXZpc2lvbl9oaXN0b3J5KCkpCisKKyAgICBkZWYgdGVzdF9maW5k
X2NvcnJlY3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAiIiJTaG91bGQgb3BlbiBhIFJlbW90ZUJ6
ckRpciBvdmVyIGEgUmVtb3RlVHJhbnNwb3J0IiIiCisgICAgICAgIGZtdCA9IEJ6ckRpckZvcm1h
dC5maW5kX2Zvcm1hdChzZWxmLnRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJl
bW90ZUJ6ckRpckZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gQnpyRGlyRm9ybWF0
Ll9jb250cm9sX3NlcnZlcl9mb3JtYXRzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uo
Zm10LCByZW1vdGUuUmVtb3RlQnpyRGlyRm9ybWF0KQorCisgICAgZGVmIHRlc3Rfb3Blbl9kZXRl
Y3RlZF9zbWFydF9mb3JtYXQoc2VsZik6CisgICAgICAgIGZtdCA9IEJ6ckRpckZvcm1hdC5maW5k
X2Zvcm1hdChzZWxmLnRyYW5zcG9ydCkKKyAgICAgICAgZCA9IGZtdC5vcGVuKHNlbGYudHJhbnNw
b3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgQnpyRGlyKQorCisgICAgZGVm
IHRlc3RfcmVtb3RlX2JyYW5jaF9yZXByKHNlbGYpOgorICAgICAgICBiID0gQnpyRGlyLm9wZW5f
ZnJvbV90cmFuc3BvcnQoc2VsZi50cmFuc3BvcnQpLm9wZW5fYnJhbmNoKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRTdGFydHNXaXRoKHN0cihiKSwgJ1JlbW90ZUJyYW5jaCgnKQorCisKK2NsYXNzIEZh
a2VQcm90b2NvbChvYmplY3QpOgorICAgICIiIkxvb2thbGlrZSBTbWFydENsaWVudFJlcXVlc3RQ
cm90b2NvbE9uZSBhbGxvd2luZyBib2R5IHJlYWRpbmcgdGVzdHMuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgYm9keSk6CisgICAgICAgIHNlbGYuX2JvZHlfYnVmZmVyID0gU3RyaW5nSU8o
Ym9keSkKKworICAgIGRlZiByZWFkX2JvZHlfYnl0ZXMoc2VsZiwgY291bnQ9LTEpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fYm9keV9idWZmZXIucmVhZChjb3VudCkKKworCitjbGFzcyBGYWtlQ2xp
ZW50KF9TbWFydENsaWVudCk6CisgICAgIiIiTG9va2FsaWtlIGZvciBfU21hcnRDbGllbnQgYWxs
b3dpbmcgdGVzdGluZy4iIiIKKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzcG9uc2Vz
KToKKyAgICAgICAgIyBXZSBkb24ndCBjYWxsIHRoZSBzdXBlciBpbml0IGJlY2F1c2UgdGhlcmUg
aXMgbm8gbWVkaXVtLgorICAgICAgICAiIiJjcmVhdGUgYSBGYWtlQ2xpZW50LgorCisgICAgICAg
IDpwYXJhbSByZXNwb25lczogQSBsaXN0IG9mIHJlc3BvbnNlLXR1cGxlLCBib2R5LWRhdGEgcGFp
cnMgdG8gYmUgc2VudAorICAgICAgICAgICAgYmFjayB0byBjYWxsZXJzLgorICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5yZXNwb25zZXMgPSByZXNwb25zZXMKKyAgICAgICAgc2VsZi5fY2FsbHMg
PSBbXQorCisgICAgZGVmIGNhbGwoc2VsZiwgbWV0aG9kLCAqYXJncyk6CisgICAgICAgIHNlbGYu
X2NhbGxzLmFwcGVuZCgoJ2NhbGwnLCBtZXRob2QsIGFyZ3MpKQorICAgICAgICByZXR1cm4gc2Vs
Zi5yZXNwb25zZXMucG9wKDApWzBdCisKKyAgICBkZWYgY2FsbF9leHBlY3RpbmdfYm9keShzZWxm
LCBtZXRob2QsICphcmdzKToKKyAgICAgICAgc2VsZi5fY2FsbHMuYXBwZW5kKCgnY2FsbF9leHBl
Y3RpbmdfYm9keScsIG1ldGhvZCwgYXJncykpCisgICAgICAgIHJlc3VsdCA9IHNlbGYucmVzcG9u
c2VzLnBvcCgwKQorICAgICAgICByZXR1cm4gcmVzdWx0WzBdLCBGYWtlUHJvdG9jb2wocmVzdWx0
WzFdKQorCisKK2NsYXNzIFRlc3RCenJEaXJPcGVuQnJhbmNoKHRlc3RzLlRlc3RDYXNlKToKKwor
ICAgIGRlZiB0ZXN0X2JyYW5jaF9wcmVzZW50KHNlbGYpOgorICAgICAgICBjbGllbnQgPSBGYWtl
Q2xpZW50KFsoKCdvaycsICcnKSwgKSwgKCgnb2snLCAnJywgJ25vJywgJ25vJyksICldKQorICAg
ICAgICB0cmFuc3BvcnQgPSBNZW1vcnlUcmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQubWtk
aXIoJ3F1YWNrJykKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0LmNsb25lKCdxdWFjaycp
CisgICAgICAgIGJ6cmRpciA9IFJlbW90ZUJ6ckRpcih0cmFuc3BvcnQsIF9jbGllbnQ9Y2xpZW50
KQorICAgICAgICByZXN1bHQgPSBienJkaXIub3Blbl9icmFuY2goKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKAorICAgICAgICAgICAgWygnY2FsbCcsICdCenJEaXIub3Blbl9icmFuY2gnLCAo
Jy8vL3F1YWNrLycsKSksCisgICAgICAgICAgICAgKCdjYWxsJywgJ0J6ckRpci5maW5kX3JlcG9z
aXRvcnknLCAoJy8vL3F1YWNrLycsKSldLAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykKKyAg
ICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgUmVtb3RlQnJhbmNoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGJ6cmRpciwgcmVzdWx0LmJ6cmRpcikKKworICAgIGRlZiB0ZXN0
X2JyYW5jaF9taXNzaW5nKHNlbGYpOgorICAgICAgICBjbGllbnQgPSBGYWtlQ2xpZW50KFsoKCdu
b2JyYW5jaCcsKSwgKV0pCisgICAgICAgIHRyYW5zcG9ydCA9IE1lbW9yeVRyYW5zcG9ydCgpCisg
ICAgICAgIHRyYW5zcG9ydC5ta2RpcigncXVhY2snKQorICAgICAgICB0cmFuc3BvcnQgPSB0cmFu
c3BvcnQuY2xvbmUoJ3F1YWNrJykKKyAgICAgICAgYnpyZGlyID0gUmVtb3RlQnpyRGlyKHRyYW5z
cG9ydCwgX2NsaWVudD1jbGllbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5O
b3RCcmFuY2hFcnJvciwgYnpyZGlyLm9wZW5fYnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgWygnY2FsbCcsICdCenJEaXIub3Blbl9icmFuY2gnLCAoJy8vL3F1
YWNrLycsKSldLAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykKKworICAgIGRlZiBjaGVja19v
cGVuX3JlcG9zaXRvcnkoc2VsZiwgcmljaF9yb290LCBzdWJ0cmVlcyk6CisgICAgICAgIGlmIHJp
Y2hfcm9vdDoKKyAgICAgICAgICAgIHJpY2hfcmVzcG9uc2UgPSAneWVzJworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmljaF9yZXNwb25zZSA9ICdubycKKyAgICAgICAgaWYgc3VidHJlZXM6
CisgICAgICAgICAgICBzdWJ0cmVlX3Jlc3BvbnNlID0gJ3llcycKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHN1YnRyZWVfcmVzcG9uc2UgPSAnbm8nCisgICAgICAgIGNsaWVudCA9IEZha2VD
bGllbnQoWygoJ29rJywgJycsIHJpY2hfcmVzcG9uc2UsIHN1YnRyZWVfcmVzcG9uc2UpLCApLF0p
CisgICAgICAgIHRyYW5zcG9ydCA9IE1lbW9yeVRyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9y
dC5ta2RpcigncXVhY2snKQorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnQuY2xvbmUoJ3F1
YWNrJykKKyAgICAgICAgYnpyZGlyID0gUmVtb3RlQnpyRGlyKHRyYW5zcG9ydCwgX2NsaWVudD1j
bGllbnQpCisgICAgICAgIHJlc3VsdCA9IGJ6cmRpci5vcGVuX3JlcG9zaXRvcnkoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWygnY2FsbCcsICdCenJEaXIuZmluZF9y
ZXBvc2l0b3J5JywgKCcvLy9xdWFjay8nLCkpXSwKKyAgICAgICAgICAgIGNsaWVudC5fY2FsbHMp
CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIFJlbW90ZVJlcG9zaXRvcnkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnpyZGlyLCByZXN1bHQuYnpyZGlyKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJpY2hfcm9vdCwgcmVzdWx0Ll9mb3JtYXQucmljaF9yb290X2Rh
dGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VidHJlZXMsIHJlc3VsdC5fZm9ybWF0LnN1
cHBvcnRzX3RyZWVfcmVmZXJlbmNlKQorCisgICAgZGVmIHRlc3Rfb3Blbl9yZXBvc2l0b3J5X3Nl
dHNfZm9ybWF0X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfb3Blbl9yZXBv
c2l0b3J5KFRydWUsIFRydWUpCisgICAgICAgIHNlbGYuY2hlY2tfb3Blbl9yZXBvc2l0b3J5KEZh
bHNlLCBUcnVlKQorICAgICAgICBzZWxmLmNoZWNrX29wZW5fcmVwb3NpdG9yeShUcnVlLCBGYWxz
ZSkKKyAgICAgICAgc2VsZi5jaGVja19vcGVuX3JlcG9zaXRvcnkoRmFsc2UsIEZhbHNlKQorCisg
ICAgZGVmIHRlc3Rfb2xkX3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIiUmVtb3RlQnpyRGlyRm9y
bWF0IHNob3VsZCBmYWlsIHRvIHByb2JlIGlmIHRoZSBzZXJ2ZXIgdmVyc2lvbiBpcyB0b28KKyAg
ICAgICAgb2xkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3Jz
Lk5vdEJyYW5jaEVycm9yLAorICAgICAgICAgICAgUmVtb3RlQnpyRGlyRm9ybWF0LnByb2JlX3Ry
YW5zcG9ydCwgT2xkU2VydmVyVHJhbnNwb3J0KCkpCisKKworY2xhc3MgT2xkU21hcnRDbGllbnQo
b2JqZWN0KToKKyAgICAiIiJBIGZha2Ugc21hcnQgY2xpZW50IGZvciB0ZXN0X29sZF92ZXJzaW9u
IHRoYXQganVzdCByZXR1cm5zIGEgdmVyc2lvbiBvbmUKKyAgICByZXNwb25zZSB0byB0aGUgJ2hl
bGxvJyAocXVlcnkgdmVyc2lvbikgY29tbWFuZC4KKyAgICAiIiIKKworICAgIGRlZiBnZXRfcmVx
dWVzdChzZWxmKToKKyAgICAgICAgaW5wdXRfZmlsZSA9IFN0cmluZ0lPKCdva1x4MDExXG4nKQor
ICAgICAgICBvdXRwdXRfZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgY2xpZW50X21lZGl1bSA9
IG1lZGl1bS5TbWFydFNpbXBsZVBpcGVzQ2xpZW50TWVkaXVtKAorICAgICAgICAgICAgaW5wdXRf
ZmlsZSwgb3V0cHV0X2ZpbGUpCisgICAgICAgIHJldHVybiBtZWRpdW0uU21hcnRDbGllbnRTdHJl
YW1NZWRpdW1SZXF1ZXN0KGNsaWVudF9tZWRpdW0pCisKKworY2xhc3MgT2xkU2VydmVyVHJhbnNw
b3J0KG9iamVjdCk6CisgICAgIiIiQSBmYWtlIHRyYW5zcG9ydCBmb3IgdGVzdF9vbGRfc2VydmVy
IHRoYXQgcmVwb3J0cyBpdCdzIHNtYXJ0IHNlcnZlcgorICAgIHByb3RvY29sIHZlcnNpb24gYXMg
dmVyc2lvbiBvbmUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg
IHNlbGYuYmFzZSA9ICdmYWtlOicKKworICAgIGRlZiBnZXRfc21hcnRfY2xpZW50KHNlbGYpOgor
ICAgICAgICByZXR1cm4gT2xkU21hcnRDbGllbnQoKQorCisKK2NsYXNzIFRlc3RCcmFuY2hMYXN0
UmV2aXNpb25JbmZvKHRlc3RzLlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VtcHR5X2JyYW5j
aChzZWxmKToKKyAgICAgICAgIyBpbiBhbiBlbXB0eSBicmFuY2ggd2UgZGVjb2RlIHRoZSByZXNw
b25zZSBwcm9wZXJseQorICAgICAgICBjbGllbnQgPSBGYWtlQ2xpZW50KFsoKCdvaycsICcwJywg
J251bGw6JyksICldKQorICAgICAgICB0cmFuc3BvcnQgPSBNZW1vcnlUcmFuc3BvcnQoKQorICAg
ICAgICB0cmFuc3BvcnQubWtkaXIoJ3F1YWNrJykKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNw
b3J0LmNsb25lKCdxdWFjaycpCisgICAgICAgICMgd2UgZG8gbm90IHdhbnQgYnpyZGlyIHRvIG1h
a2UgYW55IHJlbW90ZSBjYWxscworICAgICAgICBienJkaXIgPSBSZW1vdGVCenJEaXIodHJhbnNw
b3J0LCBfY2xpZW50PUZhbHNlKQorICAgICAgICBicmFuY2ggPSBSZW1vdGVCcmFuY2goYnpyZGly
LCBOb25lLCBfY2xpZW50PWNsaWVudCkKKyAgICAgICAgcmVzdWx0ID0gYnJhbmNoLmxhc3RfcmV2
aXNpb25faW5mbygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFso
J2NhbGwnLCAnQnJhbmNoLmxhc3RfcmV2aXNpb25faW5mbycsICgnLy8vcXVhY2svJywpKV0sCisg
ICAgICAgICAgICBjbGllbnQuX2NhbGxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBO
VUxMX1JFVklTSU9OKSwgcmVzdWx0KQorCisgICAgZGVmIHRlc3Rfbm9uX2VtcHR5X2JyYW5jaChz
ZWxmKToKKyAgICAgICAgIyBpbiBhIG5vbi1lbXB0eSBicmFuY2ggd2UgYWxzbyBkZWNvZGUgdGhl
IHJlc3BvbnNlIHByb3Blcmx5CisgICAgICAgIHJldmlkID0gdSdceGM4Jy5lbmNvZGUoJ3V0Zjgn
KQorICAgICAgICBjbGllbnQgPSBGYWtlQ2xpZW50KFsoKCdvaycsICcyJywgcmV2aWQpLCApXSkK
KyAgICAgICAgdHJhbnNwb3J0ID0gTWVtb3J5VHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0
Lm1rZGlyKCdrd2FhaycpCisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydC5jbG9uZSgna3dh
YWsnKQorICAgICAgICAjIHdlIGRvIG5vdCB3YW50IGJ6cmRpciB0byBtYWtlIGFueSByZW1vdGUg
Y2FsbHMKKyAgICAgICAgYnpyZGlyID0gUmVtb3RlQnpyRGlyKHRyYW5zcG9ydCwgX2NsaWVudD1G
YWxzZSkKKyAgICAgICAgYnJhbmNoID0gUmVtb3RlQnJhbmNoKGJ6cmRpciwgTm9uZSwgX2NsaWVu
dD1jbGllbnQpCisgICAgICAgIHJlc3VsdCA9IGJyYW5jaC5sYXN0X3JldmlzaW9uX2luZm8oKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKCdjYWxsJywgJ0JyYW5j
aC5sYXN0X3JldmlzaW9uX2luZm8nLCAoJy8vL2t3YWFrLycsKSldLAorICAgICAgICAgICAgY2xp
ZW50Ll9jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMiwgcmV2aWQpLCByZXN1bHQp
CisKKworY2xhc3MgVGVzdEJyYW5jaFNldExhc3RSZXZpc2lvbih0ZXN0cy5UZXN0Q2FzZSk6CisK
KyAgICBkZWYgdGVzdF9zZXRfZW1wdHkoc2VsZik6CisgICAgICAgICMgc2V0X3JldmlzaW9uX2hp
c3RvcnkoW10pIGlzIHRyYW5zbGF0ZWQgdG8gY2FsbGluZworICAgICAgICAjIEJyYW5jaC5zZXRf
bGFzdF9yZXZpc2lvbihwYXRoLCAnJykgb24gdGhlIHdpcmUuCisgICAgICAgIGNsaWVudCA9IEZh
a2VDbGllbnQoWworICAgICAgICAgICAgIyBsb2NrX3dyaXRlCisgICAgICAgICAgICAoKCdvaycs
ICdicmFuY2ggdG9rZW4nLCAncmVwbyB0b2tlbicpLCApLAorICAgICAgICAgICAgIyBzZXRfbGFz
dF9yZXZpc2lvbgorICAgICAgICAgICAgKCgnb2snLCksICksCisgICAgICAgICAgICAjIHVubG9j
aworICAgICAgICAgICAgKCgnb2snLCksICldKQorICAgICAgICB0cmFuc3BvcnQgPSBNZW1vcnlU
cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQubWtkaXIoJ2JyYW5jaCcpCisgICAgICAgIHRy
YW5zcG9ydCA9IHRyYW5zcG9ydC5jbG9uZSgnYnJhbmNoJykKKworICAgICAgICBienJkaXIgPSBS
ZW1vdGVCenJEaXIodHJhbnNwb3J0LCBfY2xpZW50PUZhbHNlKQorICAgICAgICBicmFuY2ggPSBS
ZW1vdGVCcmFuY2goYnpyZGlyLCBOb25lLCBfY2xpZW50PWNsaWVudCkKKyAgICAgICAgIyBUaGlz
IGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSB0aGF0IFJlbW90ZUJyYW5jaCBj
dXJyZW50bHkKKyAgICAgICAgIyB1bm5lY2Vzc2FyaWx5IGludm9rZXMgX2Vuc3VyZV9yZWFsIHVw
b24gYSBjYWxsIHRvIGxvY2tfd3JpdGUuCisgICAgICAgIGJyYW5jaC5fZW5zdXJlX3JlYWwgPSBs
YW1iZGE6IE5vbmUKKyAgICAgICAgYnJhbmNoLmxvY2tfd3JpdGUoKQorICAgICAgICBjbGllbnQu
X2NhbGxzID0gW10KKyAgICAgICAgcmVzdWx0ID0gYnJhbmNoLnNldF9yZXZpc2lvbl9oaXN0b3J5
KFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWygnY2FsbCcsICdC
cmFuY2guc2V0X2xhc3RfcmV2aXNpb24nLAorICAgICAgICAgICAgICAgICgnLy8vYnJhbmNoLycs
ICdicmFuY2ggdG9rZW4nLCAncmVwbyB0b2tlbicsICdudWxsOicpKV0sCisgICAgICAgICAgICBj
bGllbnQuX2NhbGxzKQorICAgICAgICBicmFuY2gudW5sb2NrKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChOb25lLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uZW1wdHkoc2VsZik6
CisgICAgICAgICMgc2V0X3JldmlzaW9uX2hpc3RvcnkoW3Jldi1pZDEsIC4uLiwgcmV2LWlkTl0p
IGlzIHRyYW5zbGF0ZWQgdG8gY2FsbGluZworICAgICAgICAjIEJyYW5jaC5zZXRfbGFzdF9yZXZp
c2lvbihwYXRoLCByZXYtaWROKSBvbiB0aGUgd2lyZS4KKyAgICAgICAgY2xpZW50ID0gRmFrZUNs
aWVudChbCisgICAgICAgICAgICAjIGxvY2tfd3JpdGUKKyAgICAgICAgICAgICgoJ29rJywgJ2Jy
YW5jaCB0b2tlbicsICdyZXBvIHRva2VuJyksICksCisgICAgICAgICAgICAjIHNldF9sYXN0X3Jl
dmlzaW9uCisgICAgICAgICAgICAoKCdvaycsKSwgKSwKKyAgICAgICAgICAgICMgdW5sb2NrCisg
ICAgICAgICAgICAoKCdvaycsKSwgKV0pCisgICAgICAgIHRyYW5zcG9ydCA9IE1lbW9yeVRyYW5z
cG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5ta2RpcignYnJhbmNoJykKKyAgICAgICAgdHJhbnNw
b3J0ID0gdHJhbnNwb3J0LmNsb25lKCdicmFuY2gnKQorCisgICAgICAgIGJ6cmRpciA9IFJlbW90
ZUJ6ckRpcih0cmFuc3BvcnQsIF9jbGllbnQ9RmFsc2UpCisgICAgICAgIGJyYW5jaCA9IFJlbW90
ZUJyYW5jaChienJkaXIsIE5vbmUsIF9jbGllbnQ9Y2xpZW50KQorICAgICAgICAjIFRoaXMgaXMg
YSBoYWNrIHRvIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIHRoYXQgUmVtb3RlQnJhbmNoIGN1cnJl
bnRseQorICAgICAgICAjIHVubmVjZXNzYXJpbHkgaW52b2tlcyBfZW5zdXJlX3JlYWwgdXBvbiBh
IGNhbGwgdG8gbG9ja193cml0ZS4KKyAgICAgICAgYnJhbmNoLl9lbnN1cmVfcmVhbCA9IGxhbWJk
YTogTm9uZQorICAgICAgICAjIExvY2sgdGhlIGJyYW5jaCwgcmVzZXQgdGhlIHJlY29yZCBvZiBy
ZW1vdGUgY2FsbHMuCisgICAgICAgIGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAgICAgY2xpZW50
Ll9jYWxscyA9IFtdCisKKyAgICAgICAgcmVzdWx0ID0gYnJhbmNoLnNldF9yZXZpc2lvbl9oaXN0
b3J5KFsncmV2LWlkMScsICdyZXYtaWQyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICBbKCdjYWxsJywgJ0JyYW5jaC5zZXRfbGFzdF9yZXZpc2lvbicsCisgICAgICAg
ICAgICAgICAgKCcvLy9icmFuY2gvJywgJ2JyYW5jaCB0b2tlbicsICdyZXBvIHRva2VuJywgJ3Jl
di1pZDInKSldLAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykKKyAgICAgICAgYnJhbmNoLnVu
bG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVzdWx0KQorCisgICAgZGVm
IHRlc3Rfbm9fc3VjaF9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgIyBBIHJlc3BvbnNlIG9mICdO
b1N1Y2hSZXZpc2lvbicgaXMgdHJhbnNsYXRlZCBpbnRvIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAg
Y2xpZW50ID0gRmFrZUNsaWVudChbCisgICAgICAgICAgICAjIGxvY2tfd3JpdGUKKyAgICAgICAg
ICAgICgoJ29rJywgJ2JyYW5jaCB0b2tlbicsICdyZXBvIHRva2VuJyksICksCisgICAgICAgICAg
ICAjIHNldF9sYXN0X3JldmlzaW9uCisgICAgICAgICAgICAoKCdOb1N1Y2hSZXZpc2lvbicsICdy
ZXYtaWQnKSwgKSwKKyAgICAgICAgICAgICMgdW5sb2NrCisgICAgICAgICAgICAoKCdvaycsKSwg
KV0pCisgICAgICAgIHRyYW5zcG9ydCA9IE1lbW9yeVRyYW5zcG9ydCgpCisgICAgICAgIHRyYW5z
cG9ydC5ta2RpcignYnJhbmNoJykKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0LmNsb25l
KCdicmFuY2gnKQorCisgICAgICAgIGJ6cmRpciA9IFJlbW90ZUJ6ckRpcih0cmFuc3BvcnQsIF9j
bGllbnQ9RmFsc2UpCisgICAgICAgIGJyYW5jaCA9IFJlbW90ZUJyYW5jaChienJkaXIsIE5vbmUs
IF9jbGllbnQ9Y2xpZW50KQorICAgICAgICBicmFuY2guX2Vuc3VyZV9yZWFsID0gbGFtYmRhOiBO
b25lCisgICAgICAgIGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAgICAgY2xpZW50Ll9jYWxscyA9
IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBlcnJvcnMuTm9T
dWNoUmV2aXNpb24sIGJyYW5jaC5zZXRfcmV2aXNpb25faGlzdG9yeSwgWydyZXYtaWQnXSkKKyAg
ICAgICAgYnJhbmNoLnVubG9jaygpCisKKworY2xhc3MgVGVzdEJyYW5jaENvbnRyb2xHZXRCcmFu
Y2hDb25mKHRlc3RzLlRlc3RDYXNlV2l0aE1lbW9yeVRyYW5zcG9ydCk6CisgICAgIiIiVGVzdCBi
cmFuY2guY29udHJvbF9maWxlcyBhcGkgbXVuZ2luZy4uLgorCisgICAgV2Ugc3BlY2lhbCBjYXNl
IFJlbW90ZUJyYW5jaC5jb250cm9sX2ZpbGVzLmdldCgnYnJhbmNoLmNvbmYnKSB0bworICAgIGNh
bGwgYSBzcGVjaWZpYyBBUEkgc28gdGhhdCBSZW1vdGVCcmFuY2gncyBjYW4gaW50ZXJjZXB0IGNv
bmZpZ3VyYXRpb24KKyAgICBmaWxlIHJlYWRpbmcsIGFsbG93aW5nIHRoZW0gdG8gc2lnbmFsIHRv
IHRoZSBjbGllbnQgYWJvdXQgdGhpbmdzIGxpa2UKKyAgICAnZW1haWwgaXMgY29uZmlndXJlZCBm
b3IgY29tbWl0cycuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9nZXRfYnJhbmNoX2NvbmYoc2Vs
Zik6CisgICAgICAgICMgaW4gYW4gZW1wdHkgYnJhbmNoIHdlIGRlY29kZSB0aGUgcmVzcG9uc2Ug
cHJvcGVybHkKKyAgICAgICAgY2xpZW50ID0gRmFrZUNsaWVudChbKCgnb2snLCApLCAnY29uZmln
IGZpbGUgYm9keScpXSkKKyAgICAgICAgIyB3ZSBuZWVkIHRvIG1ha2UgYSByZWFsIGJyYW5jaCBi
ZWNhdXNlIHRoZSByZW1vdGVfYnJhbmNoLmNvbnRyb2xfZmlsZXMKKyAgICAgICAgIyB3aWxsIHRy
aWdnZXIgX2Vuc3VyZV9yZWFsLgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCdx
dWFjaycpCisgICAgICAgIHRyYW5zcG9ydCA9IGJyYW5jaC5ienJkaXIucm9vdF90cmFuc3BvcnQK
KyAgICAgICAgIyB3ZSBkbyBub3Qgd2FudCBienJkaXIgdG8gbWFrZSBhbnkgcmVtb3RlIGNhbGxz
CisgICAgICAgIGJ6cmRpciA9IFJlbW90ZUJ6ckRpcih0cmFuc3BvcnQsIF9jbGllbnQ9RmFsc2Up
CisgICAgICAgIGJyYW5jaCA9IFJlbW90ZUJyYW5jaChienJkaXIsIE5vbmUsIF9jbGllbnQ9Y2xp
ZW50KQorICAgICAgICByZXN1bHQgPSBicmFuY2guY29udHJvbF9maWxlcy5nZXQoJ2JyYW5jaC5j
b25mJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoJ2NhbGxfZXhw
ZWN0aW5nX2JvZHknLCAnQnJhbmNoLmdldF9jb25maWdfZmlsZScsICgnLy8vcXVhY2svJywpKV0s
CisgICAgICAgICAgICBjbGllbnQuX2NhbGxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdj
b25maWcgZmlsZSBib2R5JywgcmVzdWx0LnJlYWQoKSkKKworCitjbGFzcyBUZXN0QnJhbmNoTG9j
a1dyaXRlKHRlc3RzLlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfdW5sb2Nr
YWJsZShzZWxmKToKKyAgICAgICAgY2xpZW50ID0gRmFrZUNsaWVudChbKCgnVW5sb2NrYWJsZVRy
YW5zcG9ydCcsICksICcnKV0pCisgICAgICAgIHRyYW5zcG9ydCA9IE1lbW9yeVRyYW5zcG9ydCgp
CisgICAgICAgIHRyYW5zcG9ydC5ta2RpcigncXVhY2snKQorICAgICAgICB0cmFuc3BvcnQgPSB0
cmFuc3BvcnQuY2xvbmUoJ3F1YWNrJykKKyAgICAgICAgIyB3ZSBkbyBub3Qgd2FudCBienJkaXIg
dG8gbWFrZSBhbnkgcmVtb3RlIGNhbGxzCisgICAgICAgIGJ6cmRpciA9IFJlbW90ZUJ6ckRpcih0
cmFuc3BvcnQsIF9jbGllbnQ9RmFsc2UpCisgICAgICAgIGJyYW5jaCA9IFJlbW90ZUJyYW5jaChi
enJkaXIsIE5vbmUsIF9jbGllbnQ9Y2xpZW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhl
cnJvcnMuVW5sb2NrYWJsZVRyYW5zcG9ydCwgYnJhbmNoLmxvY2tfd3JpdGUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKCdjYWxsJywgJ0JyYW5jaC5sb2NrX3dyaXRl
JywgKCcvLy9xdWFjay8nLCAnJywgJycpKV0sCisgICAgICAgICAgICBjbGllbnQuX2NhbGxzKQor
CisKK2NsYXNzIFRlc3RUcmFuc3BvcnRJc1JlYWRvbmx5KHRlc3RzLlRlc3RDYXNlKToKKworICAg
IGRlZiB0ZXN0X3RydWUoc2VsZik6CisgICAgICAgIGNsaWVudCA9IEZha2VDbGllbnQoWygoJ3ll
cycsKSwgJycpXSkKKyAgICAgICAgdHJhbnNwb3J0ID0gUmVtb3RlVHJhbnNwb3J0KCdienI6Ly9l
eGFtcGxlLmNvbS8nLCBtZWRpdW09RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfY2xpZW50PWNsaWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCB0
cmFuc3BvcnQuaXNfcmVhZG9ubHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIFsoJ2NhbGwnLCAnVHJhbnNwb3J0LmlzX3JlYWRvbmx5JywgKCkpXSwKKyAgICAgICAg
ICAgIGNsaWVudC5fY2FsbHMpCisKKyAgICBkZWYgdGVzdF9mYWxzZShzZWxmKToKKyAgICAgICAg
Y2xpZW50ID0gRmFrZUNsaWVudChbKCgnbm8nLCksICcnKV0pCisgICAgICAgIHRyYW5zcG9ydCA9
IFJlbW90ZVRyYW5zcG9ydCgnYnpyOi8vZXhhbXBsZS5jb20vJywgbWVkaXVtPUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsaWVudD1jbGllbnQpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHRyYW5zcG9ydC5pc19yZWFkb25seSgpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWygnY2FsbCcsICdUcmFuc3BvcnQuaXNf
cmVhZG9ubHknLCAoKSldLAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykKKworICAgIGRlZiB0
ZXN0X2Vycm9yX2Zyb21fb2xkX3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIiYnpyIDAuMTUgYW5k
IGVhcmxpZXIgc2VydmVycyBkb24ndCByZWNvZ25pc2UgdGhlIGlzX3JlYWRvbmx5IHZlcmIuCisg
ICAgICAgIAorICAgICAgICBDbGllbnRzIHNob3VsZCB0cmVhdCBpdCBhcyBhICJubyIgcmVzcG9u
c2UsIGJlY2F1c2UgaXNfcmVhZG9ubHkgaXMgb25seQorICAgICAgICBhZHZpc29yeSBhbnl3YXkg
KGEgdHJhbnNwb3J0IGNvdWxkIGJlIHJlYWQtd3JpdGUsIGJ1dCB0aGVuIHRoZQorICAgICAgICB1
bmRlcmx5aW5nIGZpbGVzeXN0ZW0gY291bGQgYmUgcmVhZG9ubHkgYW55d2F5KS4KKyAgICAgICAg
IiIiCisgICAgICAgIGNsaWVudCA9IEZha2VDbGllbnQoWygKKyAgICAgICAgICAgICgnZXJyb3In
LCAiR2VuZXJpYyBienIgc21hcnQgcHJvdG9jb2wgZXJyb3I6ICIKKyAgICAgICAgICAgICAgICAg
ICAgICAiYmFkIHJlcXVlc3QgJ1RyYW5zcG9ydC5pc19yZWFkb25seSciKSwgJycpXSkKKyAgICAg
ICAgdHJhbnNwb3J0ID0gUmVtb3RlVHJhbnNwb3J0KCdienI6Ly9leGFtcGxlLmNvbS8nLCBtZWRp
dW09RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xpZW50PWNs
aWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgdHJhbnNwb3J0LmlzX3JlYWRv
bmx5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKCdjYWxsJywg
J1RyYW5zcG9ydC5pc19yZWFkb25seScsICgpKV0sCisgICAgICAgICAgICBjbGllbnQuX2NhbGxz
KQorCisgICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9vbGRfMF8xMV9zZXJ2ZXIoc2VsZik6CisgICAg
ICAgICIiIlNhbWUgYXMgdGVzdF9lcnJvcl9mcm9tX29sZF9zZXJ2ZXIsIGJ1dCB3aXRoIHRoZSBz
bGlnaHRseSBkaWZmZXJlbnQKKyAgICAgICAgZXJyb3IgbWVzc2FnZSBmcm9tIGJ6ciAwLjExIHNl
cnZlcnMuCisgICAgICAgICIiIgorICAgICAgICBjbGllbnQgPSBGYWtlQ2xpZW50KFsoCisgICAg
ICAgICAgICAoJ2Vycm9yJywgIkdlbmVyaWMgYnpyIHNtYXJ0IHByb3RvY29sIGVycm9yOiAiCisg
ICAgICAgICAgICAgICAgICAgICAgImJhZCByZXF1ZXN0IHUnVHJhbnNwb3J0LmlzX3JlYWRvbmx5
JyIpLCAnJyldKQorICAgICAgICB0cmFuc3BvcnQgPSBSZW1vdGVUcmFuc3BvcnQoJ2J6cjovL2V4
YW1wbGUuY29tLycsIG1lZGl1bT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9jbGllbnQ9Y2xpZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCB0
cmFuc3BvcnQuaXNfcmVhZG9ubHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIFsoJ2NhbGwnLCAnVHJhbnNwb3J0LmlzX3JlYWRvbmx5JywgKCkpXSwKKyAgICAgICAg
ICAgIGNsaWVudC5fY2FsbHMpCisKKworY2xhc3MgVGVzdFJlbW90ZVJlcG9zaXRvcnkodGVzdHMu
VGVzdENhc2UpOgorICAgICIiIkJhc2UgZm9yIHRlc3RpbmcgUmVtb3RlUmVwb3NpdG9yeSBwcm90
b2NvbCB1c2FnZS4KKyAgICAKKyAgICBUaGVzZSB0ZXN0cyBjb250YWluIGZyb3plbiByZXF1ZXN0
cyBhbmQgcmVzcG9uc2VzLiAgV2Ugd2FudCBhbnkgY2hhbmdlcyB0byAKKyAgICB3aGF0IGlzIHNl
bnQgb3IgZXhwZWN0ZWQgdG8gYmUgcmVxdWlyZSBhIHRob3VnaHRmdWwgdXBkYXRlIHRvIHRoZXNl
IHRlc3RzCisgICAgYmVjYXVzZSB0aGV5IG1pZ2h0IGJyZWFrIGNvbXBhdGliaWxpdHkgd2l0aCBk
aWZmZXJlbnQtdmVyc2lvbmVkIHNlcnZlcnMuCisgICAgIiIiCisKKyAgICBkZWYgc2V0dXBfZmFr
ZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoc2VsZiwgcmVzcG9uc2VzLCB0cmFuc3BvcnRfcGF0aCk6
CisgICAgICAgICIiIkNyZWF0ZSB0aGUgZmFrZSBjbGllbnQgYW5kIHJlcG9zaXRvcnkgZm9yIHRl
c3Rpbmcgd2l0aC4KKyAgICAgICAgCisgICAgICAgIFRoZXJlJ3Mgbm8gcmVhbCBzZXJ2ZXIgaGVy
ZTsgd2UganVzdCBoYXZlIGNhbm5lZCByZXNwb25zZXMgc2VudAorICAgICAgICBiYWNrIG9uZSBi
eSBvbmUuCisgICAgICAgIAorICAgICAgICA6cGFyYW0gdHJhbnNwb3J0X3BhdGg6IFBhdGggYmVs
b3cgdGhlIHJvb3Qgb2YgdGhlIE1lbW9yeVRyYW5zcG9ydAorICAgICAgICAgICAgd2hlcmUgdGhl
IHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgY2xpZW50
ID0gRmFrZUNsaWVudChyZXNwb25zZXMpCisgICAgICAgIHRyYW5zcG9ydCA9IE1lbW9yeVRyYW5z
cG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5ta2Rpcih0cmFuc3BvcnRfcGF0aCkKKyAgICAgICAg
dHJhbnNwb3J0ID0gdHJhbnNwb3J0LmNsb25lKHRyYW5zcG9ydF9wYXRoKQorICAgICAgICAjIHdl
IGRvIG5vdCB3YW50IGJ6cmRpciB0byBtYWtlIGFueSByZW1vdGUgY2FsbHMKKyAgICAgICAgYnpy
ZGlyID0gUmVtb3RlQnpyRGlyKHRyYW5zcG9ydCwgX2NsaWVudD1GYWxzZSkKKyAgICAgICAgcmVw
byA9IFJlbW90ZVJlcG9zaXRvcnkoYnpyZGlyLCBOb25lLCBfY2xpZW50PWNsaWVudCkKKyAgICAg
ICAgcmV0dXJuIHJlcG8sIGNsaWVudAorCisKK2NsYXNzIFRlc3RSZXBvc2l0b3J5R2F0aGVyU3Rh
dHMoVGVzdFJlbW90ZVJlcG9zaXRvcnkpOgorCisgICAgZGVmIHRlc3RfcmV2aWRfbm9uZShzZWxm
KToKKyAgICAgICAgIyAoJ29rJywpLCBib2R5IHdpdGggcmV2aXNpb25zIGFuZCBzaXplCisgICAg
ICAgIHJlc3BvbnNlcyA9IFsoKCdvaycsICksICdyZXZpc2lvbnM6IDJcbnNpemU6IDE4XG4nKV0K
KyAgICAgICAgdHJhbnNwb3J0X3BhdGggPSAncXVhY2snCisgICAgICAgIHJlcG8sIGNsaWVudCA9
IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisgICAgICAgICAgICByZXNw
b25zZXMsIHRyYW5zcG9ydF9wYXRoKQorICAgICAgICByZXN1bHQgPSByZXBvLmdhdGhlcl9zdGF0
cyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWygnY2FsbF9l
eHBlY3RpbmdfYm9keScsICdSZXBvc2l0b3J5LmdhdGhlcl9zdGF0cycsCisgICAgICAgICAgICAg
KCcvLy9xdWFjay8nLCcnLCdubycpKV0sCisgICAgICAgICAgICBjbGllbnQuX2NhbGxzKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHsncmV2aXNpb25zJzogMiwgJ3NpemUnOiAxOH0sIHJlc3Vs
dCkKKworICAgIGRlZiB0ZXN0X3JldmlkX25vX2NvbW1pdHRlcnMoc2VsZik6CisgICAgICAgICMg
KCdvaycsKSwgYm9keSB3aXRob3V0IGNvbW1pdHRlcnMKKyAgICAgICAgcmVzcG9uc2VzID0gWygo
J29rJywgKSwKKyAgICAgICAgICAgICAgICAgICAgICAnZmlyc3RyZXY6IDEyMzQ1Ni4zMDAgMzYw
MFxuJworICAgICAgICAgICAgICAgICAgICAgICdsYXRlc3RyZXY6IDY1NDIzMS40MDAgMFxuJwor
ICAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbnM6IDJcbicKKyAgICAgICAgICAgICAgICAg
ICAgICAnc2l6ZTogMThcbicpXQorICAgICAgICB0cmFuc3BvcnRfcGF0aCA9ICdxdWljaycKKyAg
ICAgICAgcmV2aWQgPSB1J1x4YzgnLmVuY29kZSgndXRmOCcpCisgICAgICAgIHJlcG8sIGNsaWVu
dCA9IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisgICAgICAgICAgICBy
ZXNwb25zZXMsIHRyYW5zcG9ydF9wYXRoKQorICAgICAgICByZXN1bHQgPSByZXBvLmdhdGhlcl9z
dGF0cyhyZXZpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoJ2Nh
bGxfZXhwZWN0aW5nX2JvZHknLCAnUmVwb3NpdG9yeS5nYXRoZXJfc3RhdHMnLAorICAgICAgICAg
ICAgICAoJy8vL3F1aWNrLycsIHJldmlkLCAnbm8nKSldLAorICAgICAgICAgICAgY2xpZW50Ll9j
YWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7J3JldmlzaW9ucyc6IDIsICdzaXplJzog
MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXJzdHJldic6ICgxMjM0NTYuMzAwLCAz
NjAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhdGVzdHJldic6ICg2NTQyMzEuNDAw
LCAwKSx9LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0
X3JldmlkX3dpdGhfY29tbWl0dGVycyhzZWxmKToKKyAgICAgICAgIyAoJ29rJywpLCBib2R5IHdp
dGggY29tbWl0dGVycworICAgICAgICByZXNwb25zZXMgPSBbKCgnb2snLCApLAorICAgICAgICAg
ICAgICAgICAgICAgICdjb21taXR0ZXJzOiAxMjhcbicKKyAgICAgICAgICAgICAgICAgICAgICAn
Zmlyc3RyZXY6IDEyMzQ1Ni4zMDAgMzYwMFxuJworICAgICAgICAgICAgICAgICAgICAgICdsYXRl
c3RyZXY6IDY1NDIzMS40MDAgMFxuJworICAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbnM6
IDJcbicKKyAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMThcbicpXQorICAgICAgICB0cmFu
c3BvcnRfcGF0aCA9ICdidWljaycKKyAgICAgICAgcmV2aWQgPSB1J1x4YzgnLmVuY29kZSgndXRm
OCcpCisgICAgICAgIHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5kX3Jl
cG9zaXRvcnkoCisgICAgICAgICAgICByZXNwb25zZXMsIHRyYW5zcG9ydF9wYXRoKQorICAgICAg
ICByZXN1bHQgPSByZXBvLmdhdGhlcl9zdGF0cyhyZXZpZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoJ2NhbGxfZXhwZWN0aW5nX2JvZHknLCAnUmVwb3Np
dG9yeS5nYXRoZXJfc3RhdHMnLAorICAgICAgICAgICAgICAoJy8vL2J1aWNrLycsIHJldmlkLCAn
eWVzJykpXSwKKyAgICAgICAgICAgIGNsaWVudC5fY2FsbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoeydyZXZpc2lvbnMnOiAyLCAnc2l6ZSc6IDE4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY29tbWl0dGVycyc6IDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0
cmV2JzogKDEyMzQ1Ni4zMDAsIDM2MDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF0
ZXN0cmV2JzogKDY1NDIzMS40MDAsIDApLH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0KQorCisKK2NsYXNzIFRlc3RSZXBvc2l0b3J5R2V0UmV2aXNpb25HcmFwaChUZXN0UmVtb3Rl
UmVwb3NpdG9yeSk6CisgICAgCisgICAgZGVmIHRlc3RfbnVsbF9yZXZpc2lvbihzZWxmKToKKyAg
ICAgICAgIyBhIG51bGwgcmV2aXNpb24gaGFzIHRoZSBwcmVkaWN0YWJsZSByZXN1bHQge30sIHdl
IHNob3VsZCBoYXZlIG5vIHdpcmUKKyAgICAgICAgIyB0cmFmZmljIHdoZW4gY2FsbGluZyBpdCB3
aXRoIHRoaXMgYXJndW1lbnQKKyAgICAgICAgcmVzcG9uc2VzID0gWygoJ25vdHVzZWQnLCApLCAn
JyldCisgICAgICAgIHRyYW5zcG9ydF9wYXRoID0gJ2VtcHR5JworICAgICAgICByZXBvLCBjbGll
bnQgPSBzZWxmLnNldHVwX2Zha2VfY2xpZW50X2FuZF9yZXBvc2l0b3J5KAorICAgICAgICAgICAg
cmVzcG9uc2VzLCB0cmFuc3BvcnRfcGF0aCkKKyAgICAgICAgcmVzdWx0ID0gcmVwby5nZXRfcmV2
aXNpb25fZ3JhcGgoTlVMTF9SRVZJU0lPTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwg
Y2xpZW50Ll9jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7fSwgcmVzdWx0KQorCisg
ICAgZGVmIHRlc3Rfbm9uZV9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgIyB3aXRoIG5vbmUgd2Ug
d2FudCB0aGUgZW50aXJlIGdyYXBoCisgICAgICAgIHIxID0gdSdcdTBlMzMnLmVuY29kZSgndXRm
OCcpCisgICAgICAgIHIyID0gdSdcdTBkYWInLmVuY29kZSgndXRmOCcpCisgICAgICAgIGxpbmVz
ID0gWycgJy5qb2luKFtyMiwgcjFdKSwgcjFdCisgICAgICAgIGVuY29kZWRfYm9keSA9ICdcbicu
am9pbihsaW5lcykKKworICAgICAgICByZXNwb25zZXMgPSBbKCgnb2snLCApLCBlbmNvZGVkX2Jv
ZHkpXQorICAgICAgICB0cmFuc3BvcnRfcGF0aCA9ICdzaW5oYWxhJworICAgICAgICByZXBvLCBj
bGllbnQgPSBzZWxmLnNldHVwX2Zha2VfY2xpZW50X2FuZF9yZXBvc2l0b3J5KAorICAgICAgICAg
ICAgcmVzcG9uc2VzLCB0cmFuc3BvcnRfcGF0aCkKKyAgICAgICAgcmVzdWx0ID0gcmVwby5nZXRf
cmV2aXNpb25fZ3JhcGgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAg
WygnY2FsbF9leHBlY3RpbmdfYm9keScsICdSZXBvc2l0b3J5LmdldF9yZXZpc2lvbl9ncmFwaCcs
CisgICAgICAgICAgICAgKCcvLy9zaW5oYWxhLycsICcnKSldLAorICAgICAgICAgICAgY2xpZW50
Ll9jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7cjE6IFtdLCByMjogW3IxXX0sIHJl
c3VsdCkKKworICAgIGRlZiB0ZXN0X3NwZWNpZmljX3JldmlzaW9uKHNlbGYpOgorICAgICAgICAj
IHdpdGggYSBzcGVjaWZpYyByZXZpc2lvbiB3ZSB3YW50IHRoZSBncmFwaCBmb3IgdGhhdAorICAg
ICAgICAjIHdpdGggbm9uZSB3ZSB3YW50IHRoZSBlbnRpcmUgZ3JhcGgKKyAgICAgICAgcjExID0g
dSdcdTBlMzMnLmVuY29kZSgndXRmOCcpCisgICAgICAgIHIxMiA9IHUnXHhjOScuZW5jb2RlKCd1
dGY4JykKKyAgICAgICAgcjIgPSB1J1x1MGRhYicuZW5jb2RlKCd1dGY4JykKKyAgICAgICAgbGlu
ZXMgPSBbJyAnLmpvaW4oW3IyLCByMTEsIHIxMl0pLCByMTEsIHIxMl0KKyAgICAgICAgZW5jb2Rl
ZF9ib2R5ID0gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgICAgIHJlc3BvbnNlcyA9IFsoKCdvaycs
ICksIGVuY29kZWRfYm9keSldCisgICAgICAgIHRyYW5zcG9ydF9wYXRoID0gJ3NpbmhhbGEnCisg
ICAgICAgIHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRv
cnkoCisgICAgICAgICAgICByZXNwb25zZXMsIHRyYW5zcG9ydF9wYXRoKQorICAgICAgICByZXN1
bHQgPSByZXBvLmdldF9yZXZpc2lvbl9ncmFwaChyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgIFsoJ2NhbGxfZXhwZWN0aW5nX2JvZHknLCAnUmVwb3NpdG9yeS5nZXRf
cmV2aXNpb25fZ3JhcGgnLAorICAgICAgICAgICAgICgnLy8vc2luaGFsYS8nLCByMikpXSwKKyAg
ICAgICAgICAgIGNsaWVudC5fY2FsbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe3IxMTog
W10sIHIxMjogW10sIHIyOiBbcjExLCByMTJdLCB9LCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9u
b19zdWNoX3JldmlzaW9uKHNlbGYpOgorICAgICAgICByZXZpZCA9ICcxMjMnCisgICAgICAgIHJl
c3BvbnNlcyA9IFsoKCdub3N1Y2hyZXZpc2lvbicsIHJldmlkKSwgJycpXQorICAgICAgICB0cmFu
c3BvcnRfcGF0aCA9ICdzaW5oYWxhJworICAgICAgICByZXBvLCBjbGllbnQgPSBzZWxmLnNldHVw
X2Zha2VfY2xpZW50X2FuZF9yZXBvc2l0b3J5KAorICAgICAgICAgICAgcmVzcG9uc2VzLCB0cmFu
c3BvcnRfcGF0aCkKKyAgICAgICAgIyBhbHNvIGNoZWNrIHRoYXQgdGhlIHJpZ2h0IHJldmlzaW9u
IGlzIHJlcG9ydGVkIGluIHRoZSBlcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJv
cnMuTm9TdWNoUmV2aXNpb24sCisgICAgICAgICAgICByZXBvLmdldF9yZXZpc2lvbl9ncmFwaCwg
cmV2aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKCdjYWxsX2V4
cGVjdGluZ19ib2R5JywgJ1JlcG9zaXRvcnkuZ2V0X3JldmlzaW9uX2dyYXBoJywKKyAgICAgICAg
ICAgICAoJy8vL3NpbmhhbGEvJywgcmV2aWQpKV0sCisgICAgICAgICAgICBjbGllbnQuX2NhbGxz
KQorCisgICAgICAgIAorY2xhc3MgVGVzdFJlcG9zaXRvcnlJc1NoYXJlZChUZXN0UmVtb3RlUmVw
b3NpdG9yeSk6CisKKyAgICBkZWYgdGVzdF9pc19zaGFyZWQoc2VsZik6CisgICAgICAgICMgKCd5
ZXMnLCApIGZvciBSZXBvc2l0b3J5LmlzX3NoYXJlZCAtPiAnVHJ1ZScuCisgICAgICAgIHJlc3Bv
bnNlcyA9IFsoKCd5ZXMnLCApLCApXQorICAgICAgICB0cmFuc3BvcnRfcGF0aCA9ICdxdWFjaycK
KyAgICAgICAgcmVwbywgY2xpZW50ID0gc2VsZi5zZXR1cF9mYWtlX2NsaWVudF9hbmRfcmVwb3Np
dG9yeSgKKyAgICAgICAgICAgIHJlc3BvbnNlcywgdHJhbnNwb3J0X3BhdGgpCisgICAgICAgIHJl
c3VsdCA9IHJlcG8uaXNfc2hhcmVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIFsoJ2NhbGwnLCAnUmVwb3NpdG9yeS5pc19zaGFyZWQnLCAoJy8vL3F1YWNrLycsKSld
LAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChU
cnVlLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9pc19ub3Rfc2hhcmVkKHNlbGYpOgorICAgICAg
ICAjICgnbm8nLCApIGZvciBSZXBvc2l0b3J5LmlzX3NoYXJlZCAtPiAnRmFsc2UnLgorICAgICAg
ICByZXNwb25zZXMgPSBbKCgnbm8nLCApLCApXQorICAgICAgICB0cmFuc3BvcnRfcGF0aCA9ICdx
d2FjaycKKyAgICAgICAgcmVwbywgY2xpZW50ID0gc2VsZi5zZXR1cF9mYWtlX2NsaWVudF9hbmRf
cmVwb3NpdG9yeSgKKyAgICAgICAgICAgIHJlc3BvbnNlcywgdHJhbnNwb3J0X3BhdGgpCisgICAg
ICAgIHJlc3VsdCA9IHJlcG8uaXNfc2hhcmVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgK
KyAgICAgICAgICAgIFsoJ2NhbGwnLCAnUmVwb3NpdG9yeS5pc19zaGFyZWQnLCAoJy8vL3F3YWNr
LycsKSldLAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChGYWxzZSwgcmVzdWx0KQorCisKK2NsYXNzIFRlc3RSZXBvc2l0b3J5TG9ja1dyaXRlKFRl
c3RSZW1vdGVSZXBvc2l0b3J5KToKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGUoc2VsZik6Cisg
ICAgICAgIHJlc3BvbnNlcyA9IFsoKCdvaycsICdhIHRva2VuJyksICcnKV0KKyAgICAgICAgdHJh
bnNwb3J0X3BhdGggPSAncXVhY2snCisgICAgICAgIHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBf
ZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisgICAgICAgICAgICByZXNwb25zZXMsIHRyYW5z
cG9ydF9wYXRoKQorICAgICAgICByZXN1bHQgPSByZXBvLmxvY2tfd3JpdGUoKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWygnY2FsbCcsICdSZXBvc2l0b3J5LmxvY2tf
d3JpdGUnLCAoJy8vL3F1YWNrLycsICcnKSldLAorICAgICAgICAgICAgY2xpZW50Ll9jYWxscykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYSB0b2tlbicsIHJlc3VsdCkKKworICAgIGRlZiB0
ZXN0X2xvY2tfd3JpdGVfYWxyZWFkeV9sb2NrZWQoc2VsZik6CisgICAgICAgIHJlc3BvbnNlcyA9
IFsoKCdMb2NrQ29udGVudGlvbicsICksICcnKV0KKyAgICAgICAgdHJhbnNwb3J0X3BhdGggPSAn
cXVhY2snCisgICAgICAgIHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5k
X3JlcG9zaXRvcnkoCisgICAgICAgICAgICByZXNwb25zZXMsIHRyYW5zcG9ydF9wYXRoKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuTG9ja0NvbnRlbnRpb24sIHJlcG8ubG9ja193
cml0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoJ2NhbGwnLCAn
UmVwb3NpdG9yeS5sb2NrX3dyaXRlJywgKCcvLy9xdWFjay8nLCAnJykpXSwKKyAgICAgICAgICAg
IGNsaWVudC5fY2FsbHMpCisKKyAgICBkZWYgdGVzdF9sb2NrX3dyaXRlX3VubG9ja2FibGUoc2Vs
Zik6CisgICAgICAgIHJlc3BvbnNlcyA9IFsoKCdVbmxvY2thYmxlVHJhbnNwb3J0JywgKSwgJycp
XQorICAgICAgICB0cmFuc3BvcnRfcGF0aCA9ICdxdWFjaycKKyAgICAgICAgcmVwbywgY2xpZW50
ID0gc2VsZi5zZXR1cF9mYWtlX2NsaWVudF9hbmRfcmVwb3NpdG9yeSgKKyAgICAgICAgICAgIHJl
c3BvbnNlcywgdHJhbnNwb3J0X3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9y
cy5VbmxvY2thYmxlVHJhbnNwb3J0LCByZXBvLmxvY2tfd3JpdGUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBbKCdjYWxsJywgJ1JlcG9zaXRvcnkubG9ja193cml0ZScs
ICgnLy8vcXVhY2svJywgJycpKV0sCisgICAgICAgICAgICBjbGllbnQuX2NhbGxzKQorCisKK2Ns
YXNzIFRlc3RSZXBvc2l0b3J5VW5sb2NrKFRlc3RSZW1vdGVSZXBvc2l0b3J5KToKKworICAgIGRl
ZiB0ZXN0X3VubG9jayhzZWxmKToKKyAgICAgICAgcmVzcG9uc2VzID0gWygoJ29rJywgJ2EgdG9r
ZW4nKSwgJycpLAorICAgICAgICAgICAgICAgICAgICAgKCgnb2snLCksICcnKV0KKyAgICAgICAg
dHJhbnNwb3J0X3BhdGggPSAncXVhY2snCisgICAgICAgIHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0
dXBfZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisgICAgICAgICAgICByZXNwb25zZXMsIHRy
YW5zcG9ydF9wYXRoKQorICAgICAgICByZXBvLmxvY2tfd3JpdGUoKQorICAgICAgICByZXBvLnVu
bG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKCdjYWxsJywg
J1JlcG9zaXRvcnkubG9ja193cml0ZScsICgnLy8vcXVhY2svJywgJycpKSwKKyAgICAgICAgICAg
ICAoJ2NhbGwnLCAnUmVwb3NpdG9yeS51bmxvY2snLCAoJy8vL3F1YWNrLycsICdhIHRva2VuJykp
XSwKKyAgICAgICAgICAgIGNsaWVudC5fY2FsbHMpCisKKyAgICBkZWYgdGVzdF91bmxvY2tfd3Jv
bmdfdG9rZW4oc2VsZik6CisgICAgICAgICMgSWYgc29tZWhvdyB0aGUgdG9rZW4gaXMgd3Jvbmcs
IHVubG9jayB3aWxsIHJhaXNlIFRva2VuTWlzbWF0Y2guCisgICAgICAgIHJlc3BvbnNlcyA9IFso
KCdvaycsICdhIHRva2VuJyksICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICgoJ1Rva2VuTWlz
bWF0Y2gnLCksICcnKV0KKyAgICAgICAgdHJhbnNwb3J0X3BhdGggPSAncXVhY2snCisgICAgICAg
IHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisg
ICAgICAgICAgICByZXNwb25zZXMsIHRyYW5zcG9ydF9wYXRoKQorICAgICAgICByZXBvLmxvY2tf
d3JpdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVG9rZW5NaXNtYXRjaCwg
cmVwby51bmxvY2spCisKKworY2xhc3MgVGVzdFJlcG9zaXRvcnlIYXNSZXZpc2lvbihUZXN0UmVt
b3RlUmVwb3NpdG9yeSk6CisKKyAgICBkZWYgdGVzdF9ub25lKHNlbGYpOgorICAgICAgICAjIHJl
cG8uaGFzX3JldmlzaW9uKE5vbmUpIHNob3VsZCBub3QgY2F1c2UgYW55IHRyYWZmaWMuCisgICAg
ICAgIHRyYW5zcG9ydF9wYXRoID0gJ3F1YWNrJworICAgICAgICByZXNwb25zZXMgPSBOb25lCisg
ICAgICAgIHJlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFrZV9jbGllbnRfYW5kX3JlcG9zaXRv
cnkoCisgICAgICAgICAgICByZXNwb25zZXMsIHRyYW5zcG9ydF9wYXRoKQorCisgICAgICAgICMg
VGhlIG51bGwgcmV2aXNpb24gaXMgYWx3YXlzIHRoZXJlLCBzbyBoYXNfcmV2aXNpb24oTm9uZSkg
PT0gVHJ1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCByZXBvLmhhc19yZXZpc2lv
bihOb25lKSkKKworICAgICAgICAjIFRoZSByZW1vdGUgcmVwbyBzaG91bGRuJ3QgYmUgYWNjZXNz
ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGNsaWVudC5fY2FsbHMpCisKKworY2xh
c3MgVGVzdFJlcG9zaXRvcnlUYXJiYWxsKFRlc3RSZW1vdGVSZXBvc2l0b3J5KToKKworICAgICMg
VGhpcyBpcyBhIGNhbm5lZCB0YXJiYWxsIHJlcG9uc2Ugd2UgY2FuIHZhbGlkYXRlIGFnYWluc3QK
KyAgICB0YXJiYWxsX2NvbnRlbnQgPSAoCisgICAgICAgICdRbHBvT1RGQldTWlRXZEdrajN3QUFX
Ri9rOGFRQUNCSUIvL0E5KzhjSVgvdjMzQUFDRUFZQUJBRUNFQUNOeicKKyAgICAgICAgJ0pxc2dK
SkZQVFNuazFBM3FoNm1UUUFBQUFOUFVIa2Fna1NURWthQTA5UWFOQUFBR2dBQUFjd0NZQ1pHQUVZ
JworICAgICAgICAnbUpoTUpnaHBpYVlCVWtLYW1tU0hxTk1aUTBOQUJrTkFlbzBBR25lQWV2bmx3
UW9HekV6TlZ6YVl4cC8xVWsnCisgICAgICAgICd4WHpBMUNRWDBCSk1aWkxjUEJybHVKaXI1U1F5
aWpXSFlaNlpVdFZxcWxZRGRCMlFvQ3dhOUd5V3dHWURNQScKKyAgICAgICAgJ09RWWhrcEx0L09L
Rm5ubFQ4RTBQbU84K1pOU28yV1dxZUN6R0I1ZkJYWjNJdlY3dU5KVkU3RFluV2o2cXdCJworICAg
ICAgICAnazVESkRJclE1T1FISElqa1M5S3F3RzNtYzN0K0YxK2l1amI4OXVmeUJOSUtDZ2VaQldy
bDVjWHhiTUdvTXMnCisgICAgICAgICdjOUp1VWtnNVlzaVZjYVpKdXJjNktMaTZ5S09rZ0NVT2xJ
bE9wT29YeXJUSmpLOFpnYmtsUmVEZHdHbUZndCcKKyAgICAgICAgJ2RrVnNBSXNsU1ZDZDRBdEFD
U0xieWhMSHJ5ZmIxNFBLZWdyVkRiYStVOE9MNktRdHpkTTVITGpBYzgvcDZuJworICAgICAgICAn
MGxnYVdVOHNrZ083eHVwUFRreXV3aGVTY2tlakZMSzVUNFpPbzBHZGE5dmlhSWhwRDFRbjdKcXFs
S0FKcUMnCisgICAgICAgICdRcGxQS3AybnFCV0Fmd0JHYU93VnJ6M3kxVCtVWlpOaXNtWEhzYjJK
cTE4VCtWYUQ5azRQOERxRTNnNzBxVicKKyAgICAgICAgJ0pMdXJwbkRJNlZTNW9xRERQVmJ0VmpN
eE14TWc0cnpRVmlwbjJCdjFmVk5LMGlxM0dsMGhobm5IS20vZWd5JworICAgICAgICAnbldRN1FI
L0YzSkZPRkNRMGFTUGZBPScKKyAgICAgICAgKS5kZWNvZGUoJ2Jhc2U2NCcpCisKKyAgICBkZWYg
dGVzdF9yZXBvc2l0b3J5X3RhcmJhbGwoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IFJlcG9z
aXRvcnkudGFyYmFsbCBnZW5lcmF0ZXMgdGhlIHJpZ2h0IG9wZXJhdGlvbnMKKyAgICAgICAgdHJh
bnNwb3J0X3BhdGggPSAncmVwbycKKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2VzID0gWygoJ29r
JywpLCBzZWxmLnRhcmJhbGxfY29udGVudCksCisgICAgICAgICAgICBdCisgICAgICAgIGV4cGVj
dGVkX2NhbGxzID0gWygnY2FsbF9leHBlY3RpbmdfYm9keScsICdSZXBvc2l0b3J5LnRhcmJhbGwn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcvLy9yZXBvLycsICdiejInLCksKSwKKyAg
ICAgICAgICAgIF0KKyAgICAgICAgcmVtb3RlX3JlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFr
ZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisgICAgICAgICAgICBleHBlY3RlZF9yZXNwb25zZXMs
IHRyYW5zcG9ydF9wYXRoKQorICAgICAgICAjIE5vdyBhY3R1YWxseSBhc2sgZm9yIHRoZSB0YXJi
YWxsCisgICAgICAgIHRhcmJhbGxfZmlsZSA9IHJlbW90ZV9yZXBvLl9nZXRfdGFyYmFsbCgnYnoy
JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9j
YWxscywgY2xpZW50Ll9jYWxscykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50
YXJiYWxsX2NvbnRlbnQsIHRhcmJhbGxfZmlsZS5yZWFkKCkpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICB0YXJiYWxsX2ZpbGUuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3Byb3V0X3Vz
ZXNfdGFyYmFsbChzZWxmKToKKyAgICAgICAgIyBSZW1vdGVSZXBvc2l0b3J5LnNwcm91dCBzaG91
bGQgdHJ5IHRvIHVzZSB0aGUKKyAgICAgICAgIyB0YXJiYWxsIGNvbW1hbmQgcmF0aGVyIHRoYW4g
YWNjZXNzaW5nIGFsbCB0aGUgZmlsZXMKKyAgICAgICAgdHJhbnNwb3J0X3BhdGggPSAnc3JjcmVw
bycKKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2VzID0gWygoJ29rJywpLCBzZWxmLnRhcmJhbGxf
Y29udGVudCksCisgICAgICAgICAgICBdCisgICAgICAgIGV4cGVjdGVkX2NhbGxzID0gWygnY2Fs
bDInLCAnUmVwb3NpdG9yeS50YXJiYWxsJywgKCcvLy9zcmNyZXBvLycsICdiejInLCksKSwKKyAg
ICAgICAgICAgIF0KKyAgICAgICAgcmVtb3RlX3JlcG8sIGNsaWVudCA9IHNlbGYuc2V0dXBfZmFr
ZV9jbGllbnRfYW5kX3JlcG9zaXRvcnkoCisgICAgICAgICAgICBleHBlY3RlZF9yZXNwb25zZXMs
IHRyYW5zcG9ydF9wYXRoKQorICAgICAgICAjIG1ha2UgYSByZWd1bGFyIGxvY2FsIHJlcG9zaXRv
cnkgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0cworICAgICAgICBkZXN0X3RyYW5zcG9ydCA9IE1lbW9y
eVRyYW5zcG9ydCgpCisgICAgICAgIGRlc3RfdHJhbnNwb3J0Lm1rZGlyKCdkZXN0cmVwbycpCisg
ICAgICAgIGJ6cmRpcl9mb3JtYXQgPSBienJkaXIuZm9ybWF0X3JlZ2lzdHJ5Lm1ha2VfYnpyZGly
KCdkZWZhdWx0JykKKyAgICAgICAgZGVzdF9ienJkaXIgPSBienJkaXJfZm9ybWF0LmluaXRpYWxp
emVfb25fdHJhbnNwb3J0KGRlc3RfdHJhbnNwb3J0KQorICAgICAgICAjIHRyeSB0byBjb3B5Li4u
CisgICAgICAgIHJlbW90ZV9yZXBvLnNwcm91dChkZXN0X2J6cmRpcikKKworCitjbGFzcyBUZXN0
UmVtb3RlUmVwb3NpdG9yeUNvcHlDb250ZW50KHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6
CisgICAgIiIiUmVtb3RlUmVwb3NpdG9yeS5jb3B5X2NvbnRlbnRfaW50byBvcHRpbWl6YXRpb25z
IiIiCisKKyAgICBkZWYgdGVzdF9jb3B5X2NvbnRlbnRfcmVtb3RlX3RvX2xvY2FsKHNlbGYpOgor
ICAgICAgICBzZWxmLnRyYW5zcG9ydF9zZXJ2ZXIgPSBzZXJ2ZXIuU21hcnRUQ1BTZXJ2ZXJfZm9y
X3Rlc3RpbmcKKyAgICAgICAgc3JjX3JlcG8gPSBzZWxmLm1ha2VfcmVwb3NpdG9yeSgncmVwbzEn
KQorICAgICAgICBzcmNfcmVwbyA9IHJlcG9zaXRvcnkuUmVwb3NpdG9yeS5vcGVuKHNlbGYuZ2V0
X3VybCgncmVwbzEnKSkKKyAgICAgICAgIyBBdCB0aGUgbW9tZW50IHRoZSB0YXJiYWxsLWJhc2Vk
IGNvcHlfY29udGVudF9pbnRvIGNhbid0IHdyaXRlIGJhY2sKKyAgICAgICAgIyBpbnRvIGEgc21h
cnQgc2VydmVyLiAgSXQgd291bGQgYmUgZ29vZCBpZiBpdCBjb3VsZCB1cGxvYWQgdGhlCisgICAg
ICAgICMgdGFyYmFsbDsgb25jZSB0aGF0IHdvcmtzIHdlJ2QgaGF2ZSB0byBjcmVhdGUgcmVwb3Np
dG9yaWVzIG9mCisgICAgICAgICMgZGlmZmVyZW50IGZvcm1hdHMuIC0tIG1icCAyMDA3MDQxMAor
ICAgICAgICBkZXN0X3VybCA9IHNlbGYuZ2V0X3Zmc19vbmx5X3VybCgncmVwbzInKQorICAgICAg
ICBkZXN0X2J6cmRpciA9IEJ6ckRpci5jcmVhdGUoZGVzdF91cmwpCisgICAgICAgIGRlc3RfcmVw
byA9IGRlc3RfYnpyZGlyLmNyZWF0ZV9yZXBvc2l0b3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShpc2luc3RhbmNlKGRlc3RfcmVwbywgUmVtb3RlUmVwb3NpdG9yeSkpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNyY19yZXBvLCBSZW1vdGVSZXBvc2l0b3J5KSkKKyAg
ICAgICAgc3JjX3JlcG8uY29weV9jb250ZW50X2ludG8oZGVzdF9yZXBvKQoK

=== added file bzrlib/tests/test_smart.py // file-id:test_smart.py-200611220245
... 51-ol0l0o0oofsu9b3t-2 // last-changed:mbp@sourcefrog.net-20070426074805-va5
... 3nylsxqt7ur7u // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3Rlc3Rfc21hcnQucHkKQEAgLTAsMCArMSw4
NDEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IENhbm9uaWNhbCBMdGQKKyMKKyMgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv
biwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisiIiJUZXN0cyBmb3IgdGhlIHNtYXJ0IHdpcmUvZG9t
YWluIHByb3RvY29jbC4iIiIKKworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9y
dCB0ZW1wZmlsZQoraW1wb3J0IHRhcmZpbGUKKworZnJvbSBienJsaWIgaW1wb3J0IGJ6cmRpciwg
ZXJyb3JzLCBzbWFydCwgdGVzdHMKK2Zyb20gYnpybGliLnNtYXJ0LnJlcXVlc3QgaW1wb3J0IFNt
YXJ0U2VydmVyUmVzcG9uc2UKK2ltcG9ydCBienJsaWIuc21hcnQuYnpyZGlyCitpbXBvcnQgYnpy
bGliLnNtYXJ0LmJyYW5jaAoraW1wb3J0IGJ6cmxpYi5zbWFydC5yZXBvc2l0b3J5CisKKworY2xh
c3MgVGVzdENhc2VXaXRoU21hcnRNZWRpdW0odGVzdHMuVGVzdENhc2VXaXRoVHJhbnNwb3J0KToK
KworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdENhc2VXaXRoU21hcnRN
ZWRpdW0sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgIyBXZSdyZSBhbGxvd2VkIHRvIHNldCAgdGhl
IHRyYW5zcG9ydCBjbGFzcyBoZXJlLCBzbyB0aGF0IHdlIGRvbid0IHVzZQorICAgICAgICAjIHRo
ZSBkZWZhdWx0IG9yIGEgcGFyYW1ldGVyaXplZCBjbGFzcywgYnV0IHJhdGhlciB1c2UgdGhlCisg
ICAgICAgICMgVGVzdENhc2VXaXRoVHJhbnNwb3J0IGluZnJhc3RydWN0dXJlIHRvIHNldCB1cCBh
IHNtYXJ0IHNlcnZlciBhbmQKKyAgICAgICAgIyB0cmFuc3BvcnQuCisgICAgICAgIHNlbGYudHJh
bnNwb3J0X3NlcnZlciA9IHNtYXJ0LnNlcnZlci5TbWFydFRDUFNlcnZlcl9mb3JfdGVzdGluZwor
CisgICAgZGVmIGdldF9zbWFydF9tZWRpdW0oc2VsZik6CisgICAgICAgICIiIkdldCBhIHNtYXJ0
IG1lZGl1bSB0byB1c2UgaW4gdGVzdHMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmdldF90cmFu
c3BvcnQoKS5nZXRfc21hcnRfbWVkaXVtKCkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJSZXNw
b25zZSh0ZXN0cy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9fZXFfXyhzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCApKSwKKyAgICAg
ICAgICAgIFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICkpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICksICdib2R5JyksCisgICAgICAgICAg
ICBTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCApLCAnYm9keScpKQorICAgICAgICBzZWxmLmFz
c2VydE5vdEVxdWFsKFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICkpLAorICAgICAgICAgICAg
U21hcnRTZXJ2ZXJSZXNwb25zZSgoJ25vdG9rJywgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90
RXF1YWwoU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgKSwgJ2JvZHknKSwKKyAgICAgICAgICAg
IFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVx
dWFsKE5vbmUsCisgICAgICAgICAgICBTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCApKSkKKwor
CitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJSZXF1ZXN0RmluZFJlcG9zaXRvcnkodGVzdHMuVGVzdENh
c2VXaXRoVHJhbnNwb3J0KToKKyAgICAiIiJUZXN0cyBmb3IgQnpyRGlyLmZpbmRfcmVwb3NpdG9y
eS4iIiIKKworICAgIGRlZiB0ZXN0X25vX3JlcG9zaXRvcnkoc2VsZik6CisgICAgICAgICIiIldo
ZW4gdGhlcmUgaXMgbm8gcmVwb3NpdG9yeSB0byBiZSBmb3VuZCwgKCdub3JlcG9zaXRvcnknLCAp
IGlzIHJldHVybmVkLiIiIgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkK
KyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJlcXVlc3RGaW5kUmVw
b3NpdG9yeShiYWNraW5nKQorICAgICAgICBzZWxmLm1ha2VfYnpyZGlyKCcuJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZlclJlc3BvbnNlKCgnbm9yZXBvc2l0b3J5JywgKSks
CisgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSkp
CisKKyAgICBkZWYgdGVzdF9ub25zaGFyZWRfcmVwb3NpdG9yeShzZWxmKToKKyAgICAgICAgIyBu
b25zaGFyZWQgcmVwb3NpdG9yeXMgb25seSBhbGxvdyAnZmluZCcgdG8gcmV0dXJuIGEgaGFuZGxl
IHdoZW4gdGhlIAorICAgICAgICAjIHBhdGggdGhlIHJlcG9zaXRvcnkgaXMgYmVpbmcgc2VhcmNo
ZWQgb24gaXMgdGhlIHNhbWUgYXMgdGhhdCB0aGF0IAorICAgICAgICAjIHRoZSByZXBvc2l0b3J5
IGlzIGF0LgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAg
cmVxdWVzdCA9IHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJlcXVlc3RGaW5kUmVwb3NpdG9yeShi
YWNraW5nKQorICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlX3JlcG9zaXRvcnlfYW5kX3Jlc3Vs
dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCByZXF1ZXN0LmV4ZWN1dGUoYmFj
a2luZy5sb2NhbF9hYnNwYXRoKCcnKSkpCisgICAgICAgIHNlbGYubWFrZV9ienJkaXIoJ3N1YmRp
cicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ25vcmVw
b3NpdG9yeScsICkpLAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxf
YWJzcGF0aCgnc3ViZGlyJykpKQorCisgICAgZGVmIF9tYWtlX3JlcG9zaXRvcnlfYW5kX3Jlc3Vs
dChzZWxmLCBzaGFyZWQ9RmFsc2UsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgIiIiQ29udmVuaWVu
Y2UgZnVuY3Rpb24gdG8gc2V0dXAgYSByZXBvc2l0b3J5LgorCisgICAgICAgIDpyZXN1bHQ6IFRo
ZSBTbWFydFNlcnZlclJlc3BvbnNlIHRvIGV4cGVjdCB3aGVuIG9wZW5pbmcgaXQuCisgICAgICAg
ICIiIgorICAgICAgICByZXBvID0gc2VsZi5tYWtlX3JlcG9zaXRvcnkoJy4nLCBzaGFyZWQ9c2hh
cmVkLCBmb3JtYXQ9Zm9ybWF0KQorICAgICAgICBpZiByZXBvLnN1cHBvcnRzX3JpY2hfcm9vdCgp
OgorICAgICAgICAgICAgcmljaF9yb290ID0gJ3llcycKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJpY2hfcm9vdCA9ICdubycKKyAgICAgICAgaWYgcmVwby5fZm9ybWF0LnN1cHBvcnRzX3Ry
ZWVfcmVmZXJlbmNlOgorICAgICAgICAgICAgc3VidHJlZXMgPSAneWVzJworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc3VidHJlZXMgPSAnbm8nCisgICAgICAgIHJldHVybiBTbWFydFNlcnZl
clJlc3BvbnNlKCgnb2snLCAnJywgcmljaF9yb290LCBzdWJ0cmVlcykpCisKKyAgICBkZWYgdGVz
dF9zaGFyZWRfcmVwb3NpdG9yeShzZWxmKToKKyAgICAgICAgIiIiV2hlbiB0aGVyZSBpcyBhIHNo
YXJlZCByZXBvc2l0b3J5LCB3ZSBnZXQgJ29rJywgJ3JlbHBhdGgtdG8tcmVwbycuIiIiCisgICAg
ICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0ID0gc21h
cnQuYnpyZGlyLlNtYXJ0U2VydmVyUmVxdWVzdEZpbmRSZXBvc2l0b3J5KGJhY2tpbmcpCisgICAg
ICAgIHJlc3VsdCA9IHNlbGYuX21ha2VfcmVwb3NpdG9yeV9hbmRfcmVzdWx0KHNoYXJlZD1UcnVl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgcmVxdWVzdC5leGVjdXRlKGJhY2tp
bmcubG9jYWxfYWJzcGF0aCgnJykpKQorICAgICAgICBzZWxmLm1ha2VfYnpyZGlyKCdzdWJkaXIn
KQorICAgICAgICByZXN1bHQyID0gU21hcnRTZXJ2ZXJSZXNwb25zZShyZXN1bHQuYXJnc1swOjFd
ICsgKCcuLicsICkgKyByZXN1bHQuYXJnc1syOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cmVzdWx0MiwKKyAgICAgICAgICAgIHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxvY2FsX2Fic3Bh
dGgoJ3N1YmRpcicpKSkKKyAgICAgICAgc2VsZi5tYWtlX2J6cmRpcignc3ViZGlyL2RlZXBlcicp
CisgICAgICAgIHJlc3VsdDMgPSBTbWFydFNlcnZlclJlc3BvbnNlKHJlc3VsdC5hcmdzWzA6MV0g
KyAoJy4uLy4uJywgKSArIHJlc3VsdC5hcmdzWzI6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZXN1bHQzLAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxfYWJz
cGF0aCgnc3ViZGlyL2RlZXBlcicpKSkKKworICAgIGRlZiB0ZXN0X3JpY2hfcm9vdF9hbmRfc3Vi
dHJlZV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBmb3IgdGhlIGZvcm1hdCBhdHRy
aWJ1dGVzIGZvciByaWNoIHJvb3QgYW5kIHN1YnRyZWUgc3VwcG9ydC4iIiIKKyAgICAgICAgYmFj
a2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5ienJk
aXIuU21hcnRTZXJ2ZXJSZXF1ZXN0RmluZFJlcG9zaXRvcnkoYmFja2luZykKKyAgICAgICAgcmVz
dWx0ID0gc2VsZi5fbWFrZV9yZXBvc2l0b3J5X2FuZF9yZXN1bHQoZm9ybWF0PSdkaXJzdGF0ZS13
aXRoLXN1YnRyZWUnKQorICAgICAgICAjIGNoZWNrIHRoZSB0ZXN0IHdpbGwgYmUgdmFsaWQKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneWVzJywgcmVzdWx0LmFyZ3NbMl0pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ3llcycsIHJlc3VsdC5hcmdzWzNdKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlc3VsdCwgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJykp
KQorCisKK2NsYXNzIFRlc3RTbWFydFNlcnZlclJlcXVlc3RJbml0aWFsaXplQnpyRGlyKHRlc3Rz
LlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAgICBkZWYgdGVzdF9lbXB0eV9kaXIoc2VsZik6
CisgICAgICAgICIiIkluaXRpYWxpemluZyBhbiBlbXB0eSBkaXIgc2hvdWxkIHN1Y2NlZWQgYW5k
IGRvIGl0LiIiIgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAg
ICAgcmVxdWVzdCA9IHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJlcXVlc3RJbml0aWFsaXplQnpy
RGlyKGJhY2tpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU21hcnRTZXJ2ZXJSZXNwb25z
ZSgoJ29rJywgKSksCisgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9h
YnNwYXRoKCcuJykpKQorICAgICAgICBtYWRlX2RpciA9IGJ6cmRpci5CenJEaXIub3Blbl9mcm9t
X3RyYW5zcG9ydChiYWNraW5nKQorICAgICAgICAjIG5vIGJyYW5jaCwgdHJlZSBvciByZXBvc2l0
b3J5IGlzIGV4cGVjdGVkIHdpdGggdGhlIGN1cnJlbnQgCisgICAgICAgICMgZGVmYXVsdCBmb3Jt
YXJ0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuTm9Xb3JraW5nVHJlZSwgbWFk
ZV9kaXIub3Blbl93b3JraW5ndHJlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3Jz
Lk5vdEJyYW5jaEVycm9yLCBtYWRlX2Rpci5vcGVuX2JyYW5jaCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoZXJyb3JzLk5vUmVwb3NpdG9yeVByZXNlbnQsIG1hZGVfZGlyLm9wZW5fcmVwb3Np
dG9yeSkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZGlyKHNlbGYpOgorICAgICAgICAiIiJJbml0
aWFsaXppbmcgYSBtaXNzaW5nIGRpcmVjdG9yeSBzaG91bGQgZmFpbCBsaWtlIHRoZSBienJkaXIg
YXBpLiIiIgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAg
cmVxdWVzdCA9IHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJlcXVlc3RJbml0aWFsaXplQnpyRGly
KGJhY2tpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Ob1N1Y2hGaWxlLAor
ICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlLCBiYWNraW5nLmxvY2FsX2Fic3BhdGgoJ3N1YmRp
cicpKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZWRfZGlyKHNlbGYpOgorICAgICAgICAiIiJJ
bml0aWFsaXppbmcgYW4gZXh0YW50IGJ6cmRpciBzaG91bGQgZmFpbCBsaWtlIHRoZSBienJkaXIg
YXBpLiIiIgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAg
cmVxdWVzdCA9IHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJlcXVlc3RJbml0aWFsaXplQnpyRGly
KGJhY2tpbmcpCisgICAgICAgIHNlbGYubWFrZV9ienJkaXIoJ3N1YmRpcicpCisgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5GaWxlRXhpc3RzLAorICAgICAgICAgICAgcmVxdWVzdC5l
eGVjdXRlLCBiYWNraW5nLmxvY2FsX2Fic3BhdGgoJ3N1YmRpcicpKQorCisKK2NsYXNzIFRlc3RT
bWFydFNlcnZlclJlcXVlc3RPcGVuQnJhbmNoKHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6
CisKKyAgICBkZWYgdGVzdF9ub19icmFuY2goc2VsZik6CisgICAgICAgICIiIldoZW4gdGhlcmUg
aXMgbm8gYnJhbmNoLCAoJ25vYnJhbmNoJywgKSBpcyByZXR1cm5lZC4iIiIKKyAgICAgICAgYmFj
a2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5ienJk
aXIuU21hcnRTZXJ2ZXJSZXF1ZXN0T3BlbkJyYW5jaChiYWNraW5nKQorICAgICAgICBzZWxmLm1h
a2VfYnpyZGlyKCcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZlclJlc3Bv
bnNlKCgnbm9icmFuY2gnLCApKSwKKyAgICAgICAgICAgIHJlcXVlc3QuZXhlY3V0ZShiYWNraW5n
LmxvY2FsX2Fic3BhdGgoJycpKSkKKworICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAg
ICAgIiIiV2hlbiB0aGVyZSBpcyBhIGJyYW5jaCwgJ29rJyBpcyByZXR1cm5lZC4iIiIKKyAgICAg
ICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFy
dC5ienJkaXIuU21hcnRTZXJ2ZXJSZXF1ZXN0T3BlbkJyYW5jaChiYWNraW5nKQorICAgICAgICBz
ZWxmLm1ha2VfYnJhbmNoKCcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZl
clJlc3BvbnNlKCgnb2snLCAnJykpLAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tp
bmcubG9jYWxfYWJzcGF0aCgnJykpKQorCisgICAgZGVmIHRlc3RfYnJhbmNoX3JlZmVyZW5jZShz
ZWxmKToKKyAgICAgICAgIiIiV2hlbiB0aGVyZSBpcyBhIGJyYW5jaCByZWZlcmVuY2UsIHRoZSBy
ZWZlcmVuY2UgVVJMIGlzIHJldHVybmVkLiIiIgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRf
dHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJl
cXVlc3RPcGVuQnJhbmNoKGJhY2tpbmcpCisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9icmFu
Y2goJ2JyYW5jaCcpCisgICAgICAgIGNoZWNrb3V0ID0gYnJhbmNoLmNyZWF0ZV9jaGVja291dCgn
cmVmZXJlbmNlJyxsaWdodHdlaWdodD1UcnVlKQorICAgICAgICAjIFRPRE86IG9uY2Ugd2UgaGF2
ZSBhbiBBUEkgdG8gcHJvYmUgZm9yIHJlZmVyZW5jZXMgb2YgYW55IHNvcnQsIHdlCisgICAgICAg
ICMgY2FuIHVzZSBpdCBoZXJlLgorICAgICAgICByZWZlcmVuY2VfdXJsID0gYmFja2luZy5hYnNw
YXRoKCdicmFuY2gnKSArICcvJworICAgICAgICBzZWxmLmFzc2VydEZpbGVFcXVhbChyZWZlcmVu
Y2VfdXJsLCAncmVmZXJlbmNlLy5ienIvYnJhbmNoL2xvY2F0aW9uJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCByZWZlcmVuY2VfdXJsKSksCisg
ICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCdyZWZlcmVu
Y2UnKSkpCisKKworY2xhc3MgVGVzdFNtYXJ0U2VydmVyUmVxdWVzdFJldmlzaW9uSGlzdG9yeSh0
ZXN0cy5UZXN0Q2FzZVdpdGhUcmFuc3BvcnQpOgorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6
CisgICAgICAgICIiIkZvciBhbiBlbXB0eSBicmFuY2gsIHRoZSBib2R5IGlzIGVtcHR5LiIiIgor
ICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9
IHNtYXJ0LmJyYW5jaC5TbWFydFNlcnZlclJlcXVlc3RSZXZpc2lvbkhpc3RvcnkoYmFja2luZykK
KyAgICAgICAgc2VsZi5tYWtlX2JyYW5jaCgnLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
U21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgKSwgJycpLAorICAgICAgICAgICAgcmVxdWVzdC5l
eGVjdXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJykpKQorCisgICAgZGVmIHRlc3Rfbm90X2Vt
cHR5KHNlbGYpOgorICAgICAgICAiIiJGb3IgYSBub24tZW1wdHkgYnJhbmNoLCB0aGUgYm9keSBp
cyBlbXB0eS4iIiIKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAg
ICAgIHJlcXVlc3QgPSBzbWFydC5icmFuY2guU21hcnRTZXJ2ZXJSZXF1ZXN0UmV2aXNpb25IaXN0
b3J5KGJhY2tpbmcpCisgICAgICAgIHRyZWUgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF9tZW1vcnlf
dHJlZSgnLicpCisgICAgICAgIHRyZWUubG9ja193cml0ZSgpCisgICAgICAgIHRyZWUuYWRkKCcn
KQorICAgICAgICByMSA9IHRyZWUuY29tbWl0KCcxc3QgY29tbWl0JykKKyAgICAgICAgcjIgPSB0
cmVlLmNvbW1pdCgnMm5kIGNvbW1pdCcsIHJldl9pZD11J1x4YzgnLmVuY29kZSgndXRmLTgnKSkK
KyAgICAgICAgdHJlZS51bmxvY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAg
ICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgKSwgKCdceDAwJy5qb2luKFtyMSwgcjJd
KSkpLAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0aCgn
JykpKQorCisKK2NsYXNzIFRlc3RTbWFydFNlcnZlckJyYW5jaFJlcXVlc3QodGVzdHMuVGVzdENh
c2VXaXRoVHJhbnNwb3J0KToKKworICAgIGRlZiB0ZXN0X25vX2JyYW5jaChzZWxmKToKKyAgICAg
ICAgIiIiV2hlbiB0aGVyZSBpcyBhIGJ6cmRpciBhbmQgbm8gYnJhbmNoLCBOb3RCcmFuY2hFcnJv
ciBpcyByYWlzZWQuIiIiCisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQor
ICAgICAgICByZXF1ZXN0ID0gc21hcnQuYnJhbmNoLlNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdChi
YWNraW5nKQorICAgICAgICBzZWxmLm1ha2VfYnpyZGlyKCcuJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoZXJyb3JzLk5vdEJyYW5jaEVycm9yLAorICAgICAgICAgICAgcmVxdWVzdC5leGVj
dXRlLCBiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpKQorCisgICAgZGVmIHRlc3RfYnJhbmNoX3Jl
ZmVyZW5jZShzZWxmKToKKyAgICAgICAgIiIiV2hlbiB0aGVyZSBpcyBhIGJyYW5jaCByZWZlcmVu
Y2UsIE5vdEJyYW5jaEVycm9yIGlzIHJhaXNlZC4iIiIKKyAgICAgICAgYmFja2luZyA9IHNlbGYu
Z2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5icmFuY2guU21hcnRTZXJ2
ZXJCcmFuY2hSZXF1ZXN0KGJhY2tpbmcpCisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9icmFu
Y2goJ2JyYW5jaCcpCisgICAgICAgIGNoZWNrb3V0ID0gYnJhbmNoLmNyZWF0ZV9jaGVja291dCgn
cmVmZXJlbmNlJyxsaWdodHdlaWdodD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhl
cnJvcnMuTm90QnJhbmNoRXJyb3IsCisgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUsIGJhY2tp
bmcubG9jYWxfYWJzcGF0aCgnY2hlY2tvdXQnKSkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJC
cmFuY2hSZXF1ZXN0TGFzdFJldmlzaW9uSW5mbyh0ZXN0cy5UZXN0Q2FzZVdpdGhUcmFuc3BvcnQp
OgorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgICIiIkZvciBhbiBlbXB0eSBi
cmFuY2gsIHRoZSByZXN1bHQgaXMgKCdvaycsICcwJywgJ251bGw6JykuIiIiCisgICAgICAgIGJh
Y2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0ID0gc21hcnQuYnJh
bmNoLlNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdExhc3RSZXZpc2lvbkluZm8oYmFja2luZykKKyAg
ICAgICAgc2VsZi5tYWtlX2JyYW5jaCgnLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU21h
cnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgJzAnLCAnbnVsbDonKSksCisgICAgICAgICAgICByZXF1
ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSkpCisKKyAgICBkZWYgdGVzdF9u
b3RfZW1wdHkoc2VsZik6CisgICAgICAgICIiIkZvciBhIG5vbi1lbXB0eSBicmFuY2gsIHRoZSBy
ZXN1bHQgaXMgKCdvaycsICdyZXZubycsICdyZXZpZCcpLiIiIgorICAgICAgICBiYWNraW5nID0g
c2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJyYW5jaC5TbWFy
dFNlcnZlckJyYW5jaFJlcXVlc3RMYXN0UmV2aXNpb25JbmZvKGJhY2tpbmcpCisgICAgICAgIHRy
ZWUgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF9tZW1vcnlfdHJlZSgnLicpCisgICAgICAgIHRyZWUu
bG9ja193cml0ZSgpCisgICAgICAgIHRyZWUuYWRkKCcnKQorICAgICAgICByZXZfaWRfdXRmOCA9
IHUnXHhjOCcuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHIxID0gdHJlZS5jb21taXQoJzFzdCBj
b21taXQnKQorICAgICAgICByMiA9IHRyZWUuY29tbWl0KCcybmQgY29tbWl0JywgcmV2X2lkPXJl
dl9pZF91dGY4KQorICAgICAgICB0cmVlLnVubG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoCisgICAgICAgICAgICBTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCAnMicsIHJldl9pZF91
dGY4KSksCisgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRo
KCcnKSkpCisKKworY2xhc3MgVGVzdFNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdEdldENvbmZpZ0Zp
bGUodGVzdHMuVGVzdENhc2VXaXRoVHJhbnNwb3J0KToKKworICAgIGRlZiB0ZXN0X2RlZmF1bHQo
c2VsZik6CisgICAgICAgICIiIldpdGggbm8gZmlsZSwgd2UgZ2V0IGVtcHR5IGNvbnRlbnQuIiIi
CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0
ID0gc21hcnQuYnJhbmNoLlNtYXJ0U2VydmVyQnJhbmNoR2V0Q29uZmlnRmlsZShiYWNraW5nKQor
ICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCcuJykKKyAgICAgICAgIyB0aGVyZSBz
aG91bGQgYmUgbm8gZmlsZSBieSBkZWZhdWx0CisgICAgICAgIGNvbnRlbnQgPSAnJworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICksIGNvbnRlbnQp
LAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJykp
KQorCisgICAgZGVmIHRlc3Rfd2l0aF9jb250ZW50KHNlbGYpOgorICAgICAgICAjIFNtYXJ0U2Vy
dmVyQnJhbmNoR2V0Q29uZmlnRmlsZSBzaG91bGQgcmV0dXJuIHRoZSBjb250ZW50IGZyb20KKyAg
ICAgICAgIyBicmFuY2guY29udHJvbF9maWxlcy5nZXQoJ2JyYW5jaC5jb25mJykgZm9yIG5vdyAt
IGluIHRoZSBmdXR1cmUgaXQgbWF5CisgICAgICAgICMgcGVyZm9ybSBtb3JlIGNvbXBsZXggcHJv
Y2Vzc2luZy4gCisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAg
ICByZXF1ZXN0ID0gc21hcnQuYnJhbmNoLlNtYXJ0U2VydmVyQnJhbmNoR2V0Q29uZmlnRmlsZShi
YWNraW5nKQorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCcuJykKKyAgICAgICAg
YnJhbmNoLmNvbnRyb2xfZmlsZXMucHV0X3V0ZjgoJ2JyYW5jaC5jb25mJywgJ2ZvbyBiYXIgYmF6
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCAp
LCAnZm9vIGJhciBiYXonKSwKKyAgICAgICAgICAgIHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxv
Y2FsX2Fic3BhdGgoJycpKSkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0
U2V0TGFzdFJldmlzaW9uKHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAgICBkZWYg
dGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgp
CisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5icmFuY2guU21hcnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0
U2V0TGFzdFJldmlzaW9uKGJhY2tpbmcpCisgICAgICAgIGIgPSBzZWxmLm1ha2VfYnJhbmNoKCcu
JykKKyAgICAgICAgYnJhbmNoX3Rva2VuID0gYi5sb2NrX3dyaXRlKCkKKyAgICAgICAgcmVwb190
b2tlbiA9IGIucmVwb3NpdG9yeS5sb2NrX3dyaXRlKCkKKyAgICAgICAgYi5yZXBvc2l0b3J5LnVu
bG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU21hcnRT
ZXJ2ZXJSZXNwb25zZSgoJ29rJywpKSwKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUo
CisgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJyksIGJyYW5jaF90
b2tlbiwgcmVwb190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgJ251bGw6JykpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBiLnVubG9jaygpCisKKyAgICBkZWYgdGVzdF9ub3RfcHJl
c2VudF9yZXZpc2lvbl9pZChzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5z
cG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5icmFuY2guU21hcnRTZXJ2ZXJCcmFuY2hS
ZXF1ZXN0U2V0TGFzdFJldmlzaW9uKGJhY2tpbmcpCisgICAgICAgIGIgPSBzZWxmLm1ha2VfYnJh
bmNoKCcuJykKKyAgICAgICAgYnJhbmNoX3Rva2VuID0gYi5sb2NrX3dyaXRlKCkKKyAgICAgICAg
cmVwb190b2tlbiA9IGIucmVwb3NpdG9yeS5sb2NrX3dyaXRlKCkKKyAgICAgICAgYi5yZXBvc2l0
b3J5LnVubG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldmlzaW9uX2lkID0gJ25v
bi1leGlzdGVudCByZXZpc2lvbicKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAg
ICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ05vU3VjaFJldmlzaW9uJywgcmV2aXNp
b25faWQpKSwKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUoCisgICAgICAgICAgICAg
ICAgICAgIGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJyksIGJyYW5jaF90b2tlbiwgcmVwb190b2tl
biwKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25faWQpKQorICAgICAgICBmaW5hbGx5Ogor
ICAgICAgICAgICAgYi51bmxvY2soKQorCisgICAgZGVmIHRlc3RfcmV2aXNpb25faWRfcHJlc2Vu
dChzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAgICAg
IHJlcXVlc3QgPSBzbWFydC5icmFuY2guU21hcnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0U2V0TGFzdFJl
dmlzaW9uKGJhY2tpbmcpCisgICAgICAgIHRyZWUgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF9tZW1v
cnlfdHJlZSgnLicpCisgICAgICAgIHRyZWUubG9ja193cml0ZSgpCisgICAgICAgIHRyZWUuYWRk
KCcnKQorICAgICAgICByZXZfaWRfdXRmOCA9IHUnXHhjOCcuZW5jb2RlKCd1dGYtOCcpCisgICAg
ICAgIHIxID0gdHJlZS5jb21taXQoJzFzdCBjb21taXQnLCByZXZfaWQ9cmV2X2lkX3V0ZjgpCisg
ICAgICAgIHIyID0gdHJlZS5jb21taXQoJzJuZCBjb21taXQnKQorICAgICAgICB0cmVlLnVubG9j
aygpCisgICAgICAgIGJyYW5jaF90b2tlbiA9IHRyZWUuYnJhbmNoLmxvY2tfd3JpdGUoKQorICAg
ICAgICByZXBvX3Rva2VuID0gdHJlZS5icmFuY2gucmVwb3NpdG9yeS5sb2NrX3dyaXRlKCkKKyAg
ICAgICAgdHJlZS5icmFuY2gucmVwb3NpdG9yeS51bmxvY2soKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFNtYXJ0U2VydmVyUmVz
cG9uc2UoKCdvaycsKSksCisgICAgICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKAorICAgICAg
ICAgICAgICAgICAgICBiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLCBicmFuY2hfdG9rZW4sIHJl
cG9fdG9rZW4sCisgICAgICAgICAgICAgICAgICAgIHJldl9pZF91dGY4KSkKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoW3Jldl9pZF91dGY4XSwgdHJlZS5icmFuY2gucmV2aXNpb25faGlz
dG9yeSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJlZS5icmFuY2gudW5sb2Nr
KCkKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX2lkX3ByZXNlbnQyKHNlbGYpOgorICAgICAgICBi
YWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJy
YW5jaC5TbWFydFNlcnZlckJyYW5jaFJlcXVlc3RTZXRMYXN0UmV2aXNpb24oYmFja2luZykKKyAg
ICAgICAgdHJlZSA9IHNlbGYubWFrZV9icmFuY2hfYW5kX21lbW9yeV90cmVlKCcuJykKKyAgICAg
ICAgdHJlZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJlZS5hZGQoJycpCisgICAgICAgIHJldl9p
ZF91dGY4ID0gdSdceGM4Jy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcjEgPSB0cmVlLmNvbW1p
dCgnMXN0IGNvbW1pdCcsIHJldl9pZD1yZXZfaWRfdXRmOCkKKyAgICAgICAgcjIgPSB0cmVlLmNv
bW1pdCgnMm5kIGNvbW1pdCcpCisgICAgICAgIHRyZWUudW5sb2NrKCkKKyAgICAgICAgdHJlZS5i
cmFuY2guc2V0X3JldmlzaW9uX2hpc3RvcnkoW10pCisgICAgICAgIGJyYW5jaF90b2tlbiA9IHRy
ZWUuYnJhbmNoLmxvY2tfd3JpdGUoKQorICAgICAgICByZXBvX3Rva2VuID0gdHJlZS5icmFuY2gu
cmVwb3NpdG9yeS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJlZS5icmFuY2gucmVwb3NpdG9yeS51
bmxvY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgICAgIFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsKSksCisgICAgICAgICAgICAg
ICAgcmVxdWVzdC5leGVjdXRlKAorICAgICAgICAgICAgICAgICAgICBiYWNraW5nLmxvY2FsX2Fi
c3BhdGgoJycpLCBicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4sCisgICAgICAgICAgICAgICAgICAg
IHJldl9pZF91dGY4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3Jldl9pZF91dGY4
XSwgdHJlZS5icmFuY2gucmV2aXNpb25faGlzdG9yeSgpKQorICAgICAgICBmaW5hbGx5OgorICAg
ICAgICAgICAgdHJlZS5icmFuY2gudW5sb2NrKCkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJC
cmFuY2hSZXF1ZXN0TG9ja1dyaXRlKHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAg
ICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydC5z
ZXRVcChzZWxmKQorICAgICAgICBzZWxmLnJlZHVjZUxvY2tkaXJUaW1lb3V0KCkKKworICAgIGRl
ZiB0ZXN0X2xvY2tfd3JpdGVfb25fdW5sb2NrZWRfYnJhbmNoKHNlbGYpOgorICAgICAgICBiYWNr
aW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJyYW5j
aC5TbWFydFNlcnZlckJyYW5jaFJlcXVlc3RMb2NrV3JpdGUoYmFja2luZykKKyAgICAgICAgYnJh
bmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnLicpCisgICAgICAgIHJlcG9zaXRvcnkgPSBicmFuY2gu
cmVwb3NpdG9yeQorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxv
Y2FsX2Fic3BhdGgoJycpKQorICAgICAgICBicmFuY2hfbm9uY2UgPSBicmFuY2guY29udHJvbF9m
aWxlcy5fbG9jay5wZWVrKCkuZ2V0KCdub25jZScpCisgICAgICAgIHJlcG9zaXRvcnlfbm9uY2Ug
PSByZXBvc2l0b3J5LmNvbnRyb2xfZmlsZXMuX2xvY2sucGVlaygpLmdldCgnbm9uY2UnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgo
J29rJywgYnJhbmNoX25vbmNlLCByZXBvc2l0b3J5X25vbmNlKSksCisgICAgICAgICAgICByZXNw
b25zZSkKKyAgICAgICAgIyBUaGUgYnJhbmNoIChhbmQgYXNzb2NpYXRlZCByZXBvc2l0b3J5KSBp
cyBub3cgbG9ja2VkLiAgVmVyaWZ5IHRoYXQKKyAgICAgICAgIyB3aXRoIGEgbmV3IGJyYW5jaCBv
YmplY3QuCisgICAgICAgIG5ld19icmFuY2ggPSByZXBvc2l0b3J5LmJ6cmRpci5vcGVuX2JyYW5j
aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Mb2NrQ29udGVudGlvbiwgbmV3
X2JyYW5jaC5sb2NrX3dyaXRlKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV9vbl9sb2NrZWRf
YnJhbmNoKHNlbGYpOgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAg
ICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJyYW5jaC5TbWFydFNlcnZlckJyYW5jaFJlcXVlc3RMb2Nr
V3JpdGUoYmFja2luZykKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnLicpCisg
ICAgICAgIGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAgICAgYnJhbmNoLmxlYXZlX2xvY2tfaW5f
cGxhY2UoKQorICAgICAgICBicmFuY2gudW5sb2NrKCkKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1
ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgIFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdMb2NrQ29udGVudGlv
bicsKSksIHJlc3BvbnNlKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRoX3Rva2Vuc19v
bl9sb2NrZWRfYnJhbmNoKHNlbGYpOgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNw
b3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJyYW5jaC5TbWFydFNlcnZlckJyYW5jaFJl
cXVlc3RMb2NrV3JpdGUoYmFja2luZykKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5j
aCgnLicpCisgICAgICAgIGJyYW5jaF90b2tlbiA9IGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAg
ICAgcmVwb190b2tlbiA9IGJyYW5jaC5yZXBvc2l0b3J5LmxvY2tfd3JpdGUoKQorICAgICAgICBi
cmFuY2gucmVwb3NpdG9yeS51bmxvY2soKQorICAgICAgICBicmFuY2gubGVhdmVfbG9ja19pbl9w
bGFjZSgpCisgICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5LmxlYXZlX2xvY2tfaW5fcGxhY2UoKQor
ICAgICAgICBicmFuY2gudW5sb2NrKCkKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0LmV4ZWN1
dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJhbmNoX3Rva2VuLCByZXBvX3Rva2VuKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgYnJhbmNoX3Rva2Vu
LCByZXBvX3Rva2VuKSksIHJlc3BvbnNlKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRo
X21pc21hdGNoZWRfdG9rZW5zX29uX2xvY2tlZF9icmFuY2goc2VsZik6CisgICAgICAgIGJhY2tp
bmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0ID0gc21hcnQuYnJhbmNo
LlNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdExvY2tXcml0ZShiYWNraW5nKQorICAgICAgICBicmFu
Y2ggPSBzZWxmLm1ha2VfYnJhbmNoKCcuJykKKyAgICAgICAgYnJhbmNoX3Rva2VuID0gYnJhbmNo
LmxvY2tfd3JpdGUoKQorICAgICAgICByZXBvX3Rva2VuID0gYnJhbmNoLnJlcG9zaXRvcnkubG9j
a193cml0ZSgpCisgICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5LnVubG9jaygpCisgICAgICAgIGJy
YW5jaC5sZWF2ZV9sb2NrX2luX3BsYWNlKCkKKyAgICAgICAgYnJhbmNoLnJlcG9zaXRvcnkubGVh
dmVfbG9ja19pbl9wbGFjZSgpCisgICAgICAgIGJyYW5jaC51bmxvY2soKQorICAgICAgICByZXNw
b25zZSA9IHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfdG9rZW4rJ3h4eCcsIHJlcG9fdG9r
ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBTbWFydFNlcnZlclJl
c3BvbnNlKCgnVG9rZW5NaXNtYXRjaCcsKSksIHJlc3BvbnNlKQorCisgICAgZGVmIHRlc3RfbG9j
a193cml0ZV9vbl9sb2NrZWRfcmVwbyhzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0
X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5icmFuY2guU21hcnRTZXJ2ZXJC
cmFuY2hSZXF1ZXN0TG9ja1dyaXRlKGJhY2tpbmcpCisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFr
ZV9icmFuY2goJy4nKQorICAgICAgICBicmFuY2gucmVwb3NpdG9yeS5sb2NrX3dyaXRlKCkKKyAg
ICAgICAgYnJhbmNoLnJlcG9zaXRvcnkubGVhdmVfbG9ja19pbl9wbGFjZSgpCisgICAgICAgIGJy
YW5jaC5yZXBvc2l0b3J5LnVubG9jaygpCisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdC5leGVj
dXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICBTbWFydFNlcnZlclJlc3BvbnNlKCgnTG9ja0NvbnRlbnRpb24nLCkpLCBy
ZXNwb25zZSkKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfb25fcmVhZG9ubHlfdHJhbnNwb3J0
KHNlbGYpOgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfcmVhZG9ubHlfdHJhbnNwb3J0KCkK
KyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJyYW5jaC5TbWFydFNlcnZlckJyYW5jaFJlcXVlc3RM
b2NrV3JpdGUoYmFja2luZykKKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnLicp
CisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdC5leGVjdXRlKCcnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ1VubG9ja2FibGVU
cmFuc3BvcnQnLCkpLCByZXNwb25zZSkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJCcmFuY2hS
ZXF1ZXN0VW5sb2NrKHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAgICBkZWYgc2V0
VXAoc2VsZik6CisgICAgICAgIHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydC5zZXRVcChzZWxm
KQorICAgICAgICBzZWxmLnJlZHVjZUxvY2tkaXJUaW1lb3V0KCkKKworICAgIGRlZiB0ZXN0X3Vu
bG9ja19vbl9sb2NrZWRfYnJhbmNoX2FuZF9yZXBvKHNlbGYpOgorICAgICAgICBiYWNraW5nID0g
c2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LmJyYW5jaC5TbWFy
dFNlcnZlckJyYW5jaFJlcXVlc3RVbmxvY2soYmFja2luZykKKyAgICAgICAgYnJhbmNoID0gc2Vs
Zi5tYWtlX2JyYW5jaCgnLicpCisgICAgICAgICMgTG9jayB0aGUgYnJhbmNoCisgICAgICAgIGJy
YW5jaF90b2tlbiA9IGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAgICAgcmVwb190b2tlbiA9IGJy
YW5jaC5yZXBvc2l0b3J5LmxvY2tfd3JpdGUoKQorICAgICAgICBicmFuY2gucmVwb3NpdG9yeS51
bmxvY2soKQorICAgICAgICAjIFVubG9jayB0aGUgYnJhbmNoIChhbmQgcmVwbykgb2JqZWN0LCBs
ZWF2aW5nIHRoZSBwaHlzaWNhbCBsb2NrcworICAgICAgICAjIGluIHBsYWNlLgorICAgICAgICBi
cmFuY2gubGVhdmVfbG9ja19pbl9wbGFjZSgpCisgICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5Lmxl
YXZlX2xvY2tfaW5fcGxhY2UoKQorICAgICAgICBicmFuY2gudW5sb2NrKCkKKyAgICAgICAgcmVz
cG9uc2UgPSByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoX3Rva2VuLCByZXBvX3Rva2VuKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25z
ZSgoJ29rJywpKSwgcmVzcG9uc2UpCisgICAgICAgICMgVGhlIGJyYW5jaCBpcyBub3cgdW5sb2Nr
ZWQuICBWZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGJyYW5jaAorICAgICAgICAjIG9iamVjdC4KKyAg
ICAgICAgbmV3X2JyYW5jaCA9IGJyYW5jaC5ienJkaXIub3Blbl9icmFuY2goKQorICAgICAgICBu
ZXdfYnJhbmNoLmxvY2tfd3JpdGUoKQorICAgICAgICBuZXdfYnJhbmNoLnVubG9jaygpCisKKyAg
ICBkZWYgdGVzdF91bmxvY2tfb25fdW5sb2NrZWRfYnJhbmNoX3VubG9ja2VkX3JlcG8oc2VsZik6
CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0
ID0gc21hcnQuYnJhbmNoLlNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdFVubG9jayhiYWNraW5nKQor
ICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCcuJykKKyAgICAgICAgcmVzcG9uc2Ug
PSByZXF1ZXN0LmV4ZWN1dGUoCisgICAgICAgICAgICBiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycp
LCAnYnJhbmNoIHRva2VuJywgJ3JlcG8gdG9rZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ1Rva2VuTWlzbWF0Y2gnLCkpLCBy
ZXNwb25zZSkKKworICAgIGRlZiB0ZXN0X3VubG9ja19vbl91bmxvY2tlZF9icmFuY2hfbG9ja2Vk
X3JlcG8oc2VsZik6CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAg
ICAgICByZXF1ZXN0ID0gc21hcnQuYnJhbmNoLlNtYXJ0U2VydmVyQnJhbmNoUmVxdWVzdFVubG9j
ayhiYWNraW5nKQorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCcuJykKKyAgICAg
ICAgIyBMb2NrIHRoZSByZXBvc2l0b3J5LgorICAgICAgICByZXBvX3Rva2VuID0gYnJhbmNoLnJl
cG9zaXRvcnkubG9ja193cml0ZSgpCisgICAgICAgIGJyYW5jaC5yZXBvc2l0b3J5LmxlYXZlX2xv
Y2tfaW5fcGxhY2UoKQorICAgICAgICBicmFuY2gucmVwb3NpdG9yeS51bmxvY2soKQorICAgICAg
ICAjIElzc3VlIGJyYW5jaCBsb2NrX3dyaXRlIHJlcXVlc3Qgb24gdGhlIHVubG9ja2VkIGJyYW5j
aCAod2l0aCBsb2NrZWQKKyAgICAgICAgIyByZXBvKS4KKyAgICAgICAgcmVzcG9uc2UgPSByZXF1
ZXN0LmV4ZWN1dGUoCisgICAgICAgICAgICBiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLCAnYnJh
bmNoIHRva2VuJywgcmVwb190b2tlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdUb2tlbk1pc21hdGNoJywpKSwgcmVzcG9uc2Up
CisKKworY2xhc3MgVGVzdFNtYXJ0U2VydmVyUmVwb3NpdG9yeVJlcXVlc3QodGVzdHMuVGVzdENh
c2VXaXRoVHJhbnNwb3J0KToKKworICAgIGRlZiB0ZXN0X25vX3JlcG9zaXRvcnkoc2VsZik6Cisg
ICAgICAgICIiIlJhaXNlIE5vUmVwb3NpdG9yeVByZXNlbnQgd2hlbiB0aGVyZSBpcyBhIGJ6cmRp
ciBhbmQgbm8gcmVwby4iIiIKKyAgICAgICAgIyB3ZSB0ZXN0IHRoaXMgdXNpbmcgYSBzaGFyZWQg
cmVwb3NpdG9yeSBhYm92ZSB0aGUgbmFtZWQgcGF0aCwKKyAgICAgICAgIyB0aHVzIGNoZWNraW5n
IHRoZSByaWdodCBzZWFyY2ggbG9naWMgaXMgdXNlZCAtIHRoYXQgaXMsIHRoYXQKKyAgICAgICAg
IyBpdHMgdGhlIGV4YWN0IHBhdGggYmVpbmcgbG9va2VkIGF0IGFuZCB0aGUgc2VydmVyIGlzIG5v
dAorICAgICAgICAjIHNlYXJjaGluZy4KKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5z
cG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVw
b3NpdG9yeVJlcXVlc3QoYmFja2luZykKKyAgICAgICAgc2VsZi5tYWtlX3JlcG9zaXRvcnkoJy4n
LCBzaGFyZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5tYWtlX2J6cmRpcignc3ViZGlyJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLk5vUmVwb3NpdG9yeVByZXNlbnQsCisgICAgICAg
ICAgICByZXF1ZXN0LmV4ZWN1dGUsIGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnc3ViZGlyJykpCisK
KworY2xhc3MgVGVzdFNtYXJ0U2VydmVyUmVwb3NpdG9yeUdldFJldmlzaW9uR3JhcGgodGVzdHMu
VGVzdENhc2VXaXRoVHJhbnNwb3J0KToKKworICAgIGRlZiB0ZXN0X25vbmVfYXJndW1lbnQoc2Vs
Zik6CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1
ZXN0ID0gc21hcnQucmVwb3NpdG9yeS5TbWFydFNlcnZlclJlcG9zaXRvcnlHZXRSZXZpc2lvbkdy
YXBoKGJhY2tpbmcpCisgICAgICAgIHRyZWUgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF9tZW1vcnlf
dHJlZSgnLicpCisgICAgICAgIHRyZWUubG9ja193cml0ZSgpCisgICAgICAgIHRyZWUuYWRkKCcn
KQorICAgICAgICByMSA9IHRyZWUuY29tbWl0KCcxc3QgY29tbWl0JykKKyAgICAgICAgcjIgPSB0
cmVlLmNvbW1pdCgnMm5kIGNvbW1pdCcsIHJldl9pZD11J1x4YzgnLmVuY29kZSgndXRmLTgnKSkK
KyAgICAgICAgdHJlZS51bmxvY2soKQorCisgICAgICAgICMgdGhlIGxpbmVzIG9mIHJldmlzaW9u
X2lkLT5yZXZpc2lvbl9wYXJlbnRfbGlzdCBoYXMgbm8gZ3VhcmFudGVlZAorICAgICAgICAjIG9y
ZGVyIGNvbWluZyBvdXQgb2YgYSBkaWN0LCBzbyBzb3J0IGJvdGggb3VyIHRlc3QgYW5kIHJlc3Bv
bnNlCisgICAgICAgIGxpbmVzID0gc29ydGVkKFsnICcuam9pbihbcjIsIHIxXSksIHIxXSkKKyAg
ICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcn
KSwgJycpCisgICAgICAgIHJlc3BvbnNlLmJvZHkgPSAnXG4nLmpvaW4oc29ydGVkKHJlc3BvbnNl
LmJvZHkuc3BsaXQoJ1xuJykpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAg
ICAgICBTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCApLCAnXG4nLmpvaW4obGluZXMpKSwgcmVz
cG9uc2UpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpY19yZXZpc2lvbl9hcmd1bWVudChzZWxmKToK
KyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3Qg
PSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVwb3NpdG9yeUdldFJldmlzaW9uR3JhcGgo
YmFja2luZykKKyAgICAgICAgdHJlZSA9IHNlbGYubWFrZV9icmFuY2hfYW5kX21lbW9yeV90cmVl
KCcuJykKKyAgICAgICAgdHJlZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJlZS5hZGQoJycpCisg
ICAgICAgIHJldl9pZF91dGY4ID0gdSdceGM5Jy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcjEg
PSB0cmVlLmNvbW1pdCgnMXN0IGNvbW1pdCcsIHJldl9pZD1yZXZfaWRfdXRmOCkKKyAgICAgICAg
cjIgPSB0cmVlLmNvbW1pdCgnMm5kIGNvbW1pdCcsIHJldl9pZD11J1x4YzgnLmVuY29kZSgndXRm
LTgnKSkKKyAgICAgICAgdHJlZS51bmxvY2soKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
U21hcnRTZXJ2ZXJSZXNwb25zZSgoJ29rJywgKSwgcmV2X2lkX3V0ZjgpLAorICAgICAgICAgICAg
cmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0aCgnJyksIHJldl9pZF91dGY4KSkK
KyAgICAKKyAgICBkZWYgdGVzdF9ub19zdWNoX3JldmlzaW9uKHNlbGYpOgorICAgICAgICBiYWNr
aW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LnJlcG9z
aXRvcnkuU21hcnRTZXJ2ZXJSZXBvc2l0b3J5R2V0UmV2aXNpb25HcmFwaChiYWNraW5nKQorICAg
ICAgICB0cmVlID0gc2VsZi5tYWtlX2JyYW5jaF9hbmRfbWVtb3J5X3RyZWUoJy4nKQorICAgICAg
ICB0cmVlLmxvY2tfd3JpdGUoKQorICAgICAgICB0cmVlLmFkZCgnJykKKyAgICAgICAgcjEgPSB0
cmVlLmNvbW1pdCgnMXN0IGNvbW1pdCcpCisgICAgICAgIHRyZWUudW5sb2NrKCkKKworICAgICAg
ICAjIE5vdGUgdGhhdCBpdCBzdGlsbCByZXR1cm5zIGJvZHkgKG9mIHplcm8gYnl0ZXMpLgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgo
J25vc3VjaHJldmlzaW9uJywgJ21pc3NpbmdyZXZpc2lvbicsICksICcnKSwKKyAgICAgICAgICAg
IHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLCAnbWlzc2luZ3Jldmlz
aW9uJykpCisKKworY2xhc3MgVGVzdFNtYXJ0U2VydmVyUmVxdWVzdEhhc1JldmlzaW9uKHRlc3Rz
LlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAgICBkZWYgdGVzdF9taXNzaW5nX3JldmlzaW9u
KHNlbGYpOgorICAgICAgICAiIiJGb3IgYSBtaXNzaW5nIHJldmlzaW9uLCAoJ25vJywgKSBpcyBy
ZXR1cm5lZC4iIiIKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAg
ICAgIHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVxdWVzdEhhc1Jldmlz
aW9uKGJhY2tpbmcpCisgICAgICAgIHNlbGYubWFrZV9yZXBvc2l0b3J5KCcuJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZlclJlc3BvbnNlKCgnbm8nLCApKSwKKyAgICAgICAg
ICAgIHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLCAncmV2aWQnKSkK
KworICAgIGRlZiB0ZXN0X3ByZXNlbnRfcmV2aXNpb24oc2VsZik6CisgICAgICAgICIiIkZvciBh
IHByZXNlbnQgcmV2aXNpb24sICgneWVzJywgKSBpcyByZXR1cm5lZC4iIiIKKyAgICAgICAgYmFj
a2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5yZXBv
c2l0b3J5LlNtYXJ0U2VydmVyUmVxdWVzdEhhc1JldmlzaW9uKGJhY2tpbmcpCisgICAgICAgIHRy
ZWUgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF9tZW1vcnlfdHJlZSgnLicpCisgICAgICAgIHRyZWUu
bG9ja193cml0ZSgpCisgICAgICAgIHRyZWUuYWRkKCcnKQorICAgICAgICByZXZfaWRfdXRmOCA9
IHUnXHhjOGFiYycuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHIxID0gdHJlZS5jb21taXQoJ2Eg
Y29tbWl0JywgcmV2X2lkPXJldl9pZF91dGY4KQorICAgICAgICB0cmVlLnVubG9jaygpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmVlLmJyYW5jaC5yZXBvc2l0b3J5Lmhhc19yZXZpc2lvbihy
ZXZfaWRfdXRmOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU21hcnRTZXJ2ZXJSZXNwb25z
ZSgoJ3llcycsICkpLAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxf
YWJzcGF0aCgnJyksIHJldl9pZF91dGY4KSkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJSZXBv
c2l0b3J5R2F0aGVyU3RhdHModGVzdHMuVGVzdENhc2VXaXRoVHJhbnNwb3J0KToKKworICAgIGRl
ZiB0ZXN0X2VtcHR5X3JldmlkKHNlbGYpOgorICAgICAgICAiIiJXaXRoIGFuIGVtcHR5IHJldmlk
LCB3ZSBnZXQgb25seSBzaXplIGFuIG51bWJlciBhbmQgcmV2aXNpb25zIiIiCisgICAgICAgIGJh
Y2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0ID0gc21hcnQucmVw
b3NpdG9yeS5TbWFydFNlcnZlclJlcG9zaXRvcnlHYXRoZXJTdGF0cyhiYWNraW5nKQorICAgICAg
ICByZXBvc2l0b3J5ID0gc2VsZi5tYWtlX3JlcG9zaXRvcnkoJy4nKQorICAgICAgICBzdGF0cyA9
IHJlcG9zaXRvcnkuZ2F0aGVyX3N0YXRzKCkKKyAgICAgICAgc2l6ZSA9IHN0YXRzWydzaXplJ10K
KyAgICAgICAgZXhwZWN0ZWRfYm9keSA9ICdyZXZpc2lvbnM6IDBcbnNpemU6ICVkXG4nICUgc2l6
ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICks
IGV4cGVjdGVkX2JvZHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZXhlY3V0
ZShiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLCAnJywgJ25vJykpCisKKyAgICBkZWYgdGVzdF9y
ZXZpZF93aXRoX2NvbW1pdHRlcnMoc2VsZik6CisgICAgICAgICIiIkZvciBhIHJldmlkIHdlIGdl
dCBtb3JlIGluZm9zLiIiIgorICAgICAgICBiYWNraW5nID0gc2VsZi5nZXRfdHJhbnNwb3J0KCkK
KyAgICAgICAgcmV2X2lkX3V0ZjggPSB1J1x4YzhhYmMnLmVuY29kZSgndXRmLTgnKQorICAgICAg
ICByZXF1ZXN0ID0gc21hcnQucmVwb3NpdG9yeS5TbWFydFNlcnZlclJlcG9zaXRvcnlHYXRoZXJT
dGF0cyhiYWNraW5nKQorICAgICAgICB0cmVlID0gc2VsZi5tYWtlX2JyYW5jaF9hbmRfbWVtb3J5
X3RyZWUoJy4nKQorICAgICAgICB0cmVlLmxvY2tfd3JpdGUoKQorICAgICAgICB0cmVlLmFkZCgn
JykKKyAgICAgICAgIyBMZXQncyBidWlsZCBhIHByZWRpY3RhYmxlIHJlc3VsdAorICAgICAgICB0
cmVlLmNvbW1pdCgnYSBjb21taXQnLCB0aW1lc3RhbXA9MTIzNDU2LjIsIHRpbWV6b25lPTM2MDAp
CisgICAgICAgIHRyZWUuY29tbWl0KCdhIGNvbW1pdCcsIHRpbWVzdGFtcD02NTQzMjEuNCwgdGlt
ZXpvbmU9MCwKKyAgICAgICAgICAgICAgICAgICAgcmV2X2lkPXJldl9pZF91dGY4KQorICAgICAg
ICB0cmVlLnVubG9jaygpCisKKyAgICAgICAgc3RhdHMgPSB0cmVlLmJyYW5jaC5yZXBvc2l0b3J5
LmdhdGhlcl9zdGF0cygpCisgICAgICAgIHNpemUgPSBzdGF0c1snc2l6ZSddCisgICAgICAgIGV4
cGVjdGVkX2JvZHkgPSAoJ2ZpcnN0cmV2OiAxMjM0NTYuMjAwIDM2MDBcbicKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAnbGF0ZXN0cmV2OiA2NTQzMjEuNDAwIDBcbicKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAncmV2aXNpb25zOiAyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Np
emU6ICVkXG4nICUgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTbWFydFNlcnZlclJl
c3BvbnNlKCgnb2snLCApLCBleHBlY3RlZF9ib2R5KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2X2lkX3V0ZjgsICdubycpKQorCisgICAg
ZGVmIHRlc3Rfbm90X2VtcHR5X3JlcG9zaXRvcnlfd2l0aF9jb21taXR0ZXJzKHNlbGYpOgorICAg
ICAgICAiIiJGb3IgYSByZXZpZCBhbmQgcmVxdWVzdGluZyBjb21taXR0ZXJzIHdlIGdldCB0aGUg
d2hvbGUgdGhpbmcuIiIiCisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQor
ICAgICAgICByZXZfaWRfdXRmOCA9IHUnXHhjOGFiYycuZW5jb2RlKCd1dGYtOCcpCisgICAgICAg
IHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVwb3NpdG9yeUdhdGhlclN0
YXRzKGJhY2tpbmcpCisgICAgICAgIHRyZWUgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF9tZW1vcnlf
dHJlZSgnLicpCisgICAgICAgIHRyZWUubG9ja193cml0ZSgpCisgICAgICAgIHRyZWUuYWRkKCcn
KQorICAgICAgICAjIExldCdzIGJ1aWxkIGEgcHJlZGljdGFibGUgcmVzdWx0CisgICAgICAgIHRy
ZWUuY29tbWl0KCdhIGNvbW1pdCcsIHRpbWVzdGFtcD0xMjM0NTYuMiwgdGltZXpvbmU9MzYwMCwK
KyAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVyPSdmb28nKQorICAgICAgICB0cmVlLmNvbW1p
dCgnYSBjb21taXQnLCB0aW1lc3RhbXA9NjU0MzIxLjQsIHRpbWV6b25lPTAsCisgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdHRlcj0nYmFyJywgcmV2X2lkPXJldl9pZF91dGY4KQorICAgICAgICB0
cmVlLnVubG9jaygpCisgICAgICAgIHN0YXRzID0gdHJlZS5icmFuY2gucmVwb3NpdG9yeS5nYXRo
ZXJfc3RhdHMoKQorCisgICAgICAgIHNpemUgPSBzdGF0c1snc2l6ZSddCisgICAgICAgIGV4cGVj
dGVkX2JvZHkgPSAoJ2NvbW1pdHRlcnM6IDJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAn
Zmlyc3RyZXY6IDEyMzQ1Ni4yMDAgMzYwMFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICds
YXRlc3RyZXY6IDY1NDMyMS40MDAgMFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdyZXZp
c2lvbnM6IDJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogJWRcbicgJSBzaXpl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsICks
IGV4cGVjdGVkX2JvZHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZXhlY3V0
ZShiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXZfaWRfdXRmOCwgJ3llcycpKQorCisKK2NsYXNzIFRlc3RTbWFydFNl
cnZlclJlcG9zaXRvcnlJc1NoYXJlZCh0ZXN0cy5UZXN0Q2FzZVdpdGhUcmFuc3BvcnQpOgorCisg
ICAgZGVmIHRlc3RfaXNfc2hhcmVkKHNlbGYpOgorICAgICAgICAiIiJGb3IgYSBzaGFyZWQgcmVw
b3NpdG9yeSwgKCd5ZXMnLCApIGlzIHJldHVybmVkLiIiIgorICAgICAgICBiYWNraW5nID0gc2Vs
Zi5nZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVxdWVzdCA9IHNtYXJ0LnJlcG9zaXRvcnkuU21h
cnRTZXJ2ZXJSZXBvc2l0b3J5SXNTaGFyZWQoYmFja2luZykKKyAgICAgICAgc2VsZi5tYWtlX3Jl
cG9zaXRvcnkoJy4nLCBzaGFyZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTbWFy
dFNlcnZlclJlc3BvbnNlKCgneWVzJywgKSksCisgICAgICAgICAgICByZXF1ZXN0LmV4ZWN1dGUo
YmFja2luZy5sb2NhbF9hYnNwYXRoKCcnKSwgKSkKKworICAgIGRlZiB0ZXN0X2lzX25vdF9zaGFy
ZWQoc2VsZik6CisgICAgICAgICIiIkZvciBhIHNoYXJlZCByZXBvc2l0b3J5LCAoJ25vJywgKSBp
cyByZXR1cm5lZC4iIiIKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgpCisg
ICAgICAgIHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVwb3NpdG9yeUlz
U2hhcmVkKGJhY2tpbmcpCisgICAgICAgIHNlbGYubWFrZV9yZXBvc2l0b3J5KCcuJywgc2hhcmVk
PUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNtYXJ0U2VydmVyUmVzcG9uc2UoKCdu
bycsICkpLAorICAgICAgICAgICAgcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcubG9jYWxfYWJzcGF0
aCgnJyksICkpCisKKworY2xhc3MgVGVzdFNtYXJ0U2VydmVyUmVwb3NpdG9yeUxvY2tXcml0ZSh0
ZXN0cy5UZXN0Q2FzZVdpdGhUcmFuc3BvcnQpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAg
ICAgICB0ZXN0cy5UZXN0Q2FzZVdpdGhUcmFuc3BvcnQuc2V0VXAoc2VsZikKKyAgICAgICAgc2Vs
Zi5yZWR1Y2VMb2NrZGlyVGltZW91dCgpCisKKyAgICBkZWYgdGVzdF9sb2NrX3dyaXRlX29uX3Vu
bG9ja2VkX3JlcG8oc2VsZik6CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQo
KQorICAgICAgICByZXF1ZXN0ID0gc21hcnQucmVwb3NpdG9yeS5TbWFydFNlcnZlclJlcG9zaXRv
cnlMb2NrV3JpdGUoYmFja2luZykKKyAgICAgICAgcmVwb3NpdG9yeSA9IHNlbGYubWFrZV9yZXBv
c2l0b3J5KCcuJykKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5s
b2NhbF9hYnNwYXRoKCcnKSkKKyAgICAgICAgbm9uY2UgPSByZXBvc2l0b3J5LmNvbnRyb2xfZmls
ZXMuX2xvY2sucGVlaygpLmdldCgnbm9uY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNt
YXJ0U2VydmVyUmVzcG9uc2UoKCdvaycsIG5vbmNlKSksIHJlc3BvbnNlKQorICAgICAgICAjIFRo
ZSByZXBvc2l0b3J5IGlzIG5vdyBsb2NrZWQuICBWZXJpZnkgdGhhdCB3aXRoIGEgbmV3IHJlcG9z
aXRvcnkKKyAgICAgICAgIyBvYmplY3QuCisgICAgICAgIG5ld19yZXBvID0gcmVwb3NpdG9yeS5i
enJkaXIub3Blbl9yZXBvc2l0b3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3Jz
LkxvY2tDb250ZW50aW9uLCBuZXdfcmVwby5sb2NrX3dyaXRlKQorCisgICAgZGVmIHRlc3RfbG9j
a193cml0ZV9vbl9sb2NrZWRfcmVwbyhzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0
X3RyYW5zcG9ydCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2Vy
dmVyUmVwb3NpdG9yeUxvY2tXcml0ZShiYWNraW5nKQorICAgICAgICByZXBvc2l0b3J5ID0gc2Vs
Zi5tYWtlX3JlcG9zaXRvcnkoJy4nKQorICAgICAgICByZXBvc2l0b3J5LmxvY2tfd3JpdGUoKQor
ICAgICAgICByZXBvc2l0b3J5LmxlYXZlX2xvY2tfaW5fcGxhY2UoKQorICAgICAgICByZXBvc2l0
b3J5LnVubG9jaygpCisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdC5leGVjdXRlKGJhY2tpbmcu
bG9jYWxfYWJzcGF0aCgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAg
ICBTbWFydFNlcnZlclJlc3BvbnNlKCgnTG9ja0NvbnRlbnRpb24nLCkpLCByZXNwb25zZSkKKwor
ICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfb25fcmVhZG9ubHlfdHJhbnNwb3J0KHNlbGYpOgorICAg
ICAgICBiYWNraW5nID0gc2VsZi5nZXRfcmVhZG9ubHlfdHJhbnNwb3J0KCkKKyAgICAgICAgcmVx
dWVzdCA9IHNtYXJ0LnJlcG9zaXRvcnkuU21hcnRTZXJ2ZXJSZXBvc2l0b3J5TG9ja1dyaXRlKGJh
Y2tpbmcpCisgICAgICAgIHJlcG9zaXRvcnkgPSBzZWxmLm1ha2VfcmVwb3NpdG9yeSgnLicpCisg
ICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdC5leGVjdXRlKCcnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgoJ1VubG9ja2FibGVUcmFu
c3BvcnQnLCkpLCByZXNwb25zZSkKKworCitjbGFzcyBUZXN0U21hcnRTZXJ2ZXJSZXBvc2l0b3J5
VW5sb2NrKHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAgICBkZWYgc2V0VXAoc2Vs
Zik6CisgICAgICAgIHRlc3RzLlRlc3RDYXNlV2l0aFRyYW5zcG9ydC5zZXRVcChzZWxmKQorICAg
ICAgICBzZWxmLnJlZHVjZUxvY2tkaXJUaW1lb3V0KCkKKworICAgIGRlZiB0ZXN0X3VubG9ja19v
bl9sb2NrZWRfcmVwbyhzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9y
dCgpCisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVwb3Np
dG9yeVVubG9jayhiYWNraW5nKQorICAgICAgICByZXBvc2l0b3J5ID0gc2VsZi5tYWtlX3JlcG9z
aXRvcnkoJy4nKQorICAgICAgICB0b2tlbiA9IHJlcG9zaXRvcnkubG9ja193cml0ZSgpCisgICAg
ICAgIHJlcG9zaXRvcnkubGVhdmVfbG9ja19pbl9wbGFjZSgpCisgICAgICAgIHJlcG9zaXRvcnku
dW5sb2NrKCkKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0LmV4ZWN1dGUoYmFja2luZy5sb2Nh
bF9hYnNwYXRoKCcnKSwgdG9rZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAg
ICAgICBTbWFydFNlcnZlclJlc3BvbnNlKCgnb2snLCkpLCByZXNwb25zZSkKKyAgICAgICAgIyBU
aGUgcmVwb3NpdG9yeSBpcyBub3cgdW5sb2NrZWQuICBWZXJpZnkgdGhhdCB3aXRoIGEgbmV3IHJl
cG9zaXRvcnkKKyAgICAgICAgIyBvYmplY3QuCisgICAgICAgIG5ld19yZXBvID0gcmVwb3NpdG9y
eS5ienJkaXIub3Blbl9yZXBvc2l0b3J5KCkKKyAgICAgICAgbmV3X3JlcG8ubG9ja193cml0ZSgp
CisgICAgICAgIG5ld19yZXBvLnVubG9jaygpCisKKyAgICBkZWYgdGVzdF91bmxvY2tfb25fdW5s
b2NrZWRfcmVwbyhzZWxmKToKKyAgICAgICAgYmFja2luZyA9IHNlbGYuZ2V0X3RyYW5zcG9ydCgp
CisgICAgICAgIHJlcXVlc3QgPSBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVwb3NpdG9y
eVVubG9jayhiYWNraW5nKQorICAgICAgICByZXBvc2l0b3J5ID0gc2VsZi5tYWtlX3JlcG9zaXRv
cnkoJy4nKQorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxvY2Fs
X2Fic3BhdGgoJycpLCAnc29tZSB0b2tlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICBTbWFydFNlcnZlclJlc3BvbnNlKCgnVG9rZW5NaXNtYXRjaCcsKSksIHJlc3Bv
bnNlKQorCisKK2NsYXNzIFRlc3RTbWFydFNlcnZlclJlcG9zaXRvcnlUYXJiYWxsKHRlc3RzLlRl
c3RDYXNlV2l0aFRyYW5zcG9ydCk6CisKKyAgICBkZWYgdGVzdF9yZXBvc2l0b3J5X3RhcmJhbGwo
c2VsZik6CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICBy
ZXF1ZXN0ID0gc21hcnQucmVwb3NpdG9yeS5TbWFydFNlcnZlclJlcG9zaXRvcnlUYXJiYWxsKGJh
Y2tpbmcpCisgICAgICAgIHJlcG9zaXRvcnkgPSBzZWxmLm1ha2VfcmVwb3NpdG9yeSgnLicpCisg
ICAgICAgICMgbWFrZSBzb21lIGV4dHJhbmVvdXMganVuayBpbiB0aGUgcmVwb3NpdG9yeSBkaXJl
Y3Rvcnkgd2hpY2ggc2hvdWxkCisgICAgICAgICMgbm90IGJlIGNvcGllZAorICAgICAgICBzZWxm
LmJ1aWxkX3RyZWUoWycuYnpyL3JlcG9zaXRvcnkvZXh0cmEtanVuayddKQorICAgICAgICByZXNw
b25zZSA9IHJlcXVlc3QuZXhlY3V0ZShiYWNraW5nLmxvY2FsX2Fic3BhdGgoJycpLCAnYnoyJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ29rJywpLCByZXNwb25zZS5hcmdzKQorICAgICAg
ICAjIGJvZHkgc2hvdWxkIGJlIGEgdGJ6MgorICAgICAgICBib2R5X2ZpbGUgPSBTdHJpbmdJTyhy
ZXNwb25zZS5ib2R5KQorICAgICAgICBib2R5X3RhciA9IHRhcmZpbGUub3BlbignYm9keV90YXIu
dGJ6MicsIGZpbGVvYmo9Ym9keV9maWxlLAorICAgICAgICAgICAgbW9kZT0ncnxiejInKQorICAg
ICAgICAjIGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgc29tZSBrZXkgcmVwb3NpdG9yeSBjb21w
b25lbnRzIGluc2lkZSBpdC4KKyAgICAgICAgIyB0aGUgdGFyZmlsZSByZXR1cm5zIGRpcmVjdG9y
aWVzIHdpdGggdHJhaWxpbmcgc2xhc2hlcy4uLgorICAgICAgICBuYW1lcyA9IHNldChbbi5yc3Ry
aXAoJy8nKSBmb3IgbiBpbiBib2R5X3Rhci5nZXRuYW1lcygpXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKCcuYnpyL3JlcG9zaXRvcnkvbG9jaycgaW4gbmFtZXMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSgnLmJ6ci9yZXBvc2l0b3J5L2Zvcm1hdCcgaW4gbmFtZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZSgnLmJ6ci9yZXBvc2l0b3J5L2V4dHJhLWp1bmsnIG5vdCBpbiBuYW1lcywKKyAg
ICAgICAgICAgICJleHRyYW5lb3VzIGZpbGUgcHJlc2VudCBpbiB0YXIgZmlsZSIpCisKKworY2xh
c3MgVGVzdFNtYXJ0U2VydmVySXNSZWFkb25seSh0ZXN0cy5UZXN0Q2FzZVdpdGhUcmFuc3BvcnQp
OgorCisgICAgZGVmIHRlc3RfaXNfcmVhZG9ubHlfbm8oc2VsZik6CisgICAgICAgIGJhY2tpbmcg
PSBzZWxmLmdldF90cmFuc3BvcnQoKQorICAgICAgICByZXF1ZXN0ID0gc21hcnQucmVxdWVzdC5T
bWFydFNlcnZlcklzUmVhZG9ubHkoYmFja2luZykKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0
LmV4ZWN1dGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgU21hcnRT
ZXJ2ZXJSZXNwb25zZSgoJ25vJywpKSwgcmVzcG9uc2UpCisKKyAgICBkZWYgdGVzdF9pc19yZWFk
b25seV95ZXMoc2VsZik6CisgICAgICAgIGJhY2tpbmcgPSBzZWxmLmdldF9yZWFkb25seV90cmFu
c3BvcnQoKQorICAgICAgICByZXF1ZXN0ID0gc21hcnQucmVxdWVzdC5TbWFydFNlcnZlcklzUmVh
ZG9ubHkoYmFja2luZykKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0LmV4ZWN1dGUoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgU21hcnRTZXJ2ZXJSZXNwb25zZSgo
J3llcycsKSksIHJlc3BvbnNlKQorCisKK2NsYXNzIFRlc3RIYW5kbGVycyh0ZXN0cy5UZXN0Q2Fz
ZSk6CisgICAgIiIiVGVzdHMgZm9yIHRoZSByZXF1ZXN0LnJlcXVlc3RfaGFuZGxlcnMgb2JqZWN0
LiIiIgorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJlZF9tZXRob2RzKHNlbGYpOgorICAgICAgICAi
IiJUZXN0IHRoYXQga25vd24gbWV0aG9kcyBhcmUgcmVnaXN0ZXJlZCB0byB0aGUgY29ycmVjdCBv
YmplY3QuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzbWFydC5y
ZXF1ZXN0LnJlcXVlc3RfaGFuZGxlcnMuZ2V0KCdCcmFuY2guZ2V0X2NvbmZpZ19maWxlJyksCisg
ICAgICAgICAgICBzbWFydC5icmFuY2guU21hcnRTZXJ2ZXJCcmFuY2hHZXRDb25maWdGaWxlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc21hcnQucmVxdWVzdC5yZXF1
ZXN0X2hhbmRsZXJzLmdldCgnQnJhbmNoLmxvY2tfd3JpdGUnKSwKKyAgICAgICAgICAgIHNtYXJ0
LmJyYW5jaC5TbWFydFNlcnZlckJyYW5jaFJlcXVlc3RMb2NrV3JpdGUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzbWFydC5yZXF1ZXN0LnJlcXVlc3RfaGFuZGxlcnMu
Z2V0KCdCcmFuY2gubGFzdF9yZXZpc2lvbl9pbmZvJyksCisgICAgICAgICAgICBzbWFydC5icmFu
Y2guU21hcnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0TGFzdFJldmlzaW9uSW5mbykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNtYXJ0LnJlcXVlc3QucmVxdWVzdF9oYW5kbGVy
cy5nZXQoJ0JyYW5jaC5yZXZpc2lvbl9oaXN0b3J5JyksCisgICAgICAgICAgICBzbWFydC5icmFu
Y2guU21hcnRTZXJ2ZXJSZXF1ZXN0UmV2aXNpb25IaXN0b3J5KQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgc21hcnQucmVxdWVzdC5yZXF1ZXN0X2hhbmRsZXJzLmdldCgn
QnJhbmNoLnNldF9sYXN0X3JldmlzaW9uJyksCisgICAgICAgICAgICBzbWFydC5icmFuY2guU21h
cnRTZXJ2ZXJCcmFuY2hSZXF1ZXN0U2V0TGFzdFJldmlzaW9uKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgc21hcnQucmVxdWVzdC5yZXF1ZXN0X2hhbmRsZXJzLmdldCgn
QnJhbmNoLnVubG9jaycpLAorICAgICAgICAgICAgc21hcnQuYnJhbmNoLlNtYXJ0U2VydmVyQnJh
bmNoUmVxdWVzdFVubG9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IHNtYXJ0LnJlcXVlc3QucmVxdWVzdF9oYW5kbGVycy5nZXQoJ0J6ckRpci5maW5kX3JlcG9zaXRv
cnknKSwKKyAgICAgICAgICAgIHNtYXJ0LmJ6cmRpci5TbWFydFNlcnZlclJlcXVlc3RGaW5kUmVw
b3NpdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNtYXJ0LnJl
cXVlc3QucmVxdWVzdF9oYW5kbGVycy5nZXQoJ0J6ckRpckZvcm1hdC5pbml0aWFsaXplJyksCisg
ICAgICAgICAgICBzbWFydC5ienJkaXIuU21hcnRTZXJ2ZXJSZXF1ZXN0SW5pdGlhbGl6ZUJ6ckRp
cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNtYXJ0LnJlcXVlc3Qu
cmVxdWVzdF9oYW5kbGVycy5nZXQoJ0J6ckRpci5vcGVuX2JyYW5jaCcpLAorICAgICAgICAgICAg
c21hcnQuYnpyZGlyLlNtYXJ0U2VydmVyUmVxdWVzdE9wZW5CcmFuY2gpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzbWFydC5yZXF1ZXN0LnJlcXVlc3RfaGFuZGxlcnMu
Z2V0KCdSZXBvc2l0b3J5LmdhdGhlcl9zdGF0cycpLAorICAgICAgICAgICAgc21hcnQucmVwb3Np
dG9yeS5TbWFydFNlcnZlclJlcG9zaXRvcnlHYXRoZXJTdGF0cykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgIHNtYXJ0LnJlcXVlc3QucmVxdWVzdF9oYW5kbGVycy5nZXQo
J1JlcG9zaXRvcnkuZ2V0X3JldmlzaW9uX2dyYXBoJyksCisgICAgICAgICAgICBzbWFydC5yZXBv
c2l0b3J5LlNtYXJ0U2VydmVyUmVwb3NpdG9yeUdldFJldmlzaW9uR3JhcGgpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzbWFydC5yZXF1ZXN0LnJlcXVlc3RfaGFuZGxl
cnMuZ2V0KCdSZXBvc2l0b3J5Lmhhc19yZXZpc2lvbicpLAorICAgICAgICAgICAgc21hcnQucmVw
b3NpdG9yeS5TbWFydFNlcnZlclJlcXVlc3RIYXNSZXZpc2lvbikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgIHNtYXJ0LnJlcXVlc3QucmVxdWVzdF9oYW5kbGVycy5nZXQo
J1JlcG9zaXRvcnkuaXNfc2hhcmVkJyksCisgICAgICAgICAgICBzbWFydC5yZXBvc2l0b3J5LlNt
YXJ0U2VydmVyUmVwb3NpdG9yeUlzU2hhcmVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAor
ICAgICAgICAgICAgc21hcnQucmVxdWVzdC5yZXF1ZXN0X2hhbmRsZXJzLmdldCgnUmVwb3NpdG9y
eS5sb2NrX3dyaXRlJyksCisgICAgICAgICAgICBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVy
UmVwb3NpdG9yeUxvY2tXcml0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAg
ICAgIHNtYXJ0LnJlcXVlc3QucmVxdWVzdF9oYW5kbGVycy5nZXQoJ1JlcG9zaXRvcnkudW5sb2Nr
JyksCisgICAgICAgICAgICBzbWFydC5yZXBvc2l0b3J5LlNtYXJ0U2VydmVyUmVwb3NpdG9yeVVu
bG9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNtYXJ0LnJlcXVl
c3QucmVxdWVzdF9oYW5kbGVycy5nZXQoJ1JlcG9zaXRvcnkudGFyYmFsbCcpLAorICAgICAgICAg
ICAgc21hcnQucmVwb3NpdG9yeS5TbWFydFNlcnZlclJlcG9zaXRvcnlUYXJiYWxsKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc21hcnQucmVxdWVzdC5yZXF1ZXN0X2hh
bmRsZXJzLmdldCgnVHJhbnNwb3J0LmlzX3JlYWRvbmx5JyksCisgICAgICAgICAgICBzbWFydC5y
ZXF1ZXN0LlNtYXJ0U2VydmVySXNSZWFkb25seSkKCg==

=== added file bzrlib/tests/workingtree_implementations/test_get_file_mtime.py 
... // file-id:test_get_file_mtime.-20070411212918-dhentj8gk0hsu54z-1 // last-c
... hanged:john@arbash-meinel.com-20070412135716-tqs9n87s9gjefkdx // encoding:b
... ase64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3dvcmtpbmd0cmVlX2ltcGxlbWVudGF0aW9u
cy90ZXN0X2dldF9maWxlX210aW1lLnB5CkBAIC0wLDAgKzEsMTAwIEBACisjIENvcHlyaWdodCAo
QykgMjAwNyBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisj
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKwor
IiIiVGVzdCB0aGF0IGFsbCBXb3JraW5nVHJlZSdzIGltcGxlbWVudCBnZXRfZmlsZV9tdGltZS4i
IiIKKworaW1wb3J0IG9zCisKK2Zyb20gYnpybGliLnRlc3RzLndvcmtpbmd0cmVlX2ltcGxlbWVu
dGF0aW9ucyBpbXBvcnQgVGVzdENhc2VXaXRoV29ya2luZ1RyZWUKKworCitjbGFzcyBUZXN0R2V0
RmlsZU1UaW1lKFRlc3RDYXNlV2l0aFdvcmtpbmdUcmVlKToKKyAgICAiIiJUZXN0IFdvcmtpbmdU
cmVlLmdldF9maWxlX210aW1lLgorCisgICAgVGhlc2UgYXJlIG1vcmUgaW52b2x2ZWQgYmVjYXVz
ZSB3ZSBuZWVkIHRvIGhhbmRsZSBmaWxlcyB3aGljaCBoYXZlIGJlZW4KKyAgICByZW5hbWVkLCBl
dGMuCisgICAgIiIiCisKKyAgICBkZWYgbWFrZV9iYXNpY190cmVlKHNlbGYpOgorICAgICAgICB0
cmVlID0gc2VsZi5tYWtlX2JyYW5jaF9hbmRfdHJlZSgndHJlZScpCisgICAgICAgIHNlbGYuYnVp
bGRfdHJlZShbJ3RyZWUvb25lJ10pCisgICAgICAgIHRyZWUuYWRkKFsnb25lJ10sIFsnb25lLWlk
J10pCisgICAgICAgIHJldHVybiB0cmVlCisKKyAgICBkZWYgdGVzdF9nZXRfZmlsZV9tdGltZShz
ZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYubWFrZV9iYXNpY190cmVlKCkKKworICAgICAgICBz
dCA9IG9zLmxzdGF0KCd0cmVlL29uZScpCisgICAgICAgIHRyZWUubG9ja19yZWFkKCkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgbXRpbWVfZmlsZV9pZCA9IHRyZWUuZ2V0X2ZpbGVfbXRpbWUo
ZmlsZV9pZD0nb25lLWlkJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtdGlt
ZV9maWxlX2lkLCAoZmxvYXQsIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVx
dWFsKHN0LnN0X210aW1lLCBtdGltZV9maWxlX2lkKQorICAgICAgICAgICAgbXRpbWVfcGF0aCA9
IHRyZWUuZ2V0X2ZpbGVfbXRpbWUoZmlsZV9pZD0nb25lLWlkJywgcGF0aD0nb25lJykKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobXRpbWVfZmlsZV9pZCwgbXRpbWVfcGF0aCkK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyZWUudW5sb2NrKCkKKworICAgIGRlZiB0
ZXN0X2FmdGVyX2NvbW1pdChzZWxmKToKKyAgICAgICAgIiIiQ29tbWl0dGluZyBzaG91bGRuJ3Qg
Y2hhbmdlIHRoZSBtdGltZS4iIiIKKyAgICAgICAgdHJlZSA9IHNlbGYubWFrZV9iYXNpY190cmVl
KCkKKworICAgICAgICBzdCA9IG9zLmxzdGF0KCd0cmVlL29uZScpCisgICAgICAgIHRyZWUuY29t
bWl0KCdvbmUnLCByZXZfaWQ9J3Jldi0xJykKKworICAgICAgICB0cmVlLmxvY2tfcmVhZCgpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIG10aW1lID0gdHJlZS5nZXRfZmlsZV9tdGltZShmaWxl
X2lkPSdvbmUtaWQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9t
dGltZSwgbXRpbWUpCisKKyAgICAgICAgICAgIG10aW1lID0gdHJlZS5nZXRfZmlsZV9tdGltZShm
aWxlX2lkPSdvbmUtaWQnLCBwYXRoPSdvbmUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1v
c3RFcXVhbChzdC5zdF9tdGltZSwgbXRpbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICB0cmVlLnVubG9jaygpCisKKyAgICBkZWYgdGVzdF9nZXRfcmVuYW1lZF90aW1lKHNlbGYpOgor
ICAgICAgICAiIiJXZSBzaG91bGQgaGFuZGxlIHJlbmFtZWQgZmlsZXMuIiIiCisgICAgICAgIHRy
ZWUgPSBzZWxmLm1ha2VfYmFzaWNfdHJlZSgpCisKKyAgICAgICAgdHJlZS5yZW5hbWVfb25lKCdv
bmUnLCAndHdvJykKKyAgICAgICAgc3QgPSBvcy5sc3RhdCgndHJlZS90d28nKQorCisgICAgICAg
IHRyZWUubG9ja19yZWFkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXRpbWUgPSB0cmVl
LmdldF9maWxlX210aW1lKGZpbGVfaWQ9J29uZS1pZCcpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEFsbW9zdEVxdWFsKHN0LnN0X210aW1lLCBtdGltZSkKKyAgICAgICAgICAgIG10aW1lID0gdHJl
ZS5nZXRfZmlsZV9tdGltZShmaWxlX2lkPSdvbmUtaWQnLCBwYXRoPSd0d28nKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9tdGltZSwgbXRpbWUpCisgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICB0cmVlLnVubG9jaygpCisKKyAgICBkZWYgdGVzdF9nZXRfcmVu
YW1lZF9pbl9zdWJkaXJfdGltZShzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYubWFrZV9icmFu
Y2hfYW5kX3RyZWUoJ3RyZWUnKQorICAgICAgICBzZWxmLmJ1aWxkX3RyZWUoWyd0cmVlL2QvJywg
J3RyZWUvZC9hJ10pCisgICAgICAgIHRyZWUuYWRkKFsnZCcsICdkL2EnXSwgWydkLWlkJywgJ2Et
aWQnXSkKKyAgICAgICAgdHJlZS5jb21taXQoJzEnLCByZXZfaWQ9J3Jldi0xJykKKworICAgICAg
ICB0cmVlLnJlbmFtZV9vbmUoJ2QnLCAnZScpCisKKyAgICAgICAgc3QgPSBvcy5sc3RhdCgndHJl
ZS9lL2EnKQorICAgICAgICB0cmVlLmxvY2tfcmVhZCgpCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIG10aW1lID0gdHJlZS5nZXRfZmlsZV9tdGltZShmaWxlX2lkPSdhLWlkJykKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc3Quc3RfbXRpbWUsIG10aW1lKQorICAgICAgICAg
ICAgbXRpbWUgPSB0cmVlLmdldF9maWxlX210aW1lKGZpbGVfaWQ9J2EtaWQnLCBwYXRoPSdlL2En
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9tdGltZSwgbXRpbWUp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cmVlLnVubG9jaygpCgo=

=== added file bzrlib/tests/workingtree_implementations/test_remove.py // file-
... id:test_remove.py-20070413183901-rvnp85rtc0q0sclp-1 // last-changed:amanic@
... gmail.com-20070418201215-upzz7pof6a4433n7 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3dvcmtpbmd0cmVlX2ltcGxlbWVudGF0aW9u
cy90ZXN0X3JlbW92ZS5weQpAQCAtMCwwICsxLDIwNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyIi
IlRlc3RzIGZvciBpbnRlcmZhY2UgY29uZm9ybWFuY2Ugb2YgJ1dvcmtpbmdUcmVlLnJlbW92ZSci
IiIKKworaW1wb3J0IHJlCitmcm9tIGJ6cmxpYi50ZXN0cy53b3JraW5ndHJlZV9pbXBsZW1lbnRh
dGlvbnMgaW1wb3J0IFRlc3RDYXNlV2l0aFdvcmtpbmdUcmVlCitmcm9tIGJ6cmxpYiBpbXBvcnQg
ZXJyb3JzLCBvc3V0aWxzCisKK2NsYXNzIFRlc3RSZW1vdmUoVGVzdENhc2VXaXRoV29ya2luZ1Ry
ZWUpOgorICAgICIiIlRlc3RzIFdvcmtpbmdUcmVlLnJlbW92ZSIiIgorCisgICAgZmlsZXM9Wydh
JywgJ2IvJywgJ2IvYycsICdkLyddCisgICAgYSA9IFsnYSddCisgICAgYiA9IFsnYiddCisgICAg
Yl9jID0gWydiJywgJ2IvYyddCisKKyAgICBkZWYgZ2V0VHJlZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5tYWtlQW5kQ2hkaXJUb1Rlc3REaXIoKQorICAgICAgICB0cmVlID0gc2VsZi5tYWtlX2JyYW5j
aF9hbmRfdHJlZSgnLicpCisgICAgICAgIHNlbGYuYnVpbGRfdHJlZShUZXN0UmVtb3ZlLmZpbGVz
KQorICAgICAgICByZXR1cm4gdHJlZQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2tlZXAoc2VsZik6
CisgICAgICAgICIiIkNoZWNrIHRoYXQgZmlsZXMgYXJlIHVudmVyc2lvbmVkIGJ1dCBub3QgZGVs
ZXRlZC4iIiIKKyAgICAgICAgdHJlZSA9IHNlbGYuZ2V0VHJlZSgpCisgICAgICAgIHRyZWUuYWRk
KFRlc3RSZW1vdmUuZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5Xb3JraW5nVHJlZShUZXN0
UmVtb3ZlLmZpbGVzKQorCisgICAgICAgIHRyZWUucmVtb3ZlKFRlc3RSZW1vdmUuZmlsZXMpCisg
ICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5Xb3JraW5nVHJlZShUZXN0UmVtb3ZlLmZpbGVzKQorICAg
ICAgICBzZWxmLmZhaWxVbmxlc3NFeGlzdHMoVGVzdFJlbW92ZS5maWxlcykKKworICAgIGRlZiB0
ZXN0X3JlbW92ZV91bmNoYW5nZWRfZmlsZXMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQg
dW5jaGFuZ2VkIGZpbGVzIGFyZSByZW1vdmVkIGFuZCBkZWxldGVkLiIiIgorICAgICAgICB0cmVl
ID0gc2VsZi5nZXRUcmVlKCkKKyAgICAgICAgdHJlZS5hZGQoVGVzdFJlbW92ZS5maWxlcykKKyAg
ICAgICAgdHJlZS5jb21taXQoImZpbGVzIG11c3Qgbm90IGhhdmUgY2hhbmdlcyIpCisgICAgICAg
IHNlbGYuYXNzZXJ0SW5Xb3JraW5nVHJlZShUZXN0UmVtb3ZlLmZpbGVzKQorCisgICAgICAgIHRy
ZWUucmVtb3ZlKFRlc3RSZW1vdmUuZmlsZXMsIGtlZXBfZmlsZXM9RmFsc2UpCisKKyAgICAgICAg
c2VsZi5hc3NlcnROb3RJbldvcmtpbmdUcmVlKFRlc3RSZW1vdmUuZmlsZXMpCisgICAgICAgIHNl
bGYuZmFpbElmRXhpc3RzKFRlc3RSZW1vdmUuZmlsZXMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVf
YWRkZWRfZmlsZXMoc2VsZik6CisgICAgICAgICIiIlJlbW92YWwgb2YgbmV3bHkgYWRkZWQgZmls
ZXMgbXVzdCBmYWlsLiIiIgorICAgICAgICB0cmVlID0gc2VsZi5nZXRUcmVlKCkKKyAgICAgICAg
dHJlZS5hZGQoVGVzdFJlbW92ZS5maWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbldvcmtpbmdU
cmVlKFRlc3RSZW1vdmUuZmlsZXMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyZWUucmVt
b3ZlKFRlc3RSZW1vdmUuZmlsZXMsIGtlZXBfZmlsZXM9RmFsc2UpCisgICAgICAgICAgICBzZWxm
LmZhaWwoJ1Nob3VsZCB0aHJvdyBCenJSZW1vdmVDaGFuZ2VkRmlsZXNFcnJvcicpCisgICAgICAg
IGV4Y2VwdCBlcnJvcnMuQnpyUmVtb3ZlQ2hhbmdlZEZpbGVzRXJyb3IsIGU6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJ0NhblwndCByZW1vdmUgY2hhbmdlZCBvciB1bmtu
b3duIGZpbGVzOicKKyAgICAgICAgICAgICAgICAnLiphZGRlZDouKmEuKmIuKmIvYy4qZC4qJywK
KyAgICAgICAgICAgICAgICBzdHIoZSksIHJlLkRPVEFMTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
SW5Xb3JraW5nVHJlZShUZXN0UmVtb3ZlLmZpbGVzKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3NF
eGlzdHMoVGVzdFJlbW92ZS5maWxlcykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9jaGFuZ2VkX2Zp
bGUoc2VsZik6CisgICAgICAgICIiIlJlbW92YWwgb2YgYSBjaGFuZ2VkIGZpbGVzIG11c3QgZmFp
bC4iIiIKKyAgICAgICAgdHJlZSA9IHNlbGYuZ2V0VHJlZSgpCisgICAgICAgIHRyZWUuYWRkKFRl
c3RSZW1vdmUuYSkKKyAgICAgICAgdHJlZS5jb21taXQoIm1ha2Ugc3VyZSBhIGlzIHZlcnNpb25l
ZCIpCisgICAgICAgIGYgPSBmaWxlKCdhJywgJ3diJykKKyAgICAgICAgZi53cml0ZSgic29tZSBv
dGhlciBuZXcgY29udGVudCEiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRJbldvcmtpbmdUcmVlKFRlc3RSZW1vdmUuYSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
dHJlZS5yZW1vdmUoVGVzdFJlbW92ZS5hLCBrZWVwX2ZpbGVzPUZhbHNlKQorICAgICAgICAgICAg
c2VsZi5mYWlsKCdTaG91bGQgdGhyb3cgQnpyUmVtb3ZlQ2hhbmdlZEZpbGVzRXJyb3InKQorICAg
ICAgICBleGNlcHQgZXJyb3JzLkJ6clJlbW92ZUNoYW5nZWRGaWxlc0Vycm9yLCBlOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCdDYW5cJ3QgcmVtb3ZlIGNoYW5nZWQgb3Ig
dW5rbm93biBmaWxlczonCisgICAgICAgICAgICAgICAgJy4qbW9kaWZpZWQ6LiphLionLAorICAg
ICAgICAgICAgICAgIHN0cihlKSwgcmUuRE9UQUxMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbldv
cmtpbmdUcmVlKFRlc3RSZW1vdmUuYSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXhpc3RzKFRl
c3RSZW1vdmUuYSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9kZWxldGVkX2ZpbGVzKHNlbGYpOgor
ICAgICAgICAiIiJDaGVjayB0aGF0IGZpbGVzIGFyZSByZW1vdmVkIGlmIHRoZXkgZG9uJ3QgZXhp
c3QgYW55IG1vcmUuIiIiCisgICAgICAgIHRyZWUgPSBzZWxmLmdldFRyZWUoKQorICAgICAgICB0
cmVlLmFkZChUZXN0UmVtb3ZlLmZpbGVzKQorICAgICAgICB0cmVlLmNvbW1pdCgibWFrZSBzdXJl
IGZpbGVzIGFyZSB2ZXJzaW9uZWQiKQorICAgICAgICBmb3IgZiBpbiBbJ2IvYycsICdiJywgJ2En
LCAnZCddOgorICAgICAgICAgICAgb3N1dGlscy5kZWxldGVfYW55KGYpCisgICAgICAgIHNlbGYu
YXNzZXJ0SW5Xb3JraW5nVHJlZShUZXN0UmVtb3ZlLmZpbGVzKQorICAgICAgICBzZWxmLmZhaWxJ
ZkV4aXN0cyhUZXN0UmVtb3ZlLmZpbGVzKQorCisgICAgICAgIHRyZWUucmVtb3ZlKFRlc3RSZW1v
dmUuZmlsZXMsIGtlZXBfZmlsZXM9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbldv
cmtpbmdUcmVlKFRlc3RSZW1vdmUuZmlsZXMpCisgICAgICAgIHNlbGYuZmFpbElmRXhpc3RzKFRl
c3RSZW1vdmUuZmlsZXMpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9yZW1vdmVfY2hhbmdlZF9maWxl
cyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBjaGFuZ2VkIGZpbGVzIGFyZSByZW1vdmVk
IGFuZCBkZWxldGVkIHdoZW4gZm9yY2VkLiIiIgorICAgICAgICB0cmVlID0gc2VsZi5nZXRUcmVl
KCkKKyAgICAgICAgdHJlZS5hZGQoVGVzdFJlbW92ZS5maWxlcykKKyAgICAgICAgc2VsZi5hc3Nl
cnRJbldvcmtpbmdUcmVlKFRlc3RSZW1vdmUuZmlsZXMpCisKKyAgICAgICAgdHJlZS5yZW1vdmUo
VGVzdFJlbW92ZS5maWxlcywga2VlcF9maWxlcz1GYWxzZSwgZm9yY2U9VHJ1ZSkKKworICAgICAg
ICBzZWxmLmFzc2VydE5vdEluV29ya2luZ1RyZWUoVGVzdFJlbW92ZS5maWxlcykKKyAgICAgICAg
c2VsZi5mYWlsSWZFeGlzdHMoVGVzdFJlbW92ZS5maWxlcykKKworICAgIGRlZiB0ZXN0X3JlbW92
ZV91bmtub3duX2ZpbGVzKHNlbGYpOgorICAgICAgICAiIiJUcnkgdG8gZGVsZXRlIHVua25vd24g
ZmlsZXMuIiIiCisgICAgICAgIHRyZWUgPSBzZWxmLmdldFRyZWUoKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICB0cmVlLnJlbW92ZShUZXN0UmVtb3ZlLmZpbGVzLCBrZWVwX2ZpbGVzPUZhbHNl
KQorICAgICAgICAgICAgc2VsZi5mYWlsKCdTaG91bGQgdGhyb3cgQnpyUmVtb3ZlQ2hhbmdlZEZp
bGVzRXJyb3InKQorICAgICAgICBleGNlcHQgZXJyb3JzLkJ6clJlbW92ZUNoYW5nZWRGaWxlc0Vy
cm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCdDYW5cJ3QgcmVt
b3ZlIGNoYW5nZWQgb3IgdW5rbm93biBmaWxlczonCisgICAgICAgICAgICAgICAgJy4qdW5rbm93
bjouKmIvYy4qYi4qYS4qZC4qJywKKyAgICAgICAgICAgICAgICBzdHIoZSksIHJlLkRPVEFMTCkp
CisKKyAgICBkZWYgdGVzdF9yZW1vdmVfbm9uZXhpc3RpbmdfZmlsZXMoc2VsZik6CisgICAgICAg
ICIiIlRyeSB0byBkZWxldGUgbm9uLWV4aXN0aW5nIGZpbGVzLiIiIgorICAgICAgICB0cmVlID0g
c2VsZi5nZXRUcmVlKCkKKyAgICAgICAgdHJlZS5yZW1vdmUoWycnXSwga2VlcF9maWxlcz1GYWxz
ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJlZS5yZW1vdmUoWyd4eXonLCAnYWJjL2Rl
ZiddLCBrZWVwX2ZpbGVzPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdTaG91bGQgdGhy
b3cgQnpyUmVtb3ZlQ2hhbmdlZEZpbGVzRXJyb3InKQorICAgICAgICBleGNlcHQgZXJyb3JzLkJ6
clJlbW92ZUNoYW5nZWRGaWxlc0Vycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHJlLm1hdGNoKCdDYW5cJ3QgcmVtb3ZlIGNoYW5nZWQgb3IgdW5rbm93biBmaWxlczonCisgICAg
ICAgICAgICAgICAgJy4qdW5rbm93bjouKnh5ei4qYWJjL2RlZi4qJywKKyAgICAgICAgICAgICAg
ICBzdHIoZSksIHJlLkRPVEFMTCkpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfbm9uZW1wdHlfZGly
ZWN0b3J5KHNlbGYpOgorICAgICAgICAiIiJVbmNoYW5nZWQgbm9uLWVtcHR5IGRpcmVjdG9yaWVz
IHNob3VsZCBiZSBkZWxldGVkLiIiIgorICAgICAgICB0cmVlID0gc2VsZi5nZXRUcmVlKCkKKyAg
ICAgICAgdHJlZS5hZGQoVGVzdFJlbW92ZS5maWxlcykKKyAgICAgICAgdHJlZS5jb21taXQoIm1h
a2Ugc3VyZSBiIGlzIHZlcnNpb25lZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5Xb3JraW5nVHJl
ZShUZXN0UmVtb3ZlLmZpbGVzKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3NFeGlzdHMoVGVzdFJl
bW92ZS5maWxlcykKKyAgICAgICAgdHJlZS5yZW1vdmUoVGVzdFJlbW92ZS5iLCBrZWVwX2ZpbGVz
PUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluV29ya2luZ1RyZWUoVGVzdFJlbW92ZS5i
KQorICAgICAgICBzZWxmLmZhaWxJZkV4aXN0cyhUZXN0UmVtb3ZlLmIpCisKKyAgICBkZWYgdGVz
dF9yZW1vdmVfbm9uZW1wdHlfZGlyZWN0b3J5X3dpdGhfdW5rbm93bnMoc2VsZik6CisgICAgICAg
ICIiIlVuY2hhbmdlZCBub24tZW1wdHkgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGRlbGV0ZWQuIiIi
CisgICAgICAgIHRyZWUgPSBzZWxmLmdldFRyZWUoKQorICAgICAgICB0cmVlLmFkZChUZXN0UmVt
b3ZlLmZpbGVzKQorICAgICAgICB0cmVlLmNvbW1pdCgibWFrZSBzdXJlIGIgaXMgdmVyc2lvbmVk
IikKKyAgICAgICAgc2VsZi5hc3NlcnRJbldvcmtpbmdUcmVlKFRlc3RSZW1vdmUuZmlsZXMpCisg
ICAgICAgIHNlbGYuZmFpbFVubGVzc0V4aXN0cyhUZXN0UmVtb3ZlLmZpbGVzKQorICAgICAgICBm
ID0gZmlsZSgnYi9teV91bmtub3duX2ZpbGUnLCAnd2InKQorICAgICAgICBmLndyaXRlKCJzb21l
IGNvbnRlbnQhIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHRyZWUucmVtb3ZlKFRlc3RSZW1vdmUuYiwga2VlcF9maWxlcz1GYWxzZSkKKyAgICAgICAgICAg
IHNlbGYuZmFpbCgnU2hvdWxkIHRocm93IEJ6clJlbW92ZUNoYW5nZWRGaWxlc0Vycm9yJykKKyAg
ICAgICAgZXhjZXB0IGVycm9ycy5CenJSZW1vdmVDaGFuZ2VkRmlsZXNFcnJvciwgZToKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnQ2FuXCd0IHJlbW92ZSBjaGFuZ2VkIG9y
IHVua25vd24gZmlsZXM6JworICAgICAgICAgICAgICAgICcuKnVua25vd246LipiL215X3Vua25v
d25fZmlsZS4qJywKKyAgICAgICAgICAgICAgICBzdHIoZSksIHJlLkRPVEFMTCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0SW5Xb3JraW5nVHJlZShUZXN0UmVtb3ZlLmIpCisgICAgICAgIHNlbGYuZmFp
bFVubGVzc0V4aXN0cyhUZXN0UmVtb3ZlLmIpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9yZW1vdmVf
bm9uZW1wdHlfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5nZXRUcmVlKCkK
KyAgICAgICAgdHJlZS5hZGQoVGVzdFJlbW92ZS5maWxlcykKKyAgICAgICAgdHJlZS5jb21taXQo
Im1ha2Ugc3VyZSBiIGlzIHZlcnNpb25lZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5Xb3JraW5n
VHJlZShUZXN0UmVtb3ZlLmZpbGVzKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3NFeGlzdHMoVGVz
dFJlbW92ZS5maWxlcykKKyAgICAgICAgdHJlZS5yZW1vdmUoVGVzdFJlbW92ZS5iLCBrZWVwX2Zp
bGVzPUZhbHNlLCBmb3JjZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluV29ya2luZ1Ry
ZWUoVGVzdFJlbW92ZS5iX2MpCisgICAgICAgIHNlbGYuZmFpbElmRXhpc3RzKFRlc3RSZW1vdmUu
Yl9jKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2RpcmVjdG9yeV93aXRoX2NoYW5nZWRfZmlsZShz
ZWxmKToKKyAgICAgICAgIiIiUmVmdXNlIHRvIGRlbGV0ZSBkaXJlY3RvcmllcyB3aXRoIGNoYW5n
ZWQgZmlsZXMuIiIiCisgICAgICAgIHRyZWUgPSBzZWxmLmdldFRyZWUoKQorICAgICAgICB0cmVl
LmFkZChUZXN0UmVtb3ZlLmJfYykKKyAgICAgICAgdHJlZS5jb21taXQoIm1ha2Ugc3VyZSBiIGFu
ZCBjIGFyZSB2ZXJzaW9uZWQiKQorICAgICAgICBmID0gZmlsZSgnYi9jJywgJ3diJykKKyAgICAg
ICAgZi53cml0ZSgic29tZSBvdGhlciBuZXcgY29udGVudCEiKQorICAgICAgICBmLmNsb3NlKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRJbldvcmtpbmdUcmVlKFRlc3RSZW1vdmUuYl9jKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICB0cmVlLnJlbW92ZShUZXN0UmVtb3ZlLmIsIGtlZXBfZmlsZXM9
RmFsc2UpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ1Nob3VsZCB0aHJvdyBCenJSZW1vdmVDaGFu
Z2VkRmlsZXNFcnJvcicpCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuQnpyUmVtb3ZlQ2hhbmdlZEZp
bGVzRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJ0Nhblwn
dCByZW1vdmUgY2hhbmdlZCBvciB1bmtub3duIGZpbGVzOicKKyAgICAgICAgICAgICAgICAnLipt
b2RpZmllZDouKmIvYy4qJywKKyAgICAgICAgICAgICAgICBzdHIoZSksIHJlLkRPVEFMTCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0SW5Xb3JraW5nVHJlZShUZXN0UmVtb3ZlLmJfYykKKyAgICAgICAg
c2VsZi5mYWlsVW5sZXNzRXhpc3RzKFRlc3RSZW1vdmUuYl9jKQorCisgICAgICAgICNzZWUgaWYg
d2UgY2FuIGZvcmNlIGl0IG5vdy4uCisgICAgICAgIHRyZWUucmVtb3ZlKFRlc3RSZW1vdmUuYiwg
a2VlcF9maWxlcz1GYWxzZSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbldv
cmtpbmdUcmVlKFRlc3RSZW1vdmUuYl9jKQorICAgICAgICBzZWxmLmZhaWxJZkV4aXN0cyhUZXN0
UmVtb3ZlLmJfYykKCg==

=== added directory doc/developers // file-id:docdevelopers-20070507164002-62r0
... es2b29myxges-1 // last-changed:robertc@robertcollins.net-20070507164814-wpa
... gonutf4b5cf8s
=== added file doc/developers/incremental-push-pull.txt // file-id:incrementalp
... ushpull.-20070508045640-zneiu1yzbci574c6-1 // last-changed:robertc@robertco
... llins.net-20070509153606-m556z2rb3d76b2f3 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgZG9jL2RldmVsb3BlcnMvaW5jcmVtZW50YWwtcHVzaC1wdWxsLnR4
dApAQCAtMCwwICsxLDI0MiBAQAorSW5jcmVtZW50YWwgcHVzaC9wdWxsCistLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworVGhpcyB1c2UgY2FzZSBjb3ZlcnMgcHVsbGluZyBpbiBvciBwdXNoaW5nIG91
dCBzb21lIG51bWJlciBvZiByZXZpc2lvbnMgd2hpY2gKK2lzIHR5cGljYWxseSBhIHNtYWxsIGZy
YWN0aW9uIG9mIHRoZSBudW1iZXIgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0YXJnZXQKK3JlcG9z
aXRvcnkuIFB1c2hpbmcgYW5kIHB1bGxpbmcgYXJlIGRlZmluZWQgYXMgYnJhbmNoIGxldmVsIG9w
ZXJhdGlvbnMgZm9yIGVhc2UKK29mIGludGVyYWN0aW9uIHdpdGggVkNTIHN5c3RlbXMgdGhhdCBo
YXZlIG5vIHJlcG9zaXRvcnkgYWJzdHJhY3Rpb24gKHN1Y2ggYXMKK2J6ci1zdm4gb3IgR05VIEFy
Y2gpIGJ1dCB3aXRoaW4gYnpybGliJ3MgY29yZSB0aGV5IGFyZSBjdXJyZW50bHkgdGhlCityZXNw
b25zaWJpbGl0eSBvZiB0aGUgUmVwb3NpdG9yeSBvYmplY3QuCisKK0Z1bmN0aW9uYWwgUmVxdWly
ZW1lbnRzCis9PT09PT09PT09PT09PT09PT09PT09PQorCitBIHB1c2ggb3IgcHVsbCBvcGVyYXRp
b24gbXVzdDoKKyAqIENvcHkgYWxsIHRoZSBkYXRhIHRvIHJlY29uc3RydWN0IHRoZSBzZWxlY3Rl
ZCByZXZpc2lvbnMgaW4gdGhlIHRhcmdldAorICAgYnJhbmNoLiBUaGlzIGlzIHRoZSBnb2FsIG9m
IHB1c2ggYW5kIHB1bGwgYWZ0ZXIgYWxsLgorICogUmVqZWN0IGNvcnJ1cHQgZGF0YS4gQXMgYnpy
IGhhcyBubyBpbm5hdGUgbWVjaGFuaXNtIGZvciBkaXNjYXJkaW5nIGNvcnJ1cHRlZAorICAgZGF0
YSwgY29ycnVwdGVkIGRhdGEgc2hvdWxkIG5vdCBiZSBpbmNvcnBvcmF0ZWQgYWNjaWRlbnRhbGx5
LgorCitGYWN0b3JzIHdoaWNoIHNob3VsZCBhZGQgd29yayBmb3IgcHVzaC9wdWxsCis9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIEJhc2VsaW5lIG92ZXJo
ZWFkOiBUaGUgdGltZSB0byBjb25uZWN0IHRvIGJvdGggYnJhbmNoZXMuCisgKiBBY3R1YWwgbmV3
IGRhdGEgaW4gdGhlIHJldmlzaW9ucyBiZWluZyBwdWxsZWQgKGRyaXZlcyB0aGUgYW1vdW50IG9m
IGRhdGEgdG8KKyAgIG1vdmUgYXJvdW5kLCBpbmNsdWRlcyB0aGUgY29tbWl0IG1lc3NhZ2VzIGV0
YykKKyAqIE51bWJlciBvZiByZXZpc2lvbnMgaW4gdGhlIHR3byByZXBvc2l0b3JpZXMgKHNjYWxp
bmcgYWZmZWN0cyB0aGUKKyAgIGRldGVybWluYXRpb24gb2Ygd2hhdCByZXZpc2lvbnMgdG8gbW92
ZSBhcm91bmQpLgorCitQdXNoL3B1bGwgb3ZlcnZpZXcKKz09PT09PT09PT09PT09PT09PQorCisx
LiBOZXcgZGF0YSBpcyBpZGVudGlmaWVkIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4KKzIuIFRo
YXQgZGF0YSBpcyByZWFkIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5LgorMy4gVGhlIHNhbWUg
ZGF0YSBpcyB2ZXJpZmllZCBhbmQgd3JpdHRlbiB0byB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaW4g
c3VjaCBhCisgICBtYW5uZXIgdGhhdCBpdHMgbm90IHZpc2libGUgdG8gcmVhZGVycyB1bnRpbCBp
dHMgcmVhZHkgZm9yIHVzZS4KKworTmV3IGRhdGEgaWRlbnRpZmljYXRpb24KKysrKysrKysrKysr
KysrKysrKysrKysrCisKK1dlIGhhdmUgYSBzaW5nbGUgdG9wIGxldmVsIGRhdGEgb2JqZWN0OiBy
ZXZpc2lvbnMuIEV2ZXJ5dGhpbmcgZWxzZSBpcworc3Vib3JkaW5hdGUgdG8gcmV2aXNpb25zLCBz
byBkZXRlcm1pbmluZyB0aGUgcmV2aXNpb25zIHRvIHByb3BvZ2F0ZSBzaG91bGQgYmUKK2FsbCB0
aGF0cyBuZWVkZWQuIFRoaXMgZGVwZW5kcyBvbiByZXZpc2lvbnMgd2l0aCBwYXJ0aWFsIGRhdGEg
LSBzdWNoIGFzIHRob3NlCit3aXRoIG5vIHNpZ25hdHVyZSAtIGJlaW5nIGZsYWdnZWQgaW4gc29t
ZSBlZmZpY2llbnQgbWFubmVyLgorCitXZSBjb3VsZCBkbyB0aGlzIGluIHR3byBtYW5uZXJzOiBk
ZXRlcm1pbmUgcmV2aXNpb25zIHRvIHN5bmMgYW5kIHNpZ25hdHVyZXMgdG8gc3luYyBpbiB0d28g
cGFzc2VzLCBvciBjaGFuZ2UgdGhlICd2YWx1ZScgb2YgYSByZXZpc2lvbiBpbXBsaWNpdGx5IHdo
ZW4gdGhlIHNpZ25hdHVyZSBpcyBkaWZmZXJlbnQuIEUuZy4gYnkgdXNpbmcgbWVya2xlIGhhc2gg
dHJlZXMgd2l0aCB0aGUgc2lnbmF0dXJlIGRhdGEgYSBzZXBhcmF0ZSBjb21wb25lbnQgdGhlIHNp
Z25hdHVyZXMgd2lsbCBuYXR1cmFsbHkgYmUgaWRlbnRpZmllZCB0byBzeW5jLgorCitXZSB3YW50
IHRvIG9ubHkgZXhjaGFuZ2UgZGF0YSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBuZXcg
cmV2aXNpb25zIGFuZAorc2lnbmF0dXJlcyBpbiB0aGUgc3lzdGVtIHRob3VnaC4gT25lIHdheSB0
byBhY2hpZXZlIHRoaXMgZm9yIHJldmlzaW9ucyBpcyB0bword2FsayB0aGUgZ3JhcGggb3V0IGZy
b20gdGhlIGRlc2lyZWQgdGlwcyB1bnRpbCB0aGUgc3VyZmFjZSBhcmVhIGludGVyc2VjdGlvbiBp
cworZm91bmQuIEZvciBzaWduYXR1cmVzIGEgc2V0IGRpZmZlcmVuY2Ugc2VlbXMgdG8gYmUgbmVl
ZGVkIGFzIHRoZXJlIGlzIG5vIERBRyBvZiBzaWduYXR1cmVzOiB0aGUgcHJlc2VuY2Ugb2Ygb25l
IGhhcyBubyBpbXBsaWNhdGlvbnMgb24gdGhlIHByZXNlbmNlIG9mIGFub3RoZXIsIHNvIGEgZnVs
bCBwYXNzIG92ZXIgdGhlIHNldCBvZiBzaWduYXR1cmVzIHdvdWxkIGJlIHJlcXVpcmVkIHRvIGNv
bmZpcm0gbm8gbmV3IHNpZ25hdHVyZXMgYXJlIG5lZWRlZCAobGV0IGFsb25lIHJlcGxhY2VkIHNp
Z25hdHVyZXMpLgorCitJRkYgd2UgY2FuIGRldGVybWluZSAnbmV3IHJldmlzaW9ucycgYW5kICdu
ZXcgc2lnbmF0dXJlcycgd2l0aG91dCBmdWxsIGdyYXBoIGFjY2VzcyB0aGVuIHdlIGNhbiBzY2Fs
ZSBhY2NlcHRhYmxlIGZvciBwdXNoIGFuZCBwdWxsLgorCitHaG9zdHMgYXJlIHJldmlzaW9ucyB3
aGljaCBhcmUgbm90IHByZXNlbnQgaW4gYSBwYXJ0aWN1bGFyIHJlcG9zaXRvcnkuIEZpbGxpbmcg
Z2hvc3RzIHJlZmVycyB0byByZW1vdmluZyBnaG9zdHMgaW4gdGhlIHRhcmdldCByZXBvc2l0b3J5
IHdoZW4gdGhlIGdob3N0IGlzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSByZXBvc2l0b3J5LiBGaWxs
aW5nIGdob3N0cyBjYW4gYmUgZWl0aGVyIGFuIGV4cGxpY2l0IG9yIGltcGxpY2l0IGFjdGlvbi4g
VGhlIGNvbW1vbiBjYXNlIGlzIG5vIGdob3N0cy4KKworU2V0IHN5bmNocm9uaXNhdGlvbiBhcHBy
b2FjaGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworQSBzZXQgc3luY2hyb25p
c2F0aW9uIGFwcHJvYWNoIGlzIG9uZSB3aGljaCBzeW5jaHJvbmlzZXMgdHdvIHNldHMgd2l0aG91
dAorcmVnYXJkIGZvciBpbm5hdGUgc3RydWN0dXJlLiBUaGlzIGNhbiBiZSB2ZXJ5IGVmZmljaWVu
dCBidXQgcmVxdWlyZXMgYWRkaW5nIGEKK25ldyBub2RlIHRvIGJlIHByb2Nlc3NlZCB3aXRoIGV2
ZXJ5IGNvbW1pdC4gQ2FjaGluZyBvZiB0aGUgcmVzdWx0cyBvZiB0aGUKK3ZhcmlvdXMgc2V0IGJh
c2VkIHN5bmNzIEkndmUgc2VlbiBpcyBwb3NzaWJsZSBidXQgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1
Y3R1cmVzCitsb29rIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHRpcCByZXZpc2lvbiBiZWlu
ZyBzeW5jZWQgdXAgdG8gdGhlIGNhY2hlIG5lZWRzCit0byBiZSB2ZXJ5IGNvbXBsZXguIEkgcmVj
b21tZW5kIG5vdCB1c2luZyBzdWNoIGFuIGFwcHJvYWNoIGZvciB0aGUgY29tbW9uIGNhc2UKK3B1
bGwgYmVjYXVzZSBvZiB0aGUgZmFpbHVyZSB0byBzY2FsZS4gV2UgY2FuIHVzZSBzdWNoIGFuIGFw
cHJvYWNoIGZvcgorc3luY2hyb25pc2F0aW9uIG9mIG5ldyBzaWduYXR1cmVzIGFuZCBnaG9zdHMs
IHdoaWNoIHNob3VsZCBiZSBhbiBleHBsaWNpdAorb3B0aW9uIGluIGJvdGggY2FzZXMuCisKK0RB
RyBzeW5jaHJvbmlzYXRpb24gYXBwcm9hY2hlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e
Xl5eCisKK0EgREFHIGJhc2VkIGFwcHJvYWNoIHRvIHN5bmNocm9uaXN0aW9uIGlzIG9uZSB0aGF0
IHVzZXMgdGhlIERBRyBzdHJ1Y3R1cmUgdG8KK2RldGVybWluZSB0aGUgZGlmZmVyZW5jZSBpbiBw
cmVzZW50IG5vZGVzLiBJdCBjYW4gYXMgYSByZXN1bHQgb3BlcmF0ZSBmcm9tIHRoZQordGlwIG9m
IHRoZSBEQUcgYmFja3dhcmRzLiBBIGRhZyBiYXNlZCBhcHByb2FjaCBzaG91bGQgYWxsb3cgaW5j
cmVtZW50YWwgYWNjZXNzCit0byBkYXRhIGFuZCBub3QgcmVxdWlyZSBhIGZ1bGwtZ3JhcGggc2Nh
biBmb3IgaW5jcmVtZW50YWwgb3BlcmF0aW9ucy4KKworRmlsZSBsZXZlbCBzY2FsaW5nCiteXl5e
Xl5eXl5eXl5eXl5eXl4KKworV2Ugc2hvdWxkIHJlYWQgcm91Z2hseSBhcyBtdWNoIG9mIHRoZSBy
ZXZpc2lvbiBsZXZlbCBncmFwaCBhcyBpcyBuZWVkZWQgZnJvbQorZWFjaCByZXBvc2l0b3J5IHRv
IGRldGVybWluZSB0aGUgbm9kZSBkaWZmZXJlbmNlLiAgSWYgcmVxdWVzdGVkIHdlIHNob3VsZAor
cGVyZm9ybSBhIGRldGFpbGVkIHNjYW4gdG8gcGljayB1cCBnaG9zdCByZXZpc2lvbnMgYW5kIHJl
dmlzaW9ucyB3aGljaCBoYXZlIGhhZAorc2lnbmF0dXJlcyBhZGRlZC4gVGhpcyBzaG91bGQgbm90
IGJlIHRoZSBkZWZhdWx0IGFzIGl0IHJlcXVpcmVzIGZ1bGwgaGlzdG9yeQorYWNjZXNzIGluIGJv
dGggY2FzZXMuCisKK0V4cGVjdGVkIGZpbGUgSU8gYW5kIGFjY2VzcyBwYXR0ZXJuOgorCisgKiBD
b21tb24gY2FzZTogcmVwbyB3aXRoIG1hbnkgYnJhbmNoZXMgb2Ygb25lIHByb2plY3QsIHRvIHRo
ZSBzYW1lLgorCisgICAxLiBTb3VyY2UgYW5kIFRhcmdldCBicmFuY2ggdGlwcyByZWFkLgorICAg
Mi4gRmluZCB0aGUgdGlwIG9mIGVhY2ggYnJhbmNoIGluIHRoZWlyIHJlcG8gKHdpbGwgcmVxdWly
ZSByZWFkaW5nIHNvbWUgb2YKKyAgICAgIHRoZSByZXZpc2lvbiBncmFwaCBidXQgaXMgdHlwaWNh
bGx5IG5lYXIgdGhlIGVuZCBvZiB0aGUgZ3JhcGgpLgorICAgMy4gUmVhZCBhbmQgcGFyc2UgaW5j
cmVhc2luZyBhbW91bnRzIG9mIHRoZSByZXZpc2lvbiBncmFwaCB1bnRpbCBvbmUgaXMKKyAgICAg
IGZvdW5kIHRvIGJlIGEgc3Vic2V0IG9mIHRoZSBvdGhlciwgb3IgYSBjb21wbGV0ZSBsaXN0IG9m
IHJldmlzaW9ucyB0byBiZQorICAgICAgdHJhbnNtaXR0ZWQgaXMgY3JlYXRlZC4KKworICogVW5j
b21tb24gY2FzZXM6IAorICAgCisgICAxLiBSZXBvc2l0b3JpZXMgd2l0aCBtYW55IHByb2plY3Rz
IG9yIGJyYW5jaGVzIHdoaWNoIGFyZSB2ZXJ5IG9sZCBtYXkKKyAgICAgIHJlcXVpcmUgcmVhZGlu
ZyBhIGxvdCBvZiB1bnJlbGF0ZWQgZ3JhcGggZGF0YS4KKworICAgMS4gSW5pdGlhbCBwdXNoL3B1
bGwgc2NlbmFyaW9zIHNob3VsZCBub3QgcmVxdWlyZSByZWFkaW5nIGFuIGVudGlyZSBncmFwaC4K
KworCitBUEkgc2NhbGluZworXl5eXl5eXl5eXl4KKworIDEuIEdldCBicmFuY2ggdGlwcy4KKyAy
LiBEZXRlcm1pbmUgb25lIHNpZGVkIGdyYXBoIGRpZmZlcmVuY2UuIFRvIGF2b2lkIG9idGFpbmlu
ZyBhIGZ1bGwgZ3JhcGggb3ZlcgorICAgIHRoZSB3aXJlIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3
aXRob3V0IHJlZmVyZW5jZSB0byB0aGUgZnVsbCBncmFwaCwgYW5kCisgICAgd2l0aCBzb21lIGxv
Z2FydGhtaWMgc2NhbGluZyBhbGdvcml0aG0uIFRoZXJlIGFyZSBzZXZlcmFsIGFscmVhZHkgYXZh
aWxhYmxlCisgICAgZm9yIHRoaXMuIAorCitXaXRoIGdob3N0IGFuZCBuZXctc2lnbmF0dXJlIGRl
dGVjdGlvbjoKKworICogRmlsZSBJTyBhY2Nlc3MgcGF0dGVybiB3aWxsIHJlYWQgdGhlIGVudGly
ZSBncmFwaCBvbiB0aGUgJ3RhcmdldCcgc2lkZSAtIGlmCisgICBubyBnaG9zdHMgYXJlIHByZXNl
bnQgdGhlbiBzdG9wLCBvdGhlcndpc2Ugc2VlayB0aGUgbmV3IHJldmlzaW9ucyBvbiB0aGUKKyAg
IHNvdXJjZSBzaWRlIHdpdGggdGhlIHJlZ3VsYXIgYWxnb3JpdGhtIGFuZCBhbHNvIGV4cGxpY2l0
bHkgc2VhcmNoIGZvciB0aGUKKyAgIGdob3N0IHBvaW50cyBmcm9tIHRoZSB0YXJnZXQ7IHBsdXMg
YSBzZXQgZGlmZmVyZW5jZSBzZWFyY2ggaXMgbmVlZGVkIG9uCisgICBzaWduYXR1cmVzLgorCisg
KiBTZW1hbnRpYyBsZXZlbCBjYW4gcHJvYmFibHkgYmUgdHVuZWQsIGJ1dCBhcyBpdHMgYWxzbyBj
b21wbGV4IEkgc3VnZ2VzdAorICAgZGVmZXJyaW5nIGFuYWx5c2lzIGZvciBvcHRpbWFsIGJlaGF2
aW91ciBvZiB0aGlzIHVzZSBjYXNlLgorCisKK0RhdGEgcmVhZGluZworKysrKysrKysrKysrCisK
K1doZW4gdHJhbnNmZXJyaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgcmV2aXNpb24gdGhlIGdyYXBo
IG9mIGRhdGEgZm9yIHRoZQorcmV2aXNpb24gaXMgd2Fsa2VkOiByZXZpc2lvbiAtPiBpbnZlbnRv
cnksIHJldmlzaW9uIC0+IG1hdGNoaW5nIHNpZ25hdHVyZSwKK2ludmVudG9yeSAtPiBmaWxlIGlk
czpyZXZpc2lvbiBwYWlycy4KKworRmlsZSBsZXZlbCBzY2FsaW5nCiteXl5eXl5eXl5eXl5eXl5e
Xl4KKworQXMgd2UncmUgcmVhZGluZyBhbHJlYWR5IGNvbW1pdHRlZCBkYXRhLCBhcyBsb25nIGFz
IG5vdGhpbmcgaXMgbXV0YXRpbmcgZGF0YSBvbgorZGlzayByZWFkaW5nIHNob3VsZCBiZSByYWNl
IGZyZWUuIFdlIHdpbGw6CisKKyAtIHJlYWQgZWFjaCByZXZpc2lvbiBvYmplY3QKKyAtIHJlYWQg
dGhlIG1hdGNoaW5nIGludmVudG9yeSBkZWx0YQorIC0gYXR0ZW1wdCB0byByZWFkIGEgc2lnbmF0
dXJlIG9iamVjdAorIC0gcGFyc2UgdGhlIGludmVudG9yeSBkZWx0YQorIC0gcmVhZCB0aGUgZmls
ZWlkOnJldmlzaW9uaWQgY29tcHJlc3NlZCBjaHVuayBmb3IgZWFjaCBsaW5lIGluIHRoZSBpbnZl
bnRvcnkKKyAgIGRlbHRhCisKK1RoZXJlcyBubyBwb2ludCB2YWxpZGF0aW5nIHRoYXQgdGhlIGRh
dGEgcmVhZCBpcyB2YWxpZCwgYXMgdHJhbnNtaXNzaW9uIHRocm91Z2ggdG8gdGhlIGNsaWVudCB3
cml0aW5nIHRoZSBkYXRhIG1pZ2h0IGludmFsaWRhdGUgaXQ7IHdlIG5lZWQgdG8gdmFsaWRhdGUg
YmVmb3JlIHdlIHdyaXRlLgorCitBUEkgc2NhbGluZworXl5eXl5eXl5eXl4KKworR2l2ZW4gdGhh
dCB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSByZXZpc2lvbnMgbmVlZGVkLCBhIHNpbmdsZSBBUEkg
Y2FsbCBzaG91bGQKK3N1ZmZpY2UgdG8gb2J0YWluIGFsbCBkYXRhOyB0aGUgQVBJIHNob3VsZCBw
cmVzZW50IHRoZSBkYXRhIGluIHN1Y2ggYW4gb3JkZXIKK3RoYXQgaXQgY2FuIGJlIHZhbGlkYXRl
ZCBhcyBpdCBhcnJpdmVzIGFuZCB0aHVzIG5vdCByZXF1aXJlIGxhcmdlIHNjYWxlCitidWZmZXJp
bmcgb24gZGlzay4gU3BlY2lmaWNhbGx5IGVhY2ggaXRlbSBvZiBkYXRhIHNob3VsZCBiZSB2YWxp
ZGF0YWJsZSAoZS5nLgorZm9yIHNvbWUgZmlsZSBkYXRhIHdlIHdhbnQgdGhlIGZpbGVpZDpyZXZp
c2lvbmlkOnZhbGlkYXRpb25oYXNoICsgY29udGVudCkuCisKKworRGF0YSBWZXJpZmljYXRpb24g
YW5kIHdyaXRpbmcKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK05ldyBkYXRhIHdy
aXR0ZW4gdG8gYSByZXBvc2l0b3J5IHNob3VsZCBiZSBjb21wbGV0ZWQgaW50YWN0IHdoZW4gaXQg
aXMgbWFkZQordmlzaWJsZS4gVGhpcyBzdWdnZXN0cyB0aGF0IGVpdGhlciBhbGwgdGhlIGRhdGEg
Zm9yIGEgcmV2aXNpb24gbXVzdCBiZSBtYWRlCithdG9taWNhbGx5IHZpc2libGUgKGUuZy4gYnkg
cmVuYW1pbmcgYSBzaW5nbGUgZmlsZSkgb3IgdGhlIGxlYWYgbm9kZXMgb2YgdGhlCityZWZlcmVu
Y2UgZ3JhcGggbXVzdCBiZWNvbWUgdmlzaWJsZSBmaXJzdC4KKworRGF0YSBpcyByZWZlcnJlZCB0
byB2aWEgdGhlIGZvbGxvd2luZyBncmFwaDoKK3JldmlzaW9uIC0+IHJldmlzaW9uCityZXZpc2lv
biAtPiBzaWduYXR1cmUKK3JldmlzaW9uIC0+IGludmVudG9yeQoraW52ZW50b3J5IC0+IGZpbGVp
ZDpyZXZpc2lvbmlkCitmaWxlaWQ6cmV2aXNpb25pZCAtPiBmaWxlaWQ6cmV2aXNpb25pZAorCitE
YXRhIGlzIHZlcmlmaWFibGUgdmlhIGEgZGlmZmVyZW50IG9yZGVyaW5nOgorc2lnbmF0dXJlIC0+
IHJldmlzaW9uIC0+IGludmVudG9yeSAtPiBmaWxlaWQ6cmV2aXNpb25pZCB0ZXh0cy4KKworV2Ug
ZG9udCBncGcgdmVyaWZ5IGVhY2ggcmV2aXNpb24gdG9kYXk7IHRoaXMgYW5hbHlzaXMgb25seSBz
cGVha3MgdG8gaGFzaAordmVyaWZpY2F0aW9uIG9mIGNvbnRlbnRzLgorCitUbyB2YWxpZGF0ZSBh
IHJldmlzaW9uIHdlIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGRhdGEgaXQgcmVmZXJzIHRvLiBCdXQg
dG8KK3ZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhIHJldmlzaW9uIHdlIG5lZWQgdGhlIG5ldyB0
ZXh0cyBpbiB0aGUgaW52ZW50b3J5IGZvcgordGhlIHJldmlzaW9uIC0gdG8gY2hlY2sgYSBmaWxl
aWQ6cmV2aXNpb25pZCB3ZSBuZWVkIHRvIGtub3cgdGhlIGV4cGVjdGVkIHNoYTEKK29mIHRoZSBm
dWxsIHRleHQgYW5kIHRodXMgYWxzbyBuZWVkIHRvIHJlYWQgdGhlIGRlbHRhIGNoYWluIHRvIGNv
bnN0cnVjdCB0aGUKK3RleHQgYXMgd2UgYWNjZXB0IGl0IHRvIGRldGVybWluZSBpZiBpdHMgdmFs
aWQuIFByb3ZpZGluZyBzZXBhcmF0ZSB2YWxpZGF0b3JzCitmb3IgdGhlIGNob3NlbiByZXByZXNl
bnRhdGlvbiB3b3VsZCBhZGRyZXNzIHRoaXMuCitlLmc6IEZvciBhbiBpbnZlbnRvcnkgZW50cnkg
RklMRUlEOlJFVklTSU9OSUQgd2Ugc3RvcmUgdGhlIHZhbGlkYXRvciBvZiB0aGUKK2Z1bGwgdGV4
dCA6U0hBMTouIElmIHdlIGFsc28gc3RvcmVkIHRoZSB2YWxpZGF0b3Igb2YgdGhlIGNob3NlbiBk
aXNrCityZXByZXNlbnRhdGlvbiAoOkRFTFRBU0hBMTopIHdlIGNvdWxkIHZhbGlkYXRlIHRoZSB0
cmFuc21pdHRlZCByZXByZXNlbnRhdGlvbgord2l0aG91dCBleHBhbmRpbmcgdGhlIGRlbHRhIGlu
IHRoZSBjb21tb24gY2FzZS4gSWYgdGhhdCBmYWlsZWQgd2UgY291bGQgZXhwYW5kCit0aGUgZGVs
dGEgY2hhaW4gYW5kIHRyeSBhZ2FpbnN0IHRoZSBmdWxsIHRleHQgdmFsaWRhdG9yLCBhbmQgZmlu
YWxseSBmYWlsLiBBcworZGlmZmVyZW50IGRlbHRhIGdlbmVyYXRvcnMgbWlnaHQgZ2VuZXJhdGUg
ZGlmZmVyZW50IGRlbHRhcywgOkRFTFRBU0hBMTogc2hvdWxkCitub3QgYmVjb21lIHBhcnQgb2Yg
dGhlIHJldmlzaW9uIHZhbGlkYXRvciwgb25seSB0aGUgaW52ZW50b3J5IGRpc2sgZW5jb2Rpbmcu
IEluCithIHJlbGF0ZWQgbWFubmVyIGEgdHJhbnNtaXNzaW9uIGZvcm1hdCB0aGF0IGFsbG93ZWQg
Y2hlYXAgdmFsaWRhdGlvbiBvZiBjb250ZW50Cit3aXRob3V0IGFwcGx5aW5nIGxvY2FsbHkgc3Rv
cmVkIGRlbHRhcyB3b3VsZCBiZSBhZHZhbnRhZ2VvdXMgYmVjYXVzZSBubyBsb2NhbAorcmVhZHMg
d291bGQgYmUgaW5jdXJyZWQgdG8gdmFsaWRhdGUgbmV3IGNvbnRlbnQuIEZvciBpbnN0YW5jZSwg
YWx3YXlzIHNlbmRpbmcgYQorZnVsbCB0ZXh0IGZvciBhbnkgZmlsZSwgcG9zc2libHkgd2l0aCBh
IGRlbHRhLWNoYWluIHdoZW4gdHJhbnNtaXR0aW5nIG11bHRpcGxlCityZXZpc2lvbmlkcyBvZiB0
aGUgZmlsZSwgd291bGQgYWxsb3cgdGhpcy4gKGdpdCBwYWNrLWZpbGVzIGhhdmUgdGhpcyBwcm9w
ZXJ0eSkuCisKK092ZXJ2aWV3IHN1bW1hcnkKK15eXl5eXl5eXl5eXl5eXl4KKworQSBzaW5nbGUt
ZmlsZSBsb2NhbCBmb3JtYXQgd291bGQgYWxsb3cgc2FmZSBhdG9taWMgYWRkaXRpb24gb2YgZGF0
YSB3aGlsZQorYWxsb3dpbmcgb3B0aW1pc2FsIHRyYW5zbWlzc2lvbiBvcmRlciBvZiBkYXRhLiBG
YWlsaW5nIHRoaXMgdGhlIHZhbGlkYXRpb24gb2YKK2RhdGEgc2hvdWxkIGJlIHR1bmVkIHRvIG5v
dCByZXF1aXJlIHJlYWRpbmcgbG9jYWwgdGV4dHMgZHVyaW5nIGRhdGEgYWRkaXRpb24KK2V2ZW4g
aW4gdGhlIHByZXNlbmNlIG9mIGRlbHRhIGNoYWlucy4gV2Ugc2hvdWxkIGhhdmUgdHJhbnNtaXNz
aW9uLXZhbGlkYXRvcnMKK3NlcGFyYXRlIGZyb20gY29udGVudCB2YWxpZGF0b3JzIHRoYXQgYWxs
b3cgdmFsaWRhdGlvbiBvZiB0aGUgZGVsdGEtdHJhbnNtaXR0ZWQKK2Zvcm0gb2Ygb2JqZWN0cy4K
KworRmlsZSBsZXZlbCBzY2FsaW5nCiteXl5eXl5eXl5eXl5eXl5eXl4KKworKiBFdmVyeSBuZXcg
ZmlsZSB0ZXh0IHJlcXVpcmVzIHRyYW5zbWlzc2lvbiBhbmQgbG9jYWwgc2VyaWFsaXNhdGlvbi4K
KyogRXZlcnkgY29tbWl0IHJlcXVpcmVzIHRyYW5zbWlzc2lvbiBhbmQgc3RvcmFnZSBvZiBhIHJl
dmlzaW9uLCBzaWduYXR1cmUgYW5kIGludmVudG9yeS4KKworVGh1cyA0MDAwIGNvbW1pdHMgdG8g
YSA1MDAwMCBwYXRoIHRyZWUgb2YgMTAgZmlsZXMgb24gYXZlcmFnZXMgcmVxdWlyZXMgKHdpdGgK
K2tuaXRzKSBiZXR3ZWVuIDI2IHdyaXRlcyAoMiooMysxMCkpIGFuZCA4MDAwNiAoMiooNDAwMCox
MCArIDMpKSB3cml0ZXMuIEluIGFsbAorY2FzZXMgdGhlcmUgYXJlIDQwMDAgKiAxMyBkaXN0aW5j
dCBvYmplY3RzIHRvIHJlY29yZC4KKworR3JvdXBpbmcgZGF0YSBieSBmaWxlaWQsIGNvbnRlbnQg
YW5kIG1ldGFkYXRhLCBnaXZlcyB0aGUgZmlndXJlcyBhYm92ZS4KK0RhdGEgZ3JvdXBpbmc6CisK
KyogRmlsZSBwZXIgZnVsbCBpZGVudGlmaWVyIChmaWxlaWQ6cmV2aXNpb25pZDptZXRhfGNvbnRl
bnQpOiAxMDQwMDAKKyogRGVsdGEtY2hhaW4gcGVyIG9iamVjdDogb2JqZWN0IGlkIGNvdW50ICog
Y29uc3RhbnQgb3ZlcmhlYWQgcGVyIG9iamVjdCBpZCAKKyAgKDI2IC0+IDgwMDA2KQorKiBDb2xs
YXRpb24vcGFjayBmaWxlOiAxCisKK1BlcmZvcm1hbmNlIGZvciB0aGVzZSBkZXBlbmRzIGhlYXZp
bHkgb24gaW1wbGVtZW50YXRpb246CisgLSBVc2luZyBmdWxsIGlkcyB3ZSBjb3VsZCBuYW1lIGJ5
IHZhbGlkYXRvciBvciBieSBpZCwgZ2l2aW5nIGJlc3QgcGVyZm9ybWFuY2UKKyAgIHRoYXQgZGVw
ZW5kcyBvbiBlaXRoZXIgcmVjZWl2aW5nIGRhdGEgaW4gdmFsaWRhdG9yIG9yZGVyIG9yIGluIGlk
IG9yZGVyLgorIC0gdXNpbmcgZGVsdGEtY2hhaW4gcGVyIG9iamVjdCB3ZSBnZXQgbGVhc3Qgc2Vl
ayBvdmVyaGVhZCBhbmQgc3lzY2FsbCBvdmVyaGVhZAorICAgaWYgd2UgcmVjaWV2ZSBpbiB0b3Bv
bG9naWNhbCBvcmRlciB3aXRoaW4gdGhlIG9iamVjdCBpZCwgYW5kIG9iamVjdCBpZHMgaW4KKyAg
IGxleGljYWwgb3JkZXIuCisgLSBVc2luZyBhIGNvbGxhdGlvbi9wYWNrIGZpbGUgd2UgY2FuIHN0
cmVhbSBpdCBpbnRvIHBsYWNlIGFuZCB2YWxpZGF0ZSBhcyB3ZSBnbywKKyAgIGdpdmluZyBuZWFy
IGlkZWFsIHBlcmZvcm1hbmNlLgorCitBUEkgc2NhbGluZworXl5eXl5eXl5eXl4KKworVGhlIGFw
aSBmb3Igd3JpdGluZyBuZXcgZGF0YSByZWNpZXZlZCBvdmVyIHRoZSBuZXR3b3JrIHdpbGwgbmVl
ZCB0byBiZSBnZWFyZWQKK3RvIHRoZSB0cmFuc21pc3Npb24gYW5kIGxvY2FsIHN0b3JhZ2UgbWV0
aG9kLiBXaGF0IHdlIG5lZWQgaXMgZm9yIHRoZQordHJhbnNtaXNzaW9uIG1ldGhvZCB0byByZWFz
b25hYmx5IGNsb3NlbHkgbWF0Y2ggdGhlIGRlc2lyZWQgd3JpdGUgb3JkZXJpbmcKK2xvY2FsbHku
IFRoaXMgc3VnZ2VzdHMgdGhhdCBvbmNlIHdlIGRlY2lkZSBvbiB0aGUgYmVzdCBsb2NhbCBzdG9y
YWdlIG1lYW5zIHdlCitzaG91bGQgZGVzaWduIHRoZSBhcGkuCgo=

=== added file doc/developers/index.txt // file-id:index.txt-20070508041241-qzn
... ziunkg0nffhiw-1 // last-changed:robertc@robertcollins.net-20070508041401-rr
... eosr07ptz41d6c // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgZG9jL2RldmVsb3BlcnMvaW5kZXgudHh0CkBAIC0wLDAgKzEsMTUg
QEAKKz09PT09PT09PT09PT09PT09PT09PT09CitCYXphYXIgRGV2ZWxvcGVycyBHdWlkZQorPT09
PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlv
biBpbmRleAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIGBHZW5lcmFsIEhBQ0tJTkcgSE9XVE8g
PEhBQ0tJTkcuaHRtPmBfCisKKyAgR3VpZGUgdG8gcG9saWNpZXMgYW5kIHRvb2xzIGZvciB3b3Jr
aW5nIG9uIEJhemFhciBpdHNlbGYuCisKKyogYFBlcmZvcm1hbmNlIHJvYWRtYXAgPHBlcmZvcm1h
bmNlLXJvYWRtYXAuaHRtPmBfCisKKyAgVGhlIHJvYWRtYXAgZm9yIGZpeGluZyBwZXJmb3JtYW5j
ZSBpbiBienIgb3ZlciB0aGUgbmV4dCBmZXcgcmVsZWFzZXMuCgo=

=== added file doc/developers/performance-roadmap-rationale.txt // file-id:perf
... ormanceroadmapra-20070507174912-mwv3xv517cs4sisd-1 // last-changed:robertc@
... robertcollins.net-20070507174930-gksqv90l5emjrcyq // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgZG9jL2RldmVsb3BlcnMvcGVyZm9ybWFuY2Utcm9hZG1hcC1yYXRp
b25hbGUudHh0CkBAIC0wLDAgKzEsMTE2IEBACitXaGF0IHNob3VsZCBiZSBpbiB0aGUgcm9hZG1h
cD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGdvb2Qgcm9hZG1hcCBwcm92
aWRlcyBhIHBsYWNlIGZvciBjb250cmlidXRvcnMgdG8gbG9vayBmb3IgdGFza3MsIGl0Citwcm92
aWRlcyB1c2VycyB3aXRoIGEgc2Vuc2Ugb2Ygd2hlbiB3ZSB3aWxsIGZpeCB0aGluZ3MgdGhhdCBh
cmUKK2FmZmVjdGluZyB0aGVtLCBhbmQgaXQgYWxzbyBhbGxvd3MgdXMgYWxsIHRvIGFncmVlIGFi
b3V0IHdoZXJlIHdlIGFyZQoraGVhZGVkLiBTbyB0aGUgcm9hZG1hcCBzaG91bGQgY29udGFpbiBl
bm91Z2ggdGhpbmdzIHRvIGxldCBhbGwgdGhpcworaGFwcGVuLgorCitJIHRoaW5rIHRoYXQgaXQg
bmVlZHMgdG8gY29udGFpbiB0aGUgYW5hbHlzaXMgd29yayB3aGljaCBpcyByZXF1aXJlZCwgYQor
bGlzdCBvZiB0aGUgdXNlIGNhc2VzIHRvIGJlIG9wdGltaXNlZCwgdGhlIGRpc2sgY2hhbmdlcyBy
ZXF1aXJlZCwgYW5kCit0aGUgYnJvYWQgc2Vuc2Ugb2YgdGhlIGFwaSBjaGFuZ2VzIHJlcXVpcmVk
LiBJdCBhbHNvIG5lZWRzIHRvIGxpc3QgdGhlCitpbnRlci1kZXBlbmRlbmNpZXMgYmV0d2VlbiB0
aGVzZSB0aGluZ3M6IHdlIHNob3VsZCBhaW0gZm9yIGEgbGFyZ2UKK3N1cmZhY2UgYXJlYSBvZiAn
cmVhZHkgdG8gYmUgd29ya2VkIG9uJyBpdGVtcywgdGhhdCBtYWtlcyBpdCBlYXN5IHRvCitpbXBy
b3ZlIHBlcmZvcm1hbmNlIHdpdGhvdXQgaGF2aW5nIHRvIHdvcmsgaW4gbG9ja3N0ZXAgd2l0aCBv
dGhlcgorZGV2ZWxvcGVycy4KKworQ2xlYXJseSB0aGUgYW5hbHlzaXMgc3RlcCBpcyBhbiBpbW1l
ZGlhdGUgYm90dGxlbmVjayAtIHdlIGNhbm5vdCB0ZWxsIGlmCithbiBvcHRpbWlzYXRpb24gZm9y
IHVzZSBjYXNlIEEgaXMgYSBwZXNzaW1pc20gZm9yIHVzZSBjYXNlIEIgdW50aWwgd2UKK2hhdmUg
YW5hbHlzZWQgYm90aCBBIGFuZCBCLiBJIHByb3Bvc2UgdGhhdCB3ZSBjb21wbGV0ZSB0aGUgYW5h
bHlzaXMgb2YKK3NheSBhIGRvemVuIGNvcmUgdXNlIGNhc2VzIGVuZCB0byBlbmQgZHVyaW5nIHRo
ZSB1cGNvbWluZyBzcHJpbnQgaW4KK0xvbmRvbi4gV2Ugc2hvdWxkIHRoZW4gYmUgYWJsZSB0byBm
b3JrKCkgZm9yIG11Y2ggb2YgdGhlIGRldGFpbGVkIGRlc2lnbgord29yayBhbmQgcmVncm91cCB3
aXRoIGRpc2sgYW5kIGFwaSBjaGFuZ2VzIHNob3J0bHkgdGhlcmVhZnRlci4KKworSSBzdXNwZWN0
IHRoYXQgY2xhcml0eSBvZiBsYXllcmluZyB3aWxsIG1ha2UgYSBiaWcgZGlmZmVyZW5jZSB0bwor
ZGV2ZWxvcGVyIHBhcmFsbGVsaXNtLCBzbyBhbm90aGVyIHByb3Bvc2FsIEkgaGF2ZSBpcyBmb3Ig
dXMgdG8gbG9vayBhdAordGhlIEFQSXMgZm9yIEJyYW5jaCBhbmQgUmVwb3NpdG9yeSBpbiBMb25k
b24gaW4gdGhlIGxpZ2h0IG9mIHdoYXQgd2UKK2hhdmUgbGVhcm50IG92ZXIgdGhlIGxhc3QgeWVh
cnMuCisKK1doYXQgc2hvdWxkIHRoZSBmaW5hbCBzeXN0ZW0gbG9vayBsaWtlLCBob3cgaXMgaXQg
ZGlmZmVyZW50IHRvIHdoYXQgd2UgaGF2ZSB0b2RheT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworT25lIG9mIHRoZSB0aGluZ3MgSSBsaWtlIHRoZSBtb3N0IGFib3V0IGJ6ciBpcyBpdHMg
cmljaCBsaWJyYXJ5IEFQSSwgYW5kCitJJ3ZlIGhlYXJkIHRoaXMgZnJvbSBudW1lcm91cyBvdGhl
ciBmb2xrLiBTbyBhbnl0aGluZyB0aGF0IHdpbGwgcmVtb3ZlCit0aGF0IHNob3VsZCBiZSBjb25z
aWRlcmVkIGEgbGFzdCByZXNvcnQuCisKK1NpbWlsYXJseSBvdXIgcmVsYXRpdmVseSBleGNlbGxl
bnQgY3Jvc3MgcGxhdGZvcm0gc3VwcG9ydCBpcyBjcml0aWNhbAorZm9yIHByb2plY3RzIHRoYXQg
YXJlIHRoZW1zZWx2ZXMgY3Jvc3MgcGxhdGZvcm0sIGFuZCB0aGF0cyBhCitjb25zaWRlcmFibGUg
bnVtYmVyIHRoZXNlIGRheXMuCisKK0FuZCBvZiBjb3Vyc2UsIG91ciBmb2N1cyBvbiBkb2luZyB0
aGUgcmlnaHQgdGhpbmcgaXMgd2hhdCBkaWZmZXJlbnRpYXRlcwordXMgZnJvbSBzb21lIG9mIHRo
ZSBvdGhlciBWQ1Mncywgc28gd2Ugc2hvdWxkIGJlIGZvY3VzaW5nIG9uIGRvaW5nIHRoZQorcmln
aHQgdGhpbmcgcXVpY2tseSA6KS4KKworV2hhdCB3ZSBoYXZlIHRvZGF5IHRob3VnaCBoYXMgZ3Jv
d24gb3JnYW5pY2FsbHkgaW4gcmVzcG9uc2UgdG8gdXMKK2lkZW50aWZ5aW5nIGJvdHRsZW5lY2tz
IG92ZXIgc2V2ZXJhbCBpdGVyYXRpb25zIG9mIGJhY2sgZW5kIHN0b3JhZ2UsCiticmFuY2ggbWV0
YWRhdGEgYW5kIHRoZSBsb2NhbCB0cmVlIHJlcHJlc2VudGF0aW9uLiBJIHRoaW5rIHdlIGFyZQor
bGFyZ2VseSBwYXN0IHRoYXQgYW5kIGFibGUgdG8gZGVzY3JpYmUgdGhlIGlkZWFsIGNoYXJhY3Rl
cmlzdGljcyBvZiB0aGUKK21ham9yIGFjdG9ycyBpbiB0aGUgc3lzdGVtIC0gcHJpbWFyaWx5IFRy
ZWUsIEJyYW5jaCwgUmVwb3NpdG9yeSAtIGJhc2VkCitvbiB3aGF0IHdlIGhhdmUgbGVhcm50Lgor
CitXaGF0IHVzZSBjYXNlcyBzaG91bGQgYmUgY292ZXJlZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitNeSBsaXN0IG9mIHVzZSBjYXNlcyBpcyBwcm9iYWJseSBub3QgY29t
cGxldGUgLSBpdHMganVzdCB0aGUgb25lcyBJCitoYXBwZW4gdG8gc2VlIGEgbG90IDopLiBJIHRo
aW5rIGVhY2ggc2hvdWxkIGJlIGFuYWx5c2VkIGNvbXByZWhlbnNpdmVseQorc28gd2UgZG9udCBu
ZWVkIHRvIHNheSAncHVzaCBvdmVyIHRoZSBuZXR3b3JrJyAtIGl0cyBpbXBsaWVkIGluIHRoZQor
c2NhbGluZyBhbmFseXNpcyB0aGF0IGJvdGggc2VtYW50aWMgYW5kIGZpbGUgb3BlcmF0aW9uIGxh
dGVuY3kgd2lsbCBiZQorY29uc2lkZXJlZC4KKworVGhlc2UgdXNlIGNhc2VzIGFyZSBvcmRlcmVk
IGJ5IHJvdWdobHkgdGhlIGVhc2Ugb2YgYmVuY2htYXJraW5nLCBhbmQgdGhlCitmcmVxdWVuY3kg
b2YgdXNlLiBUaGlzIG9yZGVyaW5nIGlzIHNvIHRoYXQgd2hlbiBwZW9wbGUgYXJlIGNvbXBhcmlu
ZyBienIKK3RoZXkgYXJlIGdvaW5nIHRvIGdldCB1c2UgY2FzZXMgd2UgaGF2ZSBvcHRpbWlzZWQ7
IGFuZCBzbyB0aGF0IGFzIHdlCitzcGVlZCB0aGluZ3MgdXAgb3VyIGV4aXN0aW5nIHVzZXJzIHdp
bGwgaGF2ZSB0aGUgdGhpbmdzIHRoZXkgZG8gdGhlIG1vc3QKK29wdGltaXNlZC4KKworICogc3Rh
dHVzIHRyZWUKKyAqIHN0YXR1cyBzdWJ0cmVlCisgKiBjb21taXQKKyAqIGNvbW1pdCB0byBhIGJv
dW5kIGJyYW5jaAorICogaW5jcmVtZW50YWwgcHVzaC9wdWxsCisgKiBsb2cKKyAqIGxvZyBwYXRo
CisgKiBhZGQKKyAqIGluaXRpYWwgcHVzaCBvciBwdWxsIFtib3RoIHRvIGEgbmV3IHJlcG8gYW5k
IGFuIGV4aXN0aW5nIHJlcG8gd2l0aAorICAgZGlmZmVyZW50IGRhdGEgaW4gaXRdCisgKiBkaWZm
IHRyZWUKKyAqIGRpZmYgc3VidHJlZQorCisgKiByZXZlcnQgdHJlZQorICogcmV2ZXJ0IHN1YnRy
ZWUKKyAqIG1lcmdlIGZyb20gYSBicmFuY2gKKyAqIG1lcmdlIGZyb20gYSBidW5kbGUKKyAqIGFu
bm90YXRlCisgKiBjcmVhdGUgYSBidW5kbGUgYWdhaW5zdCBhIGJyYW5jaAorICogdW5jb21taXQK
KyAqIG1pc3NpbmcKKyAqIHVwZGF0ZQorICogY2JyYW5jaAorCitob3cgaXMgZGV2ZWxvcG1lbnQg
b24gdGhlIHJvYWRtYXAgY29vcmRpbmF0ZWQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgdGhpbmsgd2Ugc2hvdWxkIGhvbGQgcmVndWxhciBnZXQt
dG9nZXRoZXJzIChvbiBJUkMpIHRvIGNvb3JkaW5hdGUgb24KK291ciBwcm9ncmVzcywgYmVjYXVz
ZSB0aGlzIGlzIGEgYmlnIHRhc2sgYW5kIGl0cyBhIGxvdCBlYXNpZXIgdG8gc3RhcnQKK2hlbHBp
bmcgb3V0IHNvbWUgYXJlYSB3aGljaCBpcyBoYXZpbmcgdHJvdWJsZSBpZiB3ZSBoYXZlIGtlcHQg
aW4gY29udGFjdAorYWJvdXQgZWFjaCBhcmVhcyBwcm9ncmVzcy4gVGhpcyBtaWdodCBiZSB3ZWVr
bHkgb3IgZm9ydG5pZ2h0bHkgb3Igc29tZQorc3VjaC4KKword2UgbmVlZCBhIHNoYXJlZCBzcGFj
ZSB0byByZWNvcmQgdGhlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzIGFuZCB0aGUKK3JvYWRtYXAg
YXMgd2UgZ28gZm9yd2FyZC4gR2l2ZW4gdGhhdCB3ZSdsbCBuZWVkIHRvIHVwZGF0ZSB0aGVzZSBh
cyBuZXcKK2ZlYXR1cmVzIGFyZSBjb25zaWRlcmVkLCBJIHByb3Bvc2UgdGhhdCB3ZSB1c2UgZG9j
L2Rlc2lnbiBhcyBhIHdvcmtpbmcKK3NwYWNlLCBhbmQgYXMgd2UgYW5hbHlzZSB1c2UgY2FzZXMg
d2UgaW5jbHVkZSB0aGVtIGluIHRoZXJlIC0gaW5jbHVkaW5nCit0aGUgbm9ybWFsIHJldmlldyBw
cm9jZXNzIGZvciBlYWNoIHBhdGNoLiBXZSBhbHNvIG5lZWQgZG9jdW1lbnRhdGlvbgorYWJvdXQg
ZG9pbmcgcGVyZm9ybWFuY2UgdHVuaW5nIC0gbm90IHRoZSBtaW51dGlhZSwgdGhvdWdoIHRoYXQg
aXMKK25lZWRlZCwgYnV0IGFib3V0IGhvdyB0byBlZmZlY3RpdmUgY2hvb3NlIHRoaW5ncyB0byBv
cHRpbWlzZSB3aGljaCB3aWxsCitnaXZlIHRoZSBiZXN0IHJldHVybiBvbiB0aW1lIHNwZW50IC0g
dGhhdCBpcyB3aGF0IHRoZSByb2FkbWFwIHNob3VsZAoraGVscCB3aXRoLCBidXQgdGhpcyBsb29r
cyB0byBiZSBhIGxhcmdlIHByb2plY3QgYW5kIGFuIG92ZXJ2aWV3IHdpbGwgYmUKK29mIGdyZWF0
IGFzc2lzdGFuY2UgSSB0aGluay4gV2Ugd2FudCB0byBoZWxwIGV2ZXJ5b25lIHRoYXQgd2lzaGVz
IHRvCitjb250cmlidXRlIHRvIHBlcmZvcm1hbmNlIHRvIGRvIHNvIGVmZmVjdGl2ZWx5LgorCitG
aW5hbGx5LCBpdHMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBjb2RpbmcgaXMgbm90IHRoZSBvbmx5
IGNvbnRyaWJ1dGlvbgorLSB0ZXN0aW5nLCBnaXZpbmcgZmVlZGJhY2sgb24gY3VycmVudCBwZXJm
b3JtYW5jZSwgaGVscGluZyB3aXRoIHRoZQorYW5hbHlzaXMgYXJlIGFsbCBleHRyZW1lbHkgaW1w
b3J0YW50IHRhc2tzIHRvbyBhbmQgd2UgcHJvYmFibHkgd2FudCB0bworaGF2ZSBjbGVhciBtYXJr
ZXJzIG9mIHdoZXJlIHRoYXQgc2hvdWxkIGJlIGRvbmUgdG8gZW5jb3VyYWdlIHN1Y2gKK2NvbnRy
aWJ1dGlvbnMuCgo=

=== added file doc/developers/performance-roadmap.txt // file-id:performanceroa
... dmap.t-20070507174912-mwv3xv517cs4sisd-2 // last-changed:robertc@robertcoll
... ins.net-20070509153606-m556z2rb3d76b2f3 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgZG9jL2RldmVsb3BlcnMvcGVyZm9ybWFuY2Utcm9hZG1hcC50eHQK
QEAgLTAsMCArMSwxNSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KK0JhemFhciBQZXJm
b3JtYW5jZSBSb2FkbWFwCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBYm91dCB0aGUg
cGVyZm9ybWFuY2Ugcm9hZG1hcAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLi4g
aW5jbHVkZTo6IHBlcmZvcm1hbmNlLXJvYWRtYXAtcmF0aW9uYWxlLnR4dAorCitBbmFseXNpcyBv
ZiB1c2UgY2FzZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuLiBpbmNsdWRlOjogcGVyZm9y
bWFuY2UtdXNlLWNhc2UtYW5hbHlzaXMudHh0CisKKy4uIGluY2x1ZGU6OiBpbmNyZW1lbnRhbC1w
dXNoLXB1bGwudHh0Cgo=

=== added file doc/developers/performance-use-case-analysis.txt // file-id:perf
... ormanceusecasean-20070508045640-zneiu1yzbci574c6-2 // last-changed:robertc@
... robertcollins.net-20070509153606-m556z2rb3d76b2f3 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgZG9jL2RldmVsb3BlcnMvcGVyZm9ybWFuY2UtdXNlLWNhc2UtYW5h
bHlzaXMudHh0CkBAIC0wLDAgKzEsMTA4IEBACitBbmFseXNpbmcgYSBzcGVjaWZpYyB1c2UgY2Fz
ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFuYWx5c2lzIG9mIGEgdXNl
IGNhc2UgbmVlZHMgdG8gcHJvdmlkZSBhcyBvdXRwdXRzOgorICogVGhlIGZ1bmN0aW9uYWwgcmVx
dWlyZW1lbnRzIHRoYXQgdGhlIHVzZSBjYXNlIGhhcyB0byBzYXRpc2Z5LgorICogVGhlIGZpbGUg
bGV2ZWwgb3BlcmF0aW9ucyBhbmQgYWNjZXNzIHBhdHRlcm5zIHRoYXQgd2lsbCBnaXZlIHRoZSBi
ZXN0CisgICBwZXJmb3JtYW5jZS4KKyAqIEEgbG93IGZyaWN0aW9uIEFQSSB3aGljaCB3aWxsIGFs
bG93IHRoZSB1c2UgY2FzZSB0byBiZSBpbXBsZW1lbnRlZC4KKyAqIFRoZSByZWxlYXNlIG9mIGJ6
ciAoYW5kIHRodXMgdGhlIHN1cHBvcnRlZCBmZWF0dXJlcykgZm9yIHdoaWNoIHRoZSBhbmFseXNp
cworICAgd2FzIHBlcmZvcm1lZC4gVGhlIGZlYXR1cmUgc2V0IG9mIGJ6ciBkZWZpbmVzIHRoZSBh
Y2Nlc3MgcGF0dGVybnMgYW5kIGRhdGEKKyAgIHJlcXVpcmVkIHRvIGltcGxlbWVudCBhbnkgdXNl
IGNhc2UuIFNvIHdoZW4gd2UgYWRkIGZlYXR1cmVzLCB0aGVpciBkZXNpZ24KKyAgIGNoYW5nZXMg
dGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdGhleSBhbHRlciwg
c28gd2UgbmVlZAorICAgdG8gcmUtYW5hbHlzZSB1c2UgY2FzZXMgd2hlbiBienIncyBmZWF0dXJl
IHNldCBjaGFuZ2VzLiBJZiBmdXR1cmUgcGxhbnMgYXJlCisgICBjb25zaWRlcmVkIGluIHRoZSBh
bmFseXNpcyB3aXRoIHRoZSBpbnRlbnRpb24gb2YgYXZvaWRpbmcgcmV3b3JrLCB0aGVzZQorICAg
c2hvdWxkIGFsc28gYmUgbWVudGlvbmVkLgorCitQZXJmb3JtaW5nIHRoZSBhbmFseXNpcworLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFuYWx5c2lzIG5lZWRzIHRvIGJlIGFibGUgdG8g
ZGVmaW5lIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlCitpbnZvbHZlZCBkaXNrIHN0b3JhZ2Ug
YW5kIEFQSXMuIFRoYXQgbWVhbnMgd2UgbmVlZCB0byBleGFtaW5lIHRoZSBkYXRhCityZXF1aXJl
ZCBmb3IgdGhlIG9wZXJhdGlvbiwgaW4gd2hhdCBvcmRlciBpdCBpcyByZXF1aXJlZCwgb24gYm90
aCB0aGUKK3JlYWQgYW5kIHdyaXRlIHNpZGVzLCBhbmQgaG93IHRoYXQgbmVlZHMgdG8gYmUgcHJl
c2VudGVkIHRvIGJlCitjb25zaXN0ZW50IHdpdGggb3VyIGxheWVyaW5nLgorCitBcyBhIHF1aWNr
IGV4YW1wbGU6ICdhbm5vdGF0aW9uIG9mIGEgZmlsZSByZXF1aXJlcyB0aGUgZmlsZSBpZCBsb29r
ZWQgdXAKK2Zyb20gdGhlIHRyZWUsIHRoZSBiYXNpcyByZXZpc2lvbiBpZCBmcm9tIHRoZSB0cmVl
LCBhbmQgdGhlbiB0aGUgdGV4dCBvZgordGhhdCBmaWxlaWQtcmV2aXNpb25pZCBwYWlyIGFsb25n
IHdpdGggdGhlIGNyZWF0aW5nIHJldmlzaW9uIGlkCithbGxvY2F0ZWQgdG8gZWFjaCBsaW5lLCBh
bmQgdGhlIGRvdHRlZCByZXZpc2lvbiBudW1iZXIgb2YgZWFjaCBvZiB0aG9zZQorcmV2aXNpb24g
aWRzLicgQWxsIHRocmVlIG9mIG91ciBrZXkgZG9tYWluIG9iamVjdHMgYXJlIGludm9sdmVkIGhl
cmUsCitidXQgd2UgaGF2ZW4ndCBkZWZpbmVkIGFueSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGFw
aSBvciBkaXNrIGZhY2lsaXRpZXMKK3lldC4gV2UgY291bGQgdGhlbiBkbyB0aGF0IGJ5IHNheWlu
ZyBzb21ldGhpbmcgbGlrZSAndGhlIGZpbGUtaWQgbG9va3VwCitzaG91bGQgZGVncmFkZSBncmFj
ZWZ1bGx5IGFzIHRyZWVzIGJlY29tZSBodWdlLiBUaGUgdHJlZSBiYXNpcyBpZCBzaG91bGQKK2Jl
IGNvbnN0YW50IHRpbWUuIFJldHJpZXZhbCBvZiB0aGUgYW5ub3RhdGVkIHRleHQgc2hvdWxkIGJl
IHJvdWdobHkKK2NvbnN0YW50IGZvciBhbnkgdGV4dCBvZiB0aGUgc2FtZSBzaXplIHJlZ2FyZGxl
c3Mgb2YgdGhlIG51bWJlciBvZgorcmV2aXNpb25zIGNvbnRyaWJ1dGluZyB0byBpdHMgY29udGVu
dC4gTWFwcGluZyBvZiB0aGUgcmV2aXNpb24gaWRzIHRvCitkb3R0ZWQgcmV2bm9zIGNvdWxkIGJl
IGRvbmUgYXMgdGhlIHRleHQgaXMgcmV0cmlldmVkLCBidXQgaXRzIGNvbXBsZXRlbHkKK2ZpbmUg
dG8gcG9zdC1wcm9jZXNzIHRoZSBhbm5vdGF0ZWQgdGV4dCB0byBvYnRhaW4gZG90dGVkLXJldm5v
cy4nCisKK1doYXQgZmFjdG9ycyBzaG91bGQgYmUgY29uc2lkZXJlZD8KKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2J2aW91c2x5LCB0aG9zZSB0aGF0IHdpbGwgbWFrZSBm
b3IgYW4gZXh0cmVtZWx5IGZhc3Qgc3lzdGVtIDopLiBUaGVyZQorYXJlIG1hbnkgcG9zc2libGUg
ZmFjdG9ycywgYnV0IHRoZSBvbmVzIEkgdGhpbmsgYXJlIG1vc3QgaW50ZXJlc3RpbmcgdG8KK2Rl
c2lnbiB3aXRoIGFyZToKKworLSBiYXNlbGluZSBvdmVyaGVhZDoKKworICAgLSBUaGUgdGltZSB0
byBnZXQgYnpyIHJlYWR5IHRvIGJlZ2luIHRoZSB1c2UgY2FzZS4KKworLSBzY2FsaW5nOiBob3cg
ZG9lcyBwZXJmb3JtYW5jZSBjaGFuZ2Ugd2hlbiBhbnkgb2YgdGhlIGZvbGxvdyBhc3BlY3RzCisg
ICBvZiB0aGUgc3lzdGVtIGFyZSByYXRjaGVkIG1hc3NpdmVseSB1cCBvciBkb3duOgorCisgICAt
IG51bWJlciBvZiBmaWxlcy9kaXJzL3N5bWxpbmtzL3N1YnRyZWVzIGluIGEgdHJlZSAoYm90aCB3
b3JraW5nIGFuZCAKKyAgICAgcmV2aXNpb24gdHJlZXMpCisgICAtIHNpemUgb2YgYW55IHBhcnRp
Y3VsYXIgZmlsZQorICAgLSBudW1iZXIgb2YgZWxlbWVudHMgd2l0aGluIGEgc2luZ2xlIGRpcmVj
dG9yeQorICAgLSBsZW5ndGggb2Ygc3ltbGlua3MKKyAgIC0gbnVtYmVyIG9mIGNoYW5nZXMgdG8g
YW55IGZpbGUgb3ZlciB0aW1lCisgICAgIChzdWJvcmRpbmF0ZWx5IGFsc28gdGhlIG51bWJlciBv
ZiBtZXJnZXMgb2YgdGhlIGZpbGUpCisgICAtIG51bWJlciBvZiBjb21taXRzIGluIHRoZSBhbmNl
c3RyeSBvZiBhIGJyYW5jaAorICAgICAoc3Vib3JkaW5hdGVseSBhbHNvIHRoZSBudW1iZXIgb2Yg
bWVyZ2VzKQorICAgLSBudW1iZXIgb2YgcmV2aXNpb25zIGluIGEgcmVwb3NpdG9yeQorICAgLSBu
dW1iZXIgb2YgZmlsZWlkcyBpbiBhIHJlcG9zaXRvcnkKKyAgIC0gbnVtYmVyIG9mIGdob3N0cyBp
biBhIGdpdmVuIGdyYXBoIChyZXZpc2lvbiBvciBwZXItZmlsZSkKKyAgIC0gbnVtYmVyIG9mIGJy
YW5jaGVzIGluIGEgcmVwb3NpdG9yeQorICAgLSBudW1iZXIgb2YgY29uY3VycmVudCByZWFkZXJz
IGZvciBhIHRyZWUvYnJhbmNoL3JlcG9zaXRvcnkKKyAgIC0gbnVtYmVyIG9mIGNvbmN1cnJlbnQg
d3JpdGVycyBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhhdC4KKyAgIC0gbGF0ZW5jeSB0byBw
ZXJmb3JtIGZpbGUgb3BlcmF0aW9ucyAoZS5nLiBzbG93IGRpc2tzLCBuZXR3b3JrIGZpbGUgc3lz
dGVtcywKKyAgICAgb3VyIFZGUyBsYXllciBhbmQgRlRQL1NGVFAvZXRjKQorICAgLSBiYW5kd2lk
dGggdG8gdGhlIGRpc2sgc3RvcmFnZQorICAgLSBsYXRlbmN5IHRvIHBlcmZvcm0gc2VtYW50aWMg
b3BlcmF0aW9ucyAoaHBzcyBzcGVjaWZpYykKKyAgIC0gYmFuZHdpZHRoIHdoZW4gcGVyZm9ybWlu
ZyBzZW1hbnRpYyBvcGVyYXRpb25zLgorLSBsb2NhbGl0eSBvZiByZWZlcmVuY2U6IElmIGFuIG9w
ZXJhdGlvbiByZXF1aXJlcyBkYXRhIHRoYXQgaXMgbG9jYXRlZAorICAgd2l0aGluIGEgc21hbGwg
cmVnaW9uIGF0IGFueSBwb2ludCwgd2Ugb2Z0ZW4gZ2V0IGJldHRlciBwZXJmb3JtYW5jZSAKKyAg
IHRoYW4gd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2FtZSBvcGVyYXRpb24gdGhhdCBy
ZXF1aXJlcyB0aGUKKyAgIHNhbWUgYW1vdW50IG9mIGRhdGEgYnV0IHdpdGggYSBsb3dlciBsb2Nh
bGl0eSBvZiByZWZlcmVuY2UuIEl0cyAKKyAgIGZhaXJseSB0cmlja3kgdG8gYWRkIGxvY2FsaXR5
IG9mIHJlZmVyZW5jZSBhZnRlciB0aGUgZmFjdCwgc28gSSB0aGluaworICAgaXRzIHdvcnRoIGNv
bnNpZGVyaW5nIHVwIGZyb250LgorCitVc2luZyB0aGVzZSBmYWN0b3JzLCB0byB0aGUgYW5ub3Rh
dGUgZXhhbXBsZSB3ZSBjYW4gYWRkIHRoYXQgaXRzCityZWFzb25hYmxlIHRvIGRvIHR3byAnc2Vt
YW50aWMnIHJvdW5kIHRyaXBzIHRvIHRoZSBsb2NhbCB0cmVlLCBvbmUgdG8KK3RoZSBicmFuY2gg
b2JqZWN0LCBhbmQgdHdvIHRvIHRoZSByZXBvc2l0b3J5LiBJbiBmaWxlLW9wZXJhdGlvbiBsZXZl
bAorbWVhc3VyZW1lbnRzLCBpbiBhbiBpZGVhbCB3b3JsZCB0aGVyZSB3b3VsZCBiZSBubyBtb3Jl
IHRoYW4gb25lIHJvdW5kCit0cmlwIGZvciBlYWNoIHNlbWFudGljIG9wZXJhdGlvbi4gV2hhdCB0
aGVyZSBtdXN0IG5vdCBiZSBpcyBvbmUgcm91bmQKK3RyaXAgcGVyIHJldmlzaW9uIGludm9sdmVk
IGluIHRoZSByZXZpc2lvbmlkLT5kb3R0ZWQgbnVtYmVyIG1hcHBpbmcsIG5vcgorcGVyIGVhY2gg
cmV2aXNpb24gaWQgYXR0cmlidXRlZCB0byBhIGxpbmUgaW4gdGhlIHRleHQuIAorCitOb3QgYWxs
IHRoZSBpdGVtcyBtZW50aW9uZWQgYWJvdmUgYXJlIGNyZWF0ZWQgZXF1YWwuIFRoZSBhbmFseXNp
cyBzaG91bGQKK2luY2x1ZGUgdGhlIHBhcmFtZXRlcnMgY29uc2lkZXJlZCBhbmQgdGhlIGNvbW1v
biBjYXNlIHZhbHVlcyBmb3IgZWFjaCAtIHRoZQorb3B0aW1pc2F0aW9uIHNob3VsZCBiZSBhcm91
bmQgdGhlIGNvbW1vbiBjYXNlcyBub3QgYXJvdW5kIHRoZSBleGNlcHRpb25zLgorCitGb3IgaW5z
dGFuY2UsIHdlIGhhdmUgYSBzbWFydCBzZXJ2ZXIgbm93OyBmaWxlIGxldmVsIG9wZXJhdGlvbnMg
YXJlIHJlbGF0aXZlbHkKK2xvdyBsYXRlbmN5IGFuZCB3ZSBzaG91bGQgdXNlIHRoYXQgYXMgdGhl
IGNvbW1vbiBjYXNlLiBBdCB0aGlzIHBvaW50IHdlIGludGVuZAordG8gcHJlc2VydmUgdGhlIHBl
cmZvcm1hbmNlIG9mIHRoZSBkdW1iIHByb3RvY29sIG5ldHdvcmtpbmcsIGJ1dCBmb2N1cyBvbgor
aW1wcm92aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgdmlhIHRoZSBzbWFydCBzZXJ2ZXIgYW5kIHRo
dXMgZXNjYXBlIHRoZQorZmlsZS1sZXZlbCBvcGVyYXRpb24gbGF0ZW5jeSBjb25zaWRlcmF0aW9u
cy4KKworTWFueSBwZXJmb3JtYW5jZSBwcm9ibGVtcyBvbmx5IGJlY29tZSB2aXNpYmxlIHdoZW4g
Y2hhbmdpbmcgdGhlIHNjYWxpbmcga25vYnMKK3Vwd2FyZHMgdG8gbGFyZ2UgdHJlZXMuIE9uIHNt
YWxsIHRyZWVzIGl0cyBvdXIgYmFzZWxpbmUgcGVyZm9ybWFuY2UgdGhhdCBkcml2ZXMKK2luY3Jl
bWVudGFsIGltcHJvdmVtZW50czsgb24gbGFyZ2UgdHJlZXMgaXRzIHRoZSBhbW91bnQgb2YgcHJv
Y2Vzc2luZyBwZXIgaXRlbQordGhhdCBkcml2ZXMgcGVyZm9ybWFuY2UuIEEgc2lnbmlmaWNhbnQg
Z29hbCB0aGVyZWZvcmUgaXMgdG8ga2VlcCB0aGUgYW1vdW9udCBvZgorZGF0YSB0byBiZSBwcm9j
ZXNzZWQgdW5kZXIgY29udHJvbC4gSWRlYWxseSB3ZSBjYW4gc2NhbGUgaW4gYSBzdWJsaW5lYXIg
ZmFzaGlvbgorZm9yIGFsbCBvcGVyYXRpb25zLCBidXQgd2UgTVVTVCBOT1Qgc2NhbGUgZXZlbiBs
aW5lYXJseSBmb3Igb3BlcmF0aW9ucyB0aGF0CitpbnZva2UgYSBsYXRlbmN5IG11bHRpcGxpZXIu
IEZvciBleGFtcGxlLCByZWFkaW5nIGEgZmlsZSBvbiBkaXNrIHJlcXVpcmVzCitmaW5kaW5nIHRo
ZSBpbm9kZSBmb3IgdGhlIGZpbGUsIHRoZW4gdGhlIGJsb2NrIHdpdGggdGhlIGRhdGEgYW5kIHJl
dHVybmluZyB0aGUKK2NvbnRlbnRzLiBEdWUgdG8gZGlyZWN0b3J5IGdyb3VwaW5nIGxvZ2ljIHdl
IHBheSBhIG1hc3NpdmUgcHJpY2UgdG8gcmVhZCBmaWxlcworaWYgd2UgZG8gbm90IGdyb3VwIHRo
ZSByZWFkcyBvZiBmaWxlcyB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgoK

=== added file doc/shared_repository_layouts.txt // file-id:shared_repository_l
... a-20070502152030-bagewuqs18ns24o7-1 // last-changed:robertc@robertcollins.n
... et-20070507174930-gksqv90l5emjrcyq // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgZG9jL3NoYXJlZF9yZXBvc2l0b3J5X2xheW91dHMudHh0CkBAIC0w
LDAgKzEsMzY5IEBACis9PT09PT09PT09PT09PT09PT09PT09PQorU2hhcmVkUmVwb3NpdG9yeUxh
eW91dHMKKz09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHNlY3RudW06OgorCitCYXphYXIg
aXMgZGVzaWduZWQgdG8gZ2l2ZSB5b3UgZmxleGliaWxpdHkgaW4gaG93IHlvdSBsYXlvdXQgYnJh
bmNoZXMgaW5zaWRlIGEgc2hhcmVkIHJlcG9zaXRvcnkuIAorVGhpcyBmbGV4aWJpbGl0eSBhbGxv
d3MgdXNlcnMgdG8gdGFpbG9yIEJhemFhciB0byB0aGVpciB3b3JrZmxvdywKK2J1dCBpdCBhbHNv
IGxlYWRzIHRvIHF1ZXN0aW9ucyBhYm91dCB3aGF0IGlzIGEgImdvb2QiIGxheW91dC4KK1dlIHBy
ZXNlbnQgc29tZSBhbHRlcm5hdGl2ZXMgYW5kIGdpdmUgc29tZSBkaXNjdXNzaW9uIGFib3V0IHRo
ZSBiZW5lZml0cyBvZiBlYWNoLgorCitPbmUga2V5IHBvaW50IHdoaWNoIHNob3VsZCBiZSBtZW50
aW9uZWQgaXMgdGhhdCBhbnkgZ29vZCBsYXlvdXQgc2hvdWxkIHNvbWVob3cgaGlnaGxpZ2h0Cit3
aGF0IGJyYW5jaCBhICJnZW5lcmFsIiB1c2VyIHNob3VsZCBncmFiLiBJbiBTVk4gdGhpcyBpcyBk
ZWVtZWQgdGhlICJgYHRydW5rL2BgIiBicmFuY2gsCithbmQgaW4gbW9zdCBvZiB0aGUgbGF5b3V0
cyB0aGlzIG5hbWluZyBjb252ZW50aW9uIGlzIHByZXNlcnZlZC4gU29tZSB3b3VsZCBjYWxsIHRo
aXMKKyJgYG1haW5saW5lYGAiIG9yICJgYGRldmBgIiwgYW5kIHBlb3BsZSBmcm9tIENWUyBvZnRl
biByZWZlciB0byB0aGlzIGFzICJgYEhFQURgYCIuCisKKy4uIGNvbnRlbnRzOjoKKworCisiU1ZO
LVN0eWxlIiAoYGB0cnVuay9gYCwgYGBicmFuY2hlcy9gYCkKKz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorCitNb3N0IHBlb3BsZSBjb21pbmcgZnJvbSBTVk4gd2lsbCBi
ZSBmYW1pbGlhciB3aXRoIHRoZWlyICJzdGFuZGFyZCIgcHJvamVjdCBsYXlvdXQuIAorV2hpY2gg
aXMgdG8gbGF5b3V0IHRoZSByZXBvc2l0b3J5IGFzOjoKKworICByZXBvc2l0b3J5LyAgICAgICAj
IE92ZXJhbGwgcmVwb3NpdG9yeQorICAgKy0gdHJ1bmsvICAgICAgICAjIFRoZSBtYWlubGluZSBv
ZiBkZXZlbG9wbWVudAorICAgKy0gYnJhbmNoZXMvICAgICAjIEEgY29udGFpbmVyIGRpcmVjdG9y
eQorICAgfCAgICstIGZvby8gICAgICAjIEJyYW5jaCBmb3IgZGV2ZWxvcGluZyBmZWF0dXJlIGZv
bworICAgfCAgICAgLi4uCisgICArLSB0YWdzLyAgICAgICAgICMgQ29udGFpbmVyIGRpcmVjdG9y
eQorICAgICAgICstIHJlbGVhc2UtWCAjIEEgYnJhbmNoIHNwZWNpZmljIHRvIG1hcmsgYSBnaXZl
biByZWxlYXNlIHZlcnNpb24KKyAgICAgICAgICAuLi4KKworV2l0aCBCYXphYXIsIHRoYXQgaXMg
YSBwZXJmZWN0bHkgcmVhc29uYWJsZSBsYXlvdXQuIAorSXQgaGFzIHRoZSBiZW5lZml0IG9mIGJl
aW5nIGZhbWlsaWFyIHRvIHBlb3BsZSBjb21pbmcgZnJvbSBTVk4sIAorYW5kIG1ha2luZyBpdCBj
bGVhciB3aGVyZSB0aGUgZGV2ZWxvcG1lbnQgZm9jdXMgaXMuCisKK1doZW4geW91IGhhdmUgbXVs
dGlwbGUgcHJvamVjdHMgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeSwgCit0aGUgU1ZOIGxheW91dCBp
cyBhIGxpdHRsZSB1bmNsZWFyIHdoYXQgdG8gZG8uCisKKworYGBwcm9qZWN0L3RydW5rYGAKK35+
fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBTVk4gc2VlbXMgdG8g
YmUgdG8gZ2l2ZSBlYWNoIHByb2plY3QgYSB0b3AgbGV2ZWwgZGlyZWN0b3J5IGZvciBhIGxheW91
dCBsaWtlOjoKKworICByZXBvc2l0b3J5LyAgICAgICAgICAgICMgT3ZlcmFsbCByZXBvc2l0b3J5
CisgICArLSBwcm9qZWN0MS8gICAgICAgICAgIyBBIGNvbnRhaW5lciBkaXJlY3RvcnkKKyAgIHwg
ICArLSB0cnVuay8gICAgICAgICAjIFRoZSBtYWlubGluZSBvZiBkZXZlbG9wbWVudCBvZiBwcm9q
ZWN0MQorICAgfCAgICstIGJyYW5jaGVzLyAgICAgICMgQSBjb250YWluZXIgZGlyZWN0b3J5Cisg
ICB8ICAgICAgICstIGZvby8gICAgICAgIyBCcmFuY2ggZm9yIGRldmVsb3BpbmcgZmVhdHVyZSBm
b28gb2YgcHJvamVjdDEKKyAgIHwgICAgICAgICAuLi4KKyAgIHwKKyAgICstIHByb2plY3QyLyAg
ICAgICAgICAjIENvbnRhaW5lciBmb3IgcHJvamVjdDIKKyAgICAgICArLSB0cnVuay8gICAgICAg
ICAjIE1haW5saW5lIGZvciBwcm9qZWN0MgorICAgICAgICstIGJyYW5jaGVzLyAgICAgICMgQ29u
dGFpbmVyIGZvciBwcm9qZWN0MiBicmFuY2hlcworCisKK1RoaXMgYWxzbyB3b3JrcyB3aXRoIEJh
emFhci4gCitIb3dldmVyLCB3aXRoIEJhemFhciByZXBvc2l0b3JpZXMgYXJlIGNoZWFwIHRvIGNy
ZWF0ZSAKKyhhIHNpbXBsZSBgYGJ6ciBpbml0LXJlcG9gYCBhd2F5KSwgYW5kIHRoZWlyIHByaW1h
cnkgYmVuZWZpdCBpcyB3aGVuIHRoZQorYnJhbmNoZXMgc2hhcmUgYSBjb21tb24gYW5jZXN0cnku
CisKK1NvIHRoZSBwcmVmZXJyZWQgd2F5IGZvciBCYXphYXIgd291bGQgYmU6OgorCisgICAgcHJv
amVjdDEvICAgICAgICAgICMgQSByZXBvc2l0b3J5IGZvciBwcm9qZWN0MQorICAgICArLSB0cnVu
ay8gICAgICAgICAjIFRoZSBtYWlubGluZSBvZiBkZXZlbG9wbWVudCBvZiBwcm9qZWN0MQorICAg
ICArLSBicmFuY2hlcy8gICAgICAjIEEgY29udGFpbmVyIGRpcmVjdG9yeQorICAgICAgICAgKy0g
Zm9vLyAgICAgICAjIEJyYW5jaCBmb3IgZGV2ZWxvcGluZyBmZWF0dXJlIGZvbyBvZiBwcm9qZWN0
MQorICAgICAgICAgICAuLi4KKyAgICAKKyAgICBwcm9qZWN0Mi8gICAgICAgICAgIyBBIHJlcG9z
aXRvcnkgZm9yIHByb2plY3QyCisgICAgICstIHRydW5rLyAgICAgICAgICMgTWFpbmxpbmUgZm9y
IHByb2plY3QyCisgICAgICstIGJyYW5jaGVzLyAgICAgICMgQ29udGFpbmVyIGZvciBwcm9qZWN0
MiBicmFuY2hlcworCisKK2BgdHJ1bmsvcHJvamVjdGBgCit+fn5+fn5+fn5+fn5+fn5+fgorCitU
aGVyZSBhcmUgYWxzbyBhIGZldyBwcm9qZWN0cyB3aG8gdXNlIHRoaXMgbGF5b3V0IGluIFNWTjo6
CisKKyAgcmVwb3NpdG9yeS8gICAgICAgICAgICAgIyBPdmVyYWxsIHJlcG9zaXRvcnkKKyAgICAr
LSB0cnVuay8gICAgICAgICAgICAgIyBBIGNvbnRhaW5lciBkaXJlY3RvcnkKKyAgICB8ICAgKy0g
cHJvamVjdDEgICAgICAgIyBNYWlubGluZSBmb3IgcHJvamVjdCAxCisgICAgfCAgICstIHByb2pl
Y3QyICAgICAgICMgTWFpbmxpbmUgZm9yIHByb2plY3QgMgorICAgIHwgICAgICAgICAuLi4KKyAg
ICB8CisgICAgKy0gYnJhbmNoZXMvICAgICAgICAgICMgQ29udGFpbmVyCisgICAgICAgICstIHBy
b2plY3QxLyAgICAgICMgQ29udGFpbmVyICg/KQorICAgICAgICB8ICAgKy0gZm9vICAgICAgICAj
IEJyYW5jaCAnZm9vJyBvZiBwcm9qZWN0MQorICAgICAgICArLSBwcm9qZWN0Mi8KKyAgICAgICAg
ICAgICstIGJhciAgICAgICAgIyBCcmFuY2ggJ2Jhcicgb2YgcHJvamVjdDIKKworCitBIHNsaWdo
dCB2YXJpYW50IGlzOjoKKworICByZXBvc2l0b3J5LyAgICAgICAgICAgICAjIE92ZXJhbGwgcmVw
b3NpdG9yeQorICAgICstIHRydW5rLyAgICAgICAgICAgICAjIEEgY29udGFpbmVyIGRpcmVjdG9y
eQorICAgIHwgICArLSBwcm9qZWN0MSAgICAgICAjIE1haW5saW5lIGZvciBwcm9qZWN0IDEKKyAg
ICB8ICAgKy0gcHJvamVjdDIgICAgICAgIyBNYWlubGluZSBmb3IgcHJvamVjdCAyCisgICAgfCAg
ICAgICAgIC4uLgorICAgIHwKKyAgICArLSBicmFuY2hlcy8gICAgICAgICAgIyBDb250YWluZXIK
KyAgICAgICAgKy0gcHJvamVjdDEtZm9vLyAgIyBCcmFuY2ggJ2Zvbycgb2YgcHJvamVjdDEKKyAg
ICAgICAgKy0gcHJvamVjdDItYmFyLyAgIyBCcmFuY2ggJ2Jhcicgb2YgcHJvamVjdDIKKworSSBi
ZWxpZXZlIHRoZSByZWFzb24gZm9yIHRoaXMgaW4gU1ZOLCBpcyBzbyB0aGF0IHNvbWVvbmUgCitj
YW4gY2hlY2tvdXQgYWxsIG9mICJgYHRydW5rL2BgIiBhbmQgZ2V0IHRoZSBhbGwgdGhlIG1haW5s
aW5lcyBmb3IgYWxsIHByb2plY3RzLgorCitUaGlzIGxheW91dCBjYW4gYmUgdXNlZCBmb3IgQmF6
YWFyLCBidXQgaXQgaXMgbm90IGdlbmVyYWxseSByZWNvbW1lbmRlZC4KKworIDEpIGBgYnpyIGJy
YW5jaC9jaGVja291dC9nZXRgYCBpcyBhIHNpbmdsZSBicmFuY2ggYXQgYSB0aW1lLiAKKyAgICBT
byB5b3UgZG9uJ3QgZ2V0IHRoZSBiZW5lZml0IG9mIGdldHRpbmcgYWxsIG1haW5saW5lcyB3aXRo
IGEgc2luZ2xlIGNvbW1hbmQuIFsxXV8KKworIDIpIEl0IGlzIGxlc3Mgb2J2aW91cyBvZiB3aGV0
aGVyIGBgcmVwb3NpdG9yeS90cnVuay9mb29gYCBpcyB0aGUgYGB0cnVua2BgIG9mIHByb2plY3Qg
CisgICAgYGBmb29gYCBvciBpdCBpcyBqdXN0IHRoZSBgYGZvb2BgIGRpcmVjdG9yeSBpbiB0aGUg
YGB0cnVua2BgIGJyYW5jaC4KKyAgICBTb21lIG9mIHRoaXMgY29uZnVzaW9uIGlzIGR1ZSB0byBT
Vk4sIGJlY2F1c2UgaXQgdXNlcyB0aGUgc2FtZSAibmFtZXNwYWNlIiAKKyAgICBmb3IgZmlsZXMg
aW4gYSBwcm9qZWN0IHRoYXQgaXQgdXNlcyBmb3IgYnJhbmNoZXMgb2YgYSBwcm9qZWN0LgorICAg
IEluIEJhemFhciwgdGhlcmUgaXMgYSBjbGVhciBkaXN0aW5jdGlvbiBvZiB3aGF0IGZpbGVzIG1h
a2UgdXAgYSBwcm9qZWN0LCB2ZXJzdXMKKyAgICB0aGUgbG9jYXRpb24gb2YgdGhlIEJyYW5jaC4g
KEFmdGVyIGFsbCwgdGhlcmUgaXMgb25seSBvbmUgYGAuYnpyL2BgIGRpcmVjdG9yeSBwZXIgYnJh
bmNoLAorICAgIHZlcnN1cyBtYW55IGBgLnN2bi9gYCBkaXJlY3RvcmllcyBpbiB0aGUgY2hlY2tv
dXQpLgorCisuLiBbMV0gTm90ZTogYE5lc3RlZFRyZWVTdXBwb3J0YF8gY2FuIHByb3ZpZGUgYSB3
YXkgdG8gY3JlYXRlICJtZXRhLXByb2plY3RzIiB3aGljaAorICAgIGFnZ3JlZ2F0ZSBtdWx0aXBs
ZSBwcm9qZWN0cyByZWdhcmRsZXNzIG9mIHRoZSByZXBvc2l0b3J5IGxheW91dC4KKyAgICBMZXR0
aW5nIHlvdSBgYGJ6ciBjaGVja291dGBgIG9uZSBwcm9qZWN0LCBhbmQgaGF2ZSBpdCBncmFiIGFs
bCB0aGUgbmVjZXNzYXJ5CisgICAgc3ViLXByb2plY3RzLgorCisuLiBfTmVzdGVkVHJlZVN1cHBv
cnQ6IGh0dHA6Ly9iYXphYXItdmNzLm9yZy9OZXN0ZWRUcmVlcworCisKK05lc3RlZCBTdHlsZSAo
YGBwcm9qZWN0L2JyYW5jaC9zdWItYnJhbmNoL2BgKQorPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisKK0Fub3RoZXIgc3R5bGUgd2l0aCBCYXphYXIsIHdoaWNo
IGlzIG5vdCBnZW5lcmFsbHkgcG9zc2libGUgaW4gU1ZOCitpcyB0byBoYXZlIGJyYW5jaGVzIG5l
c3RlZCB3aXRoaW4gZWFjaC1vdGhlci4KK1RoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBCYXphYXIg
c3VwcG9ydHMgKGFuZCByZWNvbW1lbmRzKSBjcmVhdGluZyByZXBvc2l0b3JpZXMKK3dpdGggbm8g
d29ya2luZyB0cmVlcyAoYGAtLW5vLXRyZWVzYGApLgorV2l0aCBhIGBgLS1uby10cmVlc2BgIHJl
cG9zaXRvcnksIGJlY2F1c2UgdGhlIHdvcmtpbmcgZmlsZXMgYXJlIG5vdCBpbnRlcm1peGVkIHdp
dGgKK3lvdXIgYnJhbmNoIGxvY2F0aW9ucywgeW91IGFyZSBmcmVlIHRvIHB1dCBhIGJyYW5jaCBp
biB3aGF0ZXZlciBuYW1lc3BhY2UgeW91IHdhbnQuCisKK09uZSBwb3NzaWJpbGl0eSBpczo6CisK
KyAgcHJvamVjdC8gICAgICAgICAgICAgIyBUaGUgb3ZlcmFsbCByZXBvc2l0b3J5LCAqYW5kKiB0
aGUgcHJvamVjdCdzIG1haW5saW5lIGJyYW5jaAorICAgKyBqb2UvICAgICAgICAgICAgICAjIERl
dmVsb3BlciBKb2UncyBwcmltYXJ5IGJyYW5jaCBvZiBkZXZlbG9wbWVudAorICAgfCAgKy0gZmVh
dHVyZTEvICAgICAjIERldmVsb3BlciBKb2UncyBmZWF0dXJlMSBkZXZlbG9wbWVudCBicmFuY2gK
KyAgIHwgIHwgICArLSBicm9rZW4vICAgIyBBIHN0YWdpbmcgYnJhbmNoIGZvciBKb2UgdG8gZGV2
ZWxvcCBmZWF0dXJlMQorICAgfCAgKy0gZmVhdHVyZTIvICAgICAjIEpvZSdzIGZlYXR1cmUyIGRl
dmVsb3BtZW50IGJyYW5jaAorICAgfCAgICAuLi4KKyAgICsgYmFycnkvICAgICAgICAgICAgIyBC
YXJyeSdzIGRldmVsb3BtZW50IGJyYW5jaAorICAgfCAgLi4uCisgICArIHJlbGVhc2VzLworICAg
ICAgKy0gMS4wLworICAgICAgICAgICstIDEuMS4xLworCitUaGUgaWRlYSB3aXRoIHRoaXMgbGF5
b3V0IGlzIHRoYXQgeW91IGFyZSBjcmVhdGluZyBhIGhpZXJhcmNoaWNhbCBsYXlvdXQgZm9yIGJy
YW5jaGVzLiAKK1doZXJlIGNoYW5nZXMgZ2VuZXJhbGx5IGZsb3cgdXB3YXJkcyBpbiB0aGUgbmFt
ZXNwYWNlLiBJdCBhbHNvIGdpdmVzIHBlb3BsZSBhIGxpdHRsZQorY29ybmVyIG9mIHRoZSBuYW1l
c3BhY2UgdG8gd29yayBvbiB0aGVpciBzdHVmZi4KK09uZSBuaWNlIGZlYXR1cmUgb2YgdGhpcyBs
YXlvdXQsIGlzIGl0IG1ha2VzIGJyYW5jaGluZyAiY2hlYXBlciIgYmVjYXVzZSBpdCBnaXZlcyB5
b3UKK2EgcGxhY2UgdG8gcHV0IGFsbCB0aGUgbWluaSBicmFuY2hlcyB3aXRob3V0IGNsdXR0ZXJp
bmcgdXAgdGhlIGdsb2JhbCBgYGJyYW5jaGVzL2BgIG5hbWVzcGFjZS4KKworVGhlIG90aGVyIHBv
d2VyIG9mIHRoaXMgaXMgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byByZXBlYXQgeW91cnNlbGYgd2hl
biBzcGVjaWZ5aW5nIG1vcmUgZGV0YWlsIGluIHRoZQorYnJhbmNoIG5hbWUuCisKK0ZvciBleGFt
cGxlIGNvbXBhcmU6OgorCisgIGJ6ciBicmFuY2ggaHR0cDovL2hvc3QvcmVwb3NpdG9yeS9wcm9q
ZWN0L2JyYW5jaGVzL2pvZS1mZWF0dXJlLWZvby1idWdmaXgtMTAvCisKK1ZlcnN1czo6CisgIAor
ICBienIgYnJhbmNoIGh0dHA6Ly9ob3N0L3Byb2plY3Qvam9lL2Zvby9idWdmaXgtMTAKKworCitB
bHNvLCBpZiB5b3UgbGlzdCB0aGUgYGByZXBvc2l0b3J5L3Byb2plY3QvYnJhbmNoZXMvYGAgZGly
ZWN0b3J5IHlvdSBtaWdodCBzZWUgc29tZXRoaW5nIGxpa2U6OgorCisgIGJhcnJ5LWZlYXR1cmUt
YmFyLworICBiYXJyeS1idWdmaXgtMTAvCisgIGJhcnJ5LWJ1Z2ZpeC0xMi8KKyAgam9lLWJ1Z2Zp
eC0xMC8KKyAgam9lLWJ1Z2ZpeC0xMy8KKyAgam9lLWZyaXpiYW4vCisKK1ZlcnN1cyBoYXZpbmcg
dGhlc2UgYnJva2VuIG91dCBieSBkZXZlbG9wZXIuIAorSWYgdGhlIG51bWJlciBvZiBicmFuY2hl
cyBhcmUgc21hbGwsIGBgYnJhbmNoZXMvYGAgaGFzIHRoZSBuaWNlIGFkdmFudGFnZQorb2YgYmVp
bmcgYWJsZSB0byBzZWUgYWxsIGJyYW5jaGVzIGluIGEgc2luZ2xlIHZpZXcuCitJZiB0aGUgbnVt
YmVyIG9mIGJyYW5jaGVzIGlzIGxhcmdlLCBgYGJyYW5jaGVzL2BgIGhhcyB0aGUgZGlzdGluY3Qg
ZGlzYWR2YW50YWdlCitvZiBzZWVpbmcgYWxsIHRoZSBicmFuY2hlcyBpbiBhIHNpbmdsZSB2aWV3
IChpdCBiZWNvbWVzIGRpZmZpY3VsdCB0byBmaW5kIHRoZQorYnJhbmNoIHlvdSBhcmUgaW50ZXJl
c3RlZCBpbiwgd2hlbiB0aGVyZSBhcmUgMTAwIGJyYW5jaGVzIHRvIGxvb2sgdGhyb3VnaCkuCisK
K05lc3RlZCBicmFuY2hpbmcgc2VlbXMgdG8gc2NhbGUgYmV0dGVyIHRvIGxhcmdlciBudW1iZXIg
b2YgYnJhbmNoZXMuCitIb3dldmVyLCBlYWNoIGluZGl2aWR1YWwgYnJhbmNoIGlzIGxlc3MgZGlz
Y292ZXJhYmxlLiAKKyhlZy4gIklzIEpvZSB3b3JraW5nIG9uIGJ1Z2ZpeCAxMCBpbiBoaXMgZmVh
dHVyZSBmb28gYnJhbmNoLCBvciBoaXMgZmVhdHVyZSBiYXIgYnJhbmNoPyIpCisKK09uZSBvdGhl
ciBzbWFsbCBhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlOjoKKwor
ICAgYnpyIGJyYW5jaCBodHRwOi8vaG9zdC9wcm9qZWN0L3JlbGVhc2UvMS8xLzEKKyAgb3IKKyAg
IGJ6ciBicmFuY2ggaHR0cDovL2hvc3QvcHJvamVjdC9yZWxlYXNlLzEvMS8yCisKK1RvIGluZGlj
YXRlIHJlbGVhc2UgMS4xLjEgYW5kIDEuMS4yLiBUaGlzIGFnYWluIGRlcGVuZHMgb24gaG93IG1h
bnkgcmVsZWFzZXMgeW91IGhhdmUgCithbmQgd2hldGhlciB0aGUgZ2FpbiBvZiBzcGxpdHRpbmcg
dGhpbmdzIHVwIG91dHdlaWdocyB0aGUgYWJpbGl0eSB0byBzZWUgbW9yZSBhdCBhIGdsYW5jZS4K
KworCitTb3J0ZWQgYnkgU3RhdHVzIChgYGRldi9gYCwgYGBtZXJnZWQvYGAsIGBgZXhwZXJpbWVu
dGFsL2BgKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKworT25lIG90aGVyIHdheSB0byBicmVhayB1cCBicmFuY2hlcyBpcyB0byBz
b3J0IHRoZW0gYnkgdGhlaXIgY3VycmVudCBzdGF0dXMuCitTbyB5b3Ugd291bGQgZW5kIHVwIHdp
dGggYSBsYXlvdXQgc29tZXRoaW5nIGxpa2U6OgorCisgIHByb2plY3QvICAgICAgICAgICAgICAg
IyBPdmVyYWxsIGxheW91dAorICAgKy0gdHJ1bmsvICAgICAgICAgICAgICMgVGhlIGRldmVsb3Bt
ZW50IGZvY3VzIGJyYW5jaAorICAgKy0gZGV2LyAgICAgICAgICAgICAgICMgQ29udGFpbmVyIGRp
cmVjdG9yeSBmb3IgaW4tcHJvZ3Jlc3Mgd29yaworICAgfCAgICstIGpvZS1mZWF0dXJlMSAgICMg
Sm9lJ3MgY3VycmVudCBmZWF0dXJlLTEgYnJhbmNoCisgICB8ICAgKy0gYmFycnktYnVnZml4MTAg
IyBCYXJyeSdzIHdvcmsgZm9yIGJ1Z2ZpeCAxMAorICAgfCAgICAuLi4KKyAgICstIG1lcmdlZC8g
ICAgICAgICAgICAjIENvbnRhaW5lciBpbmRpY2F0aW5nIHRoZXNlIGJyYW5jaGVzIGhhdmUgYmVl
biBtZXJnZWQKKyAgIHwgICArLSBidWdmaXgtMTIgICAgICAjIEJ1Z2ZpeCB3aGljaCBoYXMgYWxy
ZWFkeSBiZWVuIG1lcmdlZC4KKyAgICstIGFiYW5kb25kZWQvICAgICAgICAjIEJyYW5jaGVzIHdo
aWNoIGFyZSBjb25zaWRlcmVkICdkZWFkLWVuZCcKKworCitUaGlzIGhhcyBhIGNvdXBsZSBiZW5l
Zml0cyBhbmQgZHJhd2JhY2tzLgorSXQgbGV0cyB5b3Ugc2VlIHdoYXQgYnJhbmNoZXMgYXJlIGFj
dGl2ZWx5IGJlaW5nIGRldmVsb3BlZCBvbiwgd2hpY2ggaXMgdXN1YWxseQorb25seSBhIHNtYWxs
IG51bWJlciwgdmVyc3VzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnJhbmNoZXMgZXZlciBjcmVhdGVk
LgorT2xkIGJyYW5jaGVzIGFyZSBub3QgbG9zdCAodmVyc3VzIGRlbGV0aW5nIHRoZW0pLCBidXQg
dGhleSBhcmUgImZpbGVkIGF3YXkiLAorc3VjaCB0aGF0IHRoZSBtb3JlIGxpa2VseSB5b3UgYXJl
IHRvIHdhbnQgYSBicmFuY2ggdGhlIGVhc2llciBpdCBpcyB0byBmaW5kLiAKKyhDb252ZXJzZWx5
LCBvbGRlciBicmFuY2hlcyBhcmUgbGlrZWx5IHRvIGJlIGhhcmRlciB0byBmaW5kKS4KKworVGhl
IGJpZ2dlc3QgZGlzYWR2YW50YWdlIHdpdGggdGhpcyBsYXlvdXQsIGlzIHRoYXQgYnJhbmNoZXMg
bW92ZSBhcm91bmQuCitXaGljaCBtZWFucyB0aGF0IGlmIHNvbWVvbmUgaXMgZm9sbG93aW5nIHRo
ZSBgYHByb2plY3QvZGV2L25ldy1mZWF0dXJlYGAgYnJhbmNoLAord2hlbiBpdCBnZXRzIG1lcmdl
ZCBpbnRvIGBgdHJ1bmsvYGAgc3VkZGVubHkgYGBienIgcHVsbGBgIGRvZXNuJ3QgbWlycm9yIHRo
ZSBicmFuY2gKK2ZvciB0aGVtIGFueW1vcmUgYmVjYXVzZSB0aGUgYnJhbmNoIGlzIG5vdyBhdCBg
YHByb2plY3QvbWVyZ2VkL25ldy1mZWF0dXJlYGAuCitUaGVyZSBhcmUgYSBjb3VwbGUgd2F5cyBh
cm91bmQgdGhpcy4gT25lIGlzIHRvIHVzZSBIVFRQIHJlZGlyZWN0cyB0byBwb2ludCBwZW9wbGUK
K3JlcXVlc3RpbmcgdGhlIG9sZCBicmFuY2ggdG8gdGhlIG5ldyBicmFuY2guIGBgYnpyYGAgPj0g
MC4xNSB3aWxsIGxldCB1c2VycyBrbm93Cit0aGF0IGBgaHR0cDovL29sZC9wYXRoIHJlZGlyZWN0
cyB0byBodHRwOi8vbmV3L3BhdGhgYC4gSG93ZXZlciwgdGhpcyBkb2Vzbid0IGhlbHAKK2lmIHBl
b3BsZSBhcmUgYWNjZXNzaW5nIGEgYnJhbmNoIHRocm91Z2ggbWV0aG9kcyBvdGhlciB0aGFuIEhU
VFAgKFNGVFAsIGxvY2FsIGZpbGVzeXN0ZW0sIGV0YykuCisKK0l0IHdvdWxkIGFsc28gYmUgcG9z
c2libGUgdG8gdXNlIGEgc3ltbGluayBmb3IgdGVtcG9yYXJ5IHJlZGlyZWN0aW5nIChhcyBsb25n
IGFzIHRoZSBzeW1saW5rCitpcyB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgaXQgc2hvdWxkIGNhdXNl
IGxpdHRsZSB0cm91YmxlKS4gSG93ZXZlciBldmVudHVhbGx5IHlvdSB3YW50IHRvCityZW1vdmUg
dGhlIHN5bWxpbmssIG9yIHlvdSBkb24ndCBnZXQgdGhlIGNsdXR0ZXIgcmVkdWN0aW9uIGJlbmVm
aXQuCitBbm90aGVyIHBvc3NpYmlsaXR5IGluc3RlYWQgb2YgYSBzeW1saW5rIGlzIHRvIHVzZSBh
IGBgQnJhbmNoUmVmZXJlbmNlYGAuIEl0IGlzIGN1cnJlbnRseQorZGlmZmljdWx0IHRvIGNyZWF0
ZSB0aGVzZSB0aHJvdWdoIHRoZSBgYGJ6cmBgIGNvbW1hbmQgbGluZSwgYnV0IGlmIHBlb3BsZSBm
aW5kIHRoZW0gdXNlZnVsCit0aGF0IGNvdWxkIGJlIGNoYW5nZWQuCitUaGlzIGlzIGFjdHVhbGx5
IGhvdyBgTGF1bmNocGFkYF8gYWxsb3dzIHlvdSB0byBgYGJ6ciBjaGVja291dCBodHRwczovL2xh
dW5jaHBhZC5uZXQvYnpyYGAuCitFZmZlY3RpdmVseSBhIGBgQnJhbmNoUmVmZXJlbmNlYGAgaXMg
YSBzeW1saW5rLCBidXQgaXQgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYW55IG90aGVyIFVSTC4K
K0lmIGl0IGlzIGV4dGVuZGVkIHRvIHN1cHBvcnQgcmVsYXRpdmUgcmVmZXJlbmNlcywgaXQgd291
bGQgZXZlbiB3b3JrIG92ZXIgaHR0cCwgc2Z0cCwgCithbmQgbG9jYWwgcGF0aHMuCisKKy4uIF9M
YXVuY2hwYWQ6IGh0dHBzOi8vbGF1bmNocGFkLm5ldAorCisKK1NvcnRlZCBieSBkYXRlL3JlbGVh
c2UvZXRjIChgYDIwMDYtMDYvYGAsIGBgMjAwNi0wNy9gYCwgYGAwLjgvYGAsIGBgMC45YGApCis9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCitBbm90aGVyIG1ldGhvZCBvZiBhbGxvd2luZyBzb21lIHNjYWxh
YmlsaXR5IHdoaWxlIGFsc28gYWxsb3dpbmcgdGhlCiticm93c2luZyBvZiAiY3VycmVudCIgYnJh
bmNoZXMuIEJhc2ljYWxseSwgdGhpcyB3b3JrcyBvbiB0aGUgYXNzdW1wdGlvbiAKK3RoYXQgYWN0
aXZlbHkgZGV2ZWxvcGVkIGJyYW5jaGVzIHdpbGwgYmUgIm5ldyIgYnJhbmNoZXMsIGFuZCBvbGRl
ciBicmFuY2hlcworYXJlIGVpdGhlciBtZXJnZWQgb3IgYWJhbmRvbmVkLgorCitCYXNpY2FsbHkg
dGhlIGRhdGUgbGF5b3V0IGxvb2tzIHNvbWV0aGluZyBsaWtlOjoKKworICBwcm9qZWN0LyAgICAg
ICAgICAgICAgICAjIE92ZXJhbGwgcHJvamVjdCByZXBvc2l0b3J5CisgICArLSB0cnVuay8gICAg
ICAgICAgICAgICMgR2VuZXJhbCBtYWlubGluZQorICAgKy0gMjAwNi0wNi8gICAgICAgICAgICAj
IGNvbnRhaW5pbmcgZGlyZWN0b3J5IGZvciBicmFuY2hlcyBjcmVhdGVkIGluIHRoaXMgbW9udGgK
KyAgIHwgICArLSBmZWF0dXJlMS8gICAgICAgIyBCcmFuY2ggb2YgInByb2plY3QiIGZvciAiZmVh
dHVyZTEiCisgICB8ICAgKy0gZmVhdHVyZTIvICAgICAgICMgQnJhbmNoIG9mICJwcm9qZWN0IiBm
b3IgImZlYXR1cmUyIgorICAgKy0gMjAwNS0wNS8gICAgICAgICAgICAjIENvbnRhaW5pbmcgZGly
ZWN0b3J5IGZvciBicmFuY2hlcyBjcmVhdGUgaW4gYSBkaWZmZXJlbnQgbW9udGgKKyAgICAgICAr
LSBmZWF0dXJlMy8KKyAgICAgICAuLi4KKworVGhpcyBhbnN3ZXJzIHRoZSBxdWVzdGlvbiAiV2hl
cmUgc2hvdWxkIEkgcHV0IG15IG5ldyBicmFuY2g/IiB2ZXJ5IHF1aWNrbHkuCitJZiBhIGZlYXR1
cmUgaXMgZGV2ZWxvcGVkIGZvciBhIGxvbmcgdGltZSwgaXQgaXMgZXZlbiByZWFzb25hYmxlIHRv
IGNvcHkgYQorYnJhbmNoIGludG8gdGhlIG5ld2VzdCBkYXRlLCBhbmQgY29udGludWUgd29ya2lu
ZyBvbiBpdCB0aGVyZS4KK0ZpbmRpbmcgYW4gYWN0aXZlIGJyYW5jaCBnZW5lcmFsbHkgbWVhbnMg
Z29pbmcgdG8gdGhlIG5ld2VzdCBkYXRlLCBhbmQKK2dvaW5nIGJhY2t3YXJkcyBmcm9tIHRoZXJl
LiAoQSBzbWFsbCBkaXNhZHZhbnRhZ2UgaXMgdGhhdCBtb3N0IGRpcmVjdG9yeQorbGlzdGluZ3Mg
c29ydCBvbGRlc3QgdG8gdGhlIHRvcCwgd2hpY2ggbWF5IG1lYW4gbW9yZSBzY3JvbGxpbmcpLgor
SWYgeW91IGRvbid0IGNvcHkgb2xkIGJyYW5jaGVzIHRvIG5ld2VyIGxvY2F0aW9ucywgaXQgYWxz
byBoYXMgdGhlIGRpc2FkdmFudGFnZQordGhhdCBzZWFyY2hpbmcgZm9yIGEgYnJhbmNoIG1heSB0
YWtlIGEgd2hpbGUuCisKK0Fub3RoZXIgdmFyaWFudCBpcyBieSByZWxlYXNlIHRhcmdldDo6CisK
KyAgcHJvamVjdC8gICAgICAgICAgIyBPdmVyYWxsIHJlcG9zaXRvcnkKKyAgICstIHRydW5rLyAg
ICAgICAgIyBNYWlubGluZSBkZXZlbG9wbWVudCBicmFuY2gKKyAgICstIHJlbGVhc2VzLyAgICAg
IyBDb250YWluZXIgZm9yIHJlbGVhc2UgYnJhbmNoZXMKKyAgIHwgICArLSAwLjgvICAgICAgIyBU
aGUgYnJhbmNoIGZvciByZWxlYXNlIDAuOAorICAgfCAgICstIDAuOS8gICAgICAjIFRoZSBicmFu
Y2ggZm9yIHJlbGVhc2UgMC45CisgICArLSAwLjgvICAgICAgICAgICMgQ29udGFpbmVyIGZvciBi
cmFuY2hlcyB0YXJnZXRpbmcgcmVsZWFzZSAwLjgKKyAgIHwgICArLSBmZWF0dXJlMS8gIyBCcmFu
Y2ggZm9yICJmZWF0dXJlMSIgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgbWVyZ2VkIGludG8gMC44
CisgICB8ICAgKy0gZmVhdHVyZTIvICMgQnJhbmNoIGZvciAiZmVhdHVyZTIiIHdoaWNoIGlzIHRh
cmdldGVkIGZvciAwLjgKKyAgICstIDAuOS8KKyAgICAgICArLSBmZWF0dXJlMy8gIyBCcmFuY2gg
Zm9yICJmZWF0dXJlMyIsIHRhcmdldGVkIGZvciByZWxlYXNlIDAuOQorCisKK1NvbWUgcG9zc2li
bGUgdmFyaWFudHMgaW5jbHVkZSBoYXZpbmcgdGhlIGBgMC45YGAgZGlyZWN0b3J5IGltcGx5Cit0
aGF0IGl0IGlzIGJyYW5jaGVkICpmcm9tKiAwLjkgcmF0aGVyIHRoYW4gKmZvciogMC45LCBvciBo
YXZpbmcgdGhlIGBgMC44L3JlbGVhc2VgYAorYXMgdGhlIG9mZmljaWFsIHJlbGVhc2UgMC44IGJy
YW5jaC4KKworVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IGJ5IHRhcmdldGluZyBhIHJlbGVhc2Us
IHlvdSBjYW4gbG9vayBhdCB3aGF0IGJyYW5jaGVzIGFyZQord2FpdGluZyB0byBiZSBtZXJnZWQu
IEl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgZ2l2ZSB5b3UgYSBnb29kIGlkZWEgb2Ygd2hhdCB0aGUK
K3N0YXRlIG9mIHRoZSBicmFuY2ggKGlzIGl0IGluIGRldmVsb3BtZW50IG9yIGZpbmlzaGVkIGF3
YWl0aW5nIHJldmlldykuCitJdCBhbHNvIGhhcyBhIGhpc3RvcnktaGlkaW5nIGVmZmVjdCwgYW5k
IG90aGVyd2lzZSBoYXMgdGhlIHNhbWUgYmVuZWZpdHMgCithbmQgZGVmaWNpdHMgYXMgYSBkYXRl
LWJhc2VkIHNvcnRpbmcuIAorCisKK1NpbXBsZSBkZXZlbG9wZXIgbmFtaW5nIChgYHByb2plY3Qv
am9lL2Zvb2BgLCBgYHByb2plY3QvYmFycnkvYmFyYGApCis9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbm90aGVy
IHBvc3NpYmx5IGxheW91dCBpcyB0byBnaXZlIGVhY2ggZGV2ZWxvcGVyIGEgZGlyZWN0b3J5LCBh
bmQgdGhlbgoraGF2ZSBhIHNpbmdsZSBzdWItZGlyZWN0b3J5IGZvciBicmFuY2hlcy4gU29tZXRo
aW5nIGxpa2U6OgorCisgIHByb2plY3QvICAgICAgIyBPdmVyYWxsIHJlcG9zaXRvcnkKKyAgICst
IHRydW5rLyAgICAjIE1haW5saW5lIGJyYW5jaAorICAgKy0gam9lLyAgICAgICMgQSBjb250YWlu
ZXIgZm9yIEpvZSdzIGJyYW5jaGVzCisgICB8ICAgKy0gZm9vLyAgIyBKb2UncyAiZm9vIiBicmFu
Y2ggb2YgInByb2plY3QiCisgICArLSBiYXJyeS8KKyAgICAgICArLSBiYXIvICAjIEJhcnJ5J3Mg
ImJhciIgYnJhbmNoIG9mICJwcm9qZWN0IgorCitUaGUgaWRlYSBpcyB0aGF0IG5vIGJyYW5jaCBp
cyAibmVzdGVkIiB1bmRlcm5lYXRoIGFub3RoZXIgb25lLCBqdXN0IHRoYXQgZWFjaCBkZXZlbG9w
ZXIKK2hhcyBoaXMvaGVyIGJyYW5jaGVzIGdyb3VwZWQgdG9nZXRoZXIuCisKK0EgdmFyaWFudCB3
aGljaCBpcyB1c2VkIGJ5IGBMYXVuY2hwYWRgXyBpczo6CisKKyAgcmVwb3NpdG9yeS8KKyAgICst
IGpvZS8gICAgICAgICAgICAgIyBKb2UncyBicmFuY2hlcworICAgfCAgICstIHByb2plY3QxLyAg
ICAjIENvbnRhaW5lciBmb3IgSm9lJ3MgYnJhbmNoZXMgb2YgInByb2plY3QxIgorICAgfCAgIHwg
ICArLSBmb28vICAgICAjIEpvZSdzICJmb28iIGJyYW5jaCBvZiAicHJvamVjdDEiCisgICB8ICAg
Ky0gcHJvamVjdDIvICAgICMgQ29udGFpbmVyIGZvciBKb2UncyAicHJvamVjdDIiIGJyYW5jaGVz
CisgICB8ICAgICAgICstIGJhci8gICAgICMgSm9lJ3MgImJhciIgYnJhbmNoIG9mICJwcm9qZWN0
MiIKKyAgIHwgICAgICAgIC4uLgorICAgfAorICAgKy0gYmFycnkvCisgICB8ICAgKy0gcHJvamVj
dDEvICAgICMgQ29udGFpbmVyIGZvciBCYXJyeSdzIGJyYW5jaGVzIG9mICJwcm9qZWN0MSIKKyAg
IHwgICAgICAgKy0gYnVnLTEwLyAgIyBCYXJyeSdzICJidWctMTAiIGJyYW5jaCBvZiAicHJvamVj
dDEiCisgICB8ICAgLi4uCisgICArLSBncm91cC8KKyAgICAgICArLSBwcm9qZWN0MS8KKyAgICAg
ICAgICAgKy0gdHJ1bmsvICAgIyBUaGUgbWFpbiBkZXZlbG9wbWVudCBmb2N1cyBmb3IgInByb2pl
Y3QxIgorCisKK1RoaXMgbGV0cyB5b3UgZWFzaWx5IGJyb3dzZSB3aGF0IGVhY2ggZGV2ZWxvcGVy
IGlzIHdvcmtpbmcgb24uIEZvY3VzIGJyYW5jaGVzCithcmUga2VwdCBpbiBhICJncm91cCIgZGly
ZWN0b3J5LCB3aGljaCBsZXRzIHlvdSBzZWUgd2hhdCBicmFuY2hlcyB0aGUgImdyb3VwIgoraXMg
d29ya2luZyBvbi4KKworVGhpcyBrZWVwcyBkaWZmZXJlbnQgcGVvcGxlJ3Mgd29yayBzZXBhcmF0
ZWQgZnJvbSBlYWNoLW90aGVyLCBidXQgYWxzbyBtYWtlcyBpdAoraGFyZCB0byBmaW5kICJhbGwg
YnJhbmNoZXMgZm9yIHByb2plY3QgWCIuIGBMYXVuY2hwYWRgXyBjb21wZW5zYXRlcyBmb3IgdGhp
cworYnkgcHJvdmlkaW5nIGEgbmljZSB3ZWIgaW50ZXJmYWNlIHdpdGggYSBkYXRhYmFzZSBiYWNr
IGVuZCwgd2hpY2ggYWxsb3dzIGEKKyJ2aWV3IiB0byBiZSBwdXQgb24gdG9wIG9mIHRoaXMgbGF5
b3V0LgorVGhpcyBpcyBjbG9zZXIgdG8gdGhlIG1vZGVsIG9mIHBlb3BsZSdzIGhvbWUgcGFnZXMs
IHdoZXJlIGVhY2ggcGVyc29uIGhhcyBhCisiYGB+L3B1YmxpY19odG1sYGAiIGRpcmVjdG9yeSB3
aGVyZSB0aGV5IGNhbiBwdWJsaXNoIHRoZWlyIG93biB3ZWItcGFnZXMuCitJbiBnZW5lcmFsLCB0
aG91Z2gsIHdoZW4geW91IGFyZSBjcmVhdGluZyBhIHNoYXJlZCByZXBvc2l0b3J5IGZvciBjZW50
cmFsaXphdGlvbgorb2YgYSBwcm9qZWN0LCB5b3UgZG9uJ3Qgd2FudCB0byBzcGxpdCBpdCB1cCBi
eSBwZXJzb24gYW5kIHRoZW4gcHJvamVjdC4KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gc3Bs
aXQgaXQgdXAgYnkgcHJvamVjdCBhbmQgdGhlbiBieSBwZXJzb24uCisKKworU3VtbWFyeQorPT09
PT09PQorCitJbiB0aGUgZW5kLCBubyBzaW5nbGUgbmFtaW5nIHNjaGVtZSB3aWxsIHdvcmsgZm9y
IGV2ZXJ5b25lLiBJdCBkZXBlbmRzIGEgbG90IG9uCit0aGUgbnVtYmVyIG9mIGRldmVsb3BlcnMs
IGhvdyBvZnRlbiB5b3UgY3JlYXRlIGEgbmV3IGJyYW5jaCwgd2hhdCBzb3J0IG9mCitsaWZlY3lj
bGVzIHlvdXIgYnJhbmNoZXMgZ28gdGhyb3VnaC4gU29tZSBxdWVzdGlvbnMgdG8gYXNrIHlvdXJz
ZWxmOgorCisgIDEpIERvIHlvdSBjcmVhdGUgYSBmZXcgbG9uZy1saXZlZCBicmFuY2hlcywgb3Ig
ZG8geW91IGNyZWF0ZSBsb3RzIG9mICJtaW5pIiBmZWF0dXJlIGJyYW5jaGVzCisgICAgIChBbG9u
ZyB3aXRoIHRoaXMgaXM6IFdvdWxkIHlvdSAqbGlrZSogdG8gY3JlYXRlIGxvdHMgb2YgbWluaSBm
ZWF0dXJlIGJyYW5jaGVzLCBidXQgY2FuJ3QKKyAgICAgYmVjYXVzZSB0aGV5IGFyZSBhIHBhaW4g
aW4geW91ciBjdXJyZW50IFZDUz8pCisKKyAgMikgQXJlIHlvdSBhIHNpbmdsZSBkZXZlbG9wZXIs
IG9yIGEgbGFyZ2UgdGVhbT8KKworICAzKSBJZiBhIHRlYW0sIGRvIHlvdSBwbGFuIG9uIGdlbmVy
YWxseSBoYXZpbmcgZXZlcnlvbmUgd29ya2luZyBvbiB0aGUgc2FtZSBicmFuY2ggYXQgdGhlIHNh
bWUKKyAgICAgdGltZT8gT3Igd2lsbCB5b3UgaGF2ZSBhICJzdGFibGUiIGJyYW5jaCB0aGF0IHBl
b3BsZSBhcmUgZXhwZWN0ZWQgdG8gdHJhY2suCisKCg==

=== added directory man1 // file-id:man1-20070418045910-74ew7wm1oqo2tfv0-1 // l
... ast-changed:robertc@robertcollins.net-20070419022744-pfdqz42kp1wizh43
=== added file tools/bzr_epydoc // file-id:bzr_epydoc-20070409231252-ec7uffstn6
... 2q7nhv-1 // last-changed:john@arbash-meinel.com-20070412202742-4cr2qmchdfe9
... mg7n // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgdG9vbHMvYnpyX2VweWRvYwpAQCAtMCwwICsxLDE0IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ2FsbCB0aGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBm
b3IgRXB5ZG9jLgorIworCisiIiJXcmFwcGVyIGFyb3VuZCBFcHlkb2MgdGhhdCBqdXN0IG1ha2Vz
IGl0IHVuZGVyc3RhbmQgYnpyJ3MgbGF6eSBpbXBvcnRzLiIiIgorCisjIFRoaXMgd2lsbCBlbmFi
bGUgdGhlIGxhenlfaW1wb3J0IGNvbXBhdGliaWxpdHkgY29kZQoraW1wb3J0IGJ6cl9lcHlkb2Nf
dWlkCisKK2Zyb20gZXB5ZG9jLmNsaSBpbXBvcnQgY2xpCitjbGkoKQorCisKCg==

=== added file tools/bzr_epydoc_uid.py // file-id:bzr_epydoc_uid.py-20070409231
... 252-ec7uffstn62q7nhv-2 // last-changed:john@arbash-meinel.com-2007041220274
... 2-4cr2qmchdfe9mg7n // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgdG9vbHMvYnpyX2VweWRvY191aWQucHkKQEAgLTAsMCArMSw0MyBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIx
MTEtMTMwNyAgVVNBCisKKyIiIk1vbmtleSBwYXRjaCB0byBtYWtlIGVweWRvYyB3b3JrIHdpdGgg
YnpybGliJ3MgbGF6eSBpbXBvcnRzLiIiIgorCitpbXBvcnQgZXB5ZG9jLnVpZAorCitpbXBvcnQg
YnpybGliLmxhenlfaW1wb3J0CisKKworX09iamVjdFVJRCA9IGVweWRvYy51aWQuT2JqZWN0VUlE
CitfU2NvcGVSZXBsYWNlciA9IGJ6cmxpYi5sYXp5X2ltcG9ydC5TY29wZVJlcGxhY2VyCisKKwor
Y2xhc3MgT2JqZWN0VUlEKF9PYmplY3RVSUQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9i
aik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBfU2NvcGVSZXBsYWNlcik6CisgICAgICAg
ICAgICAjIFRoZSBpc2luc3RhbmNlIHdpbGwgdHJpZ2dlciBhIHJlcGxhY2VtZW50IGlmIGl0IGlz
IGEgcmVhbAorICAgICAgICAgICAgIyBfQnpyU2NvcGVSZXBsYWNlciwgYnV0IHRoZSBsb2NhbCBv
YmplY3Qgd29uJ3Qga25vdyBhYm91dCBpdCwgc28KKyAgICAgICAgICAgICMgcmVwbGFjZSBpdCBs
b2NhbGx5LgorICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18ob2JqLCAn
X3JlYWxfb2JqJykKKyAgICAgICAgX09iamVjdFVJRC5fX2luaXRfXyhzZWxmLCBvYmopCisKKwor
ZXB5ZG9jLnVpZC5PYmplY3RVSUQgPSBPYmplY3RVSUQKKworCitfU2NvcGVSZXBsYWNlci5fc2hv
dWxkX3Byb3h5ID0gVHJ1ZQorCgo=

=== renamed file HACKING // doc/developers/HACKING // last-changed:robertc@robe
... rtcollins.net-20070507164814-wpagonutf4b5cf8s // encoding:base64
LS0tIEhBQ0tJTkcKKysrIGRvYy9kZXZlbG9wZXJzL0hBQ0tJTkcKQEAgLTEsMTQgKzEsMjI3IEBA
Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1HdWlkZWxpbmVzIGZvciBtb2RpZnlpbmcg
YnpyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09
CitCYXphYXIgRGV2ZWxvcGVyIEd1aWRlCis9PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIGNv
bnRlbnRzOjoKIAogKFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBpcyBhdmFp
bGFibGUgaW4gdGhlIGZpbGUgYGBIQUNLSU5HYGAKLWluIHRoZSBzb3VyY2UgdHJlZSwgb3IgYXQg
aHR0cDovL2RvYy5iYXphYXItdmNzLm9yZy9jdXJyZW50L2hhY2tpbmcuaHRtbCkKLQotT3ZlcmFs
bAotPT09PT09PQoraW4gdGhlIHNvdXJjZSB0cmVlLCBvciBhdCBodHRwOi8vZG9jLmJhemFhci12
Y3Mub3JnL2J6ci5kZXYvaGFja2luZy5odG1sKQorCisKK0dldHRpbmcgU3RhcnRlZAorIyMjIyMj
IyMjIyMjIyMjCisKK0V4cGxvcmluZyB0aGUgQmF6YWFyIFBsYXRmb3JtCis9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCitCZWZvcmUgbWFraW5nIGNoYW5nZXMsIGl0J3MgYSBnb29kIGlk
ZWEgdG8gZXhwbG9yZSB0aGUgd29yayBhbHJlYWR5Citkb25lIGJ5IG90aGVycy4gUGVyaGFwcyB0
aGUgbmV3IGZlYXR1cmUgb3IgaW1wcm92ZW1lbnQgeW91J3JlIGxvb2tpbmcKK2ZvciBpcyBhdmFp
bGFibGUgaW4gYW5vdGhlciBwbHVnLWluIGFscmVhZHk/IElmIHlvdSBmaW5kIGEgYnVnLAorcGVy
aGFwcyBzb21lb25lIGVsc2UgaGFzIGFscmVhZHkgZml4ZWQgaXQ/CisKK1RvIGFuc3dlciB0aGVz
ZSBxdWVzdGlvbnMgYW5kIG1vcmUsIHRha2UgYSBtb21lbnQgdG8gZXhwbG9yZSB0aGUKK292ZXJh
bGwgQmF6YWFyIFBsYXRmb3JtLiBIZXJlIGFyZSBzb21lIGxpbmtzIHRvIGJyb3dzZToKKworKiBU
aGUgUGx1Z2lucyBwYWdlIG9uIHRoZSBXaWtpIC0gaHR0cDovL2JhemFhci12Y3Mub3JnL0J6clBs
dWdpbnMKKworKiBUaGUgQmF6YWFyIHByb2R1Y3QgZmFtaWx5IG9uIExhdW5jaHBhZCAtIGh0dHBz
Oi8vbGF1bmNocGFkLm5ldC9iYXphYXIKKworKiBCdWcgVHJhY2tlciBmb3IgdGhlIGNvcmUgcHJv
ZHVjdCAtIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2J6ci8KKworKiBCbHVlcHJpbnQgVHJh
Y2tlciBmb3IgdGhlIGNvcmUgcHJvZHVjdCAtIGh0dHBzOi8vYmx1ZXByaW50cy5sYXVuY2hwYWQu
bmV0L2J6ci8KKworSWYgbm90aGluZyBlbHNlLCBwZXJoYXBzIHlvdSdsbCBmaW5kIGluc3BpcmF0
aW9uIGluIGhvdyBvdGhlciBkZXZlbG9wZXJzCitoYXZlIHNvbHZlZCB0aGVpciBjaGFsbGVuZ2Vz
LgorCisKK1BsYW5uaW5nIGFuZCBEaXNjdXNzaW5nIENoYW5nZXMKKz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworVGhlcmUgaXMgYSB2ZXJ5IGFjdGl2ZSBjb21tdW5pdHkgYXJvdW5k
IEJhemFhci4gTW9zdGx5IHdlIG1lZXQgb24gSVJDCisoI2J6ciBvbiBpcmMuZnJlZW5vZGUubmV0
KSBhbmQgb24gdGhlIG1haWxpbmcgbGlzdC4gVG8gam9pbiB0aGUgQmF6YWFyCitjb21tdW5pdHks
IHNlZSBodHRwOi8vYmF6YWFyLXZjcy5vcmcvQnpyU3VwcG9ydC4KKworSWYgeW91IGFyZSBwbGFu
bmluZyB0byBtYWtlIGEgY2hhbmdlLCBpdCdzIGEgdmVyeSBnb29kIGlkZWEgdG8gbWVudGlvbiBp
dAorb24gdGhlIElSQyBjaGFubmVsIGFuZC9vciBvbiB0aGUgbWFpbGluZyBsaXN0LiBUaGVyZSBh
cmUgbWFueSBhZHZhbnRhZ2VzCit0byBpbnZvbHZpbmcgdGhlIGNvbW11bml0eSBiZWZvcmUgeW91
IHNwZW5kIG11Y2ggdGltZSBvbiBhIGNoYW5nZS4KK1RoZXNlIGluY2x1ZGU6CisKKyogeW91IGdl
dCB0byBidWlsZCBvbiB0aGUgd2lzZG9tIG9uIG90aGVycywgc2F2aW5nIHRpbWUKKworKiBpZiBv
dGhlcnMgY2FuIGRpcmVjdCB5b3UgdG8gc2ltaWxhciBjb2RlLCBpdCBtaW5pbWlzZXMgdGhlIHdv
cmsgdG8gYmUgZG9uZSAKKworKiBpdCBhc3Npc3RzIGV2ZXJ5b25lIGluIGNvb3JkaW5hdGluZyBk
aXJlY3Rpb24sIHByaW9yaXRpZXMgYW5kIGVmZm9ydC4KKworSW4gc3VtbWFyeSwgbWF4aW1pc2lu
ZyB0aGUgaW5wdXQgZnJvbSBvdGhlcnMgdHlwaWNhbGx5IG1pbmltaXNlcyB0aGUKK3RvdGFsIGVm
Zm9ydCByZXF1aXJlZCB0byBnZXQgeW91ciBjaGFuZ2VzIG1lcmdlZC4gVGhlIGNvbW11bml0eSBp
cworZnJpZW5kbHksIGhlbHBmdWwgYW5kIGFsd2F5cyBrZWVuIHRvIHdlbGNvbWUgbmV3Y29tZXJz
LgorCisKK0JhemFhciBEZXZlbG9wbWVudCBpbiBhIE51dHNoZWxsCis9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCitMb29raW5nIGZvciBhIDEwIG1pbnV0ZSBpbnRyb2R1Y3Rpb24g
dG8gc3VibWl0dGluZyBhIGNoYW5nZT8KK1NlZSBodHRwOi8vYmF6YWFyLXZjcy5vcmcvQnpyR2l2
aW5nQmFjay4KKworVE9ETzogTWVyZ2UgdGhhdCBXaWtpIHBhZ2UgaW50byB0aGlzIGRvY3VtZW50
LgorCisKK1VuZGVyc3RhbmRpbmcgdGhlIERldmVsb3BtZW50IFByb2Nlc3MKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGRldmVsb3BtZW50IHRlYW0gZm9sbG93
cyBtYW55IGJlc3QtcHJhY3RpY2VzIGluY2x1ZGluZzoKKworKiBhIHB1YmxpYyByb2FkbWFwIGFu
ZCBwbGFubmluZyBwcm9jZXNzIGluIHdoaWNoIGFueW9uZSBjYW4gcGFydGljaXBhdGUKKworKiB0
aW1lIGJhc2VkIG1pbGVzdG9uZXMgZXZlcnlvbmUgY2FuIHdvcmsgdG93YXJkcyBhbmQgcGxhbiBh
cm91bmQKKworKiBleHRlbnNpdmUgY29kZSByZXZpZXcgYW5kIGZlZWRiYWNrIHRvIGNvbnRyaWJ1
dG9ycworCisqIGNvbXBsZXRlIGFuZCByaWdvcm91cyB0ZXN0IGNvdmVyYWdlIG9uIGFueSBjb2Rl
IGNvbnRyaWJ1dGVkCisKKyogYXV0b21hdGVkIHZhbGlkYXRpb24gdGhhdCBhbGwgdGVzdHMgc3Rp
bGwgcGFzcyBiZWZvcmUgY29kZSBpcyBtZXJnZWQKKyAgaW50byB0aGUgbWFpbiBjb2RlIGJyYW5j
aC4KKworVGhlIGtleSB0b29scyB3ZSB1c2UgdG8gZW5hYmxlIHRoZXNlIHByYWN0aWNlcyBhcmU6
CisKKyogTGF1bmNocGFkIC0gaHR0cHM6Ly9sYXVuY2hwYWQubmV0LworCisqIEJhemFhciAtIGh0
dHA6Ly9iYXphYXItdmNzLm9yZy8KKworKiBCdW5kbGUgQnVnZ3kgLSBodHRwOi8vYnVuZGxlYnVn
Z3kuYWFyb25iZW50bGV5LmNvbS8KKworKiBQYXRjaCBRdWV1ZSBNYW5hZ2VyIC0gaHR0cHM6Ly9s
YXVuY2hwYWQubmV0L3BxbS8KKworRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8v
YmF6YWFyLXZjcy5vcmcvQnpyRGV2ZWxvcG1lbnQuCisKKworQSBDbG9zZXIgTG9vayBhdCB0aGUg
TWVyZ2UgJiBSZXZpZXcgUHJvY2VzcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorCitJZiB5b3UnZCBsaWtlIHRvIHByb3Bvc2UgYSBjaGFuZ2UsIHBsZWFzZSBw
b3N0IHRvIHRoZQorYmF6YWFyQGxpc3RzLmNhbm9uaWNhbC5jb20gbGlzdCB3aXRoIGEgYnVuZGxl
LCBwYXRjaCwgb3IgbGluayB0byBhCiticmFuY2guIFB1dCAnW1BBVENIXScgb3IgJ1tNRVJHRV0n
IGluIHRoZSBzdWJqZWN0IHNvIEJ1bmRsZSBCdWdneQorY2FuIHBpY2sgaXQgb3V0LCBhbmQgZXhw
bGFpbiB0aGUgY2hhbmdlIGluIHRoZSBlbWFpbCBtZXNzYWdlIHRleHQuCitSZW1lbWJlciB0byB1
cGRhdGUgdGhlIE5FV1MgZmlsZSBhcyBwYXJ0IG9mIHlvdXIgY2hhbmdlIGlmIGl0IG1ha2VzIGFu
eQorY2hhbmdlcyB2aXNpYmxlIHRvIHVzZXJzIG9yIHBsdWdpbiBkZXZlbG9wZXJzLiBQbGVhc2Ug
aW5jbHVkZSBhIGRpZmYKK2FnYWluc3QgbWFpbmxpbmUgaWYgeW91J3JlIGdpdmluZyBhIGxpbmsg
dG8gYSBicmFuY2guCisKK1lvdSBjYW4gZ2VuZXJhdGUgYSBidW5kbGUgbGlrZSB0aGlzOjoKKwor
ICBienIgYnVuZGxlID4gbXlidW5kbGUucGF0Y2gKKyAgCitBIC5wYXRjaCBleHRlbnNpb24gaXMg
cmVjb21tZW5kZWQgaW5zdGVhZCBvZiAuYnVuZGxlIGFzIG1hbnkgbWFpbCBjbGllbnRzCit3aWxs
IHNlbmQgdGhlIGxhdHRlciBhcyBhIGJpbmFyeSBmaWxlLiBJZiBhIGJ1bmRsZSB3b3VsZCBiZSB0
b28gbG9uZyBvciB5b3VyCittYWlsZXIgbWFuZ2xlcyB3aGl0ZXNwYWNlIChlLmcuIGltcGxpY2l0
bHkgY29udmVydHMgVW5peCBuZXdsaW5lcyB0byBET1MKK25ld2xpbmVzKSwgdXNlIHRoZSBtZXJn
ZS1kaXJlY3RpdmUgY29tbWFuZCBpbnN0ZWFkIGxpa2UgdGhpczo6CisKKyAgYnpyIG1lcmdlLWRp
cmVjdGl2ZSBodHRwOi8vYmF6YWFyLXZjcy5vcmcgaHR0cDovL2V4YW1wbGUub3JnL215X2JyYW5j
aCA+IG15X2RpcmVjdGl2ZS5wYXRjaAorCitTZWUgdGhlIGhlbHAgZm9yIGRldGFpbHMgb24gdGhl
IGFyZ3VtZW50cyB0byBtZXJnZS1kaXJlY3RpdmUuCisKK1BsZWFzZSBkbyAqKk5PVCoqIHB1dCBb
UEFUQ0hdIG9yIFtNRVJHRV0gaW4gdGhlIHN1YmplY3QgbGluZSBpZiB5b3UgZG9uJ3QKK3dhbnQg
aXQgdG8gYmUgbWVyZ2VkLiBJZiB5b3Ugd2FudCBjb21tZW50cyBmcm9tIGRldmVsb3BlcnMgcmF0
aGVyIHRoYW4KK3RvIGJlIG1lcmdlZCwgeW91IGNhbiBwdXQgJ1tSRkNdJyBpbiB0aGUgc3ViamVj
dCBsaW5lLgorCitBbnlvbmUgaXMgd2VsY29tZSB0byByZXZpZXcgY29kZS4gIFRoZXJlIGFyZSBi
cm9hZGx5IHRocmVlIGdhdGVzIGZvcgorY29kZSB0byBnZXQgaW46CisKKyAqIERvZXNuJ3QgcmVk
dWNlIHRlc3QgY292ZXJhZ2U6IGlmIGl0IGFkZHMgbmV3IG1ldGhvZHMgb3IgY29tbWFuZHMsCisg
ICB0aGVyZSBzaG91bGQgYmUgdGVzdHMgZm9yIHRoZW0uICBUaGVyZSBpcyBhIGdvb2QgdGVzdCBm
cmFtZXdvcmsKKyAgIGFuZCBwbGVudHkgb2YgZXhhbXBsZXMgdG8gY3JpYiBmcm9tLCBidXQgaWYg
eW91IGFyZSBoYXZpbmcgdHJvdWJsZQorICAgd29ya2luZyBvdXQgaG93IHRvIHRlc3Qgc29tZXRo
aW5nIGZlZWwgZnJlZSB0byBwb3N0IGEgZHJhZnQgcGF0Y2gKKyAgIGFuZCBhc2sgZm9yIGhlbHAu
CisKKyAqIERvZXNuJ3QgcmVkdWNlIGRlc2lnbiBjbGFyaXR5LCBzdWNoIGFzIGJ5IGVudGFuZ2xp
bmcgb2JqZWN0cworICAgd2UncmUgdHJ5aW5nIHRvIHNlcGFyYXRlLiAgVGhpcyBpcyBtb3N0bHkg
c29tZXRoaW5nIHRoZSBtb3JlCisgICBleHBlcmllbmNlZCByZXZpZXdlcnMgbmVlZCB0byBoZWxw
IGNoZWNrLgorCisgKiBJbXByb3ZlcyBidWdzLCBmZWF0dXJlcywgc3BlZWQsIG9yIGNvZGUgc2lt
cGxpY2l0eS4KKworQ29kZSB0aGF0IGdvZXMgaW4gc2hvdWxkIHBhc3MgYWxsIHRocmVlLiBUaGUg
Y29yZSBkZXZlbG9wZXJzIHRha2UgY2FyZQordG8ga2VlcCB0aGUgY29kZSBxdWFsaXR5IGhpZ2gg
YW5kIHVuZGVyc3RhbmRhYmxlIHdoaWxlIHJlY29nbmlzaW5nIHRoYXQKK3BlcmZlY3QgaXMgc29t
ZXRpbWVzIHRoZSBlbmVteSBvZiBnb29kLiAoSXQgaXMgZWFzeSBmb3IgcmV2aWV3cyB0byBtYWtl
CitwZW9wbGUgbm90aWNlIG90aGVyIHRoaW5ncyB3aGljaCBzaG91bGQgYmUgZml4ZWQgYnV0IHRo
b3NlIHRoaW5ncyBzaG91bGQKK25vdCBob2xkIHVwIHRoZSBvcmlnaW5hbCBmaXggYmVpbmcgYWNj
ZXB0ZWQuIE5ldyB0aGluZ3MgY2FuIGVhc2lseSBiZQorcmVjb3JkZWQgaW4gdGhlIEJ1ZyBUcmFj
a2VyIGluc3RlYWQuKQorCitBbnlvbmUgY2FuICJ2b3RlIiBvbiB0aGUgbWFpbGluZyBsaXN0LiBD
b3JlIGRldmVsb3BlcnMgY2FuIGFsc28gdm90ZSB1c2luZworQnVuZGxlIEJ1Z2d5LiBIZXJlIGFy
ZSB0aGUgdm90aW5nIGNvZGVzIGFuZCB0aGVpciBleHBsYW5hdGlvbnMuCisKKyAgLTEJcmVhbGx5
IGRvbid0IHdhbnQgaXQgaW4gY3VycmVudCBmb3JtCisgIC0wCXNvbWV3aGF0IHVuY29tZm9ydGFi
bGUgCisgICswCWNvbWZvcnRhYmxlIGJ1dCByZXN1Ym1pc3Npb24gYWZ0ZXIgY2hhbmdlcyByZXF1
ZXN0ZWQKKyAgKzEgY29uZGl0aW9uYWwJZ29vZCB0byBnbyBhZnRlciBzb21lIG1pbm9yIGNoYW5n
ZXMKKyAgKzEJZ29vZCB0byBnbworCisrMSBjb25kaXRpb25hbCBpcyB1c2VkIGFzIGEgd2F5IHRv
IGF2b2lkIGFub3RoZXIgc3VibWl0L3JldmlldyBjeWNsZSBmb3IKK3BhdGNoZXMgdGhhdCBuZWVk
IHNtYWxsIGNoYW5nZXMuCisKK0lmIGEgY2hhbmdlIGdldHMgdHdvICsxIHZvdGVzIGZyb20gY29y
ZSByZXZpZXdlcnMsIGFuZCBubwordmV0b3MsIHRoZW4gaXQncyBPSyB0byBjb21lIGluLiAgQW55
IG9mIHRoZSBjb3JlIGRldmVsb3BlcnMgY2FuIGJyaW5nIGl0CitpbnRvIHRoZSBienIuZGV2IHRy
dW5rIGFuZCBiYWNrcG9ydCBpdCB0byBtYWludGVuYW5jZSBicmFuY2hlcyBpZiByZXF1aXJlZC4K
K1RoZSBSZWxlYXNlIE1hbmFnZXIgd2lsbCBtZXJnZSB0aGUgY2hhbmdlIGludG8gdGhlIGJyYW5j
aCBmb3IgYSBwZW5kaW5nCityZWxlYXNlLCBpZiBhbnkuIEFzIGEgZ3VpZGVsaW5lLCBjb3JlIGRl
dmVsb3BlcnMgdXN1YWxseSBtZXJnZSB0aGVpciBvd24KK2NoYW5nZXMgYW5kIHZvbHVudGVlciB0
byBtZXJnZSBvdGhlciBjb250cmlidXRpb25zIGlmIHRoZXkgd2VyZSB0aGUgc2Vjb25kCityZXZp
ZXdlciB0byBhZ3JlZSB0byBhIGNoYW5nZS4KKworVG8gdHJhY2sgdGhlIHByb2dyZXNzIG9mIHBy
b3Bvc2VkIGNoYW5nZXMsIHVzZSBCdW5kbGUgQnVnZ3kuIFNlZQoraHR0cDovL2J1bmRsZWJ1Z2d5
LmFhcm9uYmVudGxleS5jb20vaGVscCBmb3IgYSBsaW5rIHRvIGFsbCB0aGUKK291dHN0YW5kaW5n
IG1lcmdlIHJlcXVlc3RzIHRvZ2V0aGVyIHdpdGggYW4gZXhwbGFuYXRpb24gb2YgdGhlIGNvbHVt
bnMuCitCdW5kbGUgQnVnZ3kgd2lsbCBhbHNvIG1haWwgeW91IGEgbGluayB0byB0cmFjayBqdXN0
IHlvdXIgY2hhbmdlLgorCisKK1ByZXBhcmluZyBhIFNhbmRib3ggZm9yIE1ha2luZyBDaGFuZ2Vz
IHRvIEJhemFhcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisKK0JhemFhciBzdXBwb3J0cyBtYW55IHdheXMgb2Ygb3JnYW5pc2luZyB5b3VyIHdvcmsu
IFNlZQoraHR0cDovL2JhemFhci12Y3Mub3JnL1NoYXJlZFJlcG9zaXRvcnlMYXlvdXRzIGZvciBh
IHN1bW1hcnkgb2YgdGhlCitwb3B1bGFyIGFsdGVybmF0aXZlcy4KKworT2YgY291cnNlLCB0aGUg
YmVzdCBjaG9pY2UgZm9yIHlvdSB3aWxsIGRlcGVuZCBvbiBudW1lcm91cyBmYWN0b3JzOgordGhl
IG51bWJlciBvZiBjaGFuZ2VzIHlvdSBtYXkgYmUgbWFraW5nLCB0aGUgY29tcGxleGl0eSBvZiB0
aGUgY2hhbmdlcywgZXRjLgorQXMgYSBzdGFydGluZyBzdWdnZXN0aW9uIHRob3VnaDoKKworKiBj
cmVhdGUgYSBsb2NhbCBjb3B5IG9mIHRoZSBtYWluIGRldmVsb3BtZW50IGJyYW5jaCAoYnpyLmRl
dikgYnkgdXNpbmcKKyAgdGhpcyBjb21tYW5kOjoKKyAgCisgICAgYnpyIGJyYW5jaCBodHRwOi8v
YmF6YWFyLXZjcy5vcmcvYnpyL2J6ci5kZXYvIGJ6ci5kZXYKKyAgIAorKiBrZWVwIHlvdXIgY29w
eSBvZiBienIuZGV2IHByZXN0aW5lIChieSBub3QgZGV2ZWxvcGluZyBpbiBpdCkgYW5kIGtlZXAK
KyAgaXQgdXAgdG8gZGF0ZSAoYnkgdXNpbmcgYnpyIHB1bGwpCisKKyogY3JlYXRlIGEgbmV3IGJy
YW5jaCBvZmYgeW91ciBsb2NhbCBienIuZGV2IGNvcHkgZm9yIGVhY2ggaXNzdWUKKyAgKGJ1ZyBv
ciBmZWF0dXJlKSB5b3UgYXJlIHdvcmtpbmcgb24uCisKK1RoaXMgYXBwcm9hY2ggbWFrZXMgaXQg
ZWFzeSB0byBnbyBiYWNrIGFuZCBtYWtlIGFueSByZXF1aXJlZCBjaGFuZ2VzCithZnRlciBhIGNv
ZGUgcmV2aWV3LiBSZXN1Ym1pdHRpbmcgdGhlIGNoYW5nZSBpcyB0aGVuIHNpbXBsZSB3aXRoIG5v
CityaXNrIG9mIGFjY2lkZW50aWFsbHkgaW5jbHVkaW5nIGVkaXRzIHJlbGF0ZWQgdG8gb3RoZXIg
aXNzdWVzIHlvdSBtYXkKK2JlIHdvcmtpbmcgb24uIEFmdGVyIHRoZSBjaGFuZ2VzIGZvciBhbiBp
c3N1ZSBhcmUgYWNjZXB0ZWQgYW5kIG1lcmdlZCwKK3RoZSBhc3NvY2lhdGVkIGJyYW5jaCBjYW4g
YmUgZGVsZXRlZCBvciBhcmNoaXZlZCBhcyB5b3Ugd2lzaC4KKworCitOYXZpZ2F0aW5nIHRoZSBD
b2RlIEJhc2UKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUT0RPOiBMaXN0IGFuZCBkZXNj
cmliZSBpbiBvbmUgbGluZSB0aGUgcHVycG9zZSBvZiBlYWNoIGRpcmVjdG9yeQoraW5zaWRlIGFu
IGluc3RhbGxhdGlvbiBvZiBienIuCisKK1RPRE86IFJlZmVyIHRvIGEgY2VudHJhbCBsb2NhdGlv
biBob2xkaW5nIGFuIHVwIHRvIGRhdGUgY29weSBvZiB0aGUgQVBJCitkb2N1bWVudGF0aW9uIGdl
bmVyYXRlZCBieSBlcHlkb2MsIGUuZy4gc29tZXRoaW5nIGxpa2UKK2h0dHA6Ly9zdGFyc2hpcC5w
eXRob24ubmV0L2NyZXcvbXdoL2J6cmxpYmFwaS9ienJsaWIuaHRtbC4KKworCitUZXN0aW5nIEJh
emFhcgorIyMjIyMjIyMjIyMjIyMKKworVGhlIEltcG9ydGFuY2Ugb2YgVGVzdGluZworPT09PT09
PT09PT09PT09PT09PT09PT09PQorCitSZWxpYWJpbGl0eSBpcyBhIGNyaXRpY2FsIHN1Y2Nlc3Mg
ZmFjdG9yIGZvciBhbnkgVmVyc2lvbiBDb250cm9sIFN5c3RlbS4KK1dlIHdhbnQgQmF6YWFyIHRv
IGJlIGhpZ2hseSByZWxpYWJsZSBhY3Jvc3MgbXVsdGlwbGUgcGxhdGZvcm1zIHdoaWxlCitldm9s
dmluZyBvdmVyIHRpbWUgdG8gbWVldCB0aGUgbmVlZHMgb2YgaXRzIGNvbW11bml0eS4gCisKK0lu
IGEgbnV0c2hlbGwsIHRoaXMgaXMgd2FudCB3ZSBleHBlY3QgYW5kIGVuY291cmFnZToKIAogKiBO
ZXcgZnVuY3Rpb25hbGl0eSBzaG91bGQgaGF2ZSB0ZXN0IGNhc2VzLiAgUHJlZmVyYWJseSB3cml0
ZSB0aGUKICAgdGVzdCBiZWZvcmUgd3JpdGluZyB0aGUgY29kZS4KQEAgLTE2LDM3ICsyMjksMjI0
IEBACiAgIEluIGdlbmVyYWwsIHlvdSBjYW4gdGVzdCBhdCBlaXRoZXIgdGhlIGNvbW1hbmQtbGlu
ZSBsZXZlbCBvciB0aGUKICAgaW50ZXJuYWwgQVBJIGxldmVsLiAgU2VlIFdyaXRpbmcgVGVzdHMg
YmVsb3cgZm9yIG1vcmUgZGV0YWlsLgogCi0qIFRyeSB0byBwcmFjdGljZSBUZXN0LURyaXZlbiBE
ZXZlbG9wbWVudC4gIGJlZm9yZSBmaXhpbmcgYSBidWcsIHdyaXRlIGEKKyogVHJ5IHRvIHByYWN0
aWNlIFRlc3QtRHJpdmVuIERldmVsb3BtZW50OiBiZWZvcmUgZml4aW5nIGEgYnVnLCB3cml0ZSBh
CiAgIHRlc3QgY2FzZSBzbyB0aGF0IGl0IGRvZXMgbm90IHJlZ3Jlc3MuICBTaW1pbGFybHkgZm9y
IGFkZGluZyBhIG5ldwogICBmZWF0dXJlOiB3cml0ZSBhIHRlc3QgY2FzZSBmb3IgYSBzbWFsbCB2
ZXJzaW9uIG9mIHRoZSBuZXcgZmVhdHVyZSBiZWZvcmUKICAgc3RhcnRpbmcgb24gdGhlIGNvZGUg
aXRzZWxmLiAgQ2hlY2sgdGhlIHRlc3QgZmFpbHMgb24gdGhlIG9sZCBjb2RlLCB0aGVuCiAgIGFk
ZCB0aGUgZmVhdHVyZSBvciBmaXggYW5kIGNoZWNrIGl0IHBhc3Nlcy4KIAotKiBFeGNlcHRpb25z
IHNob3VsZCBiZSBkZWZpbmVkIGluc2lkZSBienJsaWIuZXJyb3JzLCBzbyB0aGF0IHdlIGNhbgot
ICBzZWUgdGhlIHdob2xlIHRyZWUgYXQgYSBnbGFuY2UuCi0KLSogSW1wb3J0cyBzaG91bGQgYmUg
ZG9uZSBhdCB0aGUgdG9wLWxldmVsIG9mIHRoZSBmaWxlLCB1bmxlc3MgdGhlcmUgaXMKLSAgYSBz
dHJvbmcgcmVhc29uIHRvIGhhdmUgdGhlbSBsYXppbHkgbG9hZGVkIHdoZW4gYSBwYXJ0aWN1bGFy
Ci0gIGZ1bmN0aW9uIHJ1bnMuICBJbXBvcnQgc3RhdGVtZW50cyBoYXZlIGEgY29zdCwgc28gdHJ5
IHRvIG1ha2Ugc3VyZQotICB0aGV5IGRvbid0IHJ1biBpbnNpZGUgaG90IGZ1bmN0aW9ucy4KLQot
KiBNb2R1bGUgbmFtZXMgc2hvdWxkIGFsd2F5cyBiZSBnaXZlbiBmdWxseS1xdWFsaWZpZWQsCi0g
IGkuZS4gYGBienJsaWIuaGFzaGNhY2hlYGAgbm90IGp1c3QgYGBoYXNoY2FjaGVgYC4KLQotKiBD
b21tYW5kcyBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIHdoZW4gdGhleSBlbmNvdW50ZXIgY2lyY3Vt
c3RhbmNlcyB0aGF0Ci0gIHRoZSB1c2VyIHNob3VsZCByZWFsbHkgcGF5IGF0dGVudGlvbiB0byAt
IHdoaWNoIGluY2x1ZGVzIHRyaXZpYWwgc2hlbGwKLSAgcGlwZWxpbmVzLgotCi0gIFJlY29tbWVu
ZGVkIHZhbHVlcyBhcmUgCi0gICAgMC4gT0ssIAotICAgIDEuIENvbmZsaWN0cyBpbiBtZXJnZS1s
aWtlIG9wZXJhdGlvbnMsIG9yIGNoYW5nZXMgYXJlIHByZXNlbnQgaW4KLSAgICAgICBkaWZmLWxp
a2Ugb3BlcmF0aW9ucy4gCi0gICAgMi4gVW5yZXByZXNlbnRhYmxlIGRpZmYgY2hhbmdlcyAoaS5l
LiBiaW5hcnkgZmlsZXMgdGhhdCB3ZSBjYW5ub3Qgc2hvdyAKLSAgICAgICBhIGRpZmYgb2YpLgot
ICAgIDMuIEFuIGVycm9yIG9yIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQuCi0KLUV2b2x2aW5nIGlu
dGVyZmFjZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0J5IGRvaW5nIHRoZXNlIHRoaW5ncywgdGhl
IEJhemFhciB0ZWFtIGdldHMgaW5jcmVhc2VkIGNvbmZpZGVuY2UgdGhhdAorY2hhbmdlcyBkbyB3
aGF0IHRoZXkgY2xhaW0gdG8gZG8sIHdoZXRoZXIgcHJvdmlkZWQgYnkgdGhlIGNvcmUgdGVhbSBv
cgorYnkgY29tbXVuaXR5IG1lbWJlcnMuIEVxdWFsbHkgaW1wb3J0YW50bHksIHdlIGNhbiBiZSBz
dXJlciB0aGF0IGNoYW5nZXMKK2Rvd24gdGhlIHRyYWNrIGRvIG5vdCBicmVhayBuZXcgZmVhdHVy
ZXMgb3IgYnVnIGZpeGVzIHRoYXQgeW91IGFyZQorY29udHJpYnV0aW5nIHRvZGF5LgorCitBcyBv
ZiBNYXkgMjAwNywgQmF6YWFyIHNoaXBzIHdpdGggYSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgb3Zl
ciA2MDAwIHRlc3RzCithbmQgZ3Jvd2luZy4gV2UgYXJlIHByb3VkIG9mIGl0IGFuZCB3YW50IHRv
IHJlbWFpbiBzby4gQXMgY29tbXVuaXR5CittZW1iZXJzLCB3ZSBhbGwgYmVuZWZpdCBmcm9tIGl0
LiBXb3VsZCB5b3UgdHJ1c3QgdmVyc2lvbiBjb250cm9sIG9uCit5b3VyIHByb2plY3QgdG8gYSBw
cm9kdWN0ICp3aXRob3V0KiBhIHRlc3Qgc3VpdGUgbGlrZSBCYXphYXIgaGFzPworCisKK1J1bm5p
bmcgdGhlIFRlc3QgU3VpdGUKKz09PT09PT09PT09PT09PT09PT09PT0KKworQ3VycmVudGx5LCBi
enIgc2VsZnRlc3QgaXMgdXNlZCB0byBpbnZva2UgdGVzdHMuCitZb3UgY2FuIHByb3ZpZGUgYSBw
YXR0ZXJuIGFyZ3VtZW50IHRvIHJ1biBhIHN1YnNldC4gRm9yIGV4YW1wbGUsIAordG8gcnVuIGp1
c3QgdGhlIGJsYWNrYm94IHRlc3RzLCBydW46OgorCisgIC4vYnpyIHNlbGZ0ZXN0IC12IGJsYWNr
Ym94CisKK1RvIHNraXAgYSBwYXJ0aWN1bGFyIHRlc3QgKG9yIHNldCBvZiB0ZXN0cyksIHVzZSB0
aGUgLS1leGNsdWRlIG9wdGlvbgorKHNob3J0aGFuZCAteCkgbGlrZSBzbzo6CisKKyAgLi9ienIg
c2VsZnRlc3QgLXYgLXggYmxhY2tib3ggIAorCitUbyBsaXN0IHRlc3RzIHdpdGhvdXQgcnVubmlu
ZyB0aGVtLCB1c2UgdGhlIC0tbGlzdC1vbmx5IG9wdGlvbiBsaWtlIHNvOjoKKworICAuL2J6ciBz
ZWxmdGVzdCAtLWxpc3Qtb25seQorCitUaGlzIG9wdGlvbiBjYW4gYmUgY29tYmluZWQgd2l0aCBv
dGhlciBzZWxmdGVzdCBvcHRpb25zIChsaWtlIC14KSBhbmQKK2ZpbHRlciBwYXR0ZXJucyB0byB1
bmRlcnN0YW5kIHRoZWlyIGVmZmVjdC4KKworCitXcml0aW5nIFRlc3RzCis9PT09PT09PT09PT09
CisKK0luIGdlbmVyYWwgdGVzdHMgc2hvdWxkIGJlIHBsYWNlZCBpbiBhIGZpbGUgbmFtZWQgdGVz
dF9GT08ucHkgd2hlcmUgCitGT08gaXMgdGhlIGxvZ2ljYWwgdGhpbmcgdW5kZXIgdGVzdC4gVGhh
dCBmaWxlIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCit0ZXN0cyBzdWJkaXJlY3RvcnkgdW5kZXIg
dGhlIHBhY2thZ2UgYmVpbmcgdGVzdGVkLgorCitGb3IgZXhhbXBsZSwgdGVzdHMgZm9yIG1lcmdl
MyBpbiBienJsaWIgYmVsb25nIGluIGJ6cmxpYi90ZXN0cy90ZXN0X21lcmdlMy5weS4KK1NlZSBi
enJsaWIvdGVzdHMvdGVzdF9zYW1wbGVyLnB5IGZvciBhIHRlbXBsYXRlIHRlc3Qgc2NyaXB0Lgor
CitUZXN0cyBjYW4gYmUgd3JpdHRlbiBmb3IgdGhlIFVJIG9yIGZvciBpbmRpdmlkdWFsIGFyZWFz
IG9mIHRoZSBsaWJyYXJ5LgorQ2hvb3NlIHdoaWNoZXZlciBpcyBhcHByb3ByaWF0ZTogaWYgYWRk
aW5nIGEgbmV3IGNvbW1hbmQsIG9yIGEgbmV3IGNvbW1hbmQgCitvcHRpb24sIHRoZW4geW91IHNo
b3VsZCBiZSB3cml0aW5nIGEgVUkgdGVzdC4gIElmIHlvdSBhcmUgYm90aCBhZGRpbmcgVUkKK2Z1
bmN0aW9uYWxpdHkgYW5kIGxpYnJhcnkgZnVuY3Rpb25hbGl0eSwgeW91IHdpbGwgd2FudCB0byB3
cml0ZSB0ZXN0cyBmb3IgCitib3RoIHRoZSBVSSBhbmQgdGhlIGNvcmUgYmVoYXZpb3Vycy4gIFdl
IGNhbGwgVUkgdGVzdHMgJ2JsYWNrYm94JyB0ZXN0cworYW5kIHRoZXkgYXJlIGZvdW5kIGluIGBg
YnpybGliL3Rlc3RzL2JsYWNrYm94LyoucHlgYC4gCisKK1doZW4gd3JpdGluZyBibGFja2JveCB0
ZXN0cyBwbGVhc2UgaG9ub3VyIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnM6CisKKyAxLiBQbGFj
ZSB0aGUgdGVzdHMgZm9yIHRoZSBjb21tYW5kICduYW1lJyBpbgorICAgIGJ6cmxpYi90ZXN0cy9i
bGFja2JveC90ZXN0X25hbWUucHkuIFRoaXMgbWFrZXMgaXQgZWFzeSBmb3IgZGV2ZWxvcGVycwor
ICAgIHRvIGxvY2F0ZSB0aGUgdGVzdCBzY3JpcHQgZm9yIGEgZmF1bHR5IGNvbW1hbmQuCisKKyAy
LiBVc2UgdGhlICdzZWxmLnJ1bl9ienIoIm5hbWUiKScgdXRpbGl0eSBmdW5jdGlvbiB0byBpbnZv
a2UgdGhlIGNvbW1hbmQKKyAgICByYXRoZXIgdGhhbiBydW5uaW5nIGJ6ciBpbiBhIHN1YnByb2Nl
c3Mgb3IgaW52b2tpbmcgdGhlCisgICAgY21kX29iamVjdC5ydW4oKSBtZXRob2QgZGlyZWN0bHku
IFRoaXMgaXMgYSBsb3QgZmFzdGVyIHRoYW4KKyAgICBzdWJwcm9jZXNzZXMgYW5kIGdlbmVyYXRl
cyB0aGUgc2FtZSBsb2dnaW5nIG91dHB1dCBhcyBydW5uaW5nIGl0IGluIGEKKyAgICBzdWJwcm9j
ZXNzICh3aGljaCBpbnZva2luZyB0aGUgbWV0aG9kIGRpcmVjdGx5IGRvZXMgbm90KS4KKyAKKyAz
LiBPbmx5IHRlc3QgdGhlIG9uZSBjb21tYW5kIGluIGEgc2luZ2xlIHRlc3Qgc2NyaXB0LiBVc2Ug
dGhlIGJ6cmxpYiAKKyAgICBsaWJyYXJ5IHdoZW4gc2V0dGluZyB1cCB0ZXN0cyBhbmQgd2hlbiBl
dmFsdWF0aW5nIHRoZSBzaWRlLWVmZmVjdHMgb2YKKyAgICB0aGUgY29tbWFuZC4gV2UgZG8gdGhp
cyBzbyB0aGF0IHRoZSBsaWJyYXJ5IGFwaSBoYXMgY29udGludWFsIHByZXNzdXJlCisgICAgb24g
aXQgdG8gYmUgYXMgZnVuY3Rpb25hbCBhcyB0aGUgY29tbWFuZCBsaW5lIGluIGEgc2ltcGxlIG1h
bm5lciwgYW5kCisgICAgdG8gaXNvbGF0ZSBrbm9jay1vbiBlZmZlY3RzIHRocm91Z2hvdXQgdGhl
IGJsYWNrYm94IHRlc3Qgc3VpdGUgd2hlbiBhCisgICAgY29tbWFuZCBjaGFuZ2VzIGl0cyBuYW1l
IG9yIHNpZ25hdHVyZS4gSWRlYWxseSBvbmx5IHRoZSB0ZXN0cyBmb3IgYQorICAgIGdpdmVuIGNv
bW1hbmQgYXJlIGFmZmVjdGVkIHdoZW4gYSBnaXZlbiBjb21tYW5kIGlzIGNoYW5nZWQuCisKKyA0
LiBJZiB5b3UgaGF2ZSBhIHRlc3Qgd2hpY2ggZG9lcyBhY3R1YWxseSByZXF1aXJlIHJ1bm5pbmcg
YnpyIGluIGEKKyAgICBzdWJwcm9jZXNzIHlvdSBjYW4gdXNlIGBgcnVuX2J6cl9zdWJwcm9jZXNz
YGAuIEJ5IGRlZmF1bHQgdGhlIHNwYXduZWQKKyAgICBwcm9jZXNzIHdpbGwgbm90IGxvYWQgcGx1
Z2lucyB1bmxlc3MgYGAtLWFsbG93LXBsdWdpbnNgYCBpcyBzdXBwbGllZC4KKworCitEb2N0ZXN0
cworLS0tLS0tLS0KKworV2UgbWFrZSBzZWxlY3RpdmUgdXNlIG9mIGRvY3Rlc3RzX18uICBJbiBn
ZW5lcmFsIHRoZXkgc2hvdWxkIHByb3ZpZGUgCisqZXhhbXBsZXMqIHdpdGhpbiB0aGUgQVBJIGRv
Y3VtZW50YXRpb24gd2hpY2ggY2FuIGluY2lkZW50YWxseSBiZSB0ZXN0ZWQuICBXZSAKK2Rvbid0
IHRyeSB0byB0ZXN0IGV2ZXJ5IGltcG9ydGFudCBjYXNlIHVzaW5nIGRvY3Rlc3RzIC0tIHJlZ3Vs
YXIgUHl0aG9uCit0ZXN0cyBhcmUgZ2VuZXJhbGx5IGEgYmV0dGVyIHNvbHV0aW9uLgorCitNb3N0
IG9mIHRoZXNlIGFyZSBpbiBgYGJ6cmxpYi9kb2MvYXBpYGAuICBNb3JlIGFkZGl0aW9ucyBhcmUg
d2VsY29tZS4KKworICBfXyBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYi9tb2R1bGUtZG9jdGVz
dC5odG1sCisKKworU2tpcHBpbmcgdGVzdHMgYW5kIHRlc3QgcmVxdWlyZW1lbnRzCistLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gb3VyIGVuaGFuY2VtZW50cyB0byB1
bml0dGVzdCB3ZSBhbGxvdyBmb3Igc29tZSBhZGRpdGlvbiByZXN1bHRzIGJleW9uZAoranVzdCBz
dWNjZXNzIG9yIGZhaWx1cmUuCisKK0lmIGEgdGVzdCBjYW4ndCBiZSBydW4sIGl0IGNhbiBzYXkg
dGhhdCBpdCdzIHNraXBwZWQuICBUaGlzIGlzIHR5cGljYWxseQordXNlZCBpbiBwYXJhbWV0ZXJp
emVkIHRlc3RzIC0gZm9yIGV4YW1wbGUgaWYgYSB0cmFuc3BvcnQgZG9lc24ndCBzdXBwb3J0Citz
ZXR0aW5nIHBlcm1pc3Npb25zLCB3ZSdsbCBza2lwIHRoZSB0ZXN0cyB0aGF0IHJlbGF0aW5nIHRv
IHRoYXQuICA6OgorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc2VsZi5icmFuY2hfZm9ybWF0
LmluaXRpYWxpemUocmVwby5ienJkaXIpCisgICAgZXhjZXB0IGVycm9ycy5VbmluaXRpYWxpemFi
bGVGb3JtYXQ6CisgICAgICAgIHJhaXNlIHRlc3RzLlRlc3RTa2lwcGVkKCdVbmluaXRpYWxpemFi
bGUgYnJhbmNoIGZvcm1hdCcpCisKK1JhaXNpbmcgVGVzdFNraXBwZWQgaXMgYSBnb29kIGlkZWEg
d2hlbiB5b3Ugd2FudCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlCit0ZXN0IHdhcyBub3QgcnVu
LCByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyB3aGljaCBtYWtlcyBpdCBsb29rIGFzIGlmIGl0
Cit3YXMgcnVuIGFuZCBwYXNzZWQuCisKK0Egc3VidGx5IGRpZmZlcmVudCBjYXNlIGlzIGEgdGVz
dCB0aGF0IHNob3VsZCBydW4sIGJ1dCBjYW4ndCBydW4gaW4gdGhlCitjdXJyZW50IGVudmlyb25t
ZW50LiAgVGhpcyBjb3ZlcnMgdGVzdHMgdGhhdCBjYW4gb25seSBydW4gaW4gcGFydGljdWxhcgor
b3BlcmF0aW5nIHN5c3RlbXMgb3IgbG9jYWxlcywgb3IgdGhhdCBkZXBlbmQgb24gZXh0ZXJuYWwg
bGlicmFyaWVzLiAgSGVyZQord2Ugd2FudCB0byBpbmZvcm0gdGhlIHVzZXIgdGhhdCB0aGV5IGRp
ZG4ndCBnZXQgZnVsbCB0ZXN0IGNvdmVyYWdlLCBidXQKK3RoZXkgcG9zc2libHkgY291bGQgaWYg
dGhleSBpbnN0YWxsZWQgbW9yZSBsaWJyYXJpZXMuICBUaGVzZSBhcmUgZXhwcmVzc2VkCithcyBh
IGRlcGVuZGVuY3kgb24gYSBmZWF0dXJlIHNvIHdlIGNhbiBzdW1tYXJpc2UgdGhlbSwgYW5kIHNv
IHRoYXQgdGhlCit0ZXN0IGZvciB0aGUgZmVhdHVyZSBpcyBkb25lIG9ubHkgb25jZS4gIChGb3Ig
aGlzdG9yaWNhbCByZWFzb25zLCBhcyBvZgorTWF5IDIwMDcgbWFueSBjYXNlcyB0aGF0IHNob3Vs
ZCBkZXBlbmQgb24gZmVhdHVyZXMgY3VycmVudGx5IHJhaXNlCitUZXN0U2tpcHBlZC4pICBUaGUg
dHlwaWNhbCB1c2UgaXM6OgorCisgICAgY2xhc3MgVGVzdFN0cmFjZShUZXN0Q2FzZVdpdGhUcmFu
c3BvcnQpOgorCisgICAgICAgIF90ZXN0X25lZWRzX2ZlYXR1cmVzID0gW1N0cmFjZUZlYXR1cmVd
CisKK3doaWNoIG1lYW5zIGFsbCB0ZXN0cyBpbiB0aGlzIGNsYXNzIG5lZWQgdGhlIGZlYXR1cmUu
ICBUaGUgZmVhdHVyZSBpdHNlbGYKK3Nob3VsZCBwcm92aWRlIGEgYGBfcHJvYmVgYCBtZXRob2Qg
d2hpY2ggaXMgY2FsbGVkIG9uY2UgdG8gZGV0ZXJtaW5lIGlmCitpdCdzIGF2YWlsYWJsZS4KKwor
CitLbm93biBmYWlsdXJlcworLS0tLS0tLS0tLS0tLS0KKworS25vd24gZmFpbHVyZXMgYXJlIHdo
ZW4gYSB0ZXN0IGV4aXN0cyBidXQgd2Uga25vdyBpdCBjdXJyZW50bHkgZG9lc24ndAord29yaywg
YWxsb3dpbmcgdGhlIHRlc3Qgc3VpdGUgdG8gc3RpbGwgcGFzcy4gIFRoZXNlIHNob3VsZCBiZSB1
c2VkIHdpdGgKK2NhcmUsIHdlIGRvbid0IHdhbnQgYSBwcm9saWZlcmF0aW9uIG9mIHF1aWV0bHkg
YnJva2VuIHRlc3RzLiAgSXQgbWlnaHQgYmUKK2FwcHJvcHJpYXRlIHRvIHVzZSB0aGVtIGlmIHlv
dSd2ZSBjb21taXR0ZWQgYSB0ZXN0IGZvciBhIGJ1ZyBidXQgbm90IHRoZQorZml4IGZvciBpdCwg
b3IgaWYgc29tZXRoaW5nIHdvcmtzIG9uIFVuaXggYnV0IG5vdCBvbiBXaW5kb3dzLgorCisKKwor
RXNzZW50aWFsIERvbWFpbiBDbGFzc2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworSW50
cm9kdWNpbmcgdGhlIE9iamVjdCBNb2RlbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
CitUaGUgY29yZSBkb21haW4gb2JqZWN0cyB3aXRoaW4gdGhlIGJhemFhciBtb2RlbCBhcmU6CisK
KyogVHJhbnNwb3J0CisKKyogQnJhbmNoCisKKyogUmVwb3NpdG9yeQorCisqIFdvcmtpbmdUcmVl
CisKK1RyYW5zcG9ydHMgYXJlIGV4cGxhaW5lZCBiZWxvdy4gU2VlIGh0dHA6Ly9iYXphYXItdmNz
Lm9yZy9DbGFzc2VzLworZm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUgb3RoZXIga2V5IGNsYXNz
ZXMuCisKK1VzaW5nIFRyYW5zcG9ydHMKKz09PT09PT09PT09PT09PT0KKworVGhlIGBgVHJhbnNw
b3J0YGAgbGF5ZXIgaGFuZGxlcyBhY2Nlc3MgdG8gbG9jYWwgb3IgcmVtb3RlIGRpcmVjdG9yaWVz
LgorRWFjaCBUcmFuc3BvcnQgb2JqZWN0IGFjdHMgbGlrZSBhIGxvZ2ljYWwgY29ubmVjdGlvbiB0
byBhIHBhcnRpY3VsYXIKK2RpcmVjdG9yeSwgYW5kIGl0IGFsbG93cyB2YXJpb3VzIG9wZXJhdGlv
bnMgb24gZmlsZXMgd2l0aGluIGl0LiAgWW91IGNhbgorKmNsb25lKiBhIHRyYW5zcG9ydCB0byBn
ZXQgYSBuZXcgVHJhbnNwb3J0IGNvbm5lY3RlZCB0byBhIHN1YmRpcmVjdG9yeSBvcgorcGFyZW50
IGRpcmVjdG9yeS4KKworVHJhbnNwb3J0cyBhcmUgbm90IHVzZWQgZm9yIGFjY2VzcyB0byB0aGUg
d29ya2luZyB0cmVlLiAgQXQgcHJlc2VudAord29ya2luZyB0cmVlcyBhcmUgYWx3YXlzIGxvY2Fs
IGFuZCB0aGV5IGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSByZWd1bGFyCitQeXRob24gZmlsZSBp
byBtZWNoYW5pc21zLgorCitGaWxlbmFtZXMgdnMgVVJMcworLS0tLS0tLS0tLS0tLS0tLS0KKwor
VHJhbnNwb3J0cyB3b3JrIGluIFVSTHMuICBUYWtlIG5vdGUgdGhhdCBVUkxzIGFyZSBieSBkZWZp
bml0aW9uIG9ubHkKK0FTQ0lJIC0gdGhlIGRlY2lzaW9uIG9mIGhvdyB0byBlbmNvZGUgYSBVbmlj
b2RlIHN0cmluZyBpbnRvIGEgVVJMIG11c3QgYmUKK3Rha2VuIGF0IGEgaGlnaGVyIGxldmVsLCB0
eXBpY2FsbHkgaW4gdGhlIFN0b3JlLiAgKE5vdGUgdGhhdCBTdG9yZXMgYWxzbworZXNjYXBlIGZp
bGVuYW1lcyB3aGljaCBjYW5ub3QgYmUgc2FmZWx5IHN0b3JlZCBvbiBhbGwgZmlsZXN5c3RlbXMs
IGJ1dAordGhpcyBpcyBhIGRpZmZlcmVudCBsZXZlbC4pCisKK1RoZSBtYWluIHJlYXNvbiBmb3Ig
dGhpcyBpcyB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNhZmVseSByb3VuZHRyaXAgYQorVVJM
IGludG8gVW5pY29kZSBhbmQgdGhlbiBiYWNrIGludG8gdGhlIHNhbWUgVVJMLiAgVGhlIFVSTCBz
dGFuZGFyZAorZ2l2ZXMgYSB3YXkgdG8gcmVwcmVzZW50IG5vbi1BU0NJSSBieXRlcyBpbiBBU0NJ
SSAoYXMgJS1lc2NhcGVzKSwgYnV0Citkb2Vzbid0IHNheSBob3cgdGhvc2UgYnl0ZXMgcmVwcmVz
ZW50IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiAgKFRoZXkncmUgbm90CitndWFyYW50ZWVkIHRvIGJl
IFVURi04IC0tIHRoYXQgaXMgY29tbW9uIGJ1dCBkb2Vzbid0IGhhcHBlbiBldmVyeXdoZXJlLikK
KworRm9yIGV4YW1wbGUgaWYgdGhlIHVzZXIgZW50ZXJzIHRoZSB1cmwgYGBodHRwOi8vZXhhbXBs
ZS8lZTBgYCB0aGVyZSdzIG5vCit3YXkgdG8gdGVsbCB3aGV0aGVyIHRoYXQgY2hhcmFjdGVyIHJl
cHJlc2VudHMgImxhdGluIHNtYWxsIGxldHRlciBhIHdpdGgKK2dyYXZlIiBpbiBpc28tODg1OS0x
LCBvciAibGF0aW4gc21hbGwgbGV0dGVyIHIgd2l0aCBhY3V0ZSIgaW4gaXNvLTg4NTktMgorb3Ig
bWFsZm9ybWVkIFVURi04LiAgU28gd2UgY2FuJ3QgY29udmVydCB0aGVpciBVUkwgdG8gVW5pY29k
ZSByZWxpYWJseS4KKworRXF1YWxseSBwcm9ibGVtYXRpYyBpZiB3ZSdyZSBnaXZlbiBhIHVybC1s
aWtlIHN0cmluZyBjb250YWluaW5nIG5vbi1hc2NpaQorY2hhcmFjdGVycyAoc3VjaCBhcyB0aGUg
YWNjZW50ZWQgYSkgd2UgY2FuJ3QgYmUgc3VyZSBob3cgdG8gY29udmVydCB0aGF0Cit0byB0aGUg
Y29ycmVjdCBVUkwsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGVuY29kaW5nIHRoZSBzZXJ2
ZXIgZXhwZWN0cworZm9yIHRob3NlIGNoYXJhY3RlcnMuICAoQWx0aG91Z2ggdGhpcyBpcyBub3Qg
dG90YWxseSByZWxpYWJsZSB3ZSBtaWdodCBzdGlsbAorYWNjZXB0IHRoZXNlIGFuZCBhc3N1bWUg
dGhleSBzaG91bGQgYmUgcHV0IGludG8gVVRGLTguKQorCitBIHNpbWlsYXIgZWRnZSBjYXNlIGlz
IHRoYXQgdGhlIHVybCBgYGh0dHA6Ly9mb28vc3dlZXQlMkZzb3VyYGAgY29udGFpbnMKK29uZSBk
aXJlY3RvcnkgY29tcG9uZW50IHdob3NlIG5hbWUgaXMgInN3ZWV0L3NvdXIiLiAgVGhlIGVzY2Fw
ZWQgc2xhc2ggaXMKK25vdCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IuICBJZiB3ZSB0cnkgdG8gY29u
dmVydCBVUkxzIHRvIHJlZ3VsYXIgVW5pY29kZQorcGF0aHMgdGhpcyBpbmZvcm1hdGlvbiB3aWxs
IGJlIGxvc3QuCisKK1RoaXMgaW1wbGllcyB0aGF0IFRyYW5zcG9ydHMgbXVzdCBuYXRpdmVseSBk
ZWFsIHdpdGggVVJMczsgZm9yIHNpbXBsaWNpdHkKK3RoZXkgKm9ubHkqIGRlYWwgd2l0aCBVUkxz
IGFuZCBjb252ZXJzaW9uIG9mIG90aGVyIHN0cmluZ3MgdG8gVVJMcyBpcyBkb25lCitlbHNld2hl
cmUuICBJbmZvcm1hdGlvbiB0aGV5IHJldHVybiwgc3VjaCBhcyBmcm9tIGBgbGlzdF9kaXJgYCwg
aXMgYWxzbyBpbgordGhlIGZvcm0gb2YgVVJMIGNvbXBvbmVudHMuCisKKworQ29yZSBUb3BpY3MK
KyMjIyMjIyMjIyMjCisKK0V2b2x2aW5nIEludGVyZmFjZXMKKz09PT09PT09PT09PT09PT09PT0K
IAogV2UgaGF2ZSBhIGNvbW1pdG1lbnQgdG8gNiBtb250aHMgQVBJIHN0YWJpbGl0eSAtIGFueSBz
dXBwb3J0ZWQgc3ltYm9sIGluIGEKIHJlbGVhc2Ugb2YgYnpyIE1VU1QgTk9UIGJlIGFsdGVyZWQg
aW4gYW55IHdheSB0aGF0IHdvdWxkIHJlc3VsdCBpbgpAQCAtNzIsMTE3ICs0NzIsOCBAQAogY2Fs
bGVycyB3aWxsIGF0IGxlYXN0IGdldCBhbiBBdHRyaWJ1dGVFcnJvciByYXRoZXIgdGhhbiB3ZWly
ZCByZXN1bHRzLgogCiAKLVN0YW5kYXJkIHBhcmFtZXRlciB0eXBlcwotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLVRoZXJlIGFyZSBzb21lIGNvbW1vbiByZXF1aXJlbWVudHMgaW4gdGhlIGxp
YnJhcnk6IHNvbWUgcGFyYW1ldGVycyBuZWVkIHRvIGJlCi11bmljb2RlIHNhZmUsIHNvbWUgbmVl
ZCBieXRlIHN0cmluZ3MsIGFuZCBzbyBvbi4gQXQgdGhlIG1vbWVudCB3ZSBoYXZlCi1vbmx5IGNv
ZGlmaWVkIG9uZSBzcGVjaWZpYyBwYXR0ZXJuOiBQYXJhbWV0ZXJzIHRoYXQgbmVlZCB0byBiZSB1
bmljb2RlCi1zaG91bGQgYmUgY2hlY2tlZCB2aWEgYGBienJsaWIub3N1dGlscy5zYWZlX3VuaWNv
ZGVgYC4gVGhpcyB3aWxsIGNvZXJjZSB0aGUKLWlucHV0IGludG8gdW5pY29kZSBpbiBhIGNvbnNp
c3RlbnQgZmFzaGlvbiwgYWxsb3dpbmcgdHJpdmlhbCBzdHJpbmdzIHRvIGJlCi11c2VkIGZvciBw
cm9ncmFtbWVyIGNvbnZlbmllbmNlLCBidXQgbm90IHBlcmZvcm1pbmcgdW5wcmVkaWN0YWJseSBp
biB0aGUKLXByZXNlbmNlIG9mIGRpZmZlcmVudCBsb2NhbGVzLgotCi0KLUNvcHlyaWdodAotLS0t
LS0tLS0tCi0KLVRoZSBjb3B5cmlnaHQgcG9saWN5IGZvciBienIgd2FzIHJlY2VudGx5IG1hZGUg
Y2xlYXIgaW4gdGhpcyBlbWFpbCAoZWRpdGVkCi1mb3IgZ3JhbW1hdGljYWwgY29ycmVjdG5lc3Mp
OjoKLQotICAgIFRoZSBhdHRhY2hlZCBwYXRjaCBjbGVhbnMgdXAgdGhlIGNvcHlyaWdodCBhbmQg
bGljZW5zZSBzdGF0ZW1lbnRzIGluCi0gICAgdGhlIGJ6ciBzb3VyY2UuIEl0IGFsc28gYWRkcyB0
ZXN0cyB0byBoZWxwIHVzIHJlbWVtYmVyIHRvIGFkZCB0aGVtCi0gICAgd2l0aCB0aGUgY29ycmVj
dCB0ZXh0LgotCi0gICAgV2UgaGFkIHRoZSBwcm9ibGVtIHRoYXQgbG90cyBvZiBvdXIgZmlsZXMg
d2VyZSAiQ29weXJpZ2h0IENhbm9uaWNhbAotICAgIERldmVsb3BtZW50IEx0ZCIgd2hpY2ggaXMg
bm90IGEgcmVhbCBjb21wYW55LCBhbmQgc29tZSBvdGhlciB2YXJpYXRpb25zCi0gICAgb24gdGhp
cyB0aGVtZS4gQWxzbywgc29tZSBmaWxlcyB3ZXJlIG1pc3NpbmcgdGhlIEdQTCBzdGF0ZW1lbnRz
LgotICAgIAotICAgIEkgd2FudCB0byBiZSBjbGVhciBhYm91dCB0aGUgaW50ZW50IG9mIHRoaXMg
cGF0Y2gsIHNpbmNlIGNvcHlyaWdodCBjYW4KLSAgICBiZSBhIGxpdHRsZSBjb250cm92ZXJzaWFs
LgotICAgIAotICAgIDEpIFRoZSBiaWcgbW90aXZhdGlvbiBmb3IgdGhpcyBpcyBub3QgdG8gc2h1
dCBvdXQgdGhlIGNvbW11bml0eSwgYnV0Ci0gICAganVzdCB0byBjbGVhbiB1cCBhbGwgb2YgdGhl
IGludmFsaWQgY29weXJpZ2h0IHN0YXRlbWVudHMuCi0gICAgCi0gICAgMikgSXQgaGFzIGJlZW4g
dGhlIGdlbmVyYWwgcG9saWN5IGZvciBienIgdGhhdCB3ZSB3YW50IGEgc2luZ2xlCi0gICAgY29w
eXJpZ2h0IGhvbGRlciBmb3IgYWxsIG9mIHRoZSBjb3JlIGNvZGUuIFRoaXMgaXMgZm9sbG93aW5n
IHRoZSBtb2RlbAotICAgIHNldCBieSB0aGUgRlNGLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8g
dXBkYXRlIHRoZSBjb2RlIHRvIGEgbmV3Ci0gICAgbGljZW5zZSBpbiBjYXNlIHByb2JsZW1zIGFy
ZSBlbmNvdW50ZXJlZC4gKEZvciBleGFtcGxlLCBpZiB3ZSB3YW50IHRvCi0gICAgdXBncmFkZSB0
aGUgcHJvamVjdCB1bml2ZXJzYWxseSB0byBHUEwgdjMgaXQgaXMgbXVjaCBzaW1wbGVyIGlmIHRo
ZXJlIGlzCi0gICAgYSBzaW5nbGUgY29weXJpZ2h0IGhvbGRlcikuIEl0IGFsc28gbWFrZXMgaXQg
Y2xlYXJlciBpZiBjb3B5cmlnaHQgaXMKLSAgICBldmVyIGRlYmF0ZWQsIHRoZXJlIGlzIGEgc2lu
Z2xlIGhvbGRlciwgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIGRlZmVuZAotICAgIGluIGNvdXJ0
LCBldGMuIChJIHRoaW5rIHRoZSBGU0YgcG9zaXRpb24gaXMgdGhhdCBpZiB5b3UgYXNzaWduIHRo
ZW0KLSAgICBjb3B5cmlnaHQsIHRoZXkgY2FuIGRlZmVuZCBpdCBpbiBjb3VydCByYXRoZXIgdGhh
biB5b3UgbmVlZGluZyB0bywgYW5kCi0gICAgSSdtIHN1cmUgQ2Fub25pY2FsIHdvdWxkIGRvIHRo
ZSBzYW1lKS4KLSAgICBBcyBzdWNoLCBDYW5vbmljYWwgaGFzIHJlcXVlc3RlZCBjb3B5cmlnaHQg
YXNzaWdubWVudHMgZnJvbSBhbGwgb2YgdGhlCi0gICAgbWFqb3IgY29udHJpYnV0ZXJzLgotICAg
IAotICAgIDMpIElmIHNvbWVvbmUgd2FudHMgdG8gYWRkIGNvZGUgYW5kIG5vdCBhdHRyaWJ1dGUg
aXQgdG8gQ2Fub25pY2FsLCB0aGVyZQotICAgIGlzIGEgc3BlY2lmaWMgbGlzdCBvZiBmaWxlcyB0
aGF0IGFyZSBleGNsdWRlZCBmcm9tIHRoaXMgY2hlY2suIEFuZCB0aGUKLSAgICB0ZXN0IGZhaWx1
cmUgaW5kaWNhdGVzIHdoZXJlIHRoYXQgaXMsIGFuZCBob3cgdG8gdXBkYXRlIGl0LgotICAgIAot
ICAgIDQpIElmIGFueW9uZSBmZWVscyB0aGF0IEkgY2hhbmdlZCBhIGNvcHlyaWdodCBzdGF0ZW1l
bnQgaW5jb3JyZWN0bHksIGp1c3QKLSAgICBsZXQgbWUga25vdywgYW5kIEknbGwgYmUgaGFwcHkg
dG8gY29ycmVjdCBpdC4gV2hlbmV2ZXIgeW91IGhhdmUgbGFyZ2UKLSAgICBtZWNoYW5pY2FsIGNo
YW5nZXMgbGlrZSB0aGlzLCBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIHNvbWUgbWlzdGFrZXMuCi0g
ICAgCi0gICAgSnVzdCB0byByZWl0ZXJhdGUsIHRoaXMgaXMgYSBjb21tdW5pdHkgcHJvamVjdCwg
YW5kIGl0IGlzIG1lYW50IHRvIHN0YXkKLSAgICB0aGF0IHdheS4gQ29yZSBienIgY29kZSBpcyBj
b3B5cmlnaHQgQ2Fub25pY2FsIGZvciBsZWdhbCByZWFzb25zLCBhbmQKLSAgICB0aGUgdGVzdHMg
YXJlIGp1c3QgdGhlcmUgdG8gaGVscCB1cyBtYWludGFpbiB0aGF0LgotCi0KLURvY3VtZW50YXRp
b24KLT09PT09PT09PT09PT0KLQotSWYgeW91IGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIGEgY29t
bWFuZCwgcGxlYXNlIHVwZGF0ZSBpdHMgZG9jc3RyaW5nCi1pbiBienJsaWIvY29tbWFuZHMucHku
ICBUaGlzIGlzIGRpc3BsYXllZCBieSB0aGUgJ2J6ciBoZWxwJyBjb21tYW5kLgotCi1ORVdTIGZp
bGUKLS0tLS0tLS0tLQotCi1JZiB5b3UgbWFrZSBhIHVzZXItdmlzaWJsZSBjaGFuZ2UsIHBsZWFz
ZSBhZGQgYSBub3RlIHRvIHRoZSBORVdTIGZpbGUuCi1UaGUgZGVzY3JpcHRpb24gc2hvdWxkIGJl
IHdyaXR0ZW4gdG8gbWFrZSBzZW5zZSB0byBzb21lb25lIHdobydzIGp1c3QKLWEgdXNlciBvZiBi
enIsIG5vdCBhIGRldmVsb3BlcjogbmV3IGZ1bmN0aW9ucyBvciBjbGFzc2VzIHNob3VsZG4ndCBi
ZQotbWVudGlvbmVkLCBidXQgbmV3IGNvbW1hbmRzLCBjaGFuZ2VzIGluIGJlaGF2aW91ciBvciBm
aXhlZCBub250cml2aWFsCi1idWdzIHNob3VsZCBiZSBsaXN0ZWQuICBTZWUgdGhlIGV4aXN0aW5n
IGVudHJpZXMgZm9yIGFuIGlkZWEgb2Ygd2hhdAotc2hvdWxkIGJlIGRvbmUuCi0KLVdpdGhpbiBl
YWNoIHJlbGVhc2UsIGVudHJpZXMgaW4gdGhlIG5ld3MgZmlsZSBzaG91bGQgaGF2ZSB0aGUgbW9z
dAotdXNlci12aXNpYmxlIGNoYW5nZXMgZmlyc3QuICBTbyB0aGUgb3JkZXIgc2hvdWxkIGJlIGFw
cHJveGltYXRlbHk6Ci0KLSAqIGNoYW5nZXMgdG8gZXhpc3RpbmcgYmVoYXZpb3VyIC0gdGhlIGhp
Z2hlc3QgcHJpb3JpdHkgYmVjYXVzZSB0aGUgCi0gICB1c2VyJ3MgZXhpc3Rpbmcga25vd2xlZGdl
IGlzIGluY29ycmVjdAotICogbmV3IGZlYXR1cmVzIC0gc2hvdWxkIGJlIGJyb3VnaHQgdG8gdGhl
aXIgYXR0ZW50aW9uCi0gKiBidWcgZml4ZXMgLSBtYXkgYmUgb2YgaW50ZXJlc3QgaWYgdGhlIGJ1
ZyB3YXMgYWZmZWN0aW5nIHRoZW0sIGFuZAotICAgc2hvdWxkIGluY2x1ZGUgdGhlIGJ1ZyBudW1i
ZXIgaWYgYW55Ci0gKiBtYWpvciBkb2N1bWVudGF0aW9uIGNoYW5nZXMKLSAqIGNoYW5nZXMgdG8g
aW50ZXJuYWwgaW50ZXJmYWNlcwotCi1QZW9wbGUgd2hvIG1hZGUgc2lnbmlmaWNhbnQgY29udHJp
YnV0aW9ucyB0byBlYWNoIGNoYW5nZSBhcmUgbGlzdGVkIGluCi1wYXJlbnRoZXNpcy4gIFRoaXMg
Y2FuIGluY2x1ZGUgcmVwb3J0aW5nIGJ1Z3MgKHBhcnRpY3VsYXJseSB3aXRoIGdvb2QKLWRldGFp
bHMgb3IgcmVwcm9kdWN0aW9uIHJlY2lwZXMpLCBzdWJtaXR0aW5nIHBhdGNoZXMsIGV0Yy4KLQot
QVBJIGRvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZ1bmN0aW9ucywgbWV0aG9k
cywgY2xhc3NlcyBhbmQgbW9kdWxlcyBzaG91bGQgaGF2ZSBkb2NzdHJpbmdzCi1kZXNjcmliaW5n
IGhvdyB0aGV5IGFyZSB1c2VkLiAKLQotVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGRvY3N0cmluZyBz
aG91bGQgYmUgYSBzZWxmLWNvbnRhaW5lZCBzZW50ZW5jZS4KLQotRm9yIHRoZSBzcGVjaWFsIGNh
c2Ugb2YgQ29tbWFuZCBjbGFzc2VzLCB0aGlzIGFjdHMgYXMgdGhlIHVzZXItdmlzaWJsZQotZG9j
dW1lbnRhdGlvbiBzaG93biBieSB0aGUgaGVscCBjb21tYW5kLgotCi1UaGUgZG9jc3RyaW5ncyBz
aG91bGQgYmUgZm9ybWF0dGVkIGFzIHJlU3RydWN0dXJlZFRleHRfIChsaWtlIHRoaXMKLWRvY3Vt
ZW50KSwgc3VpdGFibGUgZm9yIHByb2Nlc3NpbmcgdXNpbmcgdGhlIGVweWRvY18gdG9vbCBpbnRv
IEhUTUwKLWRvY3VtZW50YXRpb24uCi0KLS4uIF9yZVN0cnVjdHVyZWRUZXh0OiBodHRwOi8vZG9j
dXRpbHMuc291cmNlZm9yZ2UubmV0L3JzdC5odG1sCi0uLiBfZXB5ZG9jOiBodHRwOi8vZXB5ZG9j
LnNvdXJjZWZvcmdlLm5ldC8KLQotCi0KLUNvZGluZyBzdHlsZQotPT09PT09PT09PT09CitDb2Rp
bmcgU3R5bGUgR3VpZGVsaW5lcworPT09PT09PT09PT09PT09PT09PT09PT0KIAogUGxlYXNlIHdy
aXRlIFBFUC04X18gY29tcGxpYW50IGNvZGUuICAKIApAQCAtMTkyLDYgKzQ4MywxNyBAQAogX18g
aHR0cDovL3d3dy5weXRob24ub3JnL3BlcHMvcGVwLTAwMDguaHRtbAogCiAKK01vZHVsZSBJbXBv
cnRzCistLS0tLS0tLS0tLS0tLQorCisqIEltcG9ydHMgc2hvdWxkIGJlIGRvbmUgYXQgdGhlIHRv
cC1sZXZlbCBvZiB0aGUgZmlsZSwgdW5sZXNzIHRoZXJlIGlzCisgIGEgc3Ryb25nIHJlYXNvbiB0
byBoYXZlIHRoZW0gbGF6aWx5IGxvYWRlZCB3aGVuIGEgcGFydGljdWxhcgorICBmdW5jdGlvbiBy
dW5zLiAgSW1wb3J0IHN0YXRlbWVudHMgaGF2ZSBhIGNvc3QsIHNvIHRyeSB0byBtYWtlIHN1cmUK
KyAgdGhleSBkb24ndCBydW4gaW5zaWRlIGhvdCBmdW5jdGlvbnMuCisKKyogTW9kdWxlIG5hbWVz
IHNob3VsZCBhbHdheXMgYmUgZ2l2ZW4gZnVsbHktcXVhbGlmaWVkLAorICBpLmUuIGBgYnpybGli
Lmhhc2hjYWNoZWBgIG5vdCBqdXN0IGBgaGFzaGNhY2hlYGAuCisKIAogTmFtaW5nCiAtLS0tLS0K
QEAgLTIxMyw3ICs1MTUsNyBAQAogaW5jb25zaXN0ZW5jeSBpZiBvdGhlciBwZW9wbGUgdXNlIHRo
ZSBmdWxsIG5hbWUuCiAKIAotU3RhbmRhcmQgbmFtZXMKK1N0YW5kYXJkIE5hbWVzCiAtLS0tLS0t
LS0tLS0tLQogCiBgYHJldmlzaW9uX2lkYGAgbm90IGBgcmV2X2lkYGAgb3IgYGByZXZpZGBgCkBA
IC0zMjAsNyArNjIyLDcgQEAKIG9iamVjdCwgcmF0aGVyIHRoYW4gdGhlIHJlYWwgY2xhc3MuCiAK
IAotUGFzc2luZyB0byBvdGhlciB2YXJpYWJsZXMKK1Bhc3NpbmcgdG8gT3RoZXIgVmFyaWFibGVz
CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBJdCBhbHNvIGlzIGluY29ycmVjdCB0byBh
c3NpZ24gYGBJbXBvcnRSZXBsYWNlcmBgIG9iamVjdHMgdG8gb3RoZXIgdmFyaWFibGVzLgpAQCAt
MzMxLDcgKzYzMywzMCBAQAogdmFyaWFibGUsIHNvIHNvbWUgYnVncyBhcmUgbm90IGRldGVjdGVk
IHJpZ2h0IGF3YXkuCiAKIAotV3JpdGluZyBvdXRwdXQKK0dldHRpbmcgSW5wdXQKKz09PT09PT09
PT09PT0KKworUHJvY2Vzc2luZyBDb21tYW5kIExpbmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworYnpybGliIGhhcyBhIHN0YW5kYXJkIGZyYW1ld29yayBmb3IgcGFyc2luZyBjb21tYW5k
IGxpbmVzIGFuZCBjYWxsaW5nCitwcm9jZXNzaW5nIHJvdXRpbmVzIGFzc29jaWF0ZWQgd2l0aCB2
YXJpb3VzIGNvbW1hbmRzLiBTZWUgYnVpbHRpbnMucHkKK2ZvciBudW1lcm91cyBleGFtcGxlcy4K
KworCitTdGFuZGFyZCBQYXJhbWV0ZXIgVHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitUaGVyZSBhcmUgc29tZSBjb21tb24gcmVxdWlyZW1lbnRzIGluIHRoZSBsaWJyYXJ5OiBzb21l
IHBhcmFtZXRlcnMgbmVlZCB0byBiZQordW5pY29kZSBzYWZlLCBzb21lIG5lZWQgYnl0ZSBzdHJp
bmdzLCBhbmQgc28gb24uIEF0IHRoZSBtb21lbnQgd2UgaGF2ZQorb25seSBjb2RpZmllZCBvbmUg
c3BlY2lmaWMgcGF0dGVybjogUGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgdW5pY29kZQorc2hv
dWxkIGJlIGNoZWNrZWQgdmlhIGBgYnpybGliLm9zdXRpbHMuc2FmZV91bmljb2RlYGAuIFRoaXMg
d2lsbCBjb2VyY2UgdGhlCitpbnB1dCBpbnRvIHVuaWNvZGUgaW4gYSBjb25zaXN0ZW50IGZhc2hp
b24sIGFsbG93aW5nIHRyaXZpYWwgc3RyaW5ncyB0byBiZQordXNlZCBmb3IgcHJvZ3JhbW1lciBj
b252ZW5pZW5jZSwgYnV0IG5vdCBwZXJmb3JtaW5nIHVucHJlZGljdGFibHkgaW4gdGhlCitwcmVz
ZW5jZSBvZiBkaWZmZXJlbnQgbG9jYWxlcy4KKworCitXcml0aW5nIE91dHB1dAogPT09PT09PT09
PT09PT0KIAogKFRoZSBzdHJhdGVneSBkZXNjcmliZWQgaGVyZSBpcyB3aGF0IHdlIHdhbnQgdG8g
Z2V0IHRvLCBidXQgaXQncyBub3QKQEAgLTM2OCw4MiArNjkzLDI3IEBACiBzaG91bGQgYmUgb25s
eSBpbiB0aGUgY29tbWFuZC1saW5lIHRvb2wuCiAKIAotV3JpdGluZyB0ZXN0cwotPT09PT09PT09
PT09PQotCi1JbiBnZW5lcmFsIHRlc3RzIHNob3VsZCBiZSBwbGFjZWQgaW4gYSBmaWxlIG5hbWVk
IHRlc3RfRk9PLnB5IHdoZXJlIAotRk9PIGlzIHRoZSBsb2dpY2FsIHRoaW5nIHVuZGVyIHRlc3Qu
IFRoYXQgZmlsZSBzaG91bGQgYmUgcGxhY2VkIGluIHRoZQotdGVzdHMgc3ViZGlyZWN0b3J5IHVu
ZGVyIHRoZSBwYWNrYWdlIGJlaW5nIHRlc3RlZC4KLQotRm9yIGV4YW1wbGUsIHRlc3RzIGZvciBt
ZXJnZTMgaW4gYnpybGliIGJlbG9uZyBpbiBienJsaWIvdGVzdHMvdGVzdF9tZXJnZTMucHkuCi1T
ZWUgYnpybGliL3Rlc3RzL3Rlc3Rfc2FtcGxlci5weSBmb3IgYSB0ZW1wbGF0ZSB0ZXN0IHNjcmlw
dC4KLQotVGVzdHMgY2FuIGJlIHdyaXR0ZW4gZm9yIHRoZSBVSSBvciBmb3IgaW5kaXZpZHVhbCBh
cmVhcyBvZiB0aGUgbGlicmFyeS4KLUNob29zZSB3aGljaGV2ZXIgaXMgYXBwcm9wcmlhdGU6IGlm
IGFkZGluZyBhIG5ldyBjb21tYW5kLCBvciBhIG5ldyBjb21tYW5kIAotb3B0aW9uLCB0aGVuIHlv
dSBzaG91bGQgYmUgd3JpdGluZyBhIFVJIHRlc3QuICBJZiB5b3UgYXJlIGJvdGggYWRkaW5nIFVJ
Ci1mdW5jdGlvbmFsaXR5IGFuZCBsaWJyYXJ5IGZ1bmN0aW9uYWxpdHksIHlvdSB3aWxsIHdhbnQg
dG8gd3JpdGUgdGVzdHMgZm9yIAotYm90aCB0aGUgVUkgYW5kIHRoZSBjb3JlIGJlaGF2aW91cnMu
ICBXZSBjYWxsIFVJIHRlc3RzICdibGFja2JveCcgdGVzdHMKLWFuZCB0aGV5IGFyZSBmb3VuZCBp
biBgYGJ6cmxpYi90ZXN0cy9ibGFja2JveC8qLnB5YGAuIAotCi1XaGVuIHdyaXRpbmcgYmxhY2ti
b3ggdGVzdHMgcGxlYXNlIGhvbm91ciB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb25zOgotCi0gMS4g
UGxhY2UgdGhlIHRlc3RzIGZvciB0aGUgY29tbWFuZCAnbmFtZScgaW4KLSAgICBienJsaWIvdGVz
dHMvYmxhY2tib3gvdGVzdF9uYW1lLnB5LiBUaGlzIG1ha2VzIGl0IGVhc3kgZm9yIGRldmVsb3Bl
cnMKLSAgICB0byBsb2NhdGUgdGhlIHRlc3Qgc2NyaXB0IGZvciBhIGZhdWx0eSBjb21tYW5kLgot
Ci0gMi4gVXNlIHRoZSAnc2VsZi5ydW5fYnpyKCJuYW1lIiknIHV0aWxpdHkgZnVuY3Rpb24gdG8g
aW52b2tlIHRoZSBjb21tYW5kCi0gICAgcmF0aGVyIHRoYW4gcnVubmluZyBienIgaW4gYSBzdWJw
cm9jZXNzIG9yIGludm9raW5nIHRoZQotICAgIGNtZF9vYmplY3QucnVuKCkgbWV0aG9kIGRpcmVj
dGx5LiBUaGlzIGlzIGEgbG90IGZhc3RlciB0aGFuCi0gICAgc3VicHJvY2Vzc2VzIGFuZCBnZW5l
cmF0ZXMgdGhlIHNhbWUgbG9nZ2luZyBvdXRwdXQgYXMgcnVubmluZyBpdCBpbiBhCi0gICAgc3Vi
cHJvY2VzcyAod2hpY2ggaW52b2tpbmcgdGhlIG1ldGhvZCBkaXJlY3RseSBkb2VzIG5vdCkuCi0g
Ci0gMy4gT25seSB0ZXN0IHRoZSBvbmUgY29tbWFuZCBpbiBhIHNpbmdsZSB0ZXN0IHNjcmlwdC4g
VXNlIHRoZSBienJsaWIgCi0gICAgbGlicmFyeSB3aGVuIHNldHRpbmcgdXAgdGVzdHMgYW5kIHdo
ZW4gZXZhbHVhdGluZyB0aGUgc2lkZS1lZmZlY3RzIG9mCi0gICAgdGhlIGNvbW1hbmQuIFdlIGRv
IHRoaXMgc28gdGhhdCB0aGUgbGlicmFyeSBhcGkgaGFzIGNvbnRpbnVhbCBwcmVzc3VyZQotICAg
IG9uIGl0IHRvIGJlIGFzIGZ1bmN0aW9uYWwgYXMgdGhlIGNvbW1hbmQgbGluZSBpbiBhIHNpbXBs
ZSBtYW5uZXIsIGFuZAotICAgIHRvIGlzb2xhdGUga25vY2stb24gZWZmZWN0cyB0aHJvdWdob3V0
IHRoZSBibGFja2JveCB0ZXN0IHN1aXRlIHdoZW4gYQotICAgIGNvbW1hbmQgY2hhbmdlcyBpdHMg
bmFtZSBvciBzaWduYXR1cmUuIElkZWFsbHkgb25seSB0aGUgdGVzdHMgZm9yIGEKLSAgICBnaXZl
biBjb21tYW5kIGFyZSBhZmZlY3RlZCB3aGVuIGEgZ2l2ZW4gY29tbWFuZCBpcyBjaGFuZ2VkLgot
Ci0gNC4gSWYgeW91IGhhdmUgYSB0ZXN0IHdoaWNoIGRvZXMgYWN0dWFsbHkgcmVxdWlyZSBydW5u
aW5nIGJ6ciBpbiBhCi0gICAgc3VicHJvY2VzcyB5b3UgY2FuIHVzZSBgYHJ1bl9ienJfc3VicHJv
Y2Vzc2BgLiBCeSBkZWZhdWx0IHRoZSBzcGF3bmVkCi0gICAgcHJvY2VzcyB3aWxsIG5vdCBsb2Fk
IHBsdWdpbnMgdW5sZXNzIGBgLS1hbGxvdy1wbHVnaW5zYGAgaXMgc3VwcGxpZWQuCi0KLQotRG9j
dGVzdHMKLS0tLS0tLS0tCi0KLVdlIG1ha2Ugc2VsZWN0aXZlIHVzZSBvZiBkb2N0ZXN0c19fLiAg
SW4gZ2VuZXJhbCB0aGV5IHNob3VsZCBwcm92aWRlIAotKmV4YW1wbGVzKiB3aXRoaW4gdGhlIEFQ
SSBkb2N1bWVudGF0aW9uIHdoaWNoIGNhbiBpbmNpZGVudGFsbHkgYmUgdGVzdGVkLiAgV2UgCi1k
b24ndCB0cnkgdG8gdGVzdCBldmVyeSBpbXBvcnRhbnQgY2FzZSB1c2luZyBkb2N0ZXN0cyAtLSBy
ZWd1bGFyIFB5dGhvbgotdGVzdHMgYXJlIGdlbmVyYWxseSBhIGJldHRlciBzb2x1dGlvbi4KLQot
TW9zdCBvZiB0aGVzZSBhcmUgaW4gYGBienJsaWIvZG9jL2FwaWBgLiAgTW9yZSBhZGRpdGlvbnMg
YXJlIHdlbGNvbWUuCi0KLSAgX18gaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWIvbW9kdWxlLWRv
Y3Rlc3QuaHRtbAotCi0KLVJ1bm5pbmcgdGVzdHMKLT09PT09PT09PT09PT0KLUN1cnJlbnRseSwg
YnpyIHNlbGZ0ZXN0IGlzIHVzZWQgdG8gaW52b2tlIHRlc3RzLgotWW91IGNhbiBwcm92aWRlIGEg
cGF0dGVybiBhcmd1bWVudCB0byBydW4gYSBzdWJzZXQuIEZvciBleGFtcGxlLCAKLXRvIHJ1biBq
dXN0IHRoZSBibGFja2JveCB0ZXN0cywgcnVuOjoKLQotICAuL2J6ciBzZWxmdGVzdCAtdiBibGFj
a2JveAotCi1UbyBza2lwIGEgcGFydGljdWxhciB0ZXN0IChvciBzZXQgb2YgdGVzdHMpLCB5b3Ug
bmVlZCB0byB1c2UgYSBuZWdhdGl2ZQotbWF0Y2gsIGxpa2Ugc286OgotCi0gIC4vYnpyIHNlbGZ0
ZXN0ICdeKD8hLipibGFja2JveCknICAKLQotCi1FcnJvcnMgYW5kIGV4Y2VwdGlvbnMKLT09PT09
PT09PT09PT09PT09PT09PQotCi1FcnJvcnMgYXJlIGhhbmRsZWQgdGhyb3VnaCBQeXRob24gZXhj
ZXB0aW9ucy4KK0hhbmRsaW5nIEVycm9ycyBhbmQgRXhjZXB0aW9ucworPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisKK0NvbW1hbmRzIHNob3VsZCByZXR1cm4gbm9uLXplcm8gd2hlbiB0
aGV5IGVuY291bnRlciBjaXJjdW1zdGFuY2VzIHRoYXQKK3RoZSB1c2VyIHNob3VsZCByZWFsbHkg
cGF5IGF0dGVudGlvbiB0byAtIHdoaWNoIGluY2x1ZGVzIHRyaXZpYWwgc2hlbGwKK3BpcGVsaW5l
cy4KKworUmVjb21tZW5kZWQgdmFsdWVzIGFyZToKKworICAgIDAuIE9LLgorICAgIDEuIENvbmZs
aWN0cyBpbiBtZXJnZS1saWtlIG9wZXJhdGlvbnMsIG9yIGNoYW5nZXMgYXJlIHByZXNlbnQgaW4K
KyAgICAgICBkaWZmLWxpa2Ugb3BlcmF0aW9ucy4gCisgICAgMi4gVW5yZXByZXNlbnRhYmxlIGRp
ZmYgY2hhbmdlcyAoaS5lLiBiaW5hcnkgZmlsZXMgdGhhdCB3ZSBjYW5ub3Qgc2hvdyAKKyAgICAg
ICBhIGRpZmYgb2YpLgorICAgIDMuIEFuIGVycm9yIG9yIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQu
CisKK0Vycm9ycyBhcmUgaGFuZGxlZCB0aHJvdWdoIFB5dGhvbiBleGNlcHRpb25zLiBFeGNlcHRp
b25zIHNob3VsZCBiZSBkZWZpbmVkCitpbnNpZGUgYnpybGliLmVycm9ycywgc28gdGhhdCB3ZSBj
YW4gc2VlIHRoZSB3aG9sZSB0cmVlIGF0IGEgZ2xhbmNlLgogCiBXZSBicm9hZGx5IGNsYXNzaWZ5
IGVycm9ycyBhcyBlaXRoZXIgYmVpbmcgZWl0aGVyIGludGVybmFsIG9yIG5vdCwKLWRlcGVuZGlu
ZyBvbiB3aGV0aGVyIGBgdXNlcl9lcnJvcmBgIGlzIHNldCBvciBub3QuICBJZiB3ZSB0aGluayBp
dCdzIG91cgorZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGBpbnRlcm5hbF9lcnJvcmBgIGlzIHNldCBv
ciBub3QuICBJZiB3ZSB0aGluayBpdCdzIG91cgogZmF1bHQsIHdlIHNob3cgYSBiYWNrdHJhY2Us
IGFuIGludml0YXRpb24gdG8gcmVwb3J0IHRoZSBidWcsIGFuZCBwb3NzaWJseQogb3RoZXIgZGV0
YWlscy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIGVycm9ycyB0aGF0IGFyZW4ndCBzcGVjaWZp
Y2FsbHkKIHJlY29nbml6ZWQgYXMgYmVpbmcgY2F1c2VkIGJ5IGEgdXNlciBlcnJvci4gIE90aGVy
d2lzZSB3ZSBzaG93IGEgYnJpZWZlcgpAQCAtNDc0LDYgKzc0NCwxMzYgQEAKIGZpbmFsIGZ1bGxz
dG9wLiAgSWYgbG9uZywgdGhleSBtYXkgY29udGFpbiBuZXdsaW5lcyB0byBicmVhayB0aGUgdGV4
dC4KIAogCitEb2N1bWVudGluZyBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09CisKK1doZW4g
eW91IGNoYW5nZSBienJsaWIsIHBsZWFzZSB1cGRhdGUgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRp
b24gZm9yIHRoZQorY2hhbmdlIHlvdSBtYWRlOiBDaGFuZ2VzIHRvIGNvbW1hbmRzIHNob3VsZCB1
cGRhdGUgdGhlaXIgaGVscCwgYW5kCitwb3NzaWJseSBlbmQgdXNlciB0dXRvcmlhbHM7IGNoYW5n
ZXMgdG8gdGhlIGNvcmUgbGlicmFyeSBzaG91bGQgYmUKK3JlZmxlY3RlZCBpbiBBUEkgZG9jdW1l
bnRhdGlvbi4KKworTkVXUyBGaWxlCistLS0tLS0tLS0KKworSWYgeW91IG1ha2UgYSB1c2VyLXZp
c2libGUgY2hhbmdlLCBwbGVhc2UgYWRkIGEgbm90ZSB0byB0aGUgTkVXUyBmaWxlLgorVGhlIGRl
c2NyaXB0aW9uIHNob3VsZCBiZSB3cml0dGVuIHRvIG1ha2Ugc2Vuc2UgdG8gc29tZW9uZSB3aG8n
cyBqdXN0CithIHVzZXIgb2YgYnpyLCBub3QgYSBkZXZlbG9wZXI6IG5ldyBmdW5jdGlvbnMgb3Ig
Y2xhc3NlcyBzaG91bGRuJ3QgYmUKK21lbnRpb25lZCwgYnV0IG5ldyBjb21tYW5kcywgY2hhbmdl
cyBpbiBiZWhhdmlvdXIgb3IgZml4ZWQgbm9udHJpdmlhbAorYnVncyBzaG91bGQgYmUgbGlzdGVk
LiAgU2VlIHRoZSBleGlzdGluZyBlbnRyaWVzIGZvciBhbiBpZGVhIG9mIHdoYXQKK3Nob3VsZCBi
ZSBkb25lLgorCitXaXRoaW4gZWFjaCByZWxlYXNlLCBlbnRyaWVzIGluIHRoZSBuZXdzIGZpbGUg
c2hvdWxkIGhhdmUgdGhlIG1vc3QKK3VzZXItdmlzaWJsZSBjaGFuZ2VzIGZpcnN0LiAgU28gdGhl
IG9yZGVyIHNob3VsZCBiZSBhcHByb3hpbWF0ZWx5OgorCisgKiBjaGFuZ2VzIHRvIGV4aXN0aW5n
IGJlaGF2aW91ciAtIHRoZSBoaWdoZXN0IHByaW9yaXR5IGJlY2F1c2UgdGhlIAorICAgdXNlcidz
IGV4aXN0aW5nIGtub3dsZWRnZSBpcyBpbmNvcnJlY3QKKyAqIG5ldyBmZWF0dXJlcyAtIHNob3Vs
ZCBiZSBicm91Z2h0IHRvIHRoZWlyIGF0dGVudGlvbgorICogYnVnIGZpeGVzIC0gbWF5IGJlIG9m
IGludGVyZXN0IGlmIHRoZSBidWcgd2FzIGFmZmVjdGluZyB0aGVtLCBhbmQKKyAgIHNob3VsZCBp
bmNsdWRlIHRoZSBidWcgbnVtYmVyIGlmIGFueQorICogbWFqb3IgZG9jdW1lbnRhdGlvbiBjaGFu
Z2VzCisgKiBjaGFuZ2VzIHRvIGludGVybmFsIGludGVyZmFjZXMKKworUGVvcGxlIHdobyBtYWRl
IHNpZ25pZmljYW50IGNvbnRyaWJ1dGlvbnMgdG8gZWFjaCBjaGFuZ2UgYXJlIGxpc3RlZCBpbgor
cGFyZW50aGVzaXMuICBUaGlzIGNhbiBpbmNsdWRlIHJlcG9ydGluZyBidWdzIChwYXJ0aWN1bGFy
bHkgd2l0aCBnb29kCitkZXRhaWxzIG9yIHJlcHJvZHVjdGlvbiByZWNpcGVzKSwgc3VibWl0dGlu
ZyBwYXRjaGVzLCBldGMuCisKK0NvbW1hbmRzCistLS0tLS0tLQorCitUaGUgZG9jc3RyaW5nIG9m
IGEgY29tbWFuZCBpcyB1c2VkIGJ5IGBgYnpyIGhlbHBgYCB0byBnZW5lcmF0ZSBoZWxwIG91dHB1
dAorZm9yIHRoZSBjb21tYW5kLiBUaGUgbGlzdCAndGFrZXNfb3B0aW9ucycgYXR0cmlidXRlIG9u
IGEgY29tbWFuZCBpcyB1c2VkIGJ5CitgYGJ6ciBoZWxwYGAgdG8gZG9jdW1lbnQgdGhlIG9wdGlv
bnMgZm9yIHRoZSBjb21tYW5kIC0gdGhlIGNvbW1hbmQKK2RvY3N0cmluZyBkb2VzIG5vdCBuZWVk
IHRvIGRvY3VtZW50IHRoZW0uIEZpbmFsbHksIHRoZSAnX3NlZV9hbHNvJworYXR0cmlidXRlIG9u
IGEgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2Ugb3RoZXIgcmVsYXRlZCBoZWxwIHRv
cGljcy4KKworQVBJIERvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9u
cywgbWV0aG9kcywgY2xhc3NlcyBhbmQgbW9kdWxlcyBzaG91bGQgaGF2ZSBkb2NzdHJpbmdzCitk
ZXNjcmliaW5nIGhvdyB0aGV5IGFyZSB1c2VkLiAKKworVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGRv
Y3N0cmluZyBzaG91bGQgYmUgYSBzZWxmLWNvbnRhaW5lZCBzZW50ZW5jZS4KKworRm9yIHRoZSBz
cGVjaWFsIGNhc2Ugb2YgQ29tbWFuZCBjbGFzc2VzLCB0aGlzIGFjdHMgYXMgdGhlIHVzZXItdmlz
aWJsZQorZG9jdW1lbnRhdGlvbiBzaG93biBieSB0aGUgaGVscCBjb21tYW5kLgorCitUaGUgZG9j
c3RyaW5ncyBzaG91bGQgYmUgZm9ybWF0dGVkIGFzIHJlU3RydWN0dXJlZFRleHRfIChsaWtlIHRo
aXMKK2RvY3VtZW50KSwgc3VpdGFibGUgZm9yIHByb2Nlc3NpbmcgdXNpbmcgdGhlIGVweWRvY18g
dG9vbCBpbnRvIEhUTUwKK2RvY3VtZW50YXRpb24uCisKKy4uIF9yZVN0cnVjdHVyZWRUZXh0OiBo
dHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0L3JzdC5odG1sCisuLiBfZXB5ZG9jOiBodHRw
Oi8vZXB5ZG9jLnNvdXJjZWZvcmdlLm5ldC8KKworCitHZW5lcmFsIEd1aWRlbGluZXMKKz09PT09
PT09PT09PT09PT09PQorCitDb3B5cmlnaHQKKy0tLS0tLS0tLQorCitUaGUgY29weXJpZ2h0IHBv
bGljeSBmb3IgYnpyIHdhcyByZWNlbnRseSBtYWRlIGNsZWFyIGluIHRoaXMgZW1haWwgKGVkaXRl
ZAorZm9yIGdyYW1tYXRpY2FsIGNvcnJlY3RuZXNzKTo6CisKKyAgICBUaGUgYXR0YWNoZWQgcGF0
Y2ggY2xlYW5zIHVwIHRoZSBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugc3RhdGVtZW50cyBpbgorICAg
IHRoZSBienIgc291cmNlLiBJdCBhbHNvIGFkZHMgdGVzdHMgdG8gaGVscCB1cyByZW1lbWJlciB0
byBhZGQgdGhlbQorICAgIHdpdGggdGhlIGNvcnJlY3QgdGV4dC4KKworICAgIFdlIGhhZCB0aGUg
cHJvYmxlbSB0aGF0IGxvdHMgb2Ygb3VyIGZpbGVzIHdlcmUgIkNvcHlyaWdodCBDYW5vbmljYWwK
KyAgICBEZXZlbG9wbWVudCBMdGQiIHdoaWNoIGlzIG5vdCBhIHJlYWwgY29tcGFueSwgYW5kIHNv
bWUgb3RoZXIgdmFyaWF0aW9ucworICAgIG9uIHRoaXMgdGhlbWUuIEFsc28sIHNvbWUgZmlsZXMg
d2VyZSBtaXNzaW5nIHRoZSBHUEwgc3RhdGVtZW50cy4KKyAgICAKKyAgICBJIHdhbnQgdG8gYmUg
Y2xlYXIgYWJvdXQgdGhlIGludGVudCBvZiB0aGlzIHBhdGNoLCBzaW5jZSBjb3B5cmlnaHQgY2Fu
CisgICAgYmUgYSBsaXR0bGUgY29udHJvdmVyc2lhbC4KKyAgICAKKyAgICAxKSBUaGUgYmlnIG1v
dGl2YXRpb24gZm9yIHRoaXMgaXMgbm90IHRvIHNodXQgb3V0IHRoZSBjb21tdW5pdHksIGJ1dAor
ICAgIGp1c3QgdG8gY2xlYW4gdXAgYWxsIG9mIHRoZSBpbnZhbGlkIGNvcHlyaWdodCBzdGF0ZW1l
bnRzLgorICAgIAorICAgIDIpIEl0IGhhcyBiZWVuIHRoZSBnZW5lcmFsIHBvbGljeSBmb3IgYnpy
IHRoYXQgd2Ugd2FudCBhIHNpbmdsZQorICAgIGNvcHlyaWdodCBob2xkZXIgZm9yIGFsbCBvZiB0
aGUgY29yZSBjb2RlLiBUaGlzIGlzIGZvbGxvd2luZyB0aGUgbW9kZWwKKyAgICBzZXQgYnkgdGhl
IEZTRiwgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHVwZGF0ZSB0aGUgY29kZSB0byBhIG5ldwor
ICAgIGxpY2Vuc2UgaW4gY2FzZSBwcm9ibGVtcyBhcmUgZW5jb3VudGVyZWQuIChGb3IgZXhhbXBs
ZSwgaWYgd2Ugd2FudCB0bworICAgIHVwZ3JhZGUgdGhlIHByb2plY3QgdW5pdmVyc2FsbHkgdG8g
R1BMIHYzIGl0IGlzIG11Y2ggc2ltcGxlciBpZiB0aGVyZSBpcworICAgIGEgc2luZ2xlIGNvcHly
aWdodCBob2xkZXIpLiBJdCBhbHNvIG1ha2VzIGl0IGNsZWFyZXIgaWYgY29weXJpZ2h0IGlzCisg
ICAgZXZlciBkZWJhdGVkLCB0aGVyZSBpcyBhIHNpbmdsZSBob2xkZXIsIHdoaWNoIG1ha2VzIGl0
IGVhc2llciB0byBkZWZlbmQKKyAgICBpbiBjb3VydCwgZXRjLiAoSSB0aGluayB0aGUgRlNGIHBv
c2l0aW9uIGlzIHRoYXQgaWYgeW91IGFzc2lnbiB0aGVtCisgICAgY29weXJpZ2h0LCB0aGV5IGNh
biBkZWZlbmQgaXQgaW4gY291cnQgcmF0aGVyIHRoYW4geW91IG5lZWRpbmcgdG8sIGFuZAorICAg
IEknbSBzdXJlIENhbm9uaWNhbCB3b3VsZCBkbyB0aGUgc2FtZSkuCisgICAgQXMgc3VjaCwgQ2Fu
b25pY2FsIGhhcyByZXF1ZXN0ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnRzIGZyb20gYWxsIG9mIHRo
ZQorICAgIG1ham9yIGNvbnRyaWJ1dGVycy4KKyAgICAKKyAgICAzKSBJZiBzb21lb25lIHdhbnRz
IHRvIGFkZCBjb2RlIGFuZCBub3QgYXR0cmlidXRlIGl0IHRvIENhbm9uaWNhbCwgdGhlcmUKKyAg
ICBpcyBhIHNwZWNpZmljIGxpc3Qgb2YgZmlsZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGlz
IGNoZWNrLiBBbmQgdGhlCisgICAgdGVzdCBmYWlsdXJlIGluZGljYXRlcyB3aGVyZSB0aGF0IGlz
LCBhbmQgaG93IHRvIHVwZGF0ZSBpdC4KKyAgICAKKyAgICA0KSBJZiBhbnlvbmUgZmVlbHMgdGhh
dCBJIGNoYW5nZWQgYSBjb3B5cmlnaHQgc3RhdGVtZW50IGluY29ycmVjdGx5LCBqdXN0CisgICAg
bGV0IG1lIGtub3csIGFuZCBJJ2xsIGJlIGhhcHB5IHRvIGNvcnJlY3QgaXQuIFdoZW5ldmVyIHlv
dSBoYXZlIGxhcmdlCisgICAgbWVjaGFuaWNhbCBjaGFuZ2VzIGxpa2UgdGhpcywgaXQgaXMgcG9z
c2libGUgdG8gbWFrZSBzb21lIG1pc3Rha2VzLgorICAgIAorICAgIEp1c3QgdG8gcmVpdGVyYXRl
LCB0aGlzIGlzIGEgY29tbXVuaXR5IHByb2plY3QsIGFuZCBpdCBpcyBtZWFudCB0byBzdGF5Cisg
ICAgdGhhdCB3YXkuIENvcmUgYnpyIGNvZGUgaXMgY29weXJpZ2h0IENhbm9uaWNhbCBmb3IgbGVn
YWwgcmVhc29ucywgYW5kCisgICAgdGhlIHRlc3RzIGFyZSBqdXN0IHRoZXJlIHRvIGhlbHAgdXMg
bWFpbnRhaW4gdGhhdC4KKworCitNaXNjZWxsYW5lb3VzIFRvcGljcworIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKworRGVidWdnaW5nCis9PT09PT09PT0KKworQmF6YWFyIGhhcyBhIGZldyBmYWNpbGl0
aWVzIHRvIGhlbHAgZGVidWcgcHJvYmxlbXMgYnkgZ29pbmcgaW50byBwZGJfLCB0aGUKK1B5dGhv
biBkZWJ1Z2dlci4KKworLi4gX3BkYjogaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWIvZGVidWdn
ZXItY29tbWFuZHMuaHRtbAorCitJZiB0aGUgYGBCWlJfUERCYGAgZW52aXJvbm1lbnQgdmFyaWFi
bGUgaXMgc2V0IAordGhlbiBienIgd2lsbCBnbyBpbnRvIHBkYiBwb3N0LW1vcnRlbSBtb2RlIHdo
ZW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbgorb2NjdXJzLgorCitJZiB5b3Ugc2VuZCBhIFNJR1FV
SVQgc2lnbmFsIHRvIGJ6ciwgd2hpY2ggY2FuIGJlIGRvbmUgYnkgcHJlc3NpbmcKK0N0cmwtXFwg
b24gVW5peCwgYnpyIHdpbGwgZ28gaW50byB0aGUgZGVidWdnZXIgaW1tZWRpYXRlbHkuICBZb3Ug
Y2FuCitjb250aW51ZSBleGVjdXRpb24gYnkgdHlwaW5nIGBgY2BgLiAgVGhpcyBjYW4gYmUgZGlz
YWJsZWQgaWYgbmVjZXNzYXJ5CitieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBg
YEJaUl9TSUdRVUlUX1BEQj0wYGAuCisKIAogSmFyZ29uCiA9PT09PT0KQEAgLTQ4NCw1NiArODg0
LDYgQEAKICAgICBpbmRleGVzIGludG8gdGhlIGJyYW5jaCdzIHJldmlzaW9uIGhpc3RvcnkuCiAK
IAotVHJhbnNwb3J0Ci09PT09PT09PT0KLQotVGhlIGBgVHJhbnNwb3J0YGAgbGF5ZXIgaGFuZGxl
cyBhY2Nlc3MgdG8gbG9jYWwgb3IgcmVtb3RlIGRpcmVjdG9yaWVzLgotRWFjaCBUcmFuc3BvcnQg
b2JqZWN0IGFjdHMgbGlrZSBhIGxvZ2ljYWwgY29ubmVjdGlvbiB0byBhIHBhcnRpY3VsYXIKLWRp
cmVjdG9yeSwgYW5kIGl0IGFsbG93cyB2YXJpb3VzIG9wZXJhdGlvbnMgb24gZmlsZXMgd2l0aGlu
IGl0LiAgWW91IGNhbgotKmNsb25lKiBhIHRyYW5zcG9ydCB0byBnZXQgYSBuZXcgVHJhbnNwb3J0
IGNvbm5lY3RlZCB0byBhIHN1YmRpcmVjdG9yeSBvcgotcGFyZW50IGRpcmVjdG9yeS4KLQotVHJh
bnNwb3J0cyBhcmUgbm90IHVzZWQgZm9yIGFjY2VzcyB0byB0aGUgd29ya2luZyB0cmVlLiAgQXQg
cHJlc2VudAotd29ya2luZyB0cmVlcyBhcmUgYWx3YXlzIGxvY2FsIGFuZCB0aGV5IGFyZSBhY2Nl
c3NlZCB0aHJvdWdoIHRoZSByZWd1bGFyCi1QeXRob24gZmlsZSBpbyBtZWNoYW5pc21zLgotCi1m
aWxlbmFtZXMgdnMgVVJMcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotVHJhbnNwb3J0cyB3b3JrIGlu
IFVSTHMuICBUYWtlIG5vdGUgdGhhdCBVUkxzIGFyZSBieSBkZWZpbml0aW9uIG9ubHkKLUFTQ0lJ
IC0gdGhlIGRlY2lzaW9uIG9mIGhvdyB0byBlbmNvZGUgYSBVbmljb2RlIHN0cmluZyBpbnRvIGEg
VVJMIG11c3QgYmUKLXRha2VuIGF0IGEgaGlnaGVyIGxldmVsLCB0eXBpY2FsbHkgaW4gdGhlIFN0
b3JlLiAgKE5vdGUgdGhhdCBTdG9yZXMgYWxzbwotZXNjYXBlIGZpbGVuYW1lcyB3aGljaCBjYW5u
b3QgYmUgc2FmZWx5IHN0b3JlZCBvbiBhbGwgZmlsZXN5c3RlbXMsIGJ1dAotdGhpcyBpcyBhIGRp
ZmZlcmVudCBsZXZlbC4pCi0KLVRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGl0J3Mg
bm90IHBvc3NpYmxlIHRvIHNhZmVseSByb3VuZHRyaXAgYQotVVJMIGludG8gVW5pY29kZSBhbmQg
dGhlbiBiYWNrIGludG8gdGhlIHNhbWUgVVJMLiAgVGhlIFVSTCBzdGFuZGFyZAotZ2l2ZXMgYSB3
YXkgdG8gcmVwcmVzZW50IG5vbi1BU0NJSSBieXRlcyBpbiBBU0NJSSAoYXMgJS1lc2NhcGVzKSwg
YnV0Ci1kb2Vzbid0IHNheSBob3cgdGhvc2UgYnl0ZXMgcmVwcmVzZW50IG5vbi1BU0NJSSBjaGFy
YWN0ZXJzLiAgKFRoZXkncmUgbm90Ci1ndWFyYW50ZWVkIHRvIGJlIFVURi04IC0tIHRoYXQgaXMg
Y29tbW9uIGJ1dCBkb2Vzbid0IGhhcHBlbiBldmVyeXdoZXJlLikKLQotRm9yIGV4YW1wbGUgaWYg
dGhlIHVzZXIgZW50ZXJzIHRoZSB1cmwgYGBodHRwOi8vZXhhbXBsZS8lZTBgYCB0aGVyZSdzIG5v
Ci13YXkgdG8gdGVsbCB3aGV0aGVyIHRoYXQgY2hhcmFjdGVyIHJlcHJlc2VudHMgImxhdGluIHNt
YWxsIGxldHRlciBhIHdpdGgKLWdyYXZlIiBpbiBpc28tODg1OS0xLCBvciAibGF0aW4gc21hbGwg
bGV0dGVyIHIgd2l0aCBhY3V0ZSIgaW4gaXNvLTg4NTktMgotb3IgbWFsZm9ybWVkIFVURi04LiAg
U28gd2UgY2FuJ3QgY29udmVydCB0aGVpciBVUkwgdG8gVW5pY29kZSByZWxpYWJseS4KLQotRXF1
YWxseSBwcm9ibGVtYXRpYyBpZiB3ZSdyZSBnaXZlbiBhIHVybC1saWtlIHN0cmluZyBjb250YWlu
aW5nIG5vbi1hc2NpaQotY2hhcmFjdGVycyAoc3VjaCBhcyB0aGUgYWNjZW50ZWQgYSkgd2UgY2Fu
J3QgYmUgc3VyZSBob3cgdG8gY29udmVydCB0aGF0Ci10byB0aGUgY29ycmVjdCBVUkwsIGJlY2F1
c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGVuY29kaW5nIHRoZSBzZXJ2ZXIgZXhwZWN0cwotZm9yIHRo
b3NlIGNoYXJhY3RlcnMuICAoQWx0aG91Z2ggdGhpcyBpcyBub3QgdG90YWxseSByZWxpYWJsZSB3
ZSBtaWdodCBzdGlsbAotYWNjZXB0IHRoZXNlIGFuZCBhc3N1bWUgdGhleSBzaG91bGQgYmUgcHV0
IGludG8gVVRGLTguKQotCi1BIHNpbWlsYXIgZWRnZSBjYXNlIGlzIHRoYXQgdGhlIHVybCBgYGh0
dHA6Ly9mb28vc3dlZXQlMkZzb3VyYGAgY29udGFpbnMKLW9uZSBkaXJlY3RvcnkgY29tcG9uZW50
IHdob3NlIG5hbWUgaXMgInN3ZWV0L3NvdXIiLiAgVGhlIGVzY2FwZWQgc2xhc2ggaXMKLW5vdCBh
IGRpcmVjdG9yeSBzZXBhcmF0b3IuICBJZiB3ZSB0cnkgdG8gY29udmVydCBVUkxzIHRvIHJlZ3Vs
YXIgVW5pY29kZQotcGF0aHMgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3QuCi0KLVRoaXMg
aW1wbGllcyB0aGF0IFRyYW5zcG9ydHMgbXVzdCBuYXRpdmVseSBkZWFsIHdpdGggVVJMczsgZm9y
IHNpbXBsaWNpdHkKLXRoZXkgKm9ubHkqIGRlYWwgd2l0aCBVUkxzIGFuZCBjb252ZXJzaW9uIG9m
IG90aGVyIHN0cmluZ3MgdG8gVVJMcyBpcyBkb25lCi1lbHNld2hlcmUuICBJbmZvcm1hdGlvbiB0
aGV5IHJldHVybiwgc3VjaCBhcyBmcm9tIGBgbGlzdF9kaXJgYCwgaXMgYWxzbyBpbgotdGhlIGZv
cm0gb2YgVVJMIGNvbXBvbmVudHMuCi0KLQogVW5pY29kZSBhbmQgRW5jb2RpbmcgU3VwcG9ydAog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC01ODksNTMgKzkzOSw2MSBAQAogdmFs
aWQgY2hhcmFjdGVycyBhcmUgZ2VuZXJhdGVkIHdoZXJlIHBvc3NpYmxlLgogCiAKLU1lcmdlL3Jl
dmlldyBwcm9jZXNzCi09PT09PT09PT09PT09PT09PT09PQotCi1JZiB5b3UnZCBsaWtlIHRvIHBy
b3Bvc2UgYSBjaGFuZ2UsIHBsZWFzZSBwb3N0IHRvIHRoZQotYmF6YWFyQGxpc3RzLmNhbm9uaWNh
bC5jb20gbGlzdCB3aXRoIGEgcGF0Y2gsIGJ6ciBjaGFuZ2VzZXQsIG9yIGxpbmsgdG8gYQotYnJh
bmNoLiAgUGxlYXNlIHB1dCAnW3BhdGNoXScgaW4gdGhlIHN1YmplY3Qgc28gd2UgY2FuIHBpY2sg
dGhlbSBvdXQsIGFuZAotaW5jbHVkZSBzb21lIHRleHQgZXhwbGFpbmluZyB0aGUgY2hhbmdlLiAg
UmVtZW1iZXIgdG8gcHV0IGFuIHVwZGF0ZSB0byB0aGUgTkVXUwotZmlsZSBpbiB5b3VyIGRpZmYs
IGlmIGl0IG1ha2VzIGFueSBjaGFuZ2VzIHZpc2libGUgdG8gdXNlcnMgb3IgcGx1Z2luCi1kZXZl
bG9wZXJzLiAgUGxlYXNlIGluY2x1ZGUgYSBkaWZmIGFnYWluc3QgbWFpbmxpbmUgaWYgeW91J3Jl
IGdpdmluZyBhIGxpbmsgdG8KLWEgYnJhbmNoLgotCi1QbGVhc2UgaW5kaWNhdGUgaWYgeW91IHRo
aW5rIHRoZSBjb2RlIGlzIHJlYWR5IHRvIG1lcmdlLCBvciBpZiBpdCdzIGp1c3QgYQotZHJhZnQg
b3IgZm9yIGRpc2N1c3Npb24uICBJZiB5b3Ugd2FudCBjb21tZW50cyBmcm9tIG1hbnkgZGV2ZWxv
cGVycyByYXRoZXIgdGhhbgotdG8gYmUgbWVyZ2VkLCB5b3UgY2FuIHB1dCAnW3JmY10nIGluIHRo
ZSBzdWJqZWN0IGxpbmVzLgotCi1BbnlvbmUgaXMgd2VsY29tZSB0byByZXZpZXcgY29kZS4gIFRo
ZXJlIGFyZSBicm9hZGx5IHRocmVlIGdhdGVzIGZvcgotY29kZSB0byBnZXQgaW46Ci0KLSAqIERv
ZXNuJ3QgcmVkdWNlIHRlc3QgY292ZXJhZ2U6IGlmIGl0IGFkZHMgbmV3IG1ldGhvZHMgb3IgY29t
bWFuZHMsCi0gICB0aGVyZSBzaG91bGQgYmUgdGVzdHMgZm9yIHRoZW0uICBUaGVyZSBpcyBhIGdv
b2QgdGVzdCBmcmFtZXdvcmsKLSAgIGFuZCBwbGVudHkgb2YgZXhhbXBsZXMgdG8gY3JpYiBmcm9t
LCBidXQgaWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZQotICAgd29ya2luZyBvdXQgaG93IHRvIHRl
c3Qgc29tZXRoaW5nIGZlZWwgZnJlZSB0byBwb3N0IGEgZHJhZnQgcGF0Y2gKLSAgIGFuZCBhc2sg
Zm9yIGhlbHAuCi0KLSAqIERvZXNuJ3QgcmVkdWNlIGRlc2lnbiBjbGFyaXR5LCBzdWNoIGFzIGJ5
IGVudGFuZ2xpbmcgb2JqZWN0cwotICAgd2UncmUgdHJ5aW5nIHRvIHNlcGFyYXRlLiAgVGhpcyBp
cyBtb3N0bHkgc29tZXRoaW5nIHRoZSBtb3JlCi0gICBleHBlcmllbmNlZCByZXZpZXdlcnMgbmVl
ZCB0byBoZWxwIGNoZWNrLgotCi0gKiBJbXByb3ZlcyBidWdzLCBmZWF0dXJlcywgc3BlZWQsIG9y
IGNvZGUgc2ltcGxpY2l0eS4KLQotQ29kZSB0aGF0IGdvZXMgaW4gc2hvdWxkIHBhc3MgYWxsIHRo
cmVlLgotCi1JZiB5b3UgcmVhZCBhIHBhdGNoIHBsZWFzZSByZXBseSBhbmQgc2F5IHNvLiAgV2Ug
Y2FuIHVzZSBhIG51bWVyaWMgc2NhbGUKLW9mIC0xLCAtMCwgKzAsICsxLCBtZWFuaW5nIHJlc3Bl
Y3RpdmVseSAicmVhbGx5IGRvbid0IHdhbnQgaXQgaW4gY3VycmVudAotZm9ybSIsICJzb21ld2hh
dCB1bmNvbWZvcnRhYmxlIiwgIm9rIHdpdGggbWUiLCBhbmQgInBsZWFzZSBwdXQgaXQgaW4iLgot
QW55b25lIGNhbiAidm90ZSIuICAgKEl0J3Mgbm90IHJlYWxseSB2b3RpbmcsIGp1c3QgYSB0ZXJz
ZSBleHByZXNzaW9uLikKLQotSWYgc29tZXRoaW5nIGdldHMgc2F5IHR3byArMSB2b3RlcyBmcm9t
IGNvcmUgcmV2aWV3ZXJzLCBhbmQgbm8KLXZldG9zLCB0aGVuIGl0J3MgT0sgdG8gY29tZSBpbi4g
IEFueSBvZiB0aGUgY29yZSBkZXZlbG9wZXJzIGNhbiBicmluZyBpdAotaW50byB0aGVpciBpbnRl
Z3JhdGlvbiBicmFuY2gsIHdoaWNoIEknbGwgbWVyZ2UgcmVndWxhcmx5LiAgKElmIHlvdSBkbwot
c28sIHBsZWFzZSByZXBseSBhbmQgc2F5IHNvLikKLQotCi1NYWtpbmcgaW5zdGFsbGVycyBmb3Ig
T1MgV2luZG93cworUG9ydGFiaWxpdHkgVGlwcworPT09PT09PT09PT09PT09PQorCitUaGUgYGBi
enJsaWIub3N1dGlsc2BgIG1vZHVsZSBoYXMgbWFueSB1c2VmdWwgaGVscGVyIGZ1bmN0aW9ucywg
aW5jbHVkaW5nCitzb21lIG1vcmUgcG9ydGFibGUgdmFyaWFudHMgb2YgZnVuY3Rpb25zIGluIHRo
ZSBzdGFuZGFyZCBsaWJyYXJ5LgorCitJbiBwYXJ0aWN1bGFyLCBkb24ndCB1c2UgYGBzaHV0aWwu
cm10cmVlYGAgdW5sZXNzIGl0J3MgYWNjZXB0YWJsZSBmb3IgaXQKK3RvIGZhaWwgb24gV2luZG93
cyBpZiBzb21lIGZpbGVzIGFyZSByZWFkb25seSBvciBzdGlsbCBvcGVuIGVsc2V3aGVyZS4KK1Vz
ZSBgYGJ6cmxpYi5vc3V0aWxzLnJtdHJlZWBgIGluc3RlYWQuCisKKworQyBFeHRlbnNpb24gTW9k
dWxlcworPT09PT09PT09PT09PT09PT09PQorCitXZSB3cml0ZSBzb21lIGV4dGVuc2lvbnMgaW4g
QyB1c2luZyBweXJleC4gV2UgZGVzaWduIHRoZXNlIHRvIHdvcmsgaW4KK3RocmVlIHNjZW5hcmlv
czoKKworICogVXNlciB3aXRoIG5vIEMgY29tcGlsZXIKKyAqIFVzZXIgd2l0aCBDIGNvbXBpbGVy
CisgKiBEZXZlbG9wZXJzCisKK1RoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW5zdGFsbCBienIgaXMg
dG8gaGF2ZSBhIEMgY29tcGlsZXIgc28gdGhhdCB0aGUKK2V4dGVuc2lvbnMgY2FuIGJlIGJ1aWx0
LCBidXQgaWYgbm8gQyBjb21waWxlciBpcyBwcmVzZW50LCB0aGUgcHVyZSBweXRob24KK3ZlcnNp
b25zIHdlIHN1cHBseSB3aWxsIHdvcmssIHRob3VnaCBtb3JlIHNsb3dseS4KKworRm9yIGRldmVs
b3BlcnMgd2UgcmVjb21tZW5kIHRoYXQgcHlyZXggYmUgaW5zdGFsbGVkLCBzbyB0aGF0IHRoZSBD
CitleHRlbnNpb25zIGNhbiBiZSBjaGFuZ2VkIGlmIG5lZWRlZC4KKworRm9yIHRoZSBDIGV4dGVu
c2lvbnMsIHRoZSBleHRlbnNpb24gbW9kdWxlIHNob3VsZCBhbHdheXMgbWF0Y2ggdGhlCitvcmln
aW5hbCBweXRob24gb25lIGluIGFsbCByZXNwZWN0cyAobW9kdWxvIHNwZWVkKS4gVGhpcyBzaG91
bGQgYmUKK21haW50YWluZWQgb3ZlciB0aW1lLgorCitUbyBjcmVhdGUgYW4gZXh0ZW5zaW9uLCBh
ZGQgcnVsZXMgdG8gc2V0dXAucHkgZm9yIGJ1aWxkaW5nIGl0IHdpdGggcHlyZXgsCithbmQgd2l0
aCBkaXN0dXRpbHMuIE5vdyBzdGFydCB3aXRoIGFuIGVtcHR5IC5weXggZmlsZS4gQXQgdGhlIHRv
cCBhZGQKKyJpbmNsdWRlICd5b3VybW9kdWxlLnB5JyIuIFRoaXMgd2lsbCBpbXBvcnQgdGhlIGNv
bnRlbnRzIG9mIGZvby5weSBpbnRvIHRoaXMgCitmaWxlIGF0IGJ1aWxkIHRpbWUgLSByZW1lbWJl
ciB0aGF0IG9ubHkgb25lIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCBhdAorcnVudGltZS4gTm93IHlv
dSBjYW4gc3ViY2xhc3MgY2xhc3Nlcywgb3IgcmVwbGFjZSBmdW5jdGlvbnMsIGFuZCBvbmx5IHlv
dXIKK2NoYW5nZXMgbmVlZCB0byBiZSBwcmVzZW50IGluIHRoZSAucHl4IGZpbGUuCisKK05vdGUg
dGhhdCBweXJleCBkb2VzIG5vdCBzdXBwb3J0IGFsbCAyLjQgcHJvZ3JhbW1pbmcgaWRpb21zLCBz
byBzb21lCitzeW50YXggY2hhbmdlcyBtYXkgYmUgcmVxdWlyZWQuIEkuZS4gCisKKyAtICdmcm9t
IGZvbyBpbXBvcnQgKGJhciwgZ2FtKScgbmVlZHMgdG8gY2hhbmdlIHRvIG5vdCB1c2UgdGhlIGJy
YWNrZXRzLiAKKyAtICdpbXBvcnQgZm9vLmJhciBhcyBiYXInIG5lZWRzIHRvIGJlICdpbXBvcnQg
Zm9vLmJhcjsgYmFyID0gZm9vLmJhcicgCisKK0lmIHRoZSBjaGFuZ2VzIGFyZSB0b28gZHJhbWF0
aWMsIGNvbnNpZGVyCittYWludGFpbmluZyB0aGUgcHl0aG9uIGNvZGUgdHdpY2UgLSBvbmNlIGlu
IHRoZSAucHl4LCBhbmQgb25jZSBpbiB0aGUgLnB5LAorYW5kIG5vIGxvbmdlciBpbmNsdWRpbmcg
dGhlIC5weSBmaWxlLgorCisKK01ha2luZyBJbnN0YWxsZXJzIGZvciBPUyBXaW5kb3dzCiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogVG8gYnVpbGQgYSB3aW4zMiBpbnN0YWxsZXIs
IHNlZSB0aGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSB3aWtpIHBhZ2U6CiBodHRwOi8vYmF6YWFyLXZj
cy5vcmcvQnpyV2luMzJJbnN0YWxsZXIKIAogCi06OiB2aW06IGZ0PXJzdCB0dz03NCBhaQorLi4K
KyAgIHZpbTogZnQ9cnN0IHR3PTc0IGFpCgo=

=== renamed file bzrlib/transport/smart.py // bzrlib/transport/remote.py // las
... t-changed:andrew.bennetts@canonical.com-20070430064224-hagj8m0855p1sxn7 // 
... encoding:base64
LS0tIGJ6cmxpYi90cmFuc3BvcnQvc21hcnQucHkKKysrIGJ6cmxpYi90cmFuc3BvcnQvcmVtb3Rl
LnB5CkBAIC0xNCwyMTEgKzE0LDI0IEBACiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIAotIiIi
U21hcnQtc2VydmVyIHByb3RvY29sLCBjbGllbnQgYW5kIHNlcnZlci4KLQotUmVxdWVzdHMgYXJl
IHNlbnQgYXMgYSBjb21tYW5kIGFuZCBsaXN0IG9mIGFyZ3VtZW50cywgZm9sbG93ZWQgYnkgb3B0
aW9uYWwKLWJ1bGsgYm9keSBkYXRhLiAgUmVzcG9uc2VzIGFyZSBzaW1pbGFybHkgYSByZXNwb25z
ZSBhbmQgbGlzdCBvZiBhcmd1bWVudHMsCi1mb2xsb3dlZCBieSBidWxrIGJvZHkgZGF0YS4gOjoK
LQotICBTRVAgOj0gJ1wwMDEnCi0gICAgRmllbGRzIGFyZSBzZXBhcmF0ZWQgYnkgQ3RybC1BLgot
ICBCVUxLX0RBVEEgOj0gQ0hVTksgVFJBSUxFUgotICAgIENodW5rcyBjYW4gYmUgcmVwZWF0ZWQg
YXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuCi0gIENIVU5LIDo9IENIVU5LX0xFTiBDSFVOS19C
T0RZCi0gIENIVU5LX0xFTiA6PSBESUdJVCsgTkVXTElORQotICAgIEdpdmVzIHRoZSBudW1iZXIg
b2YgYnl0ZXMgaW4gdGhlIGZvbGxvd2luZyBjaHVuay4KLSAgQ0hVTktfQk9EWSA6PSBCWVRFW2No
dW5rX2xlbl0KLSAgVFJBSUxFUiA6PSBTVUNDRVNTX1RSQUlMRVIgfCBFUlJPUl9UUkFJTEVSCi0g
IFNVQ0NFU1NfVFJBSUxFUiA6PSAnZG9uZScgTkVXTElORQotICBFUlJPUl9UUkFJTEVSIDo9IAot
Ci1QYXRocyBhcmUgcGFzc2VkIGFjcm9zcyB0aGUgbmV0d29yay4gIFRoZSBjbGllbnQgbmVlZHMg
dG8gc2VlIGEgbmFtZXNwYWNlIHRoYXQKLWluY2x1ZGVzIGFueSByZXBvc2l0b3J5IHRoYXQgbWln
aHQgbmVlZCB0byBiZSByZWZlcmVuY2VkLCBhbmQgdGhlIGNsaWVudCBuZWVkcwotdG8ga25vdyBh
Ym91dCBhIHJvb3QgZGlyZWN0b3J5IGJleW9uZCB3aGljaCBpdCBjYW5ub3QgYXNjZW5kLgotCi1T
ZXJ2ZXJzIHJ1biBvdmVyIHNzaCB3aWxsIHR5cGljYWxseSB3YW50IHRvIGJlIGFibGUgdG8gYWNj
ZXNzIGFueSBwYXRoIHRoZSB1c2VyIAotY2FuIGFjY2Vzcy4gIFB1YmxpYyBzZXJ2ZXJzIG9uIHRo
ZSBvdGhlciBoYW5kICh3aGljaCBtaWdodCBiZSBvdmVyIGh0dHAsIHNzaAotb3IgdGNwKSB3aWxs
IHR5cGljYWxseSB3YW50IHRvIHJlc3RyaWN0IGFjY2VzcyB0byBvbmx5IGEgcGFydGljdWxhciBk
aXJlY3RvcnkgCi1hbmQgaXRzIGNoaWxkcmVuLCBzbyB3aWxsIHdhbnQgdG8gZG8gYSBzb2Z0d2Fy
ZSB2aXJ0dWFsIHJvb3QgYXQgdGhhdCBsZXZlbC4KLUluIG90aGVyIHdvcmRzIHRoZXknbGwgd2Fu
dCB0byByZXdyaXRlIGluY29taW5nIHBhdGhzIHRvIGJlIHVuZGVyIHRoYXQgbGV2ZWwKLShhbmQg
cHJldmVudCBlc2NhcGluZyB1c2luZyAuLi8gdHJpY2tzLikKLQotVVJMcyB0aGF0IGluY2x1ZGUg
fiBzaG91bGQgcHJvYmFibHkgYmUgcGFzc2VkIGFjcm9zcyB0byB0aGUgc2VydmVyIHZlcmJhdGlt
Ci1hbmQgdGhlIHNlcnZlciBjYW4gZXhwYW5kIHRoZW0uICBUaGlzIHdpbGwgcHJvYWJseSBub3Qg
YmUgbWVhbmluZ2Z1bCB3aGVuIAotbGltaXRlZCB0byBhIGRpcmVjdG9yeT8KLQotQXQgdGhlIGJv
dHRvbSBsZXZlbCBzb2NrZXQsIHBpcGVzLCBIVFRQIHNlcnZlci4gIEZvciBzb2NrZXRzLCB3ZSBo
YXZlIHRoZSBpZGVhCi10aGF0IHlvdSBoYXZlIG11bHRpcGxlIHJlcXVlc3RzIGFuZCBnZXQgYSBy
ZWFkIGVycm9yIGJlY2F1c2UgdGhlIG90aGVyIHNpZGUgZGlkCi1zaHV0ZG93bi4gIEZvciBwaXBl
cyB3ZSBoYXZlIHJlYWQgcGlwZSB3aGljaCB3aWxsIGhhdmUgYSB6ZXJvIHJlYWQgd2hpY2ggbWFy
a3MKLWVuZC1vZi1maWxlLiAgRm9yIEhUVFAgc2VydmVyIGVudmlyb25tZW50IHRoZXJlIGlzIG5v
dCBlbmQtb2Ytc3RyZWFtIGJlY2F1c2UKLWVhY2ggcmVxdWVzdCBjb21pbmcgaW50byB0aGUgc2Vy
dmVyIGlzIGluZGVwZW5kZW50LgotCi1TbyB3ZSBuZWVkIGEgd3JhcHBlciBhcm91bmQgcGlwZXMg
YW5kIHNvY2tldHMgdG8gc2VwZXJhdGUgb3V0IHJlcXVlc3RzIGZyb20KLXN1YnN0cmF0ZSBhbmQg
dGhpcyB3aWxsIGdpdmUgdXMgYSBzaW5nbGUgbW9kZWwgd2hpY2ggaXMgY29uc2lzdCBmb3IgSFRU
UCwKLXNvY2tldHMgYW5kIHBpcGVzLgotCi1TZXJ2ZXItc2lkZQotLS0tLS0tLS0tLS0KLQotIE1F
RElVTSAgKGZhY3RvcnkgZm9yIHByb3RvY29sLCByZWFkcyBieXRlcyAmIHB1c2hlcyB0byBwcm90
b2NvbCwKLSAgICAgICAgICB1c2VzIHByb3RvY29sIHRvIGRldGVjdCBlbmQtb2YtcmVxdWVzdCwg
c2VuZHMgd3JpdHRlbgotICAgICAgICAgIGJ5dGVzIHRvIGNsaWVudCkgZS5nLiBzb2NrZXQsIHBp
cGUsIEhUVFAgcmVxdWVzdCBoYW5kbGVyLgotICBeCi0gIHwgYnl0ZXMuCi0gIHYKLQotUFJPVE9D
T0wgIChzZXJpYWxpemF0aW9uLCBkZXNlcmlhbGl6YXRpb24pICBhY2NlcHRzIGJ5dGVzIGZvciBv
bmUKLSAgICAgICAgICByZXF1ZXN0LCBkZWNvZGVzIGFjY29yZGluZyB0byBpbnRlcm5hbCBzdGF0
ZSwgcHVzaGVzCi0gICAgICAgICAgc3RydWN0dXJlZCBkYXRhIHRvIGhhbmRsZXIuICBhY2NlcHRz
IHN0cnVjdHVyZWQgZGF0YSBmcm9tCi0gICAgICAgICAgaGFuZGxlciBhbmQgZW5jb2RlcyBhbmQg
d3JpdGVzIHRvIHRoZSBtZWRpdW0uICBmYWN0b3J5IGZvcgotICAgICAgICAgIGhhbmRsZXIuCi0g
IF4KLSAgfCBzdHJ1Y3R1cmVkIGRhdGEKLSAgdgotCi1IQU5ETEVSICAgKGRvbWFpbiBsb2dpYykg
YWNjZXB0cyBzdHJ1Y3R1cmVkIGRhdGEsIG9wZXJhdGVzIHN0YXRlCi0gICAgICAgICAgbWFjaGlu
ZSB1bnRpbCB0aGUgcmVxdWVzdCBjYW4gYmUgc2F0aXNmaWVkLAotICAgICAgICAgIHNlbmRzIHN0
cnVjdHVyZWQgZGF0YSB0byB0aGUgcHJvdG9jb2wuCi0KLQotQ2xpZW50LXNpZGUKLS0tLS0tLS0t
LS0tCi0KLSBDTElFTlQgICAgICAgICAgICAgZG9tYWluIGxvZ2ljLCBhY2NlcHRzIGRvbWFpbiBy
ZXF1ZXN0cywgZ2VuZXJhdGVkIHN0cnVjdHVyZWQKLSAgICAgICAgICAgICAgICAgICAgZGF0YSwg
cmVhZHMgc3RydWN0dXJlZCBkYXRhIGZyb20gcmVzcG9uc2VzIGFuZCB0dXJucyBpbnRvCi0gICAg
ICAgICAgICAgICAgICAgIGRvbWFpbiBkYXRhLiAgU2VuZHMgc3RydWN0dXJlZCBkYXRhIHRvIHRo
ZSBwcm90b2NvbC4KLSAgICAgICAgICAgICAgICAgICAgT3BlcmF0ZXMgc3RhdGUgbWFjaGluZXMg
dW50aWwgdGhlIHJlcXVlc3QgY2FuIGJlIGRlbGl2ZXJlZAotICAgICAgICAgICAgICAgICAgICAo
ZS5nLiByZWFkaW5nIGZyb20gYSBidW5kbGUgZ2VuZXJhdGVkIGluIGJ6cmxpYiB0byBkZWxpdmVy
IGEKLSAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgcmVxdWVzdCkuCi0KLSAgICAgICAgICAg
ICAgICAgICAgUG9zc2libHkgdGhpcyBzaG91bGQganVzdCBiZSBSZW1vdGVCenJEaXIsIFJlbW90
ZVRyYW5zcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0gIF4KLSAgfCBzdHJ1Y3R1cmVk
IGRhdGEKLSAgdgotCi1QUk9UT0NPTCAgKHNlcmlhbGl6YXRpb24sIGRlc2VyaWFsaXphdGlvbikg
IGFjY2VwdHMgc3RydWN0dXJlZCBkYXRhIGZvciBvbmUKLSAgICAgICAgICByZXF1ZXN0LCBlbmNv
ZGVzIGFuZCB3cml0ZXMgdG8gdGhlIG1lZGl1bS4gIFJlYWRzIGJ5dGVzIGZyb20gdGhlCi0gICAg
ICAgICAgbWVkaXVtLCBkZWNvZGVzIGFuZCBhbGxvd3MgdGhlIGNsaWVudCB0byByZWFkIHN0cnVj
dHVyZWQgZGF0YS4KLSAgXgotICB8IGJ5dGVzLgotICB2Ci0KLSBNRURJVU0gIChhY2NlcHRzIGJ5
dGVzIGZyb20gdGhlIHByb3RvY29sICYgZGVsaXZlcnMgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuCi0g
ICAgICAgICAgQWxsb3dzIHRoZSBwb3RvY29sIHRvIHJlYWQgYnl0ZXMgZS5nLiBzb2NrZXQsIHBp
cGUsIEhUVFAgcmVxdWVzdC4KKyIiIlJlbW90ZVRyYW5zcG9ydCBjbGllbnQgZm9yIHRoZSBzbWFy
dC1zZXJ2ZXIuCisKK1RoaXMgbW9kdWxlIHNob3VsZG4ndCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4g
IFRoZSBjbGFzc2VzIGRlZmluZWQgaGVyZSBzaG91bGQgYmUKK2ltcG9ydGVkIGZyb20gYnpybGli
LnNtYXJ0LgogIiIiCiAKLQotIyBUT0RPOiBfdHJhbnNsYXRlX2Vycm9yIHNob3VsZCBiZSBvbiB0
aGUgY2xpZW50LCBub3QgdGhlIHRyYW5zcG9ydCBiZWNhdXNlCi0jICAgICBlcnJvciBjb2Rpbmcg
aXMgd2lyZSBwcm90b2NvbCBzcGVjaWZpYy4KLQotIyBUT0RPOiBBIHBsYWluIGludGVnZXIgZnJv
bSBxdWVyeV92ZXJzaW9uIGlzIHRvbyBzaW1wbGU7IHNob3VsZCBnaXZlIHNvbWUKLSMgY2FwYWJp
bGl0aWVzIHRvbz8KLQotIyBUT0RPOiBTZXJ2ZXIgc2hvdWxkIHByb2JhYmx5IGNhdGNoIGV4Y2Vw
dGlvbnMgd2l0aGluIGl0c2VsZiBhbmQgc2VuZCB0aGVtCi0jIGJhY2sgYWNyb3NzIHRoZSBuZXR3
b3JrLiAgKEJ1dCBzaG91bGRuJ3QgY2F0Y2ggS2V5Ym9hcmRJbnRlcnJ1cHQgZXRjKQotIyBBbHNv
IG5lZWRzIHRvIHNvbWVob3cgcmVwb3J0IHByb3RvY29sIGVycm9ycyBsaWtlIGJhZCByZXF1ZXN0
cy4gIE5lZWQgdG8KLSMgY29uc2lkZXIgaG93IHdlJ2xsIGhhbmRsZSBlcnJvciByZXBvcnRpbmcs
IGUuZy4gaWYgd2UgZ2V0IGhhbGZ3YXkgdGhyb3VnaCBhCi0jIGJ1bGsgdHJhbnNmZXIgYW5kIHRo
ZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcuCi0KLSMgVE9ETzogU3RhbmRhcmQgbWFya2VyIGF0IHN0
YXJ0IG9mIHJlcXVlc3QvcmVzcG9uc2UgbGluZXM/Ci0KLSMgVE9ETzogTWFrZSBlYWNoIHJlcXVl
c3QgYW5kIHJlc3BvbnNlIHNlbGYtdmFsaWRhdGFibGUsIGUuZy4gd2l0aCBjaGVja3N1bXMuCi0j
Ci0jIFRPRE86IGdldC9wdXQgb2JqZWN0cyBjb3VsZCBiZSBjaGFuZ2VkIHRvIGdyYWR1YWxseSBy
ZWFkIGJhY2sgdGhlIGRhdGEgYXMgaXQKLSMgY29tZXMgYWNyb3NzIHRoZSBuZXR3b3JrCi0jCi0j
IFRPRE86IFdoYXQgc2hvdWxkIHRoZSBzZXJ2ZXIgZG8gaWYgaXQgaGl0cyBhbiBlcnJvciBhbmQg
aGFzIHRvIHRlcm1pbmF0ZT8KLSMKLSMgVE9ETzogaXMgaXQgdXNlZnVsIHRvIGFsbG93IG11bHRp
cGxlIGNodW5rcyBpbiB0aGUgYnVsayBkYXRhPwotIwotIyBUT0RPOiBJZiB3ZSBnZXQgYW4gZXhj
ZXB0aW9uIGR1cmluZyB0cmFuc21pc3Npb24gb2YgYnVsayBkYXRhIHdlIGNhbid0IGp1c3QKLSMg
ZW1pdCB0aGUgZXhjZXB0aW9uIGJlY2F1c2UgaXQgd29uJ3QgYmUgc2Vlbi4KLSMgICBKb2huIHBy
b3Bvc2VzOiAgSSB0aGluayBpdCB3b3VsZCBiZSB3b3J0aHdoaWxlIHRvIGhhdmUgYSBoZWFkZXIg
b24gZWFjaAotIyAgIGNodW5rLCB0aGF0IGluZGljYXRlcyBpdCBpcyBhbm90aGVyIGNodW5rLiBU
aGVuIHlvdSBjYW4gc2VuZCBhbiAnZXJyb3InCi0jICAgY2h1bmsgYXMgbG9uZyBhcyB5b3UgZmlu
aXNoIHRoZSBwcmV2aW91cyBjaHVuay4KLSMKLSMgVE9ETzogQ2xvbmUgbWV0aG9kIG9uIFRyYW5z
cG9ydDsgc2hvdWxkIHdvcmsgdXAgdG93YXJkcyBwYXJlbnQgZGlyZWN0b3J5OwotIyB1bmNsZWFy
IGhvdyB0aGlzIHNob3VsZCBiZSBzdG9yZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRoZSBzZXJ2ZXIu
Li4gbWF5YmUKLSMganVzdCBwYXNzIGl0IG9uIGFsbCByZWxldmFudCByZXF1ZXN0cz8KLSMKLSMg
VE9ETzogQmV0dGVyIG5hbWUgdGhhbiBjbG9uZSgpIGZvciBjaGFuZ2luZyBiZXR3ZWVuIGRpcmVj
dG9yaWVzLiAgSG93IGFib3V0Ci0jIG9wZW5fZGlyIG9yIGNoYW5nZV9kaXIgb3IgY2hkaXI/Ci0j
Ci0jIFRPRE86IElzIGl0IHJlYWxseSBnb29kIHRvIGhhdmUgdGhlIG5vdGlvbiBvZiBjdXJyZW50
IGRpcmVjdG9yeSB3aXRoaW4gdGhlCi0jIGNvbm5lY3Rpb24/ICBQZXJoYXBzIGFsbCBUcmFuc3Bv
cnRzIHNob3VsZCBmYWN0b3Igb3V0IGEgY29tbW9uIGNvbm5lY3Rpb24KLSMgZnJvbSB0aGUgdGhp
bmcgdGhhdCBoYXMgdGhlIGRpcmVjdG9yeSBjb250ZXh0PwotIwotIyBUT0RPOiBQdWxsIG1vcmUg
dGhpbmdzIGNvbW1vbiB0byBzZnRwIGFuZCBzc2ggdG8gYSBoaWdoZXIgbGV2ZWwuCi0jCi0jIFRP
RE86IFRoZSBzZXJ2ZXIgdGhhdCBtYW5hZ2VzIGEgY29ubmVjdGlvbiBzaG91bGQgYmUgcXVpdGUg
c21hbGwgYW5kIHJldGFpbgotIyBtaW5pbXVtIHN0YXRlIGJlY2F1c2UgZWFjaCBvZiB0aGUgcmVx
dWVzdHMgYXJlIHN1cHBvc2VkIHRvIGJlIHN0YXRlbGVzcy4KLSMgVGhlbiB3ZSBjYW4gd3JpdGUg
YW5vdGhlciBpbXBsZW1lbnRhdGlvbiB0aGF0IG1hcHMgdG8gaHR0cC4KLSMKLSMgVE9ETzogV2hh
dCB0byBkbyB3aGVuIGEgY2xpZW50IGNvbm5lY3Rpb24gaXMgZ2FyYmFnZSBjb2xsZWN0ZWQ/ICBN
YXliZSBqdXN0Ci0jIGFicnVwdGx5IGRyb3AgdGhlIGNvbm5lY3Rpb24/Ci0jCi0jIFRPRE86IFNl
cnZlciBpbiBzb21lIGNhc2VzIHdpbGwgbmVlZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gZmlsZXMg
b3V0c2lkZSBvZgotIyBhIHBhcnRpY3VsYXIgcm9vdCBkaXJlY3RvcnkuICBMb2NhbFRyYW5zcG9y
dCBkb2Vzbid0IGRvIGFueXRoaW5nIHRvIHN0b3AgeW91Ci0jIGFzY2VuZGluZyBhYm92ZSB0aGUg
YmFzZSBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gcHJldmVudCBwYXRocwotIyBjb250YWluaW5n
ICcuLicgaW4gZWl0aGVyIHRoZSBzZXJ2ZXIgb3IgdHJhbnNwb3J0IGxheWVycy4gIChBbHNvIG5l
ZWQgdG8KLSMgY29uc2lkZXIgd2hhdCBoYXBwZW5zIGlmIHNvbWVvbmUgY3JlYXRlcyBhIHN5bWxp
bmsgcG9pbnRpbmcgb3V0c2lkZSB0aGUgCi0jIGRpcmVjdG9yeSB0cmVlLi4uKQotIwotIyBUT0RP
OiBTZXJ2ZXIgc2hvdWxkIHJlYmFzZSBhYnNvbHV0ZSBwYXRocyBjb21pbmcgYWNyb3NzIHRoZSBu
ZXR3b3JrIHRvIHB1dAotIyB0aGVtIHVuZGVyIHRoZSB2aXJ0dWFsIHJvb3QsIGlmIG9uZSBpcyBp
biB1c2UuICBMb2NhbFRyYW5zcG9ydCBjdXJyZW50bHkKLSMgZG9lc24ndCBkbyB0aGF0OyBpZiB5
b3UgZ2l2ZSBpdCBhbiBhYnNvbHV0ZSBwYXRoIGl0IGp1c3QgdXNlcyBpdC4KLSMgCi0jIFhYWDog
QXJndW1lbnRzIGNhbid0IGNvbnRhaW4gbmV3bGluZXMgb3IgYXNjaWk7IHBvc3NpYmx5IHdlIHNo
b3VsZCBlLmcuCi0jIHVybGVzY2FwZSB0aGVtIGluc3RlYWQuICBJbmRlZWQgcG9zc2libHkgdGhp
cyBzaG91bGQganVzdCBsaXRlcmFsbHkgYmUKLSMgaHR0cC1vdmVyLXNzaC4KLSMKLSMgRklYTUU6
IFRoaXMgdHJhbnNwb3J0LCB3aXRoIHNldmVyYWwgb3RoZXJzLCBoYXMgaW1wZXJmZWN0IGhhbmRs
aW5nIG9mIHBhdGhzCi0jIHdpdGhpbiB1cmxzLiAgSXQnZCBwcm9iYWJseSBiZSBiZXR0ZXIgZm9y
ICIuLiIgZnJvbSBhIHJvb3QgdG8gcmFpc2UgYW4gZXJyb3IKLSMgcmF0aGVyIHRoYW4gcmV0dXJu
IHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB3ZSBkbyBhdCBwcmVzZW50LgotIwotIyBUT0RPOiBSYXRo
ZXIgdGhhbiB3b3JraW5nIGF0IHRoZSBUcmFuc3BvcnQgbGF5ZXIgd2Ugd2FudCBhIEJyYW5jaCwK
LSMgUmVwb3NpdG9yeSBvciBCenJEaXIgb2JqZWN0cyB0aGF0IHRhbGsgdG8gYSBzZXJ2ZXIuCi0j
Ci0jIFRPRE86IFByb2JhYmx5IHdhbnQgc29tZSB3YXkgZm9yIHNlcnZlciBjb21tYW5kcyB0byBn
cmFkdWFsbHkgcHJvZHVjZSBib2R5Ci0jIGRhdGEgcmF0aGVyIHRoYW4gcGFzc2luZyBpdCBhcyBh
IHN0cmluZzsgdGhleSBjb3VsZCBwZXJoYXBzIHBhc3MgYW4KLSMgaXRlcmF0b3ItbGlrZSBjYWxs
YmFjayB0aGF0IHdpbGwgZ3JhZHVhbGx5IHlpZWxkIGRhdGE7IGl0IHByb2JhYmx5IG5lZWRzIGEK
LSMgY2xvc2UoKSBtZXRob2QgdGhhdCB3aWxsIGFsd2F5cyBiZSBjbG9zZWQgdG8gZG8gYW55IG5l
Y2Vzc2FyeSBjbGVhbnVwLgotIwotIyBUT0RPOiBTcGxpdCB0aGUgYWN0dWFsIHNtYXJ0IHNlcnZl
ciBmcm9tIHRoZSBzc2ggZW5jb2Rpbmcgb2YgaXQuCi0jCi0jIFRPRE86IFBlcmhhcHMgc3VwcG9y
dCBmaWxlLWxldmVsIHJlYWR3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlIHRyYW5zcG9ydAotIyB0
b28uCi0jCi0jIFRPRE86IFNtYXJ0QnpyRGlyIGNsYXNzLCBwcm94eWluZyBhbGwgQnJhbmNoIGV0
YyBtZXRob2RzIGFjcm9zcyB0byBhbm90aGVyCi0jIGJyYW5jaCBkb2luZyBmaWxlLWxldmVsIG9w
ZXJhdGlvbnMuCi0jCitfX2FsbF9fID0gWydSZW1vdGVUcmFuc3BvcnQnLCAnUmVtb3RlVENQVHJh
bnNwb3J0JywgJ1JlbW90ZVNTSFRyYW5zcG9ydCddCiAKIGZyb20gY1N0cmluZ0lPIGltcG9ydCBT
dHJpbmdJTwotaW1wb3J0IGVycm5vCi1pbXBvcnQgb3MKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBz
eXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHVybGxpYgogaW1w
b3J0IHVybHBhcnNlCiAKIGZyb20gYnpybGliIGltcG9ydCAoCi0gICAgYnpyZGlyLAogICAgIGVy
cm9ycywKLSAgICByZXZpc2lvbiwKICAgICB0cmFuc3BvcnQsCi0gICAgdHJhY2UsCiAgICAgdXJs
dXRpbHMsCiAgICAgKQotZnJvbSBienJsaWIuYnVuZGxlLnNlcmlhbGl6ZXIgaW1wb3J0IHdyaXRl
X2J1bmRsZQotZnJvbSBienJsaWIuaG9va3MgaW1wb3J0IEhvb2tzCi10cnk6Ci0gICAgZnJvbSBi
enJsaWIudHJhbnNwb3J0IGltcG9ydCBzc2gKLWV4Y2VwdCBlcnJvcnMuUGFyYW1pa29Ob3RQcmVz
ZW50OgotICAgICMgbm8gcGFyYW1pa28uICBTbWFydFNTSENsaWVudE1lZGl1bSB3aWxsIGJyZWFr
LgotICAgIHBhc3MKK2Zyb20gYnpybGliLnNtYXJ0IGltcG9ydCBjbGllbnQsIG1lZGl1bSwgcHJv
dG9jb2wKIAogIyBtdXN0IGRvIHRoaXMgb3RoZXJ3aXNlIHVybGxpYiBjYW4ndCBwYXJzZSB0aGUg
dXJscyBwcm9wZXJseSA6KAogZm9yIHNjaGVtZSBpbiBbJ3NzaCcsICdienInLCAnYnpyK2xvb3Bi
YWNrJywgJ2J6citzc2gnLCAnYnpyK2h0dHAnXToKQEAgLTIyNyw3OTQgKzQwLDIyIEBACiAKIAog
IyBQb3J0IDQxNTUgaXMgdGhlIGRlZmF1bHQgcG9ydCBmb3IgYnpyOi8vLCByZWdpc3RlcmVkIHdp
dGggSUFOQS4KK0JaUl9ERUZBVUxUX0lOVEVSRkFDRSA9ICcwLjAuMC4wJwogQlpSX0RFRkFVTFRf
UE9SVCA9IDQxNTUKIAogCi1kZWYgX3JlY3ZfdHVwbGUoZnJvbV9maWxlKToKLSAgICByZXFfbGlu
ZSA9IGZyb21fZmlsZS5yZWFkbGluZSgpCi0gICAgcmV0dXJuIF9kZWNvZGVfdHVwbGUocmVxX2xp
bmUpCi0KLQotZGVmIF9kZWNvZGVfdHVwbGUocmVxX2xpbmUpOgotICAgIGlmIHJlcV9saW5lID09
IE5vbmUgb3IgcmVxX2xpbmUgPT0gJyc6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgaWYgcmVx
X2xpbmVbLTFdICE9ICdcbic6Ci0gICAgICAgIHJhaXNlIGVycm9ycy5TbWFydFByb3RvY29sRXJy
b3IoInJlcXVlc3QgJXIgbm90IHRlcm1pbmF0ZWQiICUgcmVxX2xpbmUpCi0gICAgcmV0dXJuIHR1
cGxlKHJlcV9saW5lWzotMV0uc3BsaXQoJ1x4MDEnKSkKLQotCi1kZWYgX2VuY29kZV90dXBsZShh
cmdzKToKLSAgICAiIiJFbmNvZGUgdGhlIHR1cGxlIGFyZ3MgdG8gYSBieXRlc3RyZWFtLiIiIgot
ICAgIHJldHVybiAnXHgwMScuam9pbihhcmdzKSArICdcbicKLQotCi1jbGFzcyBTbWFydFByb3Rv
Y29sQmFzZShvYmplY3QpOgotICAgICIiIk1ldGhvZHMgY29tbW9uIHRvIGNsaWVudCBhbmQgc2Vy
dmVyIiIiCi0KLSAgICAjIFRPRE86IHRoaXMgb25seSBhY3R1YWxseSBhY2NvbW9kYXRlcyBhIHNp
bmdsZSBibG9jazsgcG9zc2libHkgc2hvdWxkCi0gICAgIyBzdXBwb3J0IG11bHRpcGxlIGNodW5r
cz8KLSAgICBkZWYgX2VuY29kZV9idWxrX2RhdGEoc2VsZiwgYm9keSk6Ci0gICAgICAgICIiIkVu
Y29kZSBib2R5IGFzIGEgYnVsayBkYXRhIGNodW5rLiIiIgotICAgICAgICByZXR1cm4gJycuam9p
bigoJyVkXG4nICUgbGVuKGJvZHkpLCBib2R5LCAnZG9uZVxuJykpCi0KLSAgICBkZWYgX3Nlcmlh
bGlzZV9vZmZzZXRzKHNlbGYsIG9mZnNldHMpOgotICAgICAgICAiIiJTZXJpYWxpc2UgYSByZWFk
diBvZmZzZXQgbGlzdC4iIiIKLSAgICAgICAgdHh0ID0gW10KLSAgICAgICAgZm9yIHN0YXJ0LCBs
ZW5ndGggaW4gb2Zmc2V0czoKLSAgICAgICAgICAgIHR4dC5hcHBlbmQoJyVkLCVkJyAlIChzdGFy
dCwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbih0eHQpCi0gICAgICAgIAotCi1j
bGFzcyBTbWFydFNlcnZlclJlcXVlc3RQcm90b2NvbE9uZShTbWFydFByb3RvY29sQmFzZSk6Ci0g
ICAgIiIiU2VydmVyLXNpZGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGxvZ2ljIGZvciBzbWFydCB2
ZXJzaW9uIDEuIiIiCi0gICAgCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhY2tpbmdfdHJhbnNw
b3J0LCB3cml0ZV9mdW5jKToKLSAgICAgICAgc2VsZi5fYmFja2luZ190cmFuc3BvcnQgPSBiYWNr
aW5nX3RyYW5zcG9ydAotICAgICAgICBzZWxmLmV4Y2Vzc19idWZmZXIgPSAnJwotICAgICAgICBz
ZWxmLl9maW5pc2hlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuaW5fYnVmZmVyID0gJycKLSAgICAg
ICAgc2VsZi5oYXNfZGlzcGF0Y2hlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYucmVxdWVzdCA9IE5v
bmUKLSAgICAgICAgc2VsZi5fYm9keV9kZWNvZGVyID0gTm9uZQotICAgICAgICBzZWxmLl93cml0
ZV9mdW5jID0gd3JpdGVfZnVuYwotCi0gICAgZGVmIGFjY2VwdF9ieXRlcyhzZWxmLCBieXRlcyk6
Ci0gICAgICAgICIiIlRha2UgYnl0ZXMsIGFuZCBhZHZhbmNlIHRoZSBpbnRlcm5hbCBzdGF0ZSBt
YWNoaW5lIGFwcHJvcHJpYXRlbHkuCi0gICAgICAgIAotICAgICAgICA6cGFyYW0gYnl0ZXM6IG11
c3QgYmUgYSBieXRlIHN0cmluZwotICAgICAgICAiIiIKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UoYnl0ZXMsIHN0cikKLSAgICAgICAgc2VsZi5pbl9idWZmZXIgKz0gYnl0ZXMKLSAgICAgICAg
aWYgbm90IHNlbGYuaGFzX2Rpc3BhdGNoZWQ6Ci0gICAgICAgICAgICBpZiAnXG4nIG5vdCBpbiBz
ZWxmLmluX2J1ZmZlcjoKLSAgICAgICAgICAgICAgICAjIG5vIGNvbW1hbmQgbGluZSB5ZXQKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYuaGFzX2Rpc3BhdGNoZWQgPSBU
cnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZmlyc3RfbGluZSwgc2VsZi5p
bl9idWZmZXIgPSBzZWxmLmluX2J1ZmZlci5zcGxpdCgnXG4nLCAxKQotICAgICAgICAgICAgICAg
IGZpcnN0X2xpbmUgKz0gJ1xuJwotICAgICAgICAgICAgICAgIHJlcV9hcmdzID0gX2RlY29kZV90
dXBsZShmaXJzdF9saW5lKQotICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdCA9IFNtYXJ0U2Vy
dmVyUmVxdWVzdEhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2JhY2tpbmdfdHJh
bnNwb3J0KQotICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdC5kaXNwYXRjaF9jb21tYW5kKHJl
cV9hcmdzWzBdLCByZXFfYXJnc1sxOl0pCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5yZXF1ZXN0
LmZpbmlzaGVkX3JlYWRpbmc6Ci0gICAgICAgICAgICAgICAgICAgICMgdHJpdmlhbCByZXF1ZXN0
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXNzX2J1ZmZlciA9IHNlbGYuaW5fYnVmZmVy
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gJycKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc2VuZF9yZXNwb25zZShzZWxmLnJlcXVlc3QucmVzcG9uc2UuYXJncywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdC5yZXNwb25zZS5ib2R5KQotICAgICAg
ICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0g
ICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleGNlcHRpb246Ci0gICAgICAgICAgICAgICAg
IyBldmVyeXRoaW5nIGVsc2U6IHBhc3MgdG8gY2xpZW50LCBmbHVzaCwgYW5kIHF1aXQKLSAgICAg
ICAgICAgICAgICBzZWxmLl9zZW5kX3Jlc3BvbnNlKCgnZXJyb3InLCBzdHIoZXhjZXB0aW9uKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgc2VsZi5oYXNfZGlzcGF0Y2hl
ZDoKLSAgICAgICAgICAgIGlmIHNlbGYuX2ZpbmlzaGVkOgotICAgICAgICAgICAgICAgICMgbm90
aGluZyB0byBkby5YWFg6IHRoaXMgcm91dGluZSBzaG91bGQgYmUgYSBzaW5nbGUgc3RhdGUgCi0g
ICAgICAgICAgICAgICAgIyBtYWNoaW5lIHRvby4KLSAgICAgICAgICAgICAgICBzZWxmLmV4Y2Vz
c19idWZmZXIgKz0gc2VsZi5pbl9idWZmZXIKLSAgICAgICAgICAgICAgICBzZWxmLmluX2J1ZmZl
ciA9ICcnCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBzZWxmLl9ib2R5
X2RlY29kZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9ib2R5X2RlY29kZXIgPSBM
ZW5ndGhQcmVmaXhlZEJvZHlEZWNvZGVyKCkKLSAgICAgICAgICAgIHNlbGYuX2JvZHlfZGVjb2Rl
ci5hY2NlcHRfYnl0ZXMoc2VsZi5pbl9idWZmZXIpCi0gICAgICAgICAgICBzZWxmLmluX2J1ZmZl
ciA9IHNlbGYuX2JvZHlfZGVjb2Rlci51bnVzZWRfZGF0YQotICAgICAgICAgICAgYm9keV9kYXRh
ID0gc2VsZi5fYm9keV9kZWNvZGVyLnJlYWRfcGVuZGluZ19kYXRhKCkKLSAgICAgICAgICAgIHNl
bGYucmVxdWVzdC5hY2NlcHRfYm9keShib2R5X2RhdGEpCi0gICAgICAgICAgICBpZiBzZWxmLl9i
b2R5X2RlY29kZXIuZmluaXNoZWRfcmVhZGluZzoKLSAgICAgICAgICAgICAgICBzZWxmLnJlcXVl
c3QuZW5kX29mX2JvZHkoKQotICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLnJlcXVlc3QuZmlu
aXNoZWRfcmVhZGluZywgXAotICAgICAgICAgICAgICAgICAgICAibm8gbW9yZSBib2R5LCByZXF1
ZXN0IG5vdCBmaW5pc2hlZCIKLSAgICAgICAgICAgIGlmIHNlbGYucmVxdWVzdC5yZXNwb25zZSBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW5kX3Jlc3BvbnNlKHNlbGYucmVx
dWVzdC5yZXNwb25zZS5hcmdzLAotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcXVlc3QucmVz
cG9uc2UuYm9keSkKLSAgICAgICAgICAgICAgICBzZWxmLmV4Y2Vzc19idWZmZXIgPSBzZWxmLmlu
X2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gJycKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLnJlcXVlc3QuZmluaXNoZWRf
cmVhZGluZywgXAotICAgICAgICAgICAgICAgICAgICAibm8gcmVzcG9uc2UgYW5kIHdlIGhhdmUg
ZmluaXNoZWQgcmVhZGluZy4iCi0KLSAgICBkZWYgX3NlbmRfcmVzcG9uc2Uoc2VsZiwgYXJncywg
Ym9keT1Ob25lKToKLSAgICAgICAgIiIiU2VuZCBhIHNtYXJ0IHNlcnZlciByZXNwb25zZSBkb3du
IHRoZSBvdXRwdXQgc3RyZWFtLiIiIgotICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2ZpbmlzaGVk
LCAncmVzcG9uc2UgYWxyZWFkeSBzZW50JwotICAgICAgICBzZWxmLl9maW5pc2hlZCA9IFRydWUK
LSAgICAgICAgc2VsZi5fd3JpdGVfZnVuYyhfZW5jb2RlX3R1cGxlKGFyZ3MpKQotICAgICAgICBp
ZiBib2R5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYm9keSwg
c3RyKSwgJ2JvZHkgbXVzdCBiZSBhIHN0cicKLSAgICAgICAgICAgIGJ5dGVzID0gc2VsZi5fZW5j
b2RlX2J1bGtfZGF0YShib2R5KQotICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnVuYyhieXRlcykK
LQotICAgIGRlZiBuZXh0X3JlYWRfc2l6ZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fZmluaXNo
ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBzZWxmLl9ib2R5X2RlY29kZXIg
aXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5fYm9keV9kZWNvZGVyLm5leHRfcmVhZF9zaXplKCkKLQotCi1jbGFzcyBM
ZW5ndGhQcmVmaXhlZEJvZHlEZWNvZGVyKG9iamVjdCk6Ci0gICAgIiIiRGVjb2RlcyB0aGUgbGVu
Z3RoLXByZWZpeGVkIGJ1bGsgZGF0YS4iIiIKLSAgICAKLSAgICBkZWYgX19pbml0X18oc2VsZik6
Ci0gICAgICAgIHNlbGYuYnl0ZXNfbGVmdCA9IE5vbmUKLSAgICAgICAgc2VsZi5maW5pc2hlZF9y
ZWFkaW5nID0gRmFsc2UKLSAgICAgICAgc2VsZi51bnVzZWRfZGF0YSA9ICcnCi0gICAgICAgIHNl
bGYuc3RhdGVfYWNjZXB0ID0gc2VsZi5fc3RhdGVfYWNjZXB0X2V4cGVjdGluZ19sZW5ndGgKLSAg
ICAgICAgc2VsZi5zdGF0ZV9yZWFkID0gc2VsZi5fc3RhdGVfcmVhZF9ub19kYXRhCi0gICAgICAg
IHNlbGYuX2luX2J1ZmZlciA9ICcnCi0gICAgICAgIHNlbGYuX3RyYWlsZXJfYnVmZmVyID0gJycK
LSAgICAKLSAgICBkZWYgYWNjZXB0X2J5dGVzKHNlbGYsIGJ5dGVzKToKLSAgICAgICAgIiIiRGVj
b2RlIGFzIG11Y2ggb2YgYnl0ZXMgYXMgcG9zc2libGUuCi0KLSAgICAgICAgSWYgJ2J5dGVzJyBj
b250YWlucyB0b28gbXVjaCBkYXRhIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8KLSAgICAgICAgc2Vs
Zi51bnVzZWRfZGF0YS4KLQotICAgICAgICBmaW5pc2hlZF9yZWFkaW5nIHdpbGwgYmUgc2V0IHdo
ZW4gbm8gbW9yZSBkYXRhIGlzIHJlcXVpcmVkLiAgRnVydGhlcgotICAgICAgICBkYXRhIHdpbGwg
YmUgYXBwZW5kZWQgdG8gc2VsZi51bnVzZWRfZGF0YS4KLSAgICAgICAgIiIiCi0gICAgICAgICMg
YWNjZXB0X2J5dGVzIGlzIGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBzdGF0ZQotICAgICAgICBjdXJy
ZW50X3N0YXRlID0gc2VsZi5zdGF0ZV9hY2NlcHQKLSAgICAgICAgc2VsZi5zdGF0ZV9hY2NlcHQo
Ynl0ZXMpCi0gICAgICAgIHdoaWxlIGN1cnJlbnRfc3RhdGUgIT0gc2VsZi5zdGF0ZV9hY2NlcHQ6
Ci0gICAgICAgICAgICBjdXJyZW50X3N0YXRlID0gc2VsZi5zdGF0ZV9hY2NlcHQKLSAgICAgICAg
ICAgIHNlbGYuc3RhdGVfYWNjZXB0KCcnKQotCi0gICAgZGVmIG5leHRfcmVhZF9zaXplKHNlbGYp
OgotICAgICAgICBpZiBzZWxmLmJ5dGVzX2xlZnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAj
IElkZWFsbHkgd2Ugd2FudCB0byByZWFkIGFsbCB0aGUgcmVtYWluZGVyIG9mIHRoZSBib2R5IGFu
ZCB0aGUKLSAgICAgICAgICAgICMgdHJhaWxlciBpbiBvbmUgZ28uCi0gICAgICAgICAgICByZXR1
cm4gc2VsZi5ieXRlc19sZWZ0ICsgNQotICAgICAgICBlbGlmIHNlbGYuc3RhdGVfYWNjZXB0ID09
IHNlbGYuX3N0YXRlX2FjY2VwdF9yZWFkaW5nX3RyYWlsZXI6Ci0gICAgICAgICAgICAjIEp1c3Qg
dGhlIHRyYWlsZXIgbGVmdAotICAgICAgICAgICAgcmV0dXJuIDUgLSBsZW4oc2VsZi5fdHJhaWxl
cl9idWZmZXIpCi0gICAgICAgIGVsaWYgc2VsZi5zdGF0ZV9hY2NlcHQgPT0gc2VsZi5fc3RhdGVf
YWNjZXB0X2V4cGVjdGluZ19sZW5ndGg6Ci0gICAgICAgICAgICAjIFRoZXJlJ3Mgc3RpbGwgYXQg
bGVhc3QgNiBieXRlcyBsZWZ0ICgnXG4nIHRvIGVuZCB0aGUgbGVuZ3RoLCBwbHVzCi0gICAgICAg
ICAgICAjICdkb25lXG4nKS4KLSAgICAgICAgICAgIHJldHVybiA2Ci0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAjIFJlYWRpbmcgZXhjZXNzIGRhdGEuICBFaXRoZXIgd2F5LCAxIGJ5dGUgYXQg
YSB0aW1lIGlzIGZpbmUuCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAKLSAgICBkZWYg
cmVhZF9wZW5kaW5nX2RhdGEoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhbnkgcGVuZGluZyBk
YXRhIHRoYXQgaGFzIGJlZW4gZGVjb2RlZC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGVf
cmVhZCgpCi0KLSAgICBkZWYgX3N0YXRlX2FjY2VwdF9leHBlY3RpbmdfbGVuZ3RoKHNlbGYsIGJ5
dGVzKToKLSAgICAgICAgc2VsZi5faW5fYnVmZmVyICs9IGJ5dGVzCi0gICAgICAgIHBvcyA9IHNl
bGYuX2luX2J1ZmZlci5maW5kKCdcbicpCi0gICAgICAgIGlmIHBvcyA9PSAtMToKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICBzZWxmLmJ5dGVzX2xlZnQgPSBpbnQoc2VsZi5faW5fYnVmZmVy
Wzpwb3NdKQotICAgICAgICBzZWxmLl9pbl9idWZmZXIgPSBzZWxmLl9pbl9idWZmZXJbcG9zKzE6
XQotICAgICAgICBzZWxmLmJ5dGVzX2xlZnQgLT0gbGVuKHNlbGYuX2luX2J1ZmZlcikKLSAgICAg
ICAgc2VsZi5zdGF0ZV9hY2NlcHQgPSBzZWxmLl9zdGF0ZV9hY2NlcHRfcmVhZGluZ19ib2R5Ci0g
ICAgICAgIHNlbGYuc3RhdGVfcmVhZCA9IHNlbGYuX3N0YXRlX3JlYWRfaW5fYnVmZmVyCi0KLSAg
ICBkZWYgX3N0YXRlX2FjY2VwdF9yZWFkaW5nX2JvZHkoc2VsZiwgYnl0ZXMpOgotICAgICAgICBz
ZWxmLl9pbl9idWZmZXIgKz0gYnl0ZXMKLSAgICAgICAgc2VsZi5ieXRlc19sZWZ0IC09IGxlbihi
eXRlcykKLSAgICAgICAgaWYgc2VsZi5ieXRlc19sZWZ0IDw9IDA6Ci0gICAgICAgICAgICAjIEZp
bmlzaGVkIHdpdGggYm9keQotICAgICAgICAgICAgaWYgc2VsZi5ieXRlc19sZWZ0ICE9IDA6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5fdHJhaWxlcl9idWZmZXIgPSBzZWxmLl9pbl9idWZmZXJbc2Vs
Zi5ieXRlc19sZWZ0Ol0KLSAgICAgICAgICAgICAgICBzZWxmLl9pbl9idWZmZXIgPSBzZWxmLl9p
bl9idWZmZXJbOnNlbGYuYnl0ZXNfbGVmdF0KLSAgICAgICAgICAgIHNlbGYuYnl0ZXNfbGVmdCA9
IE5vbmUKLSAgICAgICAgICAgIHNlbGYuc3RhdGVfYWNjZXB0ID0gc2VsZi5fc3RhdGVfYWNjZXB0
X3JlYWRpbmdfdHJhaWxlcgotICAgICAgICAKLSAgICBkZWYgX3N0YXRlX2FjY2VwdF9yZWFkaW5n
X3RyYWlsZXIoc2VsZiwgYnl0ZXMpOgotICAgICAgICBzZWxmLl90cmFpbGVyX2J1ZmZlciArPSBi
eXRlcwotICAgICAgICAjIFRPRE86IHdoYXQgaWYgdGhlIHRyYWlsZXIgZG9lcyBub3QgbWF0Y2gg
ImRvbmVcbiI/ICBTaG91bGQgdGhpcyByYWlzZQotICAgICAgICAjIGEgUHJvdG9jb2xWaW9sYXRp
b24gZXhjZXB0aW9uPwotICAgICAgICBpZiBzZWxmLl90cmFpbGVyX2J1ZmZlci5zdGFydHN3aXRo
KCdkb25lXG4nKToKLSAgICAgICAgICAgIHNlbGYudW51c2VkX2RhdGEgPSBzZWxmLl90cmFpbGVy
X2J1ZmZlcltsZW4oJ2RvbmVcbicpOl0KLSAgICAgICAgICAgIHNlbGYuc3RhdGVfYWNjZXB0ID0g
c2VsZi5fc3RhdGVfYWNjZXB0X3JlYWRpbmdfdW51c2VkCi0gICAgICAgICAgICBzZWxmLmZpbmlz
aGVkX3JlYWRpbmcgPSBUcnVlCi0gICAgCi0gICAgZGVmIF9zdGF0ZV9hY2NlcHRfcmVhZGluZ191
bnVzZWQoc2VsZiwgYnl0ZXMpOgotICAgICAgICBzZWxmLnVudXNlZF9kYXRhICs9IGJ5dGVzCi0K
LSAgICBkZWYgX3N0YXRlX3JlYWRfbm9fZGF0YShzZWxmKToKLSAgICAgICAgcmV0dXJuICcnCi0K
LSAgICBkZWYgX3N0YXRlX3JlYWRfaW5fYnVmZmVyKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBz
ZWxmLl9pbl9idWZmZXIKLSAgICAgICAgc2VsZi5faW5fYnVmZmVyID0gJycKLSAgICAgICAgcmV0
dXJuIHJlc3VsdAotCi0KLWNsYXNzIFNtYXJ0U2VydmVyU3RyZWFtTWVkaXVtKG9iamVjdCk6Ci0g
ICAgIiIiSGFuZGxlcyBzbWFydCBjb21tYW5kcyBjb21pbmcgb3ZlciBhIHN0cmVhbS4KLQotICAg
IFRoZSBzdHJlYW0gbWF5IGJlIGEgcGlwZSBjb25uZWN0ZWQgdG8gc3NoZCwgb3IgYSB0Y3Agc29j
a2V0LCBvciBhbgotICAgIGluLXByb2Nlc3MgZmlmbyBmb3IgdGVzdGluZy4KLQotICAgIE9uZSBp
bnN0YW5jZSBpcyBjcmVhdGVkIGZvciBlYWNoIGNvbm5lY3RlZCBjbGllbnQ7IGl0IGNhbiBzZXJ2
ZSBtdWx0aXBsZQotICAgIHJlcXVlc3RzIGluIHRoZSBsaWZldGltZSBvZiB0aGUgY29ubmVjdGlv
bi4KLQotICAgIFRoZSBzZXJ2ZXIgcGFzc2VzIHJlcXVlc3RzIHRocm91Z2ggdG8gYW4gdW5kZXJs
eWluZyBiYWNraW5nIHRyYW5zcG9ydCwgCi0gICAgd2hpY2ggd2lsbCB0eXBpY2FsbHkgYmUgYSBM
b2NhbFRyYW5zcG9ydCBsb29raW5nIGF0IHRoZSBzZXJ2ZXIncyBmaWxlc3lzdGVtLgotICAgICIi
IgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhY2tpbmdfdHJhbnNwb3J0KToKLSAgICAgICAg
IiIiQ29uc3RydWN0IG5ldyBzZXJ2ZXIuCi0KLSAgICAgICAgOnBhcmFtIGJhY2tpbmdfdHJhbnNw
b3J0OiBUcmFuc3BvcnQgZm9yIHRoZSBkaXJlY3Rvcnkgc2VydmVkLgotICAgICAgICAiIiIKLSAg
ICAgICAgIyBiYWNraW5nX3RyYW5zcG9ydCBjb3VsZCBiZSBwYXNzZWQgdG8gc2VydmUgaW5zdGVh
ZCBvZiBfX2luaXRfXwotICAgICAgICBzZWxmLmJhY2tpbmdfdHJhbnNwb3J0ID0gYmFja2luZ190
cmFuc3BvcnQKLSAgICAgICAgc2VsZi5maW5pc2hlZCA9IEZhbHNlCi0KLSAgICBkZWYgc2VydmUo
c2VsZik6Ci0gICAgICAgICIiIlNlcnZlIHJlcXVlc3RzIHVudGlsIHRoZSBjbGllbnQgZGlzY29u
bmVjdHMuIiIiCi0gICAgICAgICMgS2VlcCBhIHJlZmVyZW5jZSB0byBzdGRlcnIgYmVjYXVzZSB0
aGUgc3lzIG1vZHVsZSdzIGdsb2JhbHMgZ2V0IHNldCB0bwotICAgICAgICAjIE5vbmUgZHVyaW5n
IGludGVycHJldGVyIHNodXRkb3duLgotICAgICAgICBmcm9tIHN5cyBpbXBvcnQgc3RkZXJyCi0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmZpbmlzaGVkOgotICAgICAg
ICAgICAgICAgIHByb3RvY29sID0gU21hcnRTZXJ2ZXJSZXF1ZXN0UHJvdG9jb2xPbmUoc2VsZi5i
YWNraW5nX3RyYW5zcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX291dCkKLSAgICAgICAgICAgICAgICBzZWxm
Ll9zZXJ2ZV9vbmVfcmVxdWVzdChwcm90b2NvbCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwg
ZToKLSAgICAgICAgICAgIHN0ZGVyci53cml0ZSgiJXMgdGVybWluYXRpbmcgb24gZXhjZXB0aW9u
ICVzXG4iICUgKHNlbGYsIGUpKQotICAgICAgICAgICAgcmFpc2UKLQotICAgIGRlZiBfc2VydmVf
b25lX3JlcXVlc3Qoc2VsZiwgcHJvdG9jb2wpOgotICAgICAgICAiIiJSZWFkIG9uZSByZXF1ZXN0
IGZyb20gaW5wdXQsIHByb2Nlc3MsIHNlbmQgYmFjayBhIHJlc3BvbnNlLgotICAgICAgICAKLSAg
ICAgICAgOnBhcmFtIHByb3RvY29sOiBhIFNtYXJ0U2VydmVyUmVxdWVzdFByb3RvY29sLgotICAg
ICAgICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fc2VydmVfb25lX3JlcXVl
c3RfdW5ndWFyZGVkKHByb3RvY29sKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6
Ci0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAg
ICAgICAgc2VsZi50ZXJtaW5hdGVfZHVlX3RvX2Vycm9yKCkKLQotICAgIGRlZiB0ZXJtaW5hdGVf
ZHVlX3RvX2Vycm9yKHNlbGYpOgotICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiB1bmhhbmRsZWQg
ZXhjZXB0aW9uIGZyb20gdGhlIHByb3RvY29sIG9jY3Vycy4iIiIKLSAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcihzZWxmLnRlcm1pbmF0ZV9kdWVfdG9fZXJyb3IpCi0KLQotY2xhc3Mg
U21hcnRTZXJ2ZXJTb2NrZXRTdHJlYW1NZWRpdW0oU21hcnRTZXJ2ZXJTdHJlYW1NZWRpdW0pOgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ssIGJhY2tpbmdfdHJhbnNwb3J0KToKLSAgICAg
ICAgIiIiQ29uc3RydWN0b3IuCi0KLSAgICAgICAgOnBhcmFtIHNvY2s6IHRoZSBzb2NrZXQgdGhl
IHNlcnZlciB3aWxsIHJlYWQgZnJvbS4gIEl0IHdpbGwgYmUgcHV0Ci0gICAgICAgICAgICBpbnRv
IGJsb2NraW5nIG1vZGUuCi0gICAgICAgICIiIgotICAgICAgICBTbWFydFNlcnZlclN0cmVhbU1l
ZGl1bS5fX2luaXRfXyhzZWxmLCBiYWNraW5nX3RyYW5zcG9ydCkKLSAgICAgICAgc2VsZi5wdXNo
X2JhY2sgPSAnJwotICAgICAgICBzb2NrLnNldGJsb2NraW5nKFRydWUpCi0gICAgICAgIHNlbGYu
c29ja2V0ID0gc29jawotCi0gICAgZGVmIF9zZXJ2ZV9vbmVfcmVxdWVzdF91bmd1YXJkZWQoc2Vs
ZiwgcHJvdG9jb2wpOgotICAgICAgICB3aGlsZSBwcm90b2NvbC5uZXh0X3JlYWRfc2l6ZSgpOgot
ICAgICAgICAgICAgaWYgc2VsZi5wdXNoX2JhY2s6Ci0gICAgICAgICAgICAgICAgcHJvdG9jb2wu
YWNjZXB0X2J5dGVzKHNlbGYucHVzaF9iYWNrKQotICAgICAgICAgICAgICAgIHNlbGYucHVzaF9i
YWNrID0gJycKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYnl0ZXMgPSBzZWxm
LnNvY2tldC5yZWN2KDQwOTYpCi0gICAgICAgICAgICAgICAgaWYgYnl0ZXMgPT0gJyc6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybgotICAgICAgICAgICAgICAgIHByb3RvY29sLmFjY2VwdF9ieXRlcyhieXRlcykKLSAg
ICAgICAgCi0gICAgICAgIHNlbGYucHVzaF9iYWNrID0gcHJvdG9jb2wuZXhjZXNzX2J1ZmZlcgot
ICAgIAotICAgIGRlZiB0ZXJtaW5hdGVfZHVlX3RvX2Vycm9yKHNlbGYpOgotICAgICAgICAiIiJD
YWxsZWQgd2hlbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIGZyb20gdGhlIHByb3RvY29sIG9jY3Vy
cy4iIiIKLSAgICAgICAgIyBUT0RPOiBUaGlzIHNob3VsZCBsb2cgdG8gYSBzZXJ2ZXIgbG9nIGZp
bGUsIGJ1dCBubyBzdWNoIHRoaW5nCi0gICAgICAgICMgZXhpc3RzIHlldC4gIEFuZHJldyBCZW5u
ZXR0cyAyMDA2LTA5LTI5LgotICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIHNl
bGYuZmluaXNoZWQgPSBUcnVlCi0KLSAgICBkZWYgX3dyaXRlX291dChzZWxmLCBieXRlcyk6Ci0g
ICAgICAgIHNlbGYuc29ja2V0LnNlbmRhbGwoYnl0ZXMpCi0KLQotY2xhc3MgU21hcnRTZXJ2ZXJQ
aXBlU3RyZWFtTWVkaXVtKFNtYXJ0U2VydmVyU3RyZWFtTWVkaXVtKToKLQotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBpbl9maWxlLCBvdXRfZmlsZSwgYmFja2luZ190cmFuc3BvcnQpOgotICAgICAg
ICAiIiJDb25zdHJ1Y3QgbmV3IHNlcnZlci4KLQotICAgICAgICA6cGFyYW0gaW5fZmlsZTogUHl0
aG9uIGZpbGUgZnJvbSB3aGljaCByZXF1ZXN0cyBjYW4gYmUgcmVhZC4KLSAgICAgICAgOnBhcmFt
IG91dF9maWxlOiBQeXRob24gZmlsZSB0byB3cml0ZSByZXNwb25zZXMuCi0gICAgICAgIDpwYXJh
bSBiYWNraW5nX3RyYW5zcG9ydDogVHJhbnNwb3J0IGZvciB0aGUgZGlyZWN0b3J5IHNlcnZlZC4K
LSAgICAgICAgIiIiCi0gICAgICAgIFNtYXJ0U2VydmVyU3RyZWFtTWVkaXVtLl9faW5pdF9fKHNl
bGYsIGJhY2tpbmdfdHJhbnNwb3J0KQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMy
JzoKLSAgICAgICAgICAgICMgZm9yY2UgYmluYXJ5IG1vZGUgZm9yIGZpbGVzCi0gICAgICAgICAg
ICBpbXBvcnQgbXN2Y3J0Ci0gICAgICAgICAgICBmb3IgZiBpbiAoaW5fZmlsZSwgb3V0X2ZpbGUp
OgotICAgICAgICAgICAgICAgIGZpbGVubyA9IGdldGF0dHIoZiwgJ2ZpbGVubycsIE5vbmUpCi0g
ICAgICAgICAgICAgICAgaWYgZmlsZW5vOgotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuc2V0
bW9kZShmaWxlbm8oKSwgb3MuT19CSU5BUlkpCi0gICAgICAgIHNlbGYuX2luID0gaW5fZmlsZQot
ICAgICAgICBzZWxmLl9vdXQgPSBvdXRfZmlsZQotCi0gICAgZGVmIF9zZXJ2ZV9vbmVfcmVxdWVz
dF91bmd1YXJkZWQoc2VsZiwgcHJvdG9jb2wpOgotICAg