)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"a6218411b6544391a7068d3dd2a8b3eea68f7ef2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Qiaowei Ren \u003cqiaowei.ren@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-29 16:55:06 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"xenapi: support the session when xenserver is master"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"current xenapi inspector is only support the session to master"},{"line_number":10,"context_line":"xenserver, and when xenserver is slave mode the session could"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5a5ae5dd_196adfee","line":7,"range":{"start_line":7,"start_character":46,"end_line":7,"end_character":52},"updated":"2016-02-05 16:09:29.000000000","message":"it seems that patch should be named \"xenapi: support the session when xenserver is slave\" doesn\u0027t it?","commit_id":"c6da6cf8b76a82373861a28c3307d162c47f82af"}],"ceilometer/compute/virt/xenapi/inspector.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9dfa0396ce61dd52a37dc02285fcfdf48a795a79","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def swap_xapi_host(url, host_addr):"},{"line_number":57,"context_line":"    \"\"\"Replace the XenServer address present in \u0027url\u0027 with \u0027host_addr\u0027.\"\"\""},{"line_number":58,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":59,"context_line":"    _netloc, sep, port \u003d temp_url.netloc.partition(\u0027:\u0027)"},{"line_number":60,"context_line":"    return url.replace(temp_url.netloc, \u0027%s%s%s\u0027 % (host_addr, sep, port))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_b4aadd6f","line":59,"updated":"2015-08-25 16:04:37.000000000","message":"You can use temp_url.hostname","commit_id":"9ccfe1ae9dfb73f1654cf5f984f764bdab1e98e5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9dfa0396ce61dd52a37dc02285fcfdf48a795a79","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \"\"\"Replace the XenServer address present in \u0027url\u0027 with \u0027host_addr\u0027.\"\"\""},{"line_number":58,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":59,"context_line":"    _netloc, sep, port \u003d temp_url.netloc.partition(\u0027:\u0027)"},{"line_number":60,"context_line":"    return url.replace(temp_url.netloc, \u0027%s%s%s\u0027 % (host_addr, sep, port))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def get_api_session():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_34232d5a","line":60,"updated":"2015-08-25 16:04:37.000000000","message":"This looks very fragile.\n\nUse the result of urlparse to create a new result with the host changed, and then use urlunsplit()","commit_id":"9ccfe1ae9dfb73f1654cf5f984f764bdab1e98e5"},{"author":{"_account_id":9581,"name":"Ren Qiaowei","email":"qiaowei.ren@intel.com","username":"qiaowei"},"change_message_id":"1962d50cc33e9324990e300e9a8af06da5bc8de1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \"\"\"Replace the XenServer address present in \u0027url\u0027 with \u0027host_addr\u0027.\"\"\""},{"line_number":58,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":59,"context_line":"    _netloc, sep, port \u003d temp_url.netloc.partition(\u0027:\u0027)"},{"line_number":60,"context_line":"    return url.replace(temp_url.netloc, \u0027%s%s%s\u0027 % (host_addr, sep, port))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def get_api_session():"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_6879afc7","line":60,"in_reply_to":"fa1b9901_34232d5a","updated":"2015-08-30 02:32:36.000000000","message":"yes. we can directly use temp_url.hostname instead of temp_url.netloc. Due to be very fragile, I will add unit test to verify it.","commit_id":"9ccfe1ae9dfb73f1654cf5f984f764bdab1e98e5"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"45ce4531ad6c41a09bd8ffc9cddc414198b0ea44","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            master \u003d e.details[1]"},{"line_number":84,"context_line":"            url \u003d swap_xapi_host(url, master)"},{"line_number":85,"context_line":"            session \u003d api.Session(url)"},{"line_number":86,"context_line":"            session.login_with_password(username, password)"},{"line_number":87,"context_line":"        else:"},{"line_number":88,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"},{"line_number":89,"context_line":"            raise XenapiException(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_1821a1fb","line":86,"updated":"2015-08-25 03:37:30.000000000","message":"should here also need a timeout check?","commit_id":"9ccfe1ae9dfb73f1654cf5f984f764bdab1e98e5"},{"author":{"_account_id":9581,"name":"Ren Qiaowei","email":"qiaowei.ren@intel.com","username":"qiaowei"},"change_message_id":"1962d50cc33e9324990e300e9a8af06da5bc8de1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            master \u003d e.details[1]"},{"line_number":84,"context_line":"            url \u003d swap_xapi_host(url, master)"},{"line_number":85,"context_line":"            session \u003d api.Session(url)"},{"line_number":86,"context_line":"            session.login_with_password(username, password)"},{"line_number":87,"context_line":"        else:"},{"line_number":88,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"},{"line_number":89,"context_line":"            raise XenapiException(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_487cebb4","line":86,"in_reply_to":"fa1b9901_1821a1fb","updated":"2015-08-30 02:32:36.000000000","message":"Yes. this check is necessary.","commit_id":"9ccfe1ae9dfb73f1654cf5f984f764bdab1e98e5"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"e4e7e429c90d3768bb500c5d856d5aefaaafce4b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"def swap_xapi_host(url, host_addr):"},{"line_number":53,"context_line":"    \"\"\"Replace the XenServer address present in \u0027url\u0027 with \u0027host_addr\u0027.\"\"\""},{"line_number":54,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":55,"context_line":"    return url.replace(temp_url.hostname, \u0027%s\u0027 % host_addr)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def get_api_session():"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_5ea5fe01","line":55,"range":{"start_line":55,"start_character":58,"end_line":55,"end_character":59},"updated":"2016-01-21 08:46:01.000000000","message":"call me nitpicking, what if url is http://myhttpxen.foo.com ? swap_xapi_host can not process that URL correctly.","commit_id":"370373125f390425b1a3cdbdfa1a518550a44be8"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"aa9fb6e690ddf89e3e72a2cc7cec5197f5e40bff","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            master \u003d e.details[1]"},{"line_number":76,"context_line":"            url \u003d swap_xapi_host(url, master)"},{"line_number":77,"context_line":"            session \u003d api.Session(url)"},{"line_number":78,"context_line":"            session.login_with_password(username, password)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"},{"line_number":81,"context_line":"            raise XenapiException(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_32498dd1","line":78,"updated":"2016-01-18 19:54:48.000000000","message":"what if this fails? we should catch it as well.","commit_id":"370373125f390425b1a3cdbdfa1a518550a44be8"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2a4e3330a8a508892d5d6b6bb8536c196b83086b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                session \u003d api.Session(url)"},{"line_number":79,"context_line":"                session.login_with_password(username, password)"},{"line_number":80,"context_line":"            except api.Failure as es:"},{"line_number":81,"context_line":"                raise XenapiException(_(\u0027Could not connect slave host: %s \u0027) %"},{"line_number":82,"context_line":"                                      es.details[0])"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_acd527ba","line":81,"updated":"2016-01-27 10:23:14.000000000","message":"A little nitpick from my side:\nAfter \"swap_xapi_host\" we connect to the master host, isn\u0027t it?","commit_id":"3f2767ce3cfe9d735949af10b79aa68c351d6535"},{"author":{"_account_id":9581,"name":"Ren Qiaowei","email":"qiaowei.ren@intel.com","username":"qiaowei"},"change_message_id":"146d845ac738823a7bb5cb82792197df39656cf5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                session \u003d api.Session(url)"},{"line_number":79,"context_line":"                session.login_with_password(username, password)"},{"line_number":80,"context_line":"            except api.Failure as es:"},{"line_number":81,"context_line":"                raise XenapiException(_(\u0027Could not connect slave host: %s \u0027) %"},{"line_number":82,"context_line":"                                      es.details[0])"},{"line_number":83,"context_line":"        else:"},{"line_number":84,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_e0de496c","line":81,"in_reply_to":"7a5de9d1_acd527ba","updated":"2016-01-29 15:39:55.000000000","message":"it should be slave.","commit_id":"3f2767ce3cfe9d735949af10b79aa68c351d6535"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"018210f442c760710769fdd388c3fa40a49f5cb0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":55,"context_line":"    temp_netloc \u003d temp_url.netloc.replace(temp_url.hostname, \u0027%s\u0027 % host_addr)"},{"line_number":56,"context_line":"    replaced \u003d temp_url._replace(netloc\u003dtemp_netloc)"},{"line_number":57,"context_line":"    return urlparse.urlunparse(replaced)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def get_api_session():"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_be0b5429","line":57,"range":{"start_line":57,"start_character":39,"end_line":57,"end_character":40},"updated":"2016-02-01 05:19:14.000000000","message":"I know for xenapi configuration this wouldn\u0027t be a problem, but for the generic url replace, \n\nswap_xapi_host(\"http://abc:abc@abc:433/abc\", \"ttt\")\n\nwould return unexpected result by changing the username/password too. Again, more corner test case would be nice. \n\nI wouldn\u0027t block this since xenapi requires usernamde/password from configuration option but not url.","commit_id":"c6da6cf8b76a82373861a28c3307d162c47f82af"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"292c1e3e9f8b19a51b61e2966fba08298a6e1c7d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                   else api.Session(url))"},{"line_number":74,"context_line":"        session.login_with_password(username, password)"},{"line_number":75,"context_line":"    except api.Failure as e:"},{"line_number":76,"context_line":"        if e.details[0] \u003d\u003d \u0027HOST_IS_SLAVE\u0027:"},{"line_number":77,"context_line":"            master \u003d e.details[1]"},{"line_number":78,"context_line":"            url \u003d swap_xapi_host(url, master)"},{"line_number":79,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_9e0ac888","line":76,"updated":"2016-02-29 18:14:15.000000000","message":"Sorry, I have not any expertise in xenapi and maybe my question looks silly:\nIs it possible if we connect to xenapi with \"unix://local\" but local node is slave of the any cluster? How I understand \nswap_xapi_host is useless in this case. If this behavior is not possible it\u0027s not an issue.","commit_id":"c6da6cf8b76a82373861a28c3307d162c47f82af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"326e088c0cf449b3aa208671a8b003210a5e4c9c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":55,"context_line":"    # The connection URL is served by XAPI and doesn\u0027t support having a"},{"line_number":56,"context_line":"    # path for the connection url after the port. And username/password"},{"line_number":57,"context_line":"    # will be pass separately. So the URL like \"http://abc:abc@abc:433/abc\""},{"line_number":58,"context_line":"    # should not appear for XAPI case."},{"line_number":59,"context_line":"    temp_netloc \u003d temp_url.netloc.replace(temp_url.hostname, \u0027%s\u0027 % host_addr)"},{"line_number":60,"context_line":"    replaced \u003d temp_url._replace(netloc\u003dtemp_netloc)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_ba4bf858","line":57,"range":{"start_line":57,"start_character":14,"end_line":57,"end_character":18},"updated":"2016-03-07 11:52:06.000000000","message":"s/pass/passed/","commit_id":"f13b1accfb1ab86a5ef30ac2b65397389add8339"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"8ba8f709b5e4bb6bcee6a13a384d3c3ed2bf728e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    \"\"\"Replace the XenServer address present in \u0027url\u0027 with \u0027host_addr\u0027.\"\"\""},{"line_number":54,"context_line":"    temp_url \u003d urlparse.urlparse(url)"},{"line_number":55,"context_line":"    # The connection URL is served by XAPI and doesn\u0027t support having a"},{"line_number":56,"context_line":"    # path for the connection url after the port. And username/password"},{"line_number":57,"context_line":"    # will be pass separately. So the URL like \"http://abc:abc@abc:433/abc\""},{"line_number":58,"context_line":"    # should not appear for XAPI case."},{"line_number":59,"context_line":"    temp_netloc \u003d temp_url.netloc.replace(temp_url.hostname, \u0027%s\u0027 % host_addr)"},{"line_number":60,"context_line":"    replaced \u003d temp_url._replace(netloc\u003dtemp_netloc)"},{"line_number":61,"context_line":"    return urlparse.urlunparse(replaced)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_4620284a","line":58,"range":{"start_line":56,"start_character":46,"end_line":58,"end_character":38},"updated":"2016-03-07 08:22:38.000000000","message":"with this kind of feedback from xen community, then I think it\u0027s ready to go","commit_id":"f13b1accfb1ab86a5ef30ac2b65397389add8339"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"326e088c0cf449b3aa208671a8b003210a5e4c9c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    except api.Failure as e:"},{"line_number":80,"context_line":"        if e.details[0] \u003d\u003d \u0027HOST_IS_SLAVE\u0027:"},{"line_number":81,"context_line":"            master \u003d e.details[1]"},{"line_number":82,"context_line":"            url \u003d swap_xapi_host(url, master)"},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                session \u003d api.Session(url)"},{"line_number":85,"context_line":"                session.login_with_password(username, password)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_da67e423","line":82,"updated":"2016-03-07 11:52:06.000000000","message":"maybe we should log a info or warning to indicate we are attempting to connect to another node rather than the configured one?","commit_id":"f13b1accfb1ab86a5ef30ac2b65397389add8339"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"326e088c0cf449b3aa208671a8b003210a5e4c9c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                session \u003d api.Session(url)"},{"line_number":85,"context_line":"                session.login_with_password(username, password)"},{"line_number":86,"context_line":"            except api.Failure as es:"},{"line_number":87,"context_line":"                raise XenapiException(_(\u0027Could not connect slave host: %s \u0027) %"},{"line_number":88,"context_line":"                                      es.details[0])"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_5a22b4ba","line":87,"updated":"2016-03-07 11:52:06.000000000","message":"s/connect/connect to/","commit_id":"f13b1accfb1ab86a5ef30ac2b65397389add8339"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"326e088c0cf449b3aa208671a8b003210a5e4c9c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            msg \u003d _(\"Could not connect to XenAPI: %s\") % e.details[0]"},{"line_number":91,"context_line":"            raise XenapiException(msg)"},{"line_number":92,"context_line":"    return session"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class XenapiInspector(virt_inspector.Inspector):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_7526a317","line":92,"range":{"start_line":92,"start_character":4,"end_line":92,"end_character":10},"updated":"2016-03-07 11:52:06.000000000","message":"how about refactor to:\n\ntry:\n    return _get_session(url, username, password)\nexcept api.Failure as e:\n    if e.details[0] \u003d\u003d \u0027HOST_IS_SLAVE\u0027:\n        url \u003d swap_xapi_host(url, e.details[1])\n        LOG.info(_LI(\"Switch to Xen master node %s\"), e.details[1])\n        return _get_session(url, username, password)\n    else:\n        raise\n\ndef _get_session(url, username, password)\n    try:\n        session \u003d (api.xapi_local() if url \u003d\u003d \u0027unix://local\u0027\n                   else api.Session(url))\n        session.login_with_password(username, password)\n        return session\n    except api.Failure as e:\n        raise XenapiException(_(\"Could not connect to XenAPI: %s\") % e.details[0])","commit_id":"f13b1accfb1ab86a5ef30ac2b65397389add8339"}],"ceilometer/tests/unit/compute/virt/xenapi/test_inspector.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"aa9fb6e690ddf89e3e72a2cc7cec5197f5e40bff","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestSwapXapiHost(base.BaseTestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_swapping(self):"},{"line_number":27,"context_line":"        self.assertEqual("},{"line_number":28,"context_line":"            \"http://otherserver:8765/somepath\","},{"line_number":29,"context_line":"            xenapi_inspector.swap_xapi_host("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_f203f574","line":26,"updated":"2016-01-18 19:54:48.000000000","message":"i\u0027m not sure how much value these tests have. would be better to mock xen returning an error and it resolving to new url","commit_id":"370373125f390425b1a3cdbdfa1a518550a44be8"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"47b1f0c8042d627b60700cc9c5214c7f66aced2e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestSwapXapiHost(base.BaseTestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_swapping(self):"},{"line_number":27,"context_line":"        self.assertEqual("},{"line_number":28,"context_line":"            \"http://otherserver:8765/somepath\","},{"line_number":29,"context_line":"            xenapi_inspector.swap_xapi_host("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_703ffd25","line":26,"range":{"start_line":26,"start_character":26,"end_line":26,"end_character":28},"updated":"2016-01-27 12:41:58.000000000","message":"how about adding a new test case with\n\nxenapi_inspector.swap_xapi_host(\"http://someserver/someserver\",\u0027otherserver\u0027))\n\nto see if the swap_xapi_host is working correctly","commit_id":"3f2767ce3cfe9d735949af10b79aa68c351d6535"},{"author":{"_account_id":9581,"name":"Ren Qiaowei","email":"qiaowei.ren@intel.com","username":"qiaowei"},"change_message_id":"146d845ac738823a7bb5cb82792197df39656cf5","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestSwapXapiHost(base.BaseTestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_swapping(self):"},{"line_number":27,"context_line":"        self.assertEqual("},{"line_number":28,"context_line":"            \"http://otherserver:8765/somepath\","},{"line_number":29,"context_line":"            xenapi_inspector.swap_xapi_host("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_40ce3db5","line":26,"range":{"start_line":26,"start_character":26,"end_line":26,"end_character":28},"in_reply_to":"7a5de9d1_703ffd25","updated":"2016-01-29 15:39:55.000000000","message":"Done","commit_id":"3f2767ce3cfe9d735949af10b79aa68c351d6535"}]}
