)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b2b25ef93f462cbfcc7fd4f4101c9d57ad4f6deb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghong \u003cw.wanghong@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-04-15 19:21:21 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"delete proj_dp_association when delete proj or dp"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For endpoint_filter extension we should remove all the endpoint"},{"line_number":10,"context_line":"to project associations when we delete the associated endpoint"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAXH%2F%2F0wc%3D","line":7,"updated":"2014-04-17 06:41:57.000000000","message":"Replace dp with ep.","commit_id":"6cbae973ccb54eff07064d076789b0026732371f"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"9a5d7493f7ed545a0d1b343698a28a5722494170","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wanghong \u003cw.wanghong@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-07-02 10:49:39 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"delete association when delete proj or endpoint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For endpoint_filter extension we should remove all the endpoint"},{"line_number":10,"context_line":"to project associations when we delete the associated endpoint"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"baada198_d5ba6e6d","line":7,"updated":"2014-07-02 06:29:51.000000000","message":"Maybe re-phrase subject line to:\n\nClean-up EP-Filter after project/endpoint delete","commit_id":"e285d71c7741fe963754f1b788753e52c1c2dfc9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3c8dd9ad031bdee043f145dbe02873f0e33e20a0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"or project. Otherwise list_endpoints_for_project and"},{"line_number":12,"context_line":"list_projects_for_endpoint API will return 404 response if the"},{"line_number":13,"context_line":"associated endpoint or project has been deleted. Also, there will"},{"line_number":14,"context_line":"be a lot of dirty data remains in the database."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ib65fe5233313ff23a288b1b688705ae098afa547"},{"line_number":17,"context_line":"Closes-Bug: #1305537"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_ae0f0c2d","line":14,"updated":"2014-07-19 15:11:49.000000000","message":"s/remains/remaining/","commit_id":"f37bffdf00ee93f0389ad3785d285e39a754f860"}],"keystone/contrib/endpoint_filter/backends/catalog_sql.py":[{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"a7a51fd9a7c1edd3add146a1e8438f6fccfe4f8b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        return catalog"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def delete_endpoint(self, endpoint_id):"},{"line_number":79,"context_line":"        self.endpoint_filter_api.delete_association_by_endpoint(endpoint_id)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        super(EndpointFilterCatalog, self).delete_endpoint(endpoint_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_227ef6e4","line":79,"updated":"2014-07-04 03:11:32.000000000","message":"Can you elaborate further on why you are not using the notification framework to delete the endpoint association(s)? I don\u0027t currently understand the objection to setting up notification on endpoint similar to project.","commit_id":"f37bffdf00ee93f0389ad3785d285e39a754f860"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"6fb8bddb6a7cd66e7c0213feebb07cef89f2509a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        return catalog"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def delete_endpoint(self, endpoint_id):"},{"line_number":79,"context_line":"        self.endpoint_filter_api.delete_association_by_endpoint(endpoint_id)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        super(EndpointFilterCatalog, self).delete_endpoint(endpoint_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_c4525fdd","line":79,"in_reply_to":"baada198_227ef6e4","updated":"2014-07-04 09:03:10.000000000","message":"Sorry, because my mistake, I thought the notification framework will always send public RPC notification. If so, I think endpoint is not important enough to send public RPC notification. But, today I found we have parameter to control whether notification framework sends public notification. As a result, I will use the notification framework to delete the endpoint association too.","commit_id":"f37bffdf00ee93f0389ad3785d285e39a754f860"}],"keystone/contrib/endpoint_filter/backends/sql.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b2b25ef93f462cbfcc7fd4f4101c9d57ad4f6deb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        endpoint_filter_refs \u003d query.all()"},{"line_number":75,"context_line":"        return endpoint_filter_refs"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def remove_endpoint_from_project_for_endpoint(self, endpoint_id):"},{"line_number":78,"context_line":"        session \u003d sql.get_session()"},{"line_number":79,"context_line":"        with session.begin():"},{"line_number":80,"context_line":"            query \u003d session.query(ProjectEndpoint)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F0uE%3D","line":77,"updated":"2014-04-17 06:41:57.000000000","message":"I don\u0027t like the naming convention used. How about \u0027update_association_for_project_deletion\u0027\n\nOr you could make the two methods into one, since they are mostly the same.","commit_id":"6cbae973ccb54eff07064d076789b0026732371f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"984ad2c76e7ac8c097ec2fa545915916f65e1d0f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        query \u003d query.filter_by(endpoint_id\u003dendpoint_id)"},{"line_number":74,"context_line":"        endpoint_filter_refs \u003d query.all()"},{"line_number":75,"context_line":"        return endpoint_filter_refs"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def delete_association_by_endpoint(self, endpoint_id):"},{"line_number":78,"context_line":"        session \u003d sql.get_session()"},{"line_number":79,"context_line":"        with session.begin():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2Ftps%3D","line":76,"updated":"2014-04-18 01:03:57.000000000","message":"These should probably be called by notifications from the catalog and assignments backends.","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"}],"keystone/contrib/endpoint_filter/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8ebffb881f4f1effeaabb73a117591699d660b26","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                              self._on_project_delete)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _on_project_delete(self, service, resource_type, operation,"},{"line_number":32,"context_line":"                           payload):"},{"line_number":33,"context_line":"        self.endpoint_filter_api.delete_association_by_project("},{"line_number":34,"context_line":"            payload[\u0027resource_info\u0027])"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1b2c2999","line":32,"updated":"2014-07-01 18:48:34.000000000","message":"the \n\n    payload[\u0027resource_info\u0027] \n\nhere would be the project UUID correct? Maybe we can add a small inline comment to specify that?","commit_id":"b473969dda1ad243d33499cff894da9c79def2f9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"9a5d7493f7ed545a0d1b343698a28a5722494170","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"},{"line_number":27,"context_line":"        super(EndpointFilterV3Controller, self).__init__()"},{"line_number":28,"context_line":"        notifications.register_event_callback(\u0027deleted\u0027, \u0027project\u0027,"},{"line_number":29,"context_line":"                                              self._on_project_delete)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _on_project_delete(self, service, resource_type, operation,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_277381e8","line":28,"updated":"2014-07-02 06:29:51.000000000","message":"Why only setup notification for project deletes? What about notifications for endpoint deletes?","commit_id":"e285d71c7741fe963754f1b788753e52c1c2dfc9"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"be605bbd504f695b64c4116d6745408ae710e3f3","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"},{"line_number":27,"context_line":"        super(EndpointFilterV3Controller, self).__init__()"},{"line_number":28,"context_line":"        notifications.register_event_callback(\u0027deleted\u0027, \u0027project\u0027,"},{"line_number":29,"context_line":"                                              self._on_project_delete)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _on_project_delete(self, service, resource_type, operation,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_1dac0c35","line":28,"in_reply_to":"baada198_277381e8","updated":"2014-07-02 07:36:27.000000000","message":"Currently, there is no notifications for endpoint, and I do not think it make much scenes to add notifications for endpoint.","commit_id":"e285d71c7741fe963754f1b788753e52c1c2dfc9"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"a7a51fd9a7c1edd3add146a1e8438f6fccfe4f8b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        # project as there are no security implications."},{"line_number":44,"context_line":"        self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":45,"context_line":"        self.assignment_api.get_project(project_id)"},{"line_number":46,"context_line":"        # NOTE(gyee): we may need to cleanup any existing project-endpoint"},{"line_number":47,"context_line":"        # associations here if either project or endpoint is not found."},{"line_number":48,"context_line":"        self.endpoint_filter_api.add_endpoint_to_project(endpoint_id,"},{"line_number":49,"context_line":"                                                         project_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_0af70b5a","line":46,"updated":"2014-07-04 03:11:32.000000000","message":"With this change this TODO is redundant and therefore should be removed.","commit_id":"f37bffdf00ee93f0389ad3785d285e39a754f860"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"a7a51fd9a7c1edd3add146a1e8438f6fccfe4f8b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\"Verifies endpoint is currently associated with given project.\"\"\""},{"line_number":54,"context_line":"        self.catalog_api.get_endpoint(endpoint_id)"},{"line_number":55,"context_line":"        self.assignment_api.get_project(project_id)"},{"line_number":56,"context_line":"        # TODO(gyee): we may need to cleanup any existing project-endpoint"},{"line_number":57,"context_line":"        # associations here if either project or endpoint is not found."},{"line_number":58,"context_line":"        self.endpoint_filter_api.check_endpoint_in_project(endpoint_id,"},{"line_number":59,"context_line":"                                                           project_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_eaf9f74e","line":56,"updated":"2014-07-04 03:11:32.000000000","message":"Same as above","commit_id":"f37bffdf00ee93f0389ad3785d285e39a754f860"}],"keystone/contrib/endpoint_filter/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fc0a82e4578e337ddc106e1375181272d7dd043c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        super(Manager, self).__init__(CONF.endpoint_filter.driver)"},{"line_number":63,"context_line":"        is_enabled \u003d True"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            migration_helpers.print_db_version(\u0027revoke\u0027)"},{"line_number":66,"context_line":"        except ImportError:"},{"line_number":67,"context_line":"            is_enabled \u003d False"},{"line_number":68,"context_line":"        if is_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FyKs%3D","line":65,"updated":"2014-04-17 13:45:48.000000000","message":"Why are you checking if the revoke extension is enabled?","commit_id":"34f5c70b147255553da46091dc92a3d32881a96e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fc0a82e4578e337ddc106e1375181272d7dd043c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        raise exception.NotImplemented()"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @abc.abstractmethod"},{"line_number":146,"context_line":"    def remove_endpoint_from_project_for_endpoint(self, endpoint_id):"},{"line_number":147,"context_line":"        \"\"\"Removes all the endpoints to project association with endpoint."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        :param endpoint_id: identity of endpoint to check"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FyK4%3D","line":146,"updated":"2014-04-17 13:45:48.000000000","message":"these terms would need to be updated too","commit_id":"34f5c70b147255553da46091dc92a3d32881a96e"}],"keystone/tests/test_associate_project_endpoint_extension.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"984ad2c76e7ac8c097ec2fa545915916f65e1d0f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    body\u003d\u0027\u0027,"},{"line_number":228,"context_line":"                    expected_status\u003d404)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_remove_endpoint_project_assoc_when_del_proj(self):"},{"line_number":231,"context_line":"        self.put(self.default_request_url)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        self.delete(\u0027/projects/%(project_id)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2Ftqo%3D","line":230,"updated":"2014-04-18 01:03:57.000000000","message":"spell the words on out, abbreviations don\u0027t buy anything here.","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"5e41b67b4fb43eec07563343b55787f40763ec9f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    body\u003d\u0027\u0027,"},{"line_number":228,"context_line":"                    expected_status\u003d404)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_remove_endpoint_project_assoc_when_del_proj(self):"},{"line_number":231,"context_line":"        self.put(self.default_request_url)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        self.delete(\u0027/projects/%(project_id)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FtW8%3D","line":230,"in_reply_to":"AAAAXH%2F%2Ftqo%3D","updated":"2014-04-18 03:18:05.000000000","message":"done.","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"984ad2c76e7ac8c097ec2fa545915916f65e1d0f","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        r \u003d self.get(\u0027/OS-EP-FILTER/endpoints/%(endpoint_id)s/projects\u0027 %"},{"line_number":237,"context_line":"                     {\u0027endpoint_id\u0027: self.endpoint_id},"},{"line_number":238,"context_line":"                     expected_status\u003d200)"},{"line_number":239,"context_line":"        self.assertValidProjectListResponse(r, expected_length\u003d0)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_remove_endpoint_project_assoc_when_del_dp(self):"},{"line_number":242,"context_line":"        self.put(self.default_request_url)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2Ftqk%3D","line":239,"updated":"2014-04-18 01:03:57.000000000","message":"This should return a 0 length list, so check that there is nothing returned.","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"5e41b67b4fb43eec07563343b55787f40763ec9f","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        r \u003d self.get(\u0027/OS-EP-FILTER/endpoints/%(endpoint_id)s/projects\u0027 %"},{"line_number":237,"context_line":"                     {\u0027endpoint_id\u0027: self.endpoint_id},"},{"line_number":238,"context_line":"                     expected_status\u003d200)"},{"line_number":239,"context_line":"        self.assertValidProjectListResponse(r, expected_length\u003d0)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_remove_endpoint_project_assoc_when_del_dp(self):"},{"line_number":242,"context_line":"        self.put(self.default_request_url)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FtXk%3D","line":239,"in_reply_to":"AAAAXH%2F%2Ftqk%3D","updated":"2014-04-18 03:18:05.000000000","message":"assertValidProjectListResponse will assert the length equals 0 via \u0027expected_length\u0027 parameter.","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"984ad2c76e7ac8c097ec2fa545915916f65e1d0f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        r \u003d self.get(\u0027/OS-EP-FILTER/projects/%(project_id)s/endpoints\u0027 % {"},{"line_number":248,"context_line":"                     \u0027project_id\u0027: self.default_domain_project_id},"},{"line_number":249,"context_line":"                     expected_status\u003d200)"},{"line_number":250,"context_line":"        self.assertValidEndpointListResponse(r, expected_length\u003d0)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class AssociateProjectEndpointFilterTokenRequestTestCase(TestExtensionCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2Ftqc%3D","line":250,"updated":"2014-04-18 01:03:57.000000000","message":"check that the endpoint is not in the list","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"5e41b67b4fb43eec07563343b55787f40763ec9f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        r \u003d self.get(\u0027/OS-EP-FILTER/projects/%(project_id)s/endpoints\u0027 % {"},{"line_number":248,"context_line":"                     \u0027project_id\u0027: self.default_domain_project_id},"},{"line_number":249,"context_line":"                     expected_status\u003d200)"},{"line_number":250,"context_line":"        self.assertValidEndpointListResponse(r, expected_length\u003d0)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class AssociateProjectEndpointFilterTokenRequestTestCase(TestExtensionCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FtXQ%3D","line":250,"in_reply_to":"AAAAXH%2F%2Ftqc%3D","updated":"2014-04-18 03:18:05.000000000","message":"Here assertValidEndpointListResponse will assert the length of the endpoint list equals 0.","commit_id":"392ca11ccadb0312dd8b80ce5bfcbf833498b14f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8ebffb881f4f1effeaabb73a117591699d660b26","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_remove_endpoint_project_assoc_when_delete_project(self):"},{"line_number":231,"context_line":"        self.put(self.default_request_url)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        self.delete(\u0027/projects/%(project_id)s\u0027 % {"},{"line_number":234,"context_line":"            \u0027project_id\u0027: self.default_domain_project_id})"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_8d79e031","line":232,"updated":"2014-07-01 18:48:34.000000000","message":"Could we do an assertion on a GET here to make sure the endpoint filter returns with a project in it?","commit_id":"b473969dda1ad243d33499cff894da9c79def2f9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8ebffb881f4f1effeaabb73a117591699d660b26","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_remove_endpoint_project_assoc_when_delete_endpoint(self):"},{"line_number":242,"context_line":"        self.put(self.default_request_url)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        self.delete(\u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":245,"context_line":"            \u0027endpoint_id\u0027: self.endpoint_id})"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_ad76a43c","line":243,"updated":"2014-07-01 18:48:34.000000000","message":"Same comment as above.","commit_id":"b473969dda1ad243d33499cff894da9c79def2f9"}]}
