diff --git a/codegen/JsonDescriptionOfGithubApiV3/description.human_readable.json b/codegen/JsonDescriptionOfGithubApiV3/description.human_readable.json index b9b7b4d07a..5d6787f77c 100644 --- a/codegen/JsonDescriptionOfGithubApiV3/description.human_readable.json +++ b/codegen/JsonDescriptionOfGithubApiV3/description.human_readable.json @@ -309,6 +309,18 @@ { "name": "total", "type": "integer" } ] }, + { + "name": "ContentFile", + "attributes": [ + { "name": "type", "type": "string" }, + { "name": "encoding", "type": "string" }, + { "name": "size", "type": "integer" }, + { "name": "name", "type": "string" }, + { "name": "path", "type": "string" }, + { "name": "content", "type": "string" }, + { "name": "sha", "type": "string" } + ] + }, { "name": "File", "attributes": [ @@ -1824,6 +1836,34 @@ ] } }, + { + "name": [ "get", "readme" ], + "type": "ContentFile", + "group": "contents", + "request": { + "verb": "GET", + "url": [ + { "type": "attribute", "value": [ "url" ] }, + { "type": "constant", "value": "/readme" } + ] + } + }, + { + "name": [ "get", "contents" ], + "type": "ContentFile", + "group": "contents", + "mandatoryParameters": [ + { "name": "path", "type": "string" } + ], + "request": { + "verb": "GET", + "url": [ + { "type": "attribute", "value": [ "url" ] }, + { "type": "constant", "value": "/contents" }, + { "type": "argument", "value": [ "path" ] } + ] + } + }, { "name": [ "compare" ], "type": "Comparison", diff --git a/codegen/JsonDescriptionOfGithubApiV3/description.normalized.json b/codegen/JsonDescriptionOfGithubApiV3/description.normalized.json index 00e5f01fff..0ed72e1863 100644 --- a/codegen/JsonDescriptionOfGithubApiV3/description.normalized.json +++ b/codegen/JsonDescriptionOfGithubApiV3/description.normalized.json @@ -2397,6 +2397,69 @@ "name": "Comparison", "methods": [] }, + { + "attributes": [ + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "content" + }, + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "encoding" + }, + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "name" + }, + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "path" + }, + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "sha" + }, + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "integer" + }, + "name": "size" + }, + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "type" + } + ], + "isCompletable": false, + "name": "ContentFile", + "methods": [] + }, { "attributes": [ { @@ -10696,6 +10759,81 @@ "name": "integer" } }, + { + "group": "contents", + "name": [ + "get", + "readme" + ], + "mandatoryParameters": [], + "request": { + "url": [ + { + "type": "attribute", + "value": [ + "url" + ] + }, + { + "type": "constant", + "value": "/readme" + } + ], + "verb": "GET" + }, + "isMutation": false, + "optionalParameters": [], + "type": { + "simple": false, + "cardinality": "scalar", + "name": "ContentFile" + } + }, + { + "group": "contents", + "name": [ + "get", + "contents" + ], + "mandatoryParameters": [ + { + "type": { + "simple": true, + "cardinality": "scalar", + "name": "string" + }, + "name": "path" + } + ], + "request": { + "url": [ + { + "type": "attribute", + "value": [ + "url" + ] + }, + { + "type": "constant", + "value": "/contents" + }, + { + "type": "argument", + "value": [ + "path" + ] + } + ], + "verb": "GET" + }, + "isMutation": false, + "optionalParameters": [], + "type": { + "simple": false, + "cardinality": "scalar", + "name": "ContentFile" + } + }, { "group": "Comparison", "name": [ diff --git a/doc/ReferenceOfApis.md b/doc/ReferenceOfApis.md index 7a4889d7a6..e7a2a4cb1e 100644 --- a/doc/ReferenceOfApis.md +++ b/doc/ReferenceOfApis.md @@ -192,7 +192,7 @@ API `/repos/:user/:repo/compare/:base...:head` API `/repos/:user/:repo/contents/:path` ======================================= -* GET: (TODO) +* GET: `Repository.get_contents` API `/repos/:user/:repo/contributors` ===================================== @@ -400,7 +400,7 @@ API `/repos/:user/:repo/pulls/comments/:number` API `/repos/:user/:repo/readme` =============================== -* GET: (TODO) +* GET: `Repository.get_readme` API `/repos/:user/:repo/stargazers` =================================== diff --git a/doc/ReferenceOfClasses.md b/doc/ReferenceOfClasses.md index ba4dc54744..32fc62ff41 100644 --- a/doc/ReferenceOfClasses.md +++ b/doc/ReferenceOfClasses.md @@ -330,6 +330,19 @@ Attributes * `total_commits`: integer * `url`: string +Class `ContentFile` +=================== + +Attributes +---------- +* `content`: string +* `encoding`: string +* `name`: string +* `path`: string +* `sha`: string +* `size`: integer +* `type`: string + Class `Download` ================ @@ -1145,6 +1158,12 @@ Commits * `sha`: string * `path`: string +Contents +-------- +* `get_readme()`: `ContentFile` +* `get_contents( path )`: `ContentFile` + * `path`: string + Contributors ------------ * `get_contributors()`: iterator of `NamedUser` diff --git a/github/ContentFile.py b/github/ContentFile.py new file mode 100644 index 0000000000..49b4cf6746 --- /dev/null +++ b/github/ContentFile.py @@ -0,0 +1,78 @@ +# WARNING: this file is generated automaticaly. +# Do not modify it manually, your work would be lost. + +# Copyright 2012 Vincent Jacques +# vincent@vincent-jacques.net + +# This file is part of PyGithub. http://vincent-jacques.net/PyGithub + +# PyGithub is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see . + +import GithubObject + +class ContentFile( GithubObject.BasicGithubObject ): + @property + def content( self ): + return self._NoneIfNotSet( self._content ) + + @property + def encoding( self ): + return self._NoneIfNotSet( self._encoding ) + + @property + def name( self ): + return self._NoneIfNotSet( self._name ) + + @property + def path( self ): + return self._NoneIfNotSet( self._path ) + + @property + def sha( self ): + return self._NoneIfNotSet( self._sha ) + + @property + def size( self ): + return self._NoneIfNotSet( self._size ) + + @property + def type( self ): + return self._NoneIfNotSet( self._type ) + + def _initAttributes( self ): + self._content = GithubObject.NotSet + self._encoding = GithubObject.NotSet + self._name = GithubObject.NotSet + self._path = GithubObject.NotSet + self._sha = GithubObject.NotSet + self._size = GithubObject.NotSet + self._type = GithubObject.NotSet + + def _useAttributes( self, attributes ): + if "content" in attributes: # pragma no branch + assert attributes[ "content" ] is None or isinstance( attributes[ "content" ], ( str, unicode ) ), attributes[ "content" ] + self._content = attributes[ "content" ] + if "encoding" in attributes: # pragma no branch + assert attributes[ "encoding" ] is None or isinstance( attributes[ "encoding" ], ( str, unicode ) ), attributes[ "encoding" ] + self._encoding = attributes[ "encoding" ] + if "name" in attributes: # pragma no branch + assert attributes[ "name" ] is None or isinstance( attributes[ "name" ], ( str, unicode ) ), attributes[ "name" ] + self._name = attributes[ "name" ] + if "path" in attributes: # pragma no branch + assert attributes[ "path" ] is None or isinstance( attributes[ "path" ], ( str, unicode ) ), attributes[ "path" ] + self._path = attributes[ "path" ] + if "sha" in attributes: # pragma no branch + assert attributes[ "sha" ] is None or isinstance( attributes[ "sha" ], ( str, unicode ) ), attributes[ "sha" ] + self._sha = attributes[ "sha" ] + if "size" in attributes: # pragma no branch + assert attributes[ "size" ] is None or isinstance( attributes[ "size" ], int ), attributes[ "size" ] + self._size = attributes[ "size" ] + if "type" in attributes: # pragma no branch + assert attributes[ "type" ] is None or isinstance( attributes[ "type" ], ( str, unicode ) ), attributes[ "type" ] + self._type = attributes[ "type" ] diff --git a/github/Repository.py b/github/Repository.py index 3b6701ab34..a36d9366b6 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -22,6 +22,7 @@ import Branch import IssueEvent +import ContentFile import Label import InputGitAuthor import GitBlob @@ -594,6 +595,16 @@ def get_commits( self, sha = GithubObject.NotSet, path = GithubObject.NotSet ): data ) + def get_contents( self, path ): + assert isinstance( path, ( str, unicode ) ), path + headers, data = self._requester.requestAndCheck( + "GET", + self.url + "/contents" + path, + None, + None + ) + return ContentFile.ContentFile( self._requester, data, completed = True ) + def get_contributors( self ): headers, data = self._requester.requestAndCheck( "GET", @@ -964,6 +975,15 @@ def get_pulls( self, state = GithubObject.NotSet ): data ) + def get_readme( self ): + headers, data = self._requester.requestAndCheck( + "GET", + self.url + "/readme", + None, + None + ) + return ContentFile.ContentFile( self._requester, data, completed = True ) + def get_stargazers( self ): headers, data = self._requester.requestAndCheck( "GET", diff --git a/test/ContentFile.py b/test/ContentFile.py new file mode 100644 index 0000000000..e5ad1d3cc5 --- /dev/null +++ b/test/ContentFile.py @@ -0,0 +1,33 @@ +# Copyright 2012 Vincent Jacques +# vincent@vincent-jacques.net + +# This file is part of PyGithub. http://vincent-jacques.net/PyGithub + +# PyGithub is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see . + +import base64 + +import Framework + +import github +import datetime + +class ContentFile( Framework.TestCase ): + def setUp( self ): + Framework.TestCase.setUp( self ) + self.file = self.g.get_user().get_repo( "PyGithub" ).get_readme() + + def testAttributes( self ): + self.assertEqual( self.file.type, "file" ) + self.assertEqual( self.file.encoding, "base64" ) + self.assertEqual( self.file.size, 7531 ) + self.assertEqual( self.file.name, "ReadMe.md" ) + self.assertEqual( self.file.path, "ReadMe.md" ) + self.assertEqual( len( base64.b64decode( self.file.content ) ), 7531 ) + self.assertEqual( self.file.sha, "5628799a7d517a4aaa0c1a7004d07569cd154df0" ) diff --git a/test/IntegrationTest.py b/test/IntegrationTest.py index 7c538c99c3..01e7b7073f 100755 --- a/test/IntegrationTest.py +++ b/test/IntegrationTest.py @@ -21,6 +21,7 @@ from Branch import * from Commit import * from CommitComment import * +from ContentFile import * from Download import * from Event import * from Gist import * diff --git a/test/ReplayData/ContentFile.setUp.txt b/test/ReplayData/ContentFile.setUp.txt new file mode 100644 index 0000000000..ae761bff36 --- /dev/null +++ b/test/ReplayData/ContentFile.setUp.txt @@ -0,0 +1,15 @@ +https GET api.github.com None /user {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4995'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '806'), ('server', 'nginx/1.0.13'), ('last-modified', 'Wed, 05 Sep 2012 15:03:24 GMT'), ('connection', 'keep-alive'), ('etag', '"350294b94004d4bb252b6a432baa5744"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Sat, 08 Sep 2012 10:47:04 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"total_private_repos":5,"public_repos":11,"type":"User","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","owned_private_repos":5,"created_at":"2010-07-09T06:10:06Z","email":"vincent@vincent-jacques.net","public_gists":3,"company":"Criteo","blog":"http://vincent-jacques.net","hireable":false,"plan":{"space":614400,"collaborators":1,"name":"micro","private_repos":5},"followers":13,"html_url":"https://github.com/jacquev6","private_gists":5,"collaborators":0,"bio":"","name":"Vincent Jacques","url":"https://api.github.com/users/jacquev6","disk_usage":14640,"following":28,"location":"Paris, France","id":327146,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"} + +https GET api.github.com None /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4994'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '1239'), ('server', 'nginx/1.0.13'), ('last-modified', 'Fri, 07 Sep 2012 23:56:29 GMT'), ('connection', 'keep-alive'), ('etag', '"1d330cbc4cd990e379a33aedad5f6db5"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Sat, 08 Sep 2012 10:47:05 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"master_branch":"master","forks":16,"watchers_count":67,"has_downloads":true,"owner":{"gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","url":"https://api.github.com/users/jacquev6","id":327146,"avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"},"open_issues_count":15,"description":"Python library implementing the full Github API v3","permissions":{"pull":true,"push":true,"admin":true},"forks_count":16,"clone_url":"https://github.com/jacquev6/PyGithub.git","created_at":"2012-02-25T12:53:47Z","mirror_url":null,"network_count":16,"has_wiki":false,"watchers":67,"html_url":"https://github.com/jacquev6/PyGithub","size":228,"fork":false,"open_issues":15,"has_issues":true,"updated_at":"2012-09-07T23:56:29Z","full_name":"jacquev6/PyGithub","name":"PyGithub","url":"https://api.github.com/repos/jacquev6/PyGithub","ssh_url":"git@github.com:jacquev6/PyGithub.git","git_url":"git://github.com/jacquev6/PyGithub.git","private":false,"id":3544490,"language":"Python","homepage":"http://vincent-jacques.net/PyGithub","svn_url":"https://github.com/jacquev6/PyGithub","pushed_at":"2012-09-07T23:56:29Z"} + +https GET api.github.com None /repos/jacquev6/PyGithub/readme {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4993'), ('x-ratelimit-limit', '5000'), ('x-content-type-options', 'nosniff'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '10787'), ('server', 'nginx/1.0.13'), ('last-modified', 'Wed, 05 Sep 2012 17:54:40 GMT'), ('connection', 'keep-alive'), ('etag', '"71786feb5f476112c5a8aa894ee7ca6c"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 08 Sep 2012 10:47:05 GMT'), ('x-github-media-type', 'github.beta; format=json'), ('content-type', 'application/json; charset=utf-8')] +{"type":"file","sha":"5628799a7d517a4aaa0c1a7004d07569cd154df0","path":"ReadMe.md","encoding":"base64","content":"VGhpcyBpcyBhIFB5dGhvbiBsaWJyYXJ5IHRvIGFjY2VzcyB0aGUgW0dpdGh1\nYiBBUEkgdjNdKGh0dHA6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92MykuCgpX\naXRoIGl0LCB5b3UgY2FuIG1hbmFnZSB5b3VyIFtHaXRodWJdKGh0dHA6Ly9n\naXRodWIuY29tKSByZXNvdXJjZXMgKHJlcG9zaXRvcmllcywgdXNlciBwcm9m\naWxlcywgb3JnYW5pemF0aW9ucywgZXRjLikgZnJvbSBQeXRob24gc2NyaXB0\ncy4KCkl0IGNvdmVycyB0aGUgKipmdWxsKiogQVBJLCBhbmQgYWxsIG1ldGhv\nZHMgYXJlIHRlc3RlZCBhZ2FpbnN0IHRoZSByZWFsIEdpdGh1YiBzaXRlLgoK\nU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbiwgb3IgaWYgeW91IGZpbmQg\nYSBidWcsIG9yIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB5b3UgY2FuIGRvIHdp\ndGggdGhlIEFQSSBidXQgbm90IHdpdGggUHlHaXRodWIsIHBsZWFzZSBbb3Bl\nbiBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL2phY3F1ZXY2L1B5R2l0\naHViL2lzc3VlcykuCgpQeUdpdGh1YiBpcyBzdGFibGUuIEkgd2lsbCBtYWlu\ndGFpbiBpdCB1cCB0byBkYXRlIHdpdGggdGhlIEFQSSwgYW5kIGZpeCBidWdz\nIGlmIGFueSwgYnV0IEkgZG9uJ3QgcGxhbiBuZXcgaGVhdnkgZGV2ZWxvcG1l\nbnRzLgoKRG93bmxvYWQgYW5kIGluc3RhbGwKPT09PT09PT09PT09PT09PT09\nPT0KClRoaXMgcGFja2FnZSBpcyBpbiB0aGUgW1B5dGhvbiBQYWNrYWdlIElu\nZGV4XShodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvUHlHaXRodWIpLCBz\nbyBgZWFzeV9pbnN0YWxsIFB5R2l0aHViYCBvciBgcGlwIGluc3RhbGwgUHlH\naXRodWJgIHNob3VsZCBiZSBlbm91Z2guCllvdSBjYW4gYWxzbyBjbG9uZSBp\ndCBvbiBbR2l0aHViXShodHRwOi8vZ2l0aHViLmNvbS9qYWNxdWV2Ni9QeUdp\ndGh1YikuCgpUdXRvcmlhbAo9PT09PT09PQoKRmlyc3QgY3JlYXRlIGEgR2lo\ndHViIGluc3RhbmNlOgoKICAgIGZyb20gZ2l0aHViIGltcG9ydCBHaXRodWIK\nCiAgICBnID0gR2l0aHViKCAidXNlciIsICJwYXNzd29yZCIgKQoKVGhlbiBw\nbGF5IHdpdGggeW91ciBHaXRodWIgb2JqZWN0czoKCiAgICBmb3IgcmVwbyBp\nbiBnLmdldF91c2VyKCkuZ2V0X3JlcG9zKCk6CiAgICAgICAgcHJpbnQgcmVw\nby5uYW1lCiAgICAgICAgcmVwby5lZGl0KCBoYXNfd2lraSA9IEZhbHNlICkK\nCllvdSBjYW4gYWxzbyBjcmVhdGUgYSBHaXRodWIgaW5zdGFuY2Ugd2l0aCBh\nbiBPQXV0aCB0b2tlbjoKCiAgICBnID0gR2l0aHViKCB0b2tlbiApCgpPciB3\naXRob3V0IGF1dGhlbnRpY2F0aW9uOgoKICAgIGcgPSBHaXRodWIoKQoKTGlj\nZW5zaW5nCj09PT09PT09PQoKUHlHaXRodWIgaXMgZGlzdHJpYnV0ZWQgdW5k\nZXIgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4KU2Vl\nIGZpbGVzIENPUFlJTkcgYW5kIENPUFlJTkcuTEVTU0VSLCBhcyByZXF1ZXN0\nZWQgYnkgW0dOVV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC1o\nb3d0by5odG1sKS4KClByb2plY3RzIHVzaW5nIFB5R2l0aHViCj09PT09PT09\nPT09PT09PT09PT09PT09CgooW09wZW4gYW4gaXNzdWVdKGh0dHBzOi8vZ2l0\naHViLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9pc3N1ZXMpIGlmIHlvdSB3YW50\nIHRvIGJlIGxpc3RlZCBoZXJlLCBJJ2xsIGJlIGdsYWQgdG8gYWRkIHlvdXIg\ncHJvamVjdCkKCiogW1VwdmVydGVyXShodHRwczovL3VwdmVydGVyLmNvbSkg\naXMgYSB3ZWItYmFzZWQgc2NoZW1hdGljIGNhcHR1cmUgYW5kIFBDQiBsYXlv\ndXQgdG9vbCBmb3IgcGVvcGxlIHdobyBkZXNpZ24gZWxlY3Ryb25pY3MuIERl\nc2lnbmVycyBjYW4gYXR0YWNoIGEgR2l0aHViIHByb2plY3QgdG8gYW4gVXB2\nZXJ0ZXIgcHJvamVjdC4KKiBbVHJhdGlodWJpc10oaHR0cDovL3B5cGkucHl0\naG9uLm9yZy9weXBpL3RyYXRpaHViaXMvKSBjb252ZXJ0cyBUcmFjIHRpY2tl\ndHMgdG8gR2l0aHViIGlzc3VlcwoKSGlzdG9yeQo9PT09PT09CgpbVmVyc2lv\nbiAxLjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9p\nc3N1ZXM/bWlsZXN0b25lPTkmc3RhdGU9Y2xvc2VkKSAoU2VwdGVtYmVyIDV0\naCwgMjAxMikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFkZCBhIHRpbWVvdXQgb3B0\naW9uLCB0aGFuayB5b3UgbXVjaCBbeG9iYjF0XShodHRwczovL2dpdGh1Yi5j\nb20veG9iYjF0KSBmb3IgdGhlIG1lcmdlIHJlcXVlc3QuICpUaGlzIGRyb3Bz\nIFB5dGhvbiAyLjUgc3VwcG9ydCouIEkgbWF5IGJlIGFibGUgdG8gcmVzdG9y\nZSBpdCBpbiBuZXh0IHZlcnNpb24uCiogSW1wbGVtZW50IGBSZXBvc2l0b3J5\nLmRlbGV0ZWAsIHRoYW5rIHlvdSBbcG1jaGVuXShodHRwczovL2dpdGh1Yi5j\nb20vcG1jaGVuKSBmb3IgYXNraW5nCgpbVmVyc2lvbiAxLjRdKGh0dHBzOi8v\nZ2l0aHViLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9pc3N1ZXM/bWlsZXN0b25l\nPTgmc3RhdGU9Y2xvc2VkKSAoQXVndXN0IDR0aCwgMjAxMikKLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tCgoqIEFsbG93IGNvbm5lY3Rpb24gdG8gYSBjdXN0b20gR2l0aHViIFVS\nTCwgZm9yIEdpdGh1YiBFbnRlcnByaXNlLCB0aGFuayB5b3UgdmVyeSBtdWNo\nIFtlbmdpZV0oaHR0cHM6Ly9naXRodWIuY29tL2VuZ2llKSBmb3IgdGhlIG1l\ncmdlIHJlcXVlc3QKCltWZXJzaW9uIDEuM10oaHR0cHM6Ly9naXRodWIuY29t\nL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9NyZzdGF0ZT1j\nbG9zZWQpIChKdWx5IDEzdGgsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEltcGxl\nbWVudCBbbWFya2Rvd24gcmVuZGVyaW5nXShodHRwOi8vZGV2ZWxvcGVyLmdp\ndGh1Yi5jb20vdjMvbWFya2Rvd24vKQoqIGBHaXRBdXRob3IuZGF0ZWAgaXMg\nbm93IGEgZGF0ZXRpbWUsIHRoYW5rIHlvdSBbYmlsZGVyYnVjaGldKGh0dHBz\nOi8vZ2l0aHViLmNvbS9iaWxkZXJidWNoaSkKKiBGaXggZG9jdW1lbnRhdGlv\nbiBvZiBgR2l0aHViLmdldF9naXN0YDogYGlkYCBpcyBhIHN0cmluZywgbm90\nIGFuIGludGVnZXIKCltWZXJzaW9uIDEuMl0oaHR0cHM6Ly9naXRodWIuY29t\nL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9NiZzdGF0ZT1j\nbG9zZWQpIChKdW5lIDI5dGgsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEltcGxl\nbWVudCBbbGVnYWN5IHNlYXJjaCBBUElzXShodHRwOi8vZGV2ZWxvcGVyLmdp\ndGh1Yi5jb20vdjMvc2VhcmNoLyksIHRoYW5rIHlvdSBba3VrdXRzXShodHRw\nczovL2dpdGh1Yi5jb20va3VrdXRzKSBmb3IgdGVsbGluZyBtZSBHaXRodWIg\naGFkIHJlbGVhc2VkIHRoZW0KKiBGaXggYSBidWcgd2l0aCBpc3N1ZSBsYWJl\nbHMgY29udGFpbmluZyBzcGFjZXMsIHRoYW5rIHlvdSBbcGhpbGlwa2ltbWV5\nXShodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwa2ltbWV5KSBmb3IgZGV0ZWN0\naW5nIHRoZSBidWcgYW5kIGZpeGluZyBpdAoqIENsYXJpZnkgaG93IGNvbGxl\nY3Rpb25zIG9mIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IGBnZXRfKmAgbWV0\naG9kcywgdGhhbmsgeW91IFtiaWxkZXJidWNoaV0oaHR0cHM6Ly9naXRodWIu\nY29tL2JpbGRlcmJ1Y2hpKSBmb3IgYXNraW5nCgpWZXJzaW9uIDEuMSAoSnVu\nZSAyMHRoLCAyMDEyKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK\nKiBSZXN0b3JlIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi41LCB0aGFu\nayB5b3UgW3BtdWlsdV0oaHR0cHM6Ly9naXRodWIuY29tL3BtdWlsdSkKKiBV\nc2UgYHBhY2thZ2VfZGF0YWAgaW5zdGVhZCBvZiBgZGF0YV9maWxlc2AgZm9y\nIGRvY3VtZW50YXRpb24gZmlsZXMgaW4gYHNldHVwLnB5YCwgdGhhbmsgeW91\nIFttYWxleHddKGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxleHcpIGZvciByZXBv\ncnRpbmcKCltWZXJzaW9uIDEuMF0oaHR0cHM6Ly9naXRodWIuY29tL2phY3F1\nZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9MiZzdGF0ZT1jbG9zZWQp\nIChKdW5lIDNyZCwgMjAxMikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKiBDb21wbGV0ZSByZXdy\naXRlLCB3aXRoIG5vIG1vcmUgY29tcGxpY2F0ZWQgbWV0YS1kZXNjcmlwdGlv\nbgoqIEZ1bGwgdHlwaW5nIG9mIGF0dHJpYnV0ZXMgYW5kIHBhcmFtZXRlcnMK\nKiBGdWxsIGRvY3VtZW50YXRpb24gb2YgYXR0cmlidXRlcyBhbmQgcGFyYW1l\ndGVycwoqIE1vcmUgdXNhYmxlIGV4Y2VwdGlvbnMgcmFpc2VkIGluIGNhc2Ug\nb24gcHJvYmxlbXMgd2l0aCB0aGUgQVBJCiogU29tZSBidWdzIGFuZCBsaW1p\ndGF0aW9ucyBmaXhlZCwgc3BlY2lhbCB0aGFua3MgdG8gW2JpbGRlcmJ1Y2hp\nXShodHRwczovL2dpdGh1Yi5jb20vYmlsZGVyYnVjaGkpLCBbcm9za2Frb3Jp\nXShodHRwczovL2dpdGh1Yi5jb20vcm9za2Frb3JpKSBhbmQgW3RhbGxmb3Jh\nc211cmZdKGh0dHBzOi8vZ2l0aHViLmNvbS90YWxsZm9yYXNtdXJmKSBmb3Ig\ncmVwb3J0aW5nIHRoZW0hCgpbVmVyc2lvbiAwLjddKGh0dHBzOi8vZ2l0aHVi\nLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9pc3N1ZXM/bWlsZXN0b25lPTUmc3Rh\ndGU9Y2xvc2VkKSAoTWF5IDI2dGgsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiogVXNl\nIFB5R2l0aHViIHdpdGggT0F1dGggYXV0aGVudGljYXRpb24gb3Igd2l0aCBu\nbyBhdXRoZW50aWNhdGlvbiBhdCBhbGwKCltWZXJzaW9uIDAuNl0oaHR0cHM6\nLy9naXRodWIuY29tL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3Rv\nbmU9NCZzdGF0ZT1jbG9zZWQpIChBcHJpbCAxN3RoLCAyMDEyKQotLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0KCiogRml4IFtpc3N1ZSAyMV0oaHR0cHM6Ly9naXRodWIuY29tL2ph\nY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcy8yMSkgKEtleUVycm9yIHdoZW4gYWNj\nZXNzaW5nIHJlcG9zaXRvcmllcykKKiBSZS1jb21wbGV0ZWQgdGhlIEFQSSB3\naXRoIE5hbWVkVXNlci5jcmVhdGVfZ2lzdAoKCltWZXJzaW9uIDAuNV0oaHR0\ncHM6Ly9naXRodWIuY29tL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxl\nc3RvbmU9MyZzdGF0ZT1jbG9zZWQpIChNYXJjaCAxOXRoLCAyMDEyKQotLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0KCiogTWFqb3IgYWNoaWV2ZW1lbnQ6ICoqYWxsIEFQSXMgYXJl\nIGltcGxlbWVudGVkKioKKiBNb3JlIHJlZmFjdG9yaW5nLCBvZiBjb3Vyc2UK\nCltWZXJzaW9uIDAuNF0oaHR0cHM6Ly9naXRodWIuY29tL2phY3F1ZXY2L1B5\nR2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9MSZzdGF0ZT1jbG9zZWQpIChNYXJj\naCAxMnRoLCAyMDEyKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiogVGhlIGxpc3Qgb2YgdGhl\nIG5vdCBpbXBsZW1lbnRlZCBBUElzIGlzIHNob3J0ZXIgdGhhbiB0aGUgbGlz\ndCBvZiB0aGUgaW1wbGVtZW50ZWQgQVBJcwoqIEFQSXMgKm5vdCBpbXBsZW1l\nbnRlZCo6CiAgICAqIEdFVCBgL2dpc3RzL3B1YmxpY2AKICAgICogR0VUIGAv\naXNzdWVzYAogICAgKiBHRVQgYC9yZXBvcy86dXNlci86cmVwby9jb21wYXJl\nLzpiYXNlLi4uOmhlYWRgCiAgICAqIEdFVCBgL3JlcG9zLzp1c2VyLzpyZXBv\nL2dpdC90cmVlcy86c2hhP3JlY3Vyc2l2ZT0xYAogICAgKiBQT1NUIGAvcmVw\nb3MvOnVzZXIvOnJlcG8vZ2l0L3RyZWVzP2Jhc2VfdHJlZT1gCiogR2lzdHMK\nKiBBdXRvcml6YXRpb25zCiogS2V5cwoqIEhvb2tzCiogRXZlbnRzCiogTWVy\nZ2UgcHVsbCByZXF1ZXN0cwoqIE1vcmUgcmVmYWN0b3JpbmcsIG9uZSBtb3Jl\nIHRpbWUKClZlcnNpb24gMC4zIChGZWJydWFyeSAyNnRoLCAyMDEyKQotLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiogTW9yZSByZWZhY3Rv\ncmluZwoqIElzc3VlcywgbWlsZXN0b25lcyBhbmQgdGhlaXIgbGFiZWxzCiog\nTmFtZWRVc2VyOgogICAgKiBlbWFpbHMKKiBSZXBvc2l0b3J5OgogICAgKiBk\nb3dubG9hZHMKICAgICogdGFncywgYnJhbmNoZXMsIGNvbW1pdHMgYW5kIGNv\nbW1lbnRzIChub3QgdGhlIHNhbWUgYXMgIkdpdCBvYmplY3RzIiBvZiB2ZXJz\naW9uIDAuMikKICAgICogcHVsbCByZXF1ZXN0cyAobm8gYXV0b21hdGljIG1l\ncmdlIHlldCkKKiBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiB0aGUgcmVmZXJl\nbmNlIGRvY3VtZW50YXRpb24gb2YgY2xhc3Nlcywgd2l0aCBsZXNzICJzZWUg\nQVBJInMsIGFuZCBsZXNzIGVycm9ycwoKVmVyc2lvbiAwLjIgKEZlYnJ1YXJ5\nIDIzcmQsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLQoKKiBSZWZhY3RvcmluZwoqIFRlYW1zIGRldGFpbHMgYW5kIG1vZGlmaWNh\ndGlvbgogICAgKiBiYXNpYyBhdHRyaWJ1dGVzCiAgICAqIGxpc3QgdGVhbXMg\naW4gb3JnYW5pemF0aW9ucywgb24gcmVwb3NpdG9yaWVzCiogR2l0IG9iamVj\ndHMKICAgICogY3JlYXRlIGFuZCBnZXQgdGFncywgcmVmZXJlbmNlcywgY29t\nbWl0cywgdHJlZXMsIGJsb2JzCiAgICAqIGxpc3QgYW5kIGVkaXQgcmVmZXJl\nbmNlcwoKVmVyc2lvbiAwLjEgKEZlYnJ1YXJ5IDE5dGgsIDIwMTIpCi0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKiBVc2VyIGRldGFpbHMg\nYW5kIG1vZGlmaWNhdGlvbgogICAgKiBiYXNpYyBhdHRyaWJ1dGVzCiAgICAq\nIGZvbGxvd2VycywgZm9sbG93aW5nLCB3YXRjaGluZwogICAgKiBvcmdhbml6\nYXRpb25zCiAgICAqIHJlcG9zaXRvcmllcwoqIFJlcG9zaXRvcnkgZGV0YWls\ncyBhbmQgbW9kaWZpY2F0aW9uCiAgICAqIGJhc2ljIGF0dHJpYnV0ZXMKICAg\nICogZm9ya2luZwogICAgKiBjb2xsYWJvcmF0b3JzLCBjb250cmlidXRvcnMs\nIHdhdGNoZXJzCiogT3JnYW5pemF0aW9uIGRldGFpbHMgYW5kIG1vZGlmaWNh\ndGlvbgogICAgKiBiYXNpYyBhdHRyaWJ1dGVzCiAgICAqIG1lbWJlcnMgYW5k\nIHB1YmxpYyBtZW1iZXJzCg==\n","size":7531,"name":"ReadMe.md","_links":{"self":"https://api.github.com/repos/jacquev6/PyGithub/contents/ReadMe.md","html":"https://github.com/jacquev6/PyGithub/blob/master/ReadMe.md","git":"https://api.github.com/repos/jacquev6/PyGithub/git/blobs/5628799a7d517a4aaa0c1a7004d07569cd154df0"}} + diff --git a/test/ReplayData/Repository.testGetContents.txt b/test/ReplayData/Repository.testGetContents.txt new file mode 100644 index 0000000000..2c7144bbf4 --- /dev/null +++ b/test/ReplayData/Repository.testGetContents.txt @@ -0,0 +1,10 @@ +https GET api.github.com None /repos/jacquev6/PyGithub/readme {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('content-length', '10787'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('x-ratelimit-remaining', '4997'), ('server', 'nginx/1.0.13'), ('last-modified', 'Wed, 05 Sep 2012 17:54:40 GMT'), ('connection', 'keep-alive'), ('etag', '"71786feb5f476112c5a8aa894ee7ca6c"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 08 Sep 2012 10:43:48 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"type":"file","sha":"5628799a7d517a4aaa0c1a7004d07569cd154df0","path":"ReadMe.md","encoding":"base64","_links":{"self":"https://api.github.com/repos/jacquev6/PyGithub/contents/ReadMe.md","html":"https://github.com/jacquev6/PyGithub/blob/master/ReadMe.md","git":"https://api.github.com/repos/jacquev6/PyGithub/git/blobs/5628799a7d517a4aaa0c1a7004d07569cd154df0"},"content":"VGhpcyBpcyBhIFB5dGhvbiBsaWJyYXJ5IHRvIGFjY2VzcyB0aGUgW0dpdGh1\nYiBBUEkgdjNdKGh0dHA6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92MykuCgpX\naXRoIGl0LCB5b3UgY2FuIG1hbmFnZSB5b3VyIFtHaXRodWJdKGh0dHA6Ly9n\naXRodWIuY29tKSByZXNvdXJjZXMgKHJlcG9zaXRvcmllcywgdXNlciBwcm9m\naWxlcywgb3JnYW5pemF0aW9ucywgZXRjLikgZnJvbSBQeXRob24gc2NyaXB0\ncy4KCkl0IGNvdmVycyB0aGUgKipmdWxsKiogQVBJLCBhbmQgYWxsIG1ldGhv\nZHMgYXJlIHRlc3RlZCBhZ2FpbnN0IHRoZSByZWFsIEdpdGh1YiBzaXRlLgoK\nU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbiwgb3IgaWYgeW91IGZpbmQg\nYSBidWcsIG9yIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB5b3UgY2FuIGRvIHdp\ndGggdGhlIEFQSSBidXQgbm90IHdpdGggUHlHaXRodWIsIHBsZWFzZSBbb3Bl\nbiBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL2phY3F1ZXY2L1B5R2l0\naHViL2lzc3VlcykuCgpQeUdpdGh1YiBpcyBzdGFibGUuIEkgd2lsbCBtYWlu\ndGFpbiBpdCB1cCB0byBkYXRlIHdpdGggdGhlIEFQSSwgYW5kIGZpeCBidWdz\nIGlmIGFueSwgYnV0IEkgZG9uJ3QgcGxhbiBuZXcgaGVhdnkgZGV2ZWxvcG1l\nbnRzLgoKRG93bmxvYWQgYW5kIGluc3RhbGwKPT09PT09PT09PT09PT09PT09\nPT0KClRoaXMgcGFja2FnZSBpcyBpbiB0aGUgW1B5dGhvbiBQYWNrYWdlIElu\nZGV4XShodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvUHlHaXRodWIpLCBz\nbyBgZWFzeV9pbnN0YWxsIFB5R2l0aHViYCBvciBgcGlwIGluc3RhbGwgUHlH\naXRodWJgIHNob3VsZCBiZSBlbm91Z2guCllvdSBjYW4gYWxzbyBjbG9uZSBp\ndCBvbiBbR2l0aHViXShodHRwOi8vZ2l0aHViLmNvbS9qYWNxdWV2Ni9QeUdp\ndGh1YikuCgpUdXRvcmlhbAo9PT09PT09PQoKRmlyc3QgY3JlYXRlIGEgR2lo\ndHViIGluc3RhbmNlOgoKICAgIGZyb20gZ2l0aHViIGltcG9ydCBHaXRodWIK\nCiAgICBnID0gR2l0aHViKCAidXNlciIsICJwYXNzd29yZCIgKQoKVGhlbiBw\nbGF5IHdpdGggeW91ciBHaXRodWIgb2JqZWN0czoKCiAgICBmb3IgcmVwbyBp\nbiBnLmdldF91c2VyKCkuZ2V0X3JlcG9zKCk6CiAgICAgICAgcHJpbnQgcmVw\nby5uYW1lCiAgICAgICAgcmVwby5lZGl0KCBoYXNfd2lraSA9IEZhbHNlICkK\nCllvdSBjYW4gYWxzbyBjcmVhdGUgYSBHaXRodWIgaW5zdGFuY2Ugd2l0aCBh\nbiBPQXV0aCB0b2tlbjoKCiAgICBnID0gR2l0aHViKCB0b2tlbiApCgpPciB3\naXRob3V0IGF1dGhlbnRpY2F0aW9uOgoKICAgIGcgPSBHaXRodWIoKQoKTGlj\nZW5zaW5nCj09PT09PT09PQoKUHlHaXRodWIgaXMgZGlzdHJpYnV0ZWQgdW5k\nZXIgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4KU2Vl\nIGZpbGVzIENPUFlJTkcgYW5kIENPUFlJTkcuTEVTU0VSLCBhcyByZXF1ZXN0\nZWQgYnkgW0dOVV0oaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC1o\nb3d0by5odG1sKS4KClByb2plY3RzIHVzaW5nIFB5R2l0aHViCj09PT09PT09\nPT09PT09PT09PT09PT09CgooW09wZW4gYW4gaXNzdWVdKGh0dHBzOi8vZ2l0\naHViLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9pc3N1ZXMpIGlmIHlvdSB3YW50\nIHRvIGJlIGxpc3RlZCBoZXJlLCBJJ2xsIGJlIGdsYWQgdG8gYWRkIHlvdXIg\ncHJvamVjdCkKCiogW1VwdmVydGVyXShodHRwczovL3VwdmVydGVyLmNvbSkg\naXMgYSB3ZWItYmFzZWQgc2NoZW1hdGljIGNhcHR1cmUgYW5kIFBDQiBsYXlv\ndXQgdG9vbCBmb3IgcGVvcGxlIHdobyBkZXNpZ24gZWxlY3Ryb25pY3MuIERl\nc2lnbmVycyBjYW4gYXR0YWNoIGEgR2l0aHViIHByb2plY3QgdG8gYW4gVXB2\nZXJ0ZXIgcHJvamVjdC4KKiBbVHJhdGlodWJpc10oaHR0cDovL3B5cGkucHl0\naG9uLm9yZy9weXBpL3RyYXRpaHViaXMvKSBjb252ZXJ0cyBUcmFjIHRpY2tl\ndHMgdG8gR2l0aHViIGlzc3VlcwoKSGlzdG9yeQo9PT09PT09CgpbVmVyc2lv\nbiAxLjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9p\nc3N1ZXM/bWlsZXN0b25lPTkmc3RhdGU9Y2xvc2VkKSAoU2VwdGVtYmVyIDV0\naCwgMjAxMikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFkZCBhIHRpbWVvdXQgb3B0\naW9uLCB0aGFuayB5b3UgbXVjaCBbeG9iYjF0XShodHRwczovL2dpdGh1Yi5j\nb20veG9iYjF0KSBmb3IgdGhlIG1lcmdlIHJlcXVlc3QuICpUaGlzIGRyb3Bz\nIFB5dGhvbiAyLjUgc3VwcG9ydCouIEkgbWF5IGJlIGFibGUgdG8gcmVzdG9y\nZSBpdCBpbiBuZXh0IHZlcnNpb24uCiogSW1wbGVtZW50IGBSZXBvc2l0b3J5\nLmRlbGV0ZWAsIHRoYW5rIHlvdSBbcG1jaGVuXShodHRwczovL2dpdGh1Yi5j\nb20vcG1jaGVuKSBmb3IgYXNraW5nCgpbVmVyc2lvbiAxLjRdKGh0dHBzOi8v\nZ2l0aHViLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9pc3N1ZXM/bWlsZXN0b25l\nPTgmc3RhdGU9Y2xvc2VkKSAoQXVndXN0IDR0aCwgMjAxMikKLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tCgoqIEFsbG93IGNvbm5lY3Rpb24gdG8gYSBjdXN0b20gR2l0aHViIFVS\nTCwgZm9yIEdpdGh1YiBFbnRlcnByaXNlLCB0aGFuayB5b3UgdmVyeSBtdWNo\nIFtlbmdpZV0oaHR0cHM6Ly9naXRodWIuY29tL2VuZ2llKSBmb3IgdGhlIG1l\ncmdlIHJlcXVlc3QKCltWZXJzaW9uIDEuM10oaHR0cHM6Ly9naXRodWIuY29t\nL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9NyZzdGF0ZT1j\nbG9zZWQpIChKdWx5IDEzdGgsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEltcGxl\nbWVudCBbbWFya2Rvd24gcmVuZGVyaW5nXShodHRwOi8vZGV2ZWxvcGVyLmdp\ndGh1Yi5jb20vdjMvbWFya2Rvd24vKQoqIGBHaXRBdXRob3IuZGF0ZWAgaXMg\nbm93IGEgZGF0ZXRpbWUsIHRoYW5rIHlvdSBbYmlsZGVyYnVjaGldKGh0dHBz\nOi8vZ2l0aHViLmNvbS9iaWxkZXJidWNoaSkKKiBGaXggZG9jdW1lbnRhdGlv\nbiBvZiBgR2l0aHViLmdldF9naXN0YDogYGlkYCBpcyBhIHN0cmluZywgbm90\nIGFuIGludGVnZXIKCltWZXJzaW9uIDEuMl0oaHR0cHM6Ly9naXRodWIuY29t\nL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9NiZzdGF0ZT1j\nbG9zZWQpIChKdW5lIDI5dGgsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEltcGxl\nbWVudCBbbGVnYWN5IHNlYXJjaCBBUElzXShodHRwOi8vZGV2ZWxvcGVyLmdp\ndGh1Yi5jb20vdjMvc2VhcmNoLyksIHRoYW5rIHlvdSBba3VrdXRzXShodHRw\nczovL2dpdGh1Yi5jb20va3VrdXRzKSBmb3IgdGVsbGluZyBtZSBHaXRodWIg\naGFkIHJlbGVhc2VkIHRoZW0KKiBGaXggYSBidWcgd2l0aCBpc3N1ZSBsYWJl\nbHMgY29udGFpbmluZyBzcGFjZXMsIHRoYW5rIHlvdSBbcGhpbGlwa2ltbWV5\nXShodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwa2ltbWV5KSBmb3IgZGV0ZWN0\naW5nIHRoZSBidWcgYW5kIGZpeGluZyBpdAoqIENsYXJpZnkgaG93IGNvbGxl\nY3Rpb25zIG9mIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IGBnZXRfKmAgbWV0\naG9kcywgdGhhbmsgeW91IFtiaWxkZXJidWNoaV0oaHR0cHM6Ly9naXRodWIu\nY29tL2JpbGRlcmJ1Y2hpKSBmb3IgYXNraW5nCgpWZXJzaW9uIDEuMSAoSnVu\nZSAyMHRoLCAyMDEyKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK\nKiBSZXN0b3JlIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi41LCB0aGFu\nayB5b3UgW3BtdWlsdV0oaHR0cHM6Ly9naXRodWIuY29tL3BtdWlsdSkKKiBV\nc2UgYHBhY2thZ2VfZGF0YWAgaW5zdGVhZCBvZiBgZGF0YV9maWxlc2AgZm9y\nIGRvY3VtZW50YXRpb24gZmlsZXMgaW4gYHNldHVwLnB5YCwgdGhhbmsgeW91\nIFttYWxleHddKGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxleHcpIGZvciByZXBv\ncnRpbmcKCltWZXJzaW9uIDEuMF0oaHR0cHM6Ly9naXRodWIuY29tL2phY3F1\nZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9MiZzdGF0ZT1jbG9zZWQp\nIChKdW5lIDNyZCwgMjAxMikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKiBDb21wbGV0ZSByZXdy\naXRlLCB3aXRoIG5vIG1vcmUgY29tcGxpY2F0ZWQgbWV0YS1kZXNjcmlwdGlv\nbgoqIEZ1bGwgdHlwaW5nIG9mIGF0dHJpYnV0ZXMgYW5kIHBhcmFtZXRlcnMK\nKiBGdWxsIGRvY3VtZW50YXRpb24gb2YgYXR0cmlidXRlcyBhbmQgcGFyYW1l\ndGVycwoqIE1vcmUgdXNhYmxlIGV4Y2VwdGlvbnMgcmFpc2VkIGluIGNhc2Ug\nb24gcHJvYmxlbXMgd2l0aCB0aGUgQVBJCiogU29tZSBidWdzIGFuZCBsaW1p\ndGF0aW9ucyBmaXhlZCwgc3BlY2lhbCB0aGFua3MgdG8gW2JpbGRlcmJ1Y2hp\nXShodHRwczovL2dpdGh1Yi5jb20vYmlsZGVyYnVjaGkpLCBbcm9za2Frb3Jp\nXShodHRwczovL2dpdGh1Yi5jb20vcm9za2Frb3JpKSBhbmQgW3RhbGxmb3Jh\nc211cmZdKGh0dHBzOi8vZ2l0aHViLmNvbS90YWxsZm9yYXNtdXJmKSBmb3Ig\ncmVwb3J0aW5nIHRoZW0hCgpbVmVyc2lvbiAwLjddKGh0dHBzOi8vZ2l0aHVi\nLmNvbS9qYWNxdWV2Ni9QeUdpdGh1Yi9pc3N1ZXM/bWlsZXN0b25lPTUmc3Rh\ndGU9Y2xvc2VkKSAoTWF5IDI2dGgsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiogVXNl\nIFB5R2l0aHViIHdpdGggT0F1dGggYXV0aGVudGljYXRpb24gb3Igd2l0aCBu\nbyBhdXRoZW50aWNhdGlvbiBhdCBhbGwKCltWZXJzaW9uIDAuNl0oaHR0cHM6\nLy9naXRodWIuY29tL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxlc3Rv\nbmU9NCZzdGF0ZT1jbG9zZWQpIChBcHJpbCAxN3RoLCAyMDEyKQotLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0KCiogRml4IFtpc3N1ZSAyMV0oaHR0cHM6Ly9naXRodWIuY29tL2ph\nY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcy8yMSkgKEtleUVycm9yIHdoZW4gYWNj\nZXNzaW5nIHJlcG9zaXRvcmllcykKKiBSZS1jb21wbGV0ZWQgdGhlIEFQSSB3\naXRoIE5hbWVkVXNlci5jcmVhdGVfZ2lzdAoKCltWZXJzaW9uIDAuNV0oaHR0\ncHM6Ly9naXRodWIuY29tL2phY3F1ZXY2L1B5R2l0aHViL2lzc3Vlcz9taWxl\nc3RvbmU9MyZzdGF0ZT1jbG9zZWQpIChNYXJjaCAxOXRoLCAyMDEyKQotLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0KCiogTWFqb3IgYWNoaWV2ZW1lbnQ6ICoqYWxsIEFQSXMgYXJl\nIGltcGxlbWVudGVkKioKKiBNb3JlIHJlZmFjdG9yaW5nLCBvZiBjb3Vyc2UK\nCltWZXJzaW9uIDAuNF0oaHR0cHM6Ly9naXRodWIuY29tL2phY3F1ZXY2L1B5\nR2l0aHViL2lzc3Vlcz9taWxlc3RvbmU9MSZzdGF0ZT1jbG9zZWQpIChNYXJj\naCAxMnRoLCAyMDEyKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiogVGhlIGxpc3Qgb2YgdGhl\nIG5vdCBpbXBsZW1lbnRlZCBBUElzIGlzIHNob3J0ZXIgdGhhbiB0aGUgbGlz\ndCBvZiB0aGUgaW1wbGVtZW50ZWQgQVBJcwoqIEFQSXMgKm5vdCBpbXBsZW1l\nbnRlZCo6CiAgICAqIEdFVCBgL2dpc3RzL3B1YmxpY2AKICAgICogR0VUIGAv\naXNzdWVzYAogICAgKiBHRVQgYC9yZXBvcy86dXNlci86cmVwby9jb21wYXJl\nLzpiYXNlLi4uOmhlYWRgCiAgICAqIEdFVCBgL3JlcG9zLzp1c2VyLzpyZXBv\nL2dpdC90cmVlcy86c2hhP3JlY3Vyc2l2ZT0xYAogICAgKiBQT1NUIGAvcmVw\nb3MvOnVzZXIvOnJlcG8vZ2l0L3RyZWVzP2Jhc2VfdHJlZT1gCiogR2lzdHMK\nKiBBdXRvcml6YXRpb25zCiogS2V5cwoqIEhvb2tzCiogRXZlbnRzCiogTWVy\nZ2UgcHVsbCByZXF1ZXN0cwoqIE1vcmUgcmVmYWN0b3JpbmcsIG9uZSBtb3Jl\nIHRpbWUKClZlcnNpb24gMC4zIChGZWJydWFyeSAyNnRoLCAyMDEyKQotLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiogTW9yZSByZWZhY3Rv\ncmluZwoqIElzc3VlcywgbWlsZXN0b25lcyBhbmQgdGhlaXIgbGFiZWxzCiog\nTmFtZWRVc2VyOgogICAgKiBlbWFpbHMKKiBSZXBvc2l0b3J5OgogICAgKiBk\nb3dubG9hZHMKICAgICogdGFncywgYnJhbmNoZXMsIGNvbW1pdHMgYW5kIGNv\nbW1lbnRzIChub3QgdGhlIHNhbWUgYXMgIkdpdCBvYmplY3RzIiBvZiB2ZXJz\naW9uIDAuMikKICAgICogcHVsbCByZXF1ZXN0cyAobm8gYXV0b21hdGljIG1l\ncmdlIHlldCkKKiBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiB0aGUgcmVmZXJl\nbmNlIGRvY3VtZW50YXRpb24gb2YgY2xhc3Nlcywgd2l0aCBsZXNzICJzZWUg\nQVBJInMsIGFuZCBsZXNzIGVycm9ycwoKVmVyc2lvbiAwLjIgKEZlYnJ1YXJ5\nIDIzcmQsIDIwMTIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLQoKKiBSZWZhY3RvcmluZwoqIFRlYW1zIGRldGFpbHMgYW5kIG1vZGlmaWNh\ndGlvbgogICAgKiBiYXNpYyBhdHRyaWJ1dGVzCiAgICAqIGxpc3QgdGVhbXMg\naW4gb3JnYW5pemF0aW9ucywgb24gcmVwb3NpdG9yaWVzCiogR2l0IG9iamVj\ndHMKICAgICogY3JlYXRlIGFuZCBnZXQgdGFncywgcmVmZXJlbmNlcywgY29t\nbWl0cywgdHJlZXMsIGJsb2JzCiAgICAqIGxpc3QgYW5kIGVkaXQgcmVmZXJl\nbmNlcwoKVmVyc2lvbiAwLjEgKEZlYnJ1YXJ5IDE5dGgsIDIwMTIpCi0tLS0t\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKiBVc2VyIGRldGFpbHMg\nYW5kIG1vZGlmaWNhdGlvbgogICAgKiBiYXNpYyBhdHRyaWJ1dGVzCiAgICAq\nIGZvbGxvd2VycywgZm9sbG93aW5nLCB3YXRjaGluZwogICAgKiBvcmdhbml6\nYXRpb25zCiAgICAqIHJlcG9zaXRvcmllcwoqIFJlcG9zaXRvcnkgZGV0YWls\ncyBhbmQgbW9kaWZpY2F0aW9uCiAgICAqIGJhc2ljIGF0dHJpYnV0ZXMKICAg\nICogZm9ya2luZwogICAgKiBjb2xsYWJvcmF0b3JzLCBjb250cmlidXRvcnMs\nIHdhdGNoZXJzCiogT3JnYW5pemF0aW9uIGRldGFpbHMgYW5kIG1vZGlmaWNh\ndGlvbgogICAgKiBiYXNpYyBhdHRyaWJ1dGVzCiAgICAqIG1lbWJlcnMgYW5k\nIHB1YmxpYyBtZW1iZXJzCg==\n","size":7531,"name":"ReadMe.md"} + +https GET api.github.com None /repos/jacquev6/PyGithub/contentsdoc/ReferenceOfClasses.md {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4996'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '39214'), ('server', 'nginx/1.0.13'), ('last-modified', 'Wed, 05 Sep 2012 17:54:40 GMT'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"71786feb5f476112c5a8aa894ee7ca6c"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Sat, 08 Sep 2012 10:43:48 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"_links":{"self":"https://api.github.com/repos/jacquev6/PyGithub/contents/doc/ReferenceOfClasses.md","git":"https://api.github.com/repos/jacquev6/PyGithub/git/blobs/b82d109eca7f58b32e6b3be6694578fa5451766b","html":"https://github.com/jacquev6/PyGithub/blob/master/doc/ReferenceOfClasses.md"},"type":"file","sha":"b82d109eca7f58b32e6b3be6694578fa5451766b","path":"doc/ReferenceOfClasses.md","encoding":"base64","size":28122,"name":"ReferenceOfClasses.md","content":"WW91IGRvbid0IG5vcm1hbHkgY3JlYXRlIGluc3RhbmNlcyBvZiBhbnkgY2xh\nc3MgYnV0IGBHaXRodWJgLgpZb3Ugb2J0YWluIGluc3RhbmNlcyB0aHJvdWdo\nIGNhbGxzIHRvIGBzZWFyY2hfYCwgYGdldF9gIGFuZCBgY3JlYXRlX2AgbWV0\naG9kcy4KCk1ldGhvZHMgcmV0dXJuaW5nIGFuICJpdGVyYXRvciBvZiBgU29t\nZVR5cGVgIiByZXR1cm4gYW4gaXRlcmF0b3Igd2hpY2ggeWllbGRzIGluc3Rh\nbmNlcyBvZiBgU29tZVR5cGVgLgpUaGlzIGltcGxlbWVudHMgbGF6eSBbcGFn\naW5hdGlvbiByZXF1ZXN0c10oaHR0cDovL2RldmVsb3Blci5naXRodWIuY29t\nL3YzLyNwYWdpbmF0aW9uKS4KWW91IGNhbiB1c2UgdGhpcyBpdGVyYXRvciBp\nbiBhIGBmb3IgZiBpbiB1c2VyLmdldF9mb2xsb3dlcnMoKTpgIGxvb3Agb3Ig\nd2l0aCBhbnkgW2l0ZXJ0b29sc10oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9s\naWJyYXJ5L2l0ZXJ0b29scy5odG1sKSBmdW5jdGlvbnMsCmJ1dCB5b3UgY2Fu\nbm90IGtub3cgdGhlIG51bWJlciBvZiBvYmplY3RzIHJldHVybmVkIGJlZm9y\nZSB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24uCklmIHRoYXQncyByZWFsbHkg\nd2hhdCB5b3UgbmVlZCwgeW91IGNhbnQgdXNlIGBsZW4oIGxpc3QoIHVzZXIu\nZ2V0X2ZvbGxvd2VycygpICkgKWAsIHdoaWNoIGRvZXMgYWxsIHRoZSByZXF1\nZXN0cyBuZWVkZWQgdG8gZW51bWVyYXRlIHRoZSB1c2VyJ3MgZm9sbG93ZXJz\nLgpOb3RlIHRoYXQgdGhlcmUgaXMgb2Z0ZW4gYW4gYXR0cmlidXRlIGdpdmlu\nZyB0aGlzIHZhbHVlIChpbiB0aGF0IGNhc2UgYHVzZXIuZm9sbG93ZXJzYCku\nCgpDbGFzcyBgR2l0aHViYAo9PT09PT09PT09PT09PQoKQ29uc3RydWN0ZWQg\nZnJvbSB1c2VyJ3MgbG9naW4gYW5kIHBhc3N3b3JkIG9yIE9BdXRoIHRva2Vu\nIG9yIG5vdGhpbmc6CgogICAgZyA9IEdpdGh1YiggbG9naW4sIHBhc3N3b3Jk\nICkKICAgIGcgPSBHaXRodWIoIHRva2VuICkKICAgIGcgPSBHaXRodWIoKQoK\nWW91IGNhbiBhZGQgYW4gYXJndW1lbnQgYGJhc2VfdXJsID0gImh0dHA6Ly9t\neS5lbnRlcnByaXNlLmNvbTo4MDgwL3BhdGgvdG8vZ2l0aHViImAgdG8gY29u\nbmVjdCB0byBhIGxvY2FsIGluc3RhbGwgb2YgR2l0aHViIChpZS4gR2l0aHVi\nIEVudGVycHJpc2UpLgpBbm90aGVyIGFyZ3VtZW50LCB0aGF0IGNhbiBiZSBw\nYXNzZWQgaXMgYHRpbWVvdXRgIHdoaWNoIGhhcyBkZWZhdWx0IHZhbHVlIGAx\nMGAuCgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgcmF0ZV9saW1pdGluZ2A6\nIHR1cGxlIG9mIHR3byBpbnRlZ2VyczogcmVtYWluaW5nIGFuZCBsaW1pdCwg\nYXMgZXhwbGFpbmVkIGluIFtSYXRlIExpbWl0aW5nXShodHRwOi8vZGV2ZWxv\ncGVyLmdpdGh1Yi5jb20vdjMvI3JhdGUtbGltaXRpbmcpCgpNZXRob2RzCi0t\nLS0tLS0KKiBgZ2V0X3VzZXIoKWA6IGBBdXRoZW50aWNhdGVkVXNlcmAKKiBg\nZ2V0X3VzZXIoIGxvZ2luIClgOiBgTmFtZWRVc2VyYAoqIGBnZXRfb3JnYW5p\nemF0aW9uKCBsb2dpbiApYDogYE9yZ2FuaXphdGlvbmAKKiBgZ2V0X2dpc3Qo\nIGlkIClgOiBgR2lzdGAKICAgICogYGlkYDogc3RyaW5nCiogYGdldF9naXN0\ncygpYDogaXRlcmF0b3Igb2YgYEdpc3RgCiogYHNlYXJjaF9yZXBvcygga2V5\nd29yZCApYDogaXRlcmF0b3Igb2YgYFJlcG9zaXRvcnlgCiogYGxlZ2FjeV9z\nZWFyY2hfcmVwb3MoIGtleXdvcmQsIFtsYW5ndWFnZV0gKWA6IGl0ZXJhdG9y\nIG9mIGBSZXBvc2l0b3J5YAogICAgKiBga2V5d29yZGA6IHN0cmluZwogICAg\nKiBgbGFuZ3VhZ2VgOiBzdHJpbmcKKiBgbGVnYWN5X3NlYXJjaF91c2Vycygg\na2V5d29yZCApYDogaXRlcmF0b3Igb2YgYE5hbWVkVXNlcmAKICAgICogYGtl\neXdvcmRgOiBzdHJpbmcKKiBgbGVnYWN5X3NlYXJjaF91c2VyX2J5X2VtYWls\nKCBlbWFpbCApYDogYE5hbWVkVXNlcmAKICAgICogYGVtYWlsYDogc3RyaW5n\nCiogYHJlbmRlcl9tYXJrZG93biggdGV4dCwgW2NvbnRleHRdIClgOiBzdHJp\nbmcKICAgICogYHRleHRgOiBzdHJpbmcKICAgICogYGNvbnRleHRgOiBgUmVw\nb3NpdG9yeWAKCkNsYXNzIGBHaXRodWJFeGNlcHRpb25gCj09PT09PT09PT09\nPT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgc3RhdHVz\nYDogaW50ZWdlcgoqIGBkYXRhYDogZGljdAoKQ2xhc3MgYEF1dGhlbnRpY2F0\nZWRVc2VyYAo9PT09PT09PT09PT09PT09PT09PT09PT09CgpBdHRyaWJ1dGVz\nCi0tLS0tLS0tLS0KKiBgYXZhdGFyX3VybGA6IHN0cmluZwoqIGBiaW9gOiBz\ndHJpbmcKKiBgYmxvZ2A6IHN0cmluZwoqIGBjb2xsYWJvcmF0b3JzYDogaW50\nZWdlcgoqIGBjb21wYW55YDogc3RyaW5nCiogYGNyZWF0ZWRfYXRgOiBkYXRl\ndGltZS5kYXRldGltZQoqIGBkaXNrX3VzYWdlYDogaW50ZWdlcgoqIGBlbWFp\nbGA6IHN0cmluZwoqIGBmb2xsb3dlcnNgOiBpbnRlZ2VyCiogYGZvbGxvd2lu\nZ2A6IGludGVnZXIKKiBgZ3JhdmF0YXJfaWRgOiBzdHJpbmcKKiBgaGlyZWFi\nbGVgOiBib29sCiogYGh0bWxfdXJsYDogc3RyaW5nCiogYGlkYDogaW50ZWdl\ncgoqIGBsb2NhdGlvbmA6IHN0cmluZwoqIGBsb2dpbmA6IHN0cmluZwoqIGBu\nYW1lYDogc3RyaW5nCiogYG93bmVkX3ByaXZhdGVfcmVwb3NgOiBpbnRlZ2Vy\nCiogYHBsYW5gOiBgUGxhbmAKKiBgcHJpdmF0ZV9naXN0c2A6IGludGVnZXIK\nKiBgcHVibGljX2dpc3RzYDogaW50ZWdlcgoqIGBwdWJsaWNfcmVwb3NgOiBp\nbnRlZ2VyCiogYHRvdGFsX3ByaXZhdGVfcmVwb3NgOiBpbnRlZ2VyCiogYHR5\ncGVgOiBzdHJpbmcKKiBgdXJsYDogc3RyaW5nCgpBdXRob3JpemF0aW9ucwot\nLS0tLS0tLS0tLS0tLQoqIGBjcmVhdGVfYXV0aG9yaXphdGlvbiggW3Njb3Bl\ncywgbm90ZSwgbm90ZV91cmxdIClgOiBgQXV0aG9yaXphdGlvbmAKICAgICog\nYHNjb3Blc2A6IGxpc3Qgb2Ygc3RyaW5nCiAgICAqIGBub3RlYDogc3RyaW5n\nCiAgICAqIGBub3RlX3VybGA6IHN0cmluZwoqIGBnZXRfYXV0aG9yaXphdGlv\nbiggaWQgKWA6IGBBdXRob3JpemF0aW9uYAogICAgKiBgaWRgOiBpbnRlZ2Vy\nCiogYGdldF9hdXRob3JpemF0aW9ucygpYDogaXRlcmF0b3Igb2YgYEF1dGhv\ncml6YXRpb25gCgpFbWFpbHMKLS0tLS0tCiogYGFkZF90b19lbWFpbHMoIGVt\nYWlsLCAuLi4gKWAKICAgICogYGVtYWlsYDogc3RyaW5nCiogYGdldF9lbWFp\nbHMoKWA6IGxpc3Qgb2Ygc3RyaW5nCiogYHJlbW92ZV9mcm9tX2VtYWlscygg\nZW1haWwsIC4uLiApYAogICAgKiBgZW1haWxgOiBzdHJpbmcKCkV2ZW50cwot\nLS0tLS0KKiBgZ2V0X2V2ZW50cygpYDogaXRlcmF0b3Igb2YgYEV2ZW50YAoq\nIGBnZXRfb3JnYW5pemF0aW9uX2V2ZW50cyggb3JnIClgOiBpdGVyYXRvciBv\nZiBgRXZlbnRgCiAgICAqIGBvcmdgOiBgT3JnYW5pemF0aW9uYAoKRm9sbG93\nZXJzCi0tLS0tLS0tLQoqIGBnZXRfZm9sbG93ZXJzKClgOiBpdGVyYXRvciBv\nZiBgTmFtZWRVc2VyYAoKRm9sbG93aW5nCi0tLS0tLS0tLQoqIGBhZGRfdG9f\nZm9sbG93aW5nKCBmb2xsb3dpbmcgKWAKICAgICogYGZvbGxvd2luZ2A6IGBO\nYW1lZFVzZXJgCiogYGdldF9mb2xsb3dpbmcoKWA6IGl0ZXJhdG9yIG9mIGBO\nYW1lZFVzZXJgCiogYGhhc19pbl9mb2xsb3dpbmcoIGZvbGxvd2luZyApYDog\nYm9vbAogICAgKiBgZm9sbG93aW5nYDogYE5hbWVkVXNlcmAKKiBgcmVtb3Zl\nX2Zyb21fZm9sbG93aW5nKCBmb2xsb3dpbmcgKWAKICAgICogYGZvbGxvd2lu\nZ2A6IGBOYW1lZFVzZXJgCgpGb3JraW5nCi0tLS0tLS0KKiBgY3JlYXRlX2Zv\ncmsoIHJlcG8gKWA6IGBSZXBvc2l0b3J5YAogICAgKiBgcmVwb2A6IGBSZXBv\nc2l0b3J5YAoKR2lzdHMKLS0tLS0KKiBgY3JlYXRlX2dpc3QoIHB1YmxpYywg\nZmlsZXMsIFtkZXNjcmlwdGlvbl0gKWA6IGBHaXN0YAogICAgKiBgcHVibGlj\nYDogYm9vbAogICAgKiBgZmlsZXNgOiBkaWN0IG9mIHN0cmluZyB0byBgSW5w\ndXRGaWxlQ29udGVudGAKICAgICogYGRlc2NyaXB0aW9uYDogc3RyaW5nCiog\nYGdldF9naXN0cygpYDogaXRlcmF0b3Igb2YgYEdpc3RgCiogYGdldF9zdGFy\ncmVkX2dpc3RzKClgOiBpdGVyYXRvciBvZiBgR2lzdGAKCklzc3VlcwotLS0t\nLS0KKiBgZ2V0X2lzc3VlcygpYDogaXRlcmF0b3Igb2YgYElzc3VlYAoKS2V5\ncwotLS0tCiogYGNyZWF0ZV9rZXkoIHRpdGxlLCBrZXkgKWA6IGBVc2VyS2V5\nYAogICAgKiBgdGl0bGVgOiBzdHJpbmcKICAgICogYGtleWA6IHN0cmluZwoq\nIGBnZXRfa2V5KCBpZCApYDogYFVzZXJLZXlgCiAgICAqIGBpZGA6IGludGVn\nZXIKKiBgZ2V0X2tleXMoKWA6IGl0ZXJhdG9yIG9mIGBVc2VyS2V5YAoKTW9k\naWZpY2F0aW9uCi0tLS0tLS0tLS0tLQoqIGBlZGl0KCBbbmFtZSwgZW1haWws\nIGJsb2csIGNvbXBhbnksIGxvY2F0aW9uLCBoaXJlYWJsZSwgYmlvXSApYAog\nICAgKiBgbmFtZWA6IHN0cmluZwogICAgKiBgZW1haWxgOiBzdHJpbmcKICAg\nICogYGJsb2dgOiBzdHJpbmcKICAgICogYGNvbXBhbnlgOiBzdHJpbmcKICAg\nICogYGxvY2F0aW9uYDogc3RyaW5nCiAgICAqIGBoaXJlYWJsZWA6IGJvb2wK\nICAgICogYGJpb2A6IHN0cmluZwoKT3JncwotLS0tCiogYGdldF9vcmdzKClg\nOiBpdGVyYXRvciBvZiBgT3JnYW5pemF0aW9uYAoKUmVwb3MKLS0tLS0KKiBg\nY3JlYXRlX3JlcG8oIG5hbWUsIFtkZXNjcmlwdGlvbiwgaG9tZXBhZ2UsIHBy\naXZhdGUsIGhhc19pc3N1ZXMsIGhhc193aWtpLCBoYXNfZG93bmxvYWRzXSAp\nYDogYFJlcG9zaXRvcnlgCiAgICAqIGBuYW1lYDogc3RyaW5nCiAgICAqIGBk\nZXNjcmlwdGlvbmA6IHN0cmluZwogICAgKiBgaG9tZXBhZ2VgOiBzdHJpbmcK\nICAgICogYHByaXZhdGVgOiBib29sCiAgICAqIGBoYXNfaXNzdWVzYDogYm9v\nbAogICAgKiBgaGFzX3dpa2lgOiBib29sCiAgICAqIGBoYXNfZG93bmxvYWRz\nYDogYm9vbAoqIGBnZXRfcmVwbyggbmFtZSApYDogYFJlcG9zaXRvcnlgCiAg\nICAqIGBuYW1lYDogc3RyaW5nCiogYGdldF9yZXBvcyggW3R5cGUsIHNvcnQs\nIGRpcmVjdGlvbl0gKWA6IGl0ZXJhdG9yIG9mIGBSZXBvc2l0b3J5YAogICAg\nKiBgdHlwZWA6IHN0cmluZwogICAgKiBgc29ydGA6IHN0cmluZwogICAgKiBg\nZGlyZWN0aW9uYDogc3RyaW5nCgpXYXRjaGVkCi0tLS0tLS0KKiBgYWRkX3Rv\nX3dhdGNoZWQoIHdhdGNoZWQgKWAKICAgICogYHdhdGNoZWRgOiBgUmVwb3Np\ndG9yeWAKKiBgZ2V0X3dhdGNoZWQoKWA6IGl0ZXJhdG9yIG9mIGBSZXBvc2l0\nb3J5YAoqIGBoYXNfaW5fd2F0Y2hlZCggd2F0Y2hlZCApYDogYm9vbAogICAg\nKiBgd2F0Y2hlZGA6IGBSZXBvc2l0b3J5YAoqIGByZW1vdmVfZnJvbV93YXRj\naGVkKCB3YXRjaGVkIClgCiAgICAqIGB3YXRjaGVkYDogYFJlcG9zaXRvcnlg\nCgpDbGFzcyBgQXV0aG9yaXphdGlvbmAKPT09PT09PT09PT09PT09PT09PT09\nCgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgYXBwYDogYEF1dGhvcml6YXRp\nb25BcHBsaWNhdGlvbmAKKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0\naW1lCiogYGlkYDogaW50ZWdlcgoqIGBub3RlYDogc3RyaW5nCiogYG5vdGVf\ndXJsYDogc3RyaW5nCiogYHNjb3Blc2A6IGxpc3Qgb2Ygc3RyaW5nCiogYHRv\na2VuYDogc3RyaW5nCiogYHVwZGF0ZWRfYXRgOiBkYXRldGltZS5kYXRldGlt\nZQoqIGB1cmxgOiBzdHJpbmcKCkRlbGV0aW9uCi0tLS0tLS0tCiogYGRlbGV0\nZSgpYAoKTW9kaWZpY2F0aW9uCi0tLS0tLS0tLS0tLQoqIGBlZGl0KCBbc2Nv\ncGVzLCBhZGRfc2NvcGVzLCByZW1vdmVfc2NvcGVzLCBub3RlLCBub3RlX3Vy\nbF0gKWAKICAgICogYHNjb3Blc2A6IGxpc3Qgb2Ygc3RyaW5nCiAgICAqIGBh\nZGRfc2NvcGVzYDogbGlzdCBvZiBzdHJpbmcKICAgICogYHJlbW92ZV9zY29w\nZXNgOiBsaXN0IG9mIHN0cmluZwogICAgKiBgbm90ZWA6IHN0cmluZwogICAg\nKiBgbm90ZV91cmxgOiBzdHJpbmcKCkNsYXNzIGBBdXRob3JpemF0aW9uQXBw\nbGljYXRpb25gCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpB\ndHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgbmFtZWA6IHN0cmluZwoqIGB1cmxg\nOiBzdHJpbmcKCkNsYXNzIGBCcmFuY2hgCj09PT09PT09PT09PT09CgpBdHRy\naWJ1dGVzCi0tLS0tLS0tLS0KKiBgY29tbWl0YDogYENvbW1pdGAKKiBgbmFt\nZWA6IHN0cmluZwoKQ2xhc3MgYENvbW1pdGAKPT09PT09PT09PT09PT0KCkF0\ndHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBhdXRob3JgOiBgTmFtZWRVc2VyYAoq\nIGBjb21taXRgOiBgR2l0Q29tbWl0YAoqIGBjb21taXR0ZXJgOiBgTmFtZWRV\nc2VyYAoqIGBmaWxlc2A6IGxpc3Qgb2YgYEZpbGVgCiogYHBhcmVudHNgOiBs\naXN0IG9mIGBDb21taXRgCiogYHNoYWA6IHN0cmluZwoqIGBzdGF0c2A6IGBD\nb21taXRTdGF0c2AKKiBgdXJsYDogc3RyaW5nCgpDb21tZW50cwotLS0tLS0t\nLQoqIGBjcmVhdGVfY29tbWVudCggYm9keSwgW2xpbmUsIHBhdGgsIHBvc2l0\naW9uXSApYDogYENvbW1pdENvbW1lbnRgCiAgICAqIGBib2R5YDogc3RyaW5n\nCiAgICAqIGBsaW5lYDogaW50ZWdlcgogICAgKiBgcGF0aGA6IHN0cmluZwog\nICAgKiBgcG9zaXRpb25gOiBpbnRlZ2VyCiogYGdldF9jb21tZW50cygpYDog\naXRlcmF0b3Igb2YgYENvbW1pdENvbW1lbnRgCgpDbGFzcyBgQ29tbWl0Q29t\nbWVudGAKPT09PT09PT09PT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0t\nLS0tLS0KKiBgYm9keWA6IHN0cmluZwoqIGBjb21taXRfaWRgOiBzdHJpbmcK\nKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiogYGh0bWxfdXJs\nYDogc3RyaW5nCiogYGlkYDogaW50ZWdlcgoqIGBsaW5lYDogaW50ZWdlcgoq\nIGBwYXRoYDogc3RyaW5nCiogYHBvc2l0aW9uYDogaW50ZWdlcgoqIGB1cGRh\ndGVkX2F0YDogZGF0ZXRpbWUuZGF0ZXRpbWUKKiBgdXJsYDogc3RyaW5nCiog\nYHVzZXJgOiBgTmFtZWRVc2VyYAoKRGVsZXRpb24KLS0tLS0tLS0KKiBgZGVs\nZXRlKClgCgpNb2RpZmljYXRpb24KLS0tLS0tLS0tLS0tCiogYGVkaXQoIGJv\nZHkgKWAKICAgICogYGJvZHlgOiBzdHJpbmcKCkNsYXNzIGBDb21taXRTdGF0\nc2AKPT09PT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0t\nCiogYGFkZGl0aW9uc2A6IGludGVnZXIKKiBgZGVsZXRpb25zYDogaW50ZWdl\ncgoqIGB0b3RhbGA6IGludGVnZXIKCkNsYXNzIGBDb21wYXJpc29uYAo9PT09\nPT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBhaGVh\nZF9ieWA6IGludGVnZXIKKiBgYmFzZV9jb21taXRgOiBgQ29tbWl0YAoqIGBi\nZWhpbmRfYnlgOiBpbnRlZ2VyCiogYGNvbW1pdHNgOiBsaXN0IG9mIGBDb21t\naXRgCiogYGRpZmZfdXJsYDogc3RyaW5nCiogYGZpbGVzYDogbGlzdCBvZiBg\nRmlsZWAKKiBgaHRtbF91cmxgOiBzdHJpbmcKKiBgcGF0Y2hfdXJsYDogc3Ry\naW5nCiogYHBlcm1hbGlua191cmxgOiBzdHJpbmcKKiBgc3RhdHVzYDogc3Ry\naW5nCiogYHRvdGFsX2NvbW1pdHNgOiBpbnRlZ2VyCiogYHVybGA6IHN0cmlu\nZwoKQ2xhc3MgYERvd25sb2FkYAo9PT09PT09PT09PT09PT09CgpBdHRyaWJ1\ndGVzCi0tLS0tLS0tLS0KKiBgYWNjZXNza2V5aWRgOiBzdHJpbmcKKiBgYWNs\nYDogc3RyaW5nCiogYGJ1Y2tldGA6IHN0cmluZwoqIGBjb250ZW50X3R5cGVg\nOiBzdHJpbmcKKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiog\nYGRlc2NyaXB0aW9uYDogc3RyaW5nCiogYGRvd25sb2FkX2NvdW50YDogaW50\nZWdlcgoqIGBleHBpcmF0aW9uZGF0ZWA6IGRhdGV0aW1lLmRhdGV0aW1lCiog\nYGh0bWxfdXJsYDogc3RyaW5nCiogYGlkYDogaW50ZWdlcgoqIGBtaW1lX3R5\ncGVgOiBzdHJpbmcKKiBgbmFtZWA6IHN0cmluZwoqIGBwYXRoYDogc3RyaW5n\nCiogYHBvbGljeWA6IHN0cmluZwoqIGBwcmVmaXhgOiBzdHJpbmcKKiBgcmVk\naXJlY3RgOiBib29sCiogYHMzX3VybGA6IHN0cmluZwoqIGBzaWduYXR1cmVg\nOiBzdHJpbmcKKiBgc2l6ZWA6IGludGVnZXIKKiBgdXJsYDogc3RyaW5nCgpE\nZWxldGlvbgotLS0tLS0tLQoqIGBkZWxldGUoKWAKCkNsYXNzIGBFdmVudGAK\nPT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGFjdG9y\nYDogYE5hbWVkVXNlcmAKKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0\naW1lCiogYGlkYDogc3RyaW5nCiogYG9yZ2A6IGBPcmdhbml6YXRpb25gCiog\nYHBheWxvYWRgOiBkaWN0CiogYHB1YmxpY2A6IGJvb2wKKiBgcmVwb2A6IGBS\nZXBvc2l0b3J5YAoqIGB0eXBlYDogc3RyaW5nCgpDbGFzcyBgRmlsZWAKPT09\nPT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgYWRkaXRpb25z\nYDogaW50ZWdlcgoqIGBibG9iX3VybGA6IHN0cmluZwoqIGBjaGFuZ2VzYDog\naW50ZWdlcgoqIGBkZWxldGlvbnNgOiBpbnRlZ2VyCiogYGZpbGVuYW1lYDog\nc3RyaW5nCiogYHBhdGNoYDogc3RyaW5nCiogYHJhd191cmxgOiBzdHJpbmcK\nKiBgc2hhYDogc3RyaW5nCiogYHN0YXR1c2A6IHN0cmluZwoKQ2xhc3MgYEdp\nc3RgCj09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGNv\nbW1lbnRzYDogaW50ZWdlcgoqIGBjcmVhdGVkX2F0YDogZGF0ZXRpbWUuZGF0\nZXRpbWUKKiBgZGVzY3JpcHRpb25gOiBzdHJpbmcKKiBgZmlsZXNgOiBkaWN0\nIG9mIHN0cmluZyB0byBgR2lzdEZpbGVgCiogYGZvcmtfb2ZgOiBgR2lzdGAK\nKiBgZm9ya3NgOiBsaXN0IG9mIGBHaXN0YAoqIGBnaXRfcHVsbF91cmxgOiBz\ndHJpbmcKKiBgZ2l0X3B1c2hfdXJsYDogc3RyaW5nCiogYGhpc3RvcnlgOiBs\naXN0IG9mIGBHaXN0SGlzdG9yeVN0YXRlYAoqIGBodG1sX3VybGA6IHN0cmlu\nZwoqIGBpZGA6IHN0cmluZwoqIGBwdWJsaWNgOiBib29sCiogYHVwZGF0ZWRf\nYXRgOiBkYXRldGltZS5kYXRldGltZQoqIGB1cmxgOiBzdHJpbmcKKiBgdXNl\ncmA6IGBOYW1lZFVzZXJgCgpDb21tZW50cwotLS0tLS0tLQoqIGBjcmVhdGVf\nY29tbWVudCggYm9keSApYDogYEdpc3RDb21tZW50YAogICAgKiBgYm9keWA6\nIHN0cmluZwoqIGBnZXRfY29tbWVudCggaWQgKWA6IGBHaXN0Q29tbWVudGAK\nICAgICogYGlkYDogaW50ZWdlcgoqIGBnZXRfY29tbWVudHMoKWA6IGl0ZXJh\ndG9yIG9mIGBHaXN0Q29tbWVudGAKCkRlbGV0aW9uCi0tLS0tLS0tCiogYGRl\nbGV0ZSgpYAoKRm9ya2luZwotLS0tLS0tCiogYGNyZWF0ZV9mb3JrKClgOiBg\nR2lzdGAKCk1vZGlmaWNhdGlvbgotLS0tLS0tLS0tLS0KKiBgZWRpdCggW2Rl\nc2NyaXB0aW9uLCBmaWxlc10gKWAKICAgICogYGRlc2NyaXB0aW9uYDogc3Ry\naW5nCiAgICAqIGBmaWxlc2A6IGRpY3Qgb2Ygc3RyaW5nIHRvIGBJbnB1dEZp\nbGVDb250ZW50YAoKU3RhcnJpbmcKLS0tLS0tLS0KKiBgaXNfc3RhcnJlZCgp\nYDogYm9vbAoqIGByZXNldF9zdGFycmVkKClgCiogYHNldF9zdGFycmVkKClg\nCgpDbGFzcyBgR2lzdENvbW1lbnRgCj09PT09PT09PT09PT09PT09PT0KCkF0\ndHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBib2R5YDogc3RyaW5nCiogYGNyZWF0\nZWRfYXRgOiBkYXRldGltZS5kYXRldGltZQoqIGBpZGA6IGludGVnZXIKKiBg\ndXBkYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiogYHVybGA6IHN0cmlu\nZwoqIGB1c2VyYDogYE5hbWVkVXNlcmAKCkRlbGV0aW9uCi0tLS0tLS0tCiog\nYGRlbGV0ZSgpYAoKTW9kaWZpY2F0aW9uCi0tLS0tLS0tLS0tLQoqIGBlZGl0\nKCBib2R5IClgCiAgICAqIGBib2R5YDogc3RyaW5nCgpDbGFzcyBgR2lzdEZp\nbGVgCj09PT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0tLQoq\nIGBjb250ZW50YDogc3RyaW5nCiogYGZpbGVuYW1lYDogc3RyaW5nCiogYGxh\nbmd1YWdlYDogc3RyaW5nCiogYHJhd191cmxgOiBzdHJpbmcKKiBgc2l6ZWA6\nIGludGVnZXIKCkNsYXNzIGBHaXN0SGlzdG9yeVN0YXRlYAo9PT09PT09PT09\nPT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBjaGFu\nZ2Vfc3RhdHVzYDogYENvbW1pdFN0YXRzYAoqIGBjb21taXR0ZWRfYXRgOiBk\nYXRldGltZS5kYXRldGltZQoqIGB1cmxgOiBzdHJpbmcKKiBgdXNlcmA6IGBO\nYW1lZFVzZXJgCiogYHZlcnNpb25gOiBzdHJpbmcKCkNsYXNzIGBHaXRBdXRo\nb3JgCj09PT09PT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0K\nKiBgZGF0ZWA6IGRhdGV0aW1lLmRhdGV0aW1lCiogYGVtYWlsYDogc3RyaW5n\nCiogYG5hbWVgOiBzdHJpbmcKCkNsYXNzIGBHaXRCbG9iYAo9PT09PT09PT09\nPT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBjb250ZW50YDogc3Ry\naW5nCiogYGVuY29kaW5nYDogc3RyaW5nCiogYHNoYWA6IHN0cmluZwoqIGBz\naXplYDogaW50ZWdlcgoqIGB1cmxgOiBzdHJpbmcKCkNsYXNzIGBHaXRDb21t\naXRgCj09PT09PT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0K\nKiBgYXV0aG9yYDogYEdpdEF1dGhvcmAKKiBgY29tbWl0dGVyYDogYEdpdEF1\ndGhvcmAKKiBgbWVzc2FnZWA6IHN0cmluZwoqIGBwYXJlbnRzYDogbGlzdCBv\nZiBgR2l0Q29tbWl0YAoqIGBzaGFgOiBzdHJpbmcKKiBgdHJlZWA6IGBHaXRU\ncmVlYAoqIGB1cmxgOiBzdHJpbmcKCkNsYXNzIGBHaXRPYmplY3RgCj09PT09\nPT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgc2hhYDog\nc3RyaW5nCiogYHR5cGVgOiBzdHJpbmcKKiBgdXJsYDogc3RyaW5nCgpDbGFz\ncyBgR2l0UmVmYAo9PT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0t\nLS0tCiogYG9iamVjdGA6IGBHaXRPYmplY3RgCiogYHJlZmA6IHN0cmluZwoq\nIGB1cmxgOiBzdHJpbmcKCkRlbGV0aW9uCi0tLS0tLS0tCiogYGRlbGV0ZSgp\nYAoKTW9kaWZpY2F0aW9uCi0tLS0tLS0tLS0tLQoqIGBlZGl0KCBzaGEsIFtm\nb3JjZV0gKWAKICAgICogYHNoYWA6IHN0cmluZwogICAgKiBgZm9yY2VgOiBi\nb29sCgpDbGFzcyBgR2l0VGFnYAo9PT09PT09PT09PT09PQoKQXR0cmlidXRl\ncwotLS0tLS0tLS0tCiogYG1lc3NhZ2VgOiBzdHJpbmcKKiBgb2JqZWN0YDog\nYEdpdE9iamVjdGAKKiBgc2hhYDogc3RyaW5nCiogYHRhZ2A6IHN0cmluZwoq\nIGB0YWdnZXJgOiBgR2l0QXV0aG9yYAoqIGB1cmxgOiBzdHJpbmcKCkNsYXNz\nIGBHaXRUcmVlYAo9PT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0t\nLS0tLQoqIGBzaGFgOiBzdHJpbmcKKiBgdHJlZWA6IGxpc3Qgb2YgYEdpdFRy\nZWVFbGVtZW50YAoqIGB1cmxgOiBzdHJpbmcKCkNsYXNzIGBHaXRUcmVlRWxl\nbWVudGAKPT09PT09PT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0t\nLS0tLS0tCiogYG1vZGVgOiBzdHJpbmcKKiBgcGF0aGA6IHN0cmluZwoqIGBz\naGFgOiBzdHJpbmcKKiBgc2l6ZWA6IGludGVnZXIKKiBgdHlwZWA6IHN0cmlu\nZwoqIGB1cmxgOiBzdHJpbmcKCkNsYXNzIGBIb29rYAo9PT09PT09PT09PT0K\nCkF0dHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBhY3RpdmVgOiBib29sCiogYGNv\nbmZpZ2A6IGRpY3QKKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1l\nCiogYGV2ZW50c2A6IGxpc3Qgb2Ygc3RyaW5nCiogYGlkYDogaW50ZWdlcgoq\nIGBsYXN0X3Jlc3BvbnNlYDogYEhvb2tSZXNwb25zZWAKKiBgbmFtZWA6IHN0\ncmluZwoqIGB1cGRhdGVkX2F0YDogZGF0ZXRpbWUuZGF0ZXRpbWUKKiBgdXJs\nYDogc3RyaW5nCgpEZWxldGlvbgotLS0tLS0tLQoqIGBkZWxldGUoKWAKCk1v\nZGlmaWNhdGlvbgotLS0tLS0tLS0tLS0KKiBgZWRpdCggbmFtZSwgY29uZmln\nLCBbZXZlbnRzLCBhZGRfZXZlbnRzLCByZW1vdmVfZXZlbnRzLCBhY3RpdmVd\nIClgCiAgICAqIGBuYW1lYDogc3RyaW5nCiAgICAqIGBjb25maWdgOiBkaWN0\nCiAgICAqIGBldmVudHNgOiBsaXN0IG9mIHN0cmluZwogICAgKiBgYWRkX2V2\nZW50c2A6IGxpc3Qgb2Ygc3RyaW5nCiAgICAqIGByZW1vdmVfZXZlbnRzYDog\nbGlzdCBvZiBzdHJpbmcKICAgICogYGFjdGl2ZWA6IGJvb2wKClRlc3RpbmcK\nLS0tLS0tLQoqIGB0ZXN0KClgCgpDbGFzcyBgSG9va1Jlc3BvbnNlYAo9PT09\nPT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGNv\nZGVgOiBpbnRlZ2VyCiogYG1lc3NhZ2VgOiBzdHJpbmcKKiBgc3RhdHVzYDog\nc3RyaW5nCgpDbGFzcyBgSXNzdWVgCj09PT09PT09PT09PT0KCkF0dHJpYnV0\nZXMKLS0tLS0tLS0tLQoqIGBhc3NpZ25lZWA6IGBOYW1lZFVzZXJgCiogYGJv\nZHlgOiBzdHJpbmcKKiBgY2xvc2VkX2F0YDogZGF0ZXRpbWUuZGF0ZXRpbWUK\nKiBgY2xvc2VkX2J5YDogYE5hbWVkVXNlcmAKKiBgY29tbWVudHNgOiBpbnRl\nZ2VyCiogYGNyZWF0ZWRfYXRgOiBkYXRldGltZS5kYXRldGltZQoqIGBodG1s\nX3VybGA6IHN0cmluZwoqIGBpZGA6IGludGVnZXIKKiBgbGFiZWxzYDogbGlz\ndCBvZiBgTGFiZWxgCiogYG1pbGVzdG9uZWA6IGBNaWxlc3RvbmVgCiogYG51\nbWJlcmA6IGludGVnZXIKKiBgcHVsbF9yZXF1ZXN0YDogYElzc3VlUHVsbFJl\ncXVlc3RgCiogYHJlcG9zaXRvcnlgOiBgUmVwb3NpdG9yeWAKKiBgc3RhdGVg\nOiBzdHJpbmcKKiBgdGl0bGVgOiBzdHJpbmcKKiBgdXBkYXRlZF9hdGA6IGRh\ndGV0aW1lLmRhdGV0aW1lCiogYHVybGA6IHN0cmluZwoqIGB1c2VyYDogYE5h\nbWVkVXNlcmAKCkNvbW1lbnRzCi0tLS0tLS0tCiogYGNyZWF0ZV9jb21tZW50\nKCBib2R5IClgOiBgSXNzdWVDb21tZW50YAogICAgKiBgYm9keWA6IHN0cmlu\nZwoqIGBnZXRfY29tbWVudCggaWQgKWA6IGBJc3N1ZUNvbW1lbnRgCiAgICAq\nIGBpZGA6IGludGVnZXIKKiBgZ2V0X2NvbW1lbnRzKClgOiBpdGVyYXRvciBv\nZiBgSXNzdWVDb21tZW50YAoKRXZlbnRzCi0tLS0tLQoqIGBnZXRfZXZlbnRz\nKClgOiBpdGVyYXRvciBvZiBgSXNzdWVFdmVudGAKCkxhYmVscwotLS0tLS0K\nKiBgYWRkX3RvX2xhYmVscyggbGFiZWwsIC4uLiApYAogICAgKiBgbGFiZWxg\nOiBgTGFiZWxgCiogYGRlbGV0ZV9sYWJlbHMoKWAKKiBgZ2V0X2xhYmVscygp\nYDogaXRlcmF0b3Igb2YgYExhYmVsYAoqIGByZW1vdmVfZnJvbV9sYWJlbHMo\nIGxhYmVsIClgCiAgICAqIGBsYWJlbGA6IGBMYWJlbGAKKiBgc2V0X2xhYmVs\ncyggbGFiZWwsIC4uLiApYAogICAgKiBgbGFiZWxgOiBgTGFiZWxgCgpNb2Rp\nZmljYXRpb24KLS0tLS0tLS0tLS0tCiogYGVkaXQoIFt0aXRsZSwgYm9keSwg\nYXNzaWduZWUsIHN0YXRlLCBtaWxlc3RvbmUsIGxhYmVsc10gKWAKICAgICog\nYHRpdGxlYDogc3RyaW5nCiAgICAqIGBib2R5YDogc3RyaW5nCiAgICAqIGBh\nc3NpZ25lZWA6IGBOYW1lZFVzZXJgCiAgICAqIGBzdGF0ZWA6IHN0cmluZwog\nICAgKiBgbWlsZXN0b25lYDogYE1pbGVzdG9uZWAKICAgICogYGxhYmVsc2A6\nIGxpc3Qgb2Ygc3RyaW5nCgpDbGFzcyBgSXNzdWVDb21tZW50YAo9PT09PT09\nPT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGJvZHlg\nOiBzdHJpbmcKKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiog\nYGlkYDogaW50ZWdlcgoqIGB1cGRhdGVkX2F0YDogZGF0ZXRpbWUuZGF0ZXRp\nbWUKKiBgdXJsYDogc3RyaW5nCiogYHVzZXJgOiBgTmFtZWRVc2VyYAoKRGVs\nZXRpb24KLS0tLS0tLS0KKiBgZGVsZXRlKClgCgpNb2RpZmljYXRpb24KLS0t\nLS0tLS0tLS0tCiogYGVkaXQoIGJvZHkgKWAKICAgICogYGJvZHlgOiBzdHJp\nbmcKCkNsYXNzIGBJc3N1ZUV2ZW50YAo9PT09PT09PT09PT09PT09PT0KCkF0\ndHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBhY3RvcmA6IGBOYW1lZFVzZXJgCiog\nYGNvbW1pdF9pZGA6IHN0cmluZwoqIGBjcmVhdGVkX2F0YDogZGF0ZXRpbWUu\nZGF0ZXRpbWUKKiBgZXZlbnRgOiBzdHJpbmcKKiBgaWRgOiBpbnRlZ2VyCiog\nYGlzc3VlYDogYElzc3VlYAoqIGB1cmxgOiBzdHJpbmcKCkNsYXNzIGBJc3N1\nZVB1bGxSZXF1ZXN0YAo9PT09PT09PT09PT09PT09PT09PT09PT0KCkF0dHJp\nYnV0ZXMKLS0tLS0tLS0tLQoqIGBkaWZmX3VybGA6IHN0cmluZwoqIGBodG1s\nX3VybGA6IHN0cmluZwoqIGBwYXRjaF91cmxgOiBzdHJpbmcKCkNsYXNzIGBM\nYWJlbGAKPT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiog\nYGNvbG9yYDogc3RyaW5nCiogYG5hbWVgOiBzdHJpbmcKKiBgdXJsYDogc3Ry\naW5nCgpEZWxldGlvbgotLS0tLS0tLQoqIGBkZWxldGUoKWAKCk1vZGlmaWNh\ndGlvbgotLS0tLS0tLS0tLS0KKiBgZWRpdCggbmFtZSwgY29sb3IgKWAKICAg\nICogYG5hbWVgOiBzdHJpbmcKICAgICogYGNvbG9yYDogc3RyaW5nCgpDbGFz\ncyBgTWlsZXN0b25lYAo9PT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcwot\nLS0tLS0tLS0tCiogYGNsb3NlZF9pc3N1ZXNgOiBpbnRlZ2VyCiogYGNyZWF0\nZWRfYXRgOiBkYXRldGltZS5kYXRldGltZQoqIGBjcmVhdG9yYDogYE5hbWVk\nVXNlcmAKKiBgZGVzY3JpcHRpb25gOiBzdHJpbmcKKiBgZHVlX29uYDogZGF0\nZXRpbWUuZGF0ZXRpbWUKKiBgaWRgOiBpbnRlZ2VyCiogYG51bWJlcmA6IGlu\ndGVnZXIKKiBgb3Blbl9pc3N1ZXNgOiBpbnRlZ2VyCiogYHN0YXRlYDogc3Ry\naW5nCiogYHRpdGxlYDogc3RyaW5nCiogYHVybGA6IHN0cmluZwoKRGVsZXRp\nb24KLS0tLS0tLS0KKiBgZGVsZXRlKClgCgpMYWJlbHMKLS0tLS0tCiogYGdl\ndF9sYWJlbHMoKWA6IGl0ZXJhdG9yIG9mIGBMYWJlbGAKCk1vZGlmaWNhdGlv\nbgotLS0tLS0tLS0tLS0KKiBgZWRpdCggdGl0bGUsIFtzdGF0ZSwgZGVzY3Jp\ncHRpb24sIGR1ZV9vbl0gKWAKICAgICogYHRpdGxlYDogc3RyaW5nCiAgICAq\nIGBzdGF0ZWA6IHN0cmluZwogICAgKiBgZGVzY3JpcHRpb25gOiBzdHJpbmcK\nICAgICogYGR1ZV9vbmA6IGRhdGUKCkNsYXNzIGBOYW1lZFVzZXJgCj09PT09\nPT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgYXZhdGFy\nX3VybGA6IHN0cmluZwoqIGBiaW9gOiBzdHJpbmcKKiBgYmxvZ2A6IHN0cmlu\nZwoqIGBjb2xsYWJvcmF0b3JzYDogaW50ZWdlcgoqIGBjb21wYW55YDogc3Ry\naW5nCiogYGNvbnRyaWJ1dGlvbnNgOiBpbnRlZ2VyCiogYGNyZWF0ZWRfYXRg\nOiBkYXRldGltZS5kYXRldGltZQoqIGBkaXNrX3VzYWdlYDogaW50ZWdlcgoq\nIGBlbWFpbGA6IHN0cmluZwoqIGBmb2xsb3dlcnNgOiBpbnRlZ2VyCiogYGZv\nbGxvd2luZ2A6IGludGVnZXIKKiBgZ3JhdmF0YXJfaWRgOiBzdHJpbmcKKiBg\naGlyZWFibGVgOiBib29sCiogYGh0bWxfdXJsYDogc3RyaW5nCiogYGlkYDog\naW50ZWdlcgoqIGBsb2NhdGlvbmA6IHN0cmluZwoqIGBsb2dpbmA6IHN0cmlu\nZwoqIGBuYW1lYDogc3RyaW5nCiogYG93bmVkX3ByaXZhdGVfcmVwb3NgOiBp\nbnRlZ2VyCiogYHBsYW5gOiBgUGxhbmAKKiBgcHJpdmF0ZV9naXN0c2A6IGlu\ndGVnZXIKKiBgcHVibGljX2dpc3RzYDogaW50ZWdlcgoqIGBwdWJsaWNfcmVw\nb3NgOiBpbnRlZ2VyCiogYHRvdGFsX3ByaXZhdGVfcmVwb3NgOiBpbnRlZ2Vy\nCiogYHR5cGVgOiBzdHJpbmcKKiBgdXJsYDogc3RyaW5nCgpFdmVudHMKLS0t\nLS0tCiogYGdldF9ldmVudHMoKWA6IGl0ZXJhdG9yIG9mIGBFdmVudGAKKiBg\nZ2V0X3B1YmxpY19ldmVudHMoKWA6IGl0ZXJhdG9yIG9mIGBFdmVudGAKKiBg\nZ2V0X3JlY2VpdmVkX2V2ZW50cygpYDogaXRlcmF0b3Igb2YgYEV2ZW50YAoq\nIGBnZXRfcHVibGljX3JlY2VpdmVkX2V2ZW50cygpYDogaXRlcmF0b3Igb2Yg\nYEV2ZW50YAoKRm9sbG93ZXJzCi0tLS0tLS0tLQoqIGBnZXRfZm9sbG93ZXJz\nKClgOiBpdGVyYXRvciBvZiBgTmFtZWRVc2VyYAoKRm9sbG93aW5nCi0tLS0t\nLS0tLQoqIGBnZXRfZm9sbG93aW5nKClgOiBpdGVyYXRvciBvZiBgTmFtZWRV\nc2VyYAoKR2lzdHMKLS0tLS0KKiBgY3JlYXRlX2dpc3QoIHB1YmxpYywgZmls\nZXMsIFtkZXNjcmlwdGlvbl0gKWA6IGBHaXN0YAogICAgKiBgcHVibGljYDog\nYm9vbAogICAgKiBgZmlsZXNgOiBkaWN0IG9mIHN0cmluZyB0byBgSW5wdXRG\naWxlQ29udGVudGAKICAgICogYGRlc2NyaXB0aW9uYDogc3RyaW5nCiogYGdl\ndF9naXN0cygpYDogaXRlcmF0b3Igb2YgYEdpc3RgCgpPcmdzCi0tLS0KKiBg\nZ2V0X29yZ3MoKWA6IGl0ZXJhdG9yIG9mIGBPcmdhbml6YXRpb25gCgpSZXBv\ncwotLS0tLQoqIGBnZXRfcmVwbyggbmFtZSApYDogYFJlcG9zaXRvcnlgCiAg\nICAqIGBuYW1lYDogc3RyaW5nCiogYGdldF9yZXBvcyggW3R5cGVdIClgOiBp\ndGVyYXRvciBvZiBgUmVwb3NpdG9yeWAKICAgICogYHR5cGVgOiBzdHJpbmcK\nCldhdGNoZWQKLS0tLS0tLQoqIGBnZXRfd2F0Y2hlZCgpYDogaXRlcmF0b3Ig\nb2YgYFJlcG9zaXRvcnlgCgpDbGFzcyBgT3JnYW5pemF0aW9uYAo9PT09PT09\nPT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGF2YXRh\ncl91cmxgOiBzdHJpbmcKKiBgYmlsbGluZ19lbWFpbGA6IHN0cmluZwoqIGBi\nbG9nYDogc3RyaW5nCiogYGNvbGxhYm9yYXRvcnNgOiBpbnRlZ2VyCiogYGNv\nbXBhbnlgOiBzdHJpbmcKKiBgY3JlYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0\naW1lCiogYGRpc2tfdXNhZ2VgOiBpbnRlZ2VyCiogYGVtYWlsYDogc3RyaW5n\nCiogYGZvbGxvd2Vyc2A6IGludGVnZXIKKiBgZm9sbG93aW5nYDogaW50ZWdl\ncgoqIGBncmF2YXRhcl9pZGA6IHN0cmluZwoqIGBodG1sX3VybGA6IHN0cmlu\nZwoqIGBpZGA6IGludGVnZXIKKiBgbG9jYXRpb25gOiBzdHJpbmcKKiBgbG9n\naW5gOiBzdHJpbmcKKiBgbmFtZWA6IHN0cmluZwoqIGBvd25lZF9wcml2YXRl\nX3JlcG9zYDogaW50ZWdlcgoqIGBwbGFuYDogYFBsYW5gCiogYHByaXZhdGVf\nZ2lzdHNgOiBpbnRlZ2VyCiogYHB1YmxpY19naXN0c2A6IGludGVnZXIKKiBg\ncHVibGljX3JlcG9zYDogaW50ZWdlcgoqIGB0b3RhbF9wcml2YXRlX3JlcG9z\nYDogaW50ZWdlcgoqIGB0eXBlYDogc3RyaW5nCiogYHVybGA6IHN0cmluZwoK\nRXZlbnRzCi0tLS0tLQoqIGBnZXRfZXZlbnRzKClgOiBpdGVyYXRvciBvZiBg\nRXZlbnRgCgpGb3JraW5nCi0tLS0tLS0KKiBgY3JlYXRlX2ZvcmsoIHJlcG8g\nKWA6IGBSZXBvc2l0b3J5YAogICAgKiBgcmVwb2A6IGBSZXBvc2l0b3J5YAoK\nTWVtYmVycwotLS0tLS0tCiogYGdldF9tZW1iZXJzKClgOiBpdGVyYXRvciBv\nZiBgTmFtZWRVc2VyYAoqIGBoYXNfaW5fbWVtYmVycyggbWVtYmVyIClgOiBi\nb29sCiAgICAqIGBtZW1iZXJgOiBgTmFtZWRVc2VyYAoqIGByZW1vdmVfZnJv\nbV9tZW1iZXJzKCBtZW1iZXIgKWAKICAgICogYG1lbWJlcmA6IGBOYW1lZFVz\nZXJgCgpNb2RpZmljYXRpb24KLS0tLS0tLS0tLS0tCiogYGVkaXQoIFtiaWxs\naW5nX2VtYWlsLCBibG9nLCBjb21wYW55LCBlbWFpbCwgbG9jYXRpb24sIG5h\nbWVdIClgCiAgICAqIGBiaWxsaW5nX2VtYWlsYDogc3RyaW5nCiAgICAqIGBi\nbG9nYDogc3RyaW5nCiAgICAqIGBjb21wYW55YDogc3RyaW5nCiAgICAqIGBl\nbWFpbGA6IHN0cmluZwogICAgKiBgbG9jYXRpb25gOiBzdHJpbmcKICAgICog\nYG5hbWVgOiBzdHJpbmcKClB1YmxpY19tZW1iZXJzCi0tLS0tLS0tLS0tLS0t\nCiogYGFkZF90b19wdWJsaWNfbWVtYmVycyggcHVibGljX21lbWJlciApYAog\nICAgKiBgcHVibGljX21lbWJlcmA6IGBOYW1lZFVzZXJgCiogYGdldF9wdWJs\naWNfbWVtYmVycygpYDogaXRlcmF0b3Igb2YgYE5hbWVkVXNlcmAKKiBgaGFz\nX2luX3B1YmxpY19tZW1iZXJzKCBwdWJsaWNfbWVtYmVyIClgOiBib29sCiAg\nICAqIGBwdWJsaWNfbWVtYmVyYDogYE5hbWVkVXNlcmAKKiBgcmVtb3ZlX2Zy\nb21fcHVibGljX21lbWJlcnMoIHB1YmxpY19tZW1iZXIgKWAKICAgICogYHB1\nYmxpY19tZW1iZXJgOiBgTmFtZWRVc2VyYAoKUmVwb3MKLS0tLS0KKiBgY3Jl\nYXRlX3JlcG8oIG5hbWUsIFtkZXNjcmlwdGlvbiwgaG9tZXBhZ2UsIHByaXZh\ndGUsIGhhc19pc3N1ZXMsIGhhc193aWtpLCBoYXNfZG93bmxvYWRzLCB0ZWFt\nX2lkXSApYDogYFJlcG9zaXRvcnlgCiAgICAqIGBuYW1lYDogc3RyaW5nCiAg\nICAqIGBkZXNjcmlwdGlvbmA6IHN0cmluZwogICAgKiBgaG9tZXBhZ2VgOiBz\ndHJpbmcKICAgICogYHByaXZhdGVgOiBib29sCiAgICAqIGBoYXNfaXNzdWVz\nYDogYm9vbAogICAgKiBgaGFzX3dpa2lgOiBib29sCiAgICAqIGBoYXNfZG93\nbmxvYWRzYDogYm9vbAogICAgKiBgdGVhbV9pZGA6IGBUZWFtYAoqIGBnZXRf\ncmVwbyggbmFtZSApYDogYFJlcG9zaXRvcnlgCiAgICAqIGBuYW1lYDogc3Ry\naW5nCiogYGdldF9yZXBvcyggW3R5cGVdIClgOiBpdGVyYXRvciBvZiBgUmVw\nb3NpdG9yeWAKICAgICogYHR5cGVgOiBzdHJpbmcKClRlYW1zCi0tLS0tCiog\nYGNyZWF0ZV90ZWFtKCBuYW1lLCBbcmVwb19uYW1lcywgcGVybWlzc2lvbl0g\nKWA6IGBUZWFtYAogICAgKiBgbmFtZWA6IHN0cmluZwogICAgKiBgcmVwb19u\nYW1lc2A6IGxpc3Qgb2YgYFJlcG9zaXRvcnlgCiAgICAqIGBwZXJtaXNzaW9u\nYDogc3RyaW5nCiogYGdldF90ZWFtKCBpZCApYDogYFRlYW1gCiAgICAqIGBp\nZGA6IGludGVnZXIKKiBgZ2V0X3RlYW1zKClgOiBpdGVyYXRvciBvZiBgVGVh\nbWAKCkNsYXNzIGBQZXJtaXNzaW9uc2AKPT09PT09PT09PT09PT09PT09PQoK\nQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGFkbWluYDogYm9vbAoqIGBwdWxs\nYDogYm9vbAoqIGBwdXNoYDogYm9vbAoKQ2xhc3MgYFBsYW5gCj09PT09PT09\nPT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGNvbGxhYm9yYXRvcnNg\nOiBpbnRlZ2VyCiogYG5hbWVgOiBzdHJpbmcKKiBgcHJpdmF0ZV9yZXBvc2A6\nIGludGVnZXIKKiBgc3BhY2VgOiBpbnRlZ2VyCgpDbGFzcyBgUHVsbFJlcXVl\nc3RgCj09PT09PT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0t\nLQoqIGBhZGRpdGlvbnNgOiBpbnRlZ2VyCiogYGJhc2VgOiBgUHVsbFJlcXVl\nc3RQYXJ0YAoqIGBib2R5YDogc3RyaW5nCiogYGNoYW5nZWRfZmlsZXNgOiBp\nbnRlZ2VyCiogYGNsb3NlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiogYGNv\nbW1lbnRzYDogaW50ZWdlcgoqIGBjb21taXRzYDogaW50ZWdlcgoqIGBjcmVh\ndGVkX2F0YDogZGF0ZXRpbWUuZGF0ZXRpbWUKKiBgZGVsZXRpb25zYDogaW50\nZWdlcgoqIGBkaWZmX3VybGA6IHN0cmluZwoqIGBoZWFkYDogYFB1bGxSZXF1\nZXN0UGFydGAKKiBgaHRtbF91cmxgOiBzdHJpbmcKKiBgaWRgOiBpbnRlZ2Vy\nCiogYGlzc3VlX3VybGA6IHN0cmluZwoqIGBtZXJnZWFibGVgOiBib29sCiog\nYG1lcmdlZGA6IGJvb2wKKiBgbWVyZ2VkX2F0YDogZGF0ZXRpbWUuZGF0ZXRp\nbWUKKiBgbWVyZ2VkX2J5YDogYE5hbWVkVXNlcmAKKiBgbnVtYmVyYDogaW50\nZWdlcgoqIGBwYXRjaF91cmxgOiBzdHJpbmcKKiBgcmV2aWV3X2NvbW1lbnRz\nYDogaW50ZWdlcgoqIGBzdGF0ZWA6IHN0cmluZwoqIGB0aXRsZWA6IHN0cmlu\nZwoqIGB1cGRhdGVkX2F0YDogZGF0ZXRpbWUuZGF0ZXRpbWUKKiBgdXJsYDog\nc3RyaW5nCiogYHVzZXJgOiBgTmFtZWRVc2VyYAoKQ29tbWVudHMKLS0tLS0t\nLS0KKiBgY3JlYXRlX2NvbW1lbnQoIGJvZHksIGNvbW1pdF9pZCwgcGF0aCwg\ncG9zaXRpb24gKWA6IGBQdWxsUmVxdWVzdENvbW1lbnRgCiAgICAqIGBib2R5\nYDogc3RyaW5nCiAgICAqIGBjb21taXRfaWRgOiBgQ29tbWl0YAogICAgKiBg\ncGF0aGA6IHN0cmluZwogICAgKiBgcG9zaXRpb25gOiBpbnRlZ2VyCiogYGdl\ndF9jb21tZW50KCBpZCApYDogYFB1bGxSZXF1ZXN0Q29tbWVudGAKICAgICog\nYGlkYDogaW50ZWdlcgoqIGBnZXRfY29tbWVudHMoKWA6IGl0ZXJhdG9yIG9m\nIGBQdWxsUmVxdWVzdENvbW1lbnRgCgpDb21taXRzCi0tLS0tLS0KKiBgZ2V0\nX2NvbW1pdHMoKWA6IGl0ZXJhdG9yIG9mIGBDb21taXRgCgpGaWxlcwotLS0t\nLQoqIGBnZXRfZmlsZXMoKWA6IGl0ZXJhdG9yIG9mIGBGaWxlYAoKTWVyZ2lu\nZwotLS0tLS0tCiogYGlzX21lcmdlZCgpYDogYm9vbAoqIGBtZXJnZSggW2Nv\nbW1pdF9tZXNzYWdlXSApYDogYFB1bGxSZXF1ZXN0TWVyZ2VTdGF0dXNgCiAg\nICAqIGBjb21taXRfbWVzc2FnZWA6IHN0cmluZwoKTW9kaWZpY2F0aW9uCi0t\nLS0tLS0tLS0tLQoqIGBlZGl0KCBbdGl0bGUsIGJvZHksIHN0YXRlXSApYAog\nICAgKiBgdGl0bGVgOiBzdHJpbmcKICAgICogYGJvZHlgOiBzdHJpbmcKICAg\nICogYHN0YXRlYDogc3RyaW5nCgpDbGFzcyBgUHVsbFJlcXVlc3RDb21tZW50\nYAo9PT09PT09PT09PT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0t\nLS0tLS0tCiogYGJvZHlgOiBzdHJpbmcKKiBgY29tbWl0X2lkYDogc3RyaW5n\nCiogYGNyZWF0ZWRfYXRgOiBkYXRldGltZS5kYXRldGltZQoqIGBpZGA6IGlu\ndGVnZXIKKiBgb3JpZ2luYWxfY29tbWl0X2lkYDogc3RyaW5nCiogYG9yaWdp\nbmFsX3Bvc2l0aW9uYDogaW50ZWdlcgoqIGBwYXRoYDogc3RyaW5nCiogYHBv\nc2l0aW9uYDogaW50ZWdlcgoqIGB1cGRhdGVkX2F0YDogZGF0ZXRpbWUuZGF0\nZXRpbWUKKiBgdXJsYDogc3RyaW5nCiogYHVzZXJgOiBgTmFtZWRVc2VyYAoK\nRGVsZXRpb24KLS0tLS0tLS0KKiBgZGVsZXRlKClgCgpNb2RpZmljYXRpb24K\nLS0tLS0tLS0tLS0tCiogYGVkaXQoIGJvZHkgKWAKICAgICogYGJvZHlgOiBz\ndHJpbmcKCkNsYXNzIGBQdWxsUmVxdWVzdE1lcmdlU3RhdHVzYAo9PT09PT09\nPT09PT09PT09PT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0t\nLQoqIGBtZXJnZWRgOiBib29sCiogYG1lc3NhZ2VgOiBzdHJpbmcKKiBgc2hh\nYDogc3RyaW5nCgpDbGFzcyBgUHVsbFJlcXVlc3RQYXJ0YAo9PT09PT09PT09\nPT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0tLS0tCiogYGxhYmVs\nYDogc3RyaW5nCiogYHJlZmA6IHN0cmluZwoqIGByZXBvYDogYFJlcG9zaXRv\ncnlgCiogYHNoYWA6IHN0cmluZwoqIGB1c2VyYDogYE5hbWVkVXNlcmAKCkNs\nYXNzIGBSZXBvc2l0b3J5YAo9PT09PT09PT09PT09PT09PT0KCkF0dHJpYnV0\nZXMKLS0tLS0tLS0tLQoqIGBjbG9uZV91cmxgOiBzdHJpbmcKKiBgY3JlYXRl\nZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiogYGRlc2NyaXB0aW9uYDogc3Ry\naW5nCiogYGZvcmtgOiBib29sCiogYGZvcmtzYDogaW50ZWdlcgoqIGBmdWxs\nX25hbWVgOiBzdHJpbmcKKiBgZ2l0X3VybGA6IHN0cmluZwoqIGBoYXNfZG93\nbmxvYWRzYDogYm9vbAoqIGBoYXNfaXNzdWVzYDogYm9vbAoqIGBoYXNfd2lr\naWA6IGJvb2wKKiBgaG9tZXBhZ2VgOiBzdHJpbmcKKiBgaHRtbF91cmxgOiBz\ndHJpbmcKKiBgaWRgOiBpbnRlZ2VyCiogYGxhbmd1YWdlYDogc3RyaW5nCiog\nYG1hc3Rlcl9icmFuY2hgOiBzdHJpbmcKKiBgbmFtZWA6IHN0cmluZwoqIGBv\ncGVuX2lzc3Vlc2A6IGludGVnZXIKKiBgb3JnYW5pemF0aW9uYDogYE9yZ2Fu\naXphdGlvbmAKKiBgb3duZXJgOiBgTmFtZWRVc2VyYAoqIGBwYXJlbnRgOiBg\nUmVwb3NpdG9yeWAKKiBgcGVybWlzc2lvbnNgOiBgUGVybWlzc2lvbnNgCiog\nYHByaXZhdGVgOiBib29sCiogYHB1c2hlZF9hdGA6IGRhdGV0aW1lLmRhdGV0\naW1lCiogYHNpemVgOiBpbnRlZ2VyCiogYHNvdXJjZWA6IGBSZXBvc2l0b3J5\nYAoqIGBzc2hfdXJsYDogc3RyaW5nCiogYHN2bl91cmxgOiBzdHJpbmcKKiBg\ndXBkYXRlZF9hdGA6IGRhdGV0aW1lLmRhdGV0aW1lCiogYHVybGA6IHN0cmlu\nZwoqIGB3YXRjaGVyc2A6IGludGVnZXIKCkRlbGV0aW9uCi0tLS0tLS0tCiog\nYGRlbGV0ZSgpYAoKQ29tcGFyaXNvbgotLS0tLS0tLS0tCiogYGNvbXBhcmUo\nIGJhc2UsIGhlYWQgKWA6IGBDb21wYXJpc29uYAogICAgKiBgYmFzZWA6IHN0\ncmluZwogICAgKiBgaGVhZGA6IHN0cmluZwoKQnJhbmNoZXMKLS0tLS0tLS0K\nKiBgZ2V0X2JyYW5jaGVzKClgOiBpdGVyYXRvciBvZiBgQnJhbmNoYAoKQ29s\nbGFib3JhdG9ycwotLS0tLS0tLS0tLS0tCiogYGFkZF90b19jb2xsYWJvcmF0\nb3JzKCBjb2xsYWJvcmF0b3IgKWAKICAgICogYGNvbGxhYm9yYXRvcmA6IGBO\nYW1lZFVzZXJgCiogYGdldF9jb2xsYWJvcmF0b3JzKClgOiBpdGVyYXRvciBv\nZiBgTmFtZWRVc2VyYAoqIGBoYXNfaW5fY29sbGFib3JhdG9ycyggY29sbGFi\nb3JhdG9yIClgOiBib29sCiAgICAqIGBjb2xsYWJvcmF0b3JgOiBgTmFtZWRV\nc2VyYAoqIGByZW1vdmVfZnJvbV9jb2xsYWJvcmF0b3JzKCBjb2xsYWJvcmF0\nb3IgKWAKICAgICogYGNvbGxhYm9yYXRvcmA6IGBOYW1lZFVzZXJgCgpDb21t\nZW50cwotLS0tLS0tLQoqIGBnZXRfY29tbWVudCggaWQgKWA6IGBDb21taXRD\nb21tZW50YAogICAgKiBgaWRgOiBpbnRlZ2VyCiogYGdldF9jb21tZW50cygp\nYDogaXRlcmF0b3Igb2YgYENvbW1pdENvbW1lbnRgCgpDb21taXRzCi0tLS0t\nLS0KKiBgZ2V0X2NvbW1pdCggc2hhIClgOiBgQ29tbWl0YAogICAgKiBgc2hh\nYDogc3RyaW5nCiogYGdldF9jb21taXRzKCBbc2hhLCBwYXRoXSApYDogaXRl\ncmF0b3Igb2YgYENvbW1pdGAKICAgICogYHNoYWA6IHN0cmluZwogICAgKiBg\ncGF0aGA6IHN0cmluZwoKQ29udHJpYnV0b3JzCi0tLS0tLS0tLS0tLQoqIGBn\nZXRfY29udHJpYnV0b3JzKClgOiBpdGVyYXRvciBvZiBgTmFtZWRVc2VyYAoK\nRG93bmxvYWRzCi0tLS0tLS0tLQoqIGBjcmVhdGVfZG93bmxvYWQoIG5hbWUs\nIHNpemUsIFtkZXNjcmlwdGlvbiwgY29udGVudF90eXBlXSApYDogYERvd25s\nb2FkYAogICAgKiBgbmFtZWA6IHN0cmluZwogICAgKiBgc2l6ZWA6IGludGVn\nZXIKICAgICogYGRlc2NyaXB0aW9uYDogc3RyaW5nCiAgICAqIGBjb250ZW50\nX3R5cGVgOiBzdHJpbmcKKiBgZ2V0X2Rvd25sb2FkKCBpZCApYDogYERvd25s\nb2FkYAogICAgKiBgaWRgOiBpbnRlZ2VyCiogYGdldF9kb3dubG9hZHMoKWA6\nIGl0ZXJhdG9yIG9mIGBEb3dubG9hZGAKCkV2ZW50cwotLS0tLS0KKiBgZ2V0\nX2V2ZW50cygpYDogaXRlcmF0b3Igb2YgYEV2ZW50YAoqIGBnZXRfbmV0d29y\na19ldmVudHMoKWA6IGl0ZXJhdG9yIG9mIGBFdmVudGAKCkZvcmtzCi0tLS0t\nCiogYGdldF9mb3JrcygpYDogaXRlcmF0b3Igb2YgYFJlcG9zaXRvcnlgCgpH\naXRfYmxvYnMKLS0tLS0tLS0tCiogYGNyZWF0ZV9naXRfYmxvYiggY29udGVu\ndCwgZW5jb2RpbmcgKWA6IGBHaXRCbG9iYAogICAgKiBgY29udGVudGA6IHN0\ncmluZwogICAgKiBgZW5jb2RpbmdgOiBzdHJpbmcKKiBgZ2V0X2dpdF9ibG9i\nKCBzaGEgKWA6IGBHaXRCbG9iYAogICAgKiBgc2hhYDogc3RyaW5nCgpHaXRf\nY29tbWl0cwotLS0tLS0tLS0tLQoqIGBjcmVhdGVfZ2l0X2NvbW1pdCggbWVz\nc2FnZSwgdHJlZSwgcGFyZW50cywgW2F1dGhvciwgY29tbWl0dGVyXSApYDog\nYEdpdENvbW1pdGAKICAgICogYG1lc3NhZ2VgOiBzdHJpbmcKICAgICogYHRy\nZWVgOiBgR2l0VHJlZWAKICAgICogYHBhcmVudHNgOiBsaXN0IG9mIGBHaXRD\nb21taXRgCiAgICAqIGBhdXRob3JgOiBgSW5wdXRHaXRBdXRob3JgCiAgICAq\nIGBjb21taXR0ZXJgOiBgSW5wdXRHaXRBdXRob3JgCiogYGdldF9naXRfY29t\nbWl0KCBzaGEgKWA6IGBHaXRDb21taXRgCiAgICAqIGBzaGFgOiBzdHJpbmcK\nCkdpdF9yZWZzCi0tLS0tLS0tCiogYGNyZWF0ZV9naXRfcmVmKCByZWYsIHNo\nYSApYDogYEdpdFJlZmAKICAgICogYHJlZmA6IHN0cmluZwogICAgKiBgc2hh\nYDogc3RyaW5nCiogYGdldF9naXRfcmVmKCByZWYgKWA6IGBHaXRSZWZgCiAg\nICAqIGByZWZgOiBzdHJpbmcKKiBgZ2V0X2dpdF9yZWZzKClgOiBpdGVyYXRv\nciBvZiBgR2l0UmVmYAoKR2l0X3RhZ3MKLS0tLS0tLS0KKiBgY3JlYXRlX2dp\ndF90YWcoIHRhZywgbWVzc2FnZSwgb2JqZWN0LCB0eXBlLCBbdGFnZ2VyXSAp\nYDogYEdpdFRhZ2AKICAgICogYHRhZ2A6IHN0cmluZwogICAgKiBgbWVzc2Fn\nZWA6IHN0cmluZwogICAgKiBgb2JqZWN0YDogc3RyaW5nCiAgICAqIGB0eXBl\nYDogc3RyaW5nCiAgICAqIGB0YWdnZXJgOiBgSW5wdXRHaXRBdXRob3JgCiog\nYGdldF9naXRfdGFnKCBzaGEgKWA6IGBHaXRUYWdgCiAgICAqIGBzaGFgOiBz\ndHJpbmcKCkdpdF90cmVlcwotLS0tLS0tLS0KKiBgY3JlYXRlX2dpdF90cmVl\nKCB0cmVlLCBbYmFzZV90cmVlXSApYDogYEdpdFRyZWVgCiAgICAqIGB0cmVl\nYDogbGlzdCBvZiBgSW5wdXRHaXRUcmVlRWxlbWVudGAKICAgICogYGJhc2Vf\ndHJlZWA6IGBHaXRUcmVlYAoqIGBnZXRfZ2l0X3RyZWUoIHNoYSwgW3JlY3Vy\nc2l2ZV0gKWA6IGBHaXRUcmVlYAogICAgKiBgc2hhYDogc3RyaW5nCiAgICAq\nIGByZWN1cnNpdmVgOiBib29sCgpIb29rcwotLS0tLQoqIGBjcmVhdGVfaG9v\nayggbmFtZSwgY29uZmlnLCBbZXZlbnRzLCBhY3RpdmVdIClgOiBgSG9va2AK\nICAgICogYG5hbWVgOiBzdHJpbmcKICAgICogYGNvbmZpZ2A6IGRpY3QKICAg\nICogYGV2ZW50c2A6IGxpc3Qgb2Ygc3RyaW5nCiAgICAqIGBhY3RpdmVgOiBi\nb29sCiogYGdldF9ob29rKCBpZCApYDogYEhvb2tgCiAgICAqIGBpZGA6IGlu\ndGVnZXIKKiBgZ2V0X2hvb2tzKClgOiBpdGVyYXRvciBvZiBgSG9va2AKCklz\nc3VlcwotLS0tLS0KKiBgY3JlYXRlX2lzc3VlKCB0aXRsZSwgW2JvZHksIGFz\nc2lnbmVlLCBtaWxlc3RvbmUsIGxhYmVsc10gKWA6IGBJc3N1ZWAKICAgICog\nYHRpdGxlYDogc3RyaW5nCiAgICAqIGBib2R5YDogc3RyaW5nCiAgICAqIGBh\nc3NpZ25lZWA6IGBOYW1lZFVzZXJgCiAgICAqIGBtaWxlc3RvbmVgOiBgTWls\nZXN0b25lYAogICAgKiBgbGFiZWxzYDogbGlzdCBvZiBgTGFiZWxgCiogYGdl\ndF9pc3N1ZSggbnVtYmVyIClgOiBgSXNzdWVgCiAgICAqIGBudW1iZXJgOiBp\nbnRlZ2VyCiogYGdldF9pc3N1ZXMoIFttaWxlc3RvbmUsIHN0YXRlLCBhc3Np\nZ25lZSwgbWVudGlvbmVkLCBsYWJlbHMsIHNvcnQsIGRpcmVjdGlvbiwgc2lu\nY2VdIClgOiBpdGVyYXRvciBvZiBgSXNzdWVgCiAgICAqIGBtaWxlc3RvbmVg\nOiBgTWlsZXN0b25lYCBvciAibm9uZSIgb3IgIioiCiAgICAqIGBzdGF0ZWA6\nIHN0cmluZwogICAgKiBgYXNzaWduZWVgOiBgTmFtZWRVc2VyYCBvciAibm9u\nZSIgb3IgIioiCiAgICAqIGBtZW50aW9uZWRgOiBgTmFtZWRVc2VyYAogICAg\nKiBgbGFiZWxzYDogbGlzdCBvZiBgTGFiZWxgCiAgICAqIGBzb3J0YDogc3Ry\naW5nCiAgICAqIGBkaXJlY3Rpb25gOiBzdHJpbmcKICAgICogYHNpbmNlYDog\nZGF0ZXRpbWUuZGF0ZXRpbWUKKiBgbGVnYWN5X3NlYXJjaF9pc3N1ZXMoIHN0\nYXRlLCBrZXl3b3JkIClgOiBpdGVyYXRvciBvZiBgSXNzdWVgCiAgICAqIGBz\ndGF0ZWA6ICJvcGVuIiBvciAiY2xvc2VkIgogICAgKiBga2V5d29yZGA6IHN0\ncmluZwoKSXNzdWVzX2V2ZW50cwotLS0tLS0tLS0tLS0tCiogYGdldF9pc3N1\nZXNfZXZlbnQoIGlkIClgOiBgSXNzdWVFdmVudGAKICAgICogYGlkYDogaW50\nZWdlcgoqIGBnZXRfaXNzdWVzX2V2ZW50cygpYDogaXRlcmF0b3Igb2YgYElz\nc3VlRXZlbnRgCgpLZXlzCi0tLS0KKiBgY3JlYXRlX2tleSggdGl0bGUsIGtl\neSApYDogYFJlcG9zaXRvcnlLZXlgCiAgICAqIGB0aXRsZWA6IHN0cmluZwog\nICAgKiBga2V5YDogc3RyaW5nCiogYGdldF9rZXkoIGlkIClgOiBgUmVwb3Np\ndG9yeUtleWAKICAgICogYGlkYDogaW50ZWdlcgoqIGBnZXRfa2V5cygpYDog\naXRlcmF0b3Igb2YgYFJlcG9zaXRvcnlLZXlgCgpMYWJlbHMKLS0tLS0tCiog\nYGNyZWF0ZV9sYWJlbCggbmFtZSwgY29sb3IgKWA6IGBMYWJlbGAKICAgICog\nYG5hbWVgOiBzdHJpbmcKICAgICogYGNvbG9yYDogc3RyaW5nCiogYGdldF9s\nYWJlbCggbmFtZSApYDogYExhYmVsYAogICAgKiBgbmFtZWA6IHN0cmluZwoq\nIGBnZXRfbGFiZWxzKClgOiBpdGVyYXRvciBvZiBgTGFiZWxgCgpMYW5ndWFn\nZXMKLS0tLS0tLS0tCiogYGdldF9sYW5ndWFnZXMoKWA6IGRpY3Qgb2Ygc3Ry\naW5nIHRvIGludGVnZXIKCk1pbGVzdG9uZXMKLS0tLS0tLS0tLQoqIGBjcmVh\ndGVfbWlsZXN0b25lKCB0aXRsZSwgW3N0YXRlLCBkZXNjcmlwdGlvbiwgZHVl\nX29uXSApYDogYE1pbGVzdG9uZWAKICAgICogYHRpdGxlYDogc3RyaW5nCiAg\nICAqIGBzdGF0ZWA6IHN0cmluZwogICAgKiBgZGVzY3JpcHRpb25gOiBzdHJp\nbmcKICAgICogYGR1ZV9vbmA6IGRhdGUKKiBgZ2V0X21pbGVzdG9uZSggbnVt\nYmVyIClgOiBgTWlsZXN0b25lYAogICAgKiBgbnVtYmVyYDogaW50ZWdlcgoq\nIGBnZXRfbWlsZXN0b25lcyggW3N0YXRlLCBzb3J0LCBkaXJlY3Rpb25dIClg\nOiBpdGVyYXRvciBvZiBgTWlsZXN0b25lYAogICAgKiBgc3RhdGVgOiBzdHJp\nbmcKICAgICogYHNvcnRgOiBzdHJpbmcKICAgICogYGRpcmVjdGlvbmA6IHN0\ncmluZwoKTW9kaWZpY2F0aW9uCi0tLS0tLS0tLS0tLQoqIGBlZGl0KCBuYW1l\nLCBbZGVzY3JpcHRpb24sIGhvbWVwYWdlLCBwdWJsaWMsIGhhc19pc3N1ZXMs\nIGhhc193aWtpLCBoYXNfZG93bmxvYWRzXSApYAogICAgKiBgbmFtZWA6IHN0\ncmluZwogICAgKiBgZGVzY3JpcHRpb25gOiBzdHJpbmcKICAgICogYGhvbWVw\nYWdlYDogc3RyaW5nCiAgICAqIGBwdWJsaWNgOiBib29sCiAgICAqIGBoYXNf\naXNzdWVzYDogYm9vbAogICAgKiBgaGFzX3dpa2lgOiBib29sCiAgICAqIGBo\nYXNfZG93bmxvYWRzYDogYm9vbAoKUHVsbHMKLS0tLS0KKiBgY3JlYXRlX3B1\nbGwoIDwgdGl0bGUsIGJvZHksIGJhc2UsIGhlYWQgPiBvciA8IGlzc3VlLCBi\nYXNlLCBoZWFkID4gKWA6IGBQdWxsUmVxdWVzdGAKICAgICogYHRpdGxlYDog\nc3RyaW5nCiAgICAqIGBib2R5YDogc3RyaW5nCiAgICAqIGBpc3N1ZWA6IGBJ\nc3N1ZWAKICAgICogYGJhc2VgOiBzdHJpbmcKICAgICogYGhlYWRgOiBzdHJp\nbmcKKiBgZ2V0X3B1bGwoIG51bWJlciApYDogYFB1bGxSZXF1ZXN0YAogICAg\nKiBgbnVtYmVyYDogaW50ZWdlcgoqIGBnZXRfcHVsbHMoIFtzdGF0ZV0gKWA6\nIGl0ZXJhdG9yIG9mIGBQdWxsUmVxdWVzdGAKICAgICogYHN0YXRlYDogc3Ry\naW5nCgpUYWdzCi0tLS0KKiBgZ2V0X3RhZ3MoKWA6IGl0ZXJhdG9yIG9mIGBU\nYWdgCgpUZWFtcwotLS0tLQoqIGBnZXRfdGVhbXMoKWA6IGl0ZXJhdG9yIG9m\nIGBUZWFtYAoKV2F0Y2hlcnMKLS0tLS0tLS0KKiBgZ2V0X3dhdGNoZXJzKClg\nOiBpdGVyYXRvciBvZiBgTmFtZWRVc2VyYAoKQ2xhc3MgYFJlcG9zaXRvcnlL\nZXlgCj09PT09PT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcwotLS0tLS0t\nLS0tCiogYGlkYDogaW50ZWdlcgoqIGBrZXlgOiBzdHJpbmcKKiBgdGl0bGVg\nOiBzdHJpbmcKKiBgdXJsYDogc3RyaW5nCiogYHZlcmlmaWVkYDogYm9vbAoK\nRGVsZXRpb24KLS0tLS0tLS0KKiBgZGVsZXRlKClgCgpNb2RpZmljYXRpb24K\nLS0tLS0tLS0tLS0tCiogYGVkaXQoIFt0aXRsZSwga2V5XSApYAogICAgKiBg\ndGl0bGVgOiBzdHJpbmcKICAgICogYGtleWA6IHN0cmluZwoKQ2xhc3MgYFRh\nZ2AKPT09PT09PT09PT0KCkF0dHJpYnV0ZXMKLS0tLS0tLS0tLQoqIGBjb21t\naXRgOiBgQ29tbWl0YAoqIGBuYW1lYDogc3RyaW5nCiogYHRhcmJhbGxfdXJs\nYDogc3RyaW5nCiogYHppcGJhbGxfdXJsYDogc3RyaW5nCgpDbGFzcyBgVGVh\nbWAKPT09PT09PT09PT09CgpBdHRyaWJ1dGVzCi0tLS0tLS0tLS0KKiBgaWRg\nOiBpbnRlZ2VyCiogYG1lbWJlcnNfY291bnRgOiBpbnRlZ2VyCiogYG5hbWVg\nOiBzdHJpbmcKKiBgcGVybWlzc2lvbmA6IHN0cmluZwoqIGByZXBvc19jb3Vu\ndGA6IGludGVnZXIKKiBgdXJsYDogc3RyaW5nCgpEZWxldGlvbgotLS0tLS0t\nLQoqIGBkZWxldGUoKWAKCk1lbWJlcnMKLS0tLS0tLQoqIGBhZGRfdG9fbWVt\nYmVycyggbWVtYmVyIClgCiAgICAqIGBtZW1iZXJgOiBgTmFtZWRVc2VyYAoq\nIGBnZXRfbWVtYmVycygpYDogaXRlcmF0b3Igb2YgYE5hbWVkVXNlcmAKKiBg\naGFzX2luX21lbWJlcnMoIG1lbWJlciApYDogYm9vbAogICAgKiBgbWVtYmVy\nYDogYE5hbWVkVXNlcmAKKiBgcmVtb3ZlX2Zyb21fbWVtYmVycyggbWVtYmVy\nIClgCiAgICAqIGBtZW1iZXJgOiBgTmFtZWRVc2VyYAoKTW9kaWZpY2F0aW9u\nCi0tLS0tLS0tLS0tLQoqIGBlZGl0KCBuYW1lLCBbcGVybWlzc2lvbl0gKWAK\nICAgICogYG5hbWVgOiBzdHJpbmcKICAgICogYHBlcm1pc3Npb25gOiBzdHJp\nbmcKClJlcG9zCi0tLS0tCiogYGFkZF90b19yZXBvcyggcmVwbyApYAogICAg\nKiBgcmVwb2A6IGBSZXBvc2l0b3J5YAoqIGBnZXRfcmVwb3MoKWA6IGl0ZXJh\ndG9yIG9mIGBSZXBvc2l0b3J5YAoqIGBoYXNfaW5fcmVwb3MoIHJlcG8gKWA6\nIGJvb2wKICAgICogYHJlcG9gOiBgUmVwb3NpdG9yeWAKKiBgcmVtb3ZlX2Zy\nb21fcmVwb3MoIHJlcG8gKWAKICAgICogYHJlcG9gOiBgUmVwb3NpdG9yeWAK\nCkNsYXNzIGBVc2VyS2V5YAo9PT09PT09PT09PT09PT0KCkF0dHJpYnV0ZXMK\nLS0tLS0tLS0tLQoqIGBpZGA6IGludGVnZXIKKiBga2V5YDogc3RyaW5nCiog\nYHRpdGxlYDogc3RyaW5nCiogYHVybGA6IHN0cmluZwoqIGB2ZXJpZmllZGA6\nIGJvb2wKCkRlbGV0aW9uCi0tLS0tLS0tCiogYGRlbGV0ZSgpYAoKTW9kaWZp\nY2F0aW9uCi0tLS0tLS0tLS0tLQoqIGBlZGl0KCBbdGl0bGUsIGtleV0gKWAK\nICAgICogYHRpdGxlYDogc3RyaW5nCiAgICAqIGBrZXlgOiBzdHJpbmcK\n"} + diff --git a/test/Repository.py b/test/Repository.py index 1190ae95ac..cff70c86c9 100644 --- a/test/Repository.py +++ b/test/Repository.py @@ -356,3 +356,7 @@ def testAssignees( self ): self.assertListKeyEqual( self.repo.get_assignees(), lambda u: u.login, [ "jacquev6", "Lyloa" ] ) self.repo.remove_from_collaborators( lyloa ) self.assertFalse( self.repo.has_in_assignees( lyloa ) ) + + def testGetContents( self ): + self.assertEqual( len( self.repo.get_readme().content ), 10212 ) + self.assertEqual( len( self.repo.get_contents( "doc/ReferenceOfClasses.md" ).content ), 38121 )